您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Few small changes to the kbin UI while they still develop some features
当前为
- // ==UserScript==
- // @name kbin enhancement script
- // @description Few small changes to the kbin UI while they still develop some features
- // @namespace com.sirpsychomantis
- // @license MIT
- // @version 1.3
- // @grant none
- // @run-at document-end
- // @match https://fedia.io/*
- // @match https://kbin.social/*
- // ==/UserScript==
- (function(){
- function getSetting(setting) {
- let value = localStorage.getItem("setting-" + setting);
- if (value === null)
- value = "true";
- return value === "true";
- }
- function setSetting(setting, value) {
- localStorage.setItem("setting-" + setting, value);
- location.reload();
- }
- function addDomain(link) {
- const parts = link.title.split("@");
- if (parts[2] !== location.hostname) {
- const linkText = link.childNodes[link.childNodes.length-1];
- linkText.nodeValue += "@" + parts[2];
- }
- }
- function addDomains() {
- if (location.pathname.startsWith('/m')) {
- document.querySelectorAll(".magazine-inline, .user-inline").forEach(link => {
- addDomain(link);
- })
- } else {
- document.querySelectorAll(".magazine-inline").forEach(link => {
- addDomain(link);
- })
- }
- }
- function getComments(comment, allComments) {
- const id = comment.id.split('-')[2];
- allComments.push(comment);
- const subComments = comment.parentElement.querySelectorAll('blockquote[data-subject-parent-value="'+id+'"]');
- subComments.forEach(blockquote => { getComments(blockquote, allComments); });
- }
- function getCollapsos(comment, allCollapsos) {
- const id = comment.id.split('-')[2];
- if (comment.classList.contains('kes-expand'))
- allCollapsos.push(comment);
- const subComments = comment.parentElement.querySelectorAll('blockquote[data-subject-parent-value="'+id+'"]');
- subComments.forEach(blockquote => { getCollapsos(blockquote, allCollapsos); });
- }
- function expandComment(blockquote) {
- const allComments = [];
- getComments(blockquote, allComments);
- allComments.forEach(comment => { comment.style.display="" });
- // Just remove all these for now, don't want to figure out how to do this cleanly right now.
- const allCollapsos = [];
- getCollapsos(blockquote, allCollapsos);
- allCollapsos.forEach(comment => { comment.remove() });
- }
- function collapseComment(blockquote) {
- const id = blockquote.id.split('-')[2];
- let commentLevel = "1";
- blockquote.classList.forEach(classItem => {
- if (classItem.includes("comment-level"))
- commentLevel = classItem.split("--")[1];
- });
- const allComments = [];
- getComments(blockquote, allComments);
- allComments.forEach(comment => { comment.style.display="none" });
- const username = blockquote.querySelector("header a").innerText;
- const newBlockquote = document.createElement('blockquote');
- newBlockquote.className = 'kes-expand section comment entry-comment comment-level--' + commentLevel;
- newBlockquote.dataset.subjectParentValue = id;
- newBlockquote.innerHTML = '<header>' + username + ' <a href="javascript:;">expand</a></header>';
- newBlockquote.querySelector('a').addEventListener("click", () => {expandComment(blockquote)});
- blockquote.parentNode.insertBefore(newBlockquote, blockquote);
- }
- function addCollapseLinks() {
- if (location.pathname.startsWith('/m')) {
- const comments = document.querySelectorAll("blockquote.comment");
- comments.forEach(blockquote => {
- const menu = blockquote.querySelector("footer menu");
- const newLi = document.createElement('li');
- newLi.innerHTML = '<a href="javascript:;" class="kes-collapse">collapse</a>';
- menu.appendChild(newLi);
- });
- document.querySelectorAll(".kes-collapse").forEach(link => {link.addEventListener("click", () => {
- const blockquote = link.closest("blockquote.comment");
- collapseComment(blockquote);
- })});
- }
- }
- function generateSettingDiv(settingDisplay, setting) {
- const settingValue = getSetting(setting);
- const newDiv = document.createElement('div');
- newDiv.className = "row";
- newDiv.innerHTML = `<span>${settingDisplay}:</span>
- <div>
- <a class="kes-setting-yes link-muted ${settingValue ? 'active' : ''}" href="javascript:;" data-setting="${setting}">
- Yes
- </a>
- |
- <a class="kes-setting-no link-muted ${settingValue ? '' : 'active'}" href="javascript:;" data-setting="${setting}">
- No
- </a>
- </div>`;
- return newDiv;
- }
- function addHTMLSettings() {
- const settingsList = document.querySelector(".settings-list");
- const header = document.createElement('strong');
- header.textContent = "kbin enhancement script";
- settingsList.appendChild(header);
- settingsList.appendChild(generateSettingDiv("Show domains", "show-domains"));
- settingsList.appendChild(generateSettingDiv("Show collapse comment", "show-collapse"));
- document.querySelectorAll(".kes-setting-yes").forEach(link => {link.addEventListener("click", () => {setSetting(link.dataset.setting, true)})});
- document.querySelectorAll(".kes-setting-no").forEach(link => {link.addEventListener("click", () => {setSetting(link.dataset.setting, false)})});
- }
- addHTMLSettings();
- if (getSetting("show-domains"))
- addDomains();
- if (getSetting("show-collapse"))
- addCollapseLinks();
- })();