1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-16 11:37:58 +02:00
Sonarr/UI/Shared/Toolbar/Button/ButtonView.js

104 lines
2.9 KiB
JavaScript
Raw Normal View History

2013-06-22 09:24:24 +03:00
'use strict';
2013-06-24 07:28:18 +03:00
define(['app', 'Config', 'Commands/CommandController', 'Shared/Messenger'],
function (App,
Config,
CommandController,
Messenger) {
2013-05-11 23:51:32 +03:00
2013-06-24 07:28:18 +03:00
return Backbone.Marionette.ItemView.extend({
2013-05-11 23:51:32 +03:00
template : 'Shared/Toolbar/ButtonTemplate',
className: 'btn',
events: {
'click': 'onClick'
},
2013-05-12 02:39:32 +03:00
ui: {
icon: '.x-icon'
},
2013-05-11 23:51:32 +03:00
initialize: function () {
this.storageKey = this.model.get('menuKey') + ':' + this.model.get('key');
2013-05-12 02:39:32 +03:00
this.idle = true;
2013-05-11 23:51:32 +03:00
},
onRender: function () {
if (this.model.get('active')) {
this.$el.addClass('active');
this.invokeCallback();
}
},
onClick: function () {
2013-05-12 02:39:32 +03:00
if (this.idle) {
this.invokeCallback();
this.invokeRoute();
this.invokeCommand();
}
2013-05-11 23:51:32 +03:00
},
invokeCommand: function () {
var command = this.model.get('command');
if (command) {
2013-05-12 02:39:32 +03:00
this.idle = false;
this.$el.addClass('disabled');
this.ui.icon.addClass('icon-spinner icon-spin');
var self = this;
2013-06-24 07:28:18 +03:00
var commandPromise = CommandController.Execute(command);
2013-05-12 02:39:32 +03:00
commandPromise.done(function () {
if (self.model.get('successMessage')) {
2013-06-24 07:28:18 +03:00
Messenger.show({
2013-05-12 02:39:32 +03:00
message: self.model.get('successMessage')
});
}
});
commandPromise.fail(function (options) {
if (options.readyState === 0 || options.status === 0) {
return;
}
2013-05-12 02:39:32 +03:00
if (self.model.get('errorMessage')) {
2013-06-24 07:28:18 +03:00
Messenger.show({
2013-05-12 02:39:32 +03:00
message: self.model.get('errorMessage'),
type : 'error'
});
}
});
commandPromise.always(function () {
if (!self.isClosed) {
self.$el.removeClass('disabled');
self.ui.icon.removeClass('icon-spinner icon-spin');
self.idle = true;
}
2013-05-12 02:39:32 +03:00
});
2013-05-11 23:51:32 +03:00
}
},
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);
}
}
});
});