dh-stream-overlay/scripts/settings-app.js

100 lines
3 KiB
JavaScript

const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
export class StreamOverlaySettings extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
id: "stream-overlay-settings",
tag: "form",
window: {
title: "DH_STREAM_OVERLAY.Settings.Title",
icon: "fas fa-video",
resizable: false,
contentClasses: ["standard-form"]
},
position: {
width: 400,
height: "auto"
},
form: {
handler: StreamOverlaySettings.#onSubmit,
closeOnSubmit: true
}
};
static PARTS = {
form: {
template: "modules/dh-stream-overlay/templates/settings-app.hbs"
}
};
async _prepareContext(_options) {
const actorUuid = game.settings.get("dh-stream-overlay", "partyActorUuid");
let actor = null;
if (actorUuid) {
actor = await fromUuid(actorUuid);
}
const dsnInstalled = game.modules.get("dice-so-nice")?.active;
const dsnEnabled = game.settings.get("dh-stream-overlay", "enableDSN");
return {
actorUuid,
actor,
dsnInstalled,
dsnEnabled
};
}
_onRender(context, options) {
super._onRender(context, options);
const html = this.element;
const dropZone = html.querySelector(".drop-zone");
if (dropZone) {
dropZone.addEventListener("dragover", this.#onDragOver.bind(this));
dropZone.addEventListener("dragleave", this.#onDragLeave.bind(this));
dropZone.addEventListener("drop", this.#onDrop.bind(this));
}
const clearBtn = html.querySelector(".clear-actor");
if (clearBtn) {
clearBtn.addEventListener("click", this.#onClear.bind(this));
}
}
#onDragOver(event) {
event.preventDefault();
event.currentTarget.classList.add("drag-over");
}
#onDragLeave(event) {
event.preventDefault();
event.currentTarget.classList.remove("drag-over");
}
async #onDrop(event) {
event.preventDefault();
event.currentTarget.classList.remove("drag-over");
const data = foundry.applications.ux.TextEditor.getDragEventData(event);
if (data.type !== "Actor") return;
const actor = await fromUuid(data.uuid);
if (actor) {
await game.settings.set("dh-stream-overlay", "partyActorUuid", data.uuid);
this.render();
}
}
async #onClear(event) {
event.preventDefault();
await game.settings.set("dh-stream-overlay", "partyActorUuid", "");
this.render();
}
static async #onSubmit(event, form, formData) {
// Handle DSN setting
if (formData.object.enableDSN !== undefined) {
await game.settings.set("dh-stream-overlay", "enableDSN", formData.object.enableDSN);
}
}
}