Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/keySelector.js

Issue 29562599: Issue 5751 - Removing legacy gecko support (Closed)
Patch Set: Rebasing against #5763 @ Patch Set 7 Created Oct. 6, 2017, 8:54 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/hooks.js ('k') | lib/prefs.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/keySelector.js
diff --git a/lib/keySelector.js b/lib/keySelector.js
deleted file mode 100644
index 151f50d2a3d95dde38431eb9e1d68e96a6aa2cf4..0000000000000000000000000000000000000000
--- a/lib/keySelector.js
+++ /dev/null
@@ -1,227 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-Cu.import("resource://gre/modules/Services.jsm");
-
-let validModifiers = Object.create(null);
-validModifiers.ACCEL = null;
-validModifiers.CTRL = "control";
-validModifiers.CONTROL = "control";
-validModifiers.SHIFT = "shift";
-validModifiers.ALT = "alt";
-validModifiers.META = "meta";
-
-let bindingsKeys = null;
-(function()
-{
- let request = new XMLHttpRequest();
- request.open("GET", "chrome://global/content/platformHTMLBindings.xml");
- request.addEventListener("load", () =>
- {
- bindingsKeys = request.responseXML.getElementsByTagName("handler");
- });
- request.send();
-})();
-
-
-/**
- * Sets the correct value of validModifiers.ACCEL.
- */
-function initAccelKey()
-{
- validModifiers.ACCEL = "control";
- try
- {
- let accelKey = Services.prefs.getIntPref("ui.key.accelKey");
- if (accelKey == Ci.nsIDOMKeyEvent.DOM_VK_CONTROL)
- validModifiers.ACCEL = "control";
- else if (accelKey == Ci.nsIDOMKeyEvent.DOM_VK_ALT)
- validModifiers.ACCEL = "alt";
- else if (accelKey == Ci.nsIDOMKeyEvent.DOM_VK_META)
- validModifiers.ACCEL = "meta";
- }
- catch(e)
- {
- Cu.reportError(e);
- }
-}
-
-exports.KeySelector = KeySelector;
-
-/**
- * This class provides capabilities to find and use available keyboard shortcut
- * keys.
- * @param {ChromeWindow} window the window where to look up existing shortcut
- * keys
- * @constructor
- */
-function KeySelector(window)
-{
- this._initExistingShortcuts(window);
-}
-KeySelector.prototype =
-{
- /**
- * Map listing existing shortcut keys as its keys.
- * @type Object
- */
- _existingShortcuts: null,
-
- /**
- * Sets up _existingShortcuts property for a window.
- */
- _initExistingShortcuts: function(/**ChromeWindow*/ window)
- {
- if (!validModifiers.ACCEL)
- initAccelKey();
-
- this._existingShortcuts = Object.create(null);
-
- let keys = Array.prototype.slice.apply(window.document.getElementsByTagName("key"));
- if (bindingsKeys)
- keys.push.apply(keys, bindingsKeys);
- for (let i = 0; i < keys.length; i++)
- {
- let key = keys[i];
- let keyData =
- {
- shift: false,
- meta: false,
- alt: false,
- control: false,
- char: null,
- code: null
- };
-
- let keyChar = key.getAttribute("key");
- if (keyChar && keyChar.length == 1)
- keyData.char = keyChar.toUpperCase();
-
- let keyCode = key.getAttribute("keycode");
- if (keyCode && "DOM_" + keyCode.toUpperCase() in Ci.nsIDOMKeyEvent)
- keyData.code = Ci.nsIDOMKeyEvent["DOM_" + keyCode.toUpperCase()];
-
- if (!keyData.char && !keyData.code)
- continue;
-
- let keyModifiers = key.getAttribute("modifiers");
- if (keyModifiers)
- for (let modifier of keyModifiers.toUpperCase().match(/\w+/g))
- if (modifier in validModifiers)
- keyData[validModifiers[modifier]] = true;
-
- let canonical = [keyData.shift, keyData.meta, keyData.alt, keyData.control, keyData.char || keyData.code].join(" ");
- this._existingShortcuts[canonical] = true;
- }
- },
-
- /**
- * Selects a keyboard shortcut variant that isn't already taken,
- * parses it into an object.
- */
- selectKey: function(/**String*/ variants) /**Object*/
- {
- for (let variant of variants.split(/\s*,\s*/))
- {
- if (!variant)
- continue;
-
- let keyData =
- {
- shift: false,
- meta: false,
- alt: false,
- control: false,
- char: null,
- code: null,
- codeName: null
- };
- for (let part of variant.toUpperCase().split(/\s+/))
- {
- if (part in validModifiers)
- keyData[validModifiers[part]] = true;
- else if (part.length == 1)
- keyData.char = part;
- else if ("DOM_VK_" + part in Ci.nsIDOMKeyEvent)
- {
- keyData.code = Ci.nsIDOMKeyEvent["DOM_VK_" + part];
- keyData.codeName = "VK_" + part;
- }
- }
-
- if (!keyData.char && !keyData.code)
- continue;
-
- let canonical = [keyData.shift, keyData.meta, keyData.alt, keyData.control, keyData.char || keyData.code].join(" ");
- if (canonical in this._existingShortcuts)
- continue;
-
- return keyData;
- }
-
- return null;
- }
-};
-
-/**
- * Creates the text representation for a key.
- * @static
- */
-KeySelector.getTextForKey = function (/**Object*/ key) /**String*/
-{
- if (!key)
- return null;
-
- if (!("text" in key))
- {
- key.text = null;
- try
- {
- let stringBundle = Services.strings.createBundle("chrome://global-platform/locale/platformKeys.properties");
- let parts = [];
- if (key.control)
- parts.push(stringBundle.GetStringFromName("VK_CONTROL"));
- if (key.alt)
- parts.push(stringBundle.GetStringFromName("VK_ALT"));
- if (key.meta)
- parts.push(stringBundle.GetStringFromName("VK_META"));
- if (key.shift)
- parts.push(stringBundle.GetStringFromName("VK_SHIFT"));
- if (key.char)
- parts.push(key.char.toUpperCase());
- else
- {
- let stringBundle2 = Services.strings.createBundle("chrome://global/locale/keys.properties");
- parts.push(stringBundle2.GetStringFromName(key.codeName));
- }
- key.text = parts.join(stringBundle.GetStringFromName("MODIFIER_SEPARATOR"));
- }
- catch (e)
- {
- Cu.reportError(e);
- return null;
- }
- }
- return key.text;
-};
-
-/**
- * Tests whether a keypress event matches the given key.
- * @static
- */
-KeySelector.matchesKey = function(/**Event*/ event, /**Object*/ key) /**Boolean*/
-{
- if (event.defaultPrevented || !key)
- return false;
- if (key.shift != event.shiftKey || key.alt != event.altKey)
- return false;
- if (key.meta != event.metaKey || key.control != event.ctrlKey)
- return false;
-
- if (key.char && event.charCode && String.fromCharCode(event.charCode).toUpperCase() == key.char)
- return true;
- if (key.code && event.keyCode && event.keyCode == key.code)
- return true;
- return false;
-};
« no previous file with comments | « lib/hooks.js ('k') | lib/prefs.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld