From ef055d790b5728de5c796ef75d846bd01065e12e Mon Sep 17 00:00:00 2001
From: Anne van Kesteren HTMLCollection
interface, its
length
attribute, and its
@@ -3297,8 +3298,9 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
no-quirks modeis
value
Let registry be current global object's custom element registry.
If NewTarget is equal to the active function
object, then throw a TypeError
.
Let registry be null.
If the surrounding agent's active custom element constructor + map[NewTarget] exists:
+ +Set registry to the surrounding agent's active custom + element constructor map[NewTarget].
Remove the surrounding agent's + active custom element constructor map[NewTarget].
If registry is null, then set registry to current global + object's custom element + registry.
Let definition be the item in registry's custom element
definition set with shadowrootdelegatesfocus
shadowrootclonable
shadowrootserializable
shadowrootcustomelements
HTMLTemplateElement
.
The shadowrootcustomelements
+ content attribute is a boolean attribute.
The template contents of a template
element are not children of the element itself.
shadowrootserializable
content attribute.
+ The shadowRootCustomElements
IDL attribute
+ must reflect the shadowrootcustomelements
content
+ attribute.
The IDL attribute does intentionally not have a boolean type so it can be + extended.
+The cloning steps for template
@@ -73336,8 +73370,8 @@ document.body.append(parent);
A custom element definition describes a custom element and consists - of:
+A custom element definition describes a custom element and + consists of:
attachShadow()
.
To look up a custom element definition, given a document, - namespace, localName, and is, perform the following steps. They - will return either a custom element definition or null:
+To look up a custom element definition, given null or a
+ CustomElementRegistry
object registry, string-or-null
+ namespace, string localName, and string-or-null is, perform the
+ following steps. They will return either a custom element definition or null:
If namespace is not the HTML namespace, then return null.
If document's browsing context is - null, then return null.
If registry is null, then return null.
Let registry be document's relevant global object's - custom element registry.
If namespace is not the HTML namespace, then return null.
If registry's custom element definition set contains an item with
+ Each similar-origin window agent has an associated active custom element constructor map, which is a map of constructors to The Every Every Every To look up a custom element registry, given an If parentNode is an If parentNode is a If parentNode's browsing context is
+ null, then return null. Return parentNode's relevant global object's custom element registry.CustomElementRegistry
objects.customElements
attribute of the
Window
interface must return the CustomElementRegistry
object for that
@@ -73442,11 +73477,17 @@ document.body.append(parent);
+ [Exposed=Window]
interface CustomElementRegistry {
- [CEReactions] undefined define(DOMString name, CustomElementConstructor constructor, optional ElementDefinitionOptions options = {});
- (CustomElementConstructor or undefined) get(DOMString name);
- DOMString? getName(CustomElementConstructor constructor);
- Promise<CustomElementConstructor> whenDefined(DOMString name);
- [CEReactions] undefined upgrade(Node root);
+ constructor();
+
+ [CEReactions] undefined define(DOMString name, CustomElementConstructor constructor, optional ElementDefinitionOptions options = {});
+ (CustomElementConstructor or undefined) get(DOMString name);
+ DOMString? getName(CustomElementConstructor constructor);
+ Promise<CustomElementConstructor> whenDefined(DOMString name);
+ [CEReactions] undefined upgrade(Node root);
+
+ [CEReactions, NewObject] HTMLElement createElement(DOMString name);
+ [CEReactions, NewObject] Node cloneSubtree(Node root);
+ undefined initializeSubtree((Element or ShadowRoot) root);
};
callback CustomElementConstructor = HTMLElement ();
@@ -73455,6 +73496,12 @@ dictionary ElementDefinitionOptions {
DOMString extends;
};
CustomElementRegistry
has an is
+ scoped, a boolean, initially false.CustomElementRegistry
has a scoped
+ document set, a set of Document
objects, initially « ».CustomElementRegistry
has a custom element definition set, a
set of custom element definitions,
initially « ». Lookup of items in this set uses their ElementDefinitionOptions {
element names to promises. It is used to implement the whenDefined()
method.Element
object,
+ ShadowRoot
object, or Document
object parentNode:
+
+
+
+
Element
object, then return
+ parentNode's custom element
+ registry.
+
+ ShadowRoot
object, then return
+ parentNode's custom element
+ registry.
+
+
window.customElements.define(name,
- constructor)
registry = window.customElements
CustomElementRegistry
object.registry = new CustomElementRegistry()
CustomElementRegistry
object, for scoped usage.registry.define(name,
+ constructor)
window.customElements.define(name, constructor,
+ registry.define(name, constructor,
{ extends: baseLocalName })
-
- Defines a new custom element, mapping the given name to the given constructor as
a customized built-in element for the element type identified by the
supplied baseLocalName. A "
NotSupportedError
"
DOMException
will be thrown upon trying to extend a custom element or
- an unknown element.
-
- window.customElements.get(name)
+ an unknown element, or when registry is not a global
+ CustomElementRegistry
object.
+ registry.get(name)
- Retrieves the custom element constructor defined for the given name. Returns undefined if there is no
custom element definition with the given name.
- window.customElements.getName(constructor)
-
+ registry.getName(constructor)
- Retrieves the given name for a custom element defined for the given constructor. Returns null if there is no
custom element definition with the given constructor.
- window.customElements.whenDefined(name)
-
+ registry.whenDefined(name)
- Returns a promise that will be fulfilled with the custom element's constructor
when a custom element becomes defined with the given name. (If such a custom
element is already defined, the returned promise will be immediately fulfilled.) Returns a
promise rejected with a "
SyntaxError
" DOMException
if not
given a valid custom element name.
- window.customElements.upgrade(root)
-
+ registry.upgrade(root)
- Tries to upgrade all shadow-including
inclusive descendant elements of root, even if they are not
connected.
+
+ registry.createElement(name)
+ -
+
Returns an HTML element with name as its local
+ name and registry as its registry.
+
+ If name does not match the Name
production an
+ "InvalidCharacterError
" DOMException
will be thrown.
+
+
+ registry.cloneSubtree(root)
+ - Returns a copy of root, changing the registry from root's inclusive
+ descendants from null (if any) to registry in the process.
+
+ registry.initializeSubtree(root)
+ - Each inclusive descendant of root with a null registry will have it
+ updated to this
CustomElementRegistry
object.
The new CustomElementRegistry()
constructor
+ steps are to set this's is scoped to true.
Element definition is a process of adding a custom element definition
to the If extends is not null: If this is not this's relevant global object's
+ custom element registry, then throw a
+ " If extends is a valid custom element name, then throw a
" Append definition to this's
custom element definition set. Let document be this's relevant global object's associated Let upgradeCandidates be all elements that are shadow-including descendants of document, whose namespace
- is the HTML namespace and whose local name is localName, in
- shadow-including tree order. Additionally, if extends is non-null, only
- include elements whose For each element element of upgradeCandidates, enqueue a
- custom element upgrade reaction given element and
- definition. If this's is scoped is true, then for each document
+ of this's scoped document set: upgrade particular elements within
+ a document given document and localName.
-
+ Otherwise, upgrade particular elements within a document given
+ this's relevant global object's associated If this's when-defined promise map[name] shadow-including descendants of document, whose namespace
+ is the HTML namespace and whose local name is localName, in
+ shadow-including tree order. Additionally, if name is not
+ localName, only include elements whose For each element element of upgradeCandidates: enqueue a
+ custom element upgrade reaction given element and
+ definition. The When invoked, the The Let candidates be a list of all of root's
@@ -73833,6 +73935,59 @@ console.assert(el instanceof SpiderMan); // upgraded!
The If name does not match the XML Return the result of creating an element given
+ this's relevant global object's associated The If root is a Return the result of cloning a node given
+ root with subtree set to true
+ and fallbackRegistry set
+ this. The For each inclusive descendant inclusiveDescendant of
+ root: If inclusiveDescendant is an Otherwise, if inclusiveDescendant is a To upgrade an element, given as input a
@@ -73904,8 +74059,14 @@ customElements.define("x-foo", class extends HTMLElement {
Let C be definition's constructor. Let registry be element's custom element registry. Set the surrounding agent's active custom
+ element constructor map[C] to registry. Run the following substeps while catching any exceptions: Run the following steps while catching any exceptions: Then, perform the following substep, regardless of whether the above steps threw an exception
+ Then, perform the following steps, regardless of whether the above steps threw an exception
or not: Remove registry's relevant global
+ object's active custom element constructor map[C]. This is a no-op if C immediately calls Remove the last entry from the end of definition's construction stack. To try to upgrade an element, given as input an
- element element, run the following steps: To try to upgrade an element given an element
+ element: Let definition be the result of looking up a custom element definition given element's node
- document, element's namespace, element's local name, and
- element's If definition is not null, then enqueue a custom element upgrade
reaction given element and definition. Let definition be the result of looking up a custom element definition given this's node
- document, its namespace, its local name, and null as the If definition is null, then throw an
" Let is be the value of the " Let registry be the result of looking up a custom element registry given intended parent. Let definition be the result of looking up a custom element definition given document, given
+ definition">looking up a custom element definition given registry, given
namespace, local name, and is. Let willExecuteScript be true if definition is non-null and the
@@ -131281,7 +131455,8 @@ document.body.appendChild(text);
Attach a shadow root with
declarative shadow host element, mode, clonable,
- serializable, delegatesFocus, and " If an exception is thrown, then catch it and: Set shadow's available to element internals to true. If template start tag has a If shadow's clonable is set, then append
" If current node's custom
+ element registry is not shadow's custom element registry, then append
+ " Append " Append the value of running the HTML fragment serialization algorithm with
@@ -135522,8 +135706,9 @@ console.assert(container.firstChild instanceof SuperP);
Let root be the result of creating an
- element given document, " Append root to
document. Returns an HTML element with name as its local
- name and registry as its registry. If name does not match the The If name does not match the XML Return the result of creating an element given
- this's relevant global object's associated The If root is a Return the result of cloning a node given
- root with subtree set to true
- and fallbackRegistry set
- this. The For each inclusive descendant inclusiveDescendant of
- root: If root is a If inclusiveDescendant is an Otherwise, if inclusiveDescendant is a For each inclusive descendant inclusiveDescendant of
+ root: if inclusiveDescendant is an Let element be the result of creating an
element given document, localName, given namespace,
- null, is, and willExecuteScript. This will cause custom element
constructors to run, if willExecuteScript is true. However, since we
From d1461d70c94e6d1386fae18c6510b64ba1dfd68d Mon Sep 17 00:00:00 2001
From: Anne van Kesteren For each inclusive descendant inclusiveDescendant of
- root: if inclusiveDescendant is an For each inclusive descendant inclusiveDescendant of root:
+ if inclusiveDescendant is an Set inclusiveDescendant's custom element registry to
+ this. If this's is scoped is true, then append inclusiveDescendant's node document to
+ this's scoped document set. The The template contents of a The The IDL attribute does intentionally not have a boolean type so it can be
extended. Set shadow's available to element internals to true. If template start tag has a If current node's custom
element registry is not shadow's custom element registry, then append
- " Append " To look up a custom element registry, given an If parentNode is an If node is an If parentNode is a If node is a If parentNode's browsing context is
- null, then return null. If node's browsing context is null,
+ then return null. Return parentNode's relevant global object's Return node's relevant global object's custom element registry.CustomElementRegistry
. This is accomplished by the define()
method. The ElementDefinitionOptions {
+
+
+
NotSupportedError
" DOMException
.NotSupportedError
" DOMException
.Document
.is
- value is equal to name.Document
, localName,
+ and name.is
value is equal to name.get(name)
method steps are:upgrade(root)
method must run
- these steps:upgrade(root)
method steps
+ are:
createElement(name)
+ method steps are:
+
+
+ Name
production,
+ then throw an "InvalidCharacterError
"
+ DOMException
.Document
, name, the
+ HTML namespace, null, null, true, and this.cloneSubtree(root)
+ method steps are:
+
+
+ Document
or ShadowRoot
object, then
+ throw a "NotSupportedError
" DOMException
.initializeSubtree(root)
+ method steps are:
+
+
+
+
+ Element
node whose custom element registry is null, then set
+ inclusiveDescendant's custom element
+ registry to this.ShadowRoot
node whose
+ custom element registry is null, set
+ inclusiveDescendant's custom
+ element registry to this.Upgrades
-
+
- super()
as it ought to do.custom
".
is
- value.is
value.DOMException
.
is
value.NotSupportedError
" DOMException
.is
" attribute in the
given token, if such an attribute exists, or null otherwise.named
".named
", and
+ registry.
shadowrootcustomelements
attribute,
+ then set shadow's keep custom element registry null to true. shadowrootclonable=""
". shadowrootcustomelements=""
".>
".html
", and the HTML
- namespace.html
", the HTML
+ namespace, null, null, false, and context's custom element registry.
shadowrootmode
;
shadowrootdelegatesfocus
;
shadowrootclonable
;
- shadowrootserializable
+ shadowrootserializable
;
+ shadowrootcustomelements
@@ -144263,6 +144449,11 @@ interface External {
HTMLTemplateElement
template
Sets clonable on a declarative shadow root
Boolean attribute
+
+ shadowrootcustomelements
+ template
+ Enables declarative shadow roots to indicate they will use a custom element registry
+ Boolean attribute
@@ -144409,8 +144410,8 @@ interface External {
shadowrootdelegatesfocus
+ template
From 0c9a957da416d50bffca3ae87c347f14d5e69135 Mon Sep 17 00:00:00 2001
From: Anne van Kesteren registry.createElement(name)
Name
production an
- "InvalidCharacterError
" DOMException
will be thrown.registry.cloneSubtree(root)
registry.initializeSubtree(root)
registry.initialize(root)
CustomElementRegistry
object.createElement(name)
- method steps are:
-
-
- Name
production,
- then throw an "InvalidCharacterError
"
- DOMException
.Document
, name, the
- HTML namespace, null, null, true, and this.cloneSubtree(root)
- method steps are:
-
-
- Document
or ShadowRoot
object, then
- throw a "NotSupportedError
" DOMException
.initializeSubtree(root)
- method steps are:
-
@@ -130575,7 +130524,7 @@ dictionary StorageEventInit : EventInit {
ShadowRoot
node whose custom element registry is null, then set
+ root's custom element
+ registry to this.
-
-
+ Element
node whose custom element registry is null, then set
- inclusiveDescendant's custom element
- registry to this.ShadowRoot
node whose
- custom element registry is null, set
- inclusiveDescendant's custom
- element registry to this.Element
node whose custom element registry is null, then set
+ inclusiveDescendant's custom element
+ registry to this.Element
node whose custom element registry is null, then set
- inclusiveDescendant's custom element
- registry to this.Element
node whose custom element registry is null:
+
+ shadowrootdelegatesfocus
shadowrootclonable
shadowrootserializable
shadowrootcustomelements
shadowrootcustomelementregistry
HTMLTemplateElement
.shadowrootcustomelements
+ data-x="attr-template-shadowrootcustomelementregistry">shadowrootcustomelementregistry
content attribute is a boolean attribute.template
element HTMLTemplateElement : HTMLElement {
data-x="attr-template-shadowrootserializable">shadowrootserializable content attribute.shadowRootCustomElements
IDL attribute
- must reflect the shadowrootcustomelements
content
- attribute.shadowrootcustomelementregistry
+ content attribute.
shadowrootcustomelements
attribute,
- then set shadow's keep custom element registry null to true. shadowrootcustomelements=""
". shadowrootcustomelementregistry=""
".
>
".shadowrootdelegatesfocus
;
shadowrootclonable
;
shadowrootserializable
;
- shadowrootcustomelements
shadowrootcustomelementregistry
HTMLTemplateElement
Sets clonable on a declarative shadow root
Boolean attribute
- shadowrootcustomelements
- template
+ shadowrootcustomelementregistry
+ template
Enables declarative shadow roots to indicate they will use a custom element registry
Boolean attribute
From 8ef7c76028dbdd375ee78d3a5f7e51f3072dc35a Mon Sep 17 00:00:00 2001
From: Anne van Kesteren Element
object,
- ShadowRoot
object, or Document
object parentNode:
+ ShadowRoot
object, or Document
object node:
-
Element
object, then return
+ Element
object, then return
parentNode's custom element
registry.
- ShadowRoot
object, then return
- parentNode's custom element
- registry.
+ ShadowRoot
object, then return node's
+ custom element registry.
-