{{/* prettier-ignore-start */ -}} {{- /* This must be used in conjunction with the "deprecated-in" and "new-in" shortcodes. The "deprecated-in" shortcode should be used to indicate when a feature was deprecated, and the "new-in" shortcode should be used to indicate when a feature was introduced. This template will render the appropriate admonition or badge based on the feature status and version information provided by the shortcodes. @param {string} inner The inner content of the shortcode, if any. @param {string} name The name of the shortcode. @param {string} page The page context in which the shortcode is used. @param {string} position The position of the shortcode in the source file. @param {string} status The feature status, either "deprecated" or "new". @param {string} version The version in which the feature was deprecated or introduced. @config {int} majorVersionDiffThreshold The major version difference before warning. @config {int} minorVersionDiffThresholdDeprecatedFeature Minor versions to wait before warning about a deprecated feature. @config {int} minorVersionDiffThresholdNewFeature Minor versions to wait before warning about a "new" feature. @config {slice} validStatusValues Allowed values for the status parameter. @config {string} classAnchorBase Base classes for the anchor element. @config {string} classSpanBase Base classes for the span/badge element. @example {{- partial "layouts/blocks/feature-state.html" (dict "inner" (strings.TrimSpace $.Inner) "name" $.Name "page" $.Page "position" $.Position "status" "deprecated" "version" $version ) }} */ -}} {{/* prettier-ignore-end */ -}} {{- /* Configuration */ -}} {{- $majorVersionDiffThreshold := 0 }} {{- $minorVersionDiffThresholdDeprecatedFeature := 30 }} {{- $minorVersionDiffThresholdNewFeature := 30 }} {{- $validStatusValues := slice "deprecated" "new" }} {{- $classAnchorBase := "dark:text-black no-underline" }} {{- $classSpanBase := "not-prose inline-flex items-center px-2 mr-1 rounded text-sm font-medium" }} {{- /* Initialization */ -}} {{- $classAnchor := $classAnchorBase }} {{- $classSpan := $classSpanBase }} {{- $color := "" }} {{- $expiryMessage := "" }} {{- $icon := "" }} {{- $minorVersionDiffThreshold := 0 }} {{- $text := "" }} {{- if and $.name $.page $.position $.status $.version }} {{- if in $validStatusValues $.status }} {{- if eq $.status "deprecated" }} {{- $classAnchor = printf "text-orange-800 hover:text-orange-600 %s" $classAnchor }} {{- $classSpan = printf "bg-orange-200 dark:bg-orange-400 fill-orange-600 %s" $classSpan }} {{- $color = "orange" }} {{- $expiryMessage = "The deprecation period has ended. Remove this shortcode call and the associated content" }} {{- $icon = "exclamation" }} {{- $minorVersionDiffThreshold = $minorVersionDiffThresholdDeprecatedFeature }} {{- $text = "Deprecated in" }} {{- else if eq $.status "new" }} {{- $classAnchor = printf "text-green-800 hover:text-green-600 %s" $classAnchor }} {{- $classSpan = printf "bg-green-200 dark:bg-green-400 fill-green-600 %s" $classSpan }} {{- $color = "green" }} {{- $expiryMessage = "This feature is no longer new. Remove this shortcode call" }} {{- $icon = "exclamation" }} {{- $minorVersionDiffThreshold = $minorVersionDiffThresholdNewFeature }} {{- $text = "New in" }} {{- else }} {{- errorf "BUG: The %q template does not support the %q feature status: see %s" templates.Current.Name $.status $.position }} {{- end }} {{- $hv := split hugo.Version "." }} {{- $sv := split $.version "." }} {{- $majorDiff := sub (index $hv 0 | int) (index $sv 0 | int) }} {{- $minorDiff := sub (index $hv 1 | int) (index $sv 1 | int) }} {{- if or (gt $majorDiff $majorVersionDiffThreshold) (gt $minorDiff $minorVersionDiffThreshold) }} {{- warnf "%s: %s" $expiryMessage $.position }} {{- end }} {{- $href := printf "https://github.com/gohugoio/hugo/releases/tag/v%s" $.version }} {{- if $.inner }} {{- $text = printf "%s [v%s](%s)\n\n%s" $text $.version $href $.inner | $.page.RenderString (dict "display" "block") }} {{- partial "layouts/blocks/alert.html" (dict "color" $color "icon" $icon "text" $text) }} {{- else }} {{- $target := "_blank"}} {{- printf "%s v%s" $classSpan $classAnchor $href $target $text $.version | safeHTML }} {{- end }} {{- else }} {{- errorf "The %q template does not support the %q feature status: see %s" templates.Current.Name $.status $.position }} {{- end }} {{- else }} {{- errorf "The %q template requires the following context: name, page, position, status, version: see %s" templates.Current.Name $.position }} {{- end }}