| /** |
| * @license |
| * Copyright (c) 2017 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 |
| */ |
| |
| interface MaybePolyfilledCe extends CustomElementRegistry { |
| readonly polyfillWrapFlushCallback?: object; |
| } |
| |
| /** |
| * True if the custom elements polyfill is in use. |
| */ |
| export const isCEPolyfill = typeof window !== 'undefined' && |
| window.customElements != null && |
| (window.customElements as MaybePolyfilledCe).polyfillWrapFlushCallback !== |
| undefined; |
| |
| /** |
| * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive), |
| * into another container (could be the same container), before `before`. If |
| * `before` is null, it appends the nodes to the container. |
| */ |
| export const reparentNodes = |
| (container: Node, |
| start: Node|null, |
| end: Node|null = null, |
| before: Node|null = null): void => { |
| while (start !== end) { |
| const n = start!.nextSibling; |
| container.insertBefore(start!, before); |
| start = n; |
| } |
| }; |
| |
| /** |
| * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from |
| * `container`. |
| */ |
| export const removeNodes = |
| (container: Node, start: Node|null, end: Node|null = null): void => { |
| while (start !== end) { |
| const n = start!.nextSibling; |
| container.removeChild(start!); |
| start = n; |
| } |
| }; |