X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=js%2Futils.js;h=877af9ad60cc4eab67c98fe540724e2d56512538;hb=d25edb67f97d7f178529777d08cc15691d73e528;hp=dcc0c8d2823210fa29518a633319e88eefb3b9c7;hpb=171074993d8f6768cde0626697abd6b4eab732a6;p=fa-stable.git diff --git a/js/utils.js b/js/utils.js index dcc0c8d2..877af9ad 100644 --- a/js/utils.js +++ b/js/utils.js @@ -9,29 +9,42 @@ // request is directed to current location // JsHttpRequest.request= function(trigger, form) { - - + var mark = document.getElementById('ajaxmark'); + if(mark) mark.style.visibility = 'visible'; + if (trigger.tagName=='A') { + var content = {}; + var upload = 0; + var url = trigger.href; + if (trigger.id) content[trigger.id] = 1; + } else { var submitObj = typeof(trigger) == "string" ? document.getElementsByName(trigger)[0] : trigger; form = form || (submitObj && submitObj.form); + var upload = form && form.enctype=='multipart/form-data'; + var url = form ? form.action : window.location.toString(); - if (!form) url = url.substring(0, url.indexOf('?')); + var content = this.formInputs(trigger, form, upload); - var values = this.formValues(trigger, form); + if (!form) url = url.substring(0, url.indexOf('?')); + if (!submitObj) - values[trigger] = 1; - // this is to avoid caching problems - values['_random'] = Math.random()*1234567; + content[trigger] = 1; + + } + // this is to avoid caching problems + content['_random'] = Math.random()*1234567; + JsHttpRequest.query( - 'POST '+url, // backend - values, + (upload ? "form." : "")+"POST "+url, // force form loader + content, // Function is called when an answer arrives. function(result, errors) { // Write the answer. + var newwin = 0; if (result) { for(var i in result ) { atom = result[i]; @@ -43,6 +56,7 @@ // debug(cmd+':'+property+':'+type+':'+id); // seek element by id if there is no elemnt with given name objElement = document.getElementsByName(id)[0] || document.getElementById(id); + if(!objElement) continue; if(cmd=='as') { eval("objElement.setAttribute('"+property+"',"+data+");"); } else if(cmd=='up') { @@ -59,6 +73,9 @@ eval(data); } else if(cmd=='rd') { // client-side redirection window.location = data; + } else if(cmd=='pu') { // pop-up + newwin = 1; + window.open(data,'REP_WINDOW','toolbar=no,scrollbar=no,resizable=yes,menubar=no'); } else { errors = errors+'
Unknown ajax function: '+cmd; } @@ -66,25 +83,28 @@ // Write errors to the debug div. document.getElementById('msgbox').innerHTML = errors; + var mark = document.getElementById('ajaxmark'); + if(mark) mark.style.visibility = 'hidden'; 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(); + if(!newwin) { + setFocus(); + } } }, false // do not disable caching ); } - // returns input field values submitted when form button 'name' is pressed - // - JsHttpRequest.formValues = function(inp, objForm) + // collect all form input values plus inp trigger value + JsHttpRequest.formInputs = function(inp, objForm, upload) { var submitObj = inp; var q = {}; - if (typeof(inp) == "string") submitObj = document.getElementsByName(inp)[0]; @@ -99,7 +119,14 @@ for( var i=0; i < formElements.length; i++) { var el = formElements[i]; + var name = el.name; if (!el.name) continue; + if(upload) { // for form containing file inputs collect all + // form elements and add value of trigger submit button + // (internally form is submitted via form.submit() not button click()) + q[name] = submitObj.type=='submit' && el==submitObj ? el.value : el; + continue; + } if (el.type ) if( ((el.type == 'radio' || el.type == 'checkbox') && el.checked == false) @@ -107,7 +134,6 @@ continue; if (el.disabled && el.disabled == true) continue; - var name = el.name; if (name) { if(el.type=='select-multiple') @@ -176,7 +202,11 @@ function goBack() { } function setFocus(name, byId) { - + if(document.location.pathname.indexOf('index.php') != -1) { + // this is application menu page - set focus on first link + // var el = document.getElementById('msgbox'); + // TODO find first link after msgbox and set focus + } if(!name) { if (_focus) name = _focus; // last focus set in onfocus handlers