@ibyar/core 0.5.6 → 0.5.62
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/annotation/decorators.d.ts +97 -0
- package/binding/binding.expressions.d.ts +5 -0
- package/binding/binding.expressions.js +7 -0
- package/binding/binding.expressions.js.map +1 -1
- package/component/component.js +1 -0
- package/component/component.js.map +1 -1
- package/component/custom-element.d.ts +42 -0
- package/context/stack.js +4 -0
- package/context/stack.js.map +1 -1
- package/directive/directive.d.ts +9 -0
- package/directive/directive.js +9 -0
- package/directive/directive.js.map +1 -1
- package/directive/parser.d.ts +4 -0
- package/directive/parser.js +19 -0
- package/directive/parser.js.map +1 -1
- package/html/expression.d.ts +5 -0
- package/html/expression.js +12 -0
- package/html/expression.js.map +1 -1
- package/linker/change-detector-ref.d.ts +14 -0
- package/linker/change-detector-ref.js +3 -0
- package/linker/change-detector-ref.js.map +1 -1
- package/linker/template-ref.d.ts +12 -0
- package/linker/template-ref.js +2 -0
- package/linker/template-ref.js.map +1 -1
- package/linker/view-container-ref.d.ts +78 -0
- package/linker/view-container-ref.js +1 -0
- package/linker/view-container-ref.js.map +1 -1
- package/linker/view-ref.d.ts +39 -0
- package/package.json +4 -4
- package/pipe/pipe.d.ts +7 -0
- package/providers/injector.js +1 -0
- package/providers/injector.js.map +1 -1
- package/render/host-listener.handler.d.ts +17 -0
- package/render/host-listener.handler.js +17 -0
- package/render/host-listener.handler.js.map +1 -1
- package/render/render-handler.d.ts +6 -0
- package/utils/typeof.d.ts +3 -0
- package/utils/utils.js +1 -0
- package/utils/utils.js.map +1 -1
- package/view/base-view.js +12 -1
- package/view/base-view.js.map +1 -1
- package/view/form-view.js +21 -0
- package/view/form-view.js.map +1 -1
- package/view/mutation.js +1 -0
- package/view/mutation.js.map +1 -1
- package/view/render.js +28 -3
- package/view/render.js.map +1 -1
- package/view/view.d.ts +5 -0
- package/view/view.js +6 -0
- package/view/view.js.map +1 -1
package/view/base-view.js
CHANGED
|
@@ -23,7 +23,7 @@ export function baseFactoryView(htmlElementType) {
|
|
|
23
23
|
delegatesFocus: componentRef.shadowDomDelegatesFocus
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
const model = new modelClass();
|
|
26
|
+
const model = new modelClass( /* resolve dependency injection*/);
|
|
27
27
|
this._model = model;
|
|
28
28
|
const modelScope = ElementModelReactiveScope.for(model);
|
|
29
29
|
this._proxyModel = modelScope.getContextProxy();
|
|
@@ -44,6 +44,7 @@ export function baseFactoryView(htmlElementType) {
|
|
|
44
44
|
elementScope.emit(input.viewAttribute, newValue, oldValue);
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
|
+
// if property of the model has view decorator
|
|
47
48
|
if (this._componentRef.view) {
|
|
48
49
|
Reflect.set(this._model, this._componentRef.view, this);
|
|
49
50
|
}
|
|
@@ -175,8 +176,11 @@ export function baseFactoryView(htmlElementType) {
|
|
|
175
176
|
if (isAfterContentChecked(this._model)) {
|
|
176
177
|
this._model.afterContentChecked.call(this._proxyModel);
|
|
177
178
|
}
|
|
179
|
+
// do once
|
|
178
180
|
if (this.childNodes.length === 0) {
|
|
181
|
+
// setup ui view
|
|
179
182
|
this._render.initView();
|
|
183
|
+
// init Host Listener events
|
|
180
184
|
this._render.initHostListener();
|
|
181
185
|
}
|
|
182
186
|
if (isAfterViewInit(this._model)) {
|
|
@@ -198,6 +202,7 @@ export function baseFactoryView(htmlElementType) {
|
|
|
198
202
|
};
|
|
199
203
|
}
|
|
200
204
|
initOuterAttribute(attr) {
|
|
205
|
+
// [window, this] scop
|
|
201
206
|
let elementAttr = attr.name;
|
|
202
207
|
let modelProperty = attr.value;
|
|
203
208
|
if (elementAttr.startsWith('[')) {
|
|
@@ -207,7 +212,9 @@ export function baseFactoryView(htmlElementType) {
|
|
|
207
212
|
}
|
|
208
213
|
}
|
|
209
214
|
else if (elementAttr.startsWith('(')) {
|
|
215
|
+
// (elementAttr)="modelProperty()"
|
|
210
216
|
elementAttr = elementAttr.substring(1, elementAttr.length - 1);
|
|
217
|
+
// this.handleEvent(element, elementAttr, viewProperty);
|
|
211
218
|
modelProperty = modelProperty.endsWith('()') ?
|
|
212
219
|
modelProperty.substring(0, modelProperty.length - 2) : modelProperty;
|
|
213
220
|
let callback = Reflect.get(window, modelProperty);
|
|
@@ -218,6 +225,7 @@ export function baseFactoryView(htmlElementType) {
|
|
|
218
225
|
else if (elementAttr.startsWith('on')) {
|
|
219
226
|
const modelEvent = this.getEventEmitter(elementAttr.substring(2));
|
|
220
227
|
if (modelEvent) {
|
|
228
|
+
// modelEvent.subscribe(listener);
|
|
221
229
|
modelProperty = modelProperty.endsWith('()') ?
|
|
222
230
|
modelProperty.substring(0, modelProperty.length - 2) : modelProperty;
|
|
223
231
|
let listener = Reflect.get(window, modelProperty);
|
|
@@ -231,16 +239,19 @@ export function baseFactoryView(htmlElementType) {
|
|
|
231
239
|
}
|
|
232
240
|
}
|
|
233
241
|
adoptedCallback() {
|
|
242
|
+
// restart the process
|
|
234
243
|
this.innerHTML = '';
|
|
235
244
|
this.connectedCallback();
|
|
236
245
|
}
|
|
237
246
|
disconnectedCallback() {
|
|
247
|
+
// notify first, then call model.onDestroy func
|
|
238
248
|
if (isOnDestroy(this._model)) {
|
|
239
249
|
this._model.onDestroy.call(this._proxyModel);
|
|
240
250
|
}
|
|
241
251
|
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
242
252
|
this.subscriptions.splice(0, this.subscriptions.length);
|
|
243
253
|
}
|
|
254
|
+
// events api
|
|
244
255
|
addEventListener(eventName, listener, options) {
|
|
245
256
|
if ('on' + eventName in this) {
|
|
246
257
|
super.addEventListener(eventName, (event) => {
|
package/view/base-view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-view.js","sourceRoot":"","sources":["../../../src/core/view/base-view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { ReactiveScope, ScopeContext, ScopeSubscription } from '@ibyar/expressions';\nimport {\n\tisAfterContentChecked, isAfterContentInit, isAfterViewChecked,\n\tisAfterViewInit, isDoCheck, isOnChanges, isOnDestroy, isOnInit\n} from '../component/lifecycle.js';\nimport { ComponentRef, PropertyRef } from '../component/component.js';\nimport { BaseComponent, CustomElement, HTMLComponent, ModelType } from '../component/custom-element.js';\nimport { EventEmitter } from '../component/events.js';\nimport { ComponentRender } from './render.js';\nimport { ElementModelReactiveScope } from '../component/provider.js';\n\nconst FACTORY_CACHE = new WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>>();\n\nexport function baseFactoryView<T extends object>(htmlElementType: TypeOf<HTMLElement>): TypeOf<HTMLComponent<T>> {\n\n\tif (FACTORY_CACHE.has(htmlElementType)) {\n\t\treturn FACTORY_CACHE.get(htmlElementType) as TypeOf<HTMLComponent<T>>;\n\t}\n\tclass CustomView extends htmlElementType implements BaseComponent<T>, CustomElement {\n\t\t_model: ModelType<T>;\n\t\t_proxyModel: T;\n\t\t_parentComponent: HTMLComponent<object>;\n\t\t_render: ComponentRender<T>;\n\t\t_shadowRoot: ShadowRoot;\n\n\t\t_componentRef: ComponentRef<T>;\n\n\t\t_modelScope: ReactiveScope<T>;\n\t\t_viewScope: ReactiveScope<{ 'this': BaseComponent<T> }>;\n\n\t\tprivate subscriptions: ScopeSubscription<ScopeContext>[] = [];\n\n\t\tconstructor(componentRef: ComponentRef<T>, modelClass: TypeOf<T>) {\n\t\t\tsuper();\n\t\t\tthis._componentRef = componentRef;\n\t\t\tif (componentRef.isShadowDom) {\n\t\t\t\tthis._shadowRoot = this.attachShadow({\n\t\t\t\t\tmode: componentRef.shadowDomMode,\n\t\t\t\t\tdelegatesFocus: componentRef.shadowDomDelegatesFocus\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst model = new modelClass(/* resolve dependency injection*/);\n\t\t\tthis._model = model;\n\n\t\t\tconst modelScope = ElementModelReactiveScope.for(model);\n\t\t\tthis._proxyModel = modelScope.getContextProxy();\n\t\t\tthis._modelScope = modelScope;\n\n\t\t\tthis._viewScope = ReactiveScope.for<{ 'this': BaseComponent<T> }>({ 'this': this });\n\t\t\tconst elementScope = this._viewScope.getScopeOrCreat('this');\n\t\t\tcomponentRef.inputs.forEach(input => {\n\t\t\t\telementScope.subscribe(input.viewAttribute as any, (newValue, oldValue) => {\n\t\t\t\t\tif (newValue === oldValue) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis._modelScope.set(input.modelProperty as any, newValue);\n\t\t\t\t});\n\t\t\t\tthis._modelScope.subscribe(input.modelProperty as any, (newValue, oldValue) => {\n\t\t\t\t\tif (newValue === oldValue) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telementScope.emit(input.viewAttribute as any, newValue, oldValue);\n\t\t\t\t});\n\t\t\t});\n\n\n\t\t\t// if property of the model has view decorator\n\t\t\tif (this._componentRef.view) {\n\t\t\t\tReflect.set(this._model, this._componentRef.view, this);\n\t\t\t}\n\t\t\tthis._render = new ComponentRender(this, this.subscriptions);\n\t\t}\n\n\t\tdoBlockCallback = (): void => {\n\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\tthis._model.doCheck.call(this._proxyModel);\n\t\t\t}\n\t\t};\n\n\t\tgetComponentRef(): ComponentRef<T> {\n\t\t\treturn this._componentRef;\n\t\t}\n\n\t\tsetParentComponent(parent: HTMLComponent<any>): void {\n\t\t\tthis._parentComponent = parent;\n\t\t}\n\n\t\tgetParentComponent(): HTMLComponent<any> {\n\t\t\treturn this._parentComponent;\n\t\t}\n\n\t\thasParentComponent(): boolean {\n\t\t\treturn this._parentComponent ? true : false;\n\t\t}\n\n\t\thasInputStartWith(viewProp: string): boolean {\n\t\t\tlet dotIndex = viewProp.indexOf('.');\n\t\t\tif (dotIndex > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, dotIndex);\n\t\t\t}\n\t\t\treturn this.hasInput(viewProp);\n\t\t}\n\n\t\tgetInputStartWith(viewProp: string): PropertyRef | undefined {\n\t\t\tlet index = viewProp.indexOf('.');\n\t\t\tif (index > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, index);\n\t\t\t}\n\t\t\tindex = viewProp.indexOf('[');\n\t\t\tif (index > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, index);\n\t\t\t}\n\t\t\treturn this.getInput(viewProp);\n\t\t}\n\n\t\thasInput(viewProp: string): boolean {\n\t\t\treturn this._componentRef.inputs.some(input => input.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetInput(viewProp: string): PropertyRef | undefined {\n\t\t\treturn this._componentRef.inputs.find(input => input.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetInputValue(viewProp: string): any {\n\t\t\tconst inputRef = this.getInput(viewProp);\n\t\t\tif (inputRef) {\n\t\t\t\treturn this._model[inputRef.modelProperty];\n\t\t\t}\n\t\t}\n\n\t\tsetInputValue(viewProp: PropertyKey, value: any): void {\n\t\t\tconst inputRef = this.getInput(viewProp as string);\n\t\t\tif (inputRef) {\n\t\t\t\tthis._modelScope.set(inputRef.modelProperty as never, value);\n\t\t\t}\n\t\t}\n\n\t\thasOutput(viewProp: string): boolean {\n\t\t\treturn this._componentRef.outputs.some(output => output.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetOutput(viewProp: string): PropertyRef | undefined {\n\t\t\treturn this._componentRef.outputs.find(output => output.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetEventEmitter<V>(viewProp: string): EventEmitter<V> | undefined {\n\t\t\tconst outputRef = this.getOutput(viewProp);\n\t\t\tif (outputRef) {\n\t\t\t\treturn this._model[outputRef.modelProperty] as EventEmitter<V>;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\thasProp(propName: string): boolean {\n\t\t\treturn Reflect.has(this._model, propName);\n\t\t}\n\n\t\tprivate setAttributeHelper(attrViewName: string, value: any): void {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\tthis.removeAttribute(attrViewName);\n\t\t\t}\n\t\t\telse if (typeof value === 'boolean') {\n\t\t\t\tif (value) {\n\t\t\t\t\tsuper.setAttribute(attrViewName, '');\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeAttribute(attrViewName);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsuper.setAttribute(attrViewName, value);\n\t\t\t}\n\t\t}\n\n\t\tsetAttribute(attrViewName: string, value: any): void {\n\t\t\tthis.setInputValue(attrViewName, value);\n\t\t\tthis.setAttributeHelper(attrViewName, value);\n\t\t}\n\n\t\tgetAttribute(attrViewName: string): string | null {\n\t\t\treturn this.getInputValue(attrViewName) ?? super.getAttribute(attrViewName);\n\t\t}\n\n\t\tattributeChangedCallback(name: string, oldValue: string, newValue: string) {\n\t\t\tif (newValue === oldValue) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isOnChanges(this._model)) {\n\t\t\t\tthis._model.onChanges.call(this._proxyModel);\n\t\t\t}\n\t\t\tthis.doBlockCallback();\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tif (this.subscriptions.length) {\n\t\t\t\tthis.subscriptions.forEach(sub => sub.unsubscribe());\n\t\t\t}\n\t\t\tthis.subscriptions.splice(0, this.subscriptions.length);\n\t\t\tthis._componentRef.inputs.forEach(input => {\n\t\t\t\tconst inputDefaultValue = this._model[input.modelProperty];\n\t\t\t\tif (inputDefaultValue !== null && inputDefaultValue !== undefined) {\n\t\t\t\t\tthis.setAttributeHelper(input.viewAttribute, inputDefaultValue);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!this.hasParentComponent() && this.attributes.length > 0) {\n\t\t\t\tlet attrs: Attr[] = Array.prototype.slice.call(this.attributes);\n\t\t\t\tattrs.forEach(attr => this.initOuterAttribute(attr));\n\t\t\t}\n\n\t\t\tif (isOnChanges(this._model)) {\n\t\t\t\tthis._model.onChanges.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isOnInit(this._model)) {\n\t\t\t\tthis._model.onInit.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\tthis._model.doCheck.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isAfterContentInit(this._model)) {\n\t\t\t\tthis._model.afterContentInit.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isAfterContentChecked(this._model)) {\n\t\t\t\tthis._model.afterContentChecked.call(this._proxyModel);\n\t\t\t}\n\n\t\t\t// do once\n\t\t\tif (this.childNodes.length === 0) {\n\t\t\t\t// setup ui view\n\t\t\t\tthis._render.initView();\n\n\t\t\t\t// init Host Listener events\n\t\t\t\tthis._render.initHostListener();\n\t\t\t}\n\n\t\t\tif (isAfterViewInit(this._model)) {\n\t\t\t\tthis._model.afterViewInit.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isAfterViewChecked(this._model)) {\n\t\t\t\tthis._model.afterViewChecked.call(this._proxyModel);\n\t\t\t}\n\t\t\tthis.doBlockCallback = () => {\n\t\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\t\tthis._model.doCheck.call(this._proxyModel);\n\t\t\t\t}\n\t\t\t\tif (isAfterContentChecked(this._model)) {\n\t\t\t\t\tthis._model.afterContentChecked.call(this._proxyModel);\n\t\t\t\t}\n\t\t\t\tif (isAfterViewChecked(this._model)) {\n\t\t\t\t\tthis._model.afterViewChecked.call(this._proxyModel);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\n\t\tinitOuterAttribute(attr: Attr) {\n\t\t\t// [window, this] scop\n\t\t\tlet elementAttr = attr.name;\n\t\t\tlet modelProperty = attr.value;\n\t\t\tif (elementAttr.startsWith('[')) {\n\t\t\t\telementAttr = elementAttr.substring(1, elementAttr.length - 1);\n\t\t\t\tif (Reflect.has(window, modelProperty)) {\n\t\t\t\t\tthis.setInputValue(elementAttr, Reflect.get(window, modelProperty));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (elementAttr.startsWith('(')) {\n\t\t\t\t// (elementAttr)=\"modelProperty()\"\n\t\t\t\telementAttr = elementAttr.substring(1, elementAttr.length - 1);\n\t\t\t\t// this.handleEvent(element, elementAttr, viewProperty);\n\t\t\t\tmodelProperty = modelProperty.endsWith('()') ?\n\t\t\t\t\tmodelProperty.substring(0, modelProperty.length - 2) : modelProperty;\n\t\t\t\tlet callback: Function = Reflect.get(window, modelProperty);\n\t\t\t\tthis.addEventListener(elementAttr, event => {\n\t\t\t\t\tcallback(event);\n\t\t\t\t});\n\t\t\t} else if (elementAttr.startsWith('on')) {\n\t\t\t\tconst modelEvent = this.getEventEmitter<any>(elementAttr.substring(2));\n\t\t\t\tif (modelEvent) {\n\t\t\t\t\t// modelEvent.subscribe(listener);\n\t\t\t\t\tmodelProperty = modelProperty.endsWith('()') ?\n\t\t\t\t\t\tmodelProperty.substring(0, modelProperty.length - 2) : modelProperty;\n\t\t\t\t\tlet listener: Function = Reflect.get(window, modelProperty);\n\t\t\t\t\tmodelEvent.subscribe((data: any) => {\n\t\t\t\t\t\t(listener as Function)(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setInputValue(attr.name, attr.value);\n\t\t\t}\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\t// restart the process\n\t\t\tthis.innerHTML = '';\n\t\t\tthis.connectedCallback();\n\t\t}\n\t\tdisconnectedCallback() {\n\t\t\t// notify first, then call model.onDestroy func\n\t\t\tif (isOnDestroy(this._model)) {\n\t\t\t\tthis._model.onDestroy.call(this._proxyModel);\n\t\t\t}\n\t\t\tthis.subscriptions.forEach(sub => sub.unsubscribe());\n\t\t\tthis.subscriptions.splice(0, this.subscriptions.length);\n\t\t}\n\n\t\t// events api\n\t\taddEventListener(eventName: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void {\n\t\t\tif ('on' + eventName in this) {\n\t\t\t\tsuper.addEventListener(eventName, (event: Event) => {\n\t\t\t\t\t(listener as Function)(event);\n\t\t\t\t}, options);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst modelOutput = this.getEventEmitter<any>(eventName);\n\t\t\tif (modelOutput) {\n\t\t\t\tmodelOutput.subscribe((data: any) => {\n\t\t\t\t\t(listener as Function)(data);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\ttriggerOutput(eventName: string, value?: any): void {\n\t\t\tconst modelEvent = this.getEventEmitter<any>(eventName);\n\t\t\tif (modelEvent) {\n\t\t\t\tmodelEvent.emit(value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\tFACTORY_CACHE.set(htmlElementType, CustomView);\n\treturn CustomView;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"base-view.js","sourceRoot":"","sources":["../../../src/core/view/base-view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { ReactiveScope, ScopeContext, ScopeSubscription } from '@ibyar/expressions';\nimport {\n\tisAfterContentChecked, isAfterContentInit, isAfterViewChecked,\n\tisAfterViewInit, isDoCheck, isOnChanges, isOnDestroy, isOnInit\n} from '../component/lifecycle.js';\nimport { ComponentRef, PropertyRef } from '../component/component.js';\nimport { BaseComponent, CustomElement, HTMLComponent, ModelType } from '../component/custom-element.js';\nimport { EventEmitter } from '../component/events.js';\nimport { ComponentRender } from './render.js';\nimport { ElementModelReactiveScope } from '../component/provider.js';\n\nconst FACTORY_CACHE = new WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>>();\n\nexport function baseFactoryView<T extends object>(htmlElementType: TypeOf<HTMLElement>): TypeOf<HTMLComponent<T>> {\n\n\tif (FACTORY_CACHE.has(htmlElementType)) {\n\t\treturn FACTORY_CACHE.get(htmlElementType) as TypeOf<HTMLComponent<T>>;\n\t}\n\tclass CustomView extends htmlElementType implements BaseComponent<T>, CustomElement {\n\t\t_model: ModelType<T>;\n\t\t_proxyModel: T;\n\t\t_parentComponent: HTMLComponent<object>;\n\t\t_render: ComponentRender<T>;\n\t\t_shadowRoot: ShadowRoot;\n\n\t\t_componentRef: ComponentRef<T>;\n\n\t\t_modelScope: ReactiveScope<T>;\n\t\t_viewScope: ReactiveScope<{ 'this': BaseComponent<T> }>;\n\n\t\tprivate subscriptions: ScopeSubscription<ScopeContext>[] = [];\n\n\t\tconstructor(componentRef: ComponentRef<T>, modelClass: TypeOf<T>) {\n\t\t\tsuper();\n\t\t\tthis._componentRef = componentRef;\n\t\t\tif (componentRef.isShadowDom) {\n\t\t\t\tthis._shadowRoot = this.attachShadow({\n\t\t\t\t\tmode: componentRef.shadowDomMode,\n\t\t\t\t\tdelegatesFocus: componentRef.shadowDomDelegatesFocus\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst model = new modelClass(/* resolve dependency injection*/);\n\t\t\tthis._model = model;\n\n\t\t\tconst modelScope = ElementModelReactiveScope.for(model);\n\t\t\tthis._proxyModel = modelScope.getContextProxy();\n\t\t\tthis._modelScope = modelScope;\n\n\t\t\tthis._viewScope = ReactiveScope.for<{ 'this': BaseComponent<T> }>({ 'this': this });\n\t\t\tconst elementScope = this._viewScope.getScopeOrCreat('this');\n\t\t\tcomponentRef.inputs.forEach(input => {\n\t\t\t\telementScope.subscribe(input.viewAttribute as any, (newValue, oldValue) => {\n\t\t\t\t\tif (newValue === oldValue) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis._modelScope.set(input.modelProperty as any, newValue);\n\t\t\t\t});\n\t\t\t\tthis._modelScope.subscribe(input.modelProperty as any, (newValue, oldValue) => {\n\t\t\t\t\tif (newValue === oldValue) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telementScope.emit(input.viewAttribute as any, newValue, oldValue);\n\t\t\t\t});\n\t\t\t});\n\n\n\t\t\t// if property of the model has view decorator\n\t\t\tif (this._componentRef.view) {\n\t\t\t\tReflect.set(this._model, this._componentRef.view, this);\n\t\t\t}\n\t\t\tthis._render = new ComponentRender(this, this.subscriptions);\n\t\t}\n\n\t\tdoBlockCallback = (): void => {\n\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\tthis._model.doCheck.call(this._proxyModel);\n\t\t\t}\n\t\t};\n\n\t\tgetComponentRef(): ComponentRef<T> {\n\t\t\treturn this._componentRef;\n\t\t}\n\n\t\tsetParentComponent(parent: HTMLComponent<any>): void {\n\t\t\tthis._parentComponent = parent;\n\t\t}\n\n\t\tgetParentComponent(): HTMLComponent<any> {\n\t\t\treturn this._parentComponent;\n\t\t}\n\n\t\thasParentComponent(): boolean {\n\t\t\treturn this._parentComponent ? true : false;\n\t\t}\n\n\t\thasInputStartWith(viewProp: string): boolean {\n\t\t\tlet dotIndex = viewProp.indexOf('.');\n\t\t\tif (dotIndex > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, dotIndex);\n\t\t\t}\n\t\t\treturn this.hasInput(viewProp);\n\t\t}\n\n\t\tgetInputStartWith(viewProp: string): PropertyRef | undefined {\n\t\t\tlet index = viewProp.indexOf('.');\n\t\t\tif (index > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, index);\n\t\t\t}\n\t\t\tindex = viewProp.indexOf('[');\n\t\t\tif (index > 0) {\n\t\t\t\tviewProp = viewProp.substring(0, index);\n\t\t\t}\n\t\t\treturn this.getInput(viewProp);\n\t\t}\n\n\t\thasInput(viewProp: string): boolean {\n\t\t\treturn this._componentRef.inputs.some(input => input.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetInput(viewProp: string): PropertyRef | undefined {\n\t\t\treturn this._componentRef.inputs.find(input => input.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetInputValue(viewProp: string): any {\n\t\t\tconst inputRef = this.getInput(viewProp);\n\t\t\tif (inputRef) {\n\t\t\t\treturn this._model[inputRef.modelProperty];\n\t\t\t}\n\t\t}\n\n\t\tsetInputValue(viewProp: PropertyKey, value: any): void {\n\t\t\tconst inputRef = this.getInput(viewProp as string);\n\t\t\tif (inputRef) {\n\t\t\t\tthis._modelScope.set(inputRef.modelProperty as never, value);\n\t\t\t}\n\t\t}\n\n\t\thasOutput(viewProp: string): boolean {\n\t\t\treturn this._componentRef.outputs.some(output => output.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetOutput(viewProp: string): PropertyRef | undefined {\n\t\t\treturn this._componentRef.outputs.find(output => output.viewAttribute === viewProp);\n\t\t}\n\n\t\tgetEventEmitter<V>(viewProp: string): EventEmitter<V> | undefined {\n\t\t\tconst outputRef = this.getOutput(viewProp);\n\t\t\tif (outputRef) {\n\t\t\t\treturn this._model[outputRef.modelProperty] as EventEmitter<V>;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\thasProp(propName: string): boolean {\n\t\t\treturn Reflect.has(this._model, propName);\n\t\t}\n\n\t\tprivate setAttributeHelper(attrViewName: string, value: any): void {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\tthis.removeAttribute(attrViewName);\n\t\t\t}\n\t\t\telse if (typeof value === 'boolean') {\n\t\t\t\tif (value) {\n\t\t\t\t\tsuper.setAttribute(attrViewName, '');\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeAttribute(attrViewName);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsuper.setAttribute(attrViewName, value);\n\t\t\t}\n\t\t}\n\n\t\tsetAttribute(attrViewName: string, value: any): void {\n\t\t\tthis.setInputValue(attrViewName, value);\n\t\t\tthis.setAttributeHelper(attrViewName, value);\n\t\t}\n\n\t\tgetAttribute(attrViewName: string): string | null {\n\t\t\treturn this.getInputValue(attrViewName) ?? super.getAttribute(attrViewName);\n\t\t}\n\n\t\tattributeChangedCallback(name: string, oldValue: string, newValue: string) {\n\t\t\tif (newValue === oldValue) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isOnChanges(this._model)) {\n\t\t\t\tthis._model.onChanges.call(this._proxyModel);\n\t\t\t}\n\t\t\tthis.doBlockCallback();\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tif (this.subscriptions.length) {\n\t\t\t\tthis.subscriptions.forEach(sub => sub.unsubscribe());\n\t\t\t}\n\t\t\tthis.subscriptions.splice(0, this.subscriptions.length);\n\t\t\tthis._componentRef.inputs.forEach(input => {\n\t\t\t\tconst inputDefaultValue = this._model[input.modelProperty];\n\t\t\t\tif (inputDefaultValue !== null && inputDefaultValue !== undefined) {\n\t\t\t\t\tthis.setAttributeHelper(input.viewAttribute, inputDefaultValue);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!this.hasParentComponent() && this.attributes.length > 0) {\n\t\t\t\tlet attrs: Attr[] = Array.prototype.slice.call(this.attributes);\n\t\t\t\tattrs.forEach(attr => this.initOuterAttribute(attr));\n\t\t\t}\n\n\t\t\tif (isOnChanges(this._model)) {\n\t\t\t\tthis._model.onChanges.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isOnInit(this._model)) {\n\t\t\t\tthis._model.onInit.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\tthis._model.doCheck.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isAfterContentInit(this._model)) {\n\t\t\t\tthis._model.afterContentInit.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isAfterContentChecked(this._model)) {\n\t\t\t\tthis._model.afterContentChecked.call(this._proxyModel);\n\t\t\t}\n\n\t\t\t// do once\n\t\t\tif (this.childNodes.length === 0) {\n\t\t\t\t// setup ui view\n\t\t\t\tthis._render.initView();\n\n\t\t\t\t// init Host Listener events\n\t\t\t\tthis._render.initHostListener();\n\t\t\t}\n\n\t\t\tif (isAfterViewInit(this._model)) {\n\t\t\t\tthis._model.afterViewInit.call(this._proxyModel);\n\t\t\t}\n\t\t\tif (isAfterViewChecked(this._model)) {\n\t\t\t\tthis._model.afterViewChecked.call(this._proxyModel);\n\t\t\t}\n\t\t\tthis.doBlockCallback = () => {\n\t\t\t\tif (isDoCheck(this._model)) {\n\t\t\t\t\tthis._model.doCheck.call(this._proxyModel);\n\t\t\t\t}\n\t\t\t\tif (isAfterContentChecked(this._model)) {\n\t\t\t\t\tthis._model.afterContentChecked.call(this._proxyModel);\n\t\t\t\t}\n\t\t\t\tif (isAfterViewChecked(this._model)) {\n\t\t\t\t\tthis._model.afterViewChecked.call(this._proxyModel);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\n\t\tinitOuterAttribute(attr: Attr) {\n\t\t\t// [window, this] scop\n\t\t\tlet elementAttr = attr.name;\n\t\t\tlet modelProperty = attr.value;\n\t\t\tif (elementAttr.startsWith('[')) {\n\t\t\t\telementAttr = elementAttr.substring(1, elementAttr.length - 1);\n\t\t\t\tif (Reflect.has(window, modelProperty)) {\n\t\t\t\t\tthis.setInputValue(elementAttr, Reflect.get(window, modelProperty));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (elementAttr.startsWith('(')) {\n\t\t\t\t// (elementAttr)=\"modelProperty()\"\n\t\t\t\telementAttr = elementAttr.substring(1, elementAttr.length - 1);\n\t\t\t\t// this.handleEvent(element, elementAttr, viewProperty);\n\t\t\t\tmodelProperty = modelProperty.endsWith('()') ?\n\t\t\t\t\tmodelProperty.substring(0, modelProperty.length - 2) : modelProperty;\n\t\t\t\tlet callback: Function = Reflect.get(window, modelProperty);\n\t\t\t\tthis.addEventListener(elementAttr, event => {\n\t\t\t\t\tcallback(event);\n\t\t\t\t});\n\t\t\t} else if (elementAttr.startsWith('on')) {\n\t\t\t\tconst modelEvent = this.getEventEmitter<any>(elementAttr.substring(2));\n\t\t\t\tif (modelEvent) {\n\t\t\t\t\t// modelEvent.subscribe(listener);\n\t\t\t\t\tmodelProperty = modelProperty.endsWith('()') ?\n\t\t\t\t\t\tmodelProperty.substring(0, modelProperty.length - 2) : modelProperty;\n\t\t\t\t\tlet listener: Function = Reflect.get(window, modelProperty);\n\t\t\t\t\tmodelEvent.subscribe((data: any) => {\n\t\t\t\t\t\t(listener as Function)(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.setInputValue(attr.name, attr.value);\n\t\t\t}\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\t// restart the process\n\t\t\tthis.innerHTML = '';\n\t\t\tthis.connectedCallback();\n\t\t}\n\t\tdisconnectedCallback() {\n\t\t\t// notify first, then call model.onDestroy func\n\t\t\tif (isOnDestroy(this._model)) {\n\t\t\t\tthis._model.onDestroy.call(this._proxyModel);\n\t\t\t}\n\t\t\tthis.subscriptions.forEach(sub => sub.unsubscribe());\n\t\t\tthis.subscriptions.splice(0, this.subscriptions.length);\n\t\t}\n\n\t\t// events api\n\t\taddEventListener(eventName: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void {\n\t\t\tif ('on' + eventName in this) {\n\t\t\t\tsuper.addEventListener(eventName, (event: Event) => {\n\t\t\t\t\t(listener as Function)(event);\n\t\t\t\t}, options);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst modelOutput = this.getEventEmitter<any>(eventName);\n\t\t\tif (modelOutput) {\n\t\t\t\tmodelOutput.subscribe((data: any) => {\n\t\t\t\t\t(listener as Function)(data);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\ttriggerOutput(eventName: string, value?: any): void {\n\t\t\tconst modelEvent = this.getEventEmitter<any>(eventName);\n\t\t\tif (modelEvent) {\n\t\t\t\tmodelEvent.emit(value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\tFACTORY_CACHE.set(htmlElementType, CustomView);\n\treturn CustomView;\n}\n"]}
|
package/view/form-view.js
CHANGED
|
@@ -2,8 +2,10 @@ import { baseFactoryView } from './base-view.js';
|
|
|
2
2
|
export function baseFormFactoryView(htmlElementType) {
|
|
3
3
|
const baseViewClass = baseFactoryView(htmlElementType);
|
|
4
4
|
class BaseFormView extends baseViewClass {
|
|
5
|
+
// private internals_: ElementInternals;
|
|
5
6
|
constructor(componentRef, modelClass) {
|
|
6
7
|
super(componentRef, modelClass);
|
|
8
|
+
// this.internals_ = this.attachInternals();
|
|
7
9
|
}
|
|
8
10
|
formAssociatedCallback(form) {
|
|
9
11
|
throw new Error('Method not implemented.');
|
|
@@ -17,6 +19,14 @@ export function baseFormFactoryView(htmlElementType) {
|
|
|
17
19
|
formStateRestoreCallback(value, mode) {
|
|
18
20
|
throw new Error('Method not implemented.');
|
|
19
21
|
}
|
|
22
|
+
// get form() { return this.internals_.form; }
|
|
23
|
+
// get name() { return this.getAttribute('name'); }
|
|
24
|
+
// get type() { return this.localName; }
|
|
25
|
+
// get validity() { return this.internals_.validity; }
|
|
26
|
+
// get validationMessage() { return this.internals_.validationMessage; }
|
|
27
|
+
// get willValidate() { return this.internals_.willValidate; }
|
|
28
|
+
// checkValidity() { return this.internals_.checkValidity(); }
|
|
29
|
+
// reportValidity() { return this.internals_.reportValidity(); }
|
|
20
30
|
set disabled(disabled) {
|
|
21
31
|
this._disabled = disabled;
|
|
22
32
|
this.toggleAttribute('disabled', disabled);
|
|
@@ -27,17 +37,28 @@ export function baseFormFactoryView(htmlElementType) {
|
|
|
27
37
|
set required(required) {
|
|
28
38
|
this._required = required;
|
|
29
39
|
this.toggleAttribute('required', required);
|
|
40
|
+
// if (!this.value) {
|
|
41
|
+
// this.internals.setValidity({
|
|
42
|
+
// valueMissing: true
|
|
43
|
+
// }, 'This field is required');
|
|
44
|
+
// } else {
|
|
45
|
+
// this.internals.setValidity({
|
|
46
|
+
// valueMissing: false
|
|
47
|
+
// });
|
|
48
|
+
// }
|
|
30
49
|
}
|
|
31
50
|
get required() {
|
|
32
51
|
return this._required;
|
|
33
52
|
}
|
|
34
53
|
set value(value) {
|
|
35
54
|
this._value = value;
|
|
55
|
+
// this.internals.setFormValue(value);
|
|
36
56
|
}
|
|
37
57
|
get value() {
|
|
38
58
|
return this._value;
|
|
39
59
|
}
|
|
40
60
|
}
|
|
61
|
+
// Identify the element as a form-associated custom element
|
|
41
62
|
BaseFormView.formAssociated = true;
|
|
42
63
|
return BaseFormView;
|
|
43
64
|
}
|
package/view/form-view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-view.js","sourceRoot":"","sources":["../../../src/core/view/form-view.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAAmB,eAAoC;IACzF,MAAM,aAAa,GAAG,eAAe,CAAI,eAAe,CAAC,CAAC;IAC1D,MAAM,YAAgB,SAAQ,aAAa;
|
|
1
|
+
{"version":3,"file":"form-view.js","sourceRoot":"","sources":["../../../src/core/view/form-view.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAAmB,eAAoC;IACzF,MAAM,aAAa,GAAG,eAAe,CAAI,eAAe,CAAC,CAAC;IAC1D,MAAM,YAAgB,SAAQ,aAAa;QAS1C,wCAAwC;QACxC,YAAY,YAA6B,EAAE,UAAqB;YAC/D,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAChC,4CAA4C;QAC7C,CAAC;QAED,sBAAsB,CAAC,IAAqB;YAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;QACD,oBAAoB,CAAC,QAAiB;YACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;QACD,iBAAiB;YAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;QACD,wBAAwB,CAAC,KAAU,EAAE,IAAgC;YACpE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;QAED,8CAA8C;QAC9C,mDAAmD;QACnD,wCAAwC;QACxC,sDAAsD;QACtD,wEAAwE;QACxE,8DAA8D;QAE9D,8DAA8D;QAC9D,gEAAgE;QAEhE,IAAI,QAAQ,CAAC,QAAQ;YACpB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,QAAQ;YACX,OAAO,IAAI,CAAC,SAAS,CAAC;QACvB,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ;YACpB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3C,qBAAqB;YACrB,mCAAmC;YACnC,6BAA6B;YAC7B,oCAAoC;YACpC,WAAW;YACX,mCAAmC;YACnC,8BAA8B;YAC9B,UAAU;YACV,IAAI;QACL,CAAC;QAED,IAAI,QAAQ;YACX,OAAO,IAAI,CAAC,SAAS,CAAC;QACvB,CAAC;QAED,IAAI,KAAK,CAAC,KAAU;YACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,sCAAsC;QACvC,CAAC;QAED,IAAI,KAAK;YACR,OAAO,IAAI,CAAC,MAAM,CAAC;QACpB,CAAC;;IAtED,2DAA2D;IACpD,2BAAc,GAAG,IAAI,CAAC;IAuE9B,OAAO,YAAY,CAAC;AACrB,CAAC","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { ComponentRef } from '../component/component.js';\nimport { CustomFormElement, HTMLFormElement, HTMLFormElementComponent } from '../component/custom-element.js';\nimport { baseFactoryView } from './base-view.js';\n\nexport function baseFormFactoryView<T extends Object>(htmlElementType: TypeOf<HTMLElement>): TypeOf<HTMLFormElementComponent<T>> {\n\tconst baseViewClass = baseFactoryView<T>(htmlElementType);\n\tclass BaseFormView<T> extends baseViewClass implements CustomFormElement {\n\n\t\t// Identify the element as a form-associated custom element\n\t\tstatic formAssociated = true;\n\n\t\t_disabled: boolean;\n\t\t_required: boolean;\n\t\t_value: any;\n\n\t\t// private internals_: ElementInternals;\n\t\tconstructor(componentRef: ComponentRef<T>, modelClass: TypeOf<T>) {\n\t\t\tsuper(componentRef, modelClass);\n\t\t\t// this.internals_ = this.attachInternals();\n\t\t}\n\n\t\tformAssociatedCallback(form: HTMLFormElement): void {\n\t\t\tthrow new Error('Method not implemented.');\n\t\t}\n\t\tformDisabledCallback(disabled: boolean): void {\n\t\t\tthrow new Error('Method not implemented.');\n\t\t}\n\t\tformResetCallback(): void {\n\t\t\tthrow new Error('Method not implemented.');\n\t\t}\n\t\tformStateRestoreCallback(value: any, mode: 'restore' | 'autocomplete'): void {\n\t\t\tthrow new Error('Method not implemented.');\n\t\t}\n\n\t\t// get form() { return this.internals_.form; }\n\t\t// get name() { return this.getAttribute('name'); }\n\t\t// get type() { return this.localName; }\n\t\t// get validity() { return this.internals_.validity; }\n\t\t// get validationMessage() { return this.internals_.validationMessage; }\n\t\t// get willValidate() { return this.internals_.willValidate; }\n\n\t\t// checkValidity() { return this.internals_.checkValidity(); }\n\t\t// reportValidity() { return this.internals_.reportValidity(); }\n\n\t\tset disabled(disabled) {\n\t\t\tthis._disabled = disabled;\n\t\t\tthis.toggleAttribute('disabled', disabled);\n\t\t}\n\n\t\tget disabled() {\n\t\t\treturn this._disabled;\n\t\t}\n\n\t\tset required(required) {\n\t\t\tthis._required = required;\n\t\t\tthis.toggleAttribute('required', required);\n\t\t\t// if (!this.value) {\n\t\t\t// this.internals.setValidity({\n\t\t\t// valueMissing: true\n\t\t\t// }, 'This field is required');\n\t\t\t// } else {\n\t\t\t// this.internals.setValidity({\n\t\t\t// valueMissing: false\n\t\t\t// });\n\t\t\t// }\n\t\t}\n\n\t\tget required() {\n\t\t\treturn this._required;\n\t\t}\n\n\t\tset value(value: any) {\n\t\t\tthis._value = value;\n\t\t\t// this.internals.setFormValue(value);\n\t\t}\n\n\t\tget value() {\n\t\t\treturn this._value;\n\t\t}\n\t}\n\treturn BaseFormView;\n}\n"]}
|
package/view/mutation.js
CHANGED
|
@@ -111,6 +111,7 @@ export class ElementMutation {
|
|
|
111
111
|
switch (mut.type) {
|
|
112
112
|
case 'childList':
|
|
113
113
|
{
|
|
114
|
+
// insert/remove events
|
|
114
115
|
if (mut.removedNodes.length > 0 && this.observables.has(mut.target)) {
|
|
115
116
|
const observable = this.observables.get(mut.target);
|
|
116
117
|
mut.removedNodes.forEach(node => observable.emitNodeRemove(node));
|
package/view/mutation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation.js","sourceRoot":"","sources":["../../../src/core/view/mutation.ts"],"names":[],"mappings":"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","sourcesContent":["interface AttributeChangeCallback {\n\t(value: any, oldValue?: any): void;\n}\n\ninterface NodeRemoveCallback {\n\t(): void;\n}\n\n\nexport class MutationObservable {\n\tprivate attributes = new Map<string, AttributeChangeCallback[]>();\n\tprivate remove = new WeakMap<Node, NodeRemoveCallback[]>();\n\tprivate insert = new WeakMap<Node, NodeRemoveCallback[]>();\n\n\temit(attributeName: string, value: any, oldValue?: any): void {\n\t\tconst calls = this.attributes.get(attributeName);\n\n\t\tcalls?.forEach(callback => {\n\t\t\ttry {\n\t\t\t\tcallback(value, oldValue);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\n\t}\n\n\temitNodeRemove(node: Node): void {\n\t\tthis.emitNode(this.remove, node);\n\t}\n\n\temitNodeInsert(node: Node): void {\n\t\tthis.emitNode(this.insert, node);\n\t}\n\n\tprivate emitNode(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node): void {\n\t\tconst calls = actionMap.get(node);\n\n\t\tcalls?.forEach(callback => {\n\t\t\ttry {\n\t\t\t\tcallback();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\t}\n\n\tsubscribe(attributeName: string, callback: AttributeChangeCallback): MutationSubscription {\n\t\tlet calls = this.attributes.get(attributeName);\n\t\tif (!calls) {\n\t\t\tcalls = [];\n\t\t\tthis.attributes.set(attributeName, calls);\n\t\t}\n\t\tcalls.push(callback);\n\t\treturn new MutationSubscription(this, attributeName, callback);\n\t}\n\n\tsubscribeOnRemoveNode(node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\treturn this.subscribeNodeAction(this.remove, node, callback);\n\t}\n\n\tsubscribeOnInsertNode(node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\treturn this.subscribeNodeAction(this.insert, node, callback);\n\t}\n\n\tprivate subscribeNodeAction(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet calls = actionMap.get(node);\n\t\tif (!calls) {\n\t\t\tcalls = [];\n\t\t\tactionMap.set(node, calls);\n\t\t}\n\t\tcalls.push(callback);\n\t\treturn new MutationSubscription(this, new WeakRef(node), callback);\n\t}\n\n\tunsubscribe(eventName: string, callback: AttributeChangeCallback): void {\n\t\tconst calls = this.attributes.get(eventName);\n\t\tif (calls) {\n\t\t\tconst index = calls.indexOf(callback);\n\t\t\tif (index !== -1) {\n\t\t\t\tcalls.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tunsubscribeOnRemoveNode(node: Node, callback: NodeRemoveCallback): void {\n\t\tthis.unsubscribeNodeAction(this.remove, node, callback);\n\t}\n\n\tunsubscribeOnInsertNode(node: Node, callback: NodeRemoveCallback): void {\n\t\tthis.unsubscribeNodeAction(this.insert, node, callback);\n\t}\n\n\tprivate unsubscribeNodeAction(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node, callback: NodeRemoveCallback): void {\n\t\tconst calls = actionMap.get(node);\n\t\tif (calls) {\n\t\t\tconst index = calls.indexOf(callback);\n\t\t\tif (index !== -1) {\n\t\t\t\tcalls.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.attributes.clear();\n\t}\n}\n\nexport class MutationSubscription {\n\n\tprivate type: 'attribute' | 'remove';\n\tconstructor(observable: MutationObservable, node: WeakRef<Node>, callback: NodeRemoveCallback);\n\tconstructor(observable: MutationObservable, attributeName: string, callback: AttributeChangeCallback);\n\n\tconstructor(private observable: MutationObservable, private key: string | WeakRef<Node>, private callback: AttributeChangeCallback | NodeRemoveCallback) {\n\t\tthis.type = typeof key === 'string' ? 'attribute' : 'remove';\n\t}\n\n\tunsubscribe() {\n\t\tif (this.type === 'attribute') {\n\t\t\tthis.observable.unsubscribe(this.key as string, this.callback as AttributeChangeCallback);\n\t\t} else {\n\t\t\tconst ref = (this.key as WeakRef<Node>).deref();\n\t\t\tif (ref) {\n\t\t\t\tthis.observable.unsubscribeOnRemoveNode(ref, this.callback as NodeRemoveCallback);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\nexport class ElementMutation {\n\n\tprivate static Mutation_OPTIONS: MutationObserverInit = {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true,\n\t\tattributeOldValue: true,\n\t};\n\n\tprivate observables: WeakMap<Node, MutationObservable> = new WeakMap();\n\tprivate mutationCallback: MutationCallback = (mutations: MutationRecord[], observer: MutationObserver) => {\n\t\tmutations.forEach((mut) => {\n\t\t\tswitch (mut.type) {\n\t\t\t\tcase 'childList':\n\t\t\t\t\t{\n\t\t\t\t\t\t// insert/remove events\n\t\t\t\t\t\tif (mut.removedNodes.length > 0 && this.observables.has(mut.target)) {\n\t\t\t\t\t\t\tconst observable = this.observables.get(mut.target)!;\n\t\t\t\t\t\t\tmut.removedNodes.forEach(node => observable.emitNodeRemove(node));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'attributes':\n\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst observable = this.observables.get(mut.target);\n\t\t\t\t\t\tobservable && observable.emit(mut.attributeName as string, mut.target.nodeValue, mut.oldValue);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t};\n\tprivate mutationObserver: MutationObserver = new MutationObserver(this.mutationCallback);\n\n\tsubscribe(target: Node, attributeName: string, callback: AttributeChangeCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribe(attributeName, callback);\n\t}\n\n\tsubscribeOnRemoveNode(target: Node, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribeOnRemoveNode(node, callback);\n\t}\n\n\tsubscribeOnInsertNode(target: Node, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribeOnInsertNode(node, callback);\n\t}\n\n\tdisconnect() {\n\t\tconst records = this.mutationObserver.takeRecords();\n\t\tthis.mutationObserver.disconnect();\n\t\tthis.mutationCallback(records, this.mutationObserver);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mutation.js","sourceRoot":"","sources":["../../../src/core/view/mutation.ts"],"names":[],"mappings":"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","sourcesContent":["interface AttributeChangeCallback {\n\t(value: any, oldValue?: any): void;\n}\n\ninterface NodeRemoveCallback {\n\t(): void;\n}\n\n\nexport class MutationObservable {\n\tprivate attributes = new Map<string, AttributeChangeCallback[]>();\n\tprivate remove = new WeakMap<Node, NodeRemoveCallback[]>();\n\tprivate insert = new WeakMap<Node, NodeRemoveCallback[]>();\n\n\temit(attributeName: string, value: any, oldValue?: any): void {\n\t\tconst calls = this.attributes.get(attributeName);\n\n\t\tcalls?.forEach(callback => {\n\t\t\ttry {\n\t\t\t\tcallback(value, oldValue);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\n\t}\n\n\temitNodeRemove(node: Node): void {\n\t\tthis.emitNode(this.remove, node);\n\t}\n\n\temitNodeInsert(node: Node): void {\n\t\tthis.emitNode(this.insert, node);\n\t}\n\n\tprivate emitNode(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node): void {\n\t\tconst calls = actionMap.get(node);\n\n\t\tcalls?.forEach(callback => {\n\t\t\ttry {\n\t\t\t\tcallback();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t});\n\t}\n\n\tsubscribe(attributeName: string, callback: AttributeChangeCallback): MutationSubscription {\n\t\tlet calls = this.attributes.get(attributeName);\n\t\tif (!calls) {\n\t\t\tcalls = [];\n\t\t\tthis.attributes.set(attributeName, calls);\n\t\t}\n\t\tcalls.push(callback);\n\t\treturn new MutationSubscription(this, attributeName, callback);\n\t}\n\n\tsubscribeOnRemoveNode(node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\treturn this.subscribeNodeAction(this.remove, node, callback);\n\t}\n\n\tsubscribeOnInsertNode(node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\treturn this.subscribeNodeAction(this.insert, node, callback);\n\t}\n\n\tprivate subscribeNodeAction(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet calls = actionMap.get(node);\n\t\tif (!calls) {\n\t\t\tcalls = [];\n\t\t\tactionMap.set(node, calls);\n\t\t}\n\t\tcalls.push(callback);\n\t\treturn new MutationSubscription(this, new WeakRef(node), callback);\n\t}\n\n\tunsubscribe(eventName: string, callback: AttributeChangeCallback): void {\n\t\tconst calls = this.attributes.get(eventName);\n\t\tif (calls) {\n\t\t\tconst index = calls.indexOf(callback);\n\t\t\tif (index !== -1) {\n\t\t\t\tcalls.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tunsubscribeOnRemoveNode(node: Node, callback: NodeRemoveCallback): void {\n\t\tthis.unsubscribeNodeAction(this.remove, node, callback);\n\t}\n\n\tunsubscribeOnInsertNode(node: Node, callback: NodeRemoveCallback): void {\n\t\tthis.unsubscribeNodeAction(this.insert, node, callback);\n\t}\n\n\tprivate unsubscribeNodeAction(actionMap: WeakMap<Node, NodeRemoveCallback[]>, node: Node, callback: NodeRemoveCallback): void {\n\t\tconst calls = actionMap.get(node);\n\t\tif (calls) {\n\t\t\tconst index = calls.indexOf(callback);\n\t\t\tif (index !== -1) {\n\t\t\t\tcalls.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.attributes.clear();\n\t}\n}\n\nexport class MutationSubscription {\n\n\tprivate type: 'attribute' | 'remove';\n\tconstructor(observable: MutationObservable, node: WeakRef<Node>, callback: NodeRemoveCallback);\n\tconstructor(observable: MutationObservable, attributeName: string, callback: AttributeChangeCallback);\n\n\tconstructor(private observable: MutationObservable, private key: string | WeakRef<Node>, private callback: AttributeChangeCallback | NodeRemoveCallback) {\n\t\tthis.type = typeof key === 'string' ? 'attribute' : 'remove';\n\t}\n\n\tunsubscribe() {\n\t\tif (this.type === 'attribute') {\n\t\t\tthis.observable.unsubscribe(this.key as string, this.callback as AttributeChangeCallback);\n\t\t} else {\n\t\t\tconst ref = (this.key as WeakRef<Node>).deref();\n\t\t\tif (ref) {\n\t\t\t\tthis.observable.unsubscribeOnRemoveNode(ref, this.callback as NodeRemoveCallback);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\nexport class ElementMutation {\n\n\tprivate static Mutation_OPTIONS: MutationObserverInit = {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true,\n\t\tattributeOldValue: true,\n\t};\n\n\tprivate observables: WeakMap<Node, MutationObservable> = new WeakMap();\n\tprivate mutationCallback: MutationCallback = (mutations: MutationRecord[], observer: MutationObserver) => {\n\t\tmutations.forEach((mut) => {\n\t\t\tswitch (mut.type) {\n\t\t\t\tcase 'childList':\n\t\t\t\t\t{\n\t\t\t\t\t\t// insert/remove events\n\t\t\t\t\t\tif (mut.removedNodes.length > 0 && this.observables.has(mut.target)) {\n\t\t\t\t\t\t\tconst observable = this.observables.get(mut.target)!;\n\t\t\t\t\t\t\tmut.removedNodes.forEach(node => observable.emitNodeRemove(node));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'attributes':\n\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst observable = this.observables.get(mut.target);\n\t\t\t\t\t\tobservable && observable.emit(mut.attributeName as string, mut.target.nodeValue, mut.oldValue);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t};\n\tprivate mutationObserver: MutationObserver = new MutationObserver(this.mutationCallback);\n\n\tsubscribe(target: Node, attributeName: string, callback: AttributeChangeCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribe(attributeName, callback);\n\t}\n\n\tsubscribeOnRemoveNode(target: Node, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribeOnRemoveNode(node, callback);\n\t}\n\n\tsubscribeOnInsertNode(target: Node, node: Node, callback: NodeRemoveCallback): MutationSubscription {\n\t\tlet observable = this.observables.get(target);\n\t\tif (!observable) {\n\t\t\tobservable = new MutationObservable();\n\t\t\tthis.observables.set(target, observable);\n\t\t\tthis.mutationObserver.observe(target, ElementMutation.Mutation_OPTIONS);\n\t\t}\n\t\treturn observable.subscribeOnInsertNode(node, callback);\n\t}\n\n\tdisconnect() {\n\t\tconst records = this.mutationObserver.takeRecords();\n\t\tthis.mutationObserver.disconnect();\n\t\tthis.mutationCallback(records, this.mutationObserver);\n\t}\n}\n"]}
|
package/view/render.js
CHANGED
|
@@ -41,10 +41,10 @@ export class ComponentRender {
|
|
|
41
41
|
}
|
|
42
42
|
let rootRef;
|
|
43
43
|
if (this.componentRef.isShadowDom) {
|
|
44
|
-
if (this.view.shadowRoot) {
|
|
44
|
+
if (this.view.shadowRoot /* OPEN MODE */) {
|
|
45
45
|
rootRef = this.view.shadowRoot;
|
|
46
46
|
}
|
|
47
|
-
else {
|
|
47
|
+
else /* CLOSED MODE*/ {
|
|
48
48
|
rootRef = Reflect.get(this.view, '_shadowRoot');
|
|
49
49
|
Reflect.deleteProperty(this.view, '_shadowRoot');
|
|
50
50
|
}
|
|
@@ -106,6 +106,7 @@ export class ComponentRender {
|
|
|
106
106
|
const stack = directiveStack.copyStack();
|
|
107
107
|
const templateRef = new TemplateRefImpl(this, directive.node, stack, directive.templateExpressions ?? []);
|
|
108
108
|
const viewContainerRef = new ViewContainerRefImpl(parentNode, comment);
|
|
109
|
+
// structural directive selector
|
|
109
110
|
const StructuralDirectiveClass = directiveRef.modelClass;
|
|
110
111
|
const structural = new StructuralDirectiveClass(templateRef, viewContainerRef, host);
|
|
111
112
|
templateRef.host = structural;
|
|
@@ -123,6 +124,8 @@ export class ComponentRender {
|
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
126
|
else {
|
|
127
|
+
// didn't find directive or it is not define yet.
|
|
128
|
+
// class registry should have 'when defined' callback
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
131
|
createComment(node) {
|
|
@@ -151,6 +154,11 @@ export class ComponentRender {
|
|
|
151
154
|
if (child instanceof DomElementNode) {
|
|
152
155
|
if (this.isTemplateRefName(child)) {
|
|
153
156
|
const templateRefName = child.templateRefName;
|
|
157
|
+
// const oldRef = this.templateNameScope.get(templateRefName.name);
|
|
158
|
+
// if (oldRef) {
|
|
159
|
+
// return;
|
|
160
|
+
// }
|
|
161
|
+
// TODO: extract template expression
|
|
154
162
|
const templateRef = new TemplateRefImpl(this, new DomFragmentNode(child.children), contextStack.copyStack(), []);
|
|
155
163
|
this.templateNameScope.set(templateRefName.name, templateRef);
|
|
156
164
|
return;
|
|
@@ -193,9 +201,11 @@ export class ComponentRender {
|
|
|
193
201
|
}
|
|
194
202
|
}
|
|
195
203
|
else if (isTagNameNative(node.tagName)) {
|
|
204
|
+
// native tags // and custom tags can be used her
|
|
196
205
|
element = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);
|
|
197
206
|
}
|
|
198
207
|
else {
|
|
208
|
+
// html unknown element
|
|
199
209
|
element = document.createElement(node.tagName);
|
|
200
210
|
}
|
|
201
211
|
if (isHTMLComponent(element)) {
|
|
@@ -260,6 +270,9 @@ export class ComponentRender {
|
|
|
260
270
|
const subscriptions = [];
|
|
261
271
|
if (node.attributes?.length) {
|
|
262
272
|
node.attributes.forEach(attr => {
|
|
273
|
+
/**
|
|
274
|
+
* <input id="23" name="person-name" />
|
|
275
|
+
*/
|
|
263
276
|
const isAttr = hasAttr(element, attr.name);
|
|
264
277
|
if (isAttr) {
|
|
265
278
|
if (attr.value === false) {
|
|
@@ -298,6 +311,15 @@ export class ComponentRender {
|
|
|
298
311
|
if (node.outputs?.length) {
|
|
299
312
|
node.outputs.forEach(event => {
|
|
300
313
|
let listener;
|
|
314
|
+
/**
|
|
315
|
+
* <a (click)="onLinkClick($event)"></a>
|
|
316
|
+
* <a @click="onLinkClick($event)"></a>
|
|
317
|
+
* <input [(value)]="person.name" />
|
|
318
|
+
* <input (value)="person.name" />
|
|
319
|
+
* <!-- <input (value)="person.name = $event" /> -->
|
|
320
|
+
*
|
|
321
|
+
* TODO: diff of event listener and back-way data binding
|
|
322
|
+
*/
|
|
301
323
|
if (typeof event.value === 'string') {
|
|
302
324
|
listener = ($event) => {
|
|
303
325
|
const stack = contextStack.copyStack();
|
|
@@ -307,7 +329,8 @@ export class ComponentRender {
|
|
|
307
329
|
stack.reattach();
|
|
308
330
|
};
|
|
309
331
|
}
|
|
310
|
-
else {
|
|
332
|
+
else /* if (typeof event.sourceHandler === 'function')*/ {
|
|
333
|
+
// let eventName: keyof HTMLElementEventMap = event.eventName;
|
|
311
334
|
listener = event.value;
|
|
312
335
|
}
|
|
313
336
|
element.addEventListener(event.name, listener);
|
|
@@ -368,6 +391,8 @@ export class ComponentRender {
|
|
|
368
391
|
contextStack.reattach();
|
|
369
392
|
});
|
|
370
393
|
}
|
|
394
|
+
// TODO:
|
|
395
|
+
// check host binding
|
|
371
396
|
return subscriptions;
|
|
372
397
|
}
|
|
373
398
|
}
|
package/view/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tReactiveScope, ScopeContext, ScopeSubscription, Stack\n} from '@ibyar/expressions';\nimport {\n\tCommentNode, DomStructuralDirectiveNode, DomStructuralDirectiveNodeUpgrade,\n\tDomElementNode, DomFragmentNode, DomNode, isLiveTextContent,\n\tisTagNameNative, isValidCustomElementName, LiveTextContent,\n\tTextContent, DomAttributeDirectiveNode\n} from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent, isHTMLComponent } from '../component/custom-element.js';\nimport { documentStack } from '../context/stack.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { isOnDestroy, isOnInit } from '../component/lifecycle.js';\nimport { hasAttr } from '../utils/elements-util.js';\nimport { AttributeDirective, AttributeOnStructuralDirective, StructuralDirective } from '../directive/directive.js';\nimport { TemplateRef, TemplateRefImpl } from '../linker/template-ref.js';\nimport { ViewContainerRefImpl } from '../linker/view-container-ref.js';\nimport { createSubscriptionDestroyer } from '../context/subscription.js';\nimport { HostListenerHandler } from '../render/host-listener.handler.js';\n\ntype ViewScopeContext = { [element: string]: HTMLElement };\n\nfunction getInputEventName(element: HTMLElement): 'input' | 'change' | undefined {\n\tswitch (true) {\n\t\tcase element instanceof HTMLInputElement:\n\t\t\treturn 'input';\n\t\tcase element instanceof HTMLTextAreaElement:\n\t\tcase element instanceof HTMLSelectElement:\n\t\t\treturn 'change';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\nexport class ComponentRender<T extends object> {\n\tprivate componentRef: ComponentRef<T>;\n\tprivate template: DomNode;\n\tprivate contextStack: Stack;\n\tprivate templateNameScope: ReactiveScope<{ [templateName: string]: TemplateRef }>;\n\tprivate viewScope: ReactiveScope<ViewScopeContext> = new ReactiveScope({});\n\n\tconstructor(public view: HTMLComponent<T>, private subscriptions: ScopeSubscription<ScopeContext>[]) {\n\t\tthis.componentRef = this.view.getComponentRef();\n\t\tthis.contextStack = documentStack.copyStack();\n\t\tthis.contextStack.pushScope<ScopeContext>(this.view._modelScope);\n\t\tthis.templateNameScope = this.contextStack.pushReactiveScope();\n\t}\n\tinitView(): void {\n\t\tif (this.componentRef.template) {\n\t\t\tif (typeof this.componentRef.template === 'function') {\n\t\t\t\tthis.template = this.componentRef.template(this.view._model);\n\t\t\t} else {\n\t\t\t\tthis.template = this.componentRef.template;\n\t\t\t}\n\n\t\t\tlet rootRef: HTMLElement | ShadowRoot;\n\t\t\tif (this.componentRef.isShadowDom) {\n\t\t\t\tif (this.view.shadowRoot /* OPEN MODE */) {\n\t\t\t\t\trootRef = this.view.shadowRoot;\n\t\t\t\t} else /* CLOSED MODE*/ {\n\t\t\t\t\trootRef = Reflect.get(this.view, '_shadowRoot') as ShadowRoot;\n\t\t\t\t\tReflect.deleteProperty(this.view, '_shadowRoot');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trootRef = this.view;\n\t\t\t}\n\t\t\tthis.initTemplateRefMap(this.template);\n\t\t\tlet rootFragment: DocumentFragment;\n\t\t\tif (this.template instanceof DomFragmentNode) {\n\t\t\t\trootFragment = this.createDocumentFragment(this.template, this.contextStack, rootRef, this.subscriptions, this.view);\n\t\t\t} else {\n\t\t\t\trootFragment = document.createDocumentFragment();\n\t\t\t\tthis.appendChildToParent(rootFragment, this.template, this.contextStack, rootRef, this.subscriptions, this.view);\n\t\t\t}\n\t\t\trootRef.append(rootFragment);\n\t\t}\n\t}\n\tisTemplateRefName(template: DomNode): template is DomElementNode {\n\t\tif (template instanceof DomElementNode) {\n\t\t\tif (template.tagName === 'template' && template.templateRefName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tinitTemplateRefMap(domNode: DomNode) {\n\t\tif (domNode instanceof DomElementNode || domNode instanceof DomFragmentNode) {\n\t\t\tif (domNode.children) {\n\t\t\t\tfor (let index = 0; index < domNode.children.length; index++) {\n\t\t\t\t\tconst child = domNode.children[index];\n\t\t\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\t\t\tthis.templateNameScope.set(child.templateRefName!.name, undefined);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.initTemplateRefMap(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tinitHostListener(): void {\n\t\tconst handlers = this.componentRef.hostListeners.map(listenerRef => new HostListenerHandler(listenerRef, this.view, this.viewScope));\n\t\thandlers.forEach(handler => handler.onInit());\n\t\thandlers.forEach(handler => this.subscriptions.push(createSubscriptionDestroyer(\n\t\t\t() => handler.onDestroy(),\n\t\t\t() => handler.onDisconnect(),\n\t\t\t() => handler.onConnect(),\n\t\t)));\n\t}\n\taddNativeEventListener(source: HTMLElement | Window, eventName: string, funcCallback: Function) {\n\t\tsource.addEventListener(eventName, (event: Event) => {\n\t\t\tfuncCallback.call(this.view._proxyModel, event);\n\t\t});\n\t}\n\tgetElementByName(name: string) {\n\t\treturn Reflect.get(this.view, name);\n\t}\n\tcreateStructuralDirective(directive: DomStructuralDirectiveNode, comment: Comment, directiveStack: Stack, subscriptions: ScopeSubscription<ScopeContext>[], parentNode: Node, host: HTMLComponent<any> | StructuralDirective): void {\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<T>(directive.name);\n\t\tif (directiveRef) {\n\t\t\tconst stack = directiveStack.copyStack();\n\t\t\tconst templateRef = new TemplateRefImpl(\n\t\t\t\tthis,\n\t\t\t\tdirective.node,\n\t\t\t\tstack,\n\t\t\t\t(directive as DomStructuralDirectiveNodeUpgrade).templateExpressions ?? [],\n\t\t\t);\n\t\t\tconst viewContainerRef = new ViewContainerRefImpl(parentNode as Element, comment);\n\n\t\t\t// structural directive selector\n\t\t\tconst StructuralDirectiveClass = directiveRef.modelClass as typeof StructuralDirective;\n\t\t\tconst structural = new StructuralDirectiveClass(\n\t\t\t\ttemplateRef,\n\t\t\t\tviewContainerRef,\n\t\t\t\thost\n\t\t\t);\n\t\t\ttemplateRef.host = structural;\n\t\t\tstack.pushReactiveScopeFor({ 'this': structural });\n\t\t\tconst dSubs = this.initStructuralDirective(structural, directive, stack);\n\t\t\tsubscriptions.push(...dSubs);\n\t\t\tif (isOnInit(structural)) {\n\t\t\t\tstructural.onInit();\n\t\t\t}\n\t\t\tif (directive.attributeDirectives?.length) {\n\t\t\t\tthis.initAttributeDirectives(directive.attributeDirectives, structural, stack, subscriptions);\n\t\t\t}\n\t\t\tif (isOnDestroy(structural)) {\n\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => structural.onDestroy()));\n\t\t\t}\n\t\t} else {\n\t\t\t// didn't find directive or it is not define yet.\n\t\t\t// class registry should have 'when defined' callback\n\t\t}\n\t}\n\tcreateComment(node: CommentNode): Comment {\n\t\treturn document.createComment(`${node.comment}`);\n\t}\n\tcreateText(node: TextContent): Text {\n\t\treturn new Text(node.value);\n\t}\n\tcreateLiveText(textNode: LiveTextContent, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<ScopeContext>[]): Text {\n\t\tconst liveText = new Text('');\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushBlockScopeFor({ this: liveText });\n\t\tconst textSubscriptions = textNode.expression.subscribe(contextStack, textNode.pipelineNames);\n\t\tsubscriptions.push(...textSubscriptions);\n\t\tcontextStack.detach();\n\t\ttextNode.expression.get(contextStack);\n\t\tcontextStack.reattach();\n\t\treturn liveText;\n\t}\n\tcreateDocumentFragment(node: DomFragmentNode, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<ScopeContext>[], host: HTMLComponent<any> | StructuralDirective): DocumentFragment {\n\t\tconst fragment = document.createDocumentFragment();\n\t\tnode.children?.forEach(child => this.appendChildToParent(fragment, child, contextStack, parentNode, subscriptions, host));\n\t\treturn fragment;\n\t}\n\tappendChildToParent(fragmentParent: HTMLElement | DocumentFragment, child: DomNode, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<ScopeContext>[], host: HTMLComponent<any> | StructuralDirective) {\n\t\tif (child instanceof DomElementNode) {\n\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\tconst templateRefName = child.templateRefName!;\n\t\t\t\t// const oldRef = this.templateNameScope.get(templateRefName.name);\n\t\t\t\t// if (oldRef) {\n\t\t\t\t// \treturn;\n\t\t\t\t// }\n\t\t\t\t// TODO: extract template expression\n\t\t\t\tconst templateRef = new TemplateRefImpl(\n\t\t\t\t\tthis,\n\t\t\t\t\tnew DomFragmentNode(child.children),\n\t\t\t\t\tcontextStack.copyStack(),\n\t\t\t\t\t[]\n\t\t\t\t);\n\t\t\t\tthis.templateNameScope.set(templateRefName.name, templateRef);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfragmentParent.append(this.createElement(child, contextStack, subscriptions, parentNode, host));\n\t\t} else if (child instanceof DomStructuralDirectiveNode) {\n\t\t\tconst commentText = child.name + (typeof child.value == 'string' ? (' = ' + child.value) : '');\n\t\t\tconst comment = document.createComment(`start ${commentText}`);\n\t\t\tfragmentParent.append(comment);\n\t\t\tconst lastComment = document.createComment(`end ${commentText}`);\n\t\t\tcomment.after(lastComment);\n\t\t\tthis.createStructuralDirective(child, comment, contextStack, subscriptions, parentNode, host);\n\t\t} else if (isLiveTextContent(child)) {\n\t\t\tfragmentParent.append(this.createLiveText(child, contextStack, parentNode, subscriptions));\n\t\t} else if (child instanceof TextContent) {\n\t\t\tfragmentParent.append(this.createText(child));\n\t\t} else if (child instanceof CommentNode) {\n\t\t\tfragmentParent.append(this.createComment(child));\n\t\t} else if (child instanceof DomFragmentNode) {\n\t\t\tfragmentParent.append(this.createDocumentFragment(child, contextStack, parentNode, subscriptions, host));\n\t\t}\n\t}\n\tcreateElementByTagName(node: { tagName: string, is?: string }): HTMLElement {\n\t\tlet element: HTMLElement;\n\t\tif (isValidCustomElementName(node.tagName)) {\n\t\t\tconst ViewClass = customElements.get(node.tagName) as ((new () => HTMLElement) | undefined);\n\t\t\tif (ViewClass) {\n\t\t\t\telement = new ViewClass();\n\t\t\t} else {\n\t\t\t\telement = document.createElement(node.tagName);\n\t\t\t\tif (element.constructor.name === 'HTMLElement') {\n\t\t\t\t\tcustomElements.whenDefined(node.tagName).then(() => customElements.upgrade(element));\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isTagNameNative(node.tagName)) {\n\t\t\t// native tags // and custom tags can be used her\n\t\t\telement = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);\n\t\t} else {\n\t\t\t// html unknown element\n\t\t\telement = document.createElement(node.tagName);\n\t\t}\n\t\tif (isHTMLComponent(element)) {\n\t\t\telement.setParentComponent(this.view);\n\t\t}\n\t\treturn element;\n\t}\n\tcreateElement(node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<ScopeContext>[], parentNode: Node, host: HTMLComponent<any> | StructuralDirective): HTMLElement {\n\t\tconst element = this.createElementByTagName(node);\n\t\tconst elementStack = contextStack.copyStack();\n\t\tconst elementScope = isHTMLComponent(element) ? element._viewScope : elementStack.pushReactiveScopeFor({ 'this': element });\n\t\telementStack.pushScope<ScopeContext>(elementScope);\n\t\tconst attributesSubscriptions = this.initAttribute(element, node, elementStack);\n\t\tsubscriptions.push(...attributesSubscriptions);\n\t\tconst eventName = getInputEventName(element);\n\t\tlet listener: ((event: HTMLElementEventMap['input' | 'change']) => any) | undefined;\n\t\tif (eventName) {\n\t\t\tconst inputScope = elementScope.getScopeOrCreat('this');\n\t\t\tlistener = (event) => inputScope.emit('value', (element as HTMLInputElement).value);\n\t\t\telement.addEventListener(eventName, listener);\n\t\t}\n\n\t\tconst templateRefName = node.templateRefName;\n\t\tif (templateRefName) {\n\t\t\tReflect.set(this.view, templateRefName.name, element);\n\t\t\tthis.viewScope.set(templateRefName.name, element);\n\t\t\tconst view = this.componentRef.viewChild.find(child => child.selector === templateRefName.name);\n\t\t\tif (view) {\n\t\t\t\tReflect.set(this.view._model, view.modelName, element);\n\t\t\t}\n\t\t}\n\t\tif (node.children) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tthis.appendChildToParent(element, child, elementStack, element, subscriptions, host);\n\t\t\t}\n\t\t}\n\t\tif (node.attributeDirectives?.length) {\n\t\t\tthis.initAttributeDirectives(node.attributeDirectives, element, contextStack, subscriptions);\n\t\t}\n\t\treturn element;\n\t}\n\tprivate initAttributeDirectives(\n\t\tattributeDirectives: DomAttributeDirectiveNode[],\n\t\telement: HTMLElement | StructuralDirective,\n\t\tcontextStack: Stack, subscriptions: ScopeSubscription<ScopeContext>[]) {\n\t\tattributeDirectives?.forEach(directiveNode => {\n\t\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<any>(directiveNode.name);\n\t\t\tif (directiveRef &&\n\t\t\t\t(directiveRef.modelClass.prototype instanceof AttributeDirective\n\t\t\t\t\t|| directiveRef.modelClass.prototype instanceof AttributeOnStructuralDirective\n\t\t\t\t)) {\n\t\t\t\tconst directive = new directiveRef.modelClass(element) as AttributeDirective | AttributeOnStructuralDirective;\n\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\tstack.pushReactiveScopeFor({ 'this': directive });\n\t\t\t\tconst directiveSubscriptions = this.initStructuralDirective(directive, directiveNode, stack);\n\t\t\t\tsubscriptions.push(...directiveSubscriptions);\n\t\t\t\tif (isOnInit(directive)) {\n\t\t\t\t\tdirective.onInit();\n\t\t\t\t}\n\t\t\t\tif (isOnDestroy(directive)) {\n\t\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => directive.onDestroy()));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tinitAttribute(element: HTMLElement, node: DomElementNode, contextStack: Stack): ScopeSubscription<ScopeContext>[] {\n\t\tconst subscriptions: ScopeSubscription<ScopeContext>[] = [];\n\t\tif (node.attributes?.length) {\n\t\t\tnode.attributes.forEach(attr => {\n\t\t\t\t/**\n\t\t\t\t * <input id=\"23\" name=\"person-name\" />\n\t\t\t\t */\n\t\t\t\tconst isAttr = hasAttr(element, attr.name);\n\t\t\t\tif (isAttr) {\n\t\t\t\t\tif (attr.value === false) {\n\t\t\t\t\t\telement.removeAttribute(attr.name);\n\t\t\t\t\t} else if (attr.value === true) {\n\t\t\t\t\t\telement.setAttribute(attr.name, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute(attr.name, attr.value as string);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tReflect.set(element, attr.name, attr.value);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack, attr.pipelineNames);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tlet listener: Function;\n\t\t\t\t/**\n\t\t\t\t * <a (click)=\"onLinkClick($event)\"></a>\n\t\t\t\t * <a @click=\"onLinkClick($event)\"></a>\n\t\t\t\t * <input [(value)]=\"person.name\" />\n\t\t\t\t * <input (value)=\"person.name\" />\n\t\t\t\t * <!-- <input (value)=\"person.name = $event\" /> -->\n\t\t\t\t * \n\t\t\t\t * TODO: diff of event listener and back-way data binding\n\t\t\t\t */\n\t\t\t\tif (typeof event.value === 'string') {\n\t\t\t\t\tlistener = ($event: Event) => {\n\t\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\t\tstack.detach();\n\t\t\t\t\t\tevent.expression.get(stack);\n\t\t\t\t\t\tstack.reattach();\n\t\t\t\t\t};\n\t\t\t\t} else /* if (typeof event.sourceHandler === 'function')*/ {\n\t\t\t\t\t// let eventName: keyof HTMLElementEventMap = event.eventName;\n\t\t\t\t\tlistener = event.value;\n\t\t\t\t}\n\t\t\t\telement.addEventListener(event.name as any, listener as any);\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\treturn subscriptions;\n\t}\n\n\tinitStructuralDirective(\n\t\tdirective: StructuralDirective | AttributeDirective | AttributeOnStructuralDirective,\n\t\tnode: DomStructuralDirectiveNode | DomAttributeDirectiveNode,\n\t\tcontextStack: Stack): ScopeSubscription<ScopeContext>[] {\n\t\tconst subscriptions: ScopeSubscription<ScopeContext>[] = [];\n\n\t\tif (node.attributes?.length) {\n\t\t\tnode.attributes.forEach(attr => Reflect.set(directive, attr.name, attr.value));\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack, attr.pipelineNames);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tconst listener = ($event: Event) => {\n\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\tstack.detach();\n\t\t\t\t\tevent.expression.get(stack);\n\t\t\t\t\tstack.reattach();\n\t\t\t\t};\n\t\t\t\t((<any>directive)[event.name] as any).subscribe(listener);\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\t// TODO: \n\t\t// check host binding\n\t\treturn subscriptions;\n\t}\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tReactiveScope, ScopeContext, ScopeSubscription, Stack\n} from '@ibyar/expressions';\nimport {\n\tCommentNode, DomStructuralDirectiveNode, DomStructuralDirectiveNodeUpgrade,\n\tDomElementNode, DomFragmentNode, DomNode, isLiveTextContent,\n\tisTagNameNative, isValidCustomElementName, LiveTextContent,\n\tTextContent, DomAttributeDirectiveNode\n} from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent, isHTMLComponent } from '../component/custom-element.js';\nimport { documentStack } from '../context/stack.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { isOnDestroy, isOnInit } from '../component/lifecycle.js';\nimport { hasAttr } from '../utils/elements-util.js';\nimport { AttributeDirective, AttributeOnStructuralDirective, StructuralDirective } from '../directive/directive.js';\nimport { TemplateRef, TemplateRefImpl } from '../linker/template-ref.js';\nimport { ViewContainerRefImpl } from '../linker/view-container-ref.js';\nimport { createSubscriptionDestroyer } from '../context/subscription.js';\nimport { HostListenerHandler } from '../render/host-listener.handler.js';\n\ntype ViewScopeContext = { [element: string]: HTMLElement };\n\nfunction getInputEventName(element: HTMLElement): 'input' | 'change' | undefined {\n\tswitch (true) {\n\t\tcase element instanceof HTMLInputElement:\n\t\t\treturn 'input';\n\t\tcase element instanceof HTMLTextAreaElement:\n\t\tcase element instanceof HTMLSelectElement:\n\t\t\treturn 'change';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\nexport class ComponentRender<T extends object> {\n\tprivate componentRef: ComponentRef<T>;\n\tprivate template: DomNode;\n\tprivate contextStack: Stack;\n\tprivate templateNameScope: ReactiveScope<{ [templateName: string]: TemplateRef }>;\n\tprivate viewScope: ReactiveScope<ViewScopeContext> = new ReactiveScope({});\n\n\tconstructor(public view: HTMLComponent<T>, private subscriptions: ScopeSubscription<ScopeContext>[]) {\n\t\tthis.componentRef = this.view.getComponentRef();\n\t\tthis.contextStack = documentStack.copyStack();\n\t\tthis.contextStack.pushScope<ScopeContext>(this.view._modelScope);\n\t\tthis.templateNameScope = this.contextStack.pushReactiveScope();\n\t}\n\tinitView(): void {\n\t\tif (this.componentRef.template) {\n\t\t\tif (typeof this.componentRef.template === 'function') {\n\t\t\t\tthis.template = this.componentRef.template(this.view._model);\n\t\t\t} else {\n\t\t\t\tthis.template = this.componentRef.template;\n\t\t\t}\n\n\t\t\tlet rootRef: HTMLElement | ShadowRoot;\n\t\t\tif (this.componentRef.isShadowDom) {\n\t\t\t\tif (this.view.shadowRoot /* OPEN MODE */) {\n\t\t\t\t\trootRef = this.view.shadowRoot;\n\t\t\t\t} else /* CLOSED MODE*/ {\n\t\t\t\t\trootRef = Reflect.get(this.view, '_shadowRoot') as ShadowRoot;\n\t\t\t\t\tReflect.deleteProperty(this.view, '_shadowRoot');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trootRef = this.view;\n\t\t\t}\n\t\t\tthis.initTemplateRefMap(this.template);\n\t\t\tlet rootFragment: DocumentFragment;\n\t\t\tif (this.template instanceof DomFragmentNode) {\n\t\t\t\trootFragment = this.createDocumentFragment(this.template, this.contextStack, rootRef, this.subscriptions, this.view);\n\t\t\t} else {\n\t\t\t\trootFragment = document.createDocumentFragment();\n\t\t\t\tthis.appendChildToParent(rootFragment, this.template, this.contextStack, rootRef, this.subscriptions, this.view);\n\t\t\t}\n\t\t\trootRef.append(rootFragment);\n\t\t}\n\t}\n\tisTemplateRefName(template: DomNode): template is DomElementNode {\n\t\tif (template instanceof DomElementNode) {\n\t\t\tif (template.tagName === 'template' && template.templateRefName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tinitTemplateRefMap(domNode: DomNode) {\n\t\tif (domNode instanceof DomElementNode || domNode instanceof DomFragmentNode) {\n\t\t\tif (domNode.children) {\n\t\t\t\tfor (let index = 0; index < domNode.children.length; index++) {\n\t\t\t\t\tconst child = domNode.children[index];\n\t\t\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\t\t\tthis.templateNameScope.set(child.templateRefName!.name, undefined);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.initTemplateRefMap(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tinitHostListener(): void {\n\t\tconst handlers = this.componentRef.hostListeners.map(listenerRef => new HostListenerHandler(listenerRef, this.view, this.viewScope));\n\t\thandlers.forEach(handler => handler.onInit());\n\t\thandlers.forEach(handler => this.subscriptions.push(createSubscriptionDestroyer(\n\t\t\t() => handler.onDestroy(),\n\t\t\t() => handler.onDisconnect(),\n\t\t\t() => handler.onConnect(),\n\t\t)));\n\t}\n\taddNativeEventListener(source: HTMLElement | Window, eventName: string, funcCallback: Function) {\n\t\tsource.addEventListener(eventName, (event: Event) => {\n\t\t\tfuncCallback.call(this.view._proxyModel, event);\n\t\t});\n\t}\n\tgetElementByName(name: string) {\n\t\treturn Reflect.get(this.view, name);\n\t}\n\tcreateStructuralDirective(directive: DomStructuralDirectiveNode, comment: Comment, directiveStack: Stack, subscriptions: ScopeSubscription<ScopeContext>[], parentNode: Node, host: HTMLComponent<any> | StructuralDirective): void {\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<T>(directive.name);\n\t\tif (directiveRef) {\n\t\t\tconst stack = directiveStack.copyStack();\n\t\t\tconst templateRef = new TemplateRefImpl(\n\t\t\t\tthis,\n\t\t\t\tdirective.node,\n\t\t\t\tstack,\n\t\t\t\t(directive as DomStructuralDirectiveNodeUpgrade).templateExpressions ?? [],\n\t\t\t);\n\t\t\tconst viewContainerRef = new ViewContainerRefImpl(parentNode as Element, comment);\n\n\t\t\t// structural directive selector\n\t\t\tconst StructuralDirectiveClass = directiveRef.modelClass as typeof StructuralDirective;\n\t\t\tconst structural = new StructuralDirectiveClass(\n\t\t\t\ttemplateRef,\n\t\t\t\tviewContainerRef,\n\t\t\t\thost\n\t\t\t);\n\t\t\ttemplateRef.host = structural;\n\t\t\tstack.pushReactiveScopeFor({ 'this': structural });\n\t\t\tconst dSubs = this.initStructuralDirective(structural, directive, stack);\n\t\t\tsubscriptions.push(...dSubs);\n\t\t\tif (isOnInit(structural)) {\n\t\t\t\tstructural.onInit();\n\t\t\t}\n\t\t\tif (directive.attributeDirectives?.length) {\n\t\t\t\tthis.initAttributeDirectives(directive.attributeDirectives, structural, stack, subscriptions);\n\t\t\t}\n\t\t\tif (isOnDestroy(structural)) {\n\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => structural.onDestroy()));\n\t\t\t}\n\t\t} else {\n\t\t\t// didn't find directive or it is not define yet.\n\t\t\t// class registry should have 'when defined' callback\n\t\t}\n\t}\n\tcreateComment(node: CommentNode): Comment {\n\t\treturn document.createComment(`${node.comment}`);\n\t}\n\tcreateText(node: TextContent): Text {\n\t\treturn new Text(node.value);\n\t}\n\tcreateLiveText(textNode: LiveTextContent, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<ScopeContext>[]): Text {\n\t\tconst liveText = new Text('');\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushBlockScopeFor({ this: liveText });\n\t\tconst textSubscriptions = textNode.expression.subscribe(contextStack, textNode.pipelineNames);\n\t\tsubscriptions.push(...textSubscriptions);\n\t\tcontextStack.detach();\n\t\ttextNode.expression.get(contextStack);\n\t\tcontextStack.reattach();\n\t\treturn liveText;\n\t}\n\tcreateDocumentFragment(node: DomFragmentNode, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<ScopeContext>[], host: HTMLComponent<any> | StructuralDirective): DocumentFragment {\n\t\tconst fragment = document.createDocumentFragment();\n\t\tnode.children?.forEach(child => this.appendChildToParent(fragment, child, contextStack, parentNode, subscriptions, host));\n\t\treturn fragment;\n\t}\n\tappendChildToParent(fragmentParent: HTMLElement | DocumentFragment, child: DomNode, contextStack: Stack, parentNode: Node, subscriptions: ScopeSubscription<ScopeContext>[], host: HTMLComponent<any> | StructuralDirective) {\n\t\tif (child instanceof DomElementNode) {\n\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\tconst templateRefName = child.templateRefName!;\n\t\t\t\t// const oldRef = this.templateNameScope.get(templateRefName.name);\n\t\t\t\t// if (oldRef) {\n\t\t\t\t// \treturn;\n\t\t\t\t// }\n\t\t\t\t// TODO: extract template expression\n\t\t\t\tconst templateRef = new TemplateRefImpl(\n\t\t\t\t\tthis,\n\t\t\t\t\tnew DomFragmentNode(child.children),\n\t\t\t\t\tcontextStack.copyStack(),\n\t\t\t\t\t[]\n\t\t\t\t);\n\t\t\t\tthis.templateNameScope.set(templateRefName.name, templateRef);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfragmentParent.append(this.createElement(child, contextStack, subscriptions, parentNode, host));\n\t\t} else if (child instanceof DomStructuralDirectiveNode) {\n\t\t\tconst commentText = child.name + (typeof child.value == 'string' ? (' = ' + child.value) : '');\n\t\t\tconst comment = document.createComment(`start ${commentText}`);\n\t\t\tfragmentParent.append(comment);\n\t\t\tconst lastComment = document.createComment(`end ${commentText}`);\n\t\t\tcomment.after(lastComment);\n\t\t\tthis.createStructuralDirective(child, comment, contextStack, subscriptions, parentNode, host);\n\t\t} else if (isLiveTextContent(child)) {\n\t\t\tfragmentParent.append(this.createLiveText(child, contextStack, parentNode, subscriptions));\n\t\t} else if (child instanceof TextContent) {\n\t\t\tfragmentParent.append(this.createText(child));\n\t\t} else if (child instanceof CommentNode) {\n\t\t\tfragmentParent.append(this.createComment(child));\n\t\t} else if (child instanceof DomFragmentNode) {\n\t\t\tfragmentParent.append(this.createDocumentFragment(child, contextStack, parentNode, subscriptions, host));\n\t\t}\n\t}\n\tcreateElementByTagName(node: { tagName: string, is?: string }): HTMLElement {\n\t\tlet element: HTMLElement;\n\t\tif (isValidCustomElementName(node.tagName)) {\n\t\t\tconst ViewClass = customElements.get(node.tagName) as ((new () => HTMLElement) | undefined);\n\t\t\tif (ViewClass) {\n\t\t\t\telement = new ViewClass();\n\t\t\t} else {\n\t\t\t\telement = document.createElement(node.tagName);\n\t\t\t\tif (element.constructor.name === 'HTMLElement') {\n\t\t\t\t\tcustomElements.whenDefined(node.tagName).then(() => customElements.upgrade(element));\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isTagNameNative(node.tagName)) {\n\t\t\t// native tags // and custom tags can be used her\n\t\t\telement = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);\n\t\t} else {\n\t\t\t// html unknown element\n\t\t\telement = document.createElement(node.tagName);\n\t\t}\n\t\tif (isHTMLComponent(element)) {\n\t\t\telement.setParentComponent(this.view);\n\t\t}\n\t\treturn element;\n\t}\n\tcreateElement(node: DomElementNode, contextStack: Stack, subscriptions: ScopeSubscription<ScopeContext>[], parentNode: Node, host: HTMLComponent<any> | StructuralDirective): HTMLElement {\n\t\tconst element = this.createElementByTagName(node);\n\t\tconst elementStack = contextStack.copyStack();\n\t\tconst elementScope = isHTMLComponent(element) ? element._viewScope : elementStack.pushReactiveScopeFor({ 'this': element });\n\t\telementStack.pushScope<ScopeContext>(elementScope);\n\t\tconst attributesSubscriptions = this.initAttribute(element, node, elementStack);\n\t\tsubscriptions.push(...attributesSubscriptions);\n\t\tconst eventName = getInputEventName(element);\n\t\tlet listener: ((event: HTMLElementEventMap['input' | 'change']) => any) | undefined;\n\t\tif (eventName) {\n\t\t\tconst inputScope = elementScope.getScopeOrCreat('this');\n\t\t\tlistener = (event) => inputScope.emit('value', (element as HTMLInputElement).value);\n\t\t\telement.addEventListener(eventName, listener);\n\t\t}\n\n\t\tconst templateRefName = node.templateRefName;\n\t\tif (templateRefName) {\n\t\t\tReflect.set(this.view, templateRefName.name, element);\n\t\t\tthis.viewScope.set(templateRefName.name, element);\n\t\t\tconst view = this.componentRef.viewChild.find(child => child.selector === templateRefName.name);\n\t\t\tif (view) {\n\t\t\t\tReflect.set(this.view._model, view.modelName, element);\n\t\t\t}\n\t\t}\n\t\tif (node.children) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tthis.appendChildToParent(element, child, elementStack, element, subscriptions, host);\n\t\t\t}\n\t\t}\n\t\tif (node.attributeDirectives?.length) {\n\t\t\tthis.initAttributeDirectives(node.attributeDirectives, element, contextStack, subscriptions);\n\t\t}\n\t\treturn element;\n\t}\n\tprivate initAttributeDirectives(\n\t\tattributeDirectives: DomAttributeDirectiveNode[],\n\t\telement: HTMLElement | StructuralDirective,\n\t\tcontextStack: Stack, subscriptions: ScopeSubscription<ScopeContext>[]) {\n\t\tattributeDirectives?.forEach(directiveNode => {\n\t\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<any>(directiveNode.name);\n\t\t\tif (directiveRef &&\n\t\t\t\t(directiveRef.modelClass.prototype instanceof AttributeDirective\n\t\t\t\t\t|| directiveRef.modelClass.prototype instanceof AttributeOnStructuralDirective\n\t\t\t\t)) {\n\t\t\t\tconst directive = new directiveRef.modelClass(element) as AttributeDirective | AttributeOnStructuralDirective;\n\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\tstack.pushReactiveScopeFor({ 'this': directive });\n\t\t\t\tconst directiveSubscriptions = this.initStructuralDirective(directive, directiveNode, stack);\n\t\t\t\tsubscriptions.push(...directiveSubscriptions);\n\t\t\t\tif (isOnInit(directive)) {\n\t\t\t\t\tdirective.onInit();\n\t\t\t\t}\n\t\t\t\tif (isOnDestroy(directive)) {\n\t\t\t\t\tsubscriptions.push(createSubscriptionDestroyer(() => directive.onDestroy()));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tinitAttribute(element: HTMLElement, node: DomElementNode, contextStack: Stack): ScopeSubscription<ScopeContext>[] {\n\t\tconst subscriptions: ScopeSubscription<ScopeContext>[] = [];\n\t\tif (node.attributes?.length) {\n\t\t\tnode.attributes.forEach(attr => {\n\t\t\t\t/**\n\t\t\t\t * <input id=\"23\" name=\"person-name\" />\n\t\t\t\t */\n\t\t\t\tconst isAttr = hasAttr(element, attr.name);\n\t\t\t\tif (isAttr) {\n\t\t\t\t\tif (attr.value === false) {\n\t\t\t\t\t\telement.removeAttribute(attr.name);\n\t\t\t\t\t} else if (attr.value === true) {\n\t\t\t\t\t\telement.setAttribute(attr.name, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute(attr.name, attr.value as string);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tReflect.set(element, attr.name, attr.value);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack, attr.pipelineNames);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tlet listener: Function;\n\t\t\t\t/**\n\t\t\t\t * <a (click)=\"onLinkClick($event)\"></a>\n\t\t\t\t * <a @click=\"onLinkClick($event)\"></a>\n\t\t\t\t * <input [(value)]=\"person.name\" />\n\t\t\t\t * <input (value)=\"person.name\" />\n\t\t\t\t * <!-- <input (value)=\"person.name = $event\" /> -->\n\t\t\t\t * \n\t\t\t\t * TODO: diff of event listener and back-way data binding\n\t\t\t\t */\n\t\t\t\tif (typeof event.value === 'string') {\n\t\t\t\t\tlistener = ($event: Event) => {\n\t\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\t\tstack.detach();\n\t\t\t\t\t\tevent.expression.get(stack);\n\t\t\t\t\t\tstack.reattach();\n\t\t\t\t\t};\n\t\t\t\t} else /* if (typeof event.sourceHandler === 'function')*/ {\n\t\t\t\t\t// let eventName: keyof HTMLElementEventMap = event.eventName;\n\t\t\t\t\tlistener = event.value;\n\t\t\t\t}\n\t\t\t\telement.addEventListener(event.name as any, listener as any);\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\treturn subscriptions;\n\t}\n\n\tinitStructuralDirective(\n\t\tdirective: StructuralDirective | AttributeDirective | AttributeOnStructuralDirective,\n\t\tnode: DomStructuralDirectiveNode | DomAttributeDirectiveNode,\n\t\tcontextStack: Stack): ScopeSubscription<ScopeContext>[] {\n\t\tconst subscriptions: ScopeSubscription<ScopeContext>[] = [];\n\n\t\tif (node.attributes?.length) {\n\t\t\tnode.attributes.forEach(attr => Reflect.set(directive, attr.name, attr.value));\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack, attr.pipelineNames);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tconst listener = ($event: Event) => {\n\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\tstack.detach();\n\t\t\t\t\tevent.expression.get(stack);\n\t\t\t\t\tstack.reattach();\n\t\t\t\t};\n\t\t\t\t((<any>directive)[event.name] as any).subscribe(listener);\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tconst sub = attr.expression.subscribe(contextStack);\n\t\t\t\tsubscriptions.push(...sub);\n\t\t\t\tcontextStack.detach();\n\t\t\t\tattr.expression.get(contextStack);\n\t\t\t\tcontextStack.reattach();\n\t\t\t});\n\t\t}\n\t\t// TODO: \n\t\t// check host binding\n\t\treturn subscriptions;\n\t}\n\n}\n"]}
|
package/view/view.d.ts
CHANGED
|
@@ -2,6 +2,11 @@ import type { TypeOf } from '../utils/typeof.js';
|
|
|
2
2
|
import { ComponentRef } from '../component/component.js';
|
|
3
3
|
import { HTMLComponent } from '../component/custom-element.js';
|
|
4
4
|
import { Constructable } from '../providers/injector.js';
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @param modelClass
|
|
8
|
+
* @param componentRef
|
|
9
|
+
*/
|
|
5
10
|
export declare function initCustomElementView<T extends Object>(modelClass: TypeOf<T>, componentRef: ComponentRef<T>): TypeOf<HTMLComponent<T>>;
|
|
6
11
|
export declare type ComponentModelClass = Constructable & {
|
|
7
12
|
[key: string]: string;
|
package/view/view.js
CHANGED
|
@@ -2,6 +2,11 @@ import { getAllAttributes, isFormElement } from '@ibyar/elements';
|
|
|
2
2
|
import { ToCamelCase } from '../utils/utils.js';
|
|
3
3
|
import { baseFactoryView } from './base-view.js';
|
|
4
4
|
import { baseFormFactoryView } from './form-view.js';
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @param modelClass
|
|
8
|
+
* @param componentRef
|
|
9
|
+
*/
|
|
5
10
|
export function initCustomElementView(modelClass, componentRef) {
|
|
6
11
|
const htmlParent = componentRef.extend.classRef;
|
|
7
12
|
let viewClass;
|
|
@@ -69,6 +74,7 @@ export function initCustomElementView(modelClass, componentRef) {
|
|
|
69
74
|
const observedAttributes = componentRef.inputs.map(input => input.viewAttribute);
|
|
70
75
|
Reflect.set(viewClass, 'observedAttributes', observedAttributes);
|
|
71
76
|
Reflect.set(viewClass, 'allAttributes', defaultAttributes.concat(observedAttributes));
|
|
77
|
+
// https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example
|
|
72
78
|
if (false) {
|
|
73
79
|
Object.defineProperty(viewClass, 'formAssociated', {
|
|
74
80
|
get() {
|