From c170640dd62c8dddaf409f37e1fa4d66c1d91e31 Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Wed, 23 Aug 2017 18:19:27 +0200 Subject: [PATCH] Use unique indexes for documents --- src/backend/index.js | 9 ++++--- src/backend/target-document.js | 28 ++++++++++++++++++---- src/devtools/components/TargetSelector.vue | 5 ++-- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/backend/index.js b/src/backend/index.js index 1d222581c..f3ab29b9a 100644 --- a/src/backend/index.js +++ b/src/backend/index.js @@ -77,9 +77,12 @@ function connect () { flush() }) - bridge.on('change-target', (target) => { - setDocumentTarget(getAllTargets()[target]) - scan() + bridge.on('change-target', (id) => { + const target = getAllTargets().find(t => t.id === id) + if (target) { + setDocumentTarget(target.doc) + scan() + } }) bridge.on('refresh', scan) bridge.on('enter-instance', id => highlight(instanceMap.get(id))) diff --git a/src/backend/target-document.js b/src/backend/target-document.js index 2a77477dc..ea568703e 100644 --- a/src/backend/target-document.js +++ b/src/backend/target-document.js @@ -10,12 +10,32 @@ export function getDocumentTarget () { return target } +let id = 0 +const documents = new WeakMap() + +function getId (doc) { + console.log('Getting', doc) + if (!documents.has(doc)) { + console.log('Added with', id) + documents.set(doc, id++) + } + console.log(`generated id ${documents.get(doc)}`, doc) + return documents.get(doc) +} + +function packTarget (doc) { + return { + doc, + id: getId(doc) + } +} + export function getAllTargets () { - const targets = [document] - return targets.concat(findTargetsInElement(document)) + const targets = [packTarget(document)] + return targets.concat(findTargetsInElement(targets[0])) } -function findTargetsInElement (el) { - const iframes = Array.prototype.map.call(el.getElementsByTagName('iframe'), i => i.contentDocument) +function findTargetsInElement ({ doc }) { + const iframes = Array.prototype.map.call(doc.getElementsByTagName('iframe'), i => i.contentDocument).map(packTarget) return iframes.concat(...iframes.map(findTargetsInElement)) } diff --git a/src/devtools/components/TargetSelector.vue b/src/devtools/components/TargetSelector.vue index 9f3aa1c3a..defd452d3 100644 --- a/src/devtools/components/TargetSelector.vue +++ b/src/devtools/components/TargetSelector.vue @@ -1,10 +1,11 @@