mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-08-31 06:48:02 +02:00
BUGFIX: provide fallback for ajax-errors if not in CMS context BUGFIX: re-added middle-alignment to greybox if not in CMS context BUGFIX: added basic requirements to be independent of cms-inclusion FEATURE: better transformation of save-button (replaced indicator with "saving..." label) ENHANCEMENT: moved String-lib to prototype_improvements.js git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@43491 467b73ca-7a2a-4603-9d3b-597d59a354a9
108 lines
3.3 KiB
JavaScript
Executable File
108 lines
3.3 KiB
JavaScript
Executable File
ComplexTableFieldPopupForm = Class.create();
|
|
ComplexTableFieldPopupForm.prototype = {
|
|
|
|
errorMessage: "Error talking to server",
|
|
|
|
initialize: function() {
|
|
Behaviour.register({
|
|
"form#ComplexTableField_Popup_DetailForm .Actions input.action": {
|
|
onclick: this.submitForm.bind(this)
|
|
}
|
|
});
|
|
},
|
|
|
|
submitForm : function(e) {
|
|
// if custom validation implementation (extend class to implement)
|
|
if(this.validate) {
|
|
if(!this.validate()) {
|
|
Event.stop(e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// only do ajaxy stuff for content loaded in an iframe
|
|
if(window != top && parent.parent.GB_hide) {
|
|
var theForm = Event.findElement(e,"form");
|
|
var submitButton = document.getElementsBySelector("input.action",theForm)[0];
|
|
if(parent.parent.statusMessage != undefined) parent.parent.statusMessage('saving');
|
|
submitButton.setAttribute("disabled","true");
|
|
|
|
submitButton._oldValue = submitButton.value;
|
|
submitButton.value = ingize(submitButton.value);
|
|
Element.addClassName(submitButton,'loading');
|
|
|
|
new parent.parent.Ajax.Request(
|
|
theForm.getAttribute("action"),
|
|
{
|
|
parameters: Form.serialize(theForm)+"&ajax=1",
|
|
onComplete: this.updateTableAfterSave.bind(this),
|
|
onFailure: this.ajaxErrorHandler.bind(this)
|
|
}
|
|
);
|
|
Event.stop(e);
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
},
|
|
|
|
updateTableAfterSave : function(response) {
|
|
eval(response.responseText);
|
|
var theForm = document.getElementsByTagName("form")[0];
|
|
|
|
// don't update when validation is present and failed
|
|
if(!this.validate || (this.validate && !hasHadFormError())) {
|
|
new parent.parent.Ajax.Request(
|
|
parent.parent.GB_RefreshLink,
|
|
{
|
|
onComplete: this.updateAndHide.bind(parent.parent),
|
|
onFailure : this.ajaxErrorHandler
|
|
}
|
|
);
|
|
} else {
|
|
var submitbutton = document.getElementsBySelector("input.action",theForm)[0];
|
|
submitbutton.disabled = false;
|
|
submitButton.value = submitButton._oldValue;
|
|
Element.removeClassName(submitButton,'loading');
|
|
}
|
|
},
|
|
|
|
ajaxErrorHandler: function(response) {
|
|
var submitButton = document.getElementsBySelector("form input.action")[0];
|
|
submitButton.disabled = false;
|
|
submitButton.value = submitButton._oldValue;
|
|
Element.removeClassName(submitButton,'loading');
|
|
|
|
// TODO does not work due to sandbox-iframe restrictions?
|
|
if(typeof(parent.parent.ajaxErrorHandler) == 'function') {
|
|
parent.parent.ajaxErrorHandler();
|
|
} else {
|
|
alert(this.errorMessage);
|
|
}
|
|
},
|
|
|
|
updateAndHide: function(response) {
|
|
var theForm =document.getElementsByTagName("form")[0];
|
|
|
|
var submitButton = document.getElementsBySelector("input.action",theForm)[0];
|
|
submitButton.disabled = false;
|
|
submitButton.value = submitButton._oldValue;
|
|
Element.removeClassName(submitButton,'loading');
|
|
|
|
// TODO Fix DOM-relation after pagination inside popup
|
|
if(this.GB_OpenerObj) {
|
|
// apparently firefox doesn't remember its DOM after innerHTML, so we help out here...
|
|
var cachedObj = this.GB_OpenerObj;
|
|
var cachedParentObj = this.GB_OpenerObj.parentNode;
|
|
Element.replace(this.GB_OpenerObj, response.responseText);
|
|
this.Behaviour.apply(cachedParentObj);
|
|
cachedObj = null;
|
|
this.GB_OpenerObj = null;
|
|
}
|
|
|
|
// causes IE6 to go nuts
|
|
//this.GB_hide();
|
|
|
|
}
|
|
}
|
|
ComplexTableFieldPopupForm.applyTo('form#ComplexTableField_Popup_DetailForm'); |