'use strict'; define( [ 'marionette', 'Series/Index/Posters/CollectionView', 'Series/Index/List/CollectionView', 'Series/Index/EmptyView', 'Series/SeriesCollection', 'Cells/RelativeDateCell', 'Cells/SeriesTitleCell', 'Cells/TemplatedCell', 'Cells/QualityProfileCell', 'Cells/EpisodeProgressCell', 'Shared/Grid/DateHeaderCell', 'Series/Index/Table/SeriesStatusCell', 'Series/Index/Table/Row', 'Series/Index/FooterView', 'Series/Index/FooterModel', 'Shared/Toolbar/ToolbarLayout' ], function (Marionette, PosterCollectionView, ListCollectionView, EmptyView, SeriesCollection, RelativeDateCell, SeriesTitleCell, TemplatedCell, QualityProfileCell, EpisodeProgressCell, DateHeaderCell, SeriesStatusCell, SeriesIndexRow, FooterView, FooterModel, ToolbarLayout) { return Marionette.Layout.extend({ template: 'Series/Index/SeriesIndexLayoutTemplate', regions: { seriesRegion: '#x-series', toolbar : '#x-toolbar', footer : '#x-series-footer' }, columns: [ { name : 'statusWeight', label : '', cell : SeriesStatusCell }, { name : 'title', label : 'Title', cell : SeriesTitleCell, cellValue: 'this' }, { name : 'seasonCount', label: 'Seasons', cell : 'integer' }, { name : 'qualityProfileId', label: 'Quality', cell : QualityProfileCell }, { name : 'network', label: 'Network', cell : 'string' }, { name : 'nextAiring', label : 'Next Airing', cell : RelativeDateCell, headerCell: DateHeaderCell }, { name : 'percentOfEpisodes', label : 'Episodes', cell : EpisodeProgressCell, className: 'episode-progress-cell' }, { name : 'this', label : '', sortable: false, template: 'Series/Index/Table/ControlsColumnTemplate', cell : TemplatedCell } ], leftSideButtons: { type : 'default', storeState: false, items : [ { title: 'Add Series', icon : 'icon-plus', route: 'addseries' }, { title : 'RSS Sync', icon : 'icon-rss', command : 'rsssync', successMessage: 'RSS Sync Completed', errorMessage : 'RSS Sync Failed!' }, { title : 'Update Library', icon : 'icon-refresh', command : 'refreshseries', successMessage: 'Library was updated!', errorMessage : 'Library update failed!' } ] }, _showTable: function () { this.currentView = new Backgrid.Grid({ row : SeriesIndexRow, collection: SeriesCollection, columns : this.columns, className : 'table table-hover' }); this._renderView(); this._fetchCollection(); }, _showList: function () { this.currentView = new ListCollectionView(); this._fetchCollection(); }, _showPosters: function () { this.currentView = new PosterCollectionView(); this._fetchCollection(); }, initialize: function () { this.seriesCollection = SeriesCollection; this.listenTo(SeriesCollection, 'sync', this._renderView); this.listenTo(SeriesCollection, 'remove', this._renderView); }, _renderView: function () { if (SeriesCollection.length === 0) { this.seriesRegion.show(new EmptyView()); this.toolbar.close(); } else { this.currentView.collection = SeriesCollection; this.seriesRegion.show(this.currentView); this._showToolbar(); this._showFooter(); } }, onShow: function () { this._showToolbar(); this._renderView(); this._fetchCollection(); }, _fetchCollection: function () { SeriesCollection.fetch(); }, _showToolbar: function () { if (this.toolbar.currentView) { return; } var viewButtons = { type : 'radio', storeState : true, menuKey : 'seriesViewMode', defaultAction: 'listView', items : [ { key : 'posterView', title : '', tooltip : 'Posters', icon : 'icon-th-large', callback: this._showPosters }, { key : 'listView', title : '', tooltip : 'Overview List', icon : 'icon-th-list', callback: this._showList }, { key : 'tableView', title : '', tooltip : 'Table', icon : 'icon-table', callback: this._showTable } ] }; this.toolbar.show(new ToolbarLayout({ right : [ viewButtons ], left : [ this.leftSideButtons ], context: this })); }, _showFooter: function () { var footerModel = new FooterModel(); var series = SeriesCollection.models.length; var episodes = 0; var episodeFiles = 0; var ended = 0; var continuing = 0; var monitored = 0; _.each(SeriesCollection.models, function (model){ episodes += model.get('episodeCount'); episodeFiles += model.get('episodeFileCount'); if (model.get('status').toLowerCase() === 'ended') { ended++; } else { continuing++; } if (model.get('monitored')) { monitored++; } }); footerModel.set({ series: series, ended: ended, continuing: continuing, monitored: monitored, unmonitored: series - monitored, episodes: episodes, episodeFiles: episodeFiles }); this.footer.show(new FooterView({ model: footerModel })); } }); });