var _ = require('_'), $ = require('$'), ko = require('ko'), Globals = require('Common/Globals'), Utils = require('Common/Utils'), Links = require('Common/Links'), kn = require('Knoin/Knoin'), AbstractScreen = require('Knoin/AbstractScreen'); /** * @constructor * @param {Array} aViewModels * @extends AbstractScreen */ function AbstractSettingsScreen(aViewModels) { AbstractScreen.call(this, 'settings', aViewModels); this.menu = ko.observableArray([]); this.oCurrentSubScreen = null; this.oViewModelPlace = null; this.setupSettings(); } _.extend(AbstractSettingsScreen.prototype, AbstractScreen.prototype); /** * @param {Function=} fCallback */ AbstractSettingsScreen.prototype.setupSettings = function(fCallback) { if (fCallback) { fCallback(); } }; AbstractSettingsScreen.prototype.onRoute = function(sSubName) { var self = this, oSettingsScreen = null, RoutedSettingsViewModel = null, oViewModelPlace = null, oViewModelDom = null; RoutedSettingsViewModel = _.find(Globals.aViewModels.settings, function(SettingsViewModel) { return SettingsViewModel && SettingsViewModel.__rlSettingsData && sSubName === SettingsViewModel.__rlSettingsData.Route; }); if (RoutedSettingsViewModel) { if (_.find(Globals.aViewModels['settings-removed'], function(DisabledSettingsViewModel) { return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel; })) { RoutedSettingsViewModel = null; } if (RoutedSettingsViewModel && _.find(Globals.aViewModels['settings-disabled'], function(DisabledSettingsViewModel) { return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel; })) { RoutedSettingsViewModel = null; } } if (RoutedSettingsViewModel) { if (RoutedSettingsViewModel.__builded && RoutedSettingsViewModel.__vm) { oSettingsScreen = RoutedSettingsViewModel.__vm; } else { oViewModelPlace = this.oViewModelPlace; if (oViewModelPlace && 1 === oViewModelPlace.length) { oSettingsScreen = new RoutedSettingsViewModel(); oViewModelDom = $('
').addClass('rl-settings-view-model').hide(); oViewModelDom.appendTo(oViewModelPlace); oSettingsScreen.viewModelDom = oViewModelDom; oSettingsScreen.__rlSettingsData = RoutedSettingsViewModel.__rlSettingsData; RoutedSettingsViewModel.__dom = oViewModelDom; RoutedSettingsViewModel.__builded = true; RoutedSettingsViewModel.__vm = oSettingsScreen; ko.applyBindingAccessorsToNode(oViewModelDom[0], { translatorInit: true, template: function() { return { name: RoutedSettingsViewModel.__rlSettingsData.Template }; } }, oSettingsScreen); Utils.delegateRun(oSettingsScreen, 'onBuild', [oViewModelDom]); } else { Utils.log('Cannot find sub settings view model position: SettingsSubScreen'); } } if (oSettingsScreen) { _.defer(function() { // hide if (self.oCurrentSubScreen) { Utils.delegateRun(self.oCurrentSubScreen, 'onHide'); self.oCurrentSubScreen.viewModelDom.hide(); } // -- self.oCurrentSubScreen = oSettingsScreen; // show if (self.oCurrentSubScreen) { Utils.delegateRun(self.oCurrentSubScreen, 'onBeforeShow'); self.oCurrentSubScreen.viewModelDom.show(); Utils.delegateRun(self.oCurrentSubScreen, 'onShow'); Utils.delegateRun(self.oCurrentSubScreen, 'onShowWithDelay', [], 200); _.each(self.menu(), function(oItem) { oItem.selected(oSettingsScreen && oSettingsScreen.__rlSettingsData && oItem.route === oSettingsScreen.__rlSettingsData.Route); }); $('#rl-content .b-settings .b-content .content').scrollTop(0); } // -- Utils.windowResize(); }); } } else { kn.setHash(Links.settings(), false, true); } }; AbstractSettingsScreen.prototype.onHide = function() { if (this.oCurrentSubScreen && this.oCurrentSubScreen.viewModelDom) { Utils.delegateRun(this.oCurrentSubScreen, 'onHide'); this.oCurrentSubScreen.viewModelDom.hide(); } }; AbstractSettingsScreen.prototype.onBuild = function() { _.each(Globals.aViewModels.settings, function(SettingsViewModel) { if (SettingsViewModel && SettingsViewModel.__rlSettingsData && !_.find(Globals.aViewModels['settings-removed'], function(RemoveSettingsViewModel) { return RemoveSettingsViewModel && RemoveSettingsViewModel === SettingsViewModel; })) { this.menu.push({ route: SettingsViewModel.__rlSettingsData.Route, label: SettingsViewModel.__rlSettingsData.Label, selected: ko.observable(false), disabled: !!_.find(Globals.aViewModels['settings-disabled'], function(DisabledSettingsViewModel) { return DisabledSettingsViewModel && DisabledSettingsViewModel === SettingsViewModel; }) }); } }, this); this.oViewModelPlace = $('#rl-content #rl-settings-subscreen'); }; AbstractSettingsScreen.prototype.routes = function() { var DefaultViewModel = _.find(Globals.aViewModels.settings, function(SettingsViewModel) { return SettingsViewModel && SettingsViewModel.__rlSettingsData && SettingsViewModel.__rlSettingsData.IsDefault; }), sDefaultRoute = DefaultViewModel && DefaultViewModel.__rlSettingsData ? DefaultViewModel.__rlSettingsData.Route : 'general', oRules = { subname: /^(.*)$/, normalize_: function(oRequest, oVals) { oVals.subname = Utils.isUnd(oVals.subname) ? sDefaultRoute : Utils.pString(oVals.subname); return [oVals.subname]; } }; return [ ['{subname}/', oRules], ['{subname}', oRules], ['', oRules] ]; }; module.exports = AbstractSettingsScreen;