From 0004b53d41de75563d76342c5403aa101b8a4518 Mon Sep 17 00:00:00 2001 From: Janusz Dobrowolski Date: Fri, 6 Jun 2008 22:25:41 +0000 Subject: [PATCH] Javascript changes related to ui_lists.inc --- js/inserts.js | 258 ++++++++++++++++++++++---------------------------- js/utils.js | 84 ++++++++++------ 2 files changed, 172 insertions(+), 170 deletions(-) diff --git a/js/inserts.js b/js/inserts.js index c3ff6e1f..c6c047f7 100644 --- a/js/inserts.js +++ b/js/inserts.js @@ -1,3 +1,6 @@ + +var _focus; + function debug(msg) { document.getElementById('msgbox').innerHTML= document.getElementById('msgbox').innerHTML+'
'+msg @@ -9,6 +12,16 @@ function progbar(container) { user.loadtxt+""; } +function save_focus(e) { +// document.getElementsByName('_focus')[0].value = e.name; + _focus = e.name||e.id; + var h = document.getElementById('hints'); + if (h) { + h.style.display = e.title && e.title.length ? 'inline' : 'none'; + h.innerHTML = e.title ? e.title : ''; + } +} + function _expand(tabobj) { var ul = tabobj.parentNode.parentNode; @@ -31,21 +44,20 @@ function expandtab(tabcontentid, tabnumber) { } function _set_combo_input(e) { -// e.onkeydown=function(event) { - e.onblur=function(event) { - event = event||window.event; - if(!this.back) { + e.onblur=function() { +// if(!this.back) { var but_name = this.name.substring(0, this.name.length-4)+'button'; var button = document.getElementsByName(but_name)[0]; var select = document.getElementsByName(this.getAttribute('rel'))[0]; - var byid = this.className=='combo'; + save_focus(select); +// this.style.display='none'; if(button) { // if *_button set submit search request JsHttpRequest.request(but_name); } return false; - } - }; - e.onkeyup = function() { +// } + }; + e.onkeyup = function(ev) { var select = document.getElementsByName(this.getAttribute('rel'))[0]; if(select && select.selectedIndex>=0) { var len = select.length; @@ -61,140 +73,125 @@ function _set_combo_input(e) { } } }; - e.onkeydown = function(ev) { -// this.lastkey = event.keyCode; - this.back = (ev||window.event).shiftKey; // save shift state for onblur handler + e.onkeydown = function(ev) { + ev = ev||window.event; + key = ev.keyCode||ev.which; + if(key == 13) { + this.blur(); + return false; + } +// this.back = ev.shiftKey; // save shift state for onblur handler } } -function _set_combo_select(e) { +function _update_box(s) { + var byid = s.className=='combo'; + var rel = s.getAttribute('rel'); + var box = document.getElementsByName(rel)[0]; + if(box && s.selectedIndex>=0) { + var opt = s.options[s.selectedIndex]; + if (opt.value != 0) { + if(box) box.value = byid ? opt.value : opt.text; + } + } +} - e.onblur = function(event) { - event = event||window.event; - if(!this.back && this.selectedIndex>=0) { - var sname = '_'+this.name+'_update'; - var box = document.getElementsByName(this.getAttribute('rel'))[0]; - var opt = this.options[this.selectedIndex]; - var byid = this.className=='combo'; - var update = document.getElementsByName(sname)[0]; - if (opt.value != 0) { - if(box) box.value = byid ? opt.value : opt.text; - if(update) { - if(update.className == 'combo_select') { - document.getElementsByName('_focus')[0].value=this.name; +function _set_combo_select(e) { + e.onchange = function() { + var s = this; + + if(s.className=='combo') + _update_box(s); + if(s.selectedIndex>=0) { + var sname = '_'+s.name+'_update'; + var update = document.getElementsByName(sname)[0]; + if(update) { JsHttpRequest.request(sname); - } else { - update.click(); - this.focus(); - } - } - } - this.size = 1; + } } - return true; + return true; } - e.onchange = function() { - if (this.options[this.selectedIndex].value==0) - document.getElementsByName(this.getAttribute('rel'))[0].value=''; - } -/* e.onkeydown = function(event) { - event = event||window.event; - if(event.keyCode==13) { - var box = document.getElementsByName(this.getAttribute('rel'))[0]; - this.style.display='none'; - box.style.display=''; - this.back=true; - box.focus(); - } +// e.onblur = function() { +// if (this.className == 'combo') +// _update_box(this); +// }, + e.onkeydown = function(event) { + event = event||window.event; +// this.back = event.shiftKey; // save shift state for onblur handler + key = event.keyCode||event.which; + var box = document.getElementsByName(this.getAttribute('rel'))[0]; + if (box && key == 32 && this.className == 'combo2') { + this.style.display = 'none'; + box.style.display = 'inline'; + box.value=''; + // Konq does not like short syntax for nonstd attr +// this.setAttribute('back', 'true'); +// this.back=true; + setFocus(box.name); + return false; + } } -*/} +} /* Behaviour definitions */ var inserts = { - '.amount': function(element) { - if(element.onblur==undefined) { - var dec = element.getAttribute("dec"); - element.onblur = function() { + 'input': function(e) { + if(e.onfocus==undefined) { + e.onfocus = function() { + save_focus(this); + }; + } + if (e.className == 'combo' || e.className == 'combo2') { + _set_combo_input(e); + } + }, + 'input.combo_submit,input.combo_select,input.combo2': + function(e) { + // this hides search button for js enabled browsers + e.style.display = 'none'; + }, + 'input.ajaxsubmit,input.editbutton,input.navibutton': + function(e) { + e.onclick = function() { + JsHttpRequest.request(this.name); + return false; + } + }, + '.amount': function(e) { + if(e.onblur==undefined) { + var dec = e.getAttribute("dec"); + e.onblur = function() { price_format(this.name, get_amount(this.name), dec); }; } }, - 'select': function(element) { - if(element.onfocus==undefined) { - element.onfocus = function() { - document.getElementsByName('_focus')[0].value = element.name; + 'select': function(e) { + if(e.onfocus==undefined) { + e.onfocus = function() { + save_focus(this); }; - element.onkeydown = function(event) { + e.onkeydown = function(event) { event = event||window.event; this.back = event.shiftKey; // save shift state for onblur handler this.lastkey = event.keyCode; - if (event.keyCode==32) { - if(this.init_size==undefined) - this.init_size = this.size; - if(this.init_size<=1) { - if(this.size>1) { - this.size = 1; - } else{ - var sel = this.selectedIndex; - this.size = this.options.length; - if(this.size>10) this.size = 10; - this.selectedIndex = sel; - } - } - } - }; - element.onblur = function() { - if(this.init_size<=1) - this.size = 1; }; - var c = element.className; - if (c == 'combo' || c == 'combo2') -// if (element.onblur==undefined) { - _set_combo_select(element); -// } + var c = e.className; + if (c == 'combo' || c == 'combo2') + _set_combo_select(e); } }, - 'input': function(element) { // we do not want to change focus on submit - if(element.type!='submit' && element.onfocus==undefined) { - element.onfocus = function() { - document.getElementsByName('_focus')[0].value = element.name; + 'textarea,a': function(e) { + if(e.onfocus==undefined) { + e.onfocus = function() { + save_focus(this); }; - var c = element.className; - if (c == 'combo' || c == 'combo2') { - if(element.onkeydown==undefined) { - _set_combo_input(element); - } - } } }, - 'input.combo_submit': function(element) { - // this hides search button for js enabled browsers - element.style.display = 'none'; - }, - 'input.combo_select': function(element) { - // this hides select button for js enabled browsers - element.style.display = 'none'; - }, - 'input.combo_reload': function(element) { - element.style.display = 'none'; - }, - 'input.ajaxsubmit': function(e) { - e.onclick = function() { - JsHttpRequest.request(this.name); - return false; - } - }, - 'input.editbutton': function(e) { - e.onclick = function() { - JsHttpRequest.request(this.name); - return false; - } - }, 'ul.ajaxtabs': function(ul) { var ulist=ul.getElementsByTagName("li"); - for (var x=0; xUnknown ajax function: '+cmd; } - } - Behaviour.apply(); - if (errors.length>0) - // window.scrollTo(0,0); - document.getElementById('msgbox').scrollIntoView(true); + } + Behaviour.apply(); + if (errors.length>0) + window.scrollTo(0,0); + //document.getElementById('msgbox').scrollIntoView(true); + // Restore focus if we've just lost focus because of DOM element refresh + setFocus(); } }, false // do not disable caching @@ -128,8 +135,9 @@ function price_format(post, num, dec, label) { document.getElementById(post).innerHTML = num; else document.getElementsByName(post)[0].value = num; - } - function get_amount(doc, label) { +} + +function get_amount(doc, label) { if(label) var val = document.getElementById(doc).innerHTML; else @@ -137,7 +145,7 @@ function price_format(post, num, dec, label) { val = val.replace(new RegExp('\\'+user.ts, 'g'),''); val = val.replace(new RegExp('\\'+user.ds, 'g'),'.'); return 1*val; - } +} function goBack() { if (window.history.length <= 1) @@ -145,3 +153,25 @@ function goBack() { else window.history.go(-1); } + +function setFocus(name, byId) { + + if(!name) { + if (_focus) + name = _focus; // last focus set in onfocus handlers + else { // no current focus - set it from from hidden var (first page display) + var cur = document.getElementsByName('_focus')[0]; + if(cur) name = cur.value; + } + } + if(byId) + el = document.getElementById(name); + else + el = document.getElementsByName(name)[0]; + if(el && el.focus) { + // The timeout is needed to prevent unpredictable behaviour on IE & Gecko. + // Using tmp var prevents crash on IE5 + var tmp = function() {el.focus()}; + setTimeout(tmp, 0); + } +} -- 2.30.2