Skip to content

Instantly share code, notes, and snippets.

@nijikokun
Created August 5, 2016 01:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nijikokun/5a9bcc06bc1c8b5debb5860775e3844a to your computer and use it in GitHub Desktop.
Save nijikokun/5a9bcc06bc1c8b5debb5860775e3844a to your computer and use it in GitHub Desktop.
requirebin sketch
var store = require('store')
var page = require('page')
var m = require('mithril')
var containers = []
var internalState = []
var xstore = {
set: function(key, val, exp) {
store.set(key, { val:val, exp:exp, time:new Date().getTime() })
},
get: function(key, def) {
var info = store.get(key)
if (!info) { return def }
if (new Date().getTime() - info.time > info.exp) { return def }
return info.val
}
}
function View (sidebar, content) {
return m('.page', [
Sidebar(sidebar),
Content(content)
])
}
function Sidebar (options) {
return m('.sidebar', [
m("a[href='/add']", {config: m.route}, 'Demo'),
m('ul.feeds')
])
}
function Content (content) {
return m('.content', content)
}
m.route.mode = "hash"
m.route(document.body, "/", {
"/": {
ctrl: function () {},
view: function () {
return View({
current: 'home'
}, [
m('p', 'Here lies the listing view')
])
}
},
"/add": {
ctrl: function () {},
view: function () {
return View({
current: 'adding'
}, [
m('p', 'Adding subscription for more content')
])
}
},
"/dashboard/:user": {
ctrl: function () {
},
view: function () {
}
}
})
setTimeout(function(){require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({store:[function(require,module,exports){(function(win){var store={},doc=win.document,localStorageName="localStorage",scriptTag="script",storage;store.disabled=false;store.version="1.3.17";store.set=function(key,value){};store.get=function(key,defaultVal){};store.has=function(key){return store.get(key)!==undefined};store.remove=function(key){};store.clear=function(){};store.transact=function(key,defaultVal,transactionFn){if(transactionFn==null){transactionFn=defaultVal;defaultVal=null}if(defaultVal==null){defaultVal={}}var val=store.get(key,defaultVal);transactionFn(val);store.set(key,val)};store.getAll=function(){};store.forEach=function(){};store.serialize=function(value){return JSON.stringify(value)};store.deserialize=function(value){if(typeof value!="string"){return undefined}try{return JSON.parse(value)}catch(e){return value||undefined}};function isLocalStorageNameSupported(){try{return localStorageName in win&&win[localStorageName]}catch(err){return false}}if(isLocalStorageNameSupported()){storage=win[localStorageName];store.set=function(key,val){if(val===undefined){return store.remove(key)}storage.setItem(key,store.serialize(val));return val};store.get=function(key,defaultVal){var val=store.deserialize(storage.getItem(key));return val===undefined?defaultVal:val};store.remove=function(key){storage.removeItem(key)};store.clear=function(){storage.clear()};store.getAll=function(){var ret={};store.forEach(function(key,val){ret[key]=val});return ret};store.forEach=function(callback){for(var i=0;i<storage.length;i++){var key=storage.key(i);callback(key,store.get(key))}}}else if(doc.documentElement.addBehavior){var storageOwner,storageContainer;try{storageContainer=new ActiveXObject("htmlfile");storageContainer.open();storageContainer.write("<"+scriptTag+">document.w=window</"+scriptTag+'><iframe src="/favicon.ico"></iframe>');storageContainer.close();storageOwner=storageContainer.w.frames[0].document;storage=storageOwner.createElement("div")}catch(e){storage=doc.createElement("div");storageOwner=doc.body}var withIEStorage=function(storeFunction){return function(){var args=Array.prototype.slice.call(arguments,0);args.unshift(storage);storageOwner.appendChild(storage);storage.addBehavior("#default#userData");storage.load(localStorageName);var result=storeFunction.apply(store,args);storageOwner.removeChild(storage);return result}};var forbiddenCharsRegex=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g");function ieKeyFix(key){return key.replace(/^d/,"___$&").replace(forbiddenCharsRegex,"___")}store.set=withIEStorage(function(storage,key,val){key=ieKeyFix(key);if(val===undefined){return store.remove(key)}storage.setAttribute(key,store.serialize(val));storage.save(localStorageName);return val});store.get=withIEStorage(function(storage,key,defaultVal){key=ieKeyFix(key);var val=store.deserialize(storage.getAttribute(key));return val===undefined?defaultVal:val});store.remove=withIEStorage(function(storage,key){key=ieKeyFix(key);storage.removeAttribute(key);storage.save(localStorageName)});store.clear=withIEStorage(function(storage){var attributes=storage.XMLDocument.documentElement.attributes;storage.load(localStorageName);for(var i=0,attr;attr=attributes[i];i++){storage.removeAttribute(attr.name)}storage.save(localStorageName)});store.getAll=function(storage){var ret={};store.forEach(function(key,val){ret[key]=val});return ret};store.forEach=withIEStorage(function(storage,callback){var attributes=storage.XMLDocument.documentElement.attributes;for(var i=0,attr;attr=attributes[i];++i){callback(attr.name,store.deserialize(storage.getAttribute(attr.name)))}})}try{var testKey="__storejs__";store.set(testKey,testKey);if(store.get(testKey)!=testKey){store.disabled=true}store.remove(testKey)}catch(e){store.disabled=true}store.enabled=!store.disabled;if(typeof module!="undefined"&&module.exports&&this.module!==module){module.exports=store}else if(typeof define==="function"&&define.amd){define(store)}else{win.store=store}})(Function("return this")())},{}]},{},[]);require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canMutationObserver=typeof window!=="undefined"&&window.MutationObserver;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}var queue=[];if(canMutationObserver){var hiddenDiv=document.createElement("div");var observer=new MutationObserver(function(){var queueList=queue.slice();queue.length=0;queueList.forEach(function(fn){fn()})});observer.observe(hiddenDiv,{attributes:true});return function nextTick(fn){if(!queue.length){hiddenDiv.setAttribute("yes","no")}queue.push(fn)}}if(canPost){window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],2:[function(require,module,exports){var isarray=require("isarray");module.exports=pathToRegexp;module.exports.parse=parse;module.exports.compile=compile;module.exports.tokensToFunction=tokensToFunction;module.exports.tokensToRegExp=tokensToRegExp;var PATH_REGEXP=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^()])+)\\))?|\\(((?:\\\\.|[^()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function parse(str){var tokens=[];var key=0;var index=0;var path="";var res;while((res=PATH_REGEXP.exec(str))!=null){var m=res[0];var escaped=res[1];var offset=res.index;path+=str.slice(index,offset);index=offset+m.length;if(escaped){path+=escaped[1];continue}if(path){tokens.push(path);path=""}var prefix=res[2];var name=res[3];var capture=res[4];var group=res[5];var suffix=res[6];var asterisk=res[7];var repeat=suffix==="+"||suffix==="*";var optional=suffix==="?"||suffix==="*";var delimiter=prefix||"/";var pattern=capture||group||(asterisk?".*":"[^"+delimiter+"]+?");tokens.push({name:name||key++,prefix:prefix||"",delimiter:delimiter,optional:optional,repeat:repeat,pattern:escapeGroup(pattern)})}if(index<str.length){path+=str.substr(index)}if(path){tokens.push(path)}return tokens}function compile(str){return tokensToFunction(parse(str))}function tokensToFunction(tokens){var matches=new Array(tokens.length);for(var i=0;i<tokens.length;i++){if(typeof tokens[i]==="object"){matches[i]=new RegExp("^"+tokens[i].pattern+"$")}}return function(obj){var path="";var data=obj||{};for(var i=0;i<tokens.length;i++){var token=tokens[i];if(typeof token==="string"){path+=token;continue}var value=data[token.name];var segment;if(value==null){if(token.optional){continue}else{throw new TypeError('Expected "'+token.name+'" to be defined')}}if(isarray(value)){if(!token.repeat){throw new TypeError('Expected "'+token.name+'" to not repeat, but received "'+value+'"')}if(value.length===0){if(token.optional){continue}else{throw new TypeError('Expected "'+token.name+'" to not be empty')}}for(var j=0;j<value.length;j++){segment=encodeURIComponent(value[j]);if(!matches[i].test(segment)){throw new TypeError('Expected all "'+token.name+'" to match "'+token.pattern+'", but received "'+segment+'"')}path+=(j===0?token.prefix:token.delimiter)+segment}continue}segment=encodeURIComponent(value);if(!matches[i].test(segment)){throw new TypeError('Expected "'+token.name+'" to match "'+token.pattern+'", but received "'+segment+'"')}path+=token.prefix+segment}return path}}function escapeString(str){return str.replace(/([.+*?=^!:${}()[\]|\/])/g,"\\$1")}function escapeGroup(group){return group.replace(/([=!:$\/()])/g,"\\$1")}function attachKeys(re,keys){re.keys=keys;return re}function flags(options){return options.sensitive?"":"i"}function regexpToRegexp(path,keys){var groups=path.source.match(/\((?!\?)/g);if(groups){for(var i=0;i<groups.length;i++){keys.push({name:i,prefix:null,delimiter:null,optional:false,repeat:false,pattern:null})}}return attachKeys(path,keys)}function arrayToRegexp(path,keys,options){var parts=[];for(var i=0;i<path.length;i++){parts.push(pathToRegexp(path[i],keys,options).source)}var regexp=new RegExp("(?:"+parts.join("|")+")",flags(options));return attachKeys(regexp,keys)}function stringToRegexp(path,keys,options){var tokens=parse(path);var re=tokensToRegExp(tokens,options);for(var i=0;i<tokens.length;i++){if(typeof tokens[i]!=="string"){keys.push(tokens[i])}}return attachKeys(re,keys)}function tokensToRegExp(tokens,options){options=options||{};var strict=options.strict;var end=options.end!==false;var route="";var lastToken=tokens[tokens.length-1];var endsWithSlash=typeof lastToken==="string"&&/\/$/.test(lastToken);for(var i=0;i<tokens.length;i++){var token=tokens[i];if(typeof token==="string"){route+=escapeString(token)}else{var prefix=escapeString(token.prefix);var capture=token.pattern;if(token.repeat){capture+="(?:"+prefix+capture+")*"}if(token.optional){if(prefix){capture="(?:"+prefix+"("+capture+"))?"}else{capture="("+capture+")?"}}else{capture=prefix+"("+capture+")"}route+=capture}}if(!strict){route=(endsWithSlash?route.slice(0,-2):route)+"(?:\\/(?=$))?"}if(end){route+="$"}else{route+=strict&&endsWithSlash?"":"(?=\\/|$)"}return new RegExp("^"+route,flags(options))}function pathToRegexp(path,keys,options){keys=keys||[];if(!isarray(keys)){options=keys;keys=[]}else if(!options){options={}}if(path instanceof RegExp){return regexpToRegexp(path,keys,options)}if(isarray(path)){return arrayToRegexp(path,keys,options)}return stringToRegexp(path,keys,options)}},{isarray:3}],3:[function(require,module,exports){module.exports=Array.isArray||function(arr){return Object.prototype.toString.call(arr)=="[object Array]"}},{}],page:[function(require,module,exports){(function(process){"use strict";var pathtoRegexp=require("path-to-regexp");module.exports=page;var clickEvent="undefined"!==typeof document&&document.ontouchstart?"touchstart":"click";var location="undefined"!==typeof window&&(window.history.location||window.location);var dispatch=true;var decodeURLComponents=true;var base="";var running;var hashbang=false;var prevContext;function page(path,fn){if("function"===typeof path){return page("*",path)}if("function"===typeof fn){var route=new Route(path);for(var i=1;i<arguments.length;++i){page.callbacks.push(route.middleware(arguments[i]))}}else if("string"===typeof path){page["string"===typeof fn?"redirect":"show"](path,fn)}else{page.start(path)}}page.callbacks=[];page.exits=[];page.current="";page.len=0;page.base=function(path){if(0===arguments.length)return base;base=path};page.start=function(options){options=options||{};if(running)return;running=true;if(false===options.dispatch)dispatch=false;if(false===options.decodeURLComponents)decodeURLComponents=false;if(false!==options.popstate)window.addEventListener("popstate",onpopstate,false);if(false!==options.click){document.addEventListener(clickEvent,onclick,false)}if(true===options.hashbang)hashbang=true;if(!dispatch)return;var url=hashbang&&~location.hash.indexOf("#!")?location.hash.substr(2)+location.search:location.pathname+location.search+location.hash;page.replace(url,null,true,dispatch)};page.stop=function(){if(!running)return;page.current="";page.len=0;running=false;document.removeEventListener(clickEvent,onclick,false);window.removeEventListener("popstate",onpopstate,false)};page.show=function(path,state,dispatch,push){var ctx=new Context(path,state);page.current=ctx.path;if(false!==dispatch)page.dispatch(ctx);if(false!==ctx.handled&&false!==push)ctx.pushState();return ctx};page.back=function(path,state){if(page.len>0){history.back();page.len--}else if(path){setTimeout(function(){page.show(path,state)})}else{setTimeout(function(){page.show(base,state)})}};page.redirect=function(from,to){if("string"===typeof from&&"string"===typeof to){page(from,function(e){setTimeout(function(){page.replace(to)},0)})}if("string"===typeof from&&"undefined"===typeof to){setTimeout(function(){page.replace(from)},0)}};page.replace=function(path,state,init,dispatch){var ctx=new Context(path,state);page.current=ctx.path;ctx.init=init;ctx.save();if(false!==dispatch)page.dispatch(ctx);return ctx};page.dispatch=function(ctx){var prev=prevContext,i=0,j=0;prevContext=ctx;function nextExit(){var fn=page.exits[j++];if(!fn)return nextEnter();fn(prev,nextExit)}function nextEnter(){var fn=page.callbacks[i++];if(ctx.path!==page.current){ctx.handled=false;return}if(!fn)return unhandled(ctx);fn(ctx,nextEnter)}if(prev){nextExit()}else{nextEnter()}};function unhandled(ctx){if(ctx.handled)return;var current;if(hashbang){current=base+location.hash.replace("#!","")}else{current=location.pathname+location.search}if(current===ctx.canonicalPath)return;page.stop();ctx.handled=false;location.href=ctx.canonicalPath}page.exit=function(path,fn){if(typeof path==="function"){return page.exit("*",path)}var route=new Route(path);for(var i=1;i<arguments.length;++i){page.exits.push(route.middleware(arguments[i]))}};function decodeURLEncodedURIComponent(val){if(typeof val!=="string"){return val}return decodeURLComponents?decodeURIComponent(val.replace(/\+/g," ")):val}function Context(path,state){if("/"===path[0]&&0!==path.indexOf(base))path=base+(hashbang?"#!":"")+path;var i=path.indexOf("?");this.canonicalPath=path;this.path=path.replace(base,"")||"/";if(hashbang)this.path=this.path.replace("#!","")||"/";this.title=document.title;this.state=state||{};this.state.path=path;this.querystring=~i?decodeURLEncodedURIComponent(path.slice(i+1)):"";this.pathname=decodeURLEncodedURIComponent(~i?path.slice(0,i):path);this.params={};this.hash="";if(!hashbang){if(!~this.path.indexOf("#"))return;var parts=this.path.split("#");this.path=parts[0];this.hash=decodeURLEncodedURIComponent(parts[1])||"";this.querystring=this.querystring.split("#")[0]}}page.Context=Context;Context.prototype.pushState=function(){page.len++;history.pushState(this.state,this.title,hashbang&&this.path!=="/"?"#!"+this.path:this.canonicalPath)};Context.prototype.save=function(){history.replaceState(this.state,this.title,hashbang&&this.path!=="/"?"#!"+this.path:this.canonicalPath)};function Route(path,options){options=options||{};this.path=path==="*"?"(.*)":path;this.method="GET";this.regexp=pathtoRegexp(this.path,this.keys=[],options)}page.Route=Route;Route.prototype.middleware=function(fn){var self=this;return function(ctx,next){if(self.match(ctx.path,ctx.params))return fn(ctx,next);next()}};Route.prototype.match=function(path,params){var keys=this.keys,qsIndex=path.indexOf("?"),pathname=~qsIndex?path.slice(0,qsIndex):path,m=this.regexp.exec(decodeURIComponent(pathname));if(!m)return false;for(var i=1,len=m.length;i<len;++i){var key=keys[i-1];var val=decodeURLEncodedURIComponent(m[i]);if(val!==undefined||!hasOwnProperty.call(params,key.name)){params[key.name]=val}}return true};var onpopstate=function(){var loaded=false;if("undefined"===typeof window){return}if(document.readyState==="complete"){loaded=true}else{window.addEventListener("load",function(){setTimeout(function(){loaded=true},0)})}return function onpopstate(e){if(!loaded)return;if(e.state){var path=e.state.path;page.replace(path,e.state)}else{page.show(location.pathname+location.hash,undefined,undefined,false)}}}();function onclick(e){if(1!==which(e))return;if(e.metaKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;var el=e.path?e.path[0]:e.target;while(el&&"A"!==el.nodeName)el=el.parentNode;if(!el||"A"!==el.nodeName)return;if(el.hasAttribute("download")||el.getAttribute("rel")==="external")return;var link=el.getAttribute("href");if(!hashbang&&el.pathname===location.pathname&&(el.hash||"#"===link))return;if(link&&link.indexOf("mailto:")>-1)return;if(el.target)return;if(!sameOrigin(el.href))return;var path=el.pathname+el.search+(el.hash||"");if(typeof process!=="undefined"&&path.match(/^\/[a-zA-Z]:\//)){path=path.replace(/^\/[a-zA-Z]:\//,"/")}var orig=path;if(path.indexOf(base)===0){path=path.substr(base.length)}if(hashbang)path=path.replace("#!","");if(base&&orig===path)return;e.preventDefault();page.show(orig)}function which(e){e=e||window.event;return null===e.which?e.button:e.which}function sameOrigin(href){var origin=location.protocol+"//"+location.hostname;if(location.port)origin+=":"+location.port;return href&&0===href.indexOf(origin)}page.sameOrigin=sameOrigin}).call(this,require("_process"))},{_process:1,"path-to-regexp":2}]},{},[]);require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({mithril:[function(require,module,exports){(function(global,factory){"use strict";var m=factory(global);if(typeof module==="object"&&module!=null&&module.exports){module.exports=m}else if(typeof define==="function"&&define.amd){define(function(){return m})}else{global.m=m}})(typeof window!=="undefined"?window:this,function(global,undefined){"use strict";m.version=function(){return"v0.2.5"};var hasOwn={}.hasOwnProperty;var type={}.toString;function isFunction(object){return typeof object==="function"}function isObject(object){return type.call(object)==="[object Object]"}function isString(object){return type.call(object)==="[object String]"}var isArray=Array.isArray||function(object){return type.call(object)==="[object Array]"};function noop(){}var voidElements={AREA:1,BASE:1,BR:1,COL:1,COMMAND:1,EMBED:1,HR:1,IMG:1,INPUT:1,KEYGEN:1,LINK:1,META:1,PARAM:1,SOURCE:1,TRACK:1,WBR:1};var $document,$location,$requestAnimationFrame,$cancelAnimationFrame;function initialize(mock){$document=mock.document;$location=mock.location;$cancelAnimationFrame=mock.cancelAnimationFrame||mock.clearTimeout;$requestAnimationFrame=mock.requestAnimationFrame||mock.setTimeout}m.deps=function(mock){initialize(global=mock||window);return global};m.deps(global);function parseTagAttrs(cell,tag){var classes=[];var parser=/(?:(^|#|\.)([^#\.\[\]]+))|(\[.+?\])/g;var match;while(match=parser.exec(tag)){if(match[1]===""&&match[2]){cell.tag=match[2]}else if(match[1]==="#"){cell.attrs.id=match[2]}else if(match[1]==="."){classes.push(match[2])}else if(match[3][0]==="["){var pair=/\[(.+?)(?:=("|'|)(.*?)\2)?\]/.exec(match[3]);cell.attrs[pair[1]]=pair[3]||""}}return classes}function getVirtualChildren(args,hasAttrs){var children=hasAttrs?args.slice(1):args;if(children.length===1&&isArray(children[0])){return children[0]}else{return children}}function assignAttrs(target,attrs,classes){var classAttr="class"in attrs?"class":"className";for(var attrName in attrs){if(hasOwn.call(attrs,attrName)){if(attrName===classAttr&&attrs[attrName]!=null&&attrs[attrName]!==""){classes.push(attrs[attrName]);target[attrName]=""}else{target[attrName]=attrs[attrName]}}}if(classes.length)target[classAttr]=classes.join(" ")}function m(tag,pairs){var args=[];for(var i=1,length=arguments.length;i<length;i++){args[i-1]=arguments[i]}if(isObject(tag))return parameterize(tag,args);if(!isString(tag)){throw new Error("selector in m(selector, attrs, children) should "+"be a string")}var hasAttrs=pairs!=null&&isObject(pairs)&&!("tag"in pairs||"view"in pairs||"subtree"in pairs);var attrs=hasAttrs?pairs:{};var cell={tag:"div",attrs:{},children:getVirtualChildren(args,hasAttrs)};assignAttrs(cell.attrs,attrs,parseTagAttrs(cell,tag));return cell}function forEach(list,f){for(var i=0;i<list.length&&!f(list[i],i++);){}}function forKeys(list,f){forEach(list,function(attrs,i){return(attrs=attrs&&attrs.attrs)&&attrs.key!=null&&f(attrs,i)})}function dataToString(data){try{if(data!=null&&data.toString()!=null)return data}catch(e){}return""}function injectTextNode(parentElement,first,index,data){try{insertNode(parentElement,first,index);first.nodeValue=data}catch(e){}}function flatten(list){for(var i=0;i<list.length;i++){if(isArray(list[i])){list=list.concat.apply([],list);i--}}return list}function insertNode(parentElement,node,index){parentElement.insertBefore(node,parentElement.childNodes[index]||null)}var DELETION=1;var INSERTION=2;var MOVE=3;function handleKeysDiffer(data,existing,cached,parentElement){forKeys(data,function(key,i){existing[key=key.key]=existing[key]?{action:MOVE,index:i,from:existing[key].index,element:cached.nodes[existing[key].index]||$document.createElement("div")}:{action:INSERTION,index:i}});var actions=[];for(var prop in existing){if(hasOwn.call(existing,prop)){actions.push(existing[prop])}}var changes=actions.sort(sortChanges);var newCached=new Array(cached.length);newCached.nodes=cached.nodes.slice();forEach(changes,function(change){var index=change.index;if(change.action===DELETION){clear(cached[index].nodes,cached[index]);newCached.splice(index,1)}if(change.action===INSERTION){var dummy=$document.createElement("div");dummy.key=data[index].attrs.key;insertNode(parentElement,dummy,index);newCached.splice(index,0,{attrs:{key:data[index].attrs.key},nodes:[dummy]});newCached.nodes[index]=dummy}if(change.action===MOVE){var changeElement=change.element;var maybeChanged=parentElement.childNodes[index];if(maybeChanged!==changeElement&&changeElement!==null){parentElement.insertBefore(changeElement,maybeChanged||null)}newCached[index]=cached[change.from];newCached.nodes[index]=changeElement}});return newCached}function diffKeys(data,cached,existing,parentElement){var keysDiffer=data.length!==cached.length;if(!keysDiffer){forKeys(data,function(attrs,i){var cachedCell=cached[i];return keysDiffer=cachedCell&&cachedCell.attrs&&cachedCell.attrs.key!==attrs.key})}if(keysDiffer){return handleKeysDiffer(data,existing,cached,parentElement)}else{return cached}}function diffArray(data,cached,nodes){forEach(data,function(_,i){if(cached[i]!=null)nodes.push.apply(nodes,cached[i].nodes)});forEach(cached.nodes,function(node,i){if(node.parentNode!=null&&nodes.indexOf(node)<0){clear([node],[cached[i]])}});if(data.length<cached.length)cached.length=data.length;cached.nodes=nodes}function buildArrayKeys(data){var guid=0;forKeys(data,function(){forEach(data,function(attrs){if((attrs=attrs&&attrs.attrs)&&attrs.key==null){attrs.key="__mithril__"+guid++}});return 1})}function isDifferentEnough(data,cached,dataAttrKeys){if(data.tag!==cached.tag)return true;if(dataAttrKeys.sort().join()!==Object.keys(cached.attrs).sort().join()){return true}if(data.attrs.id!==cached.attrs.id){return true}if(data.attrs.key!==cached.attrs.key){return true}if(m.redraw.strategy()==="all"){return!cached.configContext||cached.configContext.retain!==true}if(m.redraw.strategy()==="diff"){return cached.configContext&&cached.configContext.retain===false}return false}function maybeRecreateObject(data,cached,dataAttrKeys){if(isDifferentEnough(data,cached,dataAttrKeys)){if(cached.nodes.length)clear(cached.nodes);if(cached.configContext&&isFunction(cached.configContext.onunload)){cached.configContext.onunload()}if(cached.controllers){forEach(cached.controllers,function(controller){if(controller.onunload){controller.onunload({preventDefault:noop})}})}}}function getObjectNamespace(data,namespace){if(data.attrs.xmlns)return data.attrs.xmlns;if(data.tag==="svg")return"http://www.w3.org/2000/svg";if(data.tag==="math")return"http://www.w3.org/1998/Math/MathML";return namespace}var pendingRequests=0;m.startComputation=function(){pendingRequests++};m.endComputation=function(){if(pendingRequests>1){pendingRequests--}else{pendingRequests=0;m.redraw()}};function unloadCachedControllers(cached,views,controllers){if(controllers.length){cached.views=views;cached.controllers=controllers;forEach(controllers,function(controller){if(controller.onunload&&controller.onunload.$old){controller.onunload=controller.onunload.$old}if(pendingRequests&&controller.onunload){var onunload=controller.onunload;controller.onunload=noop;controller.onunload.$old=onunload}})}}function scheduleConfigsToBeCalled(configs,data,node,isNew,cached){if(isFunction(data.attrs.config)){var context=cached.configContext=cached.configContext||{};configs.push(function(){return data.attrs.config.call(data,node,!isNew,context,cached)})}}function buildUpdatedNode(cached,data,editable,hasKeys,namespace,views,configs,controllers){var node=cached.nodes[0];if(hasKeys){setAttributes(node,data.tag,data.attrs,cached.attrs,namespace)}cached.children=build(node,data.tag,undefined,undefined,data.children,cached.children,false,0,data.attrs.contenteditable?node:editable,namespace,configs);cached.nodes.intact=true;if(controllers.length){cached.views=views;cached.controllers=controllers}return node}function handleNonexistentNodes(data,parentElement,index){var nodes;if(data.$trusted){nodes=injectHTML(parentElement,index,data)}else{nodes=[$document.createTextNode(data)];if(!(parentElement.nodeName in voidElements)){insertNode(parentElement,nodes[0],index)}}var cached;if(typeof data==="string"||typeof data==="number"||typeof data==="boolean"){cached=new data.constructor(data)}else{cached=data}cached.nodes=nodes;return cached}function reattachNodes(data,cached,parentElement,editable,index,parentTag){var nodes=cached.nodes;if(!editable||editable!==$document.activeElement){if(data.$trusted){clear(nodes,cached);nodes=injectHTML(parentElement,index,data)}else if(parentTag==="textarea"){parentElement.value=data}else if(editable){editable.innerHTML=data}else{if(nodes[0].nodeType===1||nodes.length>1||nodes[0].nodeValue.trim&&!nodes[0].nodeValue.trim()){clear(cached.nodes,cached);nodes=[$document.createTextNode(data)]}injectTextNode(parentElement,nodes[0],index,data)}}cached=new data.constructor(data);cached.nodes=nodes;return cached}function handleTextNode(cached,data,index,parentElement,shouldReattach,editable,parentTag){if(!cached.nodes.length){return handleNonexistentNodes(data,parentElement,index)}else if(cached.valueOf()!==data.valueOf()||shouldReattach){return reattachNodes(data,cached,parentElement,editable,index,parentTag)}else{return cached.nodes.intact=true,cached}}function getSubArrayCount(item){if(item.$trusted){var match=item.match(/<[^\/]|\>\s*[^<]/g);if(match!=null)return match.length}else if(isArray(item)){return item.length}return 1}function buildArray(data,cached,parentElement,index,parentTag,shouldReattach,editable,namespace,configs){data=flatten(data);var nodes=[];var intact=cached.length===data.length;var subArrayCount=0;var existing={};var shouldMaintainIdentities=false;forKeys(cached,function(attrs,i){shouldMaintainIdentities=true;existing[cached[i].attrs.key]={action:DELETION,index:i}});buildArrayKeys(data);if(shouldMaintainIdentities){cached=diffKeys(data,cached,existing,parentElement)}var cacheCount=0;for(var i=0,len=data.length;i<len;i++){var item=build(parentElement,parentTag,cached,index,data[i],cached[cacheCount],shouldReattach,index+subArrayCount||subArrayCount,editable,namespace,configs);if(item!==undefined){intact=intact&&item.nodes.intact;subArrayCount+=getSubArrayCount(item);cached[cacheCount++]=item}}if(!intact)diffArray(data,cached,nodes);return cached}function makeCache(data,cached,index,parentIndex,parentCache){if(cached!=null){if(type.call(cached)===type.call(data))return cached;if(parentCache&&parentCache.nodes){var offset=index-parentIndex;var end=offset+(isArray(data)?data:cached.nodes).length;clear(parentCache.nodes.slice(offset,end),parentCache.slice(offset,end))}else if(cached.nodes){clear(cached.nodes,cached)}}cached=new data.constructor;if(cached.tag)cached={};cached.nodes=[];return cached}function constructNode(data,namespace){if(data.attrs.is){if(namespace==null){return $document.createElement(data.tag,data.attrs.is)}else{return $document.createElementNS(namespace,data.tag,data.attrs.is)}}else if(namespace==null){return $document.createElement(data.tag)}else{return $document.createElementNS(namespace,data.tag)}}function constructAttrs(data,node,namespace,hasKeys){if(hasKeys){return setAttributes(node,data.tag,data.attrs,{},namespace)}else{return data.attrs}}function constructChildren(data,node,cached,editable,namespace,configs){if(data.children!=null&&data.children.length>0){return build(node,data.tag,undefined,undefined,data.children,cached.children,true,0,data.attrs.contenteditable?node:editable,namespace,configs)}else{return data.children}}function reconstructCached(data,attrs,children,node,namespace,views,controllers){var cached={tag:data.tag,attrs:attrs,children:children,nodes:[node]};unloadCachedControllers(cached,views,controllers);if(cached.children&&!cached.children.nodes){cached.children.nodes=[]}if(data.tag==="select"&&"value"in data.attrs){setAttributes(node,data.tag,{value:data.attrs.value},{},namespace)}return cached}function getController(views,view,cachedControllers,controller){var controllerIndex;if(m.redraw.strategy()==="diff"&&views){controllerIndex=views.indexOf(view)}else{controllerIndex=-1}if(controllerIndex>-1){return cachedControllers[controllerIndex]}else if(isFunction(controller)){return new controller}else{return{}}}var unloaders=[];function updateLists(views,controllers,view,controller){if(controller.onunload!=null&&unloaders.map(function(u){return u.handler}).indexOf(controller.onunload)<0){unloaders.push({controller:controller,handler:controller.onunload})}views.push(view);controllers.push(controller)}var forcing=false;function checkView(data,view,cached,cachedControllers,controllers,views){var controller=getController(cached.views,view,cachedControllers,data.controller);var key=data&&data.attrs&&data.attrs.key;if(pendingRequests===0||forcing||cachedControllers&&cachedControllers.indexOf(controller)>-1){data=data.view(controller)}else{data={tag:"placeholder"}}if(data.subtree==="retain")return data;data.attrs=data.attrs||{};data.attrs.key=key;updateLists(views,controllers,view,controller);return data}function markViews(data,cached,views,controllers){var cachedControllers=cached&&cached.controllers;while(data.view!=null){data=checkView(data,data.view.$original||data.view,cached,cachedControllers,controllers,views)}return data}function buildObject(data,cached,editable,parentElement,index,shouldReattach,namespace,configs){var views=[];var controllers=[];data=markViews(data,cached,views,controllers);if(data.subtree==="retain")return cached;if(!data.tag&&controllers.length){throw new Error("Component template must return a virtual "+"element, not an array, string, etc.")}data.attrs=data.attrs||{};cached.attrs=cached.attrs||{};var dataAttrKeys=Object.keys(data.attrs);var hasKeys=dataAttrKeys.length>("key"in data.attrs?1:0);
maybeRecreateObject(data,cached,dataAttrKeys);if(!isString(data.tag))return;var isNew=cached.nodes.length===0;namespace=getObjectNamespace(data,namespace);var node;if(isNew){node=constructNode(data,namespace);var attrs=constructAttrs(data,node,namespace,hasKeys);insertNode(parentElement,node,index);var children=constructChildren(data,node,cached,editable,namespace,configs);cached=reconstructCached(data,attrs,children,node,namespace,views,controllers)}else{node=buildUpdatedNode(cached,data,editable,hasKeys,namespace,views,configs,controllers)}if(!isNew&&shouldReattach===true&&node!=null){insertNode(parentElement,node,index)}scheduleConfigsToBeCalled(configs,data,node,isNew,cached);return cached}function build(parentElement,parentTag,parentCache,parentIndex,data,cached,shouldReattach,index,editable,namespace,configs){data=dataToString(data);if(data.subtree==="retain")return cached;cached=makeCache(data,cached,index,parentIndex,parentCache);if(isArray(data)){return buildArray(data,cached,parentElement,index,parentTag,shouldReattach,editable,namespace,configs)}else if(data!=null&&isObject(data)){return buildObject(data,cached,editable,parentElement,index,shouldReattach,namespace,configs)}else if(!isFunction(data)){return handleTextNode(cached,data,index,parentElement,shouldReattach,editable,parentTag)}else{return cached}}function sortChanges(a,b){return a.action-b.action||a.index-b.index}function copyStyleAttrs(node,dataAttr,cachedAttr){for(var rule in dataAttr){if(hasOwn.call(dataAttr,rule)){if(cachedAttr==null||cachedAttr[rule]!==dataAttr[rule]){node.style[rule]=dataAttr[rule]}}}for(rule in cachedAttr){if(hasOwn.call(cachedAttr,rule)){if(!hasOwn.call(dataAttr,rule))node.style[rule]=""}}}var shouldUseSetAttribute={list:1,style:1,form:1,type:1,width:1,height:1};function setSingleAttr(node,attrName,dataAttr,cachedAttr,tag,namespace){if(attrName==="config"||attrName==="key"){return true}else if(isFunction(dataAttr)&&attrName.slice(0,2)==="on"){node[attrName]=autoredraw(dataAttr,node)}else if(attrName==="style"&&dataAttr!=null&&isObject(dataAttr)){copyStyleAttrs(node,dataAttr,cachedAttr)}else if(namespace!=null){if(attrName==="href"){node.setAttributeNS("http://www.w3.org/1999/xlink","href",dataAttr)}else{node.setAttribute(attrName==="className"?"class":attrName,dataAttr)}}else if(attrName in node&&!shouldUseSetAttribute[attrName]){try{if(tag!=="input"||node[attrName]!==dataAttr){node[attrName]=dataAttr}}catch(e){node.setAttribute(attrName,dataAttr)}}else node.setAttribute(attrName,dataAttr)}function trySetAttr(node,attrName,dataAttr,cachedAttr,cachedAttrs,tag,namespace){if(!(attrName in cachedAttrs)||cachedAttr!==dataAttr||$document.activeElement===node){cachedAttrs[attrName]=dataAttr;try{return setSingleAttr(node,attrName,dataAttr,cachedAttr,tag,namespace)}catch(e){if(e.message.indexOf("Invalid argument")<0)throw e}}else if(attrName==="value"&&tag==="input"&&node.value!==dataAttr){node.value=dataAttr}}function setAttributes(node,tag,dataAttrs,cachedAttrs,namespace){for(var attrName in dataAttrs){if(hasOwn.call(dataAttrs,attrName)){if(trySetAttr(node,attrName,dataAttrs[attrName],cachedAttrs[attrName],cachedAttrs,tag,namespace)){continue}}}return cachedAttrs}function clear(nodes,cached){for(var i=nodes.length-1;i>-1;i--){if(nodes[i]&&nodes[i].parentNode){try{nodes[i].parentNode.removeChild(nodes[i])}catch(e){}cached=[].concat(cached);if(cached[i])unload(cached[i])}}if(nodes.length){nodes.length=0}}function unload(cached){if(cached.configContext&&isFunction(cached.configContext.onunload)){cached.configContext.onunload();cached.configContext.onunload=null}if(cached.controllers){forEach(cached.controllers,function(controller){if(isFunction(controller.onunload)){controller.onunload({preventDefault:noop})}})}if(cached.children){if(isArray(cached.children))forEach(cached.children,unload);else if(cached.children.tag)unload(cached.children)}}function appendTextFragment(parentElement,data){try{parentElement.appendChild($document.createRange().createContextualFragment(data))}catch(e){parentElement.insertAdjacentHTML("beforeend",data);replaceScriptNodes(parentElement)}}function replaceScriptNodes(node){if(node.tagName==="SCRIPT"){node.parentNode.replaceChild(buildExecutableNode(node),node)}else{var children=node.childNodes;if(children&&children.length){for(var i=0;i<children.length;i++){replaceScriptNodes(children[i])}}}return node}function buildExecutableNode(node){var scriptEl=document.createElement("script");var attrs=node.attributes;for(var i=0;i<attrs.length;i++){scriptEl.setAttribute(attrs[i].name,attrs[i].value)}scriptEl.text=node.innerHTML;return scriptEl}function injectHTML(parentElement,index,data){var nextSibling=parentElement.childNodes[index];if(nextSibling){var isElement=nextSibling.nodeType!==1;var placeholder=$document.createElement("span");if(isElement){parentElement.insertBefore(placeholder,nextSibling||null);placeholder.insertAdjacentHTML("beforebegin",data);parentElement.removeChild(placeholder)}else{nextSibling.insertAdjacentHTML("beforebegin",data)}}else{appendTextFragment(parentElement,data)}var nodes=[];while(parentElement.childNodes[index]!==nextSibling){nodes.push(parentElement.childNodes[index]);index++}return nodes}function autoredraw(callback,object){return function(e){e=e||event;m.redraw.strategy("diff");m.startComputation();try{return callback.call(object,e)}finally{endFirstComputation()}}}var html;var documentNode={appendChild:function(node){if(html===undefined)html=$document.createElement("html");if($document.documentElement&&$document.documentElement!==node){$document.replaceChild(node,$document.documentElement)}else{$document.appendChild(node)}this.childNodes=$document.childNodes},insertBefore:function(node){this.appendChild(node)},childNodes:[]};var nodeCache=[];var cellCache={};m.render=function(root,cell,forceRecreation){if(!root){throw new Error("Ensure the DOM element being passed to "+"m.route/m.mount/m.render is not undefined.")}var configs=[];var id=getCellCacheKey(root);var isDocumentRoot=root===$document;var node;if(isDocumentRoot||root===$document.documentElement){node=documentNode}else{node=root}if(isDocumentRoot&&cell.tag!=="html"){cell={tag:"html",attrs:{},children:cell}}if(cellCache[id]===undefined)clear(node.childNodes);if(forceRecreation===true)reset(root);cellCache[id]=build(node,null,undefined,undefined,cell,cellCache[id],false,0,null,undefined,configs);forEach(configs,function(config){config()})};function getCellCacheKey(element){var index=nodeCache.indexOf(element);return index<0?nodeCache.push(element)-1:index}m.trust=function(value){value=new String(value);value.$trusted=true;return value};function gettersetter(store){function prop(){if(arguments.length)store=arguments[0];return store}prop.toJSON=function(){return store};return prop}m.prop=function(store){if((store!=null&&(isObject(store)||isFunction(store))||typeof Promise!=="undefined"&&store instanceof Promise)&&isFunction(store.then)){return propify(store)}return gettersetter(store)};var roots=[];var components=[];var controllers=[];var lastRedrawId=null;var lastRedrawCallTime=0;var computePreRedrawHook=null;var computePostRedrawHook=null;var topComponent;var FRAME_BUDGET=16;function parameterize(component,args){function controller(){return(component.controller||noop).apply(this,args)||this}if(component.controller){controller.prototype=component.controller.prototype}function view(ctrl){var currentArgs=[ctrl].concat(args);for(var i=1;i<arguments.length;i++){currentArgs.push(arguments[i])}return component.view.apply(component,currentArgs)}view.$original=component.view;var output={controller:controller,view:view};if(args[0]&&args[0].key!=null)output.attrs={key:args[0].key};return output}m.component=function(component){var args=new Array(arguments.length-1);for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}return parameterize(component,args)};function checkPrevented(component,root,index,isPrevented){if(!isPrevented){m.redraw.strategy("all");m.startComputation();roots[index]=root;var currentComponent;if(component){currentComponent=topComponent=component}else{currentComponent=topComponent=component={controller:noop}}var controller=new(component.controller||noop);if(currentComponent===topComponent){controllers[index]=controller;components[index]=component}endFirstComputation();if(component===null){removeRootElement(root,index)}return controllers[index]}else if(component==null){removeRootElement(root,index)}}m.mount=m.module=function(root,component){if(!root){throw new Error("Please ensure the DOM element exists before "+"rendering a template into it.")}var index=roots.indexOf(root);if(index<0)index=roots.length;var isPrevented=false;var event={preventDefault:function(){isPrevented=true;computePreRedrawHook=computePostRedrawHook=null}};forEach(unloaders,function(unloader){unloader.handler.call(unloader.controller,event);unloader.controller.onunload=null});if(isPrevented){forEach(unloaders,function(unloader){unloader.controller.onunload=unloader.handler})}else{unloaders=[]}if(controllers[index]&&isFunction(controllers[index].onunload)){controllers[index].onunload(event)}return checkPrevented(component,root,index,isPrevented)};function removeRootElement(root,index){roots.splice(index,1);controllers.splice(index,1);components.splice(index,1);reset(root);nodeCache.splice(getCellCacheKey(root),1)}var redrawing=false;m.redraw=function(force){if(redrawing)return;redrawing=true;if(force)forcing=true;try{if(lastRedrawId&&!force){if($requestAnimationFrame===global.requestAnimationFrame||new Date-lastRedrawCallTime>FRAME_BUDGET){if(lastRedrawId>0)$cancelAnimationFrame(lastRedrawId);lastRedrawId=$requestAnimationFrame(redraw,FRAME_BUDGET)}}else{redraw();lastRedrawId=$requestAnimationFrame(function(){lastRedrawId=null},FRAME_BUDGET)}}finally{redrawing=forcing=false}};m.redraw.strategy=m.prop();function redraw(){if(computePreRedrawHook){computePreRedrawHook();computePreRedrawHook=null}forEach(roots,function(root,i){var component=components[i];if(controllers[i]){var args=[controllers[i]];m.render(root,component.view?component.view(controllers[i],args):"")}});if(computePostRedrawHook){computePostRedrawHook();computePostRedrawHook=null}lastRedrawId=null;lastRedrawCallTime=new Date;m.redraw.strategy("diff")}function endFirstComputation(){if(m.redraw.strategy()==="none"){pendingRequests--;m.redraw.strategy("diff")}else{m.endComputation()}}m.withAttr=function(prop,withAttrCallback,callbackThis){return function(e){e=e||window.event;var currentTarget=e.currentTarget||this;var _this=callbackThis||this;var target=prop in currentTarget?currentTarget[prop]:currentTarget.getAttribute(prop);withAttrCallback.call(_this,target)}};var modes={pathname:"",hash:"#",search:"?"};var redirect=noop;var isDefaultRoute=false;var routeParams,currentRoute;m.route=function(root,arg1,arg2,vdom){if(arguments.length===0)return currentRoute;if(arguments.length===3&&isString(arg1)){redirect=function(source){var path=currentRoute=normalizeRoute(source);if(!routeByValue(root,arg2,path)){if(isDefaultRoute){throw new Error("Ensure the default route matches "+"one of the routes defined in m.route")}isDefaultRoute=true;m.route(arg1,true);isDefaultRoute=false}};var listener=m.route.mode==="hash"?"onhashchange":"onpopstate";global[listener]=function(){var path=$location[m.route.mode];if(m.route.mode==="pathname")path+=$location.search;if(currentRoute!==normalizeRoute(path))redirect(path)};computePreRedrawHook=setScroll;global[listener]();return}if(root.addEventListener||root.attachEvent){var base=m.route.mode!=="pathname"?$location.pathname:"";root.href=base+modes[m.route.mode]+vdom.attrs.href;if(root.addEventListener){root.removeEventListener("click",routeUnobtrusive);root.addEventListener("click",routeUnobtrusive)}else{root.detachEvent("onclick",routeUnobtrusive);root.attachEvent("onclick",routeUnobtrusive)}return}if(isString(root)){var oldRoute=currentRoute;currentRoute=root;var args=arg1||{};var queryIndex=currentRoute.indexOf("?");var params;if(queryIndex>-1){params=parseQueryString(currentRoute.slice(queryIndex+1))}else{params={}}for(var i in args){if(hasOwn.call(args,i)){params[i]=args[i]}}var querystring=buildQueryString(params);var currentPath;if(queryIndex>-1){currentPath=currentRoute.slice(0,queryIndex)}else{currentPath=currentRoute}if(querystring){currentRoute=currentPath+(currentPath.indexOf("?")===-1?"?":"&")+querystring}var replaceHistory=(arguments.length===3?arg2:arg1)===true||oldRoute===root;if(global.history.pushState){var method=replaceHistory?"replaceState":"pushState";computePreRedrawHook=setScroll;computePostRedrawHook=function(){try{global.history[method](null,$document.title,modes[m.route.mode]+currentRoute)}catch(err){$location[m.route.mode]=currentRoute}};redirect(modes[m.route.mode]+currentRoute)}else{$location[m.route.mode]=currentRoute;redirect(modes[m.route.mode]+currentRoute)}}};m.route.param=function(key){if(!routeParams){throw new Error("You must call m.route(element, defaultRoute, "+"routes) before calling m.route.param()")}if(!key){return routeParams}return routeParams[key]};m.route.mode="search";function normalizeRoute(route){return route.slice(modes[m.route.mode].length)}function routeByValue(root,router,path){routeParams={};var queryStart=path.indexOf("?");if(queryStart!==-1){routeParams=parseQueryString(path.substr(queryStart+1,path.length));path=path.substr(0,queryStart)}var keys=Object.keys(router);var index=keys.indexOf(path);if(index!==-1){m.mount(root,router[keys[index]]);return true}for(var route in router){if(hasOwn.call(router,route)){if(route===path){m.mount(root,router[route]);return true}var matcher=new RegExp("^"+route.replace(/:[^\/]+?\.{3}/g,"(.*?)").replace(/:[^\/]+/g,"([^\\/]+)")+"/?$");if(matcher.test(path)){path.replace(matcher,function(){var keys=route.match(/:[^\/]+/g)||[];var values=[].slice.call(arguments,1,-2);forEach(keys,function(key,i){routeParams[key.replace(/:|\./g,"")]=decodeURIComponent(values[i])});m.mount(root,router[route])});return true}}}}function routeUnobtrusive(e){e=e||event;if(e.ctrlKey||e.metaKey||e.shiftKey||e.which===2)return;if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}var currentTarget=e.currentTarget||e.srcElement;var args;if(m.route.mode==="pathname"&&currentTarget.search){args=parseQueryString(currentTarget.search.slice(1))}else{args={}}while(currentTarget&&!/a/i.test(currentTarget.nodeName)){currentTarget=currentTarget.parentNode}pendingRequests=0;m.route(currentTarget[m.route.mode].slice(modes[m.route.mode].length),args)}function setScroll(){if(m.route.mode!=="hash"&&$location.hash){$location.hash=$location.hash}else{global.scrollTo(0,0)}}function buildQueryString(object,prefix){var duplicates={};var str=[];for(var prop in object){if(hasOwn.call(object,prop)){var key=prefix?prefix+"["+prop+"]":prop;var value=object[prop];if(value===null){str.push(encodeURIComponent(key))}else if(isObject(value)){str.push(buildQueryString(value,key))}else if(isArray(value)){var keys=[];duplicates[key]=duplicates[key]||{};forEach(value,function(item){if(!duplicates[key][item]){duplicates[key][item]=true;keys.push(encodeURIComponent(key)+"="+encodeURIComponent(item))}});str.push(keys.join("&"))}else if(value!==undefined){str.push(encodeURIComponent(key)+"="+encodeURIComponent(value))}}}return str.join("&")}function parseQueryString(str){if(str===""||str==null)return{};if(str.charAt(0)==="?")str=str.slice(1);var pairs=str.split("&");var params={};forEach(pairs,function(string){var pair=string.split("=");var key=decodeURIComponent(pair[0]);var value=pair.length===2?decodeURIComponent(pair[1]):null;if(params[key]!=null){if(!isArray(params[key]))params[key]=[params[key]];params[key].push(value)}else params[key]=value});return params}m.route.buildQueryString=buildQueryString;m.route.parseQueryString=parseQueryString;function reset(root){var cacheKey=getCellCacheKey(root);clear(root.childNodes,cellCache[cacheKey]);cellCache[cacheKey]=undefined}m.deferred=function(){var deferred=new Deferred;deferred.promise=propify(deferred.promise);return deferred};function propify(promise,initialValue){var prop=m.prop(initialValue);promise.then(prop);prop.then=function(resolve,reject){return propify(promise.then(resolve,reject),initialValue)};prop.catch=prop.then.bind(null,null);return prop}var RESOLVING=1;var REJECTING=2;var RESOLVED=3;var REJECTED=4;function Deferred(onSuccess,onFailure){var self=this;var state=0;var promiseValue=0;var next=[];self.promise={};self.resolve=function(value){if(!state){promiseValue=value;state=RESOLVING;fire()}return self};self.reject=function(value){if(!state){promiseValue=value;state=REJECTING;fire()}return self};self.promise.then=function(onSuccess,onFailure){var deferred=new Deferred(onSuccess,onFailure);if(state===RESOLVED){deferred.resolve(promiseValue)}else if(state===REJECTED){deferred.reject(promiseValue)}else{next.push(deferred)}return deferred.promise};function finish(type){state=type||REJECTED;next.map(function(deferred){if(state===RESOLVED){deferred.resolve(promiseValue)}else{deferred.reject(promiseValue)}})}function thennable(then,success,failure,notThennable){if((promiseValue!=null&&isObject(promiseValue)||isFunction(promiseValue))&&isFunction(then)){try{var count=0;then.call(promiseValue,function(value){if(count++)return;promiseValue=value;success()},function(value){if(count++)return;promiseValue=value;failure()})}catch(e){m.deferred.onerror(e);promiseValue=e;failure()}}else{notThennable()}}function fire(){var then;try{then=promiseValue&&promiseValue.then}catch(e){m.deferred.onerror(e);promiseValue=e;state=REJECTING;return fire()}if(state===REJECTING){m.deferred.onerror(promiseValue)}thennable(then,function(){state=RESOLVING;fire()},function(){state=REJECTING;fire()},function(){try{if(state===RESOLVING&&isFunction(onSuccess)){promiseValue=onSuccess(promiseValue)}else if(state===REJECTING&&isFunction(onFailure)){promiseValue=onFailure(promiseValue);state=RESOLVING}}catch(e){m.deferred.onerror(e);promiseValue=e;return finish()}if(promiseValue===self){promiseValue=TypeError();finish()}else{thennable(then,function(){finish(RESOLVED)},finish,function(){finish(state===RESOLVING&&RESOLVED)})}})}}m.deferred.onerror=function(e){if(type.call(e)==="[object Error]"&&!/ Error/.test(e.constructor.toString())){pendingRequests=0;throw e}};m.sync=function(args){var deferred=m.deferred();var outstanding=args.length;var results=[];var method="resolve";function synchronizer(pos,resolved){return function(value){results[pos]=value;if(!resolved)method="reject";if(--outstanding===0){deferred.promise(results);deferred[method](results)}return value}}if(args.length>0){forEach(args,function(arg,i){arg.then(synchronizer(i,true),synchronizer(i,false))})}else{deferred.resolve([])}return deferred.promise};function identity(value){return value}function handleJsonp(options){var callbackKey=options.callbackName||"mithril_callback_"+(new Date).getTime()+"_"+Math.round(Math.random()*1e16).toString(36);var script=$document.createElement("script");global[callbackKey]=function(resp){script.parentNode.removeChild(script);options.onload({type:"load",target:{responseText:resp}});global[callbackKey]=undefined};script.onerror=function(){script.parentNode.removeChild(script);options.onerror({type:"error",target:{status:500,responseText:JSON.stringify({error:"Error making jsonp request"})}});global[callbackKey]=undefined;return false};script.onload=function(){return false};script.src=options.url+(options.url.indexOf("?")>0?"&":"?")+(options.callbackKey?options.callbackKey:"callback")+"="+callbackKey+"&"+buildQueryString(options.data||{});$document.body.appendChild(script)}function createXhr(options){var xhr=new global.XMLHttpRequest;xhr.open(options.method,options.url,true,options.user,options.password);xhr.onreadystatechange=function(){if(xhr.readyState===4){if(xhr.status>=200&&xhr.status<300){options.onload({type:"load",target:xhr})}else{options.onerror({type:"error",target:xhr})}}};if(options.serialize===JSON.stringify&&options.data&&options.method!=="GET"){xhr.setRequestHeader("Content-Type","application/json; charset=utf-8")}if(options.deserialize===JSON.parse){xhr.setRequestHeader("Accept","application/json, text/*")}if(isFunction(options.config)){var maybeXhr=options.config(xhr,options);if(maybeXhr!=null)xhr=maybeXhr}var data=options.method==="GET"||!options.data?"":options.data;if(data&&!isString(data)&&data.constructor!==global.FormData){throw new Error("Request data should be either be a string or "+"FormData. Check the `serialize` option in `m.request`")}xhr.send(data);return xhr}function ajax(options){if(options.dataType&&options.dataType.toLowerCase()==="jsonp"){return handleJsonp(options)}else{return createXhr(options)}}function bindData(options,data,serialize){if(options.method==="GET"&&options.dataType!=="jsonp"){var prefix=options.url.indexOf("?")<0?"?":"&";var querystring=buildQueryString(data);options.url+=querystring?prefix+querystring:""}else{options.data=serialize(data)}}function parameterizeUrl(url,data){if(data){url=url.replace(/:[a-z]\w+/gi,function(token){var key=token.slice(1);var value=data[key]||token;delete data[key];return value})}return url}m.request=function(options){if(options.background!==true)m.startComputation();var deferred=new Deferred;var isJSONP=options.dataType&&options.dataType.toLowerCase()==="jsonp";var serialize,deserialize,extract;if(isJSONP){serialize=options.serialize=deserialize=options.deserialize=identity;extract=function(jsonp){return jsonp.responseText}}else{serialize=options.serialize=options.serialize||JSON.stringify;deserialize=options.deserialize=options.deserialize||JSON.parse;extract=options.extract||function(xhr){if(xhr.responseText.length||deserialize!==JSON.parse){return xhr.responseText}else{return null}}}options.method=(options.method||"GET").toUpperCase();options.url=parameterizeUrl(options.url,options.data);bindData(options,options.data,serialize);options.onload=options.onerror=function(ev){try{ev=ev||event;var response=deserialize(extract(ev.target,options));if(ev.type==="load"){if(options.unwrapSuccess){response=options.unwrapSuccess(response,ev.target)}if(isArray(response)&&options.type){forEach(response,function(res,i){response[i]=new options.type(res)})}else if(options.type){response=new options.type(response)}deferred.resolve(response)}else{if(options.unwrapError){response=options.unwrapError(response,ev.target)}deferred.reject(response)}}catch(e){deferred.reject(e);m.deferred.onerror(e)}finally{if(options.background!==true)m.endComputation()}};ajax(options);deferred.promise=propify(deferred.promise,options.initialValue);return deferred.promise};return m})},{}]},{},[]);var store=require("store");var page=require("page");var m=require("mithril");var containers=[];var internalState=[];var xstore={set:function(key,val,exp){store.set(key,{val:val,exp:exp,time:(new Date).getTime()})},get:function(key,def){var info=store.get(key);if(!info){return def}if((new Date).getTime()-info.time>info.exp){return def}return info.val}};function View(sidebar,content){return m(".page",[Sidebar(sidebar),Content(content)])}function Sidebar(options){return m(".sidebar",[m("a[href='/add']",{config:m.route},"Demo"),m("ul.feeds")])}function Content(content){return m(".content",content)}m.route.mode="hash";m.route(document.body,"/",{"/":{ctrl:function(){},view:function(){return View({current:"home"},[m("p","Here lies the listing view")])}},"/add":{ctrl:function(){},view:function(){return View({current:"adding"},[m("p","Adding subscription for more content")])}},"/dashboard/:user":{ctrl:function(){},view:function(){}}})},0);
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"store": "1.3.17",
"page": "1.7.1",
"mithril": "0.2.5"
}
}
<div class="sidebar">
<a class="subscribe">Add subscription</a>
<ul class="feeds"></ul>
</div>
<div class="content">
<div data-container="adding" class="hidden">Adding<a class="close">x</a></div>
<div data-container="listing" class="hidden">Listing</div>
<div data-container="posting" class="hidden">Posting</div>
<div data-container="loading" class="hidden">Loading...</div>
</div>
<script src="http://code.jquery.com/jquery.min.js"></script>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<link href='https://fonts.googleapis.com/css?family=Lato:400,100,100italic,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<style>
@import url(http://weloveiconfonts.com/api/?family=iconicfill|maki|zocial);
/* iconicfill */
[class*="iconicfill-"]:before {
font-family: 'IconicFill', sans-serif;
}
/* maki */
[class*="maki-"]:before {
font-family: 'maki', sans-serif;
}
/* zocial */
[class*="zocial-"]:before {
font-family: 'zocial', sans-serif;
}
body,html {
font-family: Lato;
height: 100%;
font-size: 16px;
background: hsl(0, 0%, 98%);
-webkit-font-smoothing: antialiased;
}
.sidebar {
width: 230px;
position: absolute;
top: 20px;
left: 0;
bottom: 0;
}
.sidebar .subscribe {
position: relative;
color: hsl(252, 3%, 34%);
font-weight: 600;
padding: 10px;
width: 100%;
display: inline-block;
padding-left: 42px;
cursor: pointer;
text-decoration: none;
}
.sidebar .subscribe:hover {
text-decoration: underline;
}
.sidebar .subscribe:after {
position: absolute;
left: 0;
top: 0;
font-family: 'IconicFill', sans-serif;
content: '\2795';
padding: 10px 15px 10px 16px;
}
.content {
left: 230px;
right: 0;
top: 0;
bottom: 0;
position: absolute;
margin: 20px;
padding: 20px 30px;
background: #FFF;
border-radius: .25rem;
box-shadow: 0 1px 0 hsla(0, 0%, 0%, 0.15);
border: 1px solid hsl(0, 0%, 91%);
}
</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment