Fixes and enhancements, from issue list

This commit is contained in:
2026-03-27 22:28:47 +01:00
parent c22c3d713b
commit 2bf737a3ef
6 changed files with 126 additions and 105 deletions

View File

@@ -20,8 +20,12 @@ import { _rollPool, _diceHtml } from "../rolls.mjs"
* @param {HTMLElement} html
*/
export function injectFreeRollBar(_chatLog, html) {
// Normalise: renderChatLog may pass jQuery (AppV1) or HTMLElement (AppV2/v13)
const el = (html instanceof HTMLElement) ? html : (html[0] ?? html)
if (!el?.querySelector) return
// Avoid double-injection on re-renders
if (html.querySelector(".oh-free-roll-bar")) return
if (el.querySelector(".oh-free-roll-bar")) return
const bar = document.createElement("div")
bar.className = "oh-free-roll-bar"
@@ -49,20 +53,30 @@ export function injectFreeRollBar(_chatLog, html) {
</div>
`
bar.querySelector(".oh-frb-roll-btn").addEventListener("click", () => {
// Use event delegation on the bar container — direct child listeners can be
// swallowed by Foundry's own delegated click handlers in the sidebar.
bar.addEventListener("click", async (ev) => {
if (!ev.target.closest(".oh-frb-roll-btn")) return
ev.stopPropagation()
const pool = parseInt(bar.querySelector(".oh-frb-pool").value) || 2
const color = bar.querySelector(".oh-frb-color").value
const explode5 = bar.querySelector(".oh-frb-explode").checked
rollFree(pool, color, explode5)
try {
await rollFree(pool, color, explode5)
} catch (err) {
console.error("Oath Hammer | Free Roll error:", err)
ui.notifications?.error("Free Roll failed — see console")
}
})
// Insert before the chat form — use chatForm.parentElement for AppV2 compatibility
// (in v13 parts are nested inside the app element, not direct children)
const chatForm = html.querySelector(".chat-form")
if (chatForm) {
chatForm.parentElement.insertBefore(bar, chatForm)
// Insert before the chat form — try multiple selectors for v12/v13 compatibility
const anchor = el.querySelector(".chat-form")
?? el.querySelector(".chat-message-form")
?? el.querySelector("form")
if (anchor) {
anchor.parentElement.insertBefore(bar, anchor)
} else {
html.appendChild(bar)
el.appendChild(bar)
}
}