canvas manager wip
[fnpeditor.git] / modules / documentCanvas / canvas.js
index 2d364ac..a15bb2c 100644 (file)
@@ -9,13 +9,14 @@ define([
 'use strict';\r
 \r
 var Canvas = function(xml) {\r
-    this.xml = xml;\r
     this.dom = $(template);\r
-    \r
-    this.content = this.dom.find('#rng-module-documentCanvas-content')\r
-    \r
-    \r
-    this.content.html(transformations.fromXML.getHTMLTree(xml));\r
+    this.content = this.dom.find('#rng-module-documentCanvas-content');\r
+    this.setXML(xml);\r
+}\r
+\r
+Canvas.prototype.setXML = function(xml) {\r
+    this.xml = xml;\r
+    this.content.html(transformations.fromXML.getHTMLTree(xml));  \r
 }\r
 \r
 Canvas.prototype.toXML = function() {\r
@@ -68,22 +69,40 @@ Canvas.prototype.insertNode = function(options) {
 }\r
 \r
 Canvas.prototype.splitNode = function(options) {\r
-    var element = $(this.content.find('#' + options.node.id).get(0));\r
+    options = _.extend({textNodeIdx: 0}, options);\r
+    \r
+    var nodeToSplit = $(this.content.find('#' + options.node.id).get(0));\r
     \r
-    var elementContents = element.contents();\r
-    if(elementContents.length !== 1 || elementContents.get(0).nodeType != 3)\r
+    var nodeContents = nodeToSplit.contents();\r
+    if(nodeContents.length === 0 || \r
+       nodeContents.length - 1 < options.textNodeIdx || \r
+       nodeContents.get(options.textNodeIdx).nodeType != 3)\r
         return false;\r
-    var textElement = elementContents.get(0);\r
     \r
-    var prefix = textElement.data.substr(0, options.offset);\r
-    var suffix = textElement.data.substr(options.offset);\r
-    var prefixNode = this._createNode(element.attr('wlxml-tag'), element.attr('wlxml-class'));\r
-    var suffixNode = this._createNode(element.attr('wlxml-tag'), element.attr('wlxml-class'));\r
-    prefixNode.text(prefix);\r
-    suffixNode.text(suffix);\r
-    element.before(prefixNode);\r
-    element.after(suffixNode);\r
-    element.remove();\r
+    var textNode = $(nodeContents.get(options.textNodeIdx));\r
+\r
+    var succeedingNodes = [];\r
+    var passed = false;\r
+    nodeContents.each(function() {\r
+        var node = this;\r
+        if(passed)\r
+            succeedingNodes.push(node);\r
+        if(node.isSameNode(textNode.get(0)))\r
+            passed = true;\r
+    });\r
+    \r
+    var prefix = textNode.text().substr(0, options.offset);\r
+    var suffix = textNode.text().substr(options.offset);\r
+    \r
+    textNode.before(prefix);\r
+    textNode.remove();\r
+    \r
+    var newNode = this._createNode(nodeToSplit.attr('wlxml-tag'), nodeToSplit.attr('wlxml-class'));\r
+    newNode.append(suffix);\r
+    succeedingNodes.forEach(function(node) {\r
+        newNode.append(node)\r
+    });\r
+    nodeToSplit.after(newNode);\r
 }\r
 \r
 Canvas.prototype.createList = function(options) {\r