Skip to content

Commit 6d3d2f5

Browse files
committed
clone shadow hosts separately (cloning steps isn't needed as we don't call insertion steps for template's contents)
1 parent 7e5e391 commit 6d3d2f5

File tree

1 file changed

+36
-22
lines changed

1 file changed

+36
-22
lines changed

dom.bs

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4540,6 +4540,7 @@ algorithm is passed <var>node</var>, <var>copy</var>, and <var>subtree</var> as
45404540
<p class=note>HTML defines <a>cloning steps</a> for several elements, such as <{input}>, <{script}>,
45414541
and <{template}>. SVG ought to do the same for its <{script}> elements, but does not.
45424542

4543+
<div algorithm>
45434544
<p>To <dfn export id=concept-node-clone local-lt="clone">clone a node</dfn> given a
45444545
<a for=/>node</a> <var>node</var> and an optional <a for=/>document</a> <var>document</var> (default
45454546
<var>node</var>'s <a for=Node>node document</a>) and boolean <var>subtree</var> (default false):
@@ -4551,12 +4552,17 @@ and <{template}>. SVG ought to do the same for its <{script}> elements, but does
45514552
<li><p>Let <var>copy</var> be the result of <a>cloning a single node</a> given <var>node</var>,
45524553
<var>document</var>, and <var>subtree</var>.
45534554

4555+
<li><p><a>Clone a shadow host</a> given <var>node</var>, <var>copy</var>, <var>document</var>, and
4556+
<var>subtree</var>.
4557+
45544558
<li><p>If <var>subtree</var> is true, then <a>clone a node's children</a> given <var>node</var>,
45554559
<var>copy</var>, <var>document</var>, and <var>subtree</var>.
45564560

45574561
<li><p>Return <var>copy</var>.
45584562
</ol>
4563+
</div>
45594564

4565+
<div algorithm>
45604566
<p>To <dfn export>clone a node's children</dfn> given a <a for=/>node</a> <var>node</var>, a
45614567
<a for=/>node</a> <var>copy</var>, a <a for=/>document</a> <var>document</var>, and a boolean
45624568
<var>subtree</var>:
@@ -4571,11 +4577,16 @@ and <{template}>. SVG ought to do the same for its <{script}> elements, but does
45714577

45724578
<li><p><a for=/>Append</a> <var>childCopy</var> to <var>copy</var>.
45734579

4580+
<li><p><a>Clone a shadow host</a> given <var>child</var>, <var>childCopy</var>,
4581+
<var>document</var>, and <var>subtree</var>.
4582+
45744583
<li><p><a>Clone a node's children</a> given <var>child</var>, <var>childCopy</var>,
45754584
<var>document</var>, and <var>subtree</var>.
45764585
</ol>
45774586
</ol>
4587+
</div>
45784588

4589+
<div algorithm>
45794590
<p>To <dfn>clone a single node</dfn> given a <a for=/>node</a> <var>node</var>,
45804591
<a for=/>document</a> <var>document</var>, and boolean <var>subtree</var>:
45814592

@@ -4600,29 +4611,7 @@ and <{template}>. SVG ought to do the same for its <{script}> elements, but does
46004611

46014612
<li><p><a lt="append an attribute">Append</a> <var>copyAttribute</var> to <var>copy</var>.
46024613
</ol>
4603-
</li>
4604-
4605-
<li>
4606-
<p>If <var>node</var> is a <a for=Element>shadow host</a> and its
4607-
<a for=Element>shadow root</a>'s <a for=ShadowRoot>clonable</a> is true:
4608-
4609-
<ol>
4610-
<li><p><a for=/>Assert</a>: <var>copy</var> is not a <a for=Element>shadow host</a>.
4611-
4612-
<li><p><a>Attach a shadow root</a> with <var>copy</var>, <var>node</var>'s
4613-
<a for=Element>shadow root</a>'s <a for=ShadowRoot>mode</a>, true, <var>node</var>'s
4614-
<a for=Element>shadow root</a>'s <a for=ShadowRoot>serializable</a>, <var>node</var>'s
4615-
<a for=Element>shadow root</a>'s <a for=ShadowRoot>delegates focus</a>, and <var>node</var>'s
4616-
<a for=Element>shadow root</a>'s <a for=ShadowRoot>slot assignment</a>.
4617-
4618-
<li><p>Set <var>copy</var>'s <a for=Element>shadow root</a>'s <a for=ShadowRoot>declarative</a>
4619-
to <var>node</var>'s <a for=Element>shadow root</a>'s <a for=ShadowRoot>declarative</a>.
4620-
4621-
<li><p><a>Clone a node's children</a> given <var>node</var>'s <a for=Element>shadow root</a>,
4622-
<var>copy</var>'s <a for=Element>shadow root</a>, <var>document</var>, and <var>subtree</var>.
4623-
</ol>
46244614
</ol>
4625-
</li>
46264615

46274616
<li>
46284617
<p>Otherwise, set <var>copy</var> to a <a for=/>node</a> that <a>implements</a> the same
@@ -4668,6 +4657,31 @@ and <{template}>. SVG ought to do the same for its <{script}> elements, but does
46684657

46694658
<li><p>Return <var>copy</var>.
46704659
</ol>
4660+
</div>
4661+
4662+
<div algorithm>
4663+
<p>To <dfn>clone a shadow host</dfn> given a <a for=/>node</a> <var>node</var>, a <a for=/>node</a>
4664+
<var>copy</var>, a <a for=/>document</a> <var>document</var>, and a boolean <var>subtree</var>:
4665+
4666+
<ol>
4667+
<li><p>If <var>node</var> is not an <a for=/>element</a>, <a for=Element>shadow host</a>, or its
4668+
<a for=Element>shadow root</a>'s <a for=ShadowRoot>clonable</a> is false, then return.
4669+
4670+
<li><p><a for=/>Assert</a>: <var>copy</var> is not a <a for=Element>shadow host</a>.
4671+
4672+
<li><p><a>Attach a shadow root</a> with <var>copy</var>, <var>node</var>'s
4673+
<a for=Element>shadow root</a>'s <a for=ShadowRoot>mode</a>, true, <var>node</var>'s
4674+
<a for=Element>shadow root</a>'s <a for=ShadowRoot>serializable</a>, <var>node</var>'s
4675+
<a for=Element>shadow root</a>'s <a for=ShadowRoot>delegates focus</a>, and <var>node</var>'s
4676+
<a for=Element>shadow root</a>'s <a for=ShadowRoot>slot assignment</a>.
4677+
4678+
<li><p>Set <var>copy</var>'s <a for=Element>shadow root</a>'s <a for=ShadowRoot>declarative</a> to
4679+
<var>node</var>'s <a for=Element>shadow root</a>'s <a for=ShadowRoot>declarative</a>.
4680+
4681+
<li><p><a>Clone a node's children</a> given <var>node</var>'s <a for=Element>shadow root</a>,
4682+
<var>copy</var>'s <a for=Element>shadow root</a>, <var>document</var>, and <var>subtree</var>.
4683+
</ol>
4684+
</div>
46714685

46724686
<p>The <dfn method for=Node><code>cloneNode(<var>subtree</var>)</code></dfn> method steps are:
46734687

0 commit comments

Comments
 (0)