diff options
| author | hallgren <hallgren@chalmers.se> | 2013-04-03 20:24:57 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2013-04-03 20:24:57 +0000 |
| commit | a22a419bc7ea0dc45f9965e6ffebf42417212d52 (patch) | |
| tree | 592af96d4a5b44b5a6dbe4ab83c13e4a2de7a60e /src/www/translator | |
| parent | 0568a1a32a777c234ec044d56d46d5d4b4c0e760 (diff) | |
Simple Translation Tool: initial support for editing source segments in the minibar
Diffstat (limited to 'src/www/translator')
| -rw-r--r-- | src/www/translator/index.html | 13 | ||||
| -rw-r--r-- | src/www/translator/translator.css | 6 | ||||
| -rw-r--r-- | src/www/translator/translator.js | 132 |
3 files changed, 100 insertions, 51 deletions
diff --git a/src/www/translator/index.html b/src/www/translator/index.html index 27314d595..7dc696352 100644 --- a/src/www/translator/index.html +++ b/src/www/translator/index.html @@ -3,6 +3,7 @@ <title>Simple Translation Tool</title> <link rel="stylesheet" type="text/css" href="../gfse/editor.css" title="Cloud"> <link rel="stylesheet" type="text/css" href="translator.css" title="Cloud"> +<link rel="stylesheet" type="text/css" href="../minibar/minibar.css"> <meta name = "viewport" content = "width = device-width"> <meta charset="UTF-8"> </head> @@ -75,15 +76,23 @@ </div> <hr> <div class=modtime><small>HMTL -<!-- hhmts start -->Last modified: Mon Feb 11 16:09:58 CET 2013 <!-- hhmts end --> +<!-- hhmts start -->Last modified: Wed Apr 3 20:29:44 CEST 2013 <!-- hhmts end --> </small></div> <a href="about.html">About</a> <script type="text/javascript" src="../js/support.js"></script> <script type="text/javascript" src="../js/pgf_online.js"></script> -<script type="text/javascript" src="../gfse/cloud2.js"></script> +<script type="text/javascript" src="../js/localstorage.js"></script> <script type="text/javascript" src="../gfse/localstorage.js"></script> +<script type="text/javascript" src="../gfse/cloud2.js"></script> + +<script type="text/javascript" src="../minibar/minibar.js"></script> +<script type="text/javascript" src="../minibar/minibar_input.js"></script> +<script type="text/javascript" src="../minibar/minibar_translations.js"></script> +<script type="text/javascript" src="../minibar/minibar_support.js"></script> + <script type="text/javascript" src="translator.js"></script> + <script type="text/javascript" > var translator = new Translator() </script> diff --git a/src/www/translator/translator.css b/src/www/translator/translator.css index 47a28e8aa..d85c605ab 100644 --- a/src/www/translator/translator.css +++ b/src/www/translator/translator.css @@ -119,3 +119,9 @@ div.overlay > div { box-shadow: 4px 4px 12px rgba(0,0,0,0.33); /*border-radius: 5px;*/ } + +div#minibar { + border: 1px solid black; + padding: 5px; + background: #ccc url("../minibar/brushed-metal.png"); +} diff --git a/src/www/translator/translator.js b/src/www/translator/translator.js index aad6f7e28..2d9a278a1 100644 --- a/src/www/translator/translator.js +++ b/src/www/translator/translator.js @@ -4,11 +4,12 @@ function Translator() { var t=this - t.local=tr_local(); + + t.local=appLocalStorage("gf.translator.") t.view=element("document") t.filebox=element("filebox") if(!supports_html5_storage()) { - var warning=span_class("error",text("It appears that localStorage is unsupported or disabled in this browser. Documents will not be preserved after you leave or reload this page!")) + var warning=span_class("error",text("It appears that localStorage is unsupported or disabled in this browser. Local documents will not be preserved after you leave or reload this page!")) insertAfter(warning,t.view) } if(!supports_local_files()) { @@ -18,6 +19,16 @@ function Translator() { t.servers={}; //The API is stateful, use one pgf_online object per grammar t.grammar_info={}; pgf_online({}).get_grammarlist(bind(t.extend_methods,t)) + + function update_language_menu(t,id) { + var dl=element(id); + clear(dl); + for(var i in languages) { + var l=languages[i] + dl.appendChild(dt(radiobutton(id,l.code,l.name,bind(t.change,t)))) + } + } + update_language_menu(t,"source") update_language_menu(t,"target") if(window.apertium) t.add_apertium() @@ -30,15 +41,6 @@ function Translator() { } } -function update_language_menu(t,id) { - var dl=element(id); - clear(dl); - for(var i in languages) { - var l=languages[i] - dl.appendChild(dt(radiobutton(id,l.code,l.name,bind(t.change,t)))) - } -} - Translator.prototype.redraw=function() { var t=this; if(t.current=="/") t.browse() @@ -67,7 +69,7 @@ Translator.prototype.switch_grammar=function(grammar,cont) { var pgf=t.servers[grammar] if(pgf) pgf.waiting.push(cont) else { - pgf=t.servers[grammar]=pgf_online({}) + pgf=t.servers[grammar]=pgf_online({grammar_list:[grammar]}) pgf.waiting=[cont] function cont2(gr_info) { t.grammar_info[grammar]=gr_info @@ -201,11 +203,9 @@ Translator.prototype.update_translation=function(i) { var server=t.servers[grammar] function upd3(txts) { update_segment(grammar,txts) } function upd2(ts) { - function unlex(txt,cont) { gfshell('ps -unlextext "'+txt+'"',cont) } - switch(ts.length) { case 0: upd3(["[no translation]"]);break; - default: mapc(unlex,ts,upd3); break; + default: mapc(unlextext,ts,upd3); break; } } function upd1(translate_output) { @@ -221,7 +221,7 @@ Translator.prototype.update_translation=function(i) { var want={from:o.from, to:o.to, method:grammar} if(!eq_options(segment.options,want)) { //console.log("Updating "+i) - gfshell('ps -lextext "'+segment.source+'"',upd0) + lextext(segment.source,upd0) } //else console.log("No update ",want,segment.options) } @@ -253,6 +253,18 @@ Translator.prototype.update_translation=function(i) { } } +// Return the name of the grammar if the segment uses GF for translation +function uses_gf(doc,segment) { + var m= segment.options.method || doc.options.method + var d=segment.use_default + if(d || d==null) m=doc.options.method + switch(m) { + case "Manual": return null + case "Apertium": return null + default: return m + } +} + Translator.prototype.add_apertium=function() { var dl=element("methods") if(dl) add_apertium_to_menu(dl,bind(this.change,this)) @@ -688,11 +700,12 @@ Translator.prototype.pick_translation=function(i,txt) { Translator.prototype.edit_source=function(source,i) { var t=this - var s=t.document.segments[i] + var doc=t.document + var s=doc.segments[i] function restore() { t.replace_segment(i,t.draw_segment(s,i)) } - function done() { - s.source=inp.value // side effect, updating the document in-place + function change(str) { + s.source=str // side effect, updating the document in-place restore(); if(s.options.method!="Manual") { s.options.to="" // hack to force an update @@ -700,9 +713,55 @@ Translator.prototype.edit_source=function(source,i) { } return false; } + function done() { change(inp.value) } + + function goto_minibar() { + function cont(grammar_info) { + var gname=grammar_info.name + var gfrom=gname+doc.options.from + var gto=gname+doc.options.to + var pgf_server=t.servers[grammarname] + function cont2(source) { + function ok() { + unlextext(gf_unlex(minibar.input.current.input),change) + t.hide_filebox() + } + function cancel() { + restore() + t.hide_filebox() + } + var minibar_options= { + startcat_menu: false, + random_button: false, + try_google: false, + show_abstract: true, + show_trees: true, + show_grouped_translations: false, + word_replacements: true, + default_source_language: "Eng", + initial_grammar: pgf_server.current_grammar_url, + initial:{from:gfrom, + startcat:grammar_info.startcat, + input:source.split(" ")}, + initial_toLangs: [gto] + } + replaceChildren(t.filebox,empty_id("div","minibar")) + var minibar=new Minibar(pgf_server,minibar_options) + appendChildren(t.filebox,[button("OK",ok), + button("Cancel",cancel)]) + t.show_filebox() + } + lextext(s.source,cont2) + + } + t.switch_grammar(grammarname,cont) + } var inp=node("input",{name:"it",value:s.source}) - var e=wrap("form",[inp, submit(), button("Cancel",restore)]) + var e=wrap("form",[inp, submit(), button("Cancel",restore), + text(" ")]) + var grammarname=uses_gf(doc,s) + if(grammarname) e.appendChild(button("Minibar",goto_minibar)) clear(source) source.appendChild(e) e.onsubmit=done @@ -930,35 +989,6 @@ for(var i in languages) { function concname(code) { return langname[code] || code; } function alangcode(code) { return langcode2[code] || code; } -function tr_local() { - function real(storage) { - var appPrefix="gf.translator." - return { - get: function (name,def) { - var id=appPrefix+name - return storage[id] ? JSON.parse(storage[id]) : def; - }, - put: function (name,value) { - var id=appPrefix+name; - storage[id]=JSON.stringify(value); - }, - remove: function(name) { - var id=appPrefix+name; - delete storage[id] - }, - ls: function(prefix) { - var pre=appPrefix+prefix - var files=[] - for(var i in storage) - if(hasPrefix(i,pre)) files.push(i.substr(pre.length)) - files.sort() - return files - } - } - } - return supports_html5_storage() ? real(localStorage) : real([]) -} - // Collect alternative texts in the output from PGF service translate command function collect_texts(ts) { var list=[] @@ -1096,6 +1126,10 @@ function save_in_cloud(filename,document,cont) { with_dir(save) } +function unlextext(txt,cont) { gfshell('ps -unlextext "'+txt+'"',cont) } +function lextext(txt,cont) { gfshell('ps -lextext "'+txt+'"',cont) } + + /* --- DOM Support ---------------------------------------------------------- */ |
