"use strict" ;
define ( [ 'app' , 'Config' , 'Commands/CommandController' , 'Shared/Messenger' ] , function ( ) {
NzbDrone . Shared . Toolbar . ButtonView = Backbone . Marionette . ItemView . extend ( {
template : 'Shared/Toolbar/ButtonTemplate' ,
className : 'btn' ,
events : {
'click' : 'onClick'
} ,
ui : {
icon : '.x-icon'
} ,
initialize : function ( ) {
this . storageKey = this . model . get ( 'menuKey' ) + ':' + this . model . get ( 'key' ) ;
this . idle = true ;
} ,
onRender : function ( ) {
if ( this . model . get ( 'active' ) ) {
this . $el . addClass ( 'active' ) ;
this . invokeCallback ( ) ;
}
} ,
onClick : function ( ) {
if ( this . idle ) {
this . invokeCallback ( ) ;
this . invokeRoute ( ) ;
this . invokeCommand ( ) ;
}
} ,
invokeCommand : function ( ) {
var command = this . model . get ( 'command' ) ;
if ( command ) {
this . idle = false ;
this . $el . addClass ( 'disabled' ) ;
this . ui . icon . addClass ( 'icon-spinner icon-spin' ) ;
var self = this ;
var commandPromise = NzbDrone . Commands . Execute ( command ) ;
commandPromise . done ( function ( ) {
if ( self . model . get ( 'successMessage' ) ) {
NzbDrone . Shared . Messenger . show ( {
message : self . model . get ( 'successMessage' )
} ) ;
}
} ) ;
commandPromise . fail ( function ( ) {
if ( self . model . get ( 'errorMessage' ) ) {
NzbDrone . Shared . Messenger . show ( {
message : self . model . get ( 'errorMessage' ) ,
type : 'error'
} ) ;
}
} ) ;
commandPromise . always ( function ( ) {
self . $el . removeClass ( 'disabled' ) ;
self . ui . icon . removeClass ( 'icon-spinner icon-spin' ) ;
self . idle = true ;
} ) ;
}
} ,
invokeRoute : function ( ) {
var route = this . model . get ( 'route' ) ;
if ( route ) {
NzbDrone . Router . navigate ( route , { trigger : true } ) ;
}
} ,
invokeCallback : function ( ) {
if ( ! this . model . ownerContext ) {
throw 'ownerContext must be set.' ;
}
var callback = this . model . get ( 'callback' ) ;
if ( callback ) {
callback . call ( this . model . ownerContext ) ;
}
}
} ) ;
} ) ;