X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=js%2Finserts.js;h=156882bf27891c43a254568ea6911568940928a3;hb=3dc7f60a71b28453a8318c1d4b23b94a090f2171;hp=2b244ec5872fe3a0db152e40d212a8b6c3ac47ed;hpb=c7a6b173102b5df624ce18780e057b3d61953ce6;p=fa-stable.git diff --git a/js/inserts.js b/js/inserts.js index 2b244ec5..156882bf 100644 --- a/js/inserts.js +++ b/js/inserts.js @@ -1,14 +1,32 @@ +/********************************************************************** + Copyright (C) FrontAccounting, LLC. + Released under the terms of the GNU General Public License, GPL, + as published by the Free Software Foundation, either version 3 + of the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License here . +***********************************************************************/ var _focus; +var _hotkeys = { + 'alt': false, // whether is the Alt key pressed + 'focus': -1 // currently selected indeks of document.links +}; function debug(msg) { box = document.getElementById('msgbox') box.innerHTML= box.innerHTML+'
'+msg } -function progbar(container) { - container.innerHTML= "
"+ - user.loadtxt+"
"; +function progbar() { + box = document.getElementById('msgbox'); + box.innerHTML= "
" + +"
" + +""
+		+user.loadtxt+"

"; + box.style.display = 'block'; } function save_focus(e) { @@ -31,7 +49,7 @@ function _expand(tabobj) { alltabs[i].className = "ajaxbutton" //deselect all tabs } tabobj.className = "current"; - JsHttpRequest.request(tabobj.name) + JsHttpRequest.request(tabobj) } } @@ -42,14 +60,20 @@ function expandtab(tabcontentid, tabnumber) { } function _set_combo_input(e) { + e.setAttribute('_last', e.value); e.onblur=function() { 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]; save_focus(select); -// this.style.display='none'; - if(button) { // if *_button set submit search request - JsHttpRequest.request(but_name); +// submit request if there is submit_on_change option set and +// search field has changed. + if (button && (this.value != this.getAttribute('_last'))) { + JsHttpRequest.request(button); + } else if(this.className=='combo2') { + this.style.display = 'none'; + select.style.display = 'inline'; + setFocus(select); } return false; }; @@ -68,15 +92,15 @@ function _set_combo_input(e) { } } } - }; - e.onkeydown = function(ev) { + }; + e.onkeydown = function(ev) { ev = ev||window.event; key = ev.keyCode||ev.which; if(key == 13) { this.blur(); return false; } - } + } } function _update_box(s) { @@ -85,25 +109,34 @@ function _update_box(s) { var box = document.getElementsByName(rel)[0]; if(box && s.selectedIndex>=0) { var opt = s.options[s.selectedIndex]; - if(box) box.value = byid ? opt.value : opt.text; + if(box) { + box.value = byid ? opt.value : opt.text; + box.setAttribute('_last', box.value); + } } } function _set_combo_select(e) { + // When combo position is changed via js (eg from searchbox) + // no onchange event is generated. To ensure proper change + // signaling we must track selectedIndex in onblur handler. + e.setAttribute('_last', e.selectedIndex); e.onblur = function() { if(this.className=='combo') _update_box(this); + if (this.selectedIndex != this.getAttribute('_last')) + this.onchange(); } e.onchange = function() { var s = this; - + this.setAttribute('_last', this.selectedIndex); 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); + JsHttpRequest.request(update); } } return true; @@ -116,9 +149,15 @@ function _set_combo_select(e) { this.style.display = 'none'; box.style.display = 'inline'; box.value=''; - setFocus(box.name); + setFocus(box); return false; } + if (this.getAttribute('aspect') == 'editable' && key==115) { + // F4: call related database editor - not available in non-js fallback mode + JsHttpRequest.request('_'+this.name+'_editor', this.form); + return false; // prevent default binding + // TODO: stopPropagation when needed + } } } @@ -126,36 +165,99 @@ function _set_combo_select(e) { Behaviour definitions */ var inserts = { + 'form': function(e) { + e.onkeydown = function(ev) { + ev = ev||window.event; + key = ev.keyCode||ev.which; + if((ev.ctrlKey && key == 13) || key == 27) { + ev.cancelBubble = true; + if(ev.stopPropagation) ev.stopPropagation(); + // activate submit/escape form + for (var i=0; i47 && key<58) || (key>64 && key<91))) { + var n = _hotkeys.focus; + var l = document.links; + var cnt = l.length; + key = String.fromCharCode(key); + for (var i=0; i=0) { + var link = document.links[_hotkeys.focus]; + if (link.target=='_blank') { +// window.open(link.href,'','toolbar=no,scrollbar=no,resizable=yes,menubar=no,width=900,height=500'); + openWindow(link.href,'_blank'); + } else + window.location = link.href; + } + } + return stopEv(ev); + } + return true; + } +} + Behaviour.register(inserts); Behaviour.addLoadEvent(setFocus); +Behaviour.addLoadEvent(setHotKeys);