// minibar.js, assumes that support.js has also been loaded /* --- Configuration -------------------------------------------------------- */ var default_server="http://www.grammaticalframework.org:41296" var tree_icon=default_server+"/translate/se.chalmers.cs.gf.gwt.TranslateApp/tree-btn.png"; // default values for options: var options={ server: default_server, grammars_url: null, // if left null, start_minibar() fills in server+"/grammars/" grammar_list: null, // if left null, start_minibar() will fetch a list from the server show_abstract: false, show_trees: false, show_grouped_translations: true, delete_button_text: "⌫", default_source_language: null, try_google: true, feedback_url: null, help_url: null } /* --- Grammar access object ------------------------------------------------ */ var server = { // State variables (private): current_grammar_url: options.grammars_url+"Foods.pgf", // Methods: switch_grammar: function(grammar_name) { this.current_grammar_url=options.grammars_url+grammar_name; }, get_grammarlist: function(cont) { http_get_json(options.grammars_url+"grammars.cgi",cont); }, get_languages: function(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); 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) { 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) { this.pgf_call("translate",{from:from,input:input},cont); }, translategroup: function(from,input,cont) { this.pgf_call("translategroup",{from:from,input:input},cont); } }; /* --- Initialisation ------------------------------------------------------- */ function start_minibar(opts) { // Typically called when the HTML document is loaded if(opts) for(var o in opts) options[o]=opts[o]; var surface=div_id("surface"); var extra=div_id("extra"); //surface.setAttribute("onclick","add_typed_input(this)"); var minibar=element("minibar"); minibar.innerHTML=""; appendChildren(minibar, [div_id("menubar"), surface, div_id("words"), div_id("translations"), extra]); append_extra_buttons(extra); if(!options.grammars_url) options.grammars_url=options.server+"/grammars/"; if(options.grammar_list) show_grammarlist(options.grammar_list); else server.get_grammarlist(show_grammarlist); } /* --- Functions ------------------------------------------------------------ */ function show_grammarlist(grammars) { var menubar=element("menubar"); menubar.innerHTML=""; if(grammars.length>1) { var menu=empty("select"); for(var i=0;i0) box.appendChild(word(s)); else emptycnt++; } if(true/*emptycnt>0*/) get_translations(menu); else element("translations").innerHTML=""; var surface=element("surface"); if(surface.typed && emptycnt==completions.length) { if(surface.typed.value=="") remove_typed_input(surface); } else add_typed_input(surface); } function get_translations(menu) { var c=menu.current; if(options.show_grouped_translations) server.translategroup(c.from,c.input,show_groupedtranslations); else server.translate(c.from,c.input,show_translations); } function tdt(tree_btn,txt) { return options.show_trees ? tda([tree_btn,txt]) : td(txt); } function target_lang() { var to_menu=element("to_menu"); var grammar=element("language_menu").grammar; return langpart(to_menu.options[to_menu.selectedIndex].value,grammar.name); } function show_translations(translationResults) { var trans=element("translations"); var grammar=element("language_menu").grammar; var to=target_lang(); var cnt=translationResults.length; //trans.translations=translations; trans.single_translation=[]; trans.innerHTML=""; trans.appendChild(wrap("h3",text(cnt<1 ? "No translations?" : cnt>1 ? ""+cnt+" translations:": "One translation:"))); for(p=0;p 1) tbody.appendChild(tr([td(text(lin[i].tree))])); } trans.appendChild(wrap("table",tbody)); } } } function abstree_button(abs) { var i=img(tree_icon); i.setAttribute("onclick","toggle_img(this)"); i.other=server.current_grammar_url+"?command=abstrtree&tree="+encodeURIComponent(abs); return i; } function parsetree_button(abs,lang) { var i=img(tree_icon); i.setAttribute("onclick","toggle_img(this)"); i.other=server.current_grammar_url +"?command=parsetree&from="+lang+"&tree="+encodeURIComponent(abs); return i; } function toggle_img(i) { var tmp=i.src; i.src=i.other; i.other=tmp; } function append_extra_buttons(extra) { if(options.try_google) extra.appendChild(button("Try Google Translate","try_google()")); if(options.feedback_url) appendChildren(extra,[text(" "),button("Feedback","open_feedback()")]); } function try_google() { var menu=element("language_menu"); var trans=element("translations"); var surface=element("surface"); var to=target_lang(); var grammar=menu.grammar; var c=menu.current; var s=c.input; if(surface.typed) s+=surface.typed.value; var url="http://translate.google.com/?sl="+langpart(c.from,grammar.name); if(to!="-1") url+="&tl="+to; url+="&q="+encodeURIComponent(s); window.open(url); } function open_popup(url,target) { var w=window.open(url,target,'toolbar=no,location=no,status=no,menubar=no'); w.focus(); } function open_help() { open_popup(options.help_url,"help"); } function open_feedback() { open_popup(options.feedback_url,'feedback'); } function setField(form,name,value) { form[name].value=value; var el=element(name); if(el) el.innerHTML=value; } function opener_element(id) { with(window.opener) return element(id); } function prefill_feedback_form() { var to_menu=opener_element("to_menu"); var trans=opener_element("translations"); var menu=to_menu.langmenu; var grammar=menu.grammar; var gn=grammar.name; var form=document.forms.namedItem("feedback"); var from=langpart(menu.current.from,gn); var to=langpart(to_menu.options[to_menu.selectedIndex].value,gn); setField(form,"grammar",gn); setField(form,"from",from); setField(form,"input",menu.current.input); setField(form,"to",to=="-1" ? "All" : to); if(to=="-1") element("translation_box").style.display="none"; else setField(form,"translation",trans.single_translation.join(" / ")); // Browser info: form["inner_size"].value=window.innerWidth+"×"+window.innerHeight; form["outer_size"].value=window.outerWidth+"×"+window.outerHeight; form["screen_size"].value=screen.width+"×"+screen.height; form["available_screen_size"].value=screen.availWidth+"×"+screen.availHeight; form["color_depth"].value=screen.colorDepth; form["pixel_depth"].value=screen.pixelDepth; window.focus(); } /* se.chalmers.cs.gf.gwt.TranslateApp/align-btn.png GET /grammars/Foods.pgf?&command=abstrtree&tree=Pred+(This+Fish)+(Very+Fresh) GET /grammars/Foods.pgf?&command=parsetree&tree=Pred+(This+Fish)+Expensive&from=FoodsAfr GET /grammars/Foods.pgf?&command=alignment&tree=Pred+(This+Fish)+Expensive */