@tarojs/runtime 3.8.0-canary.0 → 4.0.0-alpha.10
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 +11 -4
- package/dist/bom/URL.d.ts +3 -13
- package/dist/bom/URL.js +221 -0
- package/dist/bom/URL.js.map +1 -0
- package/dist/bom/URLSearchParams.d.ts +1 -14
- package/dist/bom/URLSearchParams.js +123 -0
- package/dist/bom/URLSearchParams.js.map +1 -0
- package/dist/bom/document.d.ts +2 -2
- package/dist/bom/document.js +39 -0
- package/dist/bom/document.js.map +1 -0
- package/dist/bom/getComputedStyle.d.ts +2 -1
- package/dist/bom/getComputedStyle.js +8 -0
- package/dist/bom/getComputedStyle.js.map +1 -0
- package/dist/bom/history.d.ts +6 -5
- package/dist/bom/history.js +121 -0
- package/dist/bom/history.js.map +1 -0
- package/dist/bom/location.d.ts +3 -2
- package/dist/bom/location.js +240 -0
- package/dist/bom/location.js.map +1 -0
- package/dist/bom/navigator.d.ts +1 -1
- package/dist/bom/navigator.js +24 -0
- package/dist/bom/navigator.js.map +1 -0
- package/dist/bom/raf.js +33 -0
- package/dist/bom/raf.js.map +1 -0
- package/dist/bom/window.d.ts +25 -4
- package/dist/bom/window.js +92 -0
- package/dist/bom/window.js.map +1 -0
- package/dist/constants/index.js +63 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/current.js +9 -0
- package/dist/current.js.map +1 -0
- package/dist/dom/anchor-element.js +54 -0
- package/dist/dom/anchor-element.js.map +1 -0
- package/dist/dom/class-list.js +92 -0
- package/dist/dom/class-list.js.map +1 -0
- package/dist/dom/document.d.ts +1 -0
- package/dist/dom/document.js +80 -0
- package/dist/dom/document.js.map +1 -0
- package/dist/dom/element.d.ts +2 -2
- package/dist/dom/element.js +315 -0
- package/dist/dom/element.js.map +1 -0
- package/dist/dom/event-source.js +17 -0
- package/dist/dom/event-source.js.map +1 -0
- package/dist/dom/event-target.js +78 -0
- package/dist/dom/event-target.js.map +1 -0
- package/dist/dom/event.js +151 -0
- package/dist/dom/event.js.map +1 -0
- package/dist/dom/form.js +38 -0
- package/dist/dom/form.js.map +1 -0
- package/dist/dom/node.d.ts +2 -2
- package/dist/dom/node.js +292 -0
- package/dist/dom/node.js.map +1 -0
- package/dist/dom/root.d.ts +3 -3
- package/dist/dom/root.js +169 -0
- package/dist/dom/root.js.map +1 -0
- package/dist/dom/style.js +168 -0
- package/dist/dom/style.js.map +1 -0
- package/dist/dom/style_properties.js +186 -0
- package/dist/dom/style_properties.js.map +1 -0
- package/dist/dom/svg.js +8 -0
- package/dist/dom/svg.js.map +1 -0
- package/dist/dom/text.js +41 -0
- package/dist/dom/text.js.map +1 -0
- package/dist/dom/transfer.d.ts +7 -0
- package/dist/dom/transfer.js +15 -0
- package/dist/dom/transfer.js.map +1 -0
- package/dist/dom/tree.js +38 -0
- package/dist/dom/tree.js.map +1 -0
- package/dist/dom-external/element.js +29 -0
- package/dist/dom-external/element.js.map +1 -0
- package/dist/dom-external/index.js +40 -0
- package/dist/dom-external/index.js.map +1 -0
- package/dist/dom-external/inner-html/html.js +28 -0
- package/dist/dom-external/inner-html/html.js.map +1 -0
- package/dist/dom-external/inner-html/parser.js +216 -0
- package/dist/dom-external/inner-html/parser.js.map +1 -0
- package/dist/dom-external/inner-html/scaner.js +304 -0
- package/dist/dom-external/inner-html/scaner.js.map +1 -0
- package/dist/dom-external/inner-html/style.js +235 -0
- package/dist/dom-external/inner-html/style.js.map +1 -0
- package/dist/dom-external/inner-html/tags.js +26 -0
- package/dist/dom-external/inner-html/tags.js.map +1 -0
- package/dist/dom-external/inner-html/utils.js +12 -0
- package/dist/dom-external/inner-html/utils.js.map +1 -0
- package/dist/dom-external/mutation-observer/implements.js +108 -0
- package/dist/dom-external/mutation-observer/implements.js.map +1 -0
- package/dist/dom-external/mutation-observer/index.js +35 -0
- package/dist/dom-external/mutation-observer/index.js.map +1 -0
- package/dist/dom-external/node.js +75 -0
- package/dist/dom-external/node.js.map +1 -0
- package/dist/dsl/common.d.ts +1 -2
- package/dist/dsl/common.js +337 -0
- package/dist/dsl/common.js.map +1 -0
- package/dist/dsl/instance.d.ts +7 -14
- package/dist/emitter/emitter.js +7 -0
- package/dist/emitter/emitter.js.map +1 -0
- package/dist/env.js +9 -0
- package/dist/env.js.map +1 -0
- package/dist/hydrate.js +91 -0
- package/dist/hydrate.js.map +1 -0
- package/dist/index.cjs.js +5182 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/interface/event-target.d.ts +2 -1
- package/dist/interface/hydrate.d.ts +1 -1
- package/dist/interface/utils.d.ts +2 -2
- package/dist/next-tick.d.ts +2 -2
- package/dist/next-tick.js +47 -0
- package/dist/next-tick.js.map +1 -0
- package/dist/options.js +7 -0
- package/dist/options.js.map +1 -0
- package/dist/perf.d.ts +3 -1
- package/dist/perf.js +49 -0
- package/dist/perf.js.map +1 -0
- package/dist/polyfill/array.d.ts +2 -0
- package/dist/polyfill/array.js +56 -0
- package/dist/polyfill/array.js.map +1 -0
- package/dist/polyfill/index.d.ts +2 -0
- package/dist/polyfill/index.js +34 -0
- package/dist/polyfill/index.js.map +1 -0
- package/dist/polyfill/intersection-observer.d.ts +1 -0
- package/dist/polyfill/intersection-observer.js +600 -0
- package/dist/polyfill/intersection-observer.js.map +1 -0
- package/dist/polyfill/object.d.ts +3 -0
- package/dist/polyfill/object.js +102 -0
- package/dist/polyfill/object.js.map +1 -0
- package/dist/runtime.esm.js +4122 -3313
- package/dist/runtime.esm.js.map +1 -1
- package/dist/utils/cache.js +27 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/index.d.ts +5 -3
- package/dist/utils/index.js +99 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/lodash.d.ts +2 -0
- package/dist/utils/lodash.js +32 -0
- package/dist/utils/lodash.js.map +1 -0
- package/dist/utils/router.d.ts +7 -0
- package/dist/utils/router.js +24 -0
- package/dist/utils/router.js.map +1 -0
- package/package.json +21 -20
- package/dist/runtime.esm.d.ts +0 -781
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { unquote } from './utils.js';
|
|
2
|
+
|
|
3
|
+
const LEFT_BRACKET = '{';
|
|
4
|
+
const RIGHT_BRACKET = '}';
|
|
5
|
+
const CLASS_SELECTOR = '.';
|
|
6
|
+
const ID_SELECTOR = '#';
|
|
7
|
+
const CHILD_COMBINATOR = '>';
|
|
8
|
+
const GENERAL_SIBLING_COMBINATOR = '~';
|
|
9
|
+
const ADJACENT_SIBLING_COMBINATOR = '+';
|
|
10
|
+
class StyleTagParser {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.styles = [];
|
|
13
|
+
}
|
|
14
|
+
extractStyle(src) {
|
|
15
|
+
const REG_STYLE = /<style\s?[^>]*>((.|\n|\s)+?)<\/style>/g;
|
|
16
|
+
let html = src;
|
|
17
|
+
// let html = src.replace(/\n/g, '')
|
|
18
|
+
html = html.replace(REG_STYLE, (_, $1) => {
|
|
19
|
+
const style = $1.trim();
|
|
20
|
+
this.stringToSelector(style);
|
|
21
|
+
return '';
|
|
22
|
+
});
|
|
23
|
+
return html.trim();
|
|
24
|
+
}
|
|
25
|
+
stringToSelector(style) {
|
|
26
|
+
let lb = style.indexOf(LEFT_BRACKET);
|
|
27
|
+
while (lb > -1) {
|
|
28
|
+
const rb = style.indexOf(RIGHT_BRACKET);
|
|
29
|
+
const selectors = style.slice(0, lb).trim();
|
|
30
|
+
let content = style.slice(lb + 1, rb);
|
|
31
|
+
content = content.replace(/:(.*);/g, function (_, $1) {
|
|
32
|
+
const t = $1.trim().replace(/ +/g, '+++');
|
|
33
|
+
return `:${t};`;
|
|
34
|
+
});
|
|
35
|
+
content = content.replace(/ /g, '');
|
|
36
|
+
content = content.replace(/\+\+\+/g, ' ');
|
|
37
|
+
if (!(/;$/.test(content))) {
|
|
38
|
+
content += ';';
|
|
39
|
+
}
|
|
40
|
+
selectors.split(',').forEach(src => {
|
|
41
|
+
const selectorList = this.parseSelector(src);
|
|
42
|
+
this.styles.push({
|
|
43
|
+
content,
|
|
44
|
+
selectorList
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
style = style.slice(rb + 1);
|
|
48
|
+
lb = style.indexOf(LEFT_BRACKET);
|
|
49
|
+
}
|
|
50
|
+
// console.log('res this.styles: ', this.styles)
|
|
51
|
+
}
|
|
52
|
+
parseSelector(src) {
|
|
53
|
+
const list = src
|
|
54
|
+
.trim()
|
|
55
|
+
.replace(/ *([>~+]) */g, ' $1')
|
|
56
|
+
.replace(/ +/g, ' ')
|
|
57
|
+
.replace(/\[\s*([^[\]=\s]+)\s*=\s*([^[\]=\s]+)\s*\]/g, '[$1=$2]')
|
|
58
|
+
.split(' ');
|
|
59
|
+
const selectors = list.map(item => {
|
|
60
|
+
const firstChar = item.charAt(0);
|
|
61
|
+
const selector = {
|
|
62
|
+
isChild: firstChar === CHILD_COMBINATOR,
|
|
63
|
+
isGeneralSibling: firstChar === GENERAL_SIBLING_COMBINATOR,
|
|
64
|
+
isAdjacentSibling: firstChar === ADJACENT_SIBLING_COMBINATOR,
|
|
65
|
+
tag: null,
|
|
66
|
+
id: null,
|
|
67
|
+
class: [],
|
|
68
|
+
attrs: []
|
|
69
|
+
};
|
|
70
|
+
item = item.replace(/^[>~+]/, '');
|
|
71
|
+
// 属性选择器
|
|
72
|
+
item = item.replace(/\[(.+?)\]/g, function (_, $1) {
|
|
73
|
+
const [key, value] = $1.split('=');
|
|
74
|
+
const all = $1.indexOf('=') === -1;
|
|
75
|
+
const attr = {
|
|
76
|
+
all,
|
|
77
|
+
key,
|
|
78
|
+
value: all ? null : value
|
|
79
|
+
};
|
|
80
|
+
selector.attrs.push(attr);
|
|
81
|
+
return '';
|
|
82
|
+
});
|
|
83
|
+
item = item.replace(/([.#][A-Za-z0-9-_]+)/g, function (_, $1) {
|
|
84
|
+
if ($1[0] === ID_SELECTOR) {
|
|
85
|
+
// id 选择器
|
|
86
|
+
selector.id = $1.substr(1);
|
|
87
|
+
}
|
|
88
|
+
else if ($1[0] === CLASS_SELECTOR) {
|
|
89
|
+
// class 选择器
|
|
90
|
+
selector.class.push($1.substr(1));
|
|
91
|
+
}
|
|
92
|
+
return '';
|
|
93
|
+
});
|
|
94
|
+
// 标签选择器
|
|
95
|
+
if (item !== '') {
|
|
96
|
+
selector.tag = item;
|
|
97
|
+
}
|
|
98
|
+
return selector;
|
|
99
|
+
});
|
|
100
|
+
return selectors;
|
|
101
|
+
}
|
|
102
|
+
matchStyle(tagName, el, list) {
|
|
103
|
+
const res = sortStyles(this.styles).reduce((str, { content, selectorList }, i) => {
|
|
104
|
+
let idx = list[i];
|
|
105
|
+
let selector = selectorList[idx];
|
|
106
|
+
const nextSelector = selectorList[idx + 1];
|
|
107
|
+
if ((nextSelector === null || nextSelector === void 0 ? void 0 : nextSelector.isGeneralSibling) || (nextSelector === null || nextSelector === void 0 ? void 0 : nextSelector.isAdjacentSibling)) {
|
|
108
|
+
selector = nextSelector;
|
|
109
|
+
idx += 1;
|
|
110
|
+
list[i] += 1;
|
|
111
|
+
}
|
|
112
|
+
let isMatch = this.matchCurrent(tagName, el, selector);
|
|
113
|
+
if (isMatch && selector.isGeneralSibling) {
|
|
114
|
+
let prev = getPreviousElement(el);
|
|
115
|
+
while (prev) {
|
|
116
|
+
if (prev.h5tagName && this.matchCurrent(prev.h5tagName, prev, selectorList[idx - 1])) {
|
|
117
|
+
isMatch = true;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
prev = getPreviousElement(prev);
|
|
121
|
+
isMatch = false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (isMatch && selector.isAdjacentSibling) {
|
|
125
|
+
const prev = getPreviousElement(el);
|
|
126
|
+
if (!prev || !prev.h5tagName) {
|
|
127
|
+
isMatch = false;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
const isSiblingMatch = this.matchCurrent(prev.h5tagName, prev, selectorList[idx - 1]);
|
|
131
|
+
if (!isSiblingMatch) {
|
|
132
|
+
isMatch = false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (isMatch) {
|
|
137
|
+
if (idx === selectorList.length - 1) {
|
|
138
|
+
return str + content;
|
|
139
|
+
}
|
|
140
|
+
else if (idx < selectorList.length - 1) {
|
|
141
|
+
list[i] += 1;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// 直接子代组合器: >
|
|
146
|
+
if (selector.isChild && idx > 0) {
|
|
147
|
+
list[i] -= 1;
|
|
148
|
+
if (this.matchCurrent(tagName, el, selectorList[list[i]])) {
|
|
149
|
+
list[i] += 1;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return str;
|
|
154
|
+
}, '');
|
|
155
|
+
return res;
|
|
156
|
+
}
|
|
157
|
+
matchCurrent(tagName, el, selector) {
|
|
158
|
+
// 标签选择器
|
|
159
|
+
if (selector.tag && selector.tag !== tagName)
|
|
160
|
+
return false;
|
|
161
|
+
// id 选择器
|
|
162
|
+
if (selector.id && selector.id !== el.id)
|
|
163
|
+
return false;
|
|
164
|
+
// class 选择器
|
|
165
|
+
if (selector.class.length) {
|
|
166
|
+
const classList = el.className.split(' ');
|
|
167
|
+
for (let i = 0; i < selector.class.length; i++) {
|
|
168
|
+
const cls = selector.class[i];
|
|
169
|
+
if (classList.indexOf(cls) === -1) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// 属性选择器
|
|
175
|
+
if (selector.attrs.length) {
|
|
176
|
+
for (let i = 0; i < selector.attrs.length; i++) {
|
|
177
|
+
const { all, key, value } = selector.attrs[i];
|
|
178
|
+
if (all && !el.hasAttribute(key)) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const attr = el.getAttribute(key);
|
|
183
|
+
if (attr !== unquote(value || '')) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function getPreviousElement(el) {
|
|
193
|
+
const parent = el.parentElement;
|
|
194
|
+
if (!parent)
|
|
195
|
+
return null;
|
|
196
|
+
const prev = el.previousSibling;
|
|
197
|
+
if (!prev)
|
|
198
|
+
return null;
|
|
199
|
+
if (prev.nodeType === 1 /* NodeType.ELEMENT_NODE */) {
|
|
200
|
+
return prev;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
return getPreviousElement(prev);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// 根据 css selector 权重排序: 权重大的靠后
|
|
207
|
+
// @WARN 不考虑伪类
|
|
208
|
+
// https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance#specificity_2
|
|
209
|
+
function sortStyles(styles) {
|
|
210
|
+
return styles.sort((s1, s2) => {
|
|
211
|
+
const hundreds1 = getHundredsWeight(s1.selectorList);
|
|
212
|
+
const hundreds2 = getHundredsWeight(s2.selectorList);
|
|
213
|
+
if (hundreds1 !== hundreds2)
|
|
214
|
+
return hundreds1 - hundreds2;
|
|
215
|
+
const tens1 = getTensWeight(s1.selectorList);
|
|
216
|
+
const tens2 = getTensWeight(s2.selectorList);
|
|
217
|
+
if (tens1 !== tens2)
|
|
218
|
+
return tens1 - tens2;
|
|
219
|
+
const ones1 = getOnesWeight(s1.selectorList);
|
|
220
|
+
const ones2 = getOnesWeight(s2.selectorList);
|
|
221
|
+
return ones1 - ones2;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
function getHundredsWeight(selectors) {
|
|
225
|
+
return selectors.reduce((pre, cur) => pre + (cur.id ? 1 : 0), 0);
|
|
226
|
+
}
|
|
227
|
+
function getTensWeight(selectors) {
|
|
228
|
+
return selectors.reduce((pre, cur) => pre + cur.class.length + cur.attrs.length, 0);
|
|
229
|
+
}
|
|
230
|
+
function getOnesWeight(selectors) {
|
|
231
|
+
return selectors.reduce((pre, cur) => pre + (cur.tag ? 1 : 0), 0);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export { StyleTagParser as default };
|
|
235
|
+
//# sourceMappingURL=style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.js","sources":["../../../src/dom-external/inner-html/style.ts"],"sourcesContent":["import { NodeType } from '../../dom/node_types'\nimport { unquote } from './utils'\n\nimport type { ParsedTaroElement } from './parser'\n\nconst LEFT_BRACKET = '{'\nconst RIGHT_BRACKET = '}'\nconst CLASS_SELECTOR = '.'\nconst ID_SELECTOR = '#'\nconst CHILD_COMBINATOR = '>'\nconst GENERAL_SIBLING_COMBINATOR = '~'\nconst ADJACENT_SIBLING_COMBINATOR = '+'\n\ninterface ISelector {\n isChild: boolean\n isGeneralSibling: boolean\n isAdjacentSibling: boolean\n tag: string | null\n id: string | null\n class: string[]\n attrs: {\n all: boolean\n key: string\n value?: string | null\n }[]\n}\n\ninterface IStyle {\n content: string\n selectorList: ISelector[]\n}\n\nexport default class StyleTagParser {\n styles: IStyle[] = []\n\n extractStyle (src: string) {\n const REG_STYLE = /<style\\s?[^>]*>((.|\\n|\\s)+?)<\\/style>/g\n let html = src\n // let html = src.replace(/\\n/g, '')\n\n html = html.replace(REG_STYLE, (_, $1: string) => {\n const style = $1.trim()\n this.stringToSelector(style)\n return ''\n })\n\n return html.trim()\n }\n\n stringToSelector (style: string) {\n let lb = style.indexOf(LEFT_BRACKET)\n\n while (lb > -1) {\n const rb = style.indexOf(RIGHT_BRACKET)\n const selectors = style.slice(0, lb).trim()\n\n let content = style.slice(lb + 1, rb)\n content = content.replace(/:(.*);/g, function (_, $1) {\n const t = $1.trim().replace(/ +/g, '+++')\n return `:${t};`\n })\n content = content.replace(/ /g, '')\n content = content.replace(/\\+\\+\\+/g, ' ')\n\n if (!(/;$/.test(content))) {\n content += ';'\n }\n selectors.split(',').forEach(src => {\n const selectorList = this.parseSelector(src)\n this.styles.push({\n content,\n selectorList\n })\n })\n style = style.slice(rb + 1)\n lb = style.indexOf(LEFT_BRACKET)\n }\n // console.log('res this.styles: ', this.styles)\n }\n\n parseSelector (src: string) {\n const list = src\n .trim()\n .replace(/ *([>~+]) */g, ' $1')\n .replace(/ +/g, ' ')\n .replace(/\\[\\s*([^[\\]=\\s]+)\\s*=\\s*([^[\\]=\\s]+)\\s*\\]/g, '[$1=$2]')\n .split(' ')\n const selectors = list.map(item => {\n const firstChar = item.charAt(0)\n const selector: ISelector = {\n isChild: firstChar === CHILD_COMBINATOR,\n isGeneralSibling: firstChar === GENERAL_SIBLING_COMBINATOR,\n isAdjacentSibling: firstChar === ADJACENT_SIBLING_COMBINATOR,\n tag: null,\n id: null,\n class: [],\n attrs: []\n }\n\n item = item.replace(/^[>~+]/, '')\n\n // 属性选择器\n item = item.replace(/\\[(.+?)\\]/g, function (_, $1: string) {\n const [key, value] = $1.split('=')\n const all = $1.indexOf('=') === -1\n\n const attr = {\n all,\n key,\n value: all ? null : value\n }\n selector.attrs.push(attr)\n return ''\n })\n\n item = item.replace(/([.#][A-Za-z0-9-_]+)/g, function (_, $1: string) {\n if ($1[0] === ID_SELECTOR) {\n // id 选择器\n selector.id = $1.substr(1)\n } else if ($1[0] === CLASS_SELECTOR) {\n // class 选择器\n selector.class.push($1.substr(1))\n }\n return ''\n })\n\n // 标签选择器\n if (item !== '') {\n selector.tag = item\n }\n\n return selector\n })\n return selectors\n }\n\n matchStyle (tagName: string, el: ParsedTaroElement, list: number[]): string {\n const res = sortStyles(this.styles).reduce((str, { content, selectorList }, i) => {\n let idx = list[i]\n let selector = selectorList[idx]\n const nextSelector = selectorList[idx + 1]\n\n if (nextSelector?.isGeneralSibling || nextSelector?.isAdjacentSibling) {\n selector = nextSelector\n idx += 1\n list[i] += 1\n }\n\n let isMatch = this.matchCurrent(tagName, el, selector)\n\n if (isMatch && selector.isGeneralSibling) {\n let prev: ParsedTaroElement | null = getPreviousElement(el)\n while (prev) {\n if (prev.h5tagName && this.matchCurrent(prev.h5tagName, prev, selectorList[idx - 1])) {\n isMatch = true\n break\n }\n prev = getPreviousElement(prev)\n isMatch = false\n }\n }\n if (isMatch && selector.isAdjacentSibling) {\n const prev: ParsedTaroElement | null = getPreviousElement(el)\n if (!prev || !prev.h5tagName) {\n isMatch = false\n } else {\n const isSiblingMatch = this.matchCurrent(prev.h5tagName, prev, selectorList[idx - 1])\n if (!isSiblingMatch) {\n isMatch = false\n }\n }\n }\n\n if (isMatch) {\n if (idx === selectorList.length - 1) {\n return str + content\n } else if (idx < selectorList.length - 1) {\n list[i] += 1\n }\n } else {\n // 直接子代组合器: >\n if (selector.isChild && idx > 0) {\n list[i] -= 1\n if (this.matchCurrent(tagName, el, selectorList[list[i]])) {\n list[i] += 1\n }\n }\n }\n\n return str\n }, '')\n return res\n }\n\n matchCurrent (tagName: string, el: ParsedTaroElement, selector: ISelector): boolean {\n // 标签选择器\n if (selector.tag && selector.tag !== tagName) return false\n\n // id 选择器\n if (selector.id && selector.id !== el.id) return false\n\n // class 选择器\n if (selector.class.length) {\n const classList = el.className.split(' ')\n for (let i = 0; i < selector.class.length; i++) {\n const cls = selector.class[i]\n if (classList.indexOf(cls) === -1) {\n return false\n }\n }\n }\n\n // 属性选择器\n if (selector.attrs.length) {\n for (let i = 0; i < selector.attrs.length; i++) {\n const { all, key, value } = selector.attrs[i]\n if (all && !el.hasAttribute(key)) {\n return false\n } else {\n const attr = el.getAttribute(key)\n if (attr !== unquote(value || '')) {\n return false\n }\n }\n }\n }\n\n return true\n }\n}\n\nfunction getPreviousElement (el: ParsedTaroElement): ParsedTaroElement | null {\n const parent = el.parentElement\n if (!parent) return null\n\n const prev = el.previousSibling as ParsedTaroElement\n if (!prev) return null\n\n if (prev.nodeType === NodeType.ELEMENT_NODE) {\n return prev\n } else {\n return getPreviousElement(prev)\n }\n}\n\n// 根据 css selector 权重排序: 权重大的靠后\n// @WARN 不考虑伪类\n// https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance#specificity_2\nfunction sortStyles (styles: IStyle[]) {\n return styles.sort((s1, s2) => {\n const hundreds1 = getHundredsWeight(s1.selectorList)\n const hundreds2 = getHundredsWeight(s2.selectorList)\n\n if (hundreds1 !== hundreds2) return hundreds1 - hundreds2\n\n const tens1 = getTensWeight(s1.selectorList)\n const tens2 = getTensWeight(s2.selectorList)\n\n if (tens1 !== tens2) return tens1 - tens2\n\n const ones1 = getOnesWeight(s1.selectorList)\n const ones2 = getOnesWeight(s2.selectorList)\n\n return ones1 - ones2\n })\n}\n\nfunction getHundredsWeight (selectors: ISelector[]) {\n return selectors.reduce((pre, cur) => pre + (cur.id ? 1 : 0), 0)\n}\n\nfunction getTensWeight (selectors: ISelector[]) {\n return selectors.reduce((pre, cur) => pre + cur.class.length + cur.attrs.length, 0)\n}\n\nfunction getOnesWeight (selectors: ISelector[]) {\n return selectors.reduce((pre, cur) => pre + (cur.tag ? 1 : 0), 0)\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { internalComponents } from '@tarojs/shared';
|
|
2
|
+
|
|
3
|
+
function makeMap(str, expectsLowerCase) {
|
|
4
|
+
const map = Object.create(null);
|
|
5
|
+
const list = str.split(',');
|
|
6
|
+
for (let i = 0; i < list.length; i++) {
|
|
7
|
+
map[list[i]] = true;
|
|
8
|
+
}
|
|
9
|
+
return val => !!map[val.toLowerCase()] ;
|
|
10
|
+
}
|
|
11
|
+
const specialMiniElements = {
|
|
12
|
+
img: 'image',
|
|
13
|
+
iframe: 'web-view'
|
|
14
|
+
};
|
|
15
|
+
const internalCompsList = Object.keys(internalComponents)
|
|
16
|
+
.map(i => i.toLowerCase())
|
|
17
|
+
.join(',');
|
|
18
|
+
// https://developers.weixin.qq.com/miniprogram/dev/component
|
|
19
|
+
const isMiniElements = makeMap(internalCompsList);
|
|
20
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements
|
|
21
|
+
const isInlineElements = makeMap('a,i,abbr,iframe,select,acronym,slot,small,span,bdi,kbd,strong,big,map,sub,sup,br,mark,mark,meter,template,canvas,textarea,cite,object,time,code,output,u,data,picture,tt,datalist,var,dfn,del,q,em,s,embed,samp,b');
|
|
22
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements
|
|
23
|
+
const isBlockElements = makeMap('address,fieldset,li,article,figcaption,main,aside,figure,nav,blockquote,footer,ol,details,form,p,dialog,h1,h2,h3,h4,h5,h6,pre,dd,header,section,div,hgroup,table,dl,hr,ul,dt');
|
|
24
|
+
|
|
25
|
+
export { isBlockElements, isInlineElements, isMiniElements, makeMap, specialMiniElements };
|
|
26
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sources":["../../../src/dom-external/inner-html/tags.ts"],"sourcesContent":["import { internalComponents } from '@tarojs/shared'\n\nexport function makeMap (\n str: string,\n expectsLowerCase?: boolean\n): (key: string) => boolean {\n const map: Record<string, boolean> = Object.create(null)\n const list: Array<string> = str.split(',')\n for (let i = 0; i < list.length; i++) {\n map[list[i]] = true\n }\n return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val]\n}\n\nexport const specialMiniElements = {\n img: 'image',\n iframe: 'web-view'\n}\n\nconst internalCompsList = Object.keys(internalComponents)\n .map(i => i.toLowerCase())\n .join(',')\n\n// https://developers.weixin.qq.com/miniprogram/dev/component\nexport const isMiniElements = makeMap(internalCompsList, true)\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements\nexport const isInlineElements = makeMap('a,i,abbr,iframe,select,acronym,slot,small,span,bdi,kbd,strong,big,map,sub,sup,br,mark,mark,meter,template,canvas,textarea,cite,object,time,code,output,u,data,picture,tt,datalist,var,dfn,del,q,em,s,embed,samp,b', true)\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements\nexport const isBlockElements = makeMap('address,fieldset,li,article,figcaption,main,aside,figure,nav,blockquote,footer,ol,details,form,p,dialog,h1,h2,h3,h4,h5,h6,pre,dd,header,section,div,hgroup,table,dl,hr,ul,dt', true)\n"],"names":[],"mappings":";;AAEgB,SAAA,OAAO,CACrB,GAAW,EACX,gBAA0B,EAAA;IAE1B,MAAM,GAAG,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACxD,MAAM,IAAI,GAAkB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC1C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;KACpB;AACD,IAAA,OAA0B,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAoB,CAAA;AAC/E,CAAC;AAEY,MAAA,mBAAmB,GAAG;AACjC,IAAA,GAAG,EAAE,OAAO;AACZ,IAAA,MAAM,EAAE,UAAU;EACnB;AAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;KACtD,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;KACzB,IAAI,CAAC,GAAG,CAAC,CAAA;AAEZ;AACa,MAAA,cAAc,GAAG,OAAO,CAAC,iBAAuB,EAAC;AAE9D;AACa,MAAA,gBAAgB,GAAG,OAAO,CAAC,mNAAyN,EAAC;AAElQ;AACa,MAAA,eAAe,GAAG,OAAO,CAAC,8KAAoL;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function unquote(str) {
|
|
2
|
+
const car = str.charAt(0);
|
|
3
|
+
const end = str.length - 1;
|
|
4
|
+
const isQuoteStart = car === '"' || car === "'";
|
|
5
|
+
if (isQuoteStart && car === str.charAt(end)) {
|
|
6
|
+
return str.slice(1, end);
|
|
7
|
+
}
|
|
8
|
+
return str;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { unquote };
|
|
12
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/dom-external/inner-html/utils.ts"],"sourcesContent":["export function unquote (str: string): string {\n const car = str.charAt(0)\n const end = str.length - 1\n const isQuoteStart = car === '\"' || car === \"'\"\n if (isQuoteStart && car === str.charAt(end)) {\n return str.slice(1, end)\n }\n return str\n}\n"],"names":[],"mappings":"AAAM,SAAU,OAAO,CAAE,GAAW,EAAA;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AACzB,IAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;IAC1B,MAAM,YAAY,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAA;IAC/C,IAAI,YAAY,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC3C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;KACzB;AACD,IAAA,OAAO,GAAG,CAAA;AACZ;;;;"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const observers = [];
|
|
2
|
+
/**
|
|
3
|
+
* The MutationObserver provides the ability
|
|
4
|
+
* to watch for changes being made to the DOM tree.
|
|
5
|
+
* It will invoke a specified callback function
|
|
6
|
+
* when DOM changes occur.
|
|
7
|
+
* @see https://dom.spec.whatwg.org/#mutationobserver
|
|
8
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
|
|
9
|
+
*/
|
|
10
|
+
class MutationObserverImpl {
|
|
11
|
+
constructor(callback) {
|
|
12
|
+
this.records = [];
|
|
13
|
+
this.callback = callback;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Configures the MutationObserver
|
|
17
|
+
* to begin receiving notifications
|
|
18
|
+
* through its callback function
|
|
19
|
+
* when DOM changes matching the given options occur.
|
|
20
|
+
*
|
|
21
|
+
* Options matching is to be implemented.
|
|
22
|
+
*/
|
|
23
|
+
observe(target, options) {
|
|
24
|
+
this.disconnect();
|
|
25
|
+
this.target = target;
|
|
26
|
+
this.options = options || {};
|
|
27
|
+
observers.push(this);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Stop the MutationObserver instance
|
|
31
|
+
* from receiving further notifications
|
|
32
|
+
* until and unless observe() is called again.
|
|
33
|
+
*/
|
|
34
|
+
disconnect() {
|
|
35
|
+
this.target = null;
|
|
36
|
+
const index = observers.indexOf(this);
|
|
37
|
+
if (index >= 0) {
|
|
38
|
+
observers.splice(index, 1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Removes all pending notifications
|
|
43
|
+
* from the MutationObserver's notification queue
|
|
44
|
+
* and returns them in a new Array of MutationRecord objects.
|
|
45
|
+
*/
|
|
46
|
+
takeRecords() {
|
|
47
|
+
return this.records.splice(0, this.records.length);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Match two TaroNodes by sid. */
|
|
51
|
+
const sidMatches = (observerTarget, target) => {
|
|
52
|
+
return !!observerTarget && observerTarget.sid === (target === null || target === void 0 ? void 0 : target.sid);
|
|
53
|
+
};
|
|
54
|
+
const isConcerned = (record, options) => {
|
|
55
|
+
const { characterData, characterDataOldValue, attributes, attributeOldValue, childList } = options;
|
|
56
|
+
switch (record.type) {
|
|
57
|
+
case "characterData" /* MutationRecordType.CHARACTER_DATA */:
|
|
58
|
+
if (characterData) {
|
|
59
|
+
if (!characterDataOldValue)
|
|
60
|
+
record.oldValue = null;
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
case "attributes" /* MutationRecordType.ATTRIBUTES */:
|
|
65
|
+
if (attributes) {
|
|
66
|
+
if (!attributeOldValue)
|
|
67
|
+
record.oldValue = null;
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
case "childList" /* MutationRecordType.CHILD_LIST */:
|
|
72
|
+
if (childList) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
let pendingMuatations = false;
|
|
79
|
+
function logMutation(observer, record) {
|
|
80
|
+
observer.records.push(record);
|
|
81
|
+
if (!pendingMuatations) {
|
|
82
|
+
pendingMuatations = true;
|
|
83
|
+
Promise
|
|
84
|
+
.resolve()
|
|
85
|
+
.then(() => {
|
|
86
|
+
pendingMuatations = false;
|
|
87
|
+
observers.forEach(observer => {
|
|
88
|
+
return observer.callback(observer.takeRecords());
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function recordMutation(record) {
|
|
94
|
+
observers.forEach(observer => {
|
|
95
|
+
const { options } = observer;
|
|
96
|
+
for (let t = record.target; t; t = t.parentNode) {
|
|
97
|
+
if (sidMatches(observer.target, t) && isConcerned(record, options)) {
|
|
98
|
+
logMutation(observer, record);
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
if (!options.subtree)
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export { MutationObserverImpl, recordMutation };
|
|
108
|
+
//# sourceMappingURL=implements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implements.js","sources":["../../../src/dom-external/mutation-observer/implements.ts"],"sourcesContent":["import { MutationRecordType } from './record'\n\nimport type { TaroNode } from '../../dom/node'\nimport type { MutationRecord } from './record'\n\nexport type MutationCallback = (mutations: MutationRecord[]) => any\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-mutationobserverinit\n */\nexport interface MutationObserverInit {\n attributeFilter?: string[]\n attributeOldValue?: boolean\n attributes?: boolean\n characterData?: boolean\n characterDataOldValue?: boolean\n childList?: boolean\n subtree?: boolean\n}\n\nconst observers: MutationObserverImpl[] = []\n\n/**\n * The MutationObserver provides the ability\n * to watch for changes being made to the DOM tree.\n * It will invoke a specified callback function\n * when DOM changes occur.\n * @see https://dom.spec.whatwg.org/#mutationobserver\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n */\nexport class MutationObserverImpl {\n public callback: MutationCallback\n public target: TaroNode | null\n public options: MutationObserverInit\n public records: MutationRecord[] = []\n\n constructor (callback: MutationCallback) {\n this.callback = callback\n }\n\n /**\n * Configures the MutationObserver\n * to begin receiving notifications\n * through its callback function\n * when DOM changes matching the given options occur.\n *\n * Options matching is to be implemented.\n */\n observe (target: TaroNode, options?: MutationObserverInit): void {\n this.disconnect()\n this.target = target\n this.options = options || {}\n\n observers.push(this)\n }\n\n /**\n * Stop the MutationObserver instance\n * from receiving further notifications\n * until and unless observe() is called again.\n */\n disconnect (): void {\n this.target = null\n\n const index = observers.indexOf(this)\n if (index >= 0) {\n observers.splice(index, 1)\n }\n }\n\n /**\n * Removes all pending notifications\n * from the MutationObserver's notification queue\n * and returns them in a new Array of MutationRecord objects.\n */\n takeRecords (): MutationRecord[] {\n return this.records.splice(0, this.records.length)\n }\n}\n\n/** Match two TaroNodes by sid. */\nconst sidMatches = (\n observerTarget: TaroNode | null,\n target: TaroNode | null\n): boolean => {\n return !!observerTarget && observerTarget.sid === target?.sid\n}\n\nconst isConcerned = (record: MutationRecord, options: MutationObserverInit) => {\n const { characterData, characterDataOldValue, attributes, attributeOldValue, childList } = options\n switch (record.type) {\n case MutationRecordType.CHARACTER_DATA:\n if (characterData) {\n if (!characterDataOldValue) record.oldValue = null\n return true\n }\n return false\n case MutationRecordType.ATTRIBUTES:\n if (attributes) {\n if (!attributeOldValue) record.oldValue = null\n return true\n }\n return false\n case MutationRecordType.CHILD_LIST:\n if (childList) {\n return true\n }\n return false\n }\n}\n\nlet pendingMuatations = false\n\nfunction logMutation (observer: MutationObserverImpl, record: MutationRecord) {\n observer.records.push(record)\n if (!pendingMuatations) {\n pendingMuatations = true\n Promise\n .resolve()\n .then(() => {\n pendingMuatations = false\n observers.forEach(observer => {\n return observer.callback(observer.takeRecords())\n })\n })\n }\n}\n\nexport function recordMutation (record: MutationRecord) {\n observers.forEach(observer => {\n const { options } = observer\n for (let t: TaroNode | null = record.target; t; t = t.parentNode) {\n if (sidMatches(observer.target, t) && isConcerned(record, options)) {\n logMutation(observer, record)\n break\n }\n if (!options.subtree) break\n }\n })\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { noop } from '@tarojs/shared';
|
|
2
|
+
import { MutationObserverImpl, recordMutation } from './implements.js';
|
|
3
|
+
|
|
4
|
+
class MutationObserver {
|
|
5
|
+
constructor(callback) {
|
|
6
|
+
if (ENABLE_MUTATION_OBSERVER) {
|
|
7
|
+
this.core = new MutationObserverImpl(callback);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
11
|
+
console.warn('[Taro Warning] 若要使用 MutationObserver,请在 Taro 编译配置中设置 \'mini.runtime.enableMutationObserver: true\'');
|
|
12
|
+
}
|
|
13
|
+
this.core = {
|
|
14
|
+
observe: noop,
|
|
15
|
+
disconnect: noop,
|
|
16
|
+
takeRecords: noop
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
observe(...args) {
|
|
21
|
+
this.core.observe(...args);
|
|
22
|
+
}
|
|
23
|
+
disconnect() {
|
|
24
|
+
this.core.disconnect();
|
|
25
|
+
}
|
|
26
|
+
takeRecords() {
|
|
27
|
+
return this.core.takeRecords();
|
|
28
|
+
}
|
|
29
|
+
static record(record) {
|
|
30
|
+
recordMutation(record);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { MutationObserver };
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/dom-external/mutation-observer/index.ts"],"sourcesContent":["import { noop } from '@tarojs/shared'\n\nimport { MutationObserverImpl, recordMutation } from './implements'\nimport { MutationRecord, MutationRecordType } from './record'\n\nimport type { TaroNode } from '../../dom/node'\nimport type { MutationCallback, MutationObserverInit } from './implements'\n\ndeclare const ENABLE_MUTATION_OBSERVER: boolean\n\nexport class MutationObserver {\n core: Pick<MutationObserverImpl, 'observe' | 'disconnect' | 'takeRecords'>\n\n constructor (callback: MutationCallback) {\n if (ENABLE_MUTATION_OBSERVER) {\n this.core = new MutationObserverImpl(callback)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[Taro Warning] 若要使用 MutationObserver,请在 Taro 编译配置中设置 \\'mini.runtime.enableMutationObserver: true\\'')\n }\n this.core = {\n observe: noop,\n disconnect: noop,\n takeRecords: (noop as () => any)\n }\n }\n }\n\n public observe (...args: [TaroNode, MutationObserverInit?]) {\n this.core.observe(...args)\n }\n\n public disconnect () {\n this.core.disconnect()\n }\n\n public takeRecords () {\n return this.core.takeRecords()\n }\n\n static record (record: MutationRecord) {\n recordMutation(record)\n }\n}\n\nexport {\n MutationRecordType\n}\n"],"names":[],"mappings":";;;MAUa,gBAAgB,CAAA;AAG3B,IAAA,WAAA,CAAa,QAA0B,EAAA;QACrC,IAAI,wBAAwB,EAAE;YAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAA;SAC/C;aAAM;YACL,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;AACzC,gBAAA,OAAO,CAAC,IAAI,CAAC,oGAAoG,CAAC,CAAA;aACnH;YACD,IAAI,CAAC,IAAI,GAAG;AACV,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,WAAW,EAAG,IAAkB;aACjC,CAAA;SACF;KACF;IAEM,OAAO,CAAE,GAAG,IAAuC,EAAA;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;KAC3B;IAEM,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;KACvB;IAEM,WAAW,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;KAC/B;IAED,OAAO,MAAM,CAAE,MAAsB,EAAA;QACnC,cAAc,CAAC,MAAM,CAAC,CAAA;KACvB;AACF;;;;"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { PROPS, DATASET, OBJECT, STYLE } from '../constants/index.js';
|
|
2
|
+
import { parser } from './inner-html/parser.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* An implementation of `Element.insertAdjacentHTML()`
|
|
6
|
+
* to support Vue 3 with a version of or greater than `vue@3.1.2`
|
|
7
|
+
*/
|
|
8
|
+
function insertAdjacentHTML(position, html) {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
const parsedNodes = parser(html, this.ownerDocument);
|
|
11
|
+
for (let i = 0; i < parsedNodes.length; i++) {
|
|
12
|
+
const n = parsedNodes[i];
|
|
13
|
+
switch (position) {
|
|
14
|
+
case 'beforebegin':
|
|
15
|
+
(_a = this.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(n, this);
|
|
16
|
+
break;
|
|
17
|
+
case 'afterbegin':
|
|
18
|
+
if (this.hasChildNodes()) {
|
|
19
|
+
this.insertBefore(n, this.childNodes[0]);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.appendChild(n);
|
|
23
|
+
}
|
|
24
|
+
break;
|
|
25
|
+
case 'beforeend':
|
|
26
|
+
this.appendChild(n);
|
|
27
|
+
break;
|
|
28
|
+
case 'afterend':
|
|
29
|
+
(_b = this.parentNode) === null || _b === void 0 ? void 0 : _b.appendChild(n);
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function cloneNode(isDeep = false) {
|
|
35
|
+
const document = this.ownerDocument;
|
|
36
|
+
let newNode;
|
|
37
|
+
if (this.nodeType === 1 /* NodeType.ELEMENT_NODE */) {
|
|
38
|
+
newNode = document.createElement(this.nodeName);
|
|
39
|
+
}
|
|
40
|
+
else if (this.nodeType === 3 /* NodeType.TEXT_NODE */) {
|
|
41
|
+
newNode = document.createTextNode('');
|
|
42
|
+
}
|
|
43
|
+
for (const key in this) {
|
|
44
|
+
const value = this[key];
|
|
45
|
+
// eslint-disable-next-line valid-typeof
|
|
46
|
+
if ([PROPS, DATASET].includes(key) && typeof value === OBJECT) {
|
|
47
|
+
newNode[key] = Object.assign({}, value);
|
|
48
|
+
}
|
|
49
|
+
else if (key === '_value') {
|
|
50
|
+
newNode[key] = value;
|
|
51
|
+
}
|
|
52
|
+
else if (key === STYLE) {
|
|
53
|
+
newNode.style._value = Object.assign({}, value._value);
|
|
54
|
+
newNode.style._usedStyleProp = new Set(Array.from(value._usedStyleProp));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (isDeep) {
|
|
58
|
+
newNode.childNodes = this.childNodes.map(node => node.cloneNode(true));
|
|
59
|
+
}
|
|
60
|
+
return newNode;
|
|
61
|
+
}
|
|
62
|
+
function contains(node) {
|
|
63
|
+
let isContains = false;
|
|
64
|
+
this.childNodes.some(childNode => {
|
|
65
|
+
const { uid } = childNode;
|
|
66
|
+
if (uid === node.uid || uid === node.id || childNode.contains(node)) {
|
|
67
|
+
isContains = true;
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
return isContains;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { cloneNode, contains, insertAdjacentHTML };
|
|
75
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sources":["../../src/dom-external/node.ts"],"sourcesContent":["import { DATASET, OBJECT, PROPS, STYLE } from '../constants'\nimport { NodeType } from '../dom/node_types'\nimport { parser } from '../dom-external/inner-html/parser'\n\nimport type { TaroNode } from '../dom/node'\n\nexport type IPosition = 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend'\n\n/**\n * An implementation of `Element.insertAdjacentHTML()`\n * to support Vue 3 with a version of or greater than `vue@3.1.2`\n */\nexport function insertAdjacentHTML (\n this: TaroNode,\n position: IPosition,\n html: string\n) {\n const parsedNodes = parser(html, this.ownerDocument)\n\n for (let i = 0; i < parsedNodes.length; i++) {\n const n = parsedNodes[i]\n\n switch (position) {\n case 'beforebegin':\n this.parentNode?.insertBefore(n, this)\n break\n case 'afterbegin':\n if (this.hasChildNodes()) {\n this.insertBefore(n, this.childNodes[0])\n } else {\n this.appendChild(n)\n }\n break\n case 'beforeend':\n this.appendChild(n)\n break\n case 'afterend':\n this.parentNode?.appendChild(n)\n break\n }\n }\n}\n\nexport function cloneNode (this: TaroNode, isDeep = false) {\n const document = this.ownerDocument\n let newNode\n\n if (this.nodeType === NodeType.ELEMENT_NODE) {\n newNode = document.createElement(this.nodeName)\n } else if (this.nodeType === NodeType.TEXT_NODE) {\n newNode = document.createTextNode('')\n }\n\n for (const key in this) {\n const value: any = this[key]\n // eslint-disable-next-line valid-typeof\n if ([PROPS, DATASET].includes(key) && typeof value === OBJECT) {\n newNode[key] = { ...value }\n } else if (key === '_value') {\n newNode[key] = value\n } else if (key === STYLE) {\n newNode.style._value = { ...value._value }\n newNode.style._usedStyleProp = new Set(Array.from(value._usedStyleProp))\n }\n }\n\n if (isDeep) {\n newNode.childNodes = this.childNodes.map(node => (node as any).cloneNode(true))\n }\n\n return newNode\n}\n\nexport function contains (this: TaroNode, node: TaroNode & { id?: string }): boolean {\n let isContains = false\n this.childNodes.some(childNode => {\n const { uid } = childNode\n if (uid === node.uid || uid === node.id || (childNode as any).contains(node)) {\n isContains = true\n return true\n }\n })\n return isContains\n}\n"],"names":[],"mappings":"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"}
|
package/dist/dsl/common.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type { PageConfig } from '
|
|
2
|
+
import type { PageConfig } from '../interface';
|
|
3
3
|
import type { Instance, PageInstance, PageProps } from './instance';
|
|
4
4
|
export declare function injectPageInstance(inst: Instance<PageProps>, id: string): void;
|
|
5
5
|
export declare function getPageInstance(id: string): Instance | undefined;
|
|
6
6
|
export declare function removePageInstance(id: string): void;
|
|
7
|
-
export declare function addLeadingSlash(path?: string): string;
|
|
8
7
|
export declare function safeExecute(path: string, lifecycle: string, ...args: unknown[]): any;
|
|
9
8
|
export declare function stringify(obj?: Record<string, unknown>): string;
|
|
10
9
|
export declare function getPath(id: string, options?: Record<string, unknown>): string;
|