{{ $shave := resources.Get "js/shave.min.js" | resources.Fingerprint }} <script defer src="{{ $shave.RelPermalink }}"></script> {{ $fuzzysort := resources.Get "js/fuzzysort.min.js" | resources.Fingerprint }} <script defer src="{{ $fuzzysort.RelPermalink }}"></script> <script> {{ $permalink := .Permalink }} var permalink = JSON.parse({{ $permalink | jsonify }}); {{ $isRootSection := eq .Permalink .FirstSection.Permalink }} var isRootSection = JSON.parse({{ $isRootSection | jsonify }}); var data = null; const options = { limit: 100, // don't return more results than you need! allowTypo: false, // if you don't care about allowing typos threshold: -10000, // don't return bad results keys: ['title', 'abstract'], } document.addEventListener('DOMContentLoaded', function () { // search (function loadData() { var xhr = new XMLHttpRequest(); xhr.open('GET', permalink + "index.json"); xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8'); xhr.onload = function () { if (xhr.status === 200) { data = JSON.parse(xhr.response.toString('utf-8')); } else { console.error('[' + xhr.status + ']Error:', xhr.statusText); } }; xhr.send(); })(); var pubSearch = document.getElementById('pubSearch'); var pubList = document.querySelector('.pub__list'); var makeLi = function(ulElem, obj) { var li = document.createElement('li'); li.className = 'pub__item'; var a = document.createElement('a'); a.innerHTML = obj.title; a.setAttribute('href', obj.permalink); if (obj.booktitle) { var span = document.createElement('span'); span.className = 'p2'; span.innerText = ' - ' + obj.booktitle; a.appendChild(span); } else if (obj.shorttitle) { var span = document.createElement('span'); span.className = 'p2'; span.innerText = ' - ' + obj.shorttitle; a.appendChild(span); } var metaDiv = document.createElement('div'); if (obj.publishDate) { var dateSpan = document.createElement('span'); dateSpan.className = 'caption pub__meta'; dateSpan.innerText = '📅 ' + obj.publishDate.slice(0, 11); metaDiv.appendChild(dateSpan); } if (obj.authors) { var authorsSpan = document.createElement('span'); authorsSpan.className = 'caption pub__meta'; authorsSpan.innerText = '✍️ ' + obj.authors.toString(); metaDiv.appendChild(authorsSpan); } if (obj.publication) { var pubSpan = document.createElement('span'); pubSpan.className = 'caption pub__meta'; pubSpan.innerText = '📚 ' + obj.publication; metaDiv.appendChild(pubSpan); } if (obj.ENTRYTYPE) { var typeSpan = document.createElement('span'); typeSpan.className = 'caption pub__meta'; typeSpan.innerText = '🎯 ' + obj.ENTRYTYPE; metaDiv.appendChild(typeSpan); } var descDiv = document.createElement('div'); descDiv.className = 'pub__summary'; if (obj.abstract) { descDiv.innerHTML = obj.abstract.substr(0, 300); } li.appendChild(a); li.appendChild(metaDiv); li.appendChild(descDiv); ulElem.appendChild(li); } pubSearch ? pubSearch.addEventListener('input', function(e) { if (isRootSection) { return null; } var originUl = pubList.querySelector('ul'); var ul = document.createElement('ul'); if (!e.target.value) { data.forEach(function (elem) { makeLi(ul, elem); }); originUl.parentNode.replaceChild(ul, originUl); } else if (data) { var results = fuzzysort.go(e.target.value, data, options); if (results && results.length) { var sortedResult = results.sort(function (a, b) { var aDate = new Date(a.obj.publishDate); var bDate = new Date(b.obj.publishDate); return bDate.getTime() - aDate.getTime(); }); sortedResult.forEach(function (elem) { makeLi(ul, elem.obj); }); originUl.parentNode.replaceChild(ul, originUl); } } }) : null; // shave shave('.pub__summary', 150); }); </script>