X-Git-Url: https://dev.renevier.net/?a=blobdiff_plain;f=public%2Fjs%2Futils.js;h=1651b618241ad1ad3e531c5a2a063d7c9c78b279;hb=c1aeb7538786d8c9f3b3337c0b71e21ef89d9c77;hp=5dd8c6925793b53454ea21b8f092f92f73e3e16c;hpb=681ed303769262b6108e2e5893fceff999fa92d9;p=syj.git diff --git a/public/js/utils.js b/public/js/utils.js index 5dd8c69..1651b61 100644 --- a/public/js/utils.js +++ b/public/js/utils.js @@ -15,7 +15,7 @@ var CloseBtn = Class.create({ } style = Object.extend({ - float: "right", + 'float': "right", margin: "2px", fontWeight: "bold", padding: "0px" @@ -26,6 +26,9 @@ var CloseBtn = Class.create({ elt.insert({top: btn}); btn.observe("click", function(evt) { evt.stop(); + if (evt.detail === 0) { // it's not a real click, possibly a submit event + return; + } if (typeof options.callback === "function") { options.callback.call(elt); } @@ -209,7 +212,8 @@ Ajax.Responders.register({ // wrapper around Form.request that sets up the submit listener, stops the // submit event, calls presubmit function, calls Form.request and calls a -// postsubmit function +// postsubmit function. If form has some visible and activated file inputs, +// execute presubmit, but do not send the file with ajax. Element.addMethods('form', { ajaxize : function(form, options) { var reqoptions; @@ -217,7 +221,6 @@ Element.addMethods('form', { options = Object.clone(options || {}); $(form).observe('submit', function(evt) { - evt.stop(); // cancel form submission reqoptions = Object.clone(options); delete(reqoptions.presubmit); @@ -226,10 +229,30 @@ Element.addMethods('form', { if (Object.isFunction(options.presubmit)) { if (options.presubmit(this) === false) { + evt.stop(); // cancel form submission return; } } + // get list of input file not disabled, and not hidden + if (this.getInputs('file').find(function(elt) { + if (elt.disabled) { + return false; + } + while (elt && $(elt).identify() !== this.identify()) { + if (!elt.visible()) { + return false; + } + elt = elt.parentNode; + } + return true; + }.bind(this))) { + // form has some file inputs. Do not manage on our own. + return; + } + + evt.stop(); // cancel form submission + var params = reqoptions.parameters, action = this.readAttribute('action') || ''; if (action.blank()) { @@ -336,7 +359,7 @@ Element.addMethods(['input', 'textarea'], { } handler.apply(null, arguments); }); - proceed(element, 'paste', handler); + proceed(element, 'paste', handler.defer.bind(handler)); return proceed(element, 'change', handler); } return proceed(element, eventName, handler); @@ -392,7 +415,7 @@ Element.addMethods('div', { while (node) { nextNode = node.nextSibling; - if (node.nodeType === 3 || node.tagName.toLowerCase() === 'br') { + if (node.nodeType === 3 || node.tagName.toLowerCase() === 'br' || node.textContent || node.innerText) { div.removeChild(node); } node = nextNode; @@ -405,7 +428,7 @@ Element.addMethods('div', { var node = (div.ownerDocument || document).createTextNode(message); if ($A(div.childNodes).filter(function(node) { - return (node.nodeType === 3 || node.tagName.toLowerCase() === 'br'); + return (node.nodeType === 3 || node.tagName.toLowerCase() === 'br' || node.textContent || node.innerText); }).length) { div.insert(new Element('br')); }