// ==UserScript== // @name Miniflux detect deleted Bluesky posts // @namespace https://reader.miniflux.app/ // @version 1 // @description Makes the External Link unclickable if the bsky post was deleted because opening a deleted post is a waste of time. // @author Tehhund // @match *://*.miniflux.app/* // @icon https://www.google.com/s2/favicons?sz=64&domain=miniflux.app // @run-at document-start // @grant GM.xmlHttpRequest // @license MIT // @downloadURL none // ==/UserScript== const detect = async () => { const links = [...document.getElementsByTagName(`a`)]; for (const link of links) { if (link.href.includes(`bsky.app`)) { const repo = link.href.split(`/`)[4]; const collection = `app.bsky.richtextpost`; const rkey = link.href.split(`/`)[6]; const url = `https://bsky.social/xrpc/com.atproto.repo.getRecord?repo=${repo}&collection=app.bsky.richtextpost&rkey=${rkey}`; GM.xmlHttpRequest({ method: "GET", url: url, headers: { "User-Agent": "Mozilla/5.0", // If not specified, navigator.userAgent will be used. "Accept": "text/xml" // If not specified, browser defaults will be used. }, onload: function (response) { if (response.responseText.includes`RecordNotFound`) { const newSpan = document.createElement(`span`); newSpan.textContent = `No ${link.textContent}`; link.insertAdjacentElement(`beforebegin`, newSpan); link.remove(); } } }); } } } window.addEventListener("DOMContentLoaded", detect);