diff --git a/source b/source index 0639bb4821c..7dcd5a9b44a 100644 --- a/source +++ b/source @@ -3203,7 +3203,8 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
HTMLCollection
interface, its
length
attribute, and its
@@ -3319,8 +3320,9 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
no-quirks modeis
valueLet 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
@@ -72562,8 +72596,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
@@ -72668,11 +72703,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 ();
@@ -72681,6 +72722,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
@@ -73059,6 +73161,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
@@ -73130,8 +73285,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
@@ -130103,7 +130277,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
@@ -134364,9 +134548,10 @@ console.assert(container.firstChild instanceof SuperP);
transitions. Let root be a new Let root be the result of creating an
+ element given the Append the element root to the 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
element with no attributes.Document
node created above, "html
",
+ the HTML namespace, null, null, false, and context's custom element registry.Document
node created
@@ -141654,7 +141839,8 @@ interface External {
shadowrootmode
;
shadowrootdelegatesfocus
;
shadowrootclonable
;
- shadowrootserializable
+ shadowrootserializable
;
+ shadowrootcustomelements
@@ -143116,6 +143302,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
shadowrootdelegatesfocus
template