Files
jimi-gallery/admin/index.html
yakenator 098b55e3b0 feat: initial Jimi Gallery prototype
- Public site (Home/Artists/Exhibitions/News/About/Contact) with EN/KO/JA i18n
- Admin panel with login, CRUD, image upload, multilingual editing
- Exhibition slider/lightbox view
- FastAPI + MongoDB backend, JWT auth
- Docker Compose deployment, behind nginx at jimi.yakenator.io
2026-04-25 12:47:36 +09:00

66 lines
2.8 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Jimi Gallery Admin — Sign in</title>
<link
href="https://fonts.googleapis.com/css2?family=Cinzel:wght@500;600&family=Cormorant+Garamond:wght@400;500;600&family=Inter:wght@300;400;500&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="admin.css" />
</head>
<body>
<div class="login-lang-wrap"></div>
<div class="login-wrap">
<form class="login-card" id="f">
<h1>
<svg class="brand-mark" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<circle cx="50" cy="50" r="50" fill="#6b3d8f"/>
<g fill="#ffffff" font-family="'Cormorant Garamond','Playfair Display','Times New Roman',serif" font-weight="500" font-style="italic">
<text x="37" y="70" text-anchor="middle" font-size="60">J</text>
<text x="63" y="70" text-anchor="middle" font-size="60">M</text>
</g>
</svg>
<span>
<span class="brand-word">Jimi Gallery</span>
<span class="brand-sub" id="login-role"></span>
</span>
</h1>
<label for="pw" id="pw-label"></label>
<input type="password" id="pw" autofocus autocomplete="current-password" />
<div class="error" id="err"></div>
<button class="btn" style="width:100%;margin-top:12px" type="submit" id="submit-btn"></button>
<div class="hint"><span id="hint-text"></span> <code>admin</code></div>
</form>
</div>
<script src="../assets/i18n.js"></script>
<script src="../assets/data.js"></script>
<script src="admin.js"></script>
<script>
if (Auth.isAuthed()) location.href = "dashboard.html";
document.getElementById("login-role").textContent = t("admin.login.title");
document.getElementById("pw-label").textContent = t("admin.login.password");
document.getElementById("submit-btn").textContent = t("admin.login.submit");
document.getElementById("hint-text").textContent = t("admin.login.hint");
document.title = "Jimi Gallery · " + t("admin.login.title") + " — " + t("admin.login.submit");
// language switcher in corner
document.querySelector(".login-lang-wrap").innerHTML = langSwitcherHtml();
wireLangSwitcher();
document.getElementById("f").addEventListener("submit", async (e) => {
e.preventDefault();
const pw = document.getElementById("pw").value;
const ok = await Auth.login(pw);
if (ok) {
location.href = "dashboard.html";
} else {
document.getElementById("err").textContent = t("admin.login.incorrect");
}
});
</script>
</body>
</html>