Integration von Lightbox2 in Hugo
Mit Lightbox2 steht eine ansprechende Form zur Präsentation von Bildern auf Webseiten zur Verfügung. Diese mochte ich jetzt auch in meiner Hugo-Webseite nutzen.
Ein kleiner Stolperstein: Lightbox2 behandelt nur Bilder, die in einen Link eingebettet sind. Rein in Markdown könnte man das zwar lösen, Lightbox2 braucht jedoch weitere Attribute, die in Markdown nicht gesetzt werden können. Aus diesem Grund gibt es in Hugo wohl für Bilder auch einen Figure-Shortcut, mit dem sich z.B. Captions und andere Attribute setzen lassen.
Diesen Shortcode habe ich einfach aus dem
Hugo-Sourcecode
kopiert, nach layouts/partials/ in mein Theme übernommen und am Anfang wie
folgt angepasst:
1<figure{{ with .Get "class" }} class="{{ . }}"{{ end }}>
2 {{- if .Get "link" -}}
3 <a href="{{ .Get "link" }}"{{ with .Get "target" }} target="{{ . }}"{{ end }}{{ with .Get "rel" }} rel="{{ . }}"{{ end }}
4 {{- with .Get "data-lightbox" }} data-lightbox="{{ . }}"{{ end -}}{{- with .Get "data-title" }} data-title="{{ . }}"{{ end -}}{{- with .Get "data-alt" }} data-alt="{{ . }}"{{ end -}}>
5 {{- end -}}
6 ...Zeile 3 habe ich vor dem schließenden > aus Zeile 2 eingefügt und die neuen
Figure-Attribute data-lightbox, data-title und data-alt abgefragt und
entsprechend eingebunden.
Minimal muss ein entsprechende Figure-Shortcode dann folgende Attribute gesetzt haben, um von Lightbox2 bearbeitet zu werden:
1{{< figure
2 src="..."
3 link="..."
4 data-lightbox="..."
5>}}
Evlt. könnte man das noch anpassen, so dass nicht immer link=... und
data-lightbox=... beim jeweiligen Bild angegeben werden müssen und z.B. der
Link automatisch aus src=... generiert wird wenn data-lightbox=... vorhanden
ist. Ich selbst bin leider noch nicht so fit in der Go-Template-Sprache.
Nun müssen die bereits vorhandenen Figure-Elemente um data-lightbox="..."
erweitert werden, für die eine Darstellung mit Lightbox2 gewünscht ist.
Anschließend müssen das Lightbox2-JS, -CSS und die von Lightbox2 verwendeten Bilder übernommen werden:
- Lightbox2 von der Release-Seite des Projekts herunterladen und entpacken.
- Übernahme der
dist/css/lightbox.min.cssnachstatic/css/oder alternativ Inhalt an eine bestehendestatic/css/custom.cssdran kopieren und im Theme einbinden. - Übernahme der
dist/js/lightbox.min.jsnachstatic/js/oder alternativ wie in Schritt 2 den Inhalt an eine bestehendestatic/js/custom.jsdran kopieren und im Theme einbinden. Falls das Theme kein jQuery verwendet, mussdist/js/lightbox-plus-jquery.min.jsverwendet werden. - Kopieren der Bilder von
dist/imagesnachstatic/images/.
Für meinen Geschmack waren die Transition-Effekte etwas zu langsam. Glücklicherweise lassen sich diese in Lightbox2 leicht per Javascript anpassen:
1lightbox.option({
2 'fadeDuration': 200,
3 'resizeDuration': 200,
4})