diff --git a/.size-snapshot.json b/.size-snapshot.json index c28d0d1..69fa8f1 100644 --- a/.size-snapshot.json +++ b/.size-snapshot.json @@ -1,7 +1,7 @@ { "dist/valyrian.min.js": { - "bundled": 10399, - "minified": 4467, - "gzipped": 1853 + "bundled": 10394, + "minified": 4470, + "gzipped": 1858 } } diff --git a/dist/valyrian.min.js b/dist/valyrian.min.js index 8f579be..5858ebc 100644 --- a/dist/valyrian.min.js +++ b/dist/valyrian.min.js @@ -1 +1 @@ -!function(){"use strict";let e,o,n,t=void 0;function d(e,o,n){this.props=o||{},this.children=n,this.name=e}function r(e){this.dom=e}r.prototype={props:{},children:[]};let i=new r;function l(e,o){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function p(e,o,...n){return new d(e,o,n)}p.isNode="undefined"==typeof window,p.dom2vnode=e=>{if(3===e.nodeType)return new r(e);if(1===e.nodeType){let o={};[].forEach.call(e.attributes,e=>o[e.nodeName]=e.nodeValue);let n=new d(e.nodeName,o,[]);n.dom=e;for(let o=0,t=e.childNodes.length;o{let o=l("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>p.dom2vnode(e))};let s=new Map;p.usePlugin=(e,o)=>!s.has(e)&&s.set(e,!0)&&e(p,o),p.reservedWords={key:!0,"v-list":!0,"v-noop":!0,"v-create":!0,"v-beforeupdate":!0,"v-update":!0,"v-remove":!0};let m={};function c(e){let o=e.target,n=`__on${e.type}`;for(;o;){if(o[n])return o[n](e),void(e.defaultPrevented||p.update());o=o.parentNode}}function a(e,o,n){if("v-remove"===o)for(let o=0,n=e.children.length;o{let t=o.props[e];p.reservedWords[e]?"function"==typeof p.reservedWords[e]&&p.reservedWords[e](t,o,n):"function"==typeof t?(m[e=`__${e}`]||(document.addEventListener(e.slice(4),c),m[e]=!0),o.dom[e]=t):e in o.dom&&!o.isSVG?o.dom[e]!==t&&(o.dom[e]=t):t!==n.props[e]&&o.dom.setAttribute(e,t)};let g=[];p.onCleanup=e=>{let o=p.current.parentVnode;o.onCleanup||(o.onCleanup=[]),o.onCleanup.push(e),-1===g.indexOf(o)&&g.push(o)},p.current={parentVnode:t,oldParentVnode:t,component:t};let y=Array.isArray;function N(e,o){let n=y(e.children)?e.children:[e.children],l=o.children;p.current.parentVnode=e,p.current.oldParentVnode=o;for(let o=0;oe.props.key),d=n.map(e=>e.props.key);for(let r=0,p=d.length;r=o.length?t:r;-1!==n?(l[n].processed=!0,h(e.dom,s,l[n],d)):h(e.dom,s,i,d)}}let r=l.length;for(;r--;)l[r].processed||(a(l[r],"v-remove"),l[r].dom.parentNode&&e.dom.removeChild(l[r].dom))}else{let o=l.length,t=n.length;for(;o-- >t;)a(l[o],"v-remove"),e.dom.removeChild(l[o].dom);for(o=0;o{if(e)return n&&(!function(){for(let e=g.length;e--;)for(let o of g[e].onCleanup)o();g=[]}(),o=e,e=new d(e.name,e.props,p(n,t,...r)),e.dom=o.dom,e.isSVG="svg"===e.name,N(e,o),p.isMounted=!0),p.isNode&&e.dom.innerHTML},p.mount=(o,t,d,...r)=>{let i=p.isNode?l("div"):"string"==typeof o?document.querySelectorAll(o)[0]:o;return e=p.dom2vnode(i),n=t,p.update(d,...r)},p.unmount=()=>{n=()=>"";let e=p.update();return n=t,p.isMounted=!1,e},p.directive=(e,o)=>!p.reservedWords[e]&&(p.reservedWords[e]=o),p.directive("v-for",(e,o)=>o.children=e.map(o.children[0]));let w=e=>(o,n,t)=>{if(o===e){let e=document.createTextNode("");t.dom&&t.dom.parentNode&&(a(t,"v-remove"),t.dom.parentNode.replaceChild(e,t.dom)),n.name="",n.children=[],n.props={},n.dom=e}};p.directive("v-if",w(!1)),p.directive("v-unless",w(!0)),p.directive("v-show",(e,o)=>o.dom.style.display=e?"":"none"),(p.isNode?global:window).v=p}(); \ No newline at end of file +!function(){"use strict";let e,o,n,d=void 0;function t(e,o,n){this.props=o||{},this.children=n,this.name=e}function r(e){this.dom=e}r.prototype={props:{},children:[]};let i=new r;function l(e,o){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function p(e,o,...n){return new t(e,o,n)}p.isNode="undefined"==typeof window,p.dom2vnode=e=>{if(3===e.nodeType)return e.nodeValue;if(1===e.nodeType){let o={};[].forEach.call(e.attributes,e=>o[e.nodeName]=e.nodeValue);let n=new t(e.nodeName,o,[]);n.dom=e;for(let o=0,d=e.childNodes.length;o{let o=l("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>p.dom2vnode(e))};let s=new Map;p.usePlugin=(e,o)=>!s.has(e)&&s.set(e,!0)&&e(p,o),p.reservedWords={key:!0,"v-list":!0,"v-noop":!0,"v-create":!0,"v-beforeupdate":!0,"v-update":!0,"v-remove":!0};let m={};function c(e){let o=e.target,n=`__on${e.type}`;for(;o;){if(o[n])return o[n](e),void(e.defaultPrevented||p.update());o=o.parentNode}}function a(e,o,n){if("v-remove"===o)for(let o=0,n=e.children.length;o{let d=o.props[e];p.reservedWords[e]?"function"==typeof p.reservedWords[e]&&p.reservedWords[e](d,o,n):"function"==typeof d?(m[e=`__${e}`]||(document.addEventListener(e.slice(4),c),m[e]=!0),o.dom[e]=d):e in o.dom&&!o.isSVG?o.dom[e]!==d&&(o.dom[e]=d):d!==n.props[e]&&o.dom.setAttribute(e,d)};let g=[];p.onCleanup=e=>{let o=p.current.parentVnode;o.onCleanup||(o.onCleanup=[]),o.onCleanup.push(e),-1===g.indexOf(o)&&g.push(o)},p.current={parentVnode:d,oldParentVnode:d,component:d};let y=Array.isArray;function N(e,o){let n=y(e.children)?e.children:[e.children],l=o.children;p.current.parentVnode=e,p.current.oldParentVnode=o;for(let o=0;oe.props.key),t=n.map(e=>e.props.key);for(let r=0,p=t.length;r=o.length?d:r;-1!==n?(l[n].processed=!0,h(e.dom,s,l[n],t)):h(e.dom,s,i,t)}}let r=l.length;for(;r--;)l[r].processed||(a(l[r],"v-remove"),l[r].dom.parentNode&&e.dom.removeChild(l[r].dom))}else{let o=l.length,d=n.length;for(;o-- >d;)a(l[o],"v-remove"),e.dom.removeChild(l[o].dom);for(o=0;o{if(e)return n&&(!function(){for(let e=g.length;e--;)for(let o of g[e].onCleanup)o();g=[]}(),o=e,e=new t(e.name,e.props,p(n,d,...r)),e.dom=o.dom,e.isSVG="svg"===e.name,N(e,o),p.isMounted=!0),p.isNode&&e.dom.innerHTML},p.mount=(o,d,t,...r)=>{let i=p.isNode?l("div"):"string"==typeof o?document.querySelectorAll(o)[0]:o;return e=p.dom2vnode(i),n=d,p.update(t,...r)},p.unmount=()=>{n=()=>"";let e=p.update();return n=d,p.isMounted=!1,e},p.directive=(e,o)=>!p.reservedWords[e]&&(p.reservedWords[e]=o),p.directive("v-for",(e,o)=>o.children=e.map(o.children[0]));let w=e=>(o,n,d)=>{if(o===e){let e=document.createTextNode("");d.dom&&d.dom.parentNode&&(a(d,"v-remove"),d.dom.parentNode.replaceChild(e,d.dom)),n.name="",n.children=[],n.props={},n.dom=e}};p.directive("v-if",w(!1)),p.directive("v-unless",w(!0)),p.directive("v-show",(e,o)=>o.dom.style.display=e?"":"none"),(p.isNode?global:window).v=p}(); \ No newline at end of file diff --git a/dist/valyrian.min.js.map b/dist/valyrian.min.js.map index 00e7cbe..7f9687e 100644 --- a/dist/valyrian.min.js.map +++ b/dist/valyrian.min.js.map @@ -1 +1 @@ -{"version":3,"file":"valyrian.min.js","sources":["../lib/index.js"],"sourcesContent":["let UND = void 0;\nlet oncreate = 'v-create';\nlet onupdate = 'v-update';\nlet onremove = 'v-remove';\nlet onbeforeupdate = 'v-beforeupdate';\nlet functionstr = 'function';\nlet list = 'v-list';\nlet noop = 'v-noop';\nlet mainNode;\nlet oldMainNode;\nlet mountedComponent;\n\nfunction Vnode(name, props, children) {\n this.props = props || {};\n this.children = children;\n this.name = name;\n};\n\nfunction TextVnode(dom) {\n this.dom = dom;\n}\nTextVnode.prototype = {\n props: {},\n children: []\n};\n\nlet emptyNode = new TextVnode();\n\nfunction createElement(tag, isSVG) {\n return isSVG ?\n document.createElementNS('http://www.w3.org/2000/svg', tag) :\n document.createElement(tag);\n}\n\nfunction v(tagOrComponent, props, ...children) {\n return new Vnode(tagOrComponent, props, children);\n};\n\nv.isNode = typeof window === 'undefined';\n\n// Hydrates the current dom before mount\nv.dom2vnode = dom => {\n if (dom.nodeType === 3) {\n return new TextVnode(dom);\n }\n\n if (dom.nodeType === 1) {\n let props = {};\n [].forEach.call(dom.attributes, (prop) => props[prop.nodeName] = prop.nodeValue);\n\n let vnode = new Vnode(\n dom.nodeName,\n props,\n []\n );\n vnode.dom = dom;\n\n for (let i = 0, l = dom.childNodes.length; i < l; i++) {\n let childVnode = v.dom2vnode(dom.childNodes[i]);\n childVnode && vnode.children.push(childVnode);\n }\n return vnode;\n }\n};\n\nv.trust = (htmlString) => {\n let div = createElement('div');\n div.innerHTML = htmlString.trim();\n\n return [].map.call(div.childNodes, (item) => v.dom2vnode(item));\n};\n\n// Plugin system\nlet plugins = new Map();\nv.usePlugin = (plugin, options) => !plugins.has(plugin) && plugins.set(plugin, true) && plugin(v, options);\n\nv.reservedWords = {\n key: true,\n [list]: true,\n [noop]: true,\n [oncreate]: true,\n [onbeforeupdate]: true,\n [onupdate]: true,\n [onremove]: true\n};\n\nlet attachedListeners = {};\nfunction eventListener(e) {\n let dom = e.target;\n let name = `__on${e.type}`;\n while (dom) {\n if (dom[name]) {\n dom[name](e);\n if (!e.defaultPrevented) {\n v.update();\n }\n return;\n }\n dom = dom.parentNode;\n }\n};\n\nfunction lifecycleCall(vnode, methodName, oldNode) {\n if (methodName === onremove) {\n for (let i = 0, l = vnode.children.length; i < l; i++) {\n lifecycleCall(vnode.children[i], onremove);\n }\n }\n\n if (vnode.props[methodName]) {\n return vnode.props[methodName](vnode, oldNode);\n }\n}\n\nv.updateProperty = (name, newNode, oldNode) => {\n let value = newNode.props[name];\n if (v.reservedWords[name]) {\n if (typeof v.reservedWords[name] === functionstr) {\n v.reservedWords[name](value, newNode, oldNode);\n }\n } else if (typeof value === functionstr) {\n name = `__${name}`;\n if (!attachedListeners[name]) {\n document.addEventListener(name.slice(4), eventListener);\n attachedListeners[name] = true;\n };\n newNode.dom[name] = value;\n } else if (name in newNode.dom && !newNode.isSVG) {\n if (newNode.dom[name] !== value) {\n newNode.dom[name] = value;\n }\n } else if (value !== oldNode.props[name]) {\n newNode.dom.setAttribute(name, value);\n }\n};\n\nfunction updateProps(newNode, oldNode) {\n for (let name in newNode.props) {\n v.updateProperty(name, newNode, oldNode);\n }\n}\n\nfunction createNode(newNode) {\n newNode.dom = createElement(newNode.name, newNode.isSVG);\n updateProps(newNode, emptyNode);\n lifecycleCall(newNode, oncreate);\n patch(newNode, emptyNode);\n}\n\nfunction updateNode(newNode, oldNode) {\n newNode.dom = oldNode.dom;\n if (newNode.props[noop] || lifecycleCall(newNode, onbeforeupdate, oldNode) === false) {\n newNode.children = oldNode.children;\n } else {\n for (let name in oldNode.props) {\n if (!v.reservedWords[name] && name in newNode.props === false && typeof oldNode.props[name] !== functionstr) {\n if (name in newNode.dom) {\n newNode.dom[name] = UND;\n } else {\n newNode.dom.removeAttribute(name);\n }\n }\n }\n updateProps(newNode, oldNode);\n lifecycleCall(newNode, v.isMounted ? onupdate : oncreate, oldNode);\n patch(newNode, oldNode);\n }\n}\n\nfunction updateKeyedNode($parent, newNode, compareNode, newIndex) {\n // Moved or updated\n compareNode.dom ?\n updateNode(newNode, compareNode) :\n createNode(newNode);\n\n if (newNode.dom !== $parent.childNodes[newIndex]) {\n $parent.childNodes[newIndex] ?\n $parent.replaceChild(newNode.dom, $parent.childNodes[newIndex]) :\n $parent.appendChild(newNode.dom);\n }\n}\n\nlet vnodesToCleanup = [];\n\nv.onCleanup = callback => {\n let parentVnode = v.current.parentVnode;\n if (!parentVnode.onCleanup) {\n parentVnode.onCleanup = [];\n }\n\n parentVnode.onCleanup.push(callback);\n\n if (vnodesToCleanup.indexOf(parentVnode) === -1) {\n vnodesToCleanup.push(parentVnode);\n }\n};\n\nfunction cleanupVnodes() {\n for (let l = vnodesToCleanup.length; l--;) {\n for (let callback of vnodesToCleanup[l].onCleanup) {\n callback();\n }\n }\n vnodesToCleanup = [];\n}\n\nv.current = {\n parentVnode: UND,\n oldParentVnode: UND,\n component: UND\n};\n\nlet isArray = Array.isArray;\n\n// eslint-disable-next-line complexity,sonarjs/cognitive-complexity\nfunction patch(parentNode, oldParentNode) {\n let newTree = isArray(parentNode.children) ? parentNode.children : [parentNode.children];\n let oldTree = oldParentNode.children;\n v.current.parentVnode = parentNode;\n v.current.oldParentVnode = oldParentNode;\n\n // Flatten children\n for (let i = 0; i < newTree.length; i++) {\n let childVnode = newTree[i];\n\n if (isArray(childVnode)) {\n newTree.splice(i--, 1, ...childVnode);\n } else if (childVnode instanceof Vnode) {\n if (typeof childVnode.name !== 'string') {\n v.current.component = childVnode;\n let viewMethod = childVnode.name.view || childVnode.name;\n newTree.splice(i--, 1, ...[viewMethod.call(childVnode.name, childVnode.props, ...childVnode.children)]);\n } else {\n childVnode.isSVG = parentNode.isSVG || childVnode.name === 'svg';\n }\n }\n }\n\n // Is keyed list\n if (oldTree.length && parentNode.props[list]) {\n let oldKeys = oldTree.map(vnode => vnode.props.key);\n let newKeys = newTree.map(vnode => vnode.props.key);\n\n for (let i = 0, l = newKeys.length; i < l; i++) {\n let key = newKeys[i];\n let newNode = newTree[i];\n\n // Updated: Same key\n if (key === oldKeys[i]) {\n oldTree[i].processed = true;\n updateKeyedNode(parentNode.dom, newNode, oldTree[i], i);\n } else {\n let oldIndex = oldKeys.indexOf(key);\n let newIndex = i >= oldKeys.length ? UND : i;\n\n // Moved: Key exists in old keys\n if (oldIndex !== -1) {\n oldTree[oldIndex].processed = true;\n updateKeyedNode(parentNode.dom, newNode, oldTree[oldIndex], newIndex);\n // Added: Key does not exists in old keys\n } else {\n updateKeyedNode(parentNode.dom, newNode, emptyNode, newIndex);\n }\n }\n }\n\n // Delete unprocessed old keys\n let l = oldTree.length;\n\n while (l--) {\n if (!oldTree[l].processed) {\n lifecycleCall(oldTree[l], onremove);\n oldTree[l].dom.parentNode && parentNode.dom.removeChild(oldTree[l].dom);\n }\n }\n\n // Not keyed list or first render so use the simple algorithm\n } else {\n let i = oldTree.length;\n let l = newTree.length;\n\n // Remove deleted nodes\n while (i-- > l) {\n lifecycleCall(oldTree[i], onremove);\n parentNode.dom.removeChild(oldTree[i].dom);\n }\n\n for (i = 0; i < l; i++) {\n let newNode = newTree[i];\n let oldNode = oldTree[i];\n // Is vnode\n if (newNode instanceof Vnode) {\n if (!oldNode) {\n createNode(newNode);\n parentNode.dom.appendChild(newNode.dom);\n } else {\n if (newNode.name === oldNode.name) {\n updateNode(newNode, oldNode);\n } else {\n createNode(newNode);\n lifecycleCall(oldNode, onremove);\n parentNode.dom.replaceChild(newNode.dom, oldNode.dom);\n }\n }\n\n } else if (oldNode instanceof TextVnode) {\n newNode = String(newNode);\n if (newNode !== oldNode.dom.nodeValue) {\n oldNode.dom.nodeValue = newNode;\n }\n newTree[i] = oldNode;\n } else {\n let dom = document.createTextNode(newNode);\n if (!oldNode) {\n parentNode.dom.appendChild(dom);\n } else {\n lifecycleCall(oldNode, onremove);\n parentNode.dom.replaceChild(dom, oldNode.dom);\n }\n\n newTree[i] = new TextVnode(dom);\n }\n }\n }\n\n parentNode.children = newTree;\n};\n\nv.update = (props, ...children) => {\n if (mainNode) {\n if (mountedComponent) {\n cleanupVnodes();\n oldMainNode = mainNode;\n mainNode = new Vnode(mainNode.name, mainNode.props, v(mountedComponent, props, ...children));\n mainNode.dom = oldMainNode.dom;\n mainNode.isSVG = mainNode.name === 'svg';\n patch(mainNode, oldMainNode);\n v.isMounted = true;\n }\n\n return v.isNode && mainNode.dom.innerHTML;\n }\n};\n\nv.mount = (container, component, props, ...children) => {\n let mainContainer = v.isNode\n ? createElement('div')\n : typeof container === 'string'\n ? document.querySelectorAll(container)[0]\n : container;\n\n mainNode = v.dom2vnode(mainContainer);\n mountedComponent = component;\n\n return v.update(props, ...children);\n};\n\nv.unmount = () => {\n mountedComponent = () => '';\n let result = v.update();\n mountedComponent = UND;\n v.isMounted = false;\n return result;\n};\n\nv.directive = (directive, handler) => !v.reservedWords[directive] && (v.reservedWords[directive] = handler);\nv.directive('v-for', (set, vnode) => vnode.children = set.map(vnode.children[0]));\n\nlet hideDirective = (test) => (bool, vnode, oldnode) => {\n if (bool === test) {\n let newdom = document.createTextNode('');\n if (oldnode.dom && oldnode.dom.parentNode) {\n lifecycleCall(oldnode, onremove);\n oldnode.dom.parentNode.replaceChild(newdom, oldnode.dom);\n }\n vnode.name = '';\n vnode.children = [];\n vnode.props = {};\n vnode.dom = newdom;\n }\n};\n\nv.directive('v-if', hideDirective(false));\nv.directive('v-unless', hideDirective(true));\nv.directive('v-show', (bool, vnode) => vnode.dom.style.display = bool ? '' : 'none');\n\n(v.isNode ? global : window).v = v;\n"],"names":["mainNode","oldMainNode","mountedComponent","UND","Vnode","name","props","children","this","TextVnode","dom","prototype","emptyNode","createElement","tag","isSVG","document","createElementNS","v","tagOrComponent","isNode","window","dom2vnode","nodeType","forEach","call","attributes","prop","nodeName","nodeValue","vnode","i","l","childNodes","length","childVnode","push","trust","htmlString","div","innerHTML","trim","map","item","plugins","Map","usePlugin","plugin","options","has","set","reservedWords","key","v-list","v-noop","v-create","v-beforeupdate","v-update","v-remove","attachedListeners","eventListener","e","target","type","defaultPrevented","update","parentNode","lifecycleCall","methodName","oldNode","updateProps","newNode","updateProperty","createNode","patch","updateNode","removeAttribute","isMounted","updateKeyedNode","$parent","compareNode","newIndex","replaceChild","appendChild","value","addEventListener","slice","setAttribute","vnodesToCleanup","onCleanup","callback","parentVnode","current","indexOf","oldParentVnode","component","isArray","Array","oldParentNode","newTree","oldTree","splice","viewMethod","view","oldKeys","newKeys","processed","oldIndex","removeChild","String","createTextNode","cleanupVnodes","mount","container","mainContainer","querySelectorAll","unmount","result","directive","handler","hideDirective","test","bool","oldnode","newdom","style","display","global"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"valyrian.min.js","sources":["../lib/index.js"],"sourcesContent":["let UND = void 0;\nlet oncreate = 'v-create';\nlet onupdate = 'v-update';\nlet onremove = 'v-remove';\nlet onbeforeupdate = 'v-beforeupdate';\nlet functionstr = 'function';\nlet list = 'v-list';\nlet noop = 'v-noop';\nlet mainNode;\nlet oldMainNode;\nlet mountedComponent;\n\nfunction Vnode(name, props, children) {\n this.props = props || {};\n this.children = children;\n this.name = name;\n};\n\nfunction TextVnode(dom) {\n this.dom = dom;\n}\nTextVnode.prototype = {\n props: {},\n children: []\n};\n\nlet emptyNode = new TextVnode();\n\nfunction createElement(tag, isSVG) {\n return isSVG ?\n document.createElementNS('http://www.w3.org/2000/svg', tag) :\n document.createElement(tag);\n}\n\nfunction v(tagOrComponent, props, ...children) {\n return new Vnode(tagOrComponent, props, children);\n};\n\nv.isNode = typeof window === 'undefined';\n\n// Hydrates the current dom before mount\nv.dom2vnode = dom => {\n if (dom.nodeType === 3) {\n return dom.nodeValue;\n }\n\n if (dom.nodeType === 1) {\n let props = {};\n [].forEach.call(dom.attributes, (prop) => props[prop.nodeName] = prop.nodeValue);\n\n let vnode = new Vnode(\n dom.nodeName,\n props,\n []\n );\n vnode.dom = dom;\n\n for (let i = 0, l = dom.childNodes.length; i < l; i++) {\n let childVnode = v.dom2vnode(dom.childNodes[i]);\n childVnode && vnode.children.push(childVnode);\n }\n return vnode;\n }\n};\n\nv.trust = (htmlString) => {\n let div = createElement('div');\n div.innerHTML = htmlString.trim();\n\n return [].map.call(div.childNodes, (item) => v.dom2vnode(item));\n};\n\n// Plugin system\nlet plugins = new Map();\nv.usePlugin = (plugin, options) => !plugins.has(plugin) && plugins.set(plugin, true) && plugin(v, options);\n\nv.reservedWords = {\n key: true,\n [list]: true,\n [noop]: true,\n [oncreate]: true,\n [onbeforeupdate]: true,\n [onupdate]: true,\n [onremove]: true\n};\n\nlet attachedListeners = {};\nfunction eventListener(e) {\n let dom = e.target;\n let name = `__on${e.type}`;\n while (dom) {\n if (dom[name]) {\n dom[name](e);\n if (!e.defaultPrevented) {\n v.update();\n }\n return;\n }\n dom = dom.parentNode;\n }\n};\n\nfunction lifecycleCall(vnode, methodName, oldNode) {\n if (methodName === onremove) {\n for (let i = 0, l = vnode.children.length; i < l; i++) {\n lifecycleCall(vnode.children[i], onremove);\n }\n }\n\n if (vnode.props[methodName]) {\n return vnode.props[methodName](vnode, oldNode);\n }\n}\n\nv.updateProperty = (name, newNode, oldNode) => {\n let value = newNode.props[name];\n if (v.reservedWords[name]) {\n if (typeof v.reservedWords[name] === functionstr) {\n v.reservedWords[name](value, newNode, oldNode);\n }\n } else if (typeof value === functionstr) {\n name = `__${name}`;\n if (!attachedListeners[name]) {\n document.addEventListener(name.slice(4), eventListener);\n attachedListeners[name] = true;\n };\n newNode.dom[name] = value;\n } else if (name in newNode.dom && !newNode.isSVG) {\n if (newNode.dom[name] !== value) {\n newNode.dom[name] = value;\n }\n } else if (value !== oldNode.props[name]) {\n newNode.dom.setAttribute(name, value);\n }\n};\n\nfunction updateProps(newNode, oldNode) {\n for (let name in newNode.props) {\n v.updateProperty(name, newNode, oldNode);\n }\n}\n\nfunction createNode(newNode) {\n newNode.dom = createElement(newNode.name, newNode.isSVG);\n updateProps(newNode, emptyNode);\n lifecycleCall(newNode, oncreate);\n patch(newNode, emptyNode);\n}\n\nfunction updateNode(newNode, oldNode) {\n newNode.dom = oldNode.dom;\n if (newNode.props[noop] || lifecycleCall(newNode, onbeforeupdate, oldNode) === false) {\n newNode.children = oldNode.children;\n } else {\n for (let name in oldNode.props) {\n if (!v.reservedWords[name] && name in newNode.props === false && typeof oldNode.props[name] !== functionstr) {\n if (name in newNode.dom) {\n newNode.dom[name] = UND;\n } else {\n newNode.dom.removeAttribute(name);\n }\n }\n }\n updateProps(newNode, oldNode);\n lifecycleCall(newNode, v.isMounted ? onupdate : oncreate, oldNode);\n patch(newNode, oldNode);\n }\n}\n\nfunction updateKeyedNode($parent, newNode, compareNode, newIndex) {\n // Moved or updated\n compareNode.dom ?\n updateNode(newNode, compareNode) :\n createNode(newNode);\n\n if (newNode.dom !== $parent.childNodes[newIndex]) {\n $parent.childNodes[newIndex] ?\n $parent.replaceChild(newNode.dom, $parent.childNodes[newIndex]) :\n $parent.appendChild(newNode.dom);\n }\n}\n\nlet vnodesToCleanup = [];\n\nv.onCleanup = callback => {\n let parentVnode = v.current.parentVnode;\n if (!parentVnode.onCleanup) {\n parentVnode.onCleanup = [];\n }\n\n parentVnode.onCleanup.push(callback);\n\n if (vnodesToCleanup.indexOf(parentVnode) === -1) {\n vnodesToCleanup.push(parentVnode);\n }\n};\n\nfunction cleanupVnodes() {\n for (let l = vnodesToCleanup.length; l--;) {\n for (let callback of vnodesToCleanup[l].onCleanup) {\n callback();\n }\n }\n vnodesToCleanup = [];\n}\n\nv.current = {\n parentVnode: UND,\n oldParentVnode: UND,\n component: UND\n};\n\nlet isArray = Array.isArray;\n\n// eslint-disable-next-line complexity,sonarjs/cognitive-complexity\nfunction patch(parentNode, oldParentNode) {\n let newTree = isArray(parentNode.children) ? parentNode.children : [parentNode.children];\n let oldTree = oldParentNode.children;\n v.current.parentVnode = parentNode;\n v.current.oldParentVnode = oldParentNode;\n\n // Flatten children\n for (let i = 0; i < newTree.length; i++) {\n let childVnode = newTree[i];\n\n if (isArray(childVnode)) {\n newTree.splice(i--, 1, ...childVnode);\n } else if (childVnode instanceof Vnode) {\n if (typeof childVnode.name !== 'string') {\n v.current.component = childVnode;\n let viewMethod = childVnode.name.view || childVnode.name;\n newTree.splice(i--, 1, ...[viewMethod.call(childVnode.name, childVnode.props, ...childVnode.children)]);\n } else {\n childVnode.isSVG = parentNode.isSVG || childVnode.name === 'svg';\n }\n }\n }\n\n // Is keyed list\n if (oldTree.length && parentNode.props[list]) {\n let oldKeys = oldTree.map(vnode => vnode.props.key);\n let newKeys = newTree.map(vnode => vnode.props.key);\n\n for (let i = 0, l = newKeys.length; i < l; i++) {\n let key = newKeys[i];\n let newNode = newTree[i];\n\n // Updated: Same key\n if (key === oldKeys[i]) {\n oldTree[i].processed = true;\n updateKeyedNode(parentNode.dom, newNode, oldTree[i], i);\n } else {\n let oldIndex = oldKeys.indexOf(key);\n let newIndex = i >= oldKeys.length ? UND : i;\n\n // Moved: Key exists in old keys\n if (oldIndex !== -1) {\n oldTree[oldIndex].processed = true;\n updateKeyedNode(parentNode.dom, newNode, oldTree[oldIndex], newIndex);\n // Added: Key does not exists in old keys\n } else {\n updateKeyedNode(parentNode.dom, newNode, emptyNode, newIndex);\n }\n }\n }\n\n // Delete unprocessed old keys\n let l = oldTree.length;\n\n while (l--) {\n if (!oldTree[l].processed) {\n lifecycleCall(oldTree[l], onremove);\n oldTree[l].dom.parentNode && parentNode.dom.removeChild(oldTree[l].dom);\n }\n }\n\n // Not keyed list or first render so use the simple algorithm\n } else {\n let i = oldTree.length;\n let l = newTree.length;\n\n // Remove deleted nodes\n while (i-- > l) {\n lifecycleCall(oldTree[i], onremove);\n parentNode.dom.removeChild(oldTree[i].dom);\n }\n\n for (i = 0; i < l; i++) {\n let newNode = newTree[i];\n let oldNode = oldTree[i];\n // Is vnode\n if (newNode instanceof Vnode) {\n if (!oldNode) {\n createNode(newNode);\n parentNode.dom.appendChild(newNode.dom);\n } else {\n if (newNode.name === oldNode.name) {\n updateNode(newNode, oldNode);\n } else {\n createNode(newNode);\n lifecycleCall(oldNode, onremove);\n parentNode.dom.replaceChild(newNode.dom, oldNode.dom);\n }\n }\n\n } else if (oldNode instanceof TextVnode) {\n newNode = String(newNode);\n if (newNode !== oldNode.dom.nodeValue) {\n oldNode.dom.nodeValue = newNode;\n }\n newTree[i] = oldNode;\n } else {\n let dom = document.createTextNode(newNode);\n if (!oldNode) {\n parentNode.dom.appendChild(dom);\n } else {\n lifecycleCall(oldNode, onremove);\n parentNode.dom.replaceChild(dom, oldNode.dom);\n }\n\n newTree[i] = new TextVnode(dom);\n }\n }\n }\n\n parentNode.children = newTree;\n};\n\nv.update = (props, ...children) => {\n if (mainNode) {\n if (mountedComponent) {\n cleanupVnodes();\n oldMainNode = mainNode;\n mainNode = new Vnode(mainNode.name, mainNode.props, v(mountedComponent, props, ...children));\n mainNode.dom = oldMainNode.dom;\n mainNode.isSVG = mainNode.name === 'svg';\n patch(mainNode, oldMainNode);\n v.isMounted = true;\n }\n\n return v.isNode && mainNode.dom.innerHTML;\n }\n};\n\nv.mount = (container, component, props, ...children) => {\n let mainContainer = v.isNode\n ? createElement('div')\n : typeof container === 'string'\n ? document.querySelectorAll(container)[0]\n : container;\n\n mainNode = v.dom2vnode(mainContainer);\n mountedComponent = component;\n\n return v.update(props, ...children);\n};\n\nv.unmount = () => {\n mountedComponent = () => '';\n let result = v.update();\n mountedComponent = UND;\n v.isMounted = false;\n return result;\n};\n\nv.directive = (directive, handler) => !v.reservedWords[directive] && (v.reservedWords[directive] = handler);\nv.directive('v-for', (set, vnode) => vnode.children = set.map(vnode.children[0]));\n\nlet hideDirective = (test) => (bool, vnode, oldnode) => {\n if (bool === test) {\n let newdom = document.createTextNode('');\n if (oldnode.dom && oldnode.dom.parentNode) {\n lifecycleCall(oldnode, onremove);\n oldnode.dom.parentNode.replaceChild(newdom, oldnode.dom);\n }\n vnode.name = '';\n vnode.children = [];\n vnode.props = {};\n vnode.dom = newdom;\n }\n};\n\nv.directive('v-if', hideDirective(false));\nv.directive('v-unless', hideDirective(true));\nv.directive('v-show', (bool, vnode) => vnode.dom.style.display = bool ? '' : 'none');\n\n(v.isNode ? global : window).v = v;\n"],"names":["mainNode","oldMainNode","mountedComponent","UND","Vnode","name","props","children","this","TextVnode","dom","prototype","emptyNode","createElement","tag","isSVG","document","createElementNS","v","tagOrComponent","isNode","window","dom2vnode","nodeType","nodeValue","forEach","call","attributes","prop","nodeName","vnode","i","l","childNodes","length","childVnode","push","trust","htmlString","div","innerHTML","trim","map","item","plugins","Map","usePlugin","plugin","options","has","set","reservedWords","key","v-list","v-noop","v-create","v-beforeupdate","v-update","v-remove","attachedListeners","eventListener","e","target","type","defaultPrevented","update","parentNode","lifecycleCall","methodName","oldNode","updateProps","newNode","updateProperty","createNode","patch","updateNode","removeAttribute","isMounted","updateKeyedNode","$parent","compareNode","newIndex","replaceChild","appendChild","value","addEventListener","slice","setAttribute","vnodesToCleanup","onCleanup","callback","parentVnode","current","indexOf","oldParentVnode","component","isArray","Array","oldParentNode","newTree","oldTree","splice","viewMethod","view","oldKeys","newKeys","processed","oldIndex","removeChild","String","createTextNode","cleanupVnodes","mount","container","mainContainer","querySelectorAll","unmount","result","directive","handler","hideDirective","test","bool","oldnode","newdom","style","display","global"],"mappings":"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"} \ No newline at end of file diff --git a/lib/index.js b/lib/index.js index 2ac465b..8c11380 100644 --- a/lib/index.js +++ b/lib/index.js @@ -41,7 +41,7 @@ v.isNode = typeof window === 'undefined'; // Hydrates the current dom before mount v.dom2vnode = dom => { if (dom.nodeType === 3) { - return new TextVnode(dom); + return dom.nodeValue; } if (dom.nodeType === 1) { diff --git a/test/hyperscript_test.js b/test/hyperscript_test.js index bcdc5b5..f8d4981 100644 --- a/test/hyperscript_test.js +++ b/test/hyperscript_test.js @@ -102,7 +102,7 @@ describe('Hyperscript', () => { id: 'unique', class: 'unique' }, - children: [{dom: expect.anything()}], + children: ['Hola mundo'], dom: expect.anything() } ]);