@webcomponents/custom-elements
Version:
HTML Custom Elements Polyfill
47 lines (38 loc) • 1.75 kB
JavaScript
/**
* @license
* Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
* This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
* The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
* Code distributed by Google as part of the polymer project is also
* subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
import CustomElementInternals from './CustomElementInternals.js';
import CustomElementRegistry from './CustomElementRegistry.js';
import PatchHTMLElement from './Patch/HTMLElement.js';
import PatchDocument from './Patch/Document.js';
import PatchDocumentFragment from './Patch/DocumentFragment.js';
import PatchNode from './Patch/Node.js';
import PatchElement from './Patch/Element.js';
const priorCustomElements = window['customElements'];
if (!priorCustomElements ||
priorCustomElements['forcePolyfill'] ||
(typeof priorCustomElements['define'] != 'function') ||
(typeof priorCustomElements['get'] != 'function')) {
/** @type {!CustomElementInternals} */
const internals = new CustomElementInternals();
PatchHTMLElement(internals);
PatchDocument(internals);
PatchDocumentFragment(internals);
PatchNode(internals);
PatchElement(internals);
// The main document is always associated with the registry.
document.__CE_hasRegistry = true;
/** @type {!CustomElementRegistry} */
const customElements = new CustomElementRegistry(internals);
Object.defineProperty(window, 'customElements', {
configurable: true,
enumerable: true,
value: customElements,
});
}