From 952779000d97c8d1cc9301674c91c04c4b6f9512 Mon Sep 17 00:00:00 2001 From: Chris Ryan <73275196+chrisryan10@users.noreply.github.com> Date: Tue, 30 Sep 2025 04:15:02 +1000 Subject: [PATCH] [PR] [Feature] Remember the position and size of the compendium browser (#1123) * Remember the position and size of the compendium browser * Save position, size details for the 3 types of compendium browser --------- Co-authored-by: Chris Ryan --- module/applications/ui/itemBrowser.mjs | 28 ++++++++++++++++++++++---- module/config/flagsConfig.mjs | 12 +++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/module/applications/ui/itemBrowser.mjs b/module/applications/ui/itemBrowser.mjs index a00f8edc..4f3053bb 100644 --- a/module/applications/ui/itemBrowser.mjs +++ b/module/applications/ui/itemBrowser.mjs @@ -16,6 +16,7 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) { this.selectedMenu = { path: [], data: null }; this.config = CONFIG.DH.ITEMBROWSER.compendiumConfig; this.presets = {}; + this.compendiumBrowserTypeKey = 'compendiumBrowserDefault'; } /** @inheritDoc */ @@ -84,10 +85,25 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) { /** @inheritDoc */ async _preRender(context, options) { this.presets = options.presets ?? {}; - - 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; + const noFolder = this.presets?.render?.noFolder; + if (noFolder === true) { + this.compendiumBrowserTypeKey = 'compendiumBrowserNoFolder'; + } + const lite = this.presets?.render?.lite; + if (lite === true) { + this.compendiumBrowserTypeKey = 'compendiumBrowserLite'; + } + const userPresetPosition = game.user.getFlag(CONFIG.DH.id, CONFIG.DH.FLAGS[`${this.compendiumBrowserTypeKey}`].position) ; + + options.position = userPresetPosition ?? ItemBrowser.DEFAULT_OPTIONS.position; + + if (!userPresetPosition) { + const width = noFolder === true || lite === true ? 600 : 850; + if (this.rendered) + this.setPosition({ width }); + else + options.position.width = width; + } await super._preRender(context, options); } @@ -113,6 +129,10 @@ export class ItemBrowser extends HandlebarsApplicationMixin(ApplicationV2) { }); } + _onPosition(position) { + game.user.setFlag(CONFIG.DH.id, CONFIG.DH.FLAGS[`${this.compendiumBrowserTypeKey}`].position, position); + } + _attachPartListeners(partId, htmlElement, options) { super._attachPartListeners(partId, htmlElement, options); diff --git a/module/config/flagsConfig.mjs b/module/config/flagsConfig.mjs index c2a6dff2..32088bc1 100644 --- a/module/config/flagsConfig.mjs +++ b/module/config/flagsConfig.mjs @@ -8,6 +8,18 @@ export const encounterCountdown = { position: 'countdown-encounter-position' }; +export const compendiumBrowserDefault = { + position: 'compendium-browser-default-position' +}; + +export const compendiumBrowserNoFolder = { + position: 'compendium-browser-no-folder-position' +}; + +export const compendiumBrowserLite = { + position: 'compendium-browser-lite-position' +}; + export const itemAttachmentSource = 'attachmentSource'; export const userFlags = {