2 * (C) Copyright 2010 Dave Kerschner
4 * Use, modification, and distribution are subject to the terms specified in the
7 * StackExchange page mode
9 * Provides ability to vote on Stack Exchange sites without having to grab
16 * browser_object_class that finds the vote images
18 define_browser_object_class("stackexchange-votes",
19 "Browser object class for selecting a vote arrow via hinting.",
20 xpath_browser_object_handler('//span[contains(@class,"vote-up-off")]' +
21 ' | //span[contains(@class,"vote-down-off")]'),
22 $hint = "select a vote");
24 define_browser_object_class("stackexchange-accept-answers",
25 "Browser object class for selecting an accepted answer check via hinting.",
26 xpath_browser_object_handler('//span[contains(@class,"vote-accepted-off")]'),
27 $hint = "select an accepted answer");
30 interactive("stackexchange-vote",
31 "Vote on StackExchange sites",
33 var elem = yield read_browser_object(I);
34 dom_node_click(elem, 1, 1);
36 $browser_object = browser_object_stackexchange_votes);
38 interactive("stackexchange-accept-answer",
39 "Accept an answer on StackExchange site",
41 var elem = yield read_browser_object(I);
42 dom_node_click(elem, 1, 1);
44 $browser_object = browser_object_stackexchange_accept_answers);
46 interactive("stackexchange-favorite-question",
47 "Favorite a question on StackExchange site",
49 var xpr = I.buffer.document.evaluate(
50 '//span[contains(@class,"star-off")]',
51 I.buffer.document, null,
52 Ci.nsIDOMXPathResult.ORCERD_NOTE_ITERATOR_TYPE, null);
54 if(xpr && (elem = xpr.iterateNext())) {
55 dom_node_click(elem, 1, 1);
60 define_keymap("stackexchange_keymap", $display_name = "stackexchange");
61 define_key(stackexchange_keymap, "V", "stackexchange-vote");
62 define_key(stackexchange_keymap, "A", "stackexchange-accept-answer");
63 define_key(stackexchange_keymap, "O", "stackexchange-favorite-question");
65 define_keymaps_page_mode("stackexchange-mode",
66 /^https?:\/\/(?:www.|meta.)?(stackoverflow|serverfault|superuser|stackapps)\.(?:com)\//,
67 { normal: stackexchange_keymap },
68 $display_name = "StackExchange");
70 page_mode_activate(stackexchange_mode);
72 provide("stackexchange");