blob: 63620c6b5ed19c6d1f56fc3283f38ff7a10cc4cb [file] [log] [blame]
// 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();
};