Index: chrome/third_party/chromevox/extensions/searchvox/results.js |
diff --git a/chrome/third_party/chromevox/extensions/searchvox/results.js b/chrome/third_party/chromevox/extensions/searchvox/results.js |
deleted file mode 100644 |
index 405a6ec1bed49d7752a0a3d4ccfe15f23e0b2bdf..0000000000000000000000000000000000000000 |
--- a/chrome/third_party/chromevox/extensions/searchvox/results.js |
+++ /dev/null |
@@ -1,466 +0,0 @@ |
-// Copyright 2012 Google Inc. All Rights Reserved. |
- |
-/** |
- * @fileoverview Provides different rules for each type of result. |
- * @author peterxiao@google.com (Peter Xiao) |
- */ |
- |
-goog.provide('cvox.SearchResults'); |
-goog.provide('cvox.UnknownResult'); |
- |
-goog.require('cvox.AbstractResult'); |
-goog.require('cvox.ChromeVox'); |
-goog.require('cvox.SearchUtil'); |
- |
-/** |
- * @constructor |
- */ |
-cvox.SearchResults = function() { |
-}; |
- |
-/** |
- * Speaks a result based on given selectors. |
- * @param {Element} result Search result to be spoken. |
- * @param {Array} selectTexts Array of selectors or text to speak. |
- */ |
-cvox.SearchResults.speakResultBySelectTexts = function(result, selectTexts) { |
- for (var j = 0; j < selectTexts.length; j++) { |
- var selectText = selectTexts[j]; |
- if (selectText.select) { |
- var elems = result.querySelectorAll(selectText.select); |
- for (var i = 0; i < elems.length; i++) { |
- cvox.ChromeVox.speakNode(elems.item(i), 1); |
- } |
- } |
- if (selectText.text) { |
- cvox.ChromeVox.tts.speak(selectText.text, 1); |
- } |
- } |
-}; |
- |
-/** |
- * Unknown Result Type. This is used if we don't know what to do. |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.UnknownResult = function() { |
-}; |
-goog.inherits(cvox.UnknownResult, cvox.AbstractResult); |
- |
-/* Normal Result Type. */ |
-/** |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.NormalResult = function() { |
-}; |
-goog.inherits(cvox.NormalResult, cvox.AbstractResult); |
- |
-/** |
- * Checks the result if it is a normal result. |
- * @param {Element} result Result to be checked. |
- * @return {boolean} Whether or not the element is a normal result. |
- * @override |
- */ |
-cvox.NormalResult.prototype.isType = function(result) { |
- var NORMAL_SELECT = '.rc'; |
- return result.querySelector(NORMAL_SELECT) !== null; |
-}; |
- |
-/** |
- * Speak a normal search result. |
- * @param {Element} result Normal result to be spoken. |
- * @return {boolean} Whether or not the result was spoken. |
- * @override |
- */ |
-cvox.NormalResult.prototype.speak = function(result) { |
- if (!result) { |
- return false; |
- } |
- var NORMAL_TITLE_SELECT = '.rc .r'; |
- var NORMAL_URL_SELECT = '.kv'; |
- var NORMAL_DESC_SELECT = '.rc .st'; |
- var SITE_LINK_SELECT = '.osl'; |
- var MORE_RESULTS_SELECT = '.sld'; |
- var MORE_RESULTS_LINK_SELECT = '.mrf'; |
- |
- var NORMAL_SELECTORS = [ |
- { select: NORMAL_TITLE_SELECT }, |
- { select: NORMAL_DESC_SELECT }, |
- { select: NORMAL_URL_SELECT }, |
- { select: SITE_LINK_SELECT }, |
- { select: MORE_RESULTS_SELECT }, |
- { select: MORE_RESULTS_LINK_SELECT }]; |
- cvox.SearchResults.speakResultBySelectTexts(result, NORMAL_SELECTORS); |
- |
- var DISCUSS_TITLE_SELECT = '.mas-1st-col div'; |
- var DISCUSS_DATE_SELECT = '.mas-col div'; |
- var discussTitles = result.querySelectorAll(DISCUSS_TITLE_SELECT); |
- var discussDates = result.querySelectorAll(DISCUSS_DATE_SELECT); |
- for (var i = 0; i < discussTitles.length; i++) { |
- cvox.ChromeVox.speakNode(discussTitles.item(i), 1); |
- cvox.ChromeVox.speakNode(discussDates.item(i), 1); |
- } |
- return true; |
-}; |
- |
-/* Weather Result */ |
-/** |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.WeatherResult = function() { |
-}; |
-goog.inherits(cvox.WeatherResult, cvox.AbstractResult); |
- |
-/** |
- * Checks the result if it is a weather result. |
- * @param {Element} result Result to be checked. |
- * @return {boolean} Whether or not the element is a weather result. |
- * @override |
- */ |
-cvox.WeatherResult.prototype.isType = function(result) { |
- var WEATHER_SELECT = '#wob_wc'; |
- return result.querySelector(WEATHER_SELECT) !== null; |
-}; |
- |
-/** |
- * Speak a weather forecast. |
- * @param {Element} forecast Weather forecast to be spoken. |
- */ |
-cvox.WeatherResult.speakForecast = function(forecast) { |
- if (!forecast) { |
- return; |
- } |
- var FORE_DAY_SELECT = '.vk_lgy'; |
- var FORE_COND_SELECT = 'img'; |
- var FORE_HIGH_SELECT = '.vk_gy'; |
- var FORE_LOW_SELECT = '.vk_lgy'; |
- |
- var FORE_SELECTORS = [ |
- { select: FORE_DAY_SELECT }, |
- { select: FORE_COND_SELECT }, |
- { select: FORE_HIGH_SELECT }, |
- { select: FORE_LOW_SELECT } |
- ]; |
- cvox.SearchResults.speakResultBySelectTexts(forecast, FORE_SELECTORS); |
-}; |
- |
-/** |
- * Speak a weather search result. |
- * @param {Element} result Weather result to be spoken. |
- * @return {boolean} Whether or not the result was spoken. |
- * @override |
- */ |
-cvox.WeatherResult.prototype.speak = function(result) { |
- if (!result) { |
- return false; |
- } |
- /* TODO(peterxiao): Internationalization? */ |
- var WEATHER_INTRO = 'The weather forcast for'; |
- var WEATHER_TEMP_UNITS = 'degrees fahrenheit'; |
- var WEATHER_PREC_INTRO = 'precipitation is'; |
- var WEATHER_HUMID_INTRO = 'humidity is'; |
- var WEATHER_WIND_INTRO = 'wind is'; |
- var FORE_INTRO = 'Forecasts for this week'; |
- var WEATHER_LOC_SELECT = '.vk_h'; |
- var WEATHER_WHEN_SELECT = '#wob_dts'; |
- var WEATHER_COND_SELECT = '#wob_dc'; |
- var WEATHER_TEMP_SELECT = '#wob_tm'; |
- var WEATHER_PREC_SELECT = '#wob_pp'; |
- var WEATHER_HUMID_SELECT = '#wob_hm'; |
- var WEATHER_WIND_SELECT = '#wob_ws'; |
- |
- var WEATHER_SELECT_TEXTS = [ |
- { text: WEATHER_INTRO }, |
- { select: WEATHER_LOC_SELECT }, |
- { select: WEATHER_WHEN_SELECT }, |
- { select: WEATHER_COND_SELECT }, |
- { select: WEATHER_TEMP_SELECT }, |
- { text: WEATHER_TEMP_UNITS }, |
- { text: WEATHER_PREC_INTRO }, |
- { select: WEATHER_PREC_SELECT }, |
- { text: WEATHER_HUMID_INTRO }, |
- { select: WEATHER_HUMID_SELECT }, |
- { text: WEATHER_WIND_INTRO }, |
- { select: WEATHER_WIND_SELECT } |
- ]; |
- cvox.SearchResults.speakResultBySelectTexts(result, WEATHER_SELECT_TEXTS); |
- |
- var WEATHER_FORCAST_CLASS = 'wob_df'; |
- var forecasts = result.getElementsByClassName(WEATHER_FORCAST_CLASS); |
- cvox.ChromeVox.tts.speak(FORE_INTRO, 1); |
- for (var i = 0; i < forecasts.length; i++) { |
- var forecast = forecasts.item(i); |
- cvox.WeatherResult.speakForecast(forecast); |
- } |
- return true; |
-}; |
- |
-/* Knowledge Panel Result */ |
-/** |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.KnowResult = function() { |
-}; |
-goog.inherits(cvox.KnowResult, cvox.AbstractResult); |
- |
-/** |
- * Checks the result if it is a know result. |
- * @param {Element} result Result to be checked. |
- * @return {boolean} Whether or not the element is a know result. |
- * @override |
- */ |
-cvox.KnowResult.prototype.isType = function(result) { |
- var KNOP_SELECT = '.kno-ec'; |
- return result.querySelector(KNOP_SELECT) !== null; |
-}; |
- |
-/** |
- * Speak a knowledge panel search result. |
- * @param {Element} result Knowledge panel result to be spoken. |
- * @return {boolean} Whether or not the result was spoken. |
- * @override |
- */ |
-cvox.KnowResult.prototype.speak = function(result) { |
- cvox.ChromeVox.speakNode(result, 1); |
- return true; |
-}; |
- |
-/** |
- * Extracts the wikipedia URL from knowledge panel. |
- * @param {Element} result Result to extract from. |
- * @return {?string} URL. |
- * @override |
- */ |
-cvox.KnowResult.prototype.getURL = function(result) { |
- var LINK_SELECTOR = '.q'; |
- return cvox.SearchUtil.extractURL(result.querySelector(LINK_SELECTOR)); |
-}; |
- |
-/** |
- * Extracts the node to sync to in the knowledge panel. |
- * @param {Element} result Result. |
- * @return {?Node} Node to sync to. |
- * @override |
- */ |
-cvox.KnowResult.prototype.getSyncNode = function(result) { |
- var HEADER_SELECTOR = '.kno-ecr-pt'; |
- return result.querySelector(HEADER_SELECTOR); |
-}; |
- |
-/* Calculator Type */ |
-/** |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.CalcResult = function() { |
-}; |
-goog.inherits(cvox.CalcResult, cvox.AbstractResult); |
- |
-/** |
- * Checks the result if it is a calculator result. |
- * @param {Element} result Result to be checked. |
- * @return {boolean} Whether or not the element is a calculator result. |
- * @override |
- */ |
-cvox.CalcResult.prototype.isType = function(result) { |
- var CALC_SELECT = '#cwmcwd'; |
- return result.querySelector(CALC_SELECT) !== null; |
-}; |
- |
-/** |
- * Speak a calculator search result. |
- * @param {Element} result Calculator result to be spoken. |
- * @return {boolean} Whether or not the result was spoken. |
- * @override |
- */ |
-cvox.CalcResult.prototype.speak = function(result) { |
- if (!result) { |
- return false; |
- } |
- var CALC_QUERY_SELECT = '#cwles'; |
- var CALC_RESULT_SELECT = '#cwos'; |
- var CALC_SELECTORS = [ |
- { select: CALC_QUERY_SELECT }, |
- { select: CALC_RESULT_SELECT } |
- ]; |
- cvox.SearchResults.speakResultBySelectTexts(result, CALC_SELECTORS); |
- return true; |
-}; |
- |
-/* Game Type */ |
-/** |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.GameResult = function() { |
-}; |
-goog.inherits(cvox.GameResult, cvox.AbstractResult); |
- |
-/** |
- * Checks the result if it is a game result. |
- * @param {Element} result Result to be checked. |
- * @return {boolean} Whether or not the element is a game result. |
- * @override |
- */ |
-cvox.GameResult.prototype.isType = function(result) { |
- var GAME_SELECT = '.xpdbox'; |
- return result.querySelector(GAME_SELECT) !== null; |
-}; |
- |
-/* Image Type */ |
-/** |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.ImageResult = function() { |
-}; |
-goog.inherits(cvox.ImageResult, cvox.AbstractResult); |
- |
-/** |
- * Checks the result if it is a image result. |
- * @param {Element} result Result to be checked. |
- * @return {boolean} Whether or not the element is a image result. |
- * @override |
- */ |
-cvox.ImageResult.prototype.isType = function(result) { |
- var IMAGE_CLASSES = 'rg_di'; |
- return result.className === IMAGE_CLASSES; |
-}; |
- |
-/** |
- * Speak an image result. |
- * @param {Element} result Image result to be spoken. |
- * @return {boolean} Whether or not the result was spoken. |
- * @override |
- */ |
-cvox.ImageResult.prototype.speak = function(result) { |
- if (!result) { |
- return false; |
- } |
- /* Grab image result metadata. */ |
- var META_CLASS = 'rg_meta'; |
- var metaDiv = result.querySelector('.' + META_CLASS); |
- var metaJSON = metaDiv.innerHTML; |
- var metaData = JSON.parse(metaJSON); |
- |
- var imageSelectTexts = []; |
- |
- var filename = metaData['fn']; |
- if (filename) { |
- imageSelectTexts.push({ text: filename }); |
- } |
- |
- var rawDimensions = metaData['is']; |
- if (rawDimensions) { |
- /* Dimensions contain HTML codes, so we convert them. */ |
- var tmpDiv = document.createElement('div'); |
- tmpDiv.innerHTML = rawDimensions; |
- var dimensions = tmpDiv.textContent || tmpDiv.innerText; |
- imageSelectTexts.push({ text: dimensions }); |
- } |
- |
- var url = metaData['isu']; |
- if (url) { |
- imageSelectTexts.push({ text: url}); |
- } |
- cvox.SearchResults.speakResultBySelectTexts(result, imageSelectTexts); |
- return true; |
-}; |
- |
-/* Category Result */ |
-/** |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.CategoryResult = function() { |
-}; |
-goog.inherits(cvox.CategoryResult, cvox.AbstractResult); |
- |
-/** |
- * Checks the result if it is a category result. |
- * @param {Element} result Result to be checked. |
- * @return {boolean} Whether or not the element is a category result. |
- * @override |
- */ |
-cvox.CategoryResult.prototype.isType = function(result) { |
- var CATEGORY_CLASSES = 'rg_fbl nj'; |
- return result.className === CATEGORY_CLASSES; |
-}; |
- |
-/** |
- * Speak a category result. |
- * @param {Element} result Category result to be spoken. |
- * @return {boolean} Whether or not the result was spoken. |
- * @override |
- */ |
-cvox.CategoryResult.prototype.speak = function(result) { |
- if (!result) { |
- return false; |
- } |
- var LABEL_SELECT = '.rg_bb_label'; |
- var label = result.querySelector(LABEL_SELECT); |
- cvox.ChromeVox.speakNode(label, 1); |
- return true; |
-}; |
- |
-/* Ad Result */ |
-/** |
- * @constructor |
- * @extends {cvox.AbstractResult} |
- */ |
-cvox.AdResult = function() { |
-}; |
-goog.inherits(cvox.AdResult, cvox.AbstractResult); |
- |
-/** |
- * Checks the result if it is an ad result. |
- * @param {Element} result Result to be checked. |
- * @return {boolean} Whether or not the element is an ad result. |
- * @override |
- */ |
-cvox.AdResult.prototype.isType = function(result) { |
- var ADS_CLASS = 'ads-ad'; |
- return result.className === ADS_CLASS; |
-}; |
- |
-/** |
- * Speak an ad result. |
- * @param {Element} result Ad result to be spoken. |
- * @return {boolean} Whether or not the result was spoken. |
- * @override |
- */ |
-cvox.AdResult.prototype.speak = function(result) { |
- if (!result) { |
- return false; |
- } |
- var HEADER_SELECT = 'h3'; |
- var DESC_SELECT = '.ads-creative'; |
- var URL_SELECT = '.ads-visurl'; |
- var AD_SELECTS = [ |
- { select: HEADER_SELECT }, |
- { select: DESC_SELECT }, |
- { select: URL_SELECT }]; |
- cvox.SearchResults.speakResultBySelectTexts(result, AD_SELECTS); |
- return true; |
-}; |
- |
-/** |
- * To add new result types, create a new object with the following properties: |
- * isType: Function to indicate if an element is the object's type. |
- * speak: Function that takes in a result and speaks the type to the user. |
- * getURL: Function that takes in a result and extracts the URL to follow. |
- */ |
-cvox.SearchResults.RESULT_TYPES = [ |
- cvox.UnknownResult, |
- cvox.NormalResult, |
- cvox.KnowResult, |
- cvox.WeatherResult, |
- cvox.AdResult, |
- cvox.CalcResult, |
- cvox.GameResult, |
- cvox.ImageResult, |
- cvox.CategoryResult |
-]; |