Mercurial > repos > tabletprog
changeset 9:37d7f60a8ea1
Allow use of tabletproglang programs in script tags
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 21 Mar 2012 21:15:32 -0700 |
parents | 04ae32e91598 |
children | 02b20292f187 |
files | jsbackend.js mquery.js scripttags.js testscripttags.html |
diffstat | 4 files changed, 88 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/jsbackend.js Wed Mar 21 20:33:39 2012 -0700 +++ b/jsbackend.js Wed Mar 21 21:15:32 2012 -0700 @@ -46,7 +46,6 @@ } strlit.prototype.toJS = function(symbols) { - console.log('string:', this.val); return '"' + this.val.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n').replace('\r', '\\r') + '"'; }
--- a/mquery.js Wed Mar 21 20:33:39 2012 -0700 +++ b/mquery.js Wed Mar 21 21:15:32 2012 -0700 @@ -32,7 +32,7 @@ if (dtype === undefined) { dtype = 'block'; } - el.style.display + el.style.display = dtype; } function onReady(fun) @@ -68,3 +68,43 @@ } } +function ajax(method, url, data, onSuccess, onFail, onOthers) +{ + var req; + try { + req = new XMLHttpRequest(); + } catch (e) { + req = new ActiveXObject("Microsoft.XMLHTTP"); + } + req.onreadystatechange = function() { + if (req.readyState == 4) { + if ((req.status >= 200 && req.status <= 299) || req.status == 0) { + onSuccess(req); + } else if(onFail) { + onFail(req); + } else { + console.log('request failed:', req); + } + } else if(onOthers) { + onOthers(req); + } + } + req.open(method, url); + if (data && 'mime' in data) { + req.setRequestHeader('Content-Type', data.mime); + req.send(data); + } else { + req.send(data); + } +} + +function get(url, onSuccess, onFail, onOthers) +{ + ajax('GET', url, undefined, onSuccess, onFail, onOthers); +} + +function post(url, data, onSuccess, onFail, onOthers) +{ + ajax('POST', url, data, onSuccess, onFail, onOthers); +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripttags.js Wed Mar 21 21:15:32 2012 -0700 @@ -0,0 +1,21 @@ + +function compileAndRun(src) +{ + var ast = parser.parse(src); + var js = ast.toJSModule(); + mainModule = eval(js)(); + mainModule.main(); +} + +onReady(function() { + var tags = qall('script[type="text/tabletprog"]'); + for (var i = 0; i < tags.length; ++i) { + if (tags[i].src) { + get(tags[i].src, function(req) { + compileAndRun(req.responseText); + }); + } else { + compileAndRun(tags[i].innerHTML); + } + } +});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testscripttags.html Wed Mar 21 21:15:32 2012 -0700 @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> +<head> + <title>Parser Test</title> + <script src="peg.js"></script> + <script src="mquery.js"></script> + <script src="parser.js"></script> + <script src="compiler.js"></script> + <script src="jsbackend.js"></script> + <script src="scripttags.js"></script> + <!-- <script src="samples/fib.tp" type="text/tabletprog"></script> --> + <script type="text/tabletprog"> + #{ + console <- foreign: #{ + log <- foreign: :val {} + } + main <- { + console log: "foobar" + } + } + </script> +</head> +<body> + Testing 1 2 3 +</body> +</html>