| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 Google Inc. All Rights Reserved. | |
| 2 | |
| 3 /** | |
| 4 * @fileoverview Context Menu for Search. | |
| 5 * @author peterxiao@google.com (Peter Xiao) | |
| 6 */ | |
| 7 | |
| 8 goog.provide('cvox.SearchContextMenu'); | |
| 9 | |
| 10 goog.require('cvox.ChromeVoxKbHandler'); | |
| 11 goog.require('cvox.KeySequence'); | |
| 12 goog.require('cvox.Search'); | |
| 13 goog.require('cvox.SearchTool'); | |
| 14 | |
| 15 /** | |
| 16 * @constructor | |
| 17 */ | |
| 18 cvox.SearchContextMenu = function() { | |
| 19 }; | |
| 20 | |
| 21 /* Globals */ | |
| 22 var Command = { | |
| 23 TOOLS: 'tools', | |
| 24 ADS: 'ads', | |
| 25 MAIN: 'main' | |
| 26 }; | |
| 27 | |
| 28 /** | |
| 29 * Current focus Search is in. | |
| 30 */ | |
| 31 cvox.SearchContextMenu.currState = Command.MAIN; | |
| 32 | |
| 33 /** | |
| 34 * Handles context menu events. | |
| 35 * @param {Event} evt Event received. | |
| 36 */ | |
| 37 cvox.SearchContextMenu.contextMenuHandler = function(evt) { | |
| 38 var cmd = evt.detail['customCommand']; | |
| 39 switch (cmd) { | |
| 40 case Command.TOOLS: | |
| 41 cvox.SearchContextMenu.focusTools(); | |
| 42 break; | |
| 43 | |
| 44 case Command.ADS: | |
| 45 cvox.SearchContextMenu.focusAds(); | |
| 46 break; | |
| 47 | |
| 48 case Command.MAIN: | |
| 49 cvox.SearchContextMenu.focusMain(); | |
| 50 break; | |
| 51 } | |
| 52 }; | |
| 53 | |
| 54 /** | |
| 55 * Handles key events. | |
| 56 * @param {Event} evt Event received. | |
| 57 * @return {boolean} True if key was handled, false otherwise. | |
| 58 */ | |
| 59 cvox.SearchContextMenu.keyhandler = function(evt) { | |
| 60 var ret = false; | |
| 61 var keySeq = new cvox.KeySequence(evt); | |
| 62 var command = cvox.ChromeVoxKbHandler.handlerKeyMap.commandForKey(keySeq); | |
| 63 /* Handle if just default action. */ | |
| 64 if (!command || command === 'performDefaultAction') { | |
| 65 switch (cvox.SearchContextMenu.currState) { | |
| 66 case Command.TOOLS: | |
| 67 ret = cvox.SearchTool.keyhandler(evt); | |
| 68 break; | |
| 69 case Command.ADS: | |
| 70 case Command.MAIN: | |
| 71 ret = cvox.Search.keyhandler(evt); | |
| 72 break; | |
| 73 } | |
| 74 } | |
| 75 return ret; | |
| 76 }; | |
| 77 | |
| 78 /** | |
| 79 * Switch to main search results focus. | |
| 80 */ | |
| 81 cvox.SearchContextMenu.focusMain = function() { | |
| 82 if (cvox.SearchContextMenu.currState === Command.TOOLS) { | |
| 83 cvox.SearchTool.toggleMenu(); | |
| 84 } | |
| 85 cvox.Search.populateResults(); | |
| 86 cvox.Search.index = 0; | |
| 87 cvox.Search.syncToIndex(); | |
| 88 cvox.SearchContextMenu.currState = Command.MAIN; | |
| 89 }; | |
| 90 | |
| 91 /** | |
| 92 * Switch to ads focus. | |
| 93 */ | |
| 94 cvox.SearchContextMenu.focusAds = function() { | |
| 95 cvox.Search.populateAdResults(); | |
| 96 if (cvox.Search.results.length === 0) { | |
| 97 cvox.SearchContextMenu.focusMain(); | |
| 98 return; | |
| 99 } | |
| 100 cvox.Search.index = 0; | |
| 101 cvox.Search.syncToIndex(); | |
| 102 | |
| 103 if (cvox.SearchContextMenu.currState === Command.TOOLS) { | |
| 104 cvox.SearchTool.toggleMenu(); | |
| 105 } | |
| 106 | |
| 107 cvox.SearchContextMenu.currState = Command.ADS; | |
| 108 }; | |
| 109 | |
| 110 /** | |
| 111 * Switch to tools focus. | |
| 112 */ | |
| 113 cvox.SearchContextMenu.focusTools = function() { | |
| 114 if (cvox.SearchContextMenu.currState !== Command.TOOLS) { | |
| 115 cvox.SearchTool.activateTools(); | |
| 116 cvox.SearchContextMenu.currState = Command.TOOLS; | |
| 117 } | |
| 118 }; | |
| 119 | |
| 120 /** | |
| 121 * Initializes the context menu. | |
| 122 */ | |
| 123 cvox.SearchContextMenu.init = function() { | |
| 124 var ACTIONS = [ | |
| 125 { desc: 'Main Results', cmd: Command.MAIN }, | |
| 126 { desc: 'Search Tools', cmd: Command.TOOLS }, | |
| 127 { desc: 'Ads', cmd: Command.ADS } | |
| 128 ]; | |
| 129 /* Attach ContextMenuActions. */ | |
| 130 var body = document.querySelector('body'); | |
| 131 body.setAttribute('contextMenuActions', JSON.stringify(ACTIONS)); | |
| 132 | |
| 133 /* Listen for ContextMenu events. */ | |
| 134 body.addEventListener('ATCustomEvent', | |
| 135 cvox.SearchContextMenu.contextMenuHandler, true); | |
| 136 | |
| 137 window.addEventListener('keydown', cvox.SearchContextMenu.keyhandler, true); | |
| 138 cvox.Search.init(); | |
| 139 }; | |
| OLD | NEW |