您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
removes the names of each of the badges and turns it into a neat array of columns to allow for you to be able to view more at once, useful for people with more badges
// ==UserScript== // @name Badge Picker Upgrades // @namespace https://github.com/encumber/SteamBadgeShowcaseTools/blob/main/BadgePickerUpgrades.userscript.js // @version 1.1 // @description removes the names of each of the badges and turns it into a neat array of columns to allow for you to be able to view more at once, useful for people with more badges // @author Nitoned // @match https://steamcommunity.com/*/*/edit/showcases // @icon https://www.google.com/s2/favicons?sz=64&domain=steamcommunity.com // @grant none // ==/UserScript== (function() { 'use strict'; // Function to dynamically add or remove styles const styleElement = document.createElement("style"); document.head.appendChild(styleElement); function updateStyles(content) { let styles = ` /* Shared Boilerplate CSS */ .group_list_results { display: flex; flex-wrap: wrap; gap: 10px; overflow: auto; /* Enable scrolling for overflow */ max-height: 90%; /* Ensure badges stay within the newmodal bounds */ padding: 10px; padding-bottom: 50px; box-sizing: border-box; } .group_list_option { flex: 1 0 calc(100% / var(--columns) - 10px); box-sizing: border-box; padding: 5px; margin: 0; text-align: center; } .badge_icon img { width: 80px; height: 80px; display: block; margin: 0 auto; } .group_list_groupname { display: none !important; } .search-container { display: flex; align-items: center; margin-bottom: 10px; position: absolute; top: 25px; right: calc(5%); } .search-container input { margin-left: 10px; padding: 5px; font-size: 14px; } .search-container button { margin-left: 5px; padding: 5px 10px; font-size: 14px; cursor: pointer; } .newmodal { overflow: hidden; position: relative; max-height: 100%; /* Restricts badges to fit within the modal */ left: 50px !important; right: 40px !important; top: 30px !important; bottom: 40px !important; } `; switch (content) { case "Choose a badge to feature": styles += ` .group_list_groupname { display: none !important; } `; break; case "Select a Group to Feature": styles += ` .group_list_groupname { visibility: hidden; position: absolute; } .group_list_option { padding: 30px !important; } text-align: center; .group_list_option:hover .group_list_groupname { visibility: visible; display: block; position: absolute; background: rgba(0, 0, 0, 0.75); color: #fff; padding: 5px; border-radius: 4px; z-index: 10; white-space: nowrap; } .group_list_option .playerAvatar { width: 48px !important; height: 48px !important; } .playerAvatar img, .friend_block_holder .friend_block_avatar img, .friend_activity .friend_block_avatar img { width: 48px !important; height: 48px !important; } `; break; case "Select an achievement to feature": styles += ` .achievement_list_desc { visibility: hidden; position: absolute; } .group_list_option:hover .achievement_list_desc { visibility: visible; display: block; position: absolute; background: rgba(0, 0, 0, 0.75); color: #fff; padding: 5px; border-radius: 4px; z-index: 10; white-space: normal; } `; break; case "Select a Game You've Publicly Reviewed": // No additional styles needed for this context break; default: styles = ""; // Unload styles break; } styleElement.textContent = styles; } // Function to manage the addition of search functionality function addSearchFunctionality(content) { // Remove search bar for "Select a Game You've Publicly Reviewed" if (content === "Select a Game You've Publicly Reviewed") return; const existingSearchContainer = document.querySelector(".search-container"); if (existingSearchContainer) return; // Avoid adding duplicate search boxes const titleText = Array.from(document.querySelectorAll(".title_text")).find( (el) => el.textContent.trim() === content ); if (titleText) { const searchContainer = document.createElement("div"); searchContainer.className = "search-container"; const searchInput = document.createElement("input"); searchInput.type = "text"; searchInput.placeholder = "Search..."; const searchButton = document.createElement("button"); searchButton.textContent = "Search"; searchContainer.appendChild(document.createTextNode("Search:")); searchContainer.appendChild(searchInput); searchContainer.appendChild(searchButton); titleText.parentNode.insertBefore(searchContainer, titleText.nextSibling); const badges = document.querySelectorAll(".group_list_option"); const filterBadges = () => { const query = searchInput.value.toLowerCase().trim(); badges.forEach((badge) => { const badgeName = badge.getAttribute("data-badge-name") || ""; const groupName = badge.getAttribute("data-group-name") || ""; const achievementDesc = badge.getAttribute("data-achievement-desc") || ""; if ( query === "" || badgeName.includes(query) || groupName.includes(query) || achievementDesc.includes(query) ) { badge.style.display = ""; } else { badge.style.display = "none"; } }); }; searchButton.addEventListener("click", filterBadges); searchInput.addEventListener("input", filterBadges); } } // Function to prepare group names and set hover/search functionality function prepareGroupNames() { document.querySelectorAll(".group_list_option").forEach((option) => { const groupNameElement = option.querySelector(".group_list_groupname"); if (groupNameElement) { const groupName = groupNameElement.textContent.trim(); option.setAttribute("data-group-name", groupName.toLowerCase()); // Add for search option.setAttribute("title", groupName); // Add hover text to the option itself } }); } // Function to prepare badge, group, and achievement descriptions function prepareBadgeData() { document.querySelectorAll(".group_list_option").forEach((option) => { const groupNameElement = option.querySelector(".group_list_groupname"); const badgeIcon = option.querySelector(".badge_icon"); const achievementDescElement = option.querySelector(".achievement_list_desc"); if (groupNameElement) { const groupName = groupNameElement.textContent.trim(); option.setAttribute("data-group-name", groupName.toLowerCase()); // Add for search option.setAttribute("title", groupName); // Set hover text directly } if (badgeIcon) { const badgeName = badgeIcon.getAttribute("title") || ""; option.setAttribute("data-badge-name", badgeName.toLowerCase()); } if (achievementDescElement) { const achievementDesc = achievementDescElement.innerText.trim(); // Includes children like <b> and <div> option.setAttribute("data-achievement-desc", achievementDesc.toLowerCase()); } }); } // MutationObserver to monitor DOM changes const observer = new MutationObserver((mutationsList) => { for (const mutation of mutationsList) { if ( mutation.type === "childList" && mutation.addedNodes.length > 0 && Array.from(mutation.addedNodes).some((node) => node.querySelector ? node.querySelector(".title_text") : node.className === "title_text" ) ) { const titleText = Array.from(document.querySelectorAll(".title_text")).find( (el) => [ "Choose a badge to feature", "Select a Game You've Publicly Reviewed", "Select an achievement to feature", "Select a Group to Feature", ].includes(el.textContent.trim()) ); if (titleText) { const content = titleText.textContent.trim(); updateStyles(content); // Update styles based on the title prepareBadgeData(); // Prepare badge data if (content === "Select a Group to Feature") { prepareGroupNames(); // Handle group-specific hover/search immediately } addSearchFunctionality(content); // Add search functionality } else { // If the modal is no longer present, unload styles and clean up updateStyles(""); // Unload styles document.querySelector(".search-container")?.remove(); } } } }); // Run the group name preparation immediately on load if (document.querySelector(".title_text")) { const content = document.querySelector(".title_text").textContent.trim(); updateStyles(content); prepareBadgeData(); if (content === "Select a Group to Feature") { prepareGroupNames(); } addSearchFunctionality(content); } // Start observing the document for changes observer.observe(document.body, { childList: true, subtree: true }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址