-/* This file is part of Syj, Copyright (c) 2010 Arnaud Renevier,
+/* This file is part of Syj, Copyright (c) 2010-2011 Arnaud Renevier,
and is published under the AGPL license. */
var CloseBtn = Class.create({
}
style = Object.extend({
- float: "right",
+ 'float': "right",
margin: "2px",
fontWeight: "bold",
padding: "0px"
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);
}
// 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;
options = Object.clone(options || {});
$(form).observe('submit', function(evt) {
- evt.stop(); // cancel form submission
reqoptions = Object.clone(options);
delete(reqoptions.presubmit);
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()) {
}
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);
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;
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'));
}
},
setMessageStatus: function(div, status) {
- return div.removeClassName('error').
- removeClassName('warn').
- removeClassName('info').
- removeClassName('success').
- addClassName(status);
+ $A(["error", "warn", "info", "success", "optional"]).each(function(clname) {
+ div.removeClassName(clname);
+ });
+ if (typeof status === "string") {
+ div.addClassName(status);
+ } else {
+ $A(status).each(function(clname) {
+ div.addClassName(clname);
+ });
+ }
+ return div;
}
});