updated: | 2022 08. December |
published: | 2022 31. August |
Render Hooks
Markdown Funktionselemente umgestalten.Warum Render Hooks?
Mit Render-Hooks
können Markdown-Formatierungselemente anders gestaltet werden.
Dazu bedarf es nur einer Datei im Verzeichnis _markup
.
└── themes
└── dein-theme
└── layouts
└── _default
└── _markup
├── render-link.html
├── render-heading.html
├── render-image.html
├── render-codeblocks.html
├── render-codeblocks-bash.html
└── render-codeblocks-mermaid.html
Überschrift ändern
Um das vordefinierte Formatierungselement für Überschriften in Markdown zu ändern (also #
), erzeuge die Datei render-heading.html
im Verzeichnis layouts\_default\_markup
mit folgendem Inhalt:
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}
{{- if and (ge .Level 2) (le .Level 6) }}{{" " -}}
<a href="#top">
<abbr style="text-decoration: none" title="Zum Seitenanfang">⧉</abbr>
</a>
{{- end -}}
</h{{ .Level }}>
Der Code setzt am Ende einer Überschrift das Symbol ⧉ mit einem Link zum Seitenanfang (href="#top"
). Außerdem wird ein kleiner Hilfetext angezeigt wenn der Mauszeiger auf das Symbol zeigt (<abbr ...
).
Links ändern <a> …</a>
Um Links zu externen Seiten in einem neuen Browsertabulator zu öffnen, ist folgender Render-Hook nützlich.
<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>
{{- .Text | safeHTML -}}
</a>
Bilder ändern
Mittels Render-Hooks kann die Darstellung von Bildern beeinflußt werden. Es ist auch möglich, den Standardaufruf mit Parametern zu ergänzen, so wie im Codefeld angezeigt.
# Standardaufruf in Markdown

# Eweiterter Aufruf mit Parametern



Beispiel 1
Die Datei render-image.html
wurde erweitert um weitere Parameter zur Formatierung von Markdown in Html zu übergeben.
Die Parameter sind innerhalb der Anführungszeichen im Titel festgelegt und folgende:
Parameter | Beschreibung | Werte/Beispiel |
---|---|---|
{ClassOption01 ClassOption02} | Stylesoptionen | frame, left, right |
[[Linkname01=href…][Linkname02=href…][…]] | Links übergeben | [[CC=https://www…]] |
#width | Bildbreite in % | #width=60% |
Die Datei render-image.html
und die entsprechende CSS-Datei wurden geändert.
{{- /*

*/ -}}
{{- $storage := newScratch -}}
{{- $storage.Set "ImgClass" "" -}}
{{- $storage.Set "ImgLinkName" "" -}}
{{- $storage.Set "ImgWidth" "" -}}
{{- $storage.Set "ImgLinks" "" -}}
{{- $storage.Add "ImgTitle" .Title -}}
{{- $storage.Set "ImgTitleLinks" "" -}}
{{- /* <!-- Extract Link on [[Linkname01=href][Linkname02=href...]] --> */ -}}
{{- $tmp := findRE `\[[[:word:][:cntrl:][:graph:][:space:]]*\]` ($storage.Get "ImgTitle") -}}
{{- if ne (len $tmp) 0 -}}
{{- $storage.Add "ImgLinks" (index $tmp 0) -}}
{{- $tmp := split ($storage.Get "ImgLinks") "][" -}}
{{- $storage.Set "ImgTitleLinks" ($tmp) -}}
{{- $tmp := replaceRE `\[[[:word:][:cntrl:][:graph:][:space:]]*\]` "" ($storage.Get "ImgTitle") -}}
{{- $storage.Set "ImgTitle" $tmp -}}
{{- end -}}
{{- /* <!-- Extract Class --> */ -}}
{{- $step1 := findRE `{[[:word:][:space:]]*}` ($storage.Get "ImgTitle") -}}
{{- if ne (len $step1) 0 -}}
{{- $step2 := index $step1 0 -}}
{{- $step3 := trim $step2 "{}" -}}
{{- /* <!-- save Image class --> */ -}}
{{- $storage.Add "ImgClass" $step3 -}}
{{- /* <!-- Save Rest von Title-Zeile --> */ -}}
{{- $storage.Set "ImgTitle" (replaceRE (print "{" ($storage.Get "ImgClass") "}" ) "" ($storage.Get "ImgTitle")) -}}
{{- end -}}
{{- /* <!-- Extract Attribut #width -->*/ -}}
{{- $tmp := findRE `#width=[[:cntrl:][:space:][:graph:]]*` ($storage.Get "ImgTitle") -}}
{{- if ne (len $tmp) 0 -}}
{{- $storage.Add "ImgWidth" (index (split (index $tmp 0) "=") 1) -}}
{{- /* <!-- Save Rest von Title-Zeile --> */ -}}
{{- $storage.Set "ImgTitle" (replaceRE (print "#width=" ($storage.Get "ImgWidth") ) "" ($storage.Get "ImgTitle")) -}}
{{- end -}}
{{- /* <!-- Extract Attribut #caption -->*/ -}}
{{- $tmp := findRE `#linkname=[[:cntrl:][:space:][:graph:]]*` ($storage.Get "ImgTitle") -}}
{{- if ne (len $tmp) 0 -}}
{{- $storage.Add "ImgLinkName" (index (split (index $tmp 0) "=") 1) -}}
{{- /* <!-- Save Rest von Title-Zeile --> */ -}}
{{- $storage.Set "ImgTitle" (replaceRE (print "#linkname=" ($storage.Get "ImgLinkName") ) "" ($storage.Get "ImgTitle")) -}}
{{- end -}}
{{- /* <!-- Leerzeichen am Begin und am Ende löschen --> */ -}}
{{- range $i := (seq 5) -}}
{{- $storage.Set "ImgTitle" (strings.TrimSuffix " " ($storage.Get "ImgTitle")) -}}
{{- $storage.Set "ImgTitle" (strings.TrimPrefix " " ($storage.Get "ImgTitle")) -}}
{{- end -}}
</p>
<figure{{- with $storage.Get "ImgClass"}} class="{{ $storage.Get "ImgClass" }}"{{ end -}}>
<a href="{{ .Destination | safeURL }}">
<img src="{{ .Destination | safeURL }}"
alt="{{ .Text }}"
{{- with $storage.Get "ImgWidth"}} style="width:{{- $storage.Get "ImgWidth" -}};"{{ end -}}
{{- with $storage.Get "ImgTitle"}} title="{{- $storage.Get "ImgTitle" -}}"{{ end -}}
{{- with $storage.Get "ImgClass"}} class="{{- $storage.Get "ImgClass" -}}"{{ end -}}>
</a>
{{- if or (ne (len ($storage.Get "ImgTitle")) 0) (ne (len ($storage.Get "ImgTitleLinks")) 0) -}}
<figcaption {{- with $storage.Get "ImgClass"}} class="{{ $storage.Get "ImgClass" }}"{{ end -}}>
<!-- Bildtitel anzeigen wenn vorhanden -->
{{- if ne (len ($storage.Get "ImgTitle")) 0 -}}
{{- $storage.Get "ImgTitle" -}}
{{- end -}}
<!-- Links anzeigen wenn vorhanden -->
{{- if ne (len ($storage.Get "ImgTitleLinks")) 0 -}}
·
{{- range $i, $value := $storage.Get "ImgTitleLinks" -}}
{{- $link := (trim (trim $value "[") "]") -}}
{{- $tmp := split $link "=" -}}
{{- $linkname := (index $tmp 0) -}}
{{- $linkziel := (index $tmp 1) -}}
<a href="{{- $linkziel -}}" target="_blank" rel="noopener">{{- $linkname -}}</a>
·
{{- end -}}
{{- end -}}
</figcaption>
{{- end -}}
</figure>
<p>