summaryrefslogtreecommitdiffstats
path: root/usr/local/www/auto_complete_helper.js
diff options
context:
space:
mode:
Diffstat (limited to 'usr/local/www/auto_complete_helper.js')
-rwxr-xr-xusr/local/www/auto_complete_helper.js290
1 files changed, 290 insertions, 0 deletions
diff --git a/usr/local/www/auto_complete_helper.js b/usr/local/www/auto_complete_helper.js
new file mode 100755
index 0000000..9467ef4
--- /dev/null
+++ b/usr/local/www/auto_complete_helper.js
@@ -0,0 +1,290 @@
+
+/* ---- Variables ---- */
+var actb_timeOut = -1; // Autocomplete Timeout in ms (-1: autocomplete never time out)
+var actb_lim = 4; // Number of elements autocomplete can show (-1: no limit)
+var actb_firstText = false; // should the auto complete be limited to the beginning of keyword?
+/* ---- Variables ---- */
+
+/* --- Styles --- */
+var actb_bgColor = '#888888';
+var actb_textColor = '#FFFFFF';
+var actb_hColor = '#000000';
+var actb_fFamily = 'Courier';
+var actb_fSize = '14px';
+var actb_hStyle = 'text-decoration:underline;font-weight="bold"';
+/* --- Styles --- */
+
+/* ---- Constants ---- */
+var actb_keywords = new Array();
+var actb_display = false;
+var actb_pos = 0;
+var actb_total = 0;
+var actb_curr = null;
+var actb_rangeu = 0;
+var actb_ranged = 0;
+var actb_bool = new Array();
+var actb_pre = 0;
+var actb_toid;
+var actb_tomake = false;
+/* ---- Constants ---- */
+
+function actb_parse(n){
+ var t = escape(actb_curr.value);
+ var tobuild = '';
+ var i;
+
+ if (actb_firstText){
+ var re = new RegExp("^" + t, "i");
+ }else{
+ var re = new RegExp(t, "i");
+ }
+ var p = n.search(re);
+
+ for (i=0;i<p;i++){
+ tobuild += n.substr(i,1);
+ }
+ tobuild += ""
+ for (i=p;i<t.length+p;i++){
+ tobuild += n.substr(i,1);
+ }
+ tobuild += "";
+ for (i=t.length+p;i<n.length;i++){
+ tobuild += n.substr(i,1);
+ }
+ return tobuild;
+}
+function actb_generate(){
+ if (document.getElementById('tat_table')) document.body.removeChild(document.getElementById('tat_table'));
+ a = document.createElement('table');
+ a.cellSpacing='1px';
+ a.cellPadding='2px';
+ a.style.position='absolute';
+ a.style.top = eval(curTop() + actb_curr.offsetHeight) + "px";
+ a.style.left = curLeft() + "px";
+ a.style.backgroundColor=actb_bgColor;
+ a.id = 'tat_table';
+ document.body.appendChild(a);
+ var i;
+ var first = true;
+ var j = 1;
+
+ var counter = 0;
+ for (i=0;i<actb_keywords.length;i++){
+ if (actb_bool[i]){
+ counter++;
+ r = a.insertRow(-1);
+ if (first && !actb_tomake){
+ r.style.backgroundColor = actb_hColor;
+ first = false;
+ actb_pos = counter;
+ }else if(actb_pre == i){
+ r.style.backgroundColor = actb_hColor;
+ first = false;
+ actb_pos = counter;
+ }else{
+ r.style.backgroundColor = actb_bgColor;
+ }
+ r.id = 'tat_tr'+(j);
+ c = r.insertCell(-1);
+ c.style.color = actb_textColor;
+ c.style.fontFamily = actb_fFamily;
+ c.style.fontSize = actb_fSize;
+ c.innerHTML = actb_parse(actb_keywords[i]);
+ c.id = 'tat_td'+(j);
+ j++;
+ }
+ if (j - 1 == actb_lim && j < actb_total){
+ r = a.insertRow(-1);
+ r.style.backgroundColor = actb_bgColor;
+ c = r.insertCell(-1);
+ c.style.color = actb_textColor;
+ c.style.fontFamily = 'arial narrow';
+ c.style.fontSize = actb_fSize;
+ c.align='center';
+ c.innerHTML = '\\/';
+ break;
+ }
+ }
+ actb_rangeu = 1;
+ actb_ranged = j-1;
+ actb_display = true;
+ if (actb_pos <= 0) actb_pos = 1;
+}
+function curTop(){
+ actb_toreturn = 0;
+ obj = actb_curr;
+ while(obj){
+ actb_toreturn += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return actb_toreturn;
+}
+function curLeft(){
+ actb_toreturn = 0;
+ obj = actb_curr;
+ while(obj){
+ actb_toreturn += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return actb_toreturn;
+}
+function actb_remake(){
+ document.body.removeChild(document.getElementById('tat_table'));
+ a = document.createElement('table');
+ a.cellSpacing='2px';
+ a.cellPadding='3px';
+ a.style.position='absolute';
+ a.style.top = eval(curTop() + actb_curr.offsetHeight) + "px";
+ a.style.left = curLeft() + "px";
+ a.style.backgroundColor=actb_bgColor;
+ a.id = 'tat_table';
+ document.body.appendChild(a);
+ var i;
+ var first = true;
+ var j = 1;
+ if (actb_rangeu > 1){
+ r = a.insertRow(-1);
+ r.style.backgroundColor = actb_bgColor;
+ c = r.insertCell(-1);
+ c.style.color = actb_textColor;
+ c.style.fontFamily = 'arial narrow';
+ c.style.fontSize = actb_fSize;
+ c.align='center';
+ c.innerHTML = '/\\';
+ }
+ for (i=0;i<actb_keywords.length;i++){
+ if (actb_bool[i]){
+ if (j >= actb_rangeu && j <= actb_ranged){
+ r = a.insertRow(-1);
+ r.style.backgroundColor = actb_bgColor;
+ r.id = 'tat_tr'+(j);
+ c = r.insertCell(-1);
+ c.style.color = actb_textColor;
+ c.style.fontFamily = actb_fFamily;
+ c.style.fontSize = actb_fSize;
+ c.innerHTML = actb_parse(actb_keywords[i]);
+ c.id = 'tat_td'+(j);
+ j++;
+ }else{
+ j++;
+ }
+ }
+ if (j > actb_ranged) break;
+ }
+ if (j-1 < actb_total){
+ r = a.insertRow(-1);
+ r.style.backgroundColor = actb_bgColor;
+ c = r.insertCell(-1);
+ c.style.color = actb_textColor;
+ c.style.fontFamily = 'arial narrow';
+ c.style.fontSize = actb_fSize;
+ c.align='center';
+ c.innerHTML = '\\/';
+ }
+}
+function actb_goup(){
+ if (!actb_display) return;
+ if (actb_pos == 1) return;
+ document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_bgColor;
+ actb_pos--;
+ if (actb_pos < actb_rangeu) actb_moveup();
+ document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_hColor;
+ if (actb_toid) clearTimeout(actb_toid);
+ if (actb_timeOut > 0) actb_toid = setTimeout("actb_removedisp()",actb_timeOut);
+}
+function actb_godown(){
+ if (!actb_display) return;
+ if (actb_pos == actb_total) return;
+ document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_bgColor;
+ actb_pos++;
+ if (actb_pos > actb_ranged) actb_movedown();
+ document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_hColor;
+ if (actb_toid) clearTimeout(actb_toid);
+ if (actb_timeOut > 0) actb_toid = setTimeout("actb_removedisp()",actb_timeOut);
+}
+function actb_movedown(){
+ actb_rangeu++;
+ actb_ranged++;
+ actb_remake();
+}
+function actb_moveup(){
+ actb_rangeu--;
+ actb_ranged--;
+ actb_remake();
+}
+function actb_penter(){
+ if (!actb_display) return;
+ actb_display = 0;
+ var word = '';
+ var c = 0;
+ for (var i=0;i<=actb_keywords.length;i++){
+ if (actb_bool[i]) c++;
+ if (c == actb_pos){
+ word = actb_keywords[i];
+ break;
+ }
+ }
+ a = word;//actb_keywords[actb_pos-1];//document.getElementById('tat_td'+actb_pos).;
+ actb_curr.value = a;
+ actb_removedisp();
+}
+function actb_removedisp(){
+ actb_display = 0;
+ if (document.getElementById('tat_table')) document.body.removeChild(document.getElementById('tat_table'));
+ if (actb_toid) clearTimeout(actb_toid);
+}
+function actb_checkkey(evt){
+ a = evt.keyCode;
+ if (a == 38){ // up key
+ actb_goup();
+ }else if(a == 40){ // down key
+ actb_godown();
+ }else if(a == 13){
+ actb_penter();
+ }
+}
+function actb_tocomplete(sndr,evt,arr){
+ if (arr) actb_keywords = arr;
+ if (evt.keyCode == 38 || evt.keyCode == 40 || evt.keyCode == 13) return;
+ var i;
+ if (actb_display){
+ var word = 0;
+ var c = 0;
+ for (var i=0;i<=actb_keywords.length;i++){
+ if (actb_bool[i]) c++;
+ if (c == actb_pos){
+ word = i;
+ break;
+ }
+ }
+ actb_pre = word;//actb_pos;
+ }else{ actb_pre = -1};
+
+ if (!sndr) var sndr = evt.srcElement;
+ actb_curr = sndr;
+
+ if (sndr.value == ''){
+ actb_removedisp();
+ return;
+ }
+ var t = sndr.value;
+ if (actb_firstText){
+ var re = new RegExp("^" + t, "i");
+ }else{
+ var re = new RegExp(t, "i");
+ }
+
+ actb_total = 0;
+ actb_tomake = false;
+ for (i=0;i<actb_keywords.length;i++){
+ actb_bool[i] = false;
+ if (re.test(actb_keywords[i])){
+ actb_total++;
+ actb_bool[i] = true;
+ if (actb_pre == i) actb_tomake = true;
+ }
+ }
+ if (actb_toid) clearTimeout(actb_toid);
+ if (actb_timeOut > 0) actb_toid = setTimeout("actb_removedisp()",actb_timeOut);
+ actb_generate(actb_bool);
+}
OpenPOWER on IntegriCloud