diff --git a/src/www/gfse/index.html b/src/www/gfse/index.html
index c607b4374..cfa89762d 100644
--- a/src/www/gfse/index.html
+++ b/src/www/gfse/index.html
@@ -33,12 +33,13 @@ This page does not work without JavaScript.
HTML
-Last modified: Tue Nov 20 13:39:47 CET 2012
+Last modified: Wed Apr 3 20:30:24 CEST 2013
About
+
diff --git a/src/www/gfse/localstorage.js b/src/www/gfse/localstorage.js
index 162b1db3b..11ae0973c 100644
--- a/src/www/gfse/localstorage.js
+++ b/src/www/gfse/localstorage.js
@@ -1,29 +1,4 @@
-// Grammars are stored locally in the browser using localStorage.
-// See http://diveintohtml5.info/storage.html
+//Needs ../js/localstorage.js
-function supports_html5_storage() {
- try {
- return 'localStorage' in window && window['localStorage'] !== null;
- } catch (e) {
- return false;
- }
-}
-
-var local={
- prefix:"gf.editor.simple.grammar",
- get: function (name,def) {
- var id=this.prefix+name
- return localStorage[id] ? JSON.parse(localStorage[id]) : def;
- },
- put: function (name,value) {
- var id=this.prefix+name;
- localStorage[id]=JSON.stringify(value);
- },
- remove: function(name) {
- var id=this.prefix+name;
- localStorage.removeItem(id);
- },
- get count() { return this.get("count",0); },
- set count(v) { this.put("count",v); }
-}
+var local=appLocalStorage("gf.editor.simple.grammar")
diff --git a/src/www/gfse/share.html b/src/www/gfse/share.html
index ff92d2f73..9a5c0bb7c 100644
--- a/src/www/gfse/share.html
+++ b/src/www/gfse/share.html
@@ -13,8 +13,9 @@
-Last modified: Tue Nov 20 13:39:57 CET 2012
+Last modified: Wed Apr 3 21:53:09 CEST 2013
+
diff --git a/src/www/minibar/minibar.html b/src/www/minibar/minibar.html
index c729561cd..8c193bd07 100644
--- a/src/www/minibar/minibar.html
+++ b/src/www/minibar/minibar.html
@@ -27,12 +27,13 @@
& Translator]
-HTML Last modified: Fri Nov 23 16:07:35 CET 2012
+HTML Last modified: Wed Apr 3 18:48:06 CEST 2013
+
diff --git a/src/www/minibar/minibar_input.js b/src/www/minibar/minibar_input.js
index e2566da7d..be58530e7 100644
--- a/src/www/minibar/minibar_input.js
+++ b/src/www/minibar/minibar_input.js
@@ -40,7 +40,7 @@ function Input(server,translations,opts) { // Input object constructor
var o=options;
if(o.initial_grammar && o.initial && o.initial.from && o.initial.input)
- t.set_input_for(o.initial_grammar,o.initial.from,o.initial.input)
+ t.set_input_for(o.initial_grammar,o.initial)
}
/* --- Input client state initialization --- */
@@ -89,11 +89,12 @@ Input.prototype.change_language=function () {
this.add_words(new_input)
}
-Input.prototype.set_input_for=function(grammar_url,from,new_input) {
+Input.prototype.set_input_for=function(grammar_url,initial) {
var t=this
var local=mi_local(grammar_url)
- local.put("from",from)
- local.put("current",{from:from,input:new_input})
+ local.put("from",initial.from)
+ local.put("current",{from:initial.from,input:initial.input})
+ if(initial.startcat) local.put("startcat",initial.startcat)
}
Input.prototype.clear_all2=function() {
@@ -484,26 +485,7 @@ Input.prototype.browse=function(id,cont) {
function mi_local(grammar_url) {
- function dummy() {
- return {
- get: function(name,def) { return def },
- put: function(name,value) { }
- }
- }
- function real() {
- var prefix="gf.minibar_input."+grammar_url+"."
- return {
- get: function (name,def) {
- var id=prefix+name
- return localStorage[id] ? JSON.parse(localStorage[id]) : def;
- },
- put: function (name,value) {
- var id=prefix+name;
- localStorage[id]=JSON.stringify(value);
- }
- }
- }
- return window.localStorage ? real() : dummy()
+ return appLocalStorage("gf.minibar_input."+grammar_url+".")
}
diff --git a/src/www/minibar/minibar_translations.js b/src/www/minibar/minibar_translations.js
index ffb21972f..ead0f592d 100644
--- a/src/www/minibar/minibar_translations.js
+++ b/src/www/minibar/minibar_translations.js
@@ -28,6 +28,11 @@ function Translations(server,opts) {
var tom=this.to_menu=node("select",{id:"to_menu",multiple:"",size:5},[]);
appendChildren(this.menus,[text(" To: "), this.to_menu])
tom.onchange=bind(this.change_language,this);
+ var o=this.options
+ if(o.initial_grammar && o.initial_toLangs) {
+ var local=mt_local(o.initial_grammar);
+ local.put("toLangs",o.initial_toLangs)
+ }
/* // This seems triggers weird scrolling behavior in Firefox and Chrome:
tom.onmouseover=function() { var n=tom.options.length;
tom.size=n<12 ? n : 12; }
@@ -39,8 +44,9 @@ function Translations(server,opts) {
Translations.prototype.change_grammar=function(grammar) {
var t=this
t.grammar=grammar;
-
+
t.local=mt_local(t.server.current_grammar_url)
+
update_language_menu(t.to_menu,grammar);
insertFirst(t.to_menu,option("All","All"));
t.to_menu.value="All";
@@ -263,6 +269,10 @@ Translations.prototype.parsetree_button=function(abs,lang) {
/* --- Auxiliary functions -------------------------------------------------- */
+function mt_local(grammar_url) {
+ return appLocalStorage("gf.minibar_translations."+grammar_url+".")
+}
+
function tree_button(img_url,opt) {
var imgs=[tree_icon,img_url+(opt||"&nofun=true"),img_url]
var current=0;
@@ -283,31 +293,6 @@ function draw_brackets(b) {
b.children.map(draw_brackets))
}
-
-// Access to localStorage, if available
-function mt_local(grammar_url) {
- function dummy() {
- return {
- get: function(name,def) { return def },
- put: function(name,value) { }
- }
- }
- function real() {
- var prefix="gf.minibar_translations."+grammar_url+"."
- return {
- get: function (name,def) {
- var id=prefix+name
- return localStorage[id] ? JSON.parse(localStorage[id]) : def;
- },
- put: function (name,value) {
- var id=prefix+name;
- localStorage[id]=JSON.stringify(value);
- }
- }
- }
- return window.localStorage ? real() : dummy()
-}
-
// Convert an array of strings to a set (for quick & easy membership tests)
function toSet(a) {
var set={}
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 @@
Simple Translation Tool
+
@@ -75,15 +76,23 @@
HMTL
-Last modified: Mon Feb 11 16:09:58 CET 2013
+Last modified: Wed Apr 3 20:29:44 CEST 2013
About
-
+
+
+
+
+
+
+
+
+
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 ---------------------------------------------------------- */