feat(redesign): 프로필 헤더/내 게임 행 비주얼 레이어
profile.jsp에 .profile-head·.game-row·.avatar·.card 외형 클래스 적용.
모델은 기존 scriptlet(session attr·myGames getName/getThumbnailUrl) 보존,
디자인 ${user.*} EL 미채택. submitNickname/uploadAvatar AJAX +
BibimbapCsrf.headers·JS참조 id 불변. 미존재 라우트(공개토글
/games/{id}/visibility, /profile/edit)는 비노출.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
d618087d0b
commit
e998847139
|
|
@ -434,13 +434,13 @@
|
||||||
<main class="profile-main">
|
<main class="profile-main">
|
||||||
<section class="profile-shell" aria-labelledby="profile-title">
|
<section class="profile-shell" aria-labelledby="profile-title">
|
||||||
<div class="profile-heading">
|
<div class="profile-heading">
|
||||||
<p class="profile-heading__eyebrow">BIBIMBAP ACCOUNT</p>
|
<p class="profile-heading__eyebrow section-eyebrow">BIBIMBAP ACCOUNT</p>
|
||||||
<h1 class="profile-heading__title" id="profile-title">프로필</h1>
|
<h1 class="profile-heading__title section-title" id="profile-title">프로필</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="profile-panel">
|
<div class="profile-panel">
|
||||||
<div class="profile-summary">
|
<div class="profile-summary profile-head">
|
||||||
<div class="profile-avatar" aria-hidden="true">
|
<div class="profile-avatar avatar" aria-hidden="true">
|
||||||
<img id="profile-avatar-img" src="<%= avatarUrl %>" alt="" width="96" height="96" <%= avatarUrl.isBlank() ? "hidden" : "" %> />
|
<img id="profile-avatar-img" src="<%= avatarUrl %>" alt="" width="96" height="96" <%= avatarUrl.isBlank() ? "hidden" : "" %> />
|
||||||
<span id="profile-avatar-initial" <%= avatarUrl.isBlank() ? "" : "hidden" %>><%= avatarInitial %></span>
|
<span id="profile-avatar-initial" <%= avatarUrl.isBlank() ? "" : "hidden" %>><%= avatarInitial %></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -463,14 +463,14 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="profile-actions">
|
<div class="profile-actions">
|
||||||
<a class="profile-button profile-button--primary" href="<%= ctx %>/">홈으로 이동</a>
|
<a class="profile-button profile-button--primary btn btn-primary" href="<%= ctx %>/">홈으로 이동</a>
|
||||||
<form action="<%= ctx %>/logout" method="post">
|
<form action="<%= ctx %>/logout" method="post">
|
||||||
<button class="profile-button" type="submit">로그아웃</button>
|
<button class="profile-button btn btn-ghost" type="submit">로그아웃</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="profile-games">
|
<div class="profile-games card">
|
||||||
<div class="profile-games__head">
|
<div class="profile-games__head">
|
||||||
<h2 class="profile-games__title">내 게임</h2>
|
<h2 class="profile-games__title">내 게임</h2>
|
||||||
<span class="profile-games__count"><%= myGames.size() %>개</span>
|
<span class="profile-games__count"><%= myGames.size() %>개</span>
|
||||||
|
|
@ -494,15 +494,15 @@
|
||||||
}
|
}
|
||||||
boolean visible = game.getVisible() == null || game.getVisible();
|
boolean visible = game.getVisible() == null || game.getVisible();
|
||||||
%>
|
%>
|
||||||
<div class="profile-game">
|
<div class="profile-game game-row">
|
||||||
<a class="profile-game__thumb" href="<%= ctx %>/game/<%= game.getId() %>" aria-hidden="true" tabindex="-1">
|
<a class="profile-game__thumb thumb" href="<%= ctx %>/game/<%= game.getId() %>" aria-hidden="true" tabindex="-1">
|
||||||
<% if (hasImage) { %>
|
<% if (hasImage) { %>
|
||||||
<img src="<%= thumbUrl %>" alt="" loading="lazy" decoding="async" />
|
<img src="<%= thumbUrl %>" alt="" loading="lazy" decoding="async" />
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
<img class="profile-game__fallback" src="<%= ctx %>/images/logo.png" alt="" width="40" height="40" />
|
<img class="profile-game__fallback" src="<%= ctx %>/images/logo.png" alt="" width="40" height="40" />
|
||||||
<% } %>
|
<% } %>
|
||||||
</a>
|
</a>
|
||||||
<div class="profile-game__body">
|
<div class="profile-game__body meta">
|
||||||
<a class="profile-game__name" href="<%= ctx %>/game/<%= game.getId() %>"><%= gameName %></a>
|
<a class="profile-game__name" href="<%= ctx %>/game/<%= game.getId() %>"><%= gameName %></a>
|
||||||
<div class="profile-game__meta">
|
<div class="profile-game__meta">
|
||||||
<span class="profile-game__status <%= visible ? "profile-game__status--visible" : "" %>"><%= visible ? "공개" : "비공개" %></span>
|
<span class="profile-game__status <%= visible ? "profile-game__status--visible" : "" %>"><%= visible ? "공개" : "비공개" %></span>
|
||||||
|
|
@ -510,7 +510,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="profile-game__actions">
|
<div class="profile-game__actions">
|
||||||
<a class="profile-game__action" href="<%= ctx %>/game/<%= game.getId() %>/edit">수정</a>
|
<a class="profile-game__action btn btn-ghost" href="<%= ctx %>/game/<%= game.getId() %>/edit">수정</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue