1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | 'use strict';
|
10 |
|
11 | var DOMNamespaces = require('./DOMNamespaces');
|
12 | var setInnerHTML = require('./setInnerHTML');
|
13 |
|
14 | var createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction');
|
15 | var setTextContent = require('./setTextContent');
|
16 |
|
17 | var ELEMENT_NODE_TYPE = 1;
|
18 | var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | var enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\bEdge\/\d/.test(navigator.userAgent);
|
32 |
|
33 | function insertTreeChildren(tree) {
|
34 | if (!enableLazy) {
|
35 | return;
|
36 | }
|
37 | var node = tree.node;
|
38 | var children = tree.children;
|
39 | if (children.length) {
|
40 | for (var i = 0; i < children.length; i++) {
|
41 | insertTreeBefore(node, children[i], null);
|
42 | }
|
43 | } else if (tree.html != null) {
|
44 | setInnerHTML(node, tree.html);
|
45 | } else if (tree.text != null) {
|
46 | setTextContent(node, tree.text);
|
47 | }
|
48 | }
|
49 |
|
50 | var insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 | if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {
|
58 | insertTreeChildren(tree);
|
59 | parentNode.insertBefore(tree.node, referenceNode);
|
60 | } else {
|
61 | parentNode.insertBefore(tree.node, referenceNode);
|
62 | insertTreeChildren(tree);
|
63 | }
|
64 | });
|
65 |
|
66 | function replaceChildWithTree(oldNode, newTree) {
|
67 | oldNode.parentNode.replaceChild(newTree.node, oldNode);
|
68 | insertTreeChildren(newTree);
|
69 | }
|
70 |
|
71 | function queueChild(parentTree, childTree) {
|
72 | if (enableLazy) {
|
73 | parentTree.children.push(childTree);
|
74 | } else {
|
75 | parentTree.node.appendChild(childTree.node);
|
76 | }
|
77 | }
|
78 |
|
79 | function queueHTML(tree, html) {
|
80 | if (enableLazy) {
|
81 | tree.html = html;
|
82 | } else {
|
83 | setInnerHTML(tree.node, html);
|
84 | }
|
85 | }
|
86 |
|
87 | function queueText(tree, text) {
|
88 | if (enableLazy) {
|
89 | tree.text = text;
|
90 | } else {
|
91 | setTextContent(tree.node, text);
|
92 | }
|
93 | }
|
94 |
|
95 | function toString() {
|
96 | return this.node.nodeName;
|
97 | }
|
98 |
|
99 | function DOMLazyTree(node) {
|
100 | return {
|
101 | node: node,
|
102 | children: [],
|
103 | html: null,
|
104 | text: null,
|
105 | toString: toString
|
106 | };
|
107 | }
|
108 |
|
109 | DOMLazyTree.insertTreeBefore = insertTreeBefore;
|
110 | DOMLazyTree.replaceChildWithTree = replaceChildWithTree;
|
111 | DOMLazyTree.queueChild = queueChild;
|
112 | DOMLazyTree.queueHTML = queueHTML;
|
113 | DOMLazyTree.queueText = queueText;
|
114 |
|
115 | module.exports = DOMLazyTree; |
\ | No newline at end of file |