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;
}
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');
+ });
});
});