CUSP-1256 (#1)
* Complete refactor Signed-off-by: Stephen Simpson <ssimpson89@users.noreply.github.com> * Complete refactor Signed-off-by: Stephen Simpson <ssimpson89@users.noreply.github.com> --------- Signed-off-by: Stephen Simpson <ssimpson89@users.noreply.github.com>
This commit is contained in:
218
templates/base.html
Normal file
218
templates/base.html
Normal file
@@ -0,0 +1,218 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% block title %}{{ title }}{% endblock %}</title>
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%2275%22 font-size=%2280%22>📚</text></svg>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Red+Hat+Display:ital,wght@0,300..900;1,300..900&family=Red+Hat+Text:ital,wght@0,300..900;1,300..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-primary: #0D1117;
|
||||
--bg-secondary: #161B22;
|
||||
--bg-tertiary: #21262D;
|
||||
--text-primary: #C9D1D9;
|
||||
--text-secondary: #8B949E;
|
||||
--accent-primary: #10B981;
|
||||
--accent-secondary: #059669;
|
||||
--border-color: #30363D;
|
||||
--success: #10B981;
|
||||
--warning: #D29922;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Red Hat Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||
background-color: var(--bg-primary);
|
||||
color: var(--text-primary);
|
||||
line-height: 1.6;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
header {
|
||||
background: linear-gradient(135deg, var(--accent-secondary) 0%, var(--accent-primary) 100%);
|
||||
padding: 2rem 1rem;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
header .container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-family: "Red Hat Display", sans-serif;
|
||||
font-optical-sizing: auto;
|
||||
color: white;
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: "Red Hat Display", sans-serif;
|
||||
font-optical-sizing: auto;
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
code, pre, kbd, samp {
|
||||
font-family: "JetBrains Mono", monospace;
|
||||
}
|
||||
|
||||
header p {
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1;
|
||||
max-width: 1200px;
|
||||
margin: 2rem auto;
|
||||
padding: 0 1rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.content {
|
||||
background-color: var(--bg-secondary);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 8px;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: var(--bg-secondary);
|
||||
border-top: 1px solid var(--border-color);
|
||||
padding: 2rem 1rem;
|
||||
margin-top: auto;
|
||||
text-align: center;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--accent-secondary);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Responsive */
|
||||
@media (max-width: 768px) {
|
||||
header {
|
||||
padding: 1.5rem 1rem;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
header p {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
main {
|
||||
margin: 1.5rem auto;
|
||||
padding: 0 0.75rem;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding: 1.5rem 1rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
header {
|
||||
padding: 1rem 0.75rem;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
header p {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
main {
|
||||
margin: 1rem auto;
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 0.75rem;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding: 1rem 0.75rem;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Touch-friendly improvements */
|
||||
@media (hover: none) and (pointer: coarse) {
|
||||
a, button {
|
||||
min-height: 44px;
|
||||
min-width: 44px;
|
||||
}
|
||||
}
|
||||
|
||||
{% block extra_css %}{% endblock %}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="container">
|
||||
<h1>{% block header_title %}Rocky Linux Man Pages{% endblock %}</h1>
|
||||
<p>{% block header_subtitle %}Comprehensive man page documentation{% endblock %}</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>
|
||||
Powered by <a href="https://mandoc.bsd.lv/" target="_blank">mandoc</a> |
|
||||
Search by <a href="https://fusejs.io/" target="_blank">Fuse.js</a>
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem; font-size: 0.85rem;">
|
||||
Rocky Linux™ is a trademark of the Rocky Enterprise Software Foundation.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem; font-size: 0.85rem;">
|
||||
This tool is open source (MIT License). See THIRD-PARTY-LICENSES.md for attributions.
|
||||
</p>
|
||||
</footer>
|
||||
|
||||
{% block scripts %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>{{ title }}</title>
|
||||
<link rel="icon"
|
||||
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 36 36%22><text y=%2232%22 font-size=%2232%22>🚀</text></svg>">
|
||||
<script src="https://cdn.jsdelivr.net/npm/fuse.js/dist/fuse.min.js"></script>
|
||||
<style>
|
||||
/* Reset Styles */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* General Styles */
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #0D0A09;
|
||||
color: white;
|
||||
}
|
||||
|
||||
li {
|
||||
font-size: large;
|
||||
list-style-type: none;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
/* Header Styles */
|
||||
.header {
|
||||
background-color: #0FB981;
|
||||
color: white;
|
||||
padding: 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Main Content Styles */
|
||||
.main-content {
|
||||
margin: 2rem auto;
|
||||
padding: 1rem;
|
||||
background-color: #282828;
|
||||
color: white;
|
||||
max-width: 800px;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.main-content a {
|
||||
color: #0FB981;
|
||||
}
|
||||
|
||||
.head-vol {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.Bl-compact { #Table of Contents
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/* Responsive Adjustments */
|
||||
@media (max-width: 600px) {
|
||||
.main-content {
|
||||
margin: 1rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Extra CSS */
|
||||
{% block extra_css %}
|
||||
{% endblock %}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
359
templates/index.html
Normal file
359
templates/index.html
Normal file
@@ -0,0 +1,359 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block header_title %}Rocky Linux {{ version }} Man Pages{% endblock %}
|
||||
{% block header_subtitle %}Search and browse {{ total_pages }} man pages{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
.search-box {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
width: 100%;
|
||||
padding: 0.75rem 1rem;
|
||||
font-size: 1rem;
|
||||
background-color: var(--bg-tertiary);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
color: var(--text-primary);
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
|
||||
.search-input:focus {
|
||||
outline: none;
|
||||
border-color: var(--accent-primary);
|
||||
box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.2);
|
||||
}
|
||||
|
||||
.search-input:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.search-stats {
|
||||
margin-top: 1rem;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.results-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.result-item {
|
||||
padding: 0.75rem 0;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.result-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.result-link {
|
||||
font-size: 1.1rem;
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.result-section {
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.result-package {
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.85rem;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.loading {
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.spinner {
|
||||
display: inline-block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: 3px solid var(--border-color);
|
||||
border-top-color: var(--accent-primary);
|
||||
border-radius: 50%;
|
||||
animation: spin 0.8s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.no-results {
|
||||
text-align: center;
|
||||
padding: 3rem 1rem;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.quick-links {
|
||||
margin-top: 2rem;
|
||||
padding-top: 1.5rem;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.quick-links h3 {
|
||||
margin-bottom: 1rem;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.package-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.package-link {
|
||||
padding: 0.5rem;
|
||||
background-color: var(--bg-tertiary);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
transition: background-color 0.2s, border-color 0.2s;
|
||||
min-height: 44px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.package-link:hover {
|
||||
background-color: var(--bg-primary);
|
||||
border-color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.view-all-container {
|
||||
text-align: center;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.view-all-button {
|
||||
display: inline-block;
|
||||
padding: 0.75rem 1.5rem;
|
||||
background-color: var(--bg-tertiary);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
transition: all 0.2s;
|
||||
min-height: 44px;
|
||||
}
|
||||
|
||||
.view-all-button:hover {
|
||||
background-color: var(--bg-primary);
|
||||
border-color: var(--accent-primary);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.search-input {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.package-grid {
|
||||
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
||||
}
|
||||
|
||||
.result-link {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.result-package {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.package-grid {
|
||||
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
|
||||
}
|
||||
|
||||
.quick-links h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<div class="search-box">
|
||||
<input type="text" id="searchInput" class="search-input" placeholder="Loading search index..." disabled>
|
||||
<div class="search-stats" id="searchStats">
|
||||
<div class="loading">
|
||||
<span class="spinner"></span>
|
||||
<span style="margin-left: 0.5rem;">Loading search index...</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="resultsContainer">
|
||||
<ul class="results-list" id="resultsList"></ul>
|
||||
</div>
|
||||
|
||||
<div class="quick-links">
|
||||
<h3>Browse by Package</h3>
|
||||
<div class="package-grid">
|
||||
{% for package in packages[:50] %}
|
||||
<a href="#" class="package-link" data-package="{{ package }}">{{ package }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="view-all-container">
|
||||
<a href="packages.html" class="button view-all-button">
|
||||
View All Packages →
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
|
||||
<script>
|
||||
let fuse;
|
||||
let searchData = [];
|
||||
|
||||
// Load search index
|
||||
fetch('search.json.gz')
|
||||
.then(response => response.body.pipeThrough(new DecompressionStream('gzip')))
|
||||
.then(stream => new Response(stream))
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
// Flatten data for searching
|
||||
searchData = [];
|
||||
for (const [pkg, pages] of Object.entries(data)) {
|
||||
for (const [key, page] of Object.entries(pages)) {
|
||||
searchData.push({
|
||||
...page,
|
||||
package: pkg
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize Fuse.js
|
||||
fuse = new Fuse(searchData, {
|
||||
keys: [
|
||||
{ name: 'name', weight: 2.0 },
|
||||
{ name: 'display_name', weight: 1.5 },
|
||||
{ name: 'package', weight: 1.0 },
|
||||
{ name: 'full_name', weight: 0.8 }
|
||||
],
|
||||
threshold: 0.25,
|
||||
minMatchCharLength: 2,
|
||||
ignoreLocation: false,
|
||||
location: 0
|
||||
});
|
||||
|
||||
// Enable search
|
||||
const searchInput = document.getElementById('searchInput');
|
||||
searchInput.disabled = false;
|
||||
searchInput.placeholder = 'Search man pages... (e.g., "bash", "printf", "systemd")';
|
||||
|
||||
document.getElementById('searchStats').innerHTML =
|
||||
`<strong>${searchData.length}</strong> man pages available`;
|
||||
|
||||
// Check for query parameter
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const query = urlParams.get('q');
|
||||
|
||||
if (query && query.trim()) {
|
||||
searchInput.value = query;
|
||||
searchInput.focus();
|
||||
runSearch(query.trim());
|
||||
} else {
|
||||
// Show all initially
|
||||
displayResults(searchData.slice(0, 50));
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading search index:', error);
|
||||
document.getElementById('searchStats').innerHTML =
|
||||
'<span style="color: var(--warning)">Error loading search index</span>';
|
||||
});
|
||||
|
||||
// Search function
|
||||
function runSearch(query) {
|
||||
if (!query) {
|
||||
displayResults(searchData.slice(0, 50));
|
||||
document.getElementById('searchStats').innerHTML =
|
||||
`Showing 50 of <strong>${searchData.length}</strong> man pages`;
|
||||
return;
|
||||
}
|
||||
|
||||
const results = fuse.search(query, { limit: 100 });
|
||||
const items = results.map(r => r.item);
|
||||
|
||||
displayResults(items);
|
||||
|
||||
document.getElementById('searchStats').innerHTML =
|
||||
`Found <strong>${items.length}</strong> result${items.length !== 1 ? 's' : ''}`;
|
||||
}
|
||||
|
||||
// Search handler
|
||||
document.getElementById('searchInput').addEventListener('input', function (e) {
|
||||
const query = e.target.value.trim();
|
||||
runSearch(query);
|
||||
|
||||
// Update URL with search query
|
||||
const url = new URL(window.location);
|
||||
if (query) {
|
||||
url.searchParams.set('q', query);
|
||||
} else {
|
||||
url.searchParams.delete('q');
|
||||
}
|
||||
window.history.replaceState({}, '', url);
|
||||
});
|
||||
|
||||
// Package link handler
|
||||
document.querySelectorAll('.package-link').forEach(link => {
|
||||
link.addEventListener('click', function (e) {
|
||||
e.preventDefault();
|
||||
const pkg = this.dataset.package;
|
||||
const pkgResults = searchData.filter(item => item.package === pkg);
|
||||
displayResults(pkgResults);
|
||||
document.getElementById('searchInput').value = pkg;
|
||||
document.getElementById('searchStats').innerHTML =
|
||||
`<strong>${pkgResults.length}</strong> man pages in <strong>${pkg}</strong>`;
|
||||
|
||||
// Update URL with package search
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.set('q', pkg);
|
||||
window.history.replaceState({}, '', url);
|
||||
|
||||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||
});
|
||||
});
|
||||
|
||||
function displayResults(items) {
|
||||
const resultsList = document.getElementById('resultsList');
|
||||
|
||||
if (items.length === 0) {
|
||||
resultsList.innerHTML =
|
||||
'<div class="no-results">No man pages found. Try a different search term.</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
resultsList.innerHTML = items.map(item => `
|
||||
<li class="result-item">
|
||||
<a href="${item.url}" class="result-link">
|
||||
<span>${item.display_name}</span>
|
||||
<span class="result-package">${item.package}</span>
|
||||
</a>
|
||||
</li>
|
||||
`).join('');
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -1,78 +0,0 @@
|
||||
{% extends "base.j2" %}
|
||||
{% block extra_css %}
|
||||
input#searchInput {
|
||||
width: 100%;
|
||||
height: 2rem;
|
||||
padding: 0.5rem;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #ccc;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 1rem;
|
||||
outline: none;
|
||||
transition: border-color 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
input#searchInput:focus {
|
||||
border-color: #0FB981;
|
||||
box-shadow: 0 0 8px 0 #0FB981;
|
||||
}
|
||||
|
||||
#searchInputLabel {
|
||||
display: block;
|
||||
font-size: larger;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<header class="header">
|
||||
<h1>{{ header_title }}</h1>
|
||||
</header>
|
||||
<main class="main-content">
|
||||
<label id="searchInputLabel" for="searchInput">Search:</label>
|
||||
<input id="searchInput" placeholder="Loading..." oninput="searchItems()" role="search" disabled />
|
||||
<br />
|
||||
<h2 id="result_header"></h2>
|
||||
<ul id="results"></ul>
|
||||
</main>
|
||||
<script>
|
||||
let fuse;
|
||||
let index;
|
||||
|
||||
fetch('list.json.gz')
|
||||
.then(response => response.body.pipeThrough(new DecompressionStream('gzip')))
|
||||
.then(stream => new Response(stream))
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
const flattenedData = [];
|
||||
Object.values(data).forEach(category => {
|
||||
Object.values(category).forEach(item => {
|
||||
flattenedData.push(item);
|
||||
});
|
||||
});
|
||||
fuse = new Fuse(flattenedData, {
|
||||
keys: ['fullname'],
|
||||
threshold: 0.2
|
||||
});
|
||||
index = fuse.index; // Create the index
|
||||
document.getElementById("searchInput").placeholder = "";
|
||||
document.getElementById("searchInput").disabled = false;
|
||||
});
|
||||
|
||||
function searchItems() {
|
||||
const query = document.getElementById("searchInput").value;
|
||||
const results = fuse.search(query, { limit: 50 }); // Limit results for performance
|
||||
const list = document.getElementById("results");
|
||||
reault_header = document.getElementById("result_header");
|
||||
result_header.textContent = `Results:`;
|
||||
list.innerHTML = "";
|
||||
results.forEach(item => {
|
||||
const li = document.createElement("li");
|
||||
const a = document.createElement("a");
|
||||
a.href = item.item.url;
|
||||
a.textContent = item.item.fullname;
|
||||
li.appendChild(a);
|
||||
list.appendChild(li);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -1,9 +0,0 @@
|
||||
{% extends "base.j2" %}
|
||||
{% block body %}
|
||||
<header class="header">
|
||||
<h1>{{ header_title }}</h1>
|
||||
</header>
|
||||
<main class="main-content">
|
||||
{{ main_content }}
|
||||
</main>
|
||||
{% endblock %}
|
||||
267
templates/manpage.html
Normal file
267
templates/manpage.html
Normal file
@@ -0,0 +1,267 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block header_title %}{{ header_title }}{% endblock %}
|
||||
{% block header_subtitle %}{{ package_name }} - Rocky Linux {{ version }}{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
/* Man page specific styles */
|
||||
.man-header {
|
||||
margin-bottom: 2rem;
|
||||
padding-bottom: 1.5rem;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.header-left {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.back-button {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
font-weight: 500;
|
||||
text-decoration: none;
|
||||
transition: color 0.2s;
|
||||
align-self: flex-start;
|
||||
}
|
||||
|
||||
.back-button:hover {
|
||||
color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.title-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.man-meta {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1.5rem;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.meta-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
/* Style the mandoc output */
|
||||
.man-content {
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.man-content table {
|
||||
width: 100%;
|
||||
margin-bottom: 1rem;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.man-content table.head,
|
||||
.man-content table.foot {
|
||||
background-color: var(--bg-tertiary);
|
||||
}
|
||||
|
||||
.man-content td {
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.man-content .head-ltitle,
|
||||
.man-content .head-vol,
|
||||
.man-content .head-rtitle {
|
||||
color: var(--text-primary);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.man-content .head-vol {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.man-content .head-rtitle {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.man-content h1, .man-content h2 {
|
||||
color: var(--accent-primary);
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.man-content h2 {
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
.man-content code,
|
||||
.man-content .Nm,
|
||||
.man-content .Cm,
|
||||
.man-content .Fl {
|
||||
background-color: var(--bg-tertiary);
|
||||
padding: 0.2rem 0.4rem;
|
||||
border-radius: 3px;
|
||||
font-family: 'Monaco', 'Courier New', monospace;
|
||||
font-size: 0.9em;
|
||||
color: var(--success);
|
||||
}
|
||||
|
||||
.man-content pre {
|
||||
background-color: var(--bg-primary);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
padding: 1rem;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.man-content .Bl-bullet,
|
||||
.man-content .Bl-enum,
|
||||
.man-content .Bl-dash {
|
||||
margin: 1rem 0;
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
.man-content .Bl-tag {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.man-content dt {
|
||||
font-weight: 600;
|
||||
color: var(--accent-primary);
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.man-content dd {
|
||||
margin-left: 2rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.man-content a {
|
||||
color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.man-content a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Table of contents */
|
||||
.man-content .Bl-compact.toc {
|
||||
background-color: var(--bg-tertiary);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
padding: 1rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.man-content .toc li {
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
|
||||
/* Responsive */
|
||||
@media (max-width: 768px) {
|
||||
.man-header {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.man-meta {
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.man-content h1, .man-content h2 {
|
||||
font-size: 1.3rem;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.man-content h2 {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.man-content pre {
|
||||
font-size: 0.85rem;
|
||||
padding: 0.75rem;
|
||||
}
|
||||
|
||||
.man-content code,
|
||||
.man-content .Nm,
|
||||
.man-content .Cm,
|
||||
.man-content .Fl {
|
||||
font-size: 0.85em;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.man-content table {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.man-content dd {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.man-content .Bl-bullet,
|
||||
.man-content .Bl-enum,
|
||||
.man-content .Bl-dash {
|
||||
padding-left: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.back-button {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.man-content h1, .man-content h2 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.man-content h2 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.man-content {
|
||||
line-height: 1.6;
|
||||
}
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<div class="man-header">
|
||||
<div class="header-left">
|
||||
<a href="/{{ version }}/index.html" class="back-button">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none"
|
||||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M19 12H5M12 19l-7-7 7-7" />
|
||||
</svg>
|
||||
Back to Search
|
||||
</a>
|
||||
<div class="title-group">
|
||||
<h2 style="margin: 0; color: var(--text-primary);">{{ header_title }}</h2>
|
||||
<div class="man-meta">
|
||||
<span class="meta-item"><strong>Package:</strong> {{ package_name }}</span>
|
||||
<span class="meta-item"><strong>Section:</strong> {{ section }}</span>
|
||||
{% if language != 'en' %}
|
||||
<span class="meta-item"><strong>Language:</strong> {{ language }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="man-content">
|
||||
{{ content|safe }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
226
templates/packages.html
Normal file
226
templates/packages.html
Normal file
@@ -0,0 +1,226 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block header_title %}All Packages{% endblock %}
|
||||
{% block header_subtitle %}Browse all {{ total_packages }} packages in Rocky Linux {{ version }}{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
.back-button {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
font-weight: 500;
|
||||
text-decoration: none;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
|
||||
.back-button:hover {
|
||||
color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.az-nav {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem;
|
||||
justify-content: center;
|
||||
margin-bottom: 2rem;
|
||||
padding-bottom: 2rem;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.az-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
border-radius: 4px;
|
||||
background-color: var(--bg-tertiary);
|
||||
color: var(--text-primary);
|
||||
text-decoration: none;
|
||||
font-family: "JetBrains Mono", monospace;
|
||||
font-weight: 600;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
|
||||
.az-link:hover {
|
||||
background-color: var(--accent-primary);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.az-link.disabled {
|
||||
opacity: 0.3;
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.package-section {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 1.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.section-letter {
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
color: var(--accent-primary);
|
||||
font-family: "Red Hat Display", sans-serif;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
.section-count {
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.package-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.package-card {
|
||||
display: block;
|
||||
padding: 1rem;
|
||||
background-color: var(--bg-tertiary);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
|
||||
.package-card:hover {
|
||||
transform: translateY(-2px);
|
||||
border-color: var(--accent-primary);
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.pkg-name {
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.pkg-count {
|
||||
display: block;
|
||||
font-size: 0.85rem;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.back-to-top {
|
||||
display: inline-block;
|
||||
margin-top: 2rem;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.az-nav {
|
||||
gap: 0.375rem;
|
||||
}
|
||||
|
||||
.az-link {
|
||||
width: 2.25rem;
|
||||
height: 2.25rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.package-grid {
|
||||
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
|
||||
}
|
||||
|
||||
.section-letter {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.package-card {
|
||||
padding: 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.az-nav {
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.az-link {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.package-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.pkg-name {
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.pkg-count {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<div style="margin-bottom: 2rem;">
|
||||
<a href="./index.html" class="back-button">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none"
|
||||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M19 12H5M12 19l-7-7 7-7" />
|
||||
</svg>
|
||||
Back to Search
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<nav class="az-nav">
|
||||
{% for letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" %}
|
||||
{% if letter in packages_by_letter %}
|
||||
<a href="#section-{{ letter }}" class="az-link">{{ letter }}</a>
|
||||
{% else %}
|
||||
<span class="az-link disabled">{{ letter }}</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if 'other' in packages_by_letter %}
|
||||
<a href="#section-other" class="az-link">#</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
|
||||
{% for letter, packages in packages_by_letter.items()|sort %}
|
||||
<div id="section-{{ letter }}" class="package-section">
|
||||
<div class="section-header">
|
||||
<span class="section-letter">{{ letter }}</span>
|
||||
<span class="section-count">{{ packages|length }} packages</span>
|
||||
</div>
|
||||
<div class="package-grid">
|
||||
{% for package in packages %}
|
||||
<a href="index.html?q={{ package.name|urlencode }}" class="package-card">
|
||||
<span class="pkg-name">{{ package.name }}</span>
|
||||
<span class="pkg-count">{{ package.count }} man pages</span>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<a href="#" class="back-to-top">↑ Back to top</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
5
templates/rocky-linux-logo.svg
Normal file
5
templates/rocky-linux-logo.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="1101" height="193" viewBox="0 0 1101 193" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M186.658 128.658C190.119 118.746 192 108.093 192 97C192 43.9807 149.019 1 96 1C42.9807 1 0 43.9807 0 97C0 123.234 10.523 147.011 27.5783 164.338L124.958 66.9584L149 91L186.658 128.658ZM169.122 159.205L124.958 115.042L55.7978 184.202C68.0269 189.849 81.6455 193 96 193C125.288 193 151.514 179.884 169.122 159.205Z" fill="#10B981"/>
|
||||
<path d="M251.072 147V46.2H300.32C305.408 46.2 310.064 46.968 314.288 48.504C318.608 50.04 322.304 52.2 325.376 54.984C328.448 57.672 330.848 60.936 332.576 64.776C334.304 68.616 335.168 72.84 335.168 77.448C335.168 83.784 333.344 89.448 329.696 94.44C326.144 99.432 321.392 103.128 315.44 105.528L337.76 147H314.432L294.704 108.408H271.952V147H251.072ZM298.448 64.2H271.952V91.272H298.448C303.152 91.272 306.896 90.024 309.68 87.528C312.56 85.032 314 81.768 314 77.736C314 73.704 312.56 70.44 309.68 67.944C306.896 65.448 303.152 64.2 298.448 64.2ZM339.695 109.56C339.695 104.088 340.703 99 342.719 94.296C344.831 89.496 347.663 85.368 351.215 81.912C354.863 78.36 359.135 75.576 364.031 73.56C368.927 71.544 374.159 70.536 379.727 70.536C385.295 70.536 390.527 71.544 395.423 73.56C400.319 75.576 404.543 78.36 408.095 81.912C411.743 85.368 414.575 89.496 416.591 94.296C418.703 99 419.759 104.088 419.759 109.56C419.759 115.032 418.703 120.168 416.591 124.968C414.575 129.672 411.743 133.752 408.095 137.208C404.543 140.664 400.319 143.4 395.423 145.416C390.527 147.432 385.295 148.44 379.727 148.44C374.159 148.44 368.927 147.432 364.031 145.416C359.135 143.4 354.863 140.664 351.215 137.208C347.663 133.752 344.831 129.672 342.719 124.968C340.703 120.168 339.695 115.032 339.695 109.56ZM379.727 131.304C385.487 131.304 390.383 129.192 394.415 124.968C398.447 120.744 400.463 115.608 400.463 109.56C400.463 103.416 398.447 98.232 394.415 94.008C390.383 89.784 385.487 87.672 379.727 87.672C373.967 87.672 369.071 89.784 365.039 94.008C361.007 98.232 358.991 103.416 358.991 109.56C358.991 115.608 361.007 120.744 365.039 124.968C369.071 129.192 373.967 131.304 379.727 131.304ZM469.168 131.16C472.528 131.16 475.648 130.488 478.528 129.144C481.504 127.8 484.336 125.688 487.024 122.808L498.832 135.048C494.992 139.272 490.384 142.584 485.008 144.984C479.632 147.288 474.064 148.44 468.304 148.44C462.832 148.44 457.648 147.432 452.752 145.416C447.952 143.4 443.776 140.664 440.224 137.208C436.768 133.752 434.032 129.672 432.016 124.968C430 120.168 428.992 115.032 428.992 109.56C428.992 104.088 430 99 432.016 94.296C434.032 89.496 436.768 85.368 440.224 81.912C443.776 78.36 447.952 75.576 452.752 73.56C457.648 71.544 462.832 70.536 468.304 70.536C474.256 70.536 479.968 71.736 485.44 74.136C490.912 76.44 495.568 79.704 499.408 83.928L487.312 96.744C484.624 93.768 481.744 91.512 478.672 89.976C475.6 88.44 472.288 87.672 468.736 87.672C463.072 87.672 458.272 89.784 454.336 94.008C450.496 98.232 448.576 103.416 448.576 109.56C448.576 115.704 450.544 120.84 454.48 124.968C458.512 129.096 463.408 131.16 469.168 131.16ZM509.089 147V46.2L528.817 41.88V103.656L561.217 71.976H583.537L548.401 106.392L585.697 147H560.497L528.817 112.728V147H509.089ZM612.643 150.456L613.795 147.72L584.562 71.976H606.307L624.883 123.096L646.195 71.976H667.507L632.947 152.904C629.107 161.928 624.643 168.36 619.555 172.2C614.467 176.04 607.843 177.96 599.683 177.96C597.955 177.96 596.275 177.864 594.643 177.672C593.107 177.576 591.859 177.384 590.899 177.096V160.104C591.859 160.296 592.867 160.44 593.923 160.536C594.979 160.632 596.275 160.68 597.811 160.68C601.363 160.68 604.339 159.816 606.739 158.088C609.235 156.36 611.203 153.816 612.643 150.456ZM706.744 147V46.2H717.832V137.064H777.88V147H706.744ZM796.963 61.032C795.043 61.032 793.363 60.312 791.923 58.872C790.483 57.432 789.763 55.752 789.763 53.832C789.763 51.816 790.483 50.136 791.923 48.792C793.363 47.352 795.043 46.632 796.963 46.632C798.979 46.632 800.659 47.352 802.003 48.792C803.443 50.136 804.163 51.816 804.163 53.832C804.163 55.752 803.443 57.432 802.003 58.872C800.659 60.312 798.979 61.032 796.963 61.032ZM802.291 74.856V147H791.635V74.856H802.291ZM820.463 147V74.856H831.119V83.352C833.903 80.088 837.215 77.64 841.055 76.008C844.895 74.28 849.167 73.416 853.871 73.416C862.031 73.416 868.703 76.008 873.887 81.192C879.071 86.376 881.663 93.096 881.663 101.352V147H871.151V103.512C871.151 97.176 869.327 92.136 865.679 88.392C862.031 84.648 857.135 82.776 850.991 82.776C846.671 82.776 842.783 83.736 839.327 85.656C835.967 87.576 833.231 90.312 831.119 93.864V147H820.463ZM909.015 74.856V118.344C909.015 124.68 910.839 129.72 914.487 133.464C918.135 137.208 923.031 139.08 929.175 139.08C933.495 139.08 937.335 138.12 940.695 136.2C944.151 134.184 946.935 131.4 949.047 127.848V74.856H959.703V147H949.047V138.648C946.263 141.912 942.951 144.36 939.111 145.992C935.367 147.624 931.143 148.44 926.439 148.44C918.183 148.44 911.463 145.848 906.279 140.664C901.095 135.48 898.503 128.76 898.503 120.504V74.856H909.015ZM969.47 147L997.838 109.848L970.91 74.856H983.582L1004.03 101.928L1024.48 74.856H1036.72L1010.08 109.704L1038.59 147H1025.92L1003.89 117.624L981.566 147H969.47Z" fill="white"/>
|
||||
<path d="M1048 70.624V54.976H1042.82V51.952H1048V45.856L1051.5 44.944V51.952H1058.75V54.976H1051.5V69.712C1051.5 70.992 1051.79 71.92 1052.37 72.496C1052.94 73.04 1053.89 73.312 1055.2 73.312C1055.87 73.312 1056.46 73.264 1056.98 73.168C1057.52 73.072 1058.1 72.912 1058.7 72.688V75.808C1058.1 76.032 1057.41 76.192 1056.64 76.288C1055.9 76.384 1055.18 76.432 1054.48 76.432C1052.4 76.432 1050.8 75.936 1049.68 74.944C1048.56 73.952 1048 72.512 1048 70.624ZM1062.56 76V51.952H1066.11V54.592C1067 53.568 1068.04 52.8 1069.23 52.288C1070.41 51.744 1071.72 51.472 1073.16 51.472C1074.83 51.472 1076.32 51.872 1077.63 52.672C1078.97 53.44 1080.01 54.496 1080.75 55.84C1081.74 54.368 1082.92 53.28 1084.3 52.576C1085.71 51.84 1087.28 51.472 1089 51.472C1091.6 51.472 1093.71 52.336 1095.34 54.064C1097 55.792 1097.84 58.032 1097.84 60.784V76H1094.33V61.504C1094.33 59.392 1093.77 57.712 1092.65 56.464C1091.53 55.216 1090.01 54.592 1088.09 54.592C1086.78 54.592 1085.58 54.928 1084.49 55.6C1083.4 56.272 1082.48 57.248 1081.71 58.528C1081.77 58.88 1081.82 59.248 1081.85 59.632C1081.92 59.984 1081.95 60.368 1081.95 60.784V76H1078.44V61.504C1078.44 59.392 1077.88 57.712 1076.76 56.464C1075.64 55.216 1074.14 54.592 1072.25 54.592C1070.97 54.592 1069.8 54.896 1068.75 55.504C1067.72 56.08 1066.84 56.944 1066.11 58.096V76H1062.56Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
148
templates/root.html
Normal file
148
templates/root.html
Normal file
@@ -0,0 +1,148 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block header_title %}Rocky Linux™ Man Pages{% endblock %}
|
||||
{% block header_subtitle %}Man page documentation for Rocky Linux™ packages{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
.logo-container {
|
||||
text-align: center;
|
||||
margin: 2rem 0 3rem 0;
|
||||
}
|
||||
|
||||
.logo-container svg {
|
||||
max-width: 400px;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.version-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.logo-container {
|
||||
margin: 1rem 0 2rem 0;
|
||||
}
|
||||
|
||||
.logo-container svg {
|
||||
max-width: 280px;
|
||||
}
|
||||
|
||||
.version-grid {
|
||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.version-card {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.version-number {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.logo-container svg {
|
||||
max-width: 240px;
|
||||
}
|
||||
|
||||
.version-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.intro {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
.version-card {
|
||||
background: var(--bg-tertiary);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 8px;
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
transition: transform 0.2s, box-shadow 0.2s, border-color 0.2s;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.version-card:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
||||
border-color: var(--accent-primary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.version-number {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--accent-primary);
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.version-label {
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.version-browse {
|
||||
color: var(--accent-primary);
|
||||
font-size: 0.85rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.intro {
|
||||
margin-bottom: 2rem;
|
||||
color: var(--text-secondary);
|
||||
line-height: 1.6;
|
||||
max-width: 800px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.version-section h2 {
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--text-primary);
|
||||
text-align: center;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content">
|
||||
<div class="logo-container">
|
||||
<svg width="400" height="70" viewBox="0 0 1101 193" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M186.658 128.658C190.119 118.746 192 108.093 192 97C192 43.9807 149.019 1 96 1C42.9807 1 0 43.9807 0 97C0 123.234 10.523 147.011 27.5783 164.338L124.958 66.9584L149 91L186.658 128.658ZM169.122 159.205L124.958 115.042L55.7978 184.202C68.0269 189.849 81.6455 193 96 193C125.288 193 151.514 179.884 169.122 159.205Z" fill="#10B981"/>
|
||||
<path d="M251.072 147V46.2H300.32C305.408 46.2 310.064 46.968 314.288 48.504C318.608 50.04 322.304 52.2 325.376 54.984C328.448 57.672 330.848 60.936 332.576 64.776C334.304 68.616 335.168 72.84 335.168 77.448C335.168 83.784 333.344 89.448 329.696 94.44C326.144 99.432 321.392 103.128 315.44 105.528L337.76 147H314.432L294.704 108.408H271.952V147H251.072ZM298.448 64.2H271.952V91.272H298.448C303.152 91.272 306.896 90.024 309.68 87.528C312.56 85.032 314 81.768 314 77.736C314 73.704 312.56 70.44 309.68 67.944C306.896 65.448 303.152 64.2 298.448 64.2ZM339.695 109.56C339.695 104.088 340.703 99 342.719 94.296C344.831 89.496 347.663 85.368 351.215 81.912C354.863 78.36 359.135 75.576 364.031 73.56C368.927 71.544 374.159 70.536 379.727 70.536C385.295 70.536 390.527 71.544 395.423 73.56C400.319 75.576 404.543 78.36 408.095 81.912C411.743 85.368 414.575 89.496 416.591 94.296C418.703 99 419.759 104.088 419.759 109.56C419.759 115.032 418.703 120.168 416.591 124.968C414.575 129.672 411.743 133.752 408.095 137.208C404.543 140.664 400.319 143.4 395.423 145.416C390.527 147.432 385.295 148.44 379.727 148.44C374.159 148.44 368.927 147.432 364.031 145.416C359.135 143.4 354.863 140.664 351.215 137.208C347.663 133.752 344.831 129.672 342.719 124.968C340.703 120.168 339.695 115.032 339.695 109.56ZM379.727 131.304C385.487 131.304 390.383 129.192 394.415 124.968C398.447 120.744 400.463 115.608 400.463 109.56C400.463 103.416 398.447 98.232 394.415 94.008C390.383 89.784 385.487 87.672 379.727 87.672C373.967 87.672 369.071 89.784 365.039 94.008C361.007 98.232 358.991 103.416 358.991 109.56C358.991 115.608 361.007 120.744 365.039 124.968C369.071 129.192 373.967 131.304 379.727 131.304ZM469.168 131.16C472.528 131.16 475.648 130.488 478.528 129.144C481.504 127.8 484.336 125.688 487.024 122.808L498.832 135.048C494.992 139.272 490.384 142.584 485.008 144.984C479.632 147.288 474.064 148.44 468.304 148.44C462.832 148.44 457.648 147.432 452.752 145.416C447.952 143.4 443.776 140.664 440.224 137.208C436.768 133.752 434.032 129.672 432.016 124.968C430 120.168 428.992 115.032 428.992 109.56C428.992 104.088 430 99 432.016 94.296C434.032 89.496 436.768 85.368 440.224 81.912C443.776 78.36 447.952 75.576 452.752 73.56C457.648 71.544 462.832 70.536 468.304 70.536C474.256 70.536 479.968 71.736 485.44 74.136C490.912 76.44 495.568 79.704 499.408 83.928L487.312 96.744C484.624 93.768 481.744 91.512 478.672 89.976C475.6 88.44 472.288 87.672 468.736 87.672C463.072 87.672 458.272 89.784 454.336 94.008C450.496 98.232 448.576 103.416 448.576 109.56C448.576 115.704 450.544 120.84 454.48 124.968C458.512 129.096 463.408 131.16 469.168 131.16ZM509.089 147V46.2L528.817 41.88V103.656L561.217 71.976H583.537L548.401 106.392L585.697 147H560.497L528.817 112.728V147H509.089ZM612.643 150.456L613.795 147.72L584.562 71.976H606.307L624.883 123.096L646.195 71.976H667.507L632.947 152.904C629.107 161.928 624.643 168.36 619.555 172.2C614.467 176.04 607.843 177.96 599.683 177.96C597.955 177.96 596.275 177.864 594.643 177.672C593.107 177.576 591.859 177.384 590.899 177.096V160.104C591.859 160.296 592.867 160.44 593.923 160.536C594.979 160.632 596.275 160.68 597.811 160.68C601.363 160.68 604.339 159.816 606.739 158.088C609.235 156.36 611.203 153.816 612.643 150.456ZM706.744 147V46.2H717.832V137.064H777.88V147H706.744ZM796.963 61.032C795.043 61.032 793.363 60.312 791.923 58.872C790.483 57.432 789.763 55.752 789.763 53.832C789.763 51.816 790.483 50.136 791.923 48.792C793.363 47.352 795.043 46.632 796.963 46.632C798.979 46.632 800.659 47.352 802.003 48.792C803.443 50.136 804.163 51.816 804.163 53.832C804.163 55.752 803.443 57.432 802.003 58.872C800.659 60.312 798.979 61.032 796.963 61.032ZM802.291 74.856V147H791.635V74.856H802.291ZM820.463 147V74.856H831.119V83.352C833.903 80.088 837.215 77.64 841.055 76.008C844.895 74.28 849.167 73.416 853.871 73.416C862.031 73.416 868.703 76.008 873.887 81.192C879.071 86.376 881.663 93.096 881.663 101.352V147H871.151V103.512C871.151 97.176 869.327 92.136 865.679 88.392C862.031 84.648 857.135 82.776 850.991 82.776C846.671 82.776 842.783 83.736 839.327 85.656C835.967 87.576 833.231 90.312 831.119 93.864V147H820.463ZM909.015 74.856V118.344C909.015 124.68 910.839 129.72 914.487 133.464C918.135 137.208 923.031 139.08 929.175 139.08C933.495 139.08 937.335 138.12 940.695 136.2C944.151 134.184 946.935 131.4 949.047 127.848V74.856H959.703V147H949.047V138.648C946.263 141.912 942.951 144.36 939.111 145.992C935.367 147.624 931.143 148.44 926.439 148.44C918.183 148.44 911.463 145.848 906.279 140.664C901.095 135.48 898.503 128.76 898.503 120.504V74.856H909.015ZM969.47 147L997.838 109.848L970.91 74.856H983.582L1004.03 101.928L1024.48 74.856H1036.72L1010.08 109.704L1038.59 147H1025.92L1003.89 117.624L981.566 147H969.47Z" fill="white"/>
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<div class="intro">
|
||||
<p>
|
||||
Man page documentation for packages in the Rocky Linux™ BaseOS and AppStream repositories.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="version-section">
|
||||
<h2>Select Version</h2>
|
||||
<div class="version-grid">
|
||||
{% for version in versions %}
|
||||
<a href="{{ version }}/index.html" class="version-card">
|
||||
<div class="version-number">{{ version }}</div>
|
||||
<div class="version-label">Rocky Linux™</div>
|
||||
<div class="version-browse">Browse man pages →</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user