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
+15 -1
View File
@@ -2,6 +2,7 @@ import { listZipFiles } from '../zip/list_zip_files.js';
import { addFileWithDedup } from './add_file_with_dedup.js';
import { rebaseTree } from './rebase_tree.js';
import { render } from './render.js';
import { lstFilter } from './lst_filter.js';
/**
* Создаёт async-обработчик выбора каталога через webkitdirectory.
@@ -25,7 +26,20 @@ export function onFolderChange(state, cfg, elements) {
if (elements.statusEl) elements.statusEl.textContent = '';
try {
const roots = new Map();
for (const file of Array.from(elements.folderInputEl.files)) {
// Manifest-фильтр: при наличии корневого `obscure.lst` набор файлов
// ограничивается его правилами, а сам manifest в дерево не попадает.
// Без manifest модуль возвращает исходный список без изменений.
const filtered = await lstFilter(elements.folderInputEl.files, [...cfg.allowedExt, '.zip']);
if (filtered.manifest) {
// Диагностику показываем в statusEl: ошибки строк и предупреждения правил.
const messages = filtered.diagnostics.map((item) => (
item.line ? `строка ${item.line}: ${item.message}` : item.message
));
if (messages.length && elements.statusEl) {
elements.statusEl.textContent = messages.join('; ');
}
}
for (const file of filtered.files) {
// Для webkitdirectory путь начинается с выбранной корневой папки.
const parts = (file.webkitRelativePath || file.name).split('/');
const relativePath = parts.slice(1).join('/') || file.name;