Public archive for the Return to Ritherdon project.
https://www.nicolaellisandritherdon.com
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.6 KiB
100 lines
2.6 KiB
2 years ago
|
/**
|
||
|
Full Search
|
||
|
================================================================================
|
||
|
This file's main focus in providing the Meilisearch features to the
|
||
|
search.html template.
|
||
|
|
||
|
For more information on Meilisearch, use:
|
||
|
|
||
|
- https://docs.meilisearch.com/
|
||
|
- https://github.com/meilisearch/instant-meilisearch
|
||
|
|
||
|
Meilisearch provides an 'InstantSearch' add-on (plug-in?) which
|
||
|
links the Meilisearch instance you have running to this website (link above for
|
||
|
more information).
|
||
|
*/
|
||
|
|
||
|
// 'server' variable defined in /templates/search.html
|
||
|
|
||
|
// -- constructed via Djula template. URL provided by data in this website's
|
||
|
// database. Value stored in back-end database and varies from localhost to
|
||
|
// prod. Which is why the database is stored in the database and passed to the
|
||
|
// view instead of trying to work it out in JavaScript -- the user can't change
|
||
|
// it here, only the developers can.
|
||
|
|
||
|
let apiKey = "";
|
||
|
|
||
|
if (location.hostname === "localhost"
|
||
|
|| location.hostname === "127.0.0.1") {
|
||
|
apiKey= "meilisearch-beta-key";
|
||
|
} else {
|
||
|
apiKey = "meilisearch-key";
|
||
|
}
|
||
|
|
||
|
const search = instantsearch({
|
||
|
indexName: "nera",
|
||
|
searchClient: instantMeiliSearch(
|
||
|
server,
|
||
|
apiKey,
|
||
|
{
|
||
|
primaryKey: 'id',
|
||
|
}
|
||
|
)
|
||
|
});
|
||
|
|
||
|
search.addWidgets([
|
||
|
instantsearch.widgets.searchBox({
|
||
|
container: "#searchbox",
|
||
|
placeholder: "Search the archive here...",
|
||
|
}),
|
||
|
instantsearch.widgets.clearRefinements({
|
||
|
container: "#clear-refinements"
|
||
|
}),
|
||
|
instantsearch.widgets.refinementList({
|
||
|
container: "#year-list",
|
||
|
attribute: "year"
|
||
|
}),
|
||
|
instantsearch.widgets.refinementList({
|
||
|
container: "#month-list",
|
||
|
attribute: "month"
|
||
|
}),
|
||
|
instantsearch.widgets.refinementList({
|
||
|
container: "#keywords-list",
|
||
|
attribute: "keywords"
|
||
|
}),
|
||
|
instantsearch.widgets.configure({
|
||
|
hitsPerPage: 50,
|
||
|
snippetEllipsisText: "...",
|
||
|
attributesToSnippet: ["title:100"]
|
||
|
}),
|
||
|
instantsearch.widgets.hits({
|
||
|
container: "#hits",
|
||
|
templates: {
|
||
|
item: `
|
||
|
<a class="fe-search-hit" href="{{server}}/{{relative-path}}">
|
||
|
<div>
|
||
|
<img src="{{server}}/{{thumbnail-path}}"/>
|
||
|
<div class="fe-search-hit-text">
|
||
|
<span class="fe-search-hit-title">
|
||
|
{{#helpers.highlight}}{"attribute": "title"}{{/helpers.highlight}}
|
||
|
</span>
|
||
|
<span class="fe-search-hit-secondary">
|
||
|
{{#helpers.highlight}}{"attribute": "month"}{{/helpers.highlight}}
|
||
|
{{#helpers.highlight}}{"attribute": "year"}{{/helpers.highlight}}
|
||
|
</span>
|
||
|
<span class="fe-search-hit-keywords">
|
||
|
{{keywords}}
|
||
|
</span>
|
||
|
</div>
|
||
|
</div>
|
||
|
</a>
|
||
|
`
|
||
|
}
|
||
|
}),
|
||
|
instantsearch.widgets.pagination({
|
||
|
container: "#pagination"
|
||
|
})
|
||
|
]);
|
||
|
|
||
|
search.start();
|