@@ -12,10 +12,10 @@ export default class CustomElementRegistry {
12
12
/**
13
13
* Validates the correctness of custom element tag names.
14
14
*
15
- * @param tagName custom element tag name.
15
+ * @param localName custom element tag name.
16
16
* @returns boolean True, if tag name is standard compliant.
17
17
*/
18
- private isValidCustomElementName ( tagName : string ) : boolean {
18
+ private isValidCustomElementName ( localName : string ) : boolean {
19
19
// Validation criteria based on:
20
20
// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
21
21
const PCENChar =
@@ -27,7 +27,7 @@ export default class CustomElementRegistry {
27
27
28
28
const PCEN = new RegExp ( `^[a-z](${ PCENChar } )*-(${ PCENChar } )*$` , 'u' ) ;
29
29
30
- const forbiddenNames = [
30
+ const reservedNames = [
31
31
'annotation-xml' ,
32
32
'color-profile' ,
33
33
'font-face' ,
@@ -37,33 +37,31 @@ export default class CustomElementRegistry {
37
37
'font-face-name' ,
38
38
'missing-glyph'
39
39
] ;
40
- return PCEN . test ( tagName ) && ! forbiddenNames . includes ( tagName ) ;
40
+ return PCEN . test ( localName ) && ! reservedNames . includes ( localName ) ;
41
41
}
42
42
43
43
/**
44
44
* Defines a custom element class.
45
45
*
46
- * @param tagName Tag name of element.
46
+ * @param localName Tag name of element.
47
47
* @param elementClass Element class.
48
48
* @param [options] Options.
49
49
* @param options.extends
50
50
*/
51
51
public define (
52
- tagName : string ,
52
+ localName : string ,
53
53
elementClass : typeof HTMLElement ,
54
54
options ?: { extends : string }
55
55
) : void {
56
- const upperTagName = tagName . toUpperCase ( ) ;
57
-
58
- if ( ! upperTagName . includes ( '-' ) ) {
56
+ if ( ! this . isValidCustomElementName ( localName ) ) {
59
57
throw new DOMException (
60
58
"Failed to execute 'define' on 'CustomElementRegistry': \"" +
61
- tagName +
59
+ localName +
62
60
'" is not a valid custom element name.'
63
61
) ;
64
62
}
65
63
66
- this . _registry [ upperTagName ] = {
64
+ this . _registry [ localName ] = {
67
65
elementClass,
68
66
extends : options && options . extends ? options . extends . toLowerCase ( ) : null
69
67
} ;
@@ -73,9 +71,9 @@ export default class CustomElementRegistry {
73
71
elementClass . _observedAttributes = elementClass . observedAttributes ;
74
72
}
75
73
76
- if ( this . _callbacks [ upperTagName ] ) {
77
- const callbacks = this . _callbacks [ upperTagName ] ;
78
- delete this . _callbacks [ upperTagName ] ;
74
+ if ( this . _callbacks [ localName ] ) {
75
+ const callbacks = this . _callbacks [ localName ] ;
76
+ delete this . _callbacks [ localName ] ;
79
77
for ( const callback of callbacks ) {
80
78
callback ( ) ;
81
79
}
@@ -85,12 +83,11 @@ export default class CustomElementRegistry {
85
83
/**
86
84
* Returns a defined element class.
87
85
*
88
- * @param tagName Tag name of element.
86
+ * @param localName Tag name of element.
89
87
* @param HTMLElement Class defined.
90
88
*/
91
- public get ( tagName : string ) : typeof HTMLElement {
92
- const upperTagName = tagName . toUpperCase ( ) ;
93
- return this . _registry [ upperTagName ] ? this . _registry [ upperTagName ] . elementClass : undefined ;
89
+ public get ( localName : string ) : typeof HTMLElement {
90
+ return this . _registry [ localName ] ? this . _registry [ localName ] . elementClass : undefined ;
94
91
}
95
92
96
93
/**
@@ -107,17 +104,19 @@ export default class CustomElementRegistry {
107
104
/**
108
105
* When defined.
109
106
*
110
- * @param tagName Tag name of element.
107
+ * @param localName Tag name of element.
111
108
* @returns Promise.
112
109
*/
113
- public whenDefined ( tagName : string ) : Promise < void > {
114
- const upperTagName = tagName . toUpperCase ( ) ;
115
- if ( this . get ( upperTagName ) ) {
110
+ public whenDefined ( localName : string ) : Promise < void > {
111
+ if ( ! this . isValidCustomElementName ( localName ) ) {
112
+ return Promise . reject ( new DOMException ( `Invalid custom element name: "${ localName } "` ) ) ;
113
+ }
114
+ if ( this . get ( localName ) ) {
116
115
return Promise . resolve ( ) ;
117
116
}
118
117
return new Promise ( ( resolve ) => {
119
- this . _callbacks [ upperTagName ] = this . _callbacks [ upperTagName ] || [ ] ;
120
- this . _callbacks [ upperTagName ] . push ( resolve ) ;
118
+ this . _callbacks [ localName ] = this . _callbacks [ localName ] || [ ] ;
119
+ this . _callbacks [ localName ] . push ( resolve ) ;
121
120
} ) ;
122
121
}
123
122
@@ -128,9 +127,9 @@ export default class CustomElementRegistry {
128
127
* @returns First found Tag name or `null`.
129
128
*/
130
129
public getName ( elementClass : typeof HTMLElement ) : string | null {
131
- const tagName = Object . keys ( this . _registry ) . find (
130
+ const localName = Object . keys ( this . _registry ) . find (
132
131
( k ) => this . _registry [ k ] . elementClass === elementClass
133
132
) ;
134
- return ! ! tagName ? tagName : null ;
133
+ return ! ! localName ? localName : null ;
135
134
}
136
135
}
0 commit comments