scoped-registries
v0.2.0
Published
Scoped Custom Element Registries Polyfill
Readme
Scoped Custom Element Registries Polyfill
This is a polyfill for allowing Scoped Custom Element Registries. It has been tested in Chrome, Safari and WebKit. This polyfill works scoping the custom element tag names.
Reference Documentation
- w3c / webcomponents
- Justin Fagnani explanation
- Scoped Elements - Proposal to align the API with CustomElementsRegistry
TODO
[X]
CustomElementRegistry- [X]
CustomElementRegistry()- [X] CustomElementRegistry is constructable.
- [X]
CustomElementRegistry.prototype.get(name: string):get()now returns the closest constructor defined for a tag name in a chain of registries. - [X]
CustomElementRegistry.prototype.getRegistry(name: string): Returns the closest registry in which a tag name is defined. - [X]
define()returns a new class. The constructor returned bydefine()is from a trivial subclass of the registered class.
- [X]
[X]
ShadowRoot- [X]
customElements: CustomElementRegistry: TheCustomElementRegistrytheShadowRootuses, set onattachShadowRoot(). - [X]
createElement(): create new elements using theCustomElementRegistryof theShadowRoot. - [X]
createElementNS(): create new elements using theCustomElementRegistryof theShadowRoot. - [X]
importNode(): Imports a node into the document that owns theShadowRoot, using theCustomElementRegistryof theShadowRoot. This enables cloning a template into multiple scopes to use different custom element definitions. - [X]
innerHTML - [X]
querySelector(): Must transform the tag selector to search by the scoped ones. - [X]
querySelectorAll(): Must transform the tag selector to search by the scoped ones. - [X] Styles
- [X] Styles inside the
styletag name - [X] Styles using
CSSStyleSheet
- [X] Styles inside the
- [X]
[X]
Element- [X]
Element.prototype.scope: Document | ShadowRoot: Elements have DOM creation APIs, likeinnerHTML, so they need a reference to their scope. Elements expose this with a scope property. One difference between this andgetRootNode()is that the scope for an element can never change. - [X]
Element.prototype.attachShadow(init: ShadowRootInit):ShadowRootInitadds a new property,customElements, in its options argument which is aCustomElementRegistry. - [X]
innerHTML - [X]
tagName - [X]
querySelector(): Must transform the tag selector to search by the scoped ones. - [X]
querySelectorAll(): Must transform the tag selector to search by the scoped ones. - [X]
getElementsByTagName(): Must transform the tag name to search by the scoped one. - [X]
getElementsByTagNameNS(): Must transform the tag name to search by the scoped one.
- [X]
[X] Limit custom elements constructors by default to only looking up registrations from the global registry.
Limitations
There are some limitations on the use of this polyfill.
- Importing a Node tree with an upgraded custom-element and styles into a shadowRoot: The custom element is going to maintain the upgraded instance, but styles are going to be scoped, so it could cause a visual problem in the case styles are using the custom element tag name.
