Fixed paths in templates. Added more demo content

This commit is contained in:
Sebastian 2024-05-11 17:19:33 +02:00
parent 285d5e2147
commit b474bdf10a
45 changed files with 65 additions and 84 deletions

View file

@ -1,5 +1,5 @@
# The URL the site will be built for # The URL the site will be built for
base_url = "https://eit.rptu.de/gruppen/amateurfunkforschungsgruppe/" base_url = "https://files.zenerdio.de/DL0XK/website-prototype/"
# Whether to automatically compile all Sass files in the sass directory # Whether to automatically compile all Sass files in the sass directory
compile_sass = true compile_sass = true

View file

@ -1,5 +1,5 @@
+++ +++
title = "Relais & Digipeater" title = "Relais & Digipeater DB0KL"
weight = 2 weight = 2

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

View file

@ -0,0 +1,25 @@
+++
title = "Digipeater (2m)"
date = 2024-05-11T16:42:10+01:00
+++
Unser APRS Digipeater empfängt und APRS Pakete und sendet diese verstärkt wieder aus.
Weitere Information zu APRS finde man [hier](https://eit.rptu.de/gruppen/amateurfunkforschungsgruppe/projekte-aktivitaeten/aprs).
Hier kann man sehen welche Pakete über unseren Digipeater aktuell laufen:
* Übersicht: [http://aprs.fi/info/a/DB0KL-3](http://aprs.fi/info/a/DB0KL-3)
* Aktuelle Trafficstatistik: [http://aprs.fi/info/graphs/a/DB0KL-3](http://aprs.fi/info/graphs/a/DB0KL-3)
* Als [Karte](http://aprs.fi/#!mt=roadmap&z=14&call=a%2FDB0KL-4%2Ca%2FDB0KL-3&timerange=3600&tail=3600)
## Technische Daten
* Bandbreite: 12,5 kHz
* Frequenz: 144.800 MHz Simplex
* Sendeart: F1D
* Sendeleistung: 6 W EIRP
* Datenrate: 1.2 kBd/s
## Ausbreitung und Reichweite
{{ lightbox(image="/db0kl/digipeater/ausbreitung_db0kl_2m-aprs_1920x1080.png", alt="Reichtweite und Ausbreitungscharakteristik") }}

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View file

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -21,9 +21,17 @@ Technische Daten
![Antennenstandort](antennen_mit_logo.jpg) ![Antennenstandort](antennen_mit_logo.jpg)
Prinzipiell besteht ein Relais aus einem Empfänger und Sender, die auf ihre jeweilige Frequenz fest abgestimmt sind. Der Sender wird bei Bedarf automatisch aktiviert, meldet sich mit Rufzeichen und strahlt das empfangene Signal wieder aus.
Der von uns verwendete Empfänger und Sender basiert auf einer Entwicklung von DF9IC, DF2VO und DF3VI. Die Steuerung übernimmt ein ATmega8 Mikrocontroller von Atmel, der nicht nur den Sender steuert, sondern auch Störer und Störungen erkennt und blockiert.
Sender und Empfänger teilen sich dieselbe Antenne und sind deshalb über eine Duplexweiche an die Antenne angeschlossen. Zusätzlich filtert ein Diplexer außerdem das 2m APRS Signal und leitet es zum APRS Digipeater weiter.
{{ lightbox(image="/db0kl/relais/db0kl_schematisch.png", alt="Schematischer Aufbau der Relais-Funkstelle") }}
Zur Zeit arbeitet das Relais als DMR und C4FM Repeater. DMR (Digital Mobile Radio) ist ein ETSI Standard für digitalen Mobilfunk für die Übertragung von Sprache und Daten. Die Datenübertragung erfolgt im Zeitmultiplex und belegt eine Bandbreite von 12,5 kHz. Zur Zeit arbeitet das Relais als DMR und C4FM Repeater. DMR (Digital Mobile Radio) ist ein ETSI Standard für digitalen Mobilfunk für die Übertragung von Sprache und Daten. Die Datenübertragung erfolgt im Zeitmultiplex und belegt eine Bandbreite von 12,5 kHz.
{{ lightbox(image="/content/relais/relais/ausbreitung_db0kl_70cm_1920x1080.png", alt="Reichtweite und Ausbreitungscharakteristik") }} {{ lightbox(image="/db0kl/relais/ausbreitung_db0kl_70cm_1920x1080.png", alt="Reichtweite und Ausbreitungscharakteristik") }}
Die Hardware besteht aus einem MMDVM Board (Modem + Arduino). Das Board erzeugt die DMR Signale per Software, Die Hardware besteht aus einem MMDVM Board (Modem + Arduino). Das Board erzeugt die DMR Signale per Software,
zu der auch die Amateurfunkgruppe (DG4MA) beigetragen hat. zu der auch die Amateurfunkgruppe (DG4MA) beigetragen hat.

View file

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View file

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View file

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View file

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View file

@ -0,0 +1,9 @@
+++
title = "Projekte & Aktivitäten"
weight = 4
[extra]
menu_dropdown = true
+++

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

View file

@ -1,6 +1,7 @@
+++ +++
title = "Kontakte in die Welt" title = "Kontakte in die Welt"
date = 2024-05-11T16:42:10+01:00 date = 2024-05-11T16:42:10+01:00
template = "gallery.html"
+++ +++
Weltweite Kommunikation ist ein wichtiger Aspekt im Amateurfunk. Über Kurzwelle (3-30 MHz) können mit nur wenigen Watt Sendeleistung Verbindungen in die ganze Welt aufgebaut werden. Trotz Internet und Mobilfunk ist Kurzwelle auch heute noch interessant, da Weltweite Kommunikation ist ein wichtiger Aspekt im Amateurfunk. Über Kurzwelle (3-30 MHz) können mit nur wenigen Watt Sendeleistung Verbindungen in die ganze Welt aufgebaut werden. Trotz Internet und Mobilfunk ist Kurzwelle auch heute noch interessant, da
@ -11,15 +12,9 @@ Weltweite Kommunikation ist ein wichtiger Aspekt im Amateurfunk. Über Kurzwelle
Kommen Verbindungen zwischen Funkamateuren zustande, werden oft QSL Karten (eine Art Postkarte als Empfangsbestätigung) ausgetauscht. Die QSL Karte unserer Uni kann man hier sehen: Kommen Verbindungen zwischen Funkamateuren zustande, werden oft QSL Karten (eine Art Postkarte als Empfangsbestätigung) ausgetauscht. Die QSL Karte unserer Uni kann man hier sehen:
![QSL Karte DL0XK](dl0xk_qsl.jpg) ![QSL Karte DL0XK](/afg/home/dl0xk_qsl.jpg)
Im Laufe der Zeit hat sich auch die ein oder andere Karte aus allen Teilen der Welt bei uns angesammelt - wie man hier sehen kann: Im Laufe der Zeit hat sich auch die ein oder andere Karte aus allen Teilen der Welt bei uns angesammelt - wie man hier sehen kann:
## Aus Fernost
## Vom amerikanischen Kontinent
## Aus der Karibik
## Europa

View file

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

View file

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 118 KiB

View file

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View file

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 160 KiB

View file

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View file

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

View file

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View file

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View file

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View file

Before

Width:  |  Height:  |  Size: 171 KiB

After

Width:  |  Height:  |  Size: 171 KiB

View file

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 178 KiB

View file

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View file

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View file

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View file

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View file

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 112 KiB

View file

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View file

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View file

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 81 KiB

View file

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View file

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

View file

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View file

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View file

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View file

@ -26,7 +26,7 @@ body {
header { header {
background: { background: {
image: linear-gradient(rgba($background-color, 0.0), rgba($background-color, 1)), url("/images/header.jpg"); image: linear-gradient(rgba($background-color, 0.0), rgba($background-color, 1)), url("../images/header.jpg");
size: cover; size: cover;
} }
height: 300px; height: 300px;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -35,11 +35,11 @@
</main> </main>
<script type="module"> <script type="module">
import PhotoSwipeLightbox from '/js/photoswipe/photoswipe-lightbox.esm.min.js'; import PhotoSwipeLightbox from '{{ get_url(path="js/photoswipe/photoswipe-lightbox.esm.min.js") }}';
const lightbox = new PhotoSwipeLightbox({ const lightbox = new PhotoSwipeLightbox({
gallery: '.gallery', gallery: '.gallery',
children: 'a', children: 'a',
pswpModule: () => import('/js/photoswipe/photoswipe.esm.min.js') pswpModule: () => import('{{ get_url(path="js/photoswipe/photoswipe.esm.min.js") }}')
}); });
lightbox.init(); lightbox.init();
</script> </script>

View file

@ -1,60 +0,0 @@
<br/><br/>
For comments you can use your fediverse account to reply to this
<a href="https://{{page.extra.masto_instance}}/@{{page.extra.masto_user}}/{{page.extra.masto_id}}">toot</a>.<br/>
<div id="mastodon-comments-list">
<button id="load-comment">Load comments</button><br/>
</div>
<noscript>You need JavaScript to view the comments.</noscript>
<script src="/js/purify.min.js"></script>
<script type="text/javascript">
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#039;");
}
document.getElementById("load-comment").addEventListener("click", function() {
document.getElementById("load-comment").innerHTML = "Loading";
fetch('https://{{page.extra.masto_instance}}/api/v1/statuses/{{page.extra.masto_id}}/context')
.then(function(response) {
return response.json();
})
.then(function(data) {
if(data['descendants'] &&
Array.isArray(data['descendants']) &&
data['descendants'].length > 0) {
document.getElementById('mastodon-comments-list').innerHTML = "";
data['descendants'].forEach(function(reply) {
reply.account.display_name = escapeHtml(reply.account.display_name);
reply.account.emojis.forEach(emoji => {
reply.account.display_name = reply.account.display_name.replace(`:${emoji.shortcode}:`,
`<img src="${escapeHtml(emoji.static_url)}" alt="Emoji ${emoji.shortcode}" height="20" width="20" />`);
});
mastodonComment =
`<div class="mastodon-comment">
<div class="avatar">
<img src="${escapeHtml(reply.account.avatar_static)}" height=60 width=60 alt="">
</div>
<div class="content">
<div class="author">
<a href="${reply.account.url}" rel="nofollow">
<span>${reply.account.display_name}</span>
</a>
<a class="date" href="${reply.uri}" rel="nofollow">
${reply.created_at.substr(0, 10)}
</a>
</div>
<div class="mastodon-comment-content">${reply.content}</div>
</div>
</div>`;
document.getElementById('mastodon-comments-list').appendChild(DOMPurify.sanitize(mastodonComment, {'RETURN_DOM_FRAGMENT': true}));
});
} else {
document.getElementById('mastodon-comments-list').innerHTML = "<p>Not comments found</p>";
}
});
});
</script>

View file

@ -3,25 +3,25 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="/css/normalize.css"> <link rel="stylesheet" type="text/css" href="{{ get_url(path='css/normalize.css') }}">
<link rel="stylesheet" type="text/css" href="/css/redhat-text/redhat-text.css"> <link rel="stylesheet" type="text/css" href="{{ get_url(path='css/redhat-text/redhat-text.css') }}">
<link rel="stylesheet" type="text/css" href="/js/photoswipe/photoswipe.css"> <link rel="stylesheet" type="text/css" href="{{ get_url(path='js/photoswipe/photoswipe.css') }}">
{% block additional_css %}{% endblock %} {% block additional_css %}{% endblock %}
<link rel="stylesheet" type="text/css" href="/css/style.css"> <link rel="stylesheet" type="text/css" href="{{ get_url(path='css/style.css') }}">
<link rel="alternate" type="application/rss+xml" title="RSS Feed for {{ config.title }}" href="/rss.xml" /> <link rel="alternate" type="application/rss+xml" title="RSS Feed for {{ config.title }}" href="{{ get_url(path='/rss.xml') }}" />
<script src="/js/mathjax/tex-chtml-full.js" id="MathJax-script" async></script> <script src="{{ get_url(path='/js/mathjax/tex-chtml-full.js') }}" id="MathJax-script" async></script>
<title>{% block title %}{{ config.title }} :: {{ page.title }}{% endblock title %}</title> <title>{% block title %}{{ config.title }} :: {{ page.title }}{% endblock title %}</title>
</head> </head>
<body> <body>
<header> <header>
<img class="logo" src="/images/logo.png" /> <img class="logo" src="{{ get_url(path='/images/logo.png') }}" />
<div class="text"> <div class="text">
<div class="heading">{{ config.title }}</div> <div class="heading">{{ config.title }}</div>
@ -39,12 +39,16 @@
<button class="dropbtn">{{subsec.title}} &#x2304;</button> <button class="dropbtn">{{subsec.title}} &#x2304;</button>
<div class="dropdown-content"> <div class="dropdown-content">
{% for subsec_page in subsec.pages %} {% for subsec_page in subsec.pages %}
<a href="{{subsec_page.path}}">{{subsec_page.title}}</a> <a href="{{ get_url(path=subsec_page.path) }}">{{subsec_page.title}}</a>
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
{% else %} {% else %}
<a href="{{subsec.path}}">{{subsec.title}}</a> {%if subsec.pages | length == 1 %}
<a href="{{ get_url(path=subsec.pages[0].path) }}">{{subsec.title}}</a>
{% else %}
<a href="{{ get_url(path=subsec.path) }}">{{subsec.title}}</a>
{% endif %}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
<a href="javascript:void(0);" style="font-size:15px;" class="icon" onclick="expandHamburger()">&#9776;</a> <a href="javascript:void(0);" style="font-size:15px;" class="icon" onclick="expandHamburger()">&#9776;</a>
@ -83,10 +87,10 @@
</script> </script>
<script type="module"> <script type="module">
import PhotoSwipeLightbox from '/js/photoswipe/photoswipe-lightbox.esm.min.js'; import PhotoSwipeLightbox from '{{ get_url(path="/js/photoswipe/photoswipe-lightbox.esm.min.js") }}';
const options = { const options = {
gallery: 'main .lightbox', gallery: 'main .lightbox',
pswpModule: () => import('/js/photoswipe/photoswipe.esm.min.js') pswpModule: () => import('{{ get_url(path="/js/photoswipe/photoswipe.esm.min.js") }}')
}; };
const lightbox = new PhotoSwipeLightbox(options); const lightbox = new PhotoSwipeLightbox(options);
lightbox.init(); lightbox.init();