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..c0a1b82 --- /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/list.html b/themes/hugo-recettes/layouts/_default/list.html index b4cc95e..aa54406 100644 --- a/themes/hugo-recettes/layouts/_default/list.html +++ b/themes/hugo-recettes/layouts/_default/list.html @@ -5,7 +5,7 @@ {{ range .Data.Pages }}

- {{ .Title }} + {{ .Title }}

{{ end }} 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/index.rss.xml b/themes/hugo-recettes/layouts/index.rss.xml index 951f3d4..0d345fe 100644 --- a/themes/hugo-recettes/layouts/index.rss.xml +++ b/themes/hugo-recettes/layouts/index.rss.xml @@ -9,7 +9,7 @@ {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }} - {{ .Permalink }} + {{ .Permalink }}index.html Les dernières recettes Hugo - {{ .Hugo.Version }} - gohugo.io{{ with .Site.LanguageCode }} {{.}}{{end}}{{ with .Site.Copyright }} @@ -22,7 +22,7 @@ {{ range $pages }} {{ .Title }} - {{ .Permalink }} + {{ .Permalink }}index.html {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} {{ .Permalink }} 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 @@ -