Permalink
Browse files

ENHANCEMENT Better integration between new form javascript and tree i…

…n CMS

MINOR Various event and property renamings in CMSMain.js

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@92635 467b73ca-7a2a-4603-9d3b-597d59a354a9
  • Loading branch information...
1 parent 502855c commit 0b0e10d01d7a3e66dac4cb7d5e1b2c5b7333eb92 @chillu chillu committed Nov 21, 2009
Showing with 69 additions and 17 deletions.
  1. +60 −16 javascript/LeftAndMain.js
  2. +9 −1 javascript/LeftAndMain_left.js
View
@@ -24,6 +24,20 @@
this._setupPinging();
this._setupButtons();
this._resizeChildren();
+
+ // artificially delay the resize event 200ms
+ // to avoid overlapping height changes in different onresize() methods
+ $(window).resize(function () {
+ var timerID = "timerLeftAndMainResize";
+ if (window[timerID]) clearTimeout(window[timerID]);
+ window[timerID] = setTimeout(function() {self._resizeChildren();}, 200);
+ });
+
+ // trigger resize whenever new tabs are shown
+ // @todo This is called multiple times when tabs are loaded
+ this.find('.ss-tabset').bind('tabsshow', function() {self._resizeChildren();});
+
+ $('#Form_EditForm').bind('loadnewpage', function() {self._resizeChildren();});
this._super();
},
@@ -101,15 +115,15 @@
},
/**
- * @param DOMElement button The pressed button (optiona)
+ * @param {DOMElement} button The pressed button (optional)
*/
ajaxSubmit: function(button) {
// default to first button if none given - simulates browser behaviour
if(!button) button = this.find(':submit:first');
- var $form = this;
+ var self = this;
- this.trigger('beforeSubmit', [button]);
+ this.trigger('ajaxsubmit', {button: button});
// set button to "submitting" state
$(button).addClass('loading');
@@ -119,12 +133,10 @@
// validate if required
if(!this.validate()) {
- this.trigger('validationError', [button]);
-
// TODO Automatically switch to the tab/position of the first error
statusMessage("Validation failed.", "bad");
- if($('Form_EditForm_action_save') && $('Form_EditForm_action_save').stopLoading) $('Form_EditForm_action_save').stopLoading();
+ $(button).removeClass('loading');
return false;
}
@@ -136,12 +148,10 @@
$.post(
this.attr('action'),
data,
- function(result) {
+ function(response) {
$(button).removeClass('loading');
- $form.trigger('afterSubmit', [result]);
-
- $form.loadNewPage();
+ self._loadResponse(response);
},
// @todo Currently all responses are assumed to be evaluated
'script'
@@ -159,30 +169,64 @@
* @return {boolean}
*/
validate: function() {
- this.trigger('beforeValidate');
var isValid = true;
- this.trigger('afterValidate', [isValid]);
+ this.trigger('validate', {isValid: isValid});
return isValid;
},
- loadNewPage: function(result) {
+ /**
+ * @param String url
+ * @param Function callback (Optional)
+ */
+ load: function(url, callback) {
+ var self = this;
+ $.get(
+ url,
+ function(response) {
+ self._loadResponse(response);
+ if(callback) callback.apply(self, [response]);
+ },
+ // @todo Currently all responses are assumed to be evaluated
+ 'script'
+ );
+ },
+
+ /**
+ * Remove everying inside the <form> tag
+ * with a custom HTML fragment. Useful e.g. for deleting a page in the CMS.
+ *
+ * @param {String} removeText
+ */
+ remove: function(removeHTML) {
+
+ },
+
+
+ /**
+ * @param {String} result Either HTML for straight insertion, or eval'ed JavaScript.
+ * If passed as HTML, it is assumed that everying inside the <form> tag is replaced,
+ * but the old <form> tag itself stays intact.
+ */
+ _loadResponse: function(response) {
// TinyMCE coupling
if(typeof tinymce_removeAll != 'undefined') tinymce_removeAll();
+
+ var html = response;
// Rewrite # links
- result = result.replace(/(<a[^>]+href *= *")#/g, '$1' + window.location.href.replace(/#.*$/,'') + '#');
+ html = html.replace(/(<a[^>]+href *= *")#/g, '$1' + window.location.href.replace(/#.*$/,'') + '#');
// Rewrite iframe links (for IE)
- result = result.replace(/(<iframe[^>]*src=")([^"]+)("[^>]*>)/g, '$1' + $('base').attr('href') + '$2$3');
+ html = html.replace(/(<iframe[^>]*src=")([^"]+)("[^>]*>)/g, '$1' + $('base').attr('href') + '$2$3');
// Prepare iframes for removal, otherwise we get loading bugs
this.find('iframe').each(function() {
this.contentWindow.location.href = 'about:blank';
this.remove();
})
- this.html(result);
+ this.html(html);
if(this.hasClass('validationerror')) {
statusMessage(ss.i18n._t('ModelAdmin.VALIDATIONERROR', 'Validation Error'), 'bad');
@@ -204,7 +204,15 @@ TreeNodeAPI.prototype = {
},
getPageFromServer : function() {
- $('Form_EditForm').getPageFromServer(this.id.replace('record-',''), this);
+ jQuery('#Form_EditForm').concrete('ss').load(
+ jQuery(this).find('a').attr('href'),
+ function(response) {
+ var pageID = jQuery(this).find(':input[name=ID]').val();
+ if(pageID) {
+ jQuery('#sitetree')[0].setCurrentByIdx(pageID);
+ }
+ }
+ );
_AJAX_LOADING = false;
},
ajaxExpansion : function() {

0 comments on commit 0b0e10d

Please sign in to comment.