From ac727eb4922c80cb38d8b57181983e7ea7fae91d Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Wed, 17 Dec 2025 21:37:30 -0500 Subject: [PATCH] Support multiline adversary names --- .../sheets/api/application-mixin.mjs | 17 +++++++++++++++++ styles/less/global/elements.less | 7 ++++++- styles/less/sheets/actors/adversary/header.less | 10 +++++----- templates/sheets/actors/adversary/header.hbs | 5 +---- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/module/applications/sheets/api/application-mixin.mjs b/module/applications/sheets/api/application-mixin.mjs index b11fc779..0f3946f7 100644 --- a/module/applications/sheets/api/application-mixin.mjs +++ b/module/applications/sheets/api/application-mixin.mjs @@ -179,6 +179,7 @@ export default function DHApplicationMixin(Base) { super._attachPartListeners(partId, htmlElement, options); this._dragDrop.forEach(d => d.bind(htmlElement)); + // Handle delta inputs for (const deltaInput of htmlElement.querySelectorAll('input[data-allow-delta]')) { deltaInput.dataset.numValue = deltaInput.value; deltaInput.inputMode = 'numeric'; @@ -232,6 +233,22 @@ export default function DHApplicationMixin(Base) { handleUpdate(); }); } + + // Handle contenteditable + for (const input of htmlElement.querySelectorAll('[contenteditable][data-property]')) { + const property = input.dataset.property; + input.addEventListener("blur", () => { + const selection = document.getSelection(); + if (input.contains(selection.anchorNode)) { + selection.empty(); + } + this.document.update({ [property]: input.textContent }); + }); + + input.addEventListener("keydown", event => { + if (event.key === "Enter") input.blur(); + }); + } } /**@inheritdoc */ diff --git a/styles/less/global/elements.less b/styles/less/global/elements.less index 79deb99d..b0589351 100755 --- a/styles/less/global/elements.less +++ b/styles/less/global/elements.less @@ -6,7 +6,8 @@ input[type='text'], input[type='number'], - textarea { + textarea, + .input[contenteditable] { background: light-dark(transparent, transparent); border-radius: 6px; box-shadow: 0 4px 30px @soft-shadow; @@ -43,6 +44,10 @@ } } + .input[contenteditable] { + cursor: var(--cursor-text); + } + input[type='checkbox'], input[type='radio'] { &:checked::after { diff --git a/styles/less/sheets/actors/adversary/header.less b/styles/less/sheets/actors/adversary/header.less index d4a7812e..dda9398e 100644 --- a/styles/less/sheets/actors/adversary/header.less +++ b/styles/less/sheets/actors/adversary/header.less @@ -12,14 +12,14 @@ gap: 5px; align-items: center; justify-content: space-between; - padding: 0; - padding-top: 5px; - padding-bottom: 8px; + padding: 8px 0; flex: 1; - input[type='text'] { + h1 { + display: flex; + flex: 1; + padding: 6px 0 0 0; font-size: var(--font-size-32); - height: 42px; text-align: start; border: 1px solid transparent; outline: 2px solid transparent; diff --git a/templates/sheets/actors/adversary/header.hbs b/templates/sheets/actors/adversary/header.hbs index e6f829b8..81a79c3d 100644 --- a/templates/sheets/actors/adversary/header.hbs +++ b/templates/sheets/actors/adversary/header.hbs @@ -1,10 +1,7 @@
-

- -

+

{{source.name}}