From 212c13bf16f9ff3f63d7e43c684e2b10c66cf1f1 Mon Sep 17 00:00:00 2001 From: hided62 Date: Thu, 27 Aug 2026 18:17:15 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9C=A0=EC=82=B0=20=EC=84=A4=EB=AA=85?= =?UTF-8?q?=EC=9D=98=20=EC=A4=84=EB=B0=94=EA=BF=88=EC=9D=84=20=EB=B3=B5?= =?UTF-8?q?=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 전투 특기와 유니크 경매 설명의 레거시 br 표기를 안전한 줄 단위 DOM으로 변환한다. Chromium 회귀로 실제 줄바꿈과 리터럴 태그 비노출을 검증한다. --- app/game-frontend/src/views/InheritView.vue | 23 +++++++++----- .../inheritance-management.spec.ts | 30 +++++++++++++++++-- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/app/game-frontend/src/views/InheritView.vue b/app/game-frontend/src/views/InheritView.vue index e5963ba8..910e388f 100644 --- a/app/game-frontend/src/views/InheritView.vue +++ b/app/game-frontend/src/views/InheritView.vue @@ -203,9 +203,15 @@ const specialNameMap = computed(() => { } return map; }); +const splitLegacyLineBreaks = (value: string): string[] => value.split(/|\r?\n/giu); const selectedSpecialWarInfo = computed( () => status.value?.availableSpecialWar.find((entry) => entry.key === nextSpecialKey.value)?.info ?? '' ); +const selectedSpecialWarInfoLines = computed(() => splitLegacyLineBreaks(selectedSpecialWarInfo.value)); +const selectedUniqueInfo = computed( + () => status.value?.availableUnique.find((item) => item.key === uniqueForm.itemId)?.info ?? '' +); +const selectedUniqueInfoLines = computed(() => splitLegacyLineBreaks(selectedUniqueInfo.value)); const availableUniqueGroups = computed(() => uniqueItemSlotOrder .map((slot) => ({ @@ -513,9 +519,10 @@ onMounted(() => { {{ - selectedSpecialWarInfo - }}
{{ specialNameMap.get(nextSpecialKey) }} 특기를 다음에 얻도록 지정합니다.
필요 포인트: {{ status.inheritConst.inheritSpecificSpecialPoint }} { /> 얻고자 하는 유니크 아이템으로 경매를 시작합니다. 24턴 동안 진행됩니다.
{{ - status.availableUnique.find((item) => item.key === uniqueForm.itemId)?.info - }}
+ >얻고자 하는 유니크 아이템으로 경매를 시작합니다. 24턴 동안 진행됩니다.