git add templates/! REFACOR INTERFEJSU git add templates/
This commit is contained in:
@ -1,91 +1,154 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Changelog RouterOS{% endblock %}
|
||||
{% block extra_head %}
|
||||
<!-- Dodajemy Prism.js – globalny arkusz stylów będzie zmieniany przez base.html -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-okaidia.min.css" id="prism-style">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
||||
<style>
|
||||
|
||||
pre {
|
||||
background-color: #282c34;
|
||||
color: #abb2bf;
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.5;
|
||||
padding: 1rem;
|
||||
border-radius: 0 0 5px 5px;
|
||||
overflow-x: auto;
|
||||
margin: 0;
|
||||
{% block extra_head %}
|
||||
<!-- PRISM.JS (temat okaidia lub dowolny inny) -->
|
||||
<link rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-okaidia.min.css"
|
||||
id="prism-style">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
||||
|
||||
<style>
|
||||
/*
|
||||
1) Mniejszy rozmiar fontu w bloczku <code>
|
||||
2) Łamanie linii, max-width, itp.
|
||||
3) Tło w jasnym/ciemnym trybie
|
||||
*/
|
||||
|
||||
/* Mniejszy rozmiar i ograniczenie linii */
|
||||
pre code[class*="language-"] {
|
||||
font-size: 0.85rem !important; /* dopasuj do gustu, np. 0.9rem lub 0.8rem */
|
||||
line-height: 1.3 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
/* Łamanie linii i scroll w razie potrzeby */
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
overflow-wrap: break-word;
|
||||
max-width: 100%;
|
||||
overflow-x: auto;
|
||||
margin: 0;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
/* Tło w trybie jasnym */
|
||||
body.light-mode pre {
|
||||
background-color: #ffffff !important;
|
||||
color: #212529 !important;
|
||||
}
|
||||
/* Tło w trybie ciemnym */
|
||||
body.dark-mode pre {
|
||||
background-color: #2b2b2b !important;
|
||||
color: #e0e0e0 !important;
|
||||
}
|
||||
|
||||
body.dark-mode .card {
|
||||
background-color: #1e1e1e !important;
|
||||
color: #ccc !important;
|
||||
border-color: #444 !important;
|
||||
}
|
||||
|
||||
body.dark-mode .card-header {
|
||||
background-color: #333 !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container py-4">
|
||||
<!-- Nagłówek z tytułem i przyciskami akcji (przyciski aktualizacji są tutaj, globalny dark mode toggle już w navbarze) -->
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h2>Changelog RouterOS</h2>
|
||||
<a href="{{ url_for('force_fetch_changelogs') }}"
|
||||
class="btn btn-danger"
|
||||
onclick="return confirm('Czy na pewno chcesz ręcznie pobrać wszystkie changelogi? Operacja usunie wszystkie stare wpisy.');">
|
||||
Aktualizuj changelogi
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Nawigacja po kanałach -->
|
||||
<ul class="nav nav-tabs mb-3">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if channel=='stable' %}active{% endif %}" href="{{ url_for('routeros_changelog', channel='stable', series=series) }}">Stable</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if channel=='rc' %}active{% endif %}" href="{{ url_for('routeros_changelog', channel='rc', series=series) }}">RC</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if channel=='beta' %}active{% endif %}" href="{{ url_for('routeros_changelog', channel='beta', series=series) }}">Beta</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Nawigacja po seriach wersji -->
|
||||
<ul class="nav nav-pills mb-3">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if series=='7.x' %}active{% endif %}" href="{{ url_for('routeros_changelog', channel=channel, series='7.x') }}">7.x</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if series=='6.x' %}active{% endif %}" href="{{ url_for('routeros_changelog', channel=channel, series='6.x') }}">6.x</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Prezentacja wybranego wpisu changeloga -->
|
||||
{% if selected_entry %}
|
||||
<div class="mb-3">
|
||||
<h4 class="changelog-header">
|
||||
{{ selected_entry.version | format_version }}
|
||||
<small>({{ selected_entry.timestamp.strftime('%Y-%b-%d') }})</small>
|
||||
</h4>
|
||||
<pre><code class="language-plaintext">{{ selected_entry.details }}</code></pre>
|
||||
|
||||
<!-- Karta z cieniowaniem, nagłówek i ciało -->
|
||||
<div class="card border-0 shadow">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h4 class="mb-0">Changelog RouterOS</h4>
|
||||
<a href="{{ url_for('force_fetch_changelogs') }}"
|
||||
class="btn btn-danger btn-sm"
|
||||
onclick="return confirm('Czy na pewno chcesz ręcznie pobrać wszystkie changelogi? Operacja usunie wszystkie stare wpisy.');">
|
||||
Aktualizuj changelogi
|
||||
</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>Brak wpisów dla wybranych ustawień.</p>
|
||||
{% endif %}
|
||||
|
||||
<!-- Formularz wyboru innego wpisu -->
|
||||
{% if entries|length > 1 %}
|
||||
<form method="GET" action="{{ url_for('routeros_changelog') }}">
|
||||
<input type="hidden" name="channel" value="{{ channel }}">
|
||||
<input type="hidden" name="series" value="{{ series }}">
|
||||
<div class="input-group mb-3">
|
||||
<select name="version" class="form-select">
|
||||
{% for entry in entries %}
|
||||
<option value="{{ entry.version }}" {% if selected_entry and entry.version == selected_entry.version %}selected{% endif %}>
|
||||
{{ entry.version | format_version }} ({{ entry.timestamp.strftime('%Y-%b-%d') }})
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<button class="btn btn-primary" type="submit">Pokaż changelog</button>
|
||||
<div class="card-body">
|
||||
|
||||
<!-- Nawigacja kanałów (stable / rc / beta) -->
|
||||
<ul class="nav nav-tabs mb-3">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if channel=='stable' %}active{% endif %}"
|
||||
href="{{ url_for('routeros_changelog', channel='stable', series=series) }}">
|
||||
Stable
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if channel=='rc' %}active{% endif %}"
|
||||
href="{{ url_for('routeros_changelog', channel='rc', series=series) }}">
|
||||
RC
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if channel=='beta' %}active{% endif %}"
|
||||
href="{{ url_for('routeros_changelog', channel='beta', series=series) }}">
|
||||
Beta
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Nawigacja serii (7.x / 6.x) -->
|
||||
<ul class="nav nav-pills mb-3">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if series=='7.x' %}active{% endif %}"
|
||||
href="{{ url_for('routeros_changelog', channel=channel, series='7.x') }}">
|
||||
7.x
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if series=='6.x' %}active{% endif %}"
|
||||
href="{{ url_for('routeros_changelog', channel=channel, series='6.x') }}">
|
||||
6.x
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Prezentacja wybranego changeloga -->
|
||||
{% if selected_entry %}
|
||||
<div class="mb-3">
|
||||
<h5 class="fw-bold">
|
||||
{{ selected_entry.version | format_version }}
|
||||
<small class="text-muted">({{ selected_entry.timestamp.strftime('%Y-%b-%d') }})</small>
|
||||
</h5>
|
||||
<pre><code class="language-plaintext">{{ selected_entry.details }}</code></pre>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="alert alert-warning mb-3">
|
||||
Brak wpisów dla wybranych ustawień (kanał: {{ channel }}, seria: {{ series }}).
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- Wybór innej wersji, jeśli mamy >1 wpis -->
|
||||
{% if entries|length > 1 %}
|
||||
<form method="GET" action="{{ url_for('routeros_changelog') }}">
|
||||
<input type="hidden" name="channel" value="{{ channel }}">
|
||||
<input type="hidden" name="series" value="{{ series }}">
|
||||
|
||||
<div class="input-group mb-3">
|
||||
<select name="version" class="form-select">
|
||||
{% for entry in entries %}
|
||||
<option value="{{ entry.version }}"
|
||||
{% if selected_entry and entry.version == selected_entry.version %}selected{% endif %}>
|
||||
{{ entry.version | format_version }} ({{ entry.timestamp.strftime('%Y-%b-%d') }})
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<button class="btn btn-primary" type="submit">Pokaż</button>
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<div class="mt-4">
|
||||
<a href="{{ url_for('dashboard') }}" class="btn btn-secondary">Powrót do dashboardu</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<div class="mt-4">
|
||||
<a href="{{ url_for('dashboard') }}" class="btn btn-secondary">Powrót do dashboardu</a>
|
||||
</div>
|
||||
|
||||
</div> <!-- /card-body -->
|
||||
</div> <!-- /card -->
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
Reference in New Issue
Block a user