| Index: lib/child/commands.js |
| =================================================================== |
| --- a/lib/child/commands.js |
| +++ b/lib/child/commands.js |
| @@ -9,29 +9,73 @@ |
| let messageManager = require("messageManager"); |
| let {getNodeInfo} = require("./nodeInfo"); |
| let { |
| state, selectElement, setAnchorElement, stopSelection |
| } = require("./selection"); |
| let {getParentElement} = require("./utils"); |
| messageManager.addMessageListener("ElemHideHelper:Command", onCommand); |
| +messageManager.addMessageListener("ElemHideHelper:SerializeSelected", |
| + serializeSelected); |
| onShutdown.add(() => |
| { |
| messageManager.removeMessageListener("ElemHideHelper:Command", onCommand); |
| + messageManager.removeMessageListener("ElemHideHelper:SerializeSelected", |
| + serializeSelected); |
| }); |
| function onCommand(message) |
| { |
| let command = message.data; |
| if (typeof exports[command] == "function") |
| exports[command](); |
| } |
| +function serializeNode(node) |
| +{ |
| + let result = null; |
| + switch (node.nodeType) |
| + { |
| + case node.ELEMENT_NODE: |
| + result = { |
| + type: "element", |
| + tagName: node.localName, |
| + attributes: [], |
| + children: [] |
| + }; |
| + for (let {name, value} of node.attributes) |
| + result.attributes.push({name, value}); |
| + for (let child = node.firstChild; child; child = child.nextSibling) |
| + { |
| + let serialized = serializeNode(child); |
| + if (serialized) |
| + result.children.push(serialized); |
| + } |
| + break; |
| + case node.TEXT_NODE: |
| + case node.COMMENT_NODE: |
| + result= { |
| + type: node.nodeType == node.TEXT_NODE ? "text" : "comment", |
| + text: node.textContent |
| + }; |
| + break; |
| + } |
| + return result; |
| +} |
| + |
| +function serializeSelected(message) |
| +{ |
| + messageManager.sendAsyncMessage("ElemHideHelper:Response", { |
| + messageId: message.data.messageId, |
| + serialized: serializeNode(state.selectedElement) |
| + }); |
| +} |
| + |
| function quit() |
| { |
| stopSelection(); |
| } |
| exports.quit = quit; |
| function select() |
| { |