- From: Anne van Kesteren <notifications@github.com>
- Date: Thu, 01 Dec 2022 01:07:02 -0800
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/pull/892/review/1200578466@github.com>
@annevk commented on this pull request.
It largely looks okay, but still a lot of nits that make it hard to spot the real issues.
> @@ -4363,6 +4363,28 @@ dom-Range-extractContents, dom-Range-cloneContents -->
<a for=tree>children</a> of <var>node</var> and append them to <var>copy</var>, with
<var>document</var> as specified and the <i>clone children flag</i> being set.
+ <li>If <var>node</var> is a <a for=Element>shadow host</a> whose <a for=/>shadow root</a>'s
+ <a for=ShadowRoot>clonable</a> flag is set, run these steps:
+
+ <ol>
+ <li><p>Run <a>attach a shadow root</a> with <var>shadow host</var> equal to
Nit: indentation is wrong. We use single space.
> + <li><p>Run <a>attach a shadow root</a> with <var>shadow host</var> equal to
+ <var>copy</var>, <var>mode</var> equal to <var>node</var>'s <a for=/>shadow root</a>'s
+ <a for=ShadowRoot>mode</a>, <var>clonable</var> equal to true, and
+ <var>delegates focus</var> equal to <var>node</var>'s <a for=/>shadow root</a>'s
+ <a>delegates focus</a>.</p></li>
+
+ <li><p>If <var>node</var>'s <a for=/>shadow root</a>'s
+ <a for=ShadowRoot>is declarative shadow root</a> is true, then set <var>copy</var>'s
+ <a for=/>shadow root</a>'s <a for=ShadowRoot>is declarative shadow root</a> property to
+ true.</p></li>
+
+ <li>If the <i>clone children flag</i> is set, <a lt="clone a node">clone</a> all the
+ <a>children</a> of <var>node</var>'s <a for=/>shadow root</a> and append them to
+ <var>copy</var>'s <a for=/>shadow root</a>, with <var>document</var> as specified,
+ and the <i>clone children flag</i> set.
+
NitL spurious newline.
> @@ -4862,8 +4884,9 @@ known as <dfn export id=concept-document lt="document">documents</dfn>.
<dfn export for=Document id=concept-document-content-type>content type</dfn> (a string),
<dfn export for=Document id=concept-document-url>URL</dfn> (a <a for=/>URL</a>),
<dfn export for=Document id=concept-document-origin>origin</dfn> (an <a for=/>origin</a>),
-<dfn export for=Document id=concept-document-type>type</dfn> ("<code>xml</code>" or "<code>html</code>"), and
-<dfn export for=Document id=concept-document-mode>mode</dfn> ("<code>no-quirks</code>", "<code>quirks</code>", or "<code>limited-quirks</code>").
+<dfn export for=Document id=concept-document-type>type</dfn> ("<code>xml</code>" or "<code>html</code>"),
+<dfn export for=Document id=concept-document-mode>mode</dfn> ("<code>no-quirks</code>", "<code>quirks</code>", or "<code>limited-quirks</code>"), and
+<dfn export for=Document id=concept-document-allow-declarative-shadow-dom>allow declarative shadow DOM</dfn> ("<code>allow</code>", "<code>deny</code>", or unset).</p>
Couple comments:
* This should be "shadow roots" not "shadow DOM". We don't really use DOM as a term-of-art internally.
* No need to use ID for new concepts.
* Unset is highly unclear. If this is a tri-state let's give all a string name.
> @@ -5762,13 +5787,19 @@ It is initially set to false.</p>
<p><a for=/>Shadow roots</a> have an associated
<dfn export for=ShadowRoot>available to element internals</dfn>. It is initially set to false.</p>
+<p><a for=/>Shadow roots</a> have an associated <dfn export for=ShadowRoot>is declarative shadow root</dfn>.
+It is initially set to false.</p>
It would be nice to start declaring the type here as well. So after the definition have " (a boolean)" as we do for the enumerations. We can fix the others in a follow-up PR.
> +<p>The <dfn attribute for=Element><code>shadowRoot</code></dfn> attribute's getter must run these
+steps:
This should use the "getter steps" language as it does today.
> @@ -6727,11 +6759,37 @@ are:
<p>The <dfn method for=Element><code>attachShadow(<var>init</var>)</code></dfn> method steps are:
<ol>
- <li><p>If <a>this</a>'s <a for=Element>namespace</a> is not the <a>HTML namespace</a>,
+
+ <li><p>Run <a>attach a shadow root</a> with <var>shadow host</var> equal to <a>this</a>,
+ <var>mode</var> equal to <var>init</var>'s {{ShadowRootInit/mode}}, <var>clonable</var>
+ equal to <var>init</var>'s {{ShadowRootInit/clonable}}, and <var>delegates focus</var>
+ equal to <var>init</var>'s {{ShadowRootInit/delegatesFocus}}.</p></li>
(This also applies to the HTML PR.)
You shouldn't repeat the argument names here as they are not named arguments (see Infra). You should just invoke it as "Run X with _y_ and _z_."
> +</ol>
+
+<p>The <dfn attribute for=Element><code>shadowRoot</code></dfn> attribute's getter must run these
+steps:
+
+<ol>
+ <li><p>Let <var>shadow</var> be <a>this</a>'s <a for=Element>shadow root</a>.
+
+ <li><p>If <var>shadow</var> is null or its <a for=ShadowRoot>mode</a> is "<code>closed</code>",
+ then return null.</p></li>
+
+ <li><p>Return <var>shadow</var>.
+</ol>
+
+<p>To <dfn id=concept-attach-a-shadow-root>attach a shadow root</dfn>, given a
+<var>shadow host</var>, <var>mode</var>, <var>clonable</var>, and <var>delegates focus</var>,
For clarity we should have the argument types here. See Infra for guidance.
> then <a>throw</a> a "{{NotSupportedError!!exception}}" {{DOMException}}.
- <li>
- <p>If <a>this</a>'s <a for=Element>local name</a> is not one of the following:
+ <li><p>If <var>shadow host</var>'s <a for=Element>local name</a> is <em>not</em> a
Apart from replacing `<a>this</a>` nothing else should have changed here, including the newline.
> @@ -6774,15 +6832,23 @@ are:
</ol>
</li>
- <li><p>If <a>this</a> is a <a for=Element>shadow host</a>, then <a>throw</a> an
- "{{NotSupportedError!!exception}}" {{DOMException}}.
+ <li><p>If <var>shadow host</var> has a non-null <a for=/>shadow root</a>, then:
Why can this not use the original language of "If _shadow host_ is a shadow host"?
> +</ol>
+
+<p>The <dfn attribute for=Element><code>shadowRoot</code></dfn> attribute's getter must run these
+steps:
+
+<ol>
+ <li><p>Let <var>shadow</var> be <a>this</a>'s <a for=Element>shadow root</a>.
+
+ <li><p>If <var>shadow</var> is null or its <a for=ShadowRoot>mode</a> is "<code>closed</code>",
+ then return null.</p></li>
+
+ <li><p>Return <var>shadow</var>.
+</ol>
+
+<p>To <dfn id=concept-attach-a-shadow-root>attach a shadow root</dfn>, given a
+<var>shadow host</var>, <var>mode</var>, <var>clonable</var>, and <var>delegates focus</var>,
Also, _shadowHost_ and _delegatesFocus_.
> @@ -6774,15 +6832,23 @@ are:
</ol>
</li>
- <li><p>If <a>this</a> is a <a for=Element>shadow host</a>, then <a>throw</a> an
- "{{NotSupportedError!!exception}}" {{DOMException}}.
+ <li><p>If <var>shadow host</var> has a non-null <a for=/>shadow root</a>, then:
+ <ol>
+ <li><p>If <var>shadow host</var>'s <a for=/>shadow root</a>'s <a for=ShadowRoot>is declarative
Nit: indentation.
> @@ -6791,20 +6857,9 @@ are:
<li><p>Set <var>shadow</var>'s <a for=ShadowRoot>slot assignment</a> to
<var>init</var>["{{ShadowRootInit/slotAssignment}}"].
- <li><p>Set <a>this</a>'s <a for=Element>shadow root</a> to <var>shadow</var>.
+ <li><p>Set <var>shadow</var>'s <a for=ShadowRoot>is declarative shadow root</a> property to false.
```suggestion
<li><p>Set <var>shadow</var>'s <a for=ShadowRoot>is declarative shadow root</a> to false.
```
> @@ -6727,11 +6759,37 @@ are:
<p>The <dfn method for=Element><code>attachShadow(<var>init</var>)</code></dfn> method steps are:
<ol>
- <li><p>If <a>this</a>'s <a for=Element>namespace</a> is not the <a>HTML namespace</a>,
+
+ <li><p>Run <a>attach a shadow root</a> with <var>shadow host</var> equal to <a>this</a>,
+ <var>mode</var> equal to <var>init</var>'s {{ShadowRootInit/mode}}, <var>clonable</var>
+ equal to <var>init</var>'s {{ShadowRootInit/clonable}}, and <var>delegates focus</var>
+ equal to <var>init</var>'s {{ShadowRootInit/delegatesFocus}}.</p></li>
+
+ <li><p>Return <a>this</a>'s <a for=Element>shadow root</a>.</p></li>
+
Nit: spurious newline.
> @@ -6774,15 +6832,23 @@ are:
</ol>
</li>
- <li><p>If <a>this</a> is a <a for=Element>shadow host</a>, then <a>throw</a> an
- "{{NotSupportedError!!exception}}" {{DOMException}}.
+ <li><p>If <var>shadow host</var> has a non-null <a for=/>shadow root</a>, then:
+ <ol>
+ <li><p>If <var>shadow host</var>'s <a for=/>shadow root</a>'s <a for=ShadowRoot>is declarative
+ shadow root</a> property is false, then <a>throw</a> an "{{NotSupportedError!!exception}}" {{DOMException}}.
Not a property.
> @@ -6774,15 +6832,23 @@ are:
</ol>
</li>
- <li><p>If <a>this</a> is a <a for=Element>shadow host</a>, then <a>throw</a> an
- "{{NotSupportedError!!exception}}" {{DOMException}}.
+ <li><p>If <var>shadow host</var> has a non-null <a for=/>shadow root</a>, then:
+ <ol>
+ <li><p>If <var>shadow host</var>'s <a for=/>shadow root</a>'s <a for=ShadowRoot>is declarative
+ shadow root</a> property is false, then <a>throw</a> an "{{NotSupportedError!!exception}}" {{DOMException}}.
+
+ <li><p>Otherwise, <a for=/>remove</a> all of <a for=/>shadow root</a>'s <a>children</a>, in
+ <a>tree order</a>. Return <var>shadow host</var>'s <a for=/>shadow root</a>.
It seems weird for this algorithm to sometimes return something. That doesn't seem right.
> @@ -4363,6 +4363,28 @@ dom-Range-extractContents, dom-Range-cloneContents -->
<a for=tree>children</a> of <var>node</var> and append them to <var>copy</var>, with
<var>document</var> as specified and the <i>clone children flag</i> being set.
+ <li>If <var>node</var> is a <a for=Element>shadow host</a> whose <a for=/>shadow root</a>'s
+ <a for=ShadowRoot>clonable</a> flag is set, run these steps:
```suggestion
<a for=ShadowRoot>clonable</a> is true:
```
Right?
Also, needs to use `<p>` on a newline as the `<li>` has multiple children.
--
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/pull/892#pullrequestreview-1200578466
You are receiving this because you are subscribed to this thread.
Message ID: <whatwg/dom/pull/892/review/1200578466@github.com>
Received on Thursday, 1 December 2022 09:07:15 UTC