Add an item sheet for editing Traits

This commit is contained in:
Eldritch-Oliver 2025-10-10 21:50:01 -06:00
parent 4d0f29d7f0
commit 7de3f1ca87
6 changed files with 119 additions and 2 deletions

View file

@ -0,0 +1,53 @@
import { filePath } from "../../consts.mjs";
import { GenericAppMixin } from "../GenericApp.mjs";
const { HandlebarsApplicationMixin } = foundry.applications.api;
const { ItemSheetV2 } = foundry.applications.sheets;
export class TraitSheet extends GenericAppMixin(HandlebarsApplicationMixin(ItemSheetV2)) {
// #region Options
static DEFAULT_OPTIONS = {
classes: [
`ripcrypt--item`,
`TraitSheet`,
],
position: {
width: `auto`,
height: `auto`,
},
window: {
resizable: true,
},
form: {
submitOnChange: true,
closeOnSubmit: false,
},
};
static PARTS = {
content: {
template: filePath(`templates/Apps/TraitSheet/content.hbs`),
root: true,
},
};
// #endregion Options
// #region Data Prep
async _prepareContext() {
const TextEditor = foundry.applications.ux.TextEditor.implementation;
const ctx = {
meta: {
idp: this.id,
},
item: this.document,
enriched: {
system: {
description: await TextEditor.enrichHTML(this.document.system.description),
},
},
};
return ctx;
};
// #endregion Data Prep
};

View file

@ -38,6 +38,7 @@ import { registerMetaSettings } from "../settings/metaSettings.mjs";
import { registerSockets } from "../sockets/_index.mjs";
import { registerUserSettings } from "../settings/userSettings.mjs";
import { registerWorldSettings } from "../settings/worldSettings.mjs";
import { TraitSheet } from "../Apps/ItemSheets/TraitSheet.mjs";
const { Items, Actors } = foundry.documents.collections;
@ -120,8 +121,15 @@ Hooks.once(`init`, () => {
label: `RipCrypt.sheet-names.ArmourSheet`,
themes: ArmourSheet.themes,
});
Items.registerSheet(game.system.id, TraitSheet, {
makeDefault: true,
types: [`trait`],
label: `RipCrypt.sheet-names.TraitSheet`,
themes: TraitSheet.themes,
});
Items.unregisterSheet(game.system.id, AllItemSheetV1, {
types: [`armour`, `shield`],
types: [`armour`, `shield`, `trait`],
});
// #endregion
// #endregion

View file

@ -0,0 +1,21 @@
<div>
<input
type="text"
class="name"
aria-label="{{ rc-i18n "Name" }}"
name="name"
value="{{item.name}}"
{{disabled meta.limited}}
autocomplete="off"
>
<button
type="button"
data-action="openRichEditor"
data-path="system.description"
data-uuid="{{item.uuid}}"
data-collaborative="true"
>
Edit Description
</button>
<div class="value">{{{ enriched.system.description }}}</div>
</div>

View file

@ -0,0 +1,35 @@
.ripcrypt.TraitSheet {
--input-underline: none;
max-width: 300px;
> .window-content {
display: flex;
flex-direction: column;
gap: 8px;
padding: 4px;
color: var(--base-text);
background: var(--base-background);
}
input {
border-radius: 4px;
padding: 2px 4px;
}
.value {
background: var(--input-background);
color: var(--input-text);
padding: 4px;
> :first-child {
margin-top: 0;
}
> :last-child {
margin-bottom: 0;
}
&:empty {
display: none;
}
}
}

View file

@ -7,6 +7,7 @@
@import url("./SkillsCardV1/style.css");
@import url("./RichEditor/style.css");
@import url("./ArmourSheet/style.css");
@import url("./TraitSheet/style.css");
@import url("./popover.css");
@import url("./popovers/AmmoTracker/style.css");

View file

@ -2,7 +2,6 @@
Required parameters:
"name" : the name of the item
"system.quantity" : the quantity of the item
"meta.idp" : the ID Prefix for the application
--}}
<header class="item-header">
<div class="name-row">