blog/themes/farallon/layouts/page/search.html

79 lines
3.6 KiB
HTML
Raw Normal View History

2024-06-14 14:03:34 +08:00
{{ define "main" }}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.css@8.1.0/themes/reset-min.css"
integrity="sha256-2AeJLzExpZvqLUxMfcs+4DWcMwNfpnjUeAAvEtPr0wU=" crossorigin="anonymous">
<div class="site--main">
<header class="archive-header archive-header__search">
<div id="searchbox"></div>
</header>
<div id="hits" class="articleList"></div>
<div id="pagination"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/algoliasearch@4.20.0/dist/algoliasearch-lite.umd.js"
integrity="sha256-DABVk+hYj0mdUzo+7ViJC6cwLahQIejFvC+my2M/wfM=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@4.60.0/dist/instantsearch.production.min.js"
integrity="sha256-9242vN47QUX50UG5Gf5XDO1YREWCEJRyXHofh5fsl24=" crossorigin="anonymous"></script>
<script>
const searchClient = algoliasearch('{{ .Site.Params.searchAPPID }}', '{{ .Site.Params.searchKey }}');
const search = instantsearch({
indexName: '{{ .Site.Params.indexName }}',
searchClient,
insights: false
});
search.addWidgets([
instantsearch.widgets.searchBox({
container: '#searchbox',
showReset: false,
placeholder: 'Search for stories',
cssClasses: {
form: ['search-form'],
input: ['search-field']
},
templates: {
submit: `<input type="submit" class="search-submit" value="Search">`
}
}),
instantsearch.widgets.hits({
container: '#hits',
templates: {
item(hit, { html, components, sendEvent }) {
const time = new Date(hit.date);
const date = time.toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
});
const lngString = '{{ .Site.Language }}';
const uri = hit.uri.replace("/" + lngString + "/", "/");
const cover = hit.cover ? html`<img src="${hit.cover}" class="cover" itemprop="image" />` : '';
return html`<article class="post--item" itemtype="http://schema.org/Article" itemscope="itemscope">
<div class="content">
<h2 class="post--title">
<a href="${uri}">${components.Highlight({ attribute: 'title', hit })}</a>
</h2>
<div class="description">${hit.description}</div>
<div class="meta">
<svg class="icon" viewBox="0 0 1024 1024" width="16" height="16">
<path
d="M512 97.52381c228.912762 0 414.47619 185.563429 414.47619 414.47619s-185.563429 414.47619-414.47619 414.47619S97.52381 740.912762 97.52381 512 283.087238 97.52381 512 97.52381z m0 73.142857C323.486476 170.666667 170.666667 323.486476 170.666667 512s152.81981 341.333333 341.333333 341.333333 341.333333-152.81981 341.333333-341.333333S700.513524 170.666667 512 170.666667z m36.571429 89.697523v229.86362h160.865523v73.142857H512a36.571429 36.571429 0 0 1-36.571429-36.571429V260.388571h73.142858z">
</path>
</svg>${date}
</div>
</div>
${cover}
</article>
`;
},
},
})
]);
search.start();
const queryString = window.location.search;
const params = new URLSearchParams(queryString);
search.helper.setQuery(params.get("s")).search();
</script>
{{ end }}