Fixed context menu for multiples

This commit is contained in:
WBHarry 2025-12-31 21:02:16 +01:00
parent e6419b89d0
commit eb954b7ef6
5 changed files with 41 additions and 18 deletions

View file

@ -86,9 +86,11 @@ export default class DhSceneConfigSettings extends foundry.applications.sheets.S
/** @override */ /** @override */
async _processSubmitData(event, form, submitData, options) { async _processSubmitData(event, form, submitData, options) {
submitData.flags.daggerheart = this.daggerheartFlag.toObject(); submitData.flags.daggerheart = this.daggerheartFlag.toObject();
for (const key of Object.keys(this.document._source.flags.daggerheart.sceneEnvironments)) { if (this.document._source.flags.daggerheart) {
if (!submitData.flags.daggerheart.sceneEnvironments[key]) { for (const key of Object.keys(this.document._source.flags.daggerheart.sceneEnvironments)) {
submitData.flags.daggerheart.sceneEnvironments[`-=${key}`] = null; if (!submitData.flags.daggerheart.sceneEnvironments[key]) {
submitData.flags.daggerheart.sceneEnvironments[`-=${key}`] = null;
}
} }
} }

View file

@ -43,12 +43,29 @@ export default class DhSceneNavigation extends foundry.applications.ui.SceneNavi
return context; return context;
} }
static async #openSceneEnvironment(_event, button) { static async #openSceneEnvironment(event, button) {
const scene = game.scenes.get(button.dataset.sceneId); const scene = game.scenes.get(button.dataset.sceneId);
const sceneEnvironments = Object.keys(scene.flags.daggerheart.sceneEnvironments); const sceneEnvironments = new game.system.api.data.scenes.DHScene(scene.flags.daggerheart).sceneEnvironments;
const environment = await foundry.utils.fromUuid(
scene.flags.daggerheart.sceneEnvironments[sceneEnvironments[0]] if (sceneEnvironments.length === 1) {
); sceneEnvironments[0].sheet.render(true);
environment.sheet.render(true); } else {
new ContextMenu(
button,
'.scene-environment',
sceneEnvironments.map(environment => ({
name: environment.name,
callback: () => {
environment.sheet.render({ force: true });
}
})),
{
jQuery: false,
fixed: true
}
);
CONFIG.ux.ContextMenu.triggerContextMenu(event, '.scene-environment');
}
} }
} }

View file

@ -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. * Trigger a context menu event in response to a normal click on a additional options button.
* @param {PointerEvent} event * @param {PointerEvent} event
*/ */
static triggerContextMenu(event) { static triggerContextMenu(event, elementSelector) {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
const { clientX, clientY } = event; const { clientX, clientY } = event;
const selector = '[data-item-uuid]'; const selector = elementSelector ?? '[data-item-uuid]';
const target = event.target.closest(selector) ?? event.currentTarget.closest(selector); const target = event.target.closest(selector) ?? event.currentTarget.closest(selector);
target?.dispatchEvent( target?.dispatchEvent(
new PointerEvent('contextmenu', { new PointerEvent('contextmenu', {

View file

@ -10,6 +10,10 @@
.scene-environment { .scene-environment {
padding: 0; padding: 0;
img {
border-radius: 4px;
}
} }
} }

View file

@ -7,8 +7,7 @@
<menu id="scene-navigation-active" class="scene-navigation-menu flexcol"> <menu id="scene-navigation-active" class="scene-navigation-menu flexcol">
{{#each scenes.active as |scene|}} {{#each scenes.active as |scene|}}
<li class="scene-wrapper"> <li class="scene-wrapper">
<div class="ui-control scene {{scene.cssClass}}" data-scene-id="{{scene.id}}" data-action="viewScene" <div class="ui-control scene {{scene.cssClass}}" data-scene-id="{{scene.id}}" data-action="viewScene" {{#if scene.tooltip}}data-tooltip-text="{{scene.tooltip}}"{{/if}}>
{{#if scene.tooltip}}data-tooltip-text="{{scene.tooltip}}"{{/if}}>
<span class="scene-name ellipsis">{{scene.name}}</span> <span class="scene-name ellipsis">{{scene.name}}</span>
{{#if scene.users}} {{#if scene.users}}
<ul class="scene-players"> <ul class="scene-players">
@ -20,17 +19,18 @@
{{/if}} {{/if}}
</div> </div>
{{#if scene.hasEnvironments}} {{#if scene.hasEnvironments}}
<button class="ui-control scene-environment" data-action="openSceneEnvironment" data-scene-id="{{scene.id}}"><img src="{{scene.environmentImage}}" /> </button> <button class="ui-control scene-environment {{#if (gt scene.environments.length 1)}}many-environments{{/if}}" data-action="openSceneEnvironment" data-scene-id="{{scene.id}}"><img src="{{scene.environmentImage}}" /> </button>
{{/if}} {{/if}}
</li> </li>
{{/each}} {{/each}}
</menu> </menu>
<menu id="scene-navigation-inactive" class="scene-navigation-menu flexcol"> <menu id="scene-navigation-inactive" class="scene-navigation-menu flexcol">
{{#each scenes.inactive as |scene|}} {{#each scenes.inactive as |scene|}}
<li class="ui-control scene {{scene.cssClass}}" data-scene-id="{{scene.id}}" data-action="viewScene" <li class="scene-wrapper">
{{#if scene.tooltip}}data-tooltip-text="{{scene.tooltip}}"{{/if}}> <div class="ui-control scene {{scene.cssClass}}" data-scene-id="{{scene.id}}" data-action="viewScene" {{#if scene.tooltip}}data-tooltip-text="{{scene.tooltip}}"{{/if}}>
<span class="scene-name ellipsis">{{scene.name}}</span> <span class="scene-name ellipsis">{{scene.name}}</span>
</li> </div>
</li>
{{/each}} {{/each}}
</menu> </menu>
</nav> </nav>