| Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/panel.js
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/panel.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/panel.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..286fc92b9ab41c2ad4080f2cc7ababa2cf715bcb
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/panel.js
|
| @@ -0,0 +1,150 @@
|
| +// Copyright 2015 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 ChromeVox panel.
|
| + *
|
| + */
|
| +
|
| +goog.provide('Panel');
|
| +
|
| +goog.require('Msgs');
|
| +goog.require('PanelCommand');
|
| +
|
| +function $(id) {
|
| + return document.getElementById(id);
|
| +}
|
| +
|
| +/**
|
| + * Class to manage the panel.
|
| + * @constructor
|
| + */
|
| +Panel = function() {
|
| +};
|
| +
|
| +/**
|
| + * Initialize the panel.
|
| + */
|
| +Panel.init = function() {
|
| + /** @type {Element} @private */
|
| + this.speechContainer_ = $('speech-container');
|
| +
|
| + /** @type {Element} @private */
|
| + this.speechElement_ = $('speech');
|
| +
|
| + /** @type {Element} @private */
|
| + this.brailleContainer_ = $('braille-container');
|
| +
|
| + /** @type {Element} @private */
|
| + this.brailleTextElement_ = $('braille-text');
|
| +
|
| + /** @type {Element} @private */
|
| + this.brailleCellsElement_ = $('braille-cells');
|
| +
|
| + Panel.updateFromPrefs();
|
| + window.addEventListener('storage', function(event) {
|
| + if (event.key == 'brailleCaptions') {
|
| + Panel.updateFromPrefs();
|
| + }
|
| + }, false);
|
| +
|
| + window.addEventListener('message', function(message) {
|
| + var command = JSON.parse(message.data);
|
| + Panel.exec(/** @type {PanelCommand} */(command));
|
| + }, false);
|
| +
|
| + $('menu').addEventListener('click', Panel.onMenu, false);
|
| + $('options').addEventListener('click', Panel.onOptions, false);
|
| + $('close').addEventListener('click', Panel.onClose, false);
|
| +
|
| + Msgs.addTranslatedMessagesToDom(document);
|
| +};
|
| +
|
| +/**
|
| + * Update the display based on prefs.
|
| + */
|
| +Panel.updateFromPrefs = function() {
|
| + if (localStorage['brailleCaptions'] === String(true)) {
|
| + this.speechContainer_.style.visibility = 'hidden';
|
| + this.brailleContainer_.style.visibility = 'visible';
|
| + } else {
|
| + this.speechContainer_.style.visibility = 'visible';
|
| + this.brailleContainer_.style.visibility = 'hidden';
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * Execute a command to update the panel.
|
| + *
|
| + * @param {PanelCommand} command The command to execute.
|
| + */
|
| +Panel.exec = function(command) {
|
| + /**
|
| + * Escape text so it can be safely added to HTML.
|
| + * @param {*} str Text to be added to HTML, will be cast to string.
|
| + * @return {string} The escaped string.
|
| + */
|
| + function escapeForHtml(str) {
|
| + return String(str)
|
| + .replace(/&/g, '&')
|
| + .replace(/</g, '<')
|
| + .replace(/\>/g, '>')
|
| + .replace(/"/g, '"')
|
| + .replace(/'/g, ''')
|
| + .replace(/\//g, '/');
|
| + }
|
| +
|
| + switch (command.type) {
|
| + case PanelCommandType.CLEAR_SPEECH:
|
| + this.speechElement_.innerHTML = '';
|
| + break;
|
| + case PanelCommandType.ADD_NORMAL_SPEECH:
|
| + if (this.speechElement_.innerHTML != '') {
|
| + this.speechElement_.innerHTML += ' ';
|
| + }
|
| + this.speechElement_.innerHTML += '<span class="usertext">' +
|
| + escapeForHtml(command.data) +
|
| + '</span>';
|
| + break;
|
| + case PanelCommandType.ADD_ANNOTATION_SPEECH:
|
| + if (this.speechElement_.innerHTML != '') {
|
| + this.speechElement_.innerHTML += ' ';
|
| + }
|
| + this.speechElement_.innerHTML += escapeForHtml(command.data);
|
| + break;
|
| + case PanelCommandType.UPDATE_BRAILLE:
|
| + this.brailleTextElement_.textContent = command.data.text;
|
| + this.brailleCellsElement_.textContent = command.data.braille;
|
| + break;
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * Open the ChromeVox Menu.
|
| + */
|
| +Panel.onMenu = function() {
|
| + window.location = '#fullscreen';
|
| + // TODO(dmazzoni): implement the menu UI here.
|
| +};
|
| +
|
| +/**
|
| + * Open the ChromeVox Options.
|
| + */
|
| +Panel.onOptions = function() {
|
| + var bkgnd =
|
| + chrome.extension.getBackgroundPage()['global']['backgroundObj'];
|
| + bkgnd['showOptionsPage']();
|
| + window.location = '#';
|
| +};
|
| +
|
| +/**
|
| + * Exit ChromeVox.
|
| + */
|
| +Panel.onClose = function() {
|
| + window.location = '#close';
|
| +};
|
| +
|
| +window.addEventListener('load', function() {
|
| + Panel.init();
|
| +}, false);
|
|
|