UNPKG

heresy

Version:

lighterhtml based custom elements builtins

79 lines (70 loc) 1.95 kB
'use strict'; let transpiled = null; // the angry koala check @WebReflection/status/1133757401482584064 try { transpiled = new {o(){}}.o; } catch($) {} let extend = Super => class extends Super {}; if (transpiled) { const {getPrototypeOf, setPrototypeOf} = Object; const {construct} = typeof Reflect === 'object' ? Reflect : { construct(Super, args, Target) { const a = [null]; for (let i = 0; i < args.length; i++) a.push(args[i]); const Parent = Super.bind.apply(Super, a); return setPrototypeOf(new Parent, Target.prototype); } }; extend = function (Super, cutTheMiddleMan) { function Class() { return construct( cutTheMiddleMan ? getPrototypeOf(Super) : Super, arguments, Class ); } setPrototypeOf(Class.prototype, Super.prototype); return setPrototypeOf(Class, Super); }; } const hash = s => { const {length} = s; let t = 0; let i = 0; while (i < length) { t = ((t << 5) - t) + s.charCodeAt(i++); t = t & t; } return t.toString(36); }; const registry = { map: {}, re: null }; const regExp = keys => new RegExp( `<(/)?(${keys.join('|')})([^A-Za-z0-9:._-])`, 'g' ); let tmp = null; const replace = (markup, info) => { const {map, re} = (tmp || info); return markup.replace(re, (_, close, name, after) => { const {tagName, is, element} = map[name]; return element ? (close ? `</${is}>` : `<${is}${after}`) : (close ? `</${tagName}>` : `<${tagName} is="${is}"${after}`); }); }; const selector = ({tagName, is, element}) => element ? is : `${tagName}[is="${is}"]`; const getInfo = () => tmp; const setInfo = info => { tmp = info; }; exports.extend = extend; exports.hash = hash; exports.registry = registry; exports.regExp = regExp; exports.replace = replace; exports.selector = selector; exports.getInfo = getInfo; exports.setInfo = setInfo;