/*迷你酒吧.js需要:minibar_support.js、minibar_input.js、minibart_translations.js、support.js*//*//这就是调用start_minibar时的基本情况:如果(server.grammar_list)grammars=server.grammar列表;else grammars=服务器.get_grammarlist();show_grammarlist(语法)select_grammar(语法[0])grammar_info=服务器.get_languages()显示语言(语法信息)新语言(_language)complete_output=get_completions()show_completions(完整输出)*///对于向后兼容性:函数start_minibar(服务器、opts、目标){if(target)opts.target=目标;return new Minibar(服务器,opts);}/*---主迷你工具栏对象--------------------------------------------------*/功能Minibar(服务器,opts){//构造函数,通常在加载HTML文档时调用/*---配置----------------------------------------------------*///选项的默认值:this.选项={目标:“迷你吧”,try_google:正确,feedback_url:空,help_url:空,initial_grammar:空}//应用提供的选项this.server=服务器;if(opts)for(opts中的var o)this.options[o]=opts[o];//本地存储this.local=appLocalStorage(“gf.minibar.”)/*---语法编辑器集成----------------------------------------*/if(!this.options.abstract_action)this.integrate_syntaxeditor()/*---创建迷你吧的组件---------------------------*/this.translations=新翻译(服务器,this.options)this.input=新输入(服务器,this.translations,this.options)/*---创建用户界面元素---------------------------------*/this.menubar=div类(“menubar”);this.infobar=div类(“infobar”);this.extra=divid(“extra”);this.minibar=元素(this.options.target);this.minibar.innerHTML=“”;用(这个){appendChildren(菜单栏,[input.menus,translations.menus,input.buttons])appendChildren(迷你工具栏,[菜单栏,信息栏,input.main,translations.main,extra]);if(options.help_url)menubar.appendChild(button(“帮助”,bind(open_Help,this));附加_附加_按钮(附加,选项);}this.set_hidden=函数(b){this.hidden=bthis.minibar.style.display=b?“无”:“”}this.hide=函数(){this.set_hidden(true);}this.show=函数(){this.set_hidden(false);}/*---迷你吧客户端状态初始化-----------------------------*/this.grammar=null;/*---主程序,这使事情得以进行------------------------------*/用(这个){server.getgrammarlists(绑定(显示语法列表,this));}}Minibar.prototype.integrate_syntax_editor=函数(){var迷你吧=这个var editor_target=“语法编辑器”var e=元素(编辑器目标)if(!e||!window.Editor)返回e.style.display=“无”minibar.options.abstract_action=函数(树){函数not_all(s){returns!=“all”}var languages=过滤器(not_all,minibar.translations.toLangs)var编辑器选项={目标:editor_target,show_grammar_menu:minibar.grammars.length>1,show_startcat菜单:迷你工具栏输入选项启动菜单,初始:{grammar:minibar.grammar_menu.value,//hmmstartcat:minibar.input.startcat菜单值,//hmm语言:语言,abtr:树},lin_action:函数(new_input,langFrom){console.log(editor.menu.ui.grammar_menu.value)var grammar_url=编辑器菜单.ui.grammar_menu.value//hmm||迷你工具栏服务器current_grammar_url//hmmvar startcat=编辑器.get_startcat()||迷你工具栏输入开始菜单值//hmmvar toLangs=gm.languages//hmmminibar.input.set_input_for(语法url,{from:langFrom,来自,startcat:startcat,输入:gf_lex(新输入)})minibar.translations.set_toLangs_for(语法url,toLangs)//更好:保留编辑器,下次重新激活它:editor.hide()// ...//更简单:删除编辑器,下次创建新编辑器:清除(editor.container)editor=minibar.editor=null;//即使语法和以前一样,这个调用也是//最终触发加载newinput的因素:minibar.select_grammar(语法url)//使迷你吧再次可见迷你吧.show()}}minibar.hide()var gm=新语法管理器(minibar.server,editor_options);var editor=minibar.editor=新编辑器(gm,editor_options)编辑器.show()}}Minibar.prototype.get_current_input=函数(续){var t=这个if(!t.hidden)cont(gf_unlex(t.input.current.input))其他{var树=t.editor.get_ast()函数pick(lins){cont(lins[0].text)}t.server.linealize({tree:tree,to:t.input.current.from},pick)}}Minibar.prototype.show_grammarlist=函数(dir,grammar_names,dir_count){var t=这个;var first_time=!t.grammar_菜单if(第一次){t.grammar_menu=空id(“选择”,“语法菜单”);t.grammars=[];t.grammar_dirs=[];}t.grammar_dirs.push(目录);t.grammars=t.grammars.concat(grammar_names.map(函数(g){return dir+g}))函数glabel(g){return hasPrefix(dir,“/tmp/gfse.”)?“gfse:”+克:克}函数opt(g){返回选项(glabel(g),dir+g);}appendChildren(t.grammar_menu,映射(opt,grammar_names));函数pick(){var grammar_url=t.grammar_菜单.valuet.local.put(“last_grammar”,grammar_url)t.select_grammar(语法url);}函数pick_first_grammar(){如果(t.timeout)clearTimeout(t.timetimeout),t.timeout=null;if(t.grammar_menu.length>1&&!t.grammar _ menu.parentElement){t.grammar_menu.onchange=选择;insertFirst(t.menubar,title(“显示语法信息”,button(“i”,bind(t.Show_grammarinfo,t)))insertFirst(t.menubar,t.grammar_menu);insertFirst(t.menubar,text(“语法:”));}var grammar0=t.options.initial_grammarif(!语法0){var last_grammar=t.local.get(“last_gragram”);if(last-grammar&&elem(last-grammar,t.grammars))grammar0=last_grammar;}var pgs=t.options.preferred语法if(!grammar0&&pgs)for(pgs中的var i)if(元素(pgs[i],t.grammars)){语法0=pgs[i]打破}如果(!grammar0)grammar0=t.grammar[0];//console.log(“grammar0=”,grammar0)t.grammar_menu.value=语法0;t.select_grammar(语法0);}//最多等待1.5秒,然后显示语法菜单。if(first_time)t.timeout=设置超时(pick_first_grammar,1500);如果(t.grammar_dirs.length>=目录计数)pick_first_grammar();}Minibar.prototype.select_grammar=函数(grammar_url){var t=这个;//调试(“select_grammar”);函数change_grammar(){t.server.grammar_info(绑定(t.change_grammar,t));}t.server.switch_to_other_grammar(语法url,更改语法);}Minibar.prototype.change_grammar=函数(grammar_info){var t=这个;//调试(“show_languages”);t.grammar=语法信息;t.input.change_grammar(语法信息)t.translations.change_grammar(语法信息)t.获取_pgf_info()}Minibar.prototype.get_pgf_info=函数(){var t=这个;var info_url=t.server.current_grammar_url+“info”;清除(t.infobar)t.pgf_info=空;ajaxhttpget(信息url,绑定(t.show_pgf_info,t),函数(){})}Minibar.prototype.show_pgf_info=函数(信息){var t=这个;var cnt=0;//console.log(信息)info=info.split(“\n”);对于(var i=0;i1)t.infobar.appendChild(按钮(“更多信息”,绑定(t.show_grammarinfo,t))}Minibar.prototype.show_grammarinfo=函数(){var t=这个var g=本语法;函数draw_cats(cats){函数draw_cat(cat){var i=猫返回tr([td(文本(i.def)),td(文本(i.producers.join(“,”)),td(文本(i.consumers.join(“,”))]}var表=wrap_class(“表”,“浏览”,g.categories.map(draw_cat))var hdr=tr([th(文本(“类别”)),th(文本(“制作人”),th(文本(“消费者”)])insertFirst(表格,hdr)返回表}函数draw_funs(funs){函数draw_fun(fun){var-def=funs[fun].def.split(“:”)return tr([td(文本(定义[0])),td(文字(“:”)),td(文字[定义[1]||“”)])}return div_class(“浏览”,wrap(“表格”,g.functions.map(draw_fun))}函数draw_more(信息){replaceChildren(猫,draw_cat(info.cats))replaceChildren(funs,draw_funs(info.funs))btn.disabled=true;}函数more(){t.server.browse({},draw_more)}var cats=wrap(“div”,文本(g.categories.join(“,”))var-funs=wrap(“div”,文本(g.functions.join(“,”))var btn=按钮(“显示更多详细信息”,更多)var信息=空(“div”)if(t.pgf_info)info.innerHTML=t.pgf.infoif(true||/^\/(tmp|grammars)\//.test(server.grammars_url)){var q=“?”+server.grammars_url+“”+server.current_grammar_urlvar链接=节点(“a”,{href:q})link.appendChild(文本(link.href));info.appendChild(wrap(“p”,[text(“直接链接到此语法:”),Link]))}清除(t.translations.main)var hdr=[文本(g.name)]if(g.lastmodified){hdr.push(文本(“”))hdr.push(换行(“小”,文本(“(”+g.lastmodified+“)”))}appendChildren(this.translations.main,[包裹(“h3”,hdr),信息,text(“语法中的类别和函数如下所示。”),btn,英国,换行(“h4”,文本(“开始类别”),文本(g.startcat||“”),换行(“h4”,文本(“类别”),猫,换行(“h4”,文本(“函数”),funs])}Minibar.prototype.append_extra_buttons=函数(额外,选项){用(这个){if(options.try_google)extra.appendChild(按钮(“尝试谷歌翻译”,bind(Try_Google,this));if(选项.feedback_url){var b=按钮(“反馈”,绑定(open_Feedback,this));b.title=“单击以建议改进。首先在“收件人:”菜单中选择一种语言,以建议更好的翻译为该语言。”appendChildren(额外,[text(“”),b]);}}}Minibar.trototype.try_google=函数(){用(这个){var to=translations.target_lang();var s=gf_unlex(输入电流输入);if(input.surface.typed)s+=“”+input.surface.typed.value;var url=“http://translate.google.com/?sl="+语言部件(input.current.from,grammar.name);if(to!=“All”)url+=“&tl=”+to;url+=“&q=”+编码URI组件;window.open(url);}}Minibar.prototype.open_help=函数(){open_popup(this.options.help_url,“帮助”);}Minibar.prototype.open_feedback=函数(){用(这个){//从反馈页面轻松访问迷你吧状态:minibar.state={grammar:grammar,current:input.current,到:translations.to_menu.value,翻译:translations.main};open_popup(options.feedback_url,‘feedback’);}}//此函数从feedback.html调用函数prefill_feedback_form(){var state=opener_element(“minibar”).state;var trans=状态转换;var gn=状态语法名称var to=语言部分(state.to,gn);var form=document.forms.namedItem(“反馈”);setField(form,“grammar”,gn);setField(form,“from”,langpart(state.current.from,gn));setField(form,“input”,gf_unlex(state.current.input));setField(form,“to”,to);if(to==“All”)element(“translation_box”).innerHTML=“要建议对特定语言进行更好的翻译,请在“收件人:”菜单中选择该语言,然后按“反馈”按钮。”else setField(form,“translation”,trans.single_translation.join(“/”));//浏览器信息:form[“inner_size”].value=window.innerWidth+“×”+window.innerHeight;form[“outer_size”].value=窗口.outerWidth+“×”+窗口.outer高度;form[“screen_size”].value=屏幕宽度+“×”+屏幕高度;form[“available_screen_size”].value=屏幕可用宽度+“×”+屏幕可用高度;form[“color_depth”].value=screen.colorDepth;form[“pixel_depth”].value=屏幕像素深度;window.focus();}/*se.chalmers.cs.gf.gwt.TranslateApp/align-btn.pngGET/grammars/Foods.pgf&command=abtrtree&tree=Pred+(这+鱼)+(非常+新鲜)GET/grammars/Foods.pgf&command=parsetree&tree=Pred+(This+Fish)+昂贵&from=FoodsAfrGET/grammars/Foods.pgf&command=alignment&tree=Pred+(This+Fish)+昂贵*/