diff --git a/src/www/gfse/TODO b/src/www/gfse/TODO index 22974ebe0..42445e399 100644 --- a/src/www/gfse/TODO +++ b/src/www/gfse/TODO @@ -41,3 +41,6 @@ + Bug! The startcat menu shows the first category by default, but the startcat flag is actually not set until a selection is made from the menu. +- Bug! In Opera it seems that grammars are sent with the wrong character + encoding to the server, preventing grammars containing ÅÄÖ or other non-ASCII + characters from working. diff --git a/src/www/index.html b/src/www/index.html index 0c1261590..eae755370 100644 --- a/src/www/index.html +++ b/src/www/index.html @@ -24,6 +24,7 @@
  • About Minibar
  • Minibar API documentation
  • About the online grammar editor +
  • About the simple translation tool
  • PGF web service API examples diff --git a/src/www/translator/about.html b/src/www/translator/about.html index a744cd097..90885ed89 100644 --- a/src/www/translator/about.html +++ b/src/www/translator/about.html @@ -32,14 +32,18 @@ closed and reopened later.

    TODO

    @@ -47,7 +51,7 @@ closed and reopened later.
    - Last modified: Wed May 16 16:56:22 CEST 2012 + Last modified: Sun May 27 17:56:48 CEST 2012
    TH diff --git a/src/www/translator/index.html b/src/www/translator/index.html index 1dcaa2a63..dde471a0d 100644 --- a/src/www/translator/index.html +++ b/src/www/translator/index.html @@ -28,7 +28,8 @@ View
    -
    +
    +
    Options
    @@ -69,7 +70,7 @@
    HMTL - Last modified: Fri May 25 16:08:41 CEST 2012 + Last modified: Sat May 26 13:23:57 CEST 2012
    About diff --git a/src/www/translator/translator.css b/src/www/translator/translator.css index f902d94ca..fc89b020d 100644 --- a/src/www/translator/translator.css +++ b/src/www/translator/translator.css @@ -31,7 +31,7 @@ div.document { div.document h2, div.document h3 { color: #009; } table.segments { margin-left: auto; margin-right: auto; } -tr.segment:hover { background: #ffc; } +.current_segment, .segment:hover { background: #ff9; } td.source, td.options, td.target { padding: 1ex; @@ -52,6 +52,11 @@ td.source input[name=it], td.target input[name=it], textarea { width: 100%; font-family: inherit; font-size: inherit; } +table.paralleltexts td { + vertical-align: baseline; + line-height: 130%; +} + div.document form { width: 100%; } span.arrow { color: blue; } diff --git a/src/www/translator/translator.js b/src/www/translator/translator.js index 7d08fdea3..b83df8c29 100644 --- a/src/www/translator/translator.js +++ b/src/www/translator/translator.js @@ -38,6 +38,7 @@ Translator.prototype.redraw=function() { update_radiobutton("method",o.method) update_radiobutton("source",o.from) update_radiobutton("target",o.to) + update_radiobutton("view",o.view || "segmentbysegment") if(o.method!="Manual") { function cont2(gr_info) { t.grammar_info=gr_info @@ -57,6 +58,7 @@ Translator.prototype.update_translations=function() { var o=doc.options var ss=doc.segments var ds=t.drawing.segments + var ts=t.drawing.targets function supported(concname) { var l=t.grammar_info.languages @@ -66,15 +68,22 @@ Translator.prototype.update_translations=function() { function update_translation(i) { var segment=ss[i] - function replace(sd) { - var old=ds[i] - ds[i]=sd - replaceNode(sd,old) + function replace() { + if(ds) { + var sd=t.draw_segment(segment,i) + var old=ds[i] + ds[i]=sd + replaceNode(sd,old) + } + else if(ts) { + clear(ts[i]) + ts[i].appendChild(text(segment.target+" ")) + } } function upd3(txt) { segment.target=txt; - segment.options=JSON.parse(JSON.stringify(o)) // no sharing! - replace(t.draw_segment(segment,i)) + segment.options={method:o.method,from:o.from,to:o.to} // no sharing! + replace() } function upd2(ts) { switch(ts.length) { @@ -90,11 +99,11 @@ Translator.prototype.update_translations=function() { function upd0(source) { t.server.translate({from:gfrom,to:gto,input:source},upd1) } - var fs=supported(gfrom) - var ts=supported(gto) - if(fs && ts) { + var fls=supported(gfrom) + var tls=supported(gto) + if(fls && tls) { if(segment.options.method!="Manual" - && JSON.stringify(segment.options)!=JSON.stringify(o)) + && !eq_options(segment.options,o)) gfshell('ps -lextext "'+segment.source+'"',upd0) } else { @@ -102,8 +111,8 @@ Translator.prototype.update_translations=function() { var tn=concname(o.to) var unsup=" is not supported by the grammar" var sup=" is supported by the grammar" - var msg= fs ? tn+unsup : ts ? fn+unsup : - "Neither "+fn+" nor "+tn+sup + var msg= fls ? tn+unsup : tls ? fn+unsup : + "Neither "+fn+" nor "+tn+sup upd3("["+msg+"]") } } @@ -140,6 +149,7 @@ Translator.prototype.change=function(el) { case "method": update("method"); break; case "source": update("from"); break; case "target": update("to"); break; + case "view": update("view"); break; } } @@ -244,7 +254,7 @@ Translator.prototype.add_segment=function(el) { var edit=wrap_class("tr","segment",source) var ss=t.drawing.segments - var n=ss.length + var n=ss ? ss.length : 0 if(n>0) insertAfter(edit,ss[n-1]) else t.view.appendChild(wrap_class("table","segments",edit)) @@ -274,7 +284,7 @@ Translator.prototype.import=function(el) { var lines=radiobutton("separator","lines", "Segments are separated by line breaks",null,true) var paras=radiobutton("separator","paras", - "Segments are separate by blank lines",null,false) + "Segments are separated by blank lines",null,false) var e=node("form",{onsubmit:done2}, [wrap("h3",text("Import text")), inp, @@ -350,15 +360,41 @@ type Method = "Manual" | GrammarName type GrammarName = String // e.g. "Foods.pgf" */ +function eq_options(o1,o2) { + return o1.method==o2.method && o1.from==o2.from && o1.to==o2.to +} + Translator.prototype.draw_document=function() { var t=this var doc=t.document var o=doc.options; - var segments=mapix(bind(t.draw_segment,t),doc.segments) - var drawing=[node("h2",{},[text(doc.name),text(" "), - wrap("small",draw_translation(o))]), - wrap_class("table","segments",segments)] - return {doc:drawing,segments:segments} + var hdr=wrap("h2",[text(doc.name),text(" "), + wrap("small",draw_translation(o))]) + switch(o.view || "segmentbysegment") { + case "paralleltexts": + function src(seg) { return seg.source } + function trg(seg) { return seg.target } + function fmt(txt,i) { + var sd=span_class("segment",text(txt+" ")) + function setclass(cls) { + return function() { + targets[i].className=sources[i].className=cls + } + } + sd.onmouseover=setclass("current_segment") + sd.onmouseout=setclass("segment") + return sd + } + var sources=mapix(fmt,map(src,doc.segments)) + var targets=mapix(fmt,map(trg,doc.segments)) + var drawing=[hdr,wrap_class("table","paralleltexts", + tr([td(sources),td(targets)]))] + return {doc:drawing,sources:sources,targets:targets} + default: + var segments=mapix(bind(t.draw_segment,t),doc.segments) + var drawing=[hdr,wrap_class("table","segments",segments)] + return {doc:drawing,segments:segments} + } } Translator.prototype.draw_segment=function(s,i) {