Index: remoting/webapp/app_remoting/js/keyboard_layouts_menu.js |
diff --git a/remoting/webapp/app_remoting/js/keyboard_layouts_menu.js b/remoting/webapp/app_remoting/js/keyboard_layouts_menu.js |
deleted file mode 100644 |
index 165063447f6f470583a54ccb07bc2d802ed92887..0000000000000000000000000000000000000000 |
--- a/remoting/webapp/app_remoting/js/keyboard_layouts_menu.js |
+++ /dev/null |
@@ -1,184 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-/** |
- * @fileoverview |
- * Class managing the host's available keyboard layouts, allowing the user to |
- * select one that matches the local layout, or auto-selecting based on the |
- * current locale. |
- */ |
- |
-'use strict'; |
- |
-/** @suppress {duplicate} */ |
-var remoting = remoting || {}; |
- |
-/** |
- * @param {remoting.ContextMenuAdapter} adapter |
- * @constructor |
- */ |
-remoting.KeyboardLayoutsMenu = function(adapter) { |
- /** @private {remoting.ContextMenuAdapter} */ |
- this.adapter_ = adapter; |
- /** @private {remoting.SubmenuManager} */ |
- this.submenuManager_ = new remoting.SubmenuManager( |
- adapter, |
- chrome.i18n.getMessage(/*i18n-content*/'KEYBOARD_LAYOUTS_SUBMENU_TITLE'), |
- true); |
- /** @private {string} */ |
- this.currentLayout_ = ''; |
- |
- /** @private {function(string, string)} */ |
- this.sendExtensionMessage_ = base.doNothing; |
- |
- adapter.addListener(this.onContextMenu_.bind(this)); |
-}; |
- |
-/** |
- * @param {Array<string>} layouts The keyboard layouts available on the host, |
- * for example en-US, de-DE |
- * @param {string} currentLayout The layout currently active on the host. |
- */ |
-remoting.KeyboardLayoutsMenu.prototype.setLayouts = |
- function(layouts, currentLayout) { |
- this.submenuManager_.removeAll(); |
- this.currentLayout_ = ''; |
- for (var i = 0; i < layouts.length; ++i) { |
- this.submenuManager_.add(this.makeMenuId_(layouts[i]), layouts[i]); |
- } |
- // Pick a suitable default layout. |
- this.getBestLayout_(layouts, currentLayout, |
- this.setLayout_.bind(this, false)); |
-}; |
- |
-/** @param {function(string, string)} callback */ |
-remoting.KeyboardLayoutsMenu.prototype.setExtensionMessageSender = |
- function(callback) { |
- this.sendExtensionMessage_ = callback; |
-}; |
- |
-/** |
- * Notify the host that a new keyboard layout has been selected. |
- * |
- * @param {boolean} saveToLocalStorage If true, save the specified layout to |
- * local storage. |
- * @param {string} layout The new keyboard layout. |
- * @private |
- */ |
-remoting.KeyboardLayoutsMenu.prototype.setLayout_ = |
- function(saveToLocalStorage, layout) { |
- if (this.currentLayout_ != '') { |
- this.adapter_.updateCheckState( |
- this.makeMenuId_(this.currentLayout_), false); |
- } |
- this.adapter_.updateCheckState(this.makeMenuId_(layout), true); |
- this.currentLayout_ = layout; |
- |
- console.log("Setting the keyboard layout to '" + layout + "'"); |
- this.sendExtensionMessage_('setKeyboardLayout', |
- JSON.stringify({layout: layout})); |
- if (saveToLocalStorage) { |
- var params = {}; |
- params[remoting.KeyboardLayoutsMenu.KEY_] = layout; |
- chrome.storage.local.set(params); |
- } |
-}; |
- |
-/** |
- * Choose the best keyboard from the alternatives, based on the following |
- * algorithm: |
- * - Search local storage by for a preferred keyboard layout for the app; |
- * if it is found, prefer it over the current locale, falling back on the |
- * latter only if no match is found. |
- * - If the candidate layout matches one of the supported layouts, use it. |
- * - Otherwise, if the language portion of the candidate matches that of |
- * any of the supported layouts, use the first such layout (e.g, en-AU |
- * will match either en-US or en-GB, whichever appears first). |
- * - Otherwise, use the host's current layout. |
- * |
- * @param {Array<string>} layouts |
- * @param {string} currentHostLayout |
- * @param {function(string):void} onDone |
- * @private |
- */ |
-remoting.KeyboardLayoutsMenu.prototype.getBestLayout_ = |
- function(layouts, currentHostLayout, onDone) { |
- /** |
- * Extract the language id from a string that is either "language" (e.g. |
- * "de") or "language-region" (e.g. "en-US"). |
- * |
- * @param {string} layout |
- * @return {string} |
- */ |
- var getLanguage = function(layout) { |
- var languageAndRegion = layout.split('-'); |
- switch (languageAndRegion.length) { |
- case 1: |
- case 2: |
- return languageAndRegion[0]; |
- default: |
- return ''; |
- } |
- }; |
- |
- /** @param {Object<string>} storage */ |
- var chooseLayout = function(storage) { |
- var configuredLayout = storage[remoting.KeyboardLayoutsMenu.KEY_]; |
- var tryLayouts = [ chrome.i18n.getUILanguage() ]; |
- if (configuredLayout && typeof(configuredLayout) == 'string') { |
- tryLayouts.unshift(configuredLayout); |
- } |
- for (var i = 0; i < tryLayouts.length; ++i) { |
- if (layouts.indexOf(tryLayouts[i]) != -1) { |
- onDone(tryLayouts[i]); |
- return; |
- } |
- var language = getLanguage(tryLayouts[i]); |
- if (language) { |
- for (var j = 0; j < layouts.length; ++j) { |
- if (language == getLanguage(layouts[j])) { |
- onDone(layouts[j]); |
- return; |
- } |
- } |
- } |
- } |
- // Neither the stored layout nor UI locale was suitable. |
- onDone(currentHostLayout); |
- }; |
- |
- chrome.storage.local.get(remoting.KeyboardLayoutsMenu.KEY_, chooseLayout); |
-}; |
- |
-/** |
- * Create a menu id from the given keyboard layout. |
- * |
- * @param {string} layout Keyboard layout |
- * @return {string} |
- * @private |
- */ |
-remoting.KeyboardLayoutsMenu.prototype.makeMenuId_ = function(layout) { |
- return 'layout@' + layout; |
-}; |
- |
-/** |
- * Handle a click on the application's context menu. |
- * |
- * @param {OnClickData=} info |
- * @private |
- */ |
-remoting.KeyboardLayoutsMenu.prototype.onContextMenu_ = function(info) { |
- var menuItemId = info.menuItemId.toString(); |
- var components = menuItemId.split('@'); |
- if (components.length == 2 && |
- this.makeMenuId_(components[1]) === menuItemId) { |
- this.setLayout_(true, components[1]); |
- } |
-}; |
- |
-/** |
- * @type {string} |
- * @private |
- */ |
-remoting.KeyboardLayoutsMenu.KEY_ = 'preferred-keyboard-layout'; |