summaryrefslogtreecommitdiff
path: root/src/runtime/javascript/minibar
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/javascript/minibar')
-rw-r--r--src/runtime/javascript/minibar/minibar.js36
-rw-r--r--src/runtime/javascript/minibar/support.js49
2 files changed, 65 insertions, 20 deletions
diff --git a/src/runtime/javascript/minibar/minibar.js b/src/runtime/javascript/minibar/minibar.js
index e11c99c9b..d586ffa5a 100644
--- a/src/runtime/javascript/minibar/minibar.js
+++ b/src/runtime/javascript/minibar/minibar.js
@@ -30,41 +30,37 @@ var server = {
switch_grammar: function(grammar_name) {
this.current_grammar_url=options.grammars_url+grammar_name;
},
-
get_grammarlist: function(cont) {
- jsonpf(options.grammars_url+"grammars.cgi",cont);
+ http_get_json(options.grammars_url+"grammars.cgi",cont);
},
get_languages: function(cont) {
- jsonpf(this.current_grammar_url,cont);
+ http_get_json(this.current_grammar_url,cont);
},
+ pgf_call: function(cmd,args,cont) {
+ var url=this.current_grammar_url+"?command="+cmd;
+ for(var arg in args) url+="&"+arg+"="+encodeURIComponent(args[arg]);
+ http_get_json(url,cont);
+ },
+
get_random: function(cont) {
- jsonpf(this.current_grammar_url+"?command=random&random="+Math.random(),cont);
+ //jsonpf(this.current_grammar_url+"?command=random&random="+Math.random(),cont);
+ this.pgf_call("random",{random:Math.random()},cont);
},
linearize: function(tree,to,cont) {
jsonpf(this.current_grammar_url+"?command=linearize&tree="
+encodeURIComponent(tree)+"&to="+to,cont)
},
complete: function(from,input,cont) {
- jsonpf(this.current_grammar_url
- +"?command=complete"
- +"&from="+encodeURIComponent(from)
- +"&input="+encodeURIComponent(input),
- cont);
-
+ this.pgf_call("complete",{from:from,input:input},cont);
+ },
+ parse: function(from,input,cont) {
+ this.pgf_call("parse",{from:from,input:input},cont);
},
translate: function(from,input,cont) {
- jsonpf(this.current_grammar_url
- +"?command=translate"
- +"&from="+encodeURIComponent(from)
- +"&input="+encodeURIComponent(input),
- cont)
+ this.pgf_call("translate",{from:from,input:input},cont);
},
translategroup: function(from,input,cont) {
- jsonpf(this.current_grammar_url
- +"?command=translategroup"
- +"&from="+encodeURIComponent(from)
- +"&input="+encodeURIComponent(input),
- cont)
+ this.pgf_call("translategroup",{from:from,input:input},cont);
}
};
diff --git a/src/runtime/javascript/minibar/support.js b/src/runtime/javascript/minibar/support.js
index 7c34bad82..a568cdc11 100644
--- a/src/runtime/javascript/minibar/support.js
+++ b/src/runtime/javascript/minibar/support.js
@@ -37,6 +37,55 @@ function jsonpf(url,callback)
jsonp(url,"json."+name);
}
+/* --- AJAX ----------------------------------------------------------------- */
+
+function GetXmlHttpObject(handler)
+{
+ var objXMLHttp=null
+ if (window.XMLHttpRequest)
+ {
+ objXMLHttp=new XMLHttpRequest()
+ }
+ else if (window.ActiveXObject)
+ {
+ objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
+ }
+ return objXMLHttp
+}
+
+function ajax_http_get(url,callback) {
+ var http=GetXmlHttpObject()
+ if (http==null) {
+ alert ("Browser does not support HTTP Request")
+ return
+ }
+ var statechange=function() {
+ if (http.readyState==4 || http.readyState=="complete")
+ callback(http.responseText)
+ }
+ http.onreadystatechange=statechange
+ http.open("GET",url,true)
+ http.send(null)
+ //dump("http get "+url+"\n")
+ return http
+}
+
+// JSON via AJAX
+function ajax_http_get_json(url,cont) {
+ ajax_http_get(url,function(txt) { cont(eval("("+txt+")")); });
+}
+
+function sameOrigin(url) {
+ return hasPrefix(url,location.protocol+"//"+location.host+"/");
+}
+
+// Use AJAX when possible, fallback to JSONP
+function http_get_json(url,cont) {
+ if(sameOrigin(url)) ajax_http_get_json(url,cont);
+ else jsonpf(url,cont);
+}
+
+
/* --- HTML construction ---------------------------------------------------- */
function text(s) { return document.createTextNode(s); }