From 46da64cc7268a4a1d29675fd2ecce1e8fe113ae5 Mon Sep 17 00:00:00 2001 From: hallgren Date: Fri, 10 Sep 2010 08:38:11 +0000 Subject: minibar: use AJAX instead of JSONP when possible Using AJAX instead of JSONP can give better caching in the browser, since the URL doesn't need to contain a (dynamically generated) callback function name. But because of the same origin policy in JavaScript, AJAX can only be used when the HTML file is served from the same server as the PGF. The new function http_get_json in support.js uses AJAX if this is the case, and falls back to JSONP otherwise. --- src/runtime/javascript/minibar/minibar.js | 36 ++++++++++++++----------------- 1 file changed, 16 insertions(+), 20 deletions(-) (limited to 'src/runtime/javascript/minibar/minibar.js') 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); } }; -- cgit v1.2.3