From 503aa712e6f1929c275aa962c59660ff39dabb17 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 10 Jan 2026 17:32:29 +0100 Subject: [PATCH] Fixed so that users can access sceneEnvironments if they have permissions --- module/applications/ui/sceneNavigation.mjs | 19 +++++++++++++++---- module/applications/ux/contextMenu.mjs | 4 ++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/module/applications/ui/sceneNavigation.mjs b/module/applications/ui/sceneNavigation.mjs index 735685d1..ac16ac99 100644 --- a/module/applications/ui/sceneNavigation.mjs +++ b/module/applications/ui/sceneNavigation.mjs @@ -1,3 +1,5 @@ +import { emitAsGM, GMUpdateEvent } from '../../systemRegistration/socket.mjs'; + export default class DhSceneNavigation extends foundry.applications.ui.SceneNavigation { /** @inheritdoc */ static DEFAULT_OPTIONS = { @@ -26,7 +28,9 @@ export default class DhSceneNavigation extends foundry.applications.ui.SceneNavi if (!scene.flags.daggerheart) return x; const daggerheartInfo = new game.system.api.data.scenes.DHScene(scene.flags.daggerheart); - const environments = daggerheartInfo.sceneEnvironments.filter(x => x); + const environments = daggerheartInfo.sceneEnvironments.filter( + x => x && x.testUserPermission(game.user, 'LIMITED') + ); const hasEnvironments = environments.length > 0; return { ...x, @@ -43,12 +47,14 @@ export default class DhSceneNavigation extends foundry.applications.ui.SceneNavi static async #openSceneEnvironment(event, button) { const scene = game.scenes.get(button.dataset.sceneId); - const sceneEnvironments = new game.system.api.data.scenes.DHScene(scene.flags.daggerheart).sceneEnvironments; + const sceneEnvironments = new game.system.api.data.scenes.DHScene( + scene.flags.daggerheart + ).sceneEnvironments.filter(x => x.testUserPermission(game.user, 'LIMITED')); if (sceneEnvironments.length === 1 || event.shiftKey) { sceneEnvironments[0].sheet.render(true); } else { - new ContextMenu( + new foundry.applications.ux.ContextMenu.implementation( button, '.scene-environment', sceneEnvironments.map(environment => ({ @@ -60,7 +66,12 @@ export default class DhSceneNavigation extends foundry.applications.ui.SceneNavi newEnvironments.findIndex(x => x === environment.uuid) )[0]; newEnvironments.unshift(newFirst); - scene.update({ 'flags.daggerheart.sceneEnvironments': newEnvironments }); + emitAsGM( + GMUpdateEvent.UpdateDocument, + scene.update.bind(scene), + { 'flags.daggerheart.sceneEnvironments': newEnvironments }, + scene.uuid + ); } environment.sheet.render({ force: true }); diff --git a/module/applications/ux/contextMenu.mjs b/module/applications/ux/contextMenu.mjs index 09454848..081e6ba0 100644 --- a/module/applications/ux/contextMenu.mjs +++ b/module/applications/ux/contextMenu.mjs @@ -96,11 +96,11 @@ export default class DHContextMenu extends foundry.applications.ux.ContextMenu { * Trigger a context menu event in response to a normal click on a additional options button. * @param {PointerEvent} event */ - static triggerContextMenu(event) { + static triggerContextMenu(event, altSelector) { event.preventDefault(); event.stopPropagation(); const { clientX, clientY } = event; - const selector = '[data-item-uuid]'; + const selector = altSelector ?? '[data-item-uuid]'; const target = event.target.closest(selector) ?? event.currentTarget.closest(selector); target?.dispatchEvent( new PointerEvent('contextmenu', {