// ==UserScript== // @name Improved Channel Select Menu for Kbin // @namespace http://tampermonkey.net/ // @version 0.2.0 // @description Adds subscribed magazines and liked collections to the channel select menu. // @author NeighborlyFedora // @match *://kbin.social/* // @icon https://www.google.com/s2/favicons?sz=64&domain=kbin.social // @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js // @license GPL-3.0-or-later // @downloadURL none // ==/UserScript== //Code partially based on Floating Subs List by raltsm4k (https://greasyfork.org/en/scripts/469121-floating-subs-list) let user; let subs = []; let clls = []; let subsHtml = []; let cllsHtml = []; let settings = { cllsFirst: true, cacheEnabled: true, defaultIcons: true }; const SETTINGS_TEXT = { cllsFirst: "List liked collections before subscribed magazines.", cacheEnabled: "Cache menu items for faster loading.", defaultIcons: "Add placeholder icons to collections and iconless magazines." } let settingsOpen = false; let isFilling = false; let fetchTries = 3; (function() { "use strict"; user = document.querySelector("#header a.login").getAttribute("href"); if(user === "/login") return; const channelList = document.querySelector("#header li:has(a[title='Select a channel']) .dropdown__menu"); Object.assign(channelList, { id: "channel-list" }); const clRefresh = Object.assign(document.createElement("button"), { id: "cl-refresh", title: "Refresh list", }); clRefresh.appendChild(Object.assign(document.createElement("i"), { className: "fa-solid fa-rotate" })); channelList.prepend(clRefresh); clRefresh.addEventListener("click", function(){ closeSettings(); localStorage.removeItem("icsm_" + user); empty(); $("#cl-refresh").find("i").addClass("fa-spin"); fetchSubs(1); }); const clSettings = Object.assign(document.createElement("button"), { id: "cl-settings", title: "Settings", }); clSettings.appendChild(Object.assign(document.createElement("i"), { className: "fa-solid fa-gear" })); channelList.prepend(clSettings); clSettings.addEventListener("click", function(){ if(settingsOpen){ closeSettings(); }else{ openSettings(); } settingsOpen = !settingsOpen; }); $(document).on("keydown", function(event) { if(event.key == "Escape"){ closeSettings(); } }); const icsmSettings = Object.assign(document.createElement("ul"), { id: "icsm-settings" }); $(icsmSettings).hide(); channelList.append(icsmSettings); icsmSettings.append(Object.assign(document.createElement("h3"), { textContent: "Settings" })); $("