Dividing DocumentTextElement with DocumentNodeElement
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 2 Aug 2013 08:44:38 +0000 (10:44 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 2 Aug 2013 08:44:38 +0000 (10:44 +0200)
modules/documentCanvas/canvas/canvas.test3.js
modules/documentCanvas/canvas/documentElement.js

index 9877bb6..95698d0 100644 (file)
@@ -388,6 +388,21 @@ describe('Canvas', function() {
                     expect(children[1]).to.be.instanceOf(documentElement.DocumentTextElement);
                     expect(children[1].getText()).to.equal('Alice');
                 });
+
+                it('can divide DocumentTextElement with a new DocumentNodeElement', function() {
+                    var c = canvas.fromXML('<section>Alice has a cat</section>'),
+                        section = c.doc(),
+                        text = section.children()[0];
+
+                    var returned = text.divide({tag: 'aside', klass: 'footnote', offset: 5}),
+                        sectionChildren = section.children(),
+                        lhsText = sectionChildren[0],
+                        rhsText = sectionChildren[2];
+
+                    expect(lhsText.getText()).to.equal('Alice');
+                    expect(returned.sameNode(sectionChildren[1]));
+                    expect(rhsText.getText()).to.equal(' has a cat');
+                });
             });
 
             describe('Splitting text', function() {
index 5eef4b5..c6c9f22 100644 (file)
@@ -456,6 +456,22 @@ $.extend(DocumentTextElement.prototype, {
 
         return {first: parentElement, second: newElement};
     },
+    divide: function(params) {
+        var myText = this.getText();
+        
+        if(params.offset <= 0 || params.offset >= myText.length)
+            return;
+
+        var lhsText = myText.substr(0, params.offset),
+            rhsText = myText.substr(params.offset),
+            newElement = DocumentNodeElement.create({tag: params.tag, klass: params.klass}, this.canvas),
+            rhsTextElement = DocumentTextElement.create({text: rhsText});
+
+        this.setText(lhsText);
+        this.after(newElement);
+        newElement.after(rhsTextElement);
+        return newElement;
+    }
 });
 
 return {