From ec4f9eb9f6b1e73f39b14b040bfb300c3365f2ec Mon Sep 17 00:00:00 2001 From: Glenn Vandeuren Date: Mon, 15 May 2017 00:33:27 +0200 Subject: [PATCH] :trollface: Version: 0.4.0 --- dist/backed-es.js | 24 +++++++++++++++--------- dist/backed-es.js.map | 2 +- dist/backed-node.js | 24 +++++++++++++++--------- dist/backed-node.js.map | 2 +- dist/backed.js | 24 +++++++++++++++--------- dist/backed.js.map | 2 +- package.json | 2 +- 7 files changed, 49 insertions(+), 31 deletions(-) diff --git a/dist/backed-es.js b/dist/backed-es.js index ddb4f10..facbe63 100644 --- a/dist/backed-es.js +++ b/dist/backed-es.js @@ -56,6 +56,7 @@ var PubSubLoader = (isWindow => { } }); +const registeredElements = []; const shouldShim = () => { return (/Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent) ); @@ -163,9 +164,9 @@ const setupObserver = (obj, property, fn, opts = { data.instance = this; PubSub.publish(`global.${property}`, data); } else { - try { + if (this[fn]) { this[fn](data); - } catch (error) { + } else { console.warn(`observer undefined::${fn} is not a function`); } } @@ -205,6 +206,13 @@ const connectedCallback = (target = HTMLElement, klass = Function, template = nu handleObservers(target, klass.observers, klass.globalObservers); ready(target); }; +const shouldRegister = (name, klass) => { + if (registeredElements.indexOf(name) === -1) { + registeredElements.push(name); + return true; + } + return false; +}; var base = { setupTemplate: setupTemplate.bind(undefined), handleShadowRoot: handleShadowRoot.bind(undefined), @@ -214,13 +222,13 @@ var base = { setupObserver: setupObserver.bind(undefined), ready: ready.bind(undefined), connectedCallback: connectedCallback.bind(undefined), - constructorCallback: constructorCallback.bind(undefined) + constructorCallback: constructorCallback.bind(undefined), + shouldRegister: shouldRegister.bind(undefined) }; const supportsCustomElementsV1 = 'customElements' in window; const supportsCustomElementsV0 = 'registerElement' in document; const supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow; -let registeredElements = []; const isWindow = () => { try { return window; @@ -253,8 +261,7 @@ var backed = (_class => { if (this.disconnected) this.disconnected(); } }; - if (registeredElements.indexOf(name) === -1) { - registeredElements.push(name); + if (base.shouldRegister(name, klass)) { customElements.define(name, klass); } } else if (supportsCustomElementsV0) { @@ -272,8 +279,7 @@ var backed = (_class => { return this.createShadowRoot(); } }; - if (registeredElements.indexOf(name) === -1) { - registeredElements.push(name); + if (base.shouldRegister(name, klass)) { document.registerElement(name, klass); } } else { @@ -282,7 +288,7 @@ var backed = (_class => { } else { klass = _class; } - return klass; + return window[_class.name] = klass; }); export default backed; diff --git a/dist/backed-es.js.map b/dist/backed-es.js.map index bc36dda..47fe228 100644 --- a/dist/backed-es.js.map +++ b/dist/backed-es.js.map @@ -1 +1 @@ -{"version":3,"file":"backed-es.js","sources":["../src/internals/fire-event.js","../src/internals/to-js-prop.js","../src/internals/load-script.js","../src/internals/pub-sub.js","../src/internals/pub-sub-loader.js","../src/base.js","../src/backed.js"],"sourcesContent":["'use strict';\r\n/**\r\n * @mixin backed\r\n * @param {string} type Name of the event\r\n * @param {HTMLElement} target Name of the event\r\n * @param {string|boolean|number|object|array} detail\r\n */\r\nexport default (type=String, detail=null, target=document) => {\r\n target.dispatchEvent(new CustomEvent(type, {detail: detail}));\r\n};\r\n","'use strict';\r\n/**\r\n * @mixin Backed\r\n *\r\n * some-prop -> someProp\r\n *\r\n * @arg {string} string The content to convert\r\n * @return {string} string\r\n */\r\nexport default string => {\r\n let parts = string.split('-');\r\n if (parts.length > 1) {\r\n var upper = parts[1].charAt(0).toUpperCase();\r\n string = parts[0] + upper + parts[1].slice(1).toLowerCase();\r\n }\r\n return string;\r\n};\r\n","'use strict';\nconst loadScript = src => {\n return new Promise((resolve, reject) => {\n let script = document.createElement('script');\n script.src = src;\n script.onload = result => {\n resolve(result);\n }\n script.onerror = error => {\n reject(error);\n }\n document.body.appendChild(script);\n });\n}\nexport default loadScript;\n","'use strict';\r\nexport default class {\r\n\r\n /**\r\n * Creates handlers\r\n */\r\n constructor() {\r\n this.handlers = [];\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {Method} handler\r\n * @param {HTMLElement} context\r\n */\r\n subscribe(event, handler, context) {\r\n if (typeof context === 'undefined') {\r\n context = handler;\r\n }\r\n this.handlers.push({event: event, handler: handler.bind(context)});\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {String|Number|Boolean|Object|Array} change\n */\r\n publish(event, change) {\n for (let i = 0; i < this.handlers.length; i++) {\r\n if (this.handlers[i].event === event) {\n let oldValue = this.handlers[i].oldValue;\n // dirty checking value, ensures that we don't create a loop\n if (oldValue !== change.value) {\n this.handlers[i].handler(change, this.handlers[i].oldValue);\n this.handlers[i].oldValue = change.value;\n }\n }\r\n }\r\n }\r\n}\r\n","'use strict';\r\nimport Pubsub from './pub-sub.js';\nexport default isWindow => {\n if (isWindow) {\n window.PubSub = window.PubSub || new Pubsub();\n } else {\n global.PubSub = global.PubSub || new Pubsub();\n }\n}\r\n","'use strict';\nimport fireEvent from './internals/fire-event.js';\nimport toJsProp from './internals/to-js-prop.js';\nimport loadScript from './internals/load-script.js';\nimport PubSubLoader from './internals/pub-sub-loader.js';\n\nconst shouldShim = () => {\n return /Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent);\n}\n\nconst setupTemplate = ({ name: name, shady: shady }) => {\n try {\n const ownerDocument = document.currentScript.ownerDocument;\n const template = ownerDocument.querySelector(`template[id=\"${name}\"]`);\n if (template) {\n if (shady) {\n ShadyCSS.prepareTemplate(template, name);\n }\n return template;\n }\n } catch (e) {\n return console.warn(e);\n }\n}\n\nconst handleShadowRoot = ({ target: target, template: template }) => {\n if (!target.shadowRoot) {\n target.attachShadow({mode: 'open'});\n if (template) {\n target.shadowRoot.appendChild(\n document.importNode(template.content, true));\n\n if (shouldShim()) {\n const styles = target.shadowRoot.querySelectorAll('style');\n let _shimmed;\n if (styles[0]) {\n _shimmed = document.createElement('style');\n target.shadowRoot.insertBefore(_shimmed, target.shadowRoot.firstChild);\n }\n for (let style of styles) {\n _shimmed.innerHTML += style.innerHTML\n .replace(/:host\\b/gm, target.localName)\n .replace(/::content\\b/gm, '');\n\n target.shadowRoot.removeChild(style);\n }\n }\n }\n }\n}\n\nconst handleProperties = (target, properties) => {\r\n if (properties) {\r\n for (let property of Object.keys(properties)) {\r\n const observer = properties[property].observer;\r\n const strict = properties[property].strict;\r\n const isGlobal = properties[property].global;\r\n handlePropertyObserver(target, property, observer, {\r\n strict: strict || false,\r\n global: isGlobal || false\r\n });\n target[property] = properties[property].value;\n // Bind(superclass, superclass.properties)\r\n }\r\n }\r\n}\r\n\r\nconst handlePropertyObserver = (obj, property, observer, opts={\r\n strict: false, global:false\r\n}) => {\r\n\r\n if (observer && _needsObserverSetup(obj, property)) {\r\n obj.observedProperties.push(property);\r\n\n // subscribe only when a callback is defined, all other global options are still available ...\n if (opts.global && obj[observer]) {\n PubSub.subscribe(`global.${property}`, obj[observer].bind(obj));\n }\r\n setupObserver(obj, property, observer, opts)\r\n }\r\n}\r\n\r\nconst _needsObserverSetup = (obj, property) => {\r\n if (!obj.observedProperties) {\r\n obj.observedProperties = [];\r\n }\r\n if (obj.observedProperties[property]) {\r\n console.warn(\r\n 'observer::ignoring duplicate property observer ' + property\r\n );\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nconst forObservers = (target, observers, isGlobal=false) => {\r\n for (let observe of observers) {\r\n let parts = observe.split(/\\(|\\)/g);\r\n let fn = parts[0];\r\n parts = parts.slice(1);\r\n for (let property of parts) {\r\n if (property.length) {\r\n handlePropertyObserver(target, property, fn, {\r\n strict: false,\r\n global: isGlobal\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Runs a method on target whenever given property changes\r\n *\r\n * example:\r\n * change(change) {\r\n * change.property // name of the property\r\n * change.value // value of the property\r\n * }\r\n *\r\n * @arg {object} obj target\r\n * @arg {string} property name\r\n * @arg {boolean} strict\r\n * @arg {method} fn The method to run on change\r\n */\r\nconst setupObserver = (obj, property, fn, opts={\r\n strict: false, global: false\r\n}) => {\n const isConfigurable = opts.strict ? false : true;\n Object.defineProperty(obj, property, {\r\n set(value) {\n if (this[`_${property}`] === value) {\n return;\n }\n this[`_${property}`] = value;\r\n let data = {\r\n property: property,\r\n value: value\r\n };\r\n if (opts.global) {\r\n data.instance = this;\r\n PubSub.publish(`global.${property}`, data);\r\n } else {\r\n try {\n this[fn](data);\n } catch (error) {\n console.warn(`observer undefined::${fn} is not a function`);\n }\n }\r\n },\r\n get() {\r\n return this[`_${property}`];\r\n },\r\n configurable: isConfigurable\n });\r\n}\r\n\r\n\r\nconst handleObservers = (target, observers=[], globalObservers=[]) => {\r\n if (!observers && !globalObservers) {\r\n return;\r\n }\r\n forObservers(target, observers);\r\n}\n\nconst ready = target => {\n requestAnimationFrame(() => {\n if (target.ready) target.ready();\n });\n}\n\nconst constructorCallback = (target=HTMLElement, hasWindow=false, shady) => {\n PubSubLoader(hasWindow);\n\n if (shady) {\n ShadyCSS.styleElement(target)\n }\n\n target.fireEvent = fireEvent.bind(target);\n target.toJsProp = toJsProp.bind(target);\n target.loadScript = loadScript.bind(target);\n\n if (!target.registered && target.created) target.created();\n\n // let backed know the element is registered\n target.registered = true;\n}\n\nconst connectedCallback = (target=HTMLElement, klass=Function, template=null) => {\n handleShadowRoot({target: target, template: template});\n if (target.connected) target.connected();\n // setup properties\n handleProperties(target, klass.properties);\n // setup properties\n handleObservers(target, klass.observers, klass.globalObservers);\n // notify everything is ready\n ready(target);\n}\n\r\nexport default {\n setupTemplate: setupTemplate.bind(this),\n handleShadowRoot: handleShadowRoot.bind(this),\n handleProperties: handleProperties.bind(this),\r\n handlePropertyObserver: handlePropertyObserver.bind(this),\r\n handleObservers: handleObservers.bind(this),\r\n setupObserver: setupObserver.bind(this),\n ready: ready.bind(this),\n connectedCallback: connectedCallback.bind(this),\n constructorCallback: constructorCallback.bind(this)\n}\n","'use strict';\r\nimport base from './base.js';\nconst supportsCustomElementsV1 = 'customElements' in window;\r\nconst supportsCustomElementsV0 = 'registerElement' in document;\nconst supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow;\nlet registeredElements = [];\n\nconst isWindow = () => {\r\n try {\r\n return window;\r\n } catch(e) {\r\n return false;\r\n }\r\n};\r\n\nconst hasWindow = isWindow();\n\n/**\r\n *\r\n * @module backed\r\n * @param {class} _class\r\n */\r\nexport default _class => {\r\n const upperToHyphen = string => {\r\n return string.replace(/([A-Z])/g, \"-$1\").toLowerCase().replace('-', '');\r\n };\r\n\r\n let klass;\r\n\r\n // get the tagName or try to make one with class.name\r\n let name = _class.is || upperToHyphen(_class.name);\r\n\r\n // Setup properties & observers\r\n if (hasWindow) {\n const template = base.setupTemplate({\n name: name,\n shady: !supportsShadowDOMV1\n });\n\n if (supportsCustomElementsV1) {\n klass = class extends _class {\r\n constructor() {\n super();\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n connectedCallback() {\n base.connectedCallback(this, _class, template);\n }\n disconnectedCallback() {\n if (this.disconnected) this.disconnected();\n }\n }\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n customElements.define(name, klass);\n }\n } else if (supportsCustomElementsV0) {\n klass = class extends _class {\n createdCallback() {\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n attachedCallback() {\n base.connectedCallback(this, _class, template);\n }\n detachedCallback() {\n if (this.disconnected) this.disconnected();\n }\n attachShadow() {\n // TODO: feature detect shadowDOM for V1\n return this.createShadowRoot();\n }\n }\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n document.registerElement(name, klass)\n }\n } else {\r\n console.warn('classes::unsupported');\r\n }\r\n } else {\n // TODO: handle Commonjs (properties, observers, etc ...)\n klass = _class;\r\n }\n return klass;\r\n};\r\n"],"names":["type","String","detail","target","document","dispatchEvent","CustomEvent","string","parts","split","length","upper","charAt","toUpperCase","slice","toLowerCase","loadScript","src","Promise","resolve","reject","script","createElement","onload","result","onerror","error","body","appendChild","handlers","event","handler","context","push","bind","change","i","oldValue","value","isWindow","PubSub","window","Pubsub","global","shouldShim","test","navigator","userAgent","setupTemplate","name","shady","ownerDocument","currentScript","template","querySelector","prepareTemplate","e","console","warn","handleShadowRoot","shadowRoot","attachShadow","mode","importNode","content","styles","querySelectorAll","_shimmed","insertBefore","firstChild","style","innerHTML","replace","localName","removeChild","handleProperties","properties","property","Object","keys","observer","strict","isGlobal","handlePropertyObserver","obj","opts","_needsObserverSetup","observedProperties","subscribe","forObservers","observers","observe","fn","setupObserver","isConfigurable","defineProperty","data","instance","publish","handleObservers","globalObservers","ready","constructorCallback","HTMLElement","hasWindow","styleElement","fireEvent","toJsProp","registered","created","connectedCallback","klass","Function","connected","this","supportsCustomElementsV1","supportsCustomElementsV0","supportsShadowDOMV1","prototype","registeredElements","_class","upperToHyphen","is","base","disconnected","indexOf","define","createShadowRoot","registerElement"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"backed-es.js","sources":["../src/internals/fire-event.js","../src/internals/to-js-prop.js","../src/internals/load-script.js","../src/internals/pub-sub.js","../src/internals/pub-sub-loader.js","../src/base.js","../src/backed.js"],"sourcesContent":["'use strict';\r\n/**\r\n * @mixin backed\r\n * @param {string} type Name of the event\r\n * @param {HTMLElement} target Name of the event\r\n * @param {string|boolean|number|object|array} detail\r\n */\r\nexport default (type=String, detail=null, target=document) => {\r\n target.dispatchEvent(new CustomEvent(type, {detail: detail}));\r\n};\r\n","'use strict';\r\n/**\r\n * @mixin Backed\r\n *\r\n * some-prop -> someProp\r\n *\r\n * @arg {string} string The content to convert\r\n * @return {string} string\r\n */\r\nexport default string => {\r\n let parts = string.split('-');\r\n if (parts.length > 1) {\r\n var upper = parts[1].charAt(0).toUpperCase();\r\n string = parts[0] + upper + parts[1].slice(1).toLowerCase();\r\n }\r\n return string;\r\n};\r\n","'use strict';\nconst loadScript = src => {\n return new Promise((resolve, reject) => {\n let script = document.createElement('script');\n script.src = src;\n script.onload = result => {\n resolve(result);\n }\n script.onerror = error => {\n reject(error);\n }\n document.body.appendChild(script);\n });\n}\nexport default loadScript;\n","'use strict';\r\nexport default class {\r\n\r\n /**\r\n * Creates handlers\r\n */\r\n constructor() {\r\n this.handlers = [];\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {Method} handler\r\n * @param {HTMLElement} context\r\n */\r\n subscribe(event, handler, context) {\r\n if (typeof context === 'undefined') {\r\n context = handler;\r\n }\r\n this.handlers.push({event: event, handler: handler.bind(context)});\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {String|Number|Boolean|Object|Array} change\n */\r\n publish(event, change) {\n for (let i = 0; i < this.handlers.length; i++) {\r\n if (this.handlers[i].event === event) {\n let oldValue = this.handlers[i].oldValue;\n // dirty checking value, ensures that we don't create a loop\n if (oldValue !== change.value) {\n this.handlers[i].handler(change, this.handlers[i].oldValue);\n this.handlers[i].oldValue = change.value;\n }\n }\r\n }\r\n }\r\n}\r\n","'use strict';\r\nimport Pubsub from './pub-sub.js';\nexport default isWindow => {\n if (isWindow) {\n window.PubSub = window.PubSub || new Pubsub();\n } else {\n global.PubSub = global.PubSub || new Pubsub();\n }\n}\r\n","'use strict';\nimport fireEvent from './internals/fire-event.js';\nimport toJsProp from './internals/to-js-prop.js';\nimport loadScript from './internals/load-script.js';\nimport PubSubLoader from './internals/pub-sub-loader.js';\n\nconst registeredElements = [];\n\nconst shouldShim = () => {\n return /Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent);\n}\n\nconst setupTemplate = ({ name: name, shady: shady }) => {\n try {\n const ownerDocument = document.currentScript.ownerDocument;\n const template = ownerDocument.querySelector(`template[id=\"${name}\"]`);\n if (template) {\n if (shady) {\n ShadyCSS.prepareTemplate(template, name);\n }\n return template;\n }\n } catch (e) {\n return console.warn(e);\n }\n}\n\nconst handleShadowRoot = ({ target: target, template: template }) => {\n if (!target.shadowRoot) {\n target.attachShadow({mode: 'open'});\n if (template) {\n target.shadowRoot.appendChild(\n document.importNode(template.content, true));\n\n if (shouldShim()) {\n const styles = target.shadowRoot.querySelectorAll('style');\n let _shimmed;\n if (styles[0]) {\n _shimmed = document.createElement('style');\n target.shadowRoot.insertBefore(_shimmed, target.shadowRoot.firstChild);\n }\n for (let style of styles) {\n _shimmed.innerHTML += style.innerHTML\n .replace(/:host\\b/gm, target.localName)\n .replace(/::content\\b/gm, '');\n\n target.shadowRoot.removeChild(style);\n }\n }\n }\n }\n}\n\nconst handleProperties = (target, properties) => {\r\n if (properties) {\r\n for (let property of Object.keys(properties)) {\r\n const observer = properties[property].observer;\r\n const strict = properties[property].strict;\r\n const isGlobal = properties[property].global;\r\n handlePropertyObserver(target, property, observer, {\r\n strict: strict || false,\r\n global: isGlobal || false\r\n });\n target[property] = properties[property].value;\n // Bind(superclass, superclass.properties)\r\n }\r\n }\r\n}\r\n\r\nconst handlePropertyObserver = (obj, property, observer, opts={\r\n strict: false, global:false\r\n}) => {\r\n\r\n if (observer && _needsObserverSetup(obj, property)) {\r\n obj.observedProperties.push(property);\r\n\n // subscribe only when a callback is defined, all other global options are still available ...\n if (opts.global && obj[observer]) {\n PubSub.subscribe(`global.${property}`, obj[observer].bind(obj));\n }\r\n setupObserver(obj, property, observer, opts)\r\n }\r\n}\r\n\r\nconst _needsObserverSetup = (obj, property) => {\r\n if (!obj.observedProperties) {\r\n obj.observedProperties = [];\r\n }\r\n if (obj.observedProperties[property]) {\r\n console.warn(\r\n 'observer::ignoring duplicate property observer ' + property\r\n );\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nconst forObservers = (target, observers, isGlobal=false) => {\r\n for (let observe of observers) {\r\n let parts = observe.split(/\\(|\\)/g);\r\n let fn = parts[0];\r\n parts = parts.slice(1);\r\n for (let property of parts) {\r\n if (property.length) {\r\n handlePropertyObserver(target, property, fn, {\r\n strict: false,\r\n global: isGlobal\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Runs a method on target whenever given property changes\r\n *\r\n * example:\r\n * change(change) {\r\n * change.property // name of the property\r\n * change.value // value of the property\r\n * }\r\n *\r\n * @arg {object} obj target\r\n * @arg {string} property name\r\n * @arg {boolean} strict\r\n * @arg {method} fn The method to run on change\r\n */\r\nconst setupObserver = (obj, property, fn, opts={\r\n strict: false, global: false\r\n}) => {\n const isConfigurable = opts.strict ? false : true;\n Object.defineProperty(obj, property, {\r\n set(value) {\n if (this[`_${property}`] === value) {\n return;\n }\n this[`_${property}`] = value;\r\n let data = {\r\n property: property,\r\n value: value\r\n };\r\n if (opts.global) {\r\n data.instance = this;\r\n PubSub.publish(`global.${property}`, data);\r\n } else {\r\n if (this[fn]) {\n this[fn](data);\n } else {\n console.warn(`observer undefined::${fn} is not a function`);\n }\n }\r\n },\r\n get() {\r\n return this[`_${property}`];\r\n },\r\n configurable: isConfigurable\n });\r\n}\r\n\r\n\r\nconst handleObservers = (target, observers=[], globalObservers=[]) => {\r\n if (!observers && !globalObservers) {\r\n return;\r\n }\r\n forObservers(target, observers);\r\n}\n\nconst ready = target => {\n requestAnimationFrame(() => {\n if (target.ready) target.ready();\n });\n}\n\nconst constructorCallback = (target=HTMLElement, hasWindow=false, shady) => {\n PubSubLoader(hasWindow);\n\n if (shady) {\n ShadyCSS.styleElement(target)\n }\n\n target.fireEvent = fireEvent.bind(target);\n target.toJsProp = toJsProp.bind(target);\n target.loadScript = loadScript.bind(target);\n\n if (!target.registered && target.created) target.created();\n\n // let backed know the element is registered\n target.registered = true;\n}\n\nconst connectedCallback = (target=HTMLElement, klass=Function, template=null) => {\n handleShadowRoot({target: target, template: template});\n if (target.connected) target.connected();\n // setup properties\n handleProperties(target, klass.properties);\n // setup properties\n handleObservers(target, klass.observers, klass.globalObservers);\n // notify everything is ready\n ready(target);\n}\n\nconst shouldRegister = (name, klass) => {\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n return true;\n }\n return false;\n}\n\r\nexport default {\n setupTemplate: setupTemplate.bind(this),\n handleShadowRoot: handleShadowRoot.bind(this),\n handleProperties: handleProperties.bind(this),\r\n handlePropertyObserver: handlePropertyObserver.bind(this),\r\n handleObservers: handleObservers.bind(this),\r\n setupObserver: setupObserver.bind(this),\n ready: ready.bind(this),\n connectedCallback: connectedCallback.bind(this),\n constructorCallback: constructorCallback.bind(this),\n shouldRegister: shouldRegister.bind(this)\n}\n","'use strict';\r\nimport base from './base.js';\nconst supportsCustomElementsV1 = 'customElements' in window;\r\nconst supportsCustomElementsV0 = 'registerElement' in document;\nconst supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow;\n\nconst isWindow = () => {\r\n try {\r\n return window;\r\n } catch(e) {\r\n return false;\r\n }\r\n};\r\n\nconst hasWindow = isWindow();\n\n/**\r\n *\r\n * @module backed\r\n * @param {class} _class\r\n */\r\nexport default _class => {\r\n const upperToHyphen = string => {\r\n return string.replace(/([A-Z])/g, \"-$1\").toLowerCase().replace('-', '');\r\n };\r\n\r\n let klass;\r\n\r\n // get the tagName or try to make one with class.name\r\n let name = _class.is || upperToHyphen(_class.name);\r\n\r\n // Setup properties & observers\r\n if (hasWindow) {\n const template = base.setupTemplate({\n name: name,\n shady: !supportsShadowDOMV1\n });\n\n if (supportsCustomElementsV1) {\n klass = class extends _class {\r\n constructor() {\n super();\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n connectedCallback() {\n base.connectedCallback(this, _class, template);\n }\n disconnectedCallback() {\n if (this.disconnected) this.disconnected();\n }\n }\n if (base.shouldRegister(name, klass)) {\n customElements.define(name, klass);\n };\n } else if (supportsCustomElementsV0) {\n klass = class extends _class {\n createdCallback() {\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n attachedCallback() {\n base.connectedCallback(this, _class, template);\n }\n detachedCallback() {\n if (this.disconnected) this.disconnected();\n }\n attachShadow() {\n // TODO: feature detect shadowDOM for V1\n return this.createShadowRoot();\n }\n }\n if (base.shouldRegister(name, klass)) {\n document.registerElement(name, klass)\n };\n } else {\r\n console.warn('classes::unsupported');\r\n }\r\n } else {\n // TODO: handle Commonjs (properties, observers, etc ...)\n klass = _class;\r\n }\n return window[_class.name] = klass;\n};\r\n"],"names":["type","String","detail","target","document","dispatchEvent","CustomEvent","string","parts","split","length","upper","charAt","toUpperCase","slice","toLowerCase","loadScript","src","Promise","resolve","reject","script","createElement","onload","result","onerror","error","body","appendChild","handlers","event","handler","context","push","bind","change","i","oldValue","value","isWindow","PubSub","window","Pubsub","global","registeredElements","shouldShim","test","navigator","userAgent","setupTemplate","name","shady","ownerDocument","currentScript","template","querySelector","prepareTemplate","e","console","warn","handleShadowRoot","shadowRoot","attachShadow","mode","importNode","content","styles","querySelectorAll","_shimmed","insertBefore","firstChild","style","innerHTML","replace","localName","removeChild","handleProperties","properties","property","Object","keys","observer","strict","isGlobal","handlePropertyObserver","obj","opts","_needsObserverSetup","observedProperties","subscribe","forObservers","observers","observe","fn","setupObserver","isConfigurable","defineProperty","data","instance","publish","handleObservers","globalObservers","ready","constructorCallback","HTMLElement","hasWindow","styleElement","fireEvent","toJsProp","registered","created","connectedCallback","klass","Function","connected","shouldRegister","indexOf","this","supportsCustomElementsV1","supportsCustomElementsV0","supportsShadowDOMV1","prototype","_class","upperToHyphen","is","base","disconnected","define","createShadowRoot","registerElement"],"mappings":"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"} \ No newline at end of file diff --git a/dist/backed-node.js b/dist/backed-node.js index de72f6e..0e0f60a 100644 --- a/dist/backed-node.js +++ b/dist/backed-node.js @@ -68,6 +68,7 @@ var PubSubLoader = (function (isWindow) { } }); +var registeredElements = []; var shouldShim = function shouldShim() { return (/Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent) ); @@ -258,9 +259,9 @@ var setupObserver = function setupObserver(obj, property, fn) { data.instance = this; PubSub.publish('global.' + property, data); } else { - try { + if (this[fn]) { this[fn](data); - } catch (error) { + } else { console.warn('observer undefined::' + fn + ' is not a function'); } } @@ -308,6 +309,13 @@ var connectedCallback = function connectedCallback() { handleObservers(target, klass.observers, klass.globalObservers); ready(target); }; +var shouldRegister = function shouldRegister(name, klass) { + if (registeredElements.indexOf(name) === -1) { + registeredElements.push(name); + return true; + } + return false; +}; var base = { setupTemplate: setupTemplate.bind(undefined), handleShadowRoot: handleShadowRoot.bind(undefined), @@ -317,13 +325,13 @@ var base = { setupObserver: setupObserver.bind(undefined), ready: ready.bind(undefined), connectedCallback: connectedCallback.bind(undefined), - constructorCallback: constructorCallback.bind(undefined) + constructorCallback: constructorCallback.bind(undefined), + shouldRegister: shouldRegister.bind(undefined) }; var supportsCustomElementsV1 = 'customElements' in window; var supportsCustomElementsV0 = 'registerElement' in document; var supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow; -var registeredElements = []; var isWindow = function isWindow() { try { return window; @@ -365,8 +373,7 @@ var backed = (function (_class) { }]); return klass; }(_class); - if (registeredElements.indexOf(name) === -1) { - registeredElements.push(name); + if (base.shouldRegister(name, klass)) { customElements.define(name, klass); } } else if (supportsCustomElementsV0) { @@ -399,8 +406,7 @@ var backed = (function (_class) { }]); return klass; }(_class); - if (registeredElements.indexOf(name) === -1) { - registeredElements.push(name); + if (base.shouldRegister(name, klass)) { document.registerElement(name, klass); } } else { @@ -409,7 +415,7 @@ var backed = (function (_class) { } else { klass = _class; } - return klass; + return window[_class.name] = klass; }); module.exports = backed; diff --git a/dist/backed-node.js.map b/dist/backed-node.js.map index ea8bac2..4b680b9 100644 --- a/dist/backed-node.js.map +++ b/dist/backed-node.js.map @@ -1 +1 @@ -{"version":3,"file":"backed-node.js","sources":["../src/internals/fire-event.js","../src/internals/to-js-prop.js","../src/internals/load-script.js","../src/internals/pub-sub.js","../src/internals/pub-sub-loader.js","../src/base.js","../src/backed.js"],"sourcesContent":["'use strict';\r\n/**\r\n * @mixin backed\r\n * @param {string} type Name of the event\r\n * @param {HTMLElement} target Name of the event\r\n * @param {string|boolean|number|object|array} detail\r\n */\r\nexport default (type=String, detail=null, target=document) => {\r\n target.dispatchEvent(new CustomEvent(type, {detail: detail}));\r\n};\r\n","'use strict';\r\n/**\r\n * @mixin Backed\r\n *\r\n * some-prop -> someProp\r\n *\r\n * @arg {string} string The content to convert\r\n * @return {string} string\r\n */\r\nexport default string => {\r\n let parts = string.split('-');\r\n if (parts.length > 1) {\r\n var upper = parts[1].charAt(0).toUpperCase();\r\n string = parts[0] + upper + parts[1].slice(1).toLowerCase();\r\n }\r\n return string;\r\n};\r\n","'use strict';\nconst loadScript = src => {\n return new Promise((resolve, reject) => {\n let script = document.createElement('script');\n script.src = src;\n script.onload = result => {\n resolve(result);\n }\n script.onerror = error => {\n reject(error);\n }\n document.body.appendChild(script);\n });\n}\nexport default loadScript;\n","'use strict';\r\nexport default class {\r\n\r\n /**\r\n * Creates handlers\r\n */\r\n constructor() {\r\n this.handlers = [];\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {Method} handler\r\n * @param {HTMLElement} context\r\n */\r\n subscribe(event, handler, context) {\r\n if (typeof context === 'undefined') {\r\n context = handler;\r\n }\r\n this.handlers.push({event: event, handler: handler.bind(context)});\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {String|Number|Boolean|Object|Array} change\n */\r\n publish(event, change) {\n for (let i = 0; i < this.handlers.length; i++) {\r\n if (this.handlers[i].event === event) {\n let oldValue = this.handlers[i].oldValue;\n // dirty checking value, ensures that we don't create a loop\n if (oldValue !== change.value) {\n this.handlers[i].handler(change, this.handlers[i].oldValue);\n this.handlers[i].oldValue = change.value;\n }\n }\r\n }\r\n }\r\n}\r\n","'use strict';\r\nimport Pubsub from './pub-sub.js';\nexport default isWindow => {\n if (isWindow) {\n window.PubSub = window.PubSub || new Pubsub();\n } else {\n global.PubSub = global.PubSub || new Pubsub();\n }\n}\r\n","'use strict';\nimport fireEvent from './internals/fire-event.js';\nimport toJsProp from './internals/to-js-prop.js';\nimport loadScript from './internals/load-script.js';\nimport PubSubLoader from './internals/pub-sub-loader.js';\n\nconst shouldShim = () => {\n return /Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent);\n}\n\nconst setupTemplate = ({ name: name, shady: shady }) => {\n try {\n const ownerDocument = document.currentScript.ownerDocument;\n const template = ownerDocument.querySelector(`template[id=\"${name}\"]`);\n if (template) {\n if (shady) {\n ShadyCSS.prepareTemplate(template, name);\n }\n return template;\n }\n } catch (e) {\n return console.warn(e);\n }\n}\n\nconst handleShadowRoot = ({ target: target, template: template }) => {\n if (!target.shadowRoot) {\n target.attachShadow({mode: 'open'});\n if (template) {\n target.shadowRoot.appendChild(\n document.importNode(template.content, true));\n\n if (shouldShim()) {\n const styles = target.shadowRoot.querySelectorAll('style');\n let _shimmed;\n if (styles[0]) {\n _shimmed = document.createElement('style');\n target.shadowRoot.insertBefore(_shimmed, target.shadowRoot.firstChild);\n }\n for (let style of styles) {\n _shimmed.innerHTML += style.innerHTML\n .replace(/:host\\b/gm, target.localName)\n .replace(/::content\\b/gm, '');\n\n target.shadowRoot.removeChild(style);\n }\n }\n }\n }\n}\n\nconst handleProperties = (target, properties) => {\r\n if (properties) {\r\n for (let property of Object.keys(properties)) {\r\n const observer = properties[property].observer;\r\n const strict = properties[property].strict;\r\n const isGlobal = properties[property].global;\r\n handlePropertyObserver(target, property, observer, {\r\n strict: strict || false,\r\n global: isGlobal || false\r\n });\n target[property] = properties[property].value;\n // Bind(superclass, superclass.properties)\r\n }\r\n }\r\n}\r\n\r\nconst handlePropertyObserver = (obj, property, observer, opts={\r\n strict: false, global:false\r\n}) => {\r\n\r\n if (observer && _needsObserverSetup(obj, property)) {\r\n obj.observedProperties.push(property);\r\n\n // subscribe only when a callback is defined, all other global options are still available ...\n if (opts.global && obj[observer]) {\n PubSub.subscribe(`global.${property}`, obj[observer].bind(obj));\n }\r\n setupObserver(obj, property, observer, opts)\r\n }\r\n}\r\n\r\nconst _needsObserverSetup = (obj, property) => {\r\n if (!obj.observedProperties) {\r\n obj.observedProperties = [];\r\n }\r\n if (obj.observedProperties[property]) {\r\n console.warn(\r\n 'observer::ignoring duplicate property observer ' + property\r\n );\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nconst forObservers = (target, observers, isGlobal=false) => {\r\n for (let observe of observers) {\r\n let parts = observe.split(/\\(|\\)/g);\r\n let fn = parts[0];\r\n parts = parts.slice(1);\r\n for (let property of parts) {\r\n if (property.length) {\r\n handlePropertyObserver(target, property, fn, {\r\n strict: false,\r\n global: isGlobal\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Runs a method on target whenever given property changes\r\n *\r\n * example:\r\n * change(change) {\r\n * change.property // name of the property\r\n * change.value // value of the property\r\n * }\r\n *\r\n * @arg {object} obj target\r\n * @arg {string} property name\r\n * @arg {boolean} strict\r\n * @arg {method} fn The method to run on change\r\n */\r\nconst setupObserver = (obj, property, fn, opts={\r\n strict: false, global: false\r\n}) => {\n const isConfigurable = opts.strict ? false : true;\n Object.defineProperty(obj, property, {\r\n set(value) {\n if (this[`_${property}`] === value) {\n return;\n }\n this[`_${property}`] = value;\r\n let data = {\r\n property: property,\r\n value: value\r\n };\r\n if (opts.global) {\r\n data.instance = this;\r\n PubSub.publish(`global.${property}`, data);\r\n } else {\r\n try {\n this[fn](data);\n } catch (error) {\n console.warn(`observer undefined::${fn} is not a function`);\n }\n }\r\n },\r\n get() {\r\n return this[`_${property}`];\r\n },\r\n configurable: isConfigurable\n });\r\n}\r\n\r\n\r\nconst handleObservers = (target, observers=[], globalObservers=[]) => {\r\n if (!observers && !globalObservers) {\r\n return;\r\n }\r\n forObservers(target, observers);\r\n}\n\nconst ready = target => {\n requestAnimationFrame(() => {\n if (target.ready) target.ready();\n });\n}\n\nconst constructorCallback = (target=HTMLElement, hasWindow=false, shady) => {\n PubSubLoader(hasWindow);\n\n if (shady) {\n ShadyCSS.styleElement(target)\n }\n\n target.fireEvent = fireEvent.bind(target);\n target.toJsProp = toJsProp.bind(target);\n target.loadScript = loadScript.bind(target);\n\n if (!target.registered && target.created) target.created();\n\n // let backed know the element is registered\n target.registered = true;\n}\n\nconst connectedCallback = (target=HTMLElement, klass=Function, template=null) => {\n handleShadowRoot({target: target, template: template});\n if (target.connected) target.connected();\n // setup properties\n handleProperties(target, klass.properties);\n // setup properties\n handleObservers(target, klass.observers, klass.globalObservers);\n // notify everything is ready\n ready(target);\n}\n\r\nexport default {\n setupTemplate: setupTemplate.bind(this),\n handleShadowRoot: handleShadowRoot.bind(this),\n handleProperties: handleProperties.bind(this),\r\n handlePropertyObserver: handlePropertyObserver.bind(this),\r\n handleObservers: handleObservers.bind(this),\r\n setupObserver: setupObserver.bind(this),\n ready: ready.bind(this),\n connectedCallback: connectedCallback.bind(this),\n constructorCallback: constructorCallback.bind(this)\n}\n","'use strict';\r\nimport base from './base.js';\nconst supportsCustomElementsV1 = 'customElements' in window;\r\nconst supportsCustomElementsV0 = 'registerElement' in document;\nconst supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow;\nlet registeredElements = [];\n\nconst isWindow = () => {\r\n try {\r\n return window;\r\n } catch(e) {\r\n return false;\r\n }\r\n};\r\n\nconst hasWindow = isWindow();\n\n/**\r\n *\r\n * @module backed\r\n * @param {class} _class\r\n */\r\nexport default _class => {\r\n const upperToHyphen = string => {\r\n return string.replace(/([A-Z])/g, \"-$1\").toLowerCase().replace('-', '');\r\n };\r\n\r\n let klass;\r\n\r\n // get the tagName or try to make one with class.name\r\n let name = _class.is || upperToHyphen(_class.name);\r\n\r\n // Setup properties & observers\r\n if (hasWindow) {\n const template = base.setupTemplate({\n name: name,\n shady: !supportsShadowDOMV1\n });\n\n if (supportsCustomElementsV1) {\n klass = class extends _class {\r\n constructor() {\n super();\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n connectedCallback() {\n base.connectedCallback(this, _class, template);\n }\n disconnectedCallback() {\n if (this.disconnected) this.disconnected();\n }\n }\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n customElements.define(name, klass);\n }\n } else if (supportsCustomElementsV0) {\n klass = class extends _class {\n createdCallback() {\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n attachedCallback() {\n base.connectedCallback(this, _class, template);\n }\n detachedCallback() {\n if (this.disconnected) this.disconnected();\n }\n attachShadow() {\n // TODO: feature detect shadowDOM for V1\n return this.createShadowRoot();\n }\n }\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n document.registerElement(name, klass)\n }\n } else {\r\n console.warn('classes::unsupported');\r\n }\r\n } else {\n // TODO: handle Commonjs (properties, observers, etc ...)\n klass = _class;\r\n }\n return klass;\r\n};\r\n"],"names":["type","String","detail","target","document","dispatchEvent","CustomEvent","parts","string","split","length","upper","charAt","toUpperCase","slice","toLowerCase","loadScript","Promise","resolve","reject","script","createElement","src","onload","result","onerror","error","body","appendChild","handlers","event","handler","context","push","bind","change","i","oldValue","value","isWindow","PubSub","window","Pubsub","global","shouldShim","test","navigator","userAgent","setupTemplate","name","shady","ownerDocument","currentScript","template","querySelector","prepareTemplate","e","console","warn","handleShadowRoot","shadowRoot","attachShadow","mode","importNode","content","styles","querySelectorAll","_shimmed","insertBefore","firstChild","style","innerHTML","replace","localName","removeChild","handleProperties","properties","Object","keys","property","observer","strict","isGlobal","handlePropertyObserver","obj","opts","_needsObserverSetup","observedProperties","subscribe","forObservers","observers","observe","fn","setupObserver","isConfigurable","defineProperty","data","instance","publish","handleObservers","globalObservers","ready","constructorCallback","HTMLElement","hasWindow","styleElement","fireEvent","toJsProp","registered","created","connectedCallback","klass","Function","connected","this","supportsCustomElementsV1","supportsCustomElementsV0","supportsShadowDOMV1","prototype","registeredElements","upperToHyphen","_class","is","base","disconnected","indexOf","define","createShadowRoot","registerElement"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"backed-node.js","sources":["../src/internals/fire-event.js","../src/internals/to-js-prop.js","../src/internals/load-script.js","../src/internals/pub-sub.js","../src/internals/pub-sub-loader.js","../src/base.js","../src/backed.js"],"sourcesContent":["'use strict';\r\n/**\r\n * @mixin backed\r\n * @param {string} type Name of the event\r\n * @param {HTMLElement} target Name of the event\r\n * @param {string|boolean|number|object|array} detail\r\n */\r\nexport default (type=String, detail=null, target=document) => {\r\n target.dispatchEvent(new CustomEvent(type, {detail: detail}));\r\n};\r\n","'use strict';\r\n/**\r\n * @mixin Backed\r\n *\r\n * some-prop -> someProp\r\n *\r\n * @arg {string} string The content to convert\r\n * @return {string} string\r\n */\r\nexport default string => {\r\n let parts = string.split('-');\r\n if (parts.length > 1) {\r\n var upper = parts[1].charAt(0).toUpperCase();\r\n string = parts[0] + upper + parts[1].slice(1).toLowerCase();\r\n }\r\n return string;\r\n};\r\n","'use strict';\nconst loadScript = src => {\n return new Promise((resolve, reject) => {\n let script = document.createElement('script');\n script.src = src;\n script.onload = result => {\n resolve(result);\n }\n script.onerror = error => {\n reject(error);\n }\n document.body.appendChild(script);\n });\n}\nexport default loadScript;\n","'use strict';\r\nexport default class {\r\n\r\n /**\r\n * Creates handlers\r\n */\r\n constructor() {\r\n this.handlers = [];\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {Method} handler\r\n * @param {HTMLElement} context\r\n */\r\n subscribe(event, handler, context) {\r\n if (typeof context === 'undefined') {\r\n context = handler;\r\n }\r\n this.handlers.push({event: event, handler: handler.bind(context)});\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {String|Number|Boolean|Object|Array} change\n */\r\n publish(event, change) {\n for (let i = 0; i < this.handlers.length; i++) {\r\n if (this.handlers[i].event === event) {\n let oldValue = this.handlers[i].oldValue;\n // dirty checking value, ensures that we don't create a loop\n if (oldValue !== change.value) {\n this.handlers[i].handler(change, this.handlers[i].oldValue);\n this.handlers[i].oldValue = change.value;\n }\n }\r\n }\r\n }\r\n}\r\n","'use strict';\r\nimport Pubsub from './pub-sub.js';\nexport default isWindow => {\n if (isWindow) {\n window.PubSub = window.PubSub || new Pubsub();\n } else {\n global.PubSub = global.PubSub || new Pubsub();\n }\n}\r\n","'use strict';\nimport fireEvent from './internals/fire-event.js';\nimport toJsProp from './internals/to-js-prop.js';\nimport loadScript from './internals/load-script.js';\nimport PubSubLoader from './internals/pub-sub-loader.js';\n\nconst registeredElements = [];\n\nconst shouldShim = () => {\n return /Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent);\n}\n\nconst setupTemplate = ({ name: name, shady: shady }) => {\n try {\n const ownerDocument = document.currentScript.ownerDocument;\n const template = ownerDocument.querySelector(`template[id=\"${name}\"]`);\n if (template) {\n if (shady) {\n ShadyCSS.prepareTemplate(template, name);\n }\n return template;\n }\n } catch (e) {\n return console.warn(e);\n }\n}\n\nconst handleShadowRoot = ({ target: target, template: template }) => {\n if (!target.shadowRoot) {\n target.attachShadow({mode: 'open'});\n if (template) {\n target.shadowRoot.appendChild(\n document.importNode(template.content, true));\n\n if (shouldShim()) {\n const styles = target.shadowRoot.querySelectorAll('style');\n let _shimmed;\n if (styles[0]) {\n _shimmed = document.createElement('style');\n target.shadowRoot.insertBefore(_shimmed, target.shadowRoot.firstChild);\n }\n for (let style of styles) {\n _shimmed.innerHTML += style.innerHTML\n .replace(/:host\\b/gm, target.localName)\n .replace(/::content\\b/gm, '');\n\n target.shadowRoot.removeChild(style);\n }\n }\n }\n }\n}\n\nconst handleProperties = (target, properties) => {\r\n if (properties) {\r\n for (let property of Object.keys(properties)) {\r\n const observer = properties[property].observer;\r\n const strict = properties[property].strict;\r\n const isGlobal = properties[property].global;\r\n handlePropertyObserver(target, property, observer, {\r\n strict: strict || false,\r\n global: isGlobal || false\r\n });\n target[property] = properties[property].value;\n // Bind(superclass, superclass.properties)\r\n }\r\n }\r\n}\r\n\r\nconst handlePropertyObserver = (obj, property, observer, opts={\r\n strict: false, global:false\r\n}) => {\r\n\r\n if (observer && _needsObserverSetup(obj, property)) {\r\n obj.observedProperties.push(property);\r\n\n // subscribe only when a callback is defined, all other global options are still available ...\n if (opts.global && obj[observer]) {\n PubSub.subscribe(`global.${property}`, obj[observer].bind(obj));\n }\r\n setupObserver(obj, property, observer, opts)\r\n }\r\n}\r\n\r\nconst _needsObserverSetup = (obj, property) => {\r\n if (!obj.observedProperties) {\r\n obj.observedProperties = [];\r\n }\r\n if (obj.observedProperties[property]) {\r\n console.warn(\r\n 'observer::ignoring duplicate property observer ' + property\r\n );\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nconst forObservers = (target, observers, isGlobal=false) => {\r\n for (let observe of observers) {\r\n let parts = observe.split(/\\(|\\)/g);\r\n let fn = parts[0];\r\n parts = parts.slice(1);\r\n for (let property of parts) {\r\n if (property.length) {\r\n handlePropertyObserver(target, property, fn, {\r\n strict: false,\r\n global: isGlobal\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Runs a method on target whenever given property changes\r\n *\r\n * example:\r\n * change(change) {\r\n * change.property // name of the property\r\n * change.value // value of the property\r\n * }\r\n *\r\n * @arg {object} obj target\r\n * @arg {string} property name\r\n * @arg {boolean} strict\r\n * @arg {method} fn The method to run on change\r\n */\r\nconst setupObserver = (obj, property, fn, opts={\r\n strict: false, global: false\r\n}) => {\n const isConfigurable = opts.strict ? false : true;\n Object.defineProperty(obj, property, {\r\n set(value) {\n if (this[`_${property}`] === value) {\n return;\n }\n this[`_${property}`] = value;\r\n let data = {\r\n property: property,\r\n value: value\r\n };\r\n if (opts.global) {\r\n data.instance = this;\r\n PubSub.publish(`global.${property}`, data);\r\n } else {\r\n if (this[fn]) {\n this[fn](data);\n } else {\n console.warn(`observer undefined::${fn} is not a function`);\n }\n }\r\n },\r\n get() {\r\n return this[`_${property}`];\r\n },\r\n configurable: isConfigurable\n });\r\n}\r\n\r\n\r\nconst handleObservers = (target, observers=[], globalObservers=[]) => {\r\n if (!observers && !globalObservers) {\r\n return;\r\n }\r\n forObservers(target, observers);\r\n}\n\nconst ready = target => {\n requestAnimationFrame(() => {\n if (target.ready) target.ready();\n });\n}\n\nconst constructorCallback = (target=HTMLElement, hasWindow=false, shady) => {\n PubSubLoader(hasWindow);\n\n if (shady) {\n ShadyCSS.styleElement(target)\n }\n\n target.fireEvent = fireEvent.bind(target);\n target.toJsProp = toJsProp.bind(target);\n target.loadScript = loadScript.bind(target);\n\n if (!target.registered && target.created) target.created();\n\n // let backed know the element is registered\n target.registered = true;\n}\n\nconst connectedCallback = (target=HTMLElement, klass=Function, template=null) => {\n handleShadowRoot({target: target, template: template});\n if (target.connected) target.connected();\n // setup properties\n handleProperties(target, klass.properties);\n // setup properties\n handleObservers(target, klass.observers, klass.globalObservers);\n // notify everything is ready\n ready(target);\n}\n\nconst shouldRegister = (name, klass) => {\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n return true;\n }\n return false;\n}\n\r\nexport default {\n setupTemplate: setupTemplate.bind(this),\n handleShadowRoot: handleShadowRoot.bind(this),\n handleProperties: handleProperties.bind(this),\r\n handlePropertyObserver: handlePropertyObserver.bind(this),\r\n handleObservers: handleObservers.bind(this),\r\n setupObserver: setupObserver.bind(this),\n ready: ready.bind(this),\n connectedCallback: connectedCallback.bind(this),\n constructorCallback: constructorCallback.bind(this),\n shouldRegister: shouldRegister.bind(this)\n}\n","'use strict';\r\nimport base from './base.js';\nconst supportsCustomElementsV1 = 'customElements' in window;\r\nconst supportsCustomElementsV0 = 'registerElement' in document;\nconst supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow;\n\nconst isWindow = () => {\r\n try {\r\n return window;\r\n } catch(e) {\r\n return false;\r\n }\r\n};\r\n\nconst hasWindow = isWindow();\n\n/**\r\n *\r\n * @module backed\r\n * @param {class} _class\r\n */\r\nexport default _class => {\r\n const upperToHyphen = string => {\r\n return string.replace(/([A-Z])/g, \"-$1\").toLowerCase().replace('-', '');\r\n };\r\n\r\n let klass;\r\n\r\n // get the tagName or try to make one with class.name\r\n let name = _class.is || upperToHyphen(_class.name);\r\n\r\n // Setup properties & observers\r\n if (hasWindow) {\n const template = base.setupTemplate({\n name: name,\n shady: !supportsShadowDOMV1\n });\n\n if (supportsCustomElementsV1) {\n klass = class extends _class {\r\n constructor() {\n super();\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n connectedCallback() {\n base.connectedCallback(this, _class, template);\n }\n disconnectedCallback() {\n if (this.disconnected) this.disconnected();\n }\n }\n if (base.shouldRegister(name, klass)) {\n customElements.define(name, klass);\n };\n } else if (supportsCustomElementsV0) {\n klass = class extends _class {\n createdCallback() {\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n attachedCallback() {\n base.connectedCallback(this, _class, template);\n }\n detachedCallback() {\n if (this.disconnected) this.disconnected();\n }\n attachShadow() {\n // TODO: feature detect shadowDOM for V1\n return this.createShadowRoot();\n }\n }\n if (base.shouldRegister(name, klass)) {\n document.registerElement(name, klass)\n };\n } else {\r\n console.warn('classes::unsupported');\r\n }\r\n } else {\n // TODO: handle Commonjs (properties, observers, etc ...)\n klass = _class;\r\n }\n return window[_class.name] = klass;\n};\r\n"],"names":["type","String","detail","target","document","dispatchEvent","CustomEvent","parts","string","split","length","upper","charAt","toUpperCase","slice","toLowerCase","loadScript","Promise","resolve","reject","script","createElement","src","onload","result","onerror","error","body","appendChild","handlers","event","handler","context","push","bind","change","i","oldValue","value","isWindow","PubSub","window","Pubsub","global","registeredElements","shouldShim","test","navigator","userAgent","setupTemplate","name","shady","ownerDocument","currentScript","template","querySelector","prepareTemplate","e","console","warn","handleShadowRoot","shadowRoot","attachShadow","mode","importNode","content","styles","querySelectorAll","_shimmed","insertBefore","firstChild","style","innerHTML","replace","localName","removeChild","handleProperties","properties","Object","keys","property","observer","strict","isGlobal","handlePropertyObserver","obj","opts","_needsObserverSetup","observedProperties","subscribe","forObservers","observers","observe","fn","setupObserver","isConfigurable","defineProperty","data","instance","publish","handleObservers","globalObservers","ready","constructorCallback","HTMLElement","hasWindow","styleElement","fireEvent","toJsProp","registered","created","connectedCallback","klass","Function","connected","shouldRegister","indexOf","this","supportsCustomElementsV1","supportsCustomElementsV0","supportsShadowDOMV1","prototype","upperToHyphen","_class","is","base","disconnected","define","createShadowRoot","registerElement"],"mappings":"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"} \ No newline at end of file diff --git a/dist/backed.js b/dist/backed.js index fe71167..161492a 100644 --- a/dist/backed.js +++ b/dist/backed.js @@ -59,6 +59,7 @@ var PubSubLoader = (isWindow => { } }); +const registeredElements = []; const shouldShim = () => { return (/Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent) ); @@ -166,9 +167,9 @@ const setupObserver = (obj, property, fn, opts = { data.instance = this; PubSub.publish(`global.${property}`, data); } else { - try { + if (this[fn]) { this[fn](data); - } catch (error) { + } else { console.warn(`observer undefined::${fn} is not a function`); } } @@ -208,6 +209,13 @@ const connectedCallback = (target = HTMLElement, klass = Function, template = nu handleObservers(target, klass.observers, klass.globalObservers); ready(target); }; +const shouldRegister = (name, klass) => { + if (registeredElements.indexOf(name) === -1) { + registeredElements.push(name); + return true; + } + return false; +}; var base = { setupTemplate: setupTemplate.bind(undefined), handleShadowRoot: handleShadowRoot.bind(undefined), @@ -217,13 +225,13 @@ var base = { setupObserver: setupObserver.bind(undefined), ready: ready.bind(undefined), connectedCallback: connectedCallback.bind(undefined), - constructorCallback: constructorCallback.bind(undefined) + constructorCallback: constructorCallback.bind(undefined), + shouldRegister: shouldRegister.bind(undefined) }; const supportsCustomElementsV1 = 'customElements' in window; const supportsCustomElementsV0 = 'registerElement' in document; const supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow; -let registeredElements = []; const isWindow = () => { try { return window; @@ -256,8 +264,7 @@ var backed = (_class => { if (this.disconnected) this.disconnected(); } }; - if (registeredElements.indexOf(name) === -1) { - registeredElements.push(name); + if (base.shouldRegister(name, klass)) { customElements.define(name, klass); } } else if (supportsCustomElementsV0) { @@ -275,8 +282,7 @@ var backed = (_class => { return this.createShadowRoot(); } }; - if (registeredElements.indexOf(name) === -1) { - registeredElements.push(name); + if (base.shouldRegister(name, klass)) { document.registerElement(name, klass); } } else { @@ -285,7 +291,7 @@ var backed = (_class => { } else { klass = _class; } - return klass; + return window[_class.name] = klass; }); return backed; diff --git a/dist/backed.js.map b/dist/backed.js.map index 3a173d5..5b56249 100644 --- a/dist/backed.js.map +++ b/dist/backed.js.map @@ -1 +1 @@ -{"version":3,"file":"backed.js","sources":["../src/internals/fire-event.js","../src/internals/to-js-prop.js","../src/internals/load-script.js","../src/internals/pub-sub.js","../src/internals/pub-sub-loader.js","../src/base.js","../src/backed.js"],"sourcesContent":["'use strict';\r\n/**\r\n * @mixin backed\r\n * @param {string} type Name of the event\r\n * @param {HTMLElement} target Name of the event\r\n * @param {string|boolean|number|object|array} detail\r\n */\r\nexport default (type=String, detail=null, target=document) => {\r\n target.dispatchEvent(new CustomEvent(type, {detail: detail}));\r\n};\r\n","'use strict';\r\n/**\r\n * @mixin Backed\r\n *\r\n * some-prop -> someProp\r\n *\r\n * @arg {string} string The content to convert\r\n * @return {string} string\r\n */\r\nexport default string => {\r\n let parts = string.split('-');\r\n if (parts.length > 1) {\r\n var upper = parts[1].charAt(0).toUpperCase();\r\n string = parts[0] + upper + parts[1].slice(1).toLowerCase();\r\n }\r\n return string;\r\n};\r\n","'use strict';\nconst loadScript = src => {\n return new Promise((resolve, reject) => {\n let script = document.createElement('script');\n script.src = src;\n script.onload = result => {\n resolve(result);\n }\n script.onerror = error => {\n reject(error);\n }\n document.body.appendChild(script);\n });\n}\nexport default loadScript;\n","'use strict';\r\nexport default class {\r\n\r\n /**\r\n * Creates handlers\r\n */\r\n constructor() {\r\n this.handlers = [];\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {Method} handler\r\n * @param {HTMLElement} context\r\n */\r\n subscribe(event, handler, context) {\r\n if (typeof context === 'undefined') {\r\n context = handler;\r\n }\r\n this.handlers.push({event: event, handler: handler.bind(context)});\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {String|Number|Boolean|Object|Array} change\n */\r\n publish(event, change) {\n for (let i = 0; i < this.handlers.length; i++) {\r\n if (this.handlers[i].event === event) {\n let oldValue = this.handlers[i].oldValue;\n // dirty checking value, ensures that we don't create a loop\n if (oldValue !== change.value) {\n this.handlers[i].handler(change, this.handlers[i].oldValue);\n this.handlers[i].oldValue = change.value;\n }\n }\r\n }\r\n }\r\n}\r\n","'use strict';\r\nimport Pubsub from './pub-sub.js';\nexport default isWindow => {\n if (isWindow) {\n window.PubSub = window.PubSub || new Pubsub();\n } else {\n global.PubSub = global.PubSub || new Pubsub();\n }\n}\r\n","'use strict';\nimport fireEvent from './internals/fire-event.js';\nimport toJsProp from './internals/to-js-prop.js';\nimport loadScript from './internals/load-script.js';\nimport PubSubLoader from './internals/pub-sub-loader.js';\n\nconst shouldShim = () => {\n return /Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent);\n}\n\nconst setupTemplate = ({ name: name, shady: shady }) => {\n try {\n const ownerDocument = document.currentScript.ownerDocument;\n const template = ownerDocument.querySelector(`template[id=\"${name}\"]`);\n if (template) {\n if (shady) {\n ShadyCSS.prepareTemplate(template, name);\n }\n return template;\n }\n } catch (e) {\n return console.warn(e);\n }\n}\n\nconst handleShadowRoot = ({ target: target, template: template }) => {\n if (!target.shadowRoot) {\n target.attachShadow({mode: 'open'});\n if (template) {\n target.shadowRoot.appendChild(\n document.importNode(template.content, true));\n\n if (shouldShim()) {\n const styles = target.shadowRoot.querySelectorAll('style');\n let _shimmed;\n if (styles[0]) {\n _shimmed = document.createElement('style');\n target.shadowRoot.insertBefore(_shimmed, target.shadowRoot.firstChild);\n }\n for (let style of styles) {\n _shimmed.innerHTML += style.innerHTML\n .replace(/:host\\b/gm, target.localName)\n .replace(/::content\\b/gm, '');\n\n target.shadowRoot.removeChild(style);\n }\n }\n }\n }\n}\n\nconst handleProperties = (target, properties) => {\r\n if (properties) {\r\n for (let property of Object.keys(properties)) {\r\n const observer = properties[property].observer;\r\n const strict = properties[property].strict;\r\n const isGlobal = properties[property].global;\r\n handlePropertyObserver(target, property, observer, {\r\n strict: strict || false,\r\n global: isGlobal || false\r\n });\n target[property] = properties[property].value;\n // Bind(superclass, superclass.properties)\r\n }\r\n }\r\n}\r\n\r\nconst handlePropertyObserver = (obj, property, observer, opts={\r\n strict: false, global:false\r\n}) => {\r\n\r\n if (observer && _needsObserverSetup(obj, property)) {\r\n obj.observedProperties.push(property);\r\n\n // subscribe only when a callback is defined, all other global options are still available ...\n if (opts.global && obj[observer]) {\n PubSub.subscribe(`global.${property}`, obj[observer].bind(obj));\n }\r\n setupObserver(obj, property, observer, opts)\r\n }\r\n}\r\n\r\nconst _needsObserverSetup = (obj, property) => {\r\n if (!obj.observedProperties) {\r\n obj.observedProperties = [];\r\n }\r\n if (obj.observedProperties[property]) {\r\n console.warn(\r\n 'observer::ignoring duplicate property observer ' + property\r\n );\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nconst forObservers = (target, observers, isGlobal=false) => {\r\n for (let observe of observers) {\r\n let parts = observe.split(/\\(|\\)/g);\r\n let fn = parts[0];\r\n parts = parts.slice(1);\r\n for (let property of parts) {\r\n if (property.length) {\r\n handlePropertyObserver(target, property, fn, {\r\n strict: false,\r\n global: isGlobal\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Runs a method on target whenever given property changes\r\n *\r\n * example:\r\n * change(change) {\r\n * change.property // name of the property\r\n * change.value // value of the property\r\n * }\r\n *\r\n * @arg {object} obj target\r\n * @arg {string} property name\r\n * @arg {boolean} strict\r\n * @arg {method} fn The method to run on change\r\n */\r\nconst setupObserver = (obj, property, fn, opts={\r\n strict: false, global: false\r\n}) => {\n const isConfigurable = opts.strict ? false : true;\n Object.defineProperty(obj, property, {\r\n set(value) {\n if (this[`_${property}`] === value) {\n return;\n }\n this[`_${property}`] = value;\r\n let data = {\r\n property: property,\r\n value: value\r\n };\r\n if (opts.global) {\r\n data.instance = this;\r\n PubSub.publish(`global.${property}`, data);\r\n } else {\r\n try {\n this[fn](data);\n } catch (error) {\n console.warn(`observer undefined::${fn} is not a function`);\n }\n }\r\n },\r\n get() {\r\n return this[`_${property}`];\r\n },\r\n configurable: isConfigurable\n });\r\n}\r\n\r\n\r\nconst handleObservers = (target, observers=[], globalObservers=[]) => {\r\n if (!observers && !globalObservers) {\r\n return;\r\n }\r\n forObservers(target, observers);\r\n}\n\nconst ready = target => {\n requestAnimationFrame(() => {\n if (target.ready) target.ready();\n });\n}\n\nconst constructorCallback = (target=HTMLElement, hasWindow=false, shady) => {\n PubSubLoader(hasWindow);\n\n if (shady) {\n ShadyCSS.styleElement(target)\n }\n\n target.fireEvent = fireEvent.bind(target);\n target.toJsProp = toJsProp.bind(target);\n target.loadScript = loadScript.bind(target);\n\n if (!target.registered && target.created) target.created();\n\n // let backed know the element is registered\n target.registered = true;\n}\n\nconst connectedCallback = (target=HTMLElement, klass=Function, template=null) => {\n handleShadowRoot({target: target, template: template});\n if (target.connected) target.connected();\n // setup properties\n handleProperties(target, klass.properties);\n // setup properties\n handleObservers(target, klass.observers, klass.globalObservers);\n // notify everything is ready\n ready(target);\n}\n\r\nexport default {\n setupTemplate: setupTemplate.bind(this),\n handleShadowRoot: handleShadowRoot.bind(this),\n handleProperties: handleProperties.bind(this),\r\n handlePropertyObserver: handlePropertyObserver.bind(this),\r\n handleObservers: handleObservers.bind(this),\r\n setupObserver: setupObserver.bind(this),\n ready: ready.bind(this),\n connectedCallback: connectedCallback.bind(this),\n constructorCallback: constructorCallback.bind(this)\n}\n","'use strict';\r\nimport base from './base.js';\nconst supportsCustomElementsV1 = 'customElements' in window;\r\nconst supportsCustomElementsV0 = 'registerElement' in document;\nconst supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow;\nlet registeredElements = [];\n\nconst isWindow = () => {\r\n try {\r\n return window;\r\n } catch(e) {\r\n return false;\r\n }\r\n};\r\n\nconst hasWindow = isWindow();\n\n/**\r\n *\r\n * @module backed\r\n * @param {class} _class\r\n */\r\nexport default _class => {\r\n const upperToHyphen = string => {\r\n return string.replace(/([A-Z])/g, \"-$1\").toLowerCase().replace('-', '');\r\n };\r\n\r\n let klass;\r\n\r\n // get the tagName or try to make one with class.name\r\n let name = _class.is || upperToHyphen(_class.name);\r\n\r\n // Setup properties & observers\r\n if (hasWindow) {\n const template = base.setupTemplate({\n name: name,\n shady: !supportsShadowDOMV1\n });\n\n if (supportsCustomElementsV1) {\n klass = class extends _class {\r\n constructor() {\n super();\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n connectedCallback() {\n base.connectedCallback(this, _class, template);\n }\n disconnectedCallback() {\n if (this.disconnected) this.disconnected();\n }\n }\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n customElements.define(name, klass);\n }\n } else if (supportsCustomElementsV0) {\n klass = class extends _class {\n createdCallback() {\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n attachedCallback() {\n base.connectedCallback(this, _class, template);\n }\n detachedCallback() {\n if (this.disconnected) this.disconnected();\n }\n attachShadow() {\n // TODO: feature detect shadowDOM for V1\n return this.createShadowRoot();\n }\n }\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n document.registerElement(name, klass)\n }\n } else {\r\n console.warn('classes::unsupported');\r\n }\r\n } else {\n // TODO: handle Commonjs (properties, observers, etc ...)\n klass = _class;\r\n }\n return klass;\r\n};\r\n"],"names":["type","String","detail","target","document","dispatchEvent","CustomEvent","string","parts","split","length","upper","charAt","toUpperCase","slice","toLowerCase","loadScript","src","Promise","resolve","reject","script","createElement","onload","result","onerror","error","body","appendChild","handlers","event","handler","context","push","bind","change","i","oldValue","value","isWindow","PubSub","window","Pubsub","global","shouldShim","test","navigator","userAgent","setupTemplate","name","shady","ownerDocument","currentScript","template","querySelector","prepareTemplate","e","console","warn","handleShadowRoot","shadowRoot","attachShadow","mode","importNode","content","styles","querySelectorAll","_shimmed","insertBefore","firstChild","style","innerHTML","replace","localName","removeChild","handleProperties","properties","property","Object","keys","observer","strict","isGlobal","handlePropertyObserver","obj","opts","_needsObserverSetup","observedProperties","subscribe","forObservers","observers","observe","fn","setupObserver","isConfigurable","defineProperty","data","instance","publish","handleObservers","globalObservers","ready","constructorCallback","HTMLElement","hasWindow","styleElement","fireEvent","toJsProp","registered","created","connectedCallback","klass","Function","connected","this","supportsCustomElementsV1","supportsCustomElementsV0","supportsShadowDOMV1","prototype","registeredElements","_class","upperToHyphen","is","base","disconnected","indexOf","define","createShadowRoot","registerElement"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"backed.js","sources":["../src/internals/fire-event.js","../src/internals/to-js-prop.js","../src/internals/load-script.js","../src/internals/pub-sub.js","../src/internals/pub-sub-loader.js","../src/base.js","../src/backed.js"],"sourcesContent":["'use strict';\r\n/**\r\n * @mixin backed\r\n * @param {string} type Name of the event\r\n * @param {HTMLElement} target Name of the event\r\n * @param {string|boolean|number|object|array} detail\r\n */\r\nexport default (type=String, detail=null, target=document) => {\r\n target.dispatchEvent(new CustomEvent(type, {detail: detail}));\r\n};\r\n","'use strict';\r\n/**\r\n * @mixin Backed\r\n *\r\n * some-prop -> someProp\r\n *\r\n * @arg {string} string The content to convert\r\n * @return {string} string\r\n */\r\nexport default string => {\r\n let parts = string.split('-');\r\n if (parts.length > 1) {\r\n var upper = parts[1].charAt(0).toUpperCase();\r\n string = parts[0] + upper + parts[1].slice(1).toLowerCase();\r\n }\r\n return string;\r\n};\r\n","'use strict';\nconst loadScript = src => {\n return new Promise((resolve, reject) => {\n let script = document.createElement('script');\n script.src = src;\n script.onload = result => {\n resolve(result);\n }\n script.onerror = error => {\n reject(error);\n }\n document.body.appendChild(script);\n });\n}\nexport default loadScript;\n","'use strict';\r\nexport default class {\r\n\r\n /**\r\n * Creates handlers\r\n */\r\n constructor() {\r\n this.handlers = [];\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {Method} handler\r\n * @param {HTMLElement} context\r\n */\r\n subscribe(event, handler, context) {\r\n if (typeof context === 'undefined') {\r\n context = handler;\r\n }\r\n this.handlers.push({event: event, handler: handler.bind(context)});\r\n }\r\n\r\n /**\r\n * @param {String} event\r\n * @param {String|Number|Boolean|Object|Array} change\n */\r\n publish(event, change) {\n for (let i = 0; i < this.handlers.length; i++) {\r\n if (this.handlers[i].event === event) {\n let oldValue = this.handlers[i].oldValue;\n // dirty checking value, ensures that we don't create a loop\n if (oldValue !== change.value) {\n this.handlers[i].handler(change, this.handlers[i].oldValue);\n this.handlers[i].oldValue = change.value;\n }\n }\r\n }\r\n }\r\n}\r\n","'use strict';\r\nimport Pubsub from './pub-sub.js';\nexport default isWindow => {\n if (isWindow) {\n window.PubSub = window.PubSub || new Pubsub();\n } else {\n global.PubSub = global.PubSub || new Pubsub();\n }\n}\r\n","'use strict';\nimport fireEvent from './internals/fire-event.js';\nimport toJsProp from './internals/to-js-prop.js';\nimport loadScript from './internals/load-script.js';\nimport PubSubLoader from './internals/pub-sub-loader.js';\n\nconst registeredElements = [];\n\nconst shouldShim = () => {\n return /Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent);\n}\n\nconst setupTemplate = ({ name: name, shady: shady }) => {\n try {\n const ownerDocument = document.currentScript.ownerDocument;\n const template = ownerDocument.querySelector(`template[id=\"${name}\"]`);\n if (template) {\n if (shady) {\n ShadyCSS.prepareTemplate(template, name);\n }\n return template;\n }\n } catch (e) {\n return console.warn(e);\n }\n}\n\nconst handleShadowRoot = ({ target: target, template: template }) => {\n if (!target.shadowRoot) {\n target.attachShadow({mode: 'open'});\n if (template) {\n target.shadowRoot.appendChild(\n document.importNode(template.content, true));\n\n if (shouldShim()) {\n const styles = target.shadowRoot.querySelectorAll('style');\n let _shimmed;\n if (styles[0]) {\n _shimmed = document.createElement('style');\n target.shadowRoot.insertBefore(_shimmed, target.shadowRoot.firstChild);\n }\n for (let style of styles) {\n _shimmed.innerHTML += style.innerHTML\n .replace(/:host\\b/gm, target.localName)\n .replace(/::content\\b/gm, '');\n\n target.shadowRoot.removeChild(style);\n }\n }\n }\n }\n}\n\nconst handleProperties = (target, properties) => {\r\n if (properties) {\r\n for (let property of Object.keys(properties)) {\r\n const observer = properties[property].observer;\r\n const strict = properties[property].strict;\r\n const isGlobal = properties[property].global;\r\n handlePropertyObserver(target, property, observer, {\r\n strict: strict || false,\r\n global: isGlobal || false\r\n });\n target[property] = properties[property].value;\n // Bind(superclass, superclass.properties)\r\n }\r\n }\r\n}\r\n\r\nconst handlePropertyObserver = (obj, property, observer, opts={\r\n strict: false, global:false\r\n}) => {\r\n\r\n if (observer && _needsObserverSetup(obj, property)) {\r\n obj.observedProperties.push(property);\r\n\n // subscribe only when a callback is defined, all other global options are still available ...\n if (opts.global && obj[observer]) {\n PubSub.subscribe(`global.${property}`, obj[observer].bind(obj));\n }\r\n setupObserver(obj, property, observer, opts)\r\n }\r\n}\r\n\r\nconst _needsObserverSetup = (obj, property) => {\r\n if (!obj.observedProperties) {\r\n obj.observedProperties = [];\r\n }\r\n if (obj.observedProperties[property]) {\r\n console.warn(\r\n 'observer::ignoring duplicate property observer ' + property\r\n );\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nconst forObservers = (target, observers, isGlobal=false) => {\r\n for (let observe of observers) {\r\n let parts = observe.split(/\\(|\\)/g);\r\n let fn = parts[0];\r\n parts = parts.slice(1);\r\n for (let property of parts) {\r\n if (property.length) {\r\n handlePropertyObserver(target, property, fn, {\r\n strict: false,\r\n global: isGlobal\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Runs a method on target whenever given property changes\r\n *\r\n * example:\r\n * change(change) {\r\n * change.property // name of the property\r\n * change.value // value of the property\r\n * }\r\n *\r\n * @arg {object} obj target\r\n * @arg {string} property name\r\n * @arg {boolean} strict\r\n * @arg {method} fn The method to run on change\r\n */\r\nconst setupObserver = (obj, property, fn, opts={\r\n strict: false, global: false\r\n}) => {\n const isConfigurable = opts.strict ? false : true;\n Object.defineProperty(obj, property, {\r\n set(value) {\n if (this[`_${property}`] === value) {\n return;\n }\n this[`_${property}`] = value;\r\n let data = {\r\n property: property,\r\n value: value\r\n };\r\n if (opts.global) {\r\n data.instance = this;\r\n PubSub.publish(`global.${property}`, data);\r\n } else {\r\n if (this[fn]) {\n this[fn](data);\n } else {\n console.warn(`observer undefined::${fn} is not a function`);\n }\n }\r\n },\r\n get() {\r\n return this[`_${property}`];\r\n },\r\n configurable: isConfigurable\n });\r\n}\r\n\r\n\r\nconst handleObservers = (target, observers=[], globalObservers=[]) => {\r\n if (!observers && !globalObservers) {\r\n return;\r\n }\r\n forObservers(target, observers);\r\n}\n\nconst ready = target => {\n requestAnimationFrame(() => {\n if (target.ready) target.ready();\n });\n}\n\nconst constructorCallback = (target=HTMLElement, hasWindow=false, shady) => {\n PubSubLoader(hasWindow);\n\n if (shady) {\n ShadyCSS.styleElement(target)\n }\n\n target.fireEvent = fireEvent.bind(target);\n target.toJsProp = toJsProp.bind(target);\n target.loadScript = loadScript.bind(target);\n\n if (!target.registered && target.created) target.created();\n\n // let backed know the element is registered\n target.registered = true;\n}\n\nconst connectedCallback = (target=HTMLElement, klass=Function, template=null) => {\n handleShadowRoot({target: target, template: template});\n if (target.connected) target.connected();\n // setup properties\n handleProperties(target, klass.properties);\n // setup properties\n handleObservers(target, klass.observers, klass.globalObservers);\n // notify everything is ready\n ready(target);\n}\n\nconst shouldRegister = (name, klass) => {\n if (registeredElements.indexOf(name) === -1) {\n registeredElements.push(name);\n return true;\n }\n return false;\n}\n\r\nexport default {\n setupTemplate: setupTemplate.bind(this),\n handleShadowRoot: handleShadowRoot.bind(this),\n handleProperties: handleProperties.bind(this),\r\n handlePropertyObserver: handlePropertyObserver.bind(this),\r\n handleObservers: handleObservers.bind(this),\r\n setupObserver: setupObserver.bind(this),\n ready: ready.bind(this),\n connectedCallback: connectedCallback.bind(this),\n constructorCallback: constructorCallback.bind(this),\n shouldRegister: shouldRegister.bind(this)\n}\n","'use strict';\r\nimport base from './base.js';\nconst supportsCustomElementsV1 = 'customElements' in window;\r\nconst supportsCustomElementsV0 = 'registerElement' in document;\nconst supportsShadowDOMV1 = !!HTMLElement.prototype.attachShadow;\n\nconst isWindow = () => {\r\n try {\r\n return window;\r\n } catch(e) {\r\n return false;\r\n }\r\n};\r\n\nconst hasWindow = isWindow();\n\n/**\r\n *\r\n * @module backed\r\n * @param {class} _class\r\n */\r\nexport default _class => {\r\n const upperToHyphen = string => {\r\n return string.replace(/([A-Z])/g, \"-$1\").toLowerCase().replace('-', '');\r\n };\r\n\r\n let klass;\r\n\r\n // get the tagName or try to make one with class.name\r\n let name = _class.is || upperToHyphen(_class.name);\r\n\r\n // Setup properties & observers\r\n if (hasWindow) {\n const template = base.setupTemplate({\n name: name,\n shady: !supportsShadowDOMV1\n });\n\n if (supportsCustomElementsV1) {\n klass = class extends _class {\r\n constructor() {\n super();\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n connectedCallback() {\n base.connectedCallback(this, _class, template);\n }\n disconnectedCallback() {\n if (this.disconnected) this.disconnected();\n }\n }\n if (base.shouldRegister(name, klass)) {\n customElements.define(name, klass);\n };\n } else if (supportsCustomElementsV0) {\n klass = class extends _class {\n createdCallback() {\n base.constructorCallback(this, hasWindow, !supportsShadowDOMV1);\n }\n attachedCallback() {\n base.connectedCallback(this, _class, template);\n }\n detachedCallback() {\n if (this.disconnected) this.disconnected();\n }\n attachShadow() {\n // TODO: feature detect shadowDOM for V1\n return this.createShadowRoot();\n }\n }\n if (base.shouldRegister(name, klass)) {\n document.registerElement(name, klass)\n };\n } else {\r\n console.warn('classes::unsupported');\r\n }\r\n } else {\n // TODO: handle Commonjs (properties, observers, etc ...)\n klass = _class;\r\n }\n return window[_class.name] = klass;\n};\r\n"],"names":["type","String","detail","target","document","dispatchEvent","CustomEvent","string","parts","split","length","upper","charAt","toUpperCase","slice","toLowerCase","loadScript","src","Promise","resolve","reject","script","createElement","onload","result","onerror","error","body","appendChild","handlers","event","handler","context","push","bind","change","i","oldValue","value","isWindow","PubSub","window","Pubsub","global","registeredElements","shouldShim","test","navigator","userAgent","setupTemplate","name","shady","ownerDocument","currentScript","template","querySelector","prepareTemplate","e","console","warn","handleShadowRoot","shadowRoot","attachShadow","mode","importNode","content","styles","querySelectorAll","_shimmed","insertBefore","firstChild","style","innerHTML","replace","localName","removeChild","handleProperties","properties","property","Object","keys","observer","strict","isGlobal","handlePropertyObserver","obj","opts","_needsObserverSetup","observedProperties","subscribe","forObservers","observers","observe","fn","setupObserver","isConfigurable","defineProperty","data","instance","publish","handleObservers","globalObservers","ready","constructorCallback","HTMLElement","hasWindow","styleElement","fireEvent","toJsProp","registered","created","connectedCallback","klass","Function","connected","shouldRegister","indexOf","this","supportsCustomElementsV1","supportsCustomElementsV0","supportsShadowDOMV1","prototype","_class","upperToHyphen","is","base","disconnected","define","createShadowRoot","registerElement"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 145010c..ae92bab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "backed", - "version": "0.3.4", + "version": "0.4.0", "description": "Small web framework for quick app & component development", "main": "dist/backed-node.js", "scripts": {