Minibar: PGF server API: pass callback functions directly instead of passing function names as strings.

This commit is contained in:
hallgren
2010-09-05 18:06:45 +00:00
parent b14592b0d3
commit c662d116f6
2 changed files with 47 additions and 35 deletions

View File

@@ -31,40 +31,40 @@ var server = {
this.current_grammar_url=options.grammars_url+grammar_name; this.current_grammar_url=options.grammars_url+grammar_name;
}, },
get_grammarlist: function(cont_name) { get_grammarlist: function(cont) {
jsonp(options.grammars_url+"grammars.cgi",cont_name); jsonpf(options.grammars_url+"grammars.cgi",cont);
}, },
get_languages: function(cont_name) { get_languages: function(cont) {
jsonp(this.current_grammar_url,cont_name); jsonpf(this.current_grammar_url,cont);
}, },
get_random: function(cont_name) { get_random: function(cont) {
jsonp(this.current_grammar_url+"?command=random&random="+Math.random(),cont_name); jsonpf(this.current_grammar_url+"?command=random&random="+Math.random(),cont);
}, },
linearize: function(tree,to,cont_name) { linearize: function(tree,to,cont) {
jsonp(this.current_grammar_url+"?command=linearize&tree=" jsonpf(this.current_grammar_url+"?command=linearize&tree="
+encodeURIComponent(tree)+"&to="+to,cont_name) +encodeURIComponent(tree)+"&to="+to,cont)
}, },
complete: function(from,input,cont_name) { complete: function(from,input,cont) {
jsonp(this.current_grammar_url jsonpf(this.current_grammar_url
+"?command=complete" +"?command=complete"
+"&from="+encodeURIComponent(from) +"&from="+encodeURIComponent(from)
+"&input="+encodeURIComponent(input), +"&input="+encodeURIComponent(input),
cont_name); cont);
}, },
translate: function(from,input,cont_name) { translate: function(from,input,cont) {
jsonp(this.current_grammar_url jsonpf(this.current_grammar_url
+"?command=translate" +"?command=translate"
+"&from="+encodeURIComponent(from) +"&from="+encodeURIComponent(from)
+"&input="+encodeURIComponent(input), +"&input="+encodeURIComponent(input),
cont_name) cont)
}, },
translategroup: function(from,input,cont_name) { translategroup: function(from,input,cont) {
jsonp(this.current_grammar_url jsonpf(this.current_grammar_url
+"?command=translategroup" +"?command=translategroup"
+"&from="+encodeURIComponent(from) +"&from="+encodeURIComponent(from)
+"&input="+encodeURIComponent(input), +"&input="+encodeURIComponent(input),
cont_name) cont)
} }
}; };
@@ -88,7 +88,7 @@ function start_minibar(opts) {
append_extra_buttons(extra); append_extra_buttons(extra);
if(!options.grammars_url) options.grammars_url=options.server+"/grammars/"; if(!options.grammars_url) options.grammars_url=options.server+"/grammars/";
if(options.grammar_list) show_grammarlist(options.grammar_list); if(options.grammar_list) show_grammarlist(options.grammar_list);
else server.get_grammarlist("show_grammarlist"); else server.get_grammarlist(show_grammarlist);
} }
@@ -126,7 +126,7 @@ function new_grammar(menu) {
function select_grammar(grammar_name) { function select_grammar(grammar_name) {
server.switch_grammar(grammar_name); server.switch_grammar(grammar_name);
server.get_languages("show_languages"); server.get_languages(show_languages);
} }
function langpart(conc,abs) { // langpart("FoodsEng","Food") == "Eng" function langpart(conc,abs) { // langpart("FoodsEng","Food") == "Eng"
@@ -231,7 +231,7 @@ function complete_typed(inp) {
var c=menu.current; var c=menu.current;
if(!inp.completing || inp.completing!=inp.value) { if(!inp.completing || inp.completing!=inp.value) {
inp.completing=inp.value; inp.completing=inp.value;
server.complete(c.from,c.input+inp.value,"show_completions"); server.complete(c.from,c.input+inp.value,show_completions);
} }
} }
@@ -246,13 +246,13 @@ function finish_typed(inp) {
} }
function generate_random() { function generate_random() {
server.get_random("lin_random"); server.get_random(lin_random);
} }
function lin_random(abs) { function lin_random(abs) {
var menu=element("language_menu"); var menu=element("language_menu");
var lang=menu.current.from; var lang=menu.current.from;
server.linearize(abs[0].tree,lang,"show_random"); server.linearize(abs[0].tree,lang,show_random);
} }
function show_random(random) { function show_random(random) {
@@ -266,7 +266,7 @@ function show_random(random) {
function get_completions(menu) { function get_completions(menu) {
var c=menu.current; var c=menu.current;
server.complete(c.from,c.input,"show_completions"); server.complete(c.from,c.input,show_completions);
} }
function word(s) { function word(s) {
@@ -322,9 +322,9 @@ function show_completions(complete_output) {
function get_translations(menu) { function get_translations(menu) {
var c=menu.current; var c=menu.current;
if(options.show_grouped_translations) if(options.show_grouped_translations)
server.translategroup(c.from,c.input,"show_groupedtranslations"); server.translategroup(c.from,c.input,show_groupedtranslations);
else else
server.translate(c.from,c.input,"show_translations"); server.translate(c.from,c.input,show_translations);
} }
function tdt(tree_btn,txt) { function tdt(tree_btn,txt) {

View File

@@ -25,6 +25,18 @@ function jsonp(url,callback)
document.body.appendChild(script); document.body.appendChild(script);
} }
var json = {next:0};
// Like jsonp, but instead of passing the name of the ballback function, you
// pass the callback function directly, making it possible to use anonymous
// functions.
function jsonpf(url,callback)
{
var name="callback"+(json.next++);
json[name]=function(x) { delete json[name]; callback(x); }
jsonp(url,"json."+name);
}
/* --- HTML construction ---------------------------------------------------- */ /* --- HTML construction ---------------------------------------------------- */
function text(s) { return document.createTextNode(s); } function text(s) { return document.createTextNode(s); }