- From: <bugzilla@jessica.w3.org>
- Date: Fri, 01 Mar 2013 21:53:50 +0000
- To: public-webapps-bugzilla@w3.org
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