mirror of
https://github.com/Alexander-D-Karpov/about.git
synced 2026-03-16 22:06:08 +03:00
101 lines
4.4 KiB
HTML
101 lines
4.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
<title>{{ .Title }}</title>
|
|
<meta name="description" content="{{ .Description | default "This site is literally about me" }}">
|
|
<meta name="author" content="sanspie">
|
|
<link rel="canonical" href="{{ .Canonical | default "https://about.akarpov.ru" }}">
|
|
|
|
<meta name="robots" content="index,follow,max-snippet:-1,max-image-preview:large,max-video-preview:-1">
|
|
<meta name="google" content="notranslate">
|
|
<meta name="robots" content="noai, noimageai">
|
|
<meta name="referrer" content="strict-origin-when-cross-origin">
|
|
<meta name="color-scheme" content="dark light">
|
|
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
|
|
<meta content="#0d1117" media="(prefers-color-scheme: dark)" name="theme-color">
|
|
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:site_name" content="sanspie">
|
|
<meta property="og:title" content="{{ .OGTitle | default .Title }}">
|
|
<meta property="og:description" content="{{ .OGDescription | default .Description }}">
|
|
<meta property="og:url" content="{{ .Canonical | default "https://about.akarpov.ru" }}">
|
|
<meta property="og:image" content="{{ .OGImage | default "https://akarpov.ru/media/logo.png" }}">
|
|
<meta property="og:image:width" content="1200">
|
|
<meta property="og:image:height" content="630">
|
|
<meta property="og:locale" content="en_US">
|
|
|
|
<meta name="application-name" content="sanspie">
|
|
<meta name="apple-mobile-web-app-title" content="sanspie">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
<meta name="mobile-web-app-capable" content="yes">
|
|
<meta name="format-detection" content="telephone=no, email=no, address=no">
|
|
|
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
|
|
<link rel="icon" type="image/png" sizes="192x192" href="/favicon.png">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/favicon.png">
|
|
<link rel="mask-icon" href="/favicon.png" color="#0d1117">
|
|
|
|
<link href="/static/bundle.css?v={{ .CSSHash }}" rel="stylesheet">
|
|
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "Person",
|
|
"name": "sanspie",
|
|
"url": "https://about.akarpov.ru",
|
|
"image": "https://akarpov.ru/media/logo.png",
|
|
"sameAs": [
|
|
"https://github.com/Alexander-D-Karpov",
|
|
"https://t.me/sanspie"
|
|
],
|
|
"description": "This site is literally about me"
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
{{ range .Plugins }}
|
|
{{ . }}
|
|
{{ end }}
|
|
</div>
|
|
|
|
<div class="status-bar">
|
|
<span class="status-indicator" id="connection-status"></span>
|
|
<span id="status-text">Connecting...</span>
|
|
<span class="status-separator">•</span>
|
|
<button class="potato-toggle" id="potato-toggle" onclick="togglePotatoMode()" title="Toggle Lite Mode">
|
|
🥔
|
|
</button>
|
|
</div>
|
|
|
|
<script defer src="/static/bundle.js?v={{ .JSHash }}"></script>
|
|
<script>
|
|
function refreshMeme() {
|
|
const refreshBtns = document.querySelectorAll('.meme-refresh-btn');
|
|
refreshBtns.forEach(btn => {
|
|
btn.dataset.originalText = btn.textContent;
|
|
btn.disabled = true;
|
|
btn.textContent = 'Loading...';
|
|
});
|
|
fetch('/api/meme/refresh', { method: 'POST', headers: { 'Content-Type': 'application/json' } })
|
|
.then(r => { if (!r.ok) throw new Error('Failed to refresh meme'); return r.json(); })
|
|
.then(() => console.log('Meme refreshed successfully'))
|
|
.catch(err => console.error('Error refreshing meme:', err))
|
|
.finally(() => {
|
|
setTimeout(() => {
|
|
document.querySelectorAll('.meme-refresh-btn').forEach(btn => {
|
|
btn.disabled = false;
|
|
btn.textContent = btn.dataset.originalText || '🎲';
|
|
delete btn.dataset.originalText;
|
|
});
|
|
}, 500);
|
|
});
|
|
}
|
|
window.addEventListener('DOMContentLoaded', function(){ window.refreshMeme = refreshMeme; });
|
|
</script>
|
|
</body>
|
|
</html> |