made with requirebin
Created
August 5, 2016 01:52
-
-
Save nijikokun/5a9bcc06bc1c8b5debb5860775e3844a to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 () { | |
} | |
} | |
}) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"&¤tTarget.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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"store": "1.3.17", | |
"page": "1.7.1", | |
"mithril": "0.2.5" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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