| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| 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 |
| 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 EXPORTED_SYMBOLS = ["shutdown", "getNodeInfo"]; | 7 let EXPORTED_SYMBOLS = ["shutdown", "getNodeInfo", "togglePreview", |
| 8 "forgetNode"]; | |
| 8 | 9 |
| 9 const Ci = Components.interfaces; | 10 const Ci = Components.interfaces; |
| 10 const Cu = Components.utils; | 11 const Cu = Components.utils; |
| 11 | 12 |
| 12 let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {}); | 13 let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {}); |
| 13 let {DebuggerServer} = Cu.import("resource://gre/modules/devtools/dbg-server.jsm ", {}); | 14 let {DebuggerServer} = Cu.import("resource://gre/modules/devtools/dbg-server.jsm ", {}); |
| 15 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); | |
| 16 | |
| 17 let processID = Services.appinfo.processID; | |
| 18 let maxNodeID = 0; | |
| 19 let nodes = new Map(); | |
| 20 | |
| 14 let name = "elemhidehelper"; | 21 let name = "elemhidehelper"; |
| 15 let actor = { | 22 let actor = { |
| 16 constructorFun: Actor, | 23 constructorFun: Actor, |
| 17 constructorName: name, | 24 constructorName: name, |
| 18 name: name | 25 name: name |
| 19 }; | 26 }; |
| 20 | 27 |
| 21 DebuggerServer.addTabActor(actor, name); | 28 DebuggerServer.addTabActor(actor, name); |
| 22 | 29 |
| 23 let shutdown = (function() | 30 let shutdown = (function() |
| 24 { | 31 { |
| 25 let executed = false; | 32 let executed = false; |
| 26 return function() | 33 return function() |
| 27 { | 34 { |
| 28 if (!executed) | 35 if (!executed) |
| 29 DebuggerServer.removeTabActor(actor); | 36 DebuggerServer.removeTabActor(actor); |
| 30 executed = true; | 37 executed = true; |
| 31 } | 38 } |
| 32 })(); | 39 })(); |
| 33 | 40 |
| 34 function Actor(connection, tabActor) | 41 function Actor(connection, tabActor) |
| 35 { | 42 { |
| 36 } | 43 } |
| 37 | 44 |
| 38 Actor.prototype = { | 45 Actor.prototype = { |
| 39 requestTypes: { | 46 requestTypes: { |
| 40 nodeinfo: function(request, connection) | 47 nodeinfo: function(request, connection) |
| 41 { | 48 { |
| 42 let nodeActor = connection.getActor(request.nodeActor); | 49 let nodeActor = connection.getActor(request.nodeActor); |
| 43 if (!nodeActor || !nodeActor.rawNode || | 50 return getNodeInfo(nodeActor ? nodeActor.rawNode: null); |
| 44 nodeActor.rawNode.nodeType != Ci.nsIDOMNode.ELEMENT_NODE) | |
| 45 { | |
| 46 return {}; | |
| 47 } | |
| 48 | |
| 49 return getNodeInfo(nodeActor.rawNode); | |
| 50 } | 51 } |
| 51 } | 52 } |
| 52 }; | 53 }; |
| 53 | 54 |
| 54 function getNodeInfo(node) | 55 function getNodeInfo(node) |
| 55 { | 56 { |
| 56 return { | 57 let nodeData = getNodeData(node); |
| 57 host: node.ownerDocument.defaultView.location.hostname, | 58 if (nodeData) |
| 58 nodeData: getNodeData(node) | 59 { |
| 59 }; | 60 let nodeID = processID + "-" + (++maxNodeID); |
| 61 nodes.set(nodeID, {document: node.ownerDocument, style: null}); | |
| 62 return { | |
| 63 host: node.ownerDocument.defaultView.location.hostname, | |
| 64 nodeData: nodeData, | |
| 65 nodeID: nodeID | |
| 66 }; | |
| 67 } | |
| 68 | |
| 69 return {}; | |
| 60 } | 70 } |
| 61 | 71 |
| 62 function getNodeData(node, parentNode) | 72 function getNodeData(node, parentNode) |
| 63 { | 73 { |
| 64 if (!node) | 74 if (!node || node.nodeType != Ci.nsIDOMNode.ELEMENT_NODE) |
| 65 return null; | 75 return null; |
| 66 | 76 |
| 67 let result = {}; | 77 let result = {}; |
| 68 result.tagName = {value: node.tagName, checked: false}; | 78 result.tagName = {value: node.tagName, checked: false}; |
| 69 | 79 |
| 70 if (typeof parentNode != "undefined") | 80 if (typeof parentNode != "undefined") |
| 71 result.parentNode = parentNode; | 81 result.parentNode = parentNode; |
| 72 else | 82 else |
| 73 result.parentNode = getNodeData(node.parentElement); | 83 result.parentNode = getNodeData(node.parentElement); |
| 74 | 84 |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 101 { | 111 { |
| 102 // Make sure ID attribute comes first | 112 // Make sure ID attribute comes first |
| 103 let tmp = result.attributes[1]; | 113 let tmp = result.attributes[1]; |
| 104 result.attributes[1] = result.attributes[0]; | 114 result.attributes[1] = result.attributes[0]; |
| 105 result.attributes[0] = tmp; | 115 result.attributes[0] = tmp; |
| 106 } | 116 } |
| 107 | 117 |
| 108 result.customCSS = {selected: "", checked: false}; | 118 result.customCSS = {selected: "", checked: false}; |
| 109 return result; | 119 return result; |
| 110 } | 120 } |
| 121 | |
| 122 function togglePreview(nodeID, stylesheetData) | |
| 123 { | |
| 124 let context = nodes.get(nodeID); | |
| 125 if (!context) | |
| 126 return; | |
| 127 | |
| 128 if (stylesheetData) | |
| 129 { | |
| 130 if (!context.style || !context.style.parentNode) | |
| 131 { | |
| 132 context.style = context.document.createElementNS( | |
| 133 "http://www.w3.org/1999/xhtml", "style"); | |
| 134 context.style.setAttribute("type", "text/css"); | |
| 135 context.document.documentElement.appendChild(context.style); | |
| 136 } | |
| 137 context.style.textContent = stylesheetData; | |
| 138 } | |
| 139 else | |
| 140 { | |
| 141 try | |
| 142 { | |
| 143 if (context.style && context.style.parentNode) | |
| 144 context.style.parentNode.removeChild(context.style); | |
| 145 } | |
| 146 catch (e) | |
| 147 { | |
| 148 // If the window was closed (reloaded) we end up with dead object | |
| 149 // reference (https://bugzilla.mozilla.org/show_bug.cgi?id=695480). Just | |
| 150 // ignore this case, we don't need to do anything. | |
|
Thomas Greiner
2015/07/31 12:48:03
If the context is no longer valid anyway, what abo
Wladimir Palant
2015/07/31 14:40:04
Done.
| |
| 151 } | |
| 152 context.style = null; | |
| 153 } | |
| 154 } | |
| 155 | |
| 156 function forgetNode(nodeID) | |
| 157 { | |
| 158 nodes.delete(nodeID); | |
| 159 } | |
| OLD | NEW |