This commit is contained in:
Dapoolp 2025-08-27 15:54:41 +02:00
parent eb8f055a8f
commit d5323d4cb9
15 changed files with 188 additions and 201 deletions

View file

@ -162,6 +162,9 @@ Hooks.on('ready', async () => {
if (game.settings.get(SYSTEM.id, SYSTEM.SETTINGS.gameSettings.appearance).displayFear !== 'hide') if (game.settings.get(SYSTEM.id, SYSTEM.SETTINGS.gameSettings.appearance).displayFear !== 'hide')
ui.resources.render({ force: true }); ui.resources.render({ force: true });
if(!(ui.compendiumBrowser instanceof applications.ui.ItemBrowser))
ui.compendiumBrowser = new applications.ui.ItemBrowser();
registerCountdownHooks(); registerCountdownHooks();
socketRegistration.registerSocketHooks(); socketRegistration.registerSocketHooks();
registerRollDiceHooks(); registerRollDiceHooks();

View file

@ -1,6 +1,5 @@
import { abilities } from '../../config/actorConfig.mjs'; import { abilities } from '../../config/actorConfig.mjs';
import { burden } from '../../config/generalConfig.mjs'; import { burden } from '../../config/generalConfig.mjs';
import { ItemBrowser } from '../ui/itemBrowser.mjs';
import { createEmbeddedItemsWithEffects, createEmbeddedItemWithEffects } from '../../helpers/utils.mjs'; import { createEmbeddedItemsWithEffects, createEmbeddedItemWithEffects } from '../../helpers/utils.mjs';
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
@ -46,8 +45,6 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl
}; };
this._dragDrop = this._createDragDropHandlers(); this._dragDrop = this._createDragDropHandlers();
this.itemBrowser = null;
} }
get title() { get title() {
@ -448,7 +445,7 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl
'type': { key: 'type', value: type } 'type': { key: 'type', value: type }
}; };
return (this.itemBrowser = await new ItemBrowser({ presets }).render({ force: true })); ui.compendiumBrowser.open(presets);
} }
static async viewItem(_, target) { static async viewItem(_, target) {
@ -566,7 +563,7 @@ export default class DhCharacterCreation extends HandlebarsApplicationMixin(Appl
{ overwrite: true } { overwrite: true }
); );
if (this.itemBrowser) this.itemBrowser.close(); if (ui.compendiumBrowser) ui.compendiumBrowser.close();
this.close(); this.close();
} }

View file

@ -1,6 +1,5 @@
import { abilities, subclassFeatureLabels } from '../../config/actorConfig.mjs'; import { abilities, subclassFeatureLabels } from '../../config/actorConfig.mjs';
import { getDeleteKeys, tagifyElement } from '../../helpers/utils.mjs'; import { getDeleteKeys, tagifyElement } from '../../helpers/utils.mjs';
import { ItemBrowser } from '../ui/itemBrowser.mjs';
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
@ -12,8 +11,6 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2)
this._dragDrop = this._createDragDropHandlers(); this._dragDrop = this._createDragDropHandlers();
this.tabGroups.primary = 'advancements'; this.tabGroups.primary = 'advancements';
this.itemBrowser = null;
} }
get title() { get title() {
@ -558,7 +555,7 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2)
}; };
} }
return (this.itemBrowser = await new ItemBrowser({ presets }).render({ force: true })); ui.compendiumBrowser.open(presets);
} }
static async selectPreview(_, button) { static async selectPreview(_, button) {
@ -661,7 +658,8 @@ export default class DhlevelUp extends HandlebarsApplicationMixin(ApplicationV2)
}, {}); }, {});
await this.actor.levelUp(levelupData); await this.actor.levelUp(levelupData);
if (this.itemBrowser) this.itemBrowser.close();
if (ui.compendiumBrowser) ui.compendiumBrowser.close();
this.close(); this.close();
} }
} }

View file

@ -5,7 +5,6 @@ import { CharacterLevelup, LevelupViewMode } from '../../levelup/_module.mjs';
import DhCharacterCreation from '../../characterCreation/characterCreation.mjs'; import DhCharacterCreation from '../../characterCreation/characterCreation.mjs';
import FilterMenu from '../../ux/filter-menu.mjs'; import FilterMenu from '../../ux/filter-menu.mjs';
import { getDocFromElement, getDocFromElementSync } from '../../../helpers/utils.mjs'; import { getDocFromElement, getDocFromElementSync } from '../../../helpers/utils.mjs';
import { ItemBrowser } from '../../ui/itemBrowser.mjs';
/**@typedef {import('@client/applications/_types.mjs').ApplicationClickAction} ApplicationClickAction */ /**@typedef {import('@client/applications/_types.mjs').ApplicationClickAction} ApplicationClickAction */
@ -29,8 +28,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
toggleEquipItem: CharacterSheet.#toggleEquipItem, toggleEquipItem: CharacterSheet.#toggleEquipItem,
toggleResourceDice: CharacterSheet.#toggleResourceDice, toggleResourceDice: CharacterSheet.#toggleResourceDice,
handleResourceDice: CharacterSheet.#handleResourceDice, handleResourceDice: CharacterSheet.#handleResourceDice,
useDowntime: this.useDowntime, useDowntime: this.useDowntime
tempBrowser: CharacterSheet.#tempBrowser
}, },
window: { window: {
resizable: true, resizable: true,
@ -635,7 +633,6 @@ export default class CharacterSheet extends DHBaseActorSheet {
const { key } = button.dataset; const { key } = button.dataset;
const presets = { const presets = {
compendium: 'daggerheart',
folder: key, folder: key,
filter: filter:
key === 'subclasses' key === 'subclasses'
@ -651,7 +648,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
} }
}; };
return new ItemBrowser({ presets }).render({ force: true }); ui.compendiumBrowser.open(presets);
} }
/** /**
@ -768,13 +765,6 @@ export default class CharacterSheet extends DHBaseActorSheet {
}); });
} }
/**
* Temp
*/
static async #tempBrowser(_, target) {
new ItemBrowser().render({ force: true });
}
/** /**
* Handle the roll values of resource dice. * Handle the roll values of resource dice.
* @type {ApplicationClickAction} * @type {ApplicationClickAction}

View file

@ -1,6 +1,5 @@
const { HandlebarsApplicationMixin } = foundry.applications.api; const { HandlebarsApplicationMixin } = foundry.applications.api;
import { getDocFromElement, getDocFromElementSync, tagifyElement } from '../../../helpers/utils.mjs'; import { getDocFromElement, getDocFromElementSync, tagifyElement } from '../../../helpers/utils.mjs';
import { ItemBrowser } from '../../ui/itemBrowser.mjs';
const typeSettingsMap = { const typeSettingsMap = {
character: 'extendCharacterDescriptions', character: 'extendCharacterDescriptions',
@ -619,7 +618,7 @@ export default function DHApplicationMixin(Base) {
return; return;
} }
return new ItemBrowser({ presets }).render({ force: true }); ui.compendiumBrowser.open(presets);
} }
/** /**

View file

@ -15,16 +15,13 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
this.fieldFilter = []; this.fieldFilter = [];
this.selectedMenu = { path: [], data: null }; this.selectedMenu = { path: [], data: null };
this.config = CONFIG.DH.ITEMBROWSER.compendiumConfig; this.config = CONFIG.DH.ITEMBROWSER.compendiumConfig;
this.presets = options.presets; this.presets = {};
if (this.presets?.folder)
ItemBrowser.selectFolder.call(this, null, null, this.presets.folder);
} }
/** @inheritDoc */ /** @inheritDoc */
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
id: 'itemBrowser', id: 'itemBrowser',
classes: ['daggerheart', 'dh-style', 'dialog', 'compendium-browser'], classes: ['daggerheart', 'dh-style', 'dialog', 'compendium-browser', 'loader'],
tag: 'div', tag: 'div',
window: { window: {
frame: true, frame: true,
@ -84,17 +81,15 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
} }
}; };
/** @inheritDoc */
async _preFirstRender(context, options) {
if (context.presets?.render?.noFolder || context.presets?.render?.lite) options.position.width = 600;
await super._preFirstRender(context, options);
}
/** @inheritDoc */ /** @inheritDoc */
async _preRender(context, options) { async _preRender(context, options) {
if (context.presets?.render?.noFolder || context.presets?.render?.lite) this.presets = options.presets ?? {};
options.parts.splice(options.parts.indexOf('sidebar'), 1);
const width = this.presets?.render?.noFolder === true || this.presets?.render?.lite === true ? 600 : 850;
if(this.rendered)
this.setPosition({ width });
else
options.position.width = width;
await super._preRender(context, options); await super._preRender(context, options);
} }
@ -103,25 +98,18 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
async _onRender(context, options) { async _onRender(context, options) {
await super._onRender(context, options); await super._onRender(context, options);
this.element
.querySelectorAll('[data-action="selectFolder"]')
.forEach(element => element.classList.toggle('is-selected', element.dataset.folderId === this.selectedMenu.path.join('.')));
this._createSearchFilter(); this._createSearchFilter();
this._createFilterInputs();
this._createDragProcess();
if (context.presets?.render?.lite) this.element.classList.add('lite'); this.element.classList.toggle('lite', this.presets?.render?.lite === true);
this.element.classList.toggle('no-folder', this.presets?.render?.noFolder === true);
if (context.presets?.render?.noFolder) this.element.classList.add('no-folder'); this.element.classList.toggle('no-filter', this.presets?.render?.noFilter === true);
this.element.querySelectorAll('.folder-list > [data-action="selectFolder"]').forEach(element => {
if (context.presets?.render?.noFilter) this.element.classList.add('no-filter'); element.hidden = this.presets.render?.folders?.length && !this.presets.render.folders.includes(element.dataset.folderId);
});
if (this.presets?.filter) {
Object.entries(this.presets.filter).forEach(
([k, v]) => {
const filter = this.fieldFilter.find(c => c.name === k)
if(filter) filter.value = v.value;
}
);
await this._onInputFilterBrowser();
}
} }
_attachPartListeners(partId, htmlElement, options) { _attachPartListeners(partId, htmlElement, options) {
@ -142,20 +130,23 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
async _prepareContext(options) { async _prepareContext(options) {
const context = await super._prepareContext(options); const context = await super._prepareContext(options);
context.compendiums = this.getCompendiumFolders(foundry.utils.deepClone(this.config)); context.compendiums = this.getCompendiumFolders(foundry.utils.deepClone(this.config));
// context.pathTitle = this.pathTile;
context.menu = this.selectedMenu; context.menu = this.selectedMenu;
context.formatLabel = this.formatLabel; context.formatLabel = this.formatLabel;
context.formatChoices = this.formatChoices; context.formatChoices = this.formatChoices;
context.fieldFilter = this.fieldFilter = this._createFieldFilter();
context.items = this.items; context.items = this.items;
context.presets = this.presets; context.presets = this.presets;
return context; return context;
} }
open(presets = {}) {
this.presets = presets;
ItemBrowser.selectFolder.call(this);
}
getCompendiumFolders(config, parent = null, depth = 0) { getCompendiumFolders(config, parent = null, depth = 0) {
let folders = []; let folders = [];
Object.values(config).forEach(c => { Object.values(config).forEach(c => {
if(this.presets.render?.folders?.length && !this.presets.render.folders.includes(c.id)) return; // if(this.presets.render?.folders?.length && !this.presets.render.folders.includes(c.id)) return;
const folder = { const folder = {
id: c.id, id: c.id,
label: game.i18n.localize(c.label), label: game.i18n.localize(c.label),
@ -171,29 +162,9 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
return folders; return folders;
} }
static async selectFolder(_, target, folder) { static async selectFolder(_, target) {
const folderId = target?.dataset?.folderId ?? this.presets.folder,
let loadTimeout = ItemBrowser.toggleLoader(target, true); folderData = foundry.utils.getProperty(this.config, folderId) ?? {};
const folderId = folder ?? target.dataset.folderId,
folderData = foundry.utils.getProperty(this.config, folderId) ?? {},
promises = [];
game.packs.forEach(pack => {
promises.push(
new Promise(async resolve => {
const items = await pack.getDocuments({ type__in: folderData?.type });
resolve(items);
})
)
});
Promise.all(promises).then(result => {
this.items = ItemBrowser.sortBy(result.flatMap(r => r), 'name');
clearTimeout(loadTimeout);
ItemBrowser.toggleLoader(target, false);
this.render({ force: true });
});
const columns = ItemBrowser.getFolderConfig(folderData).map(col => ({ const columns = ItemBrowser.getFolderConfig(folderData).map(col => ({
...col, ...col,
@ -201,20 +172,17 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
})); }));
this.selectedMenu = { this.selectedMenu = {
path: folderId.split('.'), path: folderId?.split('.') ?? [],
data: { data: {
...folderData, ...folderData,
columns: columns columns: columns
} }
}; };
if (target) { await this.render({ force: true, presets: this.presets });
target
.closest('.compendium-sidebar') if(this.selectedMenu?.data?.type?.length)
.querySelectorAll('[data-action="selectFolder"]') this.loadItems();
.forEach(element => element.classList.remove('is-selected'));
target.classList.add('is-selected');
}
} }
_replaceHTML(result, content, options) { _replaceHTML(result, content, options) {
@ -222,9 +190,70 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
super._replaceHTML(result, content, options); super._replaceHTML(result, content, options);
} }
static toggleLoader(target, state) { loadItems() {
if(!target) return; let loadTimeout = this.toggleLoader(true);
const container = target.closest(".window-content");
const promises = [];
game.packs.forEach(pack => {
promises.push(
new Promise(async resolve => {
const items = await pack.getDocuments({ type__in: this.selectedMenu?.data?.type });
resolve(items);
})
)
});
Promise.all(promises).then(async result => {
this.items = ItemBrowser.sortBy(result.flatMap(r => r), 'name');
this.fieldFilter = this._createFieldFilter();
if (this.presets?.filter) {
Object.entries(this.presets.filter).forEach(
([k, v]) => {
const filter = this.fieldFilter.find(c => c.name === k)
if(filter) filter.value = v.value;
}
);
// await this._onInputFilterBrowser();
}
const filterList = await foundry.applications.handlebars.renderTemplate('systems/daggerheart/templates/ui/itemBrowser/filterContainer.hbs',
{
fieldFilter: this.fieldFilter,
presets: this.presets,
formatChoices: this.formatChoices
}
);
this.element.querySelector('.filter-content .wrapper').innerHTML = filterList;
const filterContainer = this.element.querySelector('.filter-header > [data-action="expandContent"]');
if(this.fieldFilter.length === 0)
filterContainer.setAttribute('disabled', '');
else
filterContainer.removeAttribute('disabled');
const itemList = await foundry.applications.handlebars.renderTemplate('systems/daggerheart/templates/ui/itemBrowser/itemContainer.hbs',
{
items: this.items,
menu: this.selectedMenu,
formatLabel: this.formatLabel
}
);
this.element.querySelector('.item-list').innerHTML = itemList;
this._createFilterInputs();
await this._onInputFilterBrowser();
this._createDragProcess();
clearTimeout(loadTimeout);
this.toggleLoader(false);
});
}
toggleLoader(state) {
const container = this.element.querySelector('.item-list');
return setTimeout(() => { return setTimeout(() => {
container.classList.toggle("loader", state); container.classList.toggle("loader", state);
}, 100); }, 100);
@ -347,6 +376,7 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
for (const li of html.querySelectorAll('.item-container')) { for (const li of html.querySelectorAll('.item-container')) {
const itemUUID = li.dataset.itemUuid, const itemUUID = li.dataset.itemUuid,
item = this.items.find(i => i.uuid === itemUUID); item = this.items.find(i => i.uuid === itemUUID);
if(!item) continue;
const matchesSearch = !query || foundry.applications.ux.SearchFilter.testQuery(rgx, item.name); const matchesSearch = !query || foundry.applications.ux.SearchFilter.testQuery(rgx, item.name);
if (matchesSearch) this.#filteredItems.browser.search.add(item.id); if (matchesSearch) this.#filteredItems.browser.search.add(item.id);
const { input } = this.#filteredItems.browser; const { input } = this.#filteredItems.browser;
@ -503,8 +533,9 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) {
<i class="fa-solid fa-book-atlas"></i> <i class="fa-solid fa-book-atlas"></i>
${game.i18n.localize("DAGGERHEART.UI.Tooltip.compendiumBrowser")} ${game.i18n.localize("DAGGERHEART.UI.Tooltip.compendiumBrowser")}
`; `;
button.addEventListener("click", event => (new ItemBrowser({ presets: menus[sectionId] })).render({ force: true })); button.addEventListener("click", event => {
// button.addEventListener("click", event => ui.compendiumBrowser?.render({ force: true, presets: menus[sectionId] })); ui.compendiumBrowser.open(menus[sectionId]);
});
headerActions.append(button); headerActions.append(button);
} }

View file

@ -355,7 +355,7 @@ export const typeConfig = {
{ {
key: 'system.domains', key: 'system.domains',
label: 'DAGGERHEART.GENERAL.Domain.plural', label: 'DAGGERHEART.GENERAL.Domain.plural',
choices: () => Object.values(CONFIG.DH.DOMAIN.domains).map(d => ({ value: d.id, label: d.label })), choices: () => Object.values(CONFIG.DH.DOMAIN.allDomains()).map(d => ({ value: d.id, label: d.label })),
operator: 'contains2' operator: 'contains2'
} }
] ]

View file

@ -30,12 +30,13 @@ export const preloadHandlebarsTemplates = async function () {
'systems/daggerheart/templates/dialogs/downtime/activities.hbs', 'systems/daggerheart/templates/dialogs/downtime/activities.hbs',
'systems/daggerheart/templates/dialogs/dice-roll/costSelection.hbs', 'systems/daggerheart/templates/dialogs/dice-roll/costSelection.hbs',
'systems/daggerheart/templates/ui/chat/parts/roll-part.hbs', 'systems/daggerheart/templates/ui/chat/parts/roll-part.hbs',
'systems/daggerheart/templates/ui/chat/parts/damage-part.hbs', 'systems/daggerheart/templates/ui/chat/parts/damage-part.hbs',
'systems/daggerheart/templates/ui/chat/parts/target-part.hbs', 'systems/daggerheart/templates/ui/chat/parts/target-part.hbs',
'systems/daggerheart/templates/ui/chat/parts/button-part.hbs', 'systems/daggerheart/templates/ui/chat/parts/button-part.hbs',
'systems/daggerheart/templates/ui/itemBrowser/itemContainer.hbs',
'systems/daggerheart/templates/scene/dh-config.hbs', 'systems/daggerheart/templates/scene/dh-config.hbs',
]); ]);

View file

@ -25,9 +25,11 @@
} }
.loader { .loader {
position: relative;
overflow: hidden !important;
div { div {
opacity: .5; opacity: .5;
// transition: opacity .3s ease-in-out;
} }
&:before { &:before {

View file

@ -292,6 +292,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 5px; gap: 5px;
flex: 1;
.item-container { .item-container {
&:hover { &:hover {
@ -392,6 +393,7 @@
.title { .title {
text-align: center; text-align: center;
font-weight: bold;
} }
.hint { .hint {
@ -407,7 +409,7 @@
&.lite, &.lite,
&.no-folder { &.no-folder {
.menu-path { .compendium-sidebar, .menu-path {
display: none; display: none;
} }
} }

View file

@ -10,9 +10,6 @@
<a class="filter-button"> <a class="filter-button">
<i class="fa-solid fa-filter"></i> <i class="fa-solid fa-filter"></i>
</a> </a>
<a data-tooltip="{{localize 'DAGGERHEART.UI.Tooltip.compendiumBrowser'}}" data-action="tempBrowser">
<i class="fa-solid fa-book-atlas"></i>
</a>
</div> </div>
<div class="currency-section"> <div class="currency-section">

View file

@ -0,0 +1,22 @@
{{#each fieldFilter}}
{{#if choices }}
<div class="form-group"{{#with (lookup @root.presets.filter key)}}{{#if forced}} disabled{{/if}}{{/with}}>
<label>{{localize label}}</label>
<div class="form-fields">
<select data-key="{{key}}" name={{name}}>
{{selectOptions choices valueAttr="value" blank="" localize=true selected=value}}
</select>
</div>
</div>
{{else}}
{{#if filtered }}
{{formField field localize=true blank="" name=name choices=(@root.formatChoices this) valueAttr="value" dataset=(object key=key) value=value}}
{{else}}
{{#if field.label}}
{{formField field localize=true blank="" name=name dataset=(object key=key) value=value}}
{{else}}
{{formField field localize=true blank="" name=name dataset=(object key=key) label=label value=value}}
{{/if}}
{{/if}}
{{/if}}
{{/each}}

View file

@ -1,5 +1,5 @@
<div class="compendium-results"> <div class="compendium-results">
{{#if menu.data }} {{#if menu.path.length }}
<div class="menu-path"> <div class="menu-path">
{{#each menu.path}} {{#each menu.path}}
{{#if (eq this "folders")}} {{#if (eq this "folders")}}
@ -19,39 +19,13 @@
</div> </div>
<input type="search" name="search" class="search-input" placeholder="{{localize 'DAGGERHEART.UI.ItemBrowser.searchPlaceholder'}}"> <input type="search" name="search" class="search-input" placeholder="{{localize 'DAGGERHEART.UI.ItemBrowser.searchPlaceholder'}}">
</div> </div>
{{#if fieldFilter.length}} <a data-tooltip="{{localize 'DAGGERHEART.UI.ItemBrowser.tooltipFilters'}}" data-action="expandContent" disabled><i class="fa-solid fa-filter"></i></a>
<a data-tooltip="{{localize 'DAGGERHEART.UI.ItemBrowser.tooltipFilters'}}" data-action="expandContent"><i class="fa-solid fa-filter"></i></a>
{{/if}}
<a data-tooltip="{{localize 'DAGGERHEART.UI.ItemBrowser.tooltipErase'}}" data-action="resetFilters"><i class="fa-solid fa-eraser"></i></a> <a data-tooltip="{{localize 'DAGGERHEART.UI.ItemBrowser.tooltipErase'}}" data-action="resetFilters"><i class="fa-solid fa-eraser"></i></a>
</div> </div>
<div class="filter-content extensible"> <div class="filter-content extensible">
<div class="wrapper"> <div class="wrapper"></div>
{{#each fieldFilter}}
{{#if choices }}
<div class="form-group"{{#with (lookup @root.presets.filter key)}}{{#if forced}} disabled{{/if}}{{/with}}>
<label>{{localize label}}</label>
<div class="form-fields">
<select data-key="{{key}}" name={{name}}>
{{selectOptions choices valueAttr="value" blank="" localize=true selected=value}}
</select>
</div> </div>
</div> </div>
{{else}}
{{#if filtered }}
{{formField field localize=true blank="" name=name choices=(@root.formatChoices this) valueAttr="value" dataset=(object key=key) value=value}}
{{else}}
{{#if field.label}}
{{formField field localize=true blank="" name=name dataset=(object key=key) value=value}}
{{else}}
{{formField field localize=true blank="" name=name dataset=(object key=key) label=label value=value}}
{{/if}}
{{/if}}
{{/if}}
{{/each}}
</div>
</div>
</div>
{{!-- <div class="item-list-container"> --}}
{{#if menu.data.columns.length}} {{#if menu.data.columns.length}}
<div class="item-list-header"> <div class="item-list-header">
<div class="item-list-img"></div> <div class="item-list-img"></div>
@ -61,25 +35,7 @@
{{/each}} {{/each}}
</div> </div>
{{/if}} {{/if}}
<div class="item-list"> <div class="item-list"></div>
{{#each items}}
<div class="item-container" data-item-uuid="{{uuid}}" draggable="true">
<div class="item-header">
<div class="item-info" data-action="expandContent">
<img src="{{img}}" data-item-key="img" class="item-list-img">
<span data-item-key="name" class="item-list-name">{{name}}</span>
{{#each ../menu.data.columns}}
<span data-item-key="{{key}}">{{#with (@root.formatLabel ../this this) as | label |}}{{{label}}}{{/with}}</span>
{{/each}}
</div>
</div>
<div class="item-desc extensible">
<span class="wrapper">{{{system.description}}}</span>
</div>
</div>
{{/each}}
</div>
{{!-- </div> --}}
{{else}} {{else}}
<div class="welcome-message"> <div class="welcome-message">
<h2 class="title">{{localize "DAGGERHEART.UI.ItemBrowser.title"}}</h2> <h2 class="title">{{localize "DAGGERHEART.UI.ItemBrowser.title"}}</h2>

View file

@ -0,0 +1,16 @@
{{#each items}}
<div class="item-container" data-item-uuid="{{uuid}}" draggable="true">
<div class="item-header">
<div class="item-info" data-action="expandContent">
<img src="{{img}}" data-item-key="img" class="item-list-img">
<span data-item-key="name" class="item-list-name">{{name}}</span>
{{#each ../menu.data.columns}}
<span data-item-key="{{key}}">{{#with (@root.formatLabel ../this this) as | label |}}{{{label}}}{{/with}}</span>
{{/each}}
</div>
</div>
<div class="item-desc extensible">
<span class="wrapper">{{{system.description}}}</span>
</div>
</div>
{{/each}}

View file

@ -17,33 +17,6 @@
</div> </div>
</div> </div>
{{/if}} {{/if}}
{{!-- <details class="compendium-container" data-compendium-id="{{id}}" open>
<summary>
{{label}}
<line-div></line-div>
</summary>
<div class="folder-list">
{{#each folders}}
<div class="{{#if selected}} is-selected{{/if}}" data-action="selectFolder" data-folder-id="{{id}}" {{#if folders.length}}data-tooltip="DAGGERHEART.UI.Tooltip.rightClickExtand" data-tooltip-direction="RIGHT"{{/if}}>{{label}}</div>
{{#if folders.length}}
<div class="subfolder-list">
<div class="wrapper">
{{#each folders}}
<div
class="subfolder-item {{#if selected}} is-selected{{/if}}"
data-action="selectFolder"
data-folder-id="{{../id}}.folders.{{id}}"
>
<span>• {{label}}</span>
</div>
{{/each}}
</div>
</div>
{{/if}}
{{/each}}
</div>
<line-div></line-div>
</details> --}}
{{/each}} {{/each}}
</div> </div>
</div> </div>