source: frontend/node_modules/symbol-tree/README.md

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 20.5 KB
Line 
1symbol-tree
2===========
3[![Travis CI Build Status](https://api.travis-ci.org/jsdom/js-symbol-tree.svg?branch=master)](https://travis-ci.org/jsdom/js-symbol-tree) [![Coverage Status](https://coveralls.io/repos/github/jsdom/js-symbol-tree/badge.svg?branch=master)](https://coveralls.io/github/jsdom/js-symbol-tree?branch=master)
4
5Turn any collection of objects into its own efficient tree or linked list using `Symbol`.
6
7This library has been designed to provide an efficient backing data structure for DOM trees. You can also use this library as an efficient linked list. Any meta data is stored on your objects directly, which ensures any kind of insertion or deletion is performed in constant time. Because an ES6 `Symbol` is used, the meta data does not interfere with your object in any way.
8
9Node.js 4+, io.js and modern browsers are supported.
10
11Example
12-------
13A linked list:
14
15```javascript
16const SymbolTree = require('symbol-tree');
17const tree = new SymbolTree();
18
19let a = {foo: 'bar'}; // or `new Whatever()`
20let b = {foo: 'baz'};
21let c = {foo: 'qux'};
22
23tree.insertBefore(b, a); // insert a before b
24tree.insertAfter(b, c); // insert c after b
25
26console.log(tree.nextSibling(a) === b);
27console.log(tree.nextSibling(b) === c);
28console.log(tree.previousSibling(c) === b);
29
30tree.remove(b);
31console.log(tree.nextSibling(a) === c);
32```
33
34A tree:
35
36```javascript
37const SymbolTree = require('symbol-tree');
38const tree = new SymbolTree();
39
40let parent = {};
41let a = {};
42let b = {};
43let c = {};
44
45tree.prependChild(parent, a); // insert a as the first child
46tree.appendChild(parent,c ); // insert c as the last child
47tree.insertAfter(a, b); // insert b after a, it now has the same parent as a
48
49console.log(tree.firstChild(parent) === a);
50console.log(tree.nextSibling(tree.firstChild(parent)) === b);
51console.log(tree.lastChild(parent) === c);
52
53let grandparent = {};
54tree.prependChild(grandparent, parent);
55console.log(tree.firstChild(tree.firstChild(grandparent)) === a);
56```
57
58See [api.md](api.md) for more documentation.
59
60Testing
61-------
62Make sure you install the dependencies first:
63
64 npm install
65
66You can now run the unit tests by executing:
67
68 npm test
69
70The line and branch coverage should be 100%.
71
72API Documentation
73-----------------
74<a name="module_symbol-tree"></a>
75
76## symbol-tree
77**Author**: Joris van der Wel <joris@jorisvanderwel.com>
78
79* [symbol-tree](#module_symbol-tree)
80 * [SymbolTree](#exp_module_symbol-tree--SymbolTree) ⏏
81 * [new SymbolTree([description])](#new_module_symbol-tree--SymbolTree_new)
82 * [.initialize(object)](#module_symbol-tree--SymbolTree+initialize) ⇒ <code>Object</code>
83 * [.hasChildren(object)](#module_symbol-tree--SymbolTree+hasChildren) ⇒ <code>Boolean</code>
84 * [.firstChild(object)](#module_symbol-tree--SymbolTree+firstChild) ⇒ <code>Object</code>
85 * [.lastChild(object)](#module_symbol-tree--SymbolTree+lastChild) ⇒ <code>Object</code>
86 * [.previousSibling(object)](#module_symbol-tree--SymbolTree+previousSibling) ⇒ <code>Object</code>
87 * [.nextSibling(object)](#module_symbol-tree--SymbolTree+nextSibling) ⇒ <code>Object</code>
88 * [.parent(object)](#module_symbol-tree--SymbolTree+parent) ⇒ <code>Object</code>
89 * [.lastInclusiveDescendant(object)](#module_symbol-tree--SymbolTree+lastInclusiveDescendant) ⇒ <code>Object</code>
90 * [.preceding(object, [options])](#module_symbol-tree--SymbolTree+preceding) ⇒ <code>Object</code>
91 * [.following(object, [options])](#module_symbol-tree--SymbolTree+following) ⇒ <code>Object</code>
92 * [.childrenToArray(parent, [options])](#module_symbol-tree--SymbolTree+childrenToArray) ⇒ <code>Array.&lt;Object&gt;</code>
93 * [.ancestorsToArray(object, [options])](#module_symbol-tree--SymbolTree+ancestorsToArray) ⇒ <code>Array.&lt;Object&gt;</code>
94 * [.treeToArray(root, [options])](#module_symbol-tree--SymbolTree+treeToArray) ⇒ <code>Array.&lt;Object&gt;</code>
95 * [.childrenIterator(parent, [options])](#module_symbol-tree--SymbolTree+childrenIterator) ⇒ <code>Object</code>
96 * [.previousSiblingsIterator(object)](#module_symbol-tree--SymbolTree+previousSiblingsIterator) ⇒ <code>Object</code>
97 * [.nextSiblingsIterator(object)](#module_symbol-tree--SymbolTree+nextSiblingsIterator) ⇒ <code>Object</code>
98 * [.ancestorsIterator(object)](#module_symbol-tree--SymbolTree+ancestorsIterator) ⇒ <code>Object</code>
99 * [.treeIterator(root, options)](#module_symbol-tree--SymbolTree+treeIterator) ⇒ <code>Object</code>
100 * [.index(child)](#module_symbol-tree--SymbolTree+index) ⇒ <code>Number</code>
101 * [.childrenCount(parent)](#module_symbol-tree--SymbolTree+childrenCount) ⇒ <code>Number</code>
102 * [.compareTreePosition(left, right)](#module_symbol-tree--SymbolTree+compareTreePosition) ⇒ <code>Number</code>
103 * [.remove(removeObject)](#module_symbol-tree--SymbolTree+remove) ⇒ <code>Object</code>
104 * [.insertBefore(referenceObject, newObject)](#module_symbol-tree--SymbolTree+insertBefore) ⇒ <code>Object</code>
105 * [.insertAfter(referenceObject, newObject)](#module_symbol-tree--SymbolTree+insertAfter) ⇒ <code>Object</code>
106 * [.prependChild(referenceObject, newObject)](#module_symbol-tree--SymbolTree+prependChild) ⇒ <code>Object</code>
107 * [.appendChild(referenceObject, newObject)](#module_symbol-tree--SymbolTree+appendChild) ⇒ <code>Object</code>
108
109<a name="exp_module_symbol-tree--SymbolTree"></a>
110
111### SymbolTree ⏏
112**Kind**: Exported class
113<a name="new_module_symbol-tree--SymbolTree_new"></a>
114
115#### new SymbolTree([description])
116
117| Param | Type | Default | Description |
118| --- | --- | --- | --- |
119| [description] | <code>string</code> | <code>&quot;&#x27;SymbolTree data&#x27;&quot;</code> | Description used for the Symbol |
120
121<a name="module_symbol-tree--SymbolTree+initialize"></a>
122
123#### symbolTree.initialize(object) ⇒ <code>Object</code>
124You can use this function to (optionally) initialize an object right after its creation,
125to take advantage of V8's fast properties. Also useful if you would like to
126freeze your object.
127
128`O(1)`
129
130**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
131**Returns**: <code>Object</code> - object
132
133| Param | Type |
134| --- | --- |
135| object | <code>Object</code> |
136
137<a name="module_symbol-tree--SymbolTree+hasChildren"></a>
138
139#### symbolTree.hasChildren(object) ⇒ <code>Boolean</code>
140Returns `true` if the object has any children. Otherwise it returns `false`.
141
142* `O(1)`
143
144**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
145
146| Param | Type |
147| --- | --- |
148| object | <code>Object</code> |
149
150<a name="module_symbol-tree--SymbolTree+firstChild"></a>
151
152#### symbolTree.firstChild(object) ⇒ <code>Object</code>
153Returns the first child of the given object.
154
155* `O(1)`
156
157**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
158
159| Param | Type |
160| --- | --- |
161| object | <code>Object</code> |
162
163<a name="module_symbol-tree--SymbolTree+lastChild"></a>
164
165#### symbolTree.lastChild(object) ⇒ <code>Object</code>
166Returns the last child of the given object.
167
168* `O(1)`
169
170**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
171
172| Param | Type |
173| --- | --- |
174| object | <code>Object</code> |
175
176<a name="module_symbol-tree--SymbolTree+previousSibling"></a>
177
178#### symbolTree.previousSibling(object) ⇒ <code>Object</code>
179Returns the previous sibling of the given object.
180
181* `O(1)`
182
183**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
184
185| Param | Type |
186| --- | --- |
187| object | <code>Object</code> |
188
189<a name="module_symbol-tree--SymbolTree+nextSibling"></a>
190
191#### symbolTree.nextSibling(object) ⇒ <code>Object</code>
192Returns the next sibling of the given object.
193
194* `O(1)`
195
196**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
197
198| Param | Type |
199| --- | --- |
200| object | <code>Object</code> |
201
202<a name="module_symbol-tree--SymbolTree+parent"></a>
203
204#### symbolTree.parent(object) ⇒ <code>Object</code>
205Return the parent of the given object.
206
207* `O(1)`
208
209**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
210
211| Param | Type |
212| --- | --- |
213| object | <code>Object</code> |
214
215<a name="module_symbol-tree--SymbolTree+lastInclusiveDescendant"></a>
216
217#### symbolTree.lastInclusiveDescendant(object) ⇒ <code>Object</code>
218Find the inclusive descendant that is last in tree order of the given object.
219
220* `O(n)` (worst case) where `n` is the depth of the subtree of `object`
221
222**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
223
224| Param | Type |
225| --- | --- |
226| object | <code>Object</code> |
227
228<a name="module_symbol-tree--SymbolTree+preceding"></a>
229
230#### symbolTree.preceding(object, [options]) ⇒ <code>Object</code>
231Find the preceding object (A) of the given object (B).
232An object A is preceding an object B if A and B are in the same tree
233and A comes before B in tree order.
234
235* `O(n)` (worst case)
236* `O(1)` (amortized when walking the entire tree)
237
238**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
239
240| Param | Type | Description |
241| --- | --- | --- |
242| object | <code>Object</code> | |
243| [options] | <code>Object</code> | |
244| [options.root] | <code>Object</code> | If set, `root` must be an inclusive ancestor of the return value (or else null is returned). This check _assumes_ that `root` is also an inclusive ancestor of the given `object` |
245
246<a name="module_symbol-tree--SymbolTree+following"></a>
247
248#### symbolTree.following(object, [options]) ⇒ <code>Object</code>
249Find the following object (A) of the given object (B).
250An object A is following an object B if A and B are in the same tree
251and A comes after B in tree order.
252
253* `O(n)` (worst case) where `n` is the amount of objects in the entire tree
254* `O(1)` (amortized when walking the entire tree)
255
256**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
257
258| Param | Type | Default | Description |
259| --- | --- | --- | --- |
260| object | <code>Object</code> | | |
261| [options] | <code>Object</code> | | |
262| [options.root] | <code>Object</code> | | If set, `root` must be an inclusive ancestor of the return value (or else null is returned). This check _assumes_ that `root` is also an inclusive ancestor of the given `object` |
263| [options.skipChildren] | <code>Boolean</code> | <code>false</code> | If set, ignore the children of `object` |
264
265<a name="module_symbol-tree--SymbolTree+childrenToArray"></a>
266
267#### symbolTree.childrenToArray(parent, [options]) ⇒ <code>Array.&lt;Object&gt;</code>
268Append all children of the given object to an array.
269
270* `O(n)` where `n` is the amount of children of the given `parent`
271
272**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
273
274| Param | Type | Default | Description |
275| --- | --- | --- | --- |
276| parent | <code>Object</code> | | |
277| [options] | <code>Object</code> | | |
278| [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | |
279| [options.filter] | <code>function</code> | | Function to test each object before it is added to the array. Invoked with arguments (object). Should return `true` if an object is to be included. |
280| [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. |
281
282<a name="module_symbol-tree--SymbolTree+ancestorsToArray"></a>
283
284#### symbolTree.ancestorsToArray(object, [options]) ⇒ <code>Array.&lt;Object&gt;</code>
285Append all inclusive ancestors of the given object to an array.
286
287* `O(n)` where `n` is the amount of ancestors of the given `object`
288
289**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
290
291| Param | Type | Default | Description |
292| --- | --- | --- | --- |
293| object | <code>Object</code> | | |
294| [options] | <code>Object</code> | | |
295| [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | |
296| [options.filter] | <code>function</code> | | Function to test each object before it is added to the array. Invoked with arguments (object). Should return `true` if an object is to be included. |
297| [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. |
298
299<a name="module_symbol-tree--SymbolTree+treeToArray"></a>
300
301#### symbolTree.treeToArray(root, [options]) ⇒ <code>Array.&lt;Object&gt;</code>
302Append all descendants of the given object to an array (in tree order).
303
304* `O(n)` where `n` is the amount of objects in the sub-tree of the given `object`
305
306**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
307
308| Param | Type | Default | Description |
309| --- | --- | --- | --- |
310| root | <code>Object</code> | | |
311| [options] | <code>Object</code> | | |
312| [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | |
313| [options.filter] | <code>function</code> | | Function to test each object before it is added to the array. Invoked with arguments (object). Should return `true` if an object is to be included. |
314| [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. |
315
316<a name="module_symbol-tree--SymbolTree+childrenIterator"></a>
317
318#### symbolTree.childrenIterator(parent, [options]) ⇒ <code>Object</code>
319Iterate over all children of the given object
320
321* `O(1)` for a single iteration
322
323**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
324**Returns**: <code>Object</code> - An iterable iterator (ES6)
325
326| Param | Type | Default |
327| --- | --- | --- |
328| parent | <code>Object</code> | |
329| [options] | <code>Object</code> | |
330| [options.reverse] | <code>Boolean</code> | <code>false</code> |
331
332<a name="module_symbol-tree--SymbolTree+previousSiblingsIterator"></a>
333
334#### symbolTree.previousSiblingsIterator(object) ⇒ <code>Object</code>
335Iterate over all the previous siblings of the given object. (in reverse tree order)
336
337* `O(1)` for a single iteration
338
339**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
340**Returns**: <code>Object</code> - An iterable iterator (ES6)
341
342| Param | Type |
343| --- | --- |
344| object | <code>Object</code> |
345
346<a name="module_symbol-tree--SymbolTree+nextSiblingsIterator"></a>
347
348#### symbolTree.nextSiblingsIterator(object) ⇒ <code>Object</code>
349Iterate over all the next siblings of the given object. (in tree order)
350
351* `O(1)` for a single iteration
352
353**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
354**Returns**: <code>Object</code> - An iterable iterator (ES6)
355
356| Param | Type |
357| --- | --- |
358| object | <code>Object</code> |
359
360<a name="module_symbol-tree--SymbolTree+ancestorsIterator"></a>
361
362#### symbolTree.ancestorsIterator(object) ⇒ <code>Object</code>
363Iterate over all inclusive ancestors of the given object
364
365* `O(1)` for a single iteration
366
367**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
368**Returns**: <code>Object</code> - An iterable iterator (ES6)
369
370| Param | Type |
371| --- | --- |
372| object | <code>Object</code> |
373
374<a name="module_symbol-tree--SymbolTree+treeIterator"></a>
375
376#### symbolTree.treeIterator(root, options) ⇒ <code>Object</code>
377Iterate over all descendants of the given object (in tree order).
378
379Where `n` is the amount of objects in the sub-tree of the given `root`:
380
381* `O(n)` (worst case for a single iteration)
382* `O(n)` (amortized, when completing the iterator)
383
384**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
385**Returns**: <code>Object</code> - An iterable iterator (ES6)
386
387| Param | Type | Default |
388| --- | --- | --- |
389| root | <code>Object</code> | |
390| options | <code>Object</code> | |
391| [options.reverse] | <code>Boolean</code> | <code>false</code> |
392
393<a name="module_symbol-tree--SymbolTree+index"></a>
394
395#### symbolTree.index(child) ⇒ <code>Number</code>
396Find the index of the given object (the number of preceding siblings).
397
398* `O(n)` where `n` is the amount of preceding siblings
399* `O(1)` (amortized, if the tree is not modified)
400
401**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
402**Returns**: <code>Number</code> - The number of preceding siblings, or -1 if the object has no parent
403
404| Param | Type |
405| --- | --- |
406| child | <code>Object</code> |
407
408<a name="module_symbol-tree--SymbolTree+childrenCount"></a>
409
410#### symbolTree.childrenCount(parent) ⇒ <code>Number</code>
411Calculate the number of children.
412
413* `O(n)` where `n` is the amount of children
414* `O(1)` (amortized, if the tree is not modified)
415
416**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
417
418| Param | Type |
419| --- | --- |
420| parent | <code>Object</code> |
421
422<a name="module_symbol-tree--SymbolTree+compareTreePosition"></a>
423
424#### symbolTree.compareTreePosition(left, right) ⇒ <code>Number</code>
425Compare the position of an object relative to another object. A bit set is returned:
426
427<ul>
428 <li>DISCONNECTED : 1</li>
429 <li>PRECEDING : 2</li>
430 <li>FOLLOWING : 4</li>
431 <li>CONTAINS : 8</li>
432 <li>CONTAINED_BY : 16</li>
433</ul>
434
435The semantics are the same as compareDocumentPosition in DOM, with the exception that
436DISCONNECTED never occurs with any other bit.
437
438where `n` and `m` are the amount of ancestors of `left` and `right`;
439where `o` is the amount of children of the lowest common ancestor of `left` and `right`:
440
441* `O(n + m + o)` (worst case)
442* `O(n + m)` (amortized, if the tree is not modified)
443
444**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
445
446| Param | Type |
447| --- | --- |
448| left | <code>Object</code> |
449| right | <code>Object</code> |
450
451<a name="module_symbol-tree--SymbolTree+remove"></a>
452
453#### symbolTree.remove(removeObject) ⇒ <code>Object</code>
454Remove the object from this tree.
455Has no effect if already removed.
456
457* `O(1)`
458
459**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
460**Returns**: <code>Object</code> - removeObject
461
462| Param | Type |
463| --- | --- |
464| removeObject | <code>Object</code> |
465
466<a name="module_symbol-tree--SymbolTree+insertBefore"></a>
467
468#### symbolTree.insertBefore(referenceObject, newObject) ⇒ <code>Object</code>
469Insert the given object before the reference object.
470`newObject` is now the previous sibling of `referenceObject`.
471
472* `O(1)`
473
474**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
475**Returns**: <code>Object</code> - newObject
476**Throws**:
477
478- <code>Error</code> If the newObject is already present in this SymbolTree
479
480
481| Param | Type |
482| --- | --- |
483| referenceObject | <code>Object</code> |
484| newObject | <code>Object</code> |
485
486<a name="module_symbol-tree--SymbolTree+insertAfter"></a>
487
488#### symbolTree.insertAfter(referenceObject, newObject) ⇒ <code>Object</code>
489Insert the given object after the reference object.
490`newObject` is now the next sibling of `referenceObject`.
491
492* `O(1)`
493
494**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
495**Returns**: <code>Object</code> - newObject
496**Throws**:
497
498- <code>Error</code> If the newObject is already present in this SymbolTree
499
500
501| Param | Type |
502| --- | --- |
503| referenceObject | <code>Object</code> |
504| newObject | <code>Object</code> |
505
506<a name="module_symbol-tree--SymbolTree+prependChild"></a>
507
508#### symbolTree.prependChild(referenceObject, newObject) ⇒ <code>Object</code>
509Insert the given object as the first child of the given reference object.
510`newObject` is now the first child of `referenceObject`.
511
512* `O(1)`
513
514**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
515**Returns**: <code>Object</code> - newObject
516**Throws**:
517
518- <code>Error</code> If the newObject is already present in this SymbolTree
519
520
521| Param | Type |
522| --- | --- |
523| referenceObject | <code>Object</code> |
524| newObject | <code>Object</code> |
525
526<a name="module_symbol-tree--SymbolTree+appendChild"></a>
527
528#### symbolTree.appendChild(referenceObject, newObject) ⇒ <code>Object</code>
529Insert the given object as the last child of the given reference object.
530`newObject` is now the last child of `referenceObject`.
531
532* `O(1)`
533
534**Kind**: instance method of [<code>SymbolTree</code>](#exp_module_symbol-tree--SymbolTree)
535**Returns**: <code>Object</code> - newObject
536**Throws**:
537
538- <code>Error</code> If the newObject is already present in this SymbolTree
539
540
541| Param | Type |
542| --- | --- |
543| referenceObject | <code>Object</code> |
544| newObject | <code>Object</code> |
545
Note: See TracBrowser for help on using the repository browser.