您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows Prefill values to be set for amounts and players
当前为
// ==UserScript== // @name TORN: Prefill Item Send // @namespace http://torn.city.com.dot.com.com // @version 1.1.1 // @description Allows Prefill values to be set for amounts and players // @author IronHydeDragon[2428902] // @match https://www.torn.com/item.php* // @license MIT // ==/UserScript== //////// PREFILL VALUES //////// const prefillAmountVal = ['2', '5', '999999', '']; // 999999 is just some rediculous number that should be equivalent to 'max' const prefillPlayerVal = ['Kv0the [2153277]', '']; const prefillMessageVal = ['Edit script message prefills', '']; //////// INDEXES USED BY FUNCTIONS // DO NOT CHANGE let amountIndex = 0; let playerIndex = 0; let messageIndex = 0; //////// FUNCIONS //////// function prefillAmount(inputEl) { const maxAmount = inputEl.dataset.max; inputEl.value = +prefillAmountVal[amountIndex] > +maxAmount ? +maxAmount : +prefillAmountVal[amountIndex]; console.log('input', inputEl.value); // TEST inputEl.dispatchEvent(new Event('input', { bubbles: true })); } function prefillPlayer(inputEl) { inputEl.value = prefillPlayerVal[playerIndex]; inputEl.dispatchEvent(new Event('input', { bubbles: true })); } function prefillMessage(inputEl, message) { console.log('message', message); // TEST if (message === undefined) { inputEl.value = prefillMessageVal[messageIndex]; } if (message !== undefined) { inputEl.value = ''; } inputEl.dispatchEvent(new Event('input', { bubbles: true })); } function amountClickHandler(e) { const max = prefillAmountVal.length - 1; if (++amountIndex > max) amountIndex = 0; prefillAmount(e.target); e.target.focus(); e.target.select(); } function playerClickHandler(e) { const max = prefillPlayerVal.length - 1; if (++playerIndex > max) playerIndex = 0; prefillPlayer(e.target); e.target.focus(); e.target.select(); } function messageClickHandler(e) { const max = prefillMessageVal.length - 1; if (++messageIndex > max) messageIndex = 0; prefillMessage(e.target); e.target.focus(); e.target.select(); } function removeMessageClickHandler(e, inputEl) { console.log('removeMessage'); // TEST prefillMessage(inputEl, ''); } async function sendItemObserverCallback(mutationList, observer) { for (const mutation of mutationList) { if (mutation.target.classList.contains('cont-wrap') && mutation.type !== 'attributes') { if (mutation.addedNodes.length > 0 && mutation.addedNodes[0].classList.length > 0 && mutation.addedNodes[0].classList.contains('send-act')) { const sendActionEl = mutation.addedNodes[0]; const amountInputEl = sendActionEl.querySelector('input.amount[type="text"]'); const playerInputEl = sendActionEl.querySelector('input.user-id'); prefillAmount(amountInputEl); prefillPlayer(playerInputEl); amountInputEl.addEventListener('click', amountClickHandler); playerInputEl.addEventListener('click', playerClickHandler); } } if (mutation.target.classList.contains('msg-active')) { console.log(mutation); // TEST const messageContainerEl = mutation.target; const messageInput = messageContainerEl.querySelector('input.message'); const removeMessageBtn = messageContainerEl.querySelector('.action-remove'); prefillMessage(messageInput); messageInput.addEventListener('click', messageClickHandler); removeMessageBtn.addEventListener('click', (e, messageInput) => removeMessageClickHandler(e, messageInput)); } } } function createSenditemMutationObserver() { const observer = new MutationObserver(sendItemObserverCallback); observer.observe(document, { attributes: true, childList: true, subtree: true, }); } // document.addEventListener('input', (e) => console.log(e)); // TEST) (async () => { console.log('🎁 Prefill item send script is ON!'); // TEST createSenditemMutationObserver(); })();