From: Aleksander Ɓukasz Date: Wed, 10 Jul 2013 11:06:07 +0000 (+0200) Subject: Basic list items extracting X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/3303f7533b86892774f011ac54bfd69c6092ea5a?ds=sidebyside;hp=00d1285a2038e326246c5f5ff3bca7728f67925b Basic list items extracting --- diff --git a/modules/documentCanvas/canvas/canvas.js b/modules/documentCanvas/canvas/canvas.js index 9bf47e8..a274fa4 100644 --- a/modules/documentCanvas/canvas/canvas.js +++ b/modules/documentCanvas/canvas/canvas.js @@ -167,6 +167,42 @@ $.extend(Canvas.prototype.list, { element.detach(); listElement.append(element); }); + }, + extractItems: function(params) { + var list = params.element1.parent(); + if(!list.is('list') || !(list.sameNode(params.element2.parent()))) + return false; + + var idx1 = list.childIndex(params.element1), + idx2 = list.childIndex(params.element2), + extractedItems = [], + succeedingItems = [], + items = list.children(), + i; + + for(i = Math.min(idx1,idx2); i <= Math.max(idx1, idx2); i++) { + extractedItems.push(items[i]); + items[i].detach(); + } + for(i = i; i < items.length; i++) { + succeedingItems.push(items[i]); + items[i].detach(); + } + + var last = list; + extractedItems.forEach(function(item) { + item.setWlxmlClass(null); // + last.after(item); + last = item; + }); + + var secondList = documentElement.DocumentNodeElement.create({tag: 'div', klass:'list-items'}, this); + + last.after(secondList); + + succeedingItems.forEach(function(item) { + secondList.append(item); + }); } }); diff --git a/modules/documentCanvas/canvas/canvas.test3.js b/modules/documentCanvas/canvas/canvas.test3.js index 3b251f6..9a549df 100644 --- a/modules/documentCanvas/canvas/canvas.test3.js +++ b/modules/documentCanvas/canvas/canvas.test3.js @@ -446,6 +446,45 @@ describe('Canvas', function() { expect(child.getWlxmlClass()).to.equal('item', 'list childs have wlxml class of item'); }); }); + + it('allows extracting continuous list of list items from its list', function() { + var c = canvas.fromXML('\ +
\ +
\ +
0
\ +
1
\ +
2
\ +
3
\ +
\ +
'), + list = c.doc().children()[0], + item1 = list.children()[1], + item2 = list.children()[2]; + + c.list.extractItems({element1: item1, element2: item2}); + + var section = c.doc(), + list1 = section.children()[0], + oldItem1 = section.children()[1], + oldItem2 = section.children()[2], + list2 = section.children()[3]; + + expect(section.children().length).to.equal(4, 'section contains four children'); + + expect(list1.is('list')).to.equal(true, 'first section child is a list'); + expect(list1.children().length).to.equal(1, 'first list has one child'); + expect(list1.children()[0].children()[0].getText()).to.equal('0', 'first item of the first list is a first item of the original list'); + + expect(oldItem1.children()[0].getText()).to.equal('1', 'first item got extracted'); + expect(oldItem1.getWlxmlClass() === undefined).to.equal(true, 'first extracted element has no wlxml class'); + + expect(oldItem2.children()[0].getText()).to.equal('2', 'second item got extracted'); + expect(oldItem2.getWlxmlClass() === undefined).to.equal(true, 'second extracted element has no wlxml class'); + + expect(list2.is('list')).to.equal(true, 'last section child is a list'); + expect(list2.children().length).to.equal(1, 'second list has one child'); + expect(list2.children()[0].children()[0].getText()).to.equal('3', 'first item of the second list is a last item of the original list'); + }); }); });