197 lines
5.8 KiB
JavaScript
197 lines
5.8 KiB
JavaScript
$(document).ready(function() {
|
|
// theme change
|
|
var localTheme = localStorage.getItem('theme');
|
|
if (localTheme) {
|
|
$('.select-theme__item').each(function () {
|
|
$(this).removeClass('is-active');
|
|
});
|
|
$(`.select-theme a:contains("${localTheme}")`).addClass('is-active');
|
|
}
|
|
|
|
$('.select-theme__item').click(function (e) {
|
|
var selectedThemeVariant = $(e.target).text().trim();
|
|
localStorage.setItem('theme', selectedThemeVariant);
|
|
|
|
if ($(this).attr('class').trim() === selectedThemeVariant) {
|
|
return null;
|
|
}
|
|
|
|
$('#root').removeAttr('class').addClass(`theme__${selectedThemeVariant}`);
|
|
var nodes = $('.select-theme').children('.dropdown-item');
|
|
|
|
nodes.each(function () {
|
|
if ($(this).text().trim() === selectedThemeVariant) {
|
|
if (!$(this).hasClass('is-active')) {
|
|
$(this).addClass('is-active');
|
|
}
|
|
} else {
|
|
if ($(this).hasClass('is-active')) {
|
|
$(this).removeClass('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.querySelector('iframe');
|
|
if (utterances) {
|
|
utterances.contentWindow.postMessage({
|
|
type: 'set-theme',
|
|
theme: selectedThemeVariant === "dark" || selectedThemeVariant === "hacker" ? 'photon-dark' : 'github-light',
|
|
}, 'https://utteranc.es');
|
|
}
|
|
});
|
|
|
|
// go to top
|
|
$('.gtt').click(function () {
|
|
$("html, body").animate({ scrollTop: 0 }, 250);
|
|
});
|
|
|
|
if ($(window).scrollTop() === 0) {
|
|
$('.gtt').hide(200);
|
|
} else if ($(this).scrollTop() > $(document).height() - $(window).height() - 250) { // near the bottom
|
|
$('.gtt').show(200);
|
|
} else {
|
|
$('.gtt').hide(200);
|
|
}
|
|
|
|
// scroll
|
|
var position = $(window).scrollTop();
|
|
$(window).scroll(function () {
|
|
var navbar = $('.navbar');
|
|
|
|
var scroll = $(window).scrollTop();
|
|
if (scroll > position) { // scroll down
|
|
if (scroll < 250) {
|
|
$('.gtt').hide(200);
|
|
} else {
|
|
$('.gtt').show(200);
|
|
}
|
|
|
|
if (scroll < 45) {
|
|
return null;
|
|
}
|
|
|
|
if (!navbar.hasClass('navbar--hide')) {
|
|
navbar.addClass('navbar--hide');
|
|
} else if (navbar.hasClass('navbar--show')) {
|
|
navbar.removeClass('navbar--show');
|
|
}
|
|
|
|
$(".single__contents :header").each(function () {
|
|
if (!$("#toggle-toc").is(":checked")) {
|
|
return null;
|
|
}
|
|
|
|
if ($(window).scrollTop() >= $(this).position().top) {
|
|
var id = $(this).attr('id');
|
|
$('.toc a').removeClass('active');
|
|
$('.toc a[href="#' + id + '"]').addClass('active');
|
|
|
|
$('#toc > li').each(function () {
|
|
$(this).find('ul').css('display', 'none');
|
|
});
|
|
$(`#toc [href="#${id}"]`).next().css('display', 'block');
|
|
$(`#toc [href="#${id}"]`).parents('ul').css('display', 'block');
|
|
}
|
|
});
|
|
} else { // scroll up
|
|
if (scroll < 250) {
|
|
$('.gtt').hide(200);
|
|
}
|
|
|
|
if (navbar.hasClass('navbar--hide')) {
|
|
navbar.removeClass('navbar--hide');
|
|
} else if (!navbar.hasClass('navbar--show')) {
|
|
navbar.addClass('navbar--show');
|
|
}
|
|
|
|
$(".single__contents :header").each(function () {
|
|
if (!$("#toggle-toc").is(":checked")) {
|
|
return null;
|
|
}
|
|
|
|
if ($(window).scrollTop() >= $(this).position().top) {
|
|
var id = $(this).attr('id');
|
|
$('.toc a').removeClass('active');
|
|
$('.toc a[href="#' + id + '"]').addClass('active');
|
|
|
|
$('#toc > li').each(function () {
|
|
$(this).find('ul').css('display', 'none');
|
|
});
|
|
$(`#toc [href="#${id}"]`).next().css('display', 'block');
|
|
$(`#toc [href="#${id}"]`).parents('ul').css('display', 'block');
|
|
}
|
|
});
|
|
}
|
|
position = scroll;
|
|
});
|
|
|
|
// navbar
|
|
$('.navbar__burger').click(function() {
|
|
if ($(this).hasClass('is-active')) {
|
|
$(this).removeClass('is-active');
|
|
$('.navbar__menu').removeClass('is-active');
|
|
} else {
|
|
$(this).addClass('is-active');
|
|
$('.navbar__menu').addClass('is-active');
|
|
}
|
|
});
|
|
$('.navbar__menu-item').each(function() {
|
|
var menu = $(this).text().trim().toLowerCase();
|
|
if (location.pathname.includes(menu)) {
|
|
$(this).addClass('active');
|
|
} else {
|
|
$(this).removeClass('active');
|
|
}
|
|
});
|
|
|
|
// mobile search
|
|
$('.mobile-search').hide(200);
|
|
$('#mobileSearchBtn').click(function() {
|
|
$('#search-mobile-container').fadeIn(250);
|
|
$('#search-mobile').focus();
|
|
$('html').css('overflow-y', 'hidden');
|
|
});
|
|
$('#search-mobile-close').click(function() {
|
|
$('#search-mobile-container').fadeOut(250);
|
|
$('#search-mobile').val('');
|
|
$('#search-mobile-results').empty();
|
|
$('html').css('overflow-y', 'visible');
|
|
});
|
|
$('#search-mobile').keydown(function(e) {
|
|
// e.key === "Enter"
|
|
if (e.key === "Escape") {
|
|
$('#search-mobile-container').fadeOut(250);
|
|
$('#search-mobile').val('');
|
|
$('#search-mobile-results').empty();
|
|
$('html').css('overflow-y', 'visible');
|
|
}
|
|
});
|
|
|
|
// markdown table
|
|
const tables = document.querySelectorAll('.single__contents > table');
|
|
for (let i = 0; i < tables.length; i++) {
|
|
const table = tables[i];
|
|
const wrapper = document.createElement('div');
|
|
wrapper.className = 'table-wrapper';
|
|
table.parentElement.replaceChild(wrapper, table);
|
|
wrapper.appendChild(table);
|
|
}
|
|
|
|
// utils
|
|
$.fn.digits = function() {
|
|
return this.each(function() {
|
|
$(this).text($(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"));
|
|
})
|
|
}
|
|
});
|