summaryrefslogtreecommitdiff
path: root/src/www/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/www/js')
-rw-r--r--src/www/js/wc.js100
1 files changed, 86 insertions, 14 deletions
diff --git a/src/www/js/wc.js b/src/www/js/wc.js
index c32d0f2e8..99fcf2edb 100644
--- a/src/www/js/wc.js
+++ b/src/www/js/wc.js
@@ -2,12 +2,14 @@
/* --- Wide Coverage Translation Demo web app ------------------------------- */
var wc={}
-//wc.cnl="Phrasebook" // try this controlled natural language first
+wc.selected_cnls=[] // list of grammar names
+wc.cnls={} // maps grammars names to {pgf_online:...,grammar_info:{...}}
wc.f=document.forms[0]
wc.o=element("output")
wc.e=element("extra")
wc.i=element("grammarinfo")
wc.p=element("pick")
+wc.grammarbox=element("grammarbox")
wc.os=[] /* output segment list
[{input,text:String; from,to::Lang;
target:Node;
@@ -42,6 +44,7 @@ wc.save=function() {
wc.local.put("to",f.to.value)
wc.local.put("input",f.input.value)
wc.local.put("colors",f.colors.checked)
+ wc.local.put("cnls",wc.selected_cnls)
}
}
@@ -52,6 +55,7 @@ wc.load=function() {
f.from.value=wc.local.get("from",f.from.value)
f.to.value=wc.local.get("to",f.to.value)
f.colors.checked=wc.local.get("colors",f.colors.checked)
+ wc.selected_cnls=wc.local.get("cnls",wc.selected_cnls)
wc.colors()
wc.delayed_translate()
}
@@ -249,25 +253,31 @@ wc.translate=function() {
gftranslate.translate(text,f.from.value,wc.languages || f.to.value,i,count,step3)
}
function step2(text) { trans(text,0,10) }
- function step2cnl(text) {
+ function step2cnl(text,ix) {
function step3cnl(results) {
var trans=results[0].translations
if(trans && trans.length>=1) {
for(var i=0;i<trans.length;i++) {
var r=trans[i]
r.prob=0
- showit(r,wc.cnl)
+ showit(r,cnl)
}
}
- step2(text)
+ step2cnl(text,ix+1)
}
- wc.pgf_online.translate({from:wc.cnl+f.from.value,
- //to:wc.cnl+f.to.value,
- lexer:"text",unlexer:"text",input:text},
- step3cnl,
- function(){step2(text)})
+ if(ix<wc.selected_cnls.length) {
+ var g=wc.cnls[wc.selected_cnls[ix]]
+ var cnl=g.grammar_info.name
+ g.pgf_online.translate({from:cnl+f.from.value,
+ //to:cnl+f.to.value,
+ lexer:"text",unlexer:"text",
+ jsontree:true,input:text},
+ step3cnl,
+ function(){step2cnl(text,ix+1)})
+ }
+ else step2(text)
}
- if(wc.cnl) step2cnl(so.input)
+ if(wc.selected_cnls) step2cnl(so.input,0)
else step2(so.input)
}
@@ -419,6 +429,70 @@ wc.init_speech=function() {
}
}
+
+wc.show_grammarbox=function() {
+ wc.grammarbox.parentNode.style.display="block";
+}
+
+wc.hide_grammarbox=function() {
+ wc.grammarbox.parentNode.style.display="";
+ clear(wc.grammarbox)
+}
+
+wc.init_cnl=function(grammar) {
+ var g
+ if(wc.cnls[grammar]) g=wc.cnls[grammar]
+ else g=wc.cnls[grammar]={}
+ g.pgf_online=pgf_online({})
+ g.pgf_online.switch_grammar(grammar)
+ g.pgf_online.grammar_info(function(info){g.grammar_info=info})
+}
+
+wc.init_cnls=function() {
+ var gs=wc.selected_cnls
+ for(var i=0;i<gs.length;i++) wc.init_cnl(gs[i])
+}
+
+wc.select_grammars=function() {
+ function done() {
+ wc.hide_grammarbox()
+ wc.local.put("cnls",wc.selected_cnls)
+ }
+ function checkbox(grammar) {
+ var vb=node("input",{type:"checkbox"})
+ vb.checked=elem(grammar,wc.selected_cnls)
+ vb.onchange=function() {
+ if(elem(grammar,wc.selected_cnls)) {
+ function other(g) { return g!=grammar }
+ if(!vb.checked) wc.selected_cnls=filter(other,wc.selected_cnls)
+ }
+ else {
+ if(vb.checked) {
+ wc.selected_cnls.push(grammar)
+ wc.init_cnl(grammar)
+ }
+ }
+ }
+ return vb
+ }
+ function grammar_pick(grammar) {
+ return [checkbox(grammar),text(" "+grammar.split(".pgf")[0])]
+ }
+ function show_list(grammars) {
+ for(var i=0;i<grammars.length;i++)
+ list.appendChild(wrap("dt",grammar_pick(grammars[i])))
+ }
+
+ clear(wc.grammarbox)
+ wc.grammarbox.appendChild(wrap("h2",text("Select which domain-specific grammars to use")))
+ wc.grammarbox.appendChild(text("These grammars are tried before the wide-coverage grammar. They can give higher quality translations within their respective domains."))
+ var list=empty("dl")
+ wc.grammarbox.appendChild(list)
+ wc.grammarbox.appendChild(button("Done",done))
+ wc.show_grammarbox()
+ wc.pgf_online.get_grammarlist(show_list)
+}
+
wc.initialize=function(grammar_name,grammar_url) {
if(grammar_name && grammar_url) {
gftranslate.grammar=grammar_name
@@ -427,11 +501,9 @@ wc.initialize=function(grammar_name,grammar_url) {
wc.init_languages()
//init_speech()
setTimeout(wc.init_speech,500) // A hack for Chrome.
- if(wc.cnl) {
- wc.pgf_online=pgf_online({});
- wc.pgf_online.switch_grammar(wc.cnl+".pgf")
- }
+ wc.pgf_online=pgf_online({});
wc.local=appLocalStorage("gf.wc."+gftranslate.grammar+".")
wc.load()
+ wc.init_cnls()
wc.f.input.focus()
}