From 9aecb051a6687a71ff401e4742ac813e539ab229 Mon Sep 17 00:00:00 2001
From: Anne van Kesteren
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 current global object's active custom element constructor + map[NewTarget] exists:
+ +Set registry to current global object's active custom + element constructor map[NewTarget].
Remove current global object'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
shadowrootcustomelementregistry
HTMLTemplateElement
.
The shadowrootcustomelementregistry
+ content attribute is a boolean attribute.
The template contents of a template
element are not children of the element itself.
shadowrootserializable
content attribute.
+ The shadowRootCustomElementRegistry
+ IDL attribute must reflect the shadowrootcustomelementregistry
+ content attribute.
The IDL attribute does intentionally not have a boolean type so it can be + extended.
+The cloning steps for template
@@ -72617,18 +72648,15 @@ document.body.append(parent);
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 registry is null, then return null.
If document's browsing context 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 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. Returns an HTML element with name as its local name and
+ registry as its registry. If name does not match the The 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 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.
- 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. 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
@@ -73059,6 +73152,29 @@ 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 To upgrade an element, given as input a
@@ -73130,8 +73246,15 @@ customElements.define("x-foo", class extends HTMLElement {
Let C be definition's constructor. Let registry be element's custom element registry. Set registry's relevant global
+ object'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 " Obtain registry from the parser context. 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
@@ -130092,6 +130227,13 @@ document.body.appendChild(text);
data-x="attr-template-shadowrootdelegatesfocus">shadowrootdelegatesfocus attribute;
otherwise false. Let registry be declarative shadow host element's custom element registry. If template start tag has a If declarative shadow host element is a shadow host, then
insert an element at the adjusted insertion location with
template. Attach a shadow root with
declarative shadow host element, mode, clonable,
- serializable, delegatesFocus, and " If an exception is thrown, then catch it and: 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
@@ -141654,7 +141802,8 @@ interface External {
Window
object has an associated active custom
+ element constructor map, which is a map of constructors to
+ CustomElementRegistry
objects.customElements
attribute of the
Window
interface must return the CustomElementRegistry
object for that
@@ -72668,11 +72700,16 @@ 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);
+
+ HTMLElement createElement(DOMString name);
+ Node cloneSubtree(Node root);
};
callback CustomElementConstructor = HTMLElement ();
@@ -72681,6 +72718,12 @@ dictionary ElementDefinitionOptions {
DOMString extends;
};
CustomElementRegistry
has a 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 })
NotSupportedError
"
DOMException
will be thrown upon trying to extend a custom element or
an unknown element.window.customElements.get(name)
registry.get(name)
window.customElements.getName(constructor)
registry.getName(constructor)
window.customElements.whenDefined(name)
registry.whenDefined(name)
SyntaxError
" DOMException
if not
given a valid custom element name.window.customElements.upgrade(root)
registry.upgrade(root)
registry.createElement(name)
Name
production an
+ "InvalidCharacterError
" DOMException
will be thrown.registry.cloneSubtree(root)
new CustomElementRegistry()
constructor
+ steps are to set this's is scoped to true.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 to return the result of cloning a node
+ given root with subtree set to
+ true and fallbackRegistry set
+ 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.shadowrootcustomelementregistry
+ attribute, then set registry to null.named
".named
", and
+ registry.
shadowrootclonable=""
". shadowrootcustomelementregistry=""
".>
".shadowrootmode
;
shadowrootdelegatesfocus
;
shadowrootclonable
;
- shadowrootserializable
+ shadowrootserializable
;
+ shadowrootcustomelementregistry
@@ -143116,6 +143265,11 @@ interface External {
HTMLTemplateElement
template
Sets clonable on a declarative shadow root
Boolean attribute
+
+ shadowrootcustomelementregistry
+ template
+ Enables declarative shadow roots to indicate they will use a custom element registry
+ Boolean attribute
shadowrootdelegatesfocus
template