summaryrefslogtreecommitdiff
path: root/src/www/syntax-editor/editor_menu.js
diff options
context:
space:
mode:
authorjohn.j.camilleri <john.j.camilleri@chalmers.se>2012-11-21 11:22:35 +0000
committerjohn.j.camilleri <john.j.camilleri@chalmers.se>2012-11-21 11:22:35 +0000
commit051b7b0d21ad8ac1fe42dfd09cd773b48b8fd8ea (patch)
treeebec3f36d657b73844925b2a638348fd45c2acf2 /src/www/syntax-editor/editor_menu.js
parent0f59b25d8a311d513387a6eb7772613a3d19e0a8 (diff)
Syntax editor: start with initial grammar, startcat, to: languages
Diffstat (limited to 'src/www/syntax-editor/editor_menu.js')
-rw-r--r--src/www/syntax-editor/editor_menu.js120
1 files changed, 63 insertions, 57 deletions
diff --git a/src/www/syntax-editor/editor_menu.js b/src/www/syntax-editor/editor_menu.js
index ded47f54e..e8d39ae37 100644
--- a/src/www/syntax-editor/editor_menu.js
+++ b/src/www/syntax-editor/editor_menu.js
@@ -14,8 +14,9 @@ function EditorMenu(editor,opts) {
/* --- Creating UI components ------------------------------------------- */
this.container = editor.ui.menubar;
this.ui = {
+ grammar_menu: empty_id("select","grammar_menu"),
startcat_menu: empty("select"),
- to_toggle: button("...", function(){
+ to_toggle: button("Languages...", function(){
var sel = t.ui.to_menu;
if (sel.classList.contains("hidden"))
sel.classList.remove("hidden")
@@ -35,12 +36,22 @@ function EditorMenu(editor,opts) {
}),
};
with(this.ui) {
- appendChildren(this.container, [text(" Startcat: "),startcat_menu]);
- appendChildren(this.container, [text(" To: "), to_toggle, to_menu]);
- appendChildren(this.container, [clear_button, random_button]);
- // appendChildren(this.container, [clear_button]);
- startcat_menu.onchange=bind(this.change_startcat,this);
- to_menu.onchange=bind(this.change_language,this);
+ if (this.options.show.grammar_menu) {
+ appendChildren(this.container, [text(" Grammar: "), grammar_menu]);
+ grammar_menu.onchange = bind(this.change_grammar,this);
+ }
+ if (this.options.show.startcat_menu) {
+ appendChildren(this.container, [text(" Startcat: "), startcat_menu]);
+ startcat_menu.onchange = bind(this.change_startcat,this);
+ }
+ if (this.options.show.to_menu) {
+ appendChildren(this.container, [text(" To: "), to_toggle, to_menu]);
+ to_menu.onchange = bind(this.change_language,this);
+ }
+ appendChildren(this.container, [clear_button]);
+ if (this.options.show.random_button) {
+ appendChildren(this.container, [random_button]);
+ }
}
/* --- Client state initialisation -------------------------------------- */
@@ -53,12 +64,14 @@ function EditorMenu(editor,opts) {
}
}
+/* --- Grammar menu --------------------------------------------------------- */
+
+// Basically called once, when initializing
// Copied from minibar.js
EditorMenu.prototype.show_grammarlist=function(dir,grammar_names,dir_count) {
var t=this;
- var first_time= !t.grammar_menu
+ var first_time=t.ui.grammar_menu.options.length == 0;
if(first_time) {
- t.grammar_menu=empty_id("select","grammar_menu");
t.grammars=[];
t.grammar_dirs=[];
}
@@ -70,29 +83,12 @@ EditorMenu.prototype.show_grammarlist=function(dir,grammar_names,dir_count) {
}
function opt(g) { return option(glabel(g),dir+g); }
appendChildren(grammar_menu,map(opt,grammar_names));
- function pick() {
- var grammar_url=grammar_menu.value
- if(window.localStorage)
- localStorage["gf.minibar.last_grammar"]=grammar_url;
- t.select_grammar(grammar_url);
- }
function pick_first_grammar() {
if(t.timeout) clearTimeout(t.timeout),t.timeout=null;
- if(t.grammar_menu.length>1 && !t.grammar_menu.parentElement) {
- t.grammar_menu.onchange=pick;
-// insertFirst(t.menubar,button("i",bind(t.show_grammarinfo,t)))
- insertFirst(t.container,t.grammar_menu);
- insertFirst(t.container,text("Grammar: "));
- }
- var grammar0=t.options.initial_grammar
- if(!grammar0 && window.localStorage) {
- var last_grammar=localStorage["gf.minibar.last_grammar"];
- if(last_grammar && elem(last_grammar,t.grammars))
- grammar0=last_grammar;
- }
+ var grammar0=t.options.initial.grammar;
if(!grammar0) grammar0=t.grammars[0];
- t.grammar_menu.value=grammar0;
- t.select_grammar(grammar0);
+ t.ui.grammar_menu.value=grammar0;
+ t.change_grammar();
}
// Wait at most 1.5s before showing the grammar menu.
if(first_time) t.timeout=setTimeout(pick_first_grammar,1500);
@@ -101,9 +97,9 @@ EditorMenu.prototype.show_grammarlist=function(dir,grammar_names,dir_count) {
}
// Copied from minibar.js
-EditorMenu.prototype.select_grammar=function(grammar_url) {
+EditorMenu.prototype.change_grammar=function() {
var t=this;
- //debug("select_grammar ");
+ var grammar_url = t.ui.grammar_menu.value;
t.server.switch_to_other_grammar(grammar_url, function() {
t.server.grammar_info(function(grammar){
t.update_language_menu(t.ui.to_menu, grammar);
@@ -115,59 +111,69 @@ EditorMenu.prototype.select_grammar=function(grammar_url) {
});
}
+/* --- Start category menu -------------------------------------------------- */
+
+// Called each time the current grammar is changed!
// Copied from minibar_input.js
EditorMenu.prototype.update_startcat_menu=function(grammar) {
+ var t=this;
var menu=this.ui.startcat_menu;
menu.innerHTML="";
var cats=grammar.categories;
for(var cat in cats) menu.appendChild(option(cats[cat],cats[cat]))
// var startcat=this.local.get("startcat") || grammar.startcat;
- var startcat= grammar.startcat;
- if(startcat) menu.value=startcat;
- else {
- insertFirst(menu,option("Default",""));
- menu.value="";
- }
+ var startcat0 = t.options.initial.startcat;
+ if (elem(startcat0, cats))
+ menu.value = startcat0;
+ else
+ menu.value = grammar.startcat;
+ // else {
+ // insertFirst(menu,option("Default",""));
+ // menu.value="";
+ // }
}
//
-EditorMenu.prototype.change_startcat=function () {
+EditorMenu.prototype.change_startcat=function() {
var new_startcat = this.ui.startcat_menu.value;
this.editor.change_startcat(new_startcat);
}
-//
-EditorMenu.prototype.change_language=function () {
- this.editor.languages = new Array();
- for (i in this.ui.to_menu.options) {
- var opt = this.ui.to_menu.options[i];
- if (opt.selected)
- this.editor.languages.push(opt.value);
- }
- this.editor.update_linearisation();
-}
+/* --- Langugage (to) menu -------------------------------------------------- */
+// Called each time the current grammar is changed!
// Copied from minibar_support.js
EditorMenu.prototype.update_language_menu=function(menu,grammar) {
-
+ var t = this;
function langpart(conc,abs) { // langpart("FoodsEng","Foods") == "Eng"
return hasPrefix(conc,abs) ? conc.substr(abs.length) : conc;
}
-
// Replace the options in the menu with the languages in the grammar
- var lang=grammar.languages;
+ var langs=grammar.languages;
menu.innerHTML="";
- for(var i=0; i<lang.length; i++) {
- var ln=lang[i].name;
+ for(var i=0; i<langs.length; i++) {
+ var ln=langs[i].name;
if(!hasPrefix(ln,"Disamb")) {
var lp=langpart(ln,grammar.name);
- menu.appendChild(option(lp,ln));
+ var opt=option(lp,ln);
+ if (elem(lp, t.options.initial.languages)) {
+ opt.selected=true;
+ t.editor.languages.push(opt.value);
+ }
+ menu.appendChild(opt);
}
}
- // insertFirst(menu,option("All","All"));
- // menu.value="All";
}
-
+//
+EditorMenu.prototype.change_language=function() {
+ this.editor.languages = new Array();
+ for (i in this.ui.to_menu.options) {
+ var opt = this.ui.to_menu.options[i];
+ if (opt.selected)
+ this.editor.languages.push(opt.value);
+ }
+ this.editor.update_linearisation();
+}