Build music-quiz installer and management site per spec
Implements the full spec described in README.md: Management site (Node + TypeScript + Express + EJS): - Public main page lists packs registered in manifest.json. - /op login (account.json, internal-only), /op/dashboard manages packs with horizontal-scroll cards, add/select-and-delete flow, and the /op/dashboard/:packName editor (Mojang release dropdown, dynamic mods/resourcepacks lists, platform/RAM fields, file rename). - Routes for /manifest.json (public) and /file/* (server pack files). - Middleware blocks /account.json and /manifest/* directory access. Installer (Electron): - Five page renderer driven by IPC (preload contextBridge API): pack pick → single/multi → server install (path no-Korean check, JDK detect, file download, EULA, RAM gating, local web config editor, UPnP/port-forward check) → client install (.mc_custom mods + resourcepacks + launcher_profiles.json gameDir/javaArgs) → finish toggles (server folder, shortcut, server start, launcher start). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
30
views/partials/navbar.ejs
Normal file
30
views/partials/navbar.ejs
Normal file
@@ -0,0 +1,30 @@
|
||||
<header class="topNav">
|
||||
<a class="navBrand" href="/op/dashboard">
|
||||
<span class="navLogo">🎵</span>
|
||||
<span class="navTitle">관리자 페이지</span>
|
||||
</a>
|
||||
<div class="navUser">
|
||||
<button type="button" class="navUserButton" id="userMenuToggle"><%= userId %></button>
|
||||
<div class="navUserMenu" id="userMenu" hidden>
|
||||
<form method="post" action="/op/logout">
|
||||
<button type="submit" class="dangerLink">로그아웃</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<script>
|
||||
(function () {
|
||||
var toggle = document.getElementById('userMenuToggle')
|
||||
var menu = document.getElementById('userMenu')
|
||||
if (!toggle || !menu) return
|
||||
toggle.addEventListener('click', function () {
|
||||
var hidden = menu.hasAttribute('hidden')
|
||||
if (hidden) menu.removeAttribute('hidden')
|
||||
else menu.setAttribute('hidden', '')
|
||||
})
|
||||
document.addEventListener('click', function (event) {
|
||||
if (event.target === toggle || menu.contains(event.target)) return
|
||||
menu.setAttribute('hidden', '')
|
||||
})
|
||||
})()
|
||||
</script>
|
||||
Reference in New Issue
Block a user