summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/www/js/wc.js100
-rw-r--r--src/www/wc.html6
2 files changed, 91 insertions, 15 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()
}
diff --git a/src/www/wc.html b/src/www/wc.html
index 8ea8e9eaf..54eecd1dc 100644
--- a/src/www/wc.html
+++ b/src/www/wc.html
@@ -2,6 +2,7 @@
<html> <head>
<title>Demo: GF Wide Coverage Translation</title>
<link rel="stylesheet" type="text/css" href="gfse/editor.css" title="Cloud">
+<link rel="stylesheet" type="text/css" href="translator/overlay.css">
<meta name = "viewport" content = "width = device-width">
<meta charset="UTF-8">
<link rel=top href="../" title="GF">
@@ -44,6 +45,8 @@ span.inflect { color: blue; }
<h1><a href="http://www.grammaticalframework.org/"><img class=nofloat src="P/gf-cloud.png" alt="GF"></a> Wide Coverage Translation Demo</h1>
</div>
+<div class=overlay><div id=grammarbox class=grammarbox></div></div>
+
<form onsubmit="return wc.translate()" style="width: 100%">
<table>
<tr><td>
@@ -87,6 +90,7 @@ span.inflect { color: blue; }
</select>
<input name=colors type=checkbox checked onchange="wc.colors()"> Colors
<td><button name=translate type=submit><strong>Translate</strong></button>
+ <input type=button name=grammars onclick="wc.select_grammars()" value="Grammars...">
<tr><td class=input colspan=2>
<div class=input>
<textarea name=input rows=5 style="width: 100%" onkeyup="wc.delayed_translate()"></textarea>
@@ -109,7 +113,7 @@ span.inflect { color: blue; }
</div>
<hr>
<div class=modtime><small>
-<!-- hhmts start -->Last modified: Fri Nov 27 10:47:46 CET 2015 <!-- hhmts end -->
+<!-- hhmts start -->Last modified: Thu May 12 15:32:41 CEST 2016 <!-- hhmts end -->
</small></div>
<a href="http://www.grammaticalframework.org/demos/translation.html">About</a>
<script src="js/support.js"></script>