diff options
| author | Serghei Iakovlev <egrep@protonmail.ch> | 2022-07-11 09:44:01 +0200 |
|---|---|---|
| committer | Serghei Iakovlev <egrep@protonmail.ch> | 2022-07-11 09:44:01 +0200 |
| commit | 0e5fe09b09bf9491732748520e6ad37b74453488 (patch) | |
| tree | 10e6a9b070626353efcdba9f9bc69b3007d8a57d /layouts | |
| parent | 477e47f4eda5344b799839d0d645d125c903b099 (diff) | |
| download | gohugo-theme-ed-0e5fe09b09bf9491732748520e6ad37b74453488.tar.gz | |
Rework site search to pass config params
Diffstat (limited to 'layouts')
| -rw-r--r-- | layouts/index.json | 47 | ||||
| -rw-r--r-- | layouts/partials/data.html | 9 | ||||
| -rw-r--r-- | layouts/shortcodes/form-search.html | 56 |
3 files changed, 75 insertions, 37 deletions
diff --git a/layouts/index.json b/layouts/index.json index 05d731f..538cfcc 100644 --- a/layouts/index.json +++ b/layouts/index.json @@ -1,3 +1,4 @@ +{{- /* Generate the search index. */ -}} {{- $pages := slice -}} {{- $mainSections := site.Params.mainSections | default (slice "posts") }} @@ -7,19 +8,43 @@ {{- $.Scratch.Add "urlsAdded" slice -}} {{- range $index, $page := $pages -}} - {{- if gt (len $page.Content) 0 -}} - {{- if not (in ($.Scratch.Get "urlsAdded") $page.Permalink) -}} - {{- $pageData := (dict - "title" $page.Title - "href" $page.Permalink - "tags" (delimit ($page.Params.tags | default slice) " ; ") - "categories" (delimit ($page.Params.categories | default slice) " ; ") - "content" $page.Plain - ) -}} - {{- $.Scratch.Add "pagesIndex" $pageData -}} - {{- $.Scratch.Add "urlsAdded" $page.Permalink -}} + {{- /* Do not index drafts or private pages. */ -}} + {{- if and (not .Draft) (not .Params.private) | and (ne .Params.searchable false) -}} + + {{- /* Do not index pages w/o content. */ -}} + {{- if gt (len $page.Content) 0 -}} + + {{- /* Add page to index. */ -}} + {{- if not (in ($.Scratch.Get "urlsAdded") $page.Permalink) -}} + + {{/* Exclude virtual pages which aren't backed by a file */}} + {{ if .File }} + {{- $pageData := (dict + "objectID" $page.File.UniqueID + "date" $page.Date.UTC.Unix + "publishDate" $page.PublishDate + "lastmod" $page.Lastmod.UTC.Unix + "expiryDate" $page.ExpiryDate.UTC.Unix + "lang" $page.Lang + "title" $page.Title + "href" $page.Permalink + "kind" $page.Kind + "type" $page.Type + "section" $page.Section + "tags" (delimit ($page.Params.tags | default slice) " ; ") + "categories" (delimit ($page.Params.categories | default slice) " ; ") + "content" $page.Plain + ) -}} + {{- $.Scratch.Add "pagesIndex" $pageData -}} + {{- $.Scratch.Add "urlsAdded" $page.Permalink -}} + {{- end -}} + + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} {{- $.Scratch.Get "pagesIndex" | jsonify -}} diff --git a/layouts/partials/data.html b/layouts/partials/data.html index fa12238..afacc83 100644 --- a/layouts/partials/data.html +++ b/layouts/partials/data.html @@ -2,13 +2,6 @@ { "analytics_code": {{ site.GoogleAnalytics | default "" }}, "page_title": {{- partial "title.html" . -}}, - "language": {{ site.LanguageCode | default site.Language.Lang }}, - "strings": { - "searchEnterTerm": {{ i18n "search_enter_term" }}, - "searchNoResults": {{ i18n "search_no_results" }} - }, - "site": { - "baseUrl": {{ site.BaseURL }} - } + "language": {{ site.LanguageCode | default site.Language.Lang }} } </script> diff --git a/layouts/shortcodes/form-search.html b/layouts/shortcodes/form-search.html index f328f38..873c73a 100644 --- a/layouts/shortcodes/form-search.html +++ b/layouts/shortcodes/form-search.html @@ -22,32 +22,52 @@ <div id="search-results-body" class="post-list"></div> </section> -{{- $vendors := slice (resources.Get "js/vendor/lunr.js") -}} -{{- $vendors = $vendors | append (resources.Get "js/vendor/lunr.multi.js" ) -}} -{{- $vendors = $vendors | append (resources.Get "js/vendor/lunr.stemmer.support.js" ) -}} +{{- $isProduction := (or (eq (getenv "HUGO_ENV") "production") (eq site.Params.env "production")) -}} + +{{- /* Add lunr.js. */ -}} +{{- $lunrSearch := slice (resources.Get "js/vendor/lunr.js") -}} + +{{- /* Add lunr multilanguage support. */ -}} +{{- $lunrSearch = $lunrSearch | append (resources.Get "js/vendor/lunr.multi.js" ) -}} +{{- $lunrSearch = $lunrSearch | append (resources.Get "js/vendor/lunr.stemmer.support.js" ) -}} {{- $lunrLangs := slice "de" "es" "fr" "it" "pt" "ru" -}} {{- range $lunrLangs -}} - {{ $vendors = $vendors | append (resources.Get (printf "js/vendor/lunr.%s.js" .) ) }} + {{ $lunrSearch = $lunrSearch | append (resources.Get (printf "js/vendor/lunr.%s.js" .) ) -}} {{- end -}} -{{- $vendors = $vendors | resources.Concat "js/lunr-bundle.js" -}} -{{- if or (eq (getenv "HUGO_ENV") "production") (eq site.Params.env "production") }} - {{- $vendors = $vendors | minify -}} +{{- /* Build lunr. */ -}} +{{- $lunrSearch = $lunrSearch | resources.Concat "js/lunr-bundle.js" -}} + +{{- if $isProduction -}} + {{- $lunrSearch = $lunrSearch | minify -}} {{- end -}} -{{- if not site.Params.assets.disable_fingerprinting -}} - {{- $vendors = $vendors | fingerprint -}} - <script src="{{ $vendors.RelPermalink }}" integrity="{{ $vendors.Data.Integrity }}"></script> + +{{- if or (site.Params.assets.disable_fingerprinting) (not $isProduction) }} + <script src="{{ $lunrSearch.RelPermalink }}"></script> {{- else -}} - <script src="{{ $vendors.RelPermalink }}"></script> + {{- $lunrSearch = $lunrSearch | fingerprint }} + <script src="{{ $lunrSearch.RelPermalink }}" integrity="{{ $lunrSearch.Data.Integrity }}"></script> {{- end -}} -{{- $search := resources.Get "js/search.js" -}} -{{- if or (eq (getenv "HUGO_ENV") "production") (eq site.Params.env "production") }} - {{- $search = $search | minify -}} +{{- /* Configure search engine. */ -}} +{{- $maxSummaryLength := site.Params.search.maxSummaryLength | default 100 -}} +{{- $searchConfig := dict "indexURI" ("/index.json" | relLangURL) "maxSummaryLength" $maxSummaryLength -}} +{{- $searchI18n := dict "enterTerm" (i18n "search_enter_term") "noResults" (i18n "search_no_results") -}} +{{- $searchParams := dict "searchConfig" $searchConfig "i18n" $searchI18n -}} + +{{- $siteSearch := slice -}} +{{- $siteSearch = $siteSearch | append (resources.Get "js/search.js") -}} +{{- $siteSearch = $siteSearch | resources.Concat "js/search-bundle.js" -}} + +{{- if $isProduction -}} + {{- $siteSearch = $siteSearch | js.Build (dict "format" "iife" "params" $searchParams) | minify -}} +{{ else }} + {{- $siteSearch = $siteSearch | js.Build (dict "format" "iife" "sourceMap" "inline" "params" $searchParams) -}} {{- end -}} -{{- if not site.Params.assets.disable_fingerprinting -}} - {{- $search = $search | fingerprint -}} - <script src="{{ $search.RelPermalink }}" integrity="{{ $search.Data.Integrity }}"></script> + +{{- if or (site.Params.assets.disable_fingerprinting) (not $isProduction) }} + <script src="{{ $siteSearch.RelPermalink }}"></script> {{- else -}} - <script src="{{ $search.RelPermalink }}"></script> + {{- $siteSearch = $siteSearch | fingerprint }} + <script src="{{ $siteSearch.RelPermalink }}" integrity="{{ $siteSearch.Data.Integrity }}"></script> {{- end -}} |
