summaryrefslogtreecommitdiff
path: root/src/runtime/javascript/minibar/minibar_translations.js
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2011-08-08 17:28:24 +0000
committerhallgren <hallgren@chalmers.se>2011-08-08 17:28:24 +0000
commitd4638f54bad7523907ebb6502af48470351d8f9e (patch)
tree81cbdcb6a951e18eb8f39f62c6b06419595234c3 /src/runtime/javascript/minibar/minibar_translations.js
parente50731c5111cc4a4addbdb157de2d73001976c2d (diff)
minibar: refactoring for improved modularity
Two smaller objects have been factored out from the Minibar object: Input and Translations. These have been placed in two separate files: minibar_input.js and minibar_translations.js. Some common auxiliary functions have also been moved to a separate file: minibar_support.js
Diffstat (limited to 'src/runtime/javascript/minibar/minibar_translations.js')
-rw-r--r--src/runtime/javascript/minibar/minibar_translations.js127
1 files changed, 127 insertions, 0 deletions
diff --git a/src/runtime/javascript/minibar/minibar_translations.js b/src/runtime/javascript/minibar/minibar_translations.js
new file mode 100644
index 000000000..bccbada67
--- /dev/null
+++ b/src/runtime/javascript/minibar/minibar_translations.js
@@ -0,0 +1,127 @@
+/* --- Translations object -------------------------------------------------- */
+
+function Translations(server,options) {
+ this.server=server;
+ this.options=options;
+
+ this.main=empty("div");
+ this.menus=empty("span");
+
+ this.to_menu=empty_id("select","to_menu");
+
+ appendChildren(this.menus,[text(" To: "), this.to_menu])
+ this.to_menu.onchange=bind(this.get_translations,this);
+
+}
+
+Translations.prototype.change_grammar=function(grammar) {
+ this.grammar=grammar;
+
+ update_language_menu(this.to_menu,grammar);
+ insertFirst(this.to_menu,option("All","All"));
+ this.to_menu.value="All";
+}
+
+Translations.prototype.clear=function() {
+ this.main.innerHTML="";
+}
+
+Translations.prototype.translateFrom=function(current) {
+ this.current=current;
+ this.get_translations();
+}
+
+Translations.prototype.get_translations=function() {
+ with(this) {
+ var c=current;
+ if(options.show_grouped_translations)
+ server.translategroup({from:c.from,input:c.input},
+ bind(show_groupedtranslations,this));
+ else
+ server.translate({from:c.from,input:c.input},
+ bind(show_translations,this));
+ }
+}
+
+Translations.prototype.tdt=function(tree_btn,txt) {
+ with(this) {
+ return options.show_trees ? tda([tree_btn,txt]) : td(txt);
+ }
+}
+
+Translations.prototype.target_lang=function() {
+ with(this) return langpart(to_menu.value,grammar.name);
+}
+
+Translations.prototype.show_translations=function(translationResults) {
+ with(this) {
+ var trans=main;
+ //var to=target_lang(); // wrong
+ var to=to_menu.value;
+ var cnt=translationResults.length;
+ //trans.translations=translations;
+ trans.single_translation=[];
+ trans.innerHTML="";
+ /*
+ trans.appendChild(wrap("h3",text(cnt<1 ? "No translations?" :
+ cnt>1 ? ""+cnt+" translations:":
+ "One translation:")));
+ */
+ for(p=0;p<cnt;p++) {
+ var tra=translationResults[p];
+ if (tra.translations != null) {
+ for (q = 0; q < tra.translations.length; q++) {
+ var t = tra.translations[q];
+ var lin=t.linearizations;
+ var tbody=empty("tbody");
+ if(options.show_abstract && t.tree)
+ tbody.appendChild(
+ tr([th(text("Abstract: ")),
+ tdt(node("span",{},[abstree_button(t.tree),
+ alignment_button(t.tree)]),
+ text(" "+t.tree))]));
+ for(var i=0;i<lin.length;i++) {
+ if(lin[i].to==to)
+ trans.single_translation.push(lin[i].text);
+ if(to=="All" || lin[i].to==to)
+ tbody.appendChild(tr([th(text(langpart(lin[i].to,grammar.name)+": ")),
+ tdt(parsetree_button(t.tree,lin[i].to),
+ text(lin[i].text))]));
+ }
+ trans.appendChild(wrap("table",tbody));
+ }
+ }
+ else if(tra.typeErrors) {
+ var errs=tra.typeErrors;
+ for(var i=0;i<errs.length;i++)
+ trans.appendChild(wrap("pre",text(errs[i].msg)))
+ }
+ }
+ }
+}
+
+Translations.prototype.show_groupedtranslations=function(translationsResult) {
+ with(this) {
+ var trans=main;
+ var to=target_lang();
+ //var to=to_menu.value // wrong
+ var cnt=translationsResult.length;
+ //trans.translations=translationsResult;
+ trans.single_translation=[];
+ trans.innerHTML="";
+ for(p=0;p<cnt;p++) {
+ var t=translationsResult[p];
+ if(to=="All" || t.to==to) {
+ var lin=t.linearizations;
+ var tbody=empty("tbody");
+ if(to=="All") tbody.appendChild(tr([th(text(t.to+":"))]));
+ for(var i=0;i<lin.length;i++) {
+ if(to!="All") trans.single_translation[i]=lin[i].text;
+ tbody.appendChild(tr([td(text(lin[i].text))]));
+ if (lin.length > 1) tbody.appendChild(tr([td(text(lin[i].tree))]));
+ }
+ trans.appendChild(wrap("table",tbody));
+ }
+ }
+ }
+}