From 2764ab1cb5f07d17c340ad18e11b32f4bdaa8e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 26 Jun 2026 09:53:07 +0400 Subject: [PATCH] =?UTF-8?q?v1.0.178:=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BF=D0=BE=20ZIP=20?= =?UTF-8?q?=D0=B2=20renderFiles=20=E2=80=94=20=D0=B7=D0=B0=D0=B3=D0=BE?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=D0=BE=D0=BA-=D1=81=D0=B5=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=F0=9F=93=A6=20+=20=D0=BE=D1=82=D1=81=D1=82=D1=83?= =?UTF-8?q?=D0=BF=2024px=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BB=D0=BE=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/files.js | 57 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/deploy/files.js b/deploy/files.js index 9b32903..a025050 100644 --- a/deploy/files.js +++ b/deploy/files.js @@ -53,10 +53,51 @@ function statusToHTML(st) { function renderFiles(state) { if (state.files.length === 0) { fileTable.innerHTML = 'Нет файлов — выберите .docx / .pdf'; - } else { - fileTable.innerHTML = state.files.map(function(f, i) { - var rows = '' + - '' + + lucide.createIcons(); + return; + } + + // Сгруппировать файлы по zip_source + var groups = []; // [{zip: "name.zip"|null, files: [f, ...]}] + var seen = {}; + for (var i = 0; i < state.files.length; i++) { + var f = state.files[i]; + var zip = f.zip_source || null; + var key = zip || '__naked__'; + if (!seen[key]) { + seen[key] = { zip: zip, files: [] }; + groups.push(seen[key]); + } + // Сохраняем оригинальный индекс для id строк + f._idx = i; + seen[key].files.push(f); + } + + // Рендер: заголовок ZIP → файлы с отступом + var rows = []; + for (var gi = 0; gi < groups.length; gi++) { + var g = groups[gi]; + + if (g.zip) { + // Заголовок-секция ZIP + rows.push( + '' + + '' + + '📦 ' + escHtml(g.zip) + ' — ' + g.files.length + ' файл.' + + (g.files.length === 1 ? '' : 'ов') + + '' + ); + } + + // Файлы внутри группы (с отступом если из ZIP) + for (var fi = 0; fi < g.files.length; fi++) { + var f = g.files[fi]; + var i = f._idx; + var indent = g.zip ? 'padding-left:24px;' : ''; + + rows.push( + '' + + '' + (f.doc_id ? '' : '') + escHtml(f.name) + '' + '' + formatDate(f.lastModified) + '' + @@ -65,10 +106,12 @@ function renderFiles(state) { '' + '' + '' + - 'Загрузка...'; - return rows; - }).join(''); + 'Загрузка...' + ); + } } + + fileTable.innerHTML = rows.join(''); lucide.createIcons(); }