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