UNPKG

mithril

Version:

A framework for building brilliant applications

8 lines 12.8 kB
/* Mithril v0.1.20 http://github.com/lhorie/mithril.js (c) Leo Horie License: MIT */ Mithril=m=new function a(b,c){function d(){for(var a,b=arguments,d=(!(b[1]===c||"[object Object]"!=A.call(b[1])||"tag"in b[1]||"subtree"in b[1])),e=d?b[1]:{},f=("class"in e?"class":"className"),g={tag:"div",attrs:{}},h=[];a=B.exec(b[0]);)if(""==a[1])g.tag=a[2];else if("#"==a[1])g.attrs.id=a[2];else if("."==a[1])h.push(a[2]);else if("["==a[3][0]){var i=C.exec(a[3]);g.attrs[i[1]]=i[3]||(i[2]?"":!0)}h.length>0&&(g.attrs[f]=h.join(" ")),g.children=d?b[2]:b[1];for(var j in e)g.attrs[j]=j==f?(g.attrs[j]||"")+" "+e[j]:e[j];return g}function e(a,d,h,k,l,m,n,o,p,q,r){if((l===c||null===l)&&(l=""),"retain"===l.subtree)return m;var s=A.call(m),t=A.call(l);if(m===c||null===m||s!=t){if(null!==m&&m!==c)if(h&&h.nodes){var u=o-k,v=u+("[object Array]"==t?l:m.nodes).length;g(h.nodes.slice(u,v),h.slice(u,v))}else m.nodes&&g(m.nodes,m);m=new l.constructor,m.nodes=[]}if("[object Array]"==t){l=j(l);for(var w=[],x=m.length===l.length,y=0,z=1,B=2,C=3,D={},E=[],F=!1,G=0;G<m.length;G++)m[G]&&m[G].attrs&&m[G].attrs.key!==c&&(F=!0,D[m[G].attrs.key]={action:z,index:G});if(F){for(var G=0;G<l.length;G++)if(l[G]&&l[G].attrs)if(l[G].attrs.key!==c){var H=l[G].attrs.key;D[H]=D[H]?{action:C,index:G,from:D[H].index,element:a.childNodes[D[H].index]}:{action:B,index:G}}else E.push({index:G,element:a.childNodes[G]});for(var I,J=Object.keys(D).map(function(a){return D[a]}),K=J.sort(function(a,b){return a.action-b.action||a.index-b.index}),L=m.slice(),G=0;I=K[G];G++){if(I.action==z&&(g(m[I.index].nodes,m[I.index]),L.splice(I.index,1)),I.action==B){var M=b.document.createElement("div");M.key=l[I.index].attrs.key,a.insertBefore(M,a.childNodes[I.index]),L.splice(I.index,0,{attrs:{key:l[I.index].attrs.key},nodes:[M]})}I.action==C&&(a.childNodes[I.index]!==I.element&&null!==I.element&&a.insertBefore(I.element,a.childNodes[I.index]),L[I.index]=m[I.from])}for(var G=0;G<E.length;G++){var I=E[G];a.insertBefore(I.element,a.childNodes[I.index]),L[I.index]=m[I.index]}m=L,m.nodes=[];for(var N,G=0;N=a.childNodes[G];G++)m.nodes.push(N)}for(var G=0,O=0;G<l.length;G++){var P=e(a,d,m,o,l[G],m[O],n,o+y||y,p,q,r);if(P!==c){P.nodes.intact||(x=!1);var Q="[object Array]"==A.call(P);y+=Q?P.length:1,m[O++]=P}}if(!x){for(var G=0;G<l.length;G++)m[G]!==c&&(w=w.concat(m[G].nodes));for(var R,G=0;R=m.nodes[G];G++)null!==R.parentNode&&w.indexOf(R)<0&&R.parentNode.removeChild(R);for(var R,G=m.nodes.length;R=w[G];G++)null===R.parentNode&&a.appendChild(R);l.length<m.length&&(m.length=l.length),m.nodes=w}}else if(l!==c&&"[object Object]"==t){if((l.tag!=m.tag||Object.keys(l.attrs).join()!=Object.keys(m.attrs).join()||l.attrs.id!=m.attrs.id)&&(g(m.nodes),m.configContext&&"function"==typeof m.configContext.onunload&&m.configContext.onunload()),"string"!=typeof l.tag)return;var R,S=0===m.nodes.length;l.attrs.xmlns?q=l.attrs.xmlns:"svg"===l.tag?q="http://www.w3.org/2000/svg":"math"===l.tag&&(q="http://www.w3.org/1998/Math/MathML"),S?(R=q===c?b.document.createElement(l.tag):b.document.createElementNS(q,l.tag),m={tag:l.tag,children:l.children!==c?e(R,l.tag,c,c,l.children,m.children,!0,0,l.attrs.contenteditable?R:p,q,r):[],attrs:f(R,l.tag,l.attrs,{},q),nodes:[R]},a.insertBefore(R,a.childNodes[o]||null)):(R=m.nodes[0],f(R,l.tag,l.attrs,m.attrs,q),m.children=l.children!==c?e(R,l.tag,c,c,l.children,m.children,!1,0,l.attrs.contenteditable?R:p,q,r):[],m.nodes.intact=!0,n===!0&&null!==R&&a.insertBefore(R,a.childNodes[o]||null)),"function"==typeof l.attrs.config&&r.push(l.attrs.config.bind(b,R,!S,m.configContext=m.configContext||{},m))}else if("function"!=typeof t){var w;0===m.nodes.length?(l.$trusted?w=i(a,o,l):(w=[b.document.createTextNode(l)],a.insertBefore(w[0],a.childNodes[o]||null)),m="string number boolean".indexOf(typeof l)>-1?new l.constructor(l):l,m.nodes=w):m.valueOf()!==l.valueOf()||n===!0?(w=m.nodes,p&&p===b.document.activeElement||(l.$trusted?(g(w,m),w=i(a,o,l)):"textarea"===d?a.value=l:p?p.innerHTML=l:((1==w[0].nodeType||w.length>1)&&(g(m.nodes,m),w=[b.document.createTextNode(l)]),a.insertBefore(w[0],a.childNodes[o]||null),w[0].nodeValue=l)),m=new l.constructor(l),m.nodes=w):m.nodes.intact=!0}return m}function f(a,d,e,f,g){for(var h in e){var i=e[h],j=f[h];if(!(h in f)||j!==i||a===b.document.activeElement){if(f[h]=i,"config"===h)continue;if("function"==typeof i&&0==h.indexOf("on"))a[h]=k(i,a);else if("style"===h&&"object"==typeof i){for(var l in i)(j===c||j[l]!==i[l])&&(a.style[l]=i[l]);for(var l in j)l in i||(a.style[l]="")}else g!==c?"href"===h?a.setAttributeNS("http://www.w3.org/1999/xlink","href",i):"className"===h?a.setAttribute("class",i):a.setAttribute(h,i):"value"===h&&"input"===d?a.value!==i&&(a.value=i):h in a&&"list"!=h&&"style"!=h?a[h]=i:a.setAttribute(h,i)}}return f}function g(a,b){for(var c=a.length-1;c>-1;c--)a[c]&&a[c].parentNode&&(a[c].parentNode.removeChild(a[c]),b=[].concat(b),b[c]&&h(b[c]));0!=a.length&&(a.length=0)}function h(a){if(a.configContext&&"function"==typeof a.configContext.onunload&&a.configContext.onunload(),a.children)if("[object Array]"==A.call(a.children))for(var b=0;b<a.children.length;b++)h(a.children[b]);else a.children.tag&&h(a.children)}function i(a,c,d){var e=a.childNodes[c];if(e){var f=1!=e.nodeType,g=b.document.createElement("span");f?(a.insertBefore(g,e),g.insertAdjacentHTML("beforebegin",d),a.removeChild(g)):e.insertAdjacentHTML("beforebegin",d)}else a.insertAdjacentHTML("beforeend",d);for(var h=[];a.childNodes[c]!==e;)h.push(a.childNodes[c]),c++;return h}function j(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];"[object Array]"==A.call(d)?b.push.apply(b,j(d)):b.push(d)}return b}function k(a,b){return function(c){c=c||event,d.redraw.strategy("diff"),d.startComputation();try{return a.call(b,c)}finally{J||(J=-1),d.endComputation()}}}function l(a){var b=E.indexOf(a);return 0>b?E.push(a)-1:b}function m(){for(var a=d.redraw.strategy(),b=0;b<G.length;b++)I[b]&&"none"!=a&&d.render(G[b],H[b].view(I[b]),"all"==a);K&&(K(),K=null),J=null,d.redraw.strategy("diff")}function n(a){return a.slice(N[d.route.mode].length)}function o(a,b,c){P={};var e=c.indexOf("?");-1!==e&&(P=s(c.substr(e+1,c.length)),c=c.substr(0,e));for(var f in b){if(f==c)return d.module(a,b[f]),!0;var g=new RegExp("^"+f.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(g.test(c))return c.replace(g,function(){for(var c=f.match(/:[^\/]+/g)||[],e=[].slice.call(arguments,1,-2),g=0;g<c.length;g++)P[c[g].replace(/:|\./g,"")]=t(e[g]);d.module(a,b[f])}),!0}}function p(a){a=a||event,a.ctrlKey||a.metaKey||2==a.which||(a.preventDefault(),d.route(a.currentTarget[d.route.mode].slice(N[d.route.mode].length)))}function q(){"hash"!=d.route.mode&&b.location.hash?b.location.hash=b.location.hash:b.scrollTo(0,0)}function r(a,b){var c=[];for(var d in a){var e=b?b+"["+d+"]":d,f=a[d];c.push("object"==typeof f?r(f,e):encodeURIComponent(e)+"="+encodeURIComponent(f))}return c.join("&")}function s(a){for(var b=a.split("&"),c={},d=0;d<b.length;d++){var e=b[d].split("=");c[t(e[0])]=e[1]?t(e[1]):1===e.length?!0:""}return c}function t(a){return decodeURIComponent(a.replace(/\+/g," "))}function u(a){var b=l(a);g(a.childNodes,F[b]),F[b]=c}function v(a){return a}function w(a){var d=new b.XMLHttpRequest;if(d.open(a.method,a.url,!0,a.user,a.password),d.onreadystatechange=function(){4===d.readyState&&(d.status>=200&&d.status<300?a.onload({type:"load",target:d}):a.onerror({type:"error",target:d}))},a.serialize==JSON.stringify&&"GET"!=a.method&&d.setRequestHeader("Content-Type","application/json; charset=utf-8"),"function"==typeof a.config){var e=a.config(d,a);e!==c&&(d=e)}return d.send("GET"==a.method?"":a.data),d}function x(a,b,c){return b&&Object.keys(b).length>0&&("GET"==a.method?a.url=a.url+(a.url.indexOf("?")<0?"?":"&")+r(b):a.data=c(b)),a}function y(a,b){var c=a.match(/:[a-z]\w+/gi);if(c&&b)for(var d=0;d<c.length;d++){var e=c[d].slice(1);a=a.replace(c[d],b[e]),delete b[e]}return a}var z,A={}.toString,B=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,C=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/,D={insertAdjacentHTML:function(a,c){b.document.write(c),b.document.close()},appendChild:function(a){z===c&&(z=b.document.createElement("html")),"HTML"==a.nodeName?z=a:z.appendChild(a),b.document.documentElement&&b.document.documentElement!==z?b.document.replaceChild(z,b.document.documentElement):b.document.appendChild(z)},insertBefore:function(a){this.appendChild(a)},childNodes:[]},E=[],F={};d.render=function(a,d,f){var h=[];if(!a)throw new Error("Please ensure the DOM element exists before rendering a template into it.");var i=l(a),j=a==b.document||a==b.document.documentElement?D:a;F[i]===c&&g(j.childNodes),f===!0&&u(a),F[i]=e(j,null,c,c,d,F[i],!1,0,null,c,h);for(var k=0;k<h.length;k++)h[k]()},d.trust=function(a){return a=new String(a),a.$trusted=!0,a},d.prop=function(a){var b=function(){return arguments.length&&(a=arguments[0]),a};return b.toJSON=function(){return a},b};var G=[],H=[],I=[],J=0,K=null;d.module=function(a,b){var c=G.indexOf(a);0>c&&(c=G.length);var e=!1;if(I[c]&&"function"==typeof I[c].onunload){var f={preventDefault:function(){e=!0}};I[c].onunload(f)}e||(d.redraw.strategy("all"),d.startComputation(),G[c]=a,H[c]=b,I[c]=new b.controller,d.endComputation())},d.redraw=function(){var a=b.cancelAnimationFrame||b.clearTimeout,c=b.requestAnimationFrame||b.setTimeout;J?(a(J),J=c(m,0)):(m(),J=c(function(){J=null},0))},d.redraw.strategy=d.prop();var L=0;d.startComputation=function(){L++},d.endComputation=function(){L=Math.max(L-1,0),0==L&&d.redraw()},d.withAttr=function(a,b){return function(c){c=c||event;var d=c.currentTarget||this;b(a in d?d[a]:d.getAttribute(a))}};var M,N={pathname:"",hash:"#",search:"?"},O=function(){},P={};d.route=function(){if(0===arguments.length)return M;if(3===arguments.length&&"string"==typeof arguments[1]){var a=arguments[0],c=arguments[1],e=arguments[2];O=function(b){var f=M=n(b);o(a,e,f)||d.route(c,!0)};var f="hash"==d.route.mode?"onhashchange":"onpopstate";b[f]=function(){M!=n(b.location[d.route.mode])&&O(b.location[d.route.mode])},K=q,b[f]()}else if(arguments[0].addEventListener){var g=arguments[0],h=arguments[1];g.href.indexOf(N[d.route.mode])<0&&(g.href=b.location.pathname+N[d.route.mode]+g.pathname),h||(g.removeEventListener("click",p),g.addEventListener("click",p))}else if("string"==typeof arguments[0]){M=arguments[0];var i="object"==typeof arguments[1]?r(arguments[1]):null;i&&(M+=(-1===M.indexOf("?")?"?":"&")+i);var j=(3==arguments.length?arguments[2]:arguments[1])===!0;b.history.pushState?(K=function(){b.history[j?"replaceState":"pushState"](null,b.document.title,N[d.route.mode]+M),q()},O(N[d.route.mode]+M)):b.location[d.route.mode]=M}},d.route.param=function(a){return P[a]},d.route.mode="search";var Q={};return d.deferred=function(){var a=[],b=[],e=Q,f=Q,g=d.prop(),h={resolve:function(c){e===Q&&g(e=c);for(var d=0;d<a.length;d++)a[d](c);a.length=b.length=0},reject:function(c){f===Q&&(f=c);for(var d=0;d<b.length;d++)b[d](c);a.length=b.length=0},promise:g};return h.promise.resolvers=a,h.promise.then=function(g,h){function i(a,b){return function(d){try{var e=b(d);e&&"function"==typeof e.then?e.then(j[a],h):j[a](e!==c?e:d)}catch(f){if("[object Error]"==A.call(f)&&f.constructor!==Error)throw f;j.reject(f)}}}var j=d.deferred();return g||(g=v),h||(h=v),e!==Q?i("resolve",g)(e):f!==Q?i("reject",h)(f):(a.push(i("resolve",g)),b.push(i("reject",h))),j.promise},h},d.sync=function(a){function b(a,b){return function(d){return g[a]=d,b||(c="reject"),0==--f&&(e.promise(g),e[c](g)),d}}var c="resolve",e=d.deferred(),f=a.length,g=new Array(f);if(a.length>0)for(var h=0;h<a.length;h++)a[h].then(b(h,!0),b(h,!1));else e.resolve();return e.promise},d.request=function(a){a.background!==!0&&d.startComputation();var b=d.deferred(),c=a.serialize=a.serialize||JSON.stringify,e=a.deserialize=a.deserialize||JSON.parse,f=a.extract||function(a){return 0===a.responseText.length&&e===JSON.parse?null:a.responseText};return a.url=y(a.url,a.data),a=x(a,a.data,c),a.onload=a.onerror=function(c){try{c=c||event;var g=("load"==c.type?a.unwrapSuccess:a.unwrapError)||v,h=g(e(f(c.target,a)));if("load"==c.type)if("[object Array]"==A.call(h)&&a.type)for(var i=0;i<h.length;i++)h[i]=new a.type(h[i]);else a.type&&(h=new a.type(h));b["load"==c.type?"resolve":"reject"](h)}catch(c){if(c instanceof SyntaxError)throw new SyntaxError("Could not parse HTTP response. See http://lhorie.github.io/mithril/mithril.request.html#using-variable-data-formats");if("[object Error]"==A.call(c)&&c.constructor!==Error)throw c;b.reject(c)}a.background!==!0&&d.endComputation()},w(a),b.promise},d.deps=function(a){return b=a},d.deps.factory=a,d}("undefined"!=typeof window?window:{}),"undefined"!=typeof module&&null!==module&&(module.exports=m),"function"==typeof define&&define.amd&&define(function(){return m}); //# sourceMappingURL=mithril.min.map