open_original_links_in_pocket

just open direct!

  1. // ==UserScript==
  2. // @name open_original_links_in_pocket
  3. // @namespace undegro
  4. // @include https://getpocket.com/*
  5. // @version 4.6
  6. // @license MIT
  7. // @description just open direct!
  8. // ==/UserScript==
  9.  
  10. {
  11. const parent = document.getElementById("__next")
  12. const observeParent = new MutationObserver(records => records.filter(record => record.addedNodes[0]).some(record => record.target.tagName == "MAIN" || (record.target == parent && record.addedNodes[0].querySelector("main"))) && init())
  13. const observeArticle = new MutationObserver(records => records.flatMap(record => [...record.addedNodes]).forEach(rewrite))
  14.  
  15. observeParent.observe(parent, { childList: true, subtree: true })
  16.  
  17. async function init() {
  18. observeArticle.disconnect()
  19. const articleList = await waitElement("main > div > div > div")
  20. if(articleList) observeArticle.observe(articleList, { childList: true, subtree: true })
  21. }
  22.  
  23. function rewrite(target) {
  24. if(target.tagName == "ARTICLE") {
  25. const links = [...target.getElementsByTagName("a")]
  26. const publisherLink = links.find(link => link.classList.contains("publisher"))
  27. links.forEach(link => {
  28. link.addEventListener("click", e => e.stopPropagation())
  29. link.href = decodeURIComponent(publisherLink.href.replace(/^https:\/\/getpocket\.com\/redirect\?url=/, ""))
  30. link.setAttribute("target", "_blank")
  31. })
  32. }
  33. }
  34.  
  35. function waitElement(selector) {
  36. return new Promise((resolve) => {
  37. const searchElement = () => {
  38. const elem = document.querySelector(selector)
  39. if(!elem) {
  40. requestAnimationFrame(searchElement)
  41. }else{
  42. resolve(elem)
  43. }
  44. }
  45.  
  46. searchElement()
  47. setTimeout(() => resolve(false), 5000)
  48. })
  49. }
  50. }