Initial
This commit is contained in:
91
resources/app/client/apps/placeables/tile-config.js
Normal file
91
resources/app/client/apps/placeables/tile-config.js
Normal file
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
* 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
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user