mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-16 23:26:28 +01:00
289 - Confirm Delete Dialogs (#298)
* Added confirm dialogs to delete * Localization fix
This commit is contained in:
parent
5aa9ba661a
commit
61f04df765
7 changed files with 101 additions and 10 deletions
|
|
@ -213,6 +213,10 @@
|
||||||
"encounter": "Encounter"
|
"encounter": "Encounter"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"DeleteConfirmation": {
|
||||||
|
"title": "Delete {type} - {name}",
|
||||||
|
"text": "Are you sure you want to delete {name}?"
|
||||||
|
},
|
||||||
"DamageReduction": {
|
"DamageReduction": {
|
||||||
"armorMarks": "Armor Marks",
|
"armorMarks": "Armor Marks",
|
||||||
"armorWithStress": "Spend 1 stress to use an extra mark",
|
"armorWithStress": "Spend 1 stress to use an extra mark",
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,18 @@ export default class DHAdversarySettings extends DHBaseActorSettings {
|
||||||
* @type {ApplicationClickAction}
|
* @type {ApplicationClickAction}
|
||||||
*/
|
*/
|
||||||
static async #removeExperience(_, target) {
|
static async #removeExperience(_, target) {
|
||||||
|
const experience = this.actor.system.experiences[target.dataset.experience];
|
||||||
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
|
window: {
|
||||||
|
title: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.title', {
|
||||||
|
type: game.i18n.localize(`DAGGERHEART.GENERAL.Experience.single`),
|
||||||
|
name: experience.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
content: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.text', { name: experience.name })
|
||||||
|
});
|
||||||
|
if (!confirmed) return;
|
||||||
|
|
||||||
await this.actor.update({ [`system.experiences.-=${target.dataset.experience}`]: null });
|
await this.actor.update({ [`system.experiences.-=${target.dataset.experience}`]: null });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,10 +82,24 @@ export default class DHEnvironmentSettings extends DHBaseActorSettings {
|
||||||
static async #deleteAdversary(event, target) {
|
static async #deleteAdversary(event, target) {
|
||||||
const adversaryKey = target.dataset.adversary;
|
const adversaryKey = target.dataset.adversary;
|
||||||
const path = `system.potentialAdversaries.${target.dataset.potentialAdversary}.adversaries`;
|
const path = `system.potentialAdversaries.${target.dataset.potentialAdversary}.adversaries`;
|
||||||
console.log(target.dataset.potentialAdversar);
|
const property = foundry.utils.getProperty(this.actor, path);
|
||||||
const newAdversaries = foundry.utils
|
const adversary = property.find(x => (x?.uuid ?? x) === adversaryKey);
|
||||||
.getProperty(this.actor, path)
|
|
||||||
.filter(x => x && (x?.uuid ?? x) !== adversaryKey);
|
if (adversary) {
|
||||||
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
|
window: {
|
||||||
|
title: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.title', {
|
||||||
|
type: game.i18n.localize('TYPES.Actor.adversary'),
|
||||||
|
name: adversary.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
content: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.text', { name: adversary.name })
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!confirmed) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const newAdversaries = property.filter(x => x && (x?.uuid ?? x) !== adversaryKey);
|
||||||
await this.actor.update({ [path]: newAdversaries });
|
await this.actor.update({ [path]: newAdversaries });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -249,7 +249,23 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
||||||
{
|
{
|
||||||
name: 'DAGGERHEART.Sheets.PC.ContextMenu.Delete',
|
name: 'DAGGERHEART.Sheets.PC.ContextMenu.Delete',
|
||||||
icon: '<i class="fa-solid fa-trash"></i>',
|
icon: '<i class="fa-solid fa-trash"></i>',
|
||||||
callback: el => getItem(el).delete()
|
callback: async el => {
|
||||||
|
const item = getItem(el);
|
||||||
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
|
window: {
|
||||||
|
title: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.title', {
|
||||||
|
type: game.i18n.localize(`TYPES.${item.documentName}.${item.type}`),
|
||||||
|
name: item.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
content: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.text', {
|
||||||
|
name: item.name
|
||||||
|
})
|
||||||
|
});
|
||||||
|
if (!confirmed) return;
|
||||||
|
|
||||||
|
item.delete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
@ -372,7 +388,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
||||||
li.hidden = !(menu.has(item.id) && matchesSearch);
|
li.hidden = !(menu.has(item.id) && matchesSearch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/* Filter Menus */
|
/* Filter Menus */
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|
@ -495,7 +511,7 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
||||||
const config = {
|
const config = {
|
||||||
event: event,
|
event: event,
|
||||||
title: `${game.i18n.localize('DAGGERHEART.GENERAL.dualityRoll')}: ${this.actor.name}`,
|
title: `${game.i18n.localize('DAGGERHEART.GENERAL.dualityRoll')}: ${this.actor.name}`,
|
||||||
headerTitle: game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilitychecktitle', {
|
headerTitle: game.i18n.format('DAGGERHEART.UI.Chat.dualityRoll.abilityCheckTitle', {
|
||||||
ability: abilityLabel
|
ability: abilityLabel
|
||||||
}),
|
}),
|
||||||
roll: {
|
roll: {
|
||||||
|
|
|
||||||
|
|
@ -42,9 +42,12 @@ export default class DHBaseActorSettings extends DHApplicationMixin(DocumentShee
|
||||||
/**@inheritdoc */
|
/**@inheritdoc */
|
||||||
async _prepareContext(options) {
|
async _prepareContext(options) {
|
||||||
const context = await super._prepareContext(options);
|
const context = await super._prepareContext(options);
|
||||||
context.systemFields.attack.fields = this.actor.system.attack.schema.fields;
|
|
||||||
context.isNPC = this.actor.isNPC;
|
context.isNPC = this.actor.isNPC;
|
||||||
|
|
||||||
|
if (context.systemFields.attack) {
|
||||||
|
context.systemFields.attack.fields = this.actor.system.attack.schema.fields;
|
||||||
|
}
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,6 @@ export default function DHApplicationMixin(Base) {
|
||||||
*/
|
*/
|
||||||
static async #createDoc(event, button) {
|
static async #createDoc(event, button) {
|
||||||
const { documentClass, type } = button.dataset;
|
const { documentClass, type } = button.dataset;
|
||||||
console.log(documentClass, type);
|
|
||||||
const parent = this.document;
|
const parent = this.document;
|
||||||
|
|
||||||
const cls = getDocumentClass(documentClass);
|
const cls = getDocumentClass(documentClass);
|
||||||
|
|
@ -250,7 +249,23 @@ export default function DHApplicationMixin(Base) {
|
||||||
*/
|
*/
|
||||||
static async #deleteDoc(_event, button) {
|
static async #deleteDoc(_event, button) {
|
||||||
const { type, docId } = button.dataset;
|
const { type, docId } = button.dataset;
|
||||||
await this.document.getEmbeddedDocument(type, docId, { strict: true }).delete();
|
const document = this.document.getEmbeddedDocument(type, docId, { strict: true });
|
||||||
|
const typeName = game.i18n.localize(
|
||||||
|
document.type === 'base' ? `DOCUMENT.${type}` : `TYPES.${type}.${document.type}`
|
||||||
|
);
|
||||||
|
|
||||||
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
|
window: {
|
||||||
|
title: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.title', {
|
||||||
|
type: typeName,
|
||||||
|
name: document.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
content: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.text', { name: document.name })
|
||||||
|
});
|
||||||
|
if (!confirmed) return;
|
||||||
|
|
||||||
|
await document.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -139,6 +139,19 @@ export default class DHBaseItemSheet extends DHApplicationMixin(ItemSheetV2) {
|
||||||
static async #removeAction(event, button) {
|
static async #removeAction(event, button) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const actionIndex = button.closest('[data-index]').dataset.index;
|
const actionIndex = button.closest('[data-index]').dataset.index;
|
||||||
|
const action = this.document.system.actions[actionIndex];
|
||||||
|
|
||||||
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
|
window: {
|
||||||
|
title: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.title', {
|
||||||
|
type: game.i18n.localize(`DAGGERHEART.GENERAL.Action.single`),
|
||||||
|
name: action.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
content: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.text', { name: action.name })
|
||||||
|
});
|
||||||
|
if (!confirmed) return;
|
||||||
|
|
||||||
await this.document.update({
|
await this.document.update({
|
||||||
'system.actions': this.document.system.actions.filter((_, index) => index !== Number.parseInt(actionIndex))
|
'system.actions': this.document.system.actions.filter((_, index) => index !== Number.parseInt(actionIndex))
|
||||||
});
|
});
|
||||||
|
|
@ -180,6 +193,20 @@ export default class DHBaseItemSheet extends DHApplicationMixin(ItemSheetV2) {
|
||||||
static async #removeFeature(event, button) {
|
static async #removeFeature(event, button) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const target = button.closest('.feature-item');
|
const target = button.closest('.feature-item');
|
||||||
|
const feature = this.document.system.features.find(x => x && x.id === target.id);
|
||||||
|
|
||||||
|
if (feature) {
|
||||||
|
const confirmed = await foundry.applications.api.DialogV2.confirm({
|
||||||
|
window: {
|
||||||
|
title: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.title', {
|
||||||
|
type: game.i18n.localize(`TYPES.Item.feature`),
|
||||||
|
name: feature.name
|
||||||
|
})
|
||||||
|
},
|
||||||
|
content: game.i18n.format('DAGGERHEART.APPLICATIONS.DeleteConfirmation.text', { name: feature.name })
|
||||||
|
});
|
||||||
|
if (!confirmed) return;
|
||||||
|
}
|
||||||
|
|
||||||
await this.document.update({
|
await this.document.update({
|
||||||
'system.features': this.document.system.features
|
'system.features': this.document.system.features
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue