summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2014-03-28 14:56:56 +0000
committerhallgren <hallgren@chalmers.se>2014-03-28 14:56:56 +0000
commit98d9946ac425de49880b8f8f783d3b4510a9d762 (patch)
tree2f3662c2941b2a8cc75b6066e9f60898c22389ad /src
parent035d367b1f2e0da6b4988017ef37f275d02b346f (diff)
Wide coverage demo web app improvements
+ Adapt language selection menus to the languages supported by the grammar. + Add translation quality colors to the links to alternative translations. + Also added more country codes in langcode.js (needed for speech synthesis voice selection).
Diffstat (limited to 'src')
-rw-r--r--src/www/js/gftranslate.js17
-rw-r--r--src/www/js/langcode.js10
-rw-r--r--src/www/js/wc.js49
3 files changed, 59 insertions, 17 deletions
diff --git a/src/www/js/gftranslate.js b/src/www/js/gftranslate.js
index c0a47cfb3..09689b5b2 100644
--- a/src/www/js/gftranslate.js
+++ b/src/www/js/gftranslate.js
@@ -25,9 +25,8 @@ gftranslate.translate=function(source,from,to,start,limit,cont) {
else cont([{error:"sentence too long"}])
}
-// Get functions to test which source and target langauges are supported
-gftranslate.get_support=function(cont) {
- function support(code) { return gftranslate.targets[code] }
+// Get list of supported languages
+gftranslate.get_languages=function(cont) {
function init2(grammar_info) {
var ls=grammar_info.languages
gftranslate.grammar=grammar_info.name
@@ -35,9 +34,19 @@ gftranslate.get_support=function(cont) {
for(var i=0;i<ls.length;i++)
if(ls[i].name.substr(0,n)==pre) langs.push(ls[i].name.substr(n))
gftranslate.targetlist=langs
+ cont(langs)
+ }
+ if(gftranslate.targetlist) cont(gftranslate.targetlist)
+ else gftranslate.call("?command=c-grammar",init2)
+}
+
+// Get functions to test which source and target langauges are supported
+gftranslate.get_support=function(cont) {
+ function support(code) { return gftranslate.targets[code] }
+ function init2(langs) {
gftranslate.targets=toSet(langs)
cont(support,support)
}
if(gftranslate.targets) cont(support,support)
- else gftranslate.call("?command=c-grammar",init2)
+ else gftranslate.get_languages(init2)
}
diff --git a/src/www/js/langcode.js b/src/www/js/langcode.js
index 91df409ad..16201ed1f 100644
--- a/src/www/js/langcode.js
+++ b/src/www/js/langcode.js
@@ -36,6 +36,16 @@ function add_country(code) {
case "fi": return "fi-FI"
case "zh": return "zh-CN"
case "hi": return "hi-IN"
+ case "es": return "es-ES"
+ case "it": return "it-IT"
+ case "bg": return "bg-BG" // ?
+ case "da": return "da-DK"
+ case "nb": return "nb-NO"
+ case "nl": return "nl-NL"
+ case "ja": return "ja-JP"
+ case "ro": return "ja-RO"
+ case "el": return "el-GR"
+ // ...
default: return code
}
}
diff --git a/src/www/js/wc.js b/src/www/js/wc.js
index a555f541d..aa3813a4e 100644
--- a/src/www/js/wc.js
+++ b/src/www/js/wc.js
@@ -20,6 +20,18 @@ wc.translate=function() {
}
f.translate.disabled=false
}
+ function trans_quality(r) {
+ var text=r.text
+ var quality="default_quality"
+ switch(text[0]) {
+ case '+': text=text.substr(1); quality="high_quality"; break;
+ case '*': text=text.substr(1); quality="low_quality"; break;
+ default:
+ if(r.tree[0]=="?") quality="low_quality"
+ }
+ if(text[0]==" ") text=text.substr(1)
+ return {quality:quality,text:text}
+ }
function show_pick(i) { return function() { show_trans(i); return false; } }
function show_picks() {
clear(p)
@@ -30,7 +42,8 @@ wc.translate=function() {
var pick=node("a",{href:"#"},[pick])
pick.onclick=pick.onmouseover=show_pick(i)
}
- p.appendChild(span_class("pick",pick))
+ var q=trans_quality(wc.r[i]).quality
+ p.appendChild(span_class("pick "+q,pick))
}
p.appendChild(wrap_class("small","pick",
node("a",{href:wc.google_translate_url(),
@@ -39,21 +52,13 @@ wc.translate=function() {
}
function show_trans(i) {
var r=wc.r[i]
- var text=r.text
- var quality="default_quality"
- switch(text[0]) {
- case '+': text=text.substr(1); quality="high_quality"; break;
- case '*': text=text.substr(1); quality="low_quality"; break;
- default:
- if(r.tree[0]=="?") quality="low_quality"
- }
- if(text[0]==" ") text=text.substr(1)
- f.output.value=text
- f.output.className=quality
+ var t=trans_quality(r)
+ f.output.value=t.text
+ f.output.className=t.quality
if(e) e.innerHTML=r.prob+"<br>"+r.tree
wc.current=i
if(wc.p /*&& wc.r.length>1*/) show_picks()
- if(f.speak.checked) wc.speak(text,f.to.value)
+ if(f.speak.checked) wc.speak(t.text,f.to.value)
}
function trans(text,i) {
@@ -114,10 +119,28 @@ wc.try_google=function() {
}
*/
+// Update language selection menus with the languages supported by the grammar
+function init_languages() {
+ function init2(langs) {
+ var langset=toSet(langs)
+ function update_menu(m) {
+ var l=m.value
+ clear(m)
+ for(var i=0;i<langs.length;i++)
+ m.appendChild(option(concname(langs[i]),langs[i]))
+ if(langset[l]) m.value=l
+ }
+ update_menu(wc.f.from)
+ update_menu(wc.f.to)
+ }
+ gftranslate.get_languages(init2)
+}
+
function init_speech() {
wc.speech=window.speechSynthesis && window.speechSynthesis.getVoices().length>0
if(wc.speech) element("speak").style.display="inline"
}
+init_languages()
init_speech()
setTimeout(init_speech,500) // A hack for Chrome.