132 lines
4.3 KiB
HTML
132 lines
4.3 KiB
HTML
{{ $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> |