working on better defining the page links datastructure
This commit is contained in:
@@ -9,11 +9,38 @@ class SearchLink {
|
|||||||
constructor(link_node) {
|
constructor(link_node) {
|
||||||
this.node = link_node
|
this.node = link_node
|
||||||
this.target = link_node.getAttribute("href")
|
this.target = link_node.getAttribute("href")
|
||||||
|
this.url = new URL(link_node.getAttribute("href"))
|
||||||
this.checked = false
|
this.checked = false
|
||||||
this.result = undefined
|
this.result = undefined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ResultLinks extends Map {
|
||||||
|
// map domains to paths and their associated nodes
|
||||||
|
set(domain, path, search_link) {
|
||||||
|
if(!super.get(domain)) {
|
||||||
|
const nested_map = new Map()
|
||||||
|
nested_map.set(path, search_link)
|
||||||
|
super.set(domain, nested_map)
|
||||||
|
} else {
|
||||||
|
super.get(domain).set(path, search_link)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get(domain, path="/") {
|
||||||
|
return super.get(domain).get(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
getDomain(domain) {
|
||||||
|
return super.get(domain)
|
||||||
|
}
|
||||||
|
|
||||||
|
getUrl(url) {
|
||||||
|
const urlobj = new URL(url)
|
||||||
|
return this.get(urlobj.hostname, urlobj.pathname)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function check_links(links) {
|
function check_links(links) {
|
||||||
// send a message to background script with a list of URLs to check
|
// send a message to background script with a list of URLs to check
|
||||||
browser.runtime.sendMessage({type: "check", urls: links})
|
browser.runtime.sendMessage({type: "check", urls: links})
|
||||||
@@ -37,7 +64,7 @@ function get_initial_links() {
|
|||||||
const links = document.querySelectorAll(ddg_result_selector)
|
const links = document.querySelectorAll(ddg_result_selector)
|
||||||
links.forEach((node) => {
|
links.forEach((node) => {
|
||||||
const link = new SearchLink(node)
|
const link = new SearchLink(node)
|
||||||
page_links.set(link.target, link)
|
page_links.set(link.url.hostname, link)
|
||||||
})
|
})
|
||||||
const link_targets = page_links.keys().toArray()
|
const link_targets = page_links.keys().toArray()
|
||||||
check_links(link_targets)
|
check_links(link_targets)
|
||||||
@@ -49,7 +76,7 @@ function update_links() {
|
|||||||
links.forEach((node) => {
|
links.forEach((node) => {
|
||||||
const link = new SearchLink(node)
|
const link = new SearchLink(node)
|
||||||
if (page_links.has(link.target)) return
|
if (page_links.has(link.target)) return
|
||||||
page_links.set(link.target, link)
|
page_links.set(link.url.hostname, link)
|
||||||
})
|
})
|
||||||
const link_arr = page_links.keys().filter((key) => {
|
const link_arr = page_links.keys().filter((key) => {
|
||||||
return !(page_links.get(key).checked)
|
return !(page_links.get(key).checked)
|
||||||
|
|||||||
Reference in New Issue
Block a user