| // Copyright 2013 Google Inc. All Rights Reserved. |
| |
| /** |
| * @fileoverview Context Menu for Search. |
| * @author peterxiao@google.com (Peter Xiao) |
| */ |
| |
| goog.provide('cvox.SearchContextMenu'); |
| |
| goog.require('cvox.ChromeVoxKbHandler'); |
| goog.require('cvox.KeySequence'); |
| goog.require('cvox.Search'); |
| goog.require('cvox.SearchTool'); |
| |
| /** |
| * @constructor |
| */ |
| cvox.SearchContextMenu = function() { |
| }; |
| |
| /* Globals */ |
| var Command = { |
| TOOLS: 'tools', |
| ADS: 'ads', |
| MAIN: 'main' |
| }; |
| |
| /** |
| * Current focus Search is in. |
| */ |
| cvox.SearchContextMenu.currState = Command.MAIN; |
| |
| /** |
| * Handles context menu events. |
| * @param {Event} evt Event received. |
| */ |
| cvox.SearchContextMenu.contextMenuHandler = function(evt) { |
| var cmd = evt.detail['customCommand']; |
| switch (cmd) { |
| case Command.TOOLS: |
| cvox.SearchContextMenu.focusTools(); |
| break; |
| |
| case Command.ADS: |
| cvox.SearchContextMenu.focusAds(); |
| break; |
| |
| case Command.MAIN: |
| cvox.SearchContextMenu.focusMain(); |
| break; |
| } |
| }; |
| |
| /** |
| * Handles key events. |
| * @param {Event} evt Event received. |
| * @return {boolean} True if key was handled, false otherwise. |
| */ |
| cvox.SearchContextMenu.keyhandler = function(evt) { |
| var ret = false; |
| var keySeq = new cvox.KeySequence(evt); |
| var command = cvox.ChromeVoxKbHandler.handlerKeyMap.commandForKey(keySeq); |
| /* Handle if just default action. */ |
| if (!command || command === 'performDefaultAction') { |
| switch (cvox.SearchContextMenu.currState) { |
| case Command.TOOLS: |
| ret = cvox.SearchTool.keyhandler(evt); |
| break; |
| case Command.ADS: |
| case Command.MAIN: |
| ret = cvox.Search.keyhandler(evt); |
| break; |
| } |
| } |
| return ret; |
| }; |
| |
| /** |
| * Switch to main search results focus. |
| */ |
| cvox.SearchContextMenu.focusMain = function() { |
| if (cvox.SearchContextMenu.currState === Command.TOOLS) { |
| cvox.SearchTool.toggleMenu(); |
| } |
| cvox.Search.populateResults(); |
| cvox.Search.index = 0; |
| cvox.Search.syncToIndex(); |
| cvox.SearchContextMenu.currState = Command.MAIN; |
| }; |
| |
| /** |
| * Switch to ads focus. |
| */ |
| cvox.SearchContextMenu.focusAds = function() { |
| cvox.Search.populateAdResults(); |
| if (cvox.Search.results.length === 0) { |
| cvox.SearchContextMenu.focusMain(); |
| return; |
| } |
| cvox.Search.index = 0; |
| cvox.Search.syncToIndex(); |
| |
| if (cvox.SearchContextMenu.currState === Command.TOOLS) { |
| cvox.SearchTool.toggleMenu(); |
| } |
| |
| cvox.SearchContextMenu.currState = Command.ADS; |
| }; |
| |
| /** |
| * Switch to tools focus. |
| */ |
| cvox.SearchContextMenu.focusTools = function() { |
| if (cvox.SearchContextMenu.currState !== Command.TOOLS) { |
| cvox.SearchTool.activateTools(); |
| cvox.SearchContextMenu.currState = Command.TOOLS; |
| } |
| }; |
| |
| /** |
| * Initializes the context menu. |
| */ |
| cvox.SearchContextMenu.init = function() { |
| var ACTIONS = [ |
| { desc: 'Main Results', cmd: Command.MAIN }, |
| { desc: 'Search Tools', cmd: Command.TOOLS }, |
| { desc: 'Ads', cmd: Command.ADS } |
| ]; |
| /* Attach ContextMenuActions. */ |
| var body = document.querySelector('body'); |
| body.setAttribute('contextMenuActions', JSON.stringify(ACTIONS)); |
| |
| /* Listen for ContextMenu events. */ |
| body.addEventListener('ATCustomEvent', |
| cvox.SearchContextMenu.contextMenuHandler, true); |
| |
| window.addEventListener('keydown', cvox.SearchContextMenu.keyhandler, true); |
| cvox.Search.init(); |
| }; |