From: Aleksander Ɓukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Date: Tue, 11 Feb 2014 10:13:04 +0000 (+0100)
Subject: wlxml: fixing bug in a list extension
X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/898f8bf5c4bf5e553994ee7d7cf320fcc0d1bc12?ds=inline

wlxml: fixing bug in a list extension

Pointing a text node as a starting point for a new list caused DOM
manipulation error in the document as it was trying to insert list
node into the wrapping node of said text node.
---

diff --git a/src/wlxml/extensions/list/list.js b/src/wlxml/extensions/list/list.js
index 99cacb1..107743a 100644
--- a/src/wlxml/extensions/list/list.js
+++ b/src/wlxml/extensions/list/list.js
@@ -38,12 +38,16 @@ extension.document.transformations.createList = {
             nodeIndexes = [params.node1.getIndex(), params.node2.getIndex()].sort(function(a,b) { return a-b; }),
             nodesToWrap = [],
             listNode = params.node1.document.createDocumentNode({tagName: 'div', attrs: {'class': 'list'}}),
+            listPlacePtr = params.node1,
             node, i;
-
+        
         for(i = nodeIndexes[0]; i <= nodeIndexes[1]; i++) {
             node = parentContents[i];
             if(node.nodeType === Node.TEXT_NODE) {
                 node = node.wrapWith({tagName: 'div', attrs: {'class': 'item'}});
+                if(i === nodeIndexes[0]) {
+                    listPlacePtr = node;
+                }
             } else {
                 node.setClass('item');
             }
@@ -60,7 +64,7 @@ extension.document.transformations.createList = {
             toInsert = listNode;
         }
 
-        params.node1.before(toInsert);
+        listPlacePtr.before(toInsert);
 
         nodesToWrap.forEach(function(node) {
             listNode.append(node);
diff --git a/src/wlxml/extensions/list/list.test.js b/src/wlxml/extensions/list/list.test.js
index 87c47c7..396600b 100644
--- a/src/wlxml/extensions/list/list.test.js
+++ b/src/wlxml/extensions/list/list.test.js
@@ -60,6 +60,15 @@ describe('Lists extension', function() {
             expect(child3.contents()[0].getText()).to.equal('cat');
         });
 
+        it('Handles text nodes on the boundries', function() {
+            var doc = getDocumentFromXML('<section>Alice<span>has</span>a cat</section>'),
+                textNode1 = doc.root.contents()[0],
+                textNode2 = doc.root.contents()[2];
+            doc.createList({node1: textNode1, node2: textNode2});
+            expect(doc.root.contents().length).to.equal(1);
+            expect(doc.root.contents()[0].is('list')).to.equal(true);
+        });
+
         it('allows creating nested list from existing sibling list items', function() {
             var doc = getDocumentFromXML('\
                 <section>\