您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
16/09/2021, 18:24:46
// ==UserScript== // @name Find cube duplicates // @namespace Violentmonkey Scripts // @match https://cubecobra.com/cube/list/* // @grant none // @version 1.3 // @author - // @description 16/09/2021, 18:24:46 // ==/UserScript== // // source: https://stackoverflow.com/questions/32132242/is-there-something-like-mulitiset-in-javascript class Multiset { _backing = new Map(); add(value) { if (this._backing.has(value)) { this._backing.set(value, 1 + this._backing.get(value)); } else { this._backing.set(value, 1); } } delete(value) { if (this._backing.get(value) > 0) { this._backing.set(value, this._backing.get(value) - 1); } else { //do nothing } } get(value) { if (this._backing.get(value) > 0) { return this._backing.get(value); } else { return 0; } } } let preCreated = false; let buttonToggled = false; let pre = null; window.findDuplicates = function (){ let cards = new Multiset(); [...document.querySelectorAll("li.card-list-item")] .map(e => e.textContent) .map(card => cards.add(card)); // This is our output variable we'll be appending to let resultString = ""; // shamelessly abuse functional constructs when we // really mean forEach [...cards._backing] .sort((a, b) => a[1] - b[1] ) .reverse().filter(e => e[1] > 1) .map(e => resultString = `${resultString}${e[0]} - ${e[1]}\n`); if(resultString.trim() === ""){ resultString = "No duplicates!\n"; } if(!preCreated){ pre = document.createElement("pre"); document.querySelector(".usercontrols.mb-3 + .mt-3").appendChild(pre); preCreated = true; } if(!buttonToggled){ pre.textContent = resultString; buttonToggled = true; } else { pre.textContent = ""; buttonToggled = false; } } let btn = document.createElement("button"); btn.style.margin = "2rem"; btn.classList.add("btn"); btn.classList.add("btn-success"); btn.textContent = "Click me to find duplicate cards on a view where gold cards are shown once only."; btn.addEventListener("click", e => window.findDuplicates()) target = document.querySelector(".usercontrols.mb-3 + .mt-3"); target.style.marginBottom = "2rem"; target.appendChild(btn);