Mercurial > repos > tabletprog
changeset 12:6e4851a204a5
Add ability to load code into editor
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 21 Mar 2012 23:13:51 -0700 |
parents | 5447cff52da6 |
children | e69f5ab0a453 |
files | editor.css editor.tp index.html jsbackend.js |
diffstat | 4 files changed, 89 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/editor.css Wed Mar 21 21:42:38 2012 -0700 +++ b/editor.css Wed Mar 21 23:13:51 2012 -0700 @@ -27,9 +27,29 @@ display: inline-block; padding: 0; margin: 0; + white-space: pre; + font-family: monospace; + overflow: auto; + height: 100%; +} + +#editor +{ + display: none; + height: 100%; } -ul +body.editorMode > #editor +{ + display: block; +} + +body.editorMode > #browser +{ + display: none; +} + +#editor ul { border-style: solid; border-color: black; @@ -44,22 +64,22 @@ overflow: auto; } -ul:first-child +#editor ul:first-child { border-bottom-width: 0px; } -#operators, .showops > #builtin +#editor #operators, #editor .showops > #builtin { display: none; } -.showops > #operators +#editor .showops > #operators { display: block; } -li +#editor li { display: inline-block; border-style: solid;
--- a/editor.tp Wed Mar 21 21:42:38 2012 -0700 +++ b/editor.tp Wed Mar 21 23:13:51 2012 -0700 @@ -5,6 +5,7 @@ each <- foreign: :iterable fun {} addClass <- foreign: :node className {} removeClass <- foreign: :node className {} +get <- foreign: :url onSuccess onFail onOther {} //tabletprog JS helpers setP <- foreign: :object property val {} @@ -16,10 +17,26 @@ } main <- { - each: (qall: "li") :idx el { + //bind handlers for file browser links + each: (qall: "a") :idx el { + el setP: "onclick" :event { + console log: "click" + link <- foreign: this + get: (link getP: "href") :request { + addClass: (q: "body") "editorMode" + console log: (request getP: "responseText") + (q: "#src") setP: "textContent" (request getP: "responseText") + } + console log: "returning false" + foreign: false + } + } + + //bind handlers for editor buttons + each: (qall: ".controls li") :idx el { el setP: "onclick" :event { srcel <- (q: "#src") - srcel setP: "innerHTML" (srcel getP: "innerHTML") + (el getP: "innerHTML") + srcel setP: "textContent" (srcel getP: "textContent") + (el getP: "textContent") } } (q: "#ops_button") setP: "onclick" :event {
--- a/index.html Wed Mar 21 21:42:38 2012 -0700 +++ b/index.html Wed Mar 21 23:13:51 2012 -0700 @@ -13,29 +13,37 @@ <link rel="stylesheet" href="editor.css"> </head> <body> - <div class="controls"> - <ul id="builtin"> - <li id="ops_button">operators</li> - <li>get:</li> - <li>set:</li> - <li>length</li> - <li>if: then: else:</li> + <div id="browser"> + <ul> + <li><a href="editor.tp">editor.tp</a></li> + <li><a href="samples/fib.tp">samples/fib.tp</a></li> </ul> - <ul id="operators"> - <li id="builtin_button">builtins</li> - <li><</li> - <li>></li> - <li>+</li> - <li>-</li> - <li>*</li> - <li>/</li> - <li>&&</li> - <li>||</li> - </ul> - <ul id="inscope"></ul> - </div><div id="src"></div><div class="controls"> - <ul></ul> - <ul></ul> + </div> + <div id="editor"> + <div class="controls"> + <ul id="builtin"> + <li id="ops_button">operators</li> + <li>get:</li> + <li>set:</li> + <li>length</li> + <li>if: then: else:</li> + </ul> + <ul id="operators"> + <li id="builtin_button">builtins</li> + <li><</li> + <li>></li> + <li>+</li> + <li>-</li> + <li>*</li> + <li>/</li> + <li>&&</li> + <li>||</li> + </ul> + <ul id="inscope"></ul> + </div><div id="src"></div><div class="controls"> + <ul></ul> + <ul></ul> + </div> </div> </body> </html>
--- a/jsbackend.js Wed Mar 21 21:42:38 2012 -0700 +++ b/jsbackend.js Wed Mar 21 23:13:51 2012 -0700 @@ -62,6 +62,15 @@ funcall.prototype.toJS = function(symbols) { var name = this.name[this.name.length-1] == ':' ? this.name.substr(0, this.name.length-1) : this.name; + if (name == 'foreign') { + if ((this.args[0] instanceof lambda) || (this.args[0] instanceof object)) { + return null; + } else if(this.args[0] instanceof symbol) { + return this.args[0].name; + } else { + throw new Error("Unexpected AST type for foreign:"); + } + } var args = this.args.slice(0, this.args.length); if (this.receiver) { args.splice(0, 0, this.receiver); @@ -171,15 +180,17 @@ break; } } - if (this.expression instanceof funcall && this.expression.name == 'foreign:') { + var val = this.expression.toJS(symbols); + if (val === null) { return null; } - return prefix + this.symbol.toJS(symbols) + ' = ' + this.expression.toJS(symbols); + return prefix + this.symbol.toJS(symbols) + ' = ' + val; }; assignment.prototype.toJSObject = function(symbols) { symbols.defineMsg(this.symbol.name, this.expression); - if (this.expression instanceof funcall && this.expression.name == 'foreign:') { + var val = this.expression.toJS(symbols); + if (val === null) { return null; } - return this.symbol.toJS(symbols) + ': ' + this.expression.toJS(symbols); + return this.symbol.toJS(symbols) + ': ' + val; };