diff options
| author | hallgren <hallgren@chalmers.se> | 2011-10-12 17:03:54 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2011-10-12 17:03:54 +0000 |
| commit | 44d1a5a9f71b03d9aceeccd760a63fcdc45f8bad (patch) | |
| tree | d51076a708997d6f1af6ac0deefd535bbc25f804 /src/www/minibar/minibar.js | |
| parent | 0aba45560d2033c37c3d2e876e6f3ef89e1554d6 (diff) | |
Improvements of "gf -server" mode and related setup
"gf -server" mode now contains everything needed to run the minibar and
the grammar editor (including example-based grammar writing).
The Setup.hs script installs the required files where gf -server can find them.
These files have been moved to a new directory: src/www.
The separate server program pgf-http is now obsolete.
Diffstat (limited to 'src/www/minibar/minibar.js')
| -rw-r--r-- | src/www/minibar/minibar.js | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/src/www/minibar/minibar.js b/src/www/minibar/minibar.js new file mode 100644 index 000000000..778a3957b --- /dev/null +++ b/src/www/minibar/minibar.js @@ -0,0 +1,176 @@ +/* minibar.js +needs: minibar_support.js, minibar_input.js, minibar_translations.js, support.js +*/ + +/* +// This is essentially what happens when you call start_minibar: +if(server.grammar_list) grammars=server.grammar_list; +else grammars=server.get_grammarlist(); +show_grammarlist(grammars) +select_grammar(grammars[0]) +grammar_info=server.get_languages() +show_languages(grammar_info) +new_language() +complete_output=get_completions() +show_completions(complete_output) +*/ + +// For backward compatibility: +function start_minibar(server,opts,target) { + if(target) opts.target=target; + return new Minibar(server,opts); +} + +/* --- Main Minibar object -------------------------------------------------- */ +function Minibar(server,opts) { + // Contructor, typically called when the HTML document is loaded + + /* --- Configuration ---------------------------------------------------- */ + + // default values for options: + this.options={ + target: "minibar", + try_google: true, + feedback_url: null, + help_url: null + } + + // Apply supplied options + if(opts) for(var o in opts) this.options[o]=opts[o]; + + /* --- Creating the components of the minibar --------------------------- */ + this.translations=new Translations(server,this.options) + this.input=new Input(server,this.translations,this.options) + + /* --- Creating user interface elements --------------------------------- */ + + this.menubar=empty("div"); + this.extra=div_id("extra"); + + this.minibar=element(this.options.target); + this.minibar.innerHTML=""; + with(this) { + appendChildren(menubar,[input.menus,translations.menus,input.buttons]) + appendChildren(minibar,[menubar,input.main,translations.main,extra]); + append_extra_buttons(extra,options); + } + + /* --- Minibar client state initialisation ------------------------------ */ + this.grammar=null; + + this.server=server; + + /* --- Main program, this gets things going ----------------------------- */ + with(this) { + if(server.grammar_list) show_grammarlist(server.grammar_list); + else server.get_grammarlist(bind(show_grammarlist,this)); + } +} + +Minibar.prototype.show_grammarlist=function(grammars) { + this.grammar_menu=empty_id("select","grammar_menu"); + with(this) { + if(grammars.length>1) { + function opt(g) { return option(g,g); } + appendChildren(grammar_menu,map(opt,grammars)); + grammar_menu.onchange= + bind(function() { select_grammar(grammar_menu.value); },this); + insertFirst(menubar,grammar_menu); + insertFirst(menubar,text("Grammar: ")); + } + if(options.help_url) + menubar.appendChild(button("Help",bind(open_help,this))); + select_grammar(grammars[0]); + } +} + +Minibar.prototype.select_grammar=function(grammar_name) { + var t=this; + //debug("select_grammar "); + function change_grammar() { + t.server.grammar_info(bind(t.change_grammar,t)); + } + t.server.switch_grammar(grammar_name,change_grammar); +} + +Minibar.prototype.change_grammar=function(grammar_info) { + var t=this; + with(t) { + //debug("show_languages "); + grammar=grammar_info; + + input.change_grammar(grammar) + translations.change_grammar(grammar) + } +} + +Minibar.prototype.append_extra_buttons=function(extra,options) { + with(this) { + if(options.try_google) + extra.appendChild(button("Try Google Translate",bind(try_google,this))); + if(options.feedback_url) + appendChildren(extra,[text(" "),button("Feedback",bind(open_feedback,this))]); + } +} + +Minibar.prototype.try_google=function() { + with(this) { + var to=translations.target_lang(); + var s=input.current.input; + if(input.surface.typed) s+=input.surface.typed.value; + var url="http://translate.google.com/?sl=" + +langpart(input.current.from,grammar.name); + if(to!="All") url+="&tl="+to; + url+="&q="+encodeURIComponent(s); + window.open(url); + } +} + +Minibar.prototype.open_help=function() { + with(this) open_popup(options.help_url,"help"); +} + +Minibar.prototype.open_feedback=function() { + with(this) { + // make the minibar state easily accessible from the feedback page: + minibar.state={grammar:grammar,current:input.current, + to:translations.to_menu.value, + translations:translations.translations}; + open_popup(options.feedback_url,'feedback'); + } +} + +// This function is called from feedback.html +function prefill_feedback_form() { + var state=opener_element("minibar").state; + var trans=state.translations; + var gn=state.grammar.name + var to=langpart(state.to,gn); + + var form=document.forms.namedItem("feedback"); + setField(form,"grammar",gn); + setField(form,"from",langpart(state.current.from,gn)); + setField(form,"input",state.current.input); + setField(form,"to",to); + if(to=="All") 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 +*/ |
