From c3c169a557fcd4bb7f5f5be5b9a5738590cc0bd1 Mon Sep 17 00:00:00 2001 From: Thomas Schwery Date: Thu, 6 Feb 2020 22:38:58 +0100 Subject: [PATCH 1/2] Add search capabilities --- config.toml | 3 + content/search.md | 4 ++ themes/hugo-recettes/assets/js/search.js | 71 +++++++++++++++++++ .../hugo-recettes/layouts/_default/index.json | 21 ++++++ .../layouts/_default/search.html | 31 ++++++++ .../layouts/partials/header.html | 23 +++--- 6 files changed, 143 insertions(+), 10 deletions(-) create mode 100644 content/search.md create mode 100644 themes/hugo-recettes/assets/js/search.js create mode 100644 themes/hugo-recettes/layouts/_default/index.json create mode 100644 themes/hugo-recettes/layouts/_default/search.html diff --git a/config.toml b/config.toml index b83ea11..772550a 100644 --- a/config.toml +++ b/config.toml @@ -16,5 +16,8 @@ copyright = "" category = "categories" tag = "tags" +[outputs] + home = ["html", "rss", "json"] + [params] logo = "/images/logo.png" diff --git a/content/search.md b/content/search.md new file mode 100644 index 0000000..75b4983 --- /dev/null +++ b/content/search.md @@ -0,0 +1,4 @@ +--- +title: "Search Results" +layout: "search" +--- diff --git a/themes/hugo-recettes/assets/js/search.js b/themes/hugo-recettes/assets/js/search.js new file mode 100644 index 0000000..1c7f4bb --- /dev/null +++ b/themes/hugo-recettes/assets/js/search.js @@ -0,0 +1,71 @@ +var searchFunction = function(event) { + var searchQuery = $('#search-query').val(); + + if (searchQuery.length <= 3) { + $('#search-results').html("

Aucun résultat trouvé

"); + return; + } + + var lunrResults = lunrIdx.search(searchQuery); + if (lunrResults.length > 0) { + populateLunrResults(searchQuery, lunrResults); + }else{ + $('#search-results').html("

Aucun résultat trouvé

"); + } +} + +var templateDefinition = ` +
+

{{ title }} {{ categories }}

+

{{ content }}

+
+`; +var template = Handlebars.compile(templateDefinition); + +var populateLunrResults = function(searchQuery, results) { + var resultDiv = $('#search-results'); + resultDiv.html(''); + $.each(results,function(rIdx,result){ + var resultPage = jsonData.filter(function(page) { + return page.permalink === result.ref; + })[0]; + console.info(result); + console.info(resultPage); + + var output = template({ + key: rIdx, + title: resultPage.title, + content: resultPage.contents, + categories: resultPage.categories, + link: result.ref + }); + resultDiv.append(output); + + $("#summary-" + rIdx).mark(searchQuery.replace(/[+-]/g, '')); + }); +} + +var lunrIdx; +var jsonData; +$('#search-query').prop('disabled', true); +$.getJSON( "../index.json", function( pages ) { + jsonData = pages; + + lunrIdx = lunr(function() { + this.field("title", { boost: 10 }); + this.field("categories", { boost: 5 }); + this.field("contents"); + this.ref("permalink"); + + jsonData.forEach(function (page) { + this.add(page) + }, this) + }); + + $('#search-query').prop('disabled', false); + searchFunction(); +}); + +var formField = $('#search-query'); +formField.change(searchFunction); +formField.keyup(searchFunction); diff --git a/themes/hugo-recettes/layouts/_default/index.json b/themes/hugo-recettes/layouts/_default/index.json new file mode 100644 index 0000000..9af8bf6 --- /dev/null +++ b/themes/hugo-recettes/layouts/_default/index.json @@ -0,0 +1,21 @@ +{{- $allRecettes := newScratch -}} +{{- $allRecettes.Add "index" slice -}} +{{- range .Site.RegularPages -}} + {{ $recette := (dict "title" .Title "permalink" .Permalink "categories" .CurrentSection.Title) }} + + {{- $ingredients := newScratch -}} + {{- $ingredients.Add "ingredients" slice -}} + {{- range .Params.steps -}} + {{- range .ingredients -}} + {{- $ingredients.Add "ingredients" .name -}} + {{- end -}} + {{- end -}} + + + {{- $ingredientsArray := $ingredients.Get "ingredients" -}} + {{- $ingredientsContent := delimit $ingredientsArray ", " -}} + {{- $recette := merge $recette (dict "ingredients" $ingredientsArray) -}} + {{- $recette := merge $recette (dict "contents" $ingredientsContent) -}} + {{- $allRecettes.Add "index" $recette -}} +{{- end -}} +{{- $allRecettes.Get "index" | jsonify -}} diff --git a/themes/hugo-recettes/layouts/_default/search.html b/themes/hugo-recettes/layouts/_default/search.html new file mode 100644 index 0000000..d593fd7 --- /dev/null +++ b/themes/hugo-recettes/layouts/_default/search.html @@ -0,0 +1,31 @@ +{{ partial "header.html" . }} + +{{ $searchJS := resources.Get "js/search.js" }} +{{ $searchJSMin := $searchJS | minify | resources.Fingerprint "sha512" }} + + + + + + +
+
+
+ + +
+
+
+
+
+ + + + +{{ partial "footer.html" . }} diff --git a/themes/hugo-recettes/layouts/partials/header.html b/themes/hugo-recettes/layouts/partials/header.html index 1a0099e..7cccb37 100644 --- a/themes/hugo-recettes/layouts/partials/header.html +++ b/themes/hugo-recettes/layouts/partials/header.html @@ -9,6 +9,9 @@ {{ $cssBundle := slice $bootstrapCSS $customCSS | resources.Concat "css/bundle.css" }} {{ $cssBundleMin := $cssBundle | resources.Minify | resources.Fingerprint "sha512" }} +{{ $indexUrl := "index.html" | absURL }} +{{ $searchUrl := "search" | absURL }} + @@ -23,16 +26,16 @@ -