您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A small suite of tools to make Lemmy easier.
当前为
// ==UserScript== // @name LemmyTools // @namespace https://thesimplecorner.org/c/lemmytools // @version 0.1 // @description A small suite of tools to make Lemmy easier. // @author [email protected] // @match https://*/* // ==/UserScript== const homeString = ` // !!! - EDIT YOUR HOME INSTANCE HERE - !!! const theHomeinstance = 'https://thesimplecorner.org'; // !!! -------------------------------- !!! /* LemmyTools 0.1a - greasemonkey addon release Current Features: - Adds "Easy Subscribe" button to remote instance communities. - Adds a collapsable sidebar on the left side of screen that shows a searchable list of your subscribed communities. - Adds link back to home instance for easy navigation when on remote instances. - Remote instance side bar is very much useless currently Upocoming features: - When off site collect a list of communities and display in sidebar for easy subscription. - Create option page for saving homeinstance and other options. - Create sub communities grouping function. - Create remote instance search of communities and integrate with easy subscribe method. - create firefox addon. /* ---------------------- */ `; /* SCRIPT BELOW */ const funcsString = ` function update(comm, page, subString) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { console.log("LemmyTools: " + "update()" + subString); document.querySelectorAll('[role="alert"]').forEach(function(el) { el.innerHTML += "<br /><br /><a href=" + subString + " target='_blank'><button class='ltbutton'>Easy Subscribe</button></a>"; }); /* let commPageArray = []; let remoteLinks = []; if (url.includes("/communities")) { document.querySelectorAll('[class="overflow-wrap-anywhere"]').forEach(function(el) { commPageArray.push(el.innerText); }); if (commPageArray.count > 1) { console.log("LemmyTools: " + "setting remoteComms to localstore"); localStorage.setItem("remoteComms", commPageArray); site = site.replace("/communities", ""); for (const comm of commPageArray) { var subString = homeInstance + "/search/q/!" + comm + "@" + site + "/type/All/sort/TopAll/listing_type/All/community_id/0/creator_id/0/page/1"; remoteLinks.push(subString); //div.innerHTML += comm + "<br /><a href=" + subString + " target='_blank'><button class='ltbutton'>Easy Subscribe</button></a><hr />"; } console.log("LemmyTools: " + "setting remoteLinks to localstore"); localStorage.setItem("remoteLinks", remoteLinks); } } */ } } xhttp.open("GET", page, true); xhttp.send(page); } function commupdate(id, page, data) { var count = -1; var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { console.log("LemmyTools: " + "updating " + id + " commsearch with: " + data); data.forEach(_ => count++); id.innerHTML = ""; id.innerHTML += "Results: " + count + "<hr />"; id.innerHTML += data; } } xhttp.open("GET", page, true); xhttp.send(page); } function Toggle(overide) { var s = document.getElementById("searchdiv"); var size = s.getBoundingClientRect(); var x = document.getElementById("myDiv"); var b = document.getElementById("toggle"); //on remote instance just hide the bar. if (overide = 0) { x.style.display = "none"; } if (x.style.display === "none") { x.style.display = "block"; b.innerHTML = "<<"; s.style.left = "0%"; } else { x.style.display = "none"; b.innerHTML = ">>"; if (size.width > 261) { s.style.left = "-7.33%"; } else { s.style.left = "-200px"; } } } function searchComms(id, full, commsdiv) { var url = window.location.href; var query = id.value.toLowerCase(); console.log("LemmyTools: " + "Searching for:" + query) if (query == "") { commsdiv.innerHTML = full; } else { commsdiv.innerHTML = full; var children = commsdiv.getElementsByTagName("li"); // any tag could be used here.. console.log("LemmyTools: " + "Children found: " + children.length); let data = [""]; var found; for (var i = 0; i < children.length; i++) { if (children[i].innerHTML.toLowerCase().indexOf(query) !== -1) { found = children[i].innerHTML + "<hr />"; console.log("LemmyTools: " + "Found " + query + " in " + found); data.push(found); } } let dup = [...new Set(data)]; data = dup; data.sort(); commupdate(commsdiv, url, data); } } // One liner function: const addCSS = css => document.head.appendChild(document.createElement("style")).innerHTML = css; // Usage: addCSS(".ltmenu {position: fixed; min-width: 240px; width: 8%; max-height: 7%; top: 0; left: 0; font-size: .75em; overflow: hidden; display: block; min-height:80px; }" + ".ltcommsbar {position: fixed; min-width: 240px; width: 8%; word-wrap: break-word; max-height: 93%; min-height:93%; top: 80px; left: 0; font-size: .75em; overflow: auto; display: block; }" + ".ltbutton {background-color: #ccffe5;}"); `; const mainString = ` // LemmyTools /* EDIT YOUR HOME INSTANCE */ var homeInstance = theHomeinstance; /* ---------------------- */ /* Script */ var url = window.location.href; var currentPage = url; var broken = url.split('/c/'); var site = broken[0]; site = site.replace('https://', ''); var community = broken[1]; var subString = homeInstance + "/search/q/!" + community + "@" + site + "/type/All/sort/TopAll/listing_type/All/community_id/0/creator_id/0/page/1"; var count = 0; //Easier Subscribe Buttons --------------------------- //Browsing remote instance setInterval(function() { url = window.location.href; if (currentPage != location.href) { broken = url.split('/c/'); site = broken[0]; site = site.replace('https://', ''); community = broken[1]; subString = homeInstance + "/search/q/!" + community + "@" + site + "/type/All/sort/TopAll/listing_type/All/community_id/0/creator_id/0/page/1"; // page has changed, set new page as 'current' console.log("LemmyTools: " + "Easy Sub Running..."); if (document.querySelector('meta[name="Description"]').content.includes("Lemmy")) { console.log("LemmyTools: " + "On lemmy"); if ((url.includes(homeInstance) == false) && ((url.includes("/c/") || url.includes("/post/") || url.includes("/comment/") || url.includes("/communities")))) { console.log("LemmyTools: " + "On remote instance community" + "Button to: " + subString); update(community, url, subString); } } } currentPage = location.href; }, 500); // Direct to community if (document.querySelector('meta[name="Description"]').content.includes("Lemmy")) { console.log("LemmyTools: " + "On lemmy"); if ((url.includes(homeInstance) == false) && ((url.includes("/c/") || url.includes("/post/") || url.includes("/comment/") || url.includes("/communities")))) { console.log("LemmyTools: " + "On remote instance community - DIRECT -" + "Button to: " + subString); update(community, url, subString); } } //Better Subscription List -------------------------- //Build the divs var idiv = document.createElement("div"); idiv.setAttribute("id", "searchdiv"); idiv.classList.add("ltmenu", "border-secondary", "card"); idiv.innerHTML = "<input type='text' id='commsearch' placeholder='Sub search' oninput='searchComms(commsearch, communityArray, div)' /><br />LemmyTools<span style='float:right;'><button class='ltbutton' id='toggle' onClick='Toggle()'" + "style='float:right;' /> << </button><br /><br /><b><a href=" + homeInstance + ">Home</a></b></span>"; var div = document.createElement("div"); div.setAttribute("id", "myDiv"); div.classList.add("ltcommsbar", "border-secondary", "card"); if (document.querySelector('meta[name="Description"]').content.includes("Lemmy")) { url = location.href; console.log("LemmyTools: " + "url is " + url) // ----------------------------------------------- //Add divs to page; document.body.appendChild(idiv); document.body.appendChild(div); } var commsearch = document.getElementById("commsearch"); // ----------------------------------------------- let communityArray = new Array(); if (url.includes(homeInstance)) { console.log("LemmyTools: " + "home instance do bar"); document.querySelectorAll('[class="list-inline-item d-inline-block"]').forEach(function(el) { communityArray.push("<li>" + el.innerHTML + "</li>"); }); let dup = [...new Set(communityArray)]; communityArray = dup; if ((count == 0) || (count == null)) { count = 0; communityArray.forEach(_ => count++); } div.innerHTML = "Communities: " + count + "<hr />"; div.innerHTML += communityArray; if (div.innerHTML.length >= 20) { //make use of it: console.log("LemmyTools: Got Results >20"); console.log("LemmyTools: " + "setting localcomms localstore"); localStorage.setItem("localComms", communityArray); } else { console.log("LemmyTools: " + "get localcomms from localstore"); communityArray = localStorage.getItem("localComms"); div.innerHTML = "Communities: " + count + "<hr />" div.innerHTML += communityArray; searchComms(commsearch, communityArray, div); } } else { console.log("LemmyTools: On Remote Instance - Bar"); //div.innerHTML = localStorage.getItem("remoteComms"); Toggle(0); } `; const LTHome = document.head.appendChild(document.createElement("script")).innerHTML = homeString; const LTFuncs = document.head.appendChild(document.createElement("script")).innerHTML = funcsString; const LTMain = document.body.appendChild(document.createElement("script")).innerHTML = mainString;