// ==UserScript== // @name 碧蓝航线舰队科技 // @version 1 // @namespace https://fiammanda.github.io // @description 碧蓝航线 WIKI 舰队科技功能增强(样式修改、全选选中、数据备份) // @author fiammanda // @grant none // @match https://wiki.biligame.com/blhx/%E8%88%B0%E9%98%9F%E7%A7%91%E6%8A%80 // @icon https://azurlane.netojuu.com/images/thumb/a/a6/Wisdom_Cube.png/35px-Wisdom_Cube.png // @downloadURL none // ==/UserScript== "use strict"; const bt = document.querySelector("#editButton"); const tb = document.querySelector("#CardSelectTr"); const ft = document.querySelector(".resourceLoader + .wikitable tbody"); bt.addEventListener("click", (e) => { if (bt.classList.contains("selected")) { tb.classList.remove("editable"); ft.classList.remove("visible"); } else { tb.classList.add("editable"); ft.classList.add("visible"); } }); tb.querySelectorAll("tbody a").forEach(a => { a.innerHTML = a.innerHTML.replace("(", "[").replace(")", "]"); a.target = "_blank"; }); document.querySelector("#CardSelectTabHeader1 th:nth-child(3)").textContent = "满级"; document.querySelector("#CardSelectTabHeader1 th:nth-child(5)").textContent = "获得"; document.querySelector("#CardSelectTabHeader1 th:nth-child(6)").textContent = "满级"; ft.querySelector("tr:last-child th").textContent = "功能"; ft.insertAdjacentHTML("beforeend", ` 脚本 全选「获得」 全清「获得」 全选「120」 全清「120」 数据备份 `); ft.querySelector("a[aria-label=\"select-all-get\"]").addEventListener("click", (e) => { if (confirm("是否全选当前舰船的「获得」状态?")) { tb.querySelectorAll("tbody tr:not([style=\"display: none;\"]) td:nth-last-child(2):not(.fleetTechSelected)").forEach(cell => { cell.click(); }); } }); ft.querySelector("a[aria-label=\"select-none-get\"]").addEventListener("click", (e) => { if (confirm("是否全清当前舰船的「获得」状态?")) { tb.querySelectorAll("tbody tr:not([style=\"display: none;\"]) td:nth-last-child(2).fleetTechSelected").forEach(cell => { cell.click(); }); } }); ft.querySelector("a[aria-label=\"select-all-120\"]").addEventListener("click", (e) => { if (confirm("是否全选当前舰船的「120」状态?")) { tb.querySelectorAll("tbody tr:not([style=\"display: none;\"]) td:nth-last-child(1):not(.fleetTechSelected)").forEach(cell => { cell.click(); }); } }); ft.querySelector("a[aria-label=\"select-none-120\"]").addEventListener("click", (e) => { if (confirm("是否全清当前舰船的「120」状态?")) { tb.querySelectorAll("tbody tr:not([style=\"display: none;\"]) td:nth-last-child(1).fleetTechSelected").forEach(cell => { cell.click(); }); } }); ft.querySelector("a[aria-label=\"data\"]").addEventListener("click", () => { ft.querySelector(".modal-content").setAttribute("aria-hidden", "false"); }); ft.querySelector("a[aria-label=\"data-close\"]").addEventListener("click", (e) => { ft.querySelector(".modal-content").setAttribute("aria-hidden", "true"); }); ft.querySelector("a[aria-label=\"data-import\"]").addEventListener("click", () => { if (ft.querySelector("textarea").value && confirm("是否覆盖当前数据?")) { localStorage["userjs-fleettech-data"] = ft.querySelector("textarea").value; } else { alert("没有找到导入内容?!"); } }); ft.querySelector("a[aria-label=\"data-export\"]").addEventListener("click", () => { if (localStorage["userjs-fleettech-data"] && confirm("是否复制科技数据?")) { navigator.clipboard.writeText(localStorage["userjs-fleettech-data"]); } else { alert("你又没啥需要导出的!"); } }); ft.querySelector("a[aria-label=\"data-download\"]").addEventListener("click", () => { if (localStorage["userjs-fleettech-data"]) { if (confirm("是否下载科技数据?") == true) { let link = document.createElement("a"); link.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(localStorage["userjs-fleettech-data"])); link.setAttribute("download", "碧蓝航线舰队科技." + new Date().toLocaleString("sv-SE").replace(/[-: ]/g, "") + ".txt"); link.style.display = "none"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } } else { alert("你又没啥需要导出的!"); } }); ft.querySelector("input").addEventListener("change", () => { const [file] = ft.querySelector("input").files; const reader = new FileReader(); reader.addEventListener("load", () => { localStorage["userjs-fleettech-data"] = reader.result; alert("数据导入成功,即将刷新。"); setTimeout(() => { location.replace("/blhx/舰队科技#舰队科技列表") }, 2500); }, false); if (file && confirm("是否覆盖当前数据?")) { reader.readAsText(file); } }); document.head.insertAdjacentHTML("beforeend", ``);