您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Support maths for DartCounter score entry.
// ==UserScript== // @name DartCounter Calculator // @namespace http://dartcounter.net/ // @author mrdarts180 // @version 3.0 // @license MIT // @description Support maths for DartCounter score entry. // @match http*://app.dartcounter.net/* // @icon https://dartcounter.net/favicon-32x32.png // @require https://unpkg.com/mathjs/lib/browser/math.js // ==/UserScript== (function() { var observer = new MutationObserver(function(mutations) { var score = document.getElementsByClassName("in-game-score-field")[0]; if (score && score.getAttribute('mutated') == null) { score.type = 'text'; score.disabled = false; score.setAttribute('autocomplete', 'off'); score.setAttribute('mutated', '1'); score.removeAttribute('maxlength'); score.removeAttribute('inputmode'); let inputHandler = (event) => { event.stopPropagation(); }; score.addEventListener('input', inputHandler, true); let keydownHandler = (event) => { if (event.keyCode == 13) { let evalScore = (str) => { try { return math.evaluate(str); } catch(ex) { return 0; } }; if (score.value && score.value.length > 0) { // Evaluate value score.value = evalScore(score.value); // Set value score.removeEventListener('input', inputHandler, true); score.dispatchEvent( new Event("input", { bubbles: true, cancelable: true }) ); score.addEventListener('input', inputHandler, true); event.stopPropagation(); // Resubmit value score.removeEventListener('keydown', keydownHandler, true); score.dispatchEvent( new KeyboardEvent('keydown', {'key': 'Enter', 'keyCode': 13}) ); score.addEventListener('keydown', keydownHandler, true); return false; } } // Remaping +/- keys else if (event.keyCode == 187 || event.keyCode == 189) { score.value += event.keyCode == 187 ? "+" : "*"; event.cancelBubble = true; event.preventDefault(); } event.stopPropagation(); }; score.addEventListener('keydown', keydownHandler, true); } }); observer.observe(document, {attributes: false, childList: true, characterData: false, subtree:true}); })();