2 * (C) Copyright 2016 Ivy Foster
4 * Use, modification, and distribution are subject to the terms specified in the
8 // Reference: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent
12 "An array of functions to run on click events. " +
13 "The function will be passed two arguments: " +
14 "the current window and the mouse event.\n" +
15 "To create an event, set 'click_handler[n] = some_function;', " +
16 "where n is the total value of the buttons pressed.\n" +
17 "left = 1\n" + "right = 2\n" + "middle = 4\n" +
18 "button4 = 8\n" + "button5 = 16\n\n" +
19 "For instance, click_handler.3 would run when " +
20 "left and right are pressed together.\n" +
21 "For more information, see " +
22 "<https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons>."
25 function handle_mouse_click (event) {
28 // Translate MouseEvent.button events into MouseEvent.buttons events.
29 switch (event.button) {
47 chord += event.buttons;
49 if (click_handler[chord]) {
50 click_handler[chord](this.ownerDocument.defaultView, event);
55 "clicks_in_new_buffer_target", OPEN_NEW_BUFFER,
56 "Destination for new buffers created by clicks. " +
57 "Set to one the constants OPEN_NEW_BUFFER, " +
58 "OPEN_NEW_BUFFER_BACKGROUND, or OPEN_NEW_WINDOW.\n" +
59 "Default is OPEN_NEW_BUFFER."
62 function clicked_link_in_new_buffer (window, event) {
63 let element = event.target;
65 if (element instanceof Ci.nsIDOMHTMLAnchorElement ||
66 element instanceof Ci.nsIDOMHTMLAreaElement) {
69 for (let p = element.parentNode;
70 p != null && p.tagName.toLowerCase() != "html";
72 if (p.tagName.toLowerCase() == "a") {
79 event.preventDefault();
80 event.stopPropagation();
81 let spec = load_spec(anchor);
82 let buffer = window.buffers.current;
84 buffer_creator(content_buffer,
87 clicks_in_new_buffer_target);
90 function handle_click_add_listener(buffer) {
91 buffer.browser.addEventListener("click", handle_mouse_click, true);
94 function handle_click_remove_listener(buffer) {
95 buffer.browser.removeEventListener("click", handle_mouse_click, true);
98 function mouse_click_event_mode_enable() {
99 add_hook("create_buffer_hook", handle_click_add_listener);
100 for_each_buffer(handle_click_add_listener);
103 function mouse_click_event_mode_disable() {
104 remove_hook("create_buffer_hook", handle_click_add_listener);
105 for_each_buffer(handle_click_remove_listener);
108 define_global_mode("mouse_click_event_mode",
109 mouse_click_event_mode_enable, mouse_click_event_mode_disable
112 mouse_click_event_mode(true);