UNPKG

domvm

Version:

DOM ViewModel - A thin, fast, dependency-free vdom view layer

2 lines 12.9 kB
// https://github.com/domvm/domvm (v3.4.14, pico build) var domvm=function(n){"use strict";const e="undefined"!=typeof window?document:{},t={};function l(){}const r=Array.isArray;function o(n){return null!=n&&n.constructor===Object}function u(n,e,t,l){n.splice.apply(n,[t,l].concat(e))}function i(n){return"function"==typeof n}function f(n){for(var e=arguments,t=1;e.length>t;t++)for(var l in e[t])n[l]=e[t][l];return n}function a(n){return"o"===n[0]&&"n"===n[1]}function d(n){return"style"===n}function s(n){n&&n.el&&n.el.getBoundingClientRect()}function c(n){return null!=n.node&&null!=n.node.el}function v(n,e){switch(e){case"value":case"checked":case"selected":return!0}return!1}function y(n){for(n=n||t;null==n.vm&&n.parent;)n=n.parent;return n.vm}function p(){}function h(n){let e=new p;return e.type=2,e.body=n,e}function b(n,e,t){var l,r=this,o=n.length;r.flags=8,r.items=n,r.length=o,r.key=()=>null,r.diff={val:function(t,l){return e.val(n[t],l)},eq:function(n,t){return e.eq(t._diff,r.diff.val(n))}},r.tpl=e=>l(n[e],e),r.map=n=>(l=n,r),r.body=function(n){for(var e=[],t=0;o>t;t++){var l=r.tpl(t);4!=l.type&&(l._diff=r.diff.val(t,n)),e.push(l)}n.body=e,w(n)},null!=t&&(r.flags|=4,r.key=e=>t(n[e],e))}f(p.prototype={constructor:p,type:null,vm:null,key:null,ref:null,data:null,hooks:null,ns:null,el:null,tag:null,attrs:null,body:null,flags:0,_diff:null,_dead:!1,_lis:!1,idx:null,parent:null},{a:function(n){return this.attrs=n,this},b:function(n){return this.body=n,this},k:function(n){return this.key=n,this},r:function(n){return this.ref=n,this},h:function(n){return this.hooks=n,this},f:function(n){return this.flags=n,this},d:function(n){return this.data=n,this}});let g=l;function k(n){null!=n.onvnode&&(g=n.onvnode)}function m(n,e,t,l){if(g(n,e,t,l),5!==n.type&&4!==n.type){n.parent=e,n.idx=t,n.vm=l,null!=n.ref&&function(n,e,t){!function(n,e,t){for(var l;l=e.shift();)n[l]=0===e.length?t:n=n[l]||{}}(n,("refs."+e).split("."),t)}(y(n),n.ref,n);var o=n.hooks,u=l&&l.hooks;(o&&(o.willRemove||o.didRemove)||u&&(u.willUnmount||u.didUnmount))&&function(n){for(;n=n.parent;)n.flags|=1}(n),r(n.body)?w(n):""===n.body?n.body=null:null==n.body||n.body instanceof b||(n.body=""+n.body)}}function w(n){for(var e=n.body,t=0;e.length>t;t++){var l=e[t];!1===l||null==l?e.splice(t--,1):r(l)?u(e,l,t--,1):(null==l.type&&(e[t]=l=h(l)),2===l.type?null==l.body||""===l.body?e.splice(t--,1):t>0&&2===e[t-1].type?(e[t-1].body+=l.body,e.splice(t--,1)):m(l,n,t,null):m(l,n,t,null))}}function _(n,e){return e}function x(n,e){var l=(n.attrs||t).style,r=e?(e.attrs||t).style:null;if(null==l||function(n){var e=typeof n;return"string"===e||"number"===e}(l))n.el.style.cssText=l;else{for(var o in l){var u=l[o];(null==r||null!=u&&u!==r[o])&&(n.el.style[o]=_(0,u))}if(r)for(var i in r)null==l[i]&&(n.el.style[i]="")}}function N(n){let e=n.currentTarget,l=e._node.attrs["on"+n.type];if(r(l)){let r,o,u=l[0],i=l.slice(1),f=function(n){for(n=n||t;null==n._node&&n.parentNode;)n=n.parent;return n._node}(n.target),a=y(f);!1!==u.apply(e,i.concat([n,f,a,a.data]))&&!1!==r&&!1!==o||n.preventDefault()}else l.call(e,n)}function C(n,e,t,l){if(t==l)return;let r=n.el;null==t?r.removeEventListener(e.slice(2),N):null==l&&r.addEventListener(e.slice(2),N)}function R(n,e,t){t?n.el[e]="":n.el.removeAttribute(e)}function S(n,e,t,l){var r=n.el;null!=n.ns?r.setAttribute(e,t):"class"===e?r.className=t:"id"===e||"boolean"==typeof t||l?r[e]=t:"."===e[0]?r[e.substr(1)]=t:r.setAttribute(e,t)}function E(n,e){const l=n.attrs||t,r=e.attrs||t;if(l===r);else{for(var o in l){var u=l[o];if(null!=u){var i=v(0,o),f=i?n.el[o]:r[o];u===f||(d(o)?x(n,e):a(o)?C(n,o,u,f):S(n,o,u,i))}}for(var o in r)null==l[o]&&(a(o)?C(n,o,l[o],r[o]):R(n,o,v(0,o)))}}function V(n,e,t,l){return 4===n.type&&(e=n.data,t=n.key,l=n.opts,n=n.view),new en(n,e,t,l)}const A=[];function M(n,e,t,l,r){if(null!=n){var o=t.hooks[e];if(o){if("d"!==e[0]||"i"!==e[1]||"d"!==e[2])return o(t,l);r?(s(t.parent),o(t,l)):A.push([o,t,l])}}}function D(n,e){var t;if(A.length)for(e&&s(n.node);t=A.shift();)t[0](t[1],t[2])}function T(n){return n.nextSibling}function U(n){var e=n.vm,t=null!=e&&M(e.hooks,"willUnmount",e,e.data),l=M(n.hooks,"willRemove",n);if(1==(1&n.flags)&&r(n.body))for(var o=0;n.body.length>o;o++)U(n.body[o]);return t||l}function j(n,e){if(e){var t=n.vm;null!=t&&(t.node=t.refs=null)}var l=n.body;if(r(l))for(var o=0;l.length>o;o++)j(l[o],!0)}function q(n,e,t){var l=e._node,r=l.vm;if(j(l,!0),1==(1&l.flags))for(var o=0;l.body.length>o;o++)q(e,l.body[o].el);delete e._node,n.removeChild(e),M(l.hooks,"didRemove",l,null,t),null!=r&&(M(r.hooks,"didUnmount",r,r.data,t),r.node=null)}function I(n,e){var t=e._node;if(null==t)n.removeChild(e);else{if(t._dead)return;var l=U(t);null!=l&&function(n){return"object"==typeof n&&i(n.then)}(l)?(t._dead=!0,l.then(function(n,e){return function(){return n.apply(undefined,e)}}(q,[n,e,!0]))):q(n,e)}}function L(n){var e=n.el;if(0==(1&n.flags))j(n,!1),e.textContent=null;else{var t=e.firstChild;if(null!=t)do{var l=T(t);I(e,t)}while(t=l)}}function B(n,e,t){var l=e._node,r=null!=e.parentNode,o=e!==t&&r?null:l.vm;null!=o&&M(o.hooks,"willMount",o,o.data),M(l.hooks,r?"willReinsert":"willInsert",l),n.insertBefore(e,t),M(l.hooks,r?"didReinsert":"didInsert",l),null!=o&&M(o.hooks,"didMount",o,o.data)}function O(n,e,t){B(n,e,t?T(t):null)}function Y(n){for(var e=0;n.body.length>e;e++){var t=n.body[e],l=t.type;if(l>3){if(4===l)l=(r=V(t.view,t.data,t.key,t.opts)._redraw(n,e,!1)).node.type,B(n.el,F(r.node));else if(5===l){var r;(r=t.vm)._update(t.data,n,e,!0,!0),l=r.node.type,B(n.el,r.node.el)}}else B(n.el,F(t))}}function F(n,l){return null==n.el&&(1===n.type?(n.el=l||function(n,t){return null!=t?e.createElementNS(t,n):e.createElement(n)}(n.tag,n.ns),null!=n.attrs&&E(n,t),8==(8&n.flags)&&n.body.body(n),r(n.body)?Y(n):null!=n.body&&(n.el.textContent=n.body)):2===n.type?n.el=l||function(n){return e.createTextNode(n)}(n.body):3===n.type&&(n.el=l||function(n){return e.createComment(n)}(n.body))),n.el._node=n,n.el}function K(n,e,t,l,r,o,u,i){return function(f,a,d,s,c,v){var y,p;if(null!=s[l]&&function(n){return n.parent}(y=s[l]._node)!==f)return p=n(s[l]),null!=y.vm?y.vm.unmount(!0):I(a,s[l]),void(s[l]=p);if(s[r]==c)return 2;if(null==s[r].el)t(a,F(s[r]),s[l]),s[r]=e(s[r],d);else if(s[r].el===s[l])s[r]=e(s[r],d),s[l]=n(s[l]);else{if(v||y!==s[u])return v&&null!=s[l]?function(n,e,t,l,r,o,u,i,f){if(i._lis)t(o,f[r].el,f[l]),f[r]=e(f[r],u);else{var a=function(n,e){for(var t,l=0,r=e.length-1,o=2147483647>=r;r>=l;){if(e[t=o?l+r>>1:Math.floor((l+r)/2)]===n)return t;n>e[t]?l=t+1:r=t-1}return l==e.length?null:l}(i.idx,f.tombs);i._lis=!0;var d=n(f[l]);t(o,f[l],null!=a?u[f.tombs[a]].el:a),null==a?f.tombs.push(i.idx):f.tombs.splice(a,0,i.idx),f[l]=d}}(n,e,t,l,r,a,d,y,s):1;s[l]=n(p=s[l]),i(a,p,s[o]),s[o]=p}}}var X=K(T,(function(n,e){return e[n.idx+1]}),B,"lftSib","lftNode","rgtSib","rgtNode",O),z=K((function(n){return n.previousSibling}),(function(n,e){return e[n.idx-1]}),O,"rgtSib","rgtNode","lftSib","lftNode",B);function G(n,e,t,l){var r=[],o=e.firstChild;do{var u=o._node;u.parent===n&&r.push(u.idx)}while(o=T(o));for(var i=function(n){const e=n.slice(),t=[];t[0]=0;let l,r,o,u=0,i=0;for(;n.length>i;++i){const f=n[i];if(o=t[u],f>n[o])e[i]=o,t[++u]=i;else{for(l=0,r=u;r>l;)o=l+r>>1,f>n[t[o]]?l=o+1:r=o;n[t[l]]>f&&(l>0&&(e[i]=t[l-1]),t[l]=i)}}for(r=t[u];u>=0;)t[u--]=r,r=e[r];return t}(r).map((n=>r[n])),f=0;i.length>f;f++)t[i[f]]._lis=!0;for(l.tombs=i;2!==X(n,e,t,l,null,!0););}function H(n){return n.el._node.parent!==n.parent}function J(n,e,t){return e[t]}function P(n,e,t){for(;e.length>t;t++){var l=e[t];if(null!=l.vm){if(4===n.type&&l.vm.view===n.view&&l.vm.key===n.key||5===n.type&&l.vm===n.vm)return l}else if(!H(l)&&n.tag===l.tag&&n.type===l.type&&n.key===l.key&&(-2&n.flags)==(-2&l.flags))return l}return null}function Q(n,e,t){if(null==e._keys){if(e[t].key===n.key)return e[t];for(var l={},r=0;e.length>r;r++)l[e[r].key]=r;e._keys=l}return e[e._keys[n.key]]}function W(n,e){M(e.hooks,"willRecycle",e,n);var o=n.el=e.el,u=e.body,i=n.body;if(o._node=n,2!==n.type||i===u){null==n.attrs&&null==e.attrs||E(n,e);var f=r(u),a=r(i);f?a||8==(8&n.flags)?function(n,e){var r=n.body,o=r.length,u=e.body,i=u.length,f=8==(8&n.flags),a=2==(2&n.flags),d=4==(4&n.flags),s=!a&&1===n.type,v=!0,y=0===i?l:d?Q:a||f?J:P;if(s&&0===o)return L(e),void(f&&(n.body=[]));var p,h,b=0,g=!1,k=0;if(f)var w={key:null},_=n.body=Array(o);for(var x=0;o>x;x++){if(f){var N=!1;v&&(d&&(w.key=r.key(x)),p=y(w,u,k)),null!=p?(h=p.idx,r.diff.eq(x,p)?((C=p).parent=n,C.idx=x,C._lis=!1):N=!0):N=!0,N&&(4===(C=r.tpl(x)).type?C=null!=p?p.vm._update(C.data,n,x,!0,!0).node:V(C.view,C.data,C.key,C.opts)._redraw(n,x,!1).node:(m(C,n,x),C._diff=r.diff.val(x,n),null!=p&&W(C,p))),_[x]=C}else{var C,R=(C=r[x]).type;if(R>3){if(4===R)(p=v&&y(C,u,k))?(h=p.idx,p.vm._update(C.data,n,x,!0,!0)):V(C.view,C.data,C.key,C.opts)._redraw(n,x,!1);else if(5===R){var S=C.vm,E=c(S);E&&S.node.parent!=e&&(S.unmount(!0),E=!1),S._update(C.data,n,x,E,!0)}}else(p=v&&y(C,u,k))&&(W(C,p),h=p.idx)}if(null!=p&&(h===k?++k===i&&o>i&&(p=null,v=!1):g=!0,!d&&i>100&&g&&++b%10==0))for(;i>k&&H(u[k]);)k++}s&&function(n,e){var l=e.body,r=n.el,o=n.body,u={lftNode:o[0],rgtNode:o[o.length-1],lftSib:(l[0]||t).el,rgtSib:(l[l.length-1]||t).el};n:for(;;){for(;;){var i=X(n,r,o,u,null,!1);if(1===i)break;if(2===i)break n}for(;;){var f=z(n,r,o,u,u.lftNode,!1);if(1===f)break;if(2===f)break n}G(n,r,o,u);break}}(n,e)}(n,e):i!==u&&(null!=i?o.textContent=i:L(e)):a?(L(e),Y(n)):i!==u&&(null!=i&&null!=u?o.firstChild.nodeValue=i:o.textContent=i),M(e.hooks,"didRecycle",e,n)}else o.nodeValue=i}function Z(n,e,t,l){var r,u;return null==t?o(e)?r=e:u=e:(r=e,u=t),function(n,e,t,l){let r=new p;return r.type=1,r.flags=l||0,r.attrs=e||null,r.tag=n,null!=t&&(r.body=t,t instanceof b&&(r.flags=t.flags)),r}(n,r,u,l)}var $={class:"domvm-err",style:{color:"#fff",background:"#f00"}};function nn(n){var e="[DOMVM] "+n;return console.error(e),Z("div",$,e)}function en(n,e,t,l){var r,u,f,a=this;a.view=n,a.data=e,a.key=t,l&&(a.opts=l,a.cfg(l));try{r=o(n)?n:n.call(a,a,e,t,l)}catch(n){u=n}r&&(i(r)?f=r:(f=r.render,a.cfg(r))),a.render=function(){if(u)return nn(u);try{return f.apply(this,arguments)}catch(n){return nn(n)}},a.init&&a.init.call(a,a,a.data,a.key,l)}function tn(n){var e=this;return n.init&&(e.init=n.init),n.diff&&(e.diff=n.diff),n.hooks&&(e.hooks=f(e.hooks||{},n.hooks)),e}function ln(n,e,t,l){return null!=t&&(t.body[l]=e,e.idx=l,e.parent=t,e._lis=!1),n}function rn(n,e,t,l){this.view=n,this.data=e,this.key=t,this.opts=l}function on(n,e){this.vm=n,this.data=e}return en.prototype={constructor:en,init:null,view:null,key:null,data:null,state:null,api:null,opts:null,node:null,hooks:null,refs:null,render:null,mount:function(n,e){var t=this;return e?(L({el:n,flags:0}),t._redraw(null,null,!1),n.nodeName.toLowerCase()!==t.node.tag?(F(t.node),B(n.parentNode,t.node.el,n),n.parentNode.removeChild(n)):B(n.parentNode,F(t.node,n),n)):(t._redraw(null,null),n&&B(n,t.node.el)),n&&D(t,!0),t},unmount:function(n){var e=this.node;I(e.el.parentNode,e.el),e.el=null,n||D(this,!0)},cfg:tn,config:tn,parent:function(){return y(this.node.parent)},root:function(){for(var n=this.node;n.parent;)n=n.parent;return n.vm},redraw:function(){var n=this;return n._redraw(null,null,c(n)),n},update:function(n){var e=this;return e._update(n,null,null,c(e),!0),e},_update:function(n,e,t,l,r){var o=this;return null!=n&&o.data!==n&&(M(o.hooks,"willUpdate",o,n),o.data=n),r?o._redraw(e,t,l):o},_redraw:function(n,e,t){const l=null==n;var r,o=this,u=o.node&&o.node.el&&o.node.el.parentNode,i=null!=o.diff,f=o.node;if(null!=f&&l&&(n=f.parent,e=f.idx),i&&(r=o.diff.val(o,o.data,o.key,n,e),null!=f&&o.diff.eq(o,f._diff,r)))return f._diff=r,ln(o,f,n,e);u&&M(o.hooks,"willRedraw",o,o.data);var a=o.render.call(o,o,o.data,o.key,n,e);if(i&&(a._diff=r),a===f)return ln(o,f,n,e);if(o.refs=null,null!=o.key&&a.key!==o.key&&(a.key=o.key),o.node=a,n?(m(a,n,e,o),n.body[e]=a):f&&f.parent?(m(a,f.parent,f.idx,o),f.parent.body[f.idx]=a):m(a,null,null,o),!1!==t)if(f)if(f.tag!==a.tag||f.key!==a.key){f.vm=a.vm=null;var d=f.el.parentNode,s=T(f.el);I(d,f.el),B(d,F(a),s),f.el=a.el,a.vm=o}else W(a,f);else F(a);return u&&M(o.hooks,"didRedraw",o,o.data),l&&u&&D(o,!0),o}},rn.prototype={constructor:rn,type:4,view:null,data:null,key:null,opts:null},on.prototype={constructor:on,type:5,vm:null,data:null},n.FIXED_BODY=2,n.KEYED_LIST=4,n.VNode=p,n.ViewModel=en,n.cfg=k,n.config=k,n.createView=V,n.defineComment=function(n){let e=new p;return e.type=3,e.body=n,e},n.defineElement=Z,n.defineSvgElement=function(n,e,t,l){var r=Z(n,e,t,l);return r.ns="http://www.w3.org/2000/svg",r},n.defineText=h,n.defineView=function(n,e,t,l){return new rn(n,e,t,l)},n.injectElement=function(n){let e=new p;return e.type=0,e.el=e.key=n,e},n.injectView=function(n,e){return new on(n,e)},n.list=function(n,e,t){return new b(n,e,t)},n}({});