diff --git a/Dev_Docs/Pending_Features/2026-05-19_1613_dm-ctrl-enter-автоскролл-и-время-в-списке.md b/Dev_Docs/Pending_Features/2026-05-19_1613_dm-ctrl-enter-автоскролл-и-время-в-списке.md new file mode 100644 index 0000000..4c31463 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-05-19_1613_dm-ctrl-enter-автоскролл-и-время-в-списке.md @@ -0,0 +1,28 @@ +# DM: Ctrl+Enter, автоскролл и время в списке + +- Статус: `pending` + +## Что сделано + +- Исправлено поведение ввода в чате: + - `Enter` отправляет сообщение; + - `Ctrl+Enter` добавляет перенос строки в поле ввода. +- В списке личных сообщений время последнего сообщения всегда отображается в правой колонке снизу. +- Бейдж непрочитанных сообщений (если есть) отображается над временем, не заменяя его. +- Обновлены стили карточки диалога для компактного и стабильного выравнивания. + +## Что проверять + +- В чате: + - нажать `Ctrl+Enter` в середине текста и убедиться, что вставляется новая строка; + - нажать `Enter` и убедиться, что сообщение отправляется. +- В списке диалогов: + - при `unread=0` справа снизу показывается время; + - при `unread>0` сверху бейдж, снизу всё равно показывается время; + - длинный текст последнего сообщения обрезается многоточием и не наезжает на время. + +## Ожидаемый результат + +- Управление вводом работает как в постановке. +- Время в карточке диалога не исчезает при наличии непрочитанных сообщений. +- Верстка карточки остаётся компактной и без сдвигов. diff --git a/VERSION.properties b/VERSION.properties index f6a9b74..d8ba1f9 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.72 -server.version=1.2.66 +client.version=1.2.73 +server.version=1.2.67 diff --git a/shine-UI/js/pages/chat-view.js b/shine-UI/js/pages/chat-view.js index 640c042..d6c3375 100644 --- a/shine-UI/js/pages/chat-view.js +++ b/shine-UI/js/pages/chat-view.js @@ -418,7 +418,21 @@ export function render({ navigate, route }) { input?.addEventListener('input', () => autoResizeComposer(input)); input?.addEventListener('keydown', async (event) => { if (event.key !== 'Enter') return; - if (event.ctrlKey) return; + if (event.ctrlKey) { + event.preventDefault(); + const start = Number(input.selectionStart ?? input.value.length); + const end = Number(input.selectionEnd ?? input.value.length); + const value = String(input.value || ''); + input.value = `${value.slice(0, start)}\n${value.slice(end)}`; + const nextPos = start + 1; + try { + input.setSelectionRange(nextPos, nextPos); + } catch { + // ignore + } + autoResizeComposer(input); + return; + } event.preventDefault(); const text = String(input.value || '').trim(); if (!text) return; diff --git a/shine-UI/js/pages/messages-list.js b/shine-UI/js/pages/messages-list.js index 814bd5c..3ee0e5d 100644 --- a/shine-UI/js/pages/messages-list.js +++ b/shine-UI/js/pages/messages-list.js @@ -42,12 +42,12 @@ export function render({ navigate }) { row.className = 'list-item dm-dialog-card'; row.innerHTML = `