2026-05-25 15:36:49 +03:00
|
|
|
{{define "base"}}
|
|
|
|
|
<!doctype html>
|
|
|
|
|
<html lang="en">
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="utf-8">
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
|
<title>{{if .Title}}{{.Title}} - {{end}}{{.AppName}}</title>
|
|
|
|
|
<meta name="description" content="{{.Description}}">
|
2026-05-25 16:26:47 +03:00
|
|
|
<meta name="theme-color" content="#09090b">
|
2026-05-25 15:36:49 +03:00
|
|
|
<meta property="og:site_name" content="{{.AppName}}">
|
|
|
|
|
<meta property="og:title" content="{{if .Title}}{{.Title}}{{else}}{{.AppName}}{{end}}">
|
|
|
|
|
<meta property="og:description" content="{{.Description}}">
|
|
|
|
|
<meta property="og:type" content="website">
|
|
|
|
|
<meta property="og:url" content="{{.BaseURL}}">
|
2026-05-25 16:52:57 +03:00
|
|
|
{{if .ImageURL}}<meta property="og:image" content="{{.ImageURL}}">{{end}}
|
2026-05-25 15:36:49 +03:00
|
|
|
<meta name="twitter:card" content="summary_large_image">
|
2026-05-25 16:52:57 +03:00
|
|
|
{{if .ImageURL}}<meta name="twitter:image" content="{{.ImageURL}}">{{end}}
|
2026-06-01 02:24:51 +03:00
|
|
|
<script src="/static/js/05-theme.js?version={{.AppVersion}}"></script>
|
|
|
|
|
<link rel="stylesheet" href="/static/css/00-base.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/10-layout.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/15-revamp.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/16-retro.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/17-gruvbox.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/18-cyberpunk.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/20-upload.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/30-download.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/40-docs.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/50-admin.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/60-storage.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/70-tokens.css?version={{.AppVersion}}">
|
|
|
|
|
<link rel="stylesheet" href="/static/css/90-responsive.css?version={{.AppVersion}}">
|
|
|
|
|
<script defer src="/static/js/00-utils.js?version={{.AppVersion}}"></script>
|
|
|
|
|
<script defer src="/static/js/10-file-browser.js?version={{.AppVersion}}"></script>
|
|
|
|
|
<script defer src="/static/js/20-storage-admin.js?version={{.AppVersion}}"></script>
|
2026-06-01 12:30:59 +03:00
|
|
|
<script defer src="/static/js/25-admin-charts.js?version={{.AppVersion}}"></script>
|
2026-06-01 02:24:51 +03:00
|
|
|
<script defer src="/static/js/30-token-copy.js?version={{.AppVersion}}"></script>
|
2026-06-01 04:22:38 +03:00
|
|
|
<script defer src="/static/js/35-pagination.js?version={{.AppVersion}}"></script>
|
2026-06-01 02:24:51 +03:00
|
|
|
<script defer src="/static/js/40-upload.js?version={{.AppVersion}}"></script>
|
2026-05-25 15:36:49 +03:00
|
|
|
</head>
|
2026-05-25 16:26:47 +03:00
|
|
|
<body class="dark">
|
2026-05-25 15:36:49 +03:00
|
|
|
<a class="skip-link" href="#main">Skip to content</a>
|
|
|
|
|
<header class="site-header">
|
|
|
|
|
<nav class="nav" aria-label="Main navigation">
|
|
|
|
|
<a class="brand" href="/" aria-label="{{.AppName}} home">
|
|
|
|
|
<span class="brand-mark" aria-hidden="true">W</span>
|
|
|
|
|
<span>{{.AppName}}</span>
|
|
|
|
|
</a>
|
|
|
|
|
<div class="nav-links">
|
2026-05-30 15:42:35 +03:00
|
|
|
{{if .CurrentUser}}
|
2026-05-30 18:17:13 +03:00
|
|
|
<a class="button button-ghost" href="/app">Dashboard</a>
|
|
|
|
|
{{if eq .CurrentUser.Role "admin"}}<a class="button button-ghost" href="/admin">Admin</a>{{end}}
|
2026-05-30 17:23:20 +03:00
|
|
|
<a class="button button-ghost" href="/api">API</a>
|
2026-05-30 18:17:13 +03:00
|
|
|
<a class="button button-outline" href="/account/settings"><span class="nav-username">{{.CurrentUser.Username}}</span></a>
|
2026-05-30 15:42:35 +03:00
|
|
|
{{else}}
|
2026-05-29 23:44:05 +03:00
|
|
|
<a class="button button-ghost" href="/api">API</a>
|
2026-05-30 18:17:13 +03:00
|
|
|
<a class="button button-outline" href="/login">Sign in</a>
|
2026-05-30 17:23:20 +03:00
|
|
|
{{end}}
|
2026-05-25 15:36:49 +03:00
|
|
|
</div>
|
|
|
|
|
</nav>
|
|
|
|
|
</header>
|
|
|
|
|
|
|
|
|
|
<main id="main">
|
|
|
|
|
{{template "content" .}}
|
|
|
|
|
</main>
|
|
|
|
|
|
|
|
|
|
<footer class="site-footer">
|
2026-05-31 22:27:43 +03:00
|
|
|
<span>{{.AppName}} · {{.AppVersion}} · {{.CurrentYear}}</span>
|
2026-05-31 15:30:53 +03:00
|
|
|
<label class="theme-picker">
|
|
|
|
|
<span>Theme</span>
|
|
|
|
|
<select data-theme-select aria-label="Site theme">
|
|
|
|
|
<option value="revamp">Aurora (default)</option>
|
|
|
|
|
<option value="classic">Classic</option>
|
2026-05-31 16:17:20 +03:00
|
|
|
<option value="retro">Web 1.0 (retro)</option>
|
2026-06-01 02:24:51 +03:00
|
|
|
<option value="gruvbox">Gruvbox</option>
|
|
|
|
|
<option value="cyberpunk">CyberPunk</option>
|
2026-05-31 15:30:53 +03:00
|
|
|
</select>
|
|
|
|
|
</label>
|
2026-05-30 18:17:13 +03:00
|
|
|
<span class="footer-links">{{if .CurrentUser}}<a href="/app">Dashboard</a><a href="/api">API</a><a href="/account/settings">Account</a>{{else}}<a href="/login">Sign in</a><a href="/api">API</a>{{end}}</span>
|
2026-05-25 15:36:49 +03:00
|
|
|
</footer>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
{{end}}
|