pakyow 0.10.2 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/LICENSE +1 -1
- data/README.md +4 -1
- data/bin/pakyow +2 -16
- data/lib/generators/pakyow/app/app_generator.rb +46 -13
- data/lib/generators/pakyow/app/templates/Gemfile +8 -7
- data/lib/generators/pakyow/app/templates/README.md +2 -2
- data/lib/generators/pakyow/app/templates/app/setup.rb +10 -19
- data/lib/generators/pakyow/app/templates/app/views/_templates/default.html +3 -1
- data/lib/generators/pakyow/app/templates/env +1 -0
- data/lib/generators/pakyow/app/templates/env.example +3 -0
- data/lib/generators/pakyow/app/templates/gitignore +8 -0
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/fastlink.js +3 -2
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/fastlink.min.js +1 -1
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/ga.js +34 -0
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/ga.min.js +1 -0
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/modal.js +1 -1
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/modal.min.js +1 -1
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/mutable.js +5 -1
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/mutable.min.js +1 -1
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/navigator.js +10 -6
- data/lib/generators/pakyow/app/templates/public/scripts/ring/components/navigator.min.js +1 -1
- data/lib/generators/pakyow/app/templates/public/scripts/ring/pakyow.js +175 -45
- data/lib/generators/pakyow/app/templates/public/scripts/ring/pakyow.min.js +1 -1
- data/lib/generators/pakyow/app/templates/rspec +3 -0
- data/lib/pakyow.rb +1 -1
- data/lib/pakyow/command_line_interface.rb +79 -0
- data/lib/pakyow/commands/console.rb +27 -0
- data/lib/pakyow/commands/console_methods.rb +10 -0
- data/lib/pakyow/commands/server.rb +38 -0
- data/lib/pakyow/version.rb +3 -0
- metadata +58 -27
- data/lib/commands/USAGE +0 -9
- data/lib/commands/USAGE-CONSOLE +0 -12
- data/lib/commands/USAGE-NEW +0 -11
- data/lib/commands/USAGE-SERVER +0 -16
- data/lib/commands/console.rb +0 -17
- data/lib/commands/server.rb +0 -27
- data/lib/version.rb +0 -3
@@ -1 +1 @@
|
|
1
|
-
var pw={version:"0.1.1"};!function(){pw.util={guid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var n=16*Math.random()|0,e="x"==t?n:3&n|8;return e.toString(16)})},dup:function(t){return JSON.parse(JSON.stringify(t))}};var t=[];pw.init={register:function(n){t.push(n)}},document.addEventListener("DOMContentLoaded",function(){t.forEach(function(t){t()})});var e=["data-scope","data-prop"],i=["SELECT"],o=["AREA","BASE","BASEFONT","BR","HR","INPUT","IMG","LINK","META"];pw.node={value:function(t){return"INPUT"===t.tagName?"checkbox"===t.type?t.checked?t.value?t.value:!0:!1:t.value:"TEXTAREA"===t.tagName?t.value:"SELECT"===t.tagName?t.value:t.textContent.trim()},significant:function(t,n){t===document&&(t=document.getElementsByTagName("body")[0]),void 0===n&&(n=[]);var e,i;return(e=pw.node.isSignificant(t))?(i=[],n.push([{node:e[0],type:e[1]},i])):i=n,pw.node.toA(t.children).forEach(function(t){pw.node.significant(t,i)}),n},isSignificant:function(t){var n=e.find(function(n){return t.hasAttribute(n)});return n?[t,n.split("-")[1]]:!1},mutable:function(t){pw.node.significant(t).flatten().filter(function(t){return pw.node.isMutable(t.node)}).map(function(t){return t.node})},isMutable:function(t){var n=t.tagName;return"FORM"===n||"INPUT"===n&&!t.disabled},trigger:function(t,n,e){var i=document.createEvent("Event");i.initEvent(t,!0,!0),n._evtData=e,n.dispatchEvent(i)},replaceEventListener:function(t,n,e){n.removeEventListener(t),n.addEventListener(t,e)},inForm:function(t){if("FORM"===t.tagName)return!0;var n=t.parentNode;return n!==document?pw.node.inForm(n):void 0},component:function(t){if(t.getAttribute("data-ui"))return t;var n=t.parentNode;return n!==document?pw.node.component(n):void 0},scope:function(t){if(t.getAttribute("data-scope"))return t;var n=t.parentNode;return n!==document?pw.node.scope(n):void 0},scopeName:function(t){if(t.getAttribute("data-scope"))return t.getAttribute("data-scope");var n=t.parentNode;return n!==document?pw.node.scopeName(n):void 0},prop:function(t){if(t.getAttribute("data-prop"))return t;var n=t.parentNode;return n!==document?pw.node.prop(n):void 0},propName:function(t){if(t.getAttribute("data-prop"))return t.getAttribute("data-prop");var n=t.parentNode;return n!==document?pw.node.propName(n):void 0},versionName:function(t){return t.hasAttribute("data-version")?t.getAttribute("data-version"):void 0},"with":function(t,n){n.call(t)},"for":function(t,n,e){pw.node.isNodeList(t)&&(t=pw.node.toA(t)),t=Array.ensure(t),n=Array.ensure(n),t.forEach(function(t,i){e.call(t,n[i])})},match:function(t,e){pw.node.isNodeList(t)&&(t=pw.node.toA(t)),t=Array.ensure(t),e=Array.ensure(e);var i=e.reduce(function(t,e,i){var o=n[i]||n[n.length-1],r=o.cloneNode(!0);return o.parentNode.insertBefore(r),t.concat([r])},[]);return t.forEach(function(t){t.parentNode.removeChild(t)}),i},repeat:function(t,n,e){pw.node["for"](pw.node.match(t,n),n,e)},bind:function(t,n,e){var i=pw.node.findBindings(n)[0];pw.node["for"](n,t,function(t){t&&(t.id&&this.setAttribute("data-id",t.id),pw.node.bindDataToScope(t,i,n),"undefined"!=typeof e&&e.call(this,t))})},apply:function(t,n,e){var i=pw.node.match(n,t);return pw.node.bind(t,i,e),i},findBindings:function(t){var n=[];return pw.node.breadthFirst(t,function(){var t=this,e=t.getAttribute("data-scope");if(e){var i=[];pw.node.breadthFirst(t,function(){var n=this;if(t==n||!n.getAttribute("data-scope")){var e=n.getAttribute("data-prop");e&&i.push({prop:e,doc:n})}}),n.push({scope:e,props:i,doc:t})}}),n},bindDataToScope:function(t,n,e){t&&n&&n.props.forEach(function(n){k=n.prop,v=t[k],v||(v=""),"object"==typeof v?(pw.node.bindValueToNode(v.__content,n.doc),pw.node.bindAttributesToNode(v.__attrs,n.doc)):pw.node.bindValueToNode(v,n.doc)})},bindAttributesToNode:function(t,n){var e=pw.attrs.init(pw.view.init(n));for(var i in t){var o=t[i];"function"==typeof o&&(o=o.call(n.getAttribute(i))),o?o instanceof Array?o.forEach(function(t){e[t[0]](i,t[1])}):e.set(i,o):e.remove(i)}},bindValueToNode:function(t,n){pw.node.isTagWithoutValue(n)||("INPUT"===n.tagName&&"checkbox"===n.type?t===!0||n.value&&t===n.value?n.checked=!0:n.checked=!1:"TEXTAREA"===n.tagName||pw.node.isSelfClosingTag(n)?n.value=t:n.innerHTML=t)},isTagWithoutValue:function(t){return-1!=i.indexOf(t.tagName)?!0:!1},isSelfClosingTag:function(t){return-1!=o.indexOf(t.tagName)?!0:!1},breadthFirst:function(t,n){for(var e=[t];e.length>0;){var i=e.shift();if(i){"object"==typeof i&&"nodeType"in i&&1===i.nodeType&&i.cloneNode&&n.call(i);var o=i.childNodes;if(o)for(var r=0;r<o.length;r++)e.push(o[r])}}},isNodeList:function(t){return"undefined"!=typeof t.length},byAttr:function(t,n,e){return pw.node.all(t).filter(function(t){var i=t.getAttribute(n);return null!==i&&("undefined"==typeof e||i==e)})},setAttr:function(t,n,e){"style"===n?e.pairs().forEach(function(n){t.style[n[0]]=n[1]}):("class"===n&&(e=e.join(" ")),"checked"===n&&(e=e?"checked":"",t.checked=e),t.setAttribute(n,e))},all:function(t){var n=[];return t?(document!==t&&n.push(t),n.concat(pw.node.toA(t.getElementsByTagName("*")))):n},before:function(t,n){t.parentNode.insertBefore(n,t)},after:function(t,n){t.parentNode.insertBefore(n,this.nextSibling)},replace:function(t,n){t.parentNode.replaceChild(n,t)},append:function(t,n){t.appendChild(n)},prepend:function(t,n){t.insertBefore(n,t.firstChild)},remove:function(t){t.parentNode.removeChild(t)},clear:function(t){for(;t.firstChild;)pw.node.remove(t.firstChild)},title:function(t,n){var e;(e=t.getElementsByTagName("title")[0])&&(e.innerText=n)},toA:function(t){return Array.prototype.slice.call(t)},serialize:function(t){var n,e,i,o,r,a,c={};return t.querySelectorAll("input, select, textarea").forEach(function(t){n=c,i=t.name.split("["),o=i[i.length-1],i.forEach(function(i){e=pw.node.value(t),"]"==i&&(r[a]instanceof Array||(r[a]=[]),e&&r[a].push(e)),i!=o&&(e={}),i=i.replace("]",""),""!=i&&"_method"!=i&&(n[i]||(n[i]=e),r=n,a=i,n=n[i])})}),c}},pw.attrs={init:function(t){return new a(pw.collection.init(t))}};var r={hash:["style"],bool:["selected","checked","disabled","readonly","multiple"],mult:["class"]},a=function(t){this.views=t.views};a.prototype={findType:function(t){return r.hash.indexOf(t)>-1?"hash":r.bool.indexOf(t)>-1?"bool":r.mult.indexOf(t)>-1?"mult":"text"},findValue:function(t,n){switch(n){case"class":return t.node.classList;case"style":return t.node.style}return"bool"===this.findType(n)?t.node.hasAttribute(n):t.node.getAttribute(n)},set:function(t,n){this.views.forEach(function(e){pw.node.setAttr(e.node,t,n)})},remove:function(t){this.views.forEach(function(n){n.node.removeAttribute(t)})},ensure:function(t,n){this.views.forEach(function(e){var i=this.findValue(e,t);if("class"===t)i.contains(n)||i.add(n);else if("style"===t)n.pairs().forEach(function(t){e.node.style[t[0]]=t[1]});else if("bool"===this.findType(t))e.node.hasAttribute(t)||pw.node.setAttr(e.node,t,t);else{var i=e.node.getAttribute(t)||"";i.match(n)||pw.node.setAttr(e.node,t,i+n)}},this)},deny:function(t,n){this.views.forEach(function(e){var i=this.findValue(e,t);"class"===t?i.contains(n)&&i.remove(n):"style"===t?n.pairs().forEach(function(t){e.node.style[t[0]]=e.node.style[t[0]].replace(t[1],"")}):"bool"===this.findType(t)?e.node.hasAttribute(t)&&e.node.removeAttribute(t):pw.node.setAttr(e.node,t,e.node.getAttribute(t).replace(n,""))},this)},insert:function(t,n){this.views.forEach(function(e){var i=this.findValue(e,t);switch(t){case"class":i.add(n);break;default:pw.node.setAttr(e.node,t,i+n)}},this)}},pw.state={build:function(t,n){var e;return t.reduce(function(t,i){return(e=pw.state.buildForNode(i,n))&&t.push(e),t},[])},buildForNode:function(t,n){var e=t[0],i={};if("scope"===e.type)i.id=e.node.getAttribute("data-id"),i.scope=e.node.getAttribute("data-scope");else if("prop"===e.type&&n)return void(n[e.node.getAttribute("data-prop")]=pw.node.value(e.node));return i.__nested=pw.state.build(t[1],i),i},init:function(t,n){return new c(t,n)}};var c=function(t){this.node=t,this.snapshots=[],this.update()};c.prototype={update:function(){this.snapshots.push(pw.state.build(pw.node.significant(this.node)))},diffNode:function(t){return pw.state.build(pw.node.significant(pw.node.scope(t)))[0]},revert:function(){var t=pw.util.dup(this.snapshots[0]);return this.snapshots=[t],t},rollback:function(){return this.snapshots.pop(),this.current()},node:function(t){return this.current.flatten().find(function(n){return n.scope===t.scope&&n.id===t.id})},append:function(t){var n=this.copy();n.push(t),this.snapshots.push(n)},prepend:function(t){var n=this.copy();n.unshift(t),this.snapshots.push(n)},"delete":function(t){var n=this.copy(),e=n.find(function(n){return n.id===t.id});e&&(n.splice(n.indexOf(e),1),this.snapshots.push(n))},copy:function(){return pw.util.dup(this.current())},current:function(){return this.snapshots[this.snapshots.length-1]},initial:function(){return this.snapshots[0]}},pw.view={init:function(t){return new s(t)},fromStr:function(t){var n=document.createElement("div");return n.innerHTML=t,pw.view.init(n.childNodes[0])}};var s=function(t){this.node=t};s.prototype={clone:function(){return pw.view.init(this.node.cloneNode(!0))},title:function(t){pw.node.title(this.node,t)},text:function(t){this.node.innerText=t},html:function(t){this.node.innerHTML=t},component:function(t){return pw.collection.init(pw.node.byAttr(this.node,"data-ui",t).reduce(function(t,n){return t.concat(pw.view.init(n))},[]),this)},attrs:function(){return pw.attrs.init(this)},"with":function(t){pw.node["with"](this.node,t)},match:function(t){pw.node.match(this.node,t)},"for":function(t,n){pw.node["for"](this.node,t,n)},repeat:function(t,n){pw.node.repeat(this.node,t,n)},bind:function(t,n){pw.node.bind(t,this.node,n)},apply:function(t,n){pw.node.apply(t,this.node,n)}},["scope","prop"].forEach(function(t){s.prototype[t]=function(n){return pw.collection.init(pw.node.byAttr(this.node,"data-"+t,n).reduce(function(t,n){return t.concat(pw.view.init(n))},[]),this,n)}}),["remove","clear","versionNode"].forEach(function(t){s.prototype[t]=function(){return pw.node[t](this.node)}}),["after","before","replace","append","prepend","insert"].forEach(function(t){s.prototype[t]=function(n){return pw.node[t](this.node,n.node)}}),pw.collection={init:function(t,n,e){return t instanceof u?t:(t.constructor!==Array&&(t=[t]),new u(t,n,e))},fromNodes:function(t,n,e){return pw.collection.init(t.map(function(t){return pw.view.init(t)}),n,e)}};var u=function(t,n,e){this.views=t,this.parent=n,this.scope=e};u.prototype={clone:function(){return pw.collection.init(this.views.map(function(t){return t.clone()}))},last:function(){return this.views[this.length()-1]},first:function(){return this.views[0]},removeView:function(t){var n=this.views.indexOf(t);n>-1&&this.views.splice(n,1)[0].remove()},addView:function(t){var n=[];t instanceof u?n=t.views:n.push(t),this.length()>0?n.forEach(function(t){pw.node.after(this.last().node,t.node)},this):this.parent&&n.forEach(function(t){this.parent.append(t)},this),this.views=this.views.concat(n)},order:function(t){t.forEach(function(t){if(t){var n=this.views.find(function(n){return n.node.getAttribute("data-id")==t.toString()});if(n){n.node.parentNode.appendChild(n.node);var e=this.views.indexOf(n);this.views.splice(e,1),this.views.push(n)}}},this)},length:function(){return this.views.length},attrs:function(){return pw.attrs.init(this.views)},append:function(t){t=Array.ensure(t);var n=this.last();return this.views.push(n.append(t)),n},prepend:function(t){t=Array.ensure(t);var n=t.map(function(t){var n=this.first().prepend(t);return this.views.push(n),n},this);return pw.collection.init(n)},"with":function(t){pw.node["with"](this.views,t)},"for":function(t,n){t=Array.ensure(t),this.views.forEach(function(e,i){n.call(e,t[i])})},match:function(t,n){if(t=Array.ensure(t),0===t.length)return this.remove(),n.call(this);var e,i;if(this.views[0]&&(e=this.views[0].clone(),i=this.views[0].node.parentNode),this.views.slice(0).forEach(function(n){var e=n.node.getAttribute("data-id");e&&(t.find(function(t){return t.id.toString()===e})||this.removeView(n))},this),!(t.length>this.length()))return n.call(this);var o=this;return this.endpoint.template(this,function(r){return r||(r=e.clone(),o.parent=pw.view.init(i)),t.forEach(function(t){if(!o.views.find(function(n){return n.node.getAttribute("data-id")===(t.id||"").toString()})){var n=r.clone();n instanceof u&&(n=n.views[0]),n.node.setAttribute("data-id",t.id),o.addView(n),pw.component.findAndInit(n.node)}},o),n.call(o)}),this},repeat:function(t,n){this.match(t,function(){this["for"](t,n)})},bind:function(t,n){return this["for"](t,function(t){this.bind(t),"undefined"!=typeof n&&n.call(this,t)}),this},apply:function(t,n){this.match(t,function(){var e;this.order(t.map(function(t){return(e=t.id)?e.toString():void 0})),this.bind(t,n)})},endpoint:function(t){return this.endpoint=t,this}},["scope","prop","component"].forEach(function(t){u.prototype[t]=function(n){return pw.collection.init(this.views.reduce(function(e,i){return e.concat(i[t](n).views)},[]))}}),["remove","clear","text","html"].forEach(function(t){u.prototype[t]=function(n){this.views.forEach(function(e){e[t](n)})}}),pw.init.register(function(){pw.component.findAndInit(document.querySelectorAll("body")[0])});var d={},p={},f={},h={};pw.component={init:function(t,n){return new l(t,n)},resetChannels:function(){p={}},findAndInit:function(t){pw.node.byAttr(t,"data-ui").forEach(function(t){if(!t._ui){var n=t.getAttribute("data-ui"),e=d[n]||pw.component.init;h[n]||(h[n]=[]);var i=t.getAttribute("data-channel"),o=t.getAttribute("data-config"),r=pw.view.init(t),a=h[n].length,c=new e(r,pw.component.buildConfigObject(o),n,a);c.init(r,o,n),pw.component.registerForChannel(c,i),h[n].push(c),t._ui=!0}})},push:function(t){var n=t.channel,e=t.payload,i=e.instruct;(p[n]||[]).forEach(function(t){i?t.instruct(n,i):t.message(n,e)})},register:function(t,n){var e=l.prototype;Object.getOwnPropertyNames(e).forEach(function(t){n.prototype[t]=e[t]}),d[t]=n},buildConfigObject:function(t){return t?t.split(";").reduce(function(t,n){var e=n.trim().split(":");return t[e[0].trim()]=e[1].trim(),t},{}):{}},registerForChannel:function(t,n){p[n]||(p[n]=[]),p[n].push(t)},registerForBroadcast:function(t,n,e){f[t]||(f[t]=[]),f[t].push([n,e])},deregisterForBroadcast:function(t,n){var e=f[t],i=e.find(function(t){return t[1]==n}),o=e.indexOf(i);e.splice(o,1)},broadcast:function(t,n){(f[t]||[]).forEach(function(t){t[0].call(t[1],n)})}};var l=function(t,n,e){};l.prototype={init:function(t,n,e){var i=t.node;this.view=t,this.node=i,this.config=n,this.name=e,this.templates={};var o=this;if(pw.node.toA(i.querySelectorAll(":scope > *[data-template]")).forEach(function(t){var n=t.cloneNode(!0);pw.node.remove(t);var e=n.getAttribute("data-scope");this.templates[e]?this.templates[e].views.push(pw.view.init(n)):this.templates[e]=pw.collection.init(pw.view.init(n)),n.removeAttribute("data-template")},this),this.state=pw.state.init(this.node),this.dCb){var r=pw.node.component(this.node.parentNode);r&&(r.addEventListener("mutated",function(t){o.transform(o.dCb(t.target._evtData))}),o.transform(o.dCb(pw.state.init(r).current())))}var a=function(t){t.preventDefault();var n=pw.node.scope(t.target);n&&o.mutated(n)};i.addEventListener("submit",a),i.addEventListener("change",function(t){pw.node.inForm(t.target)||a(t)}),this.inited&&this.inited()},listen:function(t,n){pw.component.registerForBroadcast(t,n,this)},ignore:function(t){pw.component.deregisterForBroadcast(t,this)},instruct:function(t,n){this.endpoint=pw.instruct;var e=this.state.current();if(1===e.length){var i=this.view.scope(e[0].scope),o=i.views[0].node;if("empty"===o.getAttribute("data-version")){var r=this;return void pw.instruct.template(i,function(t){var e=o.parentNode;e.replaceChild(t.node,o),n.forEach(function(t){r[t[0]](t[1])})})}}n.forEach(function(t){this[t[0]](t[1])},this)},message:function(t,n){},mutated:function(t){this.mutation(this.state.diffNode(t)),this.state.update(),pw.node.trigger("mutated",this.node,this.state.current())},mutation:function(t){},transform:function(t){this._transform(t)},_transform:function(t){t&&(t.length>0?this.view.scope(t[0].scope).endpoint(this.endpoint||this).apply(t):pw.node.breadthFirst(this.view.node,function(){this.hasAttribute("data-scope")&&pw.node.remove(this)}),pw.node.trigger("mutated",this.node,this.state.current()))},revert:function(){this.transform(this.state.revert())},rollback:function(){this.transform(this.state.rollback())},template:function(t,n){var e;(e=this.templates[t.scope])&&n(e)},"delete":function(t){this.state["delete"](t),this.transform(this.state.current())},append:function(t){this.state.append(t),this.transform(this.state.current())},prepend:function(t){this.state.prepend(t),this.transform(this.state.current())},parent:function(){var t=pw.node.scope(this.node);return t?pw.state.init(t).current()[0]:void 0},dependent:function(t){this.dCb=t}},pw.init.register(function(){pw.socket.init({cb:function(t){window.socket=t}})}),pw.socket={init:function(t){return pw.socket.connect(t.host,t.port,t.protocol,t.connId,t.cb)},connect:function(t,n,e,i,o){if("undefined"==typeof t&&(t=window.location.hostname),"undefined"==typeof n&&(n=window.location.port),"undefined"==typeof e&&(e=window.location.protocol),"undefined"==typeof i&&(i=document.getElementsByTagName("body")[0].getAttribute("data-socket-connection-id")),i){var r="";return"http:"===e?r+="ws://":"https:"===e&&(r+="wss://"),r+=t,n&&(r+=":"+n),r+="/?socket_connection_id="+i,new w(r,o)}}};var w=function(t,n){var e=this;this.callbacks={},this.url=t,this.initCb=n,this.ws=new WebSocket(t),this.id=t.split("socket_connection_id=")[1];var i;this.ws.onmessage=function(t){pw.component.broadcast("socket:loaded");var n=JSON.parse(t.data);if(n.id){var i=e.callbacks[n.id];if(i)return void i.call(this,n)}e.message(n)},this.ws.onclose=function(t){console.log("socket closed"),clearInterval(i),e.reconnect()},this.ws.onopen=function(t){console.log("socket open"),e.initCb&&e.initCb(e),i=setInterval(function(){e.send({action:"ping"})},3e4)}};w.prototype={send:function(t,n){pw.component.broadcast("socket:loading"),t.id=pw.util.guid(),t.input||(t.input={}),t.input.socket_connection_id=this.id,this.callbacks[t.id]=n,this.ws.send(JSON.stringify(t))},message:function(t){console.log("received message"),console.log(t);var n='*[data-channel="'+t.channel+'"]';if(t.channel&&"component"===t.channel.split(":")[0])return void pw.component.push(t);var e=pw.node.toA(document.querySelectorAll(n));0!==e.length&&pw.instruct.process(pw.collection.fromNodes(e,n),t,this)},reconnect:function(){var t=this;t.wait?t.wait*=1.25:t.wait=100,console.log("reconnecting socket in "+t.wait+"ms"),setTimeout(function(){pw.socket.init({cb:t.initCb})},t.wait)},fetchView:function(t,n){var e;if(window.location.hash){var i=window.location.hash.split("#:")[1].split("/");i.shift(),e=i.join("/")}else e=window.location.pathname+window.location.search;this.send({action:"fetch-view",lookup:t,uri:e},function(t){var e=pw.view.fromStr(t.body);e.node?(e.node.removeAttribute("data-id"),n(e)):n()})}},pw.instruct={process:function(t,n,e){1===t.length()&&"empty"===t.views[0].node.getAttribute("data-version")?pw.instruct.fetchView(n,e,t.views[0].node):pw.instruct.perform(t,n.payload)},fetchView:function(t,n,e){n.fetchView({channel:t.channel},function(n){if(n){var i=e.parentNode;i.replaceChild(n.node,e);var o='*[data-channel="'+t.channel+'"]',r=pw.node.toA(i.querySelectorAll(o));pw.instruct.perform(pw.collection.fromNodes(r,o),t.payload)}else console.log("trouble fetching view :(")})},template:function(t,n){var e={};if(!t||!t.first())return n();var i=t.first().node;if(i.hasAttribute("data-channel"))e.channel=t.first().node.getAttribute("data-channel");else{if(!i.hasAttribute("data-ui")||!i.hasAttribute("data-scope"))return void n();e.component=pw.node.component(i).getAttribute("data-ui"),e.scope=i.getAttribute("data-scope")}window.socket.fetchView(e,function(t){n(t)})},perform:function(t,n){var e=this;(n||[]).forEach(function(n,i){var o=n[0],r=n[1],a=n[2];if(!t[o])return void console.log("could not find method named: "+o);if("with"==o||"for"==o||"bind"==o||"repeat"==o||"apply"==o)return void t.endpoint(e)[o].call(t,r,function(t){pw.instruct.perform(this,a[r.indexOf(t)])});if("attrs"==o)return void e.performAttr(t.attrs(),a);var c=t[o].call(t,r);a instanceof Array?pw.instruct.perform(c,a):c&&(t=c)}),pw.component.findAndInit(t.node)},performAttr:function(t,n){n.forEach(function(n){var e=n[0],i=n[1],o=n[2];i?t.set(e,i):t[o[0][0]](e,o[0][1])})}},Array.prototype.flatten||(Array.prototype.flatten=function(){return this.reduce(function(t,n){return t.concat(Array.isArray(n)?n.flatten():n)},[])}),Array.prototype.find||(Array.prototype.find=function(t){if(null==this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var n,e=Object(this),i=e.length>>>0,o=arguments[1],r=0;i>r;r++)if(n=e[r],t.call(o,n,r,e))return n;return void 0}),Array.ensure=function(t){return t instanceof Array?t:[t]},NodeList.prototype.forEach=Array.prototype.forEach,Object.prototype.pairs||Object.defineProperty(Object.prototype,"pairs",{value:function(){return Object.keys(this).map(function(t){return[t,this[t]]},this)},enumerable:!1}),"function"==typeof define&&define.amd?define(pw):"object"==typeof module&&module.exports?module.exports=pw:this.pw=pw}();
|
1
|
+
var pw={version:"0.2.4"};!function(){pw.util={guid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var n=16*Math.random()|0,e="x"==t?n:3&n|8;return e.toString(16)})},dup:function(t){return JSON.parse(JSON.stringify(t))}};var t=[];pw.init={register:function(n){t.push(n)}},document.addEventListener("DOMContentLoaded",function(){t.forEach(function(t){t()})});var e=["data-scope","data-prop"],i=["SELECT"],o=["AREA","BASE","BASEFONT","BR","HR","INPUT","IMG","LINK","META"];pw.node={value:function(t){return"INPUT"===t.tagName?"checkbox"===t.type?t.checked?t.value?t.value:!0:!1:t.value:"TEXTAREA"===t.tagName?t.value:"SELECT"===t.tagName?t.value:t.textContent.trim()},significant:function(t,n){t===document&&(t=document.getElementsByTagName("body")[0]),void 0===n&&(n=[]);var e,i;return(e=pw.node.isSignificant(t))?(i=[],n.push([{node:e[0],type:e[1]},i])):i=n,pw.node.toA(t.children).forEach(function(t){pw.node.significant(t,i)}),n},isSignificant:function(t){var n=e.find(function(n){return t.hasAttribute(n)});return n?[t,n.split("-")[1]]:!1},mutable:function(t){pw.node.significant(t).flatten().filter(function(t){return pw.node.isMutable(t.node)}).map(function(t){return t.node})},isMutable:function(t){var n=t.tagName;return"FORM"===n||"INPUT"===n&&!t.disabled},trigger:function(t,n,e){var i=document.createEvent("Event");i.initEvent(t,!0,!0),n._evtData=e,n.dispatchEvent(i)},replaceEventListener:function(t,n,e){n.removeEventListener(t),n.addEventListener(t,e)},inForm:function(t){if("FORM"===t.tagName)return!0;var n=t.parentNode;return n&&n!==document?pw.node.inForm(n):void 0},component:function(t){if(t.getAttribute("data-ui"))return t;var n=t.parentNode;return n&&n!==document?pw.node.component(n):void 0},scope:function(t){if(t.getAttribute("data-scope"))return t;var n=t.parentNode;return n&&n!==document?pw.node.scope(n):void 0},scopeName:function(t){if(t.getAttribute("data-scope"))return t.getAttribute("data-scope");var n=t.parentNode;return n&&n!==document?pw.node.scopeName(n):void 0},prop:function(t){if(t.getAttribute("data-prop"))return t;var n=t.parentNode;return n&&n!==document?pw.node.prop(n):void 0},propName:function(t){if(t.getAttribute("data-prop"))return t.getAttribute("data-prop");var n=t.parentNode;return n&&n!==document?pw.node.propName(n):void 0},versionName:function(t){return t.hasAttribute("data-version")?t.getAttribute("data-version"):void 0},invoke:function(t,n){n.call(t)},invokeWithData:function(t,n,e){pw.node.isNodeList(t)&&(t=pw.node.toA(t)),t=Array.ensure(t),n=Array.ensure(n),t.forEach(function(t,i){e.call(t,n[i])})},match:function(t,e){pw.node.isNodeList(t)&&(t=pw.node.toA(t)),t=Array.ensure(t),e=Array.ensure(e);var i=e.reduce(function(t,e,i){var o=n[i]||n[n.length-1],r=o.cloneNode(!0);return o.parentNode.insertBefore(r),t.concat([r])},[]);return t.forEach(function(t){t.parentNode.removeChild(t)}),i},repeat:function(t,n,e){pw.node.invokeWithData(pw.node.match(t,n),n,e)},bind:function(t,n,e){var i=pw.node.findBindings(n)[0];pw.node.invokeWithData(n,t,function(t){t&&(t.id&&this.setAttribute("data-id",t.id),pw.node.bindDataToScope(t,i,n),"undefined"!=typeof e&&e.call(this,t))})},apply:function(t,n,e){var i=pw.node.match(n,t);return pw.node.bind(t,i,e),i},findBindings:function(t){var n=[];return pw.node.breadthFirst(t,function(){var t=this,e=t.getAttribute("data-scope");if(e){var i=[];pw.node.breadthFirst(t,function(){var n=this;if(t==n||!n.getAttribute("data-scope")){var e=n.getAttribute("data-prop");e&&i.push({prop:e,doc:n})}}),n.push({scope:e,props:i,doc:t})}}),n},bindDataToScope:function(t,n,e){t&&n&&n.props.forEach(function(n){k=n.prop,v=t[k],v||(v=""),"object"==typeof v?(pw.node.bindValueToNode(v.__content,n.doc),pw.node.bindAttributesToNode(v.__attrs,n.doc)):pw.node.bindValueToNode(v,n.doc)})},bindAttributesToNode:function(t,n){var e=pw.attrs.init(pw.view.init(n));for(var i in t){var o=t[i];"function"==typeof o&&(o=o.call(n.getAttribute(i))),o?o instanceof Array?o.forEach(function(t){e[t[0]](i,t[1])}):e.set(i,o):e.remove(i)}},bindValueToNode:function(t,n){pw.node.isTagWithoutValue(n)||("INPUT"===n.tagName&&"checkbox"===n.type?t===!0||n.value&&t===n.value?n.checked=!0:n.checked=!1:"TEXTAREA"===n.tagName||pw.node.isSelfClosingTag(n)?n.value=t:t&&(n.innerHTML=t))},isTagWithoutValue:function(t){return-1!=i.indexOf(t.tagName)?!0:!1},isSelfClosingTag:function(t){return-1!=o.indexOf(t.tagName)?!0:!1},breadthFirst:function(t,n){for(var e=[t];e.length>0;){var i=e.shift();if(i){"object"==typeof i&&"nodeType"in i&&1===i.nodeType&&i.cloneNode&&n.call(i);var o=i.childNodes;if(o)for(var r=0;r<o.length;r++)e.push(o[r])}}},isNodeList:function(t){return"undefined"!=typeof t.length},byAttr:function(t,n,e){return pw.node.all(t).filter(function(t){var i=t.getAttribute(n);return null!==i&&("undefined"==typeof e||i==e)})},setAttr:function(t,n,e){"style"===n?e.pairs().forEach(function(n){t.style[n[0]]=n[1]}):("class"===n&&(e=e.join(" ")),"checked"===n&&(e=e?"checked":"",t.checked=e),t.setAttribute(n,e))},all:function(t){var n=[];return t?(document!==t&&n.push(t),n.concat(pw.node.toA(t.getElementsByTagName("*")))):n},before:function(t,n){t.parentNode.insertBefore(n,t)},after:function(t,n){t.parentNode.insertBefore(n,this.nextSibling)},replace:function(t,n){t.parentNode.replaceChild(n,t)},append:function(t,n){t.appendChild(n)},prepend:function(t,n){t.insertBefore(n,t.firstChild)},remove:function(t){t.parentNode.removeChild(t)},clear:function(t){for(;t.firstChild;)pw.node.remove(t.firstChild)},title:function(t,n){var e;(e=t.getElementsByTagName("title")[0])&&(e.innerText=n)},toA:function(t){return Array.prototype.slice.call(t)},serialize:function(t){var n,e,i,o,r,a,s={};return t.querySelectorAll("input, select, textarea").forEach(function(t){n=s,i=t.name.split("["),o=i[i.length-1],i.forEach(function(i){e=pw.node.value(t),"]"==i&&(r[a]instanceof Array||(r[a]=[]),e&&r[a].push(e)),i!=o&&(e={}),i=i.replace("]",""),""!=i&&"_method"!=i&&(n[i]||(n[i]=e),r=n,a=i,n=n[i])})}),s}},pw.attrs={init:function(t){return new a(pw.collection.init(t))}};var r={hash:["style"],bool:["selected","checked","disabled","readonly","multiple"],mult:["class"]},a=function(t){this.views=t.views};a.prototype={findType:function(t){return r.hash.indexOf(t)>-1?"hash":r.bool.indexOf(t)>-1?"bool":r.mult.indexOf(t)>-1?"mult":"text"},findValue:function(t,n){switch(n){case"class":return t.node.classList;case"style":return t.node.style}return"bool"===this.findType(n)?t.node.hasAttribute(n):t.node.getAttribute(n)},set:function(t,n){this.views.forEach(function(e){pw.node.setAttr(e.node,t,n)})},remove:function(t){this.views.forEach(function(n){n.node.removeAttribute(t)})},ensure:function(t,n){this.views.forEach(function(e){var i=this.findValue(e,t);if("class"===t)i.contains(n)||i.add(n);else if("style"===t)n.pairs().forEach(function(t){e.node.style[t[0]]=t[1]});else if("bool"===this.findType(t))e.node.hasAttribute(t)||pw.node.setAttr(e.node,t,t);else{var i=e.node.getAttribute(t)||"";i.match(n)||pw.node.setAttr(e.node,t,i+n)}},this)},deny:function(t,n){this.views.forEach(function(e){var i=this.findValue(e,t);"class"===t?i.contains(n)&&i.remove(n):"style"===t?n.pairs().forEach(function(t){e.node.style[t[0]]=e.node.style[t[0]].replace(t[1],"")}):"bool"===this.findType(t)?e.node.hasAttribute(t)&&e.node.removeAttribute(t):pw.node.setAttr(e.node,t,e.node.getAttribute(t).replace(n,""))},this)},insert:function(t,n){this.views.forEach(function(e){var i=this.findValue(e,t);switch(t){case"class":i.add(n);break;default:pw.node.setAttr(e.node,t,i+n)}},this)}},pw.state={build:function(t,n){var e;return t.reduce(function(t,i){return(e=pw.state.buildForNode(i,n))&&t.push(e),t},[])},buildForNode:function(t,n){var e=t[0],i={};if("scope"===e.type)i.id=e.node.getAttribute("data-id"),i.scope=e.node.getAttribute("data-scope");else if("prop"===e.type&&n)return void(n[e.node.getAttribute("data-prop")]=pw.node.value(e.node));return i.__nested=pw.state.build(t[1],i),i},init:function(t,n){return new s(t,n)}};var s=function(t){this.node=t,this.snapshots=[],this.update()};s.prototype={update:function(){this.snapshots.push(pw.state.build(pw.node.significant(this.node)))},diffNode:function(t){return t.hasAttribute("data-ui")?{__nested:pw.state.build(pw.node.significant(t))}:pw.state.build(pw.node.significant(pw.node.scope(t)))[0]},revert:function(){var t=pw.util.dup(this.snapshots[0]);return this.snapshots=[t],t},rollback:function(){return this.snapshots.pop(),this.current()},node:function(t){return this.current.flatten().find(function(n){return n.scope===t.scope&&n.id===t.id})},append:function(t){var n=this.copy();n.push(t),this.snapshots.push(n)},prepend:function(t){var n=this.copy();n.unshift(t),this.snapshots.push(n)},remove:function(t){var n=this.copy(),e=n.find(function(n){return n.id===t.id});e&&(n.splice(n.indexOf(e),1),this.snapshots.push(n))},copy:function(){return pw.util.dup(this.current())},current:function(){return this.snapshots[this.snapshots.length-1]},initial:function(){return this.snapshots[0]}},pw.view={init:function(t){return new c(t)},fromStr:function(t){var n="div";(t.match(/^<tr/)||t.match(/^<tbody/))&&(n="table");var e=document.createElement(n);return e.innerHTML=t,pw.view.init(e.childNodes[0])}};var c=function(t){this.node=t};c.prototype={clone:function(){return pw.view.init(this.node.cloneNode(!0))},title:function(t){pw.node.title(this.node,t)},text:function(t){this.node.innerText=t},html:function(t){this.node.innerHTML=t},component:function(t){return pw.collection.init(pw.node.byAttr(this.node,"data-ui",t).reduce(function(t,n){return t.concat(pw.view.init(n))},[]),this)},attrs:function(){return pw.attrs.init(this)},invoke:function(t){pw.node.invoke(this.node,t)},match:function(t){pw.node.match(this.node,t)},invokeWithData:function(t,n){pw.node.invokeWithData(this.node,t,n)},repeat:function(t,n){pw.node.repeat(this.node,t,n)},bind:function(t,n){pw.node.bind(t,this.node,n)},apply:function(t,n){pw.node.apply(t,this.node,n)},use:function(t,n){var e=this;if(this.node.getAttribute("data-version")!=t){this.node.setAttribute("data-version",t);var i={scope:this.node.getAttribute("data-scope"),version:t};window.socket.fetchView(i,function(t){t.node.setAttribute("data-channel",e.node.getAttribute("data-channel")),pw.node.replace(e.node,t.node),e.node=t.node,n()})}else n()},setEndpoint:function(t){return this.endpoint=t,this},first:function(){return this},length:function(){return 1}},["scope","prop"].forEach(function(t){c.prototype[t]=function(n){return pw.collection.init(pw.node.byAttr(this.node,"data-"+t,n).reduce(function(t,n){return t.concat(pw.view.init(n))},[]),this,n)}}),["remove","clear","versionName"].forEach(function(t){c.prototype[t]=function(){return pw.node[t](this.node)}}),["after","before","replace","append","prepend","insert"].forEach(function(t){c.prototype[t]=function(n){return pw.node[t](this.node,n.node)}}),pw.collection={init:function(t,n,e){return t instanceof u?t:(t.constructor!==Array&&(t=[t]),new u(t,n,e))},fromNodes:function(t,n,e){return pw.collection.init(t.map(function(t){return pw.view.init(t)}),n,e)}};var u=function(t,n,e){this.views=t,this.parent=n,this._scope=e};u.prototype={clone:function(){return pw.collection.init(this.views.map(function(t){return t.clone()}))},last:function(){return this.views[this.length()-1]},first:function(){return this.views[0]},removeView:function(t){var n=this.views.indexOf(t);n>-1&&this.views.splice(n,1)[0].remove()},addView:function(t){var n=[];t instanceof u?n=t.views:n.push(t),this.length()>0?n.forEach(function(t){pw.node.after(this.last().node,t.node)},this):this.parent&&n.forEach(function(t){this.parent.append(t)},this),this.views=this.views.concat(n)},order:function(t){t.forEach(function(t){if(t){var n=this.views.find(function(n){return n.node.getAttribute("data-id")==t.toString()});if(n){n.node.parentNode.appendChild(n.node);var e=this.views.indexOf(n);this.views.splice(e,1),this.views.push(n)}}},this)},length:function(){return this.views.length},attrs:function(){return pw.attrs.init(this.views)},append:function(t){t=Array.ensure(t);var n=this.last();return this.views.push(n.append(t)),n},prepend:function(t){t=Array.ensure(t);var n=t.map(function(t){var n=this.first().prepend(t);return this.views.push(n),n},this);return pw.collection.init(n)},invoke:function(t){pw.node.invoke(this.views,t)},invokeWithData:function(t,n){t=Array.ensure(t),this.views.forEach(function(e,i){n.call(e,t[i])})},match:function(t,n){if(t=Array.ensure(t),0===t.length)return this.remove(),n.call(this);var e,i;if(this.views[0]&&(e=this.views[0].clone(),i=this.views[0].node.parentNode),this.views.slice(0).forEach(function(n){var e=n.node.getAttribute("data-id");return!e&&t[0].id?void this.removeView(n):void(e&&(t.find(function(t){return t.id&&t.id.toString()===e})||this.removeView(n)))},this),!(t.length>this.length()))return n.call(this);var o=this;return this.endpoint.template(this,function(r){return r||(r=e.clone(),o.parent=pw.view.init(i)),t.forEach(function(t){if(!o.views.find(function(n){return n.node.getAttribute("data-id")===(t.id||"").toString()})){var n=r.clone();n instanceof u&&(n=n.views[0]),n.node.setAttribute("data-id",t.id),o.addView(n),pw.component.findAndInit(n.node)}},o),n.call(o)}),this},repeat:function(t,n){this.match(t,function(){this.invokeWithData(t,n)})},bind:function(t,n){return this.invokeWithData(t,function(t){this.bind(t),"undefined"!=typeof n&&n.call(this,t)}),this},apply:function(t,n){this.match(t,function(){var e;this.order(t.map(function(t){return(e=t.id)?e.toString():void 0})),this.bind(t,n)})},version:function(t,n){this.match(t,function(){this.invokeWithData(t,n)})},setEndpoint:function(t){return this.endpoint=t,this}},["scope","prop","component"].forEach(function(t){u.prototype[t]=function(n){return pw.collection.init(this.views.reduce(function(e,i){return e.concat(i[t](n).views)},[]))}}),["remove","clear","text","html"].forEach(function(t){u.prototype[t]=function(n){this.views.forEach(function(e){e[t](n)})}}),pw.init.register(function(){pw.component.findAndInit(document.querySelectorAll("body")[0])});var d={},p={},f={},h={};pw.component={init:function(t,n){return new l(t,n)},resetChannels:function(){p={}},findAndInit:function(t){pw.node.byAttr(t,"data-ui").forEach(function(t){if(!t._ui){var n=t.getAttribute("data-ui"),e=d[n]||pw.component.init;h[n]||(h[n]=[]);var i=t.getAttribute("data-channel"),o=t.getAttribute("data-config"),r=pw.view.init(t),a=h[n].length,s=new e(r,pw.component.buildConfigObject(o),n,a);s.init(r,o,n),pw.component.registerForChannel(s,i),h[n].push(s),t._ui=!0}})},push:function(t){var n=t.channel,e=t.payload,i=e.instruct;(p[n]||[]).forEach(function(t){i?t.instruct(n,i):t.message(n,e)})},register:function(t,n){var e=l.prototype;Object.getOwnPropertyNames(e).forEach(function(t){n.prototype[t]=e[t]}),d[t]=n},buildConfigObject:function(t){return t?t.split(";").reduce(function(t,n){var e=n.trim().split(":");return t[e[0].trim()]=e[1].trim(),t},{}):{}},registerForChannel:function(t,n){p[n]||(p[n]=[]),p[n].push(t)},registerForBroadcast:function(t,n,e){f[t]||(f[t]=[]),f[t].push([n,e])},deregisterForBroadcast:function(t,n){var e=f[t],i=e.find(function(t){return t[1]==n}),o=e.indexOf(i);e.splice(o,1)},broadcast:function(t,n){(f[t]||[]).forEach(function(t){t[0].call(t[1],n)})}};var l=function(t,n,e){};l.prototype={init:function(t,n,e){var i=t.node;this.view=t,this.node=i,this.config=n,this.name=e,this.templates={};var o=this;if(pw.node.toA(i.querySelectorAll(":scope > *[data-template]")).forEach(function(t){var n=t.cloneNode(!0);pw.node.remove(t);var e=n.getAttribute("data-scope");this.templates[e]?this.templates[e].views.push(pw.view.init(n)):this.templates[e]=pw.collection.init(pw.view.init(n)),n.removeAttribute("data-template")},this),this.state=pw.state.init(this.node),this.dCb){var r=pw.node.component(this.node.parentNode);r&&(r.addEventListener("mutated",function(t){o.transform(o.dCb(t.target._evtData))}),o.transform(o.dCb(pw.state.init(r).current())))}var a=function(t){var n=pw.node.scope(t.target);n&&(t.preventDefault(),o.mutated(n))};i.addEventListener("submit",a),i.addEventListener("change",function(t){pw.node.inForm(t.target)||a(t)}),this.inited&&this.inited()},listen:function(t,n){pw.component.registerForBroadcast(t,n,this)},ignore:function(t){pw.component.deregisterForBroadcast(t,this)},bubble:function(t,n){var e=pw.node.component(this.node.parentNode);(f[t]||[]).forEach(function(t){t[1].node==e&&t[0].call(t[1],n)})},trickle:function(t,n){var e=f[t]||[];pw.node.toA(this.node.getElementsByTagName("*")).forEach(function(t){e.forEach(function(e){e[1].node==t&&e[0].call(e[1],n)})})},instruct:function(t,n){this.endpoint=pw.instruct;var e=this.state.current();if(1===e.length){var i=this.view.scope(e[0].scope),o=i.views[0].node;if("empty"===o.getAttribute("data-version")){var r=this;return void pw.instruct.template(i,function(t){var e=o.parentNode;e.replaceChild(t.node,o),n.forEach(function(t){r[t[0]](t[1])})})}}n.forEach(function(t){this[t[0]](t[1])},this)},message:function(t,n){},mutated:function(t){this.mutation(this.state.diffNode(t)),this.state.update(),pw.node.trigger("mutated",this.node,this.state.current())},mutation:function(t){},transform:function(t){this._transform(t)},_transform:function(t){t&&(t.length>0?this.view.scope(t[0].scope).setEndpoint(this.endpoint||this).apply(t):pw.node.breadthFirst(this.view.node,function(){this.hasAttribute("data-scope")&&pw.node.remove(this)}),pw.node.trigger("mutated",this.node,this.state.current()))},revert:function(){this.transform(this.state.revert())},rollback:function(){this.transform(this.state.rollback())},template:function(t,n){var e;(e=this.templates[t.scope])&&n(e)},remove:function(t){this.state.remove(t),this.transform(this.state.current())},append:function(t){this.state.append(t),this.transform(this.state.current())},prepend:function(t){this.state.prepend(t),this.transform(this.state.current())},parent:function(){var t=pw.node.scope(this.node);return t?pw.state.init(t).current()[0]:void 0},dependent:function(t){this.dCb=t}},pw.init.register(function(){pw.socket.init({cb:function(t){window.socket=t,pw.component.broadcast("socket:available")}})}),pw.socket={init:function(t){return pw.socket.connect(t.host,t.port,t.protocol,t.connId,t.cb)},connect:function(t,n,e,i,o){if("undefined"==typeof t&&(t=window.location.hostname),"undefined"==typeof n&&(n=window.location.port),"undefined"==typeof e&&(e=window.location.protocol),"undefined"==typeof i&&(i=document.getElementsByTagName("body")[0].getAttribute("data-socket-connection-id")),i){var r="";return"http:"===e?r+="ws://":"https:"===e&&(r+="wss://"),r+=t,n&&(r+=":"+n),r+="/?socket_connection_id="+i,new w(r,o)}}};var w=function(t,n){var e=this;this.callbacks={},this.url=t,this.initCb=n,this.ws=new WebSocket(t),this.id=t.split("socket_connection_id=")[1];var i;this.ws.onmessage=function(t){pw.component.broadcast("socket:loaded");var n=JSON.parse(t.data);if(n.id){var i=e.callbacks[n.id];if(i)return void i.call(this,n)}e.message(n)},this.ws.onclose=function(t){console.log("socket closed"),clearInterval(i),e.reconnect()},this.ws.onopen=function(t){console.log("socket open"),e.initCb&&e.initCb(e),i=setInterval(function(){e.send({action:"ping"})},3e4)}};w.prototype={send:function(t,n){pw.component.broadcast("socket:loading"),t.id=pw.util.guid(),t.input||(t.input={}),t.input.socket_connection_id=this.id,this.callbacks[t.id]=n,this.ws.send(JSON.stringify(t))},message:function(t){console.log("received message"),console.log(t);var n='*[data-channel="'+t.channel+'"]';if(t.channel&&"component"===t.channel.split(":")[0])return void pw.component.push(t);var e=pw.node.toA(document.querySelectorAll(n));0!==e.length&&pw.instruct.process(pw.collection.fromNodes(e,n),t,this)},reconnect:function(){var t=this;t.wait?t.wait*=1.25:t.wait=100,console.log("reconnecting socket in "+t.wait+"ms"),setTimeout(function(){pw.socket.init({cb:t.initCb})},t.wait)},fetchView:function(t,n){var e;if(window.location.hash){var i=window.location.hash.split("#:")[1].split("/");i.shift(),e=i.join("/")}else e=window.location.pathname+window.location.search;this.send({action:"fetch-view",lookup:t,uri:e},function(t){var e=pw.view.fromStr(t.body);e.node?(e.node.removeAttribute("data-id"),n(e)):n()})}},pw.instruct={process:function(t,n,e){1===t.length()&&"empty"===t.views[0].node.getAttribute("data-version")?pw.instruct.fetchView(n,e,t.views[0].node):pw.instruct.perform(t,n.payload)},fetchView:function(t,n,e){n.fetchView({channel:t.channel},function(n){if(n){var i=e.parentNode;i.replaceChild(n.node,e);var o='*[data-channel="'+t.channel+'"]',r=pw.node.toA(i.querySelectorAll(o));pw.instruct.perform(pw.collection.fromNodes(r,o),t.payload)}else console.log("trouble fetching view :(")})},template:function(t,n){var e={};if(!t||!t.first())return n();var i=t.first().node;if(i.hasAttribute("data-channel"))e.channel=t.first().node.getAttribute("data-channel");else{if(!i.hasAttribute("data-ui")||!i.hasAttribute("data-scope"))return void n();e.component=pw.node.component(i).getAttribute("data-ui"),e.scope=i.getAttribute("data-scope")}window.socket.fetchView(e,function(t){n(t)})},perform:function(t,n,e){function i(n,e){var i=e[0],r=e[1],s=e[2];if("with"===i&&(i="invoke"),"for"===i&&(i="invokeWithData"),!t[i])return void console.log("could not find method named: "+i);if("invoke"==i||"invokeWithData"==i||"bind"==i||"repeat"==i||"apply"==i||"version"==i){var c=t.length(),u=0,d=function(){u++,u==c&&o()};return void t.setEndpoint(a)[i].call(t,r,function(t){pw.instruct.perform(this,s[r.indexOf(t)],d)})}if("attrs"==i)return void a.performAttr(t.attrs(),s);if("use"==i)return t.setEndpoint(a),void t.use(r,o);var p=t[i].call(t,r);return s instanceof Array?void pw.instruct.perform(p,s,o):(p&&(t=p),void o())}function o(){s<n.length?i(t,n[s++]):r()}function r(){e?e():pw.component.findAndInit(t.node)}var a=this;n=n||[];var s=0;o()},performAttr:function(t,n){n.forEach(function(n){var e=n[0],i=n[1],o=n[2];i?t.set(e,i):t[o[0][0]](e,o[0][1])})}},Array.prototype.flatten||(Array.prototype.flatten=function(){return this.reduce(function(t,n){return t.concat(Array.isArray(n)?n.flatten():n)},[])}),Array.prototype.find||(Array.prototype.find=function(t){if(null==this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var n,e=Object(this),i=e.length>>>0,o=arguments[1],r=0;i>r;r++)if(n=e[r],t.call(o,n,r,e))return n;return void 0}),Array.ensure=function(t){return t instanceof Array?t:[t]},NodeList.prototype.forEach=Array.prototype.forEach,Object.prototype.pairs||Object.defineProperty(Object.prototype,"pairs",{value:function(){return Object.keys(this).map(function(t){return[t,this[t]]},this)},enumerable:!1}),"function"==typeof define&&define.amd?define(pw):"object"==typeof module&&module.exports?module.exports=pw:this.pw=pw}();
|
data/lib/pakyow.rb
CHANGED
@@ -0,0 +1,79 @@
|
|
1
|
+
require "thor"
|
2
|
+
|
3
|
+
module Pakyow
|
4
|
+
class CommandLineInterface < Thor
|
5
|
+
map ["--version", "-v"] => :version
|
6
|
+
|
7
|
+
desc "new DESTINATION", <<DESC
|
8
|
+
Description:
|
9
|
+
The 'pakyow new' command creates a new Pakyow application at the path
|
10
|
+
specified.
|
11
|
+
|
12
|
+
Example:
|
13
|
+
pakyow new path/to/application
|
14
|
+
|
15
|
+
This generates a new Pakyow application in path/to/application.
|
16
|
+
DESC
|
17
|
+
def new(destination)
|
18
|
+
require "generators/pakyow/app/app_generator"
|
19
|
+
Pakyow::Generators::AppGenerator.start(destination)
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "console ENVIRONMENT", <<DESC
|
23
|
+
Description:
|
24
|
+
The 'pakyow console' command stages the application and starts an interactive
|
25
|
+
session. If environment is not specified, the default_environment defined by
|
26
|
+
your application will be used.
|
27
|
+
|
28
|
+
Example:
|
29
|
+
pakyow console development
|
30
|
+
|
31
|
+
This starts the console with the 'development' configuration.
|
32
|
+
DESC
|
33
|
+
def console(environment = :development)
|
34
|
+
require "pakyow/commands/console"
|
35
|
+
Pakyow::Commands::Console
|
36
|
+
.new(environment: environment)
|
37
|
+
.run
|
38
|
+
rescue LoadError => e
|
39
|
+
raise Thor::Error, <<ERR
|
40
|
+
Error: #{e.message}
|
41
|
+
You must run the `pakyow console` command in a Pakyow application's root directory.
|
42
|
+
ERR
|
43
|
+
end
|
44
|
+
|
45
|
+
desc "server ENVIRONMENT", <<DESC
|
46
|
+
Description:
|
47
|
+
The 'pakyow server' command starts the application server.
|
48
|
+
|
49
|
+
If environment is not specified, the default_environment defined
|
50
|
+
by your application will be used.
|
51
|
+
|
52
|
+
If port is not specified, the port defined
|
53
|
+
by your application will be used (defaults to 3000).
|
54
|
+
|
55
|
+
Example:
|
56
|
+
pakyow server development -p 3001
|
57
|
+
|
58
|
+
This starts the application server on port 3001 with the 'development' configuration.
|
59
|
+
DESC
|
60
|
+
option :port, type: :numeric, aliases: :p, default: 3000
|
61
|
+
def server(environment = :development)
|
62
|
+
require "pakyow/commands/server"
|
63
|
+
Pakyow::Commands::Server
|
64
|
+
.new(environment: environment, port: options[:port])
|
65
|
+
.run
|
66
|
+
rescue LoadError => e
|
67
|
+
raise Thor::Error, <<ERR
|
68
|
+
Error: #{e.message}
|
69
|
+
You must run the `pakyow server` command in a Pakyow application's root directory.
|
70
|
+
ERR
|
71
|
+
end
|
72
|
+
|
73
|
+
desc "version", "Display the installed Pakyow version"
|
74
|
+
def version
|
75
|
+
require "pakyow/version"
|
76
|
+
puts "Pakyow #{Pakyow::VERSION}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "pakyow/commands/console_methods.rb"
|
2
|
+
|
3
|
+
module Pakyow
|
4
|
+
module Commands
|
5
|
+
class Console
|
6
|
+
def initialize(environment: ENV['RACK_ENV'] || :development)
|
7
|
+
ENV['RACK_ENV'] = environment.to_s
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
load_app
|
12
|
+
Pakyow::App.stage(ENV['RACK_ENV'])
|
13
|
+
require 'irb'
|
14
|
+
ARGV.clear
|
15
|
+
IRB::ExtendCommandBundle.include(ConsoleMethods)
|
16
|
+
IRB.start
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def load_app
|
22
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
23
|
+
require 'app/setup'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'pakyow/version'
|
2
|
+
|
3
|
+
module Pakyow
|
4
|
+
module Commands
|
5
|
+
class Server
|
6
|
+
attr_reader :port
|
7
|
+
|
8
|
+
def initialize(environment: ENV['RACK_ENV'] || :development, port: 3000)
|
9
|
+
ENV['RACK_ENV'] = environment.to_s
|
10
|
+
@port = port
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
load_app
|
15
|
+
Pakyow::Config.server.port = port
|
16
|
+
v = 'v' + Pakyow::VERSION
|
17
|
+
|
18
|
+
msg = ' __ ' + "\n"\
|
19
|
+
' ____ ____ _/ /____ ______ _ __' + "\n"\
|
20
|
+
' / __ \/ __ `/ //_/ / / / __ \ | /| / /' + "\n"\
|
21
|
+
' / /_/ / /_/ / ,< / /_/ / /_/ / |/ |/ / ' + "\n"\
|
22
|
+
' / .___/\__,_/_/|_|\__, /\____/|__/|__/ ' + v + "\n"\
|
23
|
+
'/_/ /____/ ' + "\n"
|
24
|
+
|
25
|
+
puts Pakyow::Logger::COLOR_SEQ % (30 + Pakyow::Logger::COLOR_TABLE.index(:red)) + msg + Pakyow::Logger::RESET_SEQ
|
26
|
+
|
27
|
+
Pakyow::App.run(ENV['RACK_ENV'])
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def load_app
|
33
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
34
|
+
require 'app/setup'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pakyow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Powell
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-04-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pakyow-support
|
@@ -17,112 +17,112 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - '='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.
|
20
|
+
version: 0.11.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - '='
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0.
|
27
|
+
version: 0.11.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: pakyow-core
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - '='
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
34
|
+
version: 0.11.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - '='
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.
|
41
|
+
version: 0.11.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: pakyow-presenter
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - '='
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 0.
|
48
|
+
version: 0.11.0
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - '='
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.
|
55
|
+
version: 0.11.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: pakyow-mailer
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - '='
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 0.
|
62
|
+
version: 0.11.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - '='
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.
|
69
|
+
version: 0.11.0
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: pakyow-realtime
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - '='
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 0.
|
76
|
+
version: 0.11.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - '='
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 0.
|
83
|
+
version: 0.11.0
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: pakyow-ui
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - '='
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: 0.
|
90
|
+
version: 0.11.0
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - '='
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: 0.
|
97
|
+
version: 0.11.0
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: pakyow-rake
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
102
|
- - '='
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: 0.
|
104
|
+
version: 0.11.0
|
105
105
|
type: :runtime
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
109
|
- - '='
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: 0.
|
111
|
+
version: 0.11.0
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: pakyow-test
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - '='
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: 0.
|
118
|
+
version: 0.11.0
|
119
119
|
type: :runtime
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - '='
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: 0.
|
125
|
+
version: 0.11.0
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: bundler
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,6 +137,34 @@ dependencies:
|
|
137
137
|
- - "~>"
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '1.10'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: thor
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0.19'
|
147
|
+
type: :runtime
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0.19'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: rspec
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - "~>"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '3.0'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - "~>"
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '3.0'
|
140
168
|
description: Modern web framework for Ruby
|
141
169
|
email: bryan@metabahn.com
|
142
170
|
executables:
|
@@ -148,12 +176,6 @@ files:
|
|
148
176
|
- LICENSE
|
149
177
|
- README.md
|
150
178
|
- bin/pakyow
|
151
|
-
- lib/commands/USAGE
|
152
|
-
- lib/commands/USAGE-CONSOLE
|
153
|
-
- lib/commands/USAGE-NEW
|
154
|
-
- lib/commands/USAGE-SERVER
|
155
|
-
- lib/commands/console.rb
|
156
|
-
- lib/commands/server.rb
|
157
179
|
- lib/generators/pakyow/app/app_generator.rb
|
158
180
|
- lib/generators/pakyow/app/templates/Gemfile
|
159
181
|
- lib/generators/pakyow/app/templates/README.md
|
@@ -165,12 +187,17 @@ files:
|
|
165
187
|
- lib/generators/pakyow/app/templates/app/views/_templates/default.html
|
166
188
|
- lib/generators/pakyow/app/templates/app/views/index.html
|
167
189
|
- lib/generators/pakyow/app/templates/config.ru
|
190
|
+
- lib/generators/pakyow/app/templates/env
|
191
|
+
- lib/generators/pakyow/app/templates/env.example
|
192
|
+
- lib/generators/pakyow/app/templates/gitignore
|
168
193
|
- lib/generators/pakyow/app/templates/public/apple-touch-icon-precomposed.png
|
169
194
|
- lib/generators/pakyow/app/templates/public/apple-touch-icon.png
|
170
195
|
- lib/generators/pakyow/app/templates/public/favicon.ico
|
171
196
|
- lib/generators/pakyow/app/templates/public/scripts/ring/LICENSE
|
172
197
|
- lib/generators/pakyow/app/templates/public/scripts/ring/components/fastlink.js
|
173
198
|
- lib/generators/pakyow/app/templates/public/scripts/ring/components/fastlink.min.js
|
199
|
+
- lib/generators/pakyow/app/templates/public/scripts/ring/components/ga.js
|
200
|
+
- lib/generators/pakyow/app/templates/public/scripts/ring/components/ga.min.js
|
174
201
|
- lib/generators/pakyow/app/templates/public/scripts/ring/components/loader.js
|
175
202
|
- lib/generators/pakyow/app/templates/public/scripts/ring/components/loader.min.js
|
176
203
|
- lib/generators/pakyow/app/templates/public/scripts/ring/components/modal.js
|
@@ -189,10 +216,15 @@ files:
|
|
189
216
|
- lib/generators/pakyow/app/templates/public/styles/pakyow-css/structure.css
|
190
217
|
- lib/generators/pakyow/app/templates/public/styles/pakyow-css/syntax.css
|
191
218
|
- lib/generators/pakyow/app/templates/public/styles/pakyow-css/theme.css
|
219
|
+
- lib/generators/pakyow/app/templates/rspec
|
192
220
|
- lib/generators/pakyow/app/templates/spec/integration/app_spec.rb
|
193
221
|
- lib/generators/pakyow/app/templates/spec/spec_helper.rb
|
194
222
|
- lib/pakyow.rb
|
195
|
-
- lib/
|
223
|
+
- lib/pakyow/command_line_interface.rb
|
224
|
+
- lib/pakyow/commands/console.rb
|
225
|
+
- lib/pakyow/commands/console_methods.rb
|
226
|
+
- lib/pakyow/commands/server.rb
|
227
|
+
- lib/pakyow/version.rb
|
196
228
|
homepage: http://pakyow.org
|
197
229
|
licenses:
|
198
230
|
- MIT
|
@@ -213,9 +245,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
245
|
version: '0'
|
214
246
|
requirements: []
|
215
247
|
rubyforge_project:
|
216
|
-
rubygems_version: 2.
|
248
|
+
rubygems_version: 2.5.1
|
217
249
|
signing_key:
|
218
250
|
specification_version: 4
|
219
251
|
summary: Pakyow
|
220
252
|
test_files: []
|
221
|
-
has_rdoc:
|
data/lib/commands/USAGE
DELETED
data/lib/commands/USAGE-CONSOLE
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
Usage:
|
2
|
-
pakyow console [environment]
|
3
|
-
|
4
|
-
Description:
|
5
|
-
The 'pakyow console' command stages the application and starts an interactive
|
6
|
-
session. If environment is not specified, the default_environment defined by
|
7
|
-
your application will be used.
|
8
|
-
|
9
|
-
Example:
|
10
|
-
pakyow console development
|
11
|
-
|
12
|
-
This starts the console with the 'development' configuration.
|
data/lib/commands/USAGE-NEW
DELETED