您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
neodb 收藏单 筛选: 全选、已标记、未标记,排序: 年份、人数、评分, 升序、降序, 便于寻找出收藏单中未标记的条目
// ==UserScript== // @name neodb 收藏单 筛选、排序 // @namespace https://github.com/LesslsMore/neodb-collection // @version 0.0.1 // @author lesslsmore // @description neodb 收藏单 筛选: 全选、已标记、未标记,排序: 年份、人数、评分, 升序、降序, 便于寻找出收藏单中未标记的条目 // @license MIT // @match https://neodb.social/collection/* // ==/UserScript== (function () { 'use strict'; console.log("hello world"); const grid_path = ".entity-list"; const list_path = ".item-list"; const item_path = ".item-card"; let grid = document.querySelector(grid_path); console.log(grid); let observer = new MutationObserver(function(mutationsList, observer2) { console.log("节点已加载"); observer2.disconnect(); let list = document.querySelector(list_path); if (list) { let listItems = list.querySelectorAll(item_path); var selectAllCheckbox = document.createElement("input"); selectAllCheckbox.type = "checkbox"; selectAllCheckbox.addEventListener("change", function() { listItems.forEach(function(item, index) { var checkbox = item.querySelector('input[type="checkbox"]'); checkbox.checked = selectAllCheckbox.checked; if (checkbox.checked) { console.log("Checkbox " + (index + 1) + " is checked."); } }); }); list.parentNode.insertBefore(selectAllCheckbox, list); listItems.forEach(function(item, index) { var checkbox = document.createElement("input"); checkbox.type = "checkbox"; item.insertBefore(checkbox, item.firstChild); checkbox.addEventListener("change", function() { var allChecked = true; listItems.forEach(function(checkbox2) { if (!checkbox2.checked) { allChecked = false; } }); selectAllCheckbox.checked = allChecked; console.log("Checkbox " + (index + 1) + " is " + (checkbox.checked ? "checked" : "unchecked") + "."); }); }); } add_button(list); add_button_sort(list, "year"); add_button_sort(list, "vote"); add_button_sort(list, "rate"); }); observer.observe(grid, { childList: true }); function get_item_info(item) { let activated = item.querySelector("span > span > a").classList.contains("activated"); let year = item.querySelector("div > div:nth-child(2) > hgroup > h5 > small").textContent.split("\n")[1].trim().slice(1, -1); let vote = item.querySelector("div > div:nth-child(2) > div > div.brief > div > span.solo-hidden > small").textContent.slice(1, -4); let rate = item.querySelector("div > div:nth-child(2) > div > div.brief > div > span.solo-hidden").textContent.split(" ")[0]; return { activated, year: parseInt(year), vote: parseInt(vote), rate: parseFloat(rate) }; } function add_button(list) { let div = document.createElement("div"); let label = document.createElement("label"); let btn = document.createElement("button"); btn.innerHTML = "全部"; let btn_act = document.createElement("button"); btn_act.innerHTML = "标记"; let btn_un = document.createElement("button"); btn_un.innerHTML = "未标记"; btn.onclick = function() { let i = 0; list.querySelectorAll(item_path).forEach( (item) => { item.style.display = "block"; i++; } ); label.innerHTML = i; }; btn_un.onclick = function() { let i = 0; list.querySelectorAll(item_path).forEach( (item) => { let { activated } = get_item_info(item); if (activated) { item.style.display = "none"; } else { item.style.display = "block"; i++; } } ); label.innerHTML = i; }; btn_act.onclick = function() { let i = 0; list.querySelectorAll(item_path).forEach( (item) => { let { activated } = get_item_info(item); if (activated) { item.style.display = "block"; i++; } else { item.style.display = "none"; } } ); label.innerHTML = i; }; div.append(label, btn, btn_act, btn_un); list.parentNode.insertBefore(div, list); } function add_button_sort(list, key) { let btn_sort = document.createElement("label"); let btn_sort_asc = document.createElement("button"); let btn_sort_desc = document.createElement("button"); btn_sort.innerHTML = key; btn_sort_asc.innerHTML = "▲∆"; btn_sort_desc.innerHTML = "▼∇"; btn_sort_asc.onclick = function() { let listItems = list.querySelectorAll(item_path); reorderItems(list, listItems, key, 1); }; btn_sort_desc.onclick = function() { let listItems = list.querySelectorAll(item_path); reorderItems(list, listItems, key, -1); }; btn_sort.append(btn_sort_asc, btn_sort_desc); list.parentNode.insertBefore(btn_sort, list); } function reorderItems(container, listItems, key, type) { var items = Array.from(listItems); items.sort(function(a, b) { let orderA = get_item_info(a); var orderB = get_item_info(b); return (orderA[key] - orderB[key]) * type; }); container.innerHTML = ""; items.forEach(function(item) { container.appendChild(item); }); } })();