X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=js%2Finserts.js;h=a17519ef36a2298134f7b305c72a042dab62e0f0;hb=1d8ca637beb25da5f36084fdecb6c24dc5d61eab;hp=5b8d73a7686832d9fc298a4a6f248c0dc9892ffe;hpb=5f06887dedd4d14701864fb72994d7e20352086d;p=fa-stable.git diff --git a/js/inserts.js b/js/inserts.js index 5b8d73a7..a17519ef 100644 --- a/js/inserts.js +++ b/js/inserts.js @@ -11,9 +11,16 @@ var _focus; var _hotkeys = { 'alt': false, // whether is the Alt key pressed - 'focus': -1 // currently selected indeks of document.links + 'list': false, // list of all elements with hotkey used recently + 'focus': -1 // currently selected list element }; +function validate(e) { + if (e.name && (typeof _validate[e.name] == 'function')) + return _validate[e.name](e); + return true; +} + function save_focus(e) { _focus = e.name||e.id; var h = document.getElementById('hints'); @@ -26,7 +33,7 @@ function save_focus(e) { function _expand(tabobj) { var ul = tabobj.parentNode.parentNode; - var alltabs=ul.getElementsByTagName("input"); + var alltabs=ul.getElementsByTagName("button"); var frm = tabobj.form; if (ul.getAttribute("rel")){ @@ -67,14 +74,21 @@ function _set_combo_input(e) { var select = document.getElementsByName(this.getAttribute('rel'))[0]; if(select && select.selectedIndex>=0) { var len = select.length; - var byid = this.className=='combo'; + var byid = this.className=='combo' || this.className=='combo3'; var ac = this.value.toUpperCase(); select.options[select.selectedIndex].selected = false; for (i = 0; i < len; i++) { var txt = byid ? select.options[i].value : select.options[i].text; - if (txt.toUpperCase().indexOf(ac) >= 0) { - select.options[i].selected = true; - break; + if (this.className=='combo3') { + if(txt.toUpperCase().indexOf(ac) == 0) { + select.options[i].selected = true; + break; + } + } else { + if(txt.toUpperCase().indexOf(ac) >= 0) { + select.options[i].selected = true; + break; + } } } } @@ -90,7 +104,7 @@ function _set_combo_input(e) { } function _update_box(s) { - var byid = s.className=='combo'; + var byid = s.className=='combo' || s.className=='combo3'; var rel = s.getAttribute('rel'); var box = document.getElementsByName(rel)[0]; if(box && s.selectedIndex>=0) { @@ -114,14 +128,14 @@ function _set_combo_select(e) { // if(this.className=='combo') // _update_box(this); if ((this.selectedIndex != this.getAttribute('_last')) - ||(this.className=='combo' && _update_box(this)) + ||((this.className=='combo' || this.className=='combo3') && _update_box(this)) ) this.onchange(); } e.onchange = function() { var s = this; - this.setAttribute('_last', this.selectedIndex); - if(s.className=='combo') + this.setAttribute('_last', this.selectedIndex); + if(s.className=='combo' || this.className=='combo3') _update_box(s); if(s.selectedIndex>=0) { var sname = '_'+s.name+'_update'; @@ -184,11 +198,11 @@ var inserts = { if(e.onfocus==undefined) { e.onfocus = function() { save_focus(this); - if (this.className == 'combo') + if (this.className == 'combo' || this.className == 'combo3') this.select(); }; } - if (e.className == 'combo' || e.className == 'combo2') { + if (e.className == 'combo' || e.className == 'combo2' || e.className == 'combo3') { _set_combo_input(e); } else @@ -214,35 +228,24 @@ var inserts = { // this shows divs for js enabled browsers only e.style.display = 'block'; }, + + 'button': function(e) { + e.onclick = function(){ return validate(e); } + }, // '.ajaxsubmit,.editbutton,.navibutton': // much slower on IE7 'button.ajaxsubmit,input.ajaxsubmit,input.editbutton,button.editbutton,button.navibutton': function(e) { - e.onclick = function() { - save_focus(e); - if (e.getAttribute('aspect') == 'process') + e.onclick = function() { + if (validate(e)) { + save_focus(e); + var asp = e.getAttribute('aspect') + if (asp && asp.indexOf('process') !== -1) JsHttpRequest.request(this, null, 60000); else JsHttpRequest.request(this); - return false; - } - }, - 'button': function(e) { - if (e.name) { - var func = _validate[e.name]; - var old = e.onclick; - if(func) { - if (typeof old != 'function' || old == func) { // prevent multiply binding on ajax update - e.onclick = func; - } else { - e.onclick = function() { - if(func()) - { old(); return true;} - else - return false; - } } + return false; } - } }, '.amount': function(e) { if(e.onblur==undefined) { @@ -264,18 +267,14 @@ var inserts = { } } }, - 'button[aspect=selector], button[aspect=abort], input[aspect=selector]': function(e) { + 'button[aspect*selector], button[aspect*abort], input[aspect*selector]': function(e) { e.onclick = function() { passBack(this.getAttribute('rel')); return false; } }, 'button[aspect=popup]': function(e) { - var old = e.onclick e.onclick = function() { -// this.form.target = '_blank'; -// old(); -// return true; if(_w) _w.close(); // this is really necessary to have window on top in FF2 :/ _w = open(document.location+'popup=1', "edit","Scrollbars=0,resizable=0,width=800,height=600, top=50,left=50"); @@ -293,14 +292,24 @@ var inserts = { save_focus(this); }; var c = e.className; - if (c == 'combo' || c == 'combo2') + if (c == 'combo' || c == 'combo2' || c == 'combo3') _set_combo_select(e); } }, 'a.printlink': function(l) { l.onclick = function() { save_focus(this); - JsHttpRequest.request(this); + JsHttpRequest.request(this, null, 60000); + return false; + } + }, + 'a.repopts_link': function(l) { + l.onclick = function() { + save_focus(this); + var replinks = document.getElementsBySelector('a.repopts_link'); + for(var i in replinks) + replinks[i].style.fontWeight = replinks[i]==this ? 'bold' : 'normal'; + JsHttpRequest.request(this, null); return false; } }, @@ -314,21 +323,36 @@ var inserts = { return false; } } + // prevent unneeded transaction entry abortion + if (e.className == 'shortcut' + || e.className == 'menu_option' + || e.className == 'menu_tab' + || e.className == 'selected') + e.onclick = function(ev) { + if (_validate._processing + && _validate._modified + && !confirm(_validate._processing)) { + ev.returnValue = false; + return false; + } + window.location = e.href; + } }, 'ul.ajaxtabs': function(ul) { var ulist=ul.getElementsByTagName("li"); for (var x=0; x47 && key<58) || (key>64 && key<91))) { + else if (ev.altKey && !ev.ctrlKey && ((key>47 && key<58) || (key>64 && key<91))) { + key = String.fromCharCode(key); var n = _hotkeys.focus; - var l = document.links; + var l = document.getElementsBySelector('[accesskey='+key+']'); var cnt = l.length; - key = String.fromCharCode(key); + _hotkeys.list = l; for (var i=0; i=0) { - var link = document.links[_hotkeys.focus]; + if (_hotkeys.focus >= 0) { + var link = _hotkeys.list[_hotkeys.focus]; if(link.onclick) link.onclick(); else