UNPKG

mithril

Version:

A framework for building brilliant applications

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