2011-08-19 02:32:31 +02:00
|
|
|
(function($) {
|
|
|
|
/**
|
|
|
|
* File: CMSPageHistoryController.js
|
|
|
|
*
|
|
|
|
* Handles related interactions between the version selection form on the
|
|
|
|
* left hand side of the panel and the version displaying on the right
|
|
|
|
* hand side.
|
|
|
|
*/
|
|
|
|
|
|
|
|
$.entwine('ss', function($){
|
|
|
|
/**
|
|
|
|
* Class: #Form_VersionsForm
|
|
|
|
*
|
|
|
|
* The left hand side version selection form is the main interface for
|
|
|
|
* users to select a version to view, or to compare two versions
|
|
|
|
*/
|
|
|
|
$('#Form_VersionsForm').entwine({
|
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
*/
|
|
|
|
onmatch: function() {
|
|
|
|
var self = this;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Event: :input[name=ShowUnpublished] change
|
|
|
|
*
|
|
|
|
* Changing the show unpublished checkbox toggles whether to show
|
|
|
|
* or hide the unpublished versions. Because those rows may be being
|
|
|
|
* compared this also ensures those rows are unselected.
|
|
|
|
*/
|
|
|
|
this.find(':input[name=ShowUnpublished]').bind('change', function(e) {
|
|
|
|
if($(this).attr("checked")) {
|
|
|
|
self.find("tr[data-published=false]").show();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
self.find("tr[data-published=false]").hide()._unselect();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
this._super();
|
|
|
|
},
|
|
|
|
/**
|
|
|
|
* Function: submit.
|
|
|
|
*
|
|
|
|
* Submits either the compare versions form or the view single form
|
|
|
|
* display based on whether we have two or 1 option selected
|
2011-08-30 00:26:40 +02:00
|
|
|
*
|
|
|
|
* Todo:
|
|
|
|
* Handle coupling to admin url
|
2011-08-19 02:32:31 +02:00
|
|
|
*/
|
|
|
|
onsubmit: function(e, d) {
|
|
|
|
var id, self = this;
|
|
|
|
id = this.find(':input[name=ID]').val();
|
|
|
|
|
|
|
|
if(!id) return false;
|
|
|
|
|
2011-08-30 00:26:40 +02:00
|
|
|
var button, url, selected, to, from, compare, data;
|
2011-08-19 02:32:31 +02:00
|
|
|
|
|
|
|
compare = (this.find(":input[name=CompareMode]").is(":checked"));
|
|
|
|
selected = this.find("table input[type=checkbox]").filter(":checked");
|
|
|
|
|
|
|
|
if(compare) {
|
|
|
|
if(selected.length != 2) return false;
|
|
|
|
|
|
|
|
to = selected.eq(0).val();
|
|
|
|
from = selected.eq(1).val();
|
|
|
|
button = this.find(':submit[name=action_doCompare]');
|
|
|
|
url = 'admin/page/history/compare/'+ [id,from,to].join('/') +"/";
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
to = selected.eq(0).val();
|
|
|
|
button = this.find(':submit[name=action_doShowVersion]');
|
2011-08-30 00:26:40 +02:00
|
|
|
url = 'admin/page/history/show/'+ [id,to].join('/') + "/";
|
2011-08-19 02:32:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
window.History.pushState({selector: '.cms-content-fields form:first'}, '', url);
|
|
|
|
|
2011-08-30 00:26:40 +02:00
|
|
|
data = this.serializeArray();
|
2011-08-19 02:32:31 +02:00
|
|
|
data.push({
|
|
|
|
name: button.attr('name'), value: button.val()
|
|
|
|
});
|
|
|
|
|
|
|
|
$('.cms-content').loadForm(this.attr('action'), null, function() {}, {
|
|
|
|
data: data, type: this.attr('method')
|
|
|
|
});
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class: #Form_VersionsForm tr
|
|
|
|
*
|
|
|
|
* An individual row in the versions form. Selecting the row updates
|
|
|
|
* the edit form depending on whether we're showing individual version
|
|
|
|
* information or displaying comparsion.
|
|
|
|
*/
|
|
|
|
$("#Form_VersionsForm tbody tr").entwine({
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function: onclick
|
|
|
|
*
|
|
|
|
* Selects or deselects the row (if in compare mode). Will trigger
|
|
|
|
* an update of the edit form if either selected (in single mode)
|
|
|
|
* or if this is the second row selected (in compare mode)
|
|
|
|
*/
|
|
|
|
onclick: function(e) {
|
|
|
|
var compare, selected;
|
|
|
|
|
|
|
|
// compare mode
|
|
|
|
compare = this.parents("form").find(':input[name=CompareMode]').attr("checked"),
|
|
|
|
selected = this.siblings(".active");
|
|
|
|
|
|
|
|
if(compare && this.hasClass('active')) {
|
|
|
|
this._unselect();
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
else if(compare) {
|
|
|
|
// check if we have already selected more than two.
|
|
|
|
if(selected.length > 1) {
|
|
|
|
return alert(ss.i18n._t('ONLYSELECTTWO', 'Can only compare two versions at at time.'));
|
|
|
|
}
|
|
|
|
|
|
|
|
this._select();
|
|
|
|
|
|
|
|
// if this is the second selected then we can compare.
|
|
|
|
if(selected.length == 1) {
|
|
|
|
this.parents('form').submit();
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
this._select();
|
|
|
|
selected._unselect();
|
|
|
|
|
|
|
|
this.parents("form").submit();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function: _unselect()
|
|
|
|
*
|
|
|
|
* Unselects the row from the form selection.
|
|
|
|
*/
|
|
|
|
_unselect: function() {
|
|
|
|
this.removeClass('active');
|
|
|
|
this.find(":input[type=checkbox]").attr("checked", false);
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function: _select()
|
|
|
|
*
|
|
|
|
* Selects the currently matched row in the form selection
|
|
|
|
*/
|
|
|
|
_select: function() {
|
|
|
|
this.addClass('active');
|
|
|
|
this.find(":input[type=checkbox]").attr("checked", true);
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
});
|
|
|
|
})(jQuery);
|