'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', ui: { seasonSearch: '.x-season-search' }, events: { 'click .x-season-search': '_seasonSearch' }, regions: { episodeGrid: '#x-episode-grid' }, columns: [ { name : 'ignored', label : '', cell : ToggleCell, trueClass : 'icon-bookmark-empty', falseClass: 'icon-bookmark' }, { 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 } ], 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 }); }); }, onShow: function () { this.episodeGrid.show(new Backgrid.Grid({ columns : this.columns, collection: this.episodeCollection, className : 'table table-hover season-grid' })); }, _seasonSearch: function () { var command = 'seasonSearch'; this.idle = false; this.ui.seasonSearch.addClass('icon-spinner icon-spin'); 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 search failed', type : 'error' }); }); commandPromise.always(function () { if (!self.isClosed) { self.ui.seasonSearch.removeClass('icon-spinner icon-spin'); self.idle = true; } }); } }); });