{{- /* Timeline rendering partial for code fences extended syntax and shortcode usage. - Supports events from inline content, data key, resource file, or direct Events input. - Supports reverse order, placement, animation, node style, and size options. @param {Object} [.Options] render options from shortcode or code fence attributes @param {Boolean} [.Options.reverse] whether to sort events in descending order @param {String} [.Options.placement] default timestamp placement @param {Boolean} [.Options.animation] whether to enable item animation @param {String} [.Options.size] timeline size variant @param {String} [.Options.node] timeline node style @param {String} [.Options.data] key of data source under data/timeline @param {String} [.Options.file] local resource path for timeline data @param {String} [.Inner] inline timeline source content @param {Array} [.Events] direct events array override @param {Object} [.Page] current page context */ -}} {{- $reverse := .Options.reverse | default false -}} {{- $placement := .Options.placement | default "bottom" -}} {{- $animation := .Options.animation | default false -}} {{- $size := .Options.size | default "medium" -}} {{- $node := .Options.node | default "circle" -}} {{- $data := .Options.data -}} {{- $file := .Options.file -}} {{- /* Get Timeline events */ -}} {{- $content := .Inner -}} {{ with $data }} {{- $content = index hugo.Data.timeline (printf "%v.%v" . page.Language) | default (index hugo.Data.timeline .) -}} {{- if not $content -}} {{- warnf "Timeline: data not found, please ensure the data file \"data/timeline/%s.{json|yml|yaml|toml}\" exists." . -}} {{- end -}} {{- else -}} {{- with dict "Path" $file "Resources" .Resources | partial "function/resource.html" }} {{- $content = .Content -}} {{- else with $file -}} {{- warnf "Timeline: no such data file: %s" . -}} {{- end -}} {{- $content = $content | transform.Unmarshal -}} {{- end -}} {{- $events := $content.events | default slice -}} {{- with .Events -}} {{- $events = . -}} {{- end -}} {{- $events = sort $events "timestamp" (cond $reverse "desc" "asc") -}} {{- if not $events -}} {{- warnf "Timeline: events is empty, executing in file %s" $.Position -}} {{- end -}} {{- /* Set Timeline style */ -}} {{- $style := "" -}} {{- with .Options.width -}} {{- $style = printf "width: %v;" . -}} {{- end -}} {{- with .Options.height -}} {{- $style = add $style (printf "height: %v;" .) -}} {{- end -}} {{- with $style -}} {{- $style = printf `style="%v"` . -}} {{- end -}}