Skip to content

Commit 959bbfd

Browse files
committed
push changes
1 parent 44ac7ce commit 959bbfd

File tree

32 files changed

+2214
-141
lines changed

32 files changed

+2214
-141
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
"eslint": "7.22.0",
4646
"eslint-config-prettier": "^8.1.0",
4747
"gonzales": "^1.0.7",
48+
"html-entities": "^2.3.3",
49+
"html-escaper": "3.0.3",
4850
"husky": "^8.0.1",
4951
"jest": "29.4.1",
5052
"lint-staged": "^13.1.0",
@@ -73,4 +75,3 @@
7375
]
7476
}
7577
}
76-

packages/core/data/observable/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ export class Observable extends EventTarget implements globalThis.EventTarget {
412412
if (captures && currentNode._captureObservers[type]) capturePhase.unshift(currentNode._captureObservers[type]);
413413
if (bubbles && currentNode._observers[type]) bubblePhase.push(currentNode._observers[type]);
414414
//@ts-ignore todo
415-
currentNode = currentNode._parentNode;
415+
currentNode = currentNode._getTheParent(event);
416416
}
417417
}
418418

packages/core/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@
4949
"css-tree": "^1.1.2",
5050
"emoji-regex": "^10.2.1",
5151
"reduce-css-calc": "^2.1.7",
52-
"tslib": "^2.0.0"
52+
"tslib": "^2.0.0",
53+
"html-entities": "2.3.3",
54+
"html-escaper": "3.0.3"
5355
},
5456
"nativescript": {
5557
"platforms": {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default ['style', 'script'];
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { HTMLArrayPropElement, HTMLKeyPropElement } from '../nodes/html-prop-element/HTMLPropElement';
2+
import HTMLSlotElement from '../nodes/html-slot-element/HTMLSlotElement';
3+
import HTMLTemplateElement from '../nodes/html-template-element/HTMLTemplateElement';
4+
import { HTMLItemTemplateElement } from '../nodes/html-item-template-element/HTMLItemTemplateElement';
5+
6+
export default {
7+
template: HTMLTemplateElement,
8+
itemtemplate: HTMLItemTemplateElement,
9+
slot: HTMLSlotElement,
10+
keyprop: HTMLKeyPropElement,
11+
arrayprop: HTMLArrayPropElement,
12+
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default {
2+
html: 'http://www.w3.org/1999/xhtml',
3+
svg: 'http://www.w3.org/2000/svg',
4+
mathML: 'http://www.w3.org/1998/Math/MathML',
5+
};
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
export default [
2+
'HTMLHeadElement',
3+
'HTMLTitleElement',
4+
'HTMLMetaElement',
5+
'HTMLBodyElement',
6+
'HTMLHeadingElement',
7+
'HTMLParagraphElement',
8+
'HTMLHRElement',
9+
'HTMLPreElement',
10+
'HTMLUListElement',
11+
'HTMLOListElement',
12+
'HTMLLIElement',
13+
'HTMLMenuElement',
14+
'HTMLDListElement',
15+
'HTMLDivElement',
16+
'HTMLAnchorElement',
17+
'HTMLAreaElement',
18+
'HTMLBRElement',
19+
'HTMLButtonElement',
20+
'HTMLCanvasElement',
21+
'HTMLDataElement',
22+
'HTMLDataListElement',
23+
'HTMLDetailsElement',
24+
'HTMLDirectoryElement',
25+
'HTMLFieldSetElement',
26+
'HTMLFontElement',
27+
'HTMLHtmlElement',
28+
'HTMLLegendElement',
29+
'HTMLMapElement',
30+
'HTMLMarqueeElement',
31+
'HTMLMeterElement',
32+
'HTMLModElement',
33+
'HTMLOutputElement',
34+
'HTMLPictureElement',
35+
'HTMLProgressElement',
36+
'HTMLQuoteElement',
37+
'HTMLSourceElement',
38+
'HTMLSpanElement',
39+
'HTMLTableCaptionElement',
40+
'HTMLTableCellElement',
41+
'HTMLTableColElement',
42+
'HTMLTableElement',
43+
'HTMLTimeElement',
44+
'HTMLTableRowElement',
45+
'HTMLTableSectionElement',
46+
'HTMLFrameElement',
47+
'HTMLFrameSetElement',
48+
'HTMLIFrameElement',
49+
'HTMLEmbedElement',
50+
'HTMLObjectElement',
51+
'HTMLParamElement',
52+
'HTMLTrackElement',
53+
];
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default ['a', 'button', 'dd', 'dt', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'option', 'p', 'select', 'table'];
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr', 'meta'];
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import HTMLElement from '../nodes/html-element/HTMLElement';
2+
import Node from '../nodes/node/Node';
3+
4+
/**
5+
* Custom elements registry.
6+
*/
7+
export default class CustomElementRegistry {
8+
private _registry: Map<string, { elementClass: typeof HTMLElement; extends: string }> = new Map();
9+
private _callbacks: { [k: string]: (() => void)[] } = {};
10+
11+
/**
12+
* Defines a custom element class.
13+
*
14+
* @param tagName Tag name of element.
15+
* @param elementClass Element class.
16+
* @param [options] Options.
17+
* @param options.extends
18+
*/
19+
public define(tagName: string, elementClass: typeof HTMLElement, options?: { extends: string }): void {
20+
if (!tagName.includes('-')) {
21+
throw new Error("[DOM] Failed to execute 'define' on 'CustomElementRegistry': \"" + tagName + '" is not a valid custom element name.');
22+
}
23+
24+
this._registry.set(tagName, {
25+
elementClass,
26+
extends: options && options.extends ? options.extends.toLowerCase() : null,
27+
});
28+
29+
// ObservedAttributes should only be called once by CustomElementRegistry
30+
if (elementClass.prototype.attributeChangedCallback) {
31+
elementClass._observedAttributes = elementClass.observedAttributes;
32+
}
33+
34+
if (this._callbacks[tagName]) {
35+
const callbacks = this._callbacks[tagName];
36+
delete this._callbacks[tagName];
37+
for (const callback of callbacks) {
38+
callback();
39+
}
40+
}
41+
}
42+
43+
/**
44+
* Returns a defined element class.
45+
*
46+
* @param tagName Tag name of element.
47+
* @param HTMLElement Class defined.
48+
*/
49+
public get(tagName: string): typeof HTMLElement {
50+
return this._registry.has(tagName) ? this._registry.get(tagName).elementClass : undefined;
51+
}
52+
53+
/**
54+
* Upgrades a custom element directly, even before it is connected to its shadow root.
55+
*
56+
* Not implemented yet.
57+
*
58+
* @param _root Root node.
59+
*/
60+
public upgrade(_root: Node): void {
61+
// Do nothing
62+
}
63+
64+
/**
65+
* When defined.
66+
*
67+
* @param tagName Tag name of element.
68+
* @returns Promise.
69+
*/
70+
public whenDefined(tagName: string): Promise<void> {
71+
if (this.get(tagName)) {
72+
return Promise.resolve();
73+
}
74+
return new Promise((resolve) => {
75+
this._callbacks[tagName] = this._callbacks[tagName] || [];
76+
this._callbacks[tagName].push(resolve);
77+
});
78+
}
79+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy