(function () { var folder = (window.__OP__ || {}).folder var ctxMenu = document.getElementById('ctxMenu') var targetId = null var targetTitle = null function showCtx(x, y) { ctxMenu.style.left = x + 'px' ctxMenu.style.top = y + 'px' ctxMenu.hidden = false } function hideCtx() { ctxMenu.hidden = true } document.querySelectorAll('.adminVideo').forEach(function (card) { card.addEventListener('contextmenu', function (e) { e.preventDefault() targetId = card.getAttribute('data-id') targetTitle = card.getAttribute('data-title') 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 === 'edit') { location.href = '/op/folder/' + encodeURIComponent(folder) + '/video/editor?id=' + encodeURIComponent(targetId) } else if (action === 'rename') { var t = window.prompt('새 영상 제목', targetTitle) if (t && t !== targetTitle) { fetch('/op/folder/' + encodeURIComponent(folder) + '/video/rename', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ id: targetId, title: t }) }).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('"' + targetTitle + '" 영상을 정말 삭제할까요?')) { fetch('/op/folder/' + encodeURIComponent(folder) + '/video/delete', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ id: targetId }) }).then(function (r) { return r.json() }).then(function (j) { if (j.ok) location.reload() else alert(j.message || '삭제 실패') }) } } hideCtx() }) })()