summaryrefslogtreecommitdiff
path: root/src/www/js/pgf_online.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/www/js/pgf_online.js')
-rw-r--r--src/www/js/pgf_online.js80
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;
+}