mirror of
https://github.com/silverstripe/silverstripe-reports
synced 2024-10-22 09:05:53 +00:00
ENHANCEMENT Moved 'Sync files' action in AssetAdmin from toplevel tab to the bottom of the tree and hooked up to AssetAdmin->SyncForm to avoid hardcoding the URL. ENHANCEMENT Changed AssetAdmin interface 'create' button to show dialog and 'go' button, and behave similar to the main CMS interface git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@92802 467b73ca-7a2a-4603-9d3b-597d59a354a9
287 lines
7.2 KiB
JavaScript
Executable File
287 lines
7.2 KiB
JavaScript
Executable File
/**
|
|
* Configuration for the left hand tree
|
|
*/
|
|
if(typeof SiteTreeHandlers == 'undefined') SiteTreeHandlers = {};
|
|
SiteTreeHandlers.parentChanged_url = 'admin/assets/ajaxupdateparent';
|
|
SiteTreeHandlers.orderChanged_url = 'admin/assets/ajaxupdatesort';
|
|
SiteTreeHandlers.loadPage_url = 'admin/assets/getitem';
|
|
SiteTreeHandlers.loadTree_url = 'admin/assets/getsubtree';
|
|
SiteTreeHandlers.showRecord_url = 'admin/assets/show/';
|
|
SiteTreeHandlers.controller_url = 'admin/assets';
|
|
|
|
var _HANDLER_FORMS = {
|
|
addpage : 'Form_AddForm',
|
|
deletepage : 'Form_DeleteItemsForm',
|
|
sortitems : 'sortitems_options'
|
|
};
|
|
|
|
(function($) {
|
|
/**
|
|
* @class Simple form with a page type dropdown
|
|
* which creates a new page through #Form_EditForm and adds a new tree node.
|
|
* @name ss.Form_AddForm
|
|
* @requires ss.i18n
|
|
* @requires ss.Form_EditForm
|
|
*/
|
|
$('#Form_AddForm').concrete(function($) {
|
|
return/** @lends ss.Form_AddForm */{
|
|
/**
|
|
* @type DOMElement
|
|
*/
|
|
Tree: null,
|
|
|
|
/**
|
|
* @type Array Internal counter to create unique page identifiers prior to ajax saving
|
|
*/
|
|
_NewPages: [],
|
|
|
|
onmatch: function() {
|
|
var self = this;
|
|
|
|
this.bind('submit', function(e) {
|
|
return self._submit(e);
|
|
});
|
|
|
|
Observable.applyTo(this[0]);
|
|
|
|
var tree = jQuery('#sitetree')[0];
|
|
this.setTree(tree);
|
|
},
|
|
|
|
_submit: function(e) {
|
|
var newPages = this._NewPages();
|
|
var tree = this.Tree();
|
|
var parentID = (tree.firstSelected()) ? tree.getIdxOf(tree.firstSelected()) : 0;
|
|
|
|
// TODO: Remove 'new-' code http://open.silverstripe.com/ticket/875
|
|
if(parentID && parentID.substr(0,3) == 'new') {
|
|
alert(ss.i18n._t('CMSMAIN.WARNINGSAVEPAGESBEFOREADDING'));
|
|
}
|
|
|
|
if(tree.firstSelected() && jQuery(tree.firstSelected()).hasClass("nochildren")) {
|
|
alert(ss.i18n._t('CMSMAIN.CANTADDCHILDREN') );
|
|
}
|
|
|
|
// Optionally initalize the new pages tracker
|
|
if(!newPages[parentID] ) newPages[parentID] = 1;
|
|
|
|
// default to first button
|
|
var button = jQuery(this).find(':submit:first');
|
|
button.addClass('loading');
|
|
|
|
// collect data and submit the form
|
|
var data = jQuery(this).serializeArray();
|
|
data.push({name:'Suffix',value:newPages[parentID]++});
|
|
data.push({name:button.attr('name'),value:button.val()});
|
|
jQuery('#Form_EditForm').concrete('ss').loadForm(
|
|
jQuery(this).attr('action'),
|
|
function() {
|
|
button.removeClass('loading');
|
|
},
|
|
{type: 'POST', data: data}
|
|
);
|
|
|
|
this.set_NewPages(newPages);
|
|
|
|
return false;
|
|
}
|
|
};
|
|
});
|
|
|
|
$('#Form_SyncForm').concrete('ss', function($) {
|
|
return {
|
|
onmatch: function() {
|
|
this.bind('submit', this._onsubmit);
|
|
this._super();
|
|
},
|
|
_onsubmit: function(e) {
|
|
var button = jQuery(this).find(':submit:first');
|
|
button.addClass('loading');
|
|
$.get(
|
|
jQuery(this).attr('action'),
|
|
function() {
|
|
button.removeClass('loading');
|
|
}
|
|
);
|
|
|
|
return false;
|
|
}
|
|
};
|
|
});
|
|
|
|
$('#Form_DeleteItemsForm').concrete('ss', function($) {
|
|
return {
|
|
onmatch: function() {
|
|
$('#TreeActions').bind('tabsselect', function(e, ui) {
|
|
if($(ui.tab).attr('id') == 'TreeActions-delete-btn') {
|
|
|
|
}
|
|
});
|
|
},
|
|
/**
|
|
* @param {Boolean}
|
|
*/
|
|
toggleTree: function(bool) {
|
|
if(bool) {
|
|
deletefolder.o1 = $('sitetree').observeMethod('SelectionChanged', deletefolder.treeSelectionChanged);
|
|
deletefolder.o2 = $('Form_DeleteItemsForm').observeMethod('Close', deletefolder.popupClosed);
|
|
|
|
jQuery('#sitetree').addClass('multiselect');
|
|
|
|
deletefolder.selectedNodes = { };
|
|
|
|
var sel = $('sitetree').firstSelected()
|
|
if(sel) {
|
|
var selIdx = $('sitetree').getIdxOf(sel);
|
|
deletefolder.selectedNodes[selIdx] = true;
|
|
sel.removeNodeClass('current');
|
|
sel.addNodeClass('selected');
|
|
}
|
|
}
|
|
}
|
|
|
|
};
|
|
});
|
|
}(jQuery));
|
|
|
|
/**
|
|
* Delete folder action
|
|
*/
|
|
deletefolder = {
|
|
button_onclick : function() {
|
|
|
|
return false;
|
|
},
|
|
|
|
treeSelectionChanged : function(selectedNode) {
|
|
var idx = $('sitetree').getIdxOf(selectedNode);
|
|
|
|
if(selectedNode.selected) {
|
|
selectedNode.removeNodeClass('selected');
|
|
selectedNode.selected = false;
|
|
deletefolder.selectedNodes[idx] = false;
|
|
|
|
} else {
|
|
selectedNode.addNodeClass('selected');
|
|
selectedNode.selected = true;
|
|
deletefolder.selectedNodes[idx] = true;
|
|
}
|
|
|
|
return false;
|
|
},
|
|
|
|
popupClosed : function() {
|
|
jQuery('#sitetree').removeClass('multiselect');
|
|
$('sitetree').stopObserving(deletefolder.o1);
|
|
$('Form_DeleteItemsForm').stopObserving(deletefolder.o2);
|
|
|
|
for(var idx in deletefolder.selectedNodes) {
|
|
if(deletefolder.selectedNodes[idx]) {
|
|
node = $('sitetree').getTreeNodeByIdx(idx);
|
|
if(node) {
|
|
node.removeNodeClass('selected');
|
|
node.selected = false;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
form_submit : function() {
|
|
var csvIDs = "";
|
|
for(var idx in deletefolder.selectedNodes) {
|
|
var selectedNode = $('sitetree').getTreeNodeByIdx(idx);
|
|
var link = selectedNode.getElementsByTagName('a')[0];
|
|
|
|
if(deletefolder.selectedNodes[idx] && ( !Element.hasClassName( link, 'contents' ) || confirm( "'" + link.firstChild.nodeValue + "' contains files. Would you like to delete the files and folder?" ) ) )
|
|
csvIDs += (csvIDs ? "," : "") + idx;
|
|
}
|
|
|
|
if(csvIDs) {
|
|
$('Form_DeleteItemsForm').elements.csvIDs.value = csvIDs;
|
|
|
|
statusMessage('deleting pages');
|
|
|
|
Ajax.SubmitForm('Form_DeleteItemsForm', null, {
|
|
onSuccess : deletefolder.submit_success,
|
|
onFailure : function(response) {
|
|
errorMessage('Error deleting pages', response);
|
|
}
|
|
});
|
|
|
|
$('deletepage').getElementsByTagName('button')[0].onclick();
|
|
|
|
} else {
|
|
alert("Please select at least 1 page.");
|
|
}
|
|
|
|
return false;
|
|
},
|
|
|
|
submit_success: function(response) {
|
|
Ajax.Evaluator(response);
|
|
treeactions.closeSelection($('deletepage'));
|
|
}
|
|
}
|
|
|
|
Behaviour.register({
|
|
'#Form_EditForm_Files': {
|
|
removeFile : function(fileID) {
|
|
var record;
|
|
if(record = $('record-' + fileID)) {
|
|
record.parentNode.removeChild(record);
|
|
}
|
|
}
|
|
},
|
|
|
|
'#Form_EditForm_Files a.deletelink' : {
|
|
onclick : function(event) {
|
|
// Send request
|
|
new Ajax.Request(this.href + (this.href.indexOf("?") == -1 ? "?" : "&") + "ajax=1", {
|
|
method : 'get',
|
|
onSuccess : Ajax.Evaluator,
|
|
onFailure : function(response) {errorMessage('Server Error', response);}
|
|
});
|
|
Event.stop(event);
|
|
return false;
|
|
}
|
|
},
|
|
|
|
|
|
'#Form_EditForm' : {
|
|
changeDetection_fieldsToIgnore : {
|
|
'Files[]' : true
|
|
}
|
|
}
|
|
});
|
|
|
|
/**
|
|
* We don't want hitting the enter key in the name field
|
|
* to submit the form.
|
|
*/
|
|
Behaviour.register({
|
|
'#Form_EditForm_Name' : {
|
|
onkeypress : function(event) {
|
|
event = (event) ? event : window.event;
|
|
var kc = event.keyCode ? event.keyCode : event.charCode;
|
|
if(kc == 13) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Initialisation function to set everything up
|
|
*/
|
|
jQuery(document).ready(function() {
|
|
// Set up delete page
|
|
Observable.applyTo($('Form_DeleteItemsForm'));
|
|
if($('deletepage')) {
|
|
$('deletepage').onclick = deletefolder.button_onclick;
|
|
$('deletepage').getElementsByTagName('button')[0].onclick = function() { return false; };
|
|
$('Form_DeleteItemsForm').onsubmit = deletefolder.form_submit;
|
|
Element.hide('Form_DeleteItemsForm');
|
|
}
|
|
|
|
new CheckBoxRange($('Form_EditForm'), 'Files[]');
|
|
}); |