Fixing wrapping nodes with subnodes
[fnpeditor.git] / modules / documentCanvas / canvasManager.js
index b6a316e..aff3b46 100644 (file)
@@ -102,18 +102,32 @@ Manager.prototype.insertNewNode = function(wlxmlTag, wlxmlClass) {
     if(selection.getRangeAt(0).collapsed) {\r
     \r
     } else {\r
+        var textNodeIdx;\r
+        var parent = $(selection.anchorNode).parent();\r
         var offsetStart = selection.anchorOffset;\r
         var offsetEnd = selection.focusOffset;\r
-        if(offsetStart > offsetEnd) {\r
-            var tmp = offsetStart;\r
-            offsetStart = offsetEnd;\r
-            offsetEnd = tmp;\r
+        \r
+        if(selection.anchorNode === selection.focusNode) {\r
+            if(offsetStart > offsetEnd) {\r
+                var tmp = offsetStart;\r
+                offsetStart = offsetEnd;\r
+                offsetEnd = tmp;\r
+            }\r
+            textNodeIdx = parent.contents().index($(selection.anchorNode));\r
+        } else {\r
+            if(parent.contents().index($(selection.anchorNode)) > parent.contents().index($(selection.focusNode))) {\r
+                offsetStart = selection.focusOffset;\r
+                offsetEnd = selection.anchorOffset;\r
+            }\r
+            textNodeIdx = [parent.contents().index($(selection.anchorNode)), parent.contents().index($(selection.focusNode))];\r
         }\r
+        \r
         var wrapper = canvasNode.create({tag: wlxmlTag, klass: wlxmlClass});\r
-        this.canvas.nodeWrap({inside: canvasNode.create($(selection.anchorNode).parent()),\r
+        this.canvas.nodeWrap({inside: canvasNode.create(parent),\r
                               _with: wrapper,\r
                               offsetStart: offsetStart,\r
-                              offsetEnd: offsetEnd\r
+                              offsetEnd: offsetEnd,\r
+                              textNodeIdx: textNodeIdx\r
                             });\r
         this.selectNode(wrapper, {movecaret: 'end'});\r
     }\r
@@ -186,7 +200,7 @@ Manager.prototype.onEnterKey = function(e) {
 \r
     if(pos.isAtEnd) {\r
         newNode = canvasNode.create({tag: pos.parentNode.attr('wlxml-tag'), klass: pos.parentNode.attr('wlxml-class')});\r
-        this.canvas.nodeInsertAfter({node: newNode, after: canvas.getNodeById(pos.parentNode.attr('id'))});\r
+        this.canvas.nodeInsertAfter({node: newNode, after: this.canvas.getNodeById(pos.parentNode.attr('id'))});\r
     } else {\r
         newNode = this.canvas.nodeSplit({node: contextNode, textNodeIdx: pos.textNodeIndex, offset: pos.textNodeOffset});\r
     }\r
@@ -217,17 +231,17 @@ Manager.prototype.command = function(command, meta) {
     \r
     if(command === 'createList') {\r
         var node = canvasNode.create(pos.parentNode);\r
-        if(window.getSelection().getRangeAt().collapsed && this.canvas.nodeInsideList({node: node})) {\r
+        if(window.getSelection().getRangeAt(0).collapsed && this.canvas.nodeInsideList({node: node})) {\r
             this.canvas.listRemove({pointer: node});\r
             this.selectNode(node, {movecaret: 'end'});\r
             this.sandbox.publish('contentChanged');\r
         }\r
         else {\r
-            if(!this.canvas.nodeInsideList({node: node})) {\r
+            //if(!this.canvas.nodeInsideList({node: node})) {\r
                 this.canvas.listCreate({start: node, end: canvasNode.create(pos.focusNode), type: meta});\r
                 this.selectNode(node, {movecaret: 'end'});\r
                 this.sandbox.publish('contentChanged');\r
-            }\r
+            //}\r
         }\r
     }\r
 \r