ember-native 1.3.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/components/InspectorSupport.d.ts +0 -1
- package/declarations/components/ListView.d.ts +2 -1
- package/declarations/components/RadListView.d.ts +3 -1
- package/declarations/components/index.d.ts +0 -1
- package/declarations/dom/element-registry.d.ts +0 -1
- package/declarations/dom/native/FrameElement.d.ts +0 -1
- package/declarations/dom/native/NativeElementNode.d.ts +8 -1
- package/declarations/dom/native/PageElement.d.ts +0 -1
- package/declarations/dom/native-elements-tag-name-map.d.ts +31 -6
- package/declarations/dom/nodes/CommentNode.d.ts +0 -1
- package/declarations/dom/nodes/DocumentNode.d.ts +6 -3
- package/declarations/dom/nodes/ElementNode.d.ts +6 -2
- package/declarations/dom/nodes/PropertyNode.d.ts +2 -4
- package/declarations/dom/nodes/TextNode.d.ts +0 -1
- package/declarations/dom/nodes/ViewNode.d.ts +1 -1
- package/declarations/dom/setup-registry.d.ts +0 -1
- package/declarations/index.d.ts +1 -2
- package/declarations/instance-initializers/history.d.ts +0 -1
- package/declarations/instance-initializers/webpack-hot-reload.d.ts +0 -1
- package/declarations/services/history.d.ts +3 -1
- package/declarations/services/native-router.d.ts +0 -1
- package/declarations/services/webpack-hot-reload.d.ts +0 -1
- package/declarations/setup-inspector-support.d.ts +0 -1
- package/declarations/setup.d.ts +0 -1
- package/declarations/types/glint.d.ts +22 -2
- package/declarations/types/globals.d.ts +28 -31
- package/dist/{_rollupPluginBabelHelpers-DZQzmiRH.js → _rollupPluginBabelHelpers-apNPIsxw.js} +6 -6
- package/dist/_rollupPluginBabelHelpers-apNPIsxw.js.map +1 -0
- package/dist/components/InspectorSupport.js +1 -5
- package/dist/components/InspectorSupport.js.map +1 -1
- package/dist/components/ListView.js +14 -4
- package/dist/components/ListView.js.map +1 -1
- package/dist/components/RadListView.js +24 -4
- package/dist/components/RadListView.js.map +1 -1
- package/dist/dom/native/FrameElement.js +1 -1
- package/dist/dom/native/FrameElement.js.map +1 -1
- package/dist/dom/native/NativeElementNode.js +18 -3
- package/dist/dom/native/NativeElementNode.js.map +1 -1
- package/dist/dom/nodes/CommentNode.js +1 -1
- package/dist/dom/nodes/CommentNode.js.map +1 -1
- package/dist/dom/nodes/DocumentNode.js +18 -6
- package/dist/dom/nodes/DocumentNode.js.map +1 -1
- package/dist/dom/nodes/ElementNode.js +22 -6
- package/dist/dom/nodes/ElementNode.js.map +1 -1
- package/dist/dom/nodes/PropertyNode.js +7 -10
- package/dist/dom/nodes/PropertyNode.js.map +1 -1
- package/dist/dom/nodes/TextNode.js +1 -1
- package/dist/dom/nodes/TextNode.js.map +1 -1
- package/dist/dom/nodes/ViewNode.js +9 -2
- package/dist/dom/nodes/ViewNode.js.map +1 -1
- package/dist/dom/setup-registry.js +1 -2
- package/dist/dom/setup-registry.js.map +1 -1
- package/dist/services/history.js +9 -6
- package/dist/services/history.js.map +1 -1
- package/dist/services/native-router.js +1 -1
- package/dist/services/webpack-hot-reload.js +1 -1
- package/dist/setup-inspector-support.js +1 -1
- package/dist/setup-inspector-support.js.map +1 -1
- package/dist/setup.js +38 -0
- package/dist/setup.js.map +1 -1
- package/dist/utils/babel-plugin.js +14 -20
- package/dist/utils/babel-plugin.ts +0 -2
- package/dist/utils/content-tag-loader.js +1 -1
- package/dist/utils/ember-native.js +2 -0
- package/dist/utils/eslint/ember-native.js +2 -0
- package/dist/utils/tsconfig.json +3 -2
- package/dist/utils/webpack.config.js +0 -1
- package/package.json +46 -44
- package/declarations/components/InspectorSupport.d.ts.map +0 -1
- package/declarations/components/ListView.d.ts.map +0 -1
- package/declarations/components/RadListView.d.ts.map +0 -1
- package/declarations/components/index.d.ts.map +0 -1
- package/declarations/dom/element-registry.d.ts.map +0 -1
- package/declarations/dom/native/FrameElement.d.ts.map +0 -1
- package/declarations/dom/native/NativeElementNode.d.ts.map +0 -1
- package/declarations/dom/native/PageElement.d.ts.map +0 -1
- package/declarations/dom/native-elements-tag-name-map.d.ts.map +0 -1
- package/declarations/dom/nodes/CommentNode.d.ts.map +0 -1
- package/declarations/dom/nodes/DocumentNode.d.ts.map +0 -1
- package/declarations/dom/nodes/ElementNode.d.ts.map +0 -1
- package/declarations/dom/nodes/PropertyNode.d.ts.map +0 -1
- package/declarations/dom/nodes/TextNode.d.ts.map +0 -1
- package/declarations/dom/nodes/ViewNode.d.ts.map +0 -1
- package/declarations/dom/setup-registry.d.ts.map +0 -1
- package/declarations/index.d.ts.map +0 -1
- package/declarations/instance-initializers/history.d.ts.map +0 -1
- package/declarations/instance-initializers/webpack-hot-reload.d.ts.map +0 -1
- package/declarations/services/history.d.ts.map +0 -1
- package/declarations/services/native-router.d.ts.map +0 -1
- package/declarations/services/webpack-hot-reload.d.ts.map +0 -1
- package/declarations/setup-inspector-support.d.ts.map +0 -1
- package/declarations/setup.d.ts.map +0 -1
- package/declarations/types/glint.d.ts.map +0 -1
- package/declarations/types/globals.d.ts.map +0 -1
- package/dist/_rollupPluginBabelHelpers-DZQzmiRH.js.map +0 -1
- package/dist/utils/fix-glimmer-content-owner.js +0 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as _applyDecoratedDescriptor,
|
|
1
|
+
import { a as _applyDecoratedDescriptor, _ as _defineProperty, b as _initializerDefineProperty } from '../_rollupPluginBabelHelpers-apNPIsxw.js';
|
|
2
2
|
import Component from '@glimmer/component';
|
|
3
3
|
import { modifier } from 'ember-modifier';
|
|
4
4
|
import { tracked } from '@glimmer/tracking';
|
|
@@ -39,13 +39,15 @@ let RadListView = (_class2 = (_RadListView = class RadListView extends Component
|
|
|
39
39
|
super(...args);
|
|
40
40
|
_defineProperty(this, "elementRefs", new TrackedMap());
|
|
41
41
|
_initializerDefineProperty(this, "listView", _descriptor2, this);
|
|
42
|
-
_defineProperty(this, "headerElement", void 0);
|
|
43
|
-
_defineProperty(this, "footerElement", void 0);
|
|
44
42
|
_defineProperty(this, "setupListView", modifier(function setupListView(listView) {
|
|
45
43
|
this.listView = listView;
|
|
44
|
+
listView.nativeView.on('itemRecyclingInternal', () => {
|
|
45
|
+
this.cleanup(listView);
|
|
46
|
+
});
|
|
46
47
|
const listViewComponent = this;
|
|
47
48
|
function _getDefaultItemContent() {
|
|
48
49
|
const sl = DocumentNode.createElement('stack-layout');
|
|
50
|
+
listView.appendChild(sl);
|
|
49
51
|
Object.defineProperty(sl.nativeView, 'parent', {
|
|
50
52
|
get() {
|
|
51
53
|
return this._parent;
|
|
@@ -83,6 +85,24 @@ let RadListView = (_class2 = (_RadListView = class RadListView extends Component
|
|
|
83
85
|
this.footerElement = DocumentNode.createElement('stack-layout');
|
|
84
86
|
});
|
|
85
87
|
}
|
|
88
|
+
cleanup(listView) {
|
|
89
|
+
for (const [element] of [...this.elementRefs.entries()]) {
|
|
90
|
+
const n = element.nativeView.nativeViewProtected;
|
|
91
|
+
if (!n || !n.getWindowToken()) {
|
|
92
|
+
this.elementRefs.delete(element);
|
|
93
|
+
const idx = listView.childNodes.findIndex(c => c === element);
|
|
94
|
+
if (idx >= 0) {
|
|
95
|
+
listView.childNodes.splice(idx, 1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
get itemKey() {
|
|
101
|
+
if (this.args.key) {
|
|
102
|
+
return 'item.' + this.args.key;
|
|
103
|
+
}
|
|
104
|
+
return 'item';
|
|
105
|
+
}
|
|
86
106
|
get items() {
|
|
87
107
|
return [...this.elementRefs.entries()].map(([element, item]) => {
|
|
88
108
|
return {
|
|
@@ -91,7 +111,7 @@ let RadListView = (_class2 = (_RadListView = class RadListView extends Component
|
|
|
91
111
|
};
|
|
92
112
|
});
|
|
93
113
|
}
|
|
94
|
-
}, setComponentTemplate(precompileTemplate("\n <rad-list-view {{this.setupListView}} items={{@items}} ...attributes />\n {{#if this.listView}}\n {{#if (has-block \"header\")}}\n {{this.setupHeader}}\n {{#in-element this.headerElement}}\n {{yield to=\"header\"}}\n {{/in-element}}\n {{/if}}\n {{#each this.items as |item|}}\n {{#in-element item.element}}\n {{yield item.item to=\"item\"}}\n {{/in-element}}\n {{/each}}\n {{#if (has-block \"footer\")}}\n {{this.setupFooter}}\n {{#in-element this.footerElement}}\n {{yield to=\"footer\"}}\n {{/in-element}}\n {{/if}}\n {{/if}}\n ", {
|
|
114
|
+
}, setComponentTemplate(precompileTemplate("\n <rad-list-view {{this.setupListView}} items={{@items}} ...attributes />\n {{#if this.listView}}\n {{#if (has-block \"header\")}}\n {{this.setupHeader}}\n {{#in-element this.headerElement}}\n {{yield to=\"header\"}}\n {{/in-element}}\n {{/if}}\n {{#each this.items key=this.itemKey as |item|}}\n {{#in-element item.element}}\n {{yield item.item to=\"item\"}}\n {{/in-element}}\n {{/each}}\n {{#if (has-block \"footer\")}}\n {{this.setupFooter}}\n {{#in-element this.footerElement}}\n {{yield to=\"footer\"}}\n {{/in-element}}\n {{/if}}\n {{/if}}\n ", {
|
|
95
115
|
strictMode: true
|
|
96
116
|
}), _RadListView), _RadListView), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "listView", [tracked], {
|
|
97
117
|
configurable: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadListView.js","sources":["../../src/components/RadListView.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { tracked } from '@glimmer/tracking';\nimport {\n RadListView as NativeRadListView,\n ListViewViewType,\n} from 'nativescript-ui-listview';\nimport NativeElementNode from '../dom/native/NativeElementNode.ts';\nimport DocumentNode from '../dom/nodes/DocumentNode.ts';\nimport type { StackLayout } from '@nativescript/core';\n\nclass TrackedMap extends Map<any, any> {\n @tracked counter = 0;\n set(key: any, value: any): this {\n this.counter += 1;\n super.set(key, value);\n return this;\n }\n\n get(key: any): any {\n if (this.counter === 0) return null;\n return super.get(key);\n }\n\n entries(): any {\n if (this.counter === 0) return super.entries();\n return super.entries();\n }\n}\n\ninterface RadListViewInterface<T> {\n Element: NativeElementNode<NativeRadListView>;\n Args: {\n items: T[];\n };\n Blocks: {\n header: [];\n footer: [];\n item: [T];\n };\n}\n\nexport default class RadListView<T = any> extends Component<\n RadListViewInterface<T>\n> {\n elementRefs: TrackedMap = new TrackedMap();\n @tracked private listView: NativeElementNode<NativeRadListView> | undefined;\n private declare headerElement: NativeElementNode<StackLayout>;\n private declare footerElement: NativeElementNode<StackLayout>;\n\n get items() {\n return [...this.elementRefs.entries()].map(([element, item]) => {\n return {\n item,\n element,\n };\n });\n }\n\n setupListView = modifier(\n function setupListView(\n this: RadListView,\n listView: NativeElementNode<NativeRadListView>,\n ) {\n this.listView = listView;\n const listViewComponent = this;\n function _getDefaultItemContent() {\n const sl = DocumentNode.createElement('stack-layout');\n Object.defineProperty(sl.nativeView, 'parent', {\n get() {\n return this._parent;\n },\n set(v: any) {\n this._parent = v;\n Object.defineProperty(v, 'bindingContext', {\n get() {\n return listViewComponent.elementRefs.get(sl);\n },\n set(v: any) {\n listViewComponent.elementRefs.set(sl, v);\n },\n });\n },\n });\n return sl.nativeView;\n }\n listView.nativeView.itemViewLoader = (type) => {\n switch (type) {\n case ListViewViewType.ItemView:\n return _getDefaultItemContent();\n case ListViewViewType.HeaderView:\n return this.headerElement.nativeView;\n case ListViewViewType.FooterView:\n return this.footerElement.nativeView;\n }\n return DocumentNode.createElement('stack-layout').nativeView;\n };\n }.bind(this),\n );\n\n setupHeader = () => {\n this.headerElement = DocumentNode.createElement('stack-layout');\n };\n\n setupFooter = () => {\n this.footerElement = DocumentNode.createElement('stack-layout');\n };\n\n <template>\n <rad-list-view {{this.setupListView}} items={{@items}} ...attributes />\n {{#if this.listView}}\n {{#if (has-block 'header')}}\n {{this.setupHeader}}\n {{#in-element this.headerElement}}\n {{yield to='header'}}\n {{/in-element}}\n {{/if}}\n {{#each this.items as |item|}}\n {{#in-element item.element}}\n {{yield item.item to='item'}}\n {{/in-element}}\n {{/each}}\n {{#if (has-block 'footer')}}\n {{this.setupFooter}}\n {{#in-element this.footerElement}}\n {{yield to='footer'}}\n {{/in-element}}\n {{/if}}\n {{/if}}\n </template>\n}\n"],"names":["TrackedMap","_class","Map","constructor","args","_initializerDefineProperty","_descriptor","set","key","value","counter","get","entries","_applyDecoratedDescriptor","prototype","tracked","RadListView","_class2","_RadListView","Component","_defineProperty","_descriptor2","modifier","setupListView","listView","listViewComponent","_getDefaultItemContent","sl","DocumentNode","createElement","
|
|
1
|
+
{"version":3,"file":"RadListView.js","sources":["../../src/components/RadListView.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { tracked } from '@glimmer/tracking';\nimport {\n RadListView as NativeRadListView,\n ListViewViewType,\n} from 'nativescript-ui-listview';\nimport NativeElementNode from '../dom/native/NativeElementNode.ts';\nimport DocumentNode from '../dom/nodes/DocumentNode.ts';\nimport type { StackLayout } from '@nativescript/core';\n\nclass TrackedMap extends Map<any, any> {\n @tracked counter = 0;\n set(key: any, value: any): this {\n this.counter += 1;\n super.set(key, value);\n return this;\n }\n\n get(key: any): any {\n if (this.counter === 0) return null;\n return super.get(key);\n }\n\n entries(): any {\n if (this.counter === 0) return super.entries();\n return super.entries();\n }\n}\n\ninterface RadListViewInterface<T> {\n Element: NativeElementNode<NativeRadListView>;\n Args: {\n items: T[];\n key?: string;\n };\n Blocks: {\n header: [];\n footer: [];\n item: [T];\n };\n}\n\nexport default class RadListView<T = any> extends Component<\n RadListViewInterface<T>\n> {\n elementRefs: TrackedMap = new TrackedMap();\n @tracked private listView: NativeElementNode<NativeRadListView> | undefined;\n private declare headerElement: NativeElementNode<StackLayout>;\n private declare footerElement: NativeElementNode<StackLayout>;\n\n cleanup(listView: NativeElementNode<NativeRadListView>) {\n for (const [element] of [...this.elementRefs.entries()]) {\n const n = element.nativeView.nativeViewProtected;\n if (!n || !n.getWindowToken()) {\n this.elementRefs.delete(element);\n const idx = listView.childNodes.findIndex((c) => c === element);\n if (idx >= 0) {\n listView.childNodes.splice(idx, 1);\n }\n }\n }\n }\n\n get itemKey() {\n if (this.args.key) {\n return 'item.' + this.args.key;\n }\n return 'item';\n }\n\n get items() {\n return [...this.elementRefs.entries()].map(([element, item]) => {\n return {\n item,\n element,\n };\n });\n }\n\n setupListView = modifier(\n function setupListView(\n this: RadListView,\n listView: NativeElementNode<NativeRadListView>,\n ) {\n this.listView = listView;\n listView.nativeView.on('itemRecyclingInternal', () => {\n this.cleanup(listView);\n });\n const listViewComponent = this;\n function _getDefaultItemContent() {\n const sl = DocumentNode.createElement('stack-layout');\n listView.appendChild(sl);\n Object.defineProperty(sl.nativeView, 'parent', {\n get() {\n return this._parent;\n },\n set(v: any) {\n this._parent = v;\n Object.defineProperty(v, 'bindingContext', {\n get() {\n return listViewComponent.elementRefs.get(sl);\n },\n set(v: any) {\n listViewComponent.elementRefs.set(sl, v);\n },\n });\n },\n });\n return sl.nativeView;\n }\n listView.nativeView.itemViewLoader = (type) => {\n switch (type) {\n case ListViewViewType.ItemView:\n return _getDefaultItemContent();\n case ListViewViewType.HeaderView:\n return this.headerElement.nativeView;\n case ListViewViewType.FooterView:\n return this.footerElement.nativeView;\n }\n return DocumentNode.createElement('stack-layout').nativeView;\n };\n }.bind(this),\n );\n\n setupHeader = () => {\n this.headerElement = DocumentNode.createElement('stack-layout');\n };\n\n setupFooter = () => {\n this.footerElement = DocumentNode.createElement('stack-layout');\n };\n\n <template>\n <rad-list-view {{this.setupListView}} items={{@items}} ...attributes />\n {{#if this.listView}}\n {{#if (has-block 'header')}}\n {{this.setupHeader}}\n {{#in-element this.headerElement}}\n {{yield to='header'}}\n {{/in-element}}\n {{/if}}\n {{#each this.items key=this.itemKey as |item|}}\n {{#in-element item.element}}\n {{yield item.item to='item'}}\n {{/in-element}}\n {{/each}}\n {{#if (has-block 'footer')}}\n {{this.setupFooter}}\n {{#in-element this.footerElement}}\n {{yield to='footer'}}\n {{/in-element}}\n {{/if}}\n {{/if}}\n </template>\n}\n"],"names":["TrackedMap","_class","Map","constructor","args","_initializerDefineProperty","_descriptor","set","key","value","counter","get","entries","_applyDecoratedDescriptor","prototype","tracked","RadListView","_class2","_RadListView","Component","_defineProperty","_descriptor2","modifier","setupListView","listView","nativeView","on","cleanup","listViewComponent","_getDefaultItemContent","sl","DocumentNode","createElement","appendChild","Object","defineProperty","_parent","v","elementRefs","itemViewLoader","type","ListViewViewType","ItemView","HeaderView","headerElement","FooterView","footerElement","bind","setupHeader","setupFooter","element","n","nativeViewProtected","getWindowToken","delete","idx","childNodes","findIndex","c","splice","itemKey","items","map","item","setComponentTemplate","template_fd9b2463e5f141cfb5666b64daa1f11a","strictMode"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as _defineProperty } from '../../_rollupPluginBabelHelpers-
|
|
1
|
+
import { _ as _defineProperty } from '../../_rollupPluginBabelHelpers-apNPIsxw.js';
|
|
2
2
|
import { Frame } from '@nativescript/core/ui/frame';
|
|
3
3
|
import { createElement } from '../element-registry.js';
|
|
4
4
|
import NativeElementNode from './NativeElementNode.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameElement.js","sources":["../../../src/dom/native/FrameElement.ts"],"sourcesContent":["import { Frame } from '@nativescript/core/ui/frame';\nimport type { NavigationTransition, View } from '@nativescript/core';\n\nimport { createElement } from '../element-registry.ts';\nimport ViewNode from '../nodes/ViewNode.ts';\nimport NativeElementNode from './NativeElementNode.ts';\nimport { Page } from '@nativescript/core/ui/page';\n\nlet nextTransition: {\n transition: NavigationTransition | undefined;\n animated: boolean | undefined;\n} | null = null;\nexport function setNextTransition(\n transition?: NavigationTransition,\n animated = true,\n) {\n nextTransition = { transition, animated };\n}\n\nexport default class FrameElement extends NativeElementNode {\n currentPage: any;\n\n constructor() {\n super('frame', Frame, null);\n }\n\n setAttribute(key: string, value: any) {\n if (key.toLowerCase() == 'defaultpage') {\n const dummy = createElement('fragment');\n (this.nativeView as Frame).navigate({\n create: () =>\n (dummy.firstElement() as NativeElementNode).nativeView as View,\n });\n }\n super.setAttribute(key, value);\n }\n\n get nativeView(): Frame {\n return super.nativeView as Frame;\n }\n\n set nativeView(view: Frame) {\n super.nativeView = view;\n }\n\n //In regular native script, Frame elements aren't meant to have children, we instead allow it to have one.. a page.. as a convenience\n // and set the instance as the default page by navigating to it.\n appendChild(childNode: ViewNode) {\n //only handle page nodes\n if (\n childNode instanceof NativeElementNode &&\n childNode.nativeView instanceof Page\n ) {\n this.currentPage = childNode.nativeView;\n this.nativeView.navigate({\n create: () => childNode.nativeView,\n clearHistory: true,\n backstackVisible: false,\n transition: nextTransition?.transition || {},\n animated: nextTransition?.animated,\n });\n nextTransition = null;\n }\n super.appendChild(childNode);\n return;\n }\n\n onInsertedChild(childNode: ViewNode) {\n if (\n childNode instanceof NativeElementNode &&\n childNode.nativeView instanceof Page &&\n this.currentPage !== childNode.nativeView\n ) {\n this.nativeView.navigate({\n create: () => childNode.nativeView,\n clearHistory: true,\n backstackVisible: false,\n transition: nextTransition?.transition || {},\n animated: nextTransition?.animated,\n });\n nextTransition = null;\n }\n }\n\n removeChild(childNode: NativeElementNode) {\n if (!childNode) {\n return;\n }\n\n if (!childNode.parentNode) {\n return;\n }\n\n if (childNode.parentNode !== this) {\n return;\n }\n\n childNode.parentNode = null;\n\n // reset the prevSibling and nextSibling. If not, a keep-alived component will\n // still have a filled nextSibling attribute so vue will not\n // insert the node again to the parent. See #220\n childNode.prevSibling = null;\n childNode.nextSibling = null;\n\n this.childNodes = this.childNodes.filter((node) => node !== childNode);\n childNode.removeChildren();\n this.onRemovedChild(childNode);\n }\n}\n"],"names":["nextTransition","setNextTransition","transition","animated","FrameElement","NativeElementNode","constructor","Frame","_defineProperty","setAttribute","key","value","toLowerCase","dummy","createElement","nativeView","navigate","create","firstElement","view","appendChild","childNode","Page","currentPage","clearHistory","backstackVisible","onInsertedChild","removeChild","parentNode","prevSibling","nextSibling","childNodes","filter","node","removeChildren","onRemovedChild"],"mappings":";;;;;;AAQA,IAAIA,cAGI,GAAG,IAAI;AACR,SAASC,iBAAiBA,CAC/BC,UAAiC,EACjCC,QAAQ,GAAG,IAAI,EACf;AACAH,EAAAA,cAAc,GAAG;IAAEE,UAAU;AAAEC,IAAAA;GAAU;AAC3C;AAEe,MAAMC,YAAY,SAASC,iBAAiB,CAAC;AAG1DC,EAAAA,WAAWA,GAAG;AACZ,IAAA,KAAK,CAAC,OAAO,EAAEC,KAAK,EAAE,IAAI,CAAC;IAAAC,eAAA,CAAA,IAAA,EAAA,aAAA,EAAA,
|
|
1
|
+
{"version":3,"file":"FrameElement.js","sources":["../../../src/dom/native/FrameElement.ts"],"sourcesContent":["import { Frame } from '@nativescript/core/ui/frame';\nimport type { NavigationTransition, View } from '@nativescript/core';\n\nimport { createElement } from '../element-registry.ts';\nimport ViewNode from '../nodes/ViewNode.ts';\nimport NativeElementNode from './NativeElementNode.ts';\nimport { Page } from '@nativescript/core/ui/page';\n\nlet nextTransition: {\n transition: NavigationTransition | undefined;\n animated: boolean | undefined;\n} | null = null;\nexport function setNextTransition(\n transition?: NavigationTransition,\n animated = true,\n) {\n nextTransition = { transition, animated };\n}\n\nexport default class FrameElement extends NativeElementNode {\n currentPage: any;\n\n constructor() {\n super('frame', Frame, null);\n }\n\n setAttribute(key: string, value: any) {\n if (key.toLowerCase() == 'defaultpage') {\n const dummy = createElement('fragment');\n (this.nativeView as Frame).navigate({\n create: () =>\n (dummy.firstElement() as NativeElementNode).nativeView as View,\n });\n }\n super.setAttribute(key, value);\n }\n\n get nativeView(): Frame {\n return super.nativeView as Frame;\n }\n\n set nativeView(view: Frame) {\n super.nativeView = view;\n }\n\n //In regular native script, Frame elements aren't meant to have children, we instead allow it to have one.. a page.. as a convenience\n // and set the instance as the default page by navigating to it.\n appendChild(childNode: ViewNode) {\n //only handle page nodes\n if (\n childNode instanceof NativeElementNode &&\n childNode.nativeView instanceof Page\n ) {\n this.currentPage = childNode.nativeView;\n this.nativeView.navigate({\n create: () => childNode.nativeView,\n clearHistory: true,\n backstackVisible: false,\n transition: nextTransition?.transition || {},\n animated: nextTransition?.animated,\n });\n nextTransition = null;\n }\n super.appendChild(childNode);\n return;\n }\n\n onInsertedChild(childNode: ViewNode) {\n if (\n childNode instanceof NativeElementNode &&\n childNode.nativeView instanceof Page &&\n this.currentPage !== childNode.nativeView\n ) {\n this.nativeView.navigate({\n create: () => childNode.nativeView,\n clearHistory: true,\n backstackVisible: false,\n transition: nextTransition?.transition || {},\n animated: nextTransition?.animated,\n });\n nextTransition = null;\n }\n }\n\n removeChild(childNode: NativeElementNode) {\n if (!childNode) {\n return;\n }\n\n if (!childNode.parentNode) {\n return;\n }\n\n if (childNode.parentNode !== this) {\n return;\n }\n\n childNode.parentNode = null;\n\n // reset the prevSibling and nextSibling. If not, a keep-alived component will\n // still have a filled nextSibling attribute so vue will not\n // insert the node again to the parent. See #220\n childNode.prevSibling = null;\n childNode.nextSibling = null;\n\n this.childNodes = this.childNodes.filter((node) => node !== childNode);\n childNode.removeChildren();\n this.onRemovedChild(childNode);\n }\n}\n"],"names":["nextTransition","setNextTransition","transition","animated","FrameElement","NativeElementNode","constructor","Frame","_defineProperty","setAttribute","key","value","toLowerCase","dummy","createElement","nativeView","navigate","create","firstElement","view","appendChild","childNode","Page","currentPage","clearHistory","backstackVisible","onInsertedChild","removeChild","parentNode","prevSibling","nextSibling","childNodes","filter","node","removeChildren","onRemovedChild"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { _ as _defineProperty } from '../../_rollupPluginBabelHelpers-
|
|
1
|
+
import { _ as _defineProperty } from '../../_rollupPluginBabelHelpers-apNPIsxw.js';
|
|
2
2
|
import { KeyframeAnimation } from '@nativescript/core/ui/animation/keyframe-animation';
|
|
3
3
|
import { LayoutBase } from '@nativescript/core/ui/layouts/layout-base';
|
|
4
|
-
import { ContentView, View, isAndroid, isIOS } from '@nativescript/core';
|
|
4
|
+
import { ListView, ContentView, Frame, View, isAndroid, isIOS } from '@nativescript/core';
|
|
5
5
|
import { CssAnimationParser } from '@nativescript/core/ui/styling/css-animation-parser';
|
|
6
6
|
import { TextBase } from '@nativescript/core/ui/text-base';
|
|
7
7
|
import ElementNode from '../nodes/ElementNode.js';
|
|
@@ -217,6 +217,9 @@ class NativeElementNode extends ElementNode {
|
|
|
217
217
|
if (!(parentNode instanceof NativeElementNode) || !(childNode instanceof NativeElementNode) || !parentNode.nativeView || !childNode.nativeView) {
|
|
218
218
|
return;
|
|
219
219
|
}
|
|
220
|
+
if (parentNode.nativeView instanceof ListView) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
220
223
|
if (parentNode.meta && typeof parentNode.meta.insertChild === 'function') {
|
|
221
224
|
//our dom includes "textNode" and "commentNode" which does not appear in the nativeview's children.
|
|
222
225
|
//we recalculate the index required for the insert operation buy only including native element nodes in the count
|
|
@@ -249,7 +252,6 @@ class NativeElementNode extends ElementNode {
|
|
|
249
252
|
parentView.content = childView;
|
|
250
253
|
return;
|
|
251
254
|
}
|
|
252
|
-
throw new Error("Parent can't contain children: " + parentNode + ', ' + childNode);
|
|
253
255
|
}
|
|
254
256
|
onRemovedChild(childNode) {
|
|
255
257
|
const parentNode = this;
|
|
@@ -267,6 +269,9 @@ class NativeElementNode extends ElementNode {
|
|
|
267
269
|
}
|
|
268
270
|
const parentView = parentNode.nativeView;
|
|
269
271
|
const childView = childNode.nativeView;
|
|
272
|
+
if (parentView instanceof Frame) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
270
275
|
if (parentView instanceof LayoutBase) {
|
|
271
276
|
parentView.removeChild(childView);
|
|
272
277
|
} else if (parentView instanceof ContentView) {
|
|
@@ -366,6 +371,16 @@ class NativeElementNode extends ElementNode {
|
|
|
366
371
|
const nw = this.nativeView;
|
|
367
372
|
const point = nw.getLocationInWindow();
|
|
368
373
|
const actualSize = nw.getActualSize();
|
|
374
|
+
if (!point) {
|
|
375
|
+
return {
|
|
376
|
+
left: 0,
|
|
377
|
+
top: 0,
|
|
378
|
+
right: 0,
|
|
379
|
+
bottom: 0,
|
|
380
|
+
width: 0,
|
|
381
|
+
height: 0
|
|
382
|
+
};
|
|
383
|
+
}
|
|
369
384
|
return {
|
|
370
385
|
left: point.x,
|
|
371
386
|
top: point.y,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeElementNode.js","sources":["../../../src/dom/native/NativeElementNode.ts"],"sourcesContent":["import { KeyframeAnimation } from '@nativescript/core/ui/animation/keyframe-animation';\nimport { LayoutBase } from '@nativescript/core/ui/layouts/layout-base';\nimport {\n ContentView,\n type EventData,\n isAndroid,\n isIOS,\n Page,\n View,\n} from '@nativescript/core';\nimport { CssAnimationParser } from '@nativescript/core/ui/styling/css-animation-parser';\nimport { type ViewBase } from '@nativescript/core/ui/core/view-base';\nimport { TextBase } from '@nativescript/core/ui/text-base';\nimport ElementNode from '../nodes/ElementNode.ts';\nimport ViewNode, { type EventListener } from '../nodes/ViewNode.ts';\n\nfunction camelize(kebab: string): string {\n return kebab.replace(/-+(\\w)/g, (_m, l) => l.toUpperCase());\n}\n\nexport interface ComponentMeta {\n skipAddToDom?: boolean;\n insertChild?: (\n parent: NativeElementNode<any>,\n child: NativeElementNode<any>,\n index: number,\n ) => void;\n removeChild?: (parent: NativeElementNode, child: NativeElementNode) => void;\n}\n\nconst defaultViewMeta = {\n skipAddToDom: false,\n};\n\nexport default class NativeElementNode<\n T extends ViewBase | null = ViewBase,\n> extends ElementNode {\n declare _nativeView: T;\n _meta: ComponentMeta;\n\n constructor(\n tagName: string,\n viewClass: typeof View | null,\n meta: ComponentMeta | null = null,\n ) {\n super(tagName);\n\n this.nodeType = 1;\n this.tagName = tagName;\n\n this._meta = Object.assign({}, defaultViewMeta, meta || {});\n\n if (viewClass) {\n this.nativeView = new (viewClass as any)();\n (this._nativeView as any).__GlimmerNativeElement__ = this;\n }\n\n // log.debug(`created ${this} ${this._nativeView}`);\n\n //TODO these style shims mess up the code, extract to external modules\n\n const setStyleAttribute = (value: string): void => {\n this.setAttribute('style', value);\n };\n\n const getStyleAttribute = (): string => {\n return this.getAttribute('style');\n };\n\n const getParentPage = (): NativeElementNode | null => {\n if (this.nativeView && this.nativeView.page) {\n return (this.nativeView.page as any).__GlimmerNativeElement__;\n }\n return null;\n };\n\n const animations: Map<string, KeyframeAnimation | null> = new Map();\n const oldAnimations: KeyframeAnimation[] = [];\n\n const addAnimation = (animation: string) => {\n // log.debug(`Adding animation ${animation}`);\n if (!this.nativeView) {\n throw Error(\n 'Attempt to apply animation to tag without a native view' +\n this.tagName,\n );\n }\n\n const page = getParentPage();\n if (page == null) {\n animations.set(animation, null);\n return;\n }\n\n //quickly cancel any old ones\n while (oldAnimations.length) {\n const oldAnimation = oldAnimations.shift()!;\n if (oldAnimation.isPlaying) {\n oldAnimation.cancel();\n }\n }\n\n //Parse our \"animation\" style property into an animation info instance (this won't include the keyframes from the css)\n const animationInfos =\n CssAnimationParser.keyframeAnimationsFromCSSDeclarations([\n { property: 'animation', value: animation },\n ]);\n if (!animationInfos) {\n animations.set(animation, null);\n return;\n }\n const animationInfo = animationInfos[0]!;\n\n //Fetch an animationInfo instance that includes the keyframes from the css (this won't include the animation properties parsed above)\n const animationWithKeyframes = (\n page.nativeView as Page\n ).getKeyframeAnimationWithName(animationInfo.name!);\n if (!animationWithKeyframes) {\n animations.set(animation, null);\n return;\n }\n\n animationInfo.keyframes = animationWithKeyframes.keyframes;\n //combine the keyframes from the css with the animation from the parsed attribute to get a complete animationInfo object\n const animationInstance =\n KeyframeAnimation.keyframeAnimationFromInfo(animationInfo);\n\n // save and launch the animation\n animations.set(animation, animationInstance);\n animationInstance.play(this.nativeView as View);\n };\n\n const removeAnimation = (animation: string) => {\n // log.debug(`Removing animation ${animation}`);\n if (animations.has(animation)) {\n const animationInstance = animations.get(animation);\n animations.delete(animation);\n\n if (animationInstance) {\n if (animationInstance.isPlaying) {\n //we don't want to stop right away since svelte removes the animation before it is finished due to our lag time starting the animation.\n oldAnimations.push(animationInstance);\n }\n }\n }\n };\n\n this.style = {\n setProperty: (\n propertyName: string,\n value: string /*priority?: string*/,\n ) => {\n this.setStyle(camelize(propertyName), value);\n },\n\n // @ts-expect-error does not exist\n removeProperty: (propertyName: string) => {\n this.setStyle(camelize(propertyName), null);\n },\n\n get animation(): string {\n return [...animations.keys()].join(', ');\n },\n\n set animation(value: string) {\n // log.debug(`setting animation ${value}`);\n const new_animations =\n value.trim() == '' ? [] : value.split(',').map((a) => a.trim());\n //add new ones\n for (const anim of new_animations) {\n if (!animations.has(anim)) {\n addAnimation(anim);\n }\n }\n //remove old ones\n for (const anim of animations.keys()) {\n if (new_animations.indexOf(anim) < 0) {\n removeAnimation(anim);\n }\n }\n },\n\n get cssText(): string {\n // log.debug('got css text');\n return getStyleAttribute();\n },\n\n set cssText(value: string) {\n // log.debug('set css text');\n setStyleAttribute(value);\n },\n };\n }\n\n /* istanbul ignore next */\n setStyle(property: string, value: string | number | null) {\n // log.debug(`setStyle ${this} ${property} ${value}`);\n\n if (!value) return;\n\n if (!(value = value.toString().trim()).length) {\n return;\n }\n\n if (property.endsWith('Align')) {\n // NativeScript uses Alignment instead of Align, this ensures that text-align works\n property += 'ment';\n }\n (this.nativeView!.style as any)[property] = value;\n }\n\n get style() {\n return this.nativeView?.style;\n }\n\n set style(v) {\n Object.assign(this.nativeView?.style || {}, v);\n }\n\n updateText() {\n const hasTextAttr = this.nativeView instanceof TextBase;\n if (hasTextAttr) {\n const t = this.childNodes\n .map((c) => (c as any).text)\n .filter(Boolean)\n .join('');\n this.setAttribute('text', t.trim());\n }\n }\n\n get nativeView() {\n return this._nativeView;\n }\n\n set nativeView(view) {\n this._nativeView = view;\n this.addEventListener('tap', () => globalThis.triggerEvent('click', this));\n }\n\n get meta() {\n return this._meta;\n }\n\n /* istanbul ignore next */\n addEventListener(event: string, handler: EventListener) {\n // log.debug('add event listener', this, event, handler);\n this.nativeView!.on(event, handler);\n }\n\n /* istanbul ignore next */\n removeEventListener(event: string, handler?: EventListener) {\n // log.debug(`remove event listener ${this} ${event}`);\n this.nativeView!.off(event, handler);\n }\n\n getAttribute(fullkey: string) {\n let getTarget = this.nativeView as any;\n\n const keypath = fullkey.split('.');\n const resolvedKeys: string[] = [];\n\n while (keypath.length > 0) {\n if (!getTarget) return null;\n\n let key = keypath.shift()!;\n\n // try to fix case\n const lowerkey = key.toLowerCase();\n for (const realKey in getTarget) {\n if (lowerkey == realKey.toLowerCase()) {\n key = realKey;\n break;\n }\n }\n resolvedKeys.push(key);\n\n if (keypath.length > 0) {\n getTarget = getTarget[key];\n } else {\n return getTarget[key];\n }\n }\n\n return null;\n }\n\n onInsertedChild(childNode: ViewNode, atIndex: number) {\n const parentNode = this;\n if (!parentNode) {\n return;\n }\n\n if (\n !(parentNode instanceof NativeElementNode) ||\n !(childNode instanceof NativeElementNode) ||\n !parentNode.nativeView ||\n !childNode.nativeView\n ) {\n return;\n }\n\n if (parentNode.meta && typeof parentNode.meta.insertChild === 'function') {\n //our dom includes \"textNode\" and \"commentNode\" which does not appear in the nativeview's children.\n //we recalculate the index required for the insert operation buy only including native element nodes in the count\n const nativeIndex = parentNode.childNodes\n .filter((e) => e instanceof NativeElementNode)\n .indexOf(childNode);\n return parentNode.meta.insertChild(parentNode, childNode, nativeIndex);\n }\n\n const parentView = parentNode.nativeView;\n const childView = childNode.nativeView;\n\n //use the builder logic if we aren't being dynamic, to catch config items like <actionbar> that are not likely to be toggled\n if (atIndex < 0 && (parentView as any)._addChildFromBuilder) {\n (parentView as any)._addChildFromBuilder(\n childNode._nativeView.constructor.name,\n childView,\n );\n return;\n }\n\n if (parentView instanceof LayoutBase) {\n if (atIndex >= 0) {\n //our dom includes \"textNode\" and \"commentNode\" which does not appear in the nativeview's children.\n //we recalculate the index required for the insert operation buy only including native element nodes in the count\n const nativeIndex = parentNode.childNodes\n .filter((e) => e instanceof NativeElementNode)\n .indexOf(childNode);\n parentView.insertChild(childView, nativeIndex);\n } else {\n parentView.addChild(childView);\n }\n return;\n }\n\n if ((parentView as any)._addChildFromBuilder) {\n return (parentView as any)._addChildFromBuilder(\n childNode._nativeView.constructor.name,\n childView,\n );\n }\n\n if (parentView instanceof ContentView) {\n parentView.content = childView;\n return;\n }\n\n throw new Error(\n \"Parent can't contain children: \" + parentNode + ', ' + childNode,\n );\n }\n\n onRemovedChild(childNode: ViewNode) {\n const parentNode = this;\n if (!parentNode) {\n return;\n }\n\n if (\n !(parentNode instanceof NativeElementNode) ||\n !(childNode instanceof NativeElementNode) ||\n !parentNode.nativeView ||\n !childNode.nativeView\n ) {\n return;\n }\n\n if (parentNode.meta && typeof parentNode.meta.removeChild === 'function') {\n return parentNode.meta.removeChild(\n parentNode as NativeElementNode,\n childNode as NativeElementNode,\n );\n }\n\n if (!childNode.nativeView || !childNode.nativeView) {\n return;\n }\n\n const parentView = parentNode.nativeView;\n const childView = childNode.nativeView;\n\n if (parentView instanceof LayoutBase) {\n parentView.removeChild(childView);\n } else if (parentView instanceof ContentView) {\n if (parentView.content === childView) {\n (parentView as any).content = null;\n }\n if (childNode.nodeType === 8) {\n parentView._removeView(childView);\n }\n } else if (parentView instanceof View) {\n parentView._removeView(childView);\n } else {\n // throw new Error(\"Unknown parent type: \" + parent);\n }\n }\n\n /* istanbul ignore next */\n setAttribute(fullkey: string, value: any) {\n const nv = this.nativeView as any;\n let setTarget = nv;\n\n // normalize key\n if (isAndroid && fullkey.startsWith('android:')) {\n fullkey = fullkey.substr(8);\n }\n if (isIOS && fullkey.startsWith('ios:')) {\n fullkey = fullkey.substr(4);\n }\n\n //we might be getting an element from a propertyNode eg page.actionBar, unwrap\n if (value instanceof NativeElementNode) {\n value = value.nativeView;\n }\n const keypath = fullkey.split('.');\n const resolvedKeys: string[] = [];\n\n while (keypath.length > 0) {\n if (!setTarget) return;\n let key = keypath.shift()!;\n\n // try to fix case\n const lowerkey = key.toLowerCase();\n for (const realKey in setTarget) {\n if (lowerkey == realKey.toLowerCase()) {\n key = realKey;\n break;\n }\n }\n resolvedKeys.push(key);\n\n if (keypath.length > 0) {\n setTarget = setTarget[key];\n } else {\n try {\n // log.debug(`setAttr ${this} ${resolvedKeys.join('.')} ${value}`);\n setTarget[key] = value;\n } catch (e) {\n // ignore but log\n console.error(\n `set attribute threw an error, attr:${key} on ${this._tagName}: ${(e as any).message}`,\n );\n }\n }\n }\n }\n\n dispatchEvent(event: EventData) {\n if (this.nativeView) {\n //nativescript uses the EventName while dom uses Type\n event.eventName = (event as any).type;\n this.nativeView.notify(event);\n }\n }\n\n clear(node: any) {\n while (node.childNodes.length) {\n this.clear(node.firstChild);\n }\n node.parentNode.removeChild(node);\n }\n\n appendChild(childNode: ViewNode) {\n super.appendChild(childNode);\n if (childNode.nodeType === 3) {\n this.updateText();\n }\n }\n\n insertBefore(childNode: ViewNode, referenceNode: ViewNode) {\n super.insertBefore(childNode, referenceNode);\n if (childNode.nodeType === 3) {\n this.updateText();\n }\n }\n\n removeChild(childNode: ViewNode) {\n super.removeChild(childNode);\n if (childNode.nodeType === 3) {\n this.updateText();\n }\n }\n\n removeChildren() {\n while (this.childNodes.length) {\n this.clear(this.firstChild);\n }\n }\n\n getBoundingClientRect() {\n if (!this.nativeView) return null;\n if (!(this.nativeView as View).getLocationInWindow) return null;\n const nw = this.nativeView as View;\n const point = nw.getLocationInWindow();\n const actualSize = nw.getActualSize();\n return {\n left: point.x,\n top: point.y,\n bottom: point.y + actualSize.height,\n width: actualSize.width,\n height: actualSize.height,\n };\n }\n}\n"],"names":["camelize","kebab","replace","_m","l","toUpperCase","defaultViewMeta","skipAddToDom","NativeElementNode","ElementNode","constructor","tagName","viewClass","meta","_defineProperty","nodeType","_meta","Object","assign","nativeView","_nativeView","__GlimmerNativeElement__","setStyleAttribute","value","setAttribute","getStyleAttribute","getAttribute","getParentPage","page","animations","Map","oldAnimations","addAnimation","animation","Error","set","length","oldAnimation","shift","isPlaying","cancel","animationInfos","CssAnimationParser","keyframeAnimationsFromCSSDeclarations","property","animationInfo","animationWithKeyframes","getKeyframeAnimationWithName","name","keyframes","animationInstance","KeyframeAnimation","keyframeAnimationFromInfo","play","removeAnimation","has","get","delete","push","style","setProperty","propertyName","setStyle","removeProperty","keys","join","new_animations","trim","split","map","a","anim","indexOf","cssText","toString","endsWith","v","updateText","hasTextAttr","TextBase","t","childNodes","c","text","filter","Boolean","view","addEventListener","globalThis","triggerEvent","event","handler","on","removeEventListener","off","fullkey","getTarget","keypath","key","lowerkey","toLowerCase","realKey","onInsertedChild","childNode","atIndex","parentNode","insertChild","nativeIndex","e","parentView","childView","_addChildFromBuilder","LayoutBase","addChild","ContentView","content","onRemovedChild","removeChild","_removeView","View","nv","setTarget","isAndroid","startsWith","substr","isIOS","console","error","_tagName","message","dispatchEvent","eventName","type","notify","clear","node","firstChild","appendChild","insertBefore","referenceNode","removeChildren","getBoundingClientRect","getLocationInWindow","nw","point","actualSize","getActualSize","left","x","top","y","bottom","height","width"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NativeElementNode.js","sources":["../../../src/dom/native/NativeElementNode.ts"],"sourcesContent":["import { KeyframeAnimation } from '@nativescript/core/ui/animation/keyframe-animation';\nimport { LayoutBase } from '@nativescript/core/ui/layouts/layout-base';\nimport {\n ContentView,\n type EventData,\n Frame,\n isAndroid,\n isIOS,\n ListView,\n Page,\n View,\n} from '@nativescript/core';\nimport { CssAnimationParser } from '@nativescript/core/ui/styling/css-animation-parser';\nimport { type ViewBase } from '@nativescript/core/ui/core/view-base';\nimport { TextBase } from '@nativescript/core/ui/text-base';\nimport ElementNode from '../nodes/ElementNode.ts';\nimport ViewNode, { type EventListener } from '../nodes/ViewNode.ts';\n\nfunction camelize(kebab: string): string {\n return kebab.replace(/-+(\\w)/g, (_m, l) => l.toUpperCase());\n}\n\nexport interface ComponentMeta {\n skipAddToDom?: boolean;\n insertChild?: (\n parent: NativeElementNode<any>,\n child: NativeElementNode<any>,\n index: number,\n ) => void;\n removeChild?: (parent: NativeElementNode, child: NativeElementNode) => void;\n}\n\nconst defaultViewMeta = {\n skipAddToDom: false,\n};\n\nexport default class NativeElementNode<\n T extends ViewBase | null = ViewBase,\n> extends ElementNode {\n declare _nativeView: T;\n _meta: ComponentMeta;\n\n constructor(\n tagName: string,\n viewClass: typeof View | null,\n meta: ComponentMeta | null = null,\n ) {\n super(tagName);\n\n this.nodeType = 1;\n this.tagName = tagName;\n\n this._meta = Object.assign({}, defaultViewMeta, meta || {});\n\n if (viewClass) {\n this.nativeView = new (viewClass as any)();\n (this._nativeView as any).__GlimmerNativeElement__ = this;\n }\n\n // log.debug(`created ${this} ${this._nativeView}`);\n\n //TODO these style shims mess up the code, extract to external modules\n\n const setStyleAttribute = (value: string): void => {\n this.setAttribute('style', value);\n };\n\n const getStyleAttribute = (): string => {\n return this.getAttribute('style');\n };\n\n const getParentPage = (): NativeElementNode | null => {\n if (this.nativeView && this.nativeView.page) {\n return (this.nativeView.page as any).__GlimmerNativeElement__;\n }\n return null;\n };\n\n const animations: Map<string, KeyframeAnimation | null> = new Map();\n const oldAnimations: KeyframeAnimation[] = [];\n\n const addAnimation = (animation: string) => {\n // log.debug(`Adding animation ${animation}`);\n if (!this.nativeView) {\n throw Error(\n 'Attempt to apply animation to tag without a native view' +\n this.tagName,\n );\n }\n\n const page = getParentPage();\n if (page == null) {\n animations.set(animation, null);\n return;\n }\n\n //quickly cancel any old ones\n while (oldAnimations.length) {\n const oldAnimation = oldAnimations.shift()!;\n if (oldAnimation.isPlaying) {\n oldAnimation.cancel();\n }\n }\n\n //Parse our \"animation\" style property into an animation info instance (this won't include the keyframes from the css)\n const animationInfos =\n CssAnimationParser.keyframeAnimationsFromCSSDeclarations([\n { property: 'animation', value: animation },\n ]);\n if (!animationInfos) {\n animations.set(animation, null);\n return;\n }\n const animationInfo = animationInfos[0]!;\n\n //Fetch an animationInfo instance that includes the keyframes from the css (this won't include the animation properties parsed above)\n const animationWithKeyframes = (\n page.nativeView as Page\n ).getKeyframeAnimationWithName(animationInfo.name!);\n if (!animationWithKeyframes) {\n animations.set(animation, null);\n return;\n }\n\n animationInfo.keyframes = animationWithKeyframes.keyframes;\n //combine the keyframes from the css with the animation from the parsed attribute to get a complete animationInfo object\n const animationInstance =\n KeyframeAnimation.keyframeAnimationFromInfo(animationInfo);\n\n // save and launch the animation\n animations.set(animation, animationInstance);\n animationInstance.play(this.nativeView as View);\n };\n\n const removeAnimation = (animation: string) => {\n // log.debug(`Removing animation ${animation}`);\n if (animations.has(animation)) {\n const animationInstance = animations.get(animation);\n animations.delete(animation);\n\n if (animationInstance) {\n if (animationInstance.isPlaying) {\n //we don't want to stop right away since svelte removes the animation before it is finished due to our lag time starting the animation.\n oldAnimations.push(animationInstance);\n }\n }\n }\n };\n\n this.style = {\n setProperty: (\n propertyName: string,\n value: string /*priority?: string*/,\n ) => {\n this.setStyle(camelize(propertyName), value);\n },\n\n // @ts-expect-error does not exist\n removeProperty: (propertyName: string) => {\n this.setStyle(camelize(propertyName), null);\n },\n\n get animation(): string {\n return [...animations.keys()].join(', ');\n },\n\n set animation(value: string) {\n // log.debug(`setting animation ${value}`);\n const new_animations =\n value.trim() == '' ? [] : value.split(',').map((a) => a.trim());\n //add new ones\n for (const anim of new_animations) {\n if (!animations.has(anim)) {\n addAnimation(anim);\n }\n }\n //remove old ones\n for (const anim of animations.keys()) {\n if (new_animations.indexOf(anim) < 0) {\n removeAnimation(anim);\n }\n }\n },\n\n get cssText(): string {\n // log.debug('got css text');\n return getStyleAttribute();\n },\n\n set cssText(value: string) {\n // log.debug('set css text');\n setStyleAttribute(value);\n },\n };\n }\n\n /* istanbul ignore next */\n setStyle(property: string, value: string | number | null) {\n // log.debug(`setStyle ${this} ${property} ${value}`);\n\n if (!value) return;\n\n if (!(value = value.toString().trim()).length) {\n return;\n }\n\n if (property.endsWith('Align')) {\n // NativeScript uses Alignment instead of Align, this ensures that text-align works\n property += 'ment';\n }\n (this.nativeView!.style as any)[property] = value;\n }\n\n get style() {\n return this.nativeView?.style;\n }\n\n set style(v) {\n Object.assign(this.nativeView?.style || {}, v);\n }\n\n updateText() {\n const hasTextAttr = this.nativeView instanceof TextBase;\n if (hasTextAttr) {\n const t = this.childNodes\n .map((c) => (c as any).text)\n .filter(Boolean)\n .join('');\n this.setAttribute('text', t.trim());\n }\n }\n\n get nativeView(): T {\n return this._nativeView;\n }\n\n set nativeView(view) {\n this._nativeView = view;\n this.addEventListener('tap', () => globalThis.triggerEvent('click', this));\n }\n\n get meta() {\n return this._meta;\n }\n\n /* istanbul ignore next */\n addEventListener(event: string, handler: EventListener) {\n // log.debug('add event listener', this, event, handler);\n this.nativeView!.on(event, handler);\n }\n\n /* istanbul ignore next */\n removeEventListener(event: string, handler?: EventListener) {\n // log.debug(`remove event listener ${this} ${event}`);\n this.nativeView!.off(event, handler);\n }\n\n getAttribute(fullkey: string) {\n let getTarget = this.nativeView as any;\n\n const keypath = fullkey.split('.');\n const resolvedKeys: string[] = [];\n\n while (keypath.length > 0) {\n if (!getTarget) return null;\n\n let key = keypath.shift()!;\n\n // try to fix case\n const lowerkey = key.toLowerCase();\n for (const realKey in getTarget) {\n if (lowerkey == realKey.toLowerCase()) {\n key = realKey;\n break;\n }\n }\n resolvedKeys.push(key);\n\n if (keypath.length > 0) {\n getTarget = getTarget[key];\n } else {\n return getTarget[key];\n }\n }\n\n return null;\n }\n\n onInsertedChild(childNode: ViewNode, atIndex: number) {\n const parentNode = this;\n if (!parentNode) {\n return;\n }\n\n if (\n !(parentNode instanceof NativeElementNode) ||\n !(childNode instanceof NativeElementNode) ||\n !parentNode.nativeView ||\n !childNode.nativeView\n ) {\n return;\n }\n\n if (parentNode.nativeView instanceof ListView) {\n return;\n }\n\n if (parentNode.meta && typeof parentNode.meta.insertChild === 'function') {\n //our dom includes \"textNode\" and \"commentNode\" which does not appear in the nativeview's children.\n //we recalculate the index required for the insert operation buy only including native element nodes in the count\n const nativeIndex = parentNode.childNodes\n .filter((e) => e instanceof NativeElementNode)\n .indexOf(childNode);\n return parentNode.meta.insertChild(parentNode, childNode, nativeIndex);\n }\n\n const parentView = parentNode.nativeView;\n const childView = childNode.nativeView;\n\n //use the builder logic if we aren't being dynamic, to catch config items like <actionbar> that are not likely to be toggled\n if (atIndex < 0 && (parentView as any)._addChildFromBuilder) {\n (parentView as any)._addChildFromBuilder(\n childNode._nativeView.constructor.name,\n childView,\n );\n return;\n }\n\n if (parentView instanceof LayoutBase) {\n if (atIndex >= 0) {\n //our dom includes \"textNode\" and \"commentNode\" which does not appear in the nativeview's children.\n //we recalculate the index required for the insert operation buy only including native element nodes in the count\n const nativeIndex = parentNode.childNodes\n .filter((e) => e instanceof NativeElementNode)\n .indexOf(childNode);\n parentView.insertChild(childView, nativeIndex);\n } else {\n parentView.addChild(childView);\n }\n return;\n }\n\n if ((parentView as any)._addChildFromBuilder) {\n return (parentView as any)._addChildFromBuilder(\n childNode._nativeView.constructor.name,\n childView,\n );\n }\n\n if (parentView instanceof ContentView) {\n parentView.content = childView;\n return;\n }\n }\n\n onRemovedChild(childNode: ViewNode) {\n const parentNode = this;\n if (!parentNode) {\n return;\n }\n\n if (\n !(parentNode instanceof NativeElementNode) ||\n !(childNode instanceof NativeElementNode) ||\n !parentNode.nativeView ||\n !childNode.nativeView\n ) {\n return;\n }\n\n if (parentNode.meta && typeof parentNode.meta.removeChild === 'function') {\n return parentNode.meta.removeChild(\n parentNode as NativeElementNode,\n childNode as NativeElementNode,\n );\n }\n\n if (!childNode.nativeView || !childNode.nativeView) {\n return;\n }\n\n const parentView = parentNode.nativeView;\n const childView = childNode.nativeView;\n\n if (parentView instanceof Frame) {\n return;\n }\n\n if (parentView instanceof LayoutBase) {\n parentView.removeChild(childView);\n } else if (parentView instanceof ContentView) {\n if (parentView.content === childView) {\n (parentView as any).content = null;\n }\n if (childNode.nodeType === 8) {\n parentView._removeView(childView);\n }\n } else if (parentView instanceof View) {\n parentView._removeView(childView);\n } else {\n // throw new Error(\"Unknown parent type: \" + parent);\n }\n }\n\n /* istanbul ignore next */\n setAttribute(fullkey: string, value: any) {\n const nv = this.nativeView as any;\n let setTarget = nv;\n\n // normalize key\n if (isAndroid && fullkey.startsWith('android:')) {\n fullkey = fullkey.substr(8);\n }\n if (isIOS && fullkey.startsWith('ios:')) {\n fullkey = fullkey.substr(4);\n }\n\n //we might be getting an element from a propertyNode eg page.actionBar, unwrap\n if (value instanceof NativeElementNode) {\n value = value.nativeView;\n }\n const keypath = fullkey.split('.');\n const resolvedKeys: string[] = [];\n\n while (keypath.length > 0) {\n if (!setTarget) return;\n let key = keypath.shift()!;\n\n // try to fix case\n const lowerkey = key.toLowerCase();\n for (const realKey in setTarget) {\n if (lowerkey == realKey.toLowerCase()) {\n key = realKey;\n break;\n }\n }\n resolvedKeys.push(key);\n\n if (keypath.length > 0) {\n setTarget = setTarget[key];\n } else {\n try {\n // log.debug(`setAttr ${this} ${resolvedKeys.join('.')} ${value}`);\n setTarget[key] = value;\n } catch (e) {\n // ignore but log\n console.error(\n `set attribute threw an error, attr:${key} on ${this._tagName}: ${(e as any).message}`,\n );\n }\n }\n }\n }\n\n dispatchEvent(event: EventData) {\n if (this.nativeView) {\n //nativescript uses the EventName while dom uses Type\n event.eventName = (event as any).type;\n this.nativeView.notify(event);\n }\n }\n\n clear(node: any) {\n while (node.childNodes.length) {\n this.clear(node.firstChild);\n }\n node.parentNode.removeChild(node);\n }\n\n appendChild(childNode: ViewNode) {\n super.appendChild(childNode);\n if (childNode.nodeType === 3) {\n this.updateText();\n }\n }\n\n insertBefore(childNode: ViewNode, referenceNode: ViewNode) {\n super.insertBefore(childNode, referenceNode);\n if (childNode.nodeType === 3) {\n this.updateText();\n }\n }\n\n removeChild(childNode: ViewNode) {\n super.removeChild(childNode);\n if (childNode.nodeType === 3) {\n this.updateText();\n }\n }\n\n removeChildren() {\n while (this.childNodes.length) {\n this.clear(this.firstChild);\n }\n }\n\n getBoundingClientRect() {\n if (!this.nativeView) return null;\n if (!(this.nativeView as View).getLocationInWindow) return null;\n const nw = this.nativeView as View;\n const point = nw.getLocationInWindow();\n const actualSize = nw.getActualSize();\n if (!point) {\n return {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0,\n };\n }\n return {\n left: point.x,\n top: point.y,\n bottom: point.y + actualSize.height,\n width: actualSize.width,\n height: actualSize.height,\n };\n }\n}\n"],"names":["camelize","kebab","replace","_m","l","toUpperCase","defaultViewMeta","skipAddToDom","NativeElementNode","ElementNode","constructor","tagName","viewClass","meta","_defineProperty","nodeType","_meta","Object","assign","nativeView","_nativeView","__GlimmerNativeElement__","setStyleAttribute","value","setAttribute","getStyleAttribute","getAttribute","getParentPage","page","animations","Map","oldAnimations","addAnimation","animation","Error","set","length","oldAnimation","shift","isPlaying","cancel","animationInfos","CssAnimationParser","keyframeAnimationsFromCSSDeclarations","property","animationInfo","animationWithKeyframes","getKeyframeAnimationWithName","name","keyframes","animationInstance","KeyframeAnimation","keyframeAnimationFromInfo","play","removeAnimation","has","get","delete","push","style","setProperty","propertyName","setStyle","removeProperty","keys","join","new_animations","trim","split","map","a","anim","indexOf","cssText","toString","endsWith","v","updateText","hasTextAttr","TextBase","t","childNodes","c","text","filter","Boolean","view","addEventListener","globalThis","triggerEvent","event","handler","on","removeEventListener","off","fullkey","getTarget","keypath","key","lowerkey","toLowerCase","realKey","onInsertedChild","childNode","atIndex","parentNode","ListView","insertChild","nativeIndex","e","parentView","childView","_addChildFromBuilder","LayoutBase","addChild","ContentView","content","onRemovedChild","removeChild","Frame","_removeView","View","nv","setTarget","isAndroid","startsWith","substr","isIOS","console","error","_tagName","message","dispatchEvent","eventName","type","notify","clear","node","firstChild","appendChild","insertBefore","referenceNode","removeChildren","getBoundingClientRect","getLocationInWindow","nw","point","actualSize","getActualSize","left","top","right","bottom","width","height","x","y"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentNode.js","sources":["../../../src/dom/nodes/CommentNode.ts"],"sourcesContent":["import ElementNode from './ElementNode.ts';\n\nexport default class CommentNode extends ElementNode {\n nodeType: any;\n text: any;\n constructor(text: any) {\n super('comment');\n\n this.nodeType = 8;\n this.text = text;\n }\n}\n"],"names":["CommentNode","ElementNode","constructor","text","_defineProperty","nodeType"],"mappings":";;;AAEe,MAAMA,WAAW,SAASC,WAAW,CAAC;EAGnDC,WAAWA,CAACC,IAAS,EAAE;IACrB,KAAK,CAAC,SAAS,CAAC;IAAAC,eAAA,CAAA,IAAA,EAAA,UAAA,EAAA,
|
|
1
|
+
{"version":3,"file":"CommentNode.js","sources":["../../../src/dom/nodes/CommentNode.ts"],"sourcesContent":["import ElementNode from './ElementNode.ts';\n\nexport default class CommentNode extends ElementNode {\n nodeType: any;\n text: any;\n constructor(text: any) {\n super('comment');\n\n this.nodeType = 8;\n this.text = text;\n }\n}\n"],"names":["CommentNode","ElementNode","constructor","text","_defineProperty","nodeType"],"mappings":";;;AAEe,MAAMA,WAAW,SAASC,WAAW,CAAC;EAGnDC,WAAWA,CAACC,IAAS,EAAE;IACrB,KAAK,CAAC,SAAS,CAAC;IAAAC,eAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,CAAA;IAEhB,IAAI,CAACC,QAAQ,GAAG,CAAC;IACjB,IAAI,CAACF,IAAI,GAAGA,IAAI;AAClB;AACF;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as _defineProperty } from '../../_rollupPluginBabelHelpers-
|
|
1
|
+
import { _ as _defineProperty } from '../../_rollupPluginBabelHelpers-apNPIsxw.js';
|
|
2
2
|
import { createElement } from '../element-registry.js';
|
|
3
3
|
import CommentNode from './CommentNode.js';
|
|
4
4
|
import ElementNode from './ElementNode.js';
|
|
@@ -52,19 +52,31 @@ class DocumentNode extends ViewNode {
|
|
|
52
52
|
this.appendChild(this.head);
|
|
53
53
|
this.nodeMap = new Map();
|
|
54
54
|
}
|
|
55
|
+
createEvent(eventInterface) {
|
|
56
|
+
const event = {
|
|
57
|
+
eventInterface,
|
|
58
|
+
initEvent(type, bubbles, cancelable) {
|
|
59
|
+
Object.assign(event, {
|
|
60
|
+
type,
|
|
61
|
+
bubbles,
|
|
62
|
+
cancelable
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return event;
|
|
67
|
+
}
|
|
55
68
|
createComment(text) {
|
|
56
69
|
return new CommentNode(text);
|
|
57
70
|
}
|
|
58
|
-
static createPropertyNode(tagName
|
|
59
|
-
return new PropertyNode(tagName
|
|
71
|
+
static createPropertyNode(tagName) {
|
|
72
|
+
return new PropertyNode(tagName);
|
|
60
73
|
}
|
|
61
74
|
createElement(name) {
|
|
62
75
|
return DocumentNode.createElement(name);
|
|
63
76
|
}
|
|
64
77
|
static createElement(tagName) {
|
|
65
|
-
if (tagName
|
|
66
|
-
|
|
67
|
-
return this.createPropertyNode(bits[0], bits[1]);
|
|
78
|
+
if (tagName === 'property') {
|
|
79
|
+
return this.createPropertyNode(tagName);
|
|
68
80
|
}
|
|
69
81
|
const e = createElement(tagName);
|
|
70
82
|
e._ownerDocument = this.getInstance();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentNode.js","sources":["../../../src/dom/nodes/DocumentNode.ts"],"sourcesContent":["import { createElement } from '../element-registry.ts';\nimport CommentNode from './CommentNode.ts';\nimport ElementNode from './ElementNode.ts';\nimport PropertyNode from './PropertyNode.ts';\nimport TextNode from './TextNode.ts';\nimport ViewNode from './ViewNode.ts';\nimport type { NativeElementsTagNameMap } from '../native-elements-tag-name-map.ts';\nimport type PageElement from '../native/PageElement.ts';\nimport NativeElementNode from '../native/NativeElementNode.ts';\n\nfunction* elementIterator(el: any): Generator<any, void, unknown> {\n yield el;\n for (const child of el.childNodes) {\n yield* elementIterator(child);\n }\n}\n\nclass HeadNode extends ElementNode {\n private document: any;\n constructor(tagName: string, document: DocumentNode) {\n super(tagName);\n this.document = document;\n }\n appendChild(childNode: ViewNode) {\n if (childNode.tagName === 'style') {\n this.document.page.nativeView.addCss(\n (childNode.childNodes[0]! as any).text,\n );\n return;\n }\n super.appendChild(childNode);\n }\n}\n\nlet document: DocumentNode | null = null;\n\nexport default class DocumentNode extends ViewNode {\n head: any;\n config: any;\n declare nodeMap: Map<any, any>;\n page: PageElement | undefined;\n body: ElementNode | undefined;\n documentElement = {\n dataset: {},\n };\n\n static getInstance() {\n if (!document) {\n document = new DocumentNode();\n }\n return document;\n }\n\n constructor() {\n if (document) return document;\n super();\n document = this;\n this.tagName = 'docNode';\n this.nodeType = 9;\n this.head = new HeadNode('head', this);\n this.appendChild(this.head);\n this.nodeMap = new Map();\n }\n\n createComment(text: string) {\n return new CommentNode(text);\n }\n\n static createPropertyNode(\n tagName: string,\n propertyName: string,\n ): PropertyNode {\n return new PropertyNode(tagName, propertyName);\n }\n\n createElement(name: string) {\n return DocumentNode.createElement(name as any);\n }\n\n static createElement<T extends keyof NativeElementsTagNameMap>(\n tagName: T,\n ): NativeElementsTagNameMap[T] {\n if (tagName.indexOf('.') >= 0) {\n const bits = tagName.split('.', 2);\n return this.createPropertyNode(bits[0]!, bits[1]!) as any;\n }\n const e = createElement(tagName);\n e._ownerDocument = this.getInstance();\n if (e instanceof NativeElementNode && e.nativeView) {\n this.getInstance().nodeMap.set(e.nativeView._domId, e);\n }\n if (tagName === 'page') {\n this.getInstance().page = e as PageElement;\n\n Object.defineProperty(this.getInstance(), 'body', {\n configurable: true,\n get() {\n const page = this.page;\n return {\n insertAdjacentHTML() {\n return null;\n },\n addEventListener: globalThis.addEventListener.bind(page),\n get lastChild() {\n return null;\n },\n };\n },\n });\n }\n return e;\n }\n\n createElementNS(_namespace: any, tagName: keyof NativeElementsTagNameMap) {\n return DocumentNode.createElement(tagName);\n }\n\n createTextNode(text: string) {\n return new TextNode(text);\n }\n\n addEventListener(event: string, callback: EventListener) {\n if (event === 'DOMContentLoaded') {\n setTimeout(callback, 0);\n return;\n }\n console.error('unsupported event on document', event);\n }\n\n removeEventListener(event: string, handler: EventListener) {\n if (event === 'DOMContentLoaded') {\n return;\n }\n console.error('unsupported event on document', event, handler);\n }\n\n searchDom(node: ViewNode, startNode: ViewNode, endNode: ViewNode) {\n const start = startNode || this.page;\n if (start === node) {\n return true;\n }\n if (node === endNode) {\n return false;\n }\n for (const childNode of start.childNodes) {\n if (this.searchDom(node, childNode, endNode)) {\n return true;\n }\n }\n let sibling: ViewNode | null = node;\n while (sibling) {\n if (this.searchDom(node, sibling, endNode)) {\n return true;\n }\n sibling = sibling.nextSibling;\n }\n return false;\n }\n\n createRange() {\n const self = this;\n return {\n startNode: null as ViewNode | null,\n endNode: null as ViewNode | null,\n setStartBefore(startNode: ViewNode | null) {\n while (startNode && !(startNode as NativeElementNode).nativeView) {\n startNode = startNode.nextSibling;\n }\n this.startNode = startNode;\n },\n setEndAfter(endNode: ViewNode | null) {\n while (endNode && !(endNode as NativeElementNode).nativeView) {\n endNode = endNode.prevSibling;\n }\n this.endNode = endNode;\n },\n isPointInRange(dom: ViewNode): boolean {\n return self.searchDom(dom, this.startNode!, this.endNode!);\n },\n getBoundingClientRect() {\n if (!(this.startNode instanceof NativeElementNode)) return null;\n if (!this.startNode?.nativeView) return null;\n const point = this.startNode.nativeView.getLocationInWindow();\n const size = this.startNode.nativeView.getActualSize();\n let x = point.x;\n let y = point.y;\n let width = size.width;\n let height = size.height;\n for (const element of elementIterator(this.startNode)) {\n const point = element.nativeView.getLocationInWindow();\n const size = element.nativeView.getActualSize();\n x = Math.min(x, point.x);\n y = Math.min(y, point.y);\n width = point.x + size.width - x;\n height = point.y + size.height - y;\n if (element === this.endNode) {\n break;\n }\n }\n return {\n left: x,\n top: y,\n bottom: y + height,\n width,\n height,\n };\n },\n };\n }\n\n querySelectorAll(selector: string) {\n if (selector.startsWith('meta')) {\n const config = this.config;\n return {\n getAttribute(): string {\n return JSON.stringify(config);\n },\n };\n }\n }\n}\n"],"names":["elementIterator","el","child","childNodes","HeadNode","ElementNode","constructor","tagName","document","_defineProperty","appendChild","childNode","page","nativeView","addCss","text","DocumentNode","ViewNode","getInstance","dataset","nodeType","head","nodeMap","Map","createComment","CommentNode","createPropertyNode","propertyName","PropertyNode","createElement","name","indexOf","bits","split","e","_ownerDocument","NativeElementNode","set","_domId","Object","defineProperty","configurable","get","insertAdjacentHTML","addEventListener","globalThis","bind","lastChild","createElementNS","_namespace","createTextNode","TextNode","event","callback","setTimeout","console","error","removeEventListener","handler","searchDom","node","startNode","endNode","start","sibling","nextSibling","createRange","self","setStartBefore","setEndAfter","prevSibling","isPointInRange","dom","getBoundingClientRect","point","getLocationInWindow","size","getActualSize","x","y","width","height","element","Math","min","left","top","bottom","querySelectorAll","selector","startsWith","config","getAttribute","JSON","stringify"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocumentNode.js","sources":["../../../src/dom/nodes/DocumentNode.ts"],"sourcesContent":["import { createElement } from '../element-registry.ts';\nimport CommentNode from './CommentNode.ts';\nimport ElementNode from './ElementNode.ts';\nimport PropertyNode from './PropertyNode.ts';\nimport TextNode from './TextNode.ts';\nimport ViewNode from './ViewNode.ts';\nimport type { NativeElementsTagNameMap } from '../native-elements-tag-name-map.ts';\nimport type PageElement from '../native/PageElement.ts';\nimport NativeElementNode from '../native/NativeElementNode.ts';\n\nfunction* elementIterator(el: any): Generator<any, void, unknown> {\n yield el;\n for (const child of el.childNodes) {\n yield* elementIterator(child);\n }\n}\n\nclass HeadNode extends ElementNode {\n private document: any;\n constructor(tagName: string, document: DocumentNode) {\n super(tagName);\n this.document = document;\n }\n appendChild(childNode: ViewNode) {\n if (childNode.tagName === 'style') {\n this.document.page.nativeView.addCss(\n (childNode.childNodes[0]! as any).text,\n );\n return;\n }\n super.appendChild(childNode);\n }\n}\n\nlet document: DocumentNode | null = null;\n\nexport default class DocumentNode extends ViewNode {\n head: any;\n config: any;\n declare nodeMap: Map<any, any>;\n page: PageElement | undefined;\n body: ElementNode | undefined;\n documentElement = {\n dataset: {},\n };\n\n static getInstance() {\n if (!document) {\n document = new DocumentNode();\n }\n return document;\n }\n\n constructor() {\n if (document) return document;\n super();\n document = this;\n this.tagName = 'docNode';\n this.nodeType = 9;\n this.head = new HeadNode('head', this);\n this.appendChild(this.head);\n this.nodeMap = new Map();\n }\n\n createEvent(eventInterface: string) {\n const event = {\n eventInterface,\n initEvent(type: string, bubbles: boolean, cancelable: boolean) {\n Object.assign(event, {\n type,\n bubbles,\n cancelable,\n });\n },\n };\n return event;\n }\n\n createComment(text: string) {\n return new CommentNode(text);\n }\n\n static createPropertyNode(tagName: string): PropertyNode {\n return new PropertyNode(tagName);\n }\n\n createElement(name: string) {\n return DocumentNode.createElement(name as any);\n }\n\n static createElement<T extends keyof NativeElementsTagNameMap>(\n tagName: T,\n ): NativeElementsTagNameMap[T] {\n if (tagName === 'property') {\n return this.createPropertyNode(tagName) as any;\n }\n const e = createElement(tagName);\n e._ownerDocument = this.getInstance();\n if (e instanceof NativeElementNode && e.nativeView) {\n this.getInstance().nodeMap.set(e.nativeView._domId, e);\n }\n if (tagName === 'page') {\n this.getInstance().page = e as PageElement;\n\n Object.defineProperty(this.getInstance(), 'body', {\n configurable: true,\n get() {\n const page = this.page;\n return {\n insertAdjacentHTML() {\n return null;\n },\n addEventListener: globalThis.addEventListener.bind(page),\n get lastChild() {\n return null;\n },\n };\n },\n });\n }\n return e;\n }\n\n createElementNS(_namespace: any, tagName: keyof NativeElementsTagNameMap) {\n return DocumentNode.createElement(tagName);\n }\n\n createTextNode(text: string) {\n return new TextNode(text);\n }\n\n addEventListener(event: string, callback: EventListener) {\n if (event === 'DOMContentLoaded') {\n setTimeout(callback, 0);\n return;\n }\n console.error('unsupported event on document', event);\n }\n\n removeEventListener(event: string, handler: EventListener) {\n if (event === 'DOMContentLoaded') {\n return;\n }\n console.error('unsupported event on document', event, handler);\n }\n\n searchDom(node: ViewNode, startNode: ViewNode, endNode: ViewNode) {\n const start = startNode || this.page;\n if (start === node) {\n return true;\n }\n if (node === endNode) {\n return false;\n }\n for (const childNode of start.childNodes) {\n if (this.searchDom(node, childNode, endNode)) {\n return true;\n }\n }\n let sibling: ViewNode | null = node;\n while (sibling) {\n if (this.searchDom(node, sibling, endNode)) {\n return true;\n }\n sibling = sibling.nextSibling;\n }\n return false;\n }\n\n createRange() {\n const self = this;\n return {\n startNode: null as ViewNode | null,\n endNode: null as ViewNode | null,\n setStartBefore(startNode: ViewNode | null) {\n while (startNode && !(startNode as NativeElementNode).nativeView) {\n startNode = startNode.nextSibling;\n }\n this.startNode = startNode;\n },\n setEndAfter(endNode: ViewNode | null) {\n while (endNode && !(endNode as NativeElementNode).nativeView) {\n endNode = endNode.prevSibling;\n }\n this.endNode = endNode;\n },\n isPointInRange(dom: ViewNode): boolean {\n return self.searchDom(dom, this.startNode!, this.endNode!);\n },\n getBoundingClientRect() {\n if (!(this.startNode instanceof NativeElementNode)) return null;\n if (!this.startNode?.nativeView) return null;\n const point = this.startNode.nativeView.getLocationInWindow();\n const size = this.startNode.nativeView.getActualSize();\n let x = point.x;\n let y = point.y;\n let width = size.width;\n let height = size.height;\n for (const element of elementIterator(this.startNode)) {\n const point = element.nativeView.getLocationInWindow();\n const size = element.nativeView.getActualSize();\n x = Math.min(x, point.x);\n y = Math.min(y, point.y);\n width = point.x + size.width - x;\n height = point.y + size.height - y;\n if (element === this.endNode) {\n break;\n }\n }\n return {\n left: x,\n top: y,\n bottom: y + height,\n width,\n height,\n };\n },\n };\n }\n\n querySelectorAll(selector: string) {\n if (selector.startsWith('meta')) {\n const config = this.config;\n return {\n getAttribute(): string {\n return JSON.stringify(config);\n },\n };\n }\n }\n}\n"],"names":["elementIterator","el","child","childNodes","HeadNode","ElementNode","constructor","tagName","document","_defineProperty","appendChild","childNode","page","nativeView","addCss","text","DocumentNode","ViewNode","getInstance","dataset","nodeType","head","nodeMap","Map","createEvent","eventInterface","event","initEvent","type","bubbles","cancelable","Object","assign","createComment","CommentNode","createPropertyNode","PropertyNode","createElement","name","e","_ownerDocument","NativeElementNode","set","_domId","defineProperty","configurable","get","insertAdjacentHTML","addEventListener","globalThis","bind","lastChild","createElementNS","_namespace","createTextNode","TextNode","callback","setTimeout","console","error","removeEventListener","handler","searchDom","node","startNode","endNode","start","sibling","nextSibling","createRange","self","setStartBefore","setEndAfter","prevSibling","isPointInRange","dom","getBoundingClientRect","point","getLocationInWindow","size","getActualSize","x","y","width","height","element","Math","min","left","top","bottom","querySelectorAll","selector","startsWith","config","getAttribute","JSON","stringify"],"mappings":"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"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
+
import { _ as _defineProperty } from '../../_rollupPluginBabelHelpers-apNPIsxw.js';
|
|
1
2
|
import ViewNode from './ViewNode.js';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
// import { Page } from '@nativescript/core/ui/page';
|
|
5
|
-
// import { CssAnimationParser } from '@nativescript/core/ui/styling/css-animation-parser';
|
|
6
|
-
|
|
4
|
+
var _ElementNode;
|
|
7
5
|
|
|
8
6
|
// import { getViewClass } from '../element-registry';
|
|
9
7
|
// import ViewNode from './ViewNode';
|
|
@@ -218,10 +216,17 @@ class ElementNode extends ViewNode {
|
|
|
218
216
|
this.tagName = tagName;
|
|
219
217
|
}
|
|
220
218
|
get id() {
|
|
219
|
+
if (this.getAttribute === ElementNode.prototype.getAttribute) {
|
|
220
|
+
return this['_id'];
|
|
221
|
+
}
|
|
221
222
|
return this.getAttribute('id');
|
|
222
223
|
}
|
|
223
|
-
set id(
|
|
224
|
-
this.
|
|
224
|
+
set id(v) {
|
|
225
|
+
if (this.getAttribute === ElementNode.prototype.getAttribute) {
|
|
226
|
+
this['_id'] = v;
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
this.setAttribute('id', v);
|
|
225
230
|
}
|
|
226
231
|
get classList() {
|
|
227
232
|
if (!this._classList) {
|
|
@@ -262,6 +267,17 @@ class ElementNode extends ViewNode {
|
|
|
262
267
|
}
|
|
263
268
|
}
|
|
264
269
|
}
|
|
270
|
+
_ElementNode = ElementNode;
|
|
271
|
+
_defineProperty(ElementNode, "ELEMENT_NODE", void 0);
|
|
272
|
+
_defineProperty(ElementNode, "ATTRIBUTE_NODE", void 0);
|
|
273
|
+
_defineProperty(ElementNode, "TEXT_NODE", void 0);
|
|
274
|
+
_defineProperty(ElementNode, "DOCUMENT_NODE", void 0);
|
|
275
|
+
(() => {
|
|
276
|
+
_ElementNode.ELEMENT_NODE = 1; //Node.ELEMENT_NODE
|
|
277
|
+
_ElementNode.ATTRIBUTE_NODE = 2; //Node.ATTRIBUTE_NODE
|
|
278
|
+
_ElementNode.TEXT_NODE = 3; //Node.TEXT_NODE
|
|
279
|
+
_ElementNode.DOCUMENT_NODE = 9; //Node.DOCUMENT_NODE
|
|
280
|
+
})();
|
|
265
281
|
|
|
266
282
|
export { ElementNode as default };
|
|
267
283
|
//# sourceMappingURL=ElementNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementNode.js","sources":["../../../src/dom/nodes/ElementNode.ts"],"sourcesContent":["// import { KeyframeAnimation } from '@nativescript/core/ui/animation/keyframe-animation';\n// import { Page } from '@nativescript/core/ui/page';\n// import { CssAnimationParser } from '@nativescript/core/ui/styling/css-animation-parser';\nimport PropertyNode from './PropertyNode.ts';\nimport ViewNode from './ViewNode.ts';\n\n// import { getViewClass } from '../element-registry';\n// import ViewNode from './ViewNode';\n\n// function camelize(kebab) {\n// return kebab.replace(/[\\-]+(\\w)/g, (m, l) => l.toUpperCase());\n// }\n\n// const EVENT_ATTRIBUTES = Object.freeze(['tap']);\n\n// export default class ElementNode extends ViewNode {\n// style: any;\n// animations: Map<string, KeyframeAnimation> = new Map();\n// oldAnimations: KeyframeAnimation[] = [];\n// constructor(tagName: any) {\n// super();\n\n// this.nodeType = 1;\n// this.tagName = tagName;\n\n// //there are some special elements that don't exist natively\n// const viewClass = getViewClass(tagName);\n// if (viewClass) {\n// this._nativeView = new viewClass();\n// this._nativeView.__GlimmerNativeElement__ = this;\n// // console.log(`${this} has view class`);\n// EVENT_ATTRIBUTES.forEach((event) => {\n// // console.log(`Checking for atttribute ${event}`);\n// let attribute = this.getAttribute(event);\n// // console.log(`Attribute ${event}: ${attribute}`);\n// // console.log(`Native view attribute ${event}: ${this._nativeView.getAttribute(event)}`);\n// if (attribute) {\n// this.addEventListener(event, attribute);\n// }\n// });\n// }\n\n// // console.log(`created ${this} ${this._nativeView}`);\n\n// let setStyle = (value) => {\n// this.setAttribute('style', value);\n// };\n\n// let getStyle = () => {\n// return this.getAttribute('style');\n// };\n\n// this.style = {\n// setProperty: (propertyName, value, priority) => {\n// this.setStyle(camelize(propertyName), value);\n// },\n\n// removeProperty: (propertyName) => {\n// this.setStyle(camelize(propertyName), null);\n// },\n\n// get cssText() {\n// // console.log('got css text');\n// return getStyle();\n// },\n\n// set cssText(value) {\n// // console.log('set css text');\n// setStyle(value);\n// }\n// };\n// }\n\n// animate(options) {\n// if (this.nativeView) {\n// this.nativeView.animate(options);\n// }\n// }\n\n// getParentPage(): ElementNode {\n// if (this.nativeView && this.nativeView.page) {\n// return (this.nativeView.page as any).__GlimmerNativeElement__;\n// }\n// return null;\n// }\n\n// addAnimation(animation: string) {\n// if (!this.nativeView) {\n// throw Error('Attempt to apply animation to tag without a native view' + this.tagName);\n// }\n\n// let page = this.getParentPage();\n// if (page === null) {\n// this.animations.set(animation, null);\n// return;\n// }\n\n// //quickly cancel any old ones\n// while (this.oldAnimations.length) {\n// let oldAnimation = this.oldAnimations.shift();\n// if (oldAnimation.isPlaying) {\n// oldAnimation.cancel();\n// }\n// }\n\n// //Parse our \"animation\" style property into an animation info instance (this won't include the keyframes from the css)\n// let animationInfos = CssAnimationParser.keyframeAnimationsFromCSSDeclarations([\n// { property: 'animation', value: animation }\n// ]);\n// if (!animationInfos) {\n// this.animations.set(animation, null);\n// return;\n// }\n// let animationInfo = animationInfos[0];\n\n// //Fetch an animationInfo instance that includes the keyframes from the css (this won't include the animation properties parsed above)\n// let animationWithKeyframes = (page.nativeView as Page).getKeyframeAnimationWithName(animationInfo.name);\n// if (!animationWithKeyframes) {\n// this.animations.set(animation, null);\n// return;\n// }\n\n// animationInfo.keyframes = animationWithKeyframes.keyframes;\n// //combine the keyframes from the css with the animation from the parsed attribute to get a complete animationInfo object\n// let animationInstance = KeyframeAnimation.keyframeAnimationFromInfo(animationInfo);\n\n// // save and launch the animation\n// this.animations.set(animation, animationInstance);\n// animationInstance.play(this.nativeView);\n// }\n\n// removeAnimation(animation: string) {\n// if (this.animations.has(animation)) {\n// let animationInstance = this.animations.get(animation);\n// this.animations.delete(animation);\n\n// if (animationInstance) {\n// if (animationInstance.isPlaying) {\n// //we don't want to stop right away since svelte removes the animation before it is finished due to our lag time starting the animation.\n// this.oldAnimations.push(animationInstance);\n// }\n// }\n// }\n// }\n\n// get animation(): string {\n// return [...this.animations.keys()].join(', ');\n// }\n\n// set animation(value: string) {\n// let new_animations = value.trim() == '' ? [] : value.split(',').map((a) => a.trim());\n// //add new ones\n// for (let anim of new_animations) {\n// if (!this.animations.has(anim)) {\n// this.addAnimation(anim);\n// }\n// }\n// //remove old ones\n// for (let anim of this.animations.keys()) {\n// if (new_animations.indexOf(anim) < 0) {\n// this.removeAnimation(anim);\n// }\n// }\n// }\n\n// setAttribute(key, value) {\n// // console.log(`setAttribute: ${key} - ${value}`);\n// if (key.startsWith('on:')) {\n// key = key.substr(3);\n// this.addEventListener(key, value);\n// } else {\n// super.setAttribute(key, value);\n// }\n// }\n\n// appendChild(childNode) {\n// super.appendChild(childNode);\n\n// if (childNode.nodeType === 3) {\n// this.setText(childNode.text);\n// }\n\n// if (childNode.nodeType === 7) {\n// childNode.setOnNode(this);\n// }\n// }\n\n// insertBefore(childNode, referenceNode) {\n// super.insertBefore(childNode, referenceNode);\n\n// if (childNode.nodeType === 3) {\n// this.setText(childNode.text);\n// }\n\n// if (childNode.nodeType === 7) {\n// childNode.setOnNode(this);\n// }\n// }\n\n// removeChild(childNode) {\n// super.removeChild(childNode);\n\n// if (childNode.nodeType === 3) {\n// this.setText('');\n// }\n\n// if (childNode.nodeType === 7) {\n// childNode.clearOnNode(this);\n// }\n// }\n// }\n\nexport interface IClassList {\n length: number;\n\n add(...classNames: string[]): void;\n\n remove(...classNames: string[]): void;\n\n contains(className: string): boolean;\n}\n\nexport default class ElementNode extends ViewNode {\n declare _classList: IClassList;\n\n constructor(tagName: string) {\n super();\n this.nodeType = 1;\n this.tagName = tagName;\n }\n\n get id() {\n return this.getAttribute('id') as string;\n }\n\n set id(value: string) {\n this.setAttribute('id', value);\n }\n\n get classList() {\n if (!this._classList) {\n const getClasses: () => string[] = () =>\n ((this.getAttribute('class') as string) || '')\n .split(/\\s+/)\n .filter((k: string) => k != '');\n\n this._classList = {\n add: (...classNames: string[]) => {\n this.setAttribute(\n 'class',\n [...new Set(getClasses().concat(classNames))].join(' '),\n );\n },\n\n contains(klass: string) {\n return Boolean(getClasses().find((x) => x === klass));\n },\n\n remove: (...classNames: string[]) => {\n this.setAttribute(\n 'class',\n getClasses()\n .filter((i: string) => classNames.indexOf(i) == -1)\n .join(' '),\n );\n },\n\n get length() {\n return getClasses().length;\n },\n };\n }\n return this._classList;\n }\n\n appendChild(childNode: ViewNode) {\n super.appendChild(childNode);\n\n if (childNode.nodeType === 7) {\n (childNode as PropertyNode).setOnNode(this);\n }\n }\n\n insertBefore(childNode: ViewNode, referenceNode: ViewNode) {\n super.insertBefore(childNode, referenceNode);\n\n if (childNode.nodeType === 7) {\n (childNode as PropertyNode).setOnNode(this);\n }\n }\n\n removeChild(childNode: ViewNode) {\n super.removeChild(childNode);\n\n if (childNode.nodeType === 7) {\n (childNode as PropertyNode).clearOnNode(this);\n }\n }\n}\n"],"names":["ElementNode","ViewNode","constructor","tagName","nodeType","id","getAttribute","value","setAttribute","classList","_classList","getClasses","split","filter","k","add","classNames","Set","concat","join","contains","klass","Boolean","find","x","remove","i","indexOf","length","appendChild","childNode","setOnNode","insertBefore","referenceNode","removeChild","clearOnNode"],"mappings":";;AAAA;AACA;AACA;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAYe,MAAMA,WAAW,SAASC,QAAQ,CAAC;EAGhDC,WAAWA,CAACC,OAAe,EAAE;AAC3B,IAAA,KAAK,EAAE;IACP,IAAI,CAACC,QAAQ,GAAG,CAAC;IACjB,IAAI,CAACD,OAAO,GAAGA,OAAO;AACxB;EAEA,IAAIE,EAAEA,GAAG;AACP,IAAA,OAAO,IAAI,CAACC,YAAY,CAAC,IAAI,CAAC;AAChC;EAEA,IAAID,EAAEA,CAACE,KAAa,EAAE;AACpB,IAAA,IAAI,CAACC,YAAY,CAAC,IAAI,EAAED,KAAK,CAAC;AAChC;EAEA,IAAIE,SAASA,GAAG;AACd,IAAA,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;MACpB,MAAMC,UAA0B,GAAGA,MACjC,CAAE,IAAI,CAACL,YAAY,CAAC,OAAO,CAAC,IAAe,EAAE,EAC1CM,KAAK,CAAC,KAAK,CAAC,CACZC,MAAM,CAAEC,CAAS,IAAKA,CAAC,IAAI,EAAE,CAAC;MAEnC,IAAI,CAACJ,UAAU,GAAG;AAChBK,QAAAA,GAAG,EAAEA,CAAC,GAAGC,UAAoB,KAAK;UAChC,IAAI,CAACR,YAAY,CACf,OAAO,EACP,CAAC,GAAG,IAAIS,GAAG,CAACN,UAAU,EAAE,CAACO,MAAM,CAACF,UAAU,CAAC,CAAC,CAAC,CAACG,IAAI,CAAC,GAAG,CACxD,CAAC;SACF;QAEDC,QAAQA,CAACC,KAAa,EAAE;AACtB,UAAA,OAAOC,OAAO,CAACX,UAAU,EAAE,CAACY,IAAI,CAAEC,CAAC,IAAKA,CAAC,KAAKH,KAAK,CAAC,CAAC;SACtD;AAEDI,QAAAA,MAAM,EAAEA,CAAC,GAAGT,UAAoB,KAAK;AACnC,UAAA,IAAI,CAACR,YAAY,CACf,OAAO,EACPG,UAAU,EAAE,CACTE,MAAM,CAAEa,CAAS,IAAKV,UAAU,CAACW,OAAO,CAACD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClDP,IAAI,CAAC,GAAG,CACb,CAAC;SACF;QAED,IAAIS,MAAMA,GAAG;AACX,UAAA,OAAOjB,UAAU,EAAE,CAACiB,MAAM;AAC5B;OACD;AACH;IACA,OAAO,IAAI,CAAClB,UAAU;AACxB;EAEAmB,WAAWA,CAACC,SAAmB,EAAE;AAC/B,IAAA,KAAK,CAACD,WAAW,CAACC,SAAS,CAAC;AAE5B,IAAA,IAAIA,SAAS,CAAC1B,QAAQ,KAAK,CAAC,EAAE;AAC3B0B,MAAAA,SAAS,CAAkBC,SAAS,CAAC,IAAI,CAAC;AAC7C;AACF;AAEAC,EAAAA,YAAYA,CAACF,SAAmB,EAAEG,aAAuB,EAAE;AACzD,IAAA,KAAK,CAACD,YAAY,CAACF,SAAS,EAAEG,aAAa,CAAC;AAE5C,IAAA,IAAIH,SAAS,CAAC1B,QAAQ,KAAK,CAAC,EAAE;AAC3B0B,MAAAA,SAAS,CAAkBC,SAAS,CAAC,IAAI,CAAC;AAC7C;AACF;EAEAG,WAAWA,CAACJ,SAAmB,EAAE;AAC/B,IAAA,KAAK,CAACI,WAAW,CAACJ,SAAS,CAAC;AAE5B,IAAA,IAAIA,SAAS,CAAC1B,QAAQ,KAAK,CAAC,EAAE;AAC3B0B,MAAAA,SAAS,CAAkBK,WAAW,CAAC,IAAI,CAAC;AAC/C;AACF;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"ElementNode.js","sources":["../../../src/dom/nodes/ElementNode.ts"],"sourcesContent":["// import { KeyframeAnimation } from '@nativescript/core/ui/animation/keyframe-animation';\n// import { Page } from '@nativescript/core/ui/page';\n// import { CssAnimationParser } from '@nativescript/core/ui/styling/css-animation-parser';\nimport PropertyNode from './PropertyNode.ts';\nimport ViewNode from './ViewNode.ts';\n\n// import { getViewClass } from '../element-registry';\n// import ViewNode from './ViewNode';\n\n// function camelize(kebab) {\n// return kebab.replace(/[\\-]+(\\w)/g, (m, l) => l.toUpperCase());\n// }\n\n// const EVENT_ATTRIBUTES = Object.freeze(['tap']);\n\n// export default class ElementNode extends ViewNode {\n// style: any;\n// animations: Map<string, KeyframeAnimation> = new Map();\n// oldAnimations: KeyframeAnimation[] = [];\n// constructor(tagName: any) {\n// super();\n\n// this.nodeType = 1;\n// this.tagName = tagName;\n\n// //there are some special elements that don't exist natively\n// const viewClass = getViewClass(tagName);\n// if (viewClass) {\n// this._nativeView = new viewClass();\n// this._nativeView.__GlimmerNativeElement__ = this;\n// // console.log(`${this} has view class`);\n// EVENT_ATTRIBUTES.forEach((event) => {\n// // console.log(`Checking for atttribute ${event}`);\n// let attribute = this.getAttribute(event);\n// // console.log(`Attribute ${event}: ${attribute}`);\n// // console.log(`Native view attribute ${event}: ${this._nativeView.getAttribute(event)}`);\n// if (attribute) {\n// this.addEventListener(event, attribute);\n// }\n// });\n// }\n\n// // console.log(`created ${this} ${this._nativeView}`);\n\n// let setStyle = (value) => {\n// this.setAttribute('style', value);\n// };\n\n// let getStyle = () => {\n// return this.getAttribute('style');\n// };\n\n// this.style = {\n// setProperty: (propertyName, value, priority) => {\n// this.setStyle(camelize(propertyName), value);\n// },\n\n// removeProperty: (propertyName) => {\n// this.setStyle(camelize(propertyName), null);\n// },\n\n// get cssText() {\n// // console.log('got css text');\n// return getStyle();\n// },\n\n// set cssText(value) {\n// // console.log('set css text');\n// setStyle(value);\n// }\n// };\n// }\n\n// animate(options) {\n// if (this.nativeView) {\n// this.nativeView.animate(options);\n// }\n// }\n\n// getParentPage(): ElementNode {\n// if (this.nativeView && this.nativeView.page) {\n// return (this.nativeView.page as any).__GlimmerNativeElement__;\n// }\n// return null;\n// }\n\n// addAnimation(animation: string) {\n// if (!this.nativeView) {\n// throw Error('Attempt to apply animation to tag without a native view' + this.tagName);\n// }\n\n// let page = this.getParentPage();\n// if (page === null) {\n// this.animations.set(animation, null);\n// return;\n// }\n\n// //quickly cancel any old ones\n// while (this.oldAnimations.length) {\n// let oldAnimation = this.oldAnimations.shift();\n// if (oldAnimation.isPlaying) {\n// oldAnimation.cancel();\n// }\n// }\n\n// //Parse our \"animation\" style property into an animation info instance (this won't include the keyframes from the css)\n// let animationInfos = CssAnimationParser.keyframeAnimationsFromCSSDeclarations([\n// { property: 'animation', value: animation }\n// ]);\n// if (!animationInfos) {\n// this.animations.set(animation, null);\n// return;\n// }\n// let animationInfo = animationInfos[0];\n\n// //Fetch an animationInfo instance that includes the keyframes from the css (this won't include the animation properties parsed above)\n// let animationWithKeyframes = (page.nativeView as Page).getKeyframeAnimationWithName(animationInfo.name);\n// if (!animationWithKeyframes) {\n// this.animations.set(animation, null);\n// return;\n// }\n\n// animationInfo.keyframes = animationWithKeyframes.keyframes;\n// //combine the keyframes from the css with the animation from the parsed attribute to get a complete animationInfo object\n// let animationInstance = KeyframeAnimation.keyframeAnimationFromInfo(animationInfo);\n\n// // save and launch the animation\n// this.animations.set(animation, animationInstance);\n// animationInstance.play(this.nativeView);\n// }\n\n// removeAnimation(animation: string) {\n// if (this.animations.has(animation)) {\n// let animationInstance = this.animations.get(animation);\n// this.animations.delete(animation);\n\n// if (animationInstance) {\n// if (animationInstance.isPlaying) {\n// //we don't want to stop right away since svelte removes the animation before it is finished due to our lag time starting the animation.\n// this.oldAnimations.push(animationInstance);\n// }\n// }\n// }\n// }\n\n// get animation(): string {\n// return [...this.animations.keys()].join(', ');\n// }\n\n// set animation(value: string) {\n// let new_animations = value.trim() == '' ? [] : value.split(',').map((a) => a.trim());\n// //add new ones\n// for (let anim of new_animations) {\n// if (!this.animations.has(anim)) {\n// this.addAnimation(anim);\n// }\n// }\n// //remove old ones\n// for (let anim of this.animations.keys()) {\n// if (new_animations.indexOf(anim) < 0) {\n// this.removeAnimation(anim);\n// }\n// }\n// }\n\n// setAttribute(key, value) {\n// // console.log(`setAttribute: ${key} - ${value}`);\n// if (key.startsWith('on:')) {\n// key = key.substr(3);\n// this.addEventListener(key, value);\n// } else {\n// super.setAttribute(key, value);\n// }\n// }\n\n// appendChild(childNode) {\n// super.appendChild(childNode);\n\n// if (childNode.nodeType === 3) {\n// this.setText(childNode.text);\n// }\n\n// if (childNode.nodeType === 7) {\n// childNode.setOnNode(this);\n// }\n// }\n\n// insertBefore(childNode, referenceNode) {\n// super.insertBefore(childNode, referenceNode);\n\n// if (childNode.nodeType === 3) {\n// this.setText(childNode.text);\n// }\n\n// if (childNode.nodeType === 7) {\n// childNode.setOnNode(this);\n// }\n// }\n\n// removeChild(childNode) {\n// super.removeChild(childNode);\n\n// if (childNode.nodeType === 3) {\n// this.setText('');\n// }\n\n// if (childNode.nodeType === 7) {\n// childNode.clearOnNode(this);\n// }\n// }\n// }\n\nexport interface IClassList {\n length: number;\n\n add(...classNames: string[]): void;\n\n remove(...classNames: string[]): void;\n\n contains(className: string): boolean;\n}\n\nexport default class ElementNode extends ViewNode {\n declare _classList: IClassList;\n declare _id: string;\n static ELEMENT_NODE: number;\n static ATTRIBUTE_NODE: number;\n static TEXT_NODE: number;\n static DOCUMENT_NODE: number;\n\n static {\n this.ELEMENT_NODE = 1; //Node.ELEMENT_NODE\n this.ATTRIBUTE_NODE = 2; //Node.ATTRIBUTE_NODE\n this.TEXT_NODE = 3; //Node.TEXT_NODE\n this.DOCUMENT_NODE = 9; //Node.DOCUMENT_NODE\n }\n\n constructor(tagName: string) {\n super();\n this.nodeType = 1;\n this.tagName = tagName;\n }\n\n get id() {\n if (this.getAttribute === ElementNode.prototype.getAttribute) {\n return this['_id'];\n }\n return this.getAttribute('id') as typeof this._id;\n }\n\n set id(v: string) {\n if (this.getAttribute === ElementNode.prototype.getAttribute) {\n this['_id'] = v;\n return;\n }\n this.setAttribute('id', v);\n }\n\n get classList() {\n if (!this._classList) {\n const getClasses: () => string[] = () =>\n ((this.getAttribute('class') as string) || '')\n .split(/\\s+/)\n .filter((k: string) => k != '');\n\n this._classList = {\n add: (...classNames: string[]) => {\n this.setAttribute(\n 'class',\n [...new Set(getClasses().concat(classNames))].join(' '),\n );\n },\n\n contains(klass: string) {\n return Boolean(getClasses().find((x) => x === klass));\n },\n\n remove: (...classNames: string[]) => {\n this.setAttribute(\n 'class',\n getClasses()\n .filter((i: string) => classNames.indexOf(i) == -1)\n .join(' '),\n );\n },\n\n get length() {\n return getClasses().length;\n },\n };\n }\n return this._classList;\n }\n\n appendChild(childNode: ViewNode) {\n super.appendChild(childNode);\n\n if (childNode.nodeType === 7) {\n (childNode as PropertyNode).setOnNode(this);\n }\n }\n\n insertBefore(childNode: ViewNode, referenceNode: ViewNode) {\n super.insertBefore(childNode, referenceNode);\n\n if (childNode.nodeType === 7) {\n (childNode as PropertyNode).setOnNode(this);\n }\n }\n\n removeChild(childNode: ViewNode) {\n super.removeChild(childNode);\n\n if (childNode.nodeType === 7) {\n (childNode as PropertyNode).clearOnNode(this);\n }\n }\n}\n"],"names":["ElementNode","ViewNode","constructor","tagName","nodeType","id","getAttribute","prototype","v","setAttribute","classList","_classList","getClasses","split","filter","k","add","classNames","Set","concat","join","contains","klass","Boolean","find","x","remove","i","indexOf","length","appendChild","childNode","setOnNode","insertBefore","referenceNode","removeChild","clearOnNode","_ElementNode","_defineProperty","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","DOCUMENT_NODE"],"mappings":";;;;;AAMA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAYe,MAAMA,WAAW,SAASC,QAAQ,CAAC;EAehDC,WAAWA,CAACC,OAAe,EAAE;AAC3B,IAAA,KAAK,EAAE;IACP,IAAI,CAACC,QAAQ,GAAG,CAAC;IACjB,IAAI,CAACD,OAAO,GAAGA,OAAO;AACxB;EAEA,IAAIE,EAAEA,GAAG;IACP,IAAI,IAAI,CAACC,YAAY,KAAKN,WAAW,CAACO,SAAS,CAACD,YAAY,EAAE;MAC5D,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB;AACA,IAAA,OAAO,IAAI,CAACA,YAAY,CAA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"}
|