- копирую модуль upload/ из drhider (слои 1-2) - blueprint: параметр sink (drhider-сессия по умолчанию, сверка — DB+парсинг) - upload_bp: contracts_upload_sink = _store_and_parse - routes: регистрирую create_upload_refs_blueprint(cfg, sink=...) - app.py: корень репо в sys.path (для import upload) - History: план переиспользования + ревью Соннета
20 lines
733 B
JavaScript
20 lines
733 B
JavaScript
// rmFile — удалить файл из списка (если не busy).
|
|
|
|
import { render } from './render.js';
|
|
|
|
export function rmFile(state, els, cfg, i) {
|
|
if (state.busy) return;
|
|
const nm = state.files[i].name;
|
|
state.overNames.delete(nm);
|
|
state.fileMeta.delete(nm);
|
|
state.files.splice(i, 1);
|
|
// Синхронизировать input.files (DataTransfer) — чтобы повторный выбор того же
|
|
// файла сработал (change не сработает, если files не обновлён).
|
|
if (els.fileInput && els.fileInput.files) {
|
|
const d = new DataTransfer();
|
|
state.files.forEach(f => d.items.add(f));
|
|
els.fileInput.files = d.files;
|
|
}
|
|
render(state, els, cfg);
|
|
}
|