diff --git a/README.md b/README.md index 4d6e53b3..11a87ed7 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,6 @@ There are over 4000 assertions in the test suite, and tests cover even difficult ## Modularity -Despite the huge improvements in performance and modularity, the new codebase is smaller than v0.2.x, currently clocking at 7.46 KB min+gzip +Despite the huge improvements in performance and modularity, the new codebase is smaller than v0.2.x, currently clocking at 7.47 KB min+gzip In addition, Mithril is now completely modular: you can import only the modules that you need and easily integrate 3rd party modules if you wish to use a different library for routing, ajax, and even rendering diff --git a/mithril.js b/mithril.js index 89ab1ba8..8785809d 100644 --- a/mithril.js +++ b/mithril.js @@ -837,15 +837,16 @@ var coreRenderer = function($window) { //event function updateEvent(vnode, key2, value) { var element = vnode.dom - var callback = function(e) { + var callback = typeof onevent !== "function" ? value : function(e) { var result = value.call(element, e) - if (typeof onevent === "function") onevent.call(element, e) + onevent.call(element, e) return result } if (key2 in element) element[key2] = typeof value === "function" ? callback : null else { var eventName = key2.slice(2) if (vnode.events === undefined) vnode.events = {} + if (vnode.events[key2] === callback) return if (vnode.events[key2] != null) element.removeEventListener(eventName, vnode.events[key2], false) if (typeof value === "function") { vnode.events[key2] = callback diff --git a/mithril.min.js b/mithril.min.js index 6fd0a979..e7b9b7d0 100644 --- a/mithril.min.js +++ b/mithril.min.js @@ -1,41 +1,41 @@ -new function(){function t(a,c,g,f,d,k){return{tag:a,key:c,attrs:g,children:f,text:d,dom:k,domSize:void 0,state:{},events:void 0,instance:void 0,skip:!1}}function A(a){if(null==a||"string"!==typeof a&&null==a.view)throw Error("The selector must be either a string or a component.");if("string"===typeof a&&void 0===I[a]){for(var c,g,f=[],d={};c=N.exec(a);){var k=c[1],m=c[2];""===k&&""!==m?g=m:"#"===k?d.id=m:"."===k?f.push(m):"["===c[3][0]&&((k=c[6])&&(k=k.replace(/\\(["'])/g,"$1").replace(/\\\\/g,"\\")), -"class"===c[4]?f.push(k):d[c[4]]=k||!0)}0b.indexOf("?")?"?":"&";b+=d+c}return b}function m(b){try{return""!==b?JSON.parse(b):null}catch(C){throw Error(b);}}function z(b){return b.responseText}function n(b,a){if("function"=== -typeof b)if(a instanceof Array)for(var c=0;cg.status||304===g.status)c(n(b.type,a));else{var d=Error(g.responseText),h;for(h in a)d[h]=a[h];f(d)}}catch(G){f(G)}};h&&null!=b.data?g.send(b.data):g.send()});return!0===b.background?r:v(r)},jsonp:function(b,h){var m=g();b=f(b,h);var r=new c(function(c,f){var g=b.callbackName|| -"_mithril_"+Math.round(1E16*Math.random())+"_"+t++,h=a.document.createElement("script");a[g]=function(d){h.parentNode.removeChild(h);c(n(b.type,d));delete a[g]};h.onerror=function(){h.parentNode.removeChild(h);f(Error("JSONP request failed"));delete a[g]};null==b.data&&(b.data={});b.url=d(b.url,b.data);b.data[b.callbackKey||"callback"]=g;h.src=k(b.url,b.data);a.document.documentElement.appendChild(h)});return!0===b.background?r:m(r)},setCompletionCallback:function(a){h=a}}}(window,"undefined"!==typeof Promise? -Promise:u),M=function(a){function c(e,l,a,b,c,d,f){for(;a=w&&v>=y;){var x=l[w],q=a[y];if(x!==q||p)if(null==x)w++;else if(null==q)y++;else if(x.key===q.key)w++,y++,k(e,x,q,b,z(l,w,d),p,f),p&&x.tag===q.tag&&n(e,m(x),d);else if(x=l[r],x!==q||p)if(null==x)r--;else if(null==q)y++;else if(x.key===q.key)k(e,x,q,b,z(l,r+1,d),p,f),(p||y=w&&v>=y;){x=l[r];q=a[v];if(x!==q||p)if(null==x)r--;else{if(null!= -q)if(x.key===q.key)k(e,x,q,b,z(l,r+1,d),p,f),p&&x.tag===q.tag&&n(e,m(x),d),null!=x.dom&&(d=x.dom),r--;else{if(!t){t=l;var x=r,C={},u;for(u=0;ub.indexOf("?")?"?":"&";b+=d+c}return b}function n(b){try{return""!==b?JSON.parse(b):null}catch(B){throw Error(b);}}function r(b){return b.responseText}function p(b,a){if("function"=== +typeof b)if(a instanceof Array)for(var c=0;cg.status||304===g.status)c(p(b.type,a));else{var d=Error(g.responseText),h;for(h in a)d[h]=a[h];f(d)}}catch(F){f(F)}};h&&null!=b.data?g.send(b.data):g.send()});return!0===b.background?t:v(t)},jsonp:function(b,h){var n=g();b=f(b,h);var t=new c(function(c,f){var g=b.callbackName|| +"_mithril_"+Math.round(1E16*Math.random())+"_"+m++,h=a.document.createElement("script");a[g]=function(d){h.parentNode.removeChild(h);c(p(b.type,d));delete a[g]};h.onerror=function(){h.parentNode.removeChild(h);f(Error("JSONP request failed"));delete a[g]};null==b.data&&(b.data={});b.url=d(b.url,b.data);b.data[b.callbackKey||"callback"]=g;h.src=k(b.url,b.data);a.document.documentElement.appendChild(h)});return!0===b.background?t:n(t)},setCompletionCallback:function(a){h=a}}}(window,"undefined"!==typeof Promise? +Promise:u),M=function(a){function c(e,l,a,b,c,d,f){for(;a=w&&v>=y;){var x=l[w],m=a[y];if(x!==m||q)if(null==x)w++;else if(null==m)y++;else if(x.key===m.key)w++,y++,k(e,x,m,b,r(l,w,d),q,f),q&&x.tag===m.tag&&p(e,n(x),d);else if(x=l[t],x!==m||q)if(null==x)t--;else if(null==m)y++;else if(x.key===m.key)k(e,x,m,b,r(l,t+1,d),q,f),(q||y=w&&v>=y;){x=l[t];m=a[v];if(x!==m||q)if(null==x)t--;else{if(null!= +m)if(x.key===m.key)k(e,x,m,b,r(l,t+1,d),q,f),q&&x.tag===m.tag&&p(e,n(x),d),null!=x.dom&&(d=x.dom),t--;else{if(!G){G=l;var x=t,B={},u;for(u=0;u