First version with useable(ish) oblique design
All checks were successful
Build containers when image tags change / build-if-image-changed (., web, containers, main container, git.baumann.gr/adebaumann/vui) (push) Successful in 46s
Build containers when image tags change / build-if-image-changed (data-loader, loader, initContainers, init-container, git.baumann.gr/adebaumann/vui-data-loader) (push) Successful in 6s

This commit is contained in:
2025-11-07 13:38:00 +01:00
parent 1a1115db6d
commit cca9022f53
81 changed files with 28999 additions and 161 deletions

View File

@@ -1,36 +1,197 @@
{% load static %}
<!DOCTYPE html>
<html>
<html lang="de-CH" class="no-js no-ie" itemscope itemtype="http://schema.org/WebPage">
<head>
<meta charset="utf-8">
<title>{% block title %}{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
{% load static %}
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}Vorgaben Informatiksicherheit{% endblock %} - Schweizerische Eidgenossenschaft</title>
<!-- Swiss Design System CSS -->
<link rel="stylesheet" href="{% static 'swiss/css/vendors.css' %}">
<link rel="stylesheet" href="{% static 'swiss/css/admin.css' %}">
<link rel="stylesheet" href="{% static 'swiss/css/print.css' %}" media="print">
<!-- Custom CSS -->
<link rel="stylesheet" href="{% static 'custom/css/admin_extras.css' %}">
<!-- Favicons -->
<link rel="shortcut icon" href="{% static 'swiss/img/ico/favicon.ico' %}">
<link rel="apple-touch-icon" sizes="57x57" href="{% static 'swiss/img/ico/apple-touch-icon-57x57.png' %}">
<link rel="apple-touch-icon" sizes="114x114" href="{% static 'swiss/img/ico/apple-touch-icon-114x114.png' %}">
<link rel="icon" type="image/png" href="{% static 'swiss/img/ico/favicon-96x96.png' %}" sizes="96x96">
<link rel="icon" type="image/png" href="{% static 'swiss/img/ico/favicon-32x32.png' %}" sizes="32x32">
<meta name="msapplication-TileColor" content="#ffffff">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Vorgaben</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-item nav-link active" href="/dokumente">Standards</a>
<!-- Accessibility skip links -->
<ul class="access-keys">
<li><a href="/" accesskey="0">Startseite</a></li>
<li><a href="#main-navigation" accesskey="1">Hauptnavigation</a></li>
<li><a href="#content" accesskey="2">Inhalt</a></li>
</ul>
<!-- Header with Swiss Logo -->
<header>
<a href="/" class="brand hidden-xs" title="Zur Startseite">
<img src="{% static 'swiss/img/logo-CH.svg' %}"
onerror="this.onerror=null; this.src='{% static 'swiss/img/logo-CH.png' %}'"
alt="Zur Startseite" />
<h1>Vorgaben Informatiksicherheit BIT</h1>
</a>
</header>
<!-- Main Navigation -->
<nav class="nav-main yamm navbar" id="main-navigation">
<h2 class="sr-only">Navigation</h2>
<!-- Mobile Navigation -->
<section class="nav-mobile">
<div class="table-row">
<div class="nav-mobile-header">
<div class="table-row">
<span class="nav-mobile-logo">
<img src="{% static 'swiss/img/swiss.svg' %}"
onerror="this.onerror=null; this.src='{% static 'swiss/img/swiss.png' %}'"
alt="Schweizerische Eidgenossenschaft" />
</span>
<h1><a href="/">Vorgaben Informatiksicherheit</a></h1>
</div>
</div>
<div class="table-cell dropdown">
<a href="#" class="nav-mobile-menu dropdown-toggle" data-toggle="dropdown">
<span class="icon icon--menu"></span>
</a>
<div class="drilldown dropdown-menu" role="menu">
<div class="drilldown-container">
<nav class="nav-page-list">
<ul>
<li><a href="/dokumente">Standards</a></li>
{% if user.is_staff %}
<li><a href="/dokumente/unvollstaendig/">Unvollständig</a></li>
{% endif %}
<li><a href="/referenzen">Referenzen</a></li>
<li><a href="/stichworte">Stichworte</a></li>
<li><a href="/search">Suche</a></li>
</ul>
<a href="#" class="yamm-close-bottom">
<span class="icon icon--top" aria-hidden="true"></span>
</a>
</nav>
</div>
</div>
</div>
<div class="table-cell dropdown">
<a href="/search" class="nav-mobile-menu">
<span class="icon icon--search"></span>
</a>
</div>
</div>
</section>
<!-- Desktop Tab Navigation -->
<ul class="nav navbar-nav">
<li class="dropdown {% if request.resolver_match.url_name == 'standard_list' or 'standard' in request.resolver_match.url_name %}current{% endif %}">
<a href="/dokumente">Standards</a>
</li>
{% if user.is_staff %}
<a class="nav-item nav-link" href="/dokumente/unvollstaendig/">Unvollständig</a>
<li class="dropdown {% if 'unvollstaendig' in request.path %}current{% endif %}">
<a href="/dokumente/unvollstaendig/">Unvollständig</a>
</li>
{% endif %}
<a class="nav-item nav-link" href="/referenzen">Referenzen</a>
<a class="nav-item nav-link" href="/stichworte">Stichworte</a>
<a class="nav-item nav-link" href="/search">Suche</a>
<li class="dropdown {% if 'referenzen' in request.path %}current{% endif %}">
<a href="/referenzen">Referenzen</a>
</li>
<li class="dropdown {% if 'stichworte' in request.path %}current{% endif %}">
<a href="/stichworte">Stichworte</a>
</li>
<li class="dropdown {% if 'search' in request.path %}current{% endif %}">
<a href="/search">Suche</a>
</li>
</ul>
</nav>
<!-- Main Content -->
<div class="container container-main" id="content">
{% if messages %}
<div class="row">
<div class="col-md-12">
{% for message in messages %}
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="close" data-dismiss="alert" aria-label="Schliessen">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endfor %}
</div>
</div>
{% endif %}
<div class="row">
{% block sidebar_left %}
{% if block.super or sidebar_left_content %}
<div class="col-md-3">
<nav class="nav-page-list" aria-label="Seitennavigation">
{{ block.super }}
</nav>
</div>
{% endif %}
{% endblock %}
<div class="{% if sidebar_left_content or block.super %}col-md-{% if sidebar_right_content %}6{% else %}9{% endif %}{% else %}col-md-{% if sidebar_right_content %}9{% else %}12{% endif %}{% endif %}">
{% block content %}
<h2>Inhalt</h2>
<p>Hauptinhalt der Seite</p>
{% endblock %}
</div>
{% block sidebar_right %}
{% if block.super or sidebar_right_content %}
<div class="col-md-3">
<aside>
{{ block.super }}
</aside>
</div>
{% endif %}
{% endblock %}
</div>
</div>
</nav>
<div class="d-flex">
<div class="col-md-2">{% block sidebar_left %}{% endblock %}</div>
<div class="flex-fill">{% block content %}Main Content{% endblock %}</div>
<div class="col-md-2">{% block sidebar_right %}{% endblock %}</div>
</div>
<div>VorgabenUI v0.949</div>
<!-- Footer -->
<footer>
<div class="container-fluid footer-service">
<div class="row">
<div class="col-sm-12">
<h2 class="sr-only">Fussbereich</h2>
</div>
</div>
</div>
<div class="container-fluid footer-address">
<div class="row">
<div class="col-sm-6">
<h3>Vorgaben Informatiksicherheit</h3>
<p>
Bundesamt für Informatik und Telekommunikation BIT<br>
<a href="https://www.bit.admin.ch" target="_blank" rel="noopener">www.bit.admin.ch</a>
</p>
</div>
<div class="col-sm-6 text-right">
<p class="text-muted">Version {{ version|default:"0.949" }}</p>
</div>
</div>
</div>
</footer>
<!-- Swiss Design System Scripts -->
<script src="{% static 'swiss/js/vendors.min.js' %}"></script>
<script src="{% static 'swiss/js/main.min.js' %}"></script>
<!-- Custom Scripts -->
{% block extra_js %}{% endblock %}
</body>
</html>

View File

@@ -1,30 +1,80 @@
{% extends "base.html" %}
{% load page_extras %}
{% block title %}Suchergebnisse für "{{ suchbegriff }}" - Vorgaben Informatiksicherheit{% endblock %}
{% block content %}
<h1 class="mb-4">Suchresultate für {{ suchbegriff }}</h1>
{% if resultat.geltungsbereich %}
<h2>Standards mit "{{suchbegriff}}" im Geltungsbereich</h2>
{% for standard,geltungsbereich in resultat.geltungsbereich.items %}
<h4>{{ standard }}</h4>
{% for typ, html in geltungsbereich %}
<div>{{ html|highlighttext:suchbegriff|safe }}</div>
{% endfor %}
{% endfor %}
{% endif %}
<div class="container-fluid">
<h1>Suchergebnisse für "{{ suchbegriff }}"</h1>
{% if resultat.all %}
<h2>Vorgaben mit "{{ suchbegriff }}"</h2>
{% for standard, vorgaben in resultat.all.items %}
<h4>{{ standard }}</h4>
<ul>
<div class="row">
<div class="col-md-12">
<p class="text-muted">
<a href="/search" class="icon icon--before icon--less">Neue Suche starten</a>
</p>
</div>
</div>
{% if resultat.geltungsbereich %}
<div class="row">
<div class="col-md-12">
<h2>Standards mit "{{ suchbegriff }}" im Geltungsbereich</h2>
{% for standard, geltungsbereich in resultat.geltungsbereich.items %}
<div class="card mb-3">
<div class="card-header">
<h3 class="h4 mb-0">{{ standard }}</h3>
</div>
<div class="card-body">
{% for typ, html in geltungsbereich %}
<div class="mb-2">{{ html|highlighttext:suchbegriff|safe }}</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% if resultat.all %}
<div class="row">
<div class="col-md-12">
<h2>Vorgaben mit "{{ suchbegriff }}"</h2>
{% for standard, vorgaben in resultat.all.items %}
<div class="card mb-3">
<div class="card-header">
<h3 class="h4 mb-0">{{ standard }}</h3>
</div>
<div class="card-body">
<ul class="list-unstyled">
{% for vorgabe in vorgaben %}
<li><a href="{% url 'standard_detail' nummer=vorgabe.dokument.nummer %}#{{vorgabe.Vorgabennummer}}">{{vorgabe}}</a></li>
{% endfor %}
</ul>
{% endfor %}
{% endif %}
<li class="mb-2">
<a href="{% url 'standard_detail' nummer=vorgabe.dokument.nummer %}#{{ vorgabe.Vorgabennummer }}"
class="icon icon--before icon--external">
{{ vorgabe }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% if not resultat.all %}
<h2>Keine Resultate für "{{suchbegriff}}"</h2>
{% endif %}
{% if not resultat.all and not resultat.geltungsbereich %}
<div class="row">
<div class="col-md-12">
<div class="alert alert-warning" role="alert">
<span class="icon icon--warning" aria-hidden="true"></span>
<strong>Keine Ergebnisse gefunden</strong>
<p>Für den Suchbegriff "{{ suchbegriff }}" wurden keine Resultate gefunden.</p>
<p>Versuchen Sie es mit einem anderen Suchbegriff oder verwenden Sie weniger spezifische Begriffe.</p>
</div>
</div>
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -1,28 +1,60 @@
{% extends "base.html" %}
{% block title %}Suche - Vorgaben Informatiksicherheit{% endblock %}
{% block content %}
<h1 class="mb-4">Suche</h1>
<div class="container-fluid">
<h1>Suche in den Vorgaben</h1>
{% if error_message %}
<div class="alert alert-danger">
<strong>Fehler:</strong> {{ error_message }}
{% if error_message %}
<div class="alert alert-danger" role="alert">
<span class="icon icon--error" aria-hidden="true"></span>
<strong>Fehler:</strong> {{ error_message }}
</div>
{% endif %}
<div class="row">
<div class="col-md-8">
<!-- Search form -->
<form action="." method="post" class="form-horizontal">
{% csrf_token %}
<div class="form-group">
<label for="query" class="control-label">Suchbegriff</label>
<div class="input-group">
<input type="text"
class="form-control"
id="query"
name="q"
placeholder="Suchbegriff eingeben …"
value="{{ search_term|default:'' }}"
required
maxlength="200"
aria-describedby="search-help">
<span class="input-group-btn">
<button type="submit" class="btn btn-primary">
<span class="icon icon--search" aria-hidden="true"></span>
Suchen
</button>
</span>
</div>
<small id="search-help" class="form-text text-muted">
Durchsuchen Sie Standards, Vorgaben und Referenzen nach Stichworten.
</small>
</div>
</form>
</div>
{% endif %}
<!-- Search form -->
<form action="." method="post">
{% csrf_token %}
<!-- Search field -->
<div class="mb-3">
<label for="query" class="form-label">Suchbegriff</label>
<input type="text"
class="form-control"
id="query"
name="q"
placeholder="Suchbegriff eingeben …"
value="{{ search_term|default:'' }}"
required
maxlength="200">
<div class="col-md-4">
<div class="alert alert-info" role="alert">
<h3 class="h4">Suchtipps</h3>
<ul>
<li>Verwenden Sie spezifische Begriffe für bessere Ergebnisse</li>
<li>Die Suche erfasst Titel, Beschreibungen und Inhalte</li>
<li>Groß-/Kleinschreibung wird nicht berücksichtigt</li>
</ul>
</div>
<button type="submit" class="btn btn-primary">Suchen</button>
</form>
{% endblock %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -1,10 +1,77 @@
{% extends "base.html" %}
{% block title %}Startseite - Vorgaben Informatiksicherheit{% endblock %}
{% block content %}
<h1>Vorgaben Informatiksicherheit BIT</h1>
<h2>Aktuell erfasste Standards</h2>
<ul>
{% for standard in dokumente %}
<li><a href="{% url 'standard_detail' nummer=standard.nummer %}">{{ standard }}</a></li>
{% endfor %}
</ul>
<div class="container-fluid">
<h1>Vorgaben Informatiksicherheit BIT</h1>
<div class="row">
<div class="col-md-12">
<p class="lead">
Willkommen bei den Vorgaben zur Informatiksicherheit des Bundesamts für Informatik und Telekommunikation (BIT).
Diese Plattform bietet Ihnen Zugang zu allen aktuellen IT-Sicherheitsstandards der Bundesverwaltung.
</p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Aktuell erfasste Standards</h2>
<div class="list-group">
{% for standard in dokumente %}
<a href="{% url 'standard_detail' nummer=standard.nummer %}"
class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between">
<h3 class="h5 mb-1">{{ standard.nummer }} - {{ standard.titel }}</h3>
{% if standard.status %}
<small class="text-muted">{{ standard.status }}</small>
{% endif %}
</div>
{% if standard.kurzbeschreibung %}
<p class="mb-1">{{ standard.kurzbeschreibung|truncatewords:30 }}</p>
{% endif %}
</a>
{% empty %}
<div class="alert alert-info" role="alert">
<p class="icon icon--info">Aktuell sind keine Standards erfasst.</p>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h3 class="card-title h4">Standards durchsuchen</h3>
<p class="card-text">Durchsuchen Sie alle Vorgaben nach Stichworten und Inhalten.</p>
<a href="/search" class="btn btn-primary">Zur Suche</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h3 class="card-title h4">Referenzen</h3>
<p class="card-text">Übersicht über externe Referenzen und Normen.</p>
<a href="/referenzen" class="btn btn-secondary">Referenzen anzeigen</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h3 class="card-title h4">Stichworte</h3>
<p class="card-text">Alphabetische Übersicht aller Schlagworte und Kategorien.</p>
<a href="/stichworte" class="btn btn-secondary">Stichworte durchsuchen</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}