/* * Copyright (c) 2015-2017, Michael A. Updike All rights reserved. * Licensed under the BSD-3-Clause * https://opensource.org/licenses/BSD-3-Clause * https://github.com/opus1269/photo-screen-saver/blob/master/LICENSE.md */ (function() { 'use strict'; /** * Manage the Context Menus for the extension * @see https://developer.chrome.com/extensions/contextMenus * @namespace ContextMenus */ new ExceptionHandler(); const _DISPLAY_MENU = 'DISPLAY_MENU'; const _ENABLE_MENU = 'ENABLE_MENU'; /** * Toggle enabled state of the screen saver * @private * @memberOf ContextMenus */ function _toggleEnabled() { Chrome.Storage.set('enabled', !Chrome.Storage.getBool('enabled')); // storage changed event not fired on same page as the change app.Data.processState('enabled'); } // noinspection JSUnusedLocalSymbols /** * Event: Fired when the extension is first installed,<br /> * when the extension is updated to a new version,<br /> * and when Chrome is updated to a new version. * @see https://developer.chrome.com/extensions/runtime#event-onInstalled * @param {Object} details - type of event * @private * @memberOf ContextMenus */ function _onInstalled(details) { const chromep = new ChromePromise(); // create menus on the right click menu of the extension icon chromep.contextMenus.create({ type: 'normal', id: _DISPLAY_MENU, title: Chrome.Locale.localize('display_now'), contexts: ['browser_action'], }).catch((err) => { if (!err.message.includes('duplicate id')) { Chrome.Log.error(err.message, 'chromep.contextMenus.create'); } }); chromep.contextMenus.create({ type: 'normal', id: _ENABLE_MENU, title: Chrome.Locale.localize('disable'), contexts: ['browser_action'], }).catch((err) => { if (!err.message.includes('duplicate id')) { Chrome.Log.error(err.message, 'chromep.contextMenus.create'); } }); chromep.contextMenus.create({ type: 'separator', id: 'SEP_MENU', contexts: ['browser_action'], }).catch((err) => { if (!err.message.includes('duplicate id')) { Chrome.Log.error(err.message, 'chromep.contextMenus.create'); } }); } /** * Event: Fired when a context menu item is clicked. * @see https://developer.chrome.com/extensions/contextMenus#event-onClicked * @param {Object} info - info. on the clicked menu * @param {Object} info.menuItemId - menu name * @private * @memberOf ContextMenus */ function _onMenuClicked(info) { if (info.menuItemId === _DISPLAY_MENU) { Chrome.GA.event(Chrome.GA.EVENT.MENU, `${info.menuItemId}`); app.SSControl.display(); } else if (info.menuItemId === _ENABLE_MENU) { const isEnabled = Chrome.Storage.get('enabled'); Chrome.GA.event(Chrome.GA.EVENT.MENU, `${info.menuItemId}: ${isEnabled}`); _toggleEnabled(); } } /** * Event: Fired when a registered command is activated using * a keyboard shortcut. * @see https://developer.chrome.com/extensions/commands#event-onCommand * @param {string} cmd - keyboard command * @private * @memberOf ContextMenus */ function _onKeyCommand(cmd) { if (cmd === 'toggle-enabled') { Chrome.GA.event(Chrome.GA.EVENT.KEY_COMMAND, `${cmd}`); _toggleEnabled(); } else if (cmd === 'show-screensaver') { Chrome.GA.event(Chrome.GA.EVENT.KEY_COMMAND, `${cmd}`); app.SSControl.display(); } } // listen for install events chrome.runtime.onInstalled.addListener(_onInstalled); // listen for clicks on context menus chrome.contextMenus.onClicked.addListener(_onMenuClicked); // listen for special keyboard commands chrome.commands.onCommand.addListener(_onKeyCommand); })();