Debian package: Make description less ambigous; Bump changelog entry date
[conkeror.git] / modules / page-modes / google-search-results.js
blobab8eea3da6821e6bbbafe15a3baf5fc9c8765eab
1 /**
2  * (C) Copyright 2008 Jeremy Maitin-Shepard
3  * (C) Copyright 2009-2010 John J. Foerch
4  *
5  * Use, modification, and distribution are subject to the terms specified in the
6  * COPYING file.
7 **/
9 in_module(null);
11 require("content-buffer.js");
14 define_keymap("google_search_results_keymap", $display_name = "google-search-results");
16 // Keys for the "experimental" keyboard search
17 define_key(google_search_results_keymap, "j", "ensure-content-focused", $fallthrough);
18 define_key(google_search_results_keymap, "k", "ensure-content-focused", $fallthrough);
19 define_key(google_search_results_keymap, "o", "ensure-content-focused", $fallthrough);
20 define_key(google_search_results_keymap, "/", "ensure-content-focused", $fallthrough);
21 define_key(google_search_results_keymap, "return", "ensure-content-focused", $fallthrough);//BAD
23 /**
24  * Note: escape already does the same thing as the Google key binding.
25  */
27 define_browser_object_class("google-search-results-links", null,
28     xpath_browser_object_handler("//a[@class='l']|//a[@class='l vst']|//a[@class='gs-title']"),
29     $hint = "select search result");
32 // Bind keys 1 through 9 to follow corresponding results links
34 define_browser_object_class("google-search-result-by-digit", null,
35     function (I, prompt) {
36         var doc = I.buffer.document;
37         var digit = I.event.charCode - 48;
38         var res = doc.evaluate("//a[parent::node()/@class='r']", doc, null,
39                                Ci.nsIDOMXPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
40                                null);
41         yield co_return(res.snapshotItem(digit - 1));
42     });
44 function google_search_bind_number_shortcuts () {
45     for (var j = 1; j <= 9; j++) {
46         let o = j;
47         var function_name = "gsearch-follow-result-" + j;
48         interactive(function_name,
49                     "Follow google search result number " + j,
50                     "follow",
51                     $browser_object = browser_object_google_search_result_by_digit);
52         define_key(google_search_results_keymap, String(j), function_name);
53     }
57 var google_search_results_modality = {
58     normal: google_search_results_keymap
62 define_page_mode("google_search_results_mode",
63                  $display_name = "Google Search Results",
64                  $enable = function (buffer) {
65                      var link_using_commands = ["follow",
66                                                 "follow-new-buffer",
67                                                 "follow-new-buffer-background",
68                                                 "follow-new-window",
69                                                 "save",
70                                                 "copy",
71                                                 "shell-command-on-file"];
72                      for each (var c in link_using_commands)
73                          buffer.default_browser_object_classes[c] =
74                              browser_object_google_search_results_links;
75                      buffer.content_modalities.push(google_search_results_modality);
76                  },
77                  $disable = function (buffer) {
78                      var i = buffer.content_modalities.indexOf(google_search_results_modality);
79                      if (i > -1)
80                          buffer.content_modalities.splice(i, 1);
81                  });
83 let (google_search_re = build_url_regex(
84          $domain = "google",
85          $allow_www = true,
86          $path = /search\?|cse\?/,
87          $tlds = ["com", "com.au", "co.uk", "de", "dk", "es",
88                   "fr", "it", "no", "se", "uk"])) {
89     auto_mode_list.push([google_search_re, google_search_results_mode]);
92 provide("google-search-results");