sonarr-repo-only/UI/Series/Details/SeasonLayout.js

193 lines
6.5 KiB
JavaScript
Raw Normal View History

2013-06-25 04:43:16 +00:00
'use strict';
define(
[
'marionette',
'backgrid',
'Cells/ToggleCell',
'Cells/EpisodeTitleCell',
'Cells/AirDateCell',
'Cells/EpisodeStatusCell',
'Commands/CommandController',
'Shared/Messenger'
], function ( Marionette, Backgrid, ToggleCell, EpisodeTitleCell, AirDateCell, EpisodeStatusCell, CommandController, Messenger) {
return Marionette.Layout.extend({
template: 'Series/Details/SeasonLayoutTemplate',
2013-04-23 02:07:21 +00:00
2013-06-24 04:37:55 +00:00
ui: {
2013-07-10 02:11:00 +00:00
seasonSearch : '.x-season-search',
2013-07-19 05:23:04 +00:00
seasonMonitored: '.x-season-monitored',
seasonRename : '.x-season-rename'
2013-06-24 04:37:55 +00:00
},
events: {
2013-07-10 02:11:00 +00:00
'click .x-season-search' : '_seasonSearch',
2013-07-19 05:23:04 +00:00
'click .x-season-monitored': '_seasonMonitored',
'click .x-season-rename' : '_seasonRename'
2013-06-24 04:37:55 +00:00
},
regions: {
episodeGrid: '#x-episode-grid'
},
2013-04-23 02:07:21 +00:00
columns:
[
{
name : 'monitored',
label : '',
cell : ToggleCell,
trueClass : 'icon-bookmark',
falseClass: 'icon-bookmark-empty',
tooltip : 'Toggle monitored status'
},
{
name : 'episodeNumber',
label: '#',
cell : Backgrid.IntegerCell.extend({
className: 'episode-number-cell'
})
},
{
name : 'this',
label: 'Title',
cell : EpisodeTitleCell
},
{
name : 'airDate',
label: 'Air Date',
cell : AirDateCell
} ,
{
name : 'status',
label: 'Status',
cell : EpisodeStatusCell
}
],
2013-04-23 02:07:21 +00:00
initialize: function (options) {
if (!options.episodeCollection) {
throw 'episodeCollection is needed';
}
this.episodeCollection = options.episodeCollection.bySeason(this.model.get('seasonNumber'));
_.each(this.episodeCollection.models, function (episode) {
episode.set({ hideSeriesLink: true, series: options.series });
});
this.episodeCollection.on('sync', function () {
this.render();
}, this);
},
2013-04-23 02:07:21 +00:00
2013-07-10 02:11:00 +00:00
onRender: function () {
this.episodeGrid.show(new Backgrid.Grid({
columns : this.columns,
collection: this.episodeCollection,
className : 'table table-hover season-grid'
}));
2013-07-10 02:11:00 +00:00
this._setSeasonMonitoredState();
2013-06-24 04:37:55 +00:00
},
_seasonSearch: function () {
var command = 'seasonSearch';
this.idle = false;
this.ui.seasonSearch.addClass('icon-spinner icon-spin');
var properties = {
seriesId : this.model.get('seriesId'),
2013-06-24 04:37:55 +00:00
seasonNumber: this.model.get('seasonNumber')
};
var self = this;
var commandPromise = CommandController.Execute(command, properties);
2013-06-24 04:37:55 +00:00
commandPromise.fail(function (options) {
if (options.readyState === 0 || options.status === 0) {
return;
}
Messenger.show({
message: 'Season search failed',
type : 'error'
});
});
commandPromise.always(function () {
if (!self.isClosed) {
self.ui.seasonSearch.removeClass('icon-spinner icon-spin');
self.idle = true;
}
});
2013-07-10 02:11:00 +00:00
},
_seasonMonitored: function () {
var self = this;
var name = 'monitored';
this.model.set(name, !this.model.get(name));
this.ui.seasonMonitored.addClass('icon-spinner icon-spin');
var promise = this.model.save();
promise.always(function (){
_.each(self.episodeCollection.models, function (episode) {
episode.set({ monitored: !episode.get('monitored') });
});
self.render();
});
},
_setSeasonMonitoredState: function () {
this.ui.seasonMonitored.removeClass('icon-spinner icon-spin');
if (this.model.get('monitored')) {
this.ui.seasonMonitored.addClass('icon-bookmark');
this.ui.seasonMonitored.removeClass('icon-bookmark-empty');
}
else {
this.ui.seasonMonitored.addClass('icon-bookmark-empty');
this.ui.seasonMonitored.removeClass('icon-bookmark');
}
2013-07-19 05:23:04 +00:00
},
_seasonRename: function () {
var command = 'renameSeason';
this.idle = false;
this.ui.seasonRename.toggleClass('icon-nd-rename icon-nd-spinner');
var properties = {
seriesId : this.model.get('seriesId'),
seasonNumber: this.model.get('seasonNumber')
};
var self = this;
var commandPromise = CommandController.Execute(command, properties);
commandPromise.fail(function (options) {
if (options.readyState === 0 || options.status === 0) {
return;
}
Messenger.show({
message: 'Season rename failed',
type : 'error'
});
});
commandPromise.always(function () {
if (!self.isClosed) {
self.ui.seasonRename.toggleClass('icon-nd-rename icon-nd-spinner');
self.idle = true;
}
});
}
});
2013-04-23 02:07:21 +00:00
});