1318 lines
49 KiB
HTML
1318 lines
49 KiB
HTML
{{ if .Site.Params.custom_js }}
|
|
{{ range .Site.Params.custom_js }}
|
|
{{ $custom_template := resources.Get . }}
|
|
{{ if $custom_template }}
|
|
{{ $custom_js := $custom_template | resources.Minify | resources.Fingerprint }}
|
|
<script defer src="{{ $custom_js.RelPermalink }}"></script>
|
|
{{ end }}
|
|
{{ end }}
|
|
{{ end }}
|
|
|
|
{{ if $.Param "enableSearch" }}
|
|
{{ $fuse := resources.Get "js/fuse.min.js" | resources.Fingerprint }}
|
|
<script defer src="{{ $fuse.RelPermalink }}"></script>
|
|
{{ end }}
|
|
|
|
{{ $enquire := resources.Get "js/enquire.min.js" | resources.Fingerprint }}
|
|
<script src="{{ $enquire.RelPermalink }}"></script>
|
|
{{ $lazysizes := resources.Get "js/lazysizes.min.js" | resources.Fingerprint }}
|
|
<script defer src="{{ $lazysizes.RelPermalink }}"></script>
|
|
{{ $getParents := resources.Get "js/helper/getParents.js" | resources.Minify | resources.Fingerprint }}
|
|
<script defer src="{{ $getParents.RelPermalink }}"></script>
|
|
{{ $fadeinout := resources.Get "js/helper/fadeinout.js" | resources.Minify | resources.Fingerprint }}
|
|
<script defer src="{{ $fadeinout.RelPermalink }}"></script>
|
|
{{ $closest := resources.Get "js/helper/closest.js" | resources.Minify }}
|
|
<script defer src="{{ $closest.RelPermalink }}"></script>
|
|
|
|
<script>
|
|
"use strict";
|
|
|
|
// ========================== poiyfill ==========================
|
|
// forEach
|
|
if (window.NodeList && !NodeList.prototype.forEach) {
|
|
NodeList.prototype.forEach = Array.prototype.forEach;
|
|
}
|
|
|
|
// includes
|
|
if (!String.prototype.includes) {
|
|
String.prototype.includes = function (search, start) {
|
|
'use strict';
|
|
|
|
if (search instanceof RegExp) {
|
|
throw TypeError('first argument must not be a RegExp');
|
|
}
|
|
if (start === undefined) { start = 0; }
|
|
return this.indexOf(search, start) !== -1;
|
|
};
|
|
}
|
|
|
|
// append
|
|
Document.prototype.append = Element.prototype.append = function append() {
|
|
this.appendChild(_mutation(arguments));
|
|
};
|
|
function _mutation(nodes) {
|
|
if (!nodes.length) {
|
|
throw new Error('DOM Exception 8');
|
|
} else if (nodes.length === 1) {
|
|
return typeof nodes[0] === 'string' ? document.createTextNode(nodes[0]) : nodes[0];
|
|
} else {
|
|
var
|
|
fragment = document.createDocumentFragment(),
|
|
length = nodes.length,
|
|
index = -1,
|
|
node;
|
|
|
|
while (++index < length) {
|
|
node = nodes[index];
|
|
|
|
fragment.appendChild(typeof node === 'string' ? document.createTextNode(node) : node);
|
|
}
|
|
|
|
return fragment;
|
|
}
|
|
}
|
|
|
|
// startsWith
|
|
if (!String.prototype.startsWith) {
|
|
String.prototype.startsWith = function (searchString, position) {
|
|
position = position || 0;
|
|
return this.indexOf(searchString, position) === position;
|
|
};
|
|
}
|
|
// ===============================================================
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
// ===================== navbar collapse ======================
|
|
var navCollapseBtn = document.querySelector('.navbar__burger');
|
|
navCollapseBtn ? navCollapseBtn.addEventListener('click', function (e) {
|
|
var navCollapse = document.querySelector('.navbarm__collapse');
|
|
|
|
if (navCollapse) {
|
|
var dataOpen = navCollapse.getAttribute('data-open');
|
|
|
|
if (dataOpen === 'true') {
|
|
navCollapse.setAttribute('data-open', 'false');
|
|
navCollapse.style.maxHeight = 0;
|
|
navCollapseBtn.classList.remove('is-active');
|
|
} else {
|
|
navCollapse.setAttribute('data-open', 'true');
|
|
navCollapse.style.maxHeight = navCollapse.scrollHeight + "px";
|
|
navCollapseBtn.classList.add('is-active');
|
|
}
|
|
}
|
|
}) : null;
|
|
// ============================================================
|
|
|
|
|
|
// ======================== markdown table ====================
|
|
var tables = document.querySelectorAll('.single__contents > table');
|
|
for (let i = 0; i < tables.length; i++) {
|
|
var table = tables[i];
|
|
var wrapper = document.createElement('div');
|
|
wrapper.className = 'table-wrapper';
|
|
table.parentElement.replaceChild(wrapper, table);
|
|
wrapper.appendChild(table);
|
|
}
|
|
// ============================================================
|
|
|
|
|
|
// ========================== foot notes ======================
|
|
var footNoteRefs = document.querySelectorAll('.footnote-ref');
|
|
var footNoteBackRefs = document.querySelectorAll('.footnote-backref');
|
|
|
|
footNoteRefs ?
|
|
footNoteRefs.forEach(function(elem, idx) {
|
|
elem.onmouseenter = function () {
|
|
if (navbar.classList.contains('scrolling')) {
|
|
navbar.classList.remove('scrolling');
|
|
}
|
|
}
|
|
|
|
elem.onmouseleave = function () {
|
|
if (!navbar.classList.contains('scrolling')) {
|
|
setTimeout(function () {
|
|
navbar.classList.add('scrolling');
|
|
}, 100);
|
|
}
|
|
}
|
|
|
|
elem.onclick = function () {
|
|
if (!navbar.classList.contains('scrolling')) {
|
|
navbar.classList.remove('navbar--show');
|
|
navbar.classList.remove('navbar--hide');
|
|
navbar.classList.add('navbar--hide');
|
|
}
|
|
}
|
|
}) : null;
|
|
|
|
footNoteBackRefs ?
|
|
footNoteBackRefs.forEach(function(elem, idx) {
|
|
elem.onmouseenter = function () {
|
|
if (navbar.classList.contains('scrolling')) {
|
|
navbar.classList.remove('scrolling');
|
|
}
|
|
}
|
|
|
|
elem.onmouseleave = function () {
|
|
if (!navbar.classList.contains('scrolling')) {
|
|
setTimeout(function() {
|
|
navbar.classList.add('scrolling');
|
|
}, 100);
|
|
}
|
|
}
|
|
|
|
elem.onclick = function () {
|
|
if (!navbar.classList.contains('scrolling')) {
|
|
navbar.classList.remove('navbar--show');
|
|
navbar.classList.remove('navbar--hide');
|
|
navbar.classList.add('navbar--hide');
|
|
}
|
|
}
|
|
}) : null;
|
|
// ============================================================
|
|
|
|
|
|
// =================== search-result desktop ==================
|
|
var summaryContainer = document.querySelector('.summary__container');
|
|
var searchResult = document.querySelector('.search-result');
|
|
var searchResultCloseBtn = document.querySelector('.search-result__close');
|
|
searchResultCloseBtn ? searchResultCloseBtn.addEventListener('click', function (e) {
|
|
searchResult.setAttribute('data-display', 'none');
|
|
summaryContainer.setAttribute('data-display', 'block');
|
|
}) : null;
|
|
// =============================================================
|
|
|
|
|
|
// ============================ tab ============================
|
|
document.querySelectorAll('.tab') ?
|
|
document.querySelectorAll('.tab').forEach(function(elem, idx) {
|
|
var containerId = elem.getAttribute('id');
|
|
var containerElem = elem;
|
|
var tabLinks = elem.querySelectorAll('.tab__link');
|
|
var tabContents = elem.querySelectorAll('.tab__content');
|
|
var ids = [];
|
|
|
|
tabLinks && tabLinks.length > 0 ?
|
|
tabLinks.forEach(function(link, index, self) {
|
|
link.onclick = function(e) {
|
|
for (var i = 0; i < self.length; i++) {
|
|
if (index === parseInt(i, 10)) {
|
|
if (!self[i].classList.contains('active')) {
|
|
self[i].classList.add('active');
|
|
tabContents[i].style.display = 'block';
|
|
}
|
|
} else {
|
|
self[i].classList.remove('active');
|
|
tabContents[i].style.display = 'none';
|
|
}
|
|
}
|
|
}
|
|
}) : null;
|
|
}) : null;
|
|
// =============================================================
|
|
|
|
|
|
// ========================== codetab ==========================
|
|
document.querySelectorAll('.codetab') ?
|
|
document.querySelectorAll('.codetab').forEach(function(elem, idx) {
|
|
var containerId = elem.getAttribute('id');
|
|
var containerElem = elem;
|
|
var codetabLinks = elem.querySelectorAll('.codetab__link');
|
|
var codetabContents = elem.querySelectorAll('.codetab__content');
|
|
var ids = [];
|
|
|
|
codetabLinks && codetabLinks.length > 0 ?
|
|
codetabLinks.forEach(function(link, index, self) {
|
|
link.onclick = function(e) {
|
|
for (var i = 0; i < self.length; i++) {
|
|
if (index === parseInt(i, 10)) {
|
|
if (!self[i].classList.contains('active')) {
|
|
self[i].classList.add('active');
|
|
codetabContents[i].style.display = 'block';
|
|
}
|
|
} else {
|
|
self[i].classList.remove('active');
|
|
codetabContents[i].style.display = 'none';
|
|
}
|
|
}
|
|
}
|
|
}) : null;
|
|
}) : null;
|
|
// =============================================================
|
|
|
|
|
|
// ========================= go to top =========================
|
|
var gttBtn = document.getElementById("gtt");
|
|
gttBtn.style.display = "none";
|
|
gttBtn.addEventListener('click', function () {
|
|
if (window.document.documentMode) {
|
|
document.documentElement.scrollTop = 0;
|
|
} else {
|
|
scrollToTop(250);
|
|
}
|
|
});
|
|
|
|
function scrollToTop(scrollDuration) {
|
|
var scrollStep = -window.scrollY / (scrollDuration / 15);
|
|
var scrollInterval = setInterval(function () {
|
|
if (window.scrollY != 0) {
|
|
window.scrollBy(0, scrollStep);
|
|
}
|
|
else clearInterval(scrollInterval);
|
|
}, 15);
|
|
}
|
|
|
|
var scrollFunction = function () {
|
|
if (document.body.scrollTop > 250 || document.documentElement.scrollTop > 250) {
|
|
gttBtn.style.display = "block";
|
|
} else {
|
|
gttBtn.style.display = "none";
|
|
}
|
|
}
|
|
// ============================================================
|
|
|
|
|
|
// ========================== expand ==========================
|
|
var expandBtn = document.querySelectorAll('.expand__button');
|
|
|
|
for (let i = 0; i < expandBtn.length; i++) {
|
|
expandBtn[i].addEventListener("click", function () {
|
|
var content = this.nextElementSibling;
|
|
if (content.style.maxHeight) {
|
|
content.style.maxHeight = null;
|
|
this.querySelector('svg').classList.add('expand-icon__right');
|
|
this.querySelector('svg').classList.remove('expand-icon__down');
|
|
} else {
|
|
content.style.maxHeight = content.scrollHeight + "px";
|
|
this.querySelector('svg').classList.remove('expand-icon__right');
|
|
this.querySelector('svg').classList.add('expand-icon__down');
|
|
}
|
|
});
|
|
}
|
|
// ============================================================
|
|
|
|
|
|
// ========================== scroll ==========================
|
|
var lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
var tocElem = document.querySelector('.toc');
|
|
var tableOfContentsElem = tocElem ? tocElem.querySelector('#TableOfContents') : null;
|
|
var toggleTocElem = document.getElementById('toggle-toc');
|
|
var singleContentsElem = document.querySelector('.single__contents');
|
|
var navbar = document.querySelector('.navbar');
|
|
var tocFlexbox = document.querySelector('.toc__flexbox');
|
|
var tocFlexboxOuter = document.querySelector('.toc__flexbox--outer');
|
|
var expandContents = document.querySelectorAll('.expand__content');
|
|
var boxContents = document.querySelectorAll('.box');
|
|
var notAllowedTitleIds = null;
|
|
|
|
{{ $tocFolding := $.Param "tocFolding" }}
|
|
var tocFolding = JSON.parse({{ $tocFolding | jsonify }});
|
|
{{ $tocLevels := ($.Param "tocLevels") }}
|
|
var tocLevels = JSON.parse({{ $tocLevels | jsonify }});
|
|
|
|
if (tocLevels) {
|
|
tocLevels = tocLevels.toString();
|
|
} else {
|
|
tocLevels = "h1, h2, h3, h4, h5, h6";
|
|
}
|
|
|
|
// tab
|
|
singleContentsElem && singleContentsElem.querySelectorAll(".tab") ?
|
|
singleContentsElem.querySelectorAll(".tab").forEach(function (elem) {
|
|
elem.querySelectorAll(tocLevels).forEach(function (element) {
|
|
notAllowedTitleIds = Array.isArray(notAllowedTitleIds) ?
|
|
notAllowedTitleIds.concat(element.getAttribute('id')) :
|
|
[element.getAttribute('id')];
|
|
});
|
|
}) : null;
|
|
|
|
// expand
|
|
expandContents ? expandContents.forEach(function(elem) {
|
|
elem.querySelectorAll(tocLevels).forEach(function (element) {
|
|
notAllowedTitleIds = Array.isArray(notAllowedTitleIds) ?
|
|
notAllowedTitleIds.concat(element.getAttribute('id')) :
|
|
[element.getAttribute('id')];
|
|
});
|
|
}) : null;
|
|
|
|
// box
|
|
boxContents ? boxContents.forEach(function(elem) {
|
|
elem.querySelectorAll(tocLevels).forEach(function (element) {
|
|
notAllowedTitleIds = Array.isArray(notAllowedTitleIds) ?
|
|
notAllowedTitleIds.concat(element.getAttribute('id')) :
|
|
[element.getAttribute('id')];
|
|
});
|
|
}) : null;
|
|
|
|
|
|
window.onscroll = function () {
|
|
scrollFunction();
|
|
|
|
var st = window.pageYOffset || document.documentElement.scrollTop;
|
|
if (st > lastScrollTop) { // scroll down
|
|
if (st < 250) {
|
|
gttBtn.style.display = "none";
|
|
} else {
|
|
gttBtn.style.display = "block";
|
|
}
|
|
|
|
if (st < 45) {
|
|
return null;
|
|
}
|
|
|
|
if (navbar.classList.contains('scrolling')) {
|
|
if (!navbar.classList.contains('navbar--hide')) {
|
|
navbar.classList.add('navbar--hide');
|
|
} else if (navbar.classList.contains('navbar--show')) {
|
|
navbar.classList.remove('navbar--show');
|
|
}
|
|
}
|
|
|
|
if (singleContentsElem) {
|
|
if (singleContentsElem.querySelectorAll(tocLevels).length > 0) {
|
|
singleContentsElem.querySelectorAll(tocLevels).forEach(function (elem) {
|
|
if (toggleTocElem && !toggleTocElem.checked) {
|
|
return null;
|
|
}
|
|
|
|
if (notAllowedTitleIds && notAllowedTitleIds.includes(elem.getAttribute('id'))) {
|
|
return null;
|
|
}
|
|
|
|
if (document.documentElement.scrollTop >= elem.offsetTop) {
|
|
if (tableOfContentsElem) {
|
|
var id = elem.getAttribute('id');
|
|
tocElem.querySelectorAll('a').forEach(function (elem) {
|
|
elem.classList.remove('active');
|
|
});
|
|
tocElem.querySelector('a[href="#' + id + '"]') ?
|
|
tocElem.querySelector('a[href="#' + id + '"]').classList.add('active') : null;
|
|
|
|
if (false === tocFolding) {
|
|
|
|
} else {
|
|
tableOfContentsElem.querySelectorAll('ul') ?
|
|
tableOfContentsElem.querySelectorAll('ul').forEach(function (rootUl) {
|
|
rootUl.querySelectorAll('li').forEach(function (liElem) {
|
|
liElem.querySelectorAll('ul').forEach(function (ulElem) {
|
|
ulElem.style.display = 'none';
|
|
});
|
|
});
|
|
}) : null;
|
|
}
|
|
|
|
var curElem = tableOfContentsElem.querySelector("[href='#" + id + "']");
|
|
if (curElem && curElem.nextElementSibling) {
|
|
curElem.nextElementSibling.style.display = 'block';
|
|
}
|
|
getParents(curElem, 'ul') ?
|
|
getParents(curElem, 'ul').forEach(function (elem) {
|
|
elem.style.display = 'block';
|
|
}) : null;
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
if (tocFlexbox) {
|
|
tocFlexbox.setAttribute('data-position', '');
|
|
if (!tocFlexbox.classList.contains('hide')) {
|
|
tocFlexbox.classList.add('hide');
|
|
}
|
|
}
|
|
if (tocFlexboxOuter) {
|
|
tocFlexboxOuter.setAttribute('data-position', '');
|
|
if (!tocFlexboxOuter.classList.contains('hide')) {
|
|
tocFlexboxOuter.classList.add('hide');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else { // scroll up
|
|
if (st < 250) {
|
|
gttBtn.style.display = "none";
|
|
}
|
|
|
|
if (navbar.classList.contains('scrolling')) {
|
|
if (navbar.classList.contains('navbar--hide')) {
|
|
navbar.classList.remove('navbar--hide');
|
|
} else if (!navbar.classList.contains('navbar--show')) {
|
|
navbar.classList.add('navbar--show');
|
|
}
|
|
}
|
|
|
|
if (singleContentsElem) {
|
|
if (singleContentsElem.querySelectorAll(tocLevels).length > 0) {
|
|
singleContentsElem.querySelectorAll(tocLevels).forEach(function (elem) {
|
|
if (toggleTocElem && !toggleTocElem.checked) {
|
|
return null;
|
|
}
|
|
|
|
if (notAllowedTitleIds && notAllowedTitleIds.includes(elem.getAttribute('id'))) {
|
|
return null;
|
|
}
|
|
|
|
if (document.documentElement.scrollTop >= elem.offsetTop) {
|
|
if (tableOfContentsElem) {
|
|
var id = elem.getAttribute('id');
|
|
tocElem.querySelectorAll('a').forEach(function (elem) {
|
|
elem.classList.remove('active');
|
|
});
|
|
tocElem.querySelector('a[href="#' + id + '"]') ?
|
|
tocElem.querySelector('a[href="#' + id + '"]').classList.add('active') : null;
|
|
|
|
if (false === tocFolding) {
|
|
|
|
} else {
|
|
tableOfContentsElem.querySelectorAll('ul') ?
|
|
tableOfContentsElem.querySelectorAll('ul').forEach(function (rootUl) {
|
|
rootUl.querySelectorAll('li').forEach(function (liElem) {
|
|
liElem.querySelectorAll('ul').forEach(function (ulElem) {
|
|
ulElem.style.display = 'none';
|
|
});
|
|
});
|
|
}) : null;
|
|
}
|
|
|
|
var curElem = tableOfContentsElem.querySelector("[href='#" + id + "']");
|
|
if (curElem && curElem.nextElementSibling) {
|
|
curElem.nextElementSibling.style.display = 'block';
|
|
}
|
|
getParents(curElem, 'ul') ?
|
|
getParents(curElem, 'ul').forEach(function (elem) {
|
|
elem.style.display = 'block';
|
|
}) : null;
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
if (tocFlexbox && !tocFlexbox.classList.contains('hide')) {
|
|
tocFlexbox.classList.add('hide');
|
|
}
|
|
if (tocFlexboxOuter && !tocFlexboxOuter.classList.contains('hide')) {
|
|
tocFlexboxOuter.classList.add('hide');
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (tableOfContentsElem && document.documentElement.scrollTop < 250) {
|
|
if (false === tocFolding) {
|
|
|
|
} else {
|
|
tableOfContentsElem.querySelector('ul') ?
|
|
tableOfContentsElem.querySelector('ul').querySelectorAll('li').forEach(function (liElem) {
|
|
liElem.querySelectorAll('ul').forEach(function (ulElem) {
|
|
ulElem.style.display = 'none';
|
|
});
|
|
}) : null;
|
|
}
|
|
}
|
|
}
|
|
lastScrollTop = st <= 0 ? 0 : st;
|
|
};
|
|
// ============================================================
|
|
|
|
|
|
// ======================= theme change =======================
|
|
var localTheme = localStorage.getItem('theme');
|
|
var rootEleme = document.getElementById('root');
|
|
var selectThemeElem = document.querySelectorAll('.select-theme');
|
|
var selectThemeItemElem = document.querySelectorAll('.select-theme__item');
|
|
|
|
{{ $skinDarkCode := (i18n "skin-dark") }}
|
|
var skinDarkCode = JSON.parse({{ $skinDarkCode | jsonify }});
|
|
{{ $skinLightCode := (i18n "skin-light") }}
|
|
var skinLightCode = JSON.parse({{ $skinLightCode | jsonify }});
|
|
{{ $skinHackerCode := (i18n "skin-hacker") }}
|
|
var skinHackerCode = JSON.parse({{ $skinHackerCode | jsonify }});
|
|
{{ $skinSolarizedCode := (i18n "skin-solarized") }}
|
|
var skinSolarizedCode = JSON.parse({{ $skinSolarizedCode | jsonify }});
|
|
{{ $skinKimbieCode := (i18n "skin-kimbie") }}
|
|
var skinKimbieCode = JSON.parse({{ $skinKimbieCode | jsonify }});
|
|
|
|
var setMetaColor = function(themeColor) {
|
|
var metaMsapplicationTileColor = document.getElementsByName('msapplication-TileColor')[0];
|
|
var metaThemeColor = document.getElementsByName('theme-color')[0];
|
|
var metaMsapplicationNavbuttonColor = document.getElementsByName('msapplication-navbutton-color')[0];
|
|
var metaAppleMobileWebAappStatusBarStyle = document.getElementsByName('apple-mobile-web-app-status-bar-style')[0];
|
|
|
|
if (themeColor.includes('dark')) {
|
|
metaMsapplicationTileColor.setAttribute('content', '#fcfcfa');
|
|
metaThemeColor.setAttribute('content', '#403E41');
|
|
metaMsapplicationNavbuttonColor.setAttribute('content', '#403E41');
|
|
metaAppleMobileWebAappStatusBarStyle.setAttribute('content', '#403E41');
|
|
} else if (themeColor.includes('light')) {
|
|
metaMsapplicationTileColor.setAttribute('content', '#555');
|
|
metaThemeColor.setAttribute('content', '#eee');
|
|
metaMsapplicationNavbuttonColor.setAttribute('content', '#eee');
|
|
metaAppleMobileWebAappStatusBarStyle.setAttribute('content', '#eee');
|
|
} else if (themeColor.includes('hacker')) {
|
|
metaMsapplicationTileColor.setAttribute('content', '#e3cd26');
|
|
metaThemeColor.setAttribute('content', '#252526');
|
|
metaMsapplicationNavbuttonColor.setAttribute('content', '#252526');
|
|
metaAppleMobileWebAappStatusBarStyle.setAttribute('content', '#252526');
|
|
} else if (themeColor.includes('solarized')) {
|
|
metaMsapplicationTileColor.setAttribute('content', '#d3af86');
|
|
metaThemeColor.setAttribute('content', '#51412c');
|
|
metaMsapplicationNavbuttonColor.setAttribute('content', '#51412c');
|
|
metaAppleMobileWebAappStatusBarStyle.setAttribute('content', '#51412c');
|
|
} else if (themeColor.includes('kimbie')) {
|
|
metaMsapplicationTileColor.setAttribute('content', '#586e75');
|
|
metaThemeColor.setAttribute('content', '#eee8d5');
|
|
metaMsapplicationNavbuttonColor.setAttribute('content', '#eee8d5');
|
|
metaAppleMobileWebAappStatusBarStyle.setAttribute('content', '#eee8d5');
|
|
}
|
|
}
|
|
|
|
var parseSkinCode = function(themeText) {
|
|
if (themeText === skinDarkCode) {
|
|
return 'dark';
|
|
} else if (themeText === skinLightCode) {
|
|
return 'light';
|
|
} else if (themeText === skinHackerCode) {
|
|
return 'hacker';
|
|
} else if (themeText === skinSolarizedCode) {
|
|
return 'solarized';
|
|
} else if (themeText === skinKimbieCode) {
|
|
return 'kimbie';
|
|
}
|
|
}
|
|
|
|
if (localTheme) {
|
|
selectThemeItemElem ?
|
|
selectThemeItemElem.forEach(function (elem) {
|
|
if (elem.text.trim() === localTheme) {
|
|
elem.classList.add('is-active');
|
|
} else {
|
|
elem.classList.remove('is-active');
|
|
}
|
|
}) : null;
|
|
|
|
setMetaColor(localTheme);
|
|
} else {
|
|
setMetaColor(rootEleme.className);
|
|
}
|
|
|
|
selectThemeItemElem ?
|
|
selectThemeItemElem.forEach(function (v, i) {
|
|
v.addEventListener('click', function (e) {
|
|
var selectedThemeVariant = parseSkinCode(e.target.text.trim());
|
|
localStorage.setItem('theme', selectedThemeVariant);
|
|
setMetaColor(selectedThemeVariant);
|
|
|
|
rootEleme.removeAttribute('class');
|
|
rootEleme.classList.add('theme__' + selectedThemeVariant);
|
|
selectThemeElem.forEach(function(rootElem) {
|
|
rootElem.querySelectorAll('a').forEach(function (elem) {
|
|
if (elem.classList) {
|
|
if (elem.text.trim() === selectedThemeVariant) {
|
|
if (!elem.classList.contains('is-active')) {
|
|
elem.classList.add('is-active');
|
|
}
|
|
} else {
|
|
if (elem.classList.contains('is-active')) {
|
|
elem.classList.remove('is-active');
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
if (window.mermaid) {
|
|
if (selectedThemeVariant === "dark" || selectedThemeVariant === "hacker") {
|
|
mermaid.initialize({ theme: 'dark' });
|
|
location.reload();
|
|
} else {
|
|
mermaid.initialize({ theme: 'default' });
|
|
location.reload();
|
|
}
|
|
}
|
|
|
|
var utterances = document.getElementById('utterances');
|
|
if (utterances) {
|
|
utterances.querySelector('iframe').contentWindow.postMessage({
|
|
type: 'set-theme',
|
|
theme: selectedThemeVariant === "dark" || selectedThemeVariant === "hacker" ? 'photon-dark' : selectedThemeVariant === 'kimbie' ? 'github-dark-orange' : 'github-light',
|
|
}, 'https://utteranc.es');
|
|
}
|
|
|
|
var twitterCards = document.querySelectorAll('.twitter-timeline');
|
|
if (twitterCards) {
|
|
window.postMessage({
|
|
type: 'set-twitter-theme',
|
|
theme: selectedThemeVariant === 'light' || selectedThemeVariant === 'solarized' ? 'light' : 'dark',
|
|
});
|
|
}
|
|
});
|
|
}) : null;
|
|
// ============================================================
|
|
|
|
|
|
// ========================== search ==========================
|
|
{{ $baseurl := $.Site.BaseURL }}
|
|
var baseurl = JSON.parse({{ $baseurl | jsonify }});
|
|
{{ $permalink := .Permalink }}
|
|
var permalink = JSON.parse({{ $permalink | jsonify }});
|
|
{{ $langprefix := $.Site.LanguagePrefix }}
|
|
var langprefix = JSON.parse({{ $langprefix | jsonify }});
|
|
var searchResults = null;
|
|
var searchMenu = null;
|
|
var searchText = null;
|
|
|
|
{{ $enableSearch := ($.Param "enableSearch") }}
|
|
var enableSearch = JSON.parse({{ $enableSearch | jsonify }});
|
|
{{ $enableSearchHighlight := ($.Param "enableSearchHighlight") }}
|
|
var enableSearchHighlight = JSON.parse({{ $enableSearchHighlight | jsonify }});
|
|
{{ $searchResultPosition := ($.Param "searchResultPosition") }}
|
|
var searchResultPosition = JSON.parse({{ $searchResultPosition | jsonify }});
|
|
{{ $sectionType := .Type }}
|
|
var sectionType = JSON.parse({{ $sectionType | jsonify }});
|
|
{{ $kind := .Kind }}
|
|
var kind = JSON.parse({{ $kind | jsonify }});
|
|
|
|
var fuse = null;
|
|
|
|
if (enableSearch) {
|
|
(function initFuse() {
|
|
var xhr = new XMLHttpRequest();
|
|
if (sectionType === "publication" && kind !== "page") {
|
|
xhr.open('GET', permalink + "index.json");
|
|
} else {
|
|
xhr.open('GET', baseurl + langprefix + "/index.json");
|
|
}
|
|
|
|
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
|
|
xhr.onload = function () {
|
|
if (xhr.status === 200) {
|
|
fuse = new Fuse(JSON.parse(xhr.response.toString('utf-8')), {
|
|
keys: sectionType.includes('publication') ? ['title', 'abstract'] : ['title', 'description', 'content'],
|
|
includeMatches: enableSearchHighlight,
|
|
shouldSort: true, // default: true
|
|
threshold: 0.4, // default: 0.6 (0.0 requires a perfect match)
|
|
location: 0, // default: 0
|
|
distance: 100, // default: 100
|
|
maxPatternLength: 32,
|
|
minMatchCharLength: 1,
|
|
isCaseSensitive: false, // defualt: false
|
|
findAllMatches: false, // default: false
|
|
useExtendedSearch: false, // default: false
|
|
});
|
|
window.fuse = fuse;
|
|
}
|
|
else {
|
|
console.error('[' + xhr.status + ']Error:', xhr.statusText);
|
|
}
|
|
};
|
|
xhr.send();
|
|
})();
|
|
}
|
|
|
|
function makeLi(ulElem, obj) {
|
|
var li = document.createElement('li');
|
|
li.className = 'search-result__item';
|
|
|
|
var a = document.createElement('a');
|
|
a.innerHTML = obj.item.title;
|
|
a.setAttribute('class', 'search-result__item--title');
|
|
a.setAttribute('href', obj.item.permalink);
|
|
|
|
var descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'search-result__item--desc');
|
|
if (obj.item.description) {
|
|
descDiv.innerHTML = obj.item.description;
|
|
} else if (obj.item.content) {
|
|
descDiv.innerHTML = obj.item.content.substring(0, 225);
|
|
}
|
|
|
|
li.appendChild(a);
|
|
li.appendChild(descDiv);
|
|
ulElem.appendChild(li);
|
|
}
|
|
|
|
function makeHighlightLi(ulElem, obj) {
|
|
var li = document.createElement('li');
|
|
li.className = 'search-result__item';
|
|
var descDiv = null;
|
|
|
|
var a = document.createElement('a');
|
|
a.innerHTML = obj.item.title;
|
|
a.setAttribute('class', 'search-result__item--title');
|
|
a.setAttribute('href', obj.item.uri);
|
|
|
|
if (obj.matches && obj.matches.length) {
|
|
for (var i = 0; i < obj.matches.length; i++) {
|
|
if ('title' === obj.matches[i].key) {
|
|
a = document.createElement('a');
|
|
a.innerHTML = generateHighlightedText(obj.matches[i].value, obj.matches[i].indices);
|
|
a.setAttribute('class', 'search-result__item--title');
|
|
a.setAttribute('href', obj.item.uri);
|
|
}
|
|
|
|
if ('description' === obj.matches[i].key) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'search-result__item--desc');
|
|
descDiv.innerHTML = generateHighlightedText(obj.item.description, obj.matches[i].indices);
|
|
} else if ('content' === obj.matches[i].key) {
|
|
if (!descDiv) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'search-result__item--desc');
|
|
descDiv.innerHTML = generateHighlightedText(obj.item.content.substring(0, 150), obj.matches[i].indices);
|
|
}
|
|
} else {
|
|
if (obj.item.description) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'search-result__item--desc');
|
|
descDiv.innerHTML = obj.item.description;
|
|
} else {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'search-result__item--desc');
|
|
descDiv.innerHTML = obj.item.content.substring(0, 150);
|
|
}
|
|
}
|
|
}
|
|
|
|
li.appendChild(a);
|
|
if (descDiv) {
|
|
li.appendChild(descDiv);
|
|
}
|
|
if (li) {
|
|
ulElem.appendChild(li);
|
|
}
|
|
}
|
|
}
|
|
|
|
function renderSearchResultsSide(searchText, results) {
|
|
searchResults = document.getElementById('search-results');
|
|
searchMenu = document.getElementById('search-menu');
|
|
searchResults.setAttribute('class', 'dropdown is-active');
|
|
|
|
var ul = document.createElement('ul');
|
|
ul.setAttribute('class', 'dropdown-content search-content');
|
|
|
|
if (results.length) {
|
|
results.forEach(function (result) {
|
|
var li = document.createElement('li');
|
|
var a = document.createElement('a');
|
|
a.setAttribute('href', result.uri);
|
|
a.setAttribute('class', 'dropdown-item');
|
|
a.appendChild(li);
|
|
|
|
var titleDiv = document.createElement('div');
|
|
titleDiv.innerHTML = result.title;
|
|
titleDiv.setAttribute('class', 'menu-item__title');
|
|
|
|
var descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'menu-item__desc');
|
|
if (result.description) {
|
|
descDiv.innerHTML = result.description;
|
|
} else if (result.content) {
|
|
descDiv.innerHTML = result.content.substring(0, 150);
|
|
}
|
|
|
|
li.appendChild(titleDiv);
|
|
li.appendChild(descDiv);
|
|
ul.appendChild(a);
|
|
});
|
|
} else {
|
|
var li = document.createElement('li');
|
|
li.setAttribute('class', 'dropdown-item');
|
|
li.innerText = 'No results found';
|
|
ul.appendChild(li);
|
|
}
|
|
|
|
while (searchMenu.hasChildNodes()) {
|
|
searchMenu.removeChild(
|
|
searchMenu.lastChild
|
|
);
|
|
}
|
|
|
|
searchMenu.appendChild(ul);
|
|
}
|
|
|
|
function renderSearchHighlightResultsSide(searchText, results) {
|
|
searchResults = document.getElementById('search-results');
|
|
searchMenu = document.getElementById('search-menu');
|
|
searchResults.setAttribute('class', 'dropdown is-active');
|
|
|
|
var ul = document.createElement('ul');
|
|
ul.setAttribute('class', 'dropdown-content search-content');
|
|
|
|
if (results.length) {
|
|
results.forEach(function (result) {
|
|
var li = document.createElement('li');
|
|
var a = document.createElement('a');
|
|
var descDiv = null;
|
|
|
|
a.setAttribute('href', result.item.uri);
|
|
a.setAttribute('class', 'dropdown-item');
|
|
a.appendChild(li);
|
|
|
|
var titleDiv = document.createElement('div');
|
|
titleDiv.innerHTML = result.item.title;
|
|
titleDiv.setAttribute('class', 'menu-item__title');
|
|
|
|
if (result.matches && result.matches.length) {
|
|
for (var i = 0; i < result.matches.length; i++) {
|
|
if ('title' === result.matches[i].key) {
|
|
titleDiv.innerHTML = generateHighlightedText(result.matches[i].value, result.matches[i].indices);
|
|
}
|
|
|
|
if ('description' === result.matches[i].key) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'menu-item__desc');
|
|
descDiv.innerHTML = generateHighlightedText(result.item.description, result.matches[i].indices);
|
|
} else if ('content' === result.matches[i].key) {
|
|
if (!descDiv) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'menu-item__desc');
|
|
descDiv.innerHTML = generateHighlightedText(result.item.content.substring(0, 150), result.matches[i].indices);
|
|
}
|
|
} else {
|
|
if (result.item.description) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'menu-item__desc');
|
|
descDiv.innerHTML = result.item.description;
|
|
} else {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'menu-item__desc');
|
|
descDiv.innerHTML = result.item.content.substring(0, 150);
|
|
}
|
|
}
|
|
}
|
|
|
|
li.appendChild(titleDiv);
|
|
if (descDiv) {
|
|
li.appendChild(descDiv);
|
|
}
|
|
ul.appendChild(a);
|
|
}
|
|
});
|
|
} else {
|
|
var li = document.createElement('li');
|
|
li.setAttribute('class', 'dropdown-item');
|
|
li.innerText = 'No results found';
|
|
ul.appendChild(li);
|
|
}
|
|
|
|
while (searchMenu.hasChildNodes()) {
|
|
searchMenu.removeChild(
|
|
searchMenu.lastChild
|
|
);
|
|
}
|
|
searchMenu.appendChild(ul);
|
|
}
|
|
|
|
function renderSearchResultsMobile(searchText, results) {
|
|
searchResults = document.getElementById('search-mobile-results');
|
|
|
|
var content = document.createElement('div');
|
|
content.setAttribute('class', 'mobile-search__content');
|
|
|
|
if (results.length > 0) {
|
|
results.forEach(function (result) {
|
|
var item = document.createElement('a');
|
|
item.setAttribute('href', result.uri);
|
|
item.innerHTML = '<div class="mobile-search__item"><div class="mobile-search__item--title">📄 ' + result.title + '</div><div class="mobile-search__item--desc">' + (result.description ? result.description : result.content) + '</div></div>';
|
|
content.appendChild(item);
|
|
});
|
|
} else {
|
|
var item = document.createElement('span');
|
|
content.appendChild(item);
|
|
}
|
|
|
|
let wrap = document.getElementById('search-mobile-results');
|
|
while (wrap.firstChild) {
|
|
wrap.removeChild(wrap.firstChild)
|
|
}
|
|
searchResults.appendChild(content);
|
|
}
|
|
|
|
function renderSearchHighlightResultsMobile(searchText, results) {
|
|
searchResults = document.getElementById('search-mobile-results');
|
|
|
|
var ul = document.createElement('div');
|
|
ul.setAttribute('class', 'mobile-search__content');
|
|
|
|
if (results.length) {
|
|
results.forEach(function (result) {
|
|
var li = document.createElement('li');
|
|
var a = document.createElement('a');
|
|
var descDiv = null;
|
|
|
|
a.setAttribute('href', result.item.uri);
|
|
a.appendChild(li);
|
|
li.setAttribute('class', 'mobile-search__item');
|
|
|
|
var titleDiv = document.createElement('div');
|
|
titleDiv.innerHTML = result.item.title;
|
|
titleDiv.setAttribute('class', 'mobile-search__item--title');
|
|
|
|
if (result.matches && result.matches.length) {
|
|
for (var i = 0; i < result.matches.length; i++) {
|
|
if ('title' === result.matches[i].key) {
|
|
titleDiv.innerHTML = generateHighlightedText(result.matches[i].value, result.matches[i].indices);
|
|
}
|
|
|
|
if ('description' === result.matches[i].key) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'mobile-search__item--desc');
|
|
descDiv.innerHTML = generateHighlightedText(result.item.description, result.matches[i].indices);
|
|
} else if ('content' === result.matches[i].key) {
|
|
if (!descDiv) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'mobile-search__item--desc');
|
|
descDiv.innerHTML = generateHighlightedText(result.item.content.substring(0, 150), result.matches[i].indices);
|
|
}
|
|
} else {
|
|
if (result.item.description) {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'mobile-search__item--desc');
|
|
descDiv.innerHTML = result.item.description;
|
|
} else {
|
|
descDiv = document.createElement('div');
|
|
descDiv.setAttribute('class', 'mobile-search__item--desc');
|
|
descDiv.innerHTML = result.item.content.substring(0, 150);
|
|
}
|
|
}
|
|
}
|
|
|
|
li.appendChild(titleDiv);
|
|
if (descDiv) {
|
|
li.appendChild(descDiv);
|
|
}
|
|
ul.appendChild(a);
|
|
}
|
|
});
|
|
} else {
|
|
var item = document.createElement('span');
|
|
ul.appendChild(item);
|
|
}
|
|
|
|
let wrap = document.getElementById('search-mobile-results');
|
|
while (wrap.firstChild) {
|
|
wrap.removeChild(wrap.firstChild)
|
|
}
|
|
searchResults.appendChild(ul);
|
|
}
|
|
|
|
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;
|
|
};
|
|
|
|
var searchElem = document.getElementById('search');
|
|
var searchMobile = document.getElementById('search-mobile');
|
|
var searchResultsContainer = document.getElementById('search-results');
|
|
|
|
searchElem ?
|
|
searchElem.addEventListener('input', function(e) {
|
|
if (!e.target.value | window.innerWidth < 770) {
|
|
searchResultsContainer ? searchResultsContainer.setAttribute('class', 'dropdown') : null;
|
|
searchResult ? searchResult.setAttribute('data-display', 'none') : null;
|
|
summaryContainer ? summaryContainer.setAttribute('data-display', 'block') : null;
|
|
return null;
|
|
}
|
|
|
|
searchText = e.target.value;
|
|
var results = fuse.search(e.target.value);
|
|
|
|
if (searchResultPosition === "main") {
|
|
if (enableSearchHighlight) {
|
|
renderSearchHighlightResultsMain(searchText, results);
|
|
} else {
|
|
renderSearchResultsMain(searchText, results);
|
|
}
|
|
} else {
|
|
if (enableSearchHighlight) {
|
|
renderSearchHighlightResultsSide(searchText, results);
|
|
} else {
|
|
renderSearchResultsSide(searchText, results);
|
|
}
|
|
|
|
var dropdownItems = searchResultsContainer.querySelectorAll('.dropdown-item');
|
|
dropdownItems ? dropdownItems.forEach(function(item) {
|
|
item.addEventListener('mousedown', function(e) {
|
|
e.target.click();
|
|
});
|
|
}) : null;
|
|
}
|
|
}) : null;
|
|
|
|
searchElem ?
|
|
searchElem.addEventListener('blur', function() {
|
|
if (window.innerWidth < 770) {
|
|
return null;
|
|
}
|
|
searchResultsContainer ? searchResultsContainer.setAttribute('class', 'dropdown') : null;
|
|
}) : null;
|
|
|
|
searchElem ?
|
|
searchElem.addEventListener('click', function(e) {
|
|
if (window.innerWidth < 770) {
|
|
return null;
|
|
}
|
|
if (!e.target.value) {
|
|
searchResultsContainer ? searchResultsContainer.setAttribute('class', 'dropdown') : null;
|
|
return null;
|
|
}
|
|
|
|
searchText = e.target.value;
|
|
var results = fuse.search(e.target.value);
|
|
|
|
if (searchResultPosition === "main") {
|
|
if (enableSearchHighlight) {
|
|
renderSearchHighlightResultsMain(searchText, results);
|
|
} else {
|
|
renderSearchResultsMain(searchText, results);
|
|
}
|
|
} else{
|
|
if (enableSearchHighlight) {
|
|
renderSearchHighlightResultsSide(searchText, results);
|
|
} else {
|
|
renderSearchResultsSide(searchText, results);
|
|
}
|
|
|
|
var dropdownItems = searchResultsContainer.querySelectorAll('.dropdown-item');
|
|
dropdownItems ? dropdownItems.forEach(function (item) {
|
|
item.addEventListener('mousedown', function (e) {
|
|
e.target.click();
|
|
});
|
|
}) : null;
|
|
}
|
|
}) : null;
|
|
|
|
var searchMenuElem = document.getElementById("search-menu");
|
|
var activeItem = document.querySelector('#search-menu .dropdown-item.is-active');
|
|
var activeIndex = null;
|
|
var items = null;
|
|
var searchContainerMaxHeight = 350;
|
|
|
|
searchElem ?
|
|
searchElem.addEventListener('keydown', function(e) {
|
|
if (window.innerWidth < 770) {
|
|
return null;
|
|
}
|
|
|
|
if (e.key === 'Escape') {
|
|
searchResult ? searchResult.setAttribute('data-display', 'none') : null;
|
|
summaryContainer ? summaryContainer.setAttribute('data-display', 'block') : null;
|
|
}
|
|
|
|
var items = document.querySelectorAll('#search-menu .dropdown-item');
|
|
var keyCode = e.which || e.keyCode;
|
|
|
|
if (!items || !items.length) {
|
|
return null;
|
|
}
|
|
|
|
if (e.key === 'ArrowDown' || keyCode === 40) {
|
|
if (activeIndex === null) {
|
|
activeIndex = 0;
|
|
items[activeIndex].classList.remove('is-active');
|
|
} else {
|
|
items[activeIndex].classList.remove('is-active');
|
|
activeIndex = activeIndex === items.length - 1 ? 0 : activeIndex + 1;
|
|
}
|
|
items[activeIndex].classList.add('is-active');
|
|
|
|
let overflowedPixel = items[activeIndex].offsetTop + items[activeIndex].clientHeight - searchContainerMaxHeight;
|
|
if (overflowedPixel > 0) {
|
|
document.querySelector(".search-content").scrollTop += items[activeIndex].getBoundingClientRect().height;
|
|
} else if (activeIndex === 0) {
|
|
document.querySelector(".search-content").scrollTop = 0;
|
|
}
|
|
} else if (e.key === 'ArrowUp' || keyCode === 38) {
|
|
if (activeIndex === null) {
|
|
activeIndex = items.length - 1;
|
|
items[activeIndex].classList.remove('is-active');
|
|
} else {
|
|
items[activeIndex].classList.remove('is-active');
|
|
activeIndex = activeIndex === 0 ? items.length - 1 : activeIndex - 1;
|
|
}
|
|
items[activeIndex].classList.add('is-active');
|
|
|
|
let overflowedPixel = items[activeIndex].offsetTop + items[activeIndex].clientHeight - searchContainerMaxHeight;
|
|
if (overflowedPixel < 0) {
|
|
document.querySelector(".search-content").scrollTop -= items[activeIndex].getBoundingClientRect().height;
|
|
} else {
|
|
document.querySelector(".search-content").scrollTop = overflowedPixel + items[activeIndex].getBoundingClientRect().height;
|
|
}
|
|
} else if (e.key === 'Enter' || keyCode === 13) {
|
|
if (items[activeIndex] && items[activeIndex].getAttribute('href')) {
|
|
location.href = items[activeIndex].getAttribute('href');
|
|
}
|
|
} else if (e.key === 'Escape' || keyCode === 27) {
|
|
e.target.value = null;
|
|
if (searchResults) {
|
|
searchResults.classList.remove('is-active');
|
|
}
|
|
}
|
|
}) : null;
|
|
|
|
searchMobile ?
|
|
searchMobile.addEventListener('input', function(e) {
|
|
if (!e.target.value) {
|
|
let wrap = document.getElementById('search-mobile-results');
|
|
while (wrap.firstChild) {
|
|
wrap.removeChild(wrap.firstChild);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
searchText = e.target.value;
|
|
var results = fuse.search(e.target.value);
|
|
renderSearchResultsMobile(searchText, results);
|
|
if (enableSearchHighlight) {
|
|
renderSearchHighlightResultsMobile(searchText, results);
|
|
} else {
|
|
renderSearchResultsMobile(searchText, results);
|
|
}
|
|
}) : null;
|
|
// ============================================================
|
|
|
|
|
|
// ====================== mobile search =======================
|
|
var mobileSearchInputElem = document.querySelector('#search-mobile');
|
|
var mobileSearchClassElem = document.querySelector('.mobile-search');
|
|
var mobileSearchBtnElems = document.querySelectorAll('.navbar-search');
|
|
var mobileSearchCloseBtnElem = document.querySelector('#search-mobile-close');
|
|
var mobileSearchContainer = document.querySelector('#search-mobile-container');
|
|
var mobileSearchResultsElem = document.querySelector('#search-mobile-results');
|
|
var htmlElem = document.querySelector('html');
|
|
|
|
if (mobileSearchClassElem) {
|
|
mobileSearchClassElem.style.display = 'none';
|
|
}
|
|
|
|
mobileSearchBtnElems ?
|
|
mobileSearchBtnElems.forEach(function (elem, idx) {
|
|
elem.addEventListener('click', function () {
|
|
if (mobileSearchContainer) {
|
|
mobileSearchContainer.style.display = 'block';
|
|
}
|
|
|
|
if (mobileSearchInputElem) {
|
|
mobileSearchInputElem.focus();
|
|
}
|
|
|
|
if (htmlElem) {
|
|
htmlElem.style.overflowY = 'hidden';
|
|
}
|
|
});
|
|
}) : null;
|
|
|
|
mobileSearchCloseBtnElem ?
|
|
mobileSearchCloseBtnElem.addEventListener('click', function() {
|
|
if (mobileSearchContainer) {
|
|
mobileSearchContainer.style.display = 'none';
|
|
}
|
|
|
|
if (mobileSearchInputElem) {
|
|
mobileSearchInputElem.value = '';
|
|
}
|
|
|
|
if (mobileSearchResultsElem) {
|
|
while (mobileSearchResultsElem.firstChild) {
|
|
mobileSearchResultsElem.removeChild(mobileSearchResultsElem.firstChild);
|
|
}
|
|
}
|
|
|
|
if (htmlElem) {
|
|
htmlElem.style.overflowY = 'visible';
|
|
}
|
|
}) : null;
|
|
|
|
mobileSearchInputElem ?
|
|
mobileSearchInputElem.addEventListener('keydown', function(e) {
|
|
var keyCode = e.which || e.keyCode;
|
|
if (e.key === 'Escape' || keyCode === 27) {
|
|
if (mobileSearchContainer) {
|
|
mobileSearchContainer.style.display = 'none';
|
|
}
|
|
|
|
if (mobileSearchInputElem) {
|
|
mobileSearchInputElem.value = '';
|
|
}
|
|
|
|
if (mobileSearchResultsElem) {
|
|
while (mobileSearchResultsElem.firstChild) {
|
|
mobileSearchResultsElem.removeChild(mobileSearchResultsElem.firstChild);
|
|
}
|
|
}
|
|
if (htmlElem) {
|
|
htmlElem.style.overflowY = 'visible';
|
|
}
|
|
}
|
|
}) : null;
|
|
// ============================================================
|
|
|
|
|
|
// =================== search-result desktop ==================
|
|
function renderSearchResultsMain(searchText, results) {
|
|
var searchBody = document.querySelector('.search-result__body');
|
|
var originUl = searchBody.querySelector('ul');
|
|
var ul = document.createElement('ul');
|
|
|
|
if (!searchText) {
|
|
searchResult ? searchResult.setAttribute('data-display', 'none') : null;
|
|
summaryContainer ? summaryContainer.setAttribute('data-display', 'block') : null;
|
|
} else if (results) {
|
|
if (results && results.length) {
|
|
results.forEach(function (result) {
|
|
makeLi(ul, result);
|
|
});
|
|
|
|
searchResult ? searchResult.setAttribute('data-display', 'block') : null;
|
|
summaryContainer ? summaryContainer.setAttribute('data-display', 'none') : null;
|
|
}
|
|
}
|
|
|
|
originUl.parentNode.replaceChild(ul, originUl);
|
|
}
|
|
|
|
function renderSearchHighlightResultsMain(searchText, results) {
|
|
var searchBody = document.querySelector('.search-result__body');
|
|
var originUl = searchBody.querySelector('ul');
|
|
var ul = document.createElement('ul');
|
|
|
|
if (!searchText) {
|
|
searchResult ? searchResult.setAttribute('data-display', 'none') : null;
|
|
summaryContainer ? summaryContainer.setAttribute('data-display', 'block') : null;
|
|
} else if (results) {
|
|
if (results && results.length) {
|
|
results.forEach(function (result) {
|
|
makeHighlightLi(ul, result);
|
|
});
|
|
|
|
searchResult ? searchResult.setAttribute('data-display', 'block') : null;
|
|
summaryContainer ? summaryContainer.setAttribute('data-display', 'none') : null;
|
|
}
|
|
}
|
|
|
|
originUl.parentNode.replaceChild(ul, originUl);
|
|
}
|
|
// ============================================================
|
|
});
|
|
</script> |