summaryrefslogtreecommitdiff
path: root/src/www/js/gftranslate.js
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2014-06-20 18:39:28 +0000
committerhallgren <hallgren@chalmers.se>2014-06-20 18:39:28 +0000
commitfc4c8b0058e425baf4e2b516256f96ed900de29c (patch)
tree5b3f72c49a70e967b218854101865213e07b6af3 /src/www/js/gftranslate.js
parent9eb6557376dc69f3ec5db758fd6578b4cb8f3e3c (diff)
Cloud service & apps: better error handling in wide coverage translation
The wide coverage demo apps now shows a "please wait" message while the grammar is loading, and a red error message if the grammar is not found on the server. The Simple Translation Tool also show red error messages if the grammar is not found.
Diffstat (limited to 'src/www/js/gftranslate.js')
-rw-r--r--src/www/js/gftranslate.js36
1 files changed, 25 insertions, 11 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}