Re: [webcomponents] Rename createShadowRoot to attachShadow (#129)

Constructors, hmm. Good idea.

As far as I can tell all the essential data about a shadow root is:

- its host element
- its mode

If we say that you can attach and detach shadow roots, then essentially we are saying that the host is mutable. Thus:

```js
const s = new ShadowRoot({ mode });
// s is not yet associated to a host

s.host = someHost; // now it is
s.host = otherHost; // detach from someHost, attach to otherHost
s.host = null; // now it is not attached to any host

// Note: a side effect of `s.host = x` is setting `x@[[shadowRoot]]` to `s`.
// (`x@[[shadowRoot]] is notation for what the spec calls "x's shadow root")
```

We then say that `attachShadow` is defined as

```js
Element.prototype.attachShadow = function (shadowInitDict) {
  // Web IDL argument/this validation here
  const s = new ShadowRoot(shadowInitDict);
  s.host = this;
  return s;
};
```

and a putative `detachShadow` is

```js
Element.prototype.detachShadow = function (shadowInitDict) {
  // Web IDL this validation here

  const s = this@[[shadowRoot]];
  if (!s) {
    throw new DOMException("blahblahblah", "pickatype");
  }

  s.host = null;
  return s;
};
```

---
Reply to this email directly or view it on GitHub:
https://github.com/w3c/webcomponents/issues/129#issuecomment-118205891

Received on Friday, 3 July 2015 01:10:25 UTC