summaryrefslogtreecommitdiff
path: root/src/www/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/www/js')
-rw-r--r--src/www/js/gftranslate.js36
-rw-r--r--src/www/js/wc.js11
2 files changed, 35 insertions, 12 deletions
diff --git a/src/www/js/gftranslate.js b/src/www/js/gftranslate.js
index df08616c7..591f02217 100644
--- a/src/www/js/gftranslate.js
+++ b/src/www/js/gftranslate.js
@@ -6,10 +6,7 @@ var gftranslate = {}
gftranslate.jsonurl="/robust/Translate11.pgf"
gftranslate.grammar="Translate" // the name of the grammar
-gftranslate.call=function(querystring,cont) {
- function errcont(text,code) {
- cont([{translations:[{error:code+" "+text}]}])
- }
+gftranslate.call=function(querystring,cont,errcont) {
http_get_json(gftranslate.jsonurl+querystring,cont,errcont)
}
@@ -25,11 +22,12 @@ gftranslate.translate=function(source,from,to,start,limit,cont) {
var lexer="&lexer=text"
if(from=="Chi") lexer="",source=source.split("").join(" ")
var encsrc=encodeURIComponent(source)
+ function errcont(text,code) { cont([{error:code+" "+text}]) }
function extract(result) { cont(result[0].translations) }
if(encsrc.length<500)
gftranslate.call("?command=c-translate&input="+encsrc
+lexer+"&unlexer=text&from="+g+from+"&to="+enc_langs(g,to)
- +"&start="+start+"&limit="+limit,extract)
+ +"&start="+start+"&limit="+limit,extract,errcont)
else cont([{error:"sentence too long"}])
}
@@ -39,17 +37,19 @@ gftranslate.wordforword=function(source,from,to,cont) {
var lexer="&lexer=text"
if(from=="Chi") lexer="",source=source.split("").join(" ")
var encsrc=encodeURIComponent(source)
+ function errcont(text,code) { cont([{error:code+" "+text}]) }
function extract(result) { cont(result[0].translations) }
var enc_to = enc_langs(g,to)
if(encsrc.length<500)
gftranslate.call("?command=c-wordforword&input="+encsrc
+lexer+"&unlexer=text&from="+g+from+"&to="+enc_to
- ,extract)
+ ,extract,errcont)
else cont([{error:"sentence too long"}])
}
// Get list of supported languages
-gftranslate.get_languages=function(cont) {
+gftranslate.waiting=[]
+gftranslate.get_languages=function(cont,errcont) {
function init2(grammar_info) {
var ls=grammar_info.languages
gftranslate.grammar=grammar_info.name
@@ -57,21 +57,35 @@ gftranslate.get_languages=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)
+ var w=gftranslate.waiting
+ for (var i=0;i<w.length;i++) w[i].cont(langs)
+ gftranslate.waiting=[]
+ }
+ function init2error(text,status,ct) {
+ var w=gftranslate.waiting
+ for (var i=0;i<w.length;i++) {
+ var e=w[i].errcont
+ if(e) e(text,status,ct)
+ }
+ gftranslate.waiting=[]
}
if(gftranslate.targetlist) cont(gftranslate.targetlist)
- else gftranslate.call("?command=c-grammar",init2)
+ else {
+ gftranslate.waiting.push({cont:cont,errcont:errcont})
+ if(gftranslate.waiting.length<2)
+ gftranslate.call("?command=c-grammar",init2,init2error)
+ }
}
// Get functions to test which source and target langauges are supported
-gftranslate.get_support=function(cont) {
+gftranslate.get_support=function(cont,errcont) {
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.get_languages(init2)
+ else gftranslate.get_languages(init2,errcont)
}
// trans_text_quality : String -> {quality:String, text:String}
diff --git a/src/www/js/wc.js b/src/www/js/wc.js
index e35b8f9c9..04686fee7 100644
--- a/src/www/js/wc.js
+++ b/src/www/js/wc.js
@@ -3,10 +3,12 @@ wc.cnl="Phrasebook" // try this controlled natural language first
wc.f=document.forms[0]
wc.o=element("output")
wc.e=element("extra")
+wc.i=element("grammarinfo")
wc.p=element("pick")
wc.os=[] // output segment list
wc.cache={} // output segment cache, indexed by source text
wc.local=appLocalStorage("gf.wc.")
+wc.translating=""
wc.delayed_translate=function() {
function restart(){ if(wc.f.input.value!=wc.translating) wc.translate() }
@@ -298,6 +300,7 @@ wc.try_google=function() {
// Update language selection menus with the languages supported by the grammar
function init_languages() {
function init2(langs) {
+ replaceInnerHTML(wc.i,"Enter text to translate above")
wc.languages=langs
var langset=toSet(langs)
function update_menu(m) {
@@ -310,7 +313,13 @@ function init_languages() {
update_menu(wc.f.from)
update_menu(wc.f.to)
}
- gftranslate.get_languages(init2)
+ function initerror(errortext,status,ct) {
+ var msg = status==404 ? "The wide cover translation grammar was not found on the server" : "Server problem "+status
+ replaceChildren(wc.i,text(msg))
+ if(wc.i) wc.i.className="error"
+ }
+ replaceInnerHTML(wc.i,"Loading the wide coverage translation grammar, please wait...")
+ gftranslate.get_languages(init2,initerror)
}
function init_speech() {