save caret position when ending a list
[fnpeditor.git] / src / editor / modules / documentCanvas / canvas / canvas.js
index 3dac88f..7ebecc8 100644 (file)
@@ -97,6 +97,15 @@ var Canvas = function(wlxmlDocument, elements, metadata, sandbox) {
 
 $.extend(Canvas.prototype, Backbone.Events, {
 
 
 $.extend(Canvas.prototype, Backbone.Events, {
 
+    createElementType: function(elementPrototype) {
+        /* TODO: reconcile this with ElementsRegister behavior */
+        var Constructor = function() {
+            documentElement.DocumentNodeElement.apply(this, Array.prototype.slice.call(arguments, 0));
+        };
+        Constructor.prototype = elementPrototype;
+        return Constructor;
+    },
+
     getElementOffset: function(element) {
         return element.dom.offset().top - this.dom.offset().top;
     },
     getElementOffset: function(element) {
         return element.dom.offset().top - this.dom.offset().top;
     },
@@ -153,6 +162,11 @@ $.extend(Canvas.prototype, Backbone.Events, {
             //return DocumentTextElement.fromHTMLElement(htmlElement, canvas);
             return $element.data('canvas-element');
         }
             //return DocumentTextElement.fromHTMLElement(htmlElement, canvas);
             return $element.data('canvas-element');
         }
+
+        /* experimental */
+        if($element.parent().data('canvas-element')) {
+            return $element.parent().data('canvas-element');
+        }
     },
 
     reloadRoot: function() {
     },
 
     reloadRoot: function() {
@@ -165,7 +179,9 @@ $.extend(Canvas.prototype, Backbone.Events, {
 
     triggerKeyEvent: function(keyEvent, selection) {
         selection = selection || this.getSelection();
 
     triggerKeyEvent: function(keyEvent, selection) {
         selection = selection || this.getSelection();
-        if(selection && (selection.type === 'caret' || selection.type === 'textSelection') && selection.toDocumentFragment().isValid()) {
+        if(selection && (
+            (selection.type === 'caret' || selection.type === 'textSelection') && selection.toDocumentFragment().isValid()
+            || selection.type == 'nodeSelection')) {
             keyboard.handleKeyEvent(keyEvent, selection);
         }
     },
             keyboard.handleKeyEvent(keyEvent, selection);
         }
     },
@@ -538,18 +554,18 @@ $.extend(Cursor.prototype, {
         return this.getSelectionAnchor();
     },
     getSelectionStart: function() {
         return this.getSelectionAnchor();
     },
     getSelectionStart: function() {
-        return this.getSelectionBoundry('start');
+        return this.getSelectionBoundary('start');
     },
     getSelectionEnd: function() {
     },
     getSelectionEnd: function() {
-        return this.getSelectionBoundry('end');
+        return this.getSelectionBoundary('end');
     },
     getSelectionAnchor: function() {
     },
     getSelectionAnchor: function() {
-        return this.getSelectionBoundry('anchor');
+        return this.getSelectionBoundary('anchor');
     },
     getSelectionFocus: function() {
     },
     getSelectionFocus: function() {
-        return this.getSelectionBoundry('focus');
+        return this.getSelectionBoundary('focus');
     },
     },
-    getSelectionBoundry: function(which) {
+    getSelectionBoundary: function(which) {
         /* globals window */
         var selection = window.getSelection(),
             anchorElement = this.canvas.getDocumentElement(selection.anchorNode),
         /* globals window */
         var selection = window.getSelection(),
             anchorElement = this.canvas.getDocumentElement(selection.anchorNode),