mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
404 lines
11 KiB
JavaScript
404 lines
11 KiB
JavaScript
|
if(typeof SiteTreeHandlers == 'undefined') SiteTreeHandlers = {};
|
||
|
SiteTreeHandlers.showNLDraft_url = 'admin/newsletter/shownewsletter/';
|
||
|
SiteTreeHandlers.showNLType_url = 'admin/newsletter/showtype/';
|
||
|
|
||
|
SiteTree.prototype = {
|
||
|
castAsTreeNode: function(li) {
|
||
|
behaveAs(li, SiteTreeNode, this.options);
|
||
|
},
|
||
|
|
||
|
getIdxOf : function(treeNode) {
|
||
|
if(treeNode && treeNode.id)
|
||
|
return treeNode.id;
|
||
|
},
|
||
|
|
||
|
getTreeNodeByIdx : function(idx) {
|
||
|
if(!idx) idx = "0";
|
||
|
return document.getElementById(idx);
|
||
|
},
|
||
|
|
||
|
initialise: function() {
|
||
|
this.observeMethod('SelectionChanged', this.changeCurrentTo);
|
||
|
},
|
||
|
|
||
|
createTreeNode : function(idx, title, pageType, secondIdx) {
|
||
|
var i;
|
||
|
var node = document.createElement('li');
|
||
|
node.className = pageType;
|
||
|
|
||
|
var aTag = document.createElement('a');
|
||
|
|
||
|
node.id = idx;
|
||
|
|
||
|
if( pageType == 'Draft' ) {
|
||
|
aTag.href = SiteTreeHandlers.showNLDraft_url + idx;
|
||
|
} else {
|
||
|
aTag.href = SiteTreeHandlers.showNLType_url + idx;
|
||
|
}
|
||
|
|
||
|
aTag.innerHTML = title;
|
||
|
node.appendChild(aTag);
|
||
|
|
||
|
SiteTreeNode.create(node, this.options);
|
||
|
|
||
|
return node;
|
||
|
},
|
||
|
|
||
|
addDraftNode: function( title, parentID, draftID ) {
|
||
|
var draftNode = this.createTreeNode( 'draft_' + parentID + '_' + draftID, title, 'Draft', parentID );
|
||
|
this.getTreeNodeByIdx('drafts_' + parentID).appendTreeNode( draftNode );
|
||
|
this.changeCurrentTo( draftNode );
|
||
|
},
|
||
|
|
||
|
addTypeNode: function( title, parentID ) {
|
||
|
var typeNode = this.createTreeNode( 'mailtype_' + parentID, title, 'MailType' );
|
||
|
var draftsNode = this.createTreeNode( 'drafts_' + parentID, 'Drafts', 'DraftFolder' );
|
||
|
var sentItemsNode = this.createTreeNode( 'sent_' + parentID, 'Sent Items', 'SentFolder' );
|
||
|
var mailingListNode = this.createTreeNode( 'recipients_' + parentID, 'Mailing List', 'Recipients' );
|
||
|
typeNode.appendTreeNode( draftsNode );
|
||
|
Element.addClassName( draftsNode, 'nodelete');
|
||
|
typeNode.appendTreeNode( sentItemsNode );
|
||
|
Element.addClassName(sentItemsNode,'nodelete');
|
||
|
typeNode.appendTreeNode( mailingListNode );
|
||
|
Element.addClassName(mailingListNode,'nodelete');
|
||
|
this.appendTreeNode( typeNode );
|
||
|
this.changeCurrentTo( typeNode );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Delete pages action
|
||
|
*/
|
||
|
deletedraft = {
|
||
|
button_onclick : function() {
|
||
|
if(treeactions.toggleSelection(this)) {
|
||
|
deletedraft.o1 = $('sitetree').observeMethod('SelectionChanged', deletedraft.treeSelectionChanged);
|
||
|
deletedraft.o2 = $('deletedrafts_options').observeMethod('Close', deletedraft.popupClosed);
|
||
|
addClass($('sitetree'),'multiselect');
|
||
|
|
||
|
var sel = $('sitetree').firstSelected();
|
||
|
|
||
|
if(sel) {
|
||
|
var selIdx = $('sitetree').getIdxOf(sel);
|
||
|
deletedraft.selectedNodes = { };
|
||
|
deletedraft.selectedNodes[selIdx] = true;
|
||
|
sel.removeNodeClass('current');
|
||
|
sel.addNodeClass('selected');
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
treeSelectionChanged : function(selectedNode) {
|
||
|
var idx = $('sitetree').getIdxOf(selectedNode);
|
||
|
|
||
|
if(selectedNode.selected) {
|
||
|
selectedNode.removeNodeClass('selected');
|
||
|
selectedNode.selected = false;
|
||
|
deletedraft.selectedNodes[idx] = false;
|
||
|
|
||
|
} else {
|
||
|
selectedNode.addNodeClass('selected');
|
||
|
selectedNode.selected = true;
|
||
|
deletedraft.selectedNodes[idx] = true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
popupClosed : function() {
|
||
|
removeClass($('sitetree'),'multiselect');
|
||
|
$('sitetree').stopObserving(deletedraft.o1);
|
||
|
$('deletedrafts_options').stopObserving(deletedraft.o2);
|
||
|
|
||
|
for(var idx in deletedraft.selectedNodes) {
|
||
|
if(deletedraft.selectedNodes[idx]) {
|
||
|
node = $('sitetree').getTreeNodeByIdx(idx);
|
||
|
if(node) {
|
||
|
node.removeNodeClass('selected');
|
||
|
node.selected = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
form_submit : function() {
|
||
|
var csvIDs = "";
|
||
|
for(var idx in deletedraft.selectedNodes) {
|
||
|
if(deletedraft.selectedNodes[idx]) csvIDs += (csvIDs ? "," : "") + idx;
|
||
|
}
|
||
|
|
||
|
if(csvIDs) {
|
||
|
$('deletedrafts_options').elements.csvIDs.value = csvIDs;
|
||
|
|
||
|
Ajax.SubmitForm('deletedrafts_options', null, {
|
||
|
onSuccess : function(response) {
|
||
|
Ajax.Evaluator(response);
|
||
|
|
||
|
var sel;
|
||
|
if((sel = $('sitetree').selected) && sel.parentNode) sel.addNodeClass('current');
|
||
|
// else $('Form_EditForm').innerHTML = "";
|
||
|
|
||
|
treeactions.closeSelection($('deletedrafts'));
|
||
|
},
|
||
|
onFailure : function(response) {
|
||
|
errorMessage('Error deleting drafts', response);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$('deletedrafts').getElementsByTagName('a')[0].onclick();
|
||
|
|
||
|
} else {
|
||
|
alert("Please select at least 1 page.");
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
treeSelectionChanged : function(selectedNode) {
|
||
|
var idx = $('sitetree').getIdxOf(selectedNode);
|
||
|
|
||
|
if( !deletedraft.selectedNodes )
|
||
|
deletedraft.selectedNodes = {};
|
||
|
|
||
|
if(selectedNode.className.indexOf('nodelete') == -1) {
|
||
|
if(selectedNode.selected) {
|
||
|
selectedNode.removeNodeClass('selected');
|
||
|
selectedNode.selected = false;
|
||
|
deletedraft.selectedNodes[idx] = false;
|
||
|
|
||
|
} else {
|
||
|
selectedNode.addNodeClass('selected');
|
||
|
selectedNode.selected = true;
|
||
|
deletedraft.selectedNodes[idx] = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SiteTreeNode.prototype.onselect = function() {
|
||
|
$('sitetree').changeCurrentTo(this);
|
||
|
if($('sitetree').notify('SelectionChanged', this)) {
|
||
|
if(typeof save != 'undefined'){
|
||
|
autoSave(true, this.getPageFromServer.bind(this));
|
||
|
}
|
||
|
else {
|
||
|
this.getPageFromServer();
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
};
|
||
|
|
||
|
SiteTreeNode.prototype.getPageFromServer = function() {
|
||
|
|
||
|
var match = this.id.match(/(mailtype|drafts|draft|sent|recipients)_([\d]+)$/);
|
||
|
var openTabName = null;
|
||
|
var currentPageID = null;
|
||
|
|
||
|
if( $('Form_EditForm_ID') )
|
||
|
currentPageID = $('Form_EditForm_ID').value;
|
||
|
|
||
|
var newPageID = null;
|
||
|
var otherID = null;
|
||
|
var type = null;
|
||
|
|
||
|
var forceReload = $('Form_EditForm_Type') && $('Form_EditForm_Type').value == 'Newsletter';
|
||
|
|
||
|
if( match ) {
|
||
|
|
||
|
// open the appropriate tab
|
||
|
switch( match[1] ) {
|
||
|
case 'recipients':
|
||
|
openTabName = 'Root_Recipients_set_Recipients';
|
||
|
break;
|
||
|
case 'drafts':
|
||
|
openTabName = 'Root_Drafts';
|
||
|
break;
|
||
|
case 'sent':
|
||
|
openTabName = 'Root_Sent_set_Sent';
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
newPageID = match[2];
|
||
|
type = match[1];
|
||
|
} else if(this.id.match(/(mailtype|drafts|draft|sent|recipients)_([\d]+)_([\d]+)$/)) {
|
||
|
newPageID = RegExp.$2;
|
||
|
type = RegExp.$1;
|
||
|
otherID = RegExp.$3;
|
||
|
forceReload = true;
|
||
|
}
|
||
|
|
||
|
if( forceReload || currentPageID != newPageID )
|
||
|
$('Form_EditForm').getPageFromServer(newPageID, type, otherID, openTabName);
|
||
|
else
|
||
|
openTab( openTabName );
|
||
|
};
|
||
|
|
||
|
function draft_sent_ok( newsletterID, draftID ) {
|
||
|
var draftsListNode = $('drafts_' + newsletterID);
|
||
|
var sentListNode = $('sent_' + newsletterID);
|
||
|
var draftNode = $('draft_' + newsletterID + '_' + draftID );
|
||
|
|
||
|
draftsListNode.removeTreeNode( draftNode );
|
||
|
draftNode.id = 'sent_' + newsletterID + '_' + draftID;
|
||
|
sentListNode.appendTreeNode( draftNode, null );
|
||
|
statusMessage('Sent email to mailing list', 'good');
|
||
|
}
|
||
|
|
||
|
function resent_ok( newsletterID, sentID ) {
|
||
|
statusMessage('Resent email to mailing list', 'good');
|
||
|
}
|
||
|
|
||
|
function reloadSiteTree() {
|
||
|
|
||
|
new Ajax.Request( 'admin/newsletter/getsitetree', {
|
||
|
method: get,
|
||
|
onSuccess: function( response ) {
|
||
|
$('sitetree_holder').innerHTML = response.responseText;
|
||
|
},
|
||
|
onFailure: function( response ) {
|
||
|
|
||
|
}
|
||
|
});
|
||
|
|
||
|
}
|
||
|
|
||
|
_HANDLER_FORMS['addtype'] = 'addtype_options';
|
||
|
_HANDLER_FORMS['deletedrafts'] = 'deletedrafts_options';
|
||
|
|
||
|
AddForm = Class.extend('addpage');
|
||
|
AddForm.applyTo('#addtype');
|
||
|
AddForm.prototype = {
|
||
|
initialize: function () {
|
||
|
Observable.applyTo($(_HANDLER_FORMS[this.id]));
|
||
|
this.getElementsByTagName('a')[0].onclick = returnFalse;
|
||
|
$(_HANDLER_FORMS[this.id]).onsubmit = this.form_submit;
|
||
|
},
|
||
|
|
||
|
form_submit : function() {
|
||
|
var st = $('sitetree');
|
||
|
|
||
|
if( st.selected.length )
|
||
|
selectedNode = st.selected[0];
|
||
|
else
|
||
|
selectedNode = st.selected;
|
||
|
|
||
|
var parentID = null;
|
||
|
|
||
|
while( selectedNode && !parentID ) {
|
||
|
if( selectedNode && selectedNode.id && selectedNode.id.match(/mailtype_([0-9a-z\-]+)$/) )
|
||
|
parentID = RegExp.$1;
|
||
|
else
|
||
|
selectedNode = selectedNode.parentNode;
|
||
|
}
|
||
|
|
||
|
if(parentID && parentID.substr(0,3) == 'new') {
|
||
|
alert("You have to save a page before adding children underneath it");
|
||
|
|
||
|
} else {
|
||
|
|
||
|
this.elements.ParentID.value = parentID;
|
||
|
|
||
|
var type = 'draft';
|
||
|
var selectIDPrefix = 'draft_' + parentID + '_';
|
||
|
|
||
|
if( $('add_type').value == 'type' ) {
|
||
|
type = 'type';
|
||
|
selectIDPrefix = 'mailtype_';
|
||
|
}
|
||
|
|
||
|
var request = new Ajax.Request( this.action + '?ajax=1&PageType=' + type + '&ParentID=' + parentID, {
|
||
|
method: 'get',
|
||
|
asynchronous: true,
|
||
|
onSuccess : function( response ) {
|
||
|
|
||
|
$('Form_EditForm').loadNewPage(response.responseText);
|
||
|
|
||
|
// create a new node and add it to the site tree
|
||
|
if( type == 'draft' ) {
|
||
|
$('sitetree').addDraftNode('New draft newsletter', parentID, $('Form_EditForm_ID').value );
|
||
|
} else {
|
||
|
$('sitetree').addTypeNode('New newsletter type', $('Form_EditForm_ID').value );
|
||
|
}
|
||
|
|
||
|
statusMessage('Added new ' + type);
|
||
|
},
|
||
|
|
||
|
onFailure : function(response) {
|
||
|
alert(response.responseText);
|
||
|
statusMessage('Could not add new ' + type );
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
reloadSiteTree: function( response ) {
|
||
|
statusMessage('Added new newsletter type', 'good' );
|
||
|
$('sitetree_holder').innerHTML = response.responseText;
|
||
|
Behaviour.apply( $('sitetree_holder') );
|
||
|
},
|
||
|
|
||
|
button_onclick : function() {
|
||
|
if(treeactions.toggleSelection(this)) {
|
||
|
var selectedNode = $('sitetree').firstSelected();
|
||
|
if(selectedNode) {
|
||
|
while(selectedNode.parentTreeNode && !selectedNode.hints.defaultChild) {
|
||
|
$('sitetree').changeCurrentTo(selectedNode.parentTreeNode);
|
||
|
selectedNode = selectedNode.parentTreeNode;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.o1 = $('sitetree').observeMethod('SelectionChanged', this.treeSelectionChanged.bind(this));
|
||
|
this.o2 = $(_HANDLER_FORMS[this.id]).observeMethod('Close', this.popupClosed.bind(this));
|
||
|
}
|
||
|
return false;
|
||
|
},
|
||
|
|
||
|
treeSelectionChanged: function( treeNode ) {
|
||
|
this.selected = treeNode;
|
||
|
},
|
||
|
|
||
|
popupClosed: function() {
|
||
|
$('sitetree').stopObserving(this.o1);
|
||
|
$(_HANDLER_FORMS.addtype).stopObserving(this.o2);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function removeTreeNodeByIdx( tree, nodeID ) {
|
||
|
var node = tree.getTreeNodeByIdx( nodeID );
|
||
|
if( node )
|
||
|
if( node.parentTreeNode )
|
||
|
node.parentTreeNode.removeTreeNode( node );
|
||
|
else
|
||
|
$('sitetree').removeTreeNode( node );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Initialisation function to set everything up
|
||
|
*/
|
||
|
Behaviour.addLoader(function () {
|
||
|
// Set up add draft
|
||
|
Observable.applyTo($('addtype_options'));
|
||
|
|
||
|
if( $('addtype') ) {
|
||
|
if( AddForm.button_click )
|
||
|
$('addtype').getElementsByTagName('a')[0].onclick = function() {return false;};
|
||
|
if( AddForm.button_click )
|
||
|
$('addtype_options').onsubmit = AddForm.form_submit;
|
||
|
}
|
||
|
// Set up delete drafts
|
||
|
Observable.applyTo($('deletedrafts_options'));
|
||
|
|
||
|
var deleteDrafts = $('deletedrafts');
|
||
|
|
||
|
if( deleteDrafts ) {
|
||
|
deleteDrafts.onclick = deletedraft.button_onclick;
|
||
|
deleteDrafts.getElementsByTagName('a')[0].onclick = function() {return false;};
|
||
|
$('deletedrafts_options').onsubmit = deletedraft.form_submit;
|
||
|
}
|
||
|
});
|