/* --- Translations object -------------------------------------------------- */ var tree_icon="../minibar/tree-btn.png"; var alignment_icon="../minibar/align-btn.png"; function Translations(server,opts) { this.server=server; // Default values for options: this.options={ show_abstract: false, abstract_action: null, // action when selecting the abstracy syntax tree show_trees: false, // add buttons to show abstract syntax trees, // parse trees & word alignment tree_img_format: "png", // format for trees & alignment images, // can be "gif", "png" or "svg" show_grouped_translations: true, show_brackets: false, // show bracketed string translate_limit: 25 // maximum number of parse trees to retrieve } // Apply supplied options if(opts) for(var o in opts) this.options[o]=opts[o]; this.main=empty("div"); this.menus=empty("span"); var tom=this.to_menu=node("select",{id:"to_menu",multiple:"",size:5},[]); appendChildren(this.menus,[text(" To: "), this.to_menu]) tom.onchange=bind(this.change_language,this); /* // This seems triggers weird scrolling behavior in Firefox and Chrome: tom.onmouseover=function() { var n=tom.options.length; tom.size=n<12 ? n : 12; } tom.onmouseout=function() { var n=tom.options.length; tom.size=n<4 ? n : 4; } */ } Translations.prototype.change_grammar=function(grammar) { var t=this t.grammar=grammar; t.local=mt_local(t.server.current_grammar_url) update_language_menu(t.to_menu,grammar); insertFirst(t.to_menu,option("All","All")); t.to_menu.value="All"; var toLangs=t.local.get("toLangs") if(toLangs) { t.toLangs=toLangs t.toSet=toSet(toLangs) var os=to_menu.options for(var i=0;i1 ? ""+cnt+" translations:": "One translation:"))); */ for(var p=0;p 1) tbody.appendChild(tr([td(text(lin[i].tree))])); } trans.appendChild(wrap("table",tbody)); } } } } Translations.prototype.abstree_button=function(abs) { var f=this.options.tree_img_format; var img=this.server.current_grammar_url+"?command=abstrtree&format="+f+"&tree="+encodeURIComponent(abs) var btn=tree_button(img,"&nocat=true"); btn.title="Click to display abstract syntax tree" return btn } Translations.prototype.alignment_button=function(abs,all,toLangs) { var f=this.options.tree_img_format; var i=button_img(alignment_icon,function(){toggle_img(i)}); var to= all ? "" : "&to="+encodeURIComponent(toLangs.join(" ")) i.title="Click to display word alignment" i.other=this.server.current_grammar_url+"?command=alignment&format="+f+"&tree="+encodeURIComponent(abs)+to; return i; } Translations.prototype.parsetree_button=function(abs,lang) { var f=this.options.tree_img_format; var img=this.server.current_grammar_url +"?command=parsetree&format="+f+"&nodefont=arial" +"&from="+lang+"&tree="+encodeURIComponent(abs); var btn=tree_button(img) btn.title="Click to display parse tree. Click again to show function names." return btn; } /* --- Auxiliary functions -------------------------------------------------- */ function tree_button(img_url,opt) { var imgs=[tree_icon,img_url+(opt||"&nofun=true"),img_url] var current=0; function cycle() { current++; if(current>=imgs.length) current=0; i.src=imgs[current] } var i=button_img(tree_icon,cycle); return i } function draw_brackets(b) { return b.token ? span_class("token",text(b.token)) : node("span",{"class":"brackets", title:(b.fun||"_")+":"+b.cat+" "+b.fid+":"+b.index}, b.children.map(draw_brackets)) } // Access to localStorage, if available function mt_local(grammar_url) { function dummy() { return { get: function(name,def) { return def }, put: function(name,value) { } } } function real() { var prefix="gf.minibar_translations."+grammar_url+"." return { get: function (name,def) { var id=prefix+name return localStorage[id] ? JSON.parse(localStorage[id]) : def; }, put: function (name,value) { var id=prefix+name; localStorage[id]=JSON.stringify(value); } } } return window.localStorage ? real() : dummy() } // Convert an array of strings to a set (for quick & easy membership tests) function toSet(a) { var set={} for(var i=0;i