'use strict'; define( [ 'app', 'marionette', 'Settings/SettingsModel', 'Settings/General/GeneralSettingsModel', 'Settings/MediaManagement/Naming/Model', 'Settings/MediaManagement/Layout', 'Settings/Quality/QualityLayout', 'Settings/Indexers/Layout', 'Settings/Indexers/Collection', 'Settings/DownloadClient/Layout', 'Settings/Notifications/CollectionView', 'Settings/Notifications/Collection', 'Settings/General/GeneralView', 'Shared/LoadingView' ], function (App, Marionette, SettingsModel, GeneralSettingsModel, NamingModel, MediaManagementLayout, QualityLayout, IndexerLayout, IndexerCollection, DownloadClientLayout, NotificationCollectionView, NotificationCollection, GeneralView, LoadingView) { return Marionette.Layout.extend({ template: 'Settings/SettingsLayoutTemplate', regions: { mediaManagement : '#media-management', quality : '#quality', indexers : '#indexers', downloadClient : '#download-client', notifications : '#notifications', general : '#general', loading : '#loading-region' }, ui: { mediaManagementTab : '.x-media-management-tab', qualityTab : '.x-quality-tab', indexersTab : '.x-indexers-tab', downloadClientTab : '.x-download-client-tab', notificationsTab : '.x-notifications-tab', generalTab : '.x-general-tab' }, events: { 'click .x-media-management-tab' : '_showMediaManagement', 'click .x-quality-tab' : '_showQuality', 'click .x-indexers-tab' : '_showIndexers', 'click .x-download-client-tab' : '_showDownloadClient', 'click .x-notifications-tab' : '_showNotifications', 'click .x-general-tab' : '_showGeneral', 'click .x-save-settings' : '_save' }, _showMediaManagement: function (e) { if (e) { e.preventDefault(); } this.ui.mediaManagementTab.tab('show'); this._navigate('settings/mediamanagement'); }, _showQuality: function (e) { if (e) { e.preventDefault(); } this.ui.qualityTab.tab('show'); this._navigate('settings/quality'); }, _showIndexers: function (e) { if (e) { e.preventDefault(); } this.ui.indexersTab.tab('show'); this._navigate('settings/indexers'); }, _showDownloadClient: function (e) { if (e) { e.preventDefault(); } this.ui.downloadClientTab.tab('show'); this._navigate('settings/downloadclient'); }, _showNotifications: function (e) { if (e) { e.preventDefault(); } this.ui.notificationsTab.tab('show'); this._navigate('settings/connect'); }, _showGeneral: function (e) { if (e) { e.preventDefault(); } this.ui.generalTab.tab('show'); this._navigate('settings/general'); }, _navigate:function(route){ require(['Router'], function(){ App.Router.navigate(route); }); }, initialize: function (options) { if (options.action) { this.action = options.action.toLowerCase(); } }, onRender: function () { this.loading.show(new LoadingView()); var self = this; this.settings = new SettingsModel(); this.generalSettings = new GeneralSettingsModel(); this.namingSettings = new NamingModel(); this.indexerSettings = new IndexerCollection(); this.notificationSettings = new NotificationCollection(); $.when(this.settings.fetch(), this.generalSettings.fetch(), this.namingSettings.fetch(), this.indexerSettings.fetch(), this.notificationSettings.fetch() ).done(function () { self.loading.$el.hide(); self.mediaManagement.show(new MediaManagementLayout({ settings: self.settings, namingSettings: self.namingSettings })); self.quality.show(new QualityLayout({settings: self.settings})); self.indexers.show(new IndexerLayout({ settings: self.settings, indexersCollection: self.indexerSettings })); self.downloadClient.show(new DownloadClientLayout({model: self.settings})); self.notifications.show(new NotificationCollectionView({collection: self.notificationSettings})); self.general.show(new GeneralView({model: self.generalSettings})); }); }, onShow: function () { switch (this.action) { case 'quality': this._showQuality(); break; case 'indexers': this._showIndexers(); break; case 'downloadclient': this._showDownloadClient(); break; case 'connect': this._showNotifications(); break; case 'notifications': this._showNotifications(); break; case 'general': this._showGeneral(); break; default: this._showMediaManagement(); } }, _save: function () { App.vent.trigger(App.Commands.SaveSettings); } }); });