Zum Inhalt

MKDOCS Substitute



Sämtliche meiner Seiten sind werden seit einigen Jahren mit einem statischen Webseiten-Generator namens "mkdocs" ⧉ erzeugt. Dieses Tool ist sehr einfach aufgebaut und erfüllt fast alle meine Anforderungen, insbesondere, wenn man es mit dem "Material-Theme" ⧉ zusammen benutzt. Allerdings fehlen mir immer wieder mal ein paar Funktionen und irgendwann habe ich dann angefangen mich mit den Plugins dieses Tools zu beschäftigen.

MKDOCS Substitute ist mitlerweile eine mächtige Erweiterung von mkdocs / Material geworden. Wie der Name des Plugins sagt, können bestimmte Textpassagen / Platzhalter in den Markdown Quelldateien durch beliebige Textbausteine ersetzt werden. Mehr noch ... mit MKDOCS Substitute fügen Sie Elemente wie Alerts, Badges, Toast, frei verfügbare Icons, Modal-Fenster, Social Media Widgets etc. ein ohne sich im komplizierte Javascript Funktionen oder lange HTML Elemente kümmern zu müssen

INSTALLATION

Öffnen Sie die Windows Terminal-Anwendung und geben Sie diesen Befehl ein:

pip install mkdocs-substitute-plugin

Das Tool sollte problemlos installiert werden können. Beachten Sie ggf. die Mindest-Versionsanforderung von mkdocs und führen Sie ggf. ein Upgrade durch. Getestet und entwickelt wurde MKDOCS Substitute unter Python mit MKDOCS und Material

Das Plugin wird in der mkdocs.yaml wie folgt aktiviert:

plugins:
    - substitute-plugin:
        substitutions_file: substitutions.json

substitutions.json
Die substitutions.json ist zwingend notwendig. In dieser Datei werden die Ersetzungen definiert. Wie das für die einzelnen Elemente funktioniert, erklärt diese Anleitung. Für den Anfang legen Sie eine leere substitutions.json Datei mit diesem Inhalt an. Diese Datei sollte in demselben Verzeichnis liegen, wie die mkdocs.yaml (in der Regel wird dies das Root Verzeichnis ihres Projektes sein).

Wichtige Info zum BUILD Prozess

MKDOCS Substitute ersetzt niemals etwas in ihren Originaldateien. Der Ersetzungsvorgang findet während des BUILD Prozesses statt, d.h. Quelldateien - in der Regel Markdown Dateien - bleiben unangetastet. MKDOCS Substitute generiert dabei für jedes Elements einen individuellen Abschnitt mit eigenen CSS Klassen. Sie können daher beliebig viele Elemente desselben Typs auf einer Seite platzieren.

GRUNDLAGEN - Einfache Ersetzungen

Zunächst können Sie mit MKDOCS SUBSTITUTE beliebige Platzhalter erstellen, durch einen Text überall, auf all ihren Seiten ersetzt werden soll. Beispiel: Sie wollen auf mehreren Seiten in ihrem Projekt einen Hinweis einbauen, der die Besucher/Innen ihrer Seite darauf aufmerksam macht, dass man sie jederzeit per E-Mail kontaktieren kann. Den passenden Link, der das Standard E-Mail Programm der Besucher/Innen öffnet, wird gleich mit eingefügt. Das würde dann in der substitutions.json wie folgt aussehen:

In ihren Markdown Dateien setzen Sie dann einfach den Platzhalter ein ...

An Stelle von [ MEIN_HTML_BLOCK ] wird dann rechtsbündig in roter Schrift Hallo Welt erscheinen.

So können Sie ganze HTML Blöcke definieren und als Baustein jederzeit einfügen. Die Anwendunsgmöglichkeiten sind vielfältig

Es gibt in MKDOCS Substitute aber auch viele bereits vorgefertigte Ersetzungen. Diese sind durch den Beginn einer Phrase mit einer eckigen Klammer definiert. Diese Elemente werden nun vorgestellt:

Icons von PICTOGRAMMERS

Fontawesome ⧉ kennt vermutlich jeder - ein Webfont, der tausende von Symbolen beinhaltet, die man vielfältig auf der eigenen Seite nutzen kann. Allerdings ist die Anzahl der frei verfügbaren Icons beschränkt. Pictogrammers bieten hier eine freie Alternative an. Dort stehen mehr als 7.000 Icons zur Verfügung.

Dazu muss die CSS Datei der Webfonts von PICTOGRAMMERS in die mkdocs.yaml Datei eingefügt werden:

extra_css:
    - https://cdn.jsdelivr.net/npm/@mdi/font@7.4.47/css/materialdesignicons.min.css

Icons von dort kann man mit MKDOCS Substitute sehr einfach einbetten

So definieren Sie ein ICON in ihrer substitutions.json:

"[icon_beispiel]": "account-convert",

Die Bezeichnung account-convert stammt von der Übersicht der verfügbaren Icons, die sie hier finden:

https://pictogrammers.com/library/mdi/ ⧉

Diese Icons können Sie auch in einen HTML Tag einbetten, so dass diese ICONS z.B. eine andere Größe annehmen.

ICON größer darstellen: <div style="font-size: 40px">[icon_beispiel]</div>

würde dann zu dieser Darstellung führen:

WEBSEITEN ELEMENTE

Mich hat immer gestört, dass man Elemente aus Frameworks wie Bootstrap, Foundations oder ähnlichem in MKDOCS mit dem Material Design nicht einfach so einfügen kann. Das liegt daran, dass sie sich die CSS Klassen bei der Namensgebung überschneiden. Es gibt z.B. sowohl im Bootstrap Framework, als auch im Material Theme eine CSS-Klasse namen ".container" - eine Vermengung beider Frameworks würde daher zum Chaos führen.

Ich habe daher einige dieser Elemente "nachgebaut" und diese können mit speziellen PLatzhaltern in ihre Seite ganz einfach eingebaut werden.

TRIGGER zum Auslösen der vorgerfertigten Elemente

Damit MKDOCS Substitute die vorgefertigten Elemente von ihren eigenen Ersetzungen unterscheiden kann, haben diese Elemente eigene Trigger, die immer nach dem gleichen Schema aufgebaut sind. Beispiel: Ein Alert muss immer mit "[alert_*" definiert werden und mit "]" abgeschlossen werden, wobei "*" hier für einen beliebigen Parameter für ihrer Benennung steht. Die Trigger werden bei den Beschreibungen der Elemente zu Beginn aufgeführt, gefolgt von einem konkreten Beispiel und den Parametern (z.B. Farbe, Textform), die Sie für das Element festlegen können. Die Trigger gelten immer auf allen Seiten ihres Projektes.

Alerts

TRIGGER

"[alert_*]"

Die Bootstrap Alerts sind so ähnlich wie die Admonitions in MKDOCS, allerdings ohne größeren Inhalt. Sie dienen zur Darstellung kurzer, prägnanter Hinweise und können auch aus der Seite wieder gelöscht werden ("dismissible").

So definieren Sie einen Alert in ihrer substitutions.json:

"[alert_5]": {
    "color" : "success",
    "dismissible" : "true",
    "text" : "Das ist der Alert Text, der im Alert erscheint"
},

Die Ersetzung besteht aus drei Elementen:

Parameterübersicht ALERTS:

Option Description Possible Values
color Color of the alert background "success", "alert", "warning", "info" or HEX-Value
text Text of the Alert Text (can include html)
dismissible Alert can be closed on page "true" or "false"

Als Farben dienen hierfür - da sich dieses Element bei den Einstellungen von BOOTSTRAP folgende Parameter:

Das ist der Alert Text, mit der Farbe '#ffc685' als Setting
Das ist der Alert Text, mit der Farbe 'success' als Setting
Das ist der Alert Text, mit der Farbe 'warning' als Setting
Das ist der Alert Text, mit der Farbe 'info' als Setting
Das ist der Alert Text, mit der Farbe 'danger' als Setting


Toast

TRIGGER

"[toast_*]"

TOASTs sind den Alerts sehr ähnlich. Allerdings verfügen sie über eine Titelzeile und einen Content Bereich. TOASTs eignen sich also sehr gut zum Abgrenzen und Fokussieren von Inhalten.

So sieht ein einfacher TOAST aus :

This is the TITLE of the Toast
This is the Content of the Toast

So definieren Sie einen TOAST in ihrer substitions.json Datei:

"[toast_5]": {
    "title_text" : "This is the TITLE of the Toast",
    "content" : "This is the Content of the Toast",
    "background_color" : "beige",
    "dismissible" : "true"
},

Dies sind die Optionen, die zur Gestaltung eines TOASTs zur Veefügung stehen:

Parameterübersicht TOAST:

Option Description Possible Values
background_color Color of the alert background "success", "alert", "warning", "info" or HEX-Value or HTML valid Color-Name
title_text Title of the TOAST Text (can include html)
content Text of the Alert Text (can include html)
dismissible Alert can be closed on page "true" or "false"


Badges

TRIGGER

"[badge_*]"

Badges sind kleine Mini-Buttons, die sich in einen laufenden Text einbinden lassen. Warnhinweise oder spezielle EyeCatcher sind die einfachen Anwendungsfälle. Die Konfiguration in der substitions.json Datei ist sehr einfach:

"[badge_5]": {
    "background-color" : "blue",
    "text-color" : "white",
    "text" : "Hervorhebung"
},

Parameterübersicht BADGES:

Option Description Possible Values
background-color Background-Color of the badge "success", "alert", "warning", "info" or HEX-Value
text-color Text-Color of the badge HTML Valid Colorname or HEX Value
text Text of the Badge Plain Text (should not include HTML)

Dieser Text in ihrer Quelldatei ...

führt dann zu diesem Output.

Einfaches Beispiel: Manchmal macht es Sinn, etwas mit einer Hervorhebung zu präsentieren ...


Sticky Notes

TRIGGER

"[note_*]"

STICKY NOTES sind spezielle ToolTips, also kleine Minifenster, die wie Post-Its aussehen und die beim Überfahren mit der Maus auftauchen. Sie können diese ToolTips für Hintergrundinfos nutzen. So werden die STICKY NOTES konfiguriert:

"[note_example]": {
    "text_hover" : "Wenn Sie hier mit der Maus drüberfahren ...",
    "text_note" : "... wird eine kleine Notiz eingeblendet.",
    "make_italic" : "true",
    "cursor_style" : "help"
}

Konkretes Beispiel: Wenn Sie hier mit der Maus drüberfahren ... ... dann wird ein kleine Notiz eingeblendet

Parameterübersicht STICKY NOTES:

Option Description Possible Values
text_hover Text that will show the note when mouse is over this text Plain text, no HTML
text_note The text of the note that will appear Plain text, no HTML
make_italic Show note text in italic style? "true" or "false"
cursor_style Style of the cursor when hovering over the text Valid CSS cursor style. See this link for reference ⧉.


TRIGGER

"[modal_*]"

Mit MKDOCS Substitute können Sie Modal-Fenster erzeugen. MKDOCS Substitute nutzt dabei die Funktionalität von micromodal.js. Einen Link zur Javascript-Bibliothek müssen Sie für eine Nutzung in der mkdocs.yaml einfügen:

extra_javascript:  
    - https://unpkg.com/micromodal/dist/micromodal.min.js

Modal-Fenster haben verschiedene Eigenschaften, die Sie in der substitutions.json einstellen können:

"[modal_5]": {
    "trigger": "OPEN THE MODAL WINDOW",
    "trigger_text_color" : "blue",
    "trigger_font_weight" : "bold",
    "title" : "THIS IS THE TITLE OF A MODAL WINDOW",
    "content" : "<small>Lorem ipsum dolor sit amet consectetur adipisicing elit. Vel, voluptatum. Magni hic, voluptate debitis esse corporis dolor laudantium quae quo!</small>",
    "padding" : "25px",
    "max_width" : "600px",
    "button_text" : "Got It!",
    "space_title_content" : "1rem",
    "space_content_bottom" : "1rem"

},

Anmerkung: Alle MODAL Fenster können per ESC geschlossen werden.

Beispiel für ein Modal-Fenster:

OPEN THE MODAL WINDOW

Es stehen folgende Parameter zur Gestaltung der Modal-Fenster zur Verfügung:

Parameterübersicht MODALFENSTER:

Option Description Possible Values
trigger Trigger Text for click to open Modal Plain Text - do not use additional HTML here
trigger_text_color The Color of the Trigger Text HEX Value or valid HTML Color name
trigger_font_weight The Font-Weight of the Trigger Text "normal" or "bold"
title The Title of the Modal Text, can include HTML
content The content if the Modal Text, can include HTML
padding The Padding of the Modal content Integer number e.g. 20 - padding to all sites of Modal in px
max_width Define the Maximum Width of the Modal The width of the Modal at maximum in px
button_text Text on the Close Button This is the Text on the MODAL Close Button
space_title_content Space between Title and Content Integer number e.g. 20 (~ 20px)
space_content_bottom Space between Content and Bottom Integer number e.g. 20 (~ 20px)


Newsticker

TRIGGER

"[news_*]"

MKDOCS Substitute kann einen einfachen Newsticker im Text platzieren - so sieht das in der in der substitutions.json:

"[news_3]": {
    "text" : "Lorem ipsum dolor sit amet consectetur adipisicing elit. Vel, voluptatum. Magni hic, voluptate debitis esse corporis dolor laudantium quae quo!",
    "background_color" : "#f9f9f9",
    "text_color" : "darkred",
    "font_weight" : "bold",
    "speed" : "20"
},

So sieht der Newsticker aus :

Lorem ipsum dolor sit amet consectetur adipisicing elit. Vel, voluptatum. Magni hic, voluptate debitis esse corporis dolor laudantium quae quo!

Das sind die Parameter zur Gestaltung des Newstickers:

Parameterübersicht NEWSTICKER:

Option Description Possible Values
background-color Background-Color of the newsticker "success", "alert", "warning", "info", HEX-Value or Valid HTML Color name
text-color Text-Color of the badge HTML Valid Colorname or HEX Value
text Text of the Badge "true" or "false"
font-weight The Weight of the Newsticker Text "bold" or "normal"
speed The speed of the Newsticker Integer value (seconds)


SEO Funktionen

TRIGGER

Kein Trigger notwendig. Funktion ist automatisch aktiviert.

MKDOCS Substitute bietet die Möglichkeit, auf in der Präamble der Markdown Dateien festgelegte Beschreibungen und Keywords zu zugreifen und diese als META-Description bzw. META-Keywords beim Erzeugen der Seiten zu generieren. Die Keywords und Beschreibungen der Präamble werden also durch echte -Tags ersetzt.

Diese Funktion ist mit der Installation von MKDOCS Substitute automatisch aktiviert - sie müssen dafür nichts in die mkdocs.yaml oder die substitute.json eintragen. Sie sollten dann aber andere Plugins mit einem ähnlichen Zweck deaktivieren, da doppelte META Einträge zu Indizierungsfehlern bei den Crawlern der Suchmaschinen führen.

Findet MKDOCS Substitute zwei völlig identische Einträge - weil ein Eintrag z.B. vom Theme selbst über den Description-Tag erstellt wurde - wird es nur einen Eintrag in der Erstellung der HTML Output Datei zulassen.

So sehen dann die Einträge in der Präamble einer Markdown-Datei aus:

---
title: Willkommen bei Peter Killert.
description: Die Startseite der Homepage von Peter Killert.
keywords:
    - Killert
    - Autor
    - Quadrizepssehnenruptur
---

Im Seitenquelltext erscheinen dann diese <meta>-Tags

FAQ

Hier einige Infos und Antworten zu Fragen, die bei der Nutzung von MKDOCS Substitute auftreten können:

Was bedeutet 'Valid HTML Code Color Name'?

Um in HTML eine Farbe zu definieren können Sie statt eines HEX Codes auch den Namen einer Farben nehmen. Diese Farbnamen sind festgelegt und werden von allen gängigen Browsern verstanden. Eine Übersicht über diese Farbnamen finden Sie hier: www.w3schools.com/tags/ref_colornames.asp ⧉

Kann ich die Ersetzungen auch innerhalb von HTML Tag einsetzen?

Ja, das ist möglich. Wenn Sie beispielsweise eine Ersetzung innerhalb eines DIV Tags platzieren, sollte das funktionieren.

Warum haben die vorgefertigten Elemente nicht mehr Parameter für die Gestaltung?

Bei der Auswahl der Parameter habe ich mich auf die gängisten, wichtigsten Element konzentriert. Sie können aber ein Element mit einem weiteren TAG und einer eigenen CSS Klasse 'umschliessen' um noch mehr Styling vorzunehmen.

Ich habe in dem Ersetzungstext ein Anführungszeichen. Wie setze ich das in der JSON Datei?

Die Anführungszeichen in der JSON Datei begrenzen den Ersetzungstext. Soll in dem Text selbst aber ebenfalls ein Anführungszeichen stehen, so müssen sie dies mit dem Escape Slash in den Ersetzungstext schreiben. Also als \""

Updates

MKDOCS Substiute wird regelmässig aktualisiert und fehlerbereinigt. Manchmal kommen auch kleine Neuerungen hinzu. Die aktuelle Version fragen Sie über die Kommandozeile mit

pip show mkdocs-substitute-plugin

ab.

Ein gezieltes Update des mkdocs-substitute-plugin erzwingen sie mit

pip install mkdocs-substitute-plugin

Uninstall

Sollten Sie - aus welchen Gründen auch immer - dieses Plugin nicht mehr benötigen, dann können Sie das Pakete auch deinstallieren:

pip uninstall mkdocs-substitute-plugin

Beachten Sie dabei, dass Sie auch diese Einträge in der mkdocs.yaml löschen oder mit einem vorangestellten "#" auskommentieren müssen:

plugins:
    #- substitute-plugin:
    #    substitutions_file: substitutions.json

Die gesamte Funktionalität geht dadurch natürlich verloren. Die Platzhalter erscheinen dann in ihren Quelldateien dann auch genauso, wie sie platziert wurden ohne Ersetzungen. Die müssten Sie dann ggf. ebenfalls entfernen.

Lizenzierung

Dieses Plugin darf frei genutzt werden. Bei regelmässiger, nicht-kommerzieller Nutzung, freue ich mich über eine kleine Anerkennung per PayPal. Bei einer kommerziellen Nutzung bitte ich um eine Zahlung von einmalig 20,- EUR ebenfalls per Paypal. Ich untersage eine kommerzielle Nuztzung nicht und schränke diese auch nicht ein - diese Bitte um diese überschaubare, angemessene Zahlung ist ein Appell an ihre Fairness. Solche sinnvollen Projekte sind ohne erheblichen zeitliche Aufwand nicht umsetzbar.

Support