Files
HugoBlox-kit/modules/blox-bootstrap/layouts/_shortcodes/video.html
T

54 lines
2.0 KiB
HTML

{{/* Video Shortcode for Hugo Blox. */}}
{{/* Load video from page dir falling back to media library at `assets/media/` and then to remote URI. */}}
{{/*
Docs: https://docs.hugoblox.com/content/writing-markdown-latex/#videos
Parameters
----------
src :
Path to file or url for the video file.
If a local file, first it is searched in the page directory, and then in `assets/media/` .
poster : optional
Path or url for the preview image.
Defaults to {src without file extension}.jpg .
If not found, defaults to "".
controls : optional
If present, display video controls, otherwise the video is set to autoplay.
id : optional
Custom id "video-{id}" to associate to the <video> tag.
*/}}
{{ $destination := .Get "src" }}
{{ $video_ext_with_dot := path.Ext (.Get "src") }}
{{ $video_ext := strings.TrimPrefix "." $video_ext_with_dot }}
{{ $video_type := $video_ext }}
{{ $destination_preview := (.Get "poster") | default (replace $destination $video_ext_with_dot ".jpg") }}
{{ $is_remote := strings.HasPrefix $destination "http" }}
{{- $asset := "" -}}
{{- $asset_preview := "" -}}
{{- if not $is_remote -}}
{{- $asset = (.Page.Resources.ByType "video").GetMatch $destination -}}
{{- $asset_preview = (.Page.Resources.ByType "image").GetMatch $destination_preview -}}
{{- if not $asset -}}
{{- $asset = resources.Get (path.Join "media" $destination) -}}
{{- $asset_preview = resources.Get (path.Join "media" $destination_preview) -}}
{{- end -}}
{{ $video_type = $asset.MediaType.SubType }}
{{- end -}}
{{ if $asset }}
{{ $destination = $asset.RelPermalink }}
{{ else }}
{{ $destination = $destination | safeURL }}
{{ end }}
{{ $poster := (.Get "poster") | default "" }}
{{ if $asset_preview }}
{{ $poster = $asset_preview.RelPermalink }}
{{ end }}
<video {{if (.Get "controls")}}controls{{else}}autoplay loop{{end}} {{with $poster}}poster="{{.}}"{{end}} {{ with (.Get "id") }}id="video-{{.|anchorize}}"{{end}}>
<source src="{{$destination}}" type="video/{{$video_type}}">
</video>