Reset repository to README title only
Approach is changing entirely; clearing prior implementation to start over from a clean slate. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,70 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>관리자 대시보드</title>
|
||||
<link rel="stylesheet" href="/static/styles.css" />
|
||||
</head>
|
||||
<body class="siteBody">
|
||||
<%- include('../partials/navbar', { userId }) %>
|
||||
|
||||
<main class="pageWrap">
|
||||
<section class="toolbar">
|
||||
<form method="post" action="/op/dashboard/packs">
|
||||
<button class="primaryButton" type="submit">서버팩 추가</button>
|
||||
</form>
|
||||
<form method="post" action="/op/dashboard/packs/delete" class="deleteForm" data-delete-form>
|
||||
<div class="deleteToolbar">
|
||||
<button class="dangerButton" type="button" data-delete-toggle>서버팩 삭제</button>
|
||||
<div class="deleteActions hidden" data-delete-actions>
|
||||
<button class="ghostButton" type="button" data-delete-cancel>취소</button>
|
||||
<button class="dangerButton" type="submit">확인</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardRow">
|
||||
<% packs.forEach((pack) => { %>
|
||||
<label class="packCard selectableCard">
|
||||
<input class="selectionBox hidden" type="checkbox" name="packKeys" value="<%= pack.file %>" />
|
||||
<span class="selectionTitle"><%= pack.name %></span>
|
||||
<span><code><%= pack.file %></code></span>
|
||||
<% if (!pack.registered) { %>
|
||||
<span class="warningBadge">manifest.json 미등록</span>
|
||||
<% } %>
|
||||
<a class="ghostLink" href="/op/dashboard/<%= pack.file %>">편집</a>
|
||||
</label>
|
||||
<% }) %>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</main>
|
||||
<script>
|
||||
(() => {
|
||||
const form = document.querySelector('[data-delete-form]')
|
||||
if (form == null) {
|
||||
return
|
||||
}
|
||||
|
||||
const toggleButton = form.querySelector('[data-delete-toggle]')
|
||||
const cancelButton = form.querySelector('[data-delete-cancel]')
|
||||
const actions = form.querySelector('[data-delete-actions]')
|
||||
const checkboxes = form.querySelectorAll('.selectionBox')
|
||||
|
||||
const setDeleteMode = (enabled) => {
|
||||
form.classList.toggle('deleteMode', enabled)
|
||||
actions.classList.toggle('hidden', !enabled)
|
||||
checkboxes.forEach((checkbox) => {
|
||||
checkbox.classList.toggle('hidden', !enabled)
|
||||
if (!enabled) {
|
||||
checkbox.checked = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
toggleButton?.addEventListener('click', () => setDeleteMode(true))
|
||||
cancelButton?.addEventListener('click', () => setDeleteMode(false))
|
||||
setDeleteMode(false)
|
||||
})()
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,149 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title><%= packEntry?.name ?? packKey %> 편집</title>
|
||||
<link rel="stylesheet" href="/static/styles.css" />
|
||||
</head>
|
||||
<body class="siteBody">
|
||||
<%- include('../partials/navbar', { userId }) %>
|
||||
|
||||
<main class="pageWrap">
|
||||
<section class="editorWrap">
|
||||
<div class="editorHeader">
|
||||
<div>
|
||||
<p class="eyebrow">PACK EDITOR</p>
|
||||
<h1><%= packEntry?.name ?? packKey %></h1>
|
||||
</div>
|
||||
<a class="ghostLink" href="/op/dashboard">목록으로</a>
|
||||
</div>
|
||||
|
||||
<form method="post" class="editorForm">
|
||||
<div class="gridTwo">
|
||||
<label>
|
||||
<span>서버팩 이름</span>
|
||||
<input name="displayName" value="<%= packEntry?.name ?? '' %>" required />
|
||||
</label>
|
||||
<label>
|
||||
<span>JSON 파일 이름</span>
|
||||
<input name="fileName" value="<%= packKey %>" required />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<label>
|
||||
<span>설명</span>
|
||||
<textarea name="description"><%= pack.description ?? '' %></textarea>
|
||||
</label>
|
||||
|
||||
<div class="gridTwo">
|
||||
<label>
|
||||
<span>마인크래프트 버전</span>
|
||||
<select name="mcVersion" required>
|
||||
<% releases.forEach((release) => { %>
|
||||
<option value="<%= release.id %>" <%= release.id === pack.mcVersion ? 'selected' : '' %>><%= release.id %></option>
|
||||
<% }) %>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
<span>권장 JDK 버전</span>
|
||||
<input type="number" name="recommendedJdkVersion" value="<%= pack.recommendedJdkVersion ?? 17 %>" min="8" required />
|
||||
</label>
|
||||
<label>
|
||||
<span>클라이언트 로더 종류</span>
|
||||
<select name="loaderType">
|
||||
<option value="vanilla" <%= (pack.loaderType ?? 'vanilla') === 'vanilla' ? 'selected' : '' %>>vanilla</option>
|
||||
<option value="forge" <%= pack.loaderType === 'forge' ? 'selected' : '' %>>forge</option>
|
||||
<option value="fabric" <%= pack.loaderType === 'fabric' ? 'selected' : '' %>>fabric</option>
|
||||
<option value="neoforge" <%= pack.loaderType === 'neoforge' ? 'selected' : '' %>>neoforge</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
<span>로더 버전</span>
|
||||
<input name="loaderVersion" value="<%= pack.loaderVersion ?? '' %>" placeholder="예: 0.16.14 / 47.3.0 / 21.4.111-beta" />
|
||||
</label>
|
||||
<label>
|
||||
<span>packPath</span>
|
||||
<input name="packPath" value="<%= pack.packPath %>" required />
|
||||
</label>
|
||||
<label>
|
||||
<span>서버 최소 램</span>
|
||||
<input type="number" name="serverMinRam" value="<%= pack.serverMinRam %>" required />
|
||||
</label>
|
||||
<label>
|
||||
<span>서버 최대 램</span>
|
||||
<input type="number" name="serverMaxRam" value="<%= pack.serverMaxRam %>" required />
|
||||
</label>
|
||||
<label>
|
||||
<span>클라이언트 최소 램</span>
|
||||
<input type="number" name="clientMinRam" value="<%= pack.clientMinRam %>" required />
|
||||
</label>
|
||||
<label>
|
||||
<span>클라이언트 권장 램</span>
|
||||
<input type="number" name="clientRecommendedRam" value="<%= pack.clientRecommendedRam %>" required />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<button class="primaryButton" type="submit">적용</button>
|
||||
</form>
|
||||
|
||||
<section class="assetSection">
|
||||
<div class="assetCard">
|
||||
<h2>로더 설치파일 업로드</h2>
|
||||
<form method="post" action="/op/dashboard/<%= packKey %>/assets/loader" enctype="multipart/form-data" class="assetForm">
|
||||
<input type="file" name="asset" required />
|
||||
<button class="primaryButton" type="submit">로더 업로드</button>
|
||||
</form>
|
||||
<% if (pack.loaderInstallerPath) { %>
|
||||
<div class="assetItem">
|
||||
<code><%= pack.loaderInstallerPath %></code>
|
||||
<form method="post" action="/op/dashboard/<%= packKey %>/assets/loader/remove">
|
||||
<input type="hidden" name="assetPath" value="<%= pack.loaderInstallerPath %>" />
|
||||
<button class="dangerButton" type="submit">삭제</button>
|
||||
</form>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
|
||||
<div class="assetCard">
|
||||
<h2>리소스팩 업로드</h2>
|
||||
<form method="post" action="/op/dashboard/<%= packKey %>/assets/resource-pack" enctype="multipart/form-data" class="assetForm">
|
||||
<input type="file" name="asset" required />
|
||||
<button class="primaryButton" type="submit">리소스팩 추가</button>
|
||||
</form>
|
||||
<div class="assetList">
|
||||
<% (pack.resourcePackFiles ?? []).forEach((resourcePack) => { %>
|
||||
<div class="assetItem">
|
||||
<code><%= resourcePack %></code>
|
||||
<form method="post" action="/op/dashboard/<%= packKey %>/assets/resource-pack/remove">
|
||||
<input type="hidden" name="assetPath" value="<%= resourcePack %>" />
|
||||
<button class="dangerButton" type="submit">삭제</button>
|
||||
</form>
|
||||
</div>
|
||||
<% }) %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="assetCard">
|
||||
<h2>쉐이더 업로드</h2>
|
||||
<form method="post" action="/op/dashboard/<%= packKey %>/assets/shader-pack" enctype="multipart/form-data" class="assetForm">
|
||||
<input type="file" name="asset" required />
|
||||
<button class="primaryButton" type="submit">쉐이더 추가</button>
|
||||
</form>
|
||||
<div class="assetList">
|
||||
<% (pack.shaderPackFiles ?? []).forEach((shaderPack) => { %>
|
||||
<div class="assetItem">
|
||||
<code><%= shaderPack %></code>
|
||||
<form method="post" action="/op/dashboard/<%= packKey %>/assets/shader-pack/remove">
|
||||
<input type="hidden" name="assetPath" value="<%= shaderPack %>" />
|
||||
<button class="dangerButton" type="submit">삭제</button>
|
||||
</form>
|
||||
</div>
|
||||
<% }) %>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,25 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>관리자 로그인</title>
|
||||
<link rel="stylesheet" href="/static/styles.css" />
|
||||
</head>
|
||||
<body class="siteBody adminLoginBody">
|
||||
<main class="loginPanel">
|
||||
<p class="eyebrow">OP LOGIN</p>
|
||||
<h1>관리자 로그인</h1>
|
||||
<form method="post" action="/op/login" class="stackForm">
|
||||
<label>
|
||||
<span>비밀번호</span>
|
||||
<input type="password" name="password" required />
|
||||
</label>
|
||||
<% if (errorMessage) { %>
|
||||
<p class="errorText"><%= errorMessage %></p>
|
||||
<% } %>
|
||||
<button class="primaryButton" type="submit">로그인</button>
|
||||
</form>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user