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