diff --git a/exampleSite/assets/images/space.jpg b/exampleSite/assets/images/space.jpg new file mode 100644 index 00000000..9ca1f29d Binary files /dev/null and b/exampleSite/assets/images/space.jpg differ diff --git a/exampleSite/content/docs/guide/shortcodes/cards.md b/exampleSite/content/docs/guide/shortcodes/cards.md index 3a150df4..f62ece99 100644 --- a/exampleSite/content/docs/guide/shortcodes/cards.md +++ b/exampleSite/content/docs/guide/shortcodes/cards.md @@ -12,9 +12,10 @@ linkTitle: Cards {{< cards >}} {{< card link="/" title="Image Card" image="https://source.unsplash.com/featured/800x600?landscape" subtitle="Unsplash Landscape" >}} + {{< card link="/" title="Local Image" image="/images/space.jpg" subtitle="Image under assets directory, processed by Hugo." method="Resize" options="600x q80 webp" >}} + {{< card link="/" title="Local Image" image="/images/card-image-unprocessed.jpg" subtitle="Raw image under static directory." >}} {{< /cards >}} - ## Usage ``` @@ -27,5 +28,37 @@ linkTitle: Cards ``` {{}} {{}} + {{}} + {{}} {{}} ``` + +## Card Parameters + +| Parameter | Description | +|----------- |---------------------------------------| +| `link` | URL (internal or external). | +| `title` | Title heading for the card. | +| `subtitle` | Subtitle heading (supports Markdown). | +| `icon` | Name of the icon. | + +## Image Card + +Additionally, the card supports adding image and processing through these parameters: + +| Parameter | Description | +|----------- |---------------------------------------------| +| `image` | Specifies the image URL for the card. | +| `method` | Sets Hugo's image processing method. | +| `options` | Configures Hugo's image processing options. | + +Card supports three kinds of images: + +1. Remote image: the full URL in the `image` parameter. +2. Static image: use the relative path in Hugo's `static/` directory. +3. Processed image: use the relative path in Hugo's `assets/` directory. + +Hextra auto-detects if image processing is needed during build and applies the `options` parameter or default settings (Resize, 800x, Quality 80, WebP Format). +It currently supports these `method`: `Resize`, `Fit`, `Fill` and `Crop`. + +For more on Hugo's built in image processing commands, methods, and options see their [Image Processing Documentation](https://gohugo.io/content-management/image-processing/). diff --git a/exampleSite/static/images/card-image-unprocessed.jpg b/exampleSite/static/images/card-image-unprocessed.jpg new file mode 100644 index 00000000..6b46052d Binary files /dev/null and b/exampleSite/static/images/card-image-unprocessed.jpg differ diff --git a/layouts/shortcodes/card.html b/layouts/shortcodes/card.html index eda06e30..8d30b3d7 100644 --- a/layouts/shortcodes/card.html +++ b/layouts/shortcodes/card.html @@ -1,10 +1,30 @@ {{- $link := .Get "link" -}} {{- $title := .Get "title" -}} {{- $icon := .Get "icon" -}} -{{- $subtitle := .Get "subtitle" }} -{{- $image := .Get "image" }} +{{- $subtitle := .Get "subtitle" -}} +{{- $image := .Get "image" -}} +{{- $method := .Get "method" | default "Resize" | humanize -}} +{{- $options := .Get "options" | default "800x webp q80" -}} {{- $context := . -}} + +{{/*- Adding asset support for images here, so that Hugo can do its image processing magic. -*/}} +{{/* Unfortunately we cannot pass .Resize/.Fit/.Fill as variables, so we're left with chaining IFs */}} + +{{- if not (urls.Parse $image).Scheme -}} + {{- with resources.Get $image -}} + {{- if eq $method "Resize" -}} + {{- $image = (.Resize $options).RelPermalink -}} + {{- else if eq $method "Fit" -}} + {{- $image = (.Fit $options).RelPermalink -}} + {{- else if eq $method "Fill" -}} + {{- $image = (.Fill $options).RelPermalink -}} + {{- else if eq $method "Crop" -}} + {{- $image = (.Crop $options).RelPermalink -}} + {{- end -}} + {{- end -}} +{{- end -}} + {{ $linkClass := "hover:border-gray-300 bg-transparent shadow-sm dark:border-neutral-800 hover:bg-slate-50 hover:shadow-md dark:hover:border-neutral-700 dark:hover:bg-neutral-900" }} {{- with $image -}} {{ $linkClass = "hover:border-gray-300 bg-gray-100 shadow dark:border-neutral-700 dark:bg-neutral-800 dark:text-gray-50 hover:shadow-lg dark:hover:border-neutral-500 dark:hover:bg-neutral-700" }} @@ -31,10 +51,10 @@ - {{- with $icon }}{{ partial "utils/icon.html" (dict "name" $icon) -}}{{ end -}} + {{- with $icon }}{{ partial "utils/icon.html" (dict "name" $icon) -}}{{- end -}} {{- $title -}} {{- with $subtitle -}} -
{{ $subtitle }}
+
{{- $subtitle | markdownify -}}
{{- end -}}