From 321a4ab0eb14b940fb913bbb89db497375c08de7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 6 Dec 2025 23:12:52 -0700 Subject: [PATCH] Implement the startingSidebarTab setting (closes #3) --- langs/en-ca.json | 7 ++++ module/hooks/init.mjs | 3 ++ module/settings/startingSidebarTab.mjs | 52 ++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 module/settings/startingSidebarTab.mjs diff --git a/langs/en-ca.json b/langs/en-ca.json index d9af351..0a10f5a 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -12,6 +12,13 @@ "startSidebarExpanded": { "name": "Start Sidebar Expanded", "hint": "(v13+) Starts the right-hand sidebar expanded when logging in." + }, + "startingSidebarTab": { + "name": "Starting Sidebar Tab", + "hint": "(v13+) Determines what sidebar tab to have selected initially when loading Foundry", + "choices": { + "blank": "No Custom Default Tab" + } } } } diff --git a/module/hooks/init.mjs b/module/hooks/init.mjs index bba91c1..82a87e4 100644 --- a/module/hooks/init.mjs +++ b/module/hooks/init.mjs @@ -1,6 +1,7 @@ import { __ID } from "../consts.mjs"; import { chatSidebarBackground } from "../settings/chatSidebarBackground.mjs"; import { preventUserConfigOpen } from "../settings/preventUserConfigOpen.mjs"; +import { startingSidebarTab } from "../settings/startingSidebarTab.mjs"; import { startSidebarExpanded } from "../settings/startSidebarExpanded.mjs"; Hooks.once(`init`, () => { @@ -9,4 +10,6 @@ Hooks.once(`init`, () => { chatSidebarBackground.register(); preventUserConfigOpen.register(); startSidebarExpanded.register(); + + startingSidebarTab(); }); diff --git a/module/settings/startingSidebarTab.mjs b/module/settings/startingSidebarTab.mjs new file mode 100644 index 0000000..1863269 --- /dev/null +++ b/module/settings/startingSidebarTab.mjs @@ -0,0 +1,52 @@ +import { __ID } from "../consts.mjs"; +import { Logger } from "../utils/Logger.mjs"; + +const key = `startingSidebarTab`; + +export function startingSidebarTab() { + Logger.log(`Registering ${key} setting`); + + // #region Registration + game.settings.register(__ID, key, { + name: `OFT.setting.${key}.name`, + hint: `OFT.setting.${key}.hint`, + type: new foundry.data.fields.StringField({ + blank: true, + nullable: false, + required: true, + choices: () => { + const tabs = Object.entries(CONFIG.ui.sidebar.TABS); + + const tabChoices = { + "": `OFT.setting.${key}.choices.blank`, + }; + for (const [id, data] of tabs) { + let { documentName, gmOnly, tooltip: name } = data; + if (gmOnly && !game.user.isGM) { continue }; + + if (documentName) { + name ??= foundry.utils.getDocumentClass(documentName).metadata.labelPlural; + }; + + tabChoices[id] = name; + }; + + return tabChoices; + }, + }), + config: true, + requiresReload: false, + }); + // #endregion Registration + + // #region Implementation + Hooks.once(`ready`, () => { + const defaultTab = game.settings.get(__ID, key); + if (defaultTab) { + Logger.debug(`Changing tab to:`, defaultTab); + ui.sidebar.changeTab(defaultTab, `primary`); + }; + }); + // #endregion Implementation +}; +