glass-easel 0.2.1 → 0.3.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/.eslintignore +4 -0
- package/dist/glass_easel.all.js +2 -2
- package/dist/glass_easel.all.js.map +1 -1
- package/dist/glass_easel.d.ts +2546 -0
- package/dist/glass_easel.domlike.global.js +2 -2
- package/dist/glass_easel.domlike.global.js.map +1 -1
- package/guide/zh_CN/appendix/backend_protocol.md +164 -74
- package/jest.unit.config.js +7 -4
- package/package.json +7 -5
- package/rollup.config.ts +101 -0
- package/src/backend/backend_protocol.ts +26 -345
- package/src/backend/composed_backend_protocol.ts +10 -264
- package/src/backend/current_window_backend_context.ts +478 -0
- package/src/backend/domlike_backend_protocol.ts +9 -498
- package/src/backend/empty_backend.ts +265 -0
- package/src/backend/empty_composed_backend.ts +245 -0
- package/src/backend/index.ts +18 -0
- package/src/backend/suggested_backend_protocol.ts +62 -11
- package/src/behavior.ts +131 -442
- package/src/class_list.ts +328 -222
- package/src/component.ts +349 -184
- package/src/component_params.ts +54 -25
- package/src/component_space.ts +36 -15
- package/src/data_path.ts +22 -34
- package/src/data_proxy.ts +334 -27
- package/src/devtool.ts +89 -0
- package/src/element.ts +667 -285
- package/src/element_iterator.ts +9 -4
- package/src/event.ts +39 -20
- package/src/external_shadow_tree.ts +2 -2
- package/src/func_arr.ts +55 -101
- package/src/global_options.ts +18 -42
- package/src/index.ts +72 -73
- package/src/mutation_observer.ts +10 -7
- package/src/native_node.ts +79 -35
- package/src/node.ts +23 -30
- package/src/relation.ts +101 -12
- package/src/render.ts +5 -3
- package/src/selector.ts +9 -7
- package/src/shadow_root.ts +96 -240
- package/src/template_engine.ts +10 -7
- package/src/text_node.ts +43 -19
- package/src/tmpl/index.ts +38 -30
- package/src/tmpl/native_rendering.ts +14 -21
- package/src/tmpl/proc_gen_wrapper.ts +189 -151
- package/src/tmpl/proc_gen_wrapper_dom.ts +10 -8
- package/src/tmpl/range_list_diff.ts +30 -9
- package/src/trait_behaviors.ts +1 -1
- package/src/type_symbol.ts +36 -0
- package/src/virtual_node.ts +26 -13
- package/src/warning.ts +119 -0
- package/tests/base/composed_backend.ts +143 -142
- package/tests/base/env.ts +76 -3
- package/tests/base/match.ts +24 -22
- package/tests/base/shadow_backend.ts +917 -0
- package/tests/core/backend.test.ts +53 -1
- package/tests/core/behavior.test.ts +1 -1
- package/tests/core/data_update.test.ts +135 -0
- package/tests/core/misc.test.ts +91 -21
- package/tests/core/placeholder.test.ts +66 -25
- package/tests/core/slot.test.ts +161 -23
- package/tests/legacy/component.test.js +152 -78
- package/tests/legacy/data_path.test.js +19 -19
- package/tests/legacy/data_proxy.test.js +14 -7
- package/tests/legacy/external.test.js +8 -8
- package/tests/legacy/mutation_observer.test.js +7 -5
- package/tests/legacy/slot.test.js +2 -3
- package/tests/legacy/virtual.test.js +258 -25
- package/tests/tmpl/binding_map.test.ts +201 -195
- package/tests/tmpl/event.test.ts +138 -23
- package/tests/tmpl/expression.test.ts +15 -15
- package/tests/tmpl/lvalue.test.ts +101 -0
- package/tests/tmpl/structure.test.ts +486 -43
- package/tests/types/chaining.test.ts +27 -30
- package/tests/types/createElement.test.ts +5 -4
- package/tests/types/definition.test.ts +11 -14
- package/tsconfig.json +1 -3
- package/dist/glass_easel.all.d.ts +0 -1
- package/dist/glass_easel.domlike.global.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/types/src/backend/backend_protocol.d.ts +0 -141
- package/dist/types/src/backend/backend_protocol.d.ts.map +0 -1
- package/dist/types/src/backend/composed_backend_protocol.d.ts +0 -102
- package/dist/types/src/backend/composed_backend_protocol.d.ts.map +0 -1
- package/dist/types/src/backend/domlike_backend_protocol.d.ts +0 -100
- package/dist/types/src/backend/domlike_backend_protocol.d.ts.map +0 -1
- package/dist/types/src/backend/mode.d.ts +0 -65
- package/dist/types/src/backend/mode.d.ts.map +0 -1
- package/dist/types/src/backend/suggested_backend_protocol.d.ts +0 -30
- package/dist/types/src/backend/suggested_backend_protocol.d.ts.map +0 -1
- package/dist/types/src/behavior.d.ts +0 -434
- package/dist/types/src/behavior.d.ts.map +0 -1
- package/dist/types/src/class_list.d.ts +0 -83
- package/dist/types/src/class_list.d.ts.map +0 -1
- package/dist/types/src/component.d.ts +0 -325
- package/dist/types/src/component.d.ts.map +0 -1
- package/dist/types/src/component_params.d.ts +0 -236
- package/dist/types/src/component_params.d.ts.map +0 -1
- package/dist/types/src/component_space.d.ts +0 -211
- package/dist/types/src/component_space.d.ts.map +0 -1
- package/dist/types/src/data_path.d.ts +0 -5
- package/dist/types/src/data_path.d.ts.map +0 -1
- package/dist/types/src/data_proxy.d.ts +0 -107
- package/dist/types/src/data_proxy.d.ts.map +0 -1
- package/dist/types/src/data_utils.d.ts +0 -3
- package/dist/types/src/data_utils.d.ts.map +0 -1
- package/dist/types/src/element.d.ts +0 -365
- package/dist/types/src/element.d.ts.map +0 -1
- package/dist/types/src/element_iterator.d.ts +0 -43
- package/dist/types/src/element_iterator.d.ts.map +0 -1
- package/dist/types/src/event.d.ts +0 -105
- package/dist/types/src/event.d.ts.map +0 -1
- package/dist/types/src/external_shadow_tree.d.ts +0 -20
- package/dist/types/src/external_shadow_tree.d.ts.map +0 -1
- package/dist/types/src/func_arr.d.ts +0 -39
- package/dist/types/src/func_arr.d.ts.map +0 -1
- package/dist/types/src/global_options.d.ts +0 -120
- package/dist/types/src/global_options.d.ts.map +0 -1
- package/dist/types/src/index.d.ts +0 -43
- package/dist/types/src/index.d.ts.map +0 -1
- package/dist/types/src/mutation_observer.d.ts +0 -79
- package/dist/types/src/mutation_observer.d.ts.map +0 -1
- package/dist/types/src/native_node.d.ts +0 -11
- package/dist/types/src/native_node.d.ts.map +0 -1
- package/dist/types/src/node.d.ts +0 -48
- package/dist/types/src/node.d.ts.map +0 -1
- package/dist/types/src/relation.d.ts +0 -46
- package/dist/types/src/relation.d.ts.map +0 -1
- package/dist/types/src/render.d.ts +0 -3
- package/dist/types/src/render.d.ts.map +0 -1
- package/dist/types/src/selector.d.ts +0 -32
- package/dist/types/src/selector.d.ts.map +0 -1
- package/dist/types/src/shadow_root.d.ts +0 -174
- package/dist/types/src/shadow_root.d.ts.map +0 -1
- package/dist/types/src/template_engine.d.ts +0 -56
- package/dist/types/src/template_engine.d.ts.map +0 -1
- package/dist/types/src/text_node.d.ts +0 -44
- package/dist/types/src/text_node.d.ts.map +0 -1
- package/dist/types/src/tmpl/index.d.ts +0 -19
- package/dist/types/src/tmpl/index.d.ts.map +0 -1
- package/dist/types/src/tmpl/native_rendering.d.ts +0 -45
- package/dist/types/src/tmpl/native_rendering.d.ts.map +0 -1
- package/dist/types/src/tmpl/proc_gen_wrapper.d.ts +0 -89
- package/dist/types/src/tmpl/proc_gen_wrapper.d.ts.map +0 -1
- package/dist/types/src/tmpl/proc_gen_wrapper_dom.d.ts +0 -50
- package/dist/types/src/tmpl/proc_gen_wrapper_dom.d.ts.map +0 -1
- package/dist/types/src/tmpl/range_list_diff.d.ts +0 -19
- package/dist/types/src/tmpl/range_list_diff.d.ts.map +0 -1
- package/dist/types/src/trait_behaviors.d.ts +0 -38
- package/dist/types/src/trait_behaviors.d.ts.map +0 -1
- package/dist/types/src/virtual_node.d.ts +0 -10
- package/dist/types/src/virtual_node.d.ts.map +0 -1
- package/dist/types/tests/backend/domlike.test.d.ts +0 -2
- package/dist/types/tests/backend/domlike.test.d.ts.map +0 -1
- package/dist/types/tests/base/composed_backend.d.ts +0 -123
- package/dist/types/tests/base/composed_backend.d.ts.map +0 -1
- package/dist/types/tests/base/env.d.ts +0 -30
- package/dist/types/tests/base/env.d.ts.map +0 -1
- package/dist/types/tests/base/match.d.ts +0 -9
- package/dist/types/tests/base/match.d.ts.map +0 -1
- package/dist/types/tests/core/backend.test.d.ts +0 -2
- package/dist/types/tests/core/backend.test.d.ts.map +0 -1
- package/dist/types/tests/core/behavior.test.d.ts +0 -2
- package/dist/types/tests/core/behavior.test.d.ts.map +0 -1
- package/dist/types/tests/core/component_space.test.d.ts +0 -2
- package/dist/types/tests/core/component_space.test.d.ts.map +0 -1
- package/dist/types/tests/core/data_update.test.d.ts +0 -2
- package/dist/types/tests/core/data_update.test.d.ts.map +0 -1
- package/dist/types/tests/core/misc.test.d.ts +0 -2
- package/dist/types/tests/core/misc.test.d.ts.map +0 -1
- package/dist/types/tests/core/placeholder.test.d.ts +0 -2
- package/dist/types/tests/core/placeholder.test.d.ts.map +0 -1
- package/dist/types/tests/core/slot.test.d.ts +0 -2
- package/dist/types/tests/core/slot.test.d.ts.map +0 -1
- package/dist/types/tests/core/trait_behaviors.test.d.ts +0 -2
- package/dist/types/tests/core/trait_behaviors.test.d.ts.map +0 -1
- package/dist/types/tests/tmpl/binding_map.test.d.ts +0 -2
- package/dist/types/tests/tmpl/binding_map.test.d.ts.map +0 -1
- package/dist/types/tests/tmpl/event.test.d.ts +0 -2
- package/dist/types/tests/tmpl/event.test.d.ts.map +0 -1
- package/dist/types/tests/tmpl/expression.test.d.ts +0 -2
- package/dist/types/tests/tmpl/expression.test.d.ts.map +0 -1
- package/dist/types/tests/tmpl/lvalue.test.d.ts +0 -2
- package/dist/types/tests/tmpl/lvalue.test.d.ts.map +0 -1
- package/dist/types/tests/tmpl/native_rendering.test.d.ts +0 -2
- package/dist/types/tests/tmpl/native_rendering.test.d.ts.map +0 -1
- package/dist/types/tests/tmpl/structure.test.d.ts +0 -2
- package/dist/types/tests/tmpl/structure.test.d.ts.map +0 -1
- package/dist/types/tests/types/chaining.test.d.ts +0 -2
- package/dist/types/tests/types/chaining.test.d.ts.map +0 -1
- package/dist/types/tests/types/createElement.test.d.ts +0 -2
- package/dist/types/tests/types/createElement.test.d.ts.map +0 -1
- package/dist/types/tests/types/definition.test.d.ts +0 -2
- package/dist/types/tests/types/definition.test.d.ts.map +0 -1
- package/webpack.config.js +0 -275
- /package/src/backend/{mode.ts → shared.ts} +0 -0
|
@@ -22,6 +22,7 @@ glass-easel 支持自定义后端。后端必须向 glass-easel 提供以下这
|
|
|
22
22
|
* 文本节点(仅承载文本,无子节点);
|
|
23
23
|
* 片段节点(用于临时承载节点树片段);
|
|
24
24
|
* 组件节点(仅 Shadow Mode ,拥有自己的 shadow tree ,可为虚拟或非虚拟);
|
|
25
|
+
* 组件根节点(仅 Shadow Mode,组件的 shadowRoot 节点);
|
|
25
26
|
* 虚拟节点(仅 Shadow Mode )。
|
|
26
27
|
|
|
27
28
|
### 接口形式
|
|
@@ -97,6 +98,46 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
97
98
|
|
|
98
99
|
禁用一段已插入的样式表。
|
|
99
100
|
|
|
101
|
+
### `Context#render(cb: (Error | null) => void): void`
|
|
102
|
+
|
|
103
|
+
等待下一次渲染完成时的回调,即与后端节拍器对齐。
|
|
104
|
+
|
|
105
|
+
后端必须保证回调是异步的。在回调中,设置新的属性应能触发 CSS transition 动画。
|
|
106
|
+
|
|
107
|
+
### `Context#getRootNode(): Element`
|
|
108
|
+
|
|
109
|
+
获得根节点。
|
|
110
|
+
|
|
111
|
+
**在 Shadow Mode 下** ,根节点必须是组件根节点; **在 Composed Mode 下** ,根节点必须是普通节点。
|
|
112
|
+
|
|
113
|
+
### `Context#createElement(tagName: string): Element`
|
|
114
|
+
|
|
115
|
+
创建一个普通节点。
|
|
116
|
+
|
|
117
|
+
**仅 Composed Mode 有效。**
|
|
118
|
+
|
|
119
|
+
### `Context#createTextNode(content: string): Element`
|
|
120
|
+
|
|
121
|
+
创建一个文本节点。
|
|
122
|
+
|
|
123
|
+
**仅 Composed Mode 有效。**
|
|
124
|
+
|
|
125
|
+
### `Context#createFragment(): Element`
|
|
126
|
+
|
|
127
|
+
创建一个片段节点。它用于表示节点数组,方便批量插入和移除节点。
|
|
128
|
+
|
|
129
|
+
### `Context#onEvent(listener: (target: Node, type: string, detail: any, options: EventOptions) => EventBubbleStatus | void): void`
|
|
130
|
+
|
|
131
|
+
设置全局事件回调函数。这个回调函数只有一个。
|
|
132
|
+
|
|
133
|
+
**仅 Composed Mode 有效**,Shadow Mode 参考下一个签名。
|
|
134
|
+
|
|
135
|
+
### `Context#onEvent(createEvent: (type: string, detail: unknown, options: EventOptions) => Event<unknown>, listener: (event: Event<unknown>, currentTarget: Node, mark: Record<string, unknown> | null, target: Node, isCapture: boolean) => EventBubbleStatus | void): void`
|
|
136
|
+
|
|
137
|
+
设置全局事件回调函数。这个回调函数只有一个。
|
|
138
|
+
|
|
139
|
+
**仅 Shadow Mode 有效**,Composed Mode 参考上一个签名。
|
|
140
|
+
|
|
100
141
|
### `Context#addStyleSheetRule(mediaQueryStr: string, selector: string): number | null`
|
|
101
142
|
|
|
102
143
|
插入一段样式表规则,返回它对应的规则序号。
|
|
@@ -169,38 +210,6 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
169
210
|
|
|
170
211
|
**这只是一个建议性质的接口。** glass-easel 并不会自行调用这个接口,但其他相关模块很可能调用。
|
|
171
212
|
|
|
172
|
-
### `Context#render(cb: (Error | null) => void): void`
|
|
173
|
-
|
|
174
|
-
等待下一次渲染完成时的回调,即与后端节拍器对齐。
|
|
175
|
-
|
|
176
|
-
后端必须保证回调是异步的。在回调中,设置新的属性应能触发 CSS transition 动画。
|
|
177
|
-
|
|
178
|
-
### `Context#getRootNode(): Element`
|
|
179
|
-
|
|
180
|
-
获得根节点。
|
|
181
|
-
|
|
182
|
-
**在 Shadow Mode 下** ,根节点必须是组件节点; **在 Composed Mode 下** ,根节点必须是普通节点。
|
|
183
|
-
|
|
184
|
-
### `Context#createElement(tagName: string): Element`
|
|
185
|
-
|
|
186
|
-
创建一个普通节点。
|
|
187
|
-
|
|
188
|
-
**仅 Composed Mode 有效。**
|
|
189
|
-
|
|
190
|
-
### `Context#createTextNode(content: string): Element`
|
|
191
|
-
|
|
192
|
-
创建一个文本节点。
|
|
193
|
-
|
|
194
|
-
**仅 Composed Mode 有效。**
|
|
195
|
-
|
|
196
|
-
### `Context#createFragment(): Element`
|
|
197
|
-
|
|
198
|
-
创建一个片段节点。它用于表示节点数组,方便批量插入和移除节点。
|
|
199
|
-
|
|
200
|
-
### `Context#onEvent(listener: (target: Node, type: string, detail: any, options: EventOptions) => EventBubbleStatus): void`
|
|
201
|
-
|
|
202
|
-
设置全局事件回调函数。这个回调函数只有一个。
|
|
203
|
-
|
|
204
213
|
### `Context#setFocusedNode(target: Node): void`
|
|
205
214
|
|
|
206
215
|
设置焦点所在节点。如果节点不可聚焦,则移除焦点。
|
|
@@ -225,6 +234,7 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
225
234
|
|
|
226
235
|
监听器必然在开始监听时触发一次,用于返回初始的媒体查询状态信息。
|
|
227
236
|
|
|
237
|
+
**这只是一个建议性质的接口。** glass-easel 并不会自行调用这个接口,但其他相关模块很可能调用。
|
|
228
238
|
|
|
229
239
|
## Element
|
|
230
240
|
|
|
@@ -232,11 +242,11 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
232
242
|
|
|
233
243
|
释放一个节点。
|
|
234
244
|
|
|
235
|
-
### `Element#associateValue(associatedValue?:
|
|
245
|
+
### `Element#associateValue(associatedValue?: Element): void`
|
|
236
246
|
|
|
237
|
-
|
|
247
|
+
通知节点相关信息已经创建完毕,并为节点设置一个关联值。
|
|
238
248
|
|
|
239
|
-
|
|
249
|
+
创建的节点会被调用且仅被调用一次;文本 (TextNode) 节点,不会被调用。
|
|
240
250
|
|
|
241
251
|
### `Element#getShadowRoot(): ShadowRootContext | undefined`
|
|
242
252
|
|
|
@@ -312,17 +322,57 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
312
322
|
|
|
313
323
|
**仅 Shadow Mode 有效。**
|
|
314
324
|
|
|
315
|
-
### `Element#
|
|
325
|
+
### `Element#setContainingSlot(slot: Element | undefined | null)`
|
|
316
326
|
|
|
317
|
-
设置节点的目标 slot
|
|
327
|
+
设置节点的目标 slot ;`undefined` 表示节点没有目标 slot;`null` 表示节点的目标 slot 为空 (即节点的 composedParent 为空)。
|
|
328
|
+
|
|
329
|
+
**仅 Shadow Mode 有效。**
|
|
330
|
+
|
|
331
|
+
### `Element#reassignContainingSlot(oldSlot: Element | null, newSlot: Element | null)`
|
|
332
|
+
|
|
333
|
+
替换节点的目标 slot;`null` 表示节点的目标 slot 为空 (即节点的 composedParent 为空)。
|
|
334
|
+
|
|
335
|
+
**仅 Shadow Mode 有效。**
|
|
336
|
+
|
|
337
|
+
### `Element#spliceBeforeSlotNodes(before: number, deleteCount: number, list: Element)`
|
|
338
|
+
|
|
339
|
+
更改当前节点的 slot 内容,删除从 `before` 开始的 `deleteCount` 个节点,并在这个位置插入 `list` 中包含的所有节点。
|
|
340
|
+
|
|
341
|
+
`list` 必然是片段节点,应被清空,但可能被再次使用。
|
|
342
|
+
|
|
343
|
+
当前节点一定是一个 slot 节点。
|
|
344
|
+
|
|
345
|
+
**仅 Shadow Mode 有效。**
|
|
346
|
+
|
|
347
|
+
### `Element#spliceAppendSlotNodes(list: Element)`
|
|
348
|
+
|
|
349
|
+
追加当前节点的 slot 内容,在末尾插入 `list` 中包含的所有节点。
|
|
350
|
+
|
|
351
|
+
`list` 必然是片段节点,应被清空,但可能被再次使用。
|
|
352
|
+
|
|
353
|
+
当前节点一定是一个 slot 节点。
|
|
354
|
+
|
|
355
|
+
**仅 Shadow Mode 有效。**
|
|
356
|
+
|
|
357
|
+
### `Element#spliceRemoveSlotNodes(before: number, deleteCount: number)`
|
|
358
|
+
|
|
359
|
+
更改当前节点的 slot 内容,删除从 `before` 开始的 `deleteCount` 个节点。
|
|
360
|
+
|
|
361
|
+
当前节点一定是一个 slot 节点。
|
|
362
|
+
|
|
363
|
+
**仅 Shadow Mode 有效。**
|
|
364
|
+
|
|
365
|
+
### `Element#setInheritSlots()`
|
|
366
|
+
|
|
367
|
+
设置节点为 slot-inherit。
|
|
318
368
|
|
|
319
369
|
对于 slot-inherit 节点,它的子节点在 composed tree 上并不视为子节点,而视为它之后的兄弟节点。这可以使得这些子节点拥有不同的目标 slot 。
|
|
320
370
|
|
|
321
|
-
节点仅在初始化阶段、还没有子节点时才会被设为 slot-inherit
|
|
371
|
+
节点仅在初始化阶段、还没有子节点时才会被设为 slot-inherit 节点;
|
|
322
372
|
|
|
323
373
|
**仅 Shadow Mode 有效。**
|
|
324
374
|
|
|
325
|
-
### `Element#setStyleScope(styleScope: number): void`
|
|
375
|
+
### `Element#setStyleScope(styleScope: number, extraStyleScope: number | undefined, hostStyleScope?: number | undefined): void`
|
|
326
376
|
|
|
327
377
|
设置节点的 scope 标识符。对于同一个节点,最多被设置一次。
|
|
328
378
|
|
|
@@ -330,13 +380,13 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
330
380
|
|
|
331
381
|
在匹配样式规则时,如果使用除 class 以外的节点选择器(如标签名选择器、 ID 选择器)来匹配这个节点,则样式表的 scope 标识符必须为空或等于这个节点的 scope 标识符。
|
|
332
382
|
|
|
333
|
-
|
|
383
|
+
**仅 Composed Mode 有效**
|
|
334
384
|
|
|
335
|
-
### `Element#
|
|
385
|
+
### `Element#setStyle(styleText: string): void`
|
|
336
386
|
|
|
337
387
|
设置节点 style 。
|
|
338
388
|
|
|
339
|
-
|
|
389
|
+
不会对文本节点调用。
|
|
340
390
|
|
|
341
391
|
### `Element#addClass(elementClass: string, styleScope?: number): void`
|
|
342
392
|
|
|
@@ -346,7 +396,9 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
346
396
|
|
|
347
397
|
在匹配样式规则时,如果使用这个 class 来匹配这个节点,则样式表的 scope 标识符必须为空或等于这个 `styleScope` 。
|
|
348
398
|
|
|
349
|
-
|
|
399
|
+
不会对文本节点调用。
|
|
400
|
+
|
|
401
|
+
**在 Shadow Mode 下** ,不会传递 styleScope;
|
|
350
402
|
|
|
351
403
|
### `Element#removeClass(elementClass: string, styleScope?: number): void`
|
|
352
404
|
|
|
@@ -354,25 +406,43 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
354
406
|
|
|
355
407
|
如果 styleScope 不为非负整数,则视为空。
|
|
356
408
|
|
|
357
|
-
|
|
409
|
+
不会对文本节点调用。
|
|
410
|
+
|
|
411
|
+
**在 Shadow Mode 下** ,不会传递 styleScope;
|
|
358
412
|
|
|
359
413
|
### `Element#clearClasses(): void`
|
|
360
414
|
|
|
361
415
|
移除所有 class 。
|
|
362
416
|
|
|
363
|
-
|
|
417
|
+
不会对文本节点调用。
|
|
364
418
|
|
|
365
|
-
### `Element#
|
|
419
|
+
### `Element#setClassAlias(className: string, target: string): void`
|
|
420
|
+
|
|
421
|
+
更新一个节点的 class 别名。
|
|
422
|
+
|
|
423
|
+
不会对文本节点调用。
|
|
424
|
+
|
|
425
|
+
**仅 Shadow Mode 有效。**
|
|
366
426
|
|
|
367
|
-
|
|
427
|
+
### `Element#setAttribute(name: string, value: unknown): void`
|
|
368
428
|
|
|
369
|
-
|
|
429
|
+
设置节点的一个属性。value 可能为任何类型。
|
|
430
|
+
|
|
431
|
+
不会对文本节点调用。
|
|
370
432
|
|
|
371
433
|
### `Element#removeAttribute(name: string): void`
|
|
372
434
|
|
|
373
435
|
移除节点的一个属性。
|
|
374
436
|
|
|
375
|
-
|
|
437
|
+
不会对文本节点调用。
|
|
438
|
+
|
|
439
|
+
### `Element#setDataset(name: string, value: unknown): void`
|
|
440
|
+
|
|
441
|
+
设置节点的一个 dataset 属性。value 可能为任何类型。
|
|
442
|
+
|
|
443
|
+
不会对文本节点调用。
|
|
444
|
+
|
|
445
|
+
**仅 Shadow Mode 有效。**
|
|
376
446
|
|
|
377
447
|
### `Element#setText(content: string): void`
|
|
378
448
|
|
|
@@ -380,7 +450,25 @@ glass-easel 并不会自行调用这个接口。应由其他模块调用这个
|
|
|
380
450
|
|
|
381
451
|
仅对文本节点调用。
|
|
382
452
|
|
|
383
|
-
|
|
453
|
+
## `Element#setModelBindingStat(attributeName: string, listener: ((newValue: unknown) => void) | null): void`
|
|
454
|
+
|
|
455
|
+
同步一个节点上的数据绑定设置。`attributeName` 表示字段名;`listener` 表示数据绑定更新回调。
|
|
456
|
+
|
|
457
|
+
仅对普通节点调用
|
|
458
|
+
|
|
459
|
+
## `Element#setListenerStats(type: string, capture: boolean, mutLevel: MutLevel): void`
|
|
460
|
+
|
|
461
|
+
同步一个节点上的事件响应设置。`type` 表示事件名;`capture` 表示事件响应是否是捕获节点;`mutLevel` 表示事件响应类型。
|
|
462
|
+
|
|
463
|
+
若 `mutLevel` 为 `MutLevel.None`,则表示为普通响应。
|
|
464
|
+
|
|
465
|
+
若 `mutLevel` 为 `MutLevel.Mut`,则表示为互斥响应;该轮事件冒泡中,若已经执行过一个互斥响应,则之后的互斥响应不会被执行。
|
|
466
|
+
|
|
467
|
+
若 `mutLevel` 为 `MutLevel.Final`,则表示为最终响应;事件冒泡会被停止,且阻止事件默认行为。
|
|
468
|
+
|
|
469
|
+
不会对文本节点调用。
|
|
470
|
+
|
|
471
|
+
### `async Element#getContext(): unknown`
|
|
384
472
|
|
|
385
473
|
获得与对应节点关联的上下文对象。
|
|
386
474
|
|
|
@@ -427,12 +515,16 @@ type glass-easelCSSRule = {
|
|
|
427
515
|
|
|
428
516
|
如果节点没有布局信息,返回全 0 值。
|
|
429
517
|
|
|
518
|
+
**这只是一个建议性质的接口。** glass-easel 并不会自行调用这个接口,但其他相关模块很可能调用。
|
|
519
|
+
|
|
430
520
|
### `Element#createIntersectionObserver(...)`
|
|
431
521
|
|
|
432
522
|
创建一个 IntersectionObserver 用于监听相交状态变化。
|
|
433
523
|
|
|
434
524
|
监听器必然在开始监听时触发一次,用于返回初始的相交状态信息。
|
|
435
525
|
|
|
526
|
+
**这只是一个建议性质的接口。** glass-easel 并不会自行调用这个接口,但其他相关模块很可能调用。
|
|
527
|
+
|
|
436
528
|
### `async Element#getScrollPosition(): { scrollLeft: number, scrollTop: number, scrollWidth: number, scrollHeight: number }`
|
|
437
529
|
|
|
438
530
|
获得节点的内部滚动位置。
|
|
@@ -447,28 +539,19 @@ type glass-easelCSSRule = {
|
|
|
447
539
|
|
|
448
540
|
**这只是一个建议性质的接口。** glass-easel 并不会自行调用这个接口,但其他相关模块很可能调用。
|
|
449
541
|
|
|
450
|
-
### `Element#setEventDefaultPrevented(type: string, enabled: boolean)`
|
|
451
|
-
|
|
452
|
-
将一个节点上的某个事件响应设置(或取消设置)为禁止默认行为的。
|
|
453
|
-
|
|
454
|
-
节点上被绑定某个事件的监听器时,无论 `enabled` 值如何,这个调用必然被触发。因此可用于判断该节点是否曾绑定有该事件的监听器。
|
|
455
|
-
|
|
456
|
-
|
|
457
542
|
## ShadowRootContext
|
|
458
543
|
|
|
459
544
|
代表一个 shadow tree 环境。
|
|
460
545
|
|
|
461
546
|
**这个对象仅 Shadow Mode 有效。**
|
|
462
547
|
|
|
463
|
-
### `ShadowRootContext#
|
|
464
|
-
|
|
465
|
-
获得根节点。
|
|
548
|
+
### `ShadowRootContext#createElement(logicalName: string, stylingName: string): Element`
|
|
466
549
|
|
|
467
|
-
|
|
550
|
+
创建一个普通节点。
|
|
468
551
|
|
|
469
|
-
|
|
552
|
+
`logicalName` 为节点自身定义的名字。
|
|
470
553
|
|
|
471
|
-
|
|
554
|
+
`stylingName` 为被使用时设置的别名。
|
|
472
555
|
|
|
473
556
|
**仅 Shadow Mode 有效。**
|
|
474
557
|
|
|
@@ -478,19 +561,25 @@ type glass-easelCSSRule = {
|
|
|
478
561
|
|
|
479
562
|
**仅 Shadow Mode 有效。**
|
|
480
563
|
|
|
481
|
-
### `ShadowRootContext#createComponent(tagName: string,
|
|
564
|
+
### `ShadowRootContext#createComponent(tagName: string, external: boolean, virtualHost: boolean, styleScope: number, extraStyleScope: number | null, externalClasses: string[] | undefined): Element`
|
|
482
565
|
|
|
483
|
-
|
|
566
|
+
创建一个组件节点。
|
|
484
567
|
|
|
485
|
-
|
|
568
|
+
`tagName` 表示组件的名称 (对应 stylingName)。
|
|
569
|
+
|
|
570
|
+
`external` 表示组件是否是一个外部组件节点。外部组件是一个已经预建好的后端节点树,与其他部分直接拼接在一起。
|
|
571
|
+
|
|
572
|
+
`virtualHost` 表示组件是否是一个虚拟组件。虚拟组件是一个最外层是虚拟节点的组件。
|
|
573
|
+
|
|
574
|
+
`styleScope` 表示组件的 scope 标识符。
|
|
486
575
|
|
|
487
|
-
|
|
576
|
+
`extraStyleScope` 表示组件的额外 scope 标识符。
|
|
488
577
|
|
|
489
|
-
|
|
578
|
+
`externalClasses` 表示节点的 external class 列表。
|
|
490
579
|
|
|
491
580
|
**仅 Shadow Mode 有效。**
|
|
492
581
|
|
|
493
|
-
### `ShadowRootContext#createVirtualNode(): Element`
|
|
582
|
+
### `ShadowRootContext#createVirtualNode(virtualName: string): Element`
|
|
494
583
|
|
|
495
584
|
创建一个虚节点。
|
|
496
585
|
|
|
@@ -501,11 +590,12 @@ type glass-easelCSSRule = {
|
|
|
501
590
|
表示以 Shadow Mode 还是 Composed Mode 运行。
|
|
502
591
|
|
|
503
592
|
* `ContextMode.Composed = 1` 运行于 Composed Mode ;
|
|
504
|
-
* `
|
|
593
|
+
* `ContextMode.Shadow = 2` 运行于 Shadow Mode 。
|
|
505
594
|
|
|
506
|
-
## enum
|
|
595
|
+
## enum MutLevel
|
|
507
596
|
|
|
508
|
-
|
|
597
|
+
表示事件响应设置。
|
|
509
598
|
|
|
510
|
-
* `
|
|
511
|
-
* `
|
|
599
|
+
* `MutLevel.None = 0` 普通响应;
|
|
600
|
+
* `MutLevel.Mut = 1` 互斥响应,一轮冒泡只执行第一个互斥响应;
|
|
601
|
+
* `MutLevel.Final = 2` 响应后终止冒泡且禁用默认操作;
|
package/jest.unit.config.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
preset: 'ts-jest/presets/js-with-babel',
|
|
3
|
-
|
|
4
|
-
'ts
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
transform: {
|
|
4
|
+
'^.+\\.ts$': [
|
|
5
|
+
'ts-jest',
|
|
6
|
+
{
|
|
7
|
+
tsconfig: 'tsconfig.json',
|
|
8
|
+
},
|
|
9
|
+
],
|
|
7
10
|
},
|
|
8
11
|
roots: ['tests'],
|
|
9
12
|
testMatch: ['**/?(*.)+(spec|test).[jt]s?(x)', '!**/types/**'],
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "glass-easel",
|
|
3
3
|
"description": "The core module of the glass-easel project",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/wechat-miniprogram/glass-easel.git"
|
|
@@ -13,16 +13,18 @@
|
|
|
13
13
|
"url": "https://github.com/wechat-miniprogram/glass-easel/issues"
|
|
14
14
|
},
|
|
15
15
|
"homepage": "https://github.com/wechat-miniprogram/glass-easel",
|
|
16
|
-
"main": "dist/
|
|
16
|
+
"main": "dist/glass_easel.all.js",
|
|
17
|
+
"module": "dist/glass_easel.all.es.js",
|
|
18
|
+
"types": "dist/glass_easel.d.ts",
|
|
17
19
|
"scripts": {
|
|
18
20
|
"doc": "typedoc src/index.ts --excludePrivate --excludeProtected --excludeInternal",
|
|
19
|
-
"build": "
|
|
20
|
-
"dev": "
|
|
21
|
+
"build": "rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript",
|
|
22
|
+
"dev": "GLASS_EASEL_ARGS=--dev npm run build",
|
|
21
23
|
"lint": "eslint --ext .js,.ts src",
|
|
22
24
|
"test": "jest -c jest.config.js",
|
|
23
25
|
"coverage": "jest -c jest.config.js --collect-coverage"
|
|
24
26
|
},
|
|
25
27
|
"devDependencies": {
|
|
26
|
-
"glass-easel-template-compiler": "0.
|
|
28
|
+
"glass-easel-template-compiler": "0.3.0"
|
|
27
29
|
}
|
|
28
30
|
}
|
package/rollup.config.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
2
|
+
import nodeResolve from '@rollup/plugin-node-resolve'
|
|
3
|
+
import replace from '@rollup/plugin-replace'
|
|
4
|
+
import terser from '@rollup/plugin-terser'
|
|
5
|
+
import typescript from '@rollup/plugin-typescript'
|
|
6
|
+
import type { ModuleFormat, RollupOptions } from 'rollup'
|
|
7
|
+
import dts from 'rollup-plugin-dts'
|
|
8
|
+
|
|
9
|
+
const jobs: string[] = []
|
|
10
|
+
let minimize = true
|
|
11
|
+
let sourcemap = true
|
|
12
|
+
let dev = false
|
|
13
|
+
const args = (process.env as { GLASS_EASEL_ARGS?: string }).GLASS_EASEL_ARGS || ''
|
|
14
|
+
args.split(' ').forEach((arg) => {
|
|
15
|
+
if (!arg) return
|
|
16
|
+
if (arg[0] === '-') {
|
|
17
|
+
if (arg === '--no-minimize') minimize = false
|
|
18
|
+
else if (arg === '--dev') {
|
|
19
|
+
dev = true
|
|
20
|
+
minimize = false
|
|
21
|
+
sourcemap = false
|
|
22
|
+
}
|
|
23
|
+
} else {
|
|
24
|
+
jobs.push(arg)
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
const dtsCompilation: RollupOptions = {
|
|
29
|
+
input: './src/index.ts',
|
|
30
|
+
output: { file: `dist/glass_easel.d.ts`, format: 'es', name: 'glassEasel' },
|
|
31
|
+
plugins: [
|
|
32
|
+
nodeResolve({
|
|
33
|
+
extensions: ['.ts', 'js'],
|
|
34
|
+
}),
|
|
35
|
+
dts(),
|
|
36
|
+
],
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const genConfig = (
|
|
40
|
+
type: 'dynamic' | 'shadow' | 'composed' | 'domlike',
|
|
41
|
+
ext: string,
|
|
42
|
+
format: ModuleFormat,
|
|
43
|
+
): RollupOptions => ({
|
|
44
|
+
input: './src/index.ts',
|
|
45
|
+
output: {
|
|
46
|
+
file: `dist/glass_easel.${ext ? `${ext}.` : ''}js`,
|
|
47
|
+
sourcemap,
|
|
48
|
+
format,
|
|
49
|
+
name: 'glassEasel',
|
|
50
|
+
},
|
|
51
|
+
plugins: [
|
|
52
|
+
replace({
|
|
53
|
+
values: {
|
|
54
|
+
'ENV.DEV': JSON.stringify(dev),
|
|
55
|
+
'BM.DYNAMIC': JSON.stringify(type === 'dynamic'),
|
|
56
|
+
'BM.SHADOW': JSON.stringify(type === 'shadow'),
|
|
57
|
+
'BM.COMPOSED': JSON.stringify(type === 'composed'),
|
|
58
|
+
'BM.DOMLIKE': JSON.stringify(type === 'domlike'),
|
|
59
|
+
},
|
|
60
|
+
preventAssignment: true,
|
|
61
|
+
}),
|
|
62
|
+
nodeResolve({
|
|
63
|
+
extensions: ['.ts', 'js'],
|
|
64
|
+
}),
|
|
65
|
+
typescript({
|
|
66
|
+
sourceMap: sourcemap,
|
|
67
|
+
}),
|
|
68
|
+
minimize
|
|
69
|
+
? terser({
|
|
70
|
+
sourceMap: sourcemap,
|
|
71
|
+
})
|
|
72
|
+
: null,
|
|
73
|
+
],
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const config: RollupOptions[] = [dtsCompilation]
|
|
77
|
+
|
|
78
|
+
if (jobs.length) {
|
|
79
|
+
jobs.forEach((name) => {
|
|
80
|
+
const map = {
|
|
81
|
+
all: () => genConfig('dynamic', 'all', 'cjs'),
|
|
82
|
+
'all-es': () => genConfig('dynamic', 'all.es', 'es'),
|
|
83
|
+
'all-global': () => genConfig('dynamic', 'all.global', 'iife'),
|
|
84
|
+
shadow: () => genConfig('shadow', 'shadow', 'cjs'),
|
|
85
|
+
'shadow-es': () => genConfig('shadow', 'shadow.es', 'es'),
|
|
86
|
+
'shadow-global': () => genConfig('shadow', 'shadow.global', 'iife'),
|
|
87
|
+
composed: () => genConfig('composed', 'composed', 'cjs'),
|
|
88
|
+
'composed-es': () => genConfig('composed', 'composed.es', 'es'),
|
|
89
|
+
'composed-global': () => genConfig('composed', 'composed.global', 'iife'),
|
|
90
|
+
domlike: () => genConfig('domlike', 'domlike', 'cjs'),
|
|
91
|
+
'domlike-es': () => genConfig('domlike', 'domlike.es', 'es'),
|
|
92
|
+
'domlike-global': () => genConfig('domlike', 'domlike.global', 'iife'),
|
|
93
|
+
} as Record<string, () => RollupOptions>
|
|
94
|
+
if (!map[name]) throw new Error(`Unknown job: ${name}`)
|
|
95
|
+
config.push(map[name]!())
|
|
96
|
+
})
|
|
97
|
+
} else {
|
|
98
|
+
config.push(genConfig('dynamic', 'all', 'cjs'), genConfig('dynamic', 'all.es', 'es'))
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default config
|