123 lines
3.8 KiB
JavaScript
123 lines
3.8 KiB
JavaScript
/**
|
||
* Donjon & Cie - Systeme FoundryVTT
|
||
*
|
||
* Donjon & Cie est un jeu de role edite par John Doe.
|
||
* Ce systeme FoundryVTT est une implementation independante et n'est pas
|
||
* affilie a John Doe.
|
||
*
|
||
* @author LeRatierBretonnien
|
||
* @copyright 2025–2026 LeRatierBretonnien
|
||
* @license CC BY-NC-SA 4.0 – https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||
*/
|
||
|
||
import { DonjonEtCieUtility } from "../../donjon-et-cie-utility.mjs";
|
||
|
||
const { HandlebarsApplicationMixin } = foundry.applications.api;
|
||
|
||
export default class DonjonEtCieItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {
|
||
static DEFAULT_OPTIONS = {
|
||
classes: ["fvtt-donjon-et-cie", "sheet", "item"],
|
||
position: { width: 640, height: 700 },
|
||
form: {
|
||
submitOnChange: true,
|
||
closeOnSubmit: false
|
||
},
|
||
window: {
|
||
resizable: true
|
||
},
|
||
actions: {
|
||
editImage: DonjonEtCieItemSheet.#onEditImage,
|
||
postItem: DonjonEtCieItemSheet.#onPostItem,
|
||
rollItem: DonjonEtCieItemSheet.#onRollItem,
|
||
rollDamageItem: DonjonEtCieItemSheet.#onRollDamageItem
|
||
}
|
||
};
|
||
|
||
static PARTS = {
|
||
main: { template: "systems/fvtt-donjon-et-cie/templates/items/item-sheet.hbs" }
|
||
};
|
||
|
||
async _prepareContext() {
|
||
const item = this.document;
|
||
return {
|
||
item,
|
||
system: item.system,
|
||
source: item.toObject(),
|
||
config: game.system.donjonEtCie.config,
|
||
fields: item.schema.fields,
|
||
systemFields: item.system.schema.fields,
|
||
isWeapon: item.type === "arme",
|
||
isArmor: item.type === "armure",
|
||
isConsumable: item.type === "consommable",
|
||
isSpell: item.type === "sortilege",
|
||
canRollDamage: Boolean(item.system.degats),
|
||
isEquipment: item.type === "equipement",
|
||
isCapacity: item.type === "capacite",
|
||
isLanguage: item.type === "langue",
|
||
isTrait: item.type === "trait",
|
||
armorProtectionDisplay: Number(item.system.resultatProtection ?? 0) > 0 ? item.system.resultatProtection : "—",
|
||
weaponCharacteristicLabel: item.type === "arme" ? DonjonEtCieUtility.getWeaponCharacteristicLabel(item.system.categorie) : null,
|
||
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(item.system.description ?? "", { async: true }),
|
||
enrichedNotes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(item.system.notes ?? "", { async: true })
|
||
};
|
||
}
|
||
|
||
_onRender(context, options) {
|
||
super._onRender(context, options);
|
||
this.#fixWindowShell();
|
||
}
|
||
|
||
#fixWindowShell() {
|
||
const content = this.element?.closest(".window-content") ?? this.element?.parentElement;
|
||
const app = content?.closest(".application") ?? this.element?.closest(".application");
|
||
const header = app?.querySelector(".window-header");
|
||
|
||
if (app) {
|
||
app.style.display = "flex";
|
||
app.style.flexDirection = "column";
|
||
app.style.paddingTop = "0";
|
||
app.style.overflow = "hidden";
|
||
}
|
||
|
||
if (header) {
|
||
header.style.width = "100%";
|
||
header.style.flex = "0 0 auto";
|
||
header.style.position = "relative";
|
||
header.style.zIndex = "3";
|
||
}
|
||
|
||
if (content) {
|
||
content.style.width = "100%";
|
||
content.style.flex = "1 1 auto";
|
||
content.style.minHeight = "0";
|
||
content.style.overflowY = "auto";
|
||
content.style.overflowX = "hidden";
|
||
}
|
||
}
|
||
|
||
static async #onEditImage(event) {
|
||
event.preventDefault();
|
||
const picker = new FilePicker({
|
||
type: "image",
|
||
current: this.document.img,
|
||
callback: (path) => this.document.update({ img: path })
|
||
});
|
||
return picker.browse();
|
||
}
|
||
|
||
static async #onPostItem(event) {
|
||
event.preventDefault();
|
||
return this.document.postToChat();
|
||
}
|
||
|
||
static async #onRollItem(event) {
|
||
event.preventDefault();
|
||
return this.document.roll();
|
||
}
|
||
|
||
static async #onRollDamageItem(event) {
|
||
event.preventDefault();
|
||
return this.document.rollDamage();
|
||
}
|
||
}
|