UNPKG

mithril

Version:

A framework for building brilliant applications

8 lines 9.12 kB
/* Mithril v0.1.11 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]"==v.call(a[1]),c=b?a[1]:{},d="class"in c?"class":"className",e=u[a[0]];if(void 0===e){u[a[0]]=e={tag:"div",attrs:{}};for(var f,g=[];f=w.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=x.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){if((null===h||void 0===h)&&(h=""),"retain"!==h.subtree){var n=v.call(i),o=v.call(h);if(n!=o&&(null!==i&&void 0!==i&&f(i.nodes),i=new h.constructor,i.nodes=[]),"[object Array]"==o){for(var p=[],q=i.length===h.length,r=0,s=0,t=0;s<h.length;s++){var u=d(a,null,h[s],i[t],j,k+r||r,l,m);void 0!==u&&(u.nodes.intact||(q=!1),r+=u instanceof Array?u.length:1,i[t++]=u)}if(!q){for(var s=0;s<h.length;s++)void 0!==i[s]&&(p=p.concat(i[s].nodes));for(var w,s=p.length;w=i.nodes[s];s++)null!==w.parentNode&&w.parentNode.removeChild(w);for(var w,s=i.nodes.length;w=p[s];s++)null===w.parentNode&&a.appendChild(w);h.length<i.length&&(i.length=h.length),i.nodes=p}}else if("[object Object]"==o){if((h.tag!=i.tag||Object.keys(h.attrs).join()!=Object.keys(i.attrs).join()||h.attrs.id!=i.attrs.id)&&f(i.nodes),"string"!=typeof h.tag)return;var w,x=0===i.nodes.length;"svg"===h.tag&&(m="http://www.w3.org/2000/svg"),x?(w=void 0===m?b.document.createElement(h.tag):b.document.createElementNS(m,h.tag),i={tag:h.tag,attrs:e(w,h.tag,h.attrs,{},m),children:d(w,h.tag,h.children,i.children,!0,0,h.attrs.contenteditable?w:l,m),nodes:[w]},a.insertBefore(w,a.childNodes[k]||null)):(w=i.nodes[0],e(w,h.tag,h.attrs,i.attrs,m),i.children=d(w,h.tag,h.children,i.children,!1,0,h.attrs.contenteditable?w:l,m),i.nodes.intact=!0,j===!0&&a.insertBefore(w,a.childNodes[k]||null)),"[object Function]"==v.call(h.attrs.config)&&h.attrs.config(w,!x)}else{var w;if(0===i.nodes.length)h.$trusted?w=g(a,k,h):(w=b.document.createTextNode(h),a.insertBefore(w,a.childNodes[k]||null)),i="string number boolean".indexOf(typeof h)>-1?new h.constructor(h):h,i.nodes=[w];else if(i.valueOf()!==h.valueOf()||j===!0){if(!l||l!==b.document.activeElement)if(h.$trusted){var y=i.nodes[0],p=[y];if(y){for(;y=y.nextSibling;)p.push(y);f(p),w=g(a,k,h)}else a.innerHTML=h}else w=i.nodes[0],"textarea"===c?a.value=h:l?l.innerHTML=h:(a.insertBefore(w,a.childNodes[k]||null),w.nodeValue=h);i=new h.constructor(h),i.nodes=[w]}else i.nodes.intact=!0}return i}}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)for(var k in h)(void 0===j||j[k]!==h[k])&&(a.style[k]=h[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?a[g]=h:a.setAttribute(g,h)}}return e}function f(a){for(var b=a.length-1;b>-1;b--)a[b].parentNode.removeChild(a[b]);a.length=0}function g(a,b,c){var d=a.childNodes[b];return d?d.insertAdjacentHTML("beforebegin",c):a.insertAdjacentHTML("beforeend",c),d?d.previousSibling:a.firstChild}function h(a){var b={};for(var c in a)b[c]=a[c];return b}function i(a,b){return function(d){c.startComputation();var e=a.call(b,d);return c.endComputation(),e}}function j(){for(var a=0;a<B.length;a++)c.render(B[a],C[a].view(D[a]));H&&(H(),H=null),F=E}function k(a,b,d){M={};for(var e in b){if(e==d)return!void c.module(a,b[e]);var f=new RegExp("^"+e.replace(/:[^\/]+/g,"([^\\/]+)")+"$");if(f.test(d))return!void d.replace(f,function(){for(var d=e.match(/:[^\/]+/g),f=[].slice.call(arguments,1,-2),g=0;g<d.length;g++)M[d[g].slice(1)]=f[g];c.module(a,b[e])})}}function l(a){a.ctrlKey||a.metaKey||2==a.which||(a.preventDefault(),c.route(a.currentTarget[c.route.mode].slice(K[c.route.mode].length)))}function m(){"hash"!=c.route.mode&&b.location.hash&&(b.location.hash=b.location.hash)}function n(a){return a}function o(a){var c=b.XDomainRequest?new b.XDomainRequest:new b.XMLHttpRequest;return c.open(a.method,a.url,!0,a.user,a.password),c.onload="function"==typeof a.onload?a.onload:function(){},c.onerror="function"==typeof a.onerror?a.onerror:function(){},c.onreadystatechange=function(){4===c.readyState&&0===c.status&&c.onerror({type:"error",target:c})},"function"==typeof a.config&&a.config(c,a),c.send(a.data),c}function p(a,b){var c=[];for(var d in a){var e=b?b+"["+d+"]":d,f=a[d];c.push("object"==typeof f?p(f,e):encodeURIComponent(e)+"="+encodeURIComponent(f))}return c.join("&")}function q(a,b,c){return b&&Object.keys(b).length>0&&("GET"==a.method?a.url=a.url+(a.url.indexOf("?")<0?"?":"&")+p(b):a.data=c(b)),a}function r(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}function s(a){var b=a.then;return function(a,c){var d=b(function(b){return d(a(b))},function(a){return d(c(a))});return d.then=s(d),d}}var t,u={},v={}.toString,w=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g,x=/\[(.+?)(?:=("|'|)(.+?)\2)?\]/,y={insertAdjacentHTML:function(a,c){b.document.write(c),b.document.close()},appendChild:function(a){void 0===t&&(t=b.document.createElement("html")),"HTML"==a.nodeName?t=a:t.appendChild(a),b.document.documentElement!==t&&b.document.replaceChild(t,b.document.documentElement)},insertBefore:function(a){this.appendChild(a)},childNodes:[]},z=[],A={};c.render=function(a,c){var e=z.indexOf(a),f=0>e?z.push(a)-1:e,g=a==b.document||a==b.document.documentElement?y:a;A[f]=d(g,null,c,A[f],!1,0,null,void 0)},c.trust=function(a){return a=new String(a),a.$trusted=!0,a};var B=[],C=[],D=[],E=0,F=0,G=0,H=null;c.module=function(a,b){c.startComputation();var d=B.indexOf(a);0>d&&(d=B.length),B[d]=a,C[d]=b,D[d]=new b.controller,c.endComputation()},c.redraw=function(){if(E=b.performance&&b.performance.now?b.performance.now():(new b.Date).getTime(),E-F>16)j();else{var a=b.cancelAnimationFrame||b.clearTimeout,c=b.requestAnimationFrame||b.setTimeout;a(G),G=c(j,0)}};var I=0;c.startComputation=function(){I++},c.endComputation=function(){I=Math.max(I-1,0),0==I&&c.redraw()},c.withAttr=function(a,b){return function(c){b(a in c.currentTarget?c.currentTarget[a]:c.currentTarget.getAttribute(a))}};var J,K={pathname:"",hash:"#",search:"?"},L=function(){},M={};return c.route=function(){if(0===arguments.length)return J;if(3===arguments.length){J=b.location[c.route.mode].slice(K[c.route.mode].length);var a=arguments[0],d=arguments[1],e=arguments[2];L=function(b){var f=b.slice(K[c.route.mode].length);k(a,e,f)||c.route(d,!0)};var f="hash"==c.route.mode?"onhashchange":"onpopstate";b[f]=function(){L(b.location[c.route.mode])},H=m,b[f]()}else if(arguments[0].addEventListener){var g=arguments[0],h=arguments[1];g.href=K[c.route.mode]+g.pathname,h||(g.removeEventListener("click",l),g.addEventListener("click",l))}else if("string"==typeof arguments[0]){J=arguments[0];var i=arguments[1]===!0;b.history.pushState?(H=function(){b.history[i?"replaceState":"pushState"](null,b.document.title,K[c.route.mode]+J),m()},L(K[c.route.mode]+J)):b.location[c.route.mode]=J}},c.route.param=function(a){return M[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},c.deferred=function(){var a=[],b=[],d={resolve:function(b){for(var c=0;c<a.length;c++)a[c](b)},reject:function(a){for(var c=0;c<b.length;c++)b[c](a)},promise:c.prop()};return d.promise.resolvers=a,d.promise.then=function(d,e){function f(a,b,c){a.push(function(a){try{var d=c(a);d&&"function"==typeof d.then?d.then(g[b],e):g[b](void 0!==d?d:a)}catch(f){if(f instanceof Error&&f.constructor!==Error)throw f;g.reject(f)}})}var g=c.deferred();return d||(d=n),e||(e=n),f(a,"resolve",d),f(b,"reject",e),g.promise},d},c.sync=function(a){function b(b){return function(c){return f.push(c),b||(d="reject"),f.length==a.length&&(e.promise(f),e[d](f)),c}}for(var d="resolve",e=c.deferred(),f=[],g=0;g<a.length;g++)a[g].then(b(!0),b(!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=r(a.url,a.data),a=q(a,a.data,d),a.onload=a.onerror=function(d){var g=("load"==d.type?a.unwrapSuccess:a.unwrapError)||n,h=g(e(f(d.target,a)));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.promise(h),b["load"==d.type?"resolve":"reject"](h),a.background!==!0&&c.endComputation()},o(a),b.promise.then=s(b.promise),b.promise},c.deps=function(a){return b=a},c.deps.factory=a,c}(this),"undefined"!=typeof module&&null!==module&&(module.exports=m),"function"==typeof define&&define.amd&&define(function(){return m}); //# sourceMappingURL=mithril.min.map