2011-03-23 10:51:00 +01:00
/ * *
* File : AssetTableField . js
* /
( function ( $ ) {
$ . entwine ( 'ss' , function ( $ ) {
/ * *
* Class : . AssetTableField
* /
$ ( '.AssetTableField' ) . entwine ( {
// Constructor: onmatch
onmatch : function ( ) {
var self = this ;
// search button
this . find ( 'input#FileFilterButton' ) . click ( function ( e ) {
var btn = $ ( this ) ;
$ ( this ) . addClass ( 'loading' ) ;
self . refresh ( function ( ) { btn . removeClass ( 'loading' ) ; } ) ;
return false ;
} ) ;
// clear button
this . find ( 'input#FileFilterClearButton' ) . click ( function ( e ) {
self . find ( 'input#FileSearch' ) . val ( '' ) ;
self . find ( 'input#FileFilterButton' ) . click ( ) ;
return false ;
} ) ;
// search field
this . find ( 'input#FileSearch' ) . keypress ( function ( e ) {
if ( e . keyCode == $ . ui . keyCode . ENTER ) {
self . find ( 'input#FileFilterButton' ) . click ( ) ;
}
} ) ;
this . _super ( ) ;
} ,
/ * *
* Function : refresh
*
* Parameters :
* ( Function ) callback
* /
refresh : function ( callback ) {
var self = this ;
this . load (
this . attr ( 'href' ) ,
this . find ( ':input' ) . serialize ( ) ,
function ( response , status , xmlhttp ) {
Behaviour . apply ( self [ 0 ] , true ) ;
if ( callback ) callback . apply ( arguments ) ;
}
) ;
}
} ) ;
/ * *
* Class : . AssetTableField : checkbox
*
* Checkboxes used to batch delete files
* /
$ ( '.AssetTableField :checkbox' ) . entwine ( {
// Function: onchange
onchange : function ( ) {
var container = this . parents ( '.AssetTableField' ) ;
var input = container . find ( 'input#deletemarked' ) ;
if ( container . find ( ':input[name=Files\[\]]:checked' ) . length ) {
input . removeAttr ( 'disabled' ) ;
} else {
input . attr ( 'disabled' , 'disabled' ) ;
}
}
} )
/ * *
* Class : . AssetTableField input # deletemarked
*
* Batch delete files marked by checkboxes in the table .
* Refreshes the form field afterwards via ajax .
* /
$ ( '.AssetTableField input#deletemarked' ) . entwine ( {
// Constructor: onmatch
onmatch : function ( ) {
this . attr ( 'disabled' , 'disabled' ) ;
this . _super ( ) ;
} ,
/ * *
* Function : onclick
*
* Parameters :
* ( Event ) e
* /
onclick : function ( e ) {
if ( ! confirm ( ss . i18n . _t ( 'AssetTableField.REALLYDELETE' ) ) ) return false ;
var container = this . parents ( '.AssetTableField' ) ;
var self = this ;
this . addClass ( 'loading' ) ;
$ . post (
container . attr ( 'href' ) + '/deletemarked' ,
this . parents ( 'form' ) . serialize ( ) ,
function ( data , status ) {
self . removeClass ( 'loading' ) ;
container . refresh ( ) ;
}
) ;
return false ;
}
} ) ;
} ) ;
} ( jQuery ) ) ;
// TODO Implementation in Behaviour instead of entwine is necessary to overload TableListField
var AssetTableField = Class . create ( ) ;
AssetTableField . applyTo ( '#Form_EditForm_Files' ) ;
AssetTableField . prototype = {
initialize : function ( ) {
var rules = { } ;
rules [ '#' + this . id + ' table.data a.deletelink' ] = { onclick : this . deleteRecord . bind ( this ) } ;
Behaviour . register ( 'ComplexTableField_' + this . id , rules ) ;
} ,
deleteRecord : function ( e ) {
2011-04-19 11:18:35 +02:00
var self = this , img = Event . element ( e ) , link = Event . findElement ( e , "a" ) , row = Event . findElement ( e , "tr" ) ;
2011-03-23 10:51:00 +01:00
var linkCount = row . getElementsByClassName ( 'linkCount' ) [ 0 ] ;
if ( linkCount ) linkCount = linkCount . innerHTML ;
var confirmMessage = ss . i18n . _t ( 'TABLEFIELD.DELETECONFIRMMESSAGE' , 'Are you sure you want to delete this record?' ) ;
if ( linkCount && linkCount > 0 ) confirmMessage += '\nThere are ' + linkCount + ' page(s) that use this file, please review the list of pages on the Links tab of the file before continuing.' ;
// TODO ajaxErrorHandler and loading-image are dependent on cms, but formfield is in sapphire
var confirmed = confirm ( confirmMessage ) ;
if ( confirmed )
{
2011-03-29 10:34:26 +02:00
img . setAttribute ( "src" , 'sapphire/admin/images/network-save.gif' ) ; // TODO doesn't work
2011-04-19 11:18:35 +02:00
jQuery . ajax ( {
url : link . getAttribute ( "href" ) ,
method : 'post' ,
data : { forceajax : 1 , SecurityID : jQuery ( 'input[name=SecurityID]' ) . val ( ) } ,
success : function ( ) {
jQuery ( row ) . fadeOut ( 'fast' , function ( ) {
// remove row from DOM
this . element . parentNode . removeChild ( obj . element ) ;
// recalculate summary if needed (assumes that TableListField.js is present)
// TODO Proper inheritance
if ( self . _summarise ) self . _summarise ( ) ;
// custom callback
if ( self . callback _deleteRecord ) self . callback _deleteRecord ( e ) ;
}
2011-03-23 10:51:00 +01:00
}
2011-04-19 11:18:35 +02:00
} ) ;
2011-03-23 10:51:00 +01:00
}
Event . stop ( e ) ;
}
} ;