improve toolbar card view display, add tags display with config option to disable tags.

This commit is contained in:
CPTN Cosmo 2026-05-04 23:40:06 +02:00
parent 373eb12a6d
commit 2bea5df640
4 changed files with 244 additions and 8 deletions

View file

@ -1,4 +1,87 @@
Hooks.once('init', () => {
// Register Module Settings
game.settings.register('dh-hotbar-cardview', 'showTagsAll', {
name: 'Show Tags on Tooltips',
hint: 'Master toggle to display item tags (damage, properties, etc.) on hotbar card tooltips.',
scope: 'client',
config: true,
type: Boolean,
default: true
});
game.settings.register('dh-hotbar-cardview', 'showTagsWeapons', {
name: 'Show Tags: Weapons',
scope: 'client',
config: true,
type: Boolean,
default: true
});
game.settings.register('dh-hotbar-cardview', 'showTagsArmor', {
name: 'Show Tags: Armor',
scope: 'client',
config: true,
type: Boolean,
default: true
});
game.settings.register('dh-hotbar-cardview', 'showTagsConsumables', {
name: 'Show Tags: Consumables',
scope: 'client',
config: true,
type: Boolean,
default: true
});
game.settings.register('dh-hotbar-cardview', 'showTagsFeatures', {
name: 'Show Tags: Features',
scope: 'client',
config: true,
type: Boolean,
default: true
});
game.settings.register('dh-hotbar-cardview', 'showTagsDomains', {
name: 'Show Tags: Domain Cards',
scope: 'client',
config: true,
type: Boolean,
default: false
});
// Hook to dynamically hide/show sub-settings based on the master toggle
Hooks.on('renderSettingsConfig', (app, html) => {
// Use a timeout to ensure the DOM is fully rendered and attached,
// and to run after Foundry's own initial display/search logic.
setTimeout(() => {
// Find the master checkbox
const showTagsAllCheckbox = document.querySelector('input[name="dh-hotbar-cardview.showTagsAll"]');
if (!showTagsAllCheckbox) return;
const subSettings = ['Weapons', 'Armor', 'Consumables', 'Features', 'Domains'];
function toggleSubSettings() {
const isChecked = showTagsAllCheckbox.checked;
subSettings.forEach(setting => {
const input = document.querySelector(`input[name="dh-hotbar-cardview.showTags${setting}"]`);
if (input) {
const row = input.closest('.form-group');
if (row) {
if (isChecked) {
// Remove inline display style to let CSS handle it (usually flex)
row.style.display = '';
} else {
// Use !important to prevent Foundry's search or tab logic from overriding it
row.style.setProperty('display', 'none', 'important');
}
}
}
});
}
// Run once to set initial state
toggleSubSettings();
// Listen for changes
showTagsAllCheckbox.addEventListener('change', toggleSubSettings);
}, 100);
});
const originalActivate = CONFIG.ux.TooltipManager.prototype.activate;
CONFIG.ux.TooltipManager.prototype.activate = async function(element, options = {}) {
@ -11,11 +94,44 @@ Hooks.once('init', () => {
await this.enrichText(item);
}
// Calculate Feature Source Category
let featureSource = null;
if (item.type === 'feature' && item.system?.originItemType) {
const originType = item.system.originItemType;
// Attempt to get the localized string for the origin type (e.g., "Ancestry")
let originTypeString = game.i18n.localize(`TYPES.Item.${originType}`);
// Fallback just in case
if (originTypeString === `TYPES.Item.${originType}`) {
originTypeString = originType.charAt(0).toUpperCase() + originType.slice(1);
}
if (item.parent && item.parent.items) {
const sourceItem = item.parent.items.find(i => i.type === originType);
if (sourceItem) {
featureSource = `${originTypeString} - ${sourceItem.name}`;
} else {
featureSource = originTypeString;
}
} else {
featureSource = originTypeString;
}
}
const showTagsAll = game.settings.get('dh-hotbar-cardview', 'showTagsAll');
options.html = await renderTemplate('modules/dh-hotbar-cardview/templates/cardview.hbs', {
item: item,
description: item.system?.enrichedDescription ?? item.enrichedDescription ?? item.system?.description,
config: CONFIG.DH,
allDomains: CONFIG.DH.DOMAIN?.allDomains ? CONFIG.DH.DOMAIN.allDomains() : {}
allDomains: CONFIG.DH.DOMAIN?.allDomains ? CONFIG.DH.DOMAIN.allDomains() : {},
featureSource: featureSource,
settings: {
weapon: showTagsAll && game.settings.get('dh-hotbar-cardview', 'showTagsWeapons'),
armor: showTagsAll && game.settings.get('dh-hotbar-cardview', 'showTagsArmor'),
consumable: showTagsAll && game.settings.get('dh-hotbar-cardview', 'showTagsConsumables'),
feature: showTagsAll && game.settings.get('dh-hotbar-cardview', 'showTagsFeatures'),
domain: showTagsAll && game.settings.get('dh-hotbar-cardview', 'showTagsDomains')
}
});
options.direction = this.constructor.TOOLTIP_DIRECTIONS.UP;