google-maps-toggle-feature: new command
[conkeror.git] / modules / page-modes / google-maps.js
blob3f34545afb1d67ccc2d6f5fc9a150538d91b978f
1 /**
2  * (C) Copyright 2009-2011 John J. Foerch
3  *
4  * Use, modification, and distribution are subject to the terms specified in the
5  * COPYING file.
6 **/
8 in_module(null);
10 require("content-buffer.js");
12 function dom_click_xpath (doc, xpath) {
13     var iter = doc.evaluate(xpath,
14                             doc,
15                             xpath_lookup_namespace,
16                             Ci.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE ,
17                             null);
18     var node = iter.singleNodeValue;
19     if (node) {
20         var rect = node.getBoundingClientRect();
21         dom_node_click(node, rect.left + 1, rect.top + 1);
22     }
25 interactive("google-maps-zoom-in",
26     "Zoom in on a google map",
27     function (I) {
28         dom_click_xpath(I.buffer.document,
29                         "//div[@guidedhelpid='zoom_in']/div[@title]");
30     });
32 interactive("google-maps-zoom-out",
33     "Zoom out on a google map",
34     function (I) {
35         dom_click_xpath(I.buffer.document,
36                         "//div[@guidedhelpid='zoom_out']/div[@title]");
37     });
39 interactive("google-maps-pan-left",
40     "Pan a google map left",
41     function (I) {
42         dom_click_xpath(I.buffer.document,
43                         "//div[@log='pan_lt']");
44     });
46 interactive("google-maps-pan-right",
47     "Pan a google map right",
48     function (I) {
49         dom_click_xpath(I.buffer.document,
50                         "//div[@log='pan_rt']");
51     });
53 interactive("google-maps-pan-up",
54     "Pan a google map up",
55     function (I) {
56         dom_click_xpath(I.buffer.document,
57                         "//div[@log='pan_up']");
58     });
60 interactive("google-maps-pan-down",
61     "Pan a google map down",
62     function (I) {
63         dom_click_xpath(I.buffer.document,
64                         "//div[@log='pan_down']");
65     });
67 interactive("google-maps-toggle-feature",
68     "Prompt for and toggle a secondary map feature",
69     function (I) {
70         var features = { "45 degrees": 0,
71                          labels: 1,
72                          terrain: 4,
73                          traffic: 6,
74                          photos: 7,
75                          videos: 8,
76                          wikipedia: 9,
77                          webcam: 10,
78                          buzz: 11,
79                          weather: 12,
80                          bicycling: 13,
81                          transit: 14 };
82         var feature = yield I.minibuffer.read(
83             $prompt = "Feature",
84             $history = "google-maps-feature",
85             $completer = prefix_completer(
86                 $completions = [f for (f in features)]),
87             $match_required,
88             $space_completes);
89         var id = features[feature];
90         dom_click_xpath(I.buffer.document,
91                         "//div[@jsprops='activityId:"+id+"']//span");
92     });
95 define_keymap("google_maps_keymap", $display_name = "google-maps");
96 define_key(google_maps_keymap, "C-c +",   "google-maps-zoom-in");
97 define_key(google_maps_keymap, "C-c -",   "google-maps-zoom-out");
98 define_key(google_maps_keymap, "C-f", "google-maps-pan-right");
99 define_key(google_maps_keymap, "C-b", "google-maps-pan-left");
100 define_key(google_maps_keymap, "C-n", "google-maps-pan-down");
101 define_key(google_maps_keymap, "C-p", "google-maps-pan-up");
102 define_key(google_maps_keymap, "C-c C-f", "google-maps-toggle-feature");
104 var google_maps_modality = {
105     normal: google_maps_keymap
108 define_page_mode("google_maps_mode",
109                  $display_name = "Google Maps",
110                  $enable = function (buffer) {
111                      buffer.content_modalities.push(google_maps_modality);
112                  },
113                  $disable = function (buffer) {
114                      var i = buffer.content_modalities.indexOf(google_maps_modality);
115                      if (i > -1)
116                          buffer.content_modalities.splice(i, 1);
117                  });
119 var google_maps_re = build_url_regex($domain = "maps.google");
120 auto_mode_list.push([google_maps_re, google_maps_mode]);
122 provide("google-maps");