100 lines
3 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
}
|