From d9ba4569c7fd604f5f964ae9e5eb58eb36793cc9 Mon Sep 17 00:00:00 2001 From: Vlyan Date: Sun, 27 Mar 2022 11:52:38 +0200 Subject: [PATCH] Better demeanor autocomplete handling --- system/scripts/actors/base-sheet.js | 7 +++++++ system/scripts/actors/npc-sheet.js | 25 ++++++++++++++++++++++++- system/scripts/helpers.js | 7 +++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/system/scripts/actors/base-sheet.js b/system/scripts/actors/base-sheet.js index f31cabe..bb604c3 100644 --- a/system/scripts/actors/base-sheet.js +++ b/system/scripts/actors/base-sheet.js @@ -118,6 +118,13 @@ export class BaseSheetL5r5e extends ActorSheet { * @override */ async _updateObject(event, formData) { + // Remove autocomplete list name/index if exist + if (formData["autoCompleteListName"] || formData["autoCompleteListSelectedIndex"]) { + delete formData["autoCompleteListName"]; + delete formData["autoCompleteListSelectedIndex"]; + } + + // Symbols ["data.notes", "data.description"].forEach((name) => { if (!formData[name]) { return; diff --git a/system/scripts/actors/npc-sheet.js b/system/scripts/actors/npc-sheet.js index cf35343..1569063 100644 --- a/system/scripts/actors/npc-sheet.js +++ b/system/scripts/actors/npc-sheet.js @@ -70,7 +70,7 @@ export class NpcSheetL5r5e extends BaseCharacterSheetL5r5e { html, "data.attitude", CONFIG.l5r5e.demeanors.map((e) => { - let modifiers = []; + const modifiers = []; Object.entries(e.mod).forEach(([k, v]) => { modifiers.push(`${game.i18n.localize(`l5r5e.rings.${k}`)} ${v}`); }); @@ -78,4 +78,27 @@ export class NpcSheetL5r5e extends BaseCharacterSheetL5r5e { }) ); } + + /** + * Update the actor. + * @param event + * @param formData + */ + _updateObject(event, formData) { + // Redo the demeanor to set the rings data + if (formData["autoCompleteListName"] === "data.attitude" && formData["autoCompleteListSelectedIndex"] >= 0) { + const demeanor = CONFIG.l5r5e.demeanors[formData["autoCompleteListSelectedIndex"]] || null; + if (demeanor) { + formData["data.attitude"] = game.i18n.localize(`l5r5e.demeanor.${demeanor.id}`); + CONFIG.l5r5e.stances.forEach((ring) => { + formData[`data.rings_affinities.${ring}`] = 0; + }); + Object.entries(demeanor.mod).forEach(([k, v]) => { + formData[`data.rings_affinities.${k}`] = v; + }); + } + } + + return super._updateObject(event, formData); + } } diff --git a/system/scripts/helpers.js b/system/scripts/helpers.js index e5f4990..759f188 100644 --- a/system/scripts/helpers.js +++ b/system/scripts/helpers.js @@ -780,6 +780,12 @@ export class HelpersL5r5e { inp.addEventListener("change", (e) => { if (e.doSubmit) { closeAllLists(); + if (e.autoCompleteSelectedIndex) { + $(inp).prepend( + `` + + `` + ); + } $(inp).parent().submit(); return true; } @@ -836,6 +842,7 @@ export class HelpersL5r5e { const changeEvt = new Event("change"); changeEvt.doSubmit = true; + changeEvt.autoCompleteSelectedIndex = selectedIndex; inp.dispatchEvent(changeEvt); }); listDiv.appendChild(choiceDiv);