www_app 1.3.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/README.md +42 -24
  4. data/VERSION +1 -1
  5. data/bin/www_app +15 -4
  6. data/lib/public/vendor/hogan-3.0.2.min.js +5 -0
  7. data/lib/public/vendor/instruct_instruct_instruct.js +247 -0
  8. data/lib/public/vendor/jquery-2.1.3.min.js +4 -0
  9. data/lib/public/vendor/lodash.min.js +89 -0
  10. data/lib/public/www_app.js +885 -625
  11. data/lib/www_app/CSS.rb +310 -0
  12. data/lib/www_app/HTML.rb +219 -0
  13. data/lib/www_app/JavaScript.rb +51 -0
  14. data/lib/www_app/TO.rb +897 -0
  15. data/lib/www_app.rb +324 -945
  16. data/playground/config.ru +102 -0
  17. data/specs/client-side/index.html +1 -1
  18. data/specs/client-side/index.js +31 -379
  19. data/specs/lib/config.ru +60 -31
  20. data/specs/lib/helpers.rb +24 -2
  21. data/specs/server-side/0000-new.rb +1 -1
  22. data/specs/server-side/0001-underscore-double.rb +38 -0
  23. data/specs/server-side/0001-underscore.rb +73 -0
  24. data/specs/server-side/0010-attrs.rb +3 -4
  25. data/specs/server-side/0011-id.rb +5 -5
  26. data/specs/server-side/0020-tag.rb +2 -2
  27. data/specs/server-side/0020-tag_content.rb +1 -1
  28. data/specs/server-side/0021-body.rb +1 -1
  29. data/specs/server-side/0021-script.rb +66 -20
  30. data/specs/server-side/{0021-page_title.rb → 0021-title.rb} +5 -3
  31. data/specs/server-side/0030-mustache.rb +27 -20
  32. data/specs/server-side/0030-style.rb +64 -21
  33. data/specs/server-side/0040-css.rb +4 -4
  34. data/specs/server-side/0041-pseudo.rb +55 -0
  35. data/specs/server-side/0042-slash.rb +20 -0
  36. data/specs/server-side/0060-text.rb +26 -0
  37. metadata +18 -13
  38. data/lib/public/jquery-2.1.1.js +0 -4
  39. data/lib/public/underscore-1.7.0.js +0 -6
  40. data/lib/public/underscore-min.map +0 -1
  41. data/lib/public/underscore.string-2.3.0.js +0 -1
  42. data/lib/www_app/Clean.rb +0 -169
  43. data/lib/www_app/dsl.rb +0 -86
  44. data/lib/www_app/source.rb +0 -53
  45. data/specs/server-side/0050-on.rb +0 -64
  46. data/specs/server-side/0060-string.rb +0 -32
  47. /data/lib/public/{jquery.serialize-object.min.js → vendor/jquery.serialize-object.min.js} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1e6c86983b022ba0cb44f08f012804a716d9540
4
- data.tar.gz: 129126c28fe6d0110f86b56b2b1442fb2b2ebd0f
3
+ metadata.gz: 6e7383ea452317733e67495f005aba1de108db87
4
+ data.tar.gz: 95c124150efed8c21bd5125bc01045f22ebada67
5
5
  SHA512:
6
- metadata.gz: 9d17ccf8f43ab3ded86ad37a81ca22ba10b403b5bb94f302845de8a9cc69902bdb3888d3dcbc4d90432ac9b024265adb7a9b396a0273a679a70111b879f9c835
7
- data.tar.gz: b74f84b2aef3a1b433fa8f2940c62e7cf09a48b0a4ed53f3ca632aa31e4f2f9c2f0d846365628e1056ba88bad8dca4d5dee0eadd4f2afccaba92fafb6a665d20
6
+ metadata.gz: 7a15da63cc2815f6d379452528f6d4e3b74a2bd4da1b7b3216731dfe1df92065f12df8381a73dfa015990da6c835ce4d1aaa387d346c1f4e9fc5566e7fc27c83
7
+ data.tar.gz: 178de31e0e686764030a17a30097a319fbab25f79173bf1e885a5dea9382aa5abf5e0dc7eb30f2c66ea0d9bd85e6873b63a3118502fe8d8b7900a9980d12d9ab
data/.gitignore CHANGED
@@ -15,6 +15,8 @@
15
15
  /test/tmp/
16
16
  /test/version_tmp/
17
17
  /tmp/
18
+ /playground/Public
19
+ /playground/tmp
18
20
 
19
21
  ## Specific to RubyMotion:
20
22
 
@@ -34,3 +36,5 @@
34
36
  /node_modules/
35
37
  /npm-debug.log
36
38
  /lib/vendor/*
39
+
40
+ /Public
data/README.md CHANGED
@@ -3,9 +3,15 @@
3
3
  WWW\_App:
4
4
  ---------
5
5
 
6
- Create HTML pages using just Ruby: HTML/CSS/JS.
7
- It's not done yet.
6
+ Turn Ruby into HTML and CSS.
8
7
 
8
+ I was going to put a JS features,
9
+ but I found out that I don't need them
10
+ thanks to [Turu](https://github.com/da99/turu).
11
+
12
+ NOTE:
13
+ ------------
14
+ This is not ready.
9
15
 
10
16
  Ruby:
11
17
  --------------
@@ -22,38 +28,54 @@ To Use:
22
28
  WWW_App.new {
23
29
 
24
30
  style {
31
+ a._link / a._visited / a._hover {
32
+ color '#f88'
33
+ }
34
+
25
35
  a {
26
- _link { color '#fff' }
27
- _visited { color '#f88' }
28
- _hover { color '#ccc' }
36
+ _link / _visited { color '#fff' }
37
+ _hover { color '#ccc' }
29
38
  }
30
- }
31
39
 
32
- div {
40
+ div.id(:main).__.div.^(:drowsy) / a.^(:excited)._link {
41
+ border '1px dashed grey'
42
+ div.^(:mon) / div.^(:tues) {
43
+ border '1px dashed weekday'
44
+ }
45
+ }
46
+
47
+ } # === style
48
+
49
+ div.id(:main).^(:css_class_name) {
33
50
 
34
51
  border '1px solid #000'
35
52
  background_color 'grey'
36
53
 
37
- on('scary') {
38
- border '2px dotted red'
39
- background_color 'white'
40
- }
54
+ style {
55
+ a._link / a._visited {
56
+ color '#fig'
57
+ }
41
58
 
42
- p { 'Click the button to make me scared.' }
59
+ _.^(:scary) {
60
+ border '2px dotted red'
61
+ background_color 'white'
62
+ }
63
+ }
43
64
 
44
- button {
45
- parent 'div'
46
- add_class 'scary'
65
+ p { "I'm a paragraph." }
47
66
 
48
- 'Scary-ify'
67
+ p {
68
+ text %^
69
+ I'm also
70
+ ^.strip
71
+ br
72
+ text ' a paragraph.'
49
73
  }
50
-
51
74
  }
75
+
52
76
  }.to_html
53
77
  ```
54
78
 
55
- It generates the CSS, JS, and HTML.
56
-
57
79
  Security:
58
80
  -----------
59
81
 
@@ -84,11 +106,7 @@ More info at: [http://html5doctor.com/cite-and-blockquote-reloaded/](http://htm
84
106
  because it turns out people do not want to create programs, they just want to customize them:
85
107
  [https://www.youtube.com/watch?v=9nd9DwCdQR0#t=857](https://www.youtube.com/watch?v=9nd9DwCdQR0#t=857)
86
108
 
87
-
88
- Fun fact:
89
- -----
90
-
91
- [JSON Applet](http://github.com/da99/json_applet) was changed to WWW\_Applet. WWW\_Applet was then changed to WWW\_App.
109
+ 3) [JSON Applet](http://github.com/da99/json_applet) was changed to WWW\_Applet. WWW\_Applet was then changed to WWW\_App.
92
110
 
93
111
 
94
112
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
1
+ 2.0.0
data/bin/www_app CHANGED
@@ -3,24 +3,35 @@
3
3
  #
4
4
  #
5
5
 
6
+ require "fileutils"
7
+
6
8
  case ARGV[0]
7
9
 
8
10
  when "help"
9
11
 
10
12
  puts %^
11
13
  # ===================="
12
- www_app help"
13
- www_app install_js"
14
+ www_app help
15
+ www_app Public
16
+ www_app upgrade_js
14
17
  # ===================="
15
18
  ^
16
19
 
17
- when "install_js"
20
+ when 'Public'
21
+ gem = File.expand_path(File.dirname(__FILE__ ) + '/..')
22
+ source = gem + '/lib/public'
23
+ dest = "Public/www_app-#{File.read(gem + '/VERSION').strip}"
24
+ FileUtils.mkdir_p dest
25
+ FileUtils.rm_r Dir.glob('Public/www_app-*.*.*'), :secure=>true
26
+ FileUtils.copy_entry source, dest
27
+ puts "=== Copied files into: #{dest}"
28
+
29
+ when "upgrade_js"
18
30
 
19
31
  fail "
20
32
  Must automate downloading of LATEST (security reason)
21
33
  underscore, jquery, etc.
22
34
  "
23
- require "fileutils"
24
35
  args = ARGV.dup
25
36
 
26
37
  applet_file = File.join File.dirname(File.dirname(__FILE__)), "lib/www_app.js"
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @preserve Copyright 2012 Twitter, Inc.
3
+ * @license http://www.apache.org/licenses/LICENSE-2.0.txt
4
+ */
5
+ var Hogan={};!function(t){function n(t,n,e){var i;return n&&"object"==typeof n&&(void 0!==n[t]?i=n[t]:e&&n.get&&"function"==typeof n.get&&(i=n.get(t))),i}function e(t,n,e,i,r,s){function a(){}function o(){}a.prototype=t,o.prototype=t.subs;var u,c=new a;c.subs=new o,c.subsText={},c.buf="",i=i||{},c.stackSubs=i,c.subsText=s;for(u in n)i[u]||(i[u]=n[u]);for(u in i)c.subs[u]=i[u];r=r||{},c.stackPartials=r;for(u in e)r[u]||(r[u]=e[u]);for(u in r)c.partials[u]=r[u];return c}function i(t){return String(null===t||void 0===t?"":t)}function r(t){return t=i(t),l.test(t)?t.replace(s,"&amp;").replace(a,"&lt;").replace(o,"&gt;").replace(u,"&#39;").replace(c,"&quot;"):t}t.Template=function(t,n,e,i){t=t||{},this.r=t.code||this.r,this.c=e,this.options=i||{},this.text=n||"",this.partials=t.partials||{},this.subs=t.subs||{},this.buf=""},t.Template.prototype={r:function(){return""},v:r,t:i,render:function(t,n,e){return this.ri([t],n||{},e)},ri:function(t,n,e){return this.r(t,n,e)},ep:function(t,n){var i=this.partials[t],r=n[i.name];if(i.instance&&i.base==r)return i.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[t].base=r,i.subs){n.stackText||(n.stackText={});for(key in i.subs)n.stackText[key]||(n.stackText[key]=void 0!==this.activeSub&&n.stackText[this.activeSub]?n.stackText[this.activeSub]:this.text);r=e(r,i.subs,i.partials,this.stackSubs,this.stackPartials,n.stackText)}return this.partials[t].instance=r,r},rp:function(t,n,e,i){var r=this.ep(t,e);return r?r.ri(n,e,i):""},rs:function(t,n,e){var i=t[t.length-1];if(!f(i))return void e(t,n,this);for(var r=0;r<i.length;r++)t.push(i[r]),e(t,n,this),t.pop()},s:function(t,n,e,i,r,s,a){var o;return f(t)&&0===t.length?!1:("function"==typeof t&&(t=this.ms(t,n,e,i,r,s,a)),o=!!t,!i&&o&&n&&n.push("object"==typeof t?t:n[n.length-1]),o)},d:function(t,e,i,r){var s,a=t.split("."),o=this.f(a[0],e,i,r),u=this.options.modelGet,c=null;if("."===t&&f(e[e.length-2]))o=e[e.length-1];else for(var l=1;l<a.length;l++)s=n(a[l],o,u),void 0!==s?(c=o,o=s):o="";return r&&!o?!1:(r||"function"!=typeof o||(e.push(c),o=this.mv(o,e,i),e.pop()),o)},f:function(t,e,i,r){for(var s=!1,a=null,o=!1,u=this.options.modelGet,c=e.length-1;c>=0;c--)if(a=e[c],s=n(t,a,u),void 0!==s){o=!0;break}return o?(r||"function"!=typeof s||(s=this.mv(s,e,i)),s):r?!1:""},ls:function(t,n,e,r,s){var a=this.options.delimiters;return this.options.delimiters=s,this.b(this.ct(i(t.call(n,r)),n,e)),this.options.delimiters=a,!1},ct:function(t,n,e){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(t,this.options).render(n,e)},b:function(t){this.buf+=t},fl:function(){var t=this.buf;return this.buf="",t},ms:function(t,n,e,i,r,s,a){var o,u=n[n.length-1],c=t.call(u);return"function"==typeof c?i?!0:(o=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,e,o.substring(r,s),a)):c},mv:function(t,n,e){var r=n[n.length-1],s=t.call(r);return"function"==typeof s?this.ct(i(s.call(r)),r,e):s},sub:function(t,n,e,i){var r=this.subs[t];r&&(this.activeSub=t,r(n,e,this,i),this.activeSub=!1)}};var s=/&/g,a=/</g,o=/>/g,u=/\'/g,c=/\"/g,l=/[&<>\"\']/,f=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}}("undefined"!=typeof exports?exports:Hogan),function(t){function n(t){"}"===t.n.substr(t.n.length-1)&&(t.n=t.n.substring(0,t.n.length-1))}function e(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")}function i(t,n,e){if(n.charAt(e)!=t.charAt(0))return!1;for(var i=1,r=t.length;r>i;i++)if(n.charAt(e+i)!=t.charAt(i))return!1;return!0}function r(n,e,i,o){var u=[],c=null,l=null,f=null;for(l=i[i.length-1];n.length>0;){if(f=n.shift(),l&&"<"==l.tag&&!(f.tag in k))throw new Error("Illegal content in < super tag.");if(t.tags[f.tag]<=t.tags.$||s(f,o))i.push(f),f.nodes=r(n,f.tag,i,o);else{if("/"==f.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+f.n);if(c=i.pop(),f.n!=c.n&&!a(f.n,c.n,o))throw new Error("Nesting error: "+c.n+" vs. "+f.n);return c.end=f.i,u}"\n"==f.tag&&(f.last=0==n.length||"\n"==n[0].tag)}u.push(f)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return u}function s(t,n){for(var e=0,i=n.length;i>e;e++)if(n[e].o==t.n)return t.tag="#",!0}function a(t,n,e){for(var i=0,r=e.length;r>i;i++)if(e[i].c==t&&e[i].o==n)return!0}function o(t){var n=[];for(var e in t)n.push('"'+c(e)+'": function(c,p,t,i) {'+t[e]+"}");return"{ "+n.join(",")+" }"}function u(t){var n=[];for(var e in t.partials)n.push('"'+c(e)+'":{name:"'+c(t.partials[e].name)+'", '+u(t.partials[e])+"}");return"partials: {"+n.join(",")+"}, subs: "+o(t.subs)}function c(t){return t.replace(m,"\\\\").replace(v,'\\"').replace(b,"\\n").replace(d,"\\r").replace(x,"\\u2028").replace(w,"\\u2029")}function l(t){return~t.indexOf(".")?"d":"f"}function f(t,n){var e="<"+(n.prefix||""),i=e+t.n+y++;return n.partials[i]={name:t.n,partials:{}},n.code+='t.b(t.rp("'+c(i)+'",c,p,"'+(t.indent||"")+'"));',i}function h(t,n){n.code+="t.b(t.t(t."+l(t.n)+'("'+c(t.n)+'",c,p,0)));'}function p(t){return"t.b("+t+");"}var g=/\S/,v=/\"/g,b=/\n/g,d=/\r/g,m=/\\/g,x=/\u2028/,w=/\u2029/;t.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(r,s){function a(){m.length>0&&(x.push({tag:"_t",text:new String(m)}),m="")}function o(){for(var n=!0,e=y;e<x.length;e++)if(n=t.tags[x[e].tag]<t.tags._v||"_t"==x[e].tag&&null===x[e].text.match(g),!n)return!1;return n}function u(t,n){if(a(),t&&o())for(var e,i=y;i<x.length;i++)x[i].text&&((e=x[i+1])&&">"==e.tag&&(e.indent=x[i].text.toString()),x.splice(i,1));else n||x.push({tag:"\n"});w=!1,y=x.length}function c(t,n){var i="="+S,r=t.indexOf(i,n),s=e(t.substring(t.indexOf("=",n)+1,r)).split(" ");return T=s[0],S=s[s.length-1],r+i.length-1}var l=r.length,f=0,h=1,p=2,v=f,b=null,d=null,m="",x=[],w=!1,k=0,y=0,T="{{",S="}}";for(s&&(s=s.split(" "),T=s[0],S=s[1]),k=0;l>k;k++)v==f?i(T,r,k)?(--k,a(),v=h):"\n"==r.charAt(k)?u(w):m+=r.charAt(k):v==h?(k+=T.length-1,d=t.tags[r.charAt(k+1)],b=d?r.charAt(k+1):"_v","="==b?(k=c(r,k),v=f):(d&&k++,v=p),w=k):i(S,r,k)?(x.push({tag:b,n:e(m),otag:T,ctag:S,i:"/"==b?w-T.length:k+S.length}),m="",k+=S.length-1,v=f,"{"==b&&("}}"==S?k++:n(x[x.length-1]))):m+=r.charAt(k);return u(w,!0),x};var k={_t:!0,"\n":!0,$:!0,"/":!0};t.stringify=function(n){return"{code: function (c,p,i) { "+t.wrapMain(n.code)+" },"+u(n)+"}"};var y=0;t.generate=function(n,e,i){y=0;var r={code:"",subs:{},partials:{}};return t.walk(n,r),i.asString?this.stringify(r,e,i):this.makeTemplate(r,e,i)},t.wrapMain=function(t){return'var t=this;t.b(i=i||"");'+t+"return t.fl();"},t.template=t.Template,t.makeTemplate=function(t,n,e){var i=this.makePartials(t);return i.code=new Function("c","p","i",this.wrapMain(t.code)),new this.template(i,n,this,e)},t.makePartials=function(t){var n,e={subs:{},partials:t.partials,name:t.name};for(n in e.partials)e.partials[n]=this.makePartials(e.partials[n]);for(n in t.subs)e.subs[n]=new Function("c","p","t","i",t.subs[n]);return e},t.codegen={"#":function(n,e){e.code+="if(t.s(t."+l(n.n)+'("'+c(n.n)+'",c,p,1),c,p,0,'+n.i+","+n.end+',"'+n.otag+" "+n.ctag+'")){t.rs(c,p,function(c,p,t){',t.walk(n.nodes,e),e.code+="});c.pop();}"},"^":function(n,e){e.code+="if(!t.s(t."+l(n.n)+'("'+c(n.n)+'",c,p,1),c,p,1,0,0,"")){',t.walk(n.nodes,e),e.code+="};"},">":f,"<":function(n,e){var i={partials:{},code:"",subs:{},inPartial:!0};t.walk(n.nodes,i);var r=e.partials[f(n,e)];r.subs=i.subs,r.partials=i.partials},$:function(n,e){var i={subs:{},code:"",partials:e.partials,prefix:n.n};t.walk(n.nodes,i),e.subs[n.n]=i.code,e.inPartial||(e.code+='t.sub("'+c(n.n)+'",c,p,i);')},"\n":function(t,n){n.code+=p('"\\n"'+(t.last?"":" + i"))},_v:function(t,n){n.code+="t.b(t.v(t."+l(t.n)+'("'+c(t.n)+'",c,p,0)));'},_t:function(t,n){n.code+=p('"'+c(t.text)+'"')},"{":h,"&":h},t.walk=function(n,e){for(var i,r=0,s=n.length;s>r;r++)i=t.codegen[n[r].tag],i&&i(n[r],e);return e},t.parse=function(t,n,e){return e=e||{},r(t,"",[],e.sectionTags||[])},t.cache={},t.cacheKey=function(t,n){return[t,!!n.asString,!!n.disableLambda,n.delimiters,!!n.modelGet].join("||")},t.compile=function(n,e){e=e||{};var i=t.cacheKey(n,e),r=this.cache[i];if(r){var s=r.partials;for(var a in s)delete s[a].instance;return r}return r=this.generate(this.parse(this.scan(n,e.delimiters),n,e),n,e),this.cache[i]=r}}("undefined"!=typeof exports?exports:Hogan);
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+
3
+ /* jshint undef: true, unused: true */
4
+ /* global _ */
5
+
6
+ var instruct_instruct_instruct = function (funcs) {
7
+ this.funcs = _.merge(instruct_instruct_instruct.base, funcs);
8
+ this.stack = null;
9
+ return this;
10
+ };
11
+
12
+
13
+ // === Scope
14
+ (function () {
15
+ var I = instruct_instruct_instruct;
16
+ var jquery_proxy = $('body');
17
+
18
+ function log() {
19
+ if (window.console)
20
+ console['log'].apply(console, arguments);
21
+ }
22
+
23
+ function is_numeric(val) {
24
+ return _.isNumber(val) && !_.isNaN(val);
25
+ }
26
+
27
+ function concat() {
28
+ var args = _.toArray(arguments);
29
+ var base = _.first(args);
30
+ var arrs = _.rest(args);
31
+ _.each(arrs, function (v) {
32
+ _.each(v, function (val) {
33
+ base.push(val);
34
+ });
35
+ });
36
+ return base;
37
+ }
38
+
39
+ function inspect(o) {
40
+ return '(' + typeof(o) + ') "' + o + '"' ;
41
+ }
42
+
43
+ instruct_instruct_instruct.base = {
44
+ 'add to stack': function (iii) {
45
+ concat(iii.stack, iii.shift('all'));
46
+ },
47
+ '$': function (iii) {
48
+ var args = iii.shift('all');
49
+ if (_.isEmpty(args))
50
+ return $(iii.pop('string'));
51
+ else
52
+ return $.apply($, args);
53
+ },
54
+ 'array': function (iii) {
55
+ return iii.shift('all');
56
+ },
57
+ "or": function (iii) {
58
+ var left = iii.pop('boolean');
59
+ if (left)
60
+ return true;
61
+ return iii.shift('boolean');
62
+ },
63
+ 'and': function (iii) {
64
+ var left = iii.pop('boolean');
65
+ if (left)
66
+ return left === iii.shift('boolean');
67
+ else
68
+ return false;
69
+ },
70
+ 'if true': function (iii) {
71
+ var left = iii.pop('boolean');
72
+ if (!left)
73
+ return left;
74
+ iii.shift('all');
75
+ return left;
76
+ },
77
+ 'if false': function (iii) {
78
+ var left = iii.pop('boolean');
79
+ if (left)
80
+ return left;
81
+ iii.shift('all');
82
+ return left;
83
+ },
84
+ 'less or equal': function (iii) {
85
+ var left = iii.pop('number');
86
+ var right = iii.shift('number');
87
+ return left <= right;
88
+ },
89
+ 'bigger or equal': function (iii) {
90
+ var left = iii.pop('number');
91
+ var right = iii.shift('number');
92
+ return left >= right;
93
+ },
94
+ 'bigger': function (iii) {
95
+ return iii.pop('number') > iii.shift('number');
96
+ },
97
+ 'less': function (iii) {
98
+ return iii.pop('number') < iii.shift('number');
99
+ },
100
+ 'equal': function (iii) {
101
+ var left = iii.pop();
102
+ var right = iii.shift();
103
+ var l_type = typeof(left);
104
+ var r_type = typeof(right);
105
+
106
+ if (l_type !== r_type)
107
+ throw new Error("Type mis-match: " + inspect(left) + ' !== ' + inspect(right));
108
+ return left === right;
109
+ }
110
+ };
111
+
112
+ I.prototype.spawn = function () {
113
+ var funcs = _.clone(this.funcs);
114
+ return new instruct_instruct_instruct(funcs);
115
+ }; // function
116
+
117
+ I.prototype.run = function (raw_code) {
118
+ var self = this;
119
+ var left = [];
120
+ var code = _.clone(raw_code);
121
+ var o = null;
122
+ var last_o = null;
123
+ var func_name = null;
124
+ var result = null;
125
+ var jquery = null;
126
+
127
+ var env = {
128
+ stack: left,
129
+ run_args : function () {
130
+ if (!_.isUndefined(this.raw_args))
131
+ this.args = self.spawn().run(this.raw_args).stack;
132
+ this.raw_args = undefined;
133
+
134
+ return this.args;
135
+ },
136
+
137
+ pop: function (type) {
138
+ var val;
139
+ var is_empty = _.isEmpty(left);
140
+
141
+ if (is_empty) {
142
+ if (type)
143
+ throw new Error("Left Stack underflow while popping for " + type + '.');
144
+ else
145
+ throw new Error("Left Stack underflow while popping.");
146
+ }
147
+
148
+ val = left.pop();
149
+
150
+ switch (type) {
151
+ case 'number':
152
+ if (!is_numeric(val))
153
+ throw new Error("Left Stack popped value is not a number: " + inspect(val));
154
+ break;
155
+
156
+ case 'string':
157
+ if (!_.isString(val))
158
+ throw new Error("Left Stack popped value is not a string: " + inspect(val));
159
+ break;
160
+
161
+ case 'boolean':
162
+ if (!_.isBoolean(val))
163
+ throw new Error("Left Stack popped value is not a boolean: " + inspect(val));
164
+ break;
165
+
166
+ default:
167
+ if (type !== undefined)
168
+ throw new Error("Unknown type for .pop(): " + inspect(type));
169
+ } // === switch
170
+
171
+ return val;
172
+ },
173
+
174
+ shift: function (type) {
175
+ this.run_args();
176
+ if (type === 'all') {
177
+ var vals = this.args;
178
+ this.args = [];
179
+ return vals;
180
+ }
181
+
182
+ if (_.isEmpty(this.args)) {
183
+ if (type)
184
+ throw new Error("Argument Stack underflow while shifting for " + type + ".");
185
+ else
186
+ throw new Error("Argument Stack underflow.");
187
+ }
188
+
189
+ var val = this.args.shift();
190
+
191
+ switch (type) {
192
+ case 'number':
193
+ if (!is_numeric(val))
194
+ throw new Error("Argument Stack shifted value is not a number: " + inspect(val));
195
+ break;
196
+ case 'string':
197
+ if (!_.isString(val))
198
+ throw new Error("Argument Stack shifted value is not a string: " + inspect(val));
199
+ break;
200
+ case 'boolean':
201
+ if (!_.isBoolean(val))
202
+ throw new Error("Argument Stack shifted value is not a boolean: " + inspect(val));
203
+ break;
204
+
205
+ default:
206
+ if (type !== undefined)
207
+ throw new Error("Unknown type for .shift(): " + inspect(type));
208
+ } // === switch
209
+
210
+ return val;
211
+ }
212
+ };
213
+
214
+ while (!_.isEmpty(code)) {
215
+ o = code.shift();
216
+ if (_.isString(o) || is_numeric(o) || _.isBoolean(o)) {
217
+ left.push(o);
218
+ } else if (_.isArray(o)) {
219
+ if (!_.isString(last_o)) {
220
+ throw new Error('Invalid data type for function name: ' + inspect(last_o));
221
+ }
222
+ env.raw_args = o;
223
+ func_name = left.pop();
224
+ if (!this.funcs[func_name]) {
225
+ if (!jquery_proxy[func_name])
226
+ throw new Error("Func not found: " + func_name);
227
+ jquery = _.last(left)[func_name] ? left.pop() : $(env.pop('string'));
228
+ result = jquery[func_name].apply(jquery, env.shift('all'));
229
+ } else {
230
+ result = this.funcs[func_name](env);
231
+ }
232
+ if (result !== undefined)
233
+ left.unshift( result );
234
+ } else {
235
+ throw new Error("Invalid data type: " + inspect(o));
236
+ }
237
+
238
+ last_o = o;
239
+ } // === while i < size
240
+
241
+ return {
242
+ code: raw_code,
243
+ stack: left
244
+ };
245
+ }; // function run
246
+
247
+ })(); // === scope