334 lines
11 KiB
HTML
334 lines
11 KiB
HTML
{{ $shave := resources.Get "js/shave.min.js" | resources.Fingerprint }}
|
|
<script defer src="{{ $shave.RelPermalink }}"></script>
|
|
{{ $masonry := resources.Get "js/masonry.pkgd.min.js" | resources.Fingerprint }}
|
|
<script defer src="{{ $masonry.RelPermalink }}"></script>
|
|
{{ $imagesloaded := resources.Get "js/imagesloaded.pkgd.min.js" | resources.Fingerprint }}
|
|
<script defer src="{{ $imagesloaded.RelPermalink }}"></script>
|
|
|
|
<script>
|
|
{{ $enableSearchHighlight := ($.Param "enableSearchHighlight") }}
|
|
var enableSearchHighlight = JSON.parse({{ $enableSearchHighlight | jsonify }});
|
|
{{ $isFirstSection := eq .Permalink .FirstSection.Permalink }}
|
|
var isFirstSection = JSON.parse({{ $isFirstSection | jsonify }});
|
|
{{ $tagsBaseURL := ("/tags/" | relLangURL) }}
|
|
var tagsBaseURL = JSON.parse({{ $tagsBaseURL | jsonify }});
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
var originHtmlText = JSON.stringify(document.querySelector('.pub__ul').innerHTML);
|
|
|
|
// search
|
|
var pubSearch = document.getElementById('pubSearch');
|
|
var pubList = document.querySelector('.pub__list');
|
|
var pubUl = document.querySelector('.pub__ul');
|
|
var pubResult = document.querySelector('.pub__result');
|
|
|
|
var makeLi = function(ulElem, obj) {
|
|
var li = document.createElement('li');
|
|
li.className = 'pub__item';
|
|
|
|
var titleLink = document.createElement('a');
|
|
titleLink.innerHTML = obj.title;
|
|
titleLink.setAttribute('href', obj.uri);
|
|
|
|
if (obj.booktitle) {
|
|
var span = document.createElement('span');
|
|
span.className = 'p2';
|
|
span.innerText = ' - ' + obj.booktitle;
|
|
titleLink.appendChild(span);
|
|
} else if (obj.shorttitle) {
|
|
var span = document.createElement('span');
|
|
span.className = 'p2';
|
|
span.innerText = ' - ' + obj.shorttitle;
|
|
titleLink.appendChild(span);
|
|
}
|
|
|
|
var metaDiv = document.createElement('div');
|
|
metaDiv.setAttribute('class', 'pub__metas');
|
|
if (obj.publishDate) {
|
|
var dateSpan = document.createElement('span');
|
|
dateSpan.className = 'caption pub__meta';
|
|
dateSpan.innerText = '📅 ' + obj.publishDate.slice(0, 10);
|
|
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 tagsUl = null;
|
|
if (obj.tags && obj.tags.length) {
|
|
tagsUl = document.createElement('ul');
|
|
tagsUl.setAttribute('class', 'pub__tags caption');
|
|
tagsUl.innerHTML = ' 🏷️';
|
|
|
|
for (var i = 0; i < obj.tags.length; i++) {
|
|
var tagLi = document.createElement('li');
|
|
var tagLink = document.createElement('a');
|
|
|
|
tagLink.setAttribute('href', tagsBaseURL + obj.tags[i]);
|
|
tagLink.setAttribute('class', 'pub__tag');
|
|
tagLink.innerText = "#" + obj.tags[i];
|
|
|
|
tagLi.appendChild(tagLink);
|
|
tagsUl.appendChild(tagLi);
|
|
}
|
|
}
|
|
|
|
var descDiv = document.createElement('div');
|
|
descDiv.className = 'pub__summary';
|
|
if (obj.abstract) {
|
|
descDiv.innerHTML = obj.abstract.substr(0, 300);
|
|
}
|
|
|
|
li.appendChild(titleLink);
|
|
li.appendChild(metaDiv);
|
|
li.appendChild(descDiv);
|
|
if (tagsUl) {
|
|
metaDiv.appendChild(tagsUl);
|
|
}
|
|
ulElem.appendChild(li);
|
|
}
|
|
|
|
var makeHighlightLi = function (ulElem, obj) {
|
|
var li = document.createElement('li');
|
|
li.className = 'pub__item';
|
|
|
|
var titleLink = document.createElement('a');
|
|
titleLink.innerHTML = obj.item.title;
|
|
titleLink.setAttribute('href', obj.item.uri);
|
|
|
|
var descDiv = null;
|
|
if (obj.item.abstract) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.innerHTML = obj.item.abstract;
|
|
descDiv.className = 'pub__summary';
|
|
}
|
|
|
|
if (obj.matches && obj.matches.length) {
|
|
for (var i = 0; i < obj.matches.length; i++) {
|
|
titleLink.innerHTML = obj.item.title;
|
|
|
|
if (obj.matches[i].key === 'title') {
|
|
titleLink.innerHTML = generateHighlightedText(obj.item.title, obj.matches[i].indices);
|
|
}
|
|
|
|
if (obj.item.booktitle) {
|
|
var span = document.createElement('span');
|
|
span.className = 'p2';
|
|
span.innerHTML = ' - ' + obj.item.booktitle;
|
|
titleLink.appendChild(span);
|
|
} else if (obj.item.shorttitle) {
|
|
var span = document.createElement('span');
|
|
span.className = 'p2';
|
|
span.innerHTML = ' - ' + obj.item.shorttitle;
|
|
titleLink.appendChild(span);
|
|
}
|
|
|
|
var metaDiv = document.createElement('div');
|
|
metaDiv.setAttribute('class', 'pub__metas');
|
|
|
|
if (obj.item.publishDate) {
|
|
var dateSpan = document.createElement('span');
|
|
dateSpan.className = 'caption pub__meta';
|
|
dateSpan.innerText = '📅 ' + obj.item.publishDate.slice(0, 10);
|
|
metaDiv.appendChild(dateSpan);
|
|
}
|
|
|
|
if (obj.item.authors) {
|
|
var authorsSpan = document.createElement('span');
|
|
authorsSpan.className = 'caption pub__meta';
|
|
authorsSpan.innerText = '✍️ ' + obj.item.authors.toString();
|
|
metaDiv.appendChild(authorsSpan);
|
|
}
|
|
|
|
if (obj.item.publication) {
|
|
var pubSpan = document.createElement('span');
|
|
pubSpan.className = 'caption pub__meta';
|
|
pubSpan.innerText = '📚 ' + obj.item.publication;
|
|
metaDiv.appendChild(pubSpan);
|
|
}
|
|
|
|
if (obj.item.ENTRYTYPE) {
|
|
var typeSpan = document.createElement('span');
|
|
typeSpan.className = 'caption pub__meta';
|
|
typeSpan.innerText = '🎯 ' + obj.item.ENTRYTYPE;
|
|
metaDiv.appendChild(typeSpan);
|
|
}
|
|
|
|
var tagsUl = null;
|
|
if (obj.item.tags && obj.item.tags.length) {
|
|
tagsUl = document.createElement('ul');
|
|
tagsUl.setAttribute('class', 'pub__tags caption');
|
|
tagsUl.innerHTML = ' 🏷️';
|
|
|
|
for (var j = 0; j < obj.item.tags.length; j++) {
|
|
var tagLi = document.createElement('li');
|
|
var tagLink = document.createElement('a');
|
|
|
|
tagLink.setAttribute('href', tagsBaseURL + obj.item.tags[j]);
|
|
tagLink.setAttribute('class', 'pub__tag');
|
|
tagLink.innerText = "#" + obj.item.tags[j];
|
|
|
|
tagLi.appendChild(tagLink);
|
|
tagsUl.appendChild(tagLi);
|
|
}
|
|
}
|
|
|
|
if (obj.matches[i].key === 'abstract') {
|
|
descDiv.innerHTML = generateHighlightedText(obj.matches[i].value, obj.matches[i].indices);
|
|
}
|
|
}
|
|
|
|
li.appendChild(titleLink);
|
|
if (metaDiv) {
|
|
li.appendChild(metaDiv);
|
|
}
|
|
if (descDiv) {
|
|
li.appendChild(descDiv);
|
|
}
|
|
if (tagsUl && metaDiv) {
|
|
metaDiv.appendChild(tagsUl);
|
|
}
|
|
|
|
ulElem.appendChild(li);
|
|
}
|
|
}
|
|
|
|
function generateHighlightedText(text, regions) {
|
|
if (!regions) {
|
|
return text;
|
|
}
|
|
|
|
var content = '', nextUnhighlightedRegionStartingIndex = 0;
|
|
|
|
regions.forEach(function (region) {
|
|
if (region[0] === region[1]) {
|
|
return null;
|
|
}
|
|
|
|
content += '' +
|
|
text.substring(nextUnhighlightedRegionStartingIndex, region[0]) +
|
|
'<span class="search__highlight">' +
|
|
text.substring(region[0], region[1] + 1) +
|
|
'</span>' +
|
|
'';
|
|
nextUnhighlightedRegionStartingIndex = region[1] + 1;
|
|
});
|
|
|
|
content += text.substring(nextUnhighlightedRegionStartingIndex);
|
|
|
|
return content;
|
|
};
|
|
|
|
pubSearch ?
|
|
pubSearch.addEventListener('input', function(e) {
|
|
var results = fuse.search(e.target.value);
|
|
|
|
if (enableSearchHighlight) {
|
|
renderSearchHighlightResults(e.target.value, results);
|
|
} else {
|
|
renderSearchResults(e.target.value, results);
|
|
}
|
|
}) : null;
|
|
|
|
function renderSearchResults(searchText, results) {
|
|
var originUl = document.querySelector('.pub__ul');
|
|
var newUl = document.createElement('ul');
|
|
newUl.setAttribute('class', 'pub__ul');
|
|
|
|
if (!searchText) {
|
|
if (isFirstSection) {
|
|
originUl.innerHTML = JSON.parse(originHtmlText);
|
|
var grid = document.querySelector('.pgrid');
|
|
var msnry = new Masonry(grid, {
|
|
itemSelector: '.pgrid-item',
|
|
columnWidth: '.pgrid-sizer',
|
|
percentPosition: true,
|
|
});
|
|
imagesLoaded(grid).on('progress', function () {
|
|
msnry.layout();
|
|
});
|
|
return null;
|
|
} else {
|
|
fuse ? fuse.list.forEach(function (item) {
|
|
makeLi(newUl, item);
|
|
}) : null;
|
|
}
|
|
|
|
pubResult ? pubResult.setAttribute('data-display', 'none') : null;
|
|
originUl ? originUl.setAttribute('data-display', 'block') : null;
|
|
} else if (results) {
|
|
if (results && results.length) {
|
|
results.forEach(function (result) {
|
|
makeLi(newUl, result);
|
|
});
|
|
|
|
pubResult ? pubResult.setAttribute('data-display', 'block') : null;
|
|
originUl ? originUl.setAttribute('data-display', 'none') : null;
|
|
}
|
|
}
|
|
|
|
originUl.parentNode.replaceChild(newUl, originUl);
|
|
}
|
|
|
|
function renderSearchHighlightResults(searchText, results) {
|
|
var originUl = document.querySelector('.pub__ul');
|
|
var newUl = document.createElement('ul');
|
|
newUl.setAttribute('class', 'pub__ul');
|
|
|
|
if (!searchText) {
|
|
if (isFirstSection) {
|
|
originUl.innerHTML = JSON.parse(originHtmlText);
|
|
var grid = document.querySelector('.pgrid');
|
|
var msnry = new Masonry(grid, {
|
|
itemSelector: '.pgrid-item',
|
|
columnWidth: '.pgrid-sizer',
|
|
percentPosition: true,
|
|
});
|
|
imagesLoaded(grid).on('progress', function () {
|
|
msnry.layout();
|
|
});
|
|
return null;
|
|
} else {
|
|
fuse ? fuse.list.forEach(function (item) {
|
|
makeLi(newUl, item);
|
|
}) : null;
|
|
}
|
|
|
|
pubResult ? pubResult.setAttribute('data-display', 'none') : null;
|
|
originUl ? originUl.setAttribute('data-display', 'block') : null;
|
|
} else if (results) {
|
|
if (results && results.length) {
|
|
results.forEach(function (result) {
|
|
makeHighlightLi(newUl, result);
|
|
});
|
|
|
|
pubResult ? pubResult.setAttribute('data-display', 'block') : null;
|
|
originUl ? originUl.setAttribute('data-display', 'none') : null;
|
|
}
|
|
}
|
|
|
|
originUl.parentNode.replaceChild(newUl, originUl);
|
|
}
|
|
|
|
// shave
|
|
shave('.pub__summary', 150);
|
|
});
|
|
</script> |