您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds option to add emojis automatically
// ==UserScript== // @name IB Lineage Emoji Generator // @namespace http://tampermonkey.net/ // @version 1.3 // @license MIT // @description Adds option to add emojis automatically // @icon https://i.imgur.com/WlkWOkU.png // @author @activetutorial on discord // @match https://infinibrowser.wiki/tools/lineage-maker // @run-at document-end // @grant none // ==/UserScript== (function() { 'use strict'; (window.AT ||= {}).lineageemojis = { mappings: null, buttons: { // Button settings setEmojisButton: { id: "set-emojis", className: "btn", textContent: "Set Emojis" }, resetEmojisButton: { id: "reset-emojis", className: "btn", textContent: "Reset Emojis" } }, createButtons: function() { // Create all buttons this.setEmojisButton = document.createElement("button"); Object.assign(this.setEmojisButton, this.buttons.setEmojisButton); this.resetEmojisButton = document.createElement("button"); Object.assign(this.resetEmojisButton, this.buttons.resetEmojisButton); const btnElement = document.querySelectorAll(".btn")[1]; btnElement.parentElement.appendChild(this.setEmojisButton); btnElement.parentElement.appendChild(document.createTextNode(" ")); btnElement.parentElement.appendChild(this.resetEmojisButton); }, setEmojis: async function() { [...document.getElementById('item_list').children].forEach(async i => { // Each item if (this.mappings.get(i.lastChild.textContent) == "⬜") { // Only when it doesnt exist const response = await fetch("https://infinibrowser.wiki/api/item?id=" + encodeURIComponent(i.lastChild.textContent)); const data = await response.json(); i.firstChild.value = data.emoji || "⬜"; // Set emoji i.firstChild.dispatchEvent(new Event('blur')); // Manual event because .blur() doesnt work } }); }, resetEmojis: function() { [...document.getElementById('item_list').children].forEach(i => { // Each item i.firstChild.value = ""; // Reset emoji i.firstChild.dispatchEvent(new Event('blur')); }); }, start: function () { if (document.querySelector('.btn')) { // Wait for IB to load this.createButtons(); // Button event listeners this.setEmojisButton.addEventListener("click", this.setEmojis.bind(this)); this.resetEmojisButton.addEventListener("click", this.resetEmojis.bind(this)); // Patch Map.prototype.get to access internal emoji mapping const originalGet = Map.prototype.get; Map.prototype.get = function(key) { if (originalGet.call(this, "Water") == "💧") { // Make sure that it only applies to IBs mapping window.AT.lineageemojis.mappings = this; } return originalGet.call(this, key); }; // Patch String.prototype.split to split off asciidoc formatting const originalSplit = String.prototype.split; String.prototype.split = function (...args) { const modifiedString = originalSplit.call(this, " //")[0]; // Split away the thing return originalSplit.call(modifiedString, ...args); }; } else { setTimeout(this.start.bind(this), 200); } } }; window.AT.lineageemojis.start(); })();