1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @fileoverview Widget presenting all keyboard commands. 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.provide('cvox.KeyboardHelpWidget'); 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.require('cvox.ChromeVox'); 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.require('cvox.CommandStore'); 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.require('cvox.KeyUtil'); 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.require('cvox.OverlayWidget'); 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @constructor 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @extends {cvox.OverlayWidget} 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.KeyboardHelpWidget = function() { 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) goog.base(this, ''); 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.container_ = document.createElement('div'); 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var list = []; 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var callbacks = []; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var keymap = cvox.ChromeVoxKbHandler.handlerKeyMap; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) keymap.bindings().forEach(goog.bind(function(pair) { 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var command = pair.command; 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var keySeq = pair.sequence; 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var message = command; 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) try { 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var id = cvox.CommandStore.messageForCommand(command); 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!id) { 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message = cvox.ChromeVox.msgs.getMsg(id); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } catch (e) { 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TODO(dtseng): We have some commands that don't have valid message id's. 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var commandElement = document.createElement('p'); 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) commandElement.id = command; 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) commandElement.setAttribute('role', 'menuitem'); 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) commandElement.textContent = 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message + ' - ' + cvox.KeyUtil.keySequenceToString(keySeq, true); 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.container_.appendChild(commandElement); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }, this)); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.inherits(cvox.KeyboardHelpWidget, cvox.OverlayWidget); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)goog.addSingletonGetter(cvox.KeyboardHelpWidget); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @override 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.KeyboardHelpWidget.prototype.show = function() { 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) goog.base(this, 'show'); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.host_.appendChild(this.container_); 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @override 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.KeyboardHelpWidget.prototype.getNameMsg = function() { 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return ['keyboard_help_intro']; 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @override 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)cvox.KeyboardHelpWidget.prototype.onKeyDown = function(evt) { 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (evt.keyCode == 13) { // Enter 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var currentCommand = 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cvox.ChromeVox.navigationManager.getCurrentNode().parentNode.id; 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.hide(); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cvox.ChromeVoxEventSuspender.withSuspendedEvents( 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cvox.ChromeVoxUserCommands.commands[currentCommand])(); 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) evt.preventDefault(); 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) evt.stopPropagation(); 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return goog.base(this, 'onKeyDown', evt); 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 86