diff --git a/.gitignore b/.gitignore index b242d98..2c57fc7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ +*.sw* *.pyc -*.log -*.scssc -*.swp -*.bak -*venv* +.vim-session +*~ +venv +build +node_modules +.sass_cache/* +deploy.sh diff --git a/.sass-cache/514fa3799610835bbe7db0c3da1e72336342ad65/blog.scssc b/.sass-cache/514fa3799610835bbe7db0c3da1e72336342ad65/blog.scssc new file mode 100644 index 0000000..792f053 Binary files /dev/null and b/.sass-cache/514fa3799610835bbe7db0c3da1e72336342ad65/blog.scssc differ diff --git a/.sass-cache/fc7a81cfad1b58f6069d77cf2150ff4a4d7652b6/rioblog.scssc b/.sass-cache/fc7a81cfad1b58f6069d77cf2150ff4a4d7652b6/rioblog.scssc new file mode 100644 index 0000000..6478ce1 Binary files /dev/null and b/.sass-cache/fc7a81cfad1b58f6069d77cf2150ff4a4d7652b6/rioblog.scssc differ diff --git a/; b/; deleted file mode 100644 index b9a4f2f..0000000 --- a/; +++ /dev/null @@ -1,59 +0,0 @@ -from __future__ import with_statement -from fabric.api import * -from fabric.contrib.console import confirm -from fabric.contrib.project import rsync_project -import fabric.operations as op - -env.hosts = ["wes@mgoal.ca:444"] - -@task -def buildTags(): - with lcd("./build"): - local("riot ../src/tags scripts/tags.min.js") - -@task -def buildScss(): - with lcd("./build"): - local("sassc ../src/styles/riotblog.scss > styles/riotblog.min.css") - -@task -def minifyJS(): - with lcd("./build"): - local("uglifyjs ../src/scripts/riotblog.js > scripts/riotblog.min.js") - -@task -def buildVenv(): - local("virtualenv -p $(which python3) ./venv") - with prefix("source ./venv/bin/activate"): - local("pip3 install -r requirements.txt") - local("mv venv ./build/") - -@task -def copyFiles(): - local("cp ./{blog.ini,blog.service} ./build/") - local("cp ./src/*py ./build/") - local("cp ./src/styles/*.css ./build/styles/") - local("cp -r ./src/templates ./build/templates") - -@task -def upload(): - run("mkdir -p ~/build") - rsync_project(local_dir="./build/", remote_dir="~/build/", delete=True, exclude=[".git"]) - -@task -def serveUp(): - sudo("cp -r /home/wes/build /srv/riotblog") - sudo("cp /home/wes/build/blog.service /etc/systemd/system/blog.service") - sudo("systemctl enable blog.service") - -@task(default=True) -def build(): - local("rm -r ./build") - local("mkdir -p build/{scripts,styles}") - buildTags() - buildScss() - minifyJS() - buildVenv() - copyFiles() - upload() - serveUp() diff --git a/build/posts.py b/build/posts.py index cb5e966..10e2160 100644 --- a/build/posts.py +++ b/build/posts.py @@ -22,3 +22,9 @@ class Posts: "author" : author } return jsonify(self.db.save(doc)) + + def getposts(self, start, end): + return jsonify([]) + + def getcomments(self, postID): + return jsonify([]) diff --git a/build/scripts/riotblog.min.js b/build/scripts/riotblog.min.js index a1e129b..ad24fdc 100644 --- a/build/scripts/riotblog.min.js +++ b/build/scripts/riotblog.min.js @@ -1 +1,6 @@ -riot.mount("post",{creator:"wes",title:"A cool post here"});riot.mount("bbutton"); \ No newline at end of file +(function(){"use strict";var __TAGS_CACHE=[];var __TAG_IMPL={};var GLOBAL_MIXIN="__global_mixin";var ATTRS_PREFIX="riot-";var REF_DIRECTIVES=["ref","data-ref"];var IS_DIRECTIVE="data-is";var CONDITIONAL_DIRECTIVE="if";var LOOP_DIRECTIVE="each";var LOOP_NO_REORDER_DIRECTIVE="no-reorder";var SHOW_DIRECTIVE="show";var HIDE_DIRECTIVE="hide";var T_STRING="string";var T_OBJECT="object";var T_UNDEF="undefined";var T_FUNCTION="function";var XLINK_NS="http://www.w3.org/1999/xlink";var XLINK_REGEX=/^xlink:(\w+)/;var WIN=typeof window===T_UNDEF?undefined:window;var RE_SPECIAL_TAGS=/^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?|opt(?:ion|group))$/;var RE_SPECIAL_TAGS_NO_OPTION=/^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?)$/;var RE_RESERVED_NAMES=/^(?:_(?:item|id|parent)|update|root|(?:un)?mount|mixin|is(?:Mounted|Loop)|tags|refs|parent|opts|trigger|o(?:n|ff|ne))$/;var RE_SVG_TAGS=/^(altGlyph|animate(?:Color)?|circle|clipPath|defs|ellipse|fe(?:Blend|ColorMatrix|ComponentTransfer|Composite|ConvolveMatrix|DiffuseLighting|DisplacementMap|Flood|GaussianBlur|Image|Merge|Morphology|Offset|SpecularLighting|Tile|Turbulence)|filter|font|foreignObject|g(?:lyph)?(?:Ref)?|image|line(?:arGradient)?|ma(?:rker|sk)|missing-glyph|path|pattern|poly(?:gon|line)|radialGradient|rect|stop|svg|switch|symbol|text(?:Path)?|tref|tspan|use)$/;var RE_HTML_ATTRS=/([-\w]+) ?= ?(?:"([^"]*)|'([^']*)|({[^}]*}))/g;var CASE_SENSITIVE_ATTRIBUTES={viewbox:"viewBox"};var RE_BOOL_ATTRS=/^(?:disabled|checked|readonly|required|allowfullscreen|auto(?:focus|play)|compact|controls|default|formnovalidate|hidden|ismap|itemscope|loop|multiple|muted|no(?:resize|shade|validate|wrap)?|open|reversed|seamless|selected|sortable|truespeed|typemustmatch)$/;var IE_VERSION=(WIN&&WIN.document||{}).documentMode|0;function isSVGTag(name){return RE_SVG_TAGS.test(name)}function isBoolAttr(value){return RE_BOOL_ATTRS.test(value)}function isFunction(value){return typeof value===T_FUNCTION}function isObject(value){return value&&typeof value===T_OBJECT}function isUndefined(value){return typeof value===T_UNDEF}function isString(value){return typeof value===T_STRING}function isBlank(value){return isUndefined(value)||value===null||value===""}function isArray(value){return Array.isArray(value)||value instanceof Array}function isWritable(obj,key){var descriptor=Object.getOwnPropertyDescriptor(obj,key);return isUndefined(obj[key])||descriptor&&descriptor.writable}function isReservedName(value){return RE_RESERVED_NAMES.test(value)}var check=Object.freeze({isSVGTag:isSVGTag,isBoolAttr:isBoolAttr,isFunction:isFunction,isObject:isObject,isUndefined:isUndefined,isString:isString,isBlank:isBlank,isArray:isArray,isWritable:isWritable,isReservedName:isReservedName});function $$(selector,ctx){return(ctx||document).querySelectorAll(selector)}function $(selector,ctx){return(ctx||document).querySelector(selector)}function createFrag(){return document.createDocumentFragment()}function createDOMPlaceholder(){return document.createTextNode("")}function mkEl(name,isSvg){return isSvg?document.createElementNS("http://www.w3.org/2000/svg","svg"):document.createElement(name)}function getOuterHTML(el){if(el.outerHTML){return el.outerHTML}else{var container=mkEl("div");container.appendChild(el.cloneNode(true));return container.innerHTML}}function setInnerHTML(container,html){if(!isUndefined(container.innerHTML)){container.innerHTML=html}else{var doc=(new DOMParser).parseFromString(html,"application/xml");var node=container.ownerDocument.importNode(doc.documentElement,true);container.appendChild(node)}}function remAttr(dom,name){dom.removeAttribute(name)}function getAttr(dom,name){return dom.getAttribute(name)}function setAttr(dom,name,val){var xlink=XLINK_REGEX.exec(name);if(xlink&&xlink[1]){dom.setAttributeNS(XLINK_NS,xlink[1],val)}else{dom.setAttribute(name,val)}}function safeInsert(root,curr,next){root.insertBefore(curr,next.parentNode&&next)}function walkAttrs(html,fn){if(!html){return}var m;while(m=RE_HTML_ATTRS.exec(html)){fn(m[1].toLowerCase(),m[2]||m[3]||m[4])}}function walkNodes(dom,fn,context){if(dom){var res=fn(dom,context);var next;if(res===false){return}dom=dom.firstChild;while(dom){next=dom.nextSibling;walkNodes(dom,fn,res);dom=next}}}var dom=Object.freeze({$$:$$,$:$,createFrag:createFrag,createDOMPlaceholder:createDOMPlaceholder,mkEl:mkEl,getOuterHTML:getOuterHTML,setInnerHTML:setInnerHTML,remAttr:remAttr,getAttr:getAttr,setAttr:setAttr,safeInsert:safeInsert,walkAttrs:walkAttrs,walkNodes:walkNodes});var styleNode;var cssTextProp;var byName={};var remainder=[];var needsInject=false;if(WIN){styleNode=function(){var newNode=mkEl("style");setAttr(newNode,"type","text/css");var userNode=$("style[type=riot]");if(userNode){if(userNode.id){newNode.id=userNode.id}userNode.parentNode.replaceChild(newNode,userNode)}else{document.getElementsByTagName("head")[0].appendChild(newNode)}return newNode}();cssTextProp=styleNode.styleSheet}var styleManager={styleNode:styleNode,add:function add(css,name){if(name){byName[name]=css}else{remainder.push(css)}needsInject=true},inject:function inject(){if(!WIN||!needsInject){return}needsInject=false;var style=Object.keys(byName).map(function(k){return byName[k]}).concat(remainder).join("\n");if(cssTextProp){cssTextProp.cssText=style}else{styleNode.innerHTML=style}}};var brackets=function(UNDEF){var REGLOB="g",R_MLCOMMS=/\/\*[^*]*\*+(?:[^*\/][^*]*\*+)*\//g,R_STRINGS=/"[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'/g,S_QBLOCKS=R_STRINGS.source+"|"+/(?:\breturn\s+|(?:[$\w\)\]]|\+\+|--)\s*(\/)(?![*\/]))/.source+"|"+/\/(?=[^*\/])[^[\/\\]*(?:(?:\[(?:\\.|[^\]\\]*)*\]|\\.)[^[\/\\]*)*?(\/)[gim]*/.source,UNSUPPORTED=RegExp("[\\"+"x00-\\x1F<>a-zA-Z0-9'\",;\\\\]"),NEED_ESCAPE=/(?=[[\]()*+?.^$|])/g,FINDBRACES={"(":RegExp("([()])|"+S_QBLOCKS,REGLOB),"[":RegExp("([[\\]])|"+S_QBLOCKS,REGLOB),"{":RegExp("([{}])|"+S_QBLOCKS,REGLOB)},DEFAULT="{ }";var _pairs=["{","}","{","}",/{[^}]*}/,/\\([{}])/g,/\\({)|{/g,RegExp("\\\\(})|([[({])|(})|"+S_QBLOCKS,REGLOB),DEFAULT,/^\s*{\^?\s*([$\w]+)(?:\s*,\s*(\S+))?\s+in\s+(\S.*)\s*}/,/(^|[^\\]){=[\S\s]*?}/];var cachedBrackets=UNDEF,_regex,_cache=[],_settings;function _loopback(re){return re}function _rewrite(re,bp){if(!bp){bp=_cache}return new RegExp(re.source.replace(/{/g,bp[2]).replace(/}/g,bp[3]),re.global?REGLOB:"")}function _create(pair){if(pair===DEFAULT){return _pairs}var arr=pair.split(" ");if(arr.length!==2||UNSUPPORTED.test(pair)){throw new Error('Unsupported brackets "'+pair+'"')}arr=arr.concat(pair.replace(NEED_ESCAPE,"\\").split(" "));arr[4]=_rewrite(arr[1].length>1?/{[\S\s]*?}/:_pairs[4],arr);arr[5]=_rewrite(pair.length>3?/\\({|})/g:_pairs[5],arr);arr[6]=_rewrite(_pairs[6],arr);arr[7]=RegExp("\\\\("+arr[3]+")|([[({])|("+arr[3]+")|"+S_QBLOCKS,REGLOB);arr[8]=pair;return arr}function _brackets(reOrIdx){return reOrIdx instanceof RegExp?_regex(reOrIdx):_cache[reOrIdx]}_brackets.split=function split(str,tmpl,_bp){if(!_bp){_bp=_cache}var parts=[],match,isexpr,start,pos,re=_bp[6];isexpr=start=re.lastIndex=0;while(match=re.exec(str)){pos=match.index;if(isexpr){if(match[2]){re.lastIndex=skipBraces(str,match[2],re.lastIndex);continue}if(!match[3]){continue}}if(!match[1]){unescapeStr(str.slice(start,pos));start=re.lastIndex;re=_bp[6+(isexpr^=1)];re.lastIndex=start}}if(str&&start tag",err.riotData.tagName)}console.error(err)}}function _create(str){var expr=_getTmpl(str);if(expr.slice(0,11)!=="try{return "){expr="return "+expr}return new Function("E",expr+";")}var CH_IDEXPR=String.fromCharCode(8279),RE_CSNAME=/^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/,RE_QBLOCK=RegExp(brackets.S_QBLOCKS,"g"),RE_DQUOTE=/\u2057/g,RE_QBMARK=/\u2057(\d+)~/g;function _getTmpl(str){var qstr=[],expr,parts=brackets.split(str.replace(RE_DQUOTE,'"'),1);if(parts.length>2||parts[0]){var i,j,list=[];for(i=j=0;i2&&!div?CH_IDEXPR+(qstr.push(s)-1)+"~":s}).replace(/\s+/g," ").trim().replace(/\ ?([[\({},?\.:])\ ?/g,"$1");if(expr){var list=[],cnt=0,match;while(expr&&(match=expr.match(RE_CSNAME))&&!match.index){var key,jsb,re=/,|([[{(])|$/g;expr=RegExp.rightContext;key=match[2]?qstr[match[2]].slice(1,-1).trim().replace(/\s+/g," "):match[1];while(jsb=(match=re.exec(expr))[1]){skipBraces(jsb,re)}jsb=expr.slice(0,match.index);expr=RegExp.rightContext;list[cnt++]=_wrapExpr(jsb,1,key)}expr=!cnt?_wrapExpr(expr,asText):cnt>1?"["+list.join(",")+'].join(" ").trim()':list[0]}return expr;function skipBraces(ch,re){var mm,lv=1,ir=RE_BREND[ch];ir.lastIndex=re.lastIndex;while(mm=ir.exec(expr)){if(mm[0]===ch){++lv}else if(!--lv){break}}re.lastIndex=lv?expr.length:ir.lastIndex}}var JS_CONTEXT='"in this?this:'+(typeof window!=="object"?"global":"window")+").",JS_VARNAME=/[,{][\$\w]+(?=:)|(^ *|[^$\w\.{])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,JS_NOPROPS=/^(?=(\.[$\w]+))\1(?:[^.[(]|$)/;function _wrapExpr(expr,asText,key){var tb;expr=expr.replace(JS_VARNAME,function(match,p,mvar,pos,s){if(mvar){pos=tb?0:pos+match.length;if(mvar!=="this"&&mvar!=="global"&&mvar!=="window"){match=p+'("'+mvar+JS_CONTEXT+mvar;if(pos){tb=(s=s[pos])==="."||s==="("||s==="["}}else if(pos){tb=!JS_NOPROPS.test(s.slice(pos))}}return match});if(tb){expr="try{return "+expr+"}catch(e){E(e,this)}"}if(key){expr=(tb?"function(){"+expr+"}.call(this)":"("+expr+")")+'?"'+key+'":""'}else if(asText){expr="function(v){"+(tb?expr.replace("return ","v="):"v=("+expr+")")+';return v||v===0?v:""}.call(this)'}return expr}_tmpl.version=brackets.version="v3.0.2";return _tmpl}();var observable$1=function(el){el=el||{};var callbacks={},slice=Array.prototype.slice;Object.defineProperties(el,{on:{value:function(event,fn){if(typeof fn=="function"){(callbacks[event]=callbacks[event]||[]).push(fn)}return el},enumerable:false,writable:false,configurable:false},off:{value:function(event,fn){if(event=="*"&&!fn){callbacks={}}else{if(fn){var arr=callbacks[event];for(var i=0,cb;cb=arr&&arr[i];++i){if(cb==fn){arr.splice(i--,1)}}}else{delete callbacks[event]}}return el},enumerable:false,writable:false,configurable:false},one:{value:function(event,fn){function on(){el.off(event,on);fn.apply(el,arguments)}return el.on(event,on)},enumerable:false,writable:false,configurable:false},trigger:{value:function(event){var arguments$1=arguments;var arglen=arguments.length-1,args=new Array(arglen),fns,fn,i;for(i=0;ij){i--;remove.apply(tags[i],[tags,i])}}function remove(tags,i){tags.splice(i,1);this.unmount();arrayishRemove(this.parent,this,this.__.tagName,true)}function moveNestedTags(i){var this$1=this;each(Object.keys(this.tags),function(tagName){var tag=this$1.tags[tagName];if(isArray(tag)){each(tag,function(t){moveChildTag.apply(t,[tagName,i])})}else{moveChildTag.apply(tag,[tagName,i])}})}function move(root,nextTag,isVirtual){if(isVirtual){moveVirtual.apply(this,[root,nextTag])}else{safeInsert(root,this.root,nextTag.root)}}function insert(root,nextTag,isVirtual){if(isVirtual){makeVirtual.apply(this,[root,nextTag])}else{safeInsert(root,this.root,nextTag.root)}}function append(root,isVirtual){if(isVirtual){makeVirtual.call(this,root)}else{root.appendChild(this.root)}}function _each(dom,parent,expr){remAttr(dom,LOOP_DIRECTIVE);var mustReorder=typeof getAttr(dom,LOOP_NO_REORDER_DIRECTIVE)!==T_STRING||remAttr(dom,LOOP_NO_REORDER_DIRECTIVE),tagName=getTagName(dom),impl=__TAG_IMPL[tagName],parentNode=dom.parentNode,placeholder=createDOMPlaceholder(),child=getTag(dom),ifExpr=getAttr(dom,CONDITIONAL_DIRECTIVE),tags=[],oldItems=[],hasKeys,isLoop=true,isAnonymous=!__TAG_IMPL[tagName],isVirtual=dom.tagName==="VIRTUAL";expr=tmpl.loopKeys(expr);expr.isLoop=true;if(ifExpr){remAttr(dom,CONDITIONAL_DIRECTIVE)}parentNode.insertBefore(placeholder,dom);parentNode.removeChild(dom);expr.update=function updateEach(){var items=tmpl(expr.val,parent),frag=createFrag(),isObject$$1=!isArray(items)&&!isString(items),root=placeholder.parentNode;if(isObject$$1){hasKeys=items||false;items=hasKeys?Object.keys(items).map(function(key){return mkitem(expr,items[key],key)}):[]}else{hasKeys=false}if(ifExpr){items=items.filter(function(item,i){if(expr.key&&!isObject$$1){return!!tmpl(ifExpr,mkitem(expr,item,i,parent))}return!!tmpl(ifExpr,extend(Object.create(parent),item))})}each(items,function(item,i){var doReorder=mustReorder&&typeof item===T_OBJECT&&!hasKeys,oldPos=oldItems.indexOf(item),isNew=oldPos===-1,pos=!isNew&&doReorder?oldPos:i,tag=tags[pos],mustAppend=i>=oldItems.length,mustCreate=doReorder&&isNew||!doReorder&&!tag;item=!hasKeys&&expr.key?mkitem(expr,item,i):item;if(mustCreate){tag=new Tag$1(impl,{parent:parent,isLoop:isLoop,isAnonymous:isAnonymous,tagName:tagName,root:dom.cloneNode(isAnonymous),item:item,index:i},dom.innerHTML);tag.mount();if(mustAppend){append.apply(tag,[frag||root,isVirtual])}else{insert.apply(tag,[root,tags[i],isVirtual])}if(!mustAppend){oldItems.splice(i,0,item)}tags.splice(i,0,tag);if(child){arrayishAdd(parent.tags,tagName,tag,true)}}else if(pos!==i&&doReorder){if(contains(items,oldItems[pos])){move.apply(tag,[root,tags[i],isVirtual]);tags.splice(i,0,tags.splice(pos,1)[0]);oldItems.splice(i,0,oldItems.splice(pos,1)[0])}else{remove.apply(tags[i],[tags,i]);oldItems.splice(i,1)}if(expr.pos){tag[expr.pos]=i}if(!child&&tag.tags){moveNestedTags.call(tag,i)}}tag.__.item=item;tag.__.index=i;tag.__.parent=parent;if(!mustCreate){tag.update(item)}});unmountRedundant(items,tags);oldItems=items.slice();root.insertBefore(frag,placeholder)};expr.unmount=function(){each(tags,function(t){t.unmount()})};return expr}function parseExpressions(root,expressions,mustIncludeRoot){var this$1=this;var tree={parent:{children:expressions}};walkNodes(root,function(dom,ctx){var type=dom.nodeType,parent=ctx.parent,attr,expr,tagImpl;if(!mustIncludeRoot&&dom===root){return{parent:parent}}if(type===3&&dom.parentNode.tagName!=="STYLE"&&tmpl.hasExpr(dom.nodeValue)){parent.children.push({dom:dom,expr:dom.nodeValue})}if(type!==1){return ctx}var isVirtual=dom.tagName==="VIRTUAL";if(attr=getAttr(dom,LOOP_DIRECTIVE)){if(isVirtual){setAttr(dom,"loopVirtual",true)}parent.children.push(_each(dom,this$1,attr));return false}if(attr=getAttr(dom,CONDITIONAL_DIRECTIVE)){parent.children.push(Object.create(IfExpr).init(dom,this$1,attr));return false}if(expr=getAttr(dom,IS_DIRECTIVE)){if(tmpl.hasExpr(expr)){parent.children.push({isRtag:true,expr:expr,dom:dom,attrs:[].slice.call(dom.attributes)});return false}}tagImpl=getTag(dom);if(isVirtual){if(getAttr(dom,"virtualized")){dom.parentElement.removeChild(dom)}if(!tagImpl&&!getAttr(dom,"virtualized")&&!getAttr(dom,"loopVirtual")){tagImpl={tmpl:dom.outerHTML}}}if(tagImpl&&(dom!==root||mustIncludeRoot)){if(isVirtual&&!getAttr(dom,IS_DIRECTIVE)){setAttr(dom,"virtualized",true);var tag=new Tag$1({tmpl:dom.outerHTML},{root:dom,parent:this$1},dom.innerHTML);parent.children.push(tag)}else{var conf={root:dom,parent:this$1,hasImpl:true};parent.children.push(initChildTag(tagImpl,conf,dom.innerHTML,this$1));return false}}parseAttributes.apply(this$1,[dom,dom.attributes,function(attr,expr){if(!expr){return}parent.children.push(expr)}]);return{parent:parent}},tree);return{tree:tree,root:root}}function parseAttributes(dom,attrs,fn){var this$1=this;each(attrs,function(attr){var name=attr.name,bool=isBoolAttr(name),expr;if(contains(REF_DIRECTIVES,name)){expr=Object.create(RefExpr).init(dom,this$1,name,attr.value)}else if(tmpl.hasExpr(attr.value)){expr={dom:dom,expr:attr.value,attr:attr.name,bool:bool}}fn(attr,expr)})}var reHasYield=/|>([\S\s]*?)<\/yield\s*>|>)/gi;var reYieldSrc=/]*)['"]\s*>([\S\s]*?)<\/yield\s*>/gi;var reYieldDest=/|>([\S\s]*?)<\/yield\s*>)/gi;var rootEls={tr:"tbody",th:"tr",td:"tr",col:"colgroup"};var tblTags=IE_VERSION&&IE_VERSION<10?RE_SPECIAL_TAGS:RE_SPECIAL_TAGS_NO_OPTION;var GENERIC="div";function specialTags(el,tmpl,tagName){var select=tagName[0]==="o",parent=select?"select>":"table>";el.innerHTML="<"+parent+tmpl.trim()+"-1}}function normalizeName(name){if(typeof name!=="string"){name=String(name)}if(/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)){throw new TypeError("Invalid character in header field name")}return name.toLowerCase()}function normalizeValue(value){if(typeof value!=="string"){value=String(value)}return value}function iteratorFor(items){var iterator={next:function(){var value=items.shift();return{done:value===undefined,value:value}}};if(support.iterable){iterator[Symbol.iterator]=function(){return iterator}}return iterator}function Headers(headers){this.map={};if(headers instanceof Headers){headers.forEach(function(value,name){this.append(name,value)},this)}else if(headers){Object.getOwnPropertyNames(headers).forEach(function(name){this.append(name,headers[name])},this)}}Headers.prototype.append=function(name,value){name=normalizeName(name);value=normalizeValue(value);var oldValue=this.map[name];this.map[name]=oldValue?oldValue+","+value:value};Headers.prototype["delete"]=function(name){delete this.map[normalizeName(name)]};Headers.prototype.get=function(name){name=normalizeName(name);return this.has(name)?this.map[name]:null};Headers.prototype.has=function(name){return this.map.hasOwnProperty(normalizeName(name))};Headers.prototype.set=function(name,value){this.map[normalizeName(name)]=normalizeValue(value)};Headers.prototype.forEach=function(callback,thisArg){var this$1=this;for(var name in this$1.map){if(this$1.map.hasOwnProperty(name)){callback.call(thisArg,this$1.map[name],name,this$1)}}};Headers.prototype.keys=function(){var items=[];this.forEach(function(value,name){items.push(name)});return iteratorFor(items)};Headers.prototype.values=function(){var items=[];this.forEach(function(value){items.push(value)});return iteratorFor(items)};Headers.prototype.entries=function(){var items=[];this.forEach(function(value,name){items.push([name,value])});return iteratorFor(items)};if(support.iterable){Headers.prototype[Symbol.iterator]=Headers.prototype.entries}function consumed(body){if(body.bodyUsed){return Promise.reject(new TypeError("Already read"))}body.bodyUsed=true}function fileReaderReady(reader){return new Promise(function(resolve,reject){reader.onload=function(){resolve(reader.result)};reader.onerror=function(){reject(reader.error)}})}function readBlobAsArrayBuffer(blob){var reader=new FileReader;var promise=fileReaderReady(reader);reader.readAsArrayBuffer(blob);return promise}function readBlobAsText(blob){var reader=new FileReader;var promise=fileReaderReady(reader);reader.readAsText(blob);return promise}function readArrayBufferAsText(buf){var view=new Uint8Array(buf);var chars=new Array(view.length);for(var i=0;i-1?upcased:method}function Request(input,options){options=options||{};var body=options.body;if(input instanceof Request){if(input.bodyUsed){throw new TypeError("Already read")}this.url=input.url;this.credentials=input.credentials;if(!options.headers){this.headers=new Headers(input.headers)}this.method=input.method;this.mode=input.mode;if(!body&&input._bodyInit!=null){body=input._bodyInit;input.bodyUsed=true}}else{this.url=String(input)}this.credentials=options.credentials||this.credentials||"omit";if(options.headers||!this.headers){this.headers=new Headers(options.headers)}this.method=normalizeMethod(options.method||this.method||"GET");this.mode=options.mode||this.mode||null;this.referrer=null;if((this.method==="GET"||this.method==="HEAD")&&body){throw new TypeError("Body not allowed for GET or HEAD requests")}this._initBody(body)}Request.prototype.clone=function(){return new Request(this,{body:this._bodyInit})};function decode(body){var form=new FormData;body.trim().split("&").forEach(function(bytes){if(bytes){var split=bytes.split("=");var name=split.shift().replace(/\+/g," ");var value=split.join("=").replace(/\+/g," ");form.append(decodeURIComponent(name),decodeURIComponent(value))}});return form}function parseHeaders(rawHeaders){var headers=new Headers;rawHeaders.split(/\r?\n/).forEach(function(line){var parts=line.split(":");var key=parts.shift().trim();if(key){var value=parts.join(":").trim();headers.append(key,value)}});return headers}Body.call(Request.prototype);function Response(bodyInit,options){if(!options){options={}}this.type="default";this.status="status"in options?options.status:200;this.ok=this.status>=200&&this.status<300;this.statusText="statusText"in options?options.statusText:"OK";this.headers=new Headers(options.headers);this.url=options.url||"";this._initBody(bodyInit)}Body.call(Response.prototype);Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})};Response.error=function(){var response=new Response(null,{status:0,statusText:""});response.type="error";return response};var redirectStatuses=[301,302,303,307,308];Response.redirect=function(url,status){if(redirectStatuses.indexOf(status)===-1){throw new RangeError("Invalid status code")}return new Response(null,{status:status,headers:{location:url}})};self.Headers=Headers;self.Request=Request;self.Response=Response;self.fetch=function(input,init){return new Promise(function(resolve,reject){var request=new Request(input,init);var xhr=new XMLHttpRequest;xhr.onload=function(){var options={status:xhr.status,statusText:xhr.statusText,headers:parseHeaders(xhr.getAllResponseHeaders()||"")};options.url="responseURL"in xhr?xhr.responseURL:options.headers.get("X-Request-URL");var body="response"in xhr?xhr.response:xhr.responseText;resolve(new Response(body,options))};xhr.onerror=function(){reject(new TypeError("Network request failed"))};xhr.ontimeout=function(){reject(new TypeError("Network request failed"))};xhr.open(request.method,request.url,true);if(request.credentials==="include"){xhr.withCredentials=true}if("responseType"in xhr&&support.blob){xhr.responseType="blob"}request.headers.forEach(function(value,name){xhr.setRequestHeader(name,value)});xhr.send(typeof request._bodyInit==="undefined"?null:request._bodyInit)})};self.fetch.polyfill=true})(typeof self!=="undefined"?self:undefined);riot$1.tag2("comments",'
Your comment is too long!
',"","",function(opts){this.comments=[];this.maxlength=700;this.placeholder="Comment here!";this.focused=false;this.maxed="";this.warn=false;this.disabled="";this.loading=true;this.clearplaceholder=function(){if(!this.focused){this.update({placeholder:"",focused:true})}}.bind(this);this.checkplaceholder=function(){if(this.refs.textarea.value.trim().length==0){this.update({placeholder:"Comment here!",focused:false})}}.bind(this);this.closewarning=function(){this.update({warn:false})}.bind(this);this.echo=function(ev){if(this.refs.textarea.value.length>=maxlength){this.update({maxed:"maxinput",warn:true})}else{this.update({maxed:"",warn:false});window.setTimeout(this.closewarning,5e3)}}.bind(this);var self=this;this.getComments=function(pid){fetch("/blog/comments/"+pid).then(function(resp){return resp.text()}).then(function(body){self.update({comments:JSON.parse(body),loading:false})})}.bind(this);this.on("mount",function(){this.getComments(self.opts.pid)})});var _isPlaceholder$1=function _isPlaceholder(a){return a!=null&&typeof a==="object"&&a["@@functional/placeholder"]===true};var _isPlaceholder=_isPlaceholder$1;var _curry1$1=function _curry1(fn){return function f1(a){if(arguments.length===0||_isPlaceholder(a)){return f1}else{return fn.apply(this,arguments)}}};var _curry1=_curry1$1;var always$1=_curry1(function always(val){return function(){return val}});var always=always$1;var F=always(false);var always$3=always$1;var T=always$3(true);var __={"@@functional/placeholder":true};var _curry1$3=_curry1$1;var _isPlaceholder$3=_isPlaceholder$1;var _curry2$1=function _curry2(fn){return function f2(a,b){switch(arguments.length){case 0:return f2;case 1:return _isPlaceholder$3(a)?f2:_curry1$3(function(_b){return fn(a,_b)});default:return _isPlaceholder$3(a)&&_isPlaceholder$3(b)?f2:_isPlaceholder$3(a)?_curry1$3(function(_a){return fn(_a,b)}):_isPlaceholder$3(b)?_curry1$3(function(_b){return fn(a,_b)}):fn(a,b)}}};var _curry2=_curry2$1;var add=_curry2(function add(a,b){return Number(a)+Number(b)});var _concat$1=function _concat(set1,set2){set1=set1||[];set2=set2||[];var idx;var len1=set1.length;var len2=set2.length;var result=[];idx=0;while(idx=arguments$1.length)){result=received[combinedIdx]}else{result=arguments$1[argsIdx];argsIdx+=1}combined[combinedIdx]=result;if(!_isPlaceholder$4(result)){left-=1}combinedIdx+=1}return left<=0?fn.apply(this,combined):_arity$3(left,_curryN(length,combined,fn))}};var _arity=_arity$1;var _curry1$5=_curry1$1;var _curry2$3=_curry2$1;var _curryN=_curryN$1;var curryN$1=_curry2$3(function curryN(length,fn){if(length===1){return _curry1$5(fn)}return _arity(length,_curryN(length,[],fn))});var _concat=_concat$1;var _curry1$4=_curry1$1;var curryN=curryN$1;var addIndex=_curry1$4(function addIndex(fn){return curryN(fn.length,function(){var idx=0;var origFn=arguments[0];var list=arguments[arguments.length-1];var args=Array.prototype.slice.call(arguments,0);args[0]=function(){var result=origFn.apply(this,_concat(arguments,[idx,list]));idx+=1;return result};return fn.apply(this,args)})});var _curry1$6=_curry1$1;var _curry2$4=_curry2$1;var _isPlaceholder$5=_isPlaceholder$1;var _curry3$1=function _curry3(fn){return function f3(a,b,c){switch(arguments.length){case 0:return f3;case 1:return _isPlaceholder$5(a)?f3:_curry2$4(function(_b,_c){return fn(a,_b,_c)});case 2:return _isPlaceholder$5(a)&&_isPlaceholder$5(b)?f3:_isPlaceholder$5(a)?_curry2$4(function(_a,_c){return fn(_a,b,_c)}):_isPlaceholder$5(b)?_curry2$4(function(_b,_c){return fn(a,_b,_c)}):_curry1$6(function(_c){return fn(a,b,_c)});default:return _isPlaceholder$5(a)&&_isPlaceholder$5(b)&&_isPlaceholder$5(c)?f3:_isPlaceholder$5(a)&&_isPlaceholder$5(b)?_curry2$4(function(_a,_b){return fn(_a,_b,c)}):_isPlaceholder$5(a)&&_isPlaceholder$5(c)?_curry2$4(function(_a,_c){return fn(_a,b,_c)}):_isPlaceholder$5(b)&&_isPlaceholder$5(c)?_curry2$4(function(_b,_c){return fn(a,_b,_c)}):_isPlaceholder$5(a)?_curry1$6(function(_a){return fn(_a,b,c)}):_isPlaceholder$5(b)?_curry1$6(function(_b){return fn(a,_b,c)}):_isPlaceholder$5(c)?_curry1$6(function(_c){return fn(a,b,_c)}):fn(a,b,c)}}};var _concat$3=_concat$1;var _curry3=_curry3$1;var adjust=_curry3(function adjust(fn,idx,list){if(idx>=list.length||idx<-list.length){return list}var start=idx<0?list.length:0;var _idx=start+idx;var _list=_concat$3(list);_list[_idx]=fn(list[_idx]);return _list});var _isArray$1=Array.isArray||function _isArray(val){return val!=null&&val.length>=0&&Object.prototype.toString.call(val)==="[object Array]"};var _isTransformer$1=function _isTransformer(obj){return typeof obj["@@transducer/step"]==="function"};var _isArray=_isArray$1;var _isTransformer=_isTransformer$1;var _dispatchable$1=function _dispatchable(methodNames,xf,fn){return function(){if(arguments.length===0){return fn()}var args=Array.prototype.slice.call(arguments,0);var obj=args.pop();if(!_isArray(obj)){var idx=0;while(idxa?b:a});var _map$1=function _map(fn,functor){var idx=0;var len=functor.length;var result=Array(len);while(idx0){return x.hasOwnProperty(0)&&x.hasOwnProperty(x.length-1)}return false});var _xwrap=_xwrap$1;var bind=bind$1;var isArrayLike=isArrayLike$1;var _reduce$1=function(){function _arrayReduce(xf,acc,list){var idx=0;var len=list.length;while(idx=0){prop=nonEnumerableProps[nIdx];if(_has(prop,obj)&&!contains(ks,prop)){ks[ks.length]=prop}nIdx-=1}}return ks})}();var _curry2$9=_curry2$1;var _dispatchable$3=_dispatchable$1;var _map=_map$1;var _reduce=_reduce$1;var _xmap=_xmap$1;var curryN$4=curryN$1;var keys=keys$1;var map$1=_curry2$9(_dispatchable$3(["map"],_xmap,function map(fn,functor){switch(Object.prototype.toString.call(functor)){case"[object Function]":return curryN$4(functor.length,function(){return fn.call(this,functor.apply(this,arguments))});case"[object Object]":return _reduce(function(acc,key){acc[key]=fn(functor[key]);return acc},{},keys(functor));default:return _map(fn,functor)}}));var _curry2$12=_curry2$1;var prop$1=_curry2$12(function prop(p,obj){return obj[p]});var _curry2$8=_curry2$1;var map=map$1;var prop=prop$1;var pluck$1=_curry2$8(function pluck(p,list){return map(prop(p),list)});var _curry3$3=_curry3$1;var _reduce$3=_reduce$1;var reduce$1=_curry3$3(_reduce$3);var _curry1$7=_curry1$1;var curryN$3=curryN$1;var max=max$1;var pluck=pluck$1;var reduce=reduce$1;var allPass=_curry1$7(function allPass(preds){return curryN$3(reduce(max,0,pluck("length",preds)),function(){var arguments$1=arguments;var this$1=this;var idx=0;var len=preds.length;while(idx=0?limit:0);while(idxbb?1:0});var _curry3$5=_curry3$1;var assoc=_curry3$5(function assoc(prop,val,obj){var result={};for(var p in obj){result[p]=obj[p]}result[prop]=val;return result});var _isInteger$1=Number.isInteger||function _isInteger(n){return n<<0===n};var _curry3$6=_curry3$1;var _has$4=_has$1;var _isArray$4=_isArray$1;var _isInteger=_isInteger$1;var assoc$2=assoc;var assocPath=_curry3$6(function assocPath(path,val,obj){if(path.length===0){return val}var idx=path[0];if(path.length>1){var nextObj=_has$4(idx,obj)?obj[idx]:_isInteger(path[1])?[]:{};val=assocPath(Array.prototype.slice.call(path,1),val,nextObj)}if(_isInteger(idx)&&_isArray$4(obj)){var arr=[].concat(obj);arr[idx]=val;return arr}else{return assoc$2(idx,val,obj)}});var _curry2$21=_curry2$1;var nAry$1=_curry2$21(function nAry(n,fn){switch(n){case 0:return function(){return fn.call(this)};case 1:return function(a0){return fn.call(this,a0)};case 2:return function(a0,a1){return fn.call(this,a0,a1)};case 3:return function(a0,a1,a2){return fn.call(this,a0,a1,a2)};case 4:return function(a0,a1,a2,a3){return fn.call(this,a0,a1,a2,a3)};case 5:return function(a0,a1,a2,a3,a4){return fn.call(this,a0,a1,a2,a3,a4)};case 6:return function(a0,a1,a2,a3,a4,a5){return fn.call(this,a0,a1,a2,a3,a4,a5)};case 7:return function(a0,a1,a2,a3,a4,a5,a6){return fn.call(this,a0,a1,a2,a3,a4,a5,a6)};case 8:return function(a0,a1,a2,a3,a4,a5,a6,a7){return fn.call(this,a0,a1,a2,a3,a4,a5,a6,a7)};case 9:return function(a0,a1,a2,a3,a4,a5,a6,a7,a8){return fn.call(this,a0,a1,a2,a3,a4,a5,a6,a7,a8)};case 10:return function(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){return fn.call(this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)};default:throw new Error("First argument to nAry must be a non-negative integer no greater than ten")}});var _curry1$13=_curry1$1;var nAry=nAry$1;var binary=_curry1$13(function binary(fn){return nAry(2,fn)});var _isFunction$1=function _isFunction(x){return Object.prototype.toString.call(x)==="[object Function]"};var _curry2$23=_curry2$1;var _reduce$5=_reduce$1;var ap$2=ap;var curryN$7=curryN$1;var map$5=map$1;var liftN$1=_curry2$23(function liftN(arity,fn){var lifted=curryN$7(arity,fn);return curryN$7(arity,function(){return _reduce$5(ap$2,map$5(lifted,arguments[0]),Array.prototype.slice.call(arguments,1))})});var _curry1$14=_curry1$1;var liftN=liftN$1;var lift$1=_curry1$14(function lift(fn){return liftN(fn.length,fn)});var _curry2$22=_curry2$1;var _isFunction=_isFunction$1;var and$2=and;var lift=lift$1;var both=_curry2$22(function both(f,g){return _isFunction(f)?function _both(){return f.apply(this,arguments)&&g.apply(this,arguments)}:lift(and$2)(f,g)});var _curry1$15=_curry1$1;var curryN$8=curryN$1;var curry$1=_curry1$15(function curry(fn){return curryN$8(fn.length,fn)});var curry=curry$1;var call=curry(function call(fn){return fn.apply(this,Array.prototype.slice.call(arguments,1))});var isArrayLike$3=isArrayLike$1;var _makeFlat$1=function _makeFlat(recursive){return function flatt(list){var value,jlen,j;var result=[];var idx=0;var ilen=list.length;while(idxmax){throw new Error("min must not be greater than max in clamp(min, max, value)")}return valuemax?max:value});var _cloneRegExp$1=function _cloneRegExp(pattern){return new RegExp(pattern.source,(pattern.global?"g":"")+(pattern.ignoreCase?"i":"")+(pattern.multiline?"m":"")+(pattern.sticky?"y":"")+(pattern.unicode?"u":""))};var _curry1$17=_curry1$1;var type$1=_curry1$17(function type(val){return val===null?"Null":val===undefined?"Undefined":Object.prototype.toString.call(val).slice(8,-1)});var _cloneRegExp=_cloneRegExp$1;var type=type$1;var _clone$1=function _clone(value,refFrom,refTo,deep){var copy=function copy(copiedValue){var len=refFrom.length;var idx=0;while(idx=0){if(stackA[idx]===a){return stackB[idx]===b}idx-=1}stackA.push(a);stackB.push(b);idx=keysA.length-1;while(idx>=0){var key=keysA[idx];if(!(_has$5(key,b)&&_equals(b[key],a[key],stackA,stackB))){return false}idx-=1}stackA.pop();stackB.pop();return true};var _curry2$27=_curry2$1;var _equals=_equals$1;var equals$1=_curry2$27(function equals(a,b){return _equals(a,b,[],[])});var equals=equals$1;var _indexOf$1=function _indexOf(list,a,idx){var inf,item;if(typeof list.indexOf==="function"){switch(typeof a){case"number":if(a===0){inf=1/a;while(idx=0};var _quote$1=function _quote(s){var escaped=s.replace(/\\/g,"\\\\").replace(/[\b]/g,"\\b").replace(/\f/g,"\\f").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/\v/g,"\\v").replace(/\0/g,"\\0");return'"'+escaped.replace(/"/g,'\\"')+'"'};var _toISOString$1=function(){var pad=function pad(n){return(n<10?"0":"")+n};return typeof Date.prototype.toISOString==="function"?function _toISOString(d){return d.toISOString()}:function _toISOString(d){return d.getUTCFullYear()+"-"+pad(d.getUTCMonth()+1)+"-"+pad(d.getUTCDate())+"T"+pad(d.getUTCHours())+":"+pad(d.getUTCMinutes())+":"+pad(d.getUTCSeconds())+"."+(d.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"}}();var _complement$1=function _complement(f){return function(){return!f.apply(this,arguments)}};var _filter$1=function _filter(fn,list){var idx=0;var len=list.length;var result=[];while(idx":_toString(y,xs)};var mapPairs=function(obj,keys){return _map$3(function(k){return _quote(k)+": "+recur(obj[k])},keys.slice().sort())};switch(Object.prototype.toString.call(x)){case"[object Arguments]":return"(function() { return arguments; }("+_map$3(recur,x).join(", ")+"))";case"[object Array]":return"["+_map$3(recur,x).concat(mapPairs(x,reject(function(k){return/^\d+$/.test(k)},keys$4(x)))).join(", ")+"]";case"[object Boolean]":return typeof x==="object"?"new Boolean("+recur(x.valueOf())+")":x.toString();case"[object Date]":return"new Date("+(isNaN(x.valueOf())?recur(NaN):_quote(_toISOString(x)))+")";case"[object Null]":return"null";case"[object Number]":return typeof x==="object"?"new Number("+recur(x.valueOf())+")":1/x===-Infinity?"-0":x.toString(10);case"[object String]":return typeof x==="object"?"new String("+recur(x.valueOf())+")":_quote(x);case"[object Undefined]":return"undefined";default:if(typeof x.toString==="function"){var repr=x.toString();if(repr!=="[object Object]"){return repr}}return"{"+mapPairs(x,keys$4(x)).join(", ")+"}"}};var _curry1$22=_curry1$1;var _toString=_toString$1;var toString_1=_curry1$22(function toString(val){return _toString(val,[])});var _curry2$26=_curry2$1;var _isArray$6=_isArray$1;var _isFunction$3=_isFunction$1;var toString=toString_1;var concat=_curry2$26(function concat(a,b){if(a==null||!_isFunction$3(a.concat)){throw new TypeError(toString(a)+' does not have a method named "concat"')}if(_isArray$6(a)&&!_isArray$6(b)){throw new TypeError(toString(b)+" is not an array")}return a.concat(b)});var _arity$7=_arity$1;var _curry1$23=_curry1$1;var map$9=map$1;var max$5=max$1;var reduce$7=reduce$1;var cond=_curry1$23(function cond(pairs){var arity=reduce$7(max$5,0,map$9(function(pair){return pair[0].length},pairs));return _arity$7(arity,function(){var arguments$1=arguments;var this$1=this;var idx=0;while(idx10){throw new Error("Constructor with greater than ten arguments")}if(n===0){return function(){return new Fn}}return curry$3(nAry$3(n,function($0,$1,$2,$3,$4,$5,$6,$7,$8,$9){switch(arguments.length){case 1:return new Fn($0);case 2:return new Fn($0,$1);case 3:return new Fn($0,$1,$2);case 4:return new Fn($0,$1,$2,$3);case 5:return new Fn($0,$1,$2,$3,$4);case 6:return new Fn($0,$1,$2,$3,$4,$5);case 7:return new Fn($0,$1,$2,$3,$4,$5,$6);case 8:return new Fn($0,$1,$2,$3,$4,$5,$6,$7);case 9:return new Fn($0,$1,$2,$3,$4,$5,$6,$7,$8);case 10:return new Fn($0,$1,$2,$3,$4,$5,$6,$7,$8,$9)}}))});var _curry1$24=_curry1$1;var constructN=constructN$1;var construct=_curry1$24(function construct(Fn){return constructN(Fn.length,Fn)});var _contains$3=_contains$1;var _curry2$33=_curry2$1;var contains$1=_curry2$33(_contains$3);var _curry2$34=_curry2$1;var _map$4=_map$1;var curryN$9=curryN$1;var max$6=max$1;var pluck$5=pluck$1;var reduce$8=reduce$1;var converge=_curry2$34(function converge(after,fns){return curryN$9(reduce$8(max$6,0,pluck$5("length",fns)),function(){var args=arguments;var context=this;return after.apply(context,_map$4(function(fn){return fn.apply(context,args)},fns))})});var _curryN$4=_curryN$1;var _has$7=_has$1;var _xfBase$8=_xfBase$1;var _xreduceBy$1=function(){function XReduceBy(valueFn,valueAcc,keyFn,xf){this.valueFn=valueFn;this.valueAcc=valueAcc;this.keyFn=keyFn;this.xf=xf;this.inputs={}}XReduceBy.prototype["@@transducer/init"]=_xfBase$8.init;XReduceBy.prototype["@@transducer/result"]=function(result){var this$1=this;var key;for(key in this$1.inputs){if(_has$7(key,this$1.inputs)){result=this$1.xf["@@transducer/step"](result,this$1.inputs[key]);if(result["@@transducer/reduced"]){result=result["@@transducer/value"];break}}}this.inputs=null;return this.xf["@@transducer/result"](result)};XReduceBy.prototype["@@transducer/step"]=function(result,input){var key=this.keyFn(input);this.inputs[key]=this.inputs[key]||[key,this.valueAcc];this.inputs[key][1]=this.valueFn(this.inputs[key][1],input);return result};return _curryN$4(4,[],function _xreduceBy(valueFn,valueAcc,keyFn,xf){return new XReduceBy(valueFn,valueAcc,keyFn,xf)})}();var _curryN$3=_curryN$1;var _dispatchable$8=_dispatchable$1;var _has$6=_has$1;var _reduce$8=_reduce$1;var _xreduceBy=_xreduceBy$1;var reduceBy$1=_curryN$3(4,[],_dispatchable$8([],_xreduceBy,function reduceBy(valueFn,valueAcc,keyFn,list){return _reduce$8(function(acc,elt){var key=keyFn(elt);acc[key]=valueFn(_has$6(key,acc)?acc[key]:valueAcc,elt);return acc},{},list)}));var reduceBy=reduceBy$1;var countBy=reduceBy(function(acc,elem){return acc+1},0);var add$2=add;var dec=add$2(-1);var _curry3$9=_curry3$1;var descend=_curry3$9(function descend(fn,a,b){var aa=fn(a);var bb=fn(b);return aa>bb?-1:aa0){this.n-=1;return result}return this.xf["@@transducer/step"](result,input)};return _curry2$41(function _xdrop(n,xf){return new XDrop(n,xf)})}();var _curry2$40=_curry2$1;var _dispatchable$9=_dispatchable$1;var _xdrop=_xdrop$1;var slice$3=slice$1;var drop=_curry2$40(_dispatchable$9(["drop"],_xdrop,function drop(n,xs){return slice$3(Math.max(0,n),Infinity,xs)}));var _curry2$44=_curry2$1;var _reduced$4=_reduced$1;var _xfBase$10=_xfBase$1;var _xtake$1=function(){function XTake(n,xf){this.xf=xf;this.n=n;this.i=0}XTake.prototype["@@transducer/init"]=_xfBase$10.init;XTake.prototype["@@transducer/result"]=_xfBase$10.result;XTake.prototype["@@transducer/step"]=function(result,input){this.i+=1;var ret=this.n===0?result:this.xf["@@transducer/step"](result,input);return this.i>=this.n?_reduced$4(ret):ret};return _curry2$44(function _xtake(n,xf){return new XTake(n,xf)})}();var _curry2$43=_curry2$1;var _dispatchable$11=_dispatchable$1;var _xtake=_xtake$1;var slice$4=slice$1;var take$1=_curry2$43(_dispatchable$11(["take"],_xtake,function take(n,xs){return slice$4(0,n<0?Infinity:n,xs)}));var take=take$1;var _dropLast$1=function dropLast(n,xs){return take(n=0&&pred(list[idx])){idx-=1}return Array.prototype.slice.call(list,0,idx+1)};var _curry2$47=_curry2$1;var _reduce$9=_reduce$1;var _xfBase$12=_xfBase$1;var _xdropLastWhile$1=function(){function XDropLastWhile(fn,xf){this.f=fn;this.retained=[];this.xf=xf}XDropLastWhile.prototype["@@transducer/init"]=_xfBase$12.init;XDropLastWhile.prototype["@@transducer/result"]=function(result){this.retained=null;return this.xf["@@transducer/result"](result)};XDropLastWhile.prototype["@@transducer/step"]=function(result,input){return this.f(input)?this.retain(result,input):this.flush(result,input)};XDropLastWhile.prototype.flush=function(result,input){result=_reduce$9(this.xf["@@transducer/step"],result,this.retained);this.retained=[];return this.xf["@@transducer/step"](result,input)};XDropLastWhile.prototype.retain=function(result,input){this.retained.push(input);return result};return _curry2$47(function _xdropLastWhile(fn,xf){return new XDropLastWhile(fn,xf)})}();var _curry2$46=_curry2$1;var _dispatchable$12=_dispatchable$1;var _dropLastWhile=_dropLastWhile$1;var _xdropLastWhile=_xdropLastWhile$1;var dropLastWhile=_curry2$46(_dispatchable$12([],_xdropLastWhile,_dropLastWhile));var _curry2$48=_curry2$1;var _xfBase$13=_xfBase$1;var _xdropRepeatsWith$1=function(){function XDropRepeatsWith(pred,xf){this.xf=xf;this.pred=pred;this.lastValue=undefined;this.seenFirstValue=false}XDropRepeatsWith.prototype["@@transducer/init"]=_xfBase$13.init;XDropRepeatsWith.prototype["@@transducer/result"]=_xfBase$13.result;XDropRepeatsWith.prototype["@@transducer/step"]=function(result,input){var sameAsLast=false;if(!this.seenFirstValue){this.seenFirstValue=true}else if(this.pred(this.lastValue,input)){sameAsLast=true}this.lastValue=input;return sameAsLast?result:this.xf["@@transducer/step"](result,input)};return _curry2$48(function _xdropRepeatsWith(pred,xf){return new XDropRepeatsWith(pred,xf)})}();var _curry2$50=_curry2$1;var _isString$4=_isString$1;var nth$1=_curry2$50(function nth(offset,list){var idx=offset<0?list.length+offset:offset;return _isString$4(list)?list.charAt(idx):list[idx]});var nth=nth$1;var last$1=nth(-1);var _curry2$49=_curry2$1;var _dispatchable$14=_dispatchable$1;var _xdropRepeatsWith$3=_xdropRepeatsWith$1;var last=last$1;var dropRepeatsWith$1=_curry2$49(_dispatchable$14([],_xdropRepeatsWith$3,function dropRepeatsWith(pred,list){var result=[];var idx=1;var len=list.length;if(len!==0){result[0]=list[0];while(idx=0){if(fn(list[idx])){return list[idx]}idx-=1}}));var _curry2$63=_curry2$1;var _xfBase$18=_xfBase$1;var _xfindLastIndex$1=function(){function XFindLastIndex(f,xf){this.xf=xf;this.f=f;this.idx=-1;this.lastIdx=-1}XFindLastIndex.prototype["@@transducer/init"]=_xfBase$18.init;XFindLastIndex.prototype["@@transducer/result"]=function(result){return this.xf["@@transducer/result"](this.xf["@@transducer/step"](result,this.lastIdx))};XFindLastIndex.prototype["@@transducer/step"]=function(result,input){this.idx+=1;if(this.f(input)){ +this.lastIdx=this.idx}return result};return _curry2$63(function _xfindLastIndex(f,xf){return new XFindLastIndex(f,xf)})}();var _curry2$62=_curry2$1;var _dispatchable$19=_dispatchable$1;var _xfindLastIndex=_xfindLastIndex$1;var findLastIndex=_curry2$62(_dispatchable$19([],_xfindLastIndex,function findLastIndex(fn,list){var idx=list.length-1;while(idx>=0){if(fn(list[idx])){return idx}idx-=1}return-1}));var _curry1$27=_curry1$1;var _makeFlat$3=_makeFlat$1;var flatten=_curry1$27(_makeFlat$3(true));var _curry1$28=_curry1$1;var curry$4=curry$1;var flip=_curry1$28(function flip(fn){return curry$4(function(a,b){var args=Array.prototype.slice.call(arguments,0);args[0]=b;args[1]=a;return fn.apply(this,args)})});var _checkForMethod$4=_checkForMethod$1;var _curry2$64=_curry2$1;var forEach=_curry2$64(_checkForMethod$4("forEach",function forEach(fn,list){var len=list.length;var idx=0;while(idxb});var _curry2$69=_curry2$1;var gte=_curry2$69(function gte(a,b){return a>=b});var _curry2$70=_curry2$1;var _has$8=_has$1;var has=_curry2$70(_has$8);var _curry2$71=_curry2$1;var hasIn=_curry2$71(function hasIn(prop,obj){return prop in obj});var nth$3=nth$1;var head=nth$3(0);var _identity$1=function _identity(x){return x};var _curry1$30=_curry1$1;var _identity=_identity$1;var identity=_curry1$30(_identity);var _curry3$13=_curry3$1;var curryN$10=curryN$1;var ifElse=_curry3$13(function ifElse(condition,onTrue,onFalse){return curryN$10(Math.max(condition.length,onTrue.length,onFalse.length),function _ifElse(){return condition.apply(this,arguments)?onTrue.apply(this,arguments):onFalse.apply(this,arguments)})});var add$3=add;var inc=add$3(1);var reduceBy$4=reduceBy$1;var indexBy=reduceBy$4(function(acc,elem){return elem},null);var _curry2$72=_curry2$1;var _indexOf$3=_indexOf$1;var _isArray$8=_isArray$1;var indexOf=_curry2$72(function indexOf(target,xs){return typeof xs.indexOf==="function"&&!_isArray$8(xs)?xs.indexOf(target):_indexOf$3(xs,target,0)});var slice$5=slice$1;var init=slice$5(0,-1);var _curry3$14=_curry3$1;var insert$1=_curry3$14(function insert(idx,elt,list){idx=idx=0?idx:list.length;var result=Array.prototype.slice.call(list,0);result.splice(idx,0,elt);return result});var _curry3$15=_curry3$1;var insertAll=_curry3$15(function insertAll(idx,elts,list){idx=idx=0?idx:list.length;return[].concat(Array.prototype.slice.call(list,0,idx),elts,Array.prototype.slice.call(list,idx))});var _contains$6=_contains$1;var _Set$1=function(){function _Set(){this._nativeSet=typeof Set==="function"?new Set:null;this._items={}}_Set.prototype.add=function(item){return!hasOrAdd(item,true,this)};_Set.prototype.has=function(item){return hasOrAdd(item,false,this)};function hasOrAdd(item,shouldAdd,set){var type=typeof item;var prevSize,newSize;switch(type){case"string":case"number":if(item===0&&1/item===-Infinity){if(set._items["-0"]){return true}else{if(shouldAdd){set._items["-0"]=true}return false}}if(set._nativeSet!==null){if(shouldAdd){prevSize=set._nativeSet.size;set._nativeSet.add(item);newSize=set._nativeSet.size;return newSize===prevSize}else{return set._nativeSet.has(item)}}else{if(!(type in set._items)){if(shouldAdd){set._items[type]={};set._items[type][item]=true}return false}else if(item in set._items[type]){return true}else{if(shouldAdd){set._items[type][item]=true}return false}}case"boolean":if(type in set._items){var bIdx=item?1:0;if(set._items[type][bIdx]){return true}else{if(shouldAdd){set._items[type][bIdx]=true}return false}}else{if(shouldAdd){set._items[type]=item?[false,true]:[true,false]}return false}case"function":if(set._nativeSet!==null){if(shouldAdd){prevSize=set._nativeSet.size;set._nativeSet.add(item);newSize=set._nativeSet.size;return newSize===prevSize}else{return set._nativeSet.has(item)}}else{if(!(type in set._items)){if(shouldAdd){set._items[type]=[item]}return false}if(!_contains$6(item,set._items[type])){if(shouldAdd){set._items[type].push(item)}return false}return true}case"undefined":if(set._items[type]){return true}else{if(shouldAdd){set._items[type]=true}return false}case"object":if(item===null){if(!set._items["null"]){if(shouldAdd){set._items["null"]=true}return false}return true}default:type=Object.prototype.toString.call(item);if(!(type in set._items)){if(shouldAdd){set._items[type]=[item]}return false}if(!_contains$6(item,set._items[type])){if(shouldAdd){set._items[type].push(item)}return false}return true}}return _Set}();var _Set=_Set$1;var _curry2$74=_curry2$1;var uniqBy$1=_curry2$74(function uniqBy(fn,list){var set=new _Set;var result=[];var idx=0;var appliedItem,item;while(idxlist2.length){lookupList=list1;filteredList=list2}else{lookupList=list2;filteredList=list1}return uniq(_filter$3(flip$2(_contains$5)(lookupList),filteredList))});var _containsWith$4=_containsWith$1;var _curry2$75=_curry2$1;var uniqWith$1=_curry2$75(function uniqWith(pred,list){var idx=0;var len=list.length;var result=[];var item;while(idxlist2.length){lookupList=list1;filteredList=list2}else{lookupList=list2;filteredList=list1}var results=[];var idx=0;while(idx=0){if(equals$7(xs[idx],target)){return idx}idx-=1}return-1}});var _isNumber$1=function _isNumber(x){return Object.prototype.toString.call(x)==="[object Number]"};var _curry1$37=_curry1$1;var _isNumber=_isNumber$1;var length=_curry1$37(function length(list){return list!=null&&_isNumber(list.length)?list.length:NaN});var _curry2$81=_curry2$1;var map$10=map$1;var lens=_curry2$81(function lens(getter,setter){return function(toFunctorFn){return function(target){return map$10(function(focus){return setter(focus,target)},toFunctorFn(getter(target)))}}});var _curry3$18=_curry3$1;var adjust$2=adjust;var always$4=always$1;var update$3=_curry3$18(function update(idx,x,list){return adjust$2(always$4(x),idx,list)});var _curry1$38=_curry1$1;var lens$2=lens;var nth$4=nth$1;var update$2=update$3;var lensIndex=_curry1$38(function lensIndex(n){return lens$2(nth$4(n),update$2(n))});var _curry2$82=_curry2$1;var path$1=_curry2$82(function path(paths,obj){var val=obj;var idx=0;while(idx=0){tuple=fn(list[idx],tuple[0]);result[idx]=tuple[1];idx-=1}return[result,tuple[0]]});var _curry2$85=_curry2$1;var _reduce$11=_reduce$1;var keys$10=keys$1;var mapObjIndexed=_curry2$85(function mapObjIndexed(fn,obj){return _reduce$11(function(acc,key){acc[key]=fn(obj[key],key,obj);return acc},{},keys$10(obj))});var _curry2$86=_curry2$1;var match=_curry2$86(function match(rx,str){return str.match(rx)||[]});var _curry2$87=_curry2$1;var _isInteger$3=_isInteger$1;var mathMod=_curry2$87(function mathMod(m,p){if(!_isInteger$3(m)){return NaN}if(!_isInteger$3(p)||p<1){return NaN}return(m%p+p)%p});var _curry3$21=_curry3$1;var maxBy=_curry3$21(function maxBy(f,a,b){return f(b)>f(a)?b:a});var add$4=add;var reduce$9=reduce$1;var sum$1=reduce$9(add$4,0);var _curry1$41=_curry1$1;var sum=sum$1;var mean=_curry1$41(function mean(list){return sum(list)/list.length});var _curry1$42=_curry1$1;var mean$2=mean;var median=_curry1$42(function median(list){var len=list.length;if(len===0){return NaN}var width=2-len%2;var idx=(len-width)/2;return mean$2(Array.prototype.slice.call(list,0).sort(function(a,b){return ab?1:0}).slice(idx,idx+width))});var _arity$8=_arity$1;var _curry1$43=_curry1$1;var _has$11=_has$1;var toString$2=toString_1;var memoize=_curry1$43(function memoize(fn){var cache={};return _arity$8(fn.length,function(){var key=toString$2(arguments);if(!_has$11(key,cache)){cache[key]=fn.apply(this,arguments)}return cache[key]})});var _assign$3=_assign$1;var _curry2$88=_curry2$1;var merge=_curry2$88(function merge(l,r){return _assign$3({},l,r)});var _assign$4=_assign$1;var _curry1$44=_curry1$1;var mergeAll=_curry1$44(function mergeAll(list){return _assign$4.apply(null,[{}].concat(list))});var _curry3$23=_curry3$1;var _has$12=_has$1;var mergeWithKey$1=_curry3$23(function mergeWithKey(fn,l,r){var result={};var k;for(k in l){if(_has$12(k,l)){result[k]=_has$12(k,r)?fn(k,l[k],r[k]):l[k]}}for(k in r){if(_has$12(k,r)&&!_has$12(k,result)){result[k]=r[k]}}return result});var _curry3$22=_curry3$1;var mergeWithKey=mergeWithKey$1;var mergeWith=_curry3$22(function mergeWith(fn,l,r){return mergeWithKey(function(_,_l,_r){return fn(_l,_r)},l,r)});var _curry2$89=_curry2$1;var min=_curry2$89(function min(a,b){return b0&&pred(path$5(propPath,obj))});var _curry2$96=_curry2$1;var pick=_curry2$96(function pick(names,obj){var result={};var idx=0;while(idx=0){acc=fn(list[idx],acc);idx-=1}return acc});var _curryN$5=_curryN$1;var _reduce$12=_reduce$1;var _reduced$7=_reduced$1;var reduceWhile=_curryN$5(4,[],function _reduceWhile(pred,fn,a,list){return _reduce$12(function(acc,x){return pred(acc,x)?fn(acc,x):_reduced$7(acc)},a,list)});var _curry1$49=_curry1$1;var _reduced$8=_reduced$1;var reduced=_curry1$49(_reduced$8);var _curry3$34=_curry3$1;var remove$1=_curry3$34(function remove(start,count,list){var result=Array.prototype.slice.call(list,0);result.splice(start,count);return result});var _curry2$104=_curry2$1;var times$1=_curry2$104(function times(fn,n){var len=Number(n);var idx=0;var list;if(len<0||isNaN(len)){throw new RangeError("n must be a non-negative number")}list=new Array(len);while(idxbb?1:0})});var _curry2$108=_curry2$1;var sortWith=_curry2$108(function sortWith(fns,list){return Array.prototype.slice.call(list,0).sort(function(a,b){var result=0;var i=0;while(result===0&&i=0?xs.length-n:0,xs)});var _curry2$115=_curry2$1;var takeLastWhile=_curry2$115(function takeLastWhile(fn,list){var idx=list.length-1;while(idx>=0&&fn(list[idx])){idx-=1}return Array.prototype.slice.call(list,idx+1)});var _curry2$117=_curry2$1;var _reduced$9=_reduced$1;var _xfBase$19=_xfBase$1;var _xtakeWhile$1=function(){function XTakeWhile(f,xf){this.xf=xf;this.f=f}XTakeWhile.prototype["@@transducer/init"]=_xfBase$19.init;XTakeWhile.prototype["@@transducer/result"]=_xfBase$19.result;XTakeWhile.prototype["@@transducer/step"]=function(result,input){return this.f(input)?this.xf["@@transducer/step"](result,input):_reduced$9(result)};return _curry2$117(function _xtakeWhile(f,xf){return new XTakeWhile(f,xf)})}();var _curry2$116=_curry2$1;var _dispatchable$21=_dispatchable$1;var _xtakeWhile=_xtakeWhile$1;var takeWhile=_curry2$116(_dispatchable$21(["takeWhile"],_xtakeWhile,function takeWhile(fn,list){var idx=0;var len=list.length;while(idx

{title} by {author}

{R.join(⁗ ⁗)(R.repeat(text, 20))}
',"","",function(opts){this.R=index});riot$1.tag2("bbutton",'',"","",function(opts){});var RE_ORIGIN=/^.+?\/\/+[^\/]+/;var EVENT_LISTENER="EventListener";var REMOVE_EVENT_LISTENER="remove"+EVENT_LISTENER;var ADD_EVENT_LISTENER="add"+EVENT_LISTENER;var HAS_ATTRIBUTE="hasAttribute";var POPSTATE="popstate";var HASHCHANGE="hashchange";var TRIGGER="trigger";var MAX_EMIT_STACK_LEVEL=3;var win=typeof window!="undefined"&&window;var doc=typeof document!="undefined"&&document;var hist=win&&history;var loc=win&&(hist.location||win.location);var prot=Router.prototype;var clickEvent=doc&&doc.ontouchstart?"touchstart":"click";var central=observable$1();var started=false;var routeFound=false;var debouncedEmit;var base;var current;var parser;var secondParser;var emitStack=[];var emitStackLevel=0;function DEFAULT_PARSER(path){return path.split(/[\/?#]/)}function DEFAULT_SECOND_PARSER(path,filter){var f=filter.replace(/\?/g,"\\?").replace(/\*/g,"([^/?#]+?)").replace(/\.\./,".*");var re=new RegExp("^"+f+"$");var args=path.match(re);if(args){return args.slice(1)}}function debounce(fn,delay){var t;return function(){clearTimeout(t);t=setTimeout(fn,delay)}}function start(autoExec){debouncedEmit=debounce(emit,1);win[ADD_EVENT_LISTENER](POPSTATE,debouncedEmit);win[ADD_EVENT_LISTENER](HASHCHANGE,debouncedEmit);doc[ADD_EVENT_LISTENER](clickEvent,click);if(autoExec){emit(true)}}function Router(){this.$=[];observable$1(this);central.on("stop",this.s.bind(this));central.on("emit",this.e.bind(this))}function normalize(path){return path.replace(/^\/|\/$/,"")}function isString$1(str){return typeof str=="string"}function getPathFromRoot(href){return(href||loc.href).replace(RE_ORIGIN,"")}function getPathFromBase(href){return base[0]==="#"?(href||loc.href||"").split(base)[1]||"":(loc?getPathFromRoot(href):href||"").replace(base,"")}function emit(force){var isRoot=emitStackLevel===0;if(MAX_EMIT_STACK_LEVEL<=emitStackLevel){return}emitStackLevel++;emitStack.push(function(){var path=getPathFromBase();if(force||path!==current){central[TRIGGER]("emit",path);current=path}});if(isRoot){var first;while(first=emitStack.shift()){first()}emitStackLevel=0}}function click(e){if(e.which!==1||e.metaKey||e.ctrlKey||e.shiftKey||e.defaultPrevented){return}var el=e.target;while(el&&el.nodeName!=="A"){el=el.parentNode}if(!el||el.nodeName!=="A"||el[HAS_ATTRIBUTE]("download")||!el[HAS_ATTRIBUTE]("href")||el.target&&el.target!=="_self"||el.href.indexOf(loc.href.match(RE_ORIGIN)[0])===-1){return}if(el.href!==loc.href&&(el.href.split("#")[0]===loc.href.split("#")[0]||base[0]!=="#"&&getPathFromRoot(el.href).indexOf(base)!==0||base[0]==="#"&&el.href.split(base)[0]!==loc.href.split(base)[0]||!go(getPathFromBase(el.href),el.title||doc.title))){return}e.preventDefault()}function go(path,title,shouldReplace){if(!hist){return central[TRIGGER]("emit",getPathFromBase(path))}path=base+normalize(path);title=title||doc.title;shouldReplace?hist.replaceState(null,title,path):hist.pushState(null,title,path);doc.title=title;routeFound=false;emit();return routeFound}prot.m=function(first,second,third){if(isString$1(first)&&(!second||isString$1(second))){go(first,second,third||false)}else if(second){this.r(first,second)}else{this.r("@",first)}};prot.s=function(){this.off("*");this.$=[]};prot.e=function(path){this.$.concat("@").some(function(filter){var args=(filter==="@"?parser:secondParser)(normalize(path),normalize(filter));if(typeof args!="undefined"){this[TRIGGER].apply(null,[filter].concat(args));return routeFound=true}},this)};prot.r=function(filter,action){if(filter!=="@"){filter="/"+normalize(filter);this.$.push(filter)}this.on(filter,action)};var mainRouter=new Router;var route=mainRouter.m.bind(mainRouter);route.create=function(){var newSubRouter=new Router;var router=newSubRouter.m.bind(newSubRouter);router.stop=newSubRouter.s.bind(newSubRouter);return router};route.base=function(arg){base=arg||"#";current=getPathFromBase()};route.exec=function(){emit(true)};route.parser=function(fn,fn2){if(!fn&&!fn2){parser=DEFAULT_PARSER;secondParser=DEFAULT_SECOND_PARSER}if(fn){parser=fn}if(fn2){secondParser=fn2}};route.query=function(){var q={};var href=loc.href||current;href.replace(/[?&](.+?)=([^&]*)/g,function(_,k,v){q[k]=v});return q};route.stop=function(){if(started){if(win){win[REMOVE_EVENT_LISTENER](POPSTATE,debouncedEmit);win[REMOVE_EVENT_LISTENER](HASHCHANGE,debouncedEmit);doc[REMOVE_EVENT_LISTENER](clickEvent,click)}central[TRIGGER]("stop");started=false}};route.start=function(autoExec){if(!started){if(win){if(document.readyState==="complete"){start(autoExec)}else{win[ADD_EVENT_LISTENER]("load",function(){setTimeout(function(){start(autoExec)},1)})}}started=true}};route.base();route.parser();riot$1.tag2("post",'

No More Posts!

{opts.title}

By {opts.creator}

{content}

',"","",function(opts){var self=this;this.loading=false;this.prevloading="";this.nextloading="";this.nomore=false;this.pid=1;content="";this.prev=function(){if(self.prevloading||self.nextloading){return}self.prevloading=" loading";if(self.nomore){self.nomore=false}if(self.pid>1){self.pid--;self.setPost(self.pid);self.update()}}.bind(this);this.next=function(){if(self.nextloading||self.prevloading){return}self.nextloading=" loading";console.log(self.pid);console.log(self.nomore);if(!self.nomore){self.pid++;self.setPost(self.pid);self.update()}}.bind(this);this.setPost=function(pid){self.update();self.loading=true;fetch("/blog/switchpost/"+pid).then(function(resp){return resp.text()}).then(function(body){if(body==="false"){self.nomore=true;route("/");self.update()}else{self.content=index.join(" ")(index.repeat(body,20));route("/"+pid)}self.loading=false;self.prevloading="";self.nextloading="";self.update()})};this.on("mount",function(){this.setPost(self.pid)})});riot$1.tag2("posts","","","",function(opts){});riot$1.mount("post",{creator:"wes",title:"A cool post here"});riot$1.mount("comments");riot$1.mount("bbutton")})(); \ No newline at end of file diff --git a/build/scripts/tags.min.js b/build/scripts/tags.min.js deleted file mode 100644 index 8420e22..0000000 --- a/build/scripts/tags.min.js +++ /dev/null @@ -1,154 +0,0 @@ -riot.tag2('bbutton', '', '', '', function(opts) { -}); - -riot.tag2('comment', '

{title} by {author}

{R.join(⁗ ⁗)(R.repeat(text, 20))}
', '', '', function(opts) { -}); - -riot.tag2('comments', '
You\'ve reached the max comment size
', '', '', function(opts) { - -comments = []; -maxlength = 700; - -placeholder = "Comment here!"; -focused = false; -maxed = false; -warn = false; -disabled = ""; -loading = true; - -this.clearplaceholder = function() { - if (!this.focused) { - this.update({ - "placeholder" : "", - "focused" : true - }) - } -}.bind(this) - -this.checkplaceholder = function() { - if (this.textarea.value.trim().length == 0) { - this.update({ - "placeholder" : "Comment here!", - "focused" : false - }); - } -}.bind(this) - -this.closewarning = function() { - this.update({"warn" : false}); -}.bind(this) - -this.echo = function(ev) { - if (this.textarea.value.length >= maxlength) { - this.update({ - "maxed" : "maxinput", - "warn" : true - }); - } - else { - this.update({ - "maxed" : false, - "warn" : false - }); - window.setTimeout(this.closewarning, 5000); - } -}.bind(this) - -var self = this; - -this.getComments = function(pid) { - fetch("/blog/comments/"+pid) - .then( - function(resp) { - return resp.text(); - }) - .then( - function(body) { - self.update( - { - "comments" : JSON.parse(body), - "loading" : false - }); - }); -}.bind(this) - -this.on("mount", - function() { - this.getComments(self.opts.pid); - }); - -}); - -riot.tag2('post', '

No More Posts!

{opts.title}

By {opts.creator}

{content}

', '', '', function(opts) { -var self = this; - -this.loading = false; -this.prevloading = ""; -this.nextloading = ""; - -this.nomore = false -this.pid = 1; -content = ""; - -this.prev = function() { - if (self.prevloading || self.nextloading) { - return; - } - self.prevloading = " loading"; - if (self.nomore) { - self.nomore = false; - } - if (self.pid > 1) { - self.pid--; - self.setPost(self.pid); - self.update(); - } -}.bind(this) - -this.next = function() { - if (self.nextloading || self.prevloading) { - return; - } - self.nextloading = " loading"; - console.log(self.pid); - console.log(self.nomore); - if (!self.nomore) { - self.pid++; - self.setPost(self.pid); - self.update(); - } -}.bind(this) - -this.setPost = function(pid) { - self.update(); - self.loading = true; - fetch("/blog/switchpost/"+pid) - .then( - function(resp) { - return resp.text(); - }) - .then( - function(body) { - if (body === "false") { - self.nomore = true; - route("/"); - self.update() - } - else { - self.content = R.join(" ")(R.repeat(body, 20)); - route("/"+pid); - } - - self.loading = false; - self.prevloading = ""; - self.nextloading = ""; - self.update(); - }); -} - -this.on("mount", function() { this.setPost(self.pid) }); - -}); - -riot.tag2('posts', '', '', '', function(opts) { -}); diff --git a/build/styles/riotblog.min.css b/build/styles/riotblog.min.css index 8fc1a5d..c5408ce 100644 --- a/build/styles/riotblog.min.css +++ b/build/styles/riotblog.min.css @@ -55,3 +55,6 @@ .maxwarn { margin-top: 15px; } + +.footer { + margin-top: 10%; } diff --git a/build/templates/index.html b/build/templates/index.html index 3376075..dbd15ed 100644 --- a/build/templates/index.html +++ b/build/templates/index.html @@ -30,11 +30,6 @@ {% endblock %} {% block scripts %} - - - - - {% endblock %} diff --git a/fabfile.py b/fabfile.py index 45a7480..a71e9e8 100644 --- a/fabfile.py +++ b/fabfile.py @@ -6,20 +6,15 @@ import fabric.operations as op env.hosts = ["wes@mgoal.ca:444"] -@task -def buildTags(): - with lcd("./build"): - local("riot ../src/tags scripts/tags.min.js") - @task def buildScss(): with lcd("./build"): local("sassc ../src/styles/riotblog.scss > styles/riotblog.min.css") @task -def minifyJS(): - with lcd("./build"): - local("uglifyjs ../src/scripts/riotblog.js > scripts/riotblog.min.js") +def buildJS(): + local("rollup -c rollup.config.js") + local("uglifyjs build/bundle.js > build/scripts/riotblog.min.js") @task def buildVenv(): @@ -59,9 +54,8 @@ def serveUp(): @task(default=True) def build(): local("mkdir -p build/{scripts,styles}") - buildTags() buildScss() - minifyJS() + buildJS() copyFiles() upload() buildVenv() @@ -70,9 +64,8 @@ def build(): @task def update(): local("mkdir -p build/{scripts,styles}") - buildTags() buildScss() - minifyJS() + buildJS() copyFiles() upload() serveUp() @@ -81,10 +74,9 @@ def update(): def locbuild(): local("mkdir -p build/{scripts,styles}") local("cp requirements.txt ./build/requirements.txt") - buildLocalVenv() - buildTags() + #buildLocalVenv() buildScss() - minifyJS() + buildJS() copyFiles() local("sudo rm -fr /srv/http/riotblog") local("sudo mkdir -p /srv/http/riotblog") diff --git a/package.json b/package.json new file mode 100644 index 0000000..7f4388e --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "riotblog", + "version": "1.0.0", + "description": "Riot Blog", + "main": "src/scripts/riotblog.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "rollup src/scripts/riotblog.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/nisstyre56/riotblog.git" + }, + "author": "Wesley Kerfoot", + "license": "AGPL-3.0", + "bugs": { + "url": "https://github.com/nisstyre56/riotblog/issues" + }, + "homepage": "https://github.com/nisstyre56/riotblog#readme", + "devDependencies": { + "ramda": "^0.23.0", + "riot": "^3.3.1", + "riot-route": "^3.1.0", + "rollup": "^0.41.4", + "rollup-plugin-buble": "^0.15.0", + "rollup-plugin-commonjs": "^7.0.0", + "rollup-plugin-node-resolve": "^2.0.0", + "rollup-plugin-riot": "^1.1.0", + "whatwg-fetch": "^2.0.2" + }, + "dependencies": { + "whatwg-fetch": "^2.0.2" + } +} diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..a536a25 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,16 @@ +import riot from 'rollup-plugin-riot' +import nodeResolve from 'rollup-plugin-node-resolve' +import commonjs from 'rollup-plugin-commonjs' +import buble from 'rollup-plugin-buble' + +export default { + entry: 'src/scripts/riotblog.js', + dest: 'build/bundle.js', + plugins: [ + riot(), + nodeResolve({ jsnext: true }), + commonjs(), + buble() + ], + format: 'iife' +} diff --git a/src/posts.py b/src/posts.py index cb5e966..10e2160 100644 --- a/src/posts.py +++ b/src/posts.py @@ -22,3 +22,9 @@ class Posts: "author" : author } return jsonify(self.db.save(doc)) + + def getposts(self, start, end): + return jsonify([]) + + def getcomments(self, postID): + return jsonify([]) diff --git a/src/tags/bbutton.tag b/src/scripts/bbutton.tag similarity index 100% rename from src/tags/bbutton.tag rename to src/scripts/bbutton.tag diff --git a/src/tags/comment.tag b/src/scripts/comment.tag similarity index 81% rename from src/tags/comment.tag rename to src/scripts/comment.tag index 0c1f13f..62aa2ac 100644 --- a/src/tags/comment.tag +++ b/src/scripts/comment.tag @@ -9,4 +9,8 @@ + diff --git a/src/tags/comments.tag b/src/scripts/comments.tag similarity index 70% rename from src/tags/comments.tag rename to src/scripts/comments.tag index facdcd1..ad33962 100644 --- a/src/tags/comments.tag +++ b/src/scripts/comments.tag @@ -1,22 +1,15 @@ -
-
- +
+
@@ -24,18 +17,20 @@ onclick={closewarning} class="btn btn-clear float-right"> - You've reached the max comment size + Your comment is too long!
+
diff --git a/src/tags/post.tag b/src/scripts/post.tag similarity index 95% rename from src/tags/post.tag rename to src/scripts/post.tag index 018c666..c880808 100644 --- a/src/tags/post.tag +++ b/src/scripts/post.tag @@ -19,6 +19,11 @@ - - - - {% endblock %} diff --git a/src/templates/write.html b/src/templates/write.html new file mode 100644 index 0000000..ff6473d --- /dev/null +++ b/src/templates/write.html @@ -0,0 +1,39 @@ +{% block head %} + + +{% endblock %} + + + + {% block content %} + + + + + {% endblock %} + +
+
+ +{% block styles %} + + + + +{% endblock %} + +{% block scripts %} + + + + + + +{% endblock %} + + +