@tarojs/runtime 4.0.0-canary.8 → 4.0.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 +17 -3
- package/dist/bom/URL.d.ts +54 -0
- package/dist/bom/URL.js +221 -0
- package/dist/bom/URL.js.map +1 -0
- package/dist/bom/URLSearchParams.d.ts +2 -0
- package/dist/bom/URLSearchParams.js +131 -0
- package/dist/bom/URLSearchParams.js.map +1 -0
- package/dist/bom/document.d.ts +3 -0
- package/dist/bom/document.js +39 -0
- package/dist/bom/document.js.map +1 -0
- package/dist/bom/getComputedStyle.d.ts +5 -0
- package/dist/bom/getComputedStyle.js +8 -0
- package/dist/bom/getComputedStyle.js.map +1 -0
- package/dist/bom/history.d.ts +32 -0
- package/dist/bom/history.js +121 -0
- package/dist/bom/history.js.map +1 -0
- package/dist/bom/location.d.ts +39 -0
- package/dist/bom/location.js +240 -0
- package/dist/bom/location.js.map +1 -0
- package/dist/bom/navigator.d.ts +2 -0
- package/dist/bom/navigator.js +24 -0
- package/dist/bom/navigator.js.map +1 -0
- package/dist/bom/raf.d.ts +5 -0
- package/dist/bom/raf.js +33 -0
- package/dist/bom/raf.js.map +1 -0
- package/dist/bom/window.d.ts +26 -0
- package/dist/bom/window.js +92 -0
- package/dist/bom/window.js.map +1 -0
- package/dist/constants/index.d.ts +60 -0
- package/dist/constants/index.js +63 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/current.d.ts +19 -0
- package/dist/current.js +9 -0
- package/dist/current.js.map +1 -0
- package/dist/dom/anchor-element.d.ts +14 -0
- package/dist/dom/anchor-element.js +54 -0
- package/dist/dom/anchor-element.js.map +1 -0
- package/dist/dom/class-list.d.ts +17 -0
- package/dist/dom/class-list.js +92 -0
- package/dist/dom/class-list.js.map +1 -0
- package/dist/dom/document.d.ts +25 -0
- package/dist/dom/document.js +80 -0
- package/dist/dom/document.js.map +1 -0
- package/dist/dom/element.d.ts +40 -0
- package/dist/dom/element.js +315 -0
- package/dist/dom/element.js.map +1 -0
- package/dist/dom/event-source.d.ts +7 -0
- package/dist/dom/event-source.js +17 -0
- package/dist/dom/event-source.js.map +1 -0
- package/dist/dom/event-target.d.ts +8 -0
- package/dist/dom/event-target.js +78 -0
- package/dist/dom/event-target.js.map +1 -0
- package/dist/dom/event.d.ts +24 -0
- package/dist/dom/event.js +152 -0
- package/dist/dom/event.js.map +1 -0
- package/dist/dom/form.d.ts +10 -0
- package/dist/dom/form.js +38 -0
- package/dist/dom/form.js.map +1 -0
- package/dist/dom/node.d.ts +107 -0
- package/dist/dom/node.js +292 -0
- package/dist/dom/node.js.map +1 -0
- package/dist/dom/root.d.ts +16 -0
- package/dist/dom/root.js +169 -0
- package/dist/dom/root.js.map +1 -0
- package/dist/dom/style.d.ts +15 -0
- package/dist/dom/style.js +168 -0
- package/dist/dom/style.js.map +1 -0
- package/dist/dom/style_properties.d.ts +3 -0
- package/dist/dom/style_properties.js +186 -0
- package/dist/dom/style_properties.js.map +1 -0
- package/dist/dom/svg.d.ts +4 -0
- package/dist/dom/svg.js +8 -0
- package/dist/dom/svg.js.map +1 -0
- package/dist/dom/text.d.ts +15 -0
- package/dist/dom/text.js +41 -0
- package/dist/dom/text.js.map +1 -0
- package/dist/dom/transfer.d.ts +8 -0
- package/dist/dom/transfer.js +15 -0
- package/dist/dom/transfer.js.map +1 -0
- package/dist/dom/tree.d.ts +4 -0
- package/dist/dom/tree.js +38 -0
- package/dist/dom/tree.js.map +1 -0
- package/dist/dom-external/element.d.ts +4 -0
- package/dist/dom-external/element.js +29 -0
- package/dist/dom-external/element.js.map +1 -0
- package/dist/dom-external/index.d.ts +1 -0
- package/dist/dom-external/index.js +38 -0
- package/dist/dom-external/index.js.map +1 -0
- package/dist/dom-external/inner-html/html.d.ts +3 -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.d.ts +25 -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.d.ts +30 -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.d.ts +27 -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.d.ts +9 -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.d.ts +2 -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.d.ts +71 -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.d.ts +12 -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.d.ts +12 -0
- package/dist/dom-external/node.js +75 -0
- package/dist/dom-external/node.js.map +1 -0
- package/dist/dsl/common.d.ts +16 -0
- package/dist/dsl/common.js +337 -0
- package/dist/dsl/common.js.map +1 -0
- package/dist/emitter/emitter.d.ts +4 -0
- package/dist/emitter/emitter.js +7 -0
- package/dist/emitter/emitter.js.map +1 -0
- package/dist/env.d.ts +7 -0
- package/dist/env.js +9 -0
- package/dist/env.js.map +1 -0
- package/dist/hydrate.d.ts +11 -0
- package/dist/hydrate.js +91 -0
- package/dist/hydrate.js.map +1 -0
- package/dist/index-26658829.d.ts +23 -0
- package/dist/{runtime.cjs.d.ts → index.cjs.d.ts} +108 -102
- package/dist/{runtime.h5.js → index.cjs.js} +4301 -2495
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/instance-4c64b022.d.ts +85 -0
- package/dist/next-tick.d.ts +3 -0
- package/dist/next-tick.js +47 -0
- package/dist/next-tick.js.map +1 -0
- package/dist/node_types-9ac5b4dd.d.ts +11 -0
- package/dist/options-4c64b022.d.ts +17 -0
- package/dist/options.d.ts +3 -0
- package/dist/options.js +7 -0
- package/dist/options.js.map +1 -0
- package/dist/perf.d.ts +9 -0
- package/dist/perf.js +49 -0
- package/dist/perf.js.map +1 -0
- package/dist/polyfill/array.d.ts +3 -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 +2 -0
- package/dist/polyfill/intersection-observer.js +600 -0
- package/dist/polyfill/intersection-observer.js.map +1 -0
- package/dist/polyfill/object.d.ts +4 -0
- package/dist/polyfill/object.js +102 -0
- package/dist/polyfill/object.js.map +1 -0
- package/dist/record-32b054d8.d.ts +25 -0
- package/dist/runtime.esm.d.ts +108 -102
- package/dist/runtime.esm.js +4126 -3320
- package/dist/runtime.esm.js.map +1 -1
- package/dist/utils/cache.d.ts +13 -0
- package/dist/utils/cache.js +27 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/index.d.ts +26 -0
- package/dist/utils/index.js +99 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/lodash.d.ts +3 -0
- package/dist/utils/lodash.js +32 -0
- package/dist/utils/lodash.js.map +1 -0
- package/dist/utils/router.d.ts +8 -0
- package/dist/utils/router.js +24 -0
- package/dist/utils/router.js.map +1 -0
- package/package.json +23 -26
- package/dist/runtime.cjs.js +0 -4628
- package/dist/runtime.h5.d.ts +0 -800
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { EMPTY_OBJ, hooks, isArray, isUndefined, warn, isString, toCamelCase, isFunction, isObject } from '@tarojs/shared';
|
|
2
|
+
import { ID, CLASS, STYLE, FOCUS, PROPERTY_THRESHOLD, VIEW, STATIC_VIEW, CATCH_VIEW, CATCHMOVE, PURE_VIEW, EVENT_CALLBACK_RESULT } from '../constants/index.js';
|
|
3
|
+
import { MutationObserver } from '../dom-external/mutation-observer/index.js';
|
|
4
|
+
import { isElement, isHasExtractProp, getComponentsAlias, shortcutAttr, extend } from '../utils/index.js';
|
|
5
|
+
import { ClassList } from './class-list.js';
|
|
6
|
+
import { eventSource } from './event-source.js';
|
|
7
|
+
import { TaroNode } from './node.js';
|
|
8
|
+
import { Style } from './style.js';
|
|
9
|
+
import { treeToArray } from './tree.js';
|
|
10
|
+
|
|
11
|
+
class TaroElement extends TaroNode {
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
this.props = {};
|
|
15
|
+
this.dataset = EMPTY_OBJ;
|
|
16
|
+
this.nodeType = 1 /* NodeType.ELEMENT_NODE */;
|
|
17
|
+
this.style = new Style(this);
|
|
18
|
+
hooks.call('patchElement', this);
|
|
19
|
+
}
|
|
20
|
+
_stopPropagation(event) {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
22
|
+
let target = this;
|
|
23
|
+
// eslint-disable-next-line no-cond-assign
|
|
24
|
+
while ((target = target.parentNode)) {
|
|
25
|
+
const listeners = target.__handlers[event.type];
|
|
26
|
+
if (!isArray(listeners)) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
for (let i = listeners.length; i--;) {
|
|
30
|
+
const l = listeners[i];
|
|
31
|
+
l._stop = true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
get id() {
|
|
36
|
+
return this.getAttribute(ID);
|
|
37
|
+
}
|
|
38
|
+
set id(val) {
|
|
39
|
+
this.setAttribute(ID, val);
|
|
40
|
+
}
|
|
41
|
+
get className() {
|
|
42
|
+
return this.getAttribute(CLASS) || '';
|
|
43
|
+
}
|
|
44
|
+
set className(val) {
|
|
45
|
+
this.setAttribute(CLASS, val);
|
|
46
|
+
}
|
|
47
|
+
get cssText() {
|
|
48
|
+
return this.getAttribute(STYLE) || '';
|
|
49
|
+
}
|
|
50
|
+
get classList() {
|
|
51
|
+
return new ClassList(this.className, this);
|
|
52
|
+
}
|
|
53
|
+
get children() {
|
|
54
|
+
return this.childNodes.filter(isElement);
|
|
55
|
+
}
|
|
56
|
+
get attributes() {
|
|
57
|
+
const props = this.props;
|
|
58
|
+
const propKeys = Object.keys(props);
|
|
59
|
+
const style = this.style.cssText;
|
|
60
|
+
const attrs = propKeys.map(key => ({ name: key, value: props[key] }));
|
|
61
|
+
return attrs.concat(style ? { name: STYLE, value: style } : []);
|
|
62
|
+
}
|
|
63
|
+
get textContent() {
|
|
64
|
+
let text = '';
|
|
65
|
+
const childNodes = this.childNodes;
|
|
66
|
+
for (let i = 0; i < childNodes.length; i++) {
|
|
67
|
+
text += childNodes[i].textContent;
|
|
68
|
+
}
|
|
69
|
+
return text;
|
|
70
|
+
}
|
|
71
|
+
set textContent(text) {
|
|
72
|
+
super.textContent = text;
|
|
73
|
+
}
|
|
74
|
+
hasAttribute(qualifiedName) {
|
|
75
|
+
return !isUndefined(this.props[qualifiedName]);
|
|
76
|
+
}
|
|
77
|
+
hasAttributes() {
|
|
78
|
+
return this.attributes.length > 0;
|
|
79
|
+
}
|
|
80
|
+
get focus() {
|
|
81
|
+
return function () {
|
|
82
|
+
this.setAttribute(FOCUS, true);
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// 兼容 Vue3,详情请见:https://github.com/NervJS/taro/issues/10579
|
|
86
|
+
set focus(value) {
|
|
87
|
+
this.setAttribute(FOCUS, value);
|
|
88
|
+
}
|
|
89
|
+
blur() {
|
|
90
|
+
this.setAttribute(FOCUS, false);
|
|
91
|
+
}
|
|
92
|
+
setAttribute(qualifiedName, value) {
|
|
93
|
+
process.env.NODE_ENV !== 'production' && warn(isString(value) && value.length > PROPERTY_THRESHOLD, `元素 ${this.nodeName} 的 ${qualifiedName} 属性值数据量过大,可能会影响渲染性能。考虑降低图片转为 base64 的阈值或在 CSS 中使用 base64。`);
|
|
94
|
+
const isPureView = this.nodeName === VIEW && !isHasExtractProp(this) && !this.isAnyEventBinded();
|
|
95
|
+
if (qualifiedName !== STYLE) {
|
|
96
|
+
MutationObserver.record({
|
|
97
|
+
target: this,
|
|
98
|
+
type: "attributes" /* MutationRecordType.ATTRIBUTES */,
|
|
99
|
+
attributeName: qualifiedName,
|
|
100
|
+
oldValue: this.getAttribute(qualifiedName)
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
switch (qualifiedName) {
|
|
104
|
+
case STYLE:
|
|
105
|
+
this.style.cssText = value;
|
|
106
|
+
break;
|
|
107
|
+
case ID:
|
|
108
|
+
if (this.uid !== this.sid) {
|
|
109
|
+
// eventSource[sid] 永远保留,直到组件卸载
|
|
110
|
+
// eventSource[uid] 可变
|
|
111
|
+
eventSource.delete(this.uid);
|
|
112
|
+
}
|
|
113
|
+
value = String(value);
|
|
114
|
+
this.props[qualifiedName] = this.uid = value;
|
|
115
|
+
eventSource.set(value, this);
|
|
116
|
+
break;
|
|
117
|
+
default:
|
|
118
|
+
this.props[qualifiedName] = value;
|
|
119
|
+
if (qualifiedName.startsWith('data-')) {
|
|
120
|
+
if (this.dataset === EMPTY_OBJ) {
|
|
121
|
+
this.dataset = Object.create(null);
|
|
122
|
+
}
|
|
123
|
+
this.dataset[toCamelCase(qualifiedName.replace(/^data-/, ''))] = value;
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
// Serialization
|
|
128
|
+
if (!this._root)
|
|
129
|
+
return;
|
|
130
|
+
const componentsAlias = getComponentsAlias();
|
|
131
|
+
const _alias = componentsAlias[this.nodeName];
|
|
132
|
+
const viewAlias = componentsAlias[VIEW]._num;
|
|
133
|
+
const staticViewAlias = componentsAlias[STATIC_VIEW]._num;
|
|
134
|
+
const catchViewAlias = componentsAlias[CATCH_VIEW]._num;
|
|
135
|
+
const _path = this._path;
|
|
136
|
+
qualifiedName = shortcutAttr(qualifiedName);
|
|
137
|
+
const qualifiedNameInCamelCase = toCamelCase(qualifiedName);
|
|
138
|
+
const payload = {
|
|
139
|
+
path: `${_path}.${qualifiedNameInCamelCase}`,
|
|
140
|
+
value: isFunction(value) ? () => value : value
|
|
141
|
+
};
|
|
142
|
+
hooks.call('modifySetAttrPayload', this, qualifiedName, payload, componentsAlias);
|
|
143
|
+
if (_alias) {
|
|
144
|
+
const qualifiedNameAlias = _alias[qualifiedNameInCamelCase] || qualifiedName;
|
|
145
|
+
payload.path = `${_path}.${toCamelCase(qualifiedNameAlias)}`;
|
|
146
|
+
}
|
|
147
|
+
this.enqueueUpdate(payload);
|
|
148
|
+
if (this.nodeName === VIEW) {
|
|
149
|
+
if (qualifiedNameInCamelCase === CATCHMOVE) {
|
|
150
|
+
// catchMove = true: catch-view
|
|
151
|
+
// catchMove = false: view or static-view
|
|
152
|
+
this.enqueueUpdate({
|
|
153
|
+
path: `${_path}.${"nn" /* Shortcuts.NodeName */}`,
|
|
154
|
+
value: value ? catchViewAlias : (this.isAnyEventBinded() ? viewAlias : staticViewAlias)
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
else if (isPureView && isHasExtractProp(this)) {
|
|
158
|
+
// pure-view => static-view
|
|
159
|
+
this.enqueueUpdate({
|
|
160
|
+
path: `${_path}.${"nn" /* Shortcuts.NodeName */}`,
|
|
161
|
+
value: staticViewAlias
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
removeAttribute(qualifiedName) {
|
|
167
|
+
const isStaticView = this.nodeName === VIEW && isHasExtractProp(this) && !this.isAnyEventBinded();
|
|
168
|
+
MutationObserver.record({
|
|
169
|
+
target: this,
|
|
170
|
+
type: "attributes" /* MutationRecordType.ATTRIBUTES */,
|
|
171
|
+
attributeName: qualifiedName,
|
|
172
|
+
oldValue: this.getAttribute(qualifiedName)
|
|
173
|
+
});
|
|
174
|
+
if (qualifiedName === STYLE) {
|
|
175
|
+
this.style.cssText = '';
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
const isInterrupt = hooks.call('onRemoveAttribute', this, qualifiedName);
|
|
179
|
+
if (isInterrupt) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (!this.props.hasOwnProperty(qualifiedName)) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
delete this.props[qualifiedName];
|
|
186
|
+
}
|
|
187
|
+
// Serialization
|
|
188
|
+
if (!this._root)
|
|
189
|
+
return;
|
|
190
|
+
const componentsAlias = getComponentsAlias();
|
|
191
|
+
const _alias = componentsAlias[this.nodeName];
|
|
192
|
+
const viewAlias = componentsAlias[VIEW]._num;
|
|
193
|
+
const staticViewAlias = componentsAlias[STATIC_VIEW]._num;
|
|
194
|
+
const pureViewAlias = componentsAlias[PURE_VIEW]._num;
|
|
195
|
+
const _path = this._path;
|
|
196
|
+
qualifiedName = shortcutAttr(qualifiedName);
|
|
197
|
+
const qualifiedNameInCamelCase = toCamelCase(qualifiedName);
|
|
198
|
+
const payload = {
|
|
199
|
+
path: `${_path}.${qualifiedNameInCamelCase}`,
|
|
200
|
+
value: ''
|
|
201
|
+
};
|
|
202
|
+
hooks.call('modifyRmAttrPayload', this, qualifiedName, payload, componentsAlias);
|
|
203
|
+
if (_alias) {
|
|
204
|
+
const qualifiedNameAlias = _alias[qualifiedNameInCamelCase] || qualifiedName;
|
|
205
|
+
payload.path = `${_path}.${toCamelCase(qualifiedNameAlias)}`;
|
|
206
|
+
}
|
|
207
|
+
this.enqueueUpdate(payload);
|
|
208
|
+
if (this.nodeName === VIEW) {
|
|
209
|
+
if (qualifiedNameInCamelCase === CATCHMOVE) {
|
|
210
|
+
// catch-view => view or static-view or pure-view
|
|
211
|
+
this.enqueueUpdate({
|
|
212
|
+
path: `${_path}.${"nn" /* Shortcuts.NodeName */}`,
|
|
213
|
+
value: this.isAnyEventBinded() ? viewAlias : (isHasExtractProp(this) ? staticViewAlias : pureViewAlias)
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
else if (isStaticView && !isHasExtractProp(this)) {
|
|
217
|
+
// static-view => pure-view
|
|
218
|
+
this.enqueueUpdate({
|
|
219
|
+
path: `${_path}.${"nn" /* Shortcuts.NodeName */}`,
|
|
220
|
+
value: pureViewAlias
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
getAttribute(qualifiedName) {
|
|
226
|
+
const attr = qualifiedName === STYLE ? this.style.cssText : this.props[qualifiedName];
|
|
227
|
+
return attr !== null && attr !== void 0 ? attr : '';
|
|
228
|
+
}
|
|
229
|
+
getElementsByTagName(tagName) {
|
|
230
|
+
return treeToArray(this, (el) => {
|
|
231
|
+
return el.nodeName === tagName || (tagName === '*' && this !== el);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
getElementsByClassName(className) {
|
|
235
|
+
const classNames = className.trim().split(/\s+/);
|
|
236
|
+
return treeToArray(this, (el) => {
|
|
237
|
+
const classList = el.classList;
|
|
238
|
+
return classNames.every(c => classList.contains(c));
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
dispatchEvent(event) {
|
|
242
|
+
const cancelable = event.cancelable;
|
|
243
|
+
const listeners = this.__handlers[event.type];
|
|
244
|
+
if (!isArray(listeners)) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
for (let i = listeners.length; i--;) {
|
|
248
|
+
const listener = listeners[i];
|
|
249
|
+
let result;
|
|
250
|
+
if (listener._stop) {
|
|
251
|
+
listener._stop = false;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
hooks.call('modifyDispatchEvent', event, this);
|
|
255
|
+
result = listener.call(this, event);
|
|
256
|
+
}
|
|
257
|
+
if ((result === false || event._end) && cancelable) {
|
|
258
|
+
event.defaultPrevented = true;
|
|
259
|
+
}
|
|
260
|
+
if (!isUndefined(result) && event.mpEvent) {
|
|
261
|
+
const res = hooks.call('modifyTaroEventReturn', this, event, result);
|
|
262
|
+
if (res) {
|
|
263
|
+
event.mpEvent[EVENT_CALLBACK_RESULT] = result;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (event._end && event._stop) {
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (event._stop) {
|
|
271
|
+
this._stopPropagation(event);
|
|
272
|
+
}
|
|
273
|
+
return listeners != null;
|
|
274
|
+
}
|
|
275
|
+
addEventListener(type, handler, options) {
|
|
276
|
+
const name = this.nodeName;
|
|
277
|
+
const SPECIAL_NODES = hooks.call('getSpecialNodes');
|
|
278
|
+
let sideEffect = true;
|
|
279
|
+
if (isObject(options) && options.sideEffect === false) {
|
|
280
|
+
sideEffect = false;
|
|
281
|
+
delete options.sideEffect;
|
|
282
|
+
}
|
|
283
|
+
hooks.call('modifyAddEventListener', this, sideEffect, getComponentsAlias);
|
|
284
|
+
if (sideEffect !== false && !this.isAnyEventBinded() && SPECIAL_NODES.indexOf(name) > -1) {
|
|
285
|
+
const componentsAlias = getComponentsAlias();
|
|
286
|
+
const alias = componentsAlias[name]._num;
|
|
287
|
+
this.enqueueUpdate({
|
|
288
|
+
path: `${this._path}.${"nn" /* Shortcuts.NodeName */}`,
|
|
289
|
+
value: alias
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
super.addEventListener(type, handler, options);
|
|
293
|
+
}
|
|
294
|
+
removeEventListener(type, handler, sideEffect = true) {
|
|
295
|
+
super.removeEventListener(type, handler);
|
|
296
|
+
const name = this.nodeName;
|
|
297
|
+
const SPECIAL_NODES = hooks.call('getSpecialNodes');
|
|
298
|
+
hooks.call('modifyRemoveEventListener', this, sideEffect, getComponentsAlias);
|
|
299
|
+
if (sideEffect !== false && !this.isAnyEventBinded() && SPECIAL_NODES.indexOf(name) > -1) {
|
|
300
|
+
const componentsAlias = getComponentsAlias();
|
|
301
|
+
const value = isHasExtractProp(this) ? `static-${name}` : `pure-${name}`;
|
|
302
|
+
const valueAlias = componentsAlias[value]._num;
|
|
303
|
+
this.enqueueUpdate({
|
|
304
|
+
path: `${this._path}.${"nn" /* Shortcuts.NodeName */}`,
|
|
305
|
+
value: valueAlias
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
static extend(methodName, options) {
|
|
310
|
+
extend(TaroElement, methodName, options);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export { TaroElement };
|
|
315
|
+
//# sourceMappingURL=element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.js","sources":["../../src/dom/element.ts"],"sourcesContent":["import { EMPTY_OBJ, hooks, isArray, isFunction, isObject, isString, isUndefined, Shortcuts, toCamelCase, warn } from '@tarojs/shared'\n\nimport {\n CATCH_VIEW,\n CATCHMOVE,\n CLASS,\n EVENT_CALLBACK_RESULT,\n FOCUS,\n ID,\n PROPERTY_THRESHOLD,\n PURE_VIEW,\n STATIC_VIEW,\n STYLE,\n VIEW\n} from '../constants'\nimport { MutationObserver, MutationRecordType } from '../dom-external/mutation-observer'\nimport { extend, getComponentsAlias, isElement, isHasExtractProp, shortcutAttr } from '../utils'\nimport { ClassList } from './class-list'\nimport { eventSource } from './event-source'\nimport { TaroNode } from './node'\nimport { NodeType } from './node_types'\nimport { Style } from './style'\nimport { treeToArray } from './tree'\n\nimport type { Attributes, TFunc } from '../interface'\nimport type { TaroEvent } from './event'\n\nexport class TaroElement extends TaroNode {\n public ctx?\n public tagName: string\n public props: Record<string, any> = {}\n public style: Style\n public dataset: Record<string, unknown> = EMPTY_OBJ\n public innerHTML: string\n\n public constructor () {\n super()\n this.nodeType = NodeType.ELEMENT_NODE\n this.style = new Style(this)\n hooks.call('patchElement', this)\n }\n\n private _stopPropagation (event: TaroEvent) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let target = this\n // eslint-disable-next-line no-cond-assign\n while ((target = target.parentNode as this)) {\n const listeners = target.__handlers[event.type]\n\n if (!isArray(listeners)) {\n continue\n }\n\n for (let i = listeners.length; i--;) {\n const l = listeners[i]\n l._stop = true\n }\n }\n }\n\n public get id (): string {\n return this.getAttribute(ID)!\n }\n\n public set id (val: string) {\n this.setAttribute(ID, val)\n }\n\n public get className (): string {\n return this.getAttribute(CLASS) || ''\n }\n\n public set className (val: string) {\n this.setAttribute(CLASS, val)\n }\n\n public get cssText (): string {\n return this.getAttribute(STYLE) || ''\n }\n\n public get classList (): ClassList {\n return new ClassList(this.className, this)\n }\n\n public get children (): TaroElement[] {\n return this.childNodes.filter(isElement)\n }\n\n public get attributes (): Attributes[] {\n const props = this.props\n const propKeys = Object.keys(props)\n const style = this.style.cssText\n const attrs = propKeys.map(key => ({ name: key, value: props[key] }))\n return attrs.concat(style ? { name: STYLE, value: style } : [])\n }\n\n public get textContent (): string {\n let text = ''\n const childNodes = this.childNodes\n\n for (let i = 0; i < childNodes.length; i++) {\n text += childNodes[i].textContent\n }\n\n return text\n }\n\n public set textContent (text: string) {\n super.textContent = text\n }\n\n public hasAttribute (qualifiedName: string): boolean {\n return !isUndefined(this.props[qualifiedName])\n }\n\n public hasAttributes (): boolean {\n return this.attributes.length > 0\n }\n\n public get focus () {\n return function () {\n this.setAttribute(FOCUS, true)\n }\n }\n\n // 兼容 Vue3,详情请见:https://github.com/NervJS/taro/issues/10579\n public set focus (value) {\n this.setAttribute(FOCUS, value)\n }\n\n public blur () {\n this.setAttribute(FOCUS, false)\n }\n\n public setAttribute (qualifiedName: string, value: any): void {\n process.env.NODE_ENV !== 'production' && warn(\n isString(value) && value.length > PROPERTY_THRESHOLD,\n `元素 ${this.nodeName} 的 ${qualifiedName} 属性值数据量过大,可能会影响渲染性能。考虑降低图片转为 base64 的阈值或在 CSS 中使用 base64。`\n )\n\n const isPureView = this.nodeName === VIEW && !isHasExtractProp(this) && !this.isAnyEventBinded()\n\n if (qualifiedName !== STYLE) {\n MutationObserver.record({\n target: this,\n type: MutationRecordType.ATTRIBUTES,\n attributeName: qualifiedName,\n oldValue: this.getAttribute(qualifiedName)\n })\n }\n\n switch (qualifiedName) {\n case STYLE:\n this.style.cssText = value as string\n break\n case ID:\n if (this.uid !== this.sid) {\n // eventSource[sid] 永远保留,直到组件卸载\n // eventSource[uid] 可变\n eventSource.delete(this.uid)\n }\n value = String(value)\n this.props[qualifiedName] = this.uid = value\n eventSource.set(value, this)\n break\n default:\n this.props[qualifiedName] = value as string\n\n if (qualifiedName.startsWith('data-')) {\n if (this.dataset === EMPTY_OBJ) {\n this.dataset = Object.create(null)\n }\n this.dataset[toCamelCase(qualifiedName.replace(/^data-/, ''))] = value\n }\n break\n }\n\n // Serialization\n if (!this._root) return\n\n const componentsAlias = getComponentsAlias()\n const _alias = componentsAlias[this.nodeName]\n const viewAlias = componentsAlias[VIEW]._num\n const staticViewAlias = componentsAlias[STATIC_VIEW]._num\n const catchViewAlias = componentsAlias[CATCH_VIEW]._num\n const _path = this._path\n\n qualifiedName = shortcutAttr(qualifiedName)\n\n const qualifiedNameInCamelCase = toCamelCase(qualifiedName)\n const payload = {\n path: `${_path}.${qualifiedNameInCamelCase}`,\n value: isFunction(value) ? () => value : value\n }\n\n hooks.call('modifySetAttrPayload', this, qualifiedName, payload, componentsAlias)\n\n if (_alias) {\n const qualifiedNameAlias = _alias[qualifiedNameInCamelCase] || qualifiedName\n payload.path = `${_path}.${toCamelCase(qualifiedNameAlias)}`\n }\n\n this.enqueueUpdate(payload)\n\n if (this.nodeName === VIEW) {\n if (qualifiedNameInCamelCase === CATCHMOVE) {\n // catchMove = true: catch-view\n // catchMove = false: view or static-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: value ? catchViewAlias : (\n this.isAnyEventBinded() ? viewAlias : staticViewAlias\n )\n })\n } else if (isPureView && isHasExtractProp(this)) {\n // pure-view => static-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: staticViewAlias\n })\n }\n }\n }\n\n public removeAttribute (qualifiedName: string) {\n const isStaticView = this.nodeName === VIEW && isHasExtractProp(this) && !this.isAnyEventBinded()\n\n MutationObserver.record({\n target: this,\n type: MutationRecordType.ATTRIBUTES,\n attributeName: qualifiedName,\n oldValue: this.getAttribute(qualifiedName)\n })\n\n if (qualifiedName === STYLE) {\n this.style.cssText = ''\n } else {\n const isInterrupt = hooks.call('onRemoveAttribute', this, qualifiedName)\n if (isInterrupt) {\n return\n }\n\n if (!this.props.hasOwnProperty(qualifiedName)) {\n return\n }\n delete this.props[qualifiedName]\n }\n\n // Serialization\n if (!this._root) return\n\n const componentsAlias = getComponentsAlias()\n const _alias = componentsAlias[this.nodeName]\n const viewAlias = componentsAlias[VIEW]._num\n const staticViewAlias = componentsAlias[STATIC_VIEW]._num\n const pureViewAlias = componentsAlias[PURE_VIEW]._num\n const _path = this._path\n\n qualifiedName = shortcutAttr(qualifiedName)\n\n const qualifiedNameInCamelCase = toCamelCase(qualifiedName)\n const payload = {\n path: `${_path}.${qualifiedNameInCamelCase}`,\n value: ''\n }\n\n hooks.call('modifyRmAttrPayload', this, qualifiedName, payload, componentsAlias)\n\n if (_alias) {\n const qualifiedNameAlias = _alias[qualifiedNameInCamelCase] || qualifiedName\n payload.path = `${_path}.${toCamelCase(qualifiedNameAlias)}`\n }\n\n this.enqueueUpdate(payload)\n\n if (this.nodeName === VIEW) {\n if (qualifiedNameInCamelCase === CATCHMOVE) {\n // catch-view => view or static-view or pure-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: this.isAnyEventBinded() ? viewAlias : (isHasExtractProp(this) ? staticViewAlias : pureViewAlias)\n })\n } else if (isStaticView && !isHasExtractProp(this)) {\n // static-view => pure-view\n this.enqueueUpdate({\n path: `${_path}.${Shortcuts.NodeName}`,\n value: pureViewAlias\n })\n }\n }\n }\n\n public getAttribute (qualifiedName: string): string {\n const attr = qualifiedName === STYLE ? this.style.cssText : this.props[qualifiedName]\n return attr ?? ''\n }\n\n public getElementsByTagName (tagName: string): TaroElement[] {\n return treeToArray(this, (el) => {\n return el.nodeName === tagName || (tagName === '*' && this !== el)\n })\n }\n\n public getElementsByClassName (className: string): TaroElement[] {\n const classNames = className.trim().split(/\\s+/)\n\n return treeToArray(this, (el) => {\n const classList = el.classList\n return classNames.every(c => classList.contains(c))\n })\n }\n\n public dispatchEvent (event: TaroEvent): boolean {\n const cancelable = event.cancelable\n\n const listeners = this.__handlers[event.type]\n\n if (!isArray(listeners)) {\n return false\n }\n\n for (let i = listeners.length; i--;) {\n const listener = listeners[i]\n let result: unknown\n if (listener._stop) {\n listener._stop = false\n } else {\n hooks.call('modifyDispatchEvent', event, this)\n result = listener.call(this, event)\n }\n if ((result === false || event._end) && cancelable) {\n event.defaultPrevented = true\n }\n\n if (!isUndefined(result) && event.mpEvent) {\n const res = hooks.call('modifyTaroEventReturn', this, event, result)\n if (res) { event.mpEvent[EVENT_CALLBACK_RESULT] = result }\n }\n\n if (event._end && event._stop) {\n break\n }\n }\n\n if (event._stop) {\n this._stopPropagation(event)\n }\n\n return listeners != null\n }\n\n public addEventListener (type, handler, options) {\n const name = this.nodeName\n const SPECIAL_NODES = hooks.call('getSpecialNodes')!\n\n let sideEffect = true\n if (isObject<Record<string, any>>(options) && options.sideEffect === false) {\n sideEffect = false\n delete options.sideEffect\n }\n\n hooks.call('modifyAddEventListener', this, sideEffect, getComponentsAlias)\n\n if (sideEffect !== false && !this.isAnyEventBinded() && SPECIAL_NODES.indexOf(name) > -1) {\n const componentsAlias = getComponentsAlias()\n const alias = componentsAlias[name]._num\n this.enqueueUpdate({\n path: `${this._path}.${Shortcuts.NodeName}`,\n value: alias\n })\n }\n\n super.addEventListener(type, handler, options)\n }\n\n public removeEventListener (type, handler, sideEffect = true) {\n super.removeEventListener(type, handler)\n\n const name = this.nodeName\n const SPECIAL_NODES = hooks.call('getSpecialNodes')!\n\n hooks.call('modifyRemoveEventListener', this, sideEffect, getComponentsAlias)\n\n if (sideEffect !== false && !this.isAnyEventBinded() && SPECIAL_NODES.indexOf(name) > -1) {\n const componentsAlias = getComponentsAlias()\n const value = isHasExtractProp(this) ? `static-${name}` : `pure-${name}`\n const valueAlias = componentsAlias[value]._num\n this.enqueueUpdate({\n path: `${this._path}.${Shortcuts.NodeName}`,\n value: valueAlias\n })\n }\n }\n\n static extend (methodName: string, options: TFunc | Record<string, any>) {\n extend(TaroElement, methodName, options)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class EventSource extends Map {
|
|
2
|
+
removeNode(child) {
|
|
3
|
+
const { sid, uid } = child;
|
|
4
|
+
this.delete(sid);
|
|
5
|
+
if (uid !== sid && uid)
|
|
6
|
+
this.delete(uid);
|
|
7
|
+
}
|
|
8
|
+
removeNodeTree(child) {
|
|
9
|
+
this.removeNode(child);
|
|
10
|
+
const { childNodes } = child;
|
|
11
|
+
childNodes.forEach(node => this.removeNodeTree(node));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const eventSource = new EventSource();
|
|
15
|
+
|
|
16
|
+
export { eventSource };
|
|
17
|
+
//# sourceMappingURL=event-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-source.js","sources":["../../src/dom/event-source.ts"],"sourcesContent":["import type { TaroNode } from './node'\n\ninterface IEventSource extends Map<string | undefined | null, TaroNode> {\n removeNode (child: TaroNode): void\n removeNodeTree (child: TaroNode): void\n}\n\nclass EventSource extends Map {\n removeNode (child: TaroNode) {\n const { sid, uid } = child\n this.delete(sid)\n if (uid !== sid && uid) this.delete(uid)\n }\n\n removeNodeTree (child: TaroNode) {\n this.removeNode(child)\n const { childNodes } = child\n childNodes.forEach(node => this.removeNodeTree(node))\n }\n}\n\nexport const eventSource: IEventSource = new EventSource()\n"],"names":[],"mappings":"AAOA,MAAM,WAAY,SAAQ,GAAG,CAAA;AAC3B,IAAA,UAAU,CAAE,KAAe,EAAA;AACzB,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAChB,QAAA,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;KACzC;AAED,IAAA,cAAc,CAAE,KAAe,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AACtB,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;AAC5B,QAAA,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAA;KACtD;AACF,CAAA;AAEY,MAAA,WAAW,GAAiB,IAAI,WAAW;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AddEventListenerOptions, EventHandler } from "../index-26658829.js";
|
|
2
|
+
declare class TaroEventTarget {
|
|
3
|
+
__handlers: Record<string, EventHandler[]>;
|
|
4
|
+
addEventListener(type: string, handler: EventHandler, options?: boolean | AddEventListenerOptions): void;
|
|
5
|
+
removeEventListener(type: string, handler: EventHandler): void;
|
|
6
|
+
isAnyEventBinded(): boolean;
|
|
7
|
+
}
|
|
8
|
+
export { TaroEventTarget };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { hooks, isObject, warn, isArray } from '@tarojs/shared';
|
|
2
|
+
|
|
3
|
+
class TaroEventTarget {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.__handlers = {};
|
|
6
|
+
}
|
|
7
|
+
addEventListener(type, handler, options) {
|
|
8
|
+
type = type.toLowerCase();
|
|
9
|
+
hooks.call('onAddEvent', type, handler, options, this);
|
|
10
|
+
if (type === 'regionchange') {
|
|
11
|
+
// map 组件的 regionchange 事件非常特殊,详情:https://github.com/NervJS/taro/issues/5766
|
|
12
|
+
this.addEventListener('begin', handler, options);
|
|
13
|
+
this.addEventListener('end', handler, options);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
let isCapture = Boolean(options);
|
|
17
|
+
let isOnce = false;
|
|
18
|
+
if (isObject(options)) {
|
|
19
|
+
isCapture = Boolean(options.capture);
|
|
20
|
+
isOnce = Boolean(options.once);
|
|
21
|
+
}
|
|
22
|
+
if (isOnce) {
|
|
23
|
+
const wrapper = function () {
|
|
24
|
+
handler.apply(this, arguments); // this 指向 Element
|
|
25
|
+
this.removeEventListener(type, wrapper);
|
|
26
|
+
};
|
|
27
|
+
this.addEventListener(type, wrapper, Object.assign(Object.assign({}, options), { once: false }));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
process.env.NODE_ENV !== 'production' && warn(isCapture, 'Taro 暂未实现 event 的 capture 特性。');
|
|
31
|
+
// 某些框架,如 PReact 有委托的机制,handler 始终是同一个函数
|
|
32
|
+
// 这会导致多层停止冒泡失败:view -> view(handler.stop = false) -> view(handler.stop = true)
|
|
33
|
+
// 这样解决:view -> view(handlerA.stop = false) -> view(handlerB.stop = false)
|
|
34
|
+
// 因此每次绑定事件都新建一个函数,如果带来了性能问题,可以把这段逻辑抽取到 PReact 插件中。
|
|
35
|
+
const oldHandler = handler;
|
|
36
|
+
handler = function () {
|
|
37
|
+
return oldHandler.apply(this, arguments); // this 指向 Element
|
|
38
|
+
};
|
|
39
|
+
handler.oldHandler = oldHandler;
|
|
40
|
+
const handlers = this.__handlers[type];
|
|
41
|
+
if (isArray(handlers)) {
|
|
42
|
+
handlers.push(handler);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.__handlers[type] = [handler];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
removeEventListener(type, handler) {
|
|
49
|
+
type = type.toLowerCase();
|
|
50
|
+
if (type === 'regionchange') {
|
|
51
|
+
// map 组件的 regionchange 事件非常特殊,详情:https://github.com/NervJS/taro/issues/5766
|
|
52
|
+
this.removeEventListener('begin', handler);
|
|
53
|
+
this.removeEventListener('end', handler);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (!handler) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const handlers = this.__handlers[type];
|
|
60
|
+
if (!isArray(handlers)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const index = handlers.findIndex(item => {
|
|
64
|
+
if (item === handler || item.oldHandler === handler)
|
|
65
|
+
return true;
|
|
66
|
+
});
|
|
67
|
+
process.env.NODE_ENV !== 'production' && warn(index === -1, `事件: '${type}' 没有注册在 DOM 中,因此不会被移除。`);
|
|
68
|
+
handlers.splice(index, 1);
|
|
69
|
+
}
|
|
70
|
+
isAnyEventBinded() {
|
|
71
|
+
const handlers = this.__handlers;
|
|
72
|
+
const isAnyEventBinded = Object.keys(handlers).find(key => handlers[key].length);
|
|
73
|
+
return Boolean(isAnyEventBinded);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { TaroEventTarget };
|
|
78
|
+
//# sourceMappingURL=event-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-target.js","sources":["../../src/dom/event-target.ts"],"sourcesContent":["import { hooks, isArray, isObject, warn } from '@tarojs/shared'\n\nimport type { AddEventListenerOptions, EventHandler } from '../interface'\n\nexport class TaroEventTarget {\n public __handlers: Record<string, EventHandler[]> = {}\n\n public addEventListener (type: string, handler: EventHandler, options?: boolean | AddEventListenerOptions) {\n type = type.toLowerCase()\n\n hooks.call('onAddEvent', type, handler, options, this)\n\n if (type === 'regionchange') {\n // map 组件的 regionchange 事件非常特殊,详情:https://github.com/NervJS/taro/issues/5766\n this.addEventListener('begin', handler, options)\n this.addEventListener('end', handler, options)\n return\n }\n\n let isCapture = Boolean(options)\n let isOnce = false\n if (isObject<AddEventListenerOptions>(options)) {\n isCapture = Boolean(options.capture)\n isOnce = Boolean(options.once)\n }\n\n if (isOnce) {\n const wrapper = function () {\n handler.apply(this, arguments) // this 指向 Element\n this.removeEventListener(type, wrapper)\n }\n this.addEventListener(type, wrapper, {\n ...(options as AddEventListenerOptions),\n once: false\n })\n return\n }\n\n process.env.NODE_ENV !== 'production' && warn(isCapture, 'Taro 暂未实现 event 的 capture 特性。')\n\n // 某些框架,如 PReact 有委托的机制,handler 始终是同一个函数\n // 这会导致多层停止冒泡失败:view -> view(handler.stop = false) -> view(handler.stop = true)\n // 这样解决:view -> view(handlerA.stop = false) -> view(handlerB.stop = false)\n // 因此每次绑定事件都新建一个函数,如果带来了性能问题,可以把这段逻辑抽取到 PReact 插件中。\n const oldHandler = handler\n handler = function () {\n return oldHandler.apply(this, arguments) // this 指向 Element\n }\n ;(handler as any).oldHandler = oldHandler\n\n const handlers = this.__handlers[type]\n if (isArray(handlers)) {\n handlers.push(handler)\n } else {\n this.__handlers[type] = [handler]\n }\n }\n\n public removeEventListener (type: string, handler: EventHandler) {\n type = type.toLowerCase()\n\n if (type === 'regionchange') {\n // map 组件的 regionchange 事件非常特殊,详情:https://github.com/NervJS/taro/issues/5766\n this.removeEventListener('begin', handler)\n this.removeEventListener('end', handler)\n return\n }\n\n if (!handler) {\n return\n }\n\n const handlers = this.__handlers[type]\n if (!isArray(handlers)) {\n return\n }\n\n const index = handlers.findIndex(item => {\n if (item === handler || (item as any).oldHandler === handler) return true\n })\n\n process.env.NODE_ENV !== 'production' && warn(index === -1, `事件: '${type}' 没有注册在 DOM 中,因此不会被移除。`)\n\n handlers.splice(index, 1)\n }\n\n public isAnyEventBinded (): boolean {\n const handlers = this.__handlers\n const isAnyEventBinded = Object.keys(handlers).find(key => handlers[key].length)\n return Boolean(isAnyEventBinded)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EventOptions, MpEvent } from "../index-26658829.js";
|
|
2
|
+
import { TaroElement } from "./element.js";
|
|
3
|
+
declare class TaroEvent {
|
|
4
|
+
private cacheTarget;
|
|
5
|
+
private cacheCurrentTarget;
|
|
6
|
+
type: string;
|
|
7
|
+
bubbles: boolean;
|
|
8
|
+
cancelable: boolean;
|
|
9
|
+
_stop: boolean;
|
|
10
|
+
_end: boolean;
|
|
11
|
+
defaultPrevented: boolean;
|
|
12
|
+
button: number;
|
|
13
|
+
timeStamp: number;
|
|
14
|
+
mpEvent: MpEvent | undefined;
|
|
15
|
+
constructor(type: string, opts: EventOptions, event?: MpEvent);
|
|
16
|
+
stopPropagation(): void;
|
|
17
|
+
stopImmediatePropagation(): void;
|
|
18
|
+
preventDefault(): void;
|
|
19
|
+
get target(): any;
|
|
20
|
+
get currentTarget(): any;
|
|
21
|
+
}
|
|
22
|
+
declare function createEvent(event: MpEvent | string, node?: TaroElement): TaroEvent;
|
|
23
|
+
declare function eventHandler(event: MpEvent): any;
|
|
24
|
+
export { TaroEvent, createEvent, eventHandler };
|