2 'libs/jquery-1.9.1.min',
5 'modules/documentCanvas/canvas',
6 'modules/documentCanvas/canvasNode'
7 ], function($, chai, utils, canvas, canvasNode) {
11 var assert = chai.assert;
12 var assertDomEqual = utils.assertDomEqual;
15 suite('Quering nodes', function() {
16 test('getting preceding node', function() {
17 var c = canvas.create('<div wlxml-tag="section"><div wlxml-tag="p">a</div><div wlxml-tag="p">b</div></div>');
18 var secondP = c.findNodes({tag: 'p'})[1];
19 var firstP = c.getPrecedingNode({node: secondP});
20 assert.equal(firstP.getContent(), 'a');
23 test('pervious node of node without "previous siblings" is its parent', function() {
24 var c = canvas.create('<div wlxml-tag="section"><div wlxml-tag="p">a</div></div>');
25 var paragraph = c.findNodes({tag: 'p'})[0];
26 assert.equal(c.getPrecedingNode({node: paragraph}).getTag(), 'section');
32 suite('Inserting nodes', function() {
33 test('append node to root', function() {
34 var c = canvas.create();
35 var node = canvasNode.create({tag: 'header', klass: 'some-class'});
36 c.nodeAppend({node: node, to: 'root'});
37 assertDomEqual(c.getContent(), '<div wlxml-tag="header" wlxml-class="some-class">');
40 test('append node to another node', function() {
41 var c = canvas.create('<div wlxml-tag="section"></div>');
42 var node = canvasNode.create({tag: 'header', klass: 'some-class'});
43 var to = c.findNodes('div')[0];
44 c.nodeAppend({node: node, to: to});
45 assertDomEqual(c.getContent(), '<div wlxml-tag="section"><div wlxml-tag="header" wlxml-class="some-class"></div></div>');
48 test('insert node after another node', function() {
49 var c = canvas.create('<div wlxml-tag="section"></div>');
50 var node = canvasNode.create({tag: 'header', klass: 'some-class'});
51 var after = c.findNodes('div')[0];
52 c.nodeInsertAfter({node: node, after: after});
53 assertDomEqual(c.getContent(), '<div wlxml-tag="section"></div><div wlxml-tag="header" wlxml-class="some-class"></div>');
56 test('wrap text in node', function() {
57 var c = canvas.create('<div wlxml-tag="section"><div wlxml-tag="header">Header 1</div></div>');
58 var header = c.findNodes({tag: 'header'})[0];
59 var wrapper = canvasNode.create({tag: 'aside'});
60 c.nodeWrap({inside: header, _with: wrapper, offsetStart: 1, offsetEnd: 6});
61 assertDomEqual(c.getContent(), '<div wlxml-tag="section"><div wlxml-tag="header">H<span wlxml-tag="aside">eader</span> 1</div></div>');
64 test('wrap text in node - text not a first node', function() {
65 var c = canvas.create('<div wlxml-tag="header">Alice <span wlxml-tag="span">has a</span> cat</div>');
66 var header = c.findNodes({tag: 'header'})[0];
67 var wrapper = canvasNode.create({tag: 'aside'});
68 c.nodeWrap({inside: header, _with: wrapper, offsetStart: 1, offsetEnd: 4, textNodeIdx: 2});
69 assertDomEqual(c.getContent(), '<div wlxml-tag="header">Alice <span wlxml-tag="span">has a</span> <span wlxml-tag="aside">cat</span></div>');
72 test('wrap text with nodes inside', function() {
73 var c = canvas.create('<div wlxml-tag="header">Alice has a <span wlxml-tag="span">small</span> cat</div>');
74 var header = c.findNodes({tag: 'header'})[0];
75 var wrapper = canvasNode.create({tag: 'aside'});
76 c.nodeWrap({inside: header, _with: wrapper, offsetStart: 6, offsetEnd: 4, textNodeIdx: [0,2]});
77 assertDomEqual(c.getContent(), '<div wlxml-tag="header">Alice <span wlxml-tag="aside">has a <span wlxml-tag="span">small</span> cat</span></div>');
80 test('unwrap text', function() {
81 var c = canvas.create('<div wlxml-tag="div">Alice <span wlxml-tag="span">has</span> a cat</div>');
82 var span = c.findNodes({tag:'span'})[0];
83 c.nodeUnwrap({node: span});
84 assertDomEqual(c.getContent(), '<div wlxml-tag="div">Alice has a cat</div>');
87 test('unwrap text - first text node', function() {
88 var c = canvas.create('<div wlxml-tag="div"><span wlxml-tag="span">Alice</span> has a cat</div>');
89 var span = c.findNodes({tag:'span'})[0];
90 c.nodeUnwrap({node: span});
91 assertDomEqual(c.getContent(), '<div wlxml-tag="div">Alice has a cat</div>');
94 test('unwrap text - only text node', function() {
95 var c = canvas.create('<div wlxml-tag="div"><span wlxml-tag="span">Alice</span></div>');
96 var span = c.findNodes({tag:'span'})[0];
97 c.nodeUnwrap({node: span});
98 assertDomEqual(c.getContent(), '<div wlxml-tag="div">Alice</div>');
102 test('unwrap text - non text neighbours', function() {
103 var c = canvas.create('<div wlxml-tag="div"><div wlxml-tag"div">a</div><span wlxml-tag="span">Alice</span><div wlxml-tag"div">b</div></div>');
104 var span = c.findNodes({tag:'span'})[0];
105 c.nodeUnwrap({node: span});
106 assertDomEqual(c.getContent(), '<div wlxml-tag="div"><div wlxml-tag"div">a</div>Alice<div wlxml-tag"div">b</div></div>');
109 test('split node', function() {
110 var c = canvas.create('<div wlxml-tag="section"><div wlxml-tag="header">Header 1</div></div>');
111 var header = c.findNodes({tag: 'header'})[0];
112 var newNode = c.nodeSplit({node: header, offset: 4});
113 assertDomEqual(c.getContent(), utils.cleanUp('\
114 <div wlxml-tag="section">\
115 <div wlxml-tag="header">Head</div>\
116 <div wlxml-tag="header">er 1</div>\
118 assert.ok(newNode.isSame(c.findNodes({tag: 'header'})[1]));
121 test('split root node', function() {
122 var c = canvas.create('<div wlxml-tag="header">cat</div>');
123 var header = c.findNodes({tag: 'header'})[0];
124 var newNode = c.nodeSplit({node: header, offset: 1});
125 assertDomEqual(c.getContent(), utils.cleanUp('\
126 <div wlxml-tag="header">c</div>\
127 <div wlxml-tag="header">at</div>'));
128 assert.ok(newNode.isSame(c.findNodes({tag: 'header'})[1]));
131 test('split node with subnodes', function() {
132 var c = canvas.create(utils.cleanUp('\
133 <div wlxml-tag="section">\
134 <div wlxml-tag="header">Fancy and nice<span wlxml-tag="aside">header</span> 1</div>\
136 var header = c.findNodes({tag: 'header'})[0];
137 var newNode = c.nodeSplit({node: header, offset: 5});
138 assertDomEqual(c.getContent(), utils.cleanUp('\
139 <div wlxml-tag="section">\
140 <div wlxml-tag="header">Fancy</div>\
141 <div wlxml-tag="header">and nice<span wlxml-tag="aside">header</span> 1</div>\
145 test('remove node', function() {
146 var c = canvas.create('<div wlxml-tag="section"><span wlxml-tag="span">some text</span></div>');
147 var span = c.findNodes({tag: 'span'})[0];
148 c.nodeRemove({node: span});
149 assertDomEqual(c.getContent(), '<div wlxml-tag="section"></div>');
154 suite('Lists', function() {
155 test('create from existing nodes', function() {
156 var c = canvas.create(utils.cleanUp('\
157 <div wlxml-tag="section">\
158 <div wlxml-tag="div">alice</div>\
160 <div wlxml-tag="div">a</div>\
161 <div wlxml-tag="div">cat</div>\
162 <div wlxml-tag="div">or not</div>\
166 var div_alice = c.findNodes({tag: 'div'})[0];
167 var div_cat = c.findNodes({tag:'div'})[2];
169 c.listCreate({start: div_alice, end: div_cat});
171 assertDomEqual(c.getContent(), utils.cleanUp('\
172 <div wlxml-tag="section">\
173 <div wlxml-tag="div" wlxml-class="list-items">\
174 <div wlxml-tag="div" wlxml-class="item">alice</div>\
175 <div wlxml-tag="div" wlxml-class="item">has</div>\
176 <div wlxml-tag="div" wlxml-class="item">a</div>\
177 <div wlxml-tag="div" wlxml-class="item">cat</div>\
179 <div wlxml-tag="div">or not</div>\
183 test('create from existing nodes - start/end order doesn\'t matter', function() {
184 var html = utils.cleanUp('\
185 <div wlxml-tag="div">alice</div>\
186 <div wlxml-tag="div">cat</div>');
187 var expected = utils.cleanUp('\
188 <div wlxml-tag="div" wlxml-class="list-items">\
189 <div wlxml-tag="div" wlxml-class="item">alice</div>\
190 <div wlxml-tag="div" wlxml-class="item">cat</div>\
193 var c = canvas.create(html);
194 var div_alice = c.findNodes({tag: 'div'})[0];
195 var div_cat = c.findNodes({tag:'div'})[1];
196 c.listCreate({start: div_cat, end: div_alice});
197 assertDomEqual(c.getContent(), expected);
199 c = canvas.create(html);
200 div_alice = c.findNodes({tag: 'div'})[0];
201 div_cat = c.findNodes({tag:'div'})[1];
202 c.listCreate({start: div_alice, end: div_cat});
203 assertDomEqual(c.getContent(), expected);
206 test('remove', function() {
207 var c = canvas.create(utils.cleanUp('\
208 <div wlxml-tag="section">\
209 <div wlxml-tag="div" wlxml-class="list-items">\
210 <div wlxml-tag="div" wlxml-class="item">alice</div>\
211 <div wlxml-tag="div" wlxml-class="item">cat</div>\
214 var item = c.findNodes({klass: 'item'})[1];
215 c.listRemove({pointer: item});
216 assertDomEqual(c.getContent(), utils.cleanUp('\
217 <div wlxml-tag="section">\
218 <div wlxml-tag="div">alice</div>\
219 <div wlxml-tag="div">cat</div>\
223 test('checking if node is inside a list', function() {
224 var c = canvas.create(utils.cleanUp('\
225 <div wlxml-tag="section">\
226 <div wlxml-tag="div" wlxml-class="list-items-enum">\
227 <div wlxml-tag="div" wlxml-class="item">alice <span wlxml-tag="span"></span</div>\
228 <div wlxml-tag="div" wlxml-class="item">cat</div>\
231 assert.ok(c.nodeInsideList({node: c.findNodes({klass: 'item'})[1]}), 'item is inside a list');
232 assert.ok(c.nodeInsideList({node: c.findNodes({tag: 'span'})[0]}), 'things nested in item are inside a list');
235 test('moving items to nested list', function() {
236 var listHTML = utils.cleanUp('\
237 <div wlxml-tag="div" wlxml-class="list-items">\
238 <div wlxml-tag="div" wlxml-class="item">alice</div>\
239 <div wlxml-tag="div" wlxml-class="item">cat</div>\
240 <div wlxml-tag="div" wlxml-class="item">dog</div>\
241 <div wlxml-tag="div" wlxml-class="item">bee</div>\
243 var c = canvas.create(listHTML);
244 var items = c.findNodes({klass: 'item'});
245 var cat_item = items[1];
246 var dog_item = items[2];
248 c.listCreate({start: cat_item, end: dog_item});
250 assertDomEqual(c.getContent(), utils.cleanUp('\
251 <div wlxml-tag="div" wlxml-class="list-items">\
252 <div wlxml-tag="div" wlxml-class="item">alice</div>\
253 <div wlxml-tag="div" wlxml-class="item" class="canvas-silent-item">\
254 <div wlxml-tag="div" wlxml-class="list-items">\
255 <div wlxml-tag="div" wlxml-class="item">cat</div>\
256 <div wlxml-tag="div" wlxml-class="item">dog</div>\
259 <div wlxml-tag="div" wlxml-class="item">bee</div>\
264 test('removing nested list', function() {
265 var nestedList = utils.cleanUp('\
266 <div wlxml-tag="div" wlxml-class="list-items">\
267 <div wlxml-tag="div" wlxml-class="item">alice</div>\
268 <div wlxml-tag="div" wlxml-class="item">\
269 <div wlxml-tag="div" wlxml-class="list-items">\
270 <div wlxml-tag="div" wlxml-class="item">cat</div>\
271 <div wlxml-tag="div" wlxml-class="item">dog</div>\
274 <div wlxml-tag="div" wlxml-class="item">bee</div>\
277 var c = canvas.create(nestedList);
278 var dog_item = c.findNodes('[wlxml-class=list-items] [wlxml-class=list-items] > div')[1];
279 assert.equal(dog_item.getContent(), 'dog');
281 c.listRemove({pointer: dog_item});
283 assertDomEqual(c.getContent(), utils.cleanUp('\
284 <div wlxml-tag="div" wlxml-class="list-items">\
285 <div wlxml-tag="div" wlxml-class="item">alice</div>\
286 <div wlxml-tag="div" wlxml-class="item">cat</div>\
287 <div wlxml-tag="div" wlxml-class="item">dog</div>\
288 <div wlxml-tag="div" wlxml-class="item">bee</div>\
294 test('removing list containing nested list', function() {
295 var nestedList = utils.cleanUp('\
296 <div wlxml-tag="section">\
297 <div wlxml-tag="div" wlxml-class="list-items">\
298 <div wlxml-tag="div" wlxml-class="item">alice</div>\
299 <div wlxml-tag="div" wlxml-class="item">\
300 <div wlxml-tag="div" wlxml-class="list-items">\
301 <div wlxml-tag="div" wlxml-class="item">cat</div>\
302 <div wlxml-tag="div" wlxml-class="item">dog</div>\
305 <div wlxml-tag="div" wlxml-class="item">bee</div>\
309 var c = canvas.create(nestedList);
310 var alice_item = c.findNodes('[wlxml-class=list-items] > div')[0];
311 assert.equal(alice_item.getContent(), 'alice');
313 c.listRemove({pointer: alice_item});
315 assertDomEqual(c.getContent(), utils.cleanUp('\
316 <div wlxml-tag="section">\
317 <div wlxml-tag="div">alice</div>\
318 <div wlxml-tag="div">cat</div>\
319 <div wlxml-tag="div">dog</div>\
320 <div wlxml-tag="div">bee</div>\