From 898f8bf5c4bf5e553994ee7d7cf320fcc0d1bc12 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Tue, 11 Feb 2014 11:13:04 +0100 Subject: [PATCH] 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. --- src/wlxml/extensions/list/list.js | 8 ++++++-- src/wlxml/extensions/list/list.test.js | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) 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('
Alicehasa cat
'), + 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('\
\ -- 2.20.1