diff --git a/src/main/resources/static/css/question/chatbot.css b/src/main/resources/static/css/question/chatbot.css index 5e0aee9b..b54d48d6 100644 --- a/src/main/resources/static/css/question/chatbot.css +++ b/src/main/resources/static/css/question/chatbot.css @@ -28,7 +28,6 @@ position: relative; width: fit-content; margin-top: -2px; - font-family: "NanumSquare Neo OTF-cBd", Helvetica; font-size: 20px; line-height: 40px; color: #000000; diff --git a/src/main/resources/static/js/translateTextForHtml.js b/src/main/resources/static/js/translateTextForHtml.js index 1b9fb8d0..d2213083 100644 --- a/src/main/resources/static/js/translateTextForHtml.js +++ b/src/main/resources/static/js/translateTextForHtml.js @@ -5,11 +5,7 @@ document.addEventListener("DOMContentLoaded", function () { // 초기 로딩된 요소에 대해 포맷팅 적용 classesToFormat.forEach(classNames => { document.querySelectorAll(`.${classNames.replace(' ', '.')}`).forEach(element => { - if (classNames === 'message user') { - formatTextWithLineBreakOnly(element); - } else { - formatElementText(element); - } + formatElement(element, classNames); }); }); @@ -18,16 +14,12 @@ document.addEventListener("DOMContentLoaded", function () { mutationsList.forEach(function (mutation) { mutation.addedNodes.forEach(function (node) { if (node.nodeType === Node.ELEMENT_NODE) { - classesToFormat.some(classNames => { - if (node.classList.contains(...classNames.split(' '))) { - if (classNames === 'message user') { - formatTextWithLineBreakOnly(node); - } else { - formatElementText(node); - } - return true; + classesToFormat.forEach(classNames => { + const classList = classNames.split(' '); + // 모든 클래스가 있는지 확인 + if (classList.every(className => node.classList.contains(className))) { + formatElement(node, classNames); } - return false; }); } }); @@ -39,20 +31,43 @@ document.addEventListener("DOMContentLoaded", function () { }); // 포맷팅 함수 +function formatElement(element, classNames) { + + if (classNames === 'message user') { + formatTextWithLineBreakOnly(element); + } else { + formatElementText(element); + } +} + function formatElementText(element) { - let formattedText = element.textContent.replace(/\n/g, '
'); + // element의 텍스트를 줄바꿈으로 나누어 배열로 저장 + let lines = element.textContent.split('\n'); + + // 각 줄을 처리하여 포맷팅 + let formattedLines = lines.map(line => { + let formattedLine = line; - // #으로 시작하는 텍스트를 대제목과 소제목으로 변환 - formattedText = formattedText.replace(/^### (.*?)(|$)/gm, '$1'); - formattedText = formattedText.replace(/^## (.*?)(|$)/gm, '$1'); - formattedText = formattedText.replace(/^# (.*?)(|$)/gm, '$1'); + // 줄의 시작 부분에서 #을 확인하여 대제목과 소제목으로 변환 + if (formattedLine.startsWith('# ')) { + formattedLine = formattedLine.replace(/^# (.*)/, '$1'); + } else if (formattedLine.startsWith('## ')) { + formattedLine = formattedLine.replace(/^## (.*)/, '$1'); + } else if (formattedLine.startsWith('### ')) { + formattedLine = formattedLine.replace(/^### (.*)/, '$1'); + } - // **로 둘러싸인 단어를 굵게 표시 - formattedText = formattedText.replace(/\*\*(.*?)\*\*/g, '$1'); + // **로 둘러싸인 단어를 굵게 표시 + formattedLine = formattedLine.replace(/\*\*(.*?)\*\*/g, '$1'); - element.innerHTML = formattedText; + return formattedLine; // 포맷팅된 줄 반환 + }); + + // 포맷팅된 줄들을 다시 줄바꿈으로 연결 + element.innerHTML = formattedLines.join('
'); } + // message.user와 같이 줄바꿈만 적용 function formatTextWithLineBreakOnly(element) { element.innerHTML = element.textContent.replace(/\n/g, '
');