diff --git a/config.yml b/config.yml index 638019c9e2..48b3bd44c3 100644 --- a/config.yml +++ b/config.yml @@ -40,10 +40,12 @@ module: target: static/apple-touch-icon.png - source: site/static/docs/5.0/assets/img/favicons/favicon.ico target: static/favicon.ico - # docsearch is referenced in a `script` tag so we just mount it in the static folder + + # the following are processed via Hugo pipes so we need them in the assets folder + ## the following will be printed with Hugo pipes - source: node_modules/docsearch.js/dist/cdn/docsearch.min.js - target: static/docs/5.0/assets/js/vendor/docsearch.min.js - # the following are concatenated via Hugo pipes with docs.js so we need them in the assets folder + target: assets/js/vendor/docsearch.min.js + ## The following vendor files will be bundled together on top of local js files as /docs.js - source: node_modules/anchor-js/anchor.min.js target: assets/js/vendor/anchor.min.js - source: node_modules/bs-custom-file-input/dist/bs-custom-file-input.min.js diff --git a/site/layouts/partials/func/get-js-assets.html b/site/layouts/partials/func/get-js-assets.html new file mode 100644 index 0000000000..a7a27292e7 --- /dev/null +++ b/site/layouts/partials/func/get-js-assets.html @@ -0,0 +1,74 @@ +{{/* + get-js-assets + Returns a list of processed Hugo Assets to be used in templates + + @author @regisphilibert + + @context Page (.) + + @access public + + @example - Go Template + {{- range partialCached "func/get-js-assets" . $variant -}} + + {{- end -}} +*/}} + +{{/* We'll return a slice so templates can safely use `range` */}} +{{ $jsAssets := slice }} + +{{/* Storing the reused mount warning message */}} +{{ $missing_file_warning := "%s not found. Check your mounts settings." }} +{{ $doc_version := site.Params.docs_version }} +{{/* Doc Search */}} +{{ if eq .Page.Layout "docs" -}} + {{ with resources.GetMatch "js/vendor/docsearch.min.js" }} + {{/* As this is a WIP, we don't customize the asset URL, + but we will after Hugo .74 and resources.Put (https://github.com/gohugoio/hugo/issues/7406): + {{ with resources.GetMatch "js/vendor/docsearch.min.js" }} + {{ $docsearch := . | resources.Put (printf /docs/%s/assets/js/vendor/docsearch.min.js" $doc_version) }} + {{ $jsAssets = $jsAssets | append $docsearch }} + */}} + {{ $jsAssets = $jsAssets | append . }} + {{ else }} + {{ warnf $missing_file_warning "docsearch.min.js" }} + {{ end }} +{{- end }} + +{{/* --- Bundle */}} +{{ $bundle := slice }} + +{{/* ----- Mounted from vendors */}} +{{- $vendor_assets := slice -}} +{{/* As we need to list the desired mounted files to: + 1. Check for missing mounts and throw an error + 2. Control order if need be + 3. Exclude docsearch (though there would be other ways) */}} +{{ $vendor_filenames := slice "clipboard.min.js" "anchor.min.js" "bs-custom-file-input.min.js" }} +{{ range $filename := $vendor_filenames }} + {{ with resources.GetMatch (print "js/vendor/" .) }} + {{ $vendor_assets = $vendor_assets | append . }} + {{ else }} + {{ warnf $missing_file_warning $filename }} + {{ end }} +{{ end }} +{{ with $vendor_assets }} + {{ $bundle = $bundle | append . }} +{{ end }} + +{{/* ----- Local assets */}} +{{ with resources.Match "js/*.js" }} + {{ $bundle = $bundle | append . }} +{{ end }} + +{{/* Above code should have populated $bundle slice */}} +{{ with $bundle }} + {{ $targetBundlePath := printf "/docs/%s/assets/js/docs.js" $doc_version }} + {{ $bundle_asset := $bundle | resources.Concat $targetBundlePath }} + {{ if eq hugo.Environment "production" }} + {{ $bundle_asset = $bundle_asset | resources.Minify }} + {{ end }} + {{ $jsAssets = $jsAssets | append $bundle_asset }} +{{ end }} + +{{ return $jsAssets }} diff --git a/site/layouts/partials/scripts.html b/site/layouts/partials/scripts.html index be30d7a10d..f19a9b5825 100644 --- a/site/layouts/partials/scripts.html +++ b/site/layouts/partials/scripts.html @@ -4,17 +4,7 @@ {{- end }} -{{ if eq .Page.Layout "docs" -}} - -{{- end }} - -{{- $vendor := resources.Match "js/vendor/*.js" -}} -{{- $js := resources.Match "js/*.js" -}} -{{- $targetDocsJSPath := printf "/docs/%s/assets/js/docs.js" .Site.Params.docs_version -}} -{{- $docsJs := append $js $vendor | resources.Concat $targetDocsJSPath -}} - -{{- if eq hugo.Environment "production" -}} - {{- $docsJs = $docsJs | resources.Minify -}} -{{- end }} - - +{{- $variant := cond (eq .Page.Layout "docs") "docs" "default" -}} +{{- range partialCached "func/get-js-assets" . $variant -}} + +{{- end -}}