summaryrefslogtreecommitdiff
path: root/src/runtime/javascript/minibar/minibar_input.js
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2011-10-12 17:03:54 +0000
committerhallgren <hallgren@chalmers.se>2011-10-12 17:03:54 +0000
commit44d1a5a9f71b03d9aceeccd760a63fcdc45f8bad (patch)
treed51076a708997d6f1af6ac0deefd535bbc25f804 /src/runtime/javascript/minibar/minibar_input.js
parent0aba45560d2033c37c3d2e876e6f3ef89e1554d6 (diff)
Improvements of "gf -server" mode and related setup
"gf -server" mode now contains everything needed to run the minibar and the grammar editor (including example-based grammar writing). The Setup.hs script installs the required files where gf -server can find them. These files have been moved to a new directory: src/www. The separate server program pgf-http is now obsolete.
Diffstat (limited to 'src/runtime/javascript/minibar/minibar_input.js')
-rw-r--r--src/runtime/javascript/minibar/minibar_input.js277
1 files changed, 0 insertions, 277 deletions
diff --git a/src/runtime/javascript/minibar/minibar_input.js b/src/runtime/javascript/minibar/minibar_input.js
deleted file mode 100644
index 8075eb8ea..000000000
--- a/src/runtime/javascript/minibar/minibar_input.js
+++ /dev/null
@@ -1,277 +0,0 @@
-
-/* --- Input object --------------------------------------------------------- */
-
-function Input(server,translations,opts) { // Input object constructor
- this.server=server;
- this.translations=translations;
-
- // Default values for options:
- this.options={
- delete_button_text: "⌫",
- default_source_language: null,
- random_button: true,
- }
-
- // Apply supplied options
- if(opts) for(var o in opts) this.options[o]=opts[o];
-
- // User interface elements
- this.main=empty("div");
- this.menus=empty("span");
- this.buttons=empty("span");
- this.surface=div_id("surface");
- this.words=div_id("words");
- this.from_menu=empty("select");
-
- with(this) {
- appendChildren(main,[surface,words]);
- appendChildren(menus,[text(" From: "),from_menu])
- appendChildren(buttons,
- [button(options.delete_button_text,bind(delete_last,this),"H"),
- button("Clear",bind(clear_all,this),"L")]);
- if(options.random_button)
- buttons.appendChild(button("Random",bind(generate_random,this),"R"));
- }
-
- /* --- Input client state initialization --- */
- this.current={from: null, input: ""};
- this.previous=null;
-
- this.from_menu.onchange=bind(this.change_language,this);
-}
-
-Input.prototype.change_grammar=function (grammar) {
- update_language_menu(this.from_menu,grammar);
- set_initial_language(this.options,this.from_menu,grammar);
- this.change_language();
-}
-
-Input.prototype.change_language=function () {
- this.current.from=this.from_menu.value;
- this.clear_all();
-}
-
-
-Input.prototype.clear_all1=function() {
- with(this) {
- remove_typed_input();
- current.input="";
- previous=null;
- surface.innerHTML="";
- translations.clear();
- }
-}
-
-Input.prototype.clear_all=function() {
- with(this) {
- clear_all1();
- get_completions();
- }
-}
-
-Input.prototype.get_completions=function() {
- with(this) {
- //debug("get_completions ");
- words.innerHTML="...";
- server.complete({from:current.from,input:current.input},
- bind(show_completions,this));
- }
-}
-
-Input.prototype.show_completions=function(complete_output) {
- with(this) {
- //debug("show_completions ");
- var completions=complete_output[0].completions;
- var emptycnt=add_completions(completions)
- if(true/*emptycnt>0*/) translations.translateFrom(current);
- else translations.clear();
- if(surface.typed && emptycnt==completions.length) {
- if(surface.typed.value=="") remove_typed_input();
- }
- else add_typed_input();
- }
-}
-
-Input.prototype.add_completions=function(completions) {
- with(this) {
- if(words.timeout) clearTimeout(words.timeout),words.timeout=null;
- words.innerHTML="";
- words.completions=completions;
- words.word=[];
- var t=surface.typed ? surface.typed.value : "";
- var emptycnt=0;
- for(var i=0;i<completions.length;i++) {
- var s=completions[i];
- if(s.length>0) {
- var w=word(s);
- words.appendChild(w);
- words.word[i]=w;
- }
- else emptycnt++;
- }
- filter_completions(t,true);
- return emptycnt;
- }
-}
-
-Input.prototype.filter_completions=function(t,dim) {
- with(this) {
- if(words.timeout) clearTimeout(words.timeout),words.timeout=null;
- words.filtered=t;
- //if(dim) debug('filter "'+t+'"');
- var w=words.word;
- words.count=0;
- var dimmed=0;
- var prefix=""; // longest common prefix, for completion
- for(var i=0;i<w.length;i++) {
- var s=words.completions[i];
- var keep=hasPrefix(s,t);
- if(keep) {
- if(words.count==0) prefix=s;
- else prefix=(commonPrefix(prefix,s));
- words.count++;
- }
- if(dim) {
- w[i].style.opacity= keep ? "1" : "0.5";
- if(keep) w[i].style.display="inline";
- else dimmed++;
- }
- else
- w[i].style.display=keep ? "inline" : "none";
- }
- words.theword=prefix;
- if(dimmed>0)
- words.timeout=setTimeout(function(){ filter_completions(t,false)},1000);
- }
-}
-
-
-Input.prototype.add_typed_input=function() {
- with(this) {
- if(!surface.typed) {
- var inp=empty("input","type","text");
- inp.value="";
- inp.setAttribute("accesskey","t");
- inp.style.width="10em";
- inp.onkeyup=bind(complete_typed,this);
- surface.appendChild(inp);
- surface.typed=inp;
- inp.focus();
- }
- }
-}
-
-Input.prototype.remove_typed_input=function() {
- with(this) {
- if(surface.typed) {
- surface.typed.parentNode.removeChild(surface.typed);
- surface.typed=null;
- }
- }
-}
-
-Input.prototype.complete_typed=function(event) {
- with(this) {
- //element("debug").innerHTML=show_props(event,"event");
- var inp=surface.typed;
- //debug('"'+inp.value+'"');
- var s=inp.value;
- var ws=s.split(" ");
- if(ws.length>1 || event.keyCode==13) {
- if(ws[0]!=words.filtered) filter_completions(ws[0],true);
- if(words.count==1) add_word(words.theword);
- else if(event.keyCode==13) add_word(ws[0]) // for literals
- else if(elem(ws[0],words.completions)) add_word(ws[0]);
- else if(words.theword.length>ws[0].length) inp.value=words.theword;
- }
- else if(s!=words.filtered) filter_completions(s,true)
- }
-}
-
-Input.prototype.generate_random=function() {
- var t=this;
- function show_random(random) {
- t.clear_all1();
- t.add_words(random[0].text);
- }
-
- function lin_random(abs) {
- t.server.linearize({tree:abs[0].tree,to:t.current.from},show_random);
- }
- t.server.get_random({},lin_random);
-}
-
-Input.prototype.add_words=function(s) {
- with(this) {
- var ws=s.split(" ");
- for(var i=0;i<ws.length;i++)
- add_word1(ws[i]+" ");
- get_completions();
- }
-}
-
-Input.prototype.word=function(s) {
- var t=this;
- function click_word() {
- if(t.surface.typed) t.surface.typed.value="";
- t.add_word(s);
- }
- return button(s,click_word);
-}
-
-Input.prototype.add_word=function(s) {
- with(this) {
- add_word1(s+" ");
- if(surface.typed) {
- var s2;
- if(hasPrefix(s2=surface.typed.value,s)) {
- s2=s2.substr(s.length);
- while(s2.length>0 && s2[0]==" ") s2=s2.substr(1);
- surface.typed.value=s2;
- }
- else surface.typed.value="";
- }
- get_completions();
- }
-}
-
-Input.prototype.add_word1=function(s) {
- with(this) {
- previous={ input: current.input, previous: previous };
- current.input+=s;
- var w=span_class("word",text(s));
- if(surface.typed) surface.insertBefore(w,surface.typed);
- else surface.appendChild(w);
- }
-}
-
-Input.prototype.delete_last=function() {
- with(this) {
- if(surface.typed && surface.typed.value!="")
- surface.typed.value="";
- else if(previous) {
- current.input=previous.input;
- previous=previous.previous;
- if(surface.typed) {
- surface.removeChild(surface.typed.previousSibling);
- surface.typed.focus();
- }
- else surface.removeChild(surface.lastChild);
- translations.clear();
- get_completions();
- }
- }
-}
-
-/* --- Auxiliary functions -------------------------------------------------- */
-
-function set_initial_language(options,menu,grammar) {
- if(grammar.userLanguage) menu.value=grammar.userLanguage;
- else if(options.default_source_language) {
- for(var i=0;i<menu.options.length;i++) {
- var o=menu.options[i].value;
- var l=langpart(o,grammar.name);
- if(l==options.default_source_language) menu.value=o;
- }
- }
-}