| Left: | ||
| Right: |
| LEFT | RIGHT |
|---|---|
| 1 /* | 1 /* |
| 2 * This Source Code is subject to the terms of the Mozilla Public License | 2 * This Source Code is subject to the terms of the Mozilla Public License |
|
saroyanm
2016/11/23 17:44:37
Irrelevant: Why is this file called Aadvark ?
Wladimir Palant
2016/11/24 14:02:00
The origin of this code is the Aardvark extension
| |
| 3 * version 2.0 (the "License"). You can obtain a copy of the License at | 3 * version 2.0 (the "License"). You can obtain a copy of the License at |
| 4 * http://mozilla.org/MPL/2.0/. | 4 * http://mozilla.org/MPL/2.0/. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); | 7 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); |
| 8 | 8 |
| 9 let {Prefs} = require("prefs"); | 9 let {Prefs} = require("prefs"); |
| 10 | 10 |
| 11 let messageManager = Cc["@mozilla.org/parentprocessmessagemanager;1"] | 11 let messageManager = Cc["@mozilla.org/parentprocessmessagemanager;1"] |
| 12 .getService(Ci.nsIMessageListenerManager) | 12 .getService(Ci.nsIMessageListenerManager) |
| 13 .QueryInterface(Ci.nsIMessageBroadcaster); | 13 .QueryInterface(Ci.nsIMessageBroadcaster); |
| 14 | 14 |
| 15 // To be replaced when selection starts | 15 // To be replaced when selection starts |
| 16 function E(id) {return null;} | 16 function E(id) {return null;} |
| 17 | 17 |
| 18 messageManager.addMessageListener("ElemHideHelper:SelectionStarted", selectionSt arted); | 18 messageManager.addMessageListener("ElemHideHelper:SelectionStarted", |
|
saroyanm
2016/11/23 17:44:37
Nit: Exceeding 80 chars
Wladimir Palant
2016/11/24 14:02:01
Done.
| |
| 19 messageManager.addMessageListener("ElemHideHelper:SelectionSucceeded", selection Succeeded); | 19 selectionStarted); |
| 20 messageManager.addMessageListener("ElemHideHelper:SelectionStopped", selectionSt opped); | 20 messageManager.addMessageListener("ElemHideHelper:SelectionSucceeded", |
| 21 selectionSucceeded); | |
| 22 messageManager.addMessageListener("ElemHideHelper:SelectionStopped", | |
| 23 selectionStopped); | |
| 21 onShutdown.add(() => | 24 onShutdown.add(() => |
| 22 { | 25 { |
| 23 messageManager.removeMessageListener("ElemHideHelper:SelectionStarted", select ionStarted); | 26 messageManager.removeMessageListener("ElemHideHelper:SelectionStarted", |
| 24 messageManager.removeMessageListener("ElemHideHelper:SelectionSucceeded", sele ctionSucceeded); | 27 selectionStarted); |
| 25 messageManager.removeMessageListener("ElemHideHelper:SelectionStopped", select ionStopped); | 28 messageManager.removeMessageListener("ElemHideHelper:SelectionSucceeded", |
| 29 selectionSucceeded); | |
| 30 messageManager.removeMessageListener("ElemHideHelper:SelectionStopped", | |
| 31 selectionStopped); | |
| 26 | 32 |
| 27 selectionStopped(); | 33 selectionStopped(); |
| 28 }); | 34 }); |
| 29 | 35 |
| 30 function selectionStarted(message) | 36 function selectionStarted(message) |
| 31 { | 37 { |
| 32 Aardvark.selectionStarted(); | 38 Aardvark.selectionStarted(); |
| 33 } | 39 } |
| 34 | 40 |
| 35 function selectionSucceeded(message) | 41 function selectionSucceeded(message) |
| 36 { | 42 { |
| 37 Aardvark.selectionSucceeded(message.data); | 43 Aardvark.selectionSucceeded(message.data); |
| 38 } | 44 } |
| 39 | 45 |
| 40 function selectionStopped(message) | 46 function selectionStopped(message) |
| 41 { | 47 { |
| 42 Aardvark.selectionStopped(); | 48 Aardvark.selectionStopped(); |
| 43 } | 49 } |
| 44 | 50 |
| 45 /********************************** | 51 /********************************** |
| 46 * General element selection code * | 52 * General element selection code * |
| 47 **********************************/ | 53 **********************************/ |
| 48 | 54 |
| 49 let Aardvark = exports.Aardvark = | 55 let Aardvark = exports.Aardvark = |
| 50 { | 56 { |
| 51 window: null, | 57 window: null, |
| 52 browser: null, | 58 browser: null, |
| 53 rememberedWrapper: null, | 59 rememberedWrapper: null, |
|
saroyanm
2016/11/23 17:44:37
Curious: Why rememberedWrapper, but not just wrapp
Wladimir Palant
2016/11/24 14:02:00
Its a temporary state, a bit of a hack so that we
| |
| 54 mouseX: -1, | 60 mouseX: -1, |
| 55 mouseY: -1, | 61 mouseY: -1, |
| 56 commandLabelTimer: null, | 62 commandLabelTimer: null, |
| 57 viewSourceTimer: null, | 63 viewSourceTimer: null, |
| 58 | 64 |
| 59 start: function(wrapper) | 65 start: function(wrapper) |
| 60 { | 66 { |
| 61 this.rememberedWrapper = wrapper; | 67 this.rememberedWrapper = wrapper; |
| 62 let browser = wrapper.browser; | 68 let browser = wrapper.browser; |
| 63 if ("selectedBrowser" in browser) | 69 if ("selectedBrowser" in browser) |
|
saroyanm
2016/11/23 17:44:38
What is "selectedBrowser" property ?
Are we assig
Wladimir Palant
2016/11/24 14:02:01
You need to look at https://developer.mozilla.org/
| |
| 64 browser = browser.selectedBrowser; | 70 browser = browser.selectedBrowser; |
| 65 messageManager.broadcastAsyncMessage( | 71 messageManager.broadcastAsyncMessage( |
| 66 "ElemHideHelper:StartSelection", | 72 "ElemHideHelper:StartSelection", |
| 67 browser.outerWindowID | 73 browser.outerWindowID |
| 68 ); | 74 ); |
| 69 }, | 75 }, |
| 70 | 76 |
| 71 selectionStarted: function() | 77 selectionStarted: function() |
| 72 { | 78 { |
| 73 let wrapper = this.rememberedWrapper; | 79 let wrapper = this.rememberedWrapper; |
| 74 this.rememberedWrapper = null; | 80 this.rememberedWrapper = null; |
| 75 | 81 |
| 76 this.window = wrapper.window; | 82 this.window = wrapper.window; |
| 77 this.browser = wrapper.browser; | 83 this.browser = wrapper.browser; |
|
saroyanm
2016/11/23 17:44:38
We already assigning this.rememberedWrapper value
Wladimir Palant
2016/11/24 14:02:01
No, we are only assigning it to the local browser
| |
| 78 E = id => wrapper.E(id); | 84 E = id => wrapper.E(id); |
| 79 | 85 |
| 80 this.browser.addEventListener("keypress", this.onKeyPress, true); | 86 this.browser.addEventListener("keypress", this.onKeyPress, true); |
| 81 this.browser.addEventListener("mousemove", this.onMouseMove, false); | 87 this.browser.addEventListener("mousemove", this.onMouseMove, false); |
| 82 this.browser.addEventListener("select", this.onTabSelect, false); | 88 this.browser.addEventListener("select", this.onTabSelect, false); |
| 83 | 89 |
| 84 this.initHelpBox(); | 90 this.initHelpBox(); |
| 85 | 91 |
| 86 if (Prefs.showhelp) | 92 if (Prefs.showhelp) |
| 87 this.showMenu(); | 93 this.showMenu(); |
| 88 }, | 94 }, |
| 89 | 95 |
| 90 selectionSucceeded: function(nodeInfo) | 96 selectionSucceeded: function(nodeInfo) |
| 91 { | 97 { |
| 92 this.window.openDialog("chrome://elemhidehelper/content/composer.xul", | 98 this.window.openDialog("chrome://elemhidehelper/content/composer.xul", |
|
saroyanm
2016/11/23 17:44:37
Shouldn't we also remove eventlisteners on selecti
Wladimir Palant
2016/11/24 14:02:01
No, the select command (in lib/child/commands.js)
| |
| 93 "_blank", "chrome,centerscreen,resizable,dialog=no", nodeInfo); | 99 "_blank", "chrome,centerscreen,resizable,dialog=no", nodeInfo); |
|
Wladimir Palant
2016/11/17 13:54:47
This function is pretty much what Aardvark.select(
saroyanm
2016/11/23 17:44:38
Acknowledged.
| |
| 94 }, | 100 }, |
| 95 | 101 |
| 96 selectionStopped: function() | 102 selectionStopped: function() |
| 97 { | 103 { |
| 98 if (!this.browser) | 104 if (!this.browser) |
| 99 return; | 105 return; |
| 100 | 106 |
| 101 if (this.commandLabelTimer) | 107 if (this.commandLabelTimer) |
| 102 this.commandLabelTimer.cancel(); | 108 this.commandLabelTimer.cancel(); |
| 103 if (this.viewSourceTimer) | 109 if (this.viewSourceTimer) |
| 104 this.viewSourceTimer.cancel(); | 110 this.viewSourceTimer.cancel(); |
| 105 this.commandLabelTimer = null; | 111 this.commandLabelTimer = null; |
| 106 this.viewSourceTimer = null; | 112 this.viewSourceTimer = null; |
| 107 | 113 |
| 108 this.hideTooltips(); | 114 this.hideTooltips(); |
| 109 | 115 |
| 110 this.browser.removeEventListener("keypress", this.onKeyPress, true); | 116 this.browser.removeEventListener("keypress", this.onKeyPress, true); |
| 111 this.browser.removeEventListener("mousemove", this.onMouseMove, false); | 117 this.browser.removeEventListener("mousemove", this.onMouseMove, false); |
| 112 this.browser.removeEventListener("select", this.onTabSelect, false); | 118 this.browser.removeEventListener("select", this.onTabSelect, false); |
| 113 | 119 |
| 114 this.window = null; | 120 this.window = null; |
| 115 this.browser = null; | 121 this.browser = null; |
| 116 E = id => null; | 122 E = id => null; |
|
Wladimir Palant
2016/11/17 13:54:47
This function is what Aardvark.quit() used to be.
saroyanm
2016/11/23 17:44:37
Acknowledged.
| |
| 117 }, | 123 }, |
| 118 | 124 |
| 119 doCommand: function(command, event) | 125 doCommand: function(command, event) |
| 120 { | 126 { |
| 121 let showFeedback; | 127 let showFeedback; |
| 122 if (this.hasOwnProperty(command)) | 128 if (this.hasOwnProperty(command)) |
| 123 showFeedback = this[command](); | 129 showFeedback = this[command](); |
|
Wladimir Palant
2016/11/17 13:54:47
The command handler no longer gets the selected el
saroyanm
2016/11/23 17:44:38
Acknowledged.
| |
| 124 else | 130 else |
| 125 { | 131 { |
| 126 showFeedback = (command != "select" && command != "quit"); | 132 showFeedback = (command != "select" && command != "quit"); |
|
Wladimir Palant
2016/11/17 13:54:47
This changes behavior slightly - e.g. you will get
saroyanm
2016/11/23 17:44:37
Acknowledged.
| |
| 127 messageManager.broadcastAsyncMessage("ElemHideHelper:Command", command); | 133 messageManager.broadcastAsyncMessage("ElemHideHelper:Command", command); |
| 128 } | 134 } |
| 129 | 135 |
| 130 if (showFeedback) | 136 if (showFeedback) |
| 131 { | 137 { |
| 132 this.showCommandLabel(this.commands[command + "_key"], this.commands[comma nd + "_altkey"], this.commands[command + "_label"]); | 138 this.showCommandLabel(this.commands[command + "_key"], this.commands[comma nd + "_altkey"], this.commands[command + "_label"]); |
| 133 if (event) | 139 if (event) |
| 134 event.stopPropagation(); | 140 event.stopPropagation(); |
| 135 } | 141 } |
| 136 if (event) | 142 if (event) |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 207 tooltip.hidePopup(); | 213 tooltip.hidePopup(); |
| 208 } | 214 } |
| 209 }, | 215 }, |
| 210 | 216 |
| 211 onKeyPress: function(event) | 217 onKeyPress: function(event) |
| 212 { | 218 { |
| 213 if (event.altKey || event.ctrlKey || event.metaKey) | 219 if (event.altKey || event.ctrlKey || event.metaKey) |
| 214 return; | 220 return; |
| 215 | 221 |
| 216 var command = null; | 222 var command = null; |
| 217 if (event.keyCode == event.DOM_VK_ESCAPE) | 223 if (event.keyCode == event.DOM_VK_ESCAPE) |
|
saroyanm
2016/11/23 17:44:38
Note: keyCode is a deprecated property.
You want m
Wladimir Palant
2016/11/24 14:02:01
Yes, definitely.
saroyanm
2016/11/25 16:18:13
Done -> #4666
| |
| 218 command = "quit"; | 224 command = "quit"; |
| 219 else if (event.keyCode == event.DOM_VK_RETURN) | 225 else if (event.keyCode == event.DOM_VK_RETURN) |
| 220 command = "select"; | 226 command = "select"; |
| 221 else if (event.charCode) | 227 else if (event.charCode) |
| 222 { | 228 { |
| 223 var key = String.fromCharCode(event.charCode).toLowerCase(); | 229 var key = String.fromCharCode(event.charCode).toLowerCase(); |
| 224 var commands = this.commands; | 230 var commands = this.commands; |
| 225 for (var i = 0; i < commands.length; i++) | 231 for (var i = 0; i < commands.length; i++) |
| 226 if (commands[commands[i] + "_key"] == key || commands[commands[i] + "_al tkey"] == key) | 232 if (commands[commands[i] + "_key"] == key || commands[commands[i] + "_al tkey"] == key) |
| 227 command = commands[i]; | 233 command = commands[i]; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 266 "viewSourceWindow", | 272 "viewSourceWindow", |
| 267 "showMenu" | 273 "showMenu" |
| 268 ], | 274 ], |
| 269 | 275 |
| 270 viewSource: function(elem) | 276 viewSource: function(elem) |
| 271 { | 277 { |
| 272 if (!elem) | 278 if (!elem) |
| 273 return false; | 279 return false; |
| 274 | 280 |
| 275 var sourceBox = E("ehh-viewsource"); | 281 var sourceBox = E("ehh-viewsource"); |
| 276 if (sourceBox.state == "open") | 282 if (sourceBox.state == "open") |
|
Wladimir Palant
2016/11/17 13:54:47
This is a behavior change, originally we would onl
| |
| 277 { | 283 { |
| 278 sourceBox.hidePopup(); | 284 sourceBox.hidePopup(); |
| 279 return true; | 285 return true; |
| 280 } | 286 } |
| 281 sourceBox.hidePopup(); | 287 sourceBox.hidePopup(); |
| 282 | 288 |
| 283 while (sourceBox.firstElementChild) | 289 while (sourceBox.firstElementChild) |
| 284 sourceBox.removeChild(sourceBox.firstElementChild); | 290 sourceBox.removeChild(sourceBox.firstElementChild); |
| 285 this.getOuterHtmlFormatted(elem, sourceBox); | 291 this.getOuterHtmlFormatted(elem, sourceBox); |
| 286 | 292 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 422 // Show help box | 428 // Show help box |
| 423 helpBox.showPopup(this.browser, -1, -1, "tooltip", "topleft", "topleft"); | 429 helpBox.showPopup(this.browser, -1, -1, "tooltip", "topleft", "topleft"); |
| 424 return true; | 430 return true; |
| 425 } | 431 } |
| 426 } | 432 } |
| 427 | 433 |
| 428 // Makes sure event handlers like Aardvark.onKeyPress always have the correct | 434 // Makes sure event handlers like Aardvark.onKeyPress always have the correct |
| 429 // this pointer set. | 435 // this pointer set. |
| 430 for (let method of ["onKeyPress", "onMouseMove", "onTabSelect"]) | 436 for (let method of ["onKeyPress", "onMouseMove", "onTabSelect"]) |
| 431 Aardvark[method] = Aardvark[method].bind(Aardvark); | 437 Aardvark[method] = Aardvark[method].bind(Aardvark); |
| LEFT | RIGHT |