Wrapping text spanning multiple sibling DocumentTextNodes
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Mon, 8 Jul 2013 13:35:08 +0000 (15:35 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Mon, 8 Jul 2013 13:35:08 +0000 (15:35 +0200)
modules/documentCanvas/canvas/canvas.js
modules/documentCanvas/canvas/canvas.test3.js

index 65cacca..3cb4db5 100644 (file)
@@ -41,20 +41,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;
     }
 
index 23fd35e..4a7c661 100644 (file)
@@ -232,6 +232,35 @@ describe('Canvas', function() {
                     expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement);
                     expect(children[2].getText()).to.equal('cat');
                 });
+
+                it('wraps text spanning multiple sibling DocumentTextNodes', function() {
+                    var c = canvas.fromXML('<section>Alice has a <span>small</span> cat</section>'),
+                        section = c.doc(),
+                        wrapper = c.wrapText({
+                            inside: section, 
+                            _with: {tag: 'span', klass: 'some.class'},
+                            offsetStart: 6,
+                            offsetEnd: 4,
+                            textNodeIdx: [0,2]
+                        });
+
+                    expect(section.children().length).to.equal(2);
+                    expect(section.children()[0]).to.be.instanceOf(documentElement.DocumentTextElement);
+                    expect(section.children()[0].getText()).to.equal('Alice ');
+
+                    var wrapper2 = section.children()[1];
+                    expect(wrapper2.sameNode(wrapper)).to.be.true;
+
+                    var wrapperChildren = wrapper.children();
+                    expect(wrapperChildren.length).to.equal(3);
+                    expect(wrapperChildren[0].getText()).to.equal('has a ');
+
+                    expect(wrapperChildren[1]).to.be.instanceOf(documentElement.DocumentNodeElement);
+                    expect(wrapperChildren[1].children().length).to.equal(1);
+                    expect(wrapperChildren[1].children()[0].getText()).to.equal('small');
+
+                    expect(wrapperChildren[2].getText()).to.equal(' cat');
+                });
             });
         });