Some white space in the wlxml source handling rules
[fnpeditor.git] / modules / documentCanvas / canvas / canvas.js
index 65cacca..4326655 100644 (file)
@@ -9,6 +9,34 @@ define([
 var Canvas = function(xml) {
     xml = $.parseXML(xml);
     this.d = xml !== null ? $(xml.childNodes[0]) : null;
+    if(this.d) {
+        var wrapper = $('<div>');
+        wrapper.append(this.d);
+        wrapper.find(':not(iframe)').addBack().contents()
+            .filter(function() {return this.nodeType === Node.TEXT_NODE})
+            .each(function() {
+
+                var el = $(this);
+                
+                // TODO: use DocumentElement API
+                var spanParent = el.parent().prop('tagName') === 'span',
+                    spanBefore = el.prev().length > 0  && $(el.prev()[0]).prop('tagName') === 'span',
+                    spanAfter = el.next().length > 0 && $(el.next()[0]).prop('tagName') === 'span';
+                    
+                if(spanParent || spanBefore || spanAfter) {
+                    var startSpace = /\s/g.test(this.data.substr(0,1));
+                    var endSpace = /\s/g.test(this.data.substr(-1)) && this.data.length > 1;
+                    var trimmed = $.trim(this.data);
+                    this.data = (startSpace && (spanParent || spanBefore) ? ' ' : '')
+                                + trimmed
+                                + (endSpace && (spanParent || spanAfter) ? ' ' : '');
+
+                } else {
+                    this.data = $.trim(this.data);
+                }
+            });
+        this.d.unwrap();
+    };
 };
 
 $.extend(Canvas.prototype, {
@@ -24,7 +52,6 @@ $.extend(Canvas.prototype, {
         if(typeof params.textNodeIdx === 'number')
             params.textNodeIdx = [params.textNodeIdx];
         
-        //var container = params.inside.dom(),
         var childrenInside = params.inside.children(),
             idx1 = Math.min.apply(Math, params.textNodeIdx),
             idx2 = Math.max.apply(Math, params.textNodeIdx),
@@ -41,20 +68,23 @@ $.extend(Canvas.prototype, {
         textNode1.after(wrapperElement);
         textNode1.detach();
         
-        wrapperElement.before({text:prefixOutside});
+        if(prefixOutside.length > 0)
+            wrapperElement.before({text:prefixOutside});
         if(sameNode) {
             var core = textNode1.getText().substr(params.offsetStart, params.offsetEnd - params.offsetStart);
             wrapperElement.append({text: core});
         } else {
             textNode2.detach();
-            wrapperElement.append({text: prefixInside});
+            if(prefixInside.length > 0)
+                wrapperElement.append({text: prefixInside});
             for(var i = idx1 + 1; i < idx2; i++) {
                 wrapperElement.append(childrenInside[i]);
             }
-            
-            wrapperElement.append({text: suffixInside});
+            if(suffixInside.length > 0)
+                wrapperElement.append({text: suffixInside});
         }
-        wrapperElement.after({text: suffixOutside});
+        if(suffixOutside.length > 0)
+            wrapperElement.after({text: suffixOutside});
         return wrapperElement;
     }