You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wanderhome-foundry-system/module/sheets/item-sheet.mjs

94 lines
2.6 KiB
JavaScript

import {
onManageActiveEffect,
prepareActiveEffectCategories,
} from '../helpers/effects.mjs';
/**
* Extend the basic ItemSheet with some very simple modifications
* @extends {ItemSheet}
*/
export class WanderhomeItemSheet extends ItemSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ['wanderhome', 'sheet', 'item'],
width: 520,
height: 480,
tabs: [
{
navSelector: '.sheet-tabs',
contentSelector: '.sheet-body',
initial: 'description',
},
],
});
}
/** @override */
get template() {
const path = 'systems/wanderhome/templates/item';
// Return a single sheet for all item types.
// return `${path}/item-sheet.hbs`;
// Alternatively, you could use the following return statement to do a
// unique item sheet by type, like `weapon-sheet.hbs`.
return `${path}/item-${this.item.type}-sheet.hbs`;
}
/* -------------------------------------------- */
/** @override */
async getData() {
// Retrieve base data structure.
const context = super.getData();
// Use a safe clone of the item data for further operations.
const itemData = this.document.toPlainObject();
// Enrich description info for display
// Enrichment turns text like `[[/r 1d20]]` into buttons
context.enrichedDescription = await TextEditor.enrichHTML(
this.item.system.description,
{
// Whether to show secret blocks in the finished html
secrets: this.document.isOwner,
// Necessary in v11, can be removed in v12
async: true,
// Data to fill in for inline rolls
rollData: this.item.getRollData(),
// Relative UUID resolution
relativeTo: this.item,
}
);
// Add the item's data to context.data for easier access, as well as flags.
context.system = itemData.system;
context.flags = itemData.flags;
// Adding a pointer to CONFIG.WANDERHOME
context.config = CONFIG.WANDERHOME;
// Prepare active effects for easier access
context.effects = prepareActiveEffectCategories(this.item.effects);
return context;
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.isEditable) return;
// Roll handlers, click handlers, etc. would go here.
// Active Effect management
html.on('click', '.effect-control', (ev) =>
onManageActiveEffect(ev, this.item)
);
}
}