[w3c/webcomponents] [idea] Support Namespaced Web Component Registration (#846)

Related issues:

https://github.com/w3c/webcomponents/issues/154

https://github.com/w3c/webcomponents/issues/488

https://github.com/w3c/webcomponents/issues/842

https://github.com/w3c/webcomponents/issues/716

This proposal doesn't necessarily contradict anything in the last one, the scoped custom registries proposal (I don't think).

I suspect something like this must have been considered, but just in case it is feasible:

I would like to avoid namespace collisions within the same shadow DOM scope, and to allow different versions of the same element name to run together, etc.  It would use a new function, customElements.defineNS, with signature:


```JavaScript
customElements.defineNS(namespace: string, name: string, constructor, options);
```

So for example:

```JavaScript
customElements.defineNS('https://unpkg.com/my-custom-element@0.0.47/my-custom-element.js', 'my-custom-element', MyCustomElement)
```

would register a (or another) version of MyCustomElement, which would be activated if using:

```JavaScript
const myCustEl = document.createElementNS('https://unpkg.com/my-cust-element@0.0.47/my-custom-element.js', 'my-custom-element');
container.appendChild(myCustEl);
``` 

or

```html
<ns:my-custom-element xmlns:ns="https://unpkg.com/my-cust-element@0.0.47/my-custom-element.js"></ns:my-custom-element>
```

If there is no global custom element already defined with name "my-custom-element", it would *also* register MyCustomElement in the global namespace where you could just use 

```html
<my-custom-element></my-custom-element>
```

as before.  I.e. the first registration gets to claim the non name-spaced tag. 
 




-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/webcomponents/issues/846

Received on Monday, 14 October 2019 16:18:45 UTC