Refactoring
[fnpeditor.git] / modules / documentCanvas / canvas / documentElement.js
index 9178a5a..5eef4b5 100644 (file)
@@ -148,14 +148,6 @@ var manipulate = function(e, params, action) {
 
 DocumentNodeElement.prototype = new DocumentElement();
 
-var addParts = function(parts, parent) {
-    var parentChildren = parent.contents();
-    if(parentChildren.length > 2 && parentChildren[0].nodeType === Node.TEXT_NODE && parentChildren[1].nodeType == Node.TEXT_NODE) {
-        $(parentChildren[0]).after(parts);
-    } else {
-        parent.prepend(parts);
-    }
-}
 
 $.extend(DocumentNodeElement.prototype, {
     data: function() {
@@ -165,7 +157,7 @@ $.extend(DocumentNodeElement.prototype, {
             return dom.removeData(args[1]);
         return dom.data.apply(dom, arguments);
     },
-    toXML: function(parent, level) {
+    toXML: function(level) {
         var node = $('<' + this.getWlxmlTag() + '>');
 
         if(this.getWlxmlClass())
@@ -181,39 +173,61 @@ $.extend(DocumentNodeElement.prototype, {
 
         var addFormatting = function() {
             var toret = $('<div>');
+            var formattings = {};
 
-            if(this.data('orig-before') && this.data('orig-before').length) {
-                this.data('orig-before').forEach(function(toAdd) {
-                    if(toAdd)
-                        toret.prepend(document.createTextNode(toAdd));
-                });
+            if(this.data('orig-before') !== undefined) {
+                if(this.data('orig-before')) {
+                    toret.prepend(document.createTextNode(this.data('orig-before')));
+                }
             } else if(level && this.getWlxmlTag() !== 'span') {
                 toret.append('\n' + (new Array(level * 2 + 1)).join(' '));
             }
-            if(this.data('orig-append') && this.data('orig-append').length) {
-                this.data('orig-append').forEach(function(toAdd) {
-                    if(toAdd)
-                        node.prepend(toAdd);
-                });
-            } else if(this.getWlxmlTag() !== 'span'){
+
+            toret.append(node);
+
+            if(this.data('orig-after')) {
+                toret.append(document.createTextNode(this.data('orig-after')));
+            }
+
+            /* Inside node */
+            if(this.data('orig-begin')) {
+                node.prepend(this.data('orig-begin'));
+                formattings.begin = true;
+            }
+
+            if(this.data('orig-end') !== undefined) {
+                if(this.data('orig-end')) {
+                    node.append(this.data('orig-end'));
+                }
+            } else if(this.getWlxmlTag() !== 'span' && children.length){
                 node.append('\n' + (new Array(level * 2 + 1)).join(' '));
             }
-            toret.append(node);
-            return toret.contents();
+           
+            return {parts: toret.contents(), formattings: formattings};
         }.bind(this);
 
-        var parts = addFormatting(node);
         
-        var children = this.children();
+        
+        var children = this.children(),
+            childParts;
+
+        var formatting = addFormatting(node);
+
         for(var i = children.length - 1; i >= 0; i--) {
-            children[i].toXML(node, level + 1);
+            childParts = children[i].toXML(level + 1);
+            if(typeof childParts === 'string')
+                childParts = [document.createTextNode(childParts)];
+
+            if(formatting.formattings.begin) {
+                $(node.contents()[0]).after(childParts);
+            } else
+                node.prepend(childParts);
         }
-
-        addParts(parts, parent);
+        return formatting.parts;
     },
     append: function(params) {
         if(params.tag !== 'span')
-            this.data('orig-append', []);
+            this.data('orig-ends', undefined);
         return manipulate(this, params, 'append');
     },
     before: function(params) {
@@ -278,7 +292,7 @@ $.extend(DocumentNodeElement.prototype, {
             this.dom().removeAttr('wlxml-class');
     },
     is: function(what) {
-        if(what === 'list' && _.contains(['list-items', 'list-items-enum'], this.dom().attr('wlxml-class')))
+        if(what === 'list' && _.contains(['list.items', 'list.items.enum'], this.getWlxmlClass()))
             return true;
         return false;
     },
@@ -326,7 +340,7 @@ DocumentTextElement.prototype = new DocumentElement();
 
 $.extend(DocumentTextElement.prototype, {
     toXML: function(parent) {
-        addParts(this.getText(), parent);
+        return this.getText();
     },
     _setupDOMHandler: function(htmlElement) {
         var $element = $(htmlElement);