(function () { var ctxMenu = document.getElementById('ctxMenu') var targetName = null function showCtx(x, y) { ctxMenu.style.left = x + 'px' ctxMenu.style.top = y + 'px' ctxMenu.hidden = false } function hideCtx() { ctxMenu.hidden = true; targetName = null } document.querySelectorAll('.adminFolder').forEach(function (card) { card.addEventListener('contextmenu', function (e) { e.preventDefault() targetName = card.getAttribute('data-name') showCtx(e.clientX, e.clientY) }) }) document.addEventListener('click', function (e) { if (!ctxMenu.contains(e.target)) hideCtx() }) ctxMenu.addEventListener('click', function (e) { var btn = e.target.closest('button') if (!btn) return var action = btn.getAttribute('data-action') if (action === 'rename') { var newName = window.prompt('새 폴더 이름', targetName) if (newName && newName !== targetName) { fetch('/op/folders/rename', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ oldName: targetName, newName: newName }) }).then(function (r) { return r.json() }).then(function (j) { if (j.ok) location.reload() else alert(j.message || '이름 변경 실패') }) } } else if (action === 'delete') { if (window.confirm('"' + targetName + '" 폴더를 정말 삭제할까요? 안의 영상이 모두 사라집니다.')) { fetch('/op/folders/delete', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ name: targetName }) }).then(function (r) { return r.json() }).then(function (j) { if (j.ok) location.reload() else alert(j.message || '삭제 실패') }) } } hideCtx() }) // 폴더 추가 모달 var addBtn = document.getElementById('addFolderBtn') var modal = document.getElementById('addFolderModal') var input = document.getElementById('addFolderInput') var cancelBtn = document.getElementById('addFolderCancel') var confirmBtn = document.getElementById('addFolderConfirm') function openModal() { modal.hidden = false; input.value = ''; setTimeout(function () { input.focus() }, 0) } function closeModal() { modal.hidden = true } addBtn.addEventListener('click', openModal) cancelBtn.addEventListener('click', closeModal) modal.addEventListener('click', function (e) { if (e.target === modal) closeModal() }) input.addEventListener('keydown', function (e) { if (e.key === 'Enter') confirmBtn.click() }) confirmBtn.addEventListener('click', function () { var name = input.value.trim() if (!name) return fetch('/op/folders', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ name: name }) }).then(function (r) { return r.json() }).then(function (j) { if (j.ok) location.reload() else alert(j.message || '폴더 생성 실패') }) }) })()