diff options
Diffstat (limited to 'src/www/js/pgf_online.js')
| -rw-r--r-- | src/www/js/pgf_online.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/www/js/pgf_online.js b/src/www/js/pgf_online.js new file mode 100644 index 000000000..6fe23b13e --- /dev/null +++ b/src/www/js/pgf_online.js @@ -0,0 +1,80 @@ + +/* --- Grammar access object ------------------------------------------------ */ + +function pgf_online(options) { + var server = { + // State variables (private): + grammars_url: "/grammars/", + other_grammars_urls: [], + grammar_list: null, + current_grammar_url: null, + + // Methods: + switch_grammar: function(grammar_url,cont) { + this.current_grammar_url=this.grammars_url+grammar_url; + if(cont) cont(); + }, + add_grammars_url: function(grammars_url,cont) { + this.other_grammars_urls.push(grammars_url); + if(cont) cont(); + }, + switch_to_other_grammar: function(grammar_url,cont) { + this.current_grammar_url=grammar_url; + if(cont) cont(); + }, + get_grammarlist: function(cont,err) { + if(this.grammar_list) cont(this.grammar_list) + else http_get_json(this.grammars_url+"grammars.cgi",cont,err); + }, + get_grammarlists: function(cont,err) { // May call cont several times! + var ds=this.other_grammars_urls; + var n=1+ds.length; + function pair(dir) { + return function(grammar_list){cont(dir,grammar_list,n)} + } + function ignore_error(err) { console.log(err) } + this.get_grammarlist(pair(this.grammars_url),err) + for(var i in ds) + http_get_json(ds[i]+"grammars.cgi",pair(ds[i]),ignore_error); + }, + pgf_call: function(cmd,args,cont,err) { + var url=this.current_grammar_url+"?command="+cmd+encodeArgs(args) + http_get_json(url,cont,err); + }, + + get_languages: function(cont,err) { + this.pgf_call("grammar",{},cont,err); + }, + grammar_info: function(cont,err) { + this.pgf_call("grammar",{},cont,err); + }, + + get_random: function(args,cont,err) { // cat, limit + args.random=Math.random(); // side effect!! + this.pgf_call("random",args,cont,err); + }, + linearize: function(args,cont,err) { // tree, to + this.pgf_call("linearize",args,cont,err); + }, + complete: function(args,cont,err) { // from, input, cat, limit + this.pgf_call("complete",args,cont,err); + }, + parse: function(args,cont,err) { // from, input, cat + this.pgf_call("parse",args,cont,err); + }, + translate: function(args,cont,err) { // from, input, cat, to + this.pgf_call("translate",args,cont,err); + }, + translategroup: function(args,cont,err) { // from, input, cat, to + this.pgf_call("translategroup",args,cont,err); + }, + browse: function(args,cont,err) { // id, format + if(!args.format) args.format="json"; // sife effect!! + this.pgf_call("browse",args,cont,err); + } + }; + for(var o in options) server[o]=options[o]; + if(server.grammar_list && server.grammar_list.length>0) + server.switch_grammar(server.grammar_list[0]); + return server; +} |
