diff options
Diffstat (limited to 'layouts/partials/search-algolia.html')
-rw-r--r-- | layouts/partials/search-algolia.html | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/layouts/partials/search-algolia.html b/layouts/partials/search-algolia.html new file mode 100644 index 0000000..0150a2c --- /dev/null +++ b/layouts/partials/search-algolia.html @@ -0,0 +1,109 @@ +<!-- Including InstantSearch.js library and styling --> +<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.6.0/dist/instantsearch.min.js"></script> +<script src="https://cdn.jsdelivr.net/npm/moment@2.22.2/min/moment.min.js"></script> +<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.6.0/dist/instantsearch.min.css"> +<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.6.0/dist/instantsearch-theme-algolia.min.css"> + +<div id="search-searchbar"></div> + <div class="post-list" id="search-hits"> + </div> + +<script> +const search = instantsearch({ + appId: '{{ .Site.Params.algolia_appId }}', + indexName: '{{ .Site.Params.algolia_indexName }}', + apiKey: '{{ .Site.Params.algolia_apiKey }}' +}); + +const hitTemplate = function(hit) { +/* if (hit === null){ + return; + }*/ + let date = ''; + if (hit.date) { + date = moment.unix(hit.date).format('MMM D, YYYY'); + } + let url = `${hit.url}#${hit.anchor}`; + const title = hit._highlightResult.title.value; + + let breadcrumbs = ''; + if (hit._highlightResult.headings) { + breadcrumbs = hit._highlightResult.headings.map(match => { + return `<span class="post-breadcrumb">${match.value}</span>` + }).join(' > ') + } + + let content = "" ; + if (hit._highlightResult.content){ + content = hit._highlightResult.content.value; + } + else{ + content = hit.summary; + } + + + return ` + <div class="post-item"> + <span class="post-meta">${date}</span> + <h2><a class="post-link" href="${url}">${title}</a></h2> + <a href="${url}" class="post-breadcrumbs">${breadcrumbs}</a> + <div class="post-snippet">${content}</div> + </div> + `; +} + + +search.addWidget( + instantsearch.widgets.searchBox({ + container: '#search-searchbar', + placeholder: 'Search into posts...', + poweredBy: true // This is required if you're on the free Community plan + }) +); + +search.addWidget( + instantsearch.widgets.hits({ + container: '#search-hits', + templates: { + item: hitTemplate + } + }) +); + +search.start(); +</script> + +<style> +.ais-search-box { + max-width: 100%; + margin-bottom: 15px; +} +.post-item { + margin-bottom: 30px; +} +.post-link .ais-Highlight { + color: #111; + font-style: normal; + text-decoration: underline; +} +.post-breadcrumbs { + color: #424242; + display: block; +} +.post-breadcrumb { + font-size: 18px; + color: #424242; +} +.post-breadcrumb .ais-Highlight { + font-weight: bold; + font-style: normal; +} +.post-snippet .ais-Highlight { + color: #2a7ae2; + font-style: normal; + font-weight: bold; +} +.post-snippet img { + display: none; +} +</style> |