2 * (C) Copyright 2012 John J. Foerch
4 * Use, modification, and distribution are subject to the terms specified in the
10 require("content-buffer.js");
12 define_keymap("duckduckgo_keymap", $display_name = "duckduckgo");
13 define_keymap("duckduckgo_anchor_keymap", $display_name = "duckduckgo-anchor");
14 define_keymap("duckduckgo_select_keymap", $display_name = "duckduckgo-select");
16 function duckduckgo_call_command (buffer, command) {
17 var s = Components.utils.Sandbox(buffer.top_frame);
18 s.window = buffer.top_frame.wrappedJSObject;
19 s.document = buffer.document.wrappedJSObject;
20 Components.utils.evalInSandbox("window."+command+"()", s);
23 function duckduckgo_command (command) {
25 duckduckgo_call_command(I.buffer, command);
29 // The bindings were found in <http://duckduckgo.com/d676.js>. Each one
30 // corresponds to a call to 'new YAHOO.util.KeyListener(...)', from which
31 // the keycode and function name can be gotten.
33 interactive("duckduckgo-down",
34 "Calls DuckDuckGo command.",
35 duckduckgo_command("nkda"));
37 interactive("duckduckgo-up",
38 "Calls DuckDuckGo command.",
39 duckduckgo_command("nkua"));
41 interactive("duckduckgo-focus-search",
42 "Calls DuckDuckGo command.",
43 duckduckgo_command("nks"));
45 interactive("duckduckgo-related-topics",
46 "Calls DuckDuckGo command.",
47 duckduckgo_command("nkr"));
49 interactive("duckduckgo-main-results",
50 "Calls DuckDuckGo command.",
51 duckduckgo_command("nkm"));
53 interactive("duckduckgo-bang-dropdown",
54 "Calls DuckDuckGo command.",
55 duckduckgo_command("nkex"));
57 interactive("duckduckgo-domain-search",
58 "Calls DuckDuckGo command.",
59 duckduckgo_command("nkd"));
61 interactive("duckduckgo-follow-current",
62 "Calls DuckDuckGo command.",
63 alternates(duckduckgo_command("nke"),
64 duckduckgo_command("nkn")));
66 define_key(duckduckgo_keymap, "j", "duckduckgo-down");
67 define_key(duckduckgo_keymap, "k", "duckduckgo-up");
68 define_key(duckduckgo_keymap, "down", "duckduckgo-down");
69 define_key(duckduckgo_keymap, "up", "duckduckgo-up");
70 define_key(duckduckgo_keymap, "r", "duckduckgo-related-topics");
71 define_key(duckduckgo_keymap, "m", "duckduckgo-main-results");
72 define_key(duckduckgo_keymap, "/", "duckduckgo-focus-search");
73 define_key(duckduckgo_keymap, "!", "duckduckgo-bang-dropdown");
74 define_key(duckduckgo_keymap, "d", "duckduckgo-domain-search");
75 define_key(duckduckgo_anchor_keymap, "return", "duckduckgo-follow-current");
76 define_key(duckduckgo_select_keymap, "return", "duckduckgo-follow-current");
78 define_keymaps_page_mode("duckduckgo-mode",
79 build_url_regexp($domain = "duckduckgo"),
80 { normal: duckduckgo_keymap,
81 anchor: duckduckgo_anchor_keymap,
82 select: duckduckgo_select_keymap },
83 $display_name = "DuckDuckGo");
85 page_mode_activate(duckduckgo_mode);
87 provide("duckduckgo");