just open direct!
目前為
// ==UserScript==
// @name open_original_links_in_pocket
// @namespace undegro
// @include https://getpocket.com/*
// @version 4.3
// @license MIT
// @description just open direct!
// ==/UserScript==
{
const observeParent = new MutationObserver(records => records.some(record => [...record.removedNodes].includes(articleListElem)) && init())
let articleListElem
let mo
init()
function init() {
mo?.disconnect()
observeParent.disconnect()
waitElement("main > div > div > div").then(elem => {
const mo = new MutationObserver(records => records.flatMap(record => [...record.addedNodes]).forEach(rewrite))
articleListElem = elem.closest("main > div")
observeParent.observe(elem.closest("main"), { childList: true })
mo.observe(elem, { childList: true, subtree: true })
})
}
function rewrite(target) {
if(target.tagName == "ARTICLE") {
target.querySelector("button[aria-label='Open Menu']").click()
}else if(target.parentElement?.classList.contains("item-menu")){
target.style.opacity = "0"
target.style.pointerEvents = "none"
const parentArticle = target.closest("article")
parentArticle.querySelector("button[aria-label='Open Menu']").addEventListener("click", () => target.removeAttribute("style"), { once: true })
parentArticle.getElementsByTagName("a")[0].href = decodeURIComponent(target.getElementsByTagName("a")[0].href.replace(/^https:\/\/getpocket\.com\/redirect\?url=/, ""))
}
}
function waitElement(selector) {
return new Promise((resolve, reject) => {
const searchElement = () => {
const elem = document.querySelector(selector)
if(!elem) {
requestAnimationFrame(searchElement)
}else{
resolve(elem)
}
}
searchElement()
setTimeout(() => reject("timeout"), 5000)
})
}
}