From 6fcfce227ae60c6991113109e49b750ceb5068a5 Mon Sep 17 00:00:00 2001
From: Murilo Brito <91566541+moliloo@users.noreply.github.com>
Date: Tue, 27 May 2025 08:46:12 -0300
Subject: [PATCH 3/3] enhance consumable and miscellaneous sheets (#68)
---
module/applications/_module.mjs | 6 +-
module/applications/sheets/consumable.mjs | 56 -------------
.../applications/sheets/daggerheart-sheet.mjs | 9 ++
.../applications/sheets/items/consumable.mjs | 57 +++++++++++++
.../sheets/{ => items}/feature.mjs | 82 +++++++++----------
.../sheets/{ => items}/miscellaneous.mjs | 35 ++++++--
styles/daggerheart.css | 7 +-
styles/less/global/elements.less | 7 +-
templates/sheets/consumable.hbs | 36 --------
templates/sheets/items/consumable/header.hbs | 10 +++
.../sheets/items/consumable/settings.hbs | 14 ++++
.../sheets/items/miscellaneous/header.hbs | 10 +++
.../sheets/items/miscellaneous/settings.hbs | 11 +++
templates/sheets/miscellaneous.hbs | 29 -------
14 files changed, 190 insertions(+), 179 deletions(-)
delete mode 100644 module/applications/sheets/consumable.mjs
create mode 100644 module/applications/sheets/items/consumable.mjs
rename module/applications/sheets/{ => items}/feature.mjs (72%)
mode change 100755 => 100644
rename module/applications/sheets/{ => items}/miscellaneous.mjs (52%)
delete mode 100644 templates/sheets/consumable.hbs
create mode 100644 templates/sheets/items/consumable/header.hbs
create mode 100644 templates/sheets/items/consumable/settings.hbs
create mode 100644 templates/sheets/items/miscellaneous/header.hbs
create mode 100644 templates/sheets/items/miscellaneous/settings.hbs
delete mode 100644 templates/sheets/miscellaneous.hbs
diff --git a/module/applications/_module.mjs b/module/applications/_module.mjs
index 91aa6ba5..1e280d81 100644
--- a/module/applications/_module.mjs
+++ b/module/applications/_module.mjs
@@ -2,12 +2,12 @@ export { default as DhpPCSheet } from './sheets/pc.mjs';
export { default as DhpAdversarySheet } from './sheets/adversary.mjs';
export { default as DhpClassSheet } from './sheets/class.mjs';
export { default as DhpSubclass } from './sheets/subclass.mjs';
-export { default as DhpFeatureSheet } from './sheets/feature.mjs';
+export { default as DhpFeatureSheet } from './sheets/items/feature.mjs';
export { default as DhpDomainCardSheet } from './sheets/domainCard.mjs';
export { default as DhpAncestry } from './sheets/ancestry.mjs';
export { default as DhpCommunity } from './sheets/community.mjs';
-export { default as DhpMiscellaneous } from './sheets/miscellaneous.mjs';
-export { default as DhpConsumable } from './sheets/consumable.mjs';
+export { default as DhpMiscellaneous } from './sheets/items/miscellaneous.mjs';
+export { default as DhpConsumable } from './sheets/items/consumable.mjs';
export { default as DhpWeapon } from './sheets/weapon.mjs';
export { default as DhpArmor } from './sheets/armor.mjs';
export { default as DhpChatMessage } from './chatMessage.mjs';
diff --git a/module/applications/sheets/consumable.mjs b/module/applications/sheets/consumable.mjs
deleted file mode 100644
index d9e25086..00000000
--- a/module/applications/sheets/consumable.mjs
+++ /dev/null
@@ -1,56 +0,0 @@
-// import DhpApplicationMixin from '../daggerheart-sheet.mjs';
-
-// export default class ConsumableSheet extends DhpApplicationMixin(ItemSheet) {
-// static documentType = "consumable";
-
-// /** @override */
-// static get defaultOptions() {
-// return foundry.utils.mergeObject(super.defaultOptions, {
-// classes: ["daggerheart", "sheet", "consumable"],
-// width: 480,
-// height: 'auto',
-// });
-// }
-
-// /** @override */
-// getData() {
-// const context = super.getData();
-
-// return context;
-// }
-// }
-
-import DaggerheartSheet from './daggerheart-sheet.mjs';
-
-const { ItemSheetV2 } = foundry.applications.sheets;
-export default class ConsumableSheet extends DaggerheartSheet(ItemSheetV2) {
- static DEFAULT_OPTIONS = {
- tag: 'form',
- classes: ['daggerheart', 'sheet', 'consumable'],
- position: { width: 480 },
- form: {
- handler: this.updateForm,
- submitOnChange: true,
- closeOnSubmit: false
- }
- };
-
- static PARTS = {
- form: {
- id: 'feature',
- template: 'systems/daggerheart/templates/sheets/consumable.hbs'
- }
- };
-
- async _prepareContext(_options) {
- const context = await super._prepareContext(_options);
- context.document = this.document;
-
- return context;
- }
-
- static async updateForm(event, _, formData) {
- await this.document.update(formData.object);
- this.render();
- }
-}
diff --git a/module/applications/sheets/daggerheart-sheet.mjs b/module/applications/sheets/daggerheart-sheet.mjs
index abf48793..635d2434 100644
--- a/module/applications/sheets/daggerheart-sheet.mjs
+++ b/module/applications/sheets/daggerheart-sheet.mjs
@@ -69,5 +69,14 @@ export default function DhpApplicationMixin(Base) {
}
_onDrop(event) {}
+
+ _getTabs(tabs) {
+ for (const v of Object.values(tabs)) {
+ v.active = this.tabGroups[v.group] ? this.tabGroups[v.group] === v.id : v.active;
+ v.cssClass = v.active ? 'active' : '';
+ }
+
+ return tabs;
+ }
};
}
diff --git a/module/applications/sheets/items/consumable.mjs b/module/applications/sheets/items/consumable.mjs
new file mode 100644
index 00000000..eb0a3d6b
--- /dev/null
+++ b/module/applications/sheets/items/consumable.mjs
@@ -0,0 +1,57 @@
+import DaggerheartSheet from '../daggerheart-sheet.mjs';
+
+const { ItemSheetV2 } = foundry.applications.sheets;
+export default class ConsumableSheet extends DaggerheartSheet(ItemSheetV2) {
+ static DEFAULT_OPTIONS = {
+ tag: 'form',
+ classes: ['daggerheart', 'sheet', 'dh-style', 'consumable'],
+ position: { width: 550 },
+ form: {
+ handler: this.updateForm,
+ submitOnChange: true,
+ closeOnSubmit: false
+ }
+ };
+
+ static PARTS = {
+ header: { template: 'systems/daggerheart/templates/sheets/items/consumable/header.hbs' },
+ tabs: { template: 'systems/daggerheart/templates/sheets/global/tabs/tab-navigation.hbs' },
+ description: { template: 'systems/daggerheart/templates/sheets/global/tabs/tab-description.hbs' },
+ settings: {
+ template: 'systems/daggerheart/templates/sheets/items/consumable/settings.hbs',
+ scrollable: ['.settings']
+ }
+ };
+
+ static TABS = {
+ description: {
+ active: true,
+ cssClass: '',
+ group: 'primary',
+ id: 'description',
+ icon: null,
+ label: 'DAGGERHEART.Sheets.Feature.Tabs.Description'
+ },
+ settings: {
+ active: false,
+ cssClass: '',
+ group: 'primary',
+ id: 'settings',
+ icon: null,
+ label: 'DAGGERHEART.Sheets.Feature.Tabs.Settings'
+ }
+ };
+
+ async _prepareContext(_options) {
+ const context = await super._prepareContext(_options);
+ context.document = this.document;
+ context.tabs = super._getTabs(this.constructor.TABS);
+
+ return context;
+ }
+
+ static async updateForm(event, _, formData) {
+ await this.document.update(formData.object);
+ this.render();
+ }
+}
diff --git a/module/applications/sheets/feature.mjs b/module/applications/sheets/items/feature.mjs
old mode 100755
new mode 100644
similarity index 72%
rename from module/applications/sheets/feature.mjs
rename to module/applications/sheets/items/feature.mjs
index 54bfa68e..553b686d
--- a/module/applications/sheets/feature.mjs
+++ b/module/applications/sheets/items/feature.mjs
@@ -1,6 +1,6 @@
-import DaggerheartAction from '../../data/action.mjs';
-import DaggerheartActionConfig from '../config/Action.mjs';
-import DaggerheartSheet from './daggerheart-sheet.mjs';
+import DaggerheartAction from '../../../data/action.mjs';
+import DaggerheartActionConfig from '../../config/Action.mjs';
+import DaggerheartSheet from '../daggerheart-sheet.mjs';
const { ItemSheetV2 } = foundry.applications.sheets;
export default class FeatureSheet extends DaggerheartSheet(ItemSheetV2) {
@@ -48,48 +48,40 @@ export default class FeatureSheet extends DaggerheartSheet(ItemSheetV2) {
}
};
- _getTabs() {
- const tabs = {
- description: {
- active: true,
- cssClass: '',
- group: 'primary',
- id: 'description',
- icon: null,
- label: 'DAGGERHEART.Sheets.Feature.Tabs.Description'
- },
- actions: {
- active: false,
- cssClass: '',
- group: 'primary',
- id: 'actions',
- icon: null,
- label: 'DAGGERHEART.Sheets.Feature.Tabs.Actions'
- },
- settings: {
- active: false,
- cssClass: '',
- group: 'primary',
- id: 'settings',
- icon: null,
- label: 'DAGGERHEART.Sheets.Feature.Tabs.Settings'
- },
- effects: {
- active: false,
- cssClass: '',
- group: 'primary',
- id: 'effects',
- icon: null,
- label: 'DAGGERHEART.Sheets.Feature.Tabs.Effects'
- }
- };
- for (const v of Object.values(tabs)) {
- v.active = this.tabGroups[v.group] ? this.tabGroups[v.group] === v.id : v.active;
- v.cssClass = v.active ? 'active' : '';
+ static TABS = {
+ description: {
+ active: true,
+ cssClass: '',
+ group: 'primary',
+ id: 'description',
+ icon: null,
+ label: 'DAGGERHEART.Sheets.Feature.Tabs.Description'
+ },
+ actions: {
+ active: false,
+ cssClass: '',
+ group: 'primary',
+ id: 'actions',
+ icon: null,
+ label: 'DAGGERHEART.Sheets.Feature.Tabs.Actions'
+ },
+ settings: {
+ active: false,
+ cssClass: '',
+ group: 'primary',
+ id: 'settings',
+ icon: null,
+ label: 'DAGGERHEART.Sheets.Feature.Tabs.Settings'
+ },
+ effects: {
+ active: false,
+ cssClass: '',
+ group: 'primary',
+ id: 'effects',
+ icon: null,
+ label: 'DAGGERHEART.Sheets.Feature.Tabs.Effects'
}
-
- return tabs;
- }
+ };
_attachPartListeners(partId, htmlElement, options) {
super._attachPartListeners(partId, htmlElement, options);
@@ -99,7 +91,7 @@ export default class FeatureSheet extends DaggerheartSheet(ItemSheetV2) {
async _prepareContext(_options) {
const context = await super._prepareContext(_options);
context.document = this.document;
- context.tabs = this._getTabs();
+ context.tabs = super._getTabs(this.constructor.TABS);
context.generalConfig = SYSTEM.GENERAL;
context.itemConfig = SYSTEM.ITEM;
context.properties = SYSTEM.ACTOR.featureProperties;
diff --git a/module/applications/sheets/miscellaneous.mjs b/module/applications/sheets/items/miscellaneous.mjs
similarity index 52%
rename from module/applications/sheets/miscellaneous.mjs
rename to module/applications/sheets/items/miscellaneous.mjs
index 6d4d2646..cf4ba2c0 100644
--- a/module/applications/sheets/miscellaneous.mjs
+++ b/module/applications/sheets/items/miscellaneous.mjs
@@ -20,14 +20,14 @@
// }
// }
-import DaggerheartSheet from './daggerheart-sheet.mjs';
+import DaggerheartSheet from '../daggerheart-sheet.mjs';
const { ItemSheetV2 } = foundry.applications.sheets;
export default class MiscellaneousSheet extends DaggerheartSheet(ItemSheetV2) {
static DEFAULT_OPTIONS = {
tag: 'form',
- classes: ['daggerheart', 'sheet', 'miscellaneous'],
- position: { width: 400 },
+ classes: ['daggerheart', 'sheet', 'dh-style', 'miscellaneous'],
+ position: { width: 550 },
form: {
handler: this.updateForm,
submitOnChange: true,
@@ -36,15 +36,38 @@ export default class MiscellaneousSheet extends DaggerheartSheet(ItemSheetV2) {
};
static PARTS = {
- form: {
- id: 'feature',
- template: 'systems/daggerheart/templates/sheets/miscellaneous.hbs'
+ header: { template: 'systems/daggerheart/templates/sheets/items/miscellaneous/header.hbs' },
+ tabs: { template: 'systems/daggerheart/templates/sheets/global/tabs/tab-navigation.hbs' },
+ description: { template: 'systems/daggerheart/templates/sheets/global/tabs/tab-description.hbs' },
+ settings: {
+ template: 'systems/daggerheart/templates/sheets/items/miscellaneous/settings.hbs',
+ scrollable: ['.settings']
+ }
+ };
+
+ static TABS = {
+ description: {
+ active: true,
+ cssClass: '',
+ group: 'primary',
+ id: 'description',
+ icon: null,
+ label: 'DAGGERHEART.Sheets.Feature.Tabs.Description'
+ },
+ settings: {
+ active: false,
+ cssClass: '',
+ group: 'primary',
+ id: 'settings',
+ icon: null,
+ label: 'DAGGERHEART.Sheets.Feature.Tabs.Settings'
}
};
async _prepareContext(_options) {
const context = await super._prepareContext(_options);
context.document = this.document;
+ context.tabs = super._getTabs(this.constructor.TABS);
return context;
}
diff --git a/styles/daggerheart.css b/styles/daggerheart.css
index eb6fed29..0ecfcbc4 100755
--- a/styles/daggerheart.css
+++ b/styles/daggerheart.css
@@ -2985,10 +2985,13 @@ div.daggerheart.views.multiclass {
outline: 2px solid light-dark(#222, #efe6d8);
}
.application.sheet.dh-style input[type='checkbox']:checked::after {
- color: light-dark(#18162e, #f3c267);
+ color: light-dark(#222, #f3c267);
+}
+.application.sheet.dh-style input[type='checkbox']:checked::before {
+ color: light-dark(transparent, #18162e);
}
.application.sheet.dh-style input[type='checkbox']::before {
- color: light-dark(#f3c267, #18162e);
+ color: light-dark(#222, #efe6d8);
}
.application.sheet.dh-style button {
background: light-dark(transparent, #f3c267);
diff --git a/styles/less/global/elements.less b/styles/less/global/elements.less
index 79cb6284..1ebfcb44 100755
--- a/styles/less/global/elements.less
+++ b/styles/less/global/elements.less
@@ -27,10 +27,13 @@
input[type='checkbox'] {
&:checked::after {
- color: light-dark(@dark-blue, @golden);
+ color: light-dark(@dark, @golden);
+ }
+ &:checked::before {
+ color: light-dark(transparent, @dark-blue);
}
&::before {
- color: light-dark(@golden, @dark-blue);
+ color: light-dark(@dark, @beige);
}
}
diff --git a/templates/sheets/consumable.hbs b/templates/sheets/consumable.hbs
deleted file mode 100644
index f920826b..00000000
--- a/templates/sheets/consumable.hbs
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
{{localize "DAGGERHEART.General.Description"}}
- {{formInput systemFields.description value=source.system.description enriched=source.system.description localize=true toggled=true}}
- {{!-- {{editor item.system.description target="system.description" button=true}} --}}
-
-
-
-
\ No newline at end of file
diff --git a/templates/sheets/items/consumable/header.hbs b/templates/sheets/items/consumable/header.hbs
new file mode 100644
index 00000000..6ddea17e
--- /dev/null
+++ b/templates/sheets/items/consumable/header.hbs
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/templates/sheets/items/consumable/settings.hbs b/templates/sheets/items/consumable/settings.hbs
new file mode 100644
index 00000000..d3a9e2bb
--- /dev/null
+++ b/templates/sheets/items/consumable/settings.hbs
@@ -0,0 +1,14 @@
+
+
+
\ No newline at end of file
diff --git a/templates/sheets/items/miscellaneous/header.hbs b/templates/sheets/items/miscellaneous/header.hbs
new file mode 100644
index 00000000..218c3a47
--- /dev/null
+++ b/templates/sheets/items/miscellaneous/header.hbs
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/templates/sheets/items/miscellaneous/settings.hbs b/templates/sheets/items/miscellaneous/settings.hbs
new file mode 100644
index 00000000..96c1dbe9
--- /dev/null
+++ b/templates/sheets/items/miscellaneous/settings.hbs
@@ -0,0 +1,11 @@
+
+
+
\ No newline at end of file
diff --git a/templates/sheets/miscellaneous.hbs b/templates/sheets/miscellaneous.hbs
deleted file mode 100644
index 710186c6..00000000
--- a/templates/sheets/miscellaneous.hbs
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
{{localize "DAGGERHEART.General.Description"}}
- {{formInput systemFields.description value=source.system.description enriched=source.system.description localize=true toggled=true}}
- {{!-- {{editor item.system.description target="system.description" button=true}} --}}
-
-
-
-
\ No newline at end of file