Reduce Action Selection click number & Style Action Type Dialog (#408)

* Reduce Action Selection click number & Style Action Type Dialog

* fixes

* Action Select buttons color
This commit is contained in:
Dapoulp 2025-07-25 19:13:21 +02:00 committed by GitHub
parent 26e3c38aa9
commit 3f95740b7a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 228 additions and 684 deletions

View file

@ -0,0 +1,87 @@
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
export default class ActionSelectionDialog extends HandlebarsApplicationMixin(ApplicationV2) {
constructor(item, event, options={}) {
super(options);
this.#item = item;
this.#event = event;
}
/* -------------------------------------------- */
/** @override */
static DEFAULT_OPTIONS = {
classes: ['daggerheart', 'dh-style', 'dialog'],
actions: {
choose: ActionSelectionDialog.#onChooseAction
},
position: {
width: 400
}
};
/* -------------------------------------------- */
static PARTS = {
actions: {
template: "systems/daggerheart/templates/dialogs/actionSelect.hbs"
}
};
#item;
get item() {
return this.#item;
}
#event;
get event() {
return this.#event;
}
#action;
get action() {
return this.#action ?? null;
}
/* -------------------------------------------- */
/** @override */
get title() {
return game.i18n.localize('DAGGERHEART.CONFIG.SelectAction.selectAction');
}
/* -------------------------------------------- */
/** @inheritDoc */
async _prepareContext(options) {
const actions = this.#item.system.actionsList,
itemName = this.#item.name;
return {
...await super._prepareContext(options),
actions,
itemName
}
}
static async #onChooseAction(event, button) {
const { actionId } = button.dataset;
this.#action = this.#item.system.actionsList.find(a => a._id === actionId);
Object.defineProperty(this.#event, 'shiftKey', {
get() {
return event.shiftKey;
}
});
this.close();
}
static create(item, event, options) {
return new Promise(resolve => {
const dialog = new this(item, event, options);
dialog.addEventListener("close", () => resolve(dialog.action), { once: true });
dialog.render({ force: true });
});
}
}