UNPKG

d2-ui

Version:
442 lines (323 loc) 18.5 kB
<a name="module_symbol-tree"></a> ## symbol-tree **Author:** Joris van der Wel <joris@jorisvanderwel.com> * [symbol-tree](#module_symbol-tree) * [SymbolTree](#exp_module_symbol-tree--SymbolTree) ⏏ * [new SymbolTree([description])](#new_module_symbol-tree--SymbolTree_new) * [.initialize(object)](#module_symbol-tree--SymbolTree+initialize) ⇒ <code>Object</code> * [.hasChildren(object)](#module_symbol-tree--SymbolTree+hasChildren) ⇒ <code>Boolean</code> * [.firstChild(object)](#module_symbol-tree--SymbolTree+firstChild) ⇒ <code>Object</code> * [.lastChild(object)](#module_symbol-tree--SymbolTree+lastChild) ⇒ <code>Object</code> * [.previousSibling(object)](#module_symbol-tree--SymbolTree+previousSibling) ⇒ <code>Object</code> * [.nextSibling(object)](#module_symbol-tree--SymbolTree+nextSibling) ⇒ <code>Object</code> * [.parent(object)](#module_symbol-tree--SymbolTree+parent) ⇒ <code>Object</code> * [.lastInclusiveDescendant(object)](#module_symbol-tree--SymbolTree+lastInclusiveDescendant) ⇒ <code>Object</code> * [.preceding(object, [options])](#module_symbol-tree--SymbolTree+preceding) ⇒ <code>Object</code> * [.following(object, [options])](#module_symbol-tree--SymbolTree+following) ⇒ <code>Object</code> * [.childrenToArray(parent, [options])](#module_symbol-tree--SymbolTree+childrenToArray) ⇒ <code>Array.&lt;Object&gt;</code> * [.ancestorsToArray(object, [options])](#module_symbol-tree--SymbolTree+ancestorsToArray) ⇒ <code>Array.&lt;Object&gt;</code> * [.treeToArray(root, [options])](#module_symbol-tree--SymbolTree+treeToArray) ⇒ <code>Array.&lt;Object&gt;</code> * [.childrenIterator(parent, [options])](#module_symbol-tree--SymbolTree+childrenIterator) ⇒ <code>Object</code> * [.previousSiblingsIterator(object)](#module_symbol-tree--SymbolTree+previousSiblingsIterator) ⇒ <code>Object</code> * [.nextSiblingsIterator(object)](#module_symbol-tree--SymbolTree+nextSiblingsIterator) ⇒ <code>Object</code> * [.ancestorsIterator(object)](#module_symbol-tree--SymbolTree+ancestorsIterator) ⇒ <code>Object</code> * [.treeIterator(root, options)](#module_symbol-tree--SymbolTree+treeIterator) ⇒ <code>Object</code> * [.index(child)](#module_symbol-tree--SymbolTree+index) ⇒ <code>Number</code> * [.childrenCount(parent)](#module_symbol-tree--SymbolTree+childrenCount) ⇒ <code>Number</code> * [.compareTreePosition(left, right)](#module_symbol-tree--SymbolTree+compareTreePosition) ⇒ <code>Number</code> * [.remove(removeObject)](#module_symbol-tree--SymbolTree+remove) ⇒ <code>Object</code> * [.insertBefore(referenceObject, newObject)](#module_symbol-tree--SymbolTree+insertBefore) ⇒ <code>Object</code> * [.insertAfter(referenceObject, newObject)](#module_symbol-tree--SymbolTree+insertAfter) ⇒ <code>Object</code> * [.prependChild(referenceObject, newObject)](#module_symbol-tree--SymbolTree+prependChild) ⇒ <code>Object</code> * [.appendChild(referenceObject, newObject)](#module_symbol-tree--SymbolTree+appendChild) ⇒ <code>Object</code> <a name="exp_module_symbol-tree--SymbolTree"></a> ### SymbolTree ⏏ **Kind**: Exported class <a name="new_module_symbol-tree--SymbolTree_new"></a> #### new SymbolTree([description]) | Param | Default | Description | | --- | --- | --- | | [description] | <code>&#x27;SymbolTree data&#x27;</code> | Description used for the Symbol | <a name="module_symbol-tree--SymbolTree+initialize"></a> #### symbolTree.initialize(object) ⇒ <code>Object</code> You can optionally initialize an object after its creation, to take advantage of V8's fast properties. Also useful if you would like to freeze your object. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - object | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+hasChildren"></a> #### symbolTree.hasChildren(object) ⇒ <code>Boolean</code> Returns `true` if the object has any children. Otherwise it returns `false`. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+firstChild"></a> #### symbolTree.firstChild(object) ⇒ <code>Object</code> Return the first child of the given object. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+lastChild"></a> #### symbolTree.lastChild(object) ⇒ <code>Object</code> Return the last child of the given object. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+previousSibling"></a> #### symbolTree.previousSibling(object) ⇒ <code>Object</code> Return the previous sibling of the given object. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+nextSibling"></a> #### symbolTree.nextSibling(object) ⇒ <code>Object</code> Return the nextSibling sibling of the given object. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+parent"></a> #### symbolTree.parent(object) ⇒ <code>Object</code> Return the parent of the given object. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+lastInclusiveDescendant"></a> #### symbolTree.lastInclusiveDescendant(object) ⇒ <code>Object</code> Find the inclusive descendant that is last in tree order of the given object. `O(n)` (worst case) where n is the depth of the subtree of `object` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+preceding"></a> #### symbolTree.preceding(object, [options]) ⇒ <code>Object</code> Find the preceding object (A) of the given object (B). An object A is preceding an object B if A and B are in the same tree and A comes before B in tree order. `O(n)` (worst case) <br> `O(1)` (amortized when walking the entire tree) **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | Description | | --- | --- | --- | | object | <code>Object</code> | | | [options] | <code>Object</code> | | | [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 `node` | <a name="module_symbol-tree--SymbolTree+following"></a> #### symbolTree.following(object, [options]) ⇒ <code>Object</code> Find the following object (A) of the given object (B). An object A is following an object B if A and B are in the same tree and A comes after B in tree order. `O(n)` (worst case) where n is the amount of objects in the entire tree<br> `O(1)` (amortized when walking the entire tree) **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | Default | Description | | --- | --- | --- | --- | | object | <code>Object</code> | | | | [options] | <code>Object</code> | | | | [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 `node` | | [options.skipChildren] | <code>Boolean</code> | <code>false</code> | If set, ignore the children of `object` | <a name="module_symbol-tree--SymbolTree+childrenToArray"></a> #### symbolTree.childrenToArray(parent, [options]) ⇒ <code>Array.&lt;Object&gt;</code> Append all children of the given object to an array. `O(n)` where n is the amount of children of the given `parent` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | Default | Description | | --- | --- | --- | --- | | parent | <code>Object</code> | | | | [options] | <code>Object</code> | | | | [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | | | [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. | | [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. | <a name="module_symbol-tree--SymbolTree+ancestorsToArray"></a> #### symbolTree.ancestorsToArray(object, [options]) ⇒ <code>Array.&lt;Object&gt;</code> Append all inclusive ancestors of the given object to an array. `O(n)` where n is the amount of ancestors of the given `object` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | Default | Description | | --- | --- | --- | --- | | object | <code>Object</code> | | | | [options] | <code>Object</code> | | | | [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | | | [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. | | [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. | <a name="module_symbol-tree--SymbolTree+treeToArray"></a> #### symbolTree.treeToArray(root, [options]) ⇒ <code>Array.&lt;Object&gt;</code> Append all descendants of the given object to an array (in tree order). `O(n)` where n is the amount of objects in the sub-tree of the given `object` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | Default | Description | | --- | --- | --- | --- | | root | <code>Object</code> | | | | [options] | <code>Object</code> | | | | [options.array] | <code>Array.&lt;Object&gt;</code> | <code>[]</code> | | | [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. | | [options.thisArg] | <code>\*</code> | | Value to use as `this` when executing `filter`. | <a name="module_symbol-tree--SymbolTree+childrenIterator"></a> #### symbolTree.childrenIterator(parent, [options]) ⇒ <code>Object</code> Iterate over all children of the given object `O(1)` for a single iteration **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - An iterable iterator (ES6) | Param | Type | Default | | --- | --- | --- | | parent | <code>Object</code> | | | [options] | <code>Object</code> | | | [options.reverse] | <code>Boolean</code> | <code>false</code> | <a name="module_symbol-tree--SymbolTree+previousSiblingsIterator"></a> #### symbolTree.previousSiblingsIterator(object) ⇒ <code>Object</code> Iterate over all the previous siblings of the given object. (in reverse tree order) `O(1)` for a single iteration **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - An iterable iterator (ES6) | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+nextSiblingsIterator"></a> #### symbolTree.nextSiblingsIterator(object) ⇒ <code>Object</code> Iterate over all the next siblings of the given object. (in tree order) `O(1)` for a single iteration **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - An iterable iterator (ES6) | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+ancestorsIterator"></a> #### symbolTree.ancestorsIterator(object) ⇒ <code>Object</code> Iterate over all inclusive ancestors of the given object `O(1)` for a single iteration **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - An iterable iterator (ES6) | Param | Type | | --- | --- | | object | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+treeIterator"></a> #### symbolTree.treeIterator(root, options) ⇒ <code>Object</code> Iterate over all descendants of the given object (in tree order). where n is the amount of objects in the sub-tree of the given `root`: `O(n)` (worst case for a single iterator) `O(n)` (amortized, when completing the iterator)<br> **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - An iterable iterator (ES6) | Param | Type | Default | | --- | --- | --- | | root | <code>Object</code> | | | options | <code>Object</code> | | | [options.reverse] | <code>Boolean</code> | <code>false</code> | <a name="module_symbol-tree--SymbolTree+index"></a> #### symbolTree.index(child) ⇒ <code>Number</code> Find the index of the given object (the number of preceding siblings). `O(n)` where n is the amount of preceding siblings<br> `O(1)` (amortized, if the tree is not modified) **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Number</code> - The number of preceding siblings, or -1 if the object has no parent | Param | Type | | --- | --- | | child | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+childrenCount"></a> #### symbolTree.childrenCount(parent) ⇒ <code>Number</code> Calculate the number of children. `O(n)` where n is the amount of children<br> `O(1)` (amortized, if the tree is not modified) **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | parent | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+compareTreePosition"></a> #### symbolTree.compareTreePosition(left, right) ⇒ <code>Number</code> Compare the position of an object relative to another object. A bit set is returned: <ul> <li>DISCONNECTED : 1</li> <li>PRECEDING : 2</li> <li>FOLLOWING : 4</li> <li>CONTAINS : 8</li> <li>CONTAINED_BY : 16</li> </ul> The semantics are the same as compareDocumentPosition in DOM, with the exception that DISCONNECTED never occurs with any other bit. where n and m are the amount of ancestors of `left` and `right`; where o is the amount of children of the lowest common ancestor of `left` and `right`: `O(n + m + o)` (worst case) `O(n + m) (amortized, if the tree is not modified) **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> | Param | Type | | --- | --- | | left | <code>Object</code> | | right | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+remove"></a> #### symbolTree.remove(removeObject) ⇒ <code>Object</code> Remove the object from this tree. Has no effect if already removed. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - removeObject | Param | Type | | --- | --- | | removeObject | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+insertBefore"></a> #### symbolTree.insertBefore(referenceObject, newObject) ⇒ <code>Object</code> Insert the given object before the reference object. `newObject` is now the previous sibling of `referenceObject`. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - newObject **Throws**: - <code>Error</code> If the newObject is already present in this SymbolTree | Param | Type | | --- | --- | | referenceObject | <code>Object</code> | | newObject | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+insertAfter"></a> #### symbolTree.insertAfter(referenceObject, newObject) ⇒ <code>Object</code> Insert the given object after the reference object. `newObject` is now the next sibling of `referenceObject`. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - newObject **Throws**: - <code>Error</code> If the newObject is already present in this SymbolTree | Param | Type | | --- | --- | | referenceObject | <code>Object</code> | | newObject | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+prependChild"></a> #### symbolTree.prependChild(referenceObject, newObject) ⇒ <code>Object</code> Insert the given object as the first child of the given reference object. `newObject` is now the first child of `referenceObject`. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - newObject **Throws**: - <code>Error</code> If the newObject is already present in this SymbolTree | Param | Type | | --- | --- | | referenceObject | <code>Object</code> | | newObject | <code>Object</code> | <a name="module_symbol-tree--SymbolTree+appendChild"></a> #### symbolTree.appendChild(referenceObject, newObject) ⇒ <code>Object</code> Insert the given object as the last child of the given reference object. `newObject` is now the last child of `referenceObject`. `O(1)` **Kind**: instance method of <code>[SymbolTree](#exp_module_symbol-tree--SymbolTree)</code> **Returns**: <code>Object</code> - newObject **Throws**: - <code>Error</code> If the newObject is already present in this SymbolTree | Param | Type | | --- | --- | | referenceObject | <code>Object</code> | | newObject | <code>Object</code> |