@@ -4465,15 +4465,36 @@ dom-Range-extractContents, dom-Range-cloneContents -->
44654465 <var> copy</var> , if <var> copy</var> is a <a>document</a> , and set <var> copy</var> 's
44664466 <a for=Node>node document</a> to <var> document</var> otherwise.
44674467
4468- <li> Run any <a>cloning steps</a> defined for <var> node</var> in
4468+ <li><p> Run any <a>cloning steps</a> defined for <var> node</var> in
44694469 <a>other applicable specifications</a> and pass <var> copy</var> , <var> node</var> ,
4470- <var> document</var> and the <i> clone children flag</i> if set, as parameters.
4470+ <var> document</var> , and the <i> clone children flag</i> if set, as parameters.
44714471
4472- <li> If the <i> clone children flag</i> is set, <a lt="clone a node">clone</a> all the
4473- <a for=tree>children</a> of <var> node</var> and append them to <var> copy</var> , with
4474- <var> document</var> as specified and the <i> clone children flag</i> being set.
4472+ <li><p> If the <i> clone children flag</i> is set, then for each <a for=tree>child</a>
4473+ <var> child</var> of <var> node</var> , in <a>tree order</a> : <a>append</a> the result of
4474+ <a lt="clone a node">cloning</a> <var> child</var> with <var> document</var> and the
4475+ <i> clone children flag</i> set, to <var> copy</var> .
44754476
4476- <li> Return <var> copy</var> .
4477+ <li>
4478+ <p> If <var> node</var> is a <a for=Element>shadow host</a> whose <a for=/>shadow root</a> 's
4479+ <a for=ShadowRoot>clonable</a> is true:
4480+
4481+ <ol>
4482+ <li><p> Run <a>attach a shadow root</a> with <var> copy</var> , <var> node</var> 's
4483+ <a for=Element>shadow root</a> 's <a for=ShadowRoot>mode</a>, true, <var>node</var>' s
4484+ <a for=Element>shadow root</a> 's <a for=ShadowRoot>delegates focus</a>, and <var>node</var>' s
4485+ <a for=Element>shadow root</a> 's <a for=ShadowRoot>slot assignment</a> .
4486+
4487+ <li><p> Set <var> copy</var> 's <a for=Element>shadow root</a>' s <a for=ShadowRoot>declarative</a>
4488+ to <var> node</var> 's <a for=Element>shadow root</a>' s <a for=ShadowRoot>declarative</a> .
4489+
4490+ <li><p> If the <i> clone children flag</i> is set, then for each <a for=tree>child</a>
4491+ <var> child</var> of <var> node</var> 's <a for=Element>shadow root</a> , in <a>tree order</a> :
4492+ <a>append</a> the result of <a lt="clone a node">cloning</a> <var> child</var> with
4493+ <var> document</var> and the <i> clone children flag</i> set, to <var> copy</var> 's
4494+ <a for=Element>shadow root</a> .
4495+ </ol>
4496+
4497+ <li><p> Return <var> copy</var> .
44774498</ol>
44784499
44794500<p> The <dfn method for=Node><code>cloneNode(<var>deep</var>)</code></dfn> method steps are:
@@ -4973,8 +4994,9 @@ known as <dfn export id=concept-document lt="document">documents</dfn>.
49734994<dfn export for=Document id=concept-document-content-type>content type</dfn> (a string),
49744995<dfn export for=Document id=concept-document-url>URL</dfn> (a <a for=/>URL</a> ),
49754996<dfn export for=Document id=concept-document-origin>origin</dfn> (an <a for=/>origin</a> ),
4976- <dfn export for=Document id=concept-document-type>type</dfn> ("<code> xml</code> " or "<code> html</code> "), and
4977- <dfn export for=Document id=concept-document-mode>mode</dfn> ("<code> no-quirks</code> ", "<code> quirks</code> ", or "<code> limited-quirks</code> ").
4997+ <dfn export for=Document id=concept-document-type>type</dfn> ("<code> xml</code> " or "<code> html</code> "),
4998+ <dfn export for=Document id=concept-document-mode>mode</dfn> ("<code> no-quirks</code> ", "<code> quirks</code> ", or "<code> limited-quirks</code> "), and
4999+ <dfn export for=Document>allow declarative shadow roots</dfn> (a boolean).
49785000[[!ENCODING]]
49795001[[!URL]]
49805002[[!HTML]]
@@ -4983,8 +5005,8 @@ known as <dfn export id=concept-document lt="document">documents</dfn>.
49835005<a for=/>encoding</a> , <a for=Document>content type</a> is
49845006"<code> application/xml</code> ", <a for=Document>URL</a> is "<code> about:blank</code> ",
49855007<a for=Document>origin</a> is an <a>opaque origin</a> ,
4986- <a for=Document>type</a> is "<code> xml</code> ", and its
4987- < a for=Document>mode </a> is " <code> no-quirks </code> " .
5008+ <a for=Document>type</a> is "<code> xml</code> ", <a for=Document>mode</a> is
5009+ " <code> no-quirks </code> ", and its < a for=Document>allow declarative shadow roots </a> is false .
49885010
49895011<p> A <a>document</a> is said to be an <dfn export>XML document</dfn> if its <a for=Document>type</a>
49905012is "<code> xml</code> "; otherwise an <dfn export>HTML document</dfn> . Whether a <a>document</a> is an
@@ -5857,13 +5879,19 @@ It is initially set to false.</p>
58575879<p> <a for=/>Shadow roots</a> have an associated
58585880<dfn export for=ShadowRoot>available to element internals</dfn> . It is initially set to false.</p>
58595881
5882+ <p> <a for=/>Shadow roots</a> have an associated <dfn export for=ShadowRoot>declarative</dfn>
5883+ (a boolean). It is initially set to false.</p>
5884+
58605885<p> <a for=/>Shadow roots</a> 's associated <a for=DocumentFragment>host</a> is never null.</p>
58615886<!-- If we ever change this, e.g., add a ShadowRoot object constructor, that would have serious
58625887 consequences for innerHTML. -->
58635888
58645889<p> <a for=/>Shadow roots</a> have an associated <dfn for=ShadowRoot>slot assignment</dfn>
58655890("<code> manual</code> " or "<code> named</code> ").
58665891
5892+ <p> <a for=/>Shadow roots</a> have an associated <dfn for=ShadowRoot>clonable</dfn> (a boolean).
5893+ It is initially set to false.</p>
5894+
58675895<p> A <a for=/>shadow root</a> 's <a>get the parent</a> algorithm, given an <var> event</var> , returns
58685896null if <var> event</var> 's <a>composed flag</a> is unset and <a for=/>shadow root</a> is the
58695897<a for=tree>root</a> of <var> event</var> 's <a for=Event>path</a>' s first struct's
@@ -6010,6 +6038,7 @@ dictionary ShadowRootInit {
60106038 required ShadowRootMode mode;
60116039 boolean delegatesFocus = false;
60126040 SlotAssignmentMode slotAssignment = "named";
6041+ boolean clonable = false;
60136042};
60146043</pre>
60156044
@@ -6857,23 +6886,39 @@ are:
68576886 "<code> span</code> "
68586887</ul>
68596888
6889+ <div algorithm>
68606890<p> The <dfn method for=Element><code>attachShadow(<var>init</var>)</code></dfn> method steps are:
68616891
68626892<ol>
6863- <li><p> If <a>this</a> 's <a for=Element>namespace</a> is not the <a>HTML namespace</a> ,
6893+ <li><p> Run <a>attach a shadow root</a> with <a>this</a> ,
6894+ <var> init</var> ["{{ShadowRootInit/mode}}"] , <var> init</var> ["{{ShadowRootInit/clonable}}"] ,
6895+ <var> init</var> ["{{ShadowRootInit/delegatesFocus}}"] , and
6896+ <var> init</var> ["{{ShadowRootInit/slotAssignment}}"] .
6897+
6898+ <li><p> Return <a>this</a> 's <a for=Element>shadow root</a> .
6899+ </ol>
6900+ </div>
6901+
6902+ <div algorithm>
6903+ <p> To <dfn id=concept-attach-a-shadow-root>attach a shadow root</dfn> , given an
6904+ <a for=/>element</a> <var> element</var> , a string <var> mode</var> , a boolean <var> clonable</var> ,
6905+ a boolean <var> delegatesFocus</var> , and a boolean <var> slotAssignment</var> :
6906+
6907+ <ol>
6908+ <li><p> If <var> element</var> 's <a for=Element>namespace</a> is not the <a>HTML namespace</a> ,
68646909 then <a>throw</a> a "{{NotSupportedError!!exception}} " {{DOMException}} .
68656910
6866- <li><p> If <a>this</a > 's <a for=Element>local name</a> is not a <a>valid shadow host name</a> , then
6867- <a>throw</a> a "{{NotSupportedError!!exception}} " {{DOMException}} .
6911+ <li><p> If <var> element </var > 's is not a <a>valid shadow host name</a> , then <a>throw</a> a
6912+ "{{NotSupportedError!!exception}} " {{DOMException}} .
68686913
68696914 <li>
6870- <p> If <a>this</a > 's <a for=Element>local name</a> is a <a>valid custom element name</a> , or
6871- <a>this</a > 's <a for=Element><code>is</code> value</a> is not null, then:
6915+ <p> If <var> element </var > 's <a for=Element>local name</a> is a <a>valid custom element name</a> , or
6916+ <var> element </var > 's <a for=Element><code>is</code> value</a> is non- null, then:
68726917
68736918 <ol>
68746919 <li><p> Let <var> definition</var> be the result of
68756920 <a lt="look up a custom element definition">looking up a custom element definition</a> given
6876- <a>this</a > 's <a for=Node>node document</a> , its <a for=Element>namespace</a> , its
6921+ <var> element </var > 's <a for=Node>node document</a> , its <a for=Element>namespace</a> , its
68776922 <a for=Element>local name</a> , and its <a for=Element><code>is</code> value</a> .
68786923
68796924 <li><p> If <var> definition</var> is not null and <var> definition</var> 's
@@ -6882,38 +6927,53 @@ are:
68826927 </ol>
68836928 </li>
68846929
6885- <li><p> If <a>this</a> is a <a for=Element>shadow host</a> , then <a>throw</a> an
6886- "{{NotSupportedError!!exception}} " {{DOMException}} .
6930+ <li>
6931+ <p> If <var> element</var> is a <a for=Element>shadow host</a> , then:
6932+
6933+ <ol>
6934+ <li><p> If <var> element</var> 's <a for=Element>shadow root</a>' s <a for=ShadowRoot>declarative</a>
6935+ is false, then <a>throw</a> an "{{NotSupportedError!!exception}} " {{DOMException}} .
6936+
6937+ <li>
6938+ <p> Otherwise, <a for=/>remove</a> all of <var> element</var> 's <a for=Element>shadow root</a>' s
6939+ <a for=tree>children</a> , in <a>tree order</a> , and return.
6940+
6941+ <p class=note> This means that if multiple declarative shadow roots are contained within a single
6942+ shadow host, only the last one will remain.
6943+ </ol>
68876944
68886945 <li><p> Let <var> shadow</var> be a new <a for=/>shadow root</a> whose <a for=Node>node document</a>
6889- is <a>this</a > 's <a for=Node>node document</a> , <a for=DocumentFragment>host</a> is <a>this</a> ,
6890- and <a for=ShadowRoot>mode</a> is <var> init </var> ["{{ShadowRootInit/mode}}"] .
6946+ is <var> element </var > 's <a for=Node>node document</a> , <a for=DocumentFragment>host</a> is
6947+ <var> element </var> , and <a for=ShadowRoot>mode</a> is <var> mode </var> .
68916948
6892- <li><p> Set <var> shadow</var> 's <a for=ShadowRoot>delegates focus</a> to
6893- <var> init</var> ["{{ShadowRootInit/delegatesFocus}}"] .
6949+ <li><p> Set <var> shadow</var> 's <a for=ShadowRoot>delegates focus</a> to <var> delegatesFocus</var> .
68946950
6895- <li><p> If <a>this</a > 's <a for=Element>custom element state</a> is " <code> precustomized </code> " or
6896- "<code> custom</code> ", then set <var> shadow</var> 's
6951+ <li><p> If <var> element </var > 's <a for=Element>custom element state</a> is
6952+ "<code> precustomized </code> " or " <code> custom</code> ", then set <var> shadow</var> 's
68976953 <a for=ShadowRoot>available to element internals</a> to true.
68986954
6899- <li><p> Set <var> shadow</var> 's <a for=ShadowRoot>slot assignment</a> to
6900- <var> init</var> ["{{ShadowRootInit/slotAssignment}}"] .
6955+ <li><p> Set <var> shadow</var> 's <a for=ShadowRoot>slot assignment</a> to <var> slotAssignment</var> .
69016956
6902- <li><p> Set <a>this</a > 's <a for=Element>shadow root </a> to <var> shadow </var> .
6957+ <li><p> Set <var> shadow </var > 's <a for=ShadowRoot>declarative </a> to false .
69036958
6904- <li><p> Return <var> shadow</var> .
6959+ <li><p> Set <var> shadow</var> 's <a for=ShadowRoot>clonable</a> to <var> clonable</var> .
6960+
6961+ <li><p> Set <var> element</var> 's <a for=Element>shadow root</a> to <var> shadow</var> .
69056962</ol>
6963+ </div>
69066964
6965+ <div algorithm>
69076966<p> The <dfn attribute for=Element><code>shadowRoot</code></dfn> getter steps are:
69086967
69096968<ol>
69106969 <li><p> Let <var> shadow</var> be <a>this</a> 's <a for=Element>shadow root</a> .
69116970
69126971 <li><p> If <var> shadow</var> is null or its <a for=ShadowRoot>mode</a> is "<code> closed</code> ",
6913- then return null.</p></li>
6972+ then return null.
69146973
69156974 <li><p> Return <var> shadow</var> .
69166975</ol>
6976+ </div>
69176977
69186978<hr>
69196979
@@ -10223,7 +10283,7 @@ Manish Tripathi,
1022310283Marcos Caceres,
1022410284Mark Miller,
1022510285Martijn van der Ven,
10226- Mason Freed,
10286+ Mason Freed,<!-- mfreed7; GitHub -->
1022710287Mats Palmgren,
1022810288Mounir Lamouri,
1022910289Michael Stramel,
0 commit comments