116 lines
3.0 KiB
JavaScript
116 lines
3.0 KiB
JavaScript
import { YggdrasillUtility } from "./yggdrasill-utility.js";
|
|
import { YGGDRASILL_CONFIG } from "./yggdrasill-config.js";
|
|
|
|
const { HandlebarsApplicationMixin } = foundry.applications.api;
|
|
|
|
/**
|
|
* Extend the basic ItemSheet with some very simple modifications
|
|
* @extends {ItemSheetV2}
|
|
*/
|
|
export class YggdrasillItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {
|
|
constructor(options = {}) {
|
|
super(options);
|
|
this.#dragDrop = this.#createDragDropHandlers();
|
|
}
|
|
|
|
#dragDrop;
|
|
|
|
/** @override */
|
|
static DEFAULT_OPTIONS = {
|
|
classes: ["fvtt-yggdrasill", "item"],
|
|
position: {
|
|
width: 550,
|
|
height: 550,
|
|
},
|
|
form: {
|
|
submitOnChange: true,
|
|
},
|
|
window: {
|
|
resizable: true,
|
|
},
|
|
actions: {
|
|
editImage: YggdrasillItemSheet.#onEditImage,
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Tab groups state
|
|
* @type {object}
|
|
*/
|
|
tabGroups = { primary: "description" };
|
|
|
|
/** @override */
|
|
static PARTS = {
|
|
sheet: {
|
|
template: "systems/fvtt-yggdrasill/templates/item-{type}-sheet.hbs"
|
|
}
|
|
};
|
|
|
|
/** @override */
|
|
async _prepareContext() {
|
|
// Ensure config is always available with fallback to direct import
|
|
const config = game.system?.config || game.system?.yggdrasill?.config || YGGDRASILL_CONFIG || {};
|
|
|
|
// Create options for niveau 0-5
|
|
const optionsNiveaux4 = {};
|
|
for (let i = 0; i <= 5; i++) {
|
|
optionsNiveaux4[`${i}`] = `${i}`;
|
|
}
|
|
|
|
const optionsBase = YggdrasillUtility.createDirectOptionList(0, 20) || {};
|
|
|
|
const context = {
|
|
fields: this.document.schema.fields,
|
|
systemFields: this.document.system.schema.fields,
|
|
item: this.document,
|
|
system: this.document.system,
|
|
data: this.document.system,
|
|
source: this.document.toObject(),
|
|
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description || "", { async: true }),
|
|
enrichedEffet: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.effet || "", { async: true }),
|
|
isEditMode: true,
|
|
isEditable: this.isEditable,
|
|
editable: this.isEditable,
|
|
isGM: game.user.isGM,
|
|
config: config,
|
|
optionsBase: optionsBase,
|
|
optionsNiveaux4: optionsNiveaux4,
|
|
};
|
|
return context;
|
|
}
|
|
return context;
|
|
}
|
|
|
|
/** @override */
|
|
_onRender(context, options) {
|
|
super._onRender(context, options);
|
|
this.#dragDrop.forEach((d) => d.bind(this.element));
|
|
}
|
|
|
|
// #region Drag-and-Drop Workflow
|
|
/**
|
|
* Create drag-and-drop workflow handlers for this Application
|
|
*/
|
|
#createDragDropHandlers() {
|
|
return [];
|
|
}
|
|
|
|
// #region Actions
|
|
|
|
/**
|
|
* Handle editing the item image
|
|
* @param {Event} event - The triggering event
|
|
*/
|
|
static async #onEditImage(event) {
|
|
event.preventDefault();
|
|
const filePicker = new FilePicker({
|
|
type: "image",
|
|
current: this.document.img,
|
|
callback: (path) => {
|
|
this.document.update({ img: path });
|
|
},
|
|
});
|
|
filePicker.browse();
|
|
}
|
|
}
|