Add obscure.lst manifest filter for folder selection

This commit is contained in:
Repinoid
2026-10-24 08:45:45 +03:00
parent 3c0c3a2043
commit bbb05e361a
7 changed files with 937 additions and 13 deletions
+89 -3
View File
@@ -466,6 +466,9 @@
</p>
<div id="filePicker"></div>
<p class="sub" style="margin-top:6px;font-size:12px;">
Фильтр по маскам: положите в корень папки файл <code>obscure.lst</code>. Подробнее — кнопка HELP.
</p>
<div class="footer-bar">
<span id="fileCount">0 файлов</span>
@@ -938,15 +941,98 @@
style="display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:999;justify-content:center;align-items:center"
onclick="this.style.display='none'">
<div
style="background:var(--card);border-radius:12px;padding:24px;max-width:420px;box-shadow:0 4px 24px rgba(0,0,0,.15)"
style="background:var(--card);border-radius:12px;padding:24px;max-width:640px;max-height:85vh;overflow-y:auto;box-shadow:0 4px 24px rgba(0,0,0,.15);text-align:left"
onclick="event.stopPropagation()">
<h3 style="margin-bottom:12px">Obfuscator — обфускация документов</h3>
<p style="font-size:13px;color:var(--muted);line-height:1.6">
Загрузите документы (.docx, .doc, .pdf, .txt, .md, .zip) — получите ZIP-архив с обезличенными копиями.
Персональные данные, реквизиты компаний, телефоны, email и другие приватные сведения заменяются на обезличенные
коды.
CSV-файл с таблицей соответствия оригинал→замена скачивается отдельно.
коды. CSV-файл с таблицей соответствия оригинал→замена скачивается отдельно.
</p>
<h4 style="margin:18px 0 8px;font-size:14px">Выбор файлов через obscure.lst</h4>
<p style="font-size:13px;color:var(--muted);line-height:1.6">
Чтобы обработать не всю папку, а только нужные файлы, положите в <b>корень</b> выбранной папки файл
<code>obscure.lst</code> со списком масок. Тогда загружаются только файлы, подходящие под правила.
</p>
<ul style="font-size:13px;color:var(--muted);line-height:1.7;padding-left:20px;margin:8px 0">
<li>Файл ищется только в корне папки; имя без учёта регистра: <code>obscure.lst</code>,
<code>OBSCURE.LST</code>.</li>
<li>Если файла нет — обрабатываются все поддерживаемые документы (как раньше).</li>
<li>Сам <code>obscure.lst</code> не загружается и не обфусцируется.</li>
<li>Другие <code>.lst</code> игнорируются; вложенный <code>subdir/obscure.lst</code> фильтр не включает.</li>
<li>Пустой файл или только комментарии — не загрузится ничего; причина появится в строке статуса.</li>
</ul>
<h4 style="margin:18px 0 8px;font-size:14px">Синтаксис правил</h4>
<ul style="font-size:13px;color:var(--muted);line-height:1.7;padding-left:20px;margin:8px 0">
<li>Одна строка — одно правило; пустые строки игнорируются.</li>
<li><code>#</code> в начале строки — комментарий.</li>
<li><code>!</code> в начале строки — исключение (удаляет совпадения).</li>
<li>Пути задаются относительно выбранной папки; регистр не важен.</li>
<li>Включающие правила собирают файлы, исключения применяются после них.</li>
</ul>
<table style="width:100%;font-size:12px;border-collapse:collapse;margin:8px 0">
<tbody>
<tr>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);white-space:nowrap"><code>*</code></td>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);color:var(--muted)">любые символы в
одном сегменте (не <code>/</code>)</td>
</tr>
<tr>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);white-space:nowrap"><code>?</code></td>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);color:var(--muted)">ровно один символ,
кроме <code>/</code></td>
</tr>
<tr>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);white-space:nowrap"><code>**</code>
</td>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);color:var(--muted)">целый сегмент:
любые подпапки, включая текущую</td>
</tr>
<tr>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);white-space:nowrap"><code>[a-z]</code>,
<code>[abc]</code></td>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);color:var(--muted)">класс или диапазон
символов</td>
</tr>
<tr>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);white-space:nowrap"><code>[!a]</code>,
<code>[^a]</code></td>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);color:var(--muted)">любой символ, кроме
указанных</td>
</tr>
<tr>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);white-space:nowrap">
<code>reports/</code></td>
<td style="padding:4px 8px;border-bottom:1px solid var(--brand-gray);color:var(--muted)">то же, что
<code>reports/**</code> — всё поддерево</td>
</tr>
</tbody>
</table>
<p style="font-size:12px;color:var(--muted);line-height:1.6;margin:6px 0">
<code>*.pdf</code> — только PDF в корне, <code>**/*.pdf</code> — PDF в корне и во всех подпапках.
<code>a**b</code> внутри сегмента работает как <code>a*b</code>.
ZIP фильтруется по имени архива и затем раскрывается целиком.
</p>
<h4 style="margin:18px 0 8px;font-size:14px">Пример obscure.lst</h4>
<pre
style="font-size:12px;background:var(--brand-grey-light);border:1px solid var(--brand-gray);border-radius:8px;padding:10px 12px;overflow-x:auto;margin:8px 0"># Все PDF в корне и во вложенных папках
**/*.pdf
# Договоры в reports, начинающиеся с name
reports/name*.docx
# Исключить черновики и старые архивы
!**/*draft*.*
!archive/**</pre>
<p style="font-size:12px;color:#9a3412;line-height:1.6;margin:6px 0">
Если правило написано с ошибкой (абсолютный путь, <code>..</code>, незакрытый <code>[</code>),
оно пропускается, а номер строки с причиной показывается в строке статуса под таблицей.
</p>
<button class="btn" style="margin-top:12px;width:100%"
onclick="document.getElementById('helpModal').style.display='none'">Закрыть</button>
</div>