Several imporvements in ui helpers (nonajax button for long processes, fixed radio...
authorJanusz Dobrowolski <janusz@frontaccouting.eu>
Sun, 8 Jan 2012 15:16:37 +0000 (16:16 +0100)
committerJanusz Dobrowolski <janusz@frontaccouting.eu>
Sun, 8 Jan 2012 15:16:37 +0000 (16:16 +0100)
includes/ui/ui_input.inc
js/inserts.js
js/utils.js

index 1e966a1a72758135e2bd5a06d434e2c0a41b660d..1b3eec45e6dee0323796f4b02e1b91c48563f488 100644 (file)
@@ -112,7 +112,7 @@ function hidden($name, $value=null, $echo=true)
                'selector' - ditto with closing current popup editor window
                'cancel'  - cancel form entry on Escape press; dflt ICON_CANCEL
                'process' - displays progress bar during call; optional icon
-
+               'nonajax' - ditto, non-ajax submit
        $atype can contain also multiply type selectors separated by space, 
        however make sense only combination of 'process' and one of defualt/selector/cancel
 */
@@ -141,6 +141,9 @@ function submit($name, $value, $echo=true, $title=false, $atype=false, $icon=fal
 
                                case 'cancel':
                                        if ($icon===false) $icon=ICON_ESCAPE; break;
+
+                               case 'nonajax':
+                                       $atype = false;
                        }
                }
        }
@@ -379,7 +382,10 @@ function check_row($label, $name, $value=null, $submit_on_change=false, $title=f
 }
 
 //-----------------------------------------------------------------------------------
-function radio($label, $name, $value, $selected, $submit_on_change=false) {
+function radio($label, $name, $value, $selected=null, $submit_on_change=false)
+{
+       if (!isset($selected))
+               $selected = get_post($name) == $value;
 
        if ($submit_on_change === true)
                $submit_on_change = 
index d8f033ea7821fe1cb455d14cd52f6b791b66b05a..e15da1efe2ee42485a6dab5d67ce153f9501c6cd 100644 (file)
@@ -18,6 +18,14 @@ var _hotkeys = {
 function validate(e) {
        if (e.name && (typeof _validate[e.name] == 'function'))
                return _validate[e.name](e);
+       else {
+               var n = e.name.indexOf('[');
+               if(n!=-1) {
+                       var key = e.name.substring(n+1, e.name.length-1);
+                       if (key.length>1 && _validate[e.name.substring(0,n)])
+                               return _validate[e.name.substring(0,n)][key](e);
+               }
+       }
        return true;
 }
 
@@ -150,7 +158,11 @@ function _set_combo_select(e) {
                    event = event||window.event;
                    key = event.keyCode||event.which;
                    var box = document.getElementsByName(this.getAttribute('rel'))[0];
-                   if (box && key == 32 && this.className == 'combo2') {
+                       if(key == 8 || (key==37 && event.altKey)) {
+                               event.returnValue = false;
+                               return false;
+                       }
+                   if (box && (key == 32) && (this.className == 'combo2')) {
                            this.style.display = 'none';
                            box.style.display = 'inline';
                                box.value='';
@@ -233,9 +245,24 @@ var inserts = {
            // this shows divs for js enabled browsers only
            e.style.display = 'block';
        },
-
        'button': function(e) {
-               e.onclick = function(){ return validate(e); }
+               e.onclick = function(){
+                       if (validate(e)) {
+                               setTimeout(function() { var asp = e.getAttribute('aspect');
+                                       set_mark((asp && (asp.indexOf('process') !== -1)) ? 'progressbar.gif' : 'ajax-loader.gif');
+                               }, 100);
+                               return true;
+                       }
+               },
+               e.onkeydown = function(ev) {    // block unintentional page escape with 'history back' key pressed on buttons
+                       ev = ev||window.event;
+                       key = ev.keyCode||ev.which;
+                       if(key == 8 || (key==37 && ev.altKey)) {
+                               ev.returnValue = false;
+                               return false;
+                       }
+               }
+
        },
 //     '.ajaxsubmit,.editbutton,.navibutton': // much slower on IE7
        'button.ajaxsubmit,input.ajaxsubmit,input.editbutton,button.editbutton,button.navibutton': 
@@ -244,7 +271,7 @@ var inserts = {
                                if (validate(e)) {
                                        save_focus(e);
                                        var asp = e.getAttribute('aspect')
-                                       if (asp && asp.indexOf('process') !== -1)
+                                       if (asp && (asp.indexOf('process') !== -1))
                                                JsHttpRequest.request(this, null, 600000); // ten minutes for backup
                                        else
                                                JsHttpRequest.request(this);
@@ -298,9 +325,19 @@ var inserts = {
                        e.onfocus = function() {
                            save_focus(this);
                        };
-                 var c = e.className;
-                 if (c == 'combo' || c == 'combo2' || c == 'combo3')
+               }
+               var c = e.className;
+               if (c == 'combo' || c == 'combo2' || c == 'combo3')
                        _set_combo_select(e);
+               else {
+                       e.onkeydown = function(ev) {    // block unintentional page escape with 'history back' key pressed on buttons
+                               ev = ev||window.event;
+                               key = ev.keyCode||ev.which;
+                               if(key == 8 || (key=37 && ev.altKey)) {
+                                       ev.returnValue = false;
+                                       return false;
+                               }
+                       }
                }
        },
        'a.printlink':  function(l) {
@@ -358,8 +395,14 @@ var inserts = {
                    }
                }
 //         }
+       },
+       'textarea': function(e) {
+               if(e.onfocus==undefined) {
+                       e.onfocus = function() {
+                           save_focus(this);
+                       };
+               }
        }
-
 /*     'tr.editrow': function(e) {
                        e.onkeydown = function(ev) { 
                        ev = ev||window.event;
@@ -441,7 +484,6 @@ function setHotKeys() {
                                for (var i=0; i<form.elements.length; i++){
                                        var el = form.elements[i];
                                        var asp = el.getAttribute('aspect');
-                                       
 
                                        if (el.className!='editbutton' && (asp && asp.indexOf('selector') !== -1) && (key==13 || key==27)) {
                                                passBack(key==13 ? el.getAttribute('rel') : false);
@@ -450,6 +492,9 @@ function setHotKeys() {
                                        }
                                        if (((asp && asp.indexOf('default') !== -1) && key==13)||((asp && asp.indexOf('cancel') !== -1) && key==27)) {
                                                if (validate(el)) {
+                                                       if (asp.indexOf('nonajax') !== -1)
+                                                               el.click();
+                                                       else
                                                        if (asp.indexOf('process') !== -1)
                                                                JsHttpRequest.request(el, null, 600000);
                                                        else
index 898a536211086ff3cabb62a0f873395aa4cef698..a801a13ecd59ae1c81e1e9c01161510963a3ed54 100644 (file)
@@ -35,7 +35,7 @@ function disp_msg(msg, cl) {
 // 
 JsHttpRequest.request= function(trigger, form, tout) {
 //     if (trigger.type=='submit' && !validate(trigger)) return false;
-       tout = tout || 6000;    // default timeout value
+       tout = tout || 10000;   // default timeout value
        document.getElementById('msgbox').innerHTML='';
        set_mark(tout>10000 ? 'progressbar.gif' : 'ajax-loader.gif');
        JsHttpRequest._request(trigger, form, tout, 0);
@@ -124,7 +124,7 @@ JsHttpRequest._request = function(trigger, form, tout, retry) {
                                  window.location = data;
                          } else if(cmd=='pu') {        // pop-up
                                  newwin = 1;
-                                 window.open(data,'REP_WINDOW','toolbar=no,scrollbar=no,resizable=yes,menubar=no');
+                                 window.open(data,'REP_WINDOW','toolbar=no,scrollbars=yes,resizable=yes,menubar=no');
                          } else {
                                  errors = errors+'<br>Unknown ajax function: '+cmd;
                        }
@@ -171,8 +171,11 @@ JsHttpRequest._request = function(trigger, form, tout, retry) {
                                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 (submitObj.type=='submit' && el==submitObj)
+                                       {
+                                               q[name] =  el.value
+                                               continue;
+                                       }
                                }
                                if (el.type )
                                  if( 
@@ -195,6 +198,9 @@ JsHttpRequest._request = function(trigger, form, tout, retry) {
                                                }
                                        }
                                        else
+                                       if (el.type=='file')
+                                               q[name] = el
+                                       else
                                        {
                                                q[name] = el.value;
                                        }