pseudo-dom 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +1029 -0
- package/browser/pseudo-dom.js +5219 -0
- package/browser/pseudo-dom.min.js +1 -0
- package/dist/classes/PseudoEventListener.d.ts +96 -0
- package/dist/classes/PseudoEventListener.js +148 -0
- package/dist/classes/PseudoEventListener.min.js +1 -0
- package/dist/classes/PseudoHTMLDocument.d.ts +35 -0
- package/dist/classes/PseudoHTMLDocument.js +77 -0
- package/dist/classes/PseudoHTMLDocument.min.js +1 -0
- package/dist/classes/PseudoNodeList.d.ts +34 -0
- package/dist/classes/PseudoNodeList.js +65 -0
- package/dist/classes/PseudoNodeList.min.js +1 -0
- package/dist/classes.d.ts +20 -0
- package/dist/classes.js +31 -0
- package/dist/classes.min.js +1 -0
- package/dist/factories/generateDocument.d.ts +11 -0
- package/dist/factories/generateDocument.js +65 -0
- package/dist/factories/generateDocument.min.js +1 -0
- package/dist/factories/generateNode.d.ts +40 -0
- package/dist/factories/generateNode.js +118 -0
- package/dist/factories/generateNode.min.js +1 -0
- package/dist/factories/generateNodeList.d.ts +9 -0
- package/dist/factories/generateNodeList.js +13 -0
- package/dist/factories/generateNodeList.min.js +1 -0
- package/dist/factories.d.ts +5 -0
- package/dist/factories.js +23 -0
- package/dist/factories.min.js +1 -0
- package/dist/functions/getParentNodes.d.ts +9 -0
- package/dist/functions/getParentNodes.js +15 -0
- package/dist/functions/getParentNodes.min.js +1 -0
- package/dist/functions/getParentNodesFromAttribute.d.ts +14 -0
- package/dist/functions/getParentNodesFromAttribute.js +9 -0
- package/dist/functions/getParentNodesFromAttribute.min.js +1 -0
- package/dist/functions.d.ts +5 -0
- package/dist/functions.js +23 -0
- package/dist/functions.min.js +1 -0
- package/dist/interfaces/PseudoAnimation.d.ts +3 -0
- package/dist/interfaces/PseudoAnimation.js +5 -0
- package/dist/interfaces/PseudoAnimation.min.js +1 -0
- package/dist/interfaces/PseudoAttr.d.ts +11 -0
- package/dist/interfaces/PseudoAttr.js +5 -0
- package/dist/interfaces/PseudoAttr.min.js +1 -0
- package/dist/interfaces/PseudoDOMTokenList.d.ts +16 -0
- package/dist/interfaces/PseudoDOMTokenList.js +5 -0
- package/dist/interfaces/PseudoDOMTokenList.min.js +1 -0
- package/dist/interfaces/PseudoDocument.d.ts +3 -0
- package/dist/interfaces/PseudoDocument.js +5 -0
- package/dist/interfaces/PseudoDocument.min.js +1 -0
- package/dist/interfaces/PseudoDocumentFragment.d.ts +3 -0
- package/dist/interfaces/PseudoDocumentFragment.js +5 -0
- package/dist/interfaces/PseudoDocumentFragment.min.js +1 -0
- package/dist/interfaces/PseudoElement.d.ts +678 -0
- package/dist/interfaces/PseudoElement.js +5 -0
- package/dist/interfaces/PseudoElement.min.js +1 -0
- package/dist/interfaces/PseudoEvent.d.ts +79 -0
- package/dist/interfaces/PseudoEvent.js +10 -0
- package/dist/interfaces/PseudoEvent.min.js +1 -0
- package/dist/interfaces/PseudoEventTarget.d.ts +46 -0
- package/dist/interfaces/PseudoEventTarget.js +5 -0
- package/dist/interfaces/PseudoEventTarget.min.js +1 -0
- package/dist/interfaces/PseudoHTMLCollection.d.ts +2 -0
- package/dist/interfaces/PseudoHTMLCollection.js +5 -0
- package/dist/interfaces/PseudoHTMLCollection.min.js +1 -0
- package/dist/interfaces/PseudoHTMLElement.d.ts +22 -0
- package/dist/interfaces/PseudoHTMLElement.js +5 -0
- package/dist/interfaces/PseudoHTMLElement.min.js +1 -0
- package/dist/interfaces/PseudoHTMLSlotElement.d.ts +3 -0
- package/dist/interfaces/PseudoHTMLSlotElement.js +5 -0
- package/dist/interfaces/PseudoHTMLSlotElement.min.js +1 -0
- package/dist/interfaces/PseudoNamedNodeMap.d.ts +11 -0
- package/dist/interfaces/PseudoNamedNodeMap.js +5 -0
- package/dist/interfaces/PseudoNamedNodeMap.min.js +1 -0
- package/dist/interfaces/PseudoNode.d.ts +179 -0
- package/dist/interfaces/PseudoNode.js +5 -0
- package/dist/interfaces/PseudoNode.min.js +1 -0
- package/dist/interfaces/PseudoShadowRoot.d.ts +3 -0
- package/dist/interfaces/PseudoShadowRoot.js +5 -0
- package/dist/interfaces/PseudoShadowRoot.min.js +1 -0
- package/dist/main.d.ts +29 -0
- package/dist/main.js +75 -0
- package/dist/main.min.js +1 -0
- package/dist/services/AnimationService.d.ts +4 -0
- package/dist/services/AnimationService.js +16 -0
- package/dist/services/AnimationService.min.js +1 -0
- package/dist/services/AttrService.d.ts +31 -0
- package/dist/services/AttrService.js +57 -0
- package/dist/services/AttrService.min.js +1 -0
- package/dist/services/DOMTokenListService.d.ts +33 -0
- package/dist/services/DOMTokenListService.js +117 -0
- package/dist/services/DOMTokenListService.min.js +1 -0
- package/dist/services/DocumentFragmentService.d.ts +4 -0
- package/dist/services/DocumentFragmentService.js +9 -0
- package/dist/services/DocumentFragmentService.min.js +1 -0
- package/dist/services/DocumentService.d.ts +4 -0
- package/dist/services/DocumentService.js +9 -0
- package/dist/services/DocumentService.min.js +1 -0
- package/dist/services/ElementService.d.ts +95 -0
- package/dist/services/ElementService.js +205 -0
- package/dist/services/ElementService.min.js +1 -0
- package/dist/services/EventService.d.ts +106 -0
- package/dist/services/EventService.js +216 -0
- package/dist/services/EventService.min.js +1 -0
- package/dist/services/EventTargetService.d.ts +52 -0
- package/dist/services/EventTargetService.js +163 -0
- package/dist/services/EventTargetService.min.js +1 -0
- package/dist/services/HTMLCollectionService.d.ts +3 -0
- package/dist/services/HTMLCollectionService.js +8 -0
- package/dist/services/HTMLCollectionService.min.js +1 -0
- package/dist/services/HTMLElementService.d.ts +37 -0
- package/dist/services/HTMLElementService.js +68 -0
- package/dist/services/HTMLElementService.min.js +1 -0
- package/dist/services/HTMLSlotElementService.d.ts +4 -0
- package/dist/services/HTMLSlotElementService.js +9 -0
- package/dist/services/HTMLSlotElementService.min.js +1 -0
- package/dist/services/NamedNodeMapService.d.ts +23 -0
- package/dist/services/NamedNodeMapService.js +77 -0
- package/dist/services/NamedNodeMapService.min.js +1 -0
- package/dist/services/NodeService.d.ts +111 -0
- package/dist/services/NodeService.js +230 -0
- package/dist/services/NodeService.min.js +1 -0
- package/dist/services/ShadowRootService.d.ts +4 -0
- package/dist/services/ShadowRootService.js +9 -0
- package/dist/services/ShadowRootService.min.js +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
4
|
+
require('core-js/modules/esnext.iterator.map.js')
|
|
5
|
+
Object.defineProperty(exports, '__esModule', {
|
|
6
|
+
value: true
|
|
7
|
+
})
|
|
8
|
+
exports.PseudoNodeList = void 0
|
|
9
|
+
/**
|
|
10
|
+
* @file Substitute for the NodeList interface.
|
|
11
|
+
* @author Joshua Heagle <joshuaheagle@gmail.com>
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
const LinkedTreeList_1 = require('collect-your-stuff/dist/collections/linked-tree-list/LinkedTreeList')
|
|
15
|
+
/**
|
|
16
|
+
* A NodeList, like the DOM one, iterates over the nodes themselves (the data stored in each TreeLinker), rather than
|
|
17
|
+
* the linkers that hold them.
|
|
18
|
+
* @class
|
|
19
|
+
* @augments LinkedTreeList
|
|
20
|
+
*/
|
|
21
|
+
class PseudoNodeList extends LinkedTreeList_1.LinkedTreeList {
|
|
22
|
+
/**
|
|
23
|
+
* Iterate over the nodes in this list.
|
|
24
|
+
* @returns {Iterator}
|
|
25
|
+
*/
|
|
26
|
+
[Symbol.iterator] () {
|
|
27
|
+
const linkers = super[Symbol.iterator]()
|
|
28
|
+
return {
|
|
29
|
+
next: () => {
|
|
30
|
+
const result = linkers.next()
|
|
31
|
+
return result.done
|
|
32
|
+
? result
|
|
33
|
+
: {
|
|
34
|
+
done: false,
|
|
35
|
+
value: result.value.data
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Iterate over [index, node] pairs.
|
|
43
|
+
* @returns {Iterator}
|
|
44
|
+
*/
|
|
45
|
+
entries () {
|
|
46
|
+
return Array.from(this).map((node, index) => [index, node])[Symbol.iterator]()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Iterate over the indexes.
|
|
51
|
+
* @returns {Iterator}
|
|
52
|
+
*/
|
|
53
|
+
keys () {
|
|
54
|
+
return Array.from(this).map((node, index) => index)[Symbol.iterator]()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Iterate over the nodes.
|
|
59
|
+
* @returns {Iterator}
|
|
60
|
+
*/
|
|
61
|
+
values () {
|
|
62
|
+
return Array.from(this)[Symbol.iterator]()
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.PseudoNodeList = PseudoNodeList
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.PseudoNodeList=void 0;const LinkedTreeList_1=require("collect-your-stuff/dist/collections/linked-tree-list/LinkedTreeList");class PseudoNodeList extends LinkedTreeList_1.LinkedTreeList{[Symbol.iterator](){const e=super[Symbol.iterator]();return{next:()=>{const r=e.next();return r.done?r:{done:!1,value:r.value.data}}}}entries(){return Array.from(this).map((e,r)=>[r,e])[Symbol.iterator]()}keys(){return Array.from(this).map((e,r)=>r)[Symbol.iterator]()}values(){return Array.from(this)[Symbol.iterator]()}}exports.PseudoNodeList=PseudoNodeList;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file All of the Pseudo Dom classes for replicating DOM structure.
|
|
3
|
+
* @author Joshua Heagle <joshuaheagle@gmail.com>
|
|
4
|
+
* @version 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import { EventService as PseudoEvent } from './services/EventService';
|
|
7
|
+
import PseudoEventTarget from './services/EventTargetService';
|
|
8
|
+
import { NodeService as PseudoNode } from './services/NodeService';
|
|
9
|
+
import { ElementService as PseudoElement } from './services/ElementService';
|
|
10
|
+
import { HTMLElementService as PseudoHTMLElement } from './services/HTMLElementService';
|
|
11
|
+
import PseudoHTMLDocument from './classes/PseudoHTMLDocument';
|
|
12
|
+
declare const _default: {
|
|
13
|
+
PseudoEvent: typeof PseudoEvent;
|
|
14
|
+
PseudoEventTarget: typeof PseudoEventTarget;
|
|
15
|
+
PseudoNode: typeof PseudoNode;
|
|
16
|
+
PseudoElement: typeof PseudoElement;
|
|
17
|
+
PseudoHTMLElement: typeof PseudoHTMLElement;
|
|
18
|
+
PseudoHTMLDocument: typeof PseudoHTMLDocument;
|
|
19
|
+
};
|
|
20
|
+
export default _default;
|
package/dist/classes.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file All of the Pseudo Dom classes for replicating DOM structure.
|
|
5
|
+
* @author Joshua Heagle <joshuaheagle@gmail.com>
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
const __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
9
|
+
return mod && mod.__esModule
|
|
10
|
+
? mod
|
|
11
|
+
: {
|
|
12
|
+
default: mod
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(exports, '__esModule', {
|
|
16
|
+
value: true
|
|
17
|
+
})
|
|
18
|
+
const EventService_1 = require('./services/EventService')
|
|
19
|
+
const EventTargetService_1 = __importDefault(require('./services/EventTargetService'))
|
|
20
|
+
const NodeService_1 = require('./services/NodeService')
|
|
21
|
+
const ElementService_1 = require('./services/ElementService')
|
|
22
|
+
const HTMLElementService_1 = require('./services/HTMLElementService')
|
|
23
|
+
const PseudoHTMLDocument_1 = __importDefault(require('./classes/PseudoHTMLDocument'))
|
|
24
|
+
exports.default = {
|
|
25
|
+
PseudoEvent: EventService_1.EventService,
|
|
26
|
+
PseudoEventTarget: EventTargetService_1.default,
|
|
27
|
+
PseudoNode: NodeService_1.NodeService,
|
|
28
|
+
PseudoElement: ElementService_1.ElementService,
|
|
29
|
+
PseudoHTMLElement: HTMLElementService_1.HTMLElementService,
|
|
30
|
+
PseudoHTMLDocument: PseudoHTMLDocument_1.default
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const EventService_1=require("./services/EventService"),EventTargetService_1=__importDefault(require("./services/EventTargetService")),NodeService_1=require("./services/NodeService"),ElementService_1=require("./services/ElementService"),HTMLElementService_1=require("./services/HTMLElementService"),PseudoHTMLDocument_1=__importDefault(require("./classes/PseudoHTMLDocument"));exports.default={PseudoEvent:EventService_1.EventService,PseudoEventTarget:EventTargetService_1.default,PseudoNode:NodeService_1.NodeService,PseudoElement:ElementService_1.ElementService,PseudoHTMLElement:HTMLElementService_1.HTMLElementService,PseudoHTMLDocument:PseudoHTMLDocument_1.default};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import PseudoEventTarget from '../services/EventTargetService';
|
|
2
|
+
/**
|
|
3
|
+
* Construct the Pseudo Dom to provide access to Dom objects which are otherwise not available outside the browser
|
|
4
|
+
* context.
|
|
5
|
+
* @function generateDocument
|
|
6
|
+
* @param {Object} root
|
|
7
|
+
* @param {Object} context
|
|
8
|
+
* @returns {Window|PseudoEventTarget}
|
|
9
|
+
*/
|
|
10
|
+
declare const generateDocument: (root: Window | any, context?: object) => Window | PseudoEventTarget;
|
|
11
|
+
export default generateDocument;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
4
|
+
return mod && mod.__esModule
|
|
5
|
+
? mod
|
|
6
|
+
: {
|
|
7
|
+
default: mod
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(exports, '__esModule', {
|
|
11
|
+
value: true
|
|
12
|
+
})
|
|
13
|
+
const EventTargetService_1 = __importDefault(require('../services/EventTargetService'))
|
|
14
|
+
const NodeService_1 = require('../services/NodeService')
|
|
15
|
+
const ElementService_1 = require('../services/ElementService')
|
|
16
|
+
const HTMLElementService_1 = require('../services/HTMLElementService')
|
|
17
|
+
const PseudoHTMLDocument_1 = __importDefault(require('../classes/PseudoHTMLDocument'))
|
|
18
|
+
/**
|
|
19
|
+
* Construct the Pseudo Dom to provide access to Dom objects which are otherwise not available outside the browser
|
|
20
|
+
* context.
|
|
21
|
+
* @function generateDocument
|
|
22
|
+
* @param {Object} root
|
|
23
|
+
* @param {Object} context
|
|
24
|
+
* @returns {Window|PseudoEventTarget}
|
|
25
|
+
*/
|
|
26
|
+
const generateDocument = (root, context = {}) => {
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @type {Window|PseudoEventTarget}
|
|
30
|
+
*/
|
|
31
|
+
const newWindow = typeof root.document === 'undefined' ? root : new EventTargetService_1.default()
|
|
32
|
+
/**
|
|
33
|
+
* @type {Node|PseudoNode}
|
|
34
|
+
*/
|
|
35
|
+
const Node = root.Node || new NodeService_1.NodeService()
|
|
36
|
+
if (typeof newWindow.Node === 'undefined') {
|
|
37
|
+
newWindow.Node = Node
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* @type {Element|PseudoElement}
|
|
42
|
+
*/
|
|
43
|
+
const Element = root.Element || new ElementService_1.ElementService()
|
|
44
|
+
if (typeof newWindow.Element === 'undefined') {
|
|
45
|
+
newWindow.Element = Element
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create an instance of HTMLElement if not available
|
|
49
|
+
* @type {HTMLElement|PseudoHTMLElement}
|
|
50
|
+
*/
|
|
51
|
+
const HTMLElement = root.HTMLElement || new HTMLElementService_1.HTMLElementService()
|
|
52
|
+
if (typeof newWindow.HTMLElement === 'undefined') {
|
|
53
|
+
newWindow.HTMLElement = HTMLElement
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Define document when not available
|
|
57
|
+
* @type {Document|PseudoHTMLDocument}
|
|
58
|
+
*/
|
|
59
|
+
const document = root.document || new PseudoHTMLDocument_1.default()
|
|
60
|
+
if (typeof newWindow.document === 'undefined') {
|
|
61
|
+
newWindow.document = document
|
|
62
|
+
}
|
|
63
|
+
return context ? Object.assign(context, newWindow) : Object.assign(root, newWindow)
|
|
64
|
+
}
|
|
65
|
+
exports.default = generateDocument
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const EventTargetService_1=__importDefault(require("../services/EventTargetService")),NodeService_1=require("../services/NodeService"),ElementService_1=require("../services/ElementService"),HTMLElementService_1=require("../services/HTMLElementService"),PseudoHTMLDocument_1=__importDefault(require("../classes/PseudoHTMLDocument")),generateDocument=(e,t={})=>{const r=void 0===e.document?e:new EventTargetService_1.default,n=e.Node||new NodeService_1.NodeService;void 0===r.Node&&(r.Node=n);const c=e.Element||new ElementService_1.ElementService;void 0===r.Element&&(r.Element=c);const o=e.HTMLElement||new HTMLElementService_1.HTMLElementService;void 0===r.HTMLElement&&(r.HTMLElement=o);const i=e.document||new PseudoHTMLDocument_1.default;return void 0===r.document&&(r.document=i),t?Object.assign(t,r):Object.assign(e,r)};exports.default=generateDocument;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { TreeLinker } from 'collect-your-stuff/dist/collections/linked-tree-list/TreeLinker';
|
|
2
|
+
import { NodeService } from '../services/NodeService';
|
|
3
|
+
import { PseudoNode } from '../interfaces/PseudoNode';
|
|
4
|
+
import { PseudoElement } from '../interfaces/PseudoElement';
|
|
5
|
+
/**
|
|
6
|
+
* A node which is stored in a TreeLinker and answers questions about its position in the tree by asking that linker.
|
|
7
|
+
* @author Joshua Heagle <joshuaheagle@gmail.com>
|
|
8
|
+
* @class
|
|
9
|
+
* @augments NodeService
|
|
10
|
+
*/
|
|
11
|
+
export declare class LinkedNode extends NodeService {
|
|
12
|
+
private readonly linker;
|
|
13
|
+
/**
|
|
14
|
+
* @param {TreeLinker} linker The linker holding this node
|
|
15
|
+
* @param {string|null} value The value of the node
|
|
16
|
+
* @constructor
|
|
17
|
+
*/
|
|
18
|
+
constructor(linker: TreeLinker, value?: string | null);
|
|
19
|
+
get childNodes(): any;
|
|
20
|
+
get firstChild(): PseudoNode | null;
|
|
21
|
+
get isConnected(): boolean;
|
|
22
|
+
get lastChild(): PseudoNode | null;
|
|
23
|
+
get nextSibling(): PseudoNode | null;
|
|
24
|
+
get ownerDocument(): any;
|
|
25
|
+
get parentNode(): PseudoNode | null;
|
|
26
|
+
get parentElement(): PseudoElement | null;
|
|
27
|
+
get previousSibling(): PseudoNode | null;
|
|
28
|
+
appendChild(childNode: PseudoNode): PseudoNode;
|
|
29
|
+
getRootNode(): PseudoNode;
|
|
30
|
+
}
|
|
31
|
+
export declare class NodeFactory extends TreeLinker {
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a TreeLinker class whose linkers each store a node (a LinkedNode) as their data, this can be used to build a
|
|
35
|
+
* tree (or list) of nodes from plain values.
|
|
36
|
+
* @function generateNode
|
|
37
|
+
* @returns {Function} The NodeFactory class (a TreeLinker) to use as the linker class
|
|
38
|
+
*/
|
|
39
|
+
declare const generateNode: () => typeof NodeFactory;
|
|
40
|
+
export default generateNode;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
4
|
+
require('core-js/modules/esnext.iterator.reduce.js')
|
|
5
|
+
Object.defineProperty(exports, '__esModule', {
|
|
6
|
+
value: true
|
|
7
|
+
})
|
|
8
|
+
exports.NodeFactory = exports.LinkedNode = void 0
|
|
9
|
+
const TreeLinker_1 = require('collect-your-stuff/dist/collections/linked-tree-list/TreeLinker')
|
|
10
|
+
const NodeService_1 = require('../services/NodeService')
|
|
11
|
+
/**
|
|
12
|
+
* A node which is stored in a TreeLinker and answers questions about its position in the tree by asking that linker.
|
|
13
|
+
* @author Joshua Heagle <joshuaheagle@gmail.com>
|
|
14
|
+
* @class
|
|
15
|
+
* @augments NodeService
|
|
16
|
+
*/
|
|
17
|
+
class LinkedNode extends NodeService_1.NodeService {
|
|
18
|
+
/**
|
|
19
|
+
* @param {TreeLinker} linker The linker holding this node
|
|
20
|
+
* @param {string|null} value The value of the node
|
|
21
|
+
* @constructor
|
|
22
|
+
*/
|
|
23
|
+
constructor (linker, value = '') {
|
|
24
|
+
super()
|
|
25
|
+
this.linker = linker
|
|
26
|
+
this.nodeValue = value
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
get childNodes () {
|
|
30
|
+
return this.linker.children
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get firstChild () {
|
|
34
|
+
const children = this.linker.children
|
|
35
|
+
return children && children.first ? children.first.data : null
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get isConnected () {
|
|
39
|
+
return !!this.linker.parent
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
get lastChild () {
|
|
43
|
+
const children = this.linker.children
|
|
44
|
+
return children && children.last ? children.last.data : null
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
get nextSibling () {
|
|
48
|
+
return this.linker.next ? this.linker.next.data : null
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
get ownerDocument () {
|
|
52
|
+
const root = this.linker.parent ? this.linker.rootParent : null
|
|
53
|
+
return root ? root.data : null
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
get parentNode () {
|
|
57
|
+
return this.linker.parent ? this.linker.parent.data : null
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
get parentElement () {
|
|
61
|
+
const parent = this.parentNode
|
|
62
|
+
return parent && parent.nodeType === NodeService_1.NodeService.ELEMENT_NODE ? parent : null
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
get previousSibling () {
|
|
66
|
+
return this.linker.prev ? this.linker.prev.data : null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
appendChild (childNode) {
|
|
70
|
+
this.linker.next = childNode
|
|
71
|
+
childNode.prev = this.linker
|
|
72
|
+
return childNode
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
getRootNode () {
|
|
76
|
+
const root = this.linker.rootParent
|
|
77
|
+
return root ? root.data : this
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.LinkedNode = LinkedNode
|
|
81
|
+
class NodeFactory extends TreeLinker_1.TreeLinker {}
|
|
82
|
+
exports.NodeFactory = NodeFactory
|
|
83
|
+
/**
|
|
84
|
+
* Create a TreeLinker class whose linkers each store a node (a LinkedNode) as their data, this can be used to build a
|
|
85
|
+
* tree (or list) of nodes from plain values.
|
|
86
|
+
* @function generateNode
|
|
87
|
+
* @returns {Function} The NodeFactory class (a TreeLinker) to use as the linker class
|
|
88
|
+
*/
|
|
89
|
+
const generateNode = () => {
|
|
90
|
+
NodeFactory.fromArray = (values = [], LinkerClass = NodeFactory) => values.reduce((list, element) => {
|
|
91
|
+
if (typeof element !== 'object') {
|
|
92
|
+
element = {
|
|
93
|
+
data: element
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const newElement = new LinkerClass(Object.assign({}, element, {
|
|
97
|
+
prev: list.tail
|
|
98
|
+
}))
|
|
99
|
+
newElement.data = new LinkedNode(newElement, element.data)
|
|
100
|
+
if (list.head === null) {
|
|
101
|
+
return {
|
|
102
|
+
head: newElement,
|
|
103
|
+
tail: newElement
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
list.tail.next = newElement
|
|
107
|
+
newElement.prev = list.tail
|
|
108
|
+
return {
|
|
109
|
+
head: list.head,
|
|
110
|
+
tail: newElement
|
|
111
|
+
}
|
|
112
|
+
}, {
|
|
113
|
+
head: null,
|
|
114
|
+
tail: null
|
|
115
|
+
})
|
|
116
|
+
return NodeFactory
|
|
117
|
+
}
|
|
118
|
+
exports.default = generateNode
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.NodeFactory=exports.LinkedNode=void 0;const TreeLinker_1=require("collect-your-stuff/dist/collections/linked-tree-list/TreeLinker"),NodeService_1=require("../services/NodeService");class LinkedNode extends NodeService_1.NodeService{constructor(e,t=""){super(),this.linker=e,this.nodeValue=t}get childNodes(){return this.linker.children}get firstChild(){const e=this.linker.children;return e&&e.first?e.first.data:null}get isConnected(){return!!this.linker.parent}get lastChild(){const e=this.linker.children;return e&&e.last?e.last.data:null}get nextSibling(){return this.linker.next?this.linker.next.data:null}get ownerDocument(){const e=this.linker.parent?this.linker.rootParent:null;return e?e.data:null}get parentNode(){return this.linker.parent?this.linker.parent.data:null}get parentElement(){const e=this.parentNode;return e&&e.nodeType===NodeService_1.NodeService.ELEMENT_NODE?e:null}get previousSibling(){return this.linker.prev?this.linker.prev.data:null}appendChild(e){return this.linker.next=e,e.prev=this.linker,e}getRootNode(){const e=this.linker.rootParent;return e?e.data:this}}exports.LinkedNode=LinkedNode;class NodeFactory extends TreeLinker_1.TreeLinker{}exports.NodeFactory=NodeFactory;const generateNode=()=>(NodeFactory.fromArray=(e=[],t=NodeFactory)=>e.reduce((e,r)=>{"object"!=typeof r&&(r={data:r});const n=new t(Object.assign({},r,{prev:e.tail}));return n.data=new LinkedNode(n,r.data),null===e.head?{head:n,tail:n}:(e.tail.next=n,n.prev=e.tail,{head:e.head,tail:n})},{head:null,tail:null}),NodeFactory);exports.default=generateNode;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PseudoNodeList } from '../classes/PseudoNodeList';
|
|
2
|
+
import { TreeLinker } from 'collect-your-stuff/dist/collections/linked-tree-list/TreeLinker';
|
|
3
|
+
/**
|
|
4
|
+
* Create a PseudoNodeList, optionally starting from an existing chain of linkers.
|
|
5
|
+
* @param {TreeLinker|null} [innerList=null]
|
|
6
|
+
* @returns {PseudoNodeList}
|
|
7
|
+
*/
|
|
8
|
+
declare const generateNodeList: (innerList?: TreeLinker | null) => PseudoNodeList;
|
|
9
|
+
export default generateNodeList;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
const PseudoNodeList_1 = require('../classes/PseudoNodeList')
|
|
7
|
+
/**
|
|
8
|
+
* Create a PseudoNodeList, optionally starting from an existing chain of linkers.
|
|
9
|
+
* @param {TreeLinker|null} [innerList=null]
|
|
10
|
+
* @returns {PseudoNodeList}
|
|
11
|
+
*/
|
|
12
|
+
const generateNodeList = (innerList = null) => new PseudoNodeList_1.PseudoNodeList().initialize(innerList)
|
|
13
|
+
exports.default = generateNodeList
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const PseudoNodeList_1=require("../classes/PseudoNodeList"),generateNodeList=(e=null)=>(new PseudoNodeList_1.PseudoNodeList).initialize(e);exports.default=generateNodeList;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
generateNode: () => typeof import("./factories/generateNode").NodeFactory;
|
|
3
|
+
nodeListFactory: (innerList?: import("collect-your-stuff/dist/collections/linked-tree-list/TreeLinker").TreeLinker | null) => import("./classes/PseudoNodeList").PseudoNodeList;
|
|
4
|
+
};
|
|
5
|
+
export default _default;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
4
|
+
return mod && mod.__esModule
|
|
5
|
+
? mod
|
|
6
|
+
: {
|
|
7
|
+
default: mod
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(exports, '__esModule', {
|
|
11
|
+
value: true
|
|
12
|
+
})
|
|
13
|
+
/**
|
|
14
|
+
* @file All of the Pseudo Dom Helper functions for generating DOM objects.
|
|
15
|
+
* @author Joshua Heagle <joshuaheagle@gmail.com>
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
const generateNode_1 = __importDefault(require('./factories/generateNode'))
|
|
19
|
+
const generateNodeList_1 = __importDefault(require('./factories/generateNodeList'))
|
|
20
|
+
exports.default = {
|
|
21
|
+
generateNode: generateNode_1.default,
|
|
22
|
+
nodeListFactory: generateNodeList_1.default
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const generateNode_1=__importDefault(require("./factories/generateNode")),generateNodeList_1=__importDefault(require("./factories/generateNodeList"));exports.default={generateNode:generateNode_1.default,nodeListFactory:generateNodeList_1.default};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A helper selector function for retrieving all parent PseudoNode for the given child node.
|
|
3
|
+
* @param {PseudoNode} node
|
|
4
|
+
* @returns {Array.<PseudoNode>}
|
|
5
|
+
*/
|
|
6
|
+
import { PseudoNode } from '../interfaces/PseudoNode';
|
|
7
|
+
import { PseudoEventTarget } from '../interfaces/PseudoEventTarget';
|
|
8
|
+
declare const getParentNodes: (node: PseudoEventTarget) => Array<PseudoNode>;
|
|
9
|
+
export default getParentNodes;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
4
|
+
return mod && mod.__esModule
|
|
5
|
+
? mod
|
|
6
|
+
: {
|
|
7
|
+
default: mod
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(exports, '__esModule', {
|
|
11
|
+
value: true
|
|
12
|
+
})
|
|
13
|
+
const getParentNodesFromAttribute_1 = __importDefault(require('./getParentNodesFromAttribute'))
|
|
14
|
+
const getParentNodes = node => (0, getParentNodesFromAttribute_1.default)('', false, node)
|
|
15
|
+
exports.default = getParentNodes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const getParentNodesFromAttribute_1=__importDefault(require("./getParentNodesFromAttribute")),getParentNodes=e=>(0,getParentNodesFromAttribute_1.default)("",!1,e);exports.default=getParentNodes;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A selector function for retrieving existing parent PseudoNode from the given child item.
|
|
3
|
+
* This function will check all the parents starting from node, and scan the attributes
|
|
4
|
+
* property for matches. The return array contains all matching parent ancestors.
|
|
5
|
+
* WARNING: This is a recursive function.
|
|
6
|
+
* @param {string} attr
|
|
7
|
+
* @param {number|string} value
|
|
8
|
+
* @param {PseudoNode} node
|
|
9
|
+
* @returns {Array.<PseudoNode>}
|
|
10
|
+
*/
|
|
11
|
+
import { PseudoNode } from '../interfaces/PseudoNode';
|
|
12
|
+
import { PseudoEventTarget } from '../interfaces/PseudoEventTarget';
|
|
13
|
+
declare const getParentNodesFromAttribute: (attr: string, value: boolean | number | string, node: PseudoEventTarget | PseudoNode | any) => Array<PseudoNode>;
|
|
14
|
+
export default getParentNodesFromAttribute;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
const getParentNodesFromAttribute = (attr, value, node) => {
|
|
7
|
+
return Object.keys(node.parentNode).length ? (node.parentNode[attr] || false) === value ? getParentNodesFromAttribute(attr, value, node.parentNode).concat([node.parentNode]) : getParentNodesFromAttribute(attr, value, node.parentNode) : []
|
|
8
|
+
}
|
|
9
|
+
exports.default = getParentNodesFromAttribute
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const getParentNodesFromAttribute=(e,t,r)=>Object.keys(r.parentNode).length?(r.parentNode[e]||!1)===t?getParentNodesFromAttribute(e,t,r.parentNode).concat([r.parentNode]):getParentNodesFromAttribute(e,t,r.parentNode):[];exports.default=getParentNodesFromAttribute;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
getParentNodes: (node: import("./interfaces/PseudoEventTarget").PseudoEventTarget) => Array<import("./interfaces/PseudoNode").PseudoNode>;
|
|
3
|
+
getParentNodesFromAttribute: (attr: string, value: boolean | number | string, node: import("./interfaces/PseudoEventTarget").PseudoEventTarget | import("./interfaces/PseudoNode").PseudoNode | any) => Array<import("./interfaces/PseudoNode").PseudoNode>;
|
|
4
|
+
};
|
|
5
|
+
export default _default;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
4
|
+
return mod && mod.__esModule
|
|
5
|
+
? mod
|
|
6
|
+
: {
|
|
7
|
+
default: mod
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(exports, '__esModule', {
|
|
11
|
+
value: true
|
|
12
|
+
})
|
|
13
|
+
/**
|
|
14
|
+
* @file Helper functions for managing interactions with DOM classes
|
|
15
|
+
* @author Joshua Heagle <joshuaheagle@gmail.com>
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
const getParentNodes_1 = __importDefault(require('./functions/getParentNodes'))
|
|
19
|
+
const getParentNodesFromAttribute_1 = __importDefault(require('./functions/getParentNodesFromAttribute'))
|
|
20
|
+
exports.default = {
|
|
21
|
+
getParentNodes: getParentNodes_1.default,
|
|
22
|
+
getParentNodesFromAttribute: getParentNodesFromAttribute_1.default
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const getParentNodes_1=__importDefault(require("./functions/getParentNodes")),getParentNodesFromAttribute_1=__importDefault(require("./functions/getParentNodesFromAttribute"));exports.default={getParentNodes:getParentNodes_1.default,getParentNodesFromAttribute:getParentNodesFromAttribute_1.default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PseudoNode } from './PseudoNode';
|
|
2
|
+
import { PseudoElement } from './PseudoElement';
|
|
3
|
+
export interface PseudoAttr extends PseudoNode {
|
|
4
|
+
get localName(): string;
|
|
5
|
+
get name(): string;
|
|
6
|
+
get namespaceURI(): string;
|
|
7
|
+
get ownerElement(): PseudoElement | null;
|
|
8
|
+
get prefix(): string | null;
|
|
9
|
+
get value(): string;
|
|
10
|
+
set value(value: string);
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface PseudoDOMTokenList {
|
|
2
|
+
get length(): number;
|
|
3
|
+
get value(): string;
|
|
4
|
+
set value(value: string);
|
|
5
|
+
item(index: number): string | null;
|
|
6
|
+
contains(token: string): boolean;
|
|
7
|
+
add(...tokens: string[]): void;
|
|
8
|
+
remove(...tokens: string[]): void;
|
|
9
|
+
replace(oldToken: string, newToken: string): boolean;
|
|
10
|
+
supports(token: string): boolean;
|
|
11
|
+
toggle(token: string, force: boolean): boolean;
|
|
12
|
+
entries(): Iterator<any>;
|
|
13
|
+
forEach(callback: Function, thisArg: any): void;
|
|
14
|
+
keys(): Iterator<any>;
|
|
15
|
+
values(): Iterator<any>;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|