UNPKG

@webreflection/elements-utils

Version:
69 lines (59 loc) 1.7 kB
'use strict'; const asCustomElement = (m => m.__esModule ? /* istanbul ignore next */ m.default : /* istanbul ignore next */ m)(require('@webreflection/as-custom-element')); const Lie = typeof Promise === 'function' ? Promise : function (fn) { let queue = [], resolved = 0; fn(() => { resolved = 1; queue.splice(0).forEach(then); }); return {then}; function then(fn) { return (resolved ? setTimeout(fn) : queue.push(fn)), this; } }; module.exports = (root, query, config, defined, setup) => { // exports const get = selector => { const i = query.indexOf(selector); return i < 0 ? void 0 : config[i].o; }; const upgrade = node => { upgradeNode(node, new Set); }; const whenDefined = selector => { if (!(selector in defined)) { let _, $ = new Lie($ => { _ = $; }); defined[selector] = {_, $}; } return defined[selector].$; }; // util const setupList = (nodes, parsed) => { for (let i = 0, {length} = nodes; i < length; i++) { if (!parsed.has(nodes[i])) { parsed.add(nodes[i]); upgradeNode(nodes[i], parsed); } } }; const upgradeAll = (node, parsed) => { if (query.length) setupList(node.querySelectorAll(query), parsed); }; const upgradeNode = (node, parsed) => { for (let i = 0, {length} = query; i < length; i++) { if (( node.matches || node.webkitMatchesSelector || node.msMatchesSelector ).call(node, query[i])) setup(node, config[i]); } if (parsed) upgradeAll(node, parsed); }; return { get, upgrade, whenDefined, $: setupList, _: asCustomElement(root, upgradeNode, query) }; };