'use strict'; new ExceptionHandler(); Polymer({ is: 'settings-page', behaviors: [ Chrome.LocalizeBehavior, ], properties: { selectedTab: { type: Number, value: 0, notify: true, }, enabled: { type: Boolean, value: true, notify: true, }, showTimeValue: { type: Number, value: 1, notify: true, }, menuHidden: { type: Boolean, computed: '_computeMenuHidden(selectedTab)', }, }, ready: function() { this.set('selectedTab', 0); }, /** * Deselect the given {@link app.PhotoSource} * @param {string} useName - Name of <setting-toggle> */ deselectPhotoSource: function(useName) { this._setPhotoSourceChecked(useName, false); }, /** * Event: select all {@link app.PhotoSource} objects tapped * @private */ _selectAllTapped: function() { this._setPhotoSourcesChecked(true); }, /** * Event: deselect all {@link app.PhotoSource} objects tapped * @private */ _deselectAllTapped: function() { this._setPhotoSourcesChecked(false); }, /** * Event: restore default settings tapped * @private */ _restoreDefaultsTapped: function() { Chrome.Msg.send(Chrome.Msg.RESTORE_DEFAULTS).catch(() => {}); }, /** * Event: Process the background permission * @private */ _chromeBackgroundTapped() { const isSet = !Chrome.Storage.get('allowBackground'); const perm = app.Permissions.BACKGROUND; const isAllowed = app.Permissions.isAllowed(perm); const errTitle = Chrome.Locale.localize('err_optional_permissions'); if (isSet && !isAllowed) { app.Permissions.request(perm).catch((err) => { Chrome.Log.error(err.message, 'settings-page._chromeBackgroundTapped', errTitle); }); } else if (!isSet && isAllowed) { app.Permissions.remove(perm).catch((err) => { Chrome.Log.error(err.message, 'settings-page._chromeBackgroundTapped', errTitle); }); } }, /** * Set checked state of a {@link app.PhotoSource} * @param {string} useName - source name * @param {boolean} state - checked state * @private */ _setPhotoSourceChecked: function(useName, state) { const query = `[name=${useName}]`; const el = document.querySelector(query); if (el && !useName.includes('useGoogle')) { el.setChecked(state); } }, /** * Set checked state of all {@link app.PhotoSource} objects * @param {boolean} state - checked state * @private */ _setPhotoSourcesChecked: function(state) { const useNames = app.PhotoSources.getUseKeys(); useNames.forEach((useName) => { this._setPhotoSourceChecked(useName, state); }); }, /** * Computed property: Set menu icons visibility * @param {int} selectedTab - the current tab * @returns {boolean} true if menu should be visible * @private */ _computeMenuHidden: function(selectedTab) { return (selectedTab !== 2); }, _getUnit: function(name, min, max, step, mult) { return { 'name': Chrome.Locale.localize(name), 'min': min, 'max': max, 'step': step, 'mult': mult, }; }, /** * Computed binding: Set disabled state of largeTime toggle * @param {boolean} enabled - enabled state of screensaver * @param {number} showTimeValue - showTime value * @returns {boolean} true if disabled * @private */ _computeLargeTimeDisabled: function(enabled, showTimeValue) { let ret = false; if (!enabled || (showTimeValue === 0)) { ret = true; } return ret; }, /** * Computed binding: idle time values * @returns {Array} Array of menu items * @private */ _computeWaitTimeUnits: function() { return [ this._getUnit('minutes', 1, 60, 1, 1), this._getUnit('hours', 1, 24, 1, 60), this._getUnit('days', 1, 365, 1, 1440), ]; }, /** * Computed binding: transition time values * @returns {Array} Array of menu items * @private */ _computeTransitionTimeUnits: function() { return [ this._getUnit('seconds', 4, 60, 1, 1), this._getUnit('minutes', 1, 60, 1, 60), this._getUnit('hours', 1, 24, 1, 3600), this._getUnit('days', 1, 365, 1, 86400), ]; }, /** * Computed binding: photo sizing values * @returns {Array} Array of menu items * @private */ _computePhotoSizingMenu: function() { return [ Chrome.Locale.localize('menu_letterbox'), Chrome.Locale.localize('menu_zoom'), Chrome.Locale.localize('menu_frame'), Chrome.Locale.localize('menu_full'), Chrome.Locale.localize('menu_random'), ]; }, /** * Computed binding: photo transition values * @returns {Array} Array of menu items * @private */ _computePhotoTransitionMenu: function() { return [ Chrome.Locale.localize('menu_scale_up'), Chrome.Locale.localize('menu_fade'), Chrome.Locale.localize('menu_slide_from_right'), Chrome.Locale.localize('menu_slide_down'), Chrome.Locale.localize('menu_spin_up'), Chrome.Locale.localize('menu_slide_up'), Chrome.Locale.localize('menu_slide_from_bottom'), Chrome.Locale.localize('menu_slide_right'), Chrome.Locale.localize('menu_random'), ]; }, /** * Computed binding: time format values * @returns {Array} Array of menu items * @private */ _computeTimeFormatMenu: function() { return [ Chrome.Locale.localize('no'), Chrome.Locale.localize('menu_12_hour'), Chrome.Locale.localize('menu_24_hour'), ]; }, });