diff options
| author | hallgren <hallgren@chalmers.se> | 2012-05-27 19:19:54 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2012-05-27 19:19:54 +0000 |
| commit | 943652a3d2758b2b3d892053704c8c930e383b14 (patch) | |
| tree | 375085c2d1dc80c2f0ec21e8e01ee972878bfb6d /src | |
| parent | 1215f2b9518d34b774aac8fbed00578cb457b1cb (diff) | |
translator: adding "Parallel texts" view
This is in addition to the existing "Segment by Segment" view.
Also some minor documentation updates.
Diffstat (limited to 'src')
| -rw-r--r-- | src/www/gfse/TODO | 3 | ||||
| -rw-r--r-- | src/www/index.html | 1 | ||||
| -rw-r--r-- | src/www/translator/about.html | 10 | ||||
| -rw-r--r-- | src/www/translator/index.html | 5 | ||||
| -rw-r--r-- | src/www/translator/translator.css | 7 | ||||
| -rw-r--r-- | src/www/translator/translator.js | 74 |
6 files changed, 75 insertions, 25 deletions
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 @@ <li><a href="minibar/about.html">About Minibar</a> <li><a href="minibar/minibar-api.html">Minibar API documentation</a> <li><a href="gfse/about.html">About the online grammar editor</a> + <li><a href="translator/about.html">About the simple translation tool</a> <li><a href="minibar/gf-web-api-examples.html">PGF web service API examples</a> </ul> 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. <h2>TODO</h2> <ul> - <li>Test for browser compatibility (Safari & Firefox tested so far). + <li>Text can be imported/exported by copying and pasting, but other ways + could be added. + <li>Segmentation of imported text based on punctuation. (Currently, segments + must be separated by line breaks or blank lines.) <li>GF's lexer/unlexer is used to allow for more natural looking text, but the unlexer does the wrong thing if the first word of a sentence is supposed to be capitalized, e.g. "I am ready." and "Spanish wine is good." - <li>Import/export text. <li>Cloud service. <li>Interface to other translation services. <li>Interface to grammar editor for grammar extension. + <li>More browser compatibility testing (Chrome, Firefox & Safari tested + so far). <li>... <li>... </ul> @@ -47,7 +51,7 @@ closed and reopened later. <hr> <div class=modtime><small> -<!-- hhmts start --> Last modified: Wed May 16 16:56:22 CEST 2012 <!-- hhmts end --> +<!-- hhmts start --> Last modified: Sun May 27 17:56:48 CEST 2012 <!-- hhmts end --> </small></div> <address> <a href="http://www.cse.chalmers.se/~hallgren/">TH</a> 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 @@ </dl> <td>View <dl> - <dt><label><input type=radio checked>Segment by segment</label> + <dt><label><input name=view value=segmentbysegment type=radio checked onchange="translator.change(this)">Segment by segment</label> + <dt><label><input name=view value=paralleltexts type=radio onchange="translator.change(this)">Parallel texts</label> </dl> <td>Options <dl> @@ -69,7 +70,7 @@ </div> <hr> <div class=modtime><small>HMTL -<!-- hhmts start --> Last modified: Fri May 25 16:08:41 CEST 2012 <!-- hhmts end --> +<!-- hhmts start --> Last modified: Sat May 26 13:23:57 CEST 2012 <!-- hhmts end --> </small></div> <a href="about.html">About</a> 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) { |
