- 헤더 프로필 왼쪽에 '매뉴얼' 버튼 추가(MANUAL_URL 환경변수, 기본 gitea MANUAL) - 검색을 페이지 내 data-search 카드 전체 대상으로 일반화 → 프로필에서 그 사람 프로젝트도 검색(자리표시자도 페이지별로: 공유/내/○○ 님의 프로젝트) - 상세 페이지 뒤로가기: ?from= 내부경로 기반으로 프로필→상세는 프로필로 복귀 - '사내 개발 포털' +4pt, 도구 카드 이름·설명 +2pt Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
72 lines
3.5 KiB
Plaintext
72 lines
3.5 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="ko" data-aidev-theme="light">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title><%= brand %></title>
|
|
<link rel="icon" href="/public/favicon.svg" type="image/svg+xml" />
|
|
<link rel="stylesheet" href="/public/css/tokens.css" />
|
|
<link rel="stylesheet" href="/public/css/base.css" />
|
|
<link rel="stylesheet" href="/public/css/layout.css" />
|
|
<link rel="stylesheet" href="/public/css/components.css" />
|
|
<link rel="stylesheet" href="/public/css/modal.css" />
|
|
<script>
|
|
// FOUC 방지: 저장된 테마를 페인트 전에 documentElement 에 적용
|
|
(function () {
|
|
try {
|
|
var t = localStorage.getItem("aidev-theme");
|
|
if (t === "dark" || t === "light") document.documentElement.setAttribute("data-aidev-theme", t);
|
|
} catch (e) {}
|
|
})();
|
|
</script>
|
|
</head>
|
|
<body<% if (typeof toast !== "undefined" && toast) { %> data-toast="<%= toast %>"<% } %><% if (typeof egg !== "undefined" && egg) { %> data-egg="<%= egg %>"<% } %><% if (typeof openModal !== "undefined" && openModal) { %> data-open-modal="<%= openModal %>"<% } %>>
|
|
<header class="hdr">
|
|
<div class="hdr-inner">
|
|
<a class="brand" href="/" id="brandLink">
|
|
<span class="brand-mark"><%- icon("codeslash", { size: 22 }) %></span>
|
|
<span class="brand-name"><%= brand %></span>
|
|
<span class="brand-sub">사내 개발 포털</span>
|
|
</a>
|
|
|
|
<% if (user) { %>
|
|
<div class="hdr-search">
|
|
<span class="hdr-search-ico"><%- icon("search", { size: 15 }) %></span>
|
|
<input type="search" id="feedSearch" placeholder="<%= typeof searchPlaceholder !== 'undefined' && searchPlaceholder ? searchPlaceholder : '공유 프로젝트 검색…' %>" autocomplete="off" />
|
|
</div>
|
|
|
|
<div class="hdr-right">
|
|
<button class="icon-btn" id="themeToggle" type="button" title="테마 전환" aria-label="테마 전환">
|
|
<span class="theme-ico theme-ico-moon"><%- icon("moon", { size: 16 }) %></span>
|
|
<span class="theme-ico theme-ico-sun"><%- icon("sun", { size: 16 }) %></span>
|
|
</button>
|
|
|
|
<a class="hdr-link" href="<%= manualUrl %>" target="_blank" rel="noopener" title="포털 사용 매뉴얼">
|
|
<%- icon("book", { size: 15 }) %><span>매뉴얼</span>
|
|
</a>
|
|
|
|
<% if (user.isAdmin) { %>
|
|
<span class="admin-pill"><%- icon("lock", { size: 11 }) %>관리자</span>
|
|
<% } %>
|
|
|
|
<div class="usermenu">
|
|
<button class="usermenu-btn" id="userMenuBtn" type="button" aria-haspopup="true" aria-expanded="false">
|
|
<span class="who"><%= user.sabun %></span>
|
|
<%- avatar(user.sabun, 26) %>
|
|
<span class="caret"><%- icon("caret", { size: 14 }) %></span>
|
|
</button>
|
|
<div class="usermenu-pop" id="userMenuPop" hidden>
|
|
<div class="usermenu-head">
|
|
<div class="usermenu-label">로그인 계정</div>
|
|
<div class="usermenu-sabun"><%= user.sabun %></div>
|
|
<div class="usermenu-role"><%= user.isAdmin ? "관리자 (admin)" : "일반 사용자" %></div>
|
|
</div>
|
|
<a class="usermenu-item" href="/u/<%= user.sabun %>"><span class="usermenu-ico"><%- icon("repo", { size: 15 }) %></span>내 프로필</a>
|
|
<a class="usermenu-item" href="/logout"><span class="usermenu-ico"><%- icon("signout", { size: 15 }) %></span>로그아웃</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<% } %>
|
|
</div>
|
|
</header>
|