Alte Beiträge in Hugo markieren

Ich habe eine kleine Hinweisfunktion eingebaut, die bei Beiträgen erscheint, die älter als ein Jahr sind. Mir war wichtig, dass dieser Hinweis nicht bei reinen Fotobeiträgen auftaucht – Fotos verlieren schließlich selten an Relevanz. Zuerst habe ich selbst eine funktionierende Version geschrieben, anschließend den Code von einem Sprachmodell noch etwas optimieren lassen. Jetzt läuft bei mir folgende Variante: {{- /* Tags prüfen */ -}} {{- $tags := default (slice) .Params.tags -}} {{- $tagsLower := apply $tags "lower" "." -}} {{- $hasPhoto := in $tagsLower "photo" -}} {{- /* Relevantes Datum bestimmen und Stichtag berechnen */ -}} {{- $pageDate := time.AsTime (or .Lastmod .PublishDate .Date) -}} {{- $oneYearAgo := (now).AddDate -1 0 0 -}} {{- /*Hinweis nur auf echten Seiten, mit gültigem Datum, älter als 1 Jahr und nicht beim Tag "photo" */ -}} {{- if and .IsPage (not $hasPhoto) (gt ($pageDate.Unix) 0) (lt $pageDate $oneYearAgo) -}} <div class="alert alert-warning"> Hinweis: Dieser Artikel ist über ein Jahr alt. Die Informationen könnten veraltet sein. </div> {{- end -}}

21. Oktober 2025 · 1 Minute · 166 Wörter

website-monitor

Die meisten kennen wahrscheinlich bereits Uptime Kuma. Wer jedoch etwas Neues ausprobieren möchte, sollte sich »website-monitor« ansehen. Dieses Tool ist deutlich einfacher gestaltet und kommt ohne unnötigen Ballast aus. Update 2025-02-15 19:14 Das Projekt wurde auf GitHub gelöscht, den Link habe ich aktualisiert.

15. Februar 2025 · 1 Minute · 43 Wörter

Textpod

Vor kurzem bin ich auf die quelloffene Anwendung »textpod« gestoßen. Diese äußerst einfache Notiz-App speichert alle Informationen in einer einzigen Textdatei. Dieses minimale Konzept gefällt mir sehr.

21. Dezember 2024 · 1 Minute · 27 Wörter

markitdown

Für alle, die es verpasst haben: Die Hölle hat offiziell Minusgrade erreicht – Microsoft hat tatsächlich ein Tool unter einer freien Lizenz veröffentlicht! Und nicht nur das, es ermöglicht den Export von Inhalten aus ihrem proprietären Format in die offene Syntax Markdown. Die in Python geschriebene Software heißt »markitdown« und ist im GitHub-Account von Microsoft zu finden. Das ist schon ein historischer Moment, wenn man bedenkt, wie sehr Microsoft in den letzten Jahrzehnten auf Open Source gepfiffen hat und alles daransetzte, Nutzer in ihrem goldenen Käfig (a.k.a. Login-Effekt) einzusperren. Na ja, vielleicht haben sie ja doch ein paar gute Vorsätze fürs nächste Jahr. ...

15. Dezember 2024 · 1 Minute · 103 Wörter

Bookmarklet Blogging

Kürzlich bin ich auf ein spannendes Bookmarklet bei Nicolas gestoßen. Es soll das Link-Blogging für alle erleichtern, die ein auf GitHub gehostetes Blog haben. Das Skript ist zwar noch nicht ganz perfekt, aber es hat mich dazu inspiriert, es weiterzuentwickeln. Hier ist meine Version des Bookmarklets (function() { // Funktion zum Erstellen eines "Slug" aus einem Text const slugify = text => { let str = text.toString(); // Den Text als Zeichenkette behandeln str = str.replaceAll("/", " "); // Schrägstriche (/) durch Leerzeichen ersetzen str = str.normalize("NFD"); // Unicode normalisieren (diakritische Zeichen trennen) str = str.replace(/[^\w\s-]+/g, ""); // Sonderzeichen entfernen (außer Buchstaben, Zahlen, Leerzeichen, Bindestriche) str = str.toLowerCase(); // In Kleinbuchstaben umwandeln str = str.replace(/\s+/g, " "); // Mehrere Leerzeichen auf ein einzelnes reduzieren str = str.trim(); // Führende und endende Leerzeichen entfernen str = str.replace(/ +/g, "-"); // Alle Leerzeichen durch Bindestriche ersetzen return str; // Slug zurückgeben }; // Titel der aktuellen Seite aus dem Dokument abrufen let pageTitle = window.document.title; // Falls ein Text markiert ist, diesen als "linkSelection" setzen, ansonsten leer let linkSelection = "getSelection" in window ? window.getSelection().toString().trim() : ""; // Inhalt für den Link ermitteln: // Zuerst den markierten Text verwenden, falls vorhanden, ansonsten eine Meta-Beschreibung, // oder den ersten Absatz im <main>, <article>, oder <p>-Tag let linkContent = linkSelection || window.document.querySelector("head meta[name=description]")?.content.trim() || window.document.querySelector("main p")?.textContent.trim() || window.document.querySelector("article p")?.textContent.trim() || window.document.querySelector("p")?.textContent.trim(); // Die URL der aktuellen Seite let linkUrl = window.location.href; // Eingabeaufforderung für den Link-Titel (Standardwert: Seiten-Titel) let title = window.prompt("Title of the link?", pageTitle); if (title !== null) { // Nur fortfahren, wenn der Benutzer einen Titel angegeben hat // Eingabeaufforderung für den Link-Slug (Standardwert: aus Titel generierter Slug) let slug = window.prompt("Slug of the link?", slugify(title)); if (slug !== null) { // Nur fortfahren, wenn der Benutzer einen Slug angegeben hat // Das aktuelle Datum und die Uhrzeit im ISO-Format abrufen und in lesbare Form bringen const currentDate = (new Date()).toISOString().replace("T", " ").replace(/\.\d{3}Z/, " +00:00"); // Dateiinhalt für den Blogeintrag erstellen let fileContent = `---\n` + `date: ${currentDate}\n` + `title: "${title}"\n` + `authors: "maik"\n` + `tags: []\n` + `---\n\n` + `[${title}](${linkUrl} "${title}") für ${linkUrl}\n\n` + `${linkContent ? linkContent.replaceAll("\n", "\n> ") : ""}\n`; // GitHub-URL für das Erstellen einer neuen Datei zusammenbauen let githubUrl = `https://github.com/Maik-Wi/blog/new/main/?` + `filename=${`content/notes/${currentDate.slice(0, 10)}-${slug}-index.md`}` + `&value=${encodeURIComponent(fileContent)}` + `&message=${encodeURIComponent(`New link: ${title}`)}`; // Die URL in einem neuen Fenster öffnen, sodass der Nutzer sie bei GitHub weiterbearbeiten kann window.open(githubUrl); } } })();

19. August 2024 · 2 Minuten · 403 Wörter