[Bug 20260] [Shadow]: ShadowRoot should have shadowRoot attribute to get older shadow tree.

https://www.w3.org/Bugs/Public/show_bug.cgi?id=20260

--- Comment #5 from Dominic Cooney <dominicc@chromium.org> ---
Defining olderShadowRoot on HTMLShadowElement is inconvenient for code that
wants to walk the list of ShadowRoots. It is necessary to write something like:

function forEachShadowRoot(host, f) {
  for (var s = host.shadowRoot; s; s = olderShadowRootOf(s)) {
    f(s);
  }
}

function olderShadowRootOf(s) {
  var shadowElements = s.querySelectorAll('shadow');
  for (var i = 0; i < shadowElements.length; i++) {
    var shadowElement = shadowElements[i];
    if (shadowElement.olderShadowRoot) {
      return shadowElement.olderShadowRoot;
    }
  }
  // There were no shadow elements, or they were all inert
  shadowElement = document.createElement('shadow');
  s.appendChild(shadowElement);
  var result = shadowElement.olderShadowRoot;
  shadowElement.remove();
  return result;
}

This seems excessively complicated for this use case; it would be better if
olderShadowRoot was defined on ShadowRoot, then one could simply write the loop
in a straightforward way:

function forEachShadowRoot(host, f) {
  for (var s = host.shadowRoot; s; s = s.olderShadowRoot) {
    f(s);
  }
}

(In reply to comment #0)
> It could be named olderShadowRoot but |shadowRoot| aligns ShadowAware
> interface and better for iterating over for() loop.

I agree that this simplifies loops. However it could be confusing if in future
ShadowRoot could have a ShadowRoot, or if ShadowRoot became an element. So I
think the name olderShadowRoot is better.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Friday, 1 March 2013 21:53:52 UTC