Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3699)

Unified Diff: chrome/browser/resources/keyboard/common.js

Issue 10399046: Remove virtual keyboard support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: final rebase Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/keyboard/chevron.svg ('k') | chrome/browser/resources/keyboard/del.svg » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/keyboard/common.js
diff --git a/chrome/browser/resources/keyboard/common.js b/chrome/browser/resources/keyboard/common.js
deleted file mode 100644
index df085929b3c830e9c712446910dcfd5d859c5e9a..0000000000000000000000000000000000000000
--- a/chrome/browser/resources/keyboard/common.js
+++ /dev/null
@@ -1,972 +0,0 @@
-// Copyright (c) 2011 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 A simple virtual keyboard implementation.
- */
-
-var KEY_MODE = 'key';
-var SHIFT_MODE = 'shift';
-var NUMBER_MODE = 'number';
-var SYMBOL_MODE = 'symbol';
-var MODES = [ KEY_MODE, SHIFT_MODE, NUMBER_MODE, SYMBOL_MODE ];
-var currentMode = SHIFT_MODE;
-var enterShiftModeOnSpace = false;
-var MODE_TRANSITIONS = {};
-
-MODE_TRANSITIONS[KEY_MODE + SHIFT_MODE] = SHIFT_MODE;
-MODE_TRANSITIONS[KEY_MODE + NUMBER_MODE] = NUMBER_MODE;
-MODE_TRANSITIONS[SHIFT_MODE + SHIFT_MODE] = KEY_MODE;
-MODE_TRANSITIONS[SHIFT_MODE + NUMBER_MODE] = NUMBER_MODE;
-MODE_TRANSITIONS[NUMBER_MODE + SHIFT_MODE] = SYMBOL_MODE;
-MODE_TRANSITIONS[NUMBER_MODE + NUMBER_MODE] = KEY_MODE;
-MODE_TRANSITIONS[SYMBOL_MODE + SHIFT_MODE] = NUMBER_MODE;
-MODE_TRANSITIONS[SYMBOL_MODE + NUMBER_MODE] = KEY_MODE;
-
-var KEYBOARDS = {};
-
-/**
- * The long-press delay in milliseconds before long-press handler is invoked.
- * @type {number}
- */
-var LONGPRESS_DELAY_MSEC = 500;
-
-/**
- * The repeat delay in milliseconds before a key starts repeating. Use the same
- * rate as Chromebook. (See chrome/browser/chromeos/language_preferences.cc)
- * @type {number}
- */
-var REPEAT_DELAY_MSEC = 500;
-
-/**
- * The repeat interval or number of milliseconds between subsequent keypresses.
- * Use the same rate as Chromebook.
- * @type {number}
- */
-var REPEAT_INTERVAL_MSEC = 50;
-
-/**
- * The keyboard layout name currently in use.
- * @type {string}
- */
-var currentKeyboardLayout = 'us';
-
-/**
- * The popup keyboard layout name currently in use.
- * @type {string}
- */
-var currentPopupName = '';
-
-/**
- * A structure to track the currently repeating key on the keyboard.
- */
-var repeatKey = {
- /**
- * The timer for the delay before repeating behaviour begins.
- * @type {number|undefined}
- */
- timer: undefined,
-
- /**
- * The interval timer for issuing keypresses of a repeating key.
- * @type {number|undefined}
- */
- interval: undefined,
-
- /**
- * The key which is currently repeating.
- * @type {BaseKey|undefined}
- */
- key: undefined,
-
- /**
- * Cancel the repeat timers of the currently active key.
- */
- cancel: function() {
- clearTimeout(this.timer);
- clearInterval(this.interval);
- this.timer = undefined;
- this.interval = undefined;
- this.key = undefined;
- }
-};
-
-/**
- * An array to track the currently touched keys on the popup keyboard.
- */
-var touchedKeys = [];
-
-/**
- * Set the keyboard mode.
- * @param {string} mode The new mode.
- * @return {void}
- */
-function setMode(mode) {
- currentMode = mode;
-
- var rows = KEYBOARDS[currentKeyboardLayout]['rows'];
- for (var i = 0; i < rows.length; ++i) {
- rows[i].showMode(currentMode);
- }
-
- if (!currentPopupName) {
- return;
- }
- var popupRows = KEYBOARDS[currentPopupName]['rows'];
- for (var i = 0; i < popupRows.length; ++i) {
- popupRows[i].showMode(currentMode);
- }
-}
-
-/**
- * Transition the mode according to the given transition.
- * @param {string} transition The transition to take.
- * @return {void}
- */
-function transitionMode(transition) {
- setMode(MODE_TRANSITIONS[currentMode + transition]);
-}
-
-/**
- * Send the given key to chrome, via the experimental extension API.
- * @param {string} key The key to send.
- * @return {void}
- */
-function sendKey(key) {
- var keyEvent = {'keyIdentifier': key};
- // A keypress event is automatically generated for printable characters
- // immediately following the keydown event.
- if (chrome.experimental) {
- keyEvent.type = 'keydown';
- chrome.experimental.input.virtualKeyboard.sendKeyboardEvent(keyEvent);
- keyEvent.type = 'keyup';
- chrome.experimental.input.virtualKeyboard.sendKeyboardEvent(keyEvent);
- }
- // Exit shift mode after pressing any key but space.
- if (currentMode == SHIFT_MODE && key != 'Spacebar') {
- transitionMode(SHIFT_MODE);
- }
- // Enter shift mode after typing a closing punctuation and then a space for a
- // new sentence.
- if (enterShiftModeOnSpace) {
- enterShiftModeOnSpace = false;
- if (currentMode != SHIFT_MODE && key == 'Spacebar') {
- setMode(SHIFT_MODE);
- }
- }
- if (currentMode != SHIFT_MODE && (key == '.' || key == '?' || key == '!')) {
- enterShiftModeOnSpace = true;
- }
-}
-
-/**
- * Add a child div element that represents the content of the given element.
- * A child div element that represents a text content is added if
- * opt_textContent is given. Otherwise a child element that represents an image
- * content is added. If the given element already has a child, the child element
- * is modified.
- * @param {Element} element The DOM Element to which the content is added.
- * @param {string} opt_textContent The text to be inserted.
- * @return {void}
- */
-function addContent(element, opt_textContent) {
- if (element.childNodes.length > 0) {
- var content = element.childNodes[0];
- if (opt_textContent) {
- content.textContent = opt_textContent;
- }
- return;
- }
-
- var content = document.createElement('div');
- if (opt_textContent) {
- content.textContent = opt_textContent;
- content.className = 'text-key';
- } else {
- content.className = 'image-key';
- }
- element.appendChild(content);
-}
-
-/**
- * Set up the event handlers necessary to respond to mouse and touch events on
- * the virtual keyboard.
- * @param {BaseKey} key The BaseKey object corresponding to this key.
- * @param {Element} element The top-level DOM Element to set event handlers on.
- * @param {Object.<string, function()>} handlers The object that contains key
- * event handlers in the following form.
- *
- * { 'up': keyUpHandler,
- * 'down': keyDownHandler,
- * 'long': keyLongHandler }
- *
- * keyUpHandler: Called when the key is pressed. This will be called
- * repeatedly when holding a repeating key.
- * keyDownHandler: Called when the keyis released. This is only called
- * once per actual key press.
- * keyLongHandler: Called when the key is long-pressed for
- * |LONGPRESS_DELAY_MSEC| milliseconds.
- *
- * The object does not necessarily contain all the handlers above, but
- * needs to contain at least one of them.
- */
-function setupKeyEventHandlers(key, element, handlers) {
- var keyDownHandler = handlers['down'];
- var keyUpHandler = handlers['up'];
- var keyLongHandler = handlers['long'];
- if (!(keyDownHandler || keyUpHandler || keyLongPressHandler)) {
- throw new Error('Invalid handlers passed to setupKeyEventHandlers');
- }
-
- /**
- * Handle a key down event on the virtual key.
- * @param {UIEvent} evt The UI event which triggered the key down.
- */
- var downHandler = function(evt) {
- // Prevent any of the system gestures from happening.
- evt.preventDefault();
-
- // Don't process a key down if the key is already down.
- if (key.pressed) {
- return;
- }
- key.pressed = true;
- if (keyDownHandler) {
- keyDownHandler();
- }
- repeatKey.cancel();
-
- // Start a repeating timer if there is a repeat interval and a function to
- // process key down events.
- if (key.repeat && keyDownHandler) {
- repeatKey.key = key;
- // The timeout for the repeating timer occurs at
- // REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC so that the interval
- // function can handle all repeat keypresses and will get the first one
- // at the correct time.
- repeatKey.timer = setTimeout(function() {
- repeatKey.timer = undefined;
- repeatKey.interval = setInterval(function() {
- keyDownHandler();
- }, REPEAT_INTERVAL_MSEC);
- }, Math.max(0, REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC));
- }
-
- if (keyLongHandler) {
- // Copy the currentTarget of event, which is neccessary in
- // showPopupKeyboard, because |evt| can be modified before
- // |keyLongHandler| is called.
- var evtCopy = {};
- evtCopy.currentTarget = evt.currentTarget;
- key.longPressTimer = setTimeout(function() {
- keyLongHandler(evtCopy),
- clearTimeout(key.longPressTimer);
- delete key.longPressTimer;
- key.pressed = false;
- }, LONGPRESS_DELAY_MSEC);
- }
- };
-
- /**
- * Handle a key up event on the virtual key.
- * @param {UIEvent} evt The UI event which triggered the key up.
- */
- var upHandler = function(evt) {
- // Prevent any of the system gestures from happening.
- evt.preventDefault();
-
- // Reset long-press timer.
- if (key.longPressTimer) {
- clearTimeout(key.longPressTimer);
- delete key.longPressTimer
- }
-
- // If they key was not actually pressed do not send a key up event.
- if (!key.pressed) {
- return;
- }
- key.pressed = false;
-
- // Cancel running repeat timer for the released key only.
- if (repeatKey.key == key) {
- repeatKey.cancel();
- }
-
- if (keyUpHandler) {
- keyUpHandler();
- }
- };
-
- var outHandler = function(evt) {
- // Key element contains a div that holds text like this.
- //
- // <div class="key r1">
- // <div class="text-key">a</div>
- // </div>
- //
- // We are interested in mouseout event sent when mouse cursor moves out of
- // the external div, but mouseout event is sent when mouse cursor moves out
- // of the internal div or moves into the internal div, too.
- // Filter out the last two cases here.
- if (evt.target != evt.currentTarget ||
- evt.toElement.parentNode == evt.fromElement) {
- return;
- }
- // Reset key press state if the point goes out of the element.
- key.pressed = false;
- // Reset long-press timer.
- if (key.longPressTimer) {
- clearTimeout(key.longPressTimer);
- delete key.longPressTimer
- }
- }
-
- // Setup mouse event handlers.
- element.addEventListener('mousedown', downHandler);
- element.addEventListener('mouseup', upHandler);
- element.addEventListener('mouseout', outHandler);
-
- // Setup touch handlers.
- element.addEventListener('touchstart', downHandler);
- element.addEventListener('touchend', upHandler);
- // TODO(mazda): Add a handler for touchleave once Webkit supports it.
- // element.addEventListener('touchleave', outHandler);
-}
-
-/**
- * Create closure for the sendKey function.
- * @param {string} key The key paramater to sendKey.
- * @return {function()} A function which calls sendKey(key).
- */
-function sendKeyFunction(key) {
- return function() {
- sendKey(key);
- };
-}
-
-/**
- * Dispatch custom events to the elements at the touch points.
- * touchmove_popup events are dispatched responding to a touchmove and
- * touchend_popup events responding to a touchend event respectively.
- * @param {UIEvent} evt The touch event that contains touch points information.
- * @return {void}
- */
-function dispatchCustomPopupEvents(evt) {
- var type = null;
- var touches = null;
- if (evt.type == 'touchmove') {
- type = 'touchmove_popup';
- touches = evt.touches;
- } else if (evt.type == 'touchend') {
- type = 'touchend_popup';
- touches = evt.changedTouches;
- } else {
- return;
- }
-
- for (var i = 0; i < touches.length; ++i) {
- var dispatchedEvent = document.createEvent('Event');
- dispatchedEvent.initEvent(type, true, false);
- var touch = touches[i];
- var key = document.elementFromPoint(touch.screenX, touch.screenY);
- if (key) {
- key.dispatchEvent(dispatchedEvent);
- }
- }
-}
-
-/**
- * Handle a touch move event on the key to make changes to the popup keyboard.
- * @param {UIEvent} evt The UI event which triggered the touch move.
- * @return {void}
-*/
-function trackTouchMoveForPopup(evt) {
- var previous = touchedKeys;
- touchedKeys = [];
- dispatchCustomPopupEvents(evt);
- for (var i = 0; i < previous.length; ++i) {
- if (touchedKeys.indexOf(previous[i]) == -1) {
- previous[i].classList.remove('highlighted');
- }
- }
- for (var i = 0; i < touchedKeys.length; ++i) {
- touchedKeys[i].classList.add('highlighted');
- }
-}
-
-/**
- * Handle a touch end event on the key to make changes to the popup keyboard.
- * @param {UIEvent} evt The UI event which triggered the touch end.
- * @return {void}
-*/
-function trackTouchEndForPopup(evt) {
- for (var i = 0; i < touchedKeys.length; ++i) {
- touchedKeys[i].classList.remove('highlighted');
- }
- dispatchCustomPopupEvents(evt);
- hidePopupKeyboard();
-
- touchedKeys = [];
- evt.target.removeEventListener('touchmove', trackTouchMoveForPopup);
- evt.target.removeEventListener('touchend', trackTouchEndForPopup);
-}
-
-/**
- * Show the popup keyboard.
- * @param {string} name The name of the popup keyboard.
- * @param {UIEvent} evt The UI event which triggered the touch start.
- * @return {void}
- */
-function showPopupKeyboard(name, evt) {
- var popupDiv = document.getElementById('popup');
- if (popupDiv.style.visibility == 'visible') {
- return;
- }
-
- // Iitialize the rows of the popup keyboard
- initRows(name, popupDiv, true);
- currentPopupName = name;
-
- // Set the mode of the popup keyboard
- var popupRows = KEYBOARDS[name]['rows'];
- for (var i = 0; i < popupRows.length; ++i) {
- popupRows[i].showMode(currentMode);
- }
-
- // Calculate the size of popup keyboard based on the size of the key.
- var keyElement = evt.currentTarget;
- var keyboard = KEYBOARDS[name];
- var rows = keyboard['definition'];
- var height = keyElement.offsetHeight * rows.length;
- var aspect = keyboard['aspect'];
- var width = aspect * height;
- popupDiv.style.width = width + 'px';
- popupDiv.style.height = height + 'px';
-
- // Place the popup keyboard above the key
- var rect = keyElement.getBoundingClientRect();
- var left = (rect.left + rect.right) / 2 - width / 2;
- left = Math.min(Math.max(left, 0), window.innerWidth - width);
- var top = rect.top - height;
- top = Math.min(Math.max(top, 0), window.innerHeight - height);
- popupDiv.style.left = left + 'px';
- popupDiv.style.top = top + 'px';
- popupDiv.style.visibility = 'visible';
-
- keyElement.addEventListener('touchmove', trackTouchMoveForPopup);
- keyElement.addEventListener('touchend', trackTouchEndForPopup);
-}
-
-/**
- * Create closure for the showPopupKeyboard function.
- * @param {string} name The name paramater to showPopupKeyboard.
- * @return {function()} A function which calls showPopupKeyboard(name, evt).
- */
-function showPopupKeyboardFunction(name) {
- return function (evt) {
- showPopupKeyboard(name, evt);
- };
-}
-
-/**
- * Hide the popup keyboard.
- * @return {void}
- */
-function hidePopupKeyboard() {
- // Clean up the popup keyboard
- var popupDiv = document.getElementById('popup');
- popupDiv.style.visibility = 'hidden';
- while (popupDiv.firstChild) {
- popupDiv.removeChild(popupDiv.firstChild);
- }
- if (currentPopupName in KEYBOARDS) {
- delete KEYBOARDS[currentPopupName].rows;
- }
- currentPopupName = '';
-}
-
-/**
- * Plain-old-data class to represent a character.
- * @param {string} display The HTML to be displayed.
- * @param {string} id The key identifier for this Character.
- * @constructor
- */
-function Character(display, id) {
- this.display = display;
- this.keyIdentifier = id;
-}
-
-/**
- * Convenience function to make the keyboard data more readable.
- * @param {string} display The display for the created Character.
- * @param {string} opt_id The id for the created Character.
- * @return {Character} A character that contains display and opt_id. If
- * opt_id is omitted, display is used as the id.
- */
-function C(display, opt_id) {
- var id = opt_id || display;
- return new Character(display, id);
-}
-
-/**
- * Convenience function to make the keyboard data more readable.
- * @param {string} display The display for the created Character.
- * @param {string} opt_id The id for the created Character.
- * @param {string} opt_popupName The popup keyboard name for this character.
- * @return {Object} An object that contains a Character and the popup keyboard
- * name.
- */
-function CP(display, opt_id, opt_popupName) {
- var result = { character: C(display, opt_id) };
- if (opt_popupName) {
- result['popupName'] = opt_popupName;
- }
- return result;
-}
-
-/**
- * An abstract base-class for all keys on the keyboard.
- * @constructor
- */
-function BaseKey() {}
-
-BaseKey.prototype = {
- /**
- * The cell type of this key. Determines the background colour.
- * @type {string}
- */
- cellType_: '',
-
- /**
- * If true, holding this key will issue repeat keypresses.
- * @type {boolean}
- */
- repeat_: false,
-
- /**
- * Track the pressed state of the key. This is true if currently pressed.
- * @type {boolean}
- */
- pressed_: false,
-
- /**
- * Get the repeat behaviour of the key.
- * @return {boolean} True if the key will repeat.
- */
- get repeat() {
- return this.repeat_;
- },
-
- /**
- * Set the repeat behaviour of the key
- * @param {boolean} repeat True if the key should repeat.
- */
- set repeat(repeat) {
- this.repeat_ = repeat;
- },
-
- /**
- * Get the pressed state of the key.
- * @return {boolean} True if the key is currently pressed.
- */
- get pressed() {
- return this.pressed_;
- },
-
- /**
- * Set the pressed state of the key.
- * @param {boolean} pressed True if the key is currently pressed.
- */
- set pressed(pressed) {
- this.pressed_ = pressed;
- },
-
- /**
- * Create the DOM elements for the given keyboard mode. Must be overridden.
- * @param {string} mode The keyboard mode to create elements for.
- * @return {Element} The top-level DOM Element for the key.
- */
- makeDOM: function(mode) {
- throw new Error('makeDOM not implemented in BaseKey');
- },
-};
-
-/**
- * A simple key which displays Characters.
- * @param {Object} key The Character and the popup name for KEY_MODE.
- * @param {Object} shift The Character and the popup name for SHIFT_MODE.
- * @param {Object} num The Character and the popup name for NUMBER_MODE.
- * @param {Object} symbol The Character and the popup name for SYMBOL_MODE.
- * @constructor
- * @extends {BaseKey}
- */
-function Key(key, shift, num, symbol) {
- this.modeElements_ = {};
- this.cellType_ = '';
-
- this.modes_ = {};
- this.modes_[KEY_MODE] = key ? key.character : null;
- this.modes_[SHIFT_MODE] = shift ? shift.character : null;
- this.modes_[NUMBER_MODE] = num ? num.character : null;
- this.modes_[SYMBOL_MODE] = symbol ? symbol.character : null;
-
- this.popupNames_ = {};
- this.popupNames_[KEY_MODE] = key ? key.popupName : null;
- this.popupNames_[SHIFT_MODE] = shift ? shift.popupName : null;
- this.popupNames_[NUMBER_MODE] = num ? num.popupName : null;
- this.popupNames_[SYMBOL_MODE] = symbol ? symbol.popupName : null;
-}
-
-Key.prototype = {
- __proto__: BaseKey.prototype,
-
- /** @inheritDoc */
- makeDOM: function(mode) {
- if (!this.modes_[mode]) {
- return null;
- }
-
- this.modeElements_[mode] = document.createElement('div');
- var element = this.modeElements_[mode];
- element.className = 'key';
-
- addContent(element, this.modes_[mode].display);
-
- var longHandler = this.popupNames_[mode] ?
- showPopupKeyboardFunction(this.popupNames_[mode]) : null;
- setupKeyEventHandlers(this, element,
- { 'up': sendKeyFunction(this.modes_[mode].keyIdentifier),
- 'long': longHandler });
- return element;
- }
-};
-
-/**
- * A simple key which displays Characters on the popup keyboard.
- * @param {Character} key The Character for KEY_MODE.
- * @param {Character} shift The Character for SHIFT_MODE.
- * @param {Character} num The Character for NUMBER_MODE.
- * @param {Character} symbol The Character for SYMBOL_MODE.
- * @constructor
- * @extends {BaseKey}
- */
-function PopupKey(key, shift, num, symbol) {
- this.modeElements_ = {};
- this.cellType_ = '';
-
- this.modes_ = {};
- this.modes_[KEY_MODE] = key;
- this.modes_[SHIFT_MODE] = shift;
- this.modes_[NUMBER_MODE] = num;
- this.modes_[SYMBOL_MODE] = symbol;
-}
-
-PopupKey.prototype = {
- __proto__: BaseKey.prototype,
-
- /** @inheritDoc */
- makeDOM: function(mode) {
- if (!this.modes_[mode]) {
- return null;
- }
-
- this.modeElements_[mode] = document.createElement('div');
- var element = this.modeElements_[mode];
- element.className = 'key popupkey';
-
- addContent(element, this.modes_[mode].display);
-
- var upHandler = sendKeyFunction(this.modes_[mode].keyIdentifier);
- element.addEventListener('touchmove_popup', function(evt) {
- touchedKeys.push(element);
- });
- element.addEventListener('touchend_popup', upHandler);
- element.addEventListener('mouseup', upHandler);
- element.addEventListener('mouseover', function(evt) {
- element.classList.add('highlighted');
- });
- element.addEventListener('mouseout', function(evt) {
- element.classList.remove('highlighted');
- });
- return element;
- }
-};
-
-/**
- * A key which displays an SVG image.
- * @param {string} className The class that provides the image.
- * @param {string} keyId The key identifier for the key.
- * @param {boolean} opt_repeat True if the key should repeat.
- * @constructor
- * @extends {BaseKey}
- */
-function SvgKey(className, keyId, opt_repeat) {
- this.modeElements_ = {};
- this.cellType_ = 'nc';
- this.className_ = className;
- this.keyId_ = keyId;
- this.repeat_ = opt_repeat || false;
-}
-
-SvgKey.prototype = {
- __proto__: BaseKey.prototype,
-
- /** @inheritDoc */
- makeDOM: function(mode) {
- this.modeElements_[mode] = document.createElement('div');
- this.modeElements_[mode].className = 'key';
- this.modeElements_[mode].classList.add(this.className_);
- addContent(this.modeElements_[mode]);
-
- // send the key event on key down if key repeat is enabled
- var handler = this.repeat_ ? { 'down' : sendKeyFunction(this.keyId_) } :
- { 'up' : sendKeyFunction(this.keyId_) };
- setupKeyEventHandlers(this, this.modeElements_[mode], handler);
-
- return this.modeElements_[mode];
- }
-};
-
-/**
- * A Key that remains the same through all modes.
- * @param {string} content The display text for the key.
- * @param {string} keyId The key identifier for the key.
- * @constructor
- * @extends {BaseKey}
- */
-function SpecialKey(className, content, keyId) {
- this.modeElements_ = {};
- this.cellType_ = 'nc';
- this.content_ = content;
- this.keyId_ = keyId;
- this.className_ = className;
-}
-
-SpecialKey.prototype = {
- __proto__: BaseKey.prototype,
-
- /** @inheritDoc */
- makeDOM: function(mode) {
- this.modeElements_[mode] = document.createElement('div');
- this.modeElements_[mode].className = 'key';
- this.modeElements_[mode].classList.add(this.className_);
- addContent(this.modeElements_[mode], this.content_);
-
- setupKeyEventHandlers(this, this.modeElements_[mode],
- { 'up': sendKeyFunction(this.keyId_) });
-
- return this.modeElements_[mode];
- }
-};
-
-/**
- * A shift key.
- * @constructor
- * @extends {BaseKey}
- */
-function ShiftKey(className) {
- this.modeElements_ = {};
- this.cellType_ = 'nc';
- this.className_ = className;
-}
-
-ShiftKey.prototype = {
- __proto__: BaseKey.prototype,
-
- /** @inheritDoc */
- makeDOM: function(mode) {
- this.modeElements_[mode] = document.createElement('div');
- this.modeElements_[mode].className = 'key shift';
- this.modeElements_[mode].classList.add(this.className_);
-
- if (mode == KEY_MODE || mode == SHIFT_MODE) {
- addContent(this.modeElements_[mode]);
- } else if (mode == NUMBER_MODE) {
- addContent(this.modeElements_[mode], 'more');
- } else if (mode == SYMBOL_MODE) {
- addContent(this.modeElements_[mode], '#123');
- }
-
- if (mode == SHIFT_MODE || mode == SYMBOL_MODE) {
- this.modeElements_[mode].classList.add('moddown');
- } else {
- this.modeElements_[mode].classList.remove('moddown');
- }
-
- setupKeyEventHandlers(this, this.modeElements_[mode],
- { 'down': function() {
- transitionMode(SHIFT_MODE);
- }});
-
- return this.modeElements_[mode];
- },
-};
-
-/**
- * The symbol key: switches the keyboard into symbol mode.
- * @constructor
- * @extends {BaseKey}
- */
-function SymbolKey() {
- this.modeElements_ = {}
- this.cellType_ = 'nc';
-}
-
-SymbolKey.prototype = {
- __proto__: BaseKey.prototype,
-
- /** @inheritDoc */
- makeDOM: function(mode, height) {
- this.modeElements_[mode] = document.createElement('div');
- this.modeElements_[mode].className = 'key symbol';
-
- if (mode == KEY_MODE || mode == SHIFT_MODE) {
- addContent(this.modeElements_[mode], '#123');
- } else if (mode == NUMBER_MODE || mode == SYMBOL_MODE) {
- addContent(this.modeElements_[mode], 'abc');
- }
-
- if (mode == NUMBER_MODE || mode == SYMBOL_MODE) {
- this.modeElements_[mode].classList.add('moddown');
- } else {
- this.modeElements_[mode].classList.remove('moddown');
- }
-
- setupKeyEventHandlers(this, this.modeElements_[mode],
- { 'down': function() {
- transitionMode(NUMBER_MODE);
- }});
-
- return this.modeElements_[mode];
- }
-};
-
-/**
- * The ".com" key.
- * @constructor
- * @extends {BaseKey}
- */
-function DotComKey() {
- this.modeElements_ = {}
- this.cellType_ = 'nc';
-}
-
-DotComKey.prototype = {
- __proto__: BaseKey.prototype,
-
- /** @inheritDoc */
- makeDOM: function(mode) {
- this.modeElements_[mode] = document.createElement('div');
- this.modeElements_[mode].className = 'key com';
- addContent(this.modeElements_[mode], '.com');
-
- setupKeyEventHandlers(this, this.modeElements_[mode],
- { 'up': function() {
- sendKey('.');
- sendKey('c');
- sendKey('o');
- sendKey('m');
- }});
-
- return this.modeElements_[mode];
- }
-};
-
-/**
- * The key that hides the keyboard.
- * @constructor
- * @extends {BaseKey}
- */
-function HideKeyboardKey() {
- this.modeElements_ = {}
- this.cellType_ = 'nc';
-}
-
-HideKeyboardKey.prototype = {
- __proto__: BaseKey.prototype,
-
- /** @inheritDoc */
- makeDOM: function(mode) {
- this.modeElements_[mode] = document.createElement('div');
- this.modeElements_[mode].className = 'key hide';
- addContent(this.modeElements_[mode]);
-
- setupKeyEventHandlers(this, this.modeElements_[mode],
- { 'down': function() {
- if (chrome.experimental) {
- chrome.experimental.input.virtualKeyboard.hideKeyboard();
- }
- }});
-
- return this.modeElements_[mode];
- }
-};
-
-/**
- * A container for keys.
- * @param {number} position The position of the row (0-3).
- * @param {Array.<BaseKey>} keys The keys in the row.
- * @constructor
- */
-function Row(position, keys) {
- this.position_ = position;
- this.keys_ = keys;
- this.element_ = null;
- this.modeElements_ = {};
-}
-
-Row.prototype = {
- /**
- * Create the DOM elements for the row.
- * @return {Element} The top-level DOM Element for the row.
- */
- makeDOM: function() {
- this.element_ = document.createElement('div');
- this.element_.className = 'row';
- for (var i = 0; i < MODES.length; ++i) {
- var mode = MODES[i];
- this.modeElements_[mode] = document.createElement('div');
- this.modeElements_[mode].style.display = 'none';
- this.element_.appendChild(this.modeElements_[mode]);
- }
-
- for (var j = 0; j < this.keys_.length; ++j) {
- var key = this.keys_[j];
- for (var i = 0; i < MODES.length; ++i) {
- var keyDom = key.makeDOM(MODES[i]);
- if (keyDom) {
- this.modeElements_[MODES[i]].appendChild(keyDom);
- }
- }
- }
-
- for (var i = 0; i < MODES.length; ++i) {
- var clearingDiv = document.createElement('div');
- clearingDiv.style.clear = 'both';
- this.modeElements_[MODES[i]].appendChild(clearingDiv);
- }
-
- return this.element_;
- },
-
- /**
- * Shows the given mode.
- * @param {string} mode The mode to show.
- * @return {void}
- */
- showMode: function(mode) {
- for (var i = 0; i < MODES.length; ++i) {
- this.modeElements_[MODES[i]].style.display = 'none';
- }
- this.modeElements_[mode].style.display = '-webkit-box';
- },
-
- /**
- * Returns the size of keys this row contains.
- * @return {number} The size of keys.
- */
- get length() {
- return this.keys_.length;
- }
-};
« no previous file with comments | « chrome/browser/resources/keyboard/chevron.svg ('k') | chrome/browser/resources/keyboard/del.svg » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698