From 553665c61ed1799ba8d3bb22ba50e0023c0de7b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Mon, 1 Jun 2026 22:56:11 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=E2=80=94=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D1=8B=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA,=20=D0=B6=D0=B8=D1=80=D0=BD=D1=8B=D0=B9,=20?= =?UTF-8?q?=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B8,=20=D1=86=D0=B2=D0=B5?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D0=B5=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 35 +++++++++++++++++++++++++++++++---- public/style.css | 14 +++++++++++--- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/public/index.html b/public/index.html index 2761af5..ffe85ef 100644 --- a/public/index.html +++ b/public/index.html @@ -63,13 +63,40 @@ document.querySelectorAll('.hitem').forEach(el => { el.onclick = () => { const h = history[+el.dataset.idx]; - chat.innerHTML += '
📋 ' + esc(h.q) + '
'; - chat.innerHTML += '
🤖 ' + esc(h.a) + '
'; + chat.innerHTML += '
📋 ' + fmt(h.q) + '
'; + chat.innerHTML += '
🤖 ' + fmt(h.a) + '
'; chat.scrollTop = chat.scrollHeight; }; }); } function esc(s) { return String(s).replace(//g,'>'); } + function fmt(s) { + s = esc(s); + // Заменяем **жирный** + s = s.replace(/\*\*(.+?)\*\*/g, '$1'); + // Заменяем `код` + s = s.replace(/`(.+?)`/g, '$1'); + // Заменяем *курсив* + s = s.replace(/\*(.+?)\*/g, '$1'); + // Горизонтальная линия --- + s = s.replace(/^---+/gm, '
'); + // Заголовки ### + s = s.replace(/^### (.+)$/gm, '

$1

'); + s = s.replace(/^## (.+)$/gm, '

$1

'); + s = s.replace(/^# (.+)$/gm, '

$1

'); + // Маркированный список + s = s.replace(/^[•\-*] (.+)$/gm, '
  • $1
  • '); + s = s.replace(/(
  • [\s\S]*?<\/li>)/g, ''); + // Нумерованный список + s = s.replace(/^\d+\.\s+(.+)$/gm, '
  • $1
  • '); + // Абзацы (двойной перенос строки) + s = s.replace(/\n\n+/g, '

    '); + // Одинарный перенос →
    + s = s.replace(/\n/g, '
    '); + // Убираем пустые