From 7eb0da506fb25d46c9c63132dc42f5f5b31222c0 Mon Sep 17 00:00:00 2001 From: Janusz Dobrowolski Date: Sun, 8 Jan 2012 16:16:37 +0100 Subject: [PATCH] Several imporvements in ui helpers (nonajax button for long processes, fixed radio button etc). --- includes/ui/ui_input.inc | 10 +++++-- js/inserts.js | 61 ++++++++++++++++++++++++++++++++++------ js/utils.js | 14 ++++++--- 3 files changed, 71 insertions(+), 14 deletions(-) diff --git a/includes/ui/ui_input.inc b/includes/ui/ui_input.inc index 1e966a1a..1b3eec45 100644 --- a/includes/ui/ui_input.inc +++ b/includes/ui/ui_input.inc @@ -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 = diff --git a/js/inserts.js b/js/inserts.js index d8f033ea..e15da1ef 100644 --- a/js/inserts.js +++ b/js/inserts.js @@ -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; i10000 ? '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+'
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; } -- 2.30.2