2007-07-19 12:40:05 +02:00
/ * *
* 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/' ;
2007-09-04 06:12:30 +02:00
SiteTreeHandlers . controller _url = 'admin/assets' ;
2007-07-19 12:40:05 +02:00
var _HANDLER _FORMS = {
2009-11-21 04:19:05 +01:00
addpage : 'Form_AddForm' ,
2009-01-06 03:18:33 +01:00
deletepage : 'Form_DeleteItemsForm' ,
2007-07-19 12:40:05 +02:00
sortitems : 'sortitems_options'
} ;
2009-11-21 04:18:25 +01:00
( function ( $ ) {
2009-11-21 04:19:14 +01:00
$ ( '.AssetAdmin' ) . concrete ( 'ss' , function ( $ ) {
return {
onmatch : function ( ) {
this . _super ( ) ;
}
} ;
} ) ;
/ * *
* Delete selected folders through "batch actions" tab .
* /
$ ( '#Form_BatchActionsForm' ) . concrete ( 'ss' ) . register (
'admin/assets/batchactions/delete' ,
function ( ids ) {
var confirmed = confirm (
ss . i18n . sprintf (
ss . i18n . _t (
'AssetAdmin.BATCHACTIONSDELETECONFIRM' ,
"Do you really want to delete %d folders?"
) ,
ids . length
)
) ;
return ( confirmed ) ? ids : false ;
}
) ;
2009-11-21 04:18:25 +01:00
/ * *
2009-11-21 04:19:05 +01:00
* @ 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
2009-11-21 04:18:25 +01:00
* /
2009-11-21 04:19:05 +01:00
$ ( '#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 : [ ] ,
2009-11-21 04:18:25 +01:00
onmatch : function ( ) {
2009-11-21 04:19:05 +01:00
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 ;
2009-11-21 04:18:25 +01:00
2009-11-21 04:19:05 +01:00
// 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 ;
2007-09-15 22:47:35 +02:00
}
2009-11-21 04:18:25 +01:00
} ;
} ) ;
2007-07-19 12:40:05 +02:00
2009-11-21 04:19:05 +01:00
$ ( '#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 ;
2007-07-19 12:40:05 +02:00
}
2009-11-21 04:19:05 +01:00
} ;
} ) ;
$ ( '#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 ) ;
2007-07-19 12:40:05 +02:00
2009-11-21 04:19:05 +01:00
jQuery ( '#sitetree' ) . addClass ( 'multiselect' ) ;
2007-07-19 12:40:05 +02:00
2009-11-21 04:19:05 +01:00
deletefolder . selectedNodes = { } ;
2007-07-19 12:40:05 +02:00
2009-11-21 04:19:05 +01:00
var sel = $ ( 'sitetree' ) . firstSelected ( )
if ( sel ) {
var selIdx = $ ( 'sitetree' ) . getIdxOf ( sel ) ;
deletefolder . selectedNodes [ selIdx ] = true ;
sel . removeNodeClass ( 'current' ) ;
sel . addNodeClass ( 'selected' ) ;
}
}
}
} ;
} ) ;
} ( jQuery ) ) ;
2007-07-19 12:40:05 +02:00
/ * *
* Delete folder action
* /
deletefolder = {
button _onclick : function ( ) {
2009-11-21 04:19:05 +01:00
2007-07-19 12:40:05 +02:00
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 ( ) {
2009-11-21 03:37:27 +01:00
jQuery ( '#sitetree' ) . removeClass ( 'multiselect' ) ;
2007-07-19 12:40:05 +02:00
$ ( 'sitetree' ) . stopObserving ( deletefolder . o1 ) ;
2009-01-06 03:18:33 +01:00
$ ( 'Form_DeleteItemsForm' ) . stopObserving ( deletefolder . o2 ) ;
2007-07-19 12:40:05 +02:00
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 ) {
2009-01-06 03:18:33 +01:00
$ ( 'Form_DeleteItemsForm' ) . elements . csvIDs . value = csvIDs ;
2007-07-19 12:40:05 +02:00
statusMessage ( 'deleting pages' ) ;
2009-01-06 03:18:33 +01:00
Ajax . SubmitForm ( 'Form_DeleteItemsForm' , null , {
2007-07-19 12:40:05 +02:00
onSuccess : deletefolder . submit _success ,
onFailure : function ( response ) {
errorMessage ( 'Error deleting pages' , response ) ;
}
} ) ;
2007-09-15 03:01:24 +02:00
$ ( 'deletepage' ) . getElementsByTagName ( 'button' ) [ 0 ] . onclick ( ) ;
2007-07-19 12:40:05 +02:00
} 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 ) {
2009-11-21 03:35:54 +01:00
// Send request
new Ajax . Request ( this . href + ( this . href . indexOf ( "?" ) == - 1 ? "?" : "&" ) + "ajax=1" , {
method : 'get' ,
onSuccess : Ajax . Evaluator ,
2009-11-21 04:16:21 +01:00
onFailure : function ( response ) { errorMessage ( 'Server Error' , response ) ; }
2009-11-21 03:35:54 +01:00
} ) ;
2007-07-19 12:40:05 +02:00
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
* /
2009-11-21 03:37:27 +01:00
jQuery ( document ) . ready ( function ( ) {
2007-07-19 12:40:05 +02:00
// Set up delete page
2009-01-06 03:18:33 +01:00
Observable . applyTo ( $ ( 'Form_DeleteItemsForm' ) ) ;
2007-07-19 12:40:05 +02:00
if ( $ ( 'deletepage' ) ) {
$ ( 'deletepage' ) . onclick = deletefolder . button _onclick ;
2007-09-15 03:01:24 +02:00
$ ( 'deletepage' ) . getElementsByTagName ( 'button' ) [ 0 ] . onclick = function ( ) { return false ; } ;
2009-01-06 03:18:33 +01:00
$ ( 'Form_DeleteItemsForm' ) . onsubmit = deletefolder . form _submit ;
Element . hide ( 'Form_DeleteItemsForm' ) ;
2007-07-19 12:40:05 +02:00
}
2008-04-26 08:40:29 +02:00
2009-11-21 04:18:08 +01:00
} ) ;