Files
Foundry-VTT-Docker/resources/app/client/apps/placeables/tile-config.js
2025-01-04 00:34:03 +01:00

92 lines
2.9 KiB
JavaScript

/**
* The Application responsible for configuring a single Tile document within a parent Scene.
* @param {Tile} tile The Tile object being configured
* @param {DocumentSheetOptions} [options] Additional application rendering options
*/
class TileConfig extends DocumentSheet {
/** @inheritdoc */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
id: "tile-config",
title: game.i18n.localize("TILE.ConfigTitle"),
template: "templates/scene/tile-config.html",
width: 420,
height: "auto",
submitOnChange: true,
tabs: [{navSelector: ".tabs", contentSelector: "form", initial: "basic"}]
});
}
/* -------------------------------------------- */
/** @inheritdoc */
async close(options={}) {
// If the config was closed without saving, reset the initial display of the Tile
if ( !options.force ) {
this.document.reset();
if ( this.document.object?.destroyed === false ) {
this.document.object.refresh();
}
}
// Remove the preview tile and close
const layer = this.object.layer;
layer.clearPreviewContainer();
return super.close(options);
}
/* -------------------------------------------- */
/** @inheritdoc */
getData(options={}) {
const data = super.getData(options);
data.submitText = game.i18n.localize(this.object.id ? "TILE.SubmitUpdate" : "TILE.SubmitCreate");
data.occlusionModes = Object.entries(CONST.OCCLUSION_MODES).reduce((obj, e) => {
obj[e[1]] = game.i18n.localize(`TILE.OcclusionMode${e[0].titleCase()}`);
return obj;
}, {});
data.gridUnits = this.document.parent.grid.units || game.i18n.localize("GridUnits");
return data;
}
/* -------------------------------------------- */
/** @inheritdoc */
async _onChangeInput(event) {
// Handle form element updates
const el = event.target;
if ( (el.type === "color") && el.dataset.edit ) this._onChangeColorPicker(event);
else if ( el.type === "range" ) this._onChangeRange(event);
// Update preview object
const fdo = new FormDataExtended(this.form).object;
// To allow a preview without glitches
fdo.width = Math.abs(fdo.width);
fdo.height = Math.abs(fdo.height);
// Handle tint exception
let tint = fdo["texture.tint"];
if ( !foundry.data.validators.isColorString(tint) ) fdo["texture.tint"] = "#ffffff";
fdo["texture.tint"] = Color.from(fdo["texture.tint"]);
// Update preview object
foundry.utils.mergeObject(this.document, foundry.utils.expandObject(fdo));
this.document.object.refresh();
}
/* -------------------------------------------- */
/** @inheritdoc */
async _updateObject(event, formData) {
if ( this.document.id ) return this.document.update(formData);
else return this.document.constructor.create(formData, {
parent: this.document.parent,
pack: this.document.pack
});
}
}