Files
fvtt-les-oublies/modules/applications/sheets/base-item-sheet.mjs
T
uberwald 552731bc3b
Release Creation / build (release) Successful in 3m58s
Divers petits fixs
2026-05-04 20:39:43 +02:00

133 lines
5.1 KiB
JavaScript

const { HandlebarsApplicationMixin } = foundry.applications.api
import { LesOubliesUtility } from "../../les-oublies-utility.js"
export default class LesOubliesItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {
static SHEET_MODES = { EDIT: 0, PLAY: 1 }
static DEFAULT_OPTIONS = {
classes: ["fvtt-les-oublies", "sheet", "item"],
position: {
width: 760,
height: 720,
},
window: {
resizable: true,
},
form: {
submitOnChange: true,
closeOnSubmit: false,
},
actions: {
toggleSheet: LesOubliesItemSheet.#onToggleSheet,
editImage: LesOubliesItemSheet.#onEditImage,
},
}
_sheetMode = this.constructor.SHEET_MODES.EDIT
get isEditMode() {
return this._sheetMode === this.constructor.SHEET_MODES.EDIT
}
get isPlayMode() {
return this._sheetMode === this.constructor.SHEET_MODES.PLAY
}
async _prepareContext() {
const config = CONFIG.LESOUBLIES
const enriched = await LesOubliesUtility.prepareEnrichedHtml("Item", this.document.type, this.document.system)
const skillLabels = Object.fromEntries(Object.entries(config.skills).map(([key, skill]) => [key, skill.label]))
const choiceSets = {
profileOptions: config.profiles.map((profile) => ({ value: profile.id, label: profile.label })),
skillOptions: LesOubliesUtility.createChoices(Object.keys(config.skills), skillLabels),
spellSkillOptions: LesOubliesUtility.createChoices(["magie", "onirologie", "chimerisme"], skillLabels),
weaponCategoryOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.weaponCategoryLabels), config.weaponCategoryLabels),
this.document.system.category,
),
weaponOriginOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.weaponOriginLabels), config.weaponOriginLabels),
this.document.system.origin,
),
armorStateOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.armorStateLabels), config.armorStateLabels),
this.document.system.state,
),
equipmentCategoryOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.equipmentCategoryLabels), config.equipmentCategoryLabels),
this.document.system.category,
),
spellTraditionOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.spellTraditionLabels), config.spellTraditionLabels),
this.document.system.tradition,
),
polarityOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.polarityLabels), config.polarityLabels),
this.document.system.polarity,
),
stackingOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.stackingLabels), config.stackingLabels),
this.document.system.stacking,
),
companyPowerScopeOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.companyPowerScopeLabels), config.companyPowerScopeLabels),
this.document.system.scope,
),
companyPowerModeOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createChoices(Object.keys(config.companyPowerModeLabels), config.companyPowerModeLabels),
this.document.system.effectMode,
),
raceSizeOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.createRangeChoices(1, 4, config.sizes),
this.document.system.size,
),
mainRaceOptions: LesOubliesUtility.ensureChoice(
LesOubliesUtility.sortByName(game.items.filter((item) => item.type === "race")).map((item) => ({
value: item.name,
label: item.name,
})),
this.document.system.mainRace,
),
}
return {
item: this.document,
system: this.document.system,
source: this.document.toObject(),
fields: this.document.schema.fields,
systemFields: this.document.system.schema.fields,
isEditable: this.isEditable,
isEditMode: this.isEditMode,
isPlayMode: this.isPlayMode,
isGM: game.user.isGM,
config,
choiceSets,
enriched,
enrichedDescription: foundry.utils.getProperty(enriched, "description") ?? "",
weaponDamagePreview: this.document.type === "arme"
? LesOubliesUtility.formatWeaponDamage(this.document.parent instanceof Actor ? this.document.parent : null, this.document)
: "",
}
}
static #onToggleSheet() {
const modes = this.constructor.SHEET_MODES
this._sheetMode = this.isEditMode ? modes.PLAY : modes.EDIT
this.render()
}
static async #onEditImage(event, target) {
const attr = target.dataset.edit
const current = foundry.utils.getProperty(this.document, attr)
const fp = new FilePicker({
current,
type: "image",
callback: (path) => this.document.update({ [attr]: path }),
top: this.position.top + 40,
left: this.position.left + 10,
})
return fp.browse()
}
}