您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhanced version with better performance and maintainability
- // ==UserScript==
- // @name Enhanced Hide Signatures on IGN Boards
- // @namespace https://www.ignboards.com/members/magof.5211856/
- // @version 0.2
- // @author Magof
- // @description Enhanced version with better performance and maintainability
- // @match https://www.ignboards.com/threads/*
- // @grant GM_addStyle
- // @grant GM_setValue
- // @grant GM_getValue
- // ==/UserScript==
- (function() {
- 'use strict';
- // Constants
- const STORAGE_KEY = 'hiddenUsers';
- const BUTTON_CLASSES = ['signature-toggle-button', 'button--link', 'button', 'rippleButton'];
- const ICONS = {
- visible: '<i class="fas fa-eye-slash"></i>',
- hidden: '<i class="fas fa-eye"></i>'
- };
- const TOOLTIPS = {
- visible: 'Hide this user\'s signature',
- hidden: 'Show this user\'s signature'
- };
- // Cache DOM elements
- let postsContainer;
- /**
- * Toggle signature visibility for a specific user
- * @param {string} user - The username to toggle
- * @param {boolean} isVisible - Whether to show or hide the signature
- */
- function toggleSignatureVisibility(user, isVisible) {
- const posts = postsContainer.querySelectorAll('.message');
- posts.forEach(post => {
- const authorElement = post.querySelector('.message-userExtras');
- if (!authorElement) return;
- const postUser = authorElement.textContent.trim().split(',')[0];
- if (postUser !== user) return;
- const signature = post.querySelector('.message-signature');
- const button = post.querySelector('.signature-toggle-button');
- if (signature) {
- signature.style.display = isVisible ? 'block' : 'none';
- }
- if (button) {
- button.innerHTML = isVisible ? ICONS.visible : ICONS.hidden;
- button.title = isVisible ? TOOLTIPS.visible : TOOLTIPS.hidden;
- }
- });
- }
- /**
- * Update storage and toggle signature visibility
- * @param {string} user - The username to toggle
- */
- function handleSignatureToggle(user) {
- const hiddenUsers = JSON.parse(GM_getValue(STORAGE_KEY, '[]'));
- const userIndex = hiddenUsers.indexOf(user);
- const isVisible = userIndex === -1;
- if (isVisible) {
- hiddenUsers.push(user);
- } else {
- hiddenUsers.splice(userIndex, 1);
- }
- GM_setValue(STORAGE_KEY, JSON.stringify(hiddenUsers));
- toggleSignatureVisibility(user, !isVisible);
- }
- /**
- * Create and add toggle buttons to posts
- */
- function addToggleButtons() {
- const posts = postsContainer.querySelectorAll('.message');
- posts.forEach(post => {
- const signature = post.querySelector('.message-signature');
- if (!signature) return;
- const authorElement = post.querySelector('.message-userExtras');
- if (!authorElement) return;
- const user = authorElement.textContent.trim().split(',')[0];
- const button = document.createElement('button');
- button.innerHTML = ICONS.visible;
- button.title = TOOLTIPS.visible;
- button.classList.add(...BUTTON_CLASSES);
- button.addEventListener('click', () => handleSignatureToggle(user));
- const avatar = post.querySelector('.message-avatar');
- if (avatar) {
- avatar.parentNode.appendChild(button);
- }
- });
- }
- /**
- * Apply saved preferences for hidden users
- */
- function applySavedPreferences() {
- const hiddenUsers = JSON.parse(GM_getValue(STORAGE_KEY, '[]'));
- hiddenUsers.forEach(user => toggleSignatureVisibility(user, false));
- }
- // Initialize script
- function init() {
- postsContainer = document.querySelector('.messageList') || document.body;
- addToggleButtons();
- applySavedPreferences();
- }
- // Add styles
- GM_addStyle(`
- .signature-toggle-button {
- margin-left: 50px;
- padding: 5px;
- background-color: transparent;
- border: none;
- cursor: pointer;
- transition: background-color 0.2s ease;
- }
- .signature-toggle-button:hover {
- background-color: rgba(0, 0, 0, 0.1);
- }
- .signature-toggle-button i {
- font-size: 1.2em;
- pointer-events: none;
- }
- `);
- // Run initialization
- window.addEventListener('load', init);
- })();