From 5564165a20899ec219075d8abeb8209d5cd444a3 Mon Sep 17 00:00:00 2001 From: shinigami-eyes <43276258+shinigami-eyes@users.noreply.github.com> Date: Sun, 3 Mar 2019 21:02:40 +0100 Subject: [PATCH] For facebook, store override for both numeric and mnemonic link --- extension/background.js | 8 +++++- extension/content.js | 59 ++++++++++++++++++++++------------------- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/extension/background.js b/extension/background.js index dc6259e..32edf31 100644 --- a/extension/background.js +++ b/extension/background.js @@ -274,6 +274,8 @@ function saveLabel(response) { .map(x => { return { identifier: x, label: overrides[x] } }); } overrides[response.identifier] = response.mark; + if (response.secondaryIdentifier) + overrides[response.secondaryIdentifier] = response.mark; browser.storage.local.set({ overrides: overrides }); overrides[PENDING_SUBMISSIONS].push(response); submitPendingRatings(); @@ -309,7 +311,11 @@ browser.contextMenus.onClicked.addListener(function (info, tab) { debug: overrides.debug }, null, response => { if (!response.identifier) return; - if (badIdentifiers[response.identifier] && response.mark) return; + if (response.mark){ + if (badIdentifiers[response.identifier]) return; + if (response.secondaryIdentifier && badIdentifiers[response.secondaryIdentifier]) + response.secondaryIdentifier = null; + } if (response.debug && /^facebook\.com\/[a-zA-Z]/.test(response.identifier)) alert('Note: could not find numeric id for ' + response.identifier); response.tabId = tab.id; diff --git a/extension/content.js b/extension/content.js index 9f7c810..eb6ec22 100644 --- a/extension/content.js +++ b/extension/content.js @@ -487,24 +487,7 @@ init(); var lastGeneratedLinkId = 0; -browser.runtime.onMessage.addListener((message, sender, sendResponse) => { - - if (message.updateAllLabels) { - updateAllLabels(true); - return; - } - message.contextPage = window.location.href; - var target = null; // message.elementId ? browser.menus.getTargetElement(message.elementId) : null; - - //console.log(message.url) - var links = target ? [target] : [...document.getElementsByTagName('A')].filter(x => x.href == message.url) - - //if (!links.length) console.log('Already empty :(') - var identifier = links.length ? getIdentifier(links[0]) : getIdentifier(message.url); - if (!identifier) return; - message.identifier = identifier; - var snippets = links.map(node => { - +function getSnippet(node){ while (node) { var classList = node.classList; if (hostname == 'facebook.com' && node.dataset && node.dataset.ftr) return node; @@ -517,25 +500,47 @@ browser.runtime.onMessage.addListener((message, sender, sendResponse) => { node = node.parentElement; } - //console.log('Reached the top without a satisfying element') return null; - }) +} - var exact = snippets.filter(x => x && x.contains(lastRightClickedElement))[0] || null; +browser.runtime.onMessage.addListener((message, sender, sendResponse) => { + + if (message.updateAllLabels) { + updateAllLabels(true); + return; + } + message.contextPage = window.location.href; + var target = lastRightClickedElement; // message.elementId ? browser.menus.getTargetElement(message.elementId) : null; + + while(target){ + if(target.href) break; + target = target.parentElement; + } + + if (target && target.href != message.url) target = null; + + var identifier = target ? getIdentifier(target) : getIdentifier(message.url); + if (!identifier) return; + + message.identifier = identifier; + if (identifier.startsWith('facebook.com/')) + message.secondaryIdentifier = getIdentifier(message.url); + + var snippet = getSnippet(target); message.linkId = ++lastGeneratedLinkId; - if (lastRightClickedElement) - lastRightClickedElement.setAttribute('shinigami-eyes-link-id', lastGeneratedLinkId); + if (target) + target.setAttribute('shinigami-eyes-link-id', lastGeneratedLinkId); - message.snippet = exact ? exact.outerHTML : null; + message.snippet = snippet ? snippet.outerHTML : null; var debugClass = 'shinigami-eyes-debug-snippet-highlight'; - if (exact && message.debug) { - exact.classList.add(debugClass); + if (snippet && message.debug) { + snippet.classList.add(debugClass); if (message.debug <= 1) - setTimeout(() => exact.classList.remove(debugClass), 1500) + setTimeout(() => snippet.classList.remove(debugClass), 1500) } sendResponse(message); }) \ No newline at end of file