NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Prepared Spells // @namespace http://tampermonkey.net/ // @version 0.1 // @description Display how many spell slots are prepared // @license MIT // @author Tari // @match https://app.roll20.net/editor/ // @grant none // ==/UserScript== let maxAttunement = 0; let currentAttunement = 0; let updateDisplay = () => { let display = document.getElementById("attunementDisplay"); if (display == null) { let parent = document.getElementsByClassName("sheet-spells")[1]; parent = parent.getElementsByClassName("sheet-body")[0]; if (parent == null) { return ; } let node = document.createElement("p"); let text = document.createTextNode(currentAttunement.toString()); node.appendChild(text); node.setAttribute("id", "attunementDisplay"); parent.prepend(node); } else { display.innerHTML = currentAttunement.toString(); } }; let updateCount = () => { let elements = document.getElementsByClassName("sheet-prep-box"); currentAttunement = 0; for (let element of elements) { if (element.checked == true) { currentAttunement += 1; } } }; let clickFunction = (event) => { let target = event.target; if (target.className == "sheet-prep-box") { updateCount(); } updateDisplay(); }; (function() { 'use strict'; document.body.addEventListener('click', clickFunction, true); })();