🔒 Repository is read-only – file editing is disabled.

PaganLinux/pagan-web-v2/templates/base.html main

250 linii Raw ← Powrót
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
<!DOCTYPE html>
<html lang="{{ lang }}">
<head>
 <meta charset="UTF-8">
 <script>
 /* Motyw przed pierwszym renderem – cookie wspólne dla *.paganlinux.eu */
 (function () {
 try {
 var m = (document.cookie.match(/(?:^|; )pag_theme=([^;]+)/) || [])[1]
 || localStorage.getItem('pag_theme') || 'dark';
 if (m === 'light') { document.documentElement.setAttribute('data-theme', 'light'); }
 } catch (e) {}
 })();
 </script>
 <meta name="viewport" content="width=device-width,initial-scale=1">
 <title>{% block title %}PaganLinux Mokosz{% endblock %}</title>
 <link rel="stylesheet" href="/static/css/style.css?v=11">
 <link rel="icon" type="image/svg+xml" href="/static/pagan-loki-pingwin.svg">
 <meta name="csrf-token" content="{{ csrf_token() }}">
 <meta property="og:site_name" content="PaganOS">
 <meta property="og:type" content="website">
 <meta property="og:title" content="{% block og_title %}PaganOS Linux – Polska Niezależna Dystrybucja Linux | PaganLinux{% endblock %}">
 <meta property="og:description" content="{% block og_description %}Polska, niezależna dystrybucja Linux budowana od podstaw. Własne repozytorium, system buildów i dokumentacja.{% endblock %}">
 <meta property="og:url" content="{{ request.url }}">
 <meta name="twitter:card" content="summary_large_image">
 <meta name="twitter:title" content="{{ self.og_title() }}">
 <meta name="twitter:description" content="{{ self.og_description() }}">
 <meta name="twitter:image" content="https://paganlinux.eu/static/pagan-loki-pingwin.png">
 <meta name="description" content="{% block meta_description %}PaganOS (PaganLinux) – polska, niezależna dystrybucja Linux budowana od podstaw. Własne repozytorium pakietów, system buildów i dokumentacja.{% endblock %}">
 <meta name="keywords" content="PaganOS, PaganLinux, Pagan Linux, polska dystrybucja Linux, niezależna dystrybucja Linux, dystrybucja Linux, polski system operacyjny, open source">
 <meta name="robots" content="index, follow">
 <meta name="author" content="Pagan Linux Community">
 <link rel="canonical" href="{% block canonical %}{{ request.url.split('?')[0] }}{% endblock %}">
 <meta property="og:image" content="https://paganlinux.eu/static/pagan-loki-pingwin.png">
 <meta property="og:locale" content="{{ 'pl_PL' if lang == 'pl' else 'en_US' }}">
 <script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "WebSite",
 "name": "PaganOS Linux",
 "alternateName": "PaganLinux",
 "url": "https://paganlinux.eu/",
 "description": "Polska niezależna dystrybucja Linux – PaganOS (PaganLinux). Własne repozytorium, system buildów, dokumentacja.",
 "inLanguage": ["pl", "en"]
 }
 </script>
 <script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Organization",
 "name": "PaganOS Linux",
 "alternateName": "PaganLinux",
 "url": "https://paganlinux.eu/",
 "logo": "https://paganlinux.eu/static/pagan-loki-pingwin.png"
 }
 </script>
 <style>
 input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="button"]),
 textarea,select{background:var(--bg);border:1px solid var(--border);color:var(--text-bright);border-radius:var(--radius-sm);padding:0.45rem 0.6rem;font-size:0.88rem;font-family:inherit}
 input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}
 textarea{font-family:var(--mono);resize:vertical}
 </style>
 {% block head %}{% endblock %}
</head>
<body>
 <nav class="topnav">
 <div class="nav-inner">
 <a href="https://paganlinux.eu" class="logo"><img src="/static/pagan-loki-pingwin.svg" class="logo-img" alt="PaganOS" width="30" height="30"> PaganOS</a>
 <div class="nav-links">
 <a href="{{ section_url('git') }}" class="{% if section=='git' %}active{% endif %}"> {{ t('git') }}</a>
 <a href="{{ section_url('repo') }}" class="{% if section=='repo' %}active{% endif %}"> {{ t('repo') }}</a>
 <a href="{{ section_url('build') }}" class="{% if section=='build' %}active{% endif %}"> {{ t('build') }}</a>
 <a href="{{ section_url('docs') }}" class="{% if section=='docs' %}active{% endif %}"> {{ t('docs') }}</a>
 <a href="https://paganlinux.eu/submit-recipe" class="{% if request.path=='/submit-recipe' %}active{% endif %}"> {{ t('add_pkg') }}</a>
 <a href="https://paganlinux.eu/status" class="{% if request.path=='/status' %}active{% endif %}"> {{ t('status_title') }}</a>
 </div>
 <div class="nav-user">
 <button type="button" class="theme-btn" data-theme-btn title="Przełącz motyw jasny/ciemny" aria-label="Przełącz motyw"><svg class="tb tb-sun" viewBox="0 0 24 24" width="17" height="17" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2M4.9 4.9l1.4 1.4m11.4 11.4 1.4 1.4M2 12h2m16 0h2M4.9 19.1l1.4-1.4m11.4-11.4 1.4-1.4"/></svg><svg class="tb tb-moon" viewBox="0 0 24 24" width="17" height="17" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg></button>
 <a href="https://paganlinux.eu/set-lang/{{ lang_switch() }}?next={{ request.url }}" class="nav-lang" title="{{ 'English' if lang_switch()=='pl' else 'Polski' }}"><span class="flg" data-lang="{{ 'pl' if lang_switch()=='pl' else 'en' }}"></span></a>
 {% if username %}
 {% if is_admin %}<a href="/admin" class="nav-admin" title="Admin" aria-label="Panel admina"><svg class="i16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3"/><path d="M1 14h6M9 8h6M17 16h6"/></svg></a>{% endif %}
 <a href="/profile" class="nav-profile"> {{ username }}</a>
 <a href="/logout" class="nav-logout">{{ t('logout_btn') }}</a>
 {% else %}
 <a href="/login" class="btn btn-sm btn-ghost nav-login">{{ t('login_btn') }}</a>
 {% endif %}
 <button class="nav-toggle" id="navToggle" aria-label="Menu" aria-expanded="false" aria-controls="navMobile">
 <span></span><span></span><span></span>
 </button>
 </div>
 </div>
 <div class="nav-mobile" id="navMobile">
 <div class="nm-top">
 <button type="button" class="theme-btn nm-theme" data-theme-btn title="Przełącz motyw jasny/ciemny" aria-label="Przełącz motyw"><svg class="tb tb-sun" viewBox="0 0 24 24" width="17" height="17" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2m0 16v2M4.9 4.9l1.4 1.4m11.4 11.4 1.4 1.4M2 12h2m16 0h2M4.9 19.1l1.4-1.4m11.4-11.4 1.4-1.4"/></svg><svg class="tb tb-moon" viewBox="0 0 24 24" width="17" height="17" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg></button>
 <a href="https://paganlinux.eu/set-lang/{{ lang_switch() }}?next={{ request.url }}" class="nm-lang"><span class="flg" data-lang="{{ 'pl' if lang_switch()=='pl' else 'en' }}"></span> {{ 'Polski' if lang_switch()=='pl' else 'English' }}</a>
 </div>
 <nav class="nm-group" aria-label="Sekcje">
 <a href="{{ section_url('git') }}" class="nm-link {% if section=='git' %}active{% endif %}"> {{ t('git') }}</a>
 <a href="{{ section_url('repo') }}" class="nm-link {% if section=='repo' %}active{% endif %}"> {{ t('repo') }}</a>
 <a href="{{ section_url('build') }}" class="nm-link {% if section=='build' %}active{% endif %}"> {{ t('build') }}</a>
 <a href="{{ section_url('docs') }}" class="nm-link {% if section=='docs' %}active{% endif %}"> {{ t('docs') }}</a>
 <a href="https://paganlinux.eu/submit-recipe" class="nm-link {% if request.path=='/submit-recipe' %}active{% endif %}"> {{ t('add_pkg') }}</a>
 <a href="https://paganlinux.eu/status" class="nm-link {% if request.path=='/status' %}active{% endif %}"> {{ t('status_title') }}</a>
 </nav>
 <div class="nm-user">
 {% if username %}
 {% if is_admin %}<a href="/admin"> Admin</a>{% endif %}
 <a href="/profile"> {{ username }}</a>
 <a href="/logout" style="background:transparent;color:var(--muted)">{{ t('logout_btn') }}</a>
 {% else %}
 <a href="/login" class="nm-cta">{{ t('login_btn') }}</a>
 {% endif %}
 </div>
 </div>
 </nav>
 {% with msgs = get_flashed_messages(with_categories=true) %}
 {% if msgs %}<div class="flash-container">{% for cat, msg in msgs %}<div class="flash flash-{{ cat }}">{{ msg }}</div>{% endfor %}</div>{% endif %}
 {% endwith %}
 <main class="content">{% block content %}{% endblock %}</main>

 <footer class="site-footer">
 <div class="footer-inner">
 <div>
 <h4 style="display:flex;align-items:center;gap:0.5rem"><img src="/static/pagan-loki-pingwin.svg" alt="PaganOS" class="footer-logo"> PaganOS</h4>
 <p>{{ t('footer_about') }}</p>
 </div>
 <div>
 <h4>{{ t('footer_links') }}</h4>
 <a href="https://paganlinux.eu/download">⬇ {{ t('footer_dl') }}</a>
 <a href="https://repo.paganlinux.eu/"> {{ t('footer_repo') }}</a>
 <a href="https://git.paganlinux.eu/"> {{ t('footer_source') }}</a>
 <a href="https://docs.paganlinux.eu/"> {{ t('footer_docs') }}</a>
 </div>
 <div>
 <h4>{{ t('footer_community') }}</h4>
 <a href="https://paganlinux.eu/submit-recipe"> {{ t('footer_suggest') }}</a>
 <a href="https://paganlinux.eu/about">{{ t('footer_about_link') }}</a>
 <a href="https://paganlinux.eu/translate"> {{ t('translate_nav') }}</a>
 </div>
 <div class="footer-bottom">
 © {{ now().year if now else '2026' }} {{ t('footer_copy') }}
 </div>
 </div>
 </footer>

 <script>
 (function() {
 // ── Motyw jasny/ciemny ──
 function applyThemeIcons() {
     var light = document.documentElement.getAttribute('data-theme') === 'light';
     document.querySelectorAll('[data-theme-btn]').forEach(function (b) {
         b.setAttribute('title', light ? 'Przełącz na ciemny' : 'Przełącz na jasny');
     });
 }
 function setTheme(mode) {
 if (mode === 'light') { document.documentElement.setAttribute('data-theme', 'light'); }
 else { document.documentElement.removeAttribute('data-theme'); }
 try {
 var c = 'pag_theme=' + mode + '; max-age=31536000; path=/; SameSite=Lax';
 if (location.hostname.indexOf('paganlinux.eu') > -1) { c += '; Domain=.paganlinux.eu'; }
 document.cookie = c;
 localStorage.setItem('pag_theme', mode);
 } catch (e) {}
 applyThemeIcons();
 }
 document.querySelectorAll('[data-theme-btn]').forEach(function (btn) {
 btn.addEventListener('click', function () {
 var next = document.documentElement.getAttribute('data-theme') === 'light' ? 'dark' : 'light';
 setTheme(next);
 });
 });
 applyThemeIcons();

 // ── Burger menu (mobile) ──
 var toggle = document.getElementById('navToggle');
 var panel = document.getElementById('navMobile');
 if (toggle && panel) {
 function closeMenu() {
 toggle.classList.remove('open');
 toggle.setAttribute('aria-expanded', 'false');
 panel.classList.remove('open');
 }
 toggle.addEventListener('click', function(e) {
 e.stopPropagation();
 var open = panel.classList.toggle('open');
 toggle.classList.toggle('open', open);
 toggle.setAttribute('aria-expanded', open? 'true' : 'false');
 });
 panel.querySelectorAll('a').forEach(function(a) {
 a.addEventListener('click', closeMenu);
 });
 document.addEventListener('click', function(e) {
 if (!panel.contains(e.target) && !toggle.contains(e.target)) closeMenu();
 });
 document.addEventListener('keydown', function(e) {
 if (e.key === 'Escape') closeMenu();
 });
 }
 })();
 </script>
<!-- Informacja o cookies (tylko niezbędne – sesja/CSRF, brak śledzenia) -->
<style>
 #cookie-bar{position:fixed;left:12px;right:12px;bottom:12px;z-index:9999;max-width:820px;margin:0 auto;background:var(--card,#161b22);border:1px solid var(--border,#2d333b);border-radius:10px;padding:14px 16px;display:flex;gap:12px;align-items:center;flex-wrap:wrap;box-shadow:0 8px 30px rgba(0,0,0,.45);font-size:.85rem;line-height:1.45}
 #cookie-bar p{margin:0;flex:1;min-width:240px}
 #cookie-bar a{color:var(--accent,#58a6ff);text-decoration:underline}
 #cookie-bar button{background:var(--accent,#58a6ff);color:#06121f;border:0;padding:8px 16px;border-radius:8px;font-weight:700;cursor:pointer;font-size:.82rem}
 #cookie-bar button:hover{filter:brightness(1.1)}
 #cookie-link{position:fixed;left:12px;bottom:12px;z-index:9998;font-size:.7rem;opacity:.55;background:var(--card,#161b22);border:1px solid var(--border,#2d333b);color:var(--muted,#8b949e);padding:4px 10px;border-radius:99px;text-decoration:none}
 #cookie-link:hover{opacity:1;color:var(--text,#e6edf3)}
</style>
<div id="cookie-bar" role="region" aria-label="Informacja o plikach cookie">
 <p> Ta strona używa wyłącznie <b>niezbędnych plików cookie</b> (sesja logowania i ochrona CSRF w panelach).
 Nie używamy cookie analitycznych, reklamowych ani śledzących.
 <a href="https://paganlinux.eu/cookies">Polityka cookies</a></p>
 <button type="button" onclick="document.cookie='pag_cookie_consent=1;max-age=31536000;path=/;SameSite=Lax';document.getElementById('cookie-bar').style.display='none';document.getElementById('cookie-link').style.display='inline-block'">Akceptuję</button>
</div>
<a id="cookie-link" href="https://paganlinux.eu/cookies" style="display:none" title="Polityka cookies"> Cookies</a>
<script>
(function(){
 if(document.cookie.indexOf('pag_cookie_consent=1')>-1){
 var b=document.getElementById('cookie-bar'); if(b) b.style.display='none';
 var l=document.getElementById('cookie-link'); if(l) l.style.display='inline-block';
 }
})();
</script>
<!-- Mermaid – diagramy w Markdown (```mermaid / graph TD).
     Skrypt ładuje się TYLKO gdy strona ma element .mermaid (oszczędza ~3 MB).
     CSP (script-src) już dopuszcza https://unpkg.com. -->
<style>
.markdown-body pre.mermaid, .mermaid{background:transparent;border:0;text-align:center;margin:1rem 0;overflow-x:auto}
.mermaid svg{max-width:100%;height:auto}
</style>
<script>
(function(){
 if(!document.querySelector('.mermaid')) return;
 var s=document.createElement('script');
 s.src='https://unpkg.com/mermaid@11/dist/mermaid.min.js';
 s.onload=function(){
 try{
 var dark=document.documentElement.getAttribute('data-theme')!=='light';
 window.mermaid.initialize({startOnLoad:false,securityLevel:'strict',theme:dark?'dark':'default'});
 window.mermaid.run();
 }catch(e){}
 };
 s.onerror=function(){}; /* brak CDN → zostaje surowy blok kodu */
 document.head.appendChild(s);
})();
</script>
</body>
</html>