@@ -700,37 +667,37 @@
/* ─── Folder modal (create / rename) ─── */
let _editingFolderId = null;
+ let _folderModal = null;
- function openFolderModal() {
- _editingFolderId = null;
- document.getElementById('fm-title').textContent = 'Новая папка';
- document.getElementById('fm-save').textContent = 'Создать';
- document.getElementById('fm-name').value = '';
- document.getElementById('fm-error').textContent = '';
- document.getElementById('folder-modal').classList.add('open');
- setTimeout(() => document.getElementById('fm-name').focus(), 80);
+ function openFolderModal(opts = {}) {
+ _editingFolderId = opts.id || null;
+ const isRename = !!_editingFolderId;
+ const body = `
+
+
+
+
`;
+ _folderModal = LS.modal({
+ title: isRename ? 'Переименовать папку' : 'Новая папка',
+ content: body, size: 'sm',
+ actions: [
+ { label: 'Отмена', onClick: () => _folderModal.close() },
+ { label: isRename ? 'Сохранить' : 'Создать', primary: true, id: 'fm-save', onClick: saveFolderModal },
+ ],
+ });
+ // Enter to submit
+ const nameEl = _folderModal.body.querySelector('#fm-name');
+ nameEl.addEventListener('keydown', e => { if (e.key === 'Enter') saveFolderModal(); });
+ if (isRename) setTimeout(() => nameEl.select(), 50);
}
function openRenameFolder(id, name) {
- _editingFolderId = id;
- document.getElementById('fm-title').textContent = 'Переименовать папку';
- document.getElementById('fm-save').textContent = 'Сохранить';
- document.getElementById('fm-name').value = name;
- document.getElementById('fm-error').textContent = '';
- document.getElementById('folder-modal').classList.add('open');
- setTimeout(() => { const n = document.getElementById('fm-name'); n.focus(); n.select(); }, 80);
- }
-
- function closeFolderModal() {
- document.getElementById('folder-modal').classList.remove('open');
+ openFolderModal({ id, name });
}
async function saveFolderModal() {
const name = document.getElementById('fm-name').value.trim();
- const errEl = document.getElementById('fm-error');
- errEl.textContent = '';
- if (!name) { errEl.textContent = 'Введите название папки'; return; }
-
+ if (!name) { _folderModal?.setError('Введите название папки'); return; }
const btn = document.getElementById('fm-save');
btn.disabled = true;
try {
@@ -738,7 +705,6 @@
await LS.renameFolder(_editingFolderId, name);
const fo = allFolders.find(f => f.id === _editingFolderId);
if (fo) fo.name = name;
- // update breadcrumb if we're inside this folder
if (currentFolder === _editingFolderId) {
document.getElementById('lib-bc-name').textContent = name;
}
@@ -746,22 +712,15 @@
const { id } = await LS.createFolder(name);
allFolders.push({ id, name, file_count: 0 });
}
- closeFolderModal();
+ _folderModal?.close();
render();
} catch (e) {
- errEl.textContent = e.message;
+ _folderModal?.setError(e.message);
} finally {
btn.disabled = false;
}
}
- // Allow Enter key in folder name input
- document.addEventListener('DOMContentLoaded', () => {
- document.getElementById('fm-name').addEventListener('keydown', e => {
- if (e.key === 'Enter') saveFolderModal();
- });
- });
-
async function doDeleteFolder(id, name) {
if (!await LS.confirm(`Удалить папку «${name}»? Файлы внутри переместятся в корневую папку.`, { title: 'Удалить папку', confirmText: 'Удалить' })) return;
try {
@@ -925,19 +884,25 @@
/* ─── Move file modal ─── */
let _movingFileId = null;
+ let _moveModal = null;
function openMoveModal(fileId) {
_movingFileId = fileId;
- document.getElementById('mv-error').textContent = '';
- const sel = document.getElementById('mv-folder');
const currentFolderId = allFiles.find(f => f.id === fileId)?.folder_id || '';
- sel.innerHTML = `
` +
+ const options = `
` +
allFolders.map(fo => `
`).join('');
- document.getElementById('move-modal').classList.add('open');
- }
-
- function closeMoveModal() {
- document.getElementById('move-modal').classList.remove('open');
+ const body = `
+
+
+
+
`;
+ _moveModal = LS.modal({
+ title: 'Переместить файл', content: body, size: 'sm',
+ actions: [
+ { label: 'Отмена', onClick: () => _moveModal.close() },
+ { label: 'Переместить', primary: true, id: 'mv-save', onClick: doMoveFile },
+ ],
+ });
}
async function doMoveFile() {
@@ -948,11 +913,11 @@
await LS.moveFile(_movingFileId, folderId ? Number(folderId) : null);
const f = allFiles.find(f => f.id === _movingFileId);
if (f) f.folder_id = folderId ? Number(folderId) : null;
- closeMoveModal();
+ _moveModal?.close();
render();
LS.toast('Файл перемещён', 'success');
} catch (e) {
- document.getElementById('mv-error').textContent = e.message;
+ _moveModal?.setError(e.message);
} finally {
btn.disabled = false;
}