Merge remote-tracking branch 'origin/rewrite' into rewrite

Conflicts:
	mithril.min.js
This commit is contained in:
Leo Horie 2016-08-23 13:24:21 -04:00
commit 17161a05c5
10 changed files with 122 additions and 54 deletions

6
hyperscript.js Normal file
View file

@ -0,0 +1,6 @@
var hyperscript = require("./render/hyperscript")
hyperscript.trust = require("./render/trust")
hyperscript.fragment = require("./render/fragment")
module.exports = hyperscript

View file

@ -1,6 +1,6 @@
"use strict"
var m = require("./render/hyperscript")
var m = require("./hyperscript")
var renderService = require("./render")
var requestService = require("./request")
var redrawService = require("./redraw")
@ -11,7 +11,6 @@ requestService.setCompletionCallback(redrawService.publish)
m.route = require("./route")
m.mount = require("./mount")
m.trust = require("./render/trust")
m.withAttr = require("./util/withAttr")
m.prop = require("./stream")
m.render = renderService.render

View file

@ -72,6 +72,12 @@ function hyperscript(selector) {
if (typeof selector === "string") return selectorCache[selector](attrs || {}, Vnode.normalizeChildren(children))
return Vnode(selector, attrs && attrs.key, attrs || {}, Vnode.normalizeChildren(children), undefined, undefined)
}
hyperscript.trust = function(html) {
return Vnode("<", undefined, undefined, html, undefined, undefined)
}
hyperscript.fragment = function(attrs, children) {
return Vnode("[", attrs.key, attrs, Vnode.normalizeChildren(children), undefined, undefined)
}
var m = hyperscript
var renderService = function($window) {
var $doc = $window.document
@ -160,6 +166,8 @@ var renderService = function($window) {
initLifecycle(vnode.tag, vnode, hooks)
vnode.instance = Vnode.normalize(vnode.tag.view.call(vnode.state, vnode))
if (vnode.instance != null) {
if(vnode.instance === vnode)
throw Error("A component view mustn't return the vnode that was supplied to it.")
var element = createNode(vnode.instance, hooks, ns)
vnode.dom = vnode.instance.dom
vnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0
@ -178,7 +186,6 @@ var renderService = function($window) {
else {
var recycling = isRecyclable(old, vnodes)
if (recycling) old = old.concat(old.pool)
if (old.length === vnodes.length && vnodes[0] != null && vnodes[0].key == null) {
for (var i = 0; i < old.length; i++) {
if (old[i] === vnodes[i] || old[i] == null && vnodes[i] == null) continue
@ -569,7 +576,6 @@ var renderService = function($window) {
function render(dom, vnodes) {
var hooks = []
var active = $doc.activeElement
// First time rendering into a node clears it out
if (dom.vnodes == null) dom.textContent = ""
if (!(vnodes instanceof Array)) vnodes = [vnodes]
@ -1136,9 +1142,6 @@ m.mount = function(renderer, pubsub) {
run()
}
}(renderService, redrawService)
m.trust = function(html) {
return Vnode("<", undefined, undefined, html, undefined, undefined)
}
m.withAttr = function(attrName, callback, context) {
return function(e) {
return callback.call(context || this, attrName in e.currentTarget ? e.currentTarget[attrName] : e.currentTarget.getAttribute(attrName))

82
mithril.min.js vendored
View file

@ -1,41 +1,41 @@
new function(){function u(b,d,r,g,n,k){return{tag:b,key:d,attrs:r,children:g,text:n,dom:k,domSize:void 0,state:{},events:void 0,instance:void 0,skip:!1}}u.normalize=function(b){return b instanceof Array?u("[",void 0,void 0,u.normalizeChildren(b),void 0,void 0):null!=b&&"object"!==typeof b?u("#",void 0,void 0,b,void 0,void 0):b};u.normalizeChildren=function(b){for(var d=0;d<b.length;d++)b[d]=u.normalize(b[d]);return b};var O=/(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["'\]]|.)*?)\5)?\])/g,
G={},x=function(b){if(null==b||"string"!==typeof b&&null==b.view)throw Error("The selector must be either a string or a component.");if("string"===typeof b&&void 0===G[b]){for(var d,r,g=[],n={};d=O.exec(b);){var k=d[1],m=d[2];""===k&&""!==m?r=m:"#"===k?n.id=m:"."===k?g.push(m):"["===d[3][0]&&((k=d[6])&&(k=k.replace(/\\(["'])/g,"$1").replace(/\\\\/g,"\\")),n[d[4]]=k||!0)}0<g.length&&(n.className=g.join(" "));G[b]=function(b,d){var e=!1,g,k,p=b.className||b["class"],m;for(m in n)b[m]=n[m];void 0!==
p&&(void 0!==b["class"]&&(b["class"]=void 0,b.className=p),void 0!==n.className&&(b.className=n.className+" "+p));for(m in b)if("key"!==m){e=!0;break}d instanceof Array&&1==d.length&&null!=d[0]&&"#"===d[0].tag?k=d[0].children:g=d;return u(r||"div",b.key,e?b:void 0,g,k,void 0)}}var l;null!=arguments[1]&&("object"!==typeof arguments[1]||void 0!==arguments[1].tag||arguments[1]instanceof Array)?g=1:(l=arguments[1],g=2);if(arguments.length===g+1)d=arguments[g]instanceof Array?arguments[g]:[arguments[g]];
else for(d=[];g<arguments.length;g++)d.push(arguments[g]);return"string"===typeof b?G[b](l||{},u.normalizeChildren(d)):u(b,l&&l.key,l||{},u.normalizeChildren(d),void 0,void 0)},E=function(b){function d(c,a,f,e,b,d,q){for(;f<e;f++){var t=a[f];null!=t&&w(c,r(t,b,q),d)}}function r(c,a,f){var e=c.tag;null!=c.attrs&&x(c.attrs,c,a);if("string"===typeof e)switch(e){case "#":return c.dom=y.createTextNode(c.children);case "<":return g(c);case "[":var b=y.createDocumentFragment();null!=c.children&&(e=c.children,
d(b,e,0,e.length,a,null,f));c.dom=b.firstChild;c.domSize=b.childNodes.length;return b;default:var k=c.tag;switch(c.tag){case "svg":f="http://www.w3.org/2000/svg";break;case "math":f="http://www.w3.org/1998/Math/MathML"}var q=(e=c.attrs)&&e.is,k=f?q?y.createElementNS(f,k,{is:q}):y.createElementNS(f,k):q?y.createElement(k,{is:q}):y.createElement(k);c.dom=k;if(null!=e)for(b in q=f,e)p(c,b,null,e[b],q);null!=c.text&&(""!==c.text?k.textContent=c.text:c.children=[u("#",void 0,void 0,c.text,void 0,void 0)]);
null!=c.children&&(b=c.children,d(k,b,0,b.length,a,null,f),a=c.attrs,"select"===c.tag&&null!=a&&("value"in a&&p(c,"value",null,a.value,void 0),"selectedIndex"in a&&p(c,"selectedIndex",null,a.selectedIndex,void 0)));return k}else return c.state||(c.state={}),P(c.state,c.tag),x(c.tag,c,a),c.instance=u.normalize(c.tag.view.call(c.state,c)),null!=c.instance?(a=r(c.instance,a,f),c.dom=c.instance.dom,c.domSize=null!=c.dom?c.instance.domSize:0,c=a):(c.domSize=0,c=C),c}function g(c){var a={caption:"table",
thead:"table",tbody:"table",tfoot:"table",tr:"tbody",th:"tr",td:"tr",colgroup:"table",col:"colgroup"}[(c.children.match(/^\s*?<(\w+)/im)||[])[1]]||"div",a=y.createElement(a);a.innerHTML=c.children;c.dom=a.firstChild;c.domSize=a.childNodes.length;c=y.createDocumentFragment();for(var f;f=a.firstChild;)c.appendChild(f);return c}function n(c,a,f,e,b,p){if(a!==f&&(null!=a||null!=f))if(null==a)d(c,f,0,f.length,e,b,void 0);else if(null==f)z(c,a,0,a.length,f);else{var q;a:{if(null!=a.pool&&Math.abs(a.pool.length-
f.length)<=Math.abs(a.length-f.length)&&(q=f[0]&&f[0].children&&f[0].children.length||0,Math.abs((a.pool[0]&&a.pool[0].children&&a.pool[0].children.length||0)-q)<=Math.abs((a[0]&&a[0].children&&a[0].children.length||0)-q))){q=!0;break a}q=!1}q&&(a=a.concat(a.pool));if(a.length===f.length&&null!=f[0]&&null==f[0].key)for(var t=0;t<a.length;t++)a[t]===f[t]||null==a[t]&&null==f[t]||(null==a[t]?w(c,r(f[t],e,p),l(a,t+1,b)):null==f[t]?z(c,a,t,t+1,f):k(c,a[t],f[t],e,l(a,t+1,b),q,p),q&&a[t].tag===f[t].tag&&
w(c,m(a[t]),l(a,t+1,b)));else{for(var B=t=0,g=a.length-1,A=f.length-1,n;g>=t&&A>=B;){var h=a[t],v=f[B];if(h===v)t++,B++;else if(null!=h&&null!=v&&h.key===v.key)t++,B++,k(c,h,v,e,l(a,t,b),q,p),q&&h.tag===v.tag&&w(c,m(h),b);else if(h=a[g],h===v)g--,B++;else if(null!=h&&null!=v&&h.key===v.key)k(c,h,v,e,l(a,g+1,b),q,p),B<A&&w(c,m(h),l(a,t,b)),g--,B++;else break}for(;g>=t&&A>=B;){h=a[g];v=f[A];if(h===v)g--;else if(null!=h&&null!=v&&h.key===v.key)k(c,h,v,e,l(a,g+1,b),q,p),q&&h.tag===v.tag&&w(c,m(h),b),
null!=h.dom&&(b=h.dom),g--;else{if(!n){n=a;var h=g,y={},u;for(u=0;u<h;u++){var x=n[u];null!=x&&(x=x.key,null!=x&&(y[x]=u))}n=y}null!=v&&(h=n[v.key],null!=h?(y=a[h],k(c,y,v,e,l(a,g+1,b),q,p),w(c,m(y),b),a[h].skip=!0,null!=y.dom&&(b=y.dom)):(v=r(v,e,void 0),w(c,v,b),b=v))}A--;if(A<B)break}d(c,f,B,A+1,e,b,p);z(c,a,t,g+1,f)}}}function k(c,a,f,b,e,d,q){var t=a.tag;if(t===f.tag){f.state=a.state;f.events=a.events;var h;var z;null!=f.attrs&&"function"===typeof f.attrs.onbeforeupdate&&(h=f.attrs.onbeforeupdate.call(f.state,
f,a));"string"!==typeof f.tag&&"function"===typeof f.tag.onbeforeupdate&&(z=f.tag.onbeforeupdate.call(f.state,f,a));void 0===h&&void 0===z||h||z?h=!1:(f.dom=a.dom,f.domSize=a.domSize,f.instance=a.instance,h=!0);if(!h)if(null!=f.attrs&&I(f.attrs,f,b,d),"string"===typeof t)switch(t){case "#":a.children.toString()!==f.children.toString()&&(a.dom.nodeValue=f.children);f.dom=a.dom;break;case "<":a.children!==f.children?(m(a),w(c,g(f),e)):(f.dom=a.dom,f.domSize=a.domSize);break;case "[":n(c,a.children,
f.children,b,e,q);a=0;b=f.children;f.dom=null;if(null!=b){for(var l=0;l<b.length;l++)c=b[l],null!=c&&null!=c.dom&&(null==f.dom&&(f.dom=c.dom),a+=c.domSize||1);1!==a&&(f.domSize=a)}break;default:c=q;e=f.dom=a.dom;switch(f.tag){case "svg":c="http://www.w3.org/2000/svg";break;case "math":c="http://www.w3.org/1998/Math/MathML"}"textarea"===f.tag&&(null==f.attrs&&(f.attrs={}),null!=f.text&&(f.attrs.value=f.text));d=a.attrs;q=f.attrs;t=c;if(null!=q)for(l in q)p(f,l,d&&d[l],q[l],t);if(null!=d)for(l in d)null!=
q&&l in q||("o"!==l[0]||"n"!==l[1]||v(l)?"key"!==l&&f.dom.removeAttribute(l):L(f,l,void 0));null!=a.text&&null!=f.text&&""!==f.text?a.text.toString()!==f.text.toString()&&(a.dom.firstChild.nodeValue=f.text):(null!=a.text&&(a.children=[u("#",void 0,void 0,a.text,void 0,a.dom.firstChild)]),null!=f.text&&(f.children=[u("#",void 0,void 0,f.text,void 0,void 0)]),n(e,a.children,f.children,b,null,c))}else f.instance=u.normalize(f.tag.view.call(f.state,f)),I(f.tag,f,b,d),null!=f.instance?(null==a.instance?
w(c,r(f.instance,b,q),e):k(c,a.instance,f.instance,b,e,d,q),f.dom=f.instance.dom,f.domSize=f.instance.domSize):null!=a.instance?(A(c,a.instance,null),f.dom=void 0,f.domSize=0):(f.dom=a.dom,f.domSize=a.domSize)}else A(c,a,null),w(c,r(f,b,void 0),e)}function m(c){var a=c.domSize;if(null!=a||null==c.dom){var f=y.createDocumentFragment();if(0<a){for(c=c.dom;--a;)f.appendChild(c.nextSibling);f.insertBefore(c,f.firstChild)}return f}return c.dom}function l(c,a,f){for(;a<c.length;a++)if(null!=c[a]&&null!=
c[a].dom)return c[a].dom;return f}function w(c,a,f){f&&f.parentNode?c.insertBefore(a,f):c.appendChild(a)}function z(c,a,f,b,e){for(;f<b;f++){var d=a[f];null!=d&&(d.skip?d.skip=!1:A(c,d,e))}}function e(c){var a=!1;return function(){a||(a=!0,c())}}function A(c,a,f){function b(){if(++g===d&&(h(a),a.dom)){var q=a.domSize||1;if(1<q)for(var e=a.dom;--q;)c.removeChild(e.nextSibling);null!=a.dom.parentNode&&c.removeChild(a.dom);if(q=null!=f&&null==a.domSize)q=a.attrs,q=!(null!=q&&(q.oncreate||q.onupdate||
q.onbeforeremove||q.onremove));q&&"string"===typeof a.tag&&(f.pool?f.pool.push(a):f.pool=[a])}}var d=1,g=0;a.attrs&&a.attrs.onbeforeremove&&(d++,a.attrs.onbeforeremove.call(a.state,a,e(b)));"string"!==typeof a.tag&&a.tag.onbeforeremove&&(d++,a.tag.onbeforeremove.call(a.state,a,e(b)));b()}function h(c){c.attrs&&c.attrs.onremove&&c.attrs.onremove.call(c.state,c);"string"!==typeof c.tag&&c.tag.onremove&&c.tag.onremove.call(c.state,c);if(null!=c.instance)h(c.instance);else if(c=c.children,c instanceof
Array)for(var a=0;a<c.length;a++){var f=c[a];null!=f&&h(f)}}function p(c,a,f,b,e){var d=c.dom;if("key"!==a&&(f!==b||"value"===a||"checked"===a||"selectedIndex"===a||"selected"===a&&c.dom===y.activeElement||"object"===typeof b)&&"undefined"!==typeof b&&!v(a)){var q=a.indexOf(":");if(-1<q&&"xlink"===a.substr(0,q))d.setAttributeNS("http://www.w3.org/1999/xlink",a.slice(q+1),b);else if("o"===a[0]&&"n"===a[1]&&"function"===typeof b)L(c,a,b);else if("style"===a)if(c=f,c===b&&(d.style.cssText="",c=null),
null==b)d.style.cssText="";else if("string"===typeof b)d.style.cssText=b;else{"string"===typeof c&&(d.style.cssText="");for(var t in b)d.style[t]=b[t];if(null!=c&&"string"!==typeof c)for(t in c)t in b||(d.style[t]="")}else if(a in d&&"href"!==a&&"list"!==a&&"form"!==a&&void 0===e){if("input"!==c.tag||"value"!==a||c.dom.value!==b||c.dom!==y.activeElement)d[a]=b}else"boolean"===typeof b?b?d.setAttribute(a,""):d.removeAttribute(a):d.setAttribute("className"===a?"class":a,b)}}function v(c){return"oninit"===
c||"oncreate"===c||"onupdate"===c||"onremove"===c||"onbeforeremove"===c||"onbeforeupdate"===c}function L(c,a,b){var e=c.dom,d=function(a){var c=b.call(e,a);"function"===typeof H&&H.call(e,a);return c};if(a in e)e[a]=d;else{var h=a.slice(2);void 0===c.events&&(c.events={});null!=c.events[a]&&e.removeEventListener(h,c.events[a],!1);"function"===typeof b&&(c.events[a]=d,e.addEventListener(h,c.events[a],!1))}}function x(c,a,b){"function"===typeof c.oninit&&c.oninit.call(a.state,a);"function"===typeof c.oncreate&&
b.push(c.oncreate.bind(a.state,a))}function I(c,a,b,e){e?x(c,a,b):"function"===typeof c.onupdate&&b.push(c.onupdate.bind(a.state,a))}function P(c,a){Object.keys(a).forEach(function(b){c[b]=a[b]})}var y=b.document,C=y.createDocumentFragment(),H;return{render:function(c,a){var b=[],e=y.activeElement;null==c.vnodes&&(c.textContent="");a instanceof Array||(a=[a]);n(c,c.vnodes,u.normalizeChildren(a),b,null,void 0);c.vnodes=a;for(var d=0;d<b.length;d++)b[d]();y.activeElement!==e&&e.focus()},setEventCallback:function(c){return H=
c}}}(window),C=function(b){function d(b,g){if(g instanceof Array)for(var m=0;m<g.length;m++)d(b+"["+m+"]",g[m]);else if("[object Object]"===Object.prototype.toString.call(g))for(m in g)d(b+"["+m+"]",g[m]);else r.push(encodeURIComponent(b)+(null!=g&&""!==g?"="+encodeURIComponent(g):""))}if("[object Object]"!==Object.prototype.toString.call(b))return"";var r=[],g;for(g in b)d(g,b[g]);return r.join("&")},M=function(b){function d(){function a(){0<arguments.length&&arguments[0]!==D&&g(a,arguments[0],void 0);
return a._state.value}r(a,arguments);0<arguments.length&&arguments[0]!==D&&g(a,arguments[0],void 0);return a}function r(a,b){a.constructor=d;a._state={id:G++,value:void 0,error:void 0,state:0,derive:void 0,recover:void 0,deps:{},parents:[],errorStream:void 0,endStream:void 0};a.map=I;a.ap=C;a.of=d;a.valueOf=y;a.toJSON=F;a.toString=y;a.run=e;a["catch"]=A;Object.defineProperties(a,{error:{get:function(){if(!a._state.errorStream){var b=function(){0<arguments.length&&arguments[0]!==D&&g(a,void 0,arguments[0]);
return a._state.error};r(b,[]);v(b,[a],E,E);a._state.errorStream=b}return a._state.errorStream}},end:{get:function(){if(!a._state.endStream){var b=d();b.map(function(c){!0===c&&(x(a),x(b));return c});a._state.endStream=b}return a._state.endStream}}})}function g(a,b,c){n(a,b,c);for(var e in a._state.deps)m(a._state.deps[e],!1);a._state.changed=!1;for(var f in a._state.deps)a._state.deps[f]._state.changed=!1}function n(a,b,c){c=w(b,c);if(void 0!==c&&"function"===typeof a._state.recover){if(!l(a,k,!0))return}else k(a,
b,c);a._state.changed=!0;2!==a._state.state&&(a._state.state=1)}function k(a,b,c){a._state.value=b;a._state.error=c}function m(a,b){var e=a._state.parents;0<e.length&&e.filter(H).length===e.length&&(b||0<e.filter(c).length)&&(e=e.filter(f),0<e.length?n(a,void 0,e[0]._state.error):l(a,n,!1))}function l(a,b,c){try{var e=c?a._state.recover():a._state.derive();if(e===D)return!1;b(a,e,void 0)}catch(f){b(a,void 0,null!=f.__error?f.__error:f),null==f.__error&&z(a,f)}return!0}function w(a,b){null!=a&&a.constructor===
d&&(b=void 0!==a._state.error?a._state.error:w(a._state.value,a._state.error));return b}function z(a,c){0===Object.keys(a._state.deps).length&&setTimeout(function(){0===Object.keys(a._state.deps).length&&b(c)},0)}function e(a){var b=d(),c=this;return v(b,[c],function(){return p(b,a(c()))},void 0)}function A(a){var b=d(),c=this;return v(b,[c],function(){return c._state.value},function(){return p(b,a(c._state.error))})}function h(a,b){return v(d(),b,function(){var e=b.filter(f);if(0<e.length)throw{__error:e[0]._state.error};
return a.apply(this,b.concat([b.filter(c)]))},void 0)}function p(a,b){if(null!=b&&b.constructor===d){var c=b,e=function(){n(a,c._state.value,c._state.error);for(var b in a._state.deps)m(a._state.deps[b],!1)};c.map(e)["catch"](function(a){e();throw{__error:a};});if(0===c._state.state)return D;if(c._state.error)throw{__error:c._state.error};b=c._state.value}return b}function v(b,c,e,f){var d=b._state;d.derive=e;d.recover=f;d.parents=c.filter(a);u(b,d.parents);m(b,!0);return b}function u(a,b){for(var c=
0;c<b.length;c++)b[c]._state.deps[a._state.id]=a,u(a,b[c]._state.parents)}function x(a){for(var b=0;b<a._state.parents.length;b++)delete a._state.parents[b]._state.deps[a._state.id];for(var c in a._state.deps){var b=a._state.deps[c],e=b._state.parents.indexOf(a);-1<e&&b._state.parents.splice(e,1)}a._state.state=2;a._state.deps={}}function I(a){return h(function(b){return a(b())},[this])}function C(a){return h(function(a,b){return a()(b())},[this,a])}function y(){return this._state.value}function F(){return null!=
this._state.value&&"function"===typeof this._state.value.toJSON?this._state.value.toJSON():this._state.value}function H(a){return 1===a._state.state}function c(a){return a._state.changed}function a(a){return 2!==a._state.state}function f(a){return a._state.error}var G=0,E=function(){},D={};d.merge=function(a){return h(function(){return a.map(function(a){return a()})},a)};d.combine=h;d.reject=function(a){var b=d();b.error(a);return b};d.HALT=D;return d},J=function(b,d){function r(b,d){if(null==d)return b;
for(var h=b.match(/:[^\/]+/gi)||[],g=0;g<h.length;g++){var k=h[g].slice(1);null!=d[k]&&(b=b.replace(h[g],d[k]),delete d[k])}return b}function g(b,d){var g=C(d);if(""!==g){var p=0>b.indexOf("?")?"?":"&";b+=p+g}return b}function n(b){try{return""!==b?JSON.parse(b):null}catch(d){throw Error(b);}}function k(b){return b.responseText}function m(b,d){if("function"===typeof b)if(d instanceof Array)for(var g=0;g<d.length;g++)d[g]=new b(d[g]);else return new b(d);return d}var l=M(d),w=0,z;return{request:function(e){var d=
l();void 0!==e.initialValue&&d(e.initialValue);var h="boolean"===typeof e.useBody?e.useBody:"GET"!==e.method&&"TRACE"!==e.method;"function"!==typeof e.serialize&&(e.serialize="undefined"!==typeof FormData&&e.data instanceof FormData?function(b){return b}:JSON.stringify);"function"!==typeof e.deserialize&&(e.deserialize=n);"function"!==typeof e.extract&&(e.extract=k);e.url=r(e.url,e.data);h?e.data=e.serialize(e.data):e.url=g(e.url,e.data);var p=new b.XMLHttpRequest;p.open(e.method,e.url,"boolean"===
typeof e.async?e.async:!0,"string"===typeof e.user?e.user:void 0,"string"===typeof e.password?e.password:void 0);e.serialize===JSON.stringify&&h&&p.setRequestHeader("Content-Type","application/json; charset=utf-8");e.deserialize===n&&p.setRequestHeader("Accept","application/json, text/*");"function"===typeof e.config&&(p=e.config(p,e)||p);p.onreadystatechange=function(){if(4===p.readyState){try{var b=e.extract!==k?e.extract(p,e):e.deserialize(e.extract(p,e));if(200<=p.status&&300>p.status)d(m(e.type,
b));else{var g=Error(p.responseText),h;for(h in b)g[h]=b[h];d.error(g)}}catch(w){d.error(w)}"function"===typeof z&&z()}};h?p.send(e.data):p.send();return d},jsonp:function(e){var d=l();void 0!==e.initialValue&&d(e.initialValue);var h=e.callbackName||"_mithril_"+Math.round(1E16*Math.random())+"_"+w++,p=b.document.createElement("script");b[h]=function(g){p.parentNode.removeChild(p);d(m(e.type,g));"function"===typeof z&&z();delete b[h]};p.onerror=function(){p.parentNode.removeChild(p);d.error(Error("JSONP request failed"));
"function"===typeof z&&z();delete b[h]};null==e.data&&(e.data={});e.url=r(e.url,e.data);e.data[e.callbackKey||"callback"]=h;p.src=g(e.url,e.data);b.document.documentElement.appendChild(p);return d},setCompletionCallback:function(b){z=b}}}(window,console.error.bind(console)),F=function(){var b=[];return{subscribe:b.push.bind(b),unsubscribe:function(d){d=b.indexOf(d);-1<d&&b.splice(d,1)},publish:function(){for(var d=0;d<b.length;d++)b[d].apply(this,arguments)}}}(),K=function(b){if(""===b||null==b)return{};
"?"===b.charAt(0)&&(b=b.slice(1));b=b.split("&");for(var d={},r={},g=0;g<b.length;g++){var n=b[g].split("="),k=decodeURIComponent(n[0]),n=2===n.length?decodeURIComponent(n[1]):"",m=Number(n);""!==n&&!isNaN(m)||"NaN"===n?n=m:"true"===n?n=!0:"false"===n?n=!1:(m=new Date(n),isNaN(m.getTime())||(n=m));var m=k.split(/\]\[?|\[/),l=d;-1<k.indexOf("[")&&m.pop();for(var w=0;w<m.length;w++){var k=m[w],z=m[w+1],z=""==z||!isNaN(parseInt(z,10)),e=w===m.length-1;""===k&&(k=m.slice(0,w).join(),null==r[k]&&(r[k]=
0),k=r[k]++);null==l[k]&&(l[k]=e?n:z?[]:{});l=l[k]}}return d};J.setCompletionCallback(F.publish);var Q=function(b){function d(d){var g=b.location[d].replace(/(?:%[a-f89][a-f0-9])+/gim,decodeURIComponent);"pathname"===d&&"/"!==g[0]&&(g="/"+g);return g}function r(b,d,e){var g=b.indexOf("?"),h=b.indexOf("#"),p=-1<g?g:-1<h?h:b.length;if(-1<g){var g=K(b.slice(g+1,-1<h?h:b.length)),k;for(k in g)d[k]=g[k]}if(-1<h)for(k in d=K(b.slice(h+1)),d)e[k]=d[k];return b.slice(0,p)}function g(){switch(l.charAt(0)){case "#":return d("hash").slice(l.length);
case "?":return d("search").slice(l.length)+d("hash");default:return d("pathname").slice(l.length)+d("search")+d("hash")}}function n(d,g,e){var n={},h={};d=r(d,n,h);if(null!=g){for(var p in g)n[p]=g[p];d=d.replace(/:([^\/]+)/g,function(b,d){delete n[d];return g[d]})}(p=C(n))&&(d+="?"+p);(h=C(h))&&(d+="#"+h);k?(e&&e.replace?b.history.replaceState(null,null,l+d):b.history.pushState(null,null,l+d),b.onpopstate()):b.location.href=l+d}var k="function"===typeof b.history.pushState,m="function"===typeof setImmediate?
setImmediate:setTimeout,l="#!";return{setPrefix:function(b){l=b},getPath:g,setPath:n,defineRoutes:function(d,n,e){function u(){var b=g(),k={},l=r(b,k,k);m(function(){for(var g in d){var m=new RegExp("^"+g.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(m.test(l)){l.replace(m,function(){for(var e=g.match(/:[^\/]+/g)||[],l=[].slice.call(arguments,1,-2),m=0;m<e.length;m++)k[e[m].replace(/:|\./g,"")]=decodeURIComponent(l[m]);n(d[g],k,b,g)});return}}e(b,k)})}k?b.onpopstate=
u:"#"===l.charAt(0)&&(b.onhashchange=u);u();return u},link:function(b){b.dom.setAttribute("href",l+b.attrs.href);b.dom.onclick=function(d){d.preventDefault();d.redraw=!1;n(b.attrs.href,void 0,void 0)}}}},R=function(b){var d=0,r=null,g="function"===typeof requestAnimationFrame?requestAnimationFrame:setTimeout;return function(n){var k=Date.now();!0===n||0===d||16<=k-d?(d=k,b()):null===r&&(r=g(function(){r=null;b();d=Date.now()},16-(k-d)))}},N=function(b,d,r,g){g=R(g);null!=d&&d.setEventCallback(function(b){!1!==
b.redraw&&r.publish()});null!=r&&(b.redraw&&r.unsubscribe(b.redraw),r.subscribe(g));return b.redraw=g};x.route=function(b,d,r){var g=Q(b);b=function(b,k,m){var l=null,w="div";m=g.defineRoutes(m,function(g,e,k,h){e.path=k;e.route=h;if("function"===typeof g.onmatch)if("function"!==typeof g.view&&(g.view=function(b){return b}),h=function(h){l=k;w=h;d.render(b,g.view(u(h,null,e,void 0,void 0,void 0)))},k!==l)g.onmatch(u(g,null,e,void 0,void 0,void 0),h);else h(w);else d.render(b,u(g,null,e,void 0,void 0,
void 0))},function(){g.setPath(k,null,{replace:!0})});N(b,d,r,m)};b.link=g.link;b.prefix=g.setPrefix;b.set=g.setPath;b.get=g.getPath;return b}(window,E,F);x.mount=function(b,d){return function(r,g){null===g?(b.render(r,[]),d.unsubscribe(r.redraw),delete r.redraw):N(r,b,d,function(){b.render(r,u(g,void 0,void 0,void 0,void 0,void 0))})()}}(E,F);x.trust=function(b){return u("<",void 0,void 0,b,void 0,void 0)};x.withAttr=function(b,d,r){return function(g){return d.call(r||this,b in g.currentTarget?g.currentTarget[b]:
g.currentTarget.getAttribute(b))}};x.prop=M(console.log.bind(console));x.render=E.render;x.redraw=F.publish;x.request=J.request;x.jsonp=J.jsonp;x.parseQueryString=K;x.buildQueryString=C;x.version="1.0.0";"undefined"!==typeof module?module.exports=x:window.m=x};
new function(){function t(d,e,q,g,n,h){return{tag:d,key:e,attrs:q,children:g,text:n,dom:h,domSize:void 0,state:{},events:void 0,instance:void 0,skip:!1}}function v(d){if(null==d||"string"!==typeof d&&null==d.view)throw Error("The selector must be either a string or a component.");if("string"===typeof d&&void 0===G[d]){for(var e,q,g=[],n={};e=O.exec(d);){var h=e[1],m=e[2];""===h&&""!==m?q=m:"#"===h?n.id=m:"."===h?g.push(m):"["===e[3][0]&&((h=e[6])&&(h=h.replace(/\\(["'])/g,"$1").replace(/\\\\/g,"\\")),
n[e[4]]=h||!0)}0<g.length&&(n.className=g.join(" "));G[d]=function(d,e){var c=!1,g,h,u=d.className||d["class"],m;for(m in n)d[m]=n[m];void 0!==u&&(void 0!==d["class"]&&(d["class"]=void 0,d.className=u),void 0!==n.className&&(d.className=n.className+" "+u));for(m in d)if("key"!==m){c=!0;break}e instanceof Array&&1==e.length&&null!=e[0]&&"#"===e[0].tag?h=e[0].children:g=e;return t(q||"div",d.key,c?d:void 0,g,h,void 0)}}var l;null!=arguments[1]&&("object"!==typeof arguments[1]||void 0!==arguments[1].tag||
arguments[1]instanceof Array)?g=1:(l=arguments[1],g=2);if(arguments.length===g+1)e=arguments[g]instanceof Array?arguments[g]:[arguments[g]];else for(e=[];g<arguments.length;g++)e.push(arguments[g]);return"string"===typeof d?G[d](l||{},t.normalizeChildren(e)):t(d,l&&l.key,l||{},t.normalizeChildren(e),void 0,void 0)}t.normalize=function(d){return d instanceof Array?t("[",void 0,void 0,t.normalizeChildren(d),void 0,void 0):null!=d&&"object"!==typeof d?t("#",void 0,void 0,d,void 0,void 0):d};t.normalizeChildren=
function(d){for(var e=0;e<d.length;e++)d[e]=t.normalize(d[e]);return d};var O=/(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["'\]]|.)*?)\5)?\])/g,G={};v.trust=function(d){return t("<",void 0,void 0,d,void 0,void 0)};v.fragment=function(d,e){return t("[",d.key,d,t.normalizeChildren(e),void 0,void 0)};var E=function(d){function e(b,a,f,d,c,e,p){for(;f<d;f++){var r=a[f];null!=r&&x(b,q(r,c,p),e)}}function q(b,a,f){var d=b.tag;null!=b.attrs&&v(b.attrs,b,a);if("string"===typeof d)switch(d){case "#":return b.dom=
y.createTextNode(b.children);case "<":return g(b);case "[":var c=y.createDocumentFragment();null!=b.children&&(d=b.children,e(c,d,0,d.length,a,null,f));b.dom=c.firstChild;b.domSize=c.childNodes.length;return c;default:var h=b.tag;switch(b.tag){case "svg":f="http://www.w3.org/2000/svg";break;case "math":f="http://www.w3.org/1998/Math/MathML"}var p=(d=b.attrs)&&d.is,h=f?p?y.createElementNS(f,h,{is:p}):y.createElementNS(f,h):p?y.createElement(h,{is:p}):y.createElement(h);b.dom=h;if(null!=d)for(c in p=
f,d)u(b,c,null,d[c],p);null!=b.text&&(""!==b.text?h.textContent=b.text:b.children=[t("#",void 0,void 0,b.text,void 0,void 0)]);null!=b.children&&(c=b.children,e(h,c,0,c.length,a,null,f),a=b.attrs,"select"===b.tag&&null!=a&&("value"in a&&u(b,"value",null,a.value,void 0),"selectedIndex"in a&&u(b,"selectedIndex",null,a.selectedIndex,void 0)));return h}else{b.state||(b.state={});P(b.state,b.tag);v(b.tag,b,a);b.instance=t.normalize(b.tag.view.call(b.state,b));if(null!=b.instance){if(b.instance===b)throw Error("A component view mustn't return the vnode that was supplied to it.");
a=q(b.instance,a,f);b.dom=b.instance.dom;b.domSize=null!=b.dom?b.instance.domSize:0;b=a}else b.domSize=0,b=C;return b}}function g(b){var a={caption:"table",thead:"table",tbody:"table",tfoot:"table",tr:"tbody",th:"tr",td:"tr",colgroup:"table",col:"colgroup"}[(b.children.match(/^\s*?<(\w+)/im)||[])[1]]||"div",a=y.createElement(a);a.innerHTML=b.children;b.dom=a.firstChild;b.domSize=a.childNodes.length;b=y.createDocumentFragment();for(var f;f=a.firstChild;)b.appendChild(f);return b}function n(b,a,f,d,
c,u){if(a!==f&&(null!=a||null!=f))if(null==a)e(b,f,0,f.length,d,c,void 0);else if(null==f)z(b,a,0,a.length,f);else{var p;a:{if(null!=a.pool&&Math.abs(a.pool.length-f.length)<=Math.abs(a.length-f.length)&&(p=f[0]&&f[0].children&&f[0].children.length||0,Math.abs((a.pool[0]&&a.pool[0].children&&a.pool[0].children.length||0)-p)<=Math.abs((a[0]&&a[0].children&&a[0].children.length||0)-p))){p=!0;break a}p=!1}p&&(a=a.concat(a.pool));if(a.length===f.length&&null!=f[0]&&null==f[0].key)for(var r=0;r<a.length;r++)a[r]===
f[r]||null==a[r]&&null==f[r]||(null==a[r]?x(b,q(f[r],d,u),l(a,r+1,c)):null==f[r]?z(b,a,r,r+1,f):h(b,a[r],f[r],d,l(a,r+1,c),p,u),p&&a[r].tag===f[r].tag&&x(b,m(a[r]),l(a,r+1,c)));else{for(var B=r=0,g=a.length-1,A=f.length-1,n;g>=r&&A>=B;){var k=a[r],w=f[B];if(k===w)r++,B++;else if(null!=k&&null!=w&&k.key===w.key)r++,B++,h(b,k,w,d,l(a,r,c),p,u),p&&k.tag===w.tag&&x(b,m(k),c);else if(k=a[g],k===w)g--,B++;else if(null!=k&&null!=w&&k.key===w.key)h(b,k,w,d,l(a,g+1,c),p,u),B<A&&x(b,m(k),l(a,r,c)),g--,B++;
else break}for(;g>=r&&A>=B;){k=a[g];w=f[A];if(k===w)g--;else if(null!=k&&null!=w&&k.key===w.key)h(b,k,w,d,l(a,g+1,c),p,u),p&&k.tag===w.tag&&x(b,m(k),c),null!=k.dom&&(c=k.dom),g--;else{if(!n){n=a;var k=g,t={},y;for(y=0;y<k;y++){var v=n[y];null!=v&&(v=v.key,null!=v&&(t[v]=y))}n=t}null!=w&&(k=n[w.key],null!=k?(t=a[k],h(b,t,w,d,l(a,g+1,c),p,u),x(b,m(t),c),a[k].skip=!0,null!=t.dom&&(c=t.dom)):(w=q(w,d,void 0),x(b,w,c),c=w))}A--;if(A<B)break}e(b,f,B,A+1,d,c,u);z(b,a,r,g+1,f)}}}function h(b,a,f,c,d,e,p){var r=
a.tag;if(r===f.tag){f.state=a.state;f.events=a.events;var k;var z;null!=f.attrs&&"function"===typeof f.attrs.onbeforeupdate&&(k=f.attrs.onbeforeupdate.call(f.state,f,a));"string"!==typeof f.tag&&"function"===typeof f.tag.onbeforeupdate&&(z=f.tag.onbeforeupdate.call(f.state,f,a));void 0===k&&void 0===z||k||z?k=!1:(f.dom=a.dom,f.domSize=a.domSize,f.instance=a.instance,k=!0);if(!k)if(null!=f.attrs&&I(f.attrs,f,c,e),"string"===typeof r)switch(r){case "#":a.children.toString()!==f.children.toString()&&
(a.dom.nodeValue=f.children);f.dom=a.dom;break;case "<":a.children!==f.children?(m(a),x(b,g(f),d)):(f.dom=a.dom,f.domSize=a.domSize);break;case "[":n(b,a.children,f.children,c,d,p);a=0;c=f.children;f.dom=null;if(null!=c){for(var l=0;l<c.length;l++)b=c[l],null!=b&&null!=b.dom&&(null==f.dom&&(f.dom=b.dom),a+=b.domSize||1);1!==a&&(f.domSize=a)}break;default:b=p;d=f.dom=a.dom;switch(f.tag){case "svg":b="http://www.w3.org/2000/svg";break;case "math":b="http://www.w3.org/1998/Math/MathML"}"textarea"===
f.tag&&(null==f.attrs&&(f.attrs={}),null!=f.text&&(f.attrs.value=f.text));e=a.attrs;p=f.attrs;r=b;if(null!=p)for(l in p)u(f,l,e&&e[l],p[l],r);if(null!=e)for(l in e)null!=p&&l in p||("o"!==l[0]||"n"!==l[1]||w(l)?"key"!==l&&f.dom.removeAttribute(l):L(f,l,void 0));null!=a.text&&null!=f.text&&""!==f.text?a.text.toString()!==f.text.toString()&&(a.dom.firstChild.nodeValue=f.text):(null!=a.text&&(a.children=[t("#",void 0,void 0,a.text,void 0,a.dom.firstChild)]),null!=f.text&&(f.children=[t("#",void 0,void 0,
f.text,void 0,void 0)]),n(d,a.children,f.children,c,null,b))}else f.instance=t.normalize(f.tag.view.call(f.state,f)),I(f.tag,f,c,e),null!=f.instance?(null==a.instance?x(b,q(f.instance,c,p),d):h(b,a.instance,f.instance,c,d,e,p),f.dom=f.instance.dom,f.domSize=f.instance.domSize):null!=a.instance?(A(b,a.instance,null),f.dom=void 0,f.domSize=0):(f.dom=a.dom,f.domSize=a.domSize)}else A(b,a,null),x(b,q(f,c,void 0),d)}function m(b){var a=b.domSize;if(null!=a||null==b.dom){var f=y.createDocumentFragment();
if(0<a){for(b=b.dom;--a;)f.appendChild(b.nextSibling);f.insertBefore(b,f.firstChild)}return f}return b.dom}function l(b,a,f){for(;a<b.length;a++)if(null!=b[a]&&null!=b[a].dom)return b[a].dom;return f}function x(b,a,f){f&&f.parentNode?b.insertBefore(a,f):b.appendChild(a)}function z(b,a,f,c,d){for(;f<c;f++){var e=a[f];null!=e&&(e.skip?e.skip=!1:A(b,e,d))}}function c(b){var a=!1;return function(){a||(a=!0,b())}}function A(b,a,f){function d(){if(++g===e&&(k(a),a.dom)){var p=a.domSize||1;if(1<p)for(var c=
a.dom;--p;)b.removeChild(c.nextSibling);null!=a.dom.parentNode&&b.removeChild(a.dom);if(p=null!=f&&null==a.domSize)p=a.attrs,p=!(null!=p&&(p.oncreate||p.onupdate||p.onbeforeremove||p.onremove));p&&"string"===typeof a.tag&&(f.pool?f.pool.push(a):f.pool=[a])}}var e=1,g=0;a.attrs&&a.attrs.onbeforeremove&&(e++,a.attrs.onbeforeremove.call(a.state,a,c(d)));"string"!==typeof a.tag&&a.tag.onbeforeremove&&(e++,a.tag.onbeforeremove.call(a.state,a,c(d)));d()}function k(b){b.attrs&&b.attrs.onremove&&b.attrs.onremove.call(b.state,
b);"string"!==typeof b.tag&&b.tag.onremove&&b.tag.onremove.call(b.state,b);if(null!=b.instance)k(b.instance);else if(b=b.children,b instanceof Array)for(var a=0;a<b.length;a++){var f=b[a];null!=f&&k(f)}}function u(b,a,f,c,d){var e=b.dom;if("key"!==a&&(f!==c||"value"===a||"checked"===a||"selectedIndex"===a||"selected"===a&&b.dom===y.activeElement||"object"===typeof c)&&"undefined"!==typeof c&&!w(a)){var p=a.indexOf(":");if(-1<p&&"xlink"===a.substr(0,p))e.setAttributeNS("http://www.w3.org/1999/xlink",
a.slice(p+1),c);else if("o"===a[0]&&"n"===a[1]&&"function"===typeof c)L(b,a,c);else if("style"===a)if(b=f,b===c&&(e.style.cssText="",b=null),null==c)e.style.cssText="";else if("string"===typeof c)e.style.cssText=c;else{"string"===typeof b&&(e.style.cssText="");for(var r in c)e.style[r]=c[r];if(null!=b&&"string"!==typeof b)for(r in b)r in c||(e.style[r]="")}else if(a in e&&"href"!==a&&"list"!==a&&"form"!==a&&void 0===d){if("input"!==b.tag||"value"!==a||b.dom.value!==c||b.dom!==y.activeElement)e[a]=
c}else"boolean"===typeof c?c?e.setAttribute(a,""):e.removeAttribute(a):e.setAttribute("className"===a?"class":a,c)}}function w(b){return"oninit"===b||"oncreate"===b||"onupdate"===b||"onremove"===b||"onbeforeremove"===b||"onbeforeupdate"===b}function L(b,a,c){var d=b.dom,e=function(a){var b=c.call(d,a);"function"===typeof H&&H.call(d,a);return b};if(a in d)d[a]=e;else{var k=a.slice(2);void 0===b.events&&(b.events={});null!=b.events[a]&&d.removeEventListener(k,b.events[a],!1);"function"===typeof c&&
(b.events[a]=e,d.addEventListener(k,b.events[a],!1))}}function v(b,a,c){"function"===typeof b.oninit&&b.oninit.call(a.state,a);"function"===typeof b.oncreate&&c.push(b.oncreate.bind(a.state,a))}function I(b,a,c,d){d?v(b,a,c):"function"===typeof b.onupdate&&c.push(b.onupdate.bind(a.state,a))}function P(b,a){Object.keys(a).forEach(function(c){b[c]=a[c]})}var y=d.document,C=y.createDocumentFragment(),H;return{render:function(b,a){var c=[],d=y.activeElement;null==b.vnodes&&(b.textContent="");a instanceof
Array||(a=[a]);n(b,b.vnodes,t.normalizeChildren(a),c,null,void 0);b.vnodes=a;for(var e=0;e<c.length;e++)c[e]();y.activeElement!==d&&d.focus()},setEventCallback:function(b){return H=b}}}(window),C=function(d){function e(d,g){if(g instanceof Array)for(var m=0;m<g.length;m++)e(d+"["+m+"]",g[m]);else if("[object Object]"===Object.prototype.toString.call(g))for(m in g)e(d+"["+m+"]",g[m]);else q.push(encodeURIComponent(d)+(null!=g&&""!==g?"="+encodeURIComponent(g):""))}if("[object Object]"!==Object.prototype.toString.call(d))return"";
var q=[],g;for(g in d)e(g,d[g]);return q.join("&")},M=function(d){function e(){function a(){0<arguments.length&&arguments[0]!==D&&g(a,arguments[0],void 0);return a._state.value}q(a,arguments);0<arguments.length&&arguments[0]!==D&&g(a,arguments[0],void 0);return a}function q(a,b){a.constructor=e;a._state={id:G++,value:void 0,error:void 0,state:0,derive:void 0,recover:void 0,deps:{},parents:[],errorStream:void 0,endStream:void 0};a.map=I;a.ap=C;a.of=e;a.valueOf=y;a.toJSON=F;a.toString=y;a.run=c;a["catch"]=
A;Object.defineProperties(a,{error:{get:function(){if(!a._state.errorStream){var b=function(){0<arguments.length&&arguments[0]!==D&&g(a,void 0,arguments[0]);return a._state.error};q(b,[]);w(b,[a],E,E);a._state.errorStream=b}return a._state.errorStream}},end:{get:function(){if(!a._state.endStream){var b=e();b.map(function(c){!0===c&&(v(a),v(b));return c});a._state.endStream=b}return a._state.endStream}}})}function g(a,b,c){n(a,b,c);for(var d in a._state.deps)m(a._state.deps[d],!1);a._state.changed=
!1;for(var f in a._state.deps)a._state.deps[f]._state.changed=!1}function n(a,b,c){c=x(b,c);if(void 0!==c&&"function"===typeof a._state.recover){if(!l(a,h,!0))return}else h(a,b,c);a._state.changed=!0;2!==a._state.state&&(a._state.state=1)}function h(a,b,c){a._state.value=b;a._state.error=c}function m(a,c){var d=a._state.parents;0<d.length&&d.filter(H).length===d.length&&(c||0<d.filter(b).length)&&(d=d.filter(f),0<d.length?n(a,void 0,d[0]._state.error):l(a,n,!1))}function l(a,b,c){try{var d=c?a._state.recover():
a._state.derive();if(d===D)return!1;b(a,d,void 0)}catch(f){b(a,void 0,null!=f.__error?f.__error:f),null==f.__error&&z(a,f)}return!0}function x(a,b){null!=a&&a.constructor===e&&(b=void 0!==a._state.error?a._state.error:x(a._state.value,a._state.error));return b}function z(a,b){0===Object.keys(a._state.deps).length&&setTimeout(function(){0===Object.keys(a._state.deps).length&&d(b)},0)}function c(a){var b=e(),c=this;return w(b,[c],function(){return u(b,a(c()))},void 0)}function A(a){var b=e(),c=this;
return w(b,[c],function(){return c._state.value},function(){return u(b,a(c._state.error))})}function k(a,c){return w(e(),c,function(){var d=c.filter(f);if(0<d.length)throw{__error:d[0]._state.error};return a.apply(this,c.concat([c.filter(b)]))},void 0)}function u(a,b){if(null!=b&&b.constructor===e){var c=b,d=function(){n(a,c._state.value,c._state.error);for(var b in a._state.deps)m(a._state.deps[b],!1)};c.map(d)["catch"](function(a){d();throw{__error:a};});if(0===c._state.state)return D;if(c._state.error)throw{__error:c._state.error};
b=c._state.value}return b}function w(b,c,d,f){var e=b._state;e.derive=d;e.recover=f;e.parents=c.filter(a);t(b,e.parents);m(b,!0);return b}function t(a,b){for(var c=0;c<b.length;c++)b[c]._state.deps[a._state.id]=a,t(a,b[c]._state.parents)}function v(a){for(var b=0;b<a._state.parents.length;b++)delete a._state.parents[b]._state.deps[a._state.id];for(var c in a._state.deps){var b=a._state.deps[c],d=b._state.parents.indexOf(a);-1<d&&b._state.parents.splice(d,1)}a._state.state=2;a._state.deps={}}function I(a){return k(function(b){return a(b())},
[this])}function C(a){return k(function(a,b){return a()(b())},[this,a])}function y(){return this._state.value}function F(){return null!=this._state.value&&"function"===typeof this._state.value.toJSON?this._state.value.toJSON():this._state.value}function H(a){return 1===a._state.state}function b(a){return a._state.changed}function a(a){return 2!==a._state.state}function f(a){return a._state.error}var G=0,E=function(){},D={};e.merge=function(a){return k(function(){return a.map(function(a){return a()})},
a)};e.combine=k;e.reject=function(a){var b=e();b.error(a);return b};e.HALT=D;return e},J=function(d,e){function q(c,d){if(null==d)return c;for(var e=c.match(/:[^\/]+/gi)||[],g=0;g<e.length;g++){var h=e[g].slice(1);null!=d[h]&&(c=c.replace(e[g],d[h]),delete d[h])}return c}function g(c,d){var e=C(d);if(""!==e){var g=0>c.indexOf("?")?"?":"&";c+=g+e}return c}function n(c){try{return""!==c?JSON.parse(c):null}catch(d){throw Error(c);}}function h(c){return c.responseText}function m(c,d){if("function"===
typeof c)if(d instanceof Array)for(var e=0;e<d.length;e++)d[e]=new c(d[e]);else return new c(d);return d}var l=M(e),x=0,z;return{request:function(c){var e=l();void 0!==c.initialValue&&e(c.initialValue);var k="boolean"===typeof c.useBody?c.useBody:"GET"!==c.method&&"TRACE"!==c.method;"function"!==typeof c.serialize&&(c.serialize="undefined"!==typeof FormData&&c.data instanceof FormData?function(c){return c}:JSON.stringify);"function"!==typeof c.deserialize&&(c.deserialize=n);"function"!==typeof c.extract&&
(c.extract=h);c.url=q(c.url,c.data);k?c.data=c.serialize(c.data):c.url=g(c.url,c.data);var u=new d.XMLHttpRequest;u.open(c.method,c.url,"boolean"===typeof c.async?c.async:!0,"string"===typeof c.user?c.user:void 0,"string"===typeof c.password?c.password:void 0);c.serialize===JSON.stringify&&k&&u.setRequestHeader("Content-Type","application/json; charset=utf-8");c.deserialize===n&&u.setRequestHeader("Accept","application/json, text/*");"function"===typeof c.config&&(u=c.config(u,c)||u);u.onreadystatechange=
function(){if(4===u.readyState){try{var d=c.extract!==h?c.extract(u,c):c.deserialize(c.extract(u,c));if(200<=u.status&&300>u.status)e(m(c.type,d));else{var g=Error(u.responseText),k;for(k in d)g[k]=d[k];e.error(g)}}catch(x){e.error(x)}"function"===typeof z&&z()}};k?u.send(c.data):u.send();return e},jsonp:function(c){var e=l();void 0!==c.initialValue&&e(c.initialValue);var k=c.callbackName||"_mithril_"+Math.round(1E16*Math.random())+"_"+x++,h=d.document.createElement("script");d[k]=function(g){h.parentNode.removeChild(h);
e(m(c.type,g));"function"===typeof z&&z();delete d[k]};h.onerror=function(){h.parentNode.removeChild(h);e.error(Error("JSONP request failed"));"function"===typeof z&&z();delete d[k]};null==c.data&&(c.data={});c.url=q(c.url,c.data);c.data[c.callbackKey||"callback"]=k;h.src=g(c.url,c.data);d.document.documentElement.appendChild(h);return e},setCompletionCallback:function(c){z=c}}}(window,console.error.bind(console)),F=function(){var d=[];return{subscribe:d.push.bind(d),unsubscribe:function(e){e=d.indexOf(e);
-1<e&&d.splice(e,1)},publish:function(){for(var e=0;e<d.length;e++)d[e].apply(this,arguments)}}}(),K=function(d){if(""===d||null==d)return{};"?"===d.charAt(0)&&(d=d.slice(1));d=d.split("&");for(var e={},q={},g=0;g<d.length;g++){var n=d[g].split("="),h=decodeURIComponent(n[0]),n=2===n.length?decodeURIComponent(n[1]):"",m=Number(n);""!==n&&!isNaN(m)||"NaN"===n?n=m:"true"===n?n=!0:"false"===n?n=!1:(m=new Date(n),isNaN(m.getTime())||(n=m));var m=h.split(/\]\[?|\[/),l=e;-1<h.indexOf("[")&&m.pop();for(var x=
0;x<m.length;x++){var h=m[x],z=m[x+1],z=""==z||!isNaN(parseInt(z,10)),c=x===m.length-1;""===h&&(h=m.slice(0,x).join(),null==q[h]&&(q[h]=0),h=q[h]++);null==l[h]&&(l[h]=c?n:z?[]:{});l=l[h]}}return e};J.setCompletionCallback(F.publish);var Q=function(d){function e(e){var g=d.location[e].replace(/(?:%[a-f89][a-f0-9])+/gim,decodeURIComponent);"pathname"===e&&"/"!==g[0]&&(g="/"+g);return g}function q(d,e,c){var g=d.indexOf("?"),k=d.indexOf("#"),h=-1<g?g:-1<k?k:d.length;if(-1<g){var g=K(d.slice(g+1,-1<k?
k:d.length)),l;for(l in g)e[l]=g[l]}if(-1<k)for(l in e=K(d.slice(k+1)),e)c[l]=e[l];return d.slice(0,h)}function g(){switch(l.charAt(0)){case "#":return e("hash").slice(l.length);case "?":return e("search").slice(l.length)+e("hash");default:return e("pathname").slice(l.length)+e("search")+e("hash")}}function n(e,g,c){var n={},k={};e=q(e,n,k);if(null!=g){for(var m in g)n[m]=g[m];e=e.replace(/:([^\/]+)/g,function(c,d){delete n[d];return g[d]})}(m=C(n))&&(e+="?"+m);(k=C(k))&&(e+="#"+k);h?(c&&c.replace?
d.history.replaceState(null,null,l+e):d.history.pushState(null,null,l+e),d.onpopstate()):d.location.href=l+e}var h="function"===typeof d.history.pushState,m="function"===typeof setImmediate?setImmediate:setTimeout,l="#!";return{setPrefix:function(d){l=d},getPath:g,setPath:n,defineRoutes:function(e,n,c){function t(){var d=g(),h={},l=q(d,h,h);m(function(){for(var g in e){var m=new RegExp("^"+g.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(m.test(l)){l.replace(m,function(){for(var c=
g.match(/:[^\/]+/g)||[],l=[].slice.call(arguments,1,-2),m=0;m<c.length;m++)h[c[m].replace(/:|\./g,"")]=decodeURIComponent(l[m]);n(e[g],h,d,g)});return}}c(d,h)})}h?d.onpopstate=t:"#"===l.charAt(0)&&(d.onhashchange=t);t();return t},link:function(d){d.dom.setAttribute("href",l+d.attrs.href);d.dom.onclick=function(e){e.preventDefault();e.redraw=!1;n(d.attrs.href,void 0,void 0)}}}},R=function(d){var e=0,q=null,g="function"===typeof requestAnimationFrame?requestAnimationFrame:setTimeout;return function(n){var h=
Date.now();!0===n||0===e||16<=h-e?(e=h,d()):null===q&&(q=g(function(){q=null;d();e=Date.now()},16-(h-e)))}},N=function(d,e,q,g){g=R(g);null!=e&&e.setEventCallback(function(d){!1!==d.redraw&&q.publish()});null!=q&&(d.redraw&&q.unsubscribe(d.redraw),q.subscribe(g));return d.redraw=g};v.route=function(d,e,q){var g=Q(d);d=function(d,h,m){var l=null,v="div";m=g.defineRoutes(m,function(g,c,h,k){c.path=h;c.route=k;if("function"===typeof g.onmatch)if("function"!==typeof g.view&&(g.view=function(c){return c}),
k=function(k){l=h;v=k;e.render(d,g.view(t(k,null,c,void 0,void 0,void 0)))},h!==l)g.onmatch(t(g,null,c,void 0,void 0,void 0),k);else k(v);else e.render(d,t(g,null,c,void 0,void 0,void 0))},function(){g.setPath(h,null,{replace:!0})});N(d,e,q,m)};d.link=g.link;d.prefix=g.setPrefix;d.set=g.setPath;d.get=g.getPath;return d}(window,E,F);v.mount=function(d,e){return function(q,g){null===g?(d.render(q,[]),e.unsubscribe(q.redraw),delete q.redraw):N(q,d,e,function(){d.render(q,t(g,void 0,void 0,void 0,void 0,
void 0))})()}}(E,F);v.withAttr=function(d,e,q){return function(g){return e.call(q||this,d in g.currentTarget?g.currentTarget[d]:g.currentTarget.getAttribute(d))}};v.prop=M(console.log.bind(console));v.render=E.render;v.redraw=F.publish;v.request=J.request;v.jsonp=J.jsonp;v.parseQueryString=K;v.buildQueryString=C;v.version="1.0.0";"undefined"!==typeof module?module.exports=v:window.m=v};

View file

@ -8,5 +8,7 @@
},
"keywords": [ "testing" ],
"author": "Leo Horie <lhorie@hotmail.com>",
"license": "MIT"
"license": "MIT",
"bin": "./bin/ospec",
"repository": "lhorie/mithril.js#rewrite"
}

View file

@ -5,6 +5,7 @@
"author": "Leo Horie",
"license": "MIT",
"main": "index.js",
"repository": "lhorie/mithril.js",
"scripts": {
"dev": "node bundler/cli browser.js -o mithril.js -w",
"build": "npm run build-browser & npm run build-min",
@ -21,8 +22,5 @@
},
"publishConfig": {
"tag": "beta"
},
"bin": {
"ospec": "./ospec/bin/ospec"
}
}

7
render/fragment.js Normal file
View file

@ -0,0 +1,7 @@
"use strict"
var Vnode = require("../render/vnode")
module.exports = function(attrs, children) {
return Vnode("[", attrs.key, attrs, Vnode.normalizeChildren(children), undefined, undefined)
}

View file

@ -98,6 +98,8 @@ module.exports = function($window) {
initLifecycle(vnode.tag, vnode, hooks)
vnode.instance = Vnode.normalize(vnode.tag.view.call(vnode.state, vnode))
if (vnode.instance != null) {
if(vnode.instance === vnode)
throw Error("A component view mustn't return the vnode that was supplied to it.")
var element = createNode(vnode.instance, hooks, ns)
vnode.dom = vnode.instance.dom
vnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0

View file

@ -254,6 +254,22 @@ o.spec("component", function() {
o(root.childNodes.length).equals(0)
})
o("throws a custom error if it returns itself", function() {
// A view that returns its vnode would otherwise trigger an infinite loop
var component = {
view: function(vnode) {
return vnode
}
}
try {
render(root, [{tag: component}])
}
catch(error){
o(error instanceof Error).equals(true)
// Call stack excession is a RangeError
o(error instanceof RangeError).equals(false)
}
})
o("can update when returning fragments", function() {
var component = {
view: function(vnode) {

View file

@ -0,0 +1,35 @@
"use strict"
var o = require("../../ospec/ospec")
var fragment = require("../../render/fragment")
o.spec("fragment", function() {
o("works", function() {
var attrs = {foo: 5}
var child = {tag: "p"}
var frag = fragment(attrs, [child])
o(frag.tag).equals("[")
o(frag.children instanceof Array).equals(true)
o(frag.children.length).equals(1)
o(frag.children[0]).equals(child)
o(frag.attrs).equals(attrs)
o(frag.key).equals(undefined)
})
o("supports keys", function() {
var attrs = {key: 7}
var frag = fragment(attrs, [])
o(frag.tag).equals("[")
o(frag.children instanceof Array).equals(true)
o(frag.children.length).equals(0)
o(frag.attrs).equals(attrs)
o(frag.attrs.key).equals(7)
o(frag.key).equals(7)
})
})