glass-easel 0.2.0 → 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
package/src/tmpl/index.ts
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
/* eslint-disable class-methods-use-this */
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
GeneralComponent,
|
|
12
|
-
} from '..'
|
|
13
|
-
import { DataChange } from '../data_proxy'
|
|
3
|
+
import { type GeneralBehavior } from '../behavior'
|
|
4
|
+
import { type GeneralComponent } from '../component'
|
|
5
|
+
import { type DataChange, type DataValue } from '../data_proxy'
|
|
6
|
+
import { type ShadowedEvent } from '../event'
|
|
7
|
+
import { type ExternalShadowRoot } from '../external_shadow_tree'
|
|
8
|
+
import { type NormalizedComponentOptions } from '../global_options'
|
|
9
|
+
import { type ShadowRoot } from '../shadow_root'
|
|
10
|
+
import { type Template, type TemplateEngine, type TemplateInstance } from '../template_engine'
|
|
14
11
|
import { GlassEaselTemplateDOM } from './native_rendering'
|
|
15
12
|
import {
|
|
16
13
|
ProcGenWrapper,
|
|
17
|
-
|
|
18
|
-
ProcGen,
|
|
19
|
-
|
|
20
|
-
UpdatePathTreeNode,
|
|
14
|
+
type BindingMapGen,
|
|
15
|
+
type ProcGen,
|
|
16
|
+
type ProcGenEnv,
|
|
17
|
+
type UpdatePathTreeNode,
|
|
21
18
|
} from './proc_gen_wrapper'
|
|
22
19
|
|
|
23
20
|
const DEFAULT_PROC_GEN: ProcGen = () => ({
|
|
@@ -36,7 +33,7 @@ export type ComponentTemplate = {
|
|
|
36
33
|
groupList?: ProcGenGroupList
|
|
37
34
|
content: (name: string) => ProcGen
|
|
38
35
|
updateMode?: string
|
|
39
|
-
|
|
36
|
+
fallbackListenerOnNativeNode?: boolean
|
|
40
37
|
eventObjectFilter?: (x: ShadowedEvent<unknown>) => ShadowedEvent<unknown>
|
|
41
38
|
procGenWrapperType?: typeof ProcGenWrapper
|
|
42
39
|
}
|
|
@@ -47,11 +44,8 @@ const enum BindingMapUpdateEnabled {
|
|
|
47
44
|
Forced,
|
|
48
45
|
}
|
|
49
46
|
|
|
50
|
-
export class GlassEaselTemplateEngine implements
|
|
51
|
-
create(
|
|
52
|
-
behavior: GeneralBehavior,
|
|
53
|
-
componentOptions: NormalizedComponentOptions,
|
|
54
|
-
): templateEngine.Template {
|
|
47
|
+
export class GlassEaselTemplateEngine implements TemplateEngine {
|
|
48
|
+
create(behavior: GeneralBehavior, componentOptions: NormalizedComponentOptions): Template {
|
|
55
49
|
if (componentOptions.externalComponent) {
|
|
56
50
|
return new GlassEaselTemplateDOM(behavior)
|
|
57
51
|
}
|
|
@@ -59,10 +53,10 @@ export class GlassEaselTemplateEngine implements templateEngine.TemplateEngine {
|
|
|
59
53
|
}
|
|
60
54
|
}
|
|
61
55
|
|
|
62
|
-
class GlassEaselTemplate implements
|
|
56
|
+
class GlassEaselTemplate implements Template {
|
|
63
57
|
genObjectGroupEnv!: ProcGenEnv
|
|
64
58
|
updateMode!: string
|
|
65
|
-
|
|
59
|
+
fallbackListenerOnNativeNode!: boolean
|
|
66
60
|
eventObjectFilter?: (x: ShadowedEvent<unknown>) => ShadowedEvent<unknown>
|
|
67
61
|
|
|
68
62
|
constructor(behavior: GeneralBehavior) {
|
|
@@ -89,25 +83,28 @@ class GlassEaselTemplate implements templateEngine.Template {
|
|
|
89
83
|
group: c.content,
|
|
90
84
|
}
|
|
91
85
|
this.updateMode = c.updateMode || ''
|
|
92
|
-
this.
|
|
86
|
+
this.fallbackListenerOnNativeNode = c.fallbackListenerOnNativeNode || false
|
|
93
87
|
this.eventObjectFilter = c.eventObjectFilter
|
|
94
88
|
}
|
|
95
89
|
|
|
96
|
-
createInstance(
|
|
97
|
-
|
|
90
|
+
createInstance(
|
|
91
|
+
comp: GeneralComponent,
|
|
92
|
+
createShadowRoot: (component: GeneralComponent) => ShadowRoot,
|
|
93
|
+
): TemplateInstance {
|
|
94
|
+
return new GlassEaselTemplateInstance(this, comp, createShadowRoot(comp))
|
|
98
95
|
}
|
|
99
96
|
}
|
|
100
97
|
|
|
101
|
-
class GlassEaselTemplateInstance implements
|
|
98
|
+
class GlassEaselTemplateInstance implements TemplateInstance {
|
|
102
99
|
comp: GeneralComponent
|
|
103
100
|
shadowRoot: ShadowRoot
|
|
104
101
|
procGenWrapper!: ProcGenWrapper
|
|
105
102
|
forceBindingMapUpdate!: BindingMapUpdateEnabled
|
|
106
103
|
bindingMapGen: { [field: string]: BindingMapGen[] } | undefined
|
|
107
104
|
|
|
108
|
-
constructor(template: GlassEaselTemplate, comp: GeneralComponent) {
|
|
105
|
+
constructor(template: GlassEaselTemplate, comp: GeneralComponent, shadowRoot: ShadowRoot) {
|
|
109
106
|
this.comp = comp
|
|
110
|
-
this.shadowRoot =
|
|
107
|
+
this.shadowRoot = shadowRoot
|
|
111
108
|
this.shadowRoot.destroyBackendElementOnDetach()
|
|
112
109
|
this._$applyTemplate(template)
|
|
113
110
|
}
|
|
@@ -130,7 +127,7 @@ class GlassEaselTemplateInstance implements templateEngine.TemplateInstance {
|
|
|
130
127
|
this.procGenWrapper = new ProcGenWrapper(
|
|
131
128
|
this.shadowRoot,
|
|
132
129
|
procGen,
|
|
133
|
-
template.
|
|
130
|
+
template.fallbackListenerOnNativeNode,
|
|
134
131
|
template.eventObjectFilter,
|
|
135
132
|
)
|
|
136
133
|
this.bindingMapGen = undefined
|
|
@@ -215,3 +212,14 @@ class GlassEaselTemplateInstance implements templateEngine.TemplateInstance {
|
|
|
215
212
|
return this.procGenWrapper.bindingMapUpdate(path[0] as string, data, bindingMapGen)
|
|
216
213
|
}
|
|
217
214
|
}
|
|
215
|
+
|
|
216
|
+
let defaultTemplateEngine: TemplateEngine | null = null
|
|
217
|
+
|
|
218
|
+
export const getDefaultTemplateEngine = (): TemplateEngine => {
|
|
219
|
+
if (defaultTemplateEngine) {
|
|
220
|
+
return defaultTemplateEngine
|
|
221
|
+
}
|
|
222
|
+
const tmpl = new GlassEaselTemplateEngine()
|
|
223
|
+
defaultTemplateEngine = tmpl
|
|
224
|
+
return tmpl
|
|
225
|
+
}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
/* global document: false */
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
GeneralComponent,
|
|
14
|
-
} from '..'
|
|
15
|
-
import { DataChange } from '../data_proxy'
|
|
16
|
-
import { ProcGenEnv, ProcGen, BindingMapGen } from './proc_gen_wrapper'
|
|
3
|
+
import { BackendMode, type GeneralBackendElement } from '../backend'
|
|
4
|
+
import { type GeneralBehavior } from '../behavior'
|
|
5
|
+
import { type GeneralComponent } from '../component'
|
|
6
|
+
import { type DataChange, type DataValue } from '../data_proxy'
|
|
7
|
+
import { type Event, type ShadowedEvent } from '../event'
|
|
8
|
+
import { type ExternalShadowRoot } from '../external_shadow_tree'
|
|
9
|
+
import { type GeneralFuncType } from '../func_arr'
|
|
10
|
+
import { type Template, type TemplateInstance } from '../template_engine'
|
|
11
|
+
import { type ComponentTemplate, type ProcGenGroupList } from './index'
|
|
12
|
+
import { type BindingMapGen, type ProcGen, type ProcGenEnv } from './proc_gen_wrapper'
|
|
17
13
|
import { ProcGenWrapperDom } from './proc_gen_wrapper_dom'
|
|
18
|
-
import { ComponentTemplate, ProcGenGroupList } from './index'
|
|
19
14
|
|
|
20
15
|
type ElementWithEvent = Element & {
|
|
21
16
|
_$wxTmplEv: { [ev: string]: (event: ShadowedEvent<unknown>) => unknown }
|
|
@@ -30,7 +25,7 @@ const DEFAULT_PROC_GEN_DOM: ProcGen = () => ({
|
|
|
30
25
|
})
|
|
31
26
|
export const DEFAULT_PROC_GEN_GROUP_DOM: (name: string) => ProcGen = () => DEFAULT_PROC_GEN_DOM
|
|
32
27
|
|
|
33
|
-
export class GlassEaselTemplateDOM implements
|
|
28
|
+
export class GlassEaselTemplateDOM implements Template {
|
|
34
29
|
data: DataValue
|
|
35
30
|
innerData: DataValue
|
|
36
31
|
genObjectGroupEnv: ProcGenEnv
|
|
@@ -55,14 +50,12 @@ export class GlassEaselTemplateDOM implements templateEngine.Template {
|
|
|
55
50
|
this.methods = behavior._$methodMap
|
|
56
51
|
}
|
|
57
52
|
|
|
58
|
-
createInstance(comp: GeneralComponent):
|
|
53
|
+
createInstance(comp: GeneralComponent): TemplateInstance {
|
|
59
54
|
return new GlassEaselTemplateDOMInstance(this, comp)
|
|
60
55
|
}
|
|
61
56
|
}
|
|
62
57
|
|
|
63
|
-
export class GlassEaselTemplateDOMInstance
|
|
64
|
-
implements templateEngine.TemplateInstance, ExternalShadowRoot
|
|
65
|
-
{
|
|
58
|
+
export class GlassEaselTemplateDOMInstance implements TemplateInstance, ExternalShadowRoot {
|
|
66
59
|
template: GlassEaselTemplateDOM
|
|
67
60
|
comp: GeneralComponent
|
|
68
61
|
shadowRoot: ExternalShadowRoot
|
|
@@ -144,7 +137,7 @@ export class GlassEaselTemplateDOMInstance
|
|
|
144
137
|
const target = elem as unknown as ElementWithEvent
|
|
145
138
|
let cur: Element = target
|
|
146
139
|
const root = this.shadowRootElement
|
|
147
|
-
const evName = event.
|
|
140
|
+
const evName = event.getEventName()
|
|
148
141
|
const bubbles = event.bubbles
|
|
149
142
|
for (;;) {
|
|
150
143
|
const shadowedEvent = event.wrapShadowedEvent(target as any, null, cur as any)
|