mirror of
https://github.com/dillonzq/LoveIt.git
synced 2025-03-26 00:17:00 +01:00
feat: update theme.js (#913)
This commit is contained in:
parent
db23deb7a1
commit
27e9dc464b
2 changed files with 72 additions and 85 deletions
|
@ -35,7 +35,7 @@ var Util = /*#__PURE__*/function () {
|
|||
_classCallCheck(this, Util);
|
||||
}
|
||||
|
||||
_createClass(Util, [{
|
||||
_createClass(Util, null, [{
|
||||
key: "forEach",
|
||||
value: function forEach(elements, handler) {
|
||||
elements = elements || [];
|
||||
|
@ -91,8 +91,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
this.config = window.config;
|
||||
this.data = this.config.data;
|
||||
this.isDark = document.body.getAttribute('theme') === 'dark';
|
||||
this.util = new Util();
|
||||
this.newScrollTop = this.util.getScrollTop();
|
||||
this.newScrollTop = Util.getScrollTop();
|
||||
this.oldScrollTop = this.newScrollTop;
|
||||
this.scrollEventSet = new Set();
|
||||
this.resizeEventSet = new Set();
|
||||
|
@ -106,14 +105,14 @@ var Theme = /*#__PURE__*/function () {
|
|||
value: function initRaw() {
|
||||
var _this = this;
|
||||
|
||||
this.util.forEach(document.querySelectorAll('[data-raw]'), function ($raw) {
|
||||
Util.forEach(document.querySelectorAll('[data-raw]'), function ($raw) {
|
||||
$raw.innerHTML = _this.data[$raw.id];
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "initSVGIcon",
|
||||
value: function initSVGIcon() {
|
||||
this.util.forEach(document.querySelectorAll('[data-svg-src]'), function ($icon) {
|
||||
Util.forEach(document.querySelectorAll('[data-svg-src]'), function ($icon) {
|
||||
fetch($icon.getAttribute('data-svg-src')).then(function (response) {
|
||||
return response.text();
|
||||
}).then(function (svg) {
|
||||
|
@ -158,7 +157,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
value: function initSwitchTheme() {
|
||||
var _this2 = this;
|
||||
|
||||
this.util.forEach(document.getElementsByClassName('theme-switch'), function ($themeSwitch) {
|
||||
Util.forEach(document.getElementsByClassName('theme-switch'), function ($themeSwitch) {
|
||||
$themeSwitch.addEventListener('click', function () {
|
||||
if (document.body.getAttribute('theme') === 'dark') document.body.setAttribute('theme', 'light');else document.body.setAttribute('theme', 'dark');
|
||||
_this2.isDark = !_this2.isDark;
|
||||
|
@ -186,7 +185,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
var _this3 = this;
|
||||
|
||||
var searchConfig = this.config.search;
|
||||
var isMobile = this.util.isMobile();
|
||||
var isMobile = Util.isMobile();
|
||||
if (!searchConfig || isMobile && this._searchMobileOnce || !isMobile && this._searchDesktopOnce) return;
|
||||
var maxResultLength = searchConfig.maxResultLength ? searchConfig.maxResultLength : 10;
|
||||
var snippetLength = searchConfig.snippetLength ? searchConfig.snippetLength : 50;
|
||||
|
@ -299,10 +298,10 @@ var Theme = /*#__PURE__*/function () {
|
|||
position -= snippetLength / 5;
|
||||
|
||||
if (position > 0) {
|
||||
position += context.substr(position, 20).lastIndexOf(' ') + 1;
|
||||
context = '...' + context.substr(position, snippetLength);
|
||||
position += context.slice(position, position + 20).lastIndexOf(' ') + 1;
|
||||
context = '...' + context.slice(position, position + snippetLength);
|
||||
} else {
|
||||
context = context.substr(0, snippetLength);
|
||||
context = context.slice(0, snippetLength);
|
||||
}
|
||||
|
||||
Object.keys(metadata).forEach(function (key) {
|
||||
|
@ -442,7 +441,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
|
||||
if (script.readyState) {
|
||||
script.onreadystatechange = function () {
|
||||
if (script.readyState == 'loaded' || script.readyState == 'complete') {
|
||||
if (script.readyState === 'loaded' || script.readyState === 'complete') {
|
||||
script.onreadystatechange = null;
|
||||
initAutosearch();
|
||||
}
|
||||
|
@ -459,7 +458,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
}, {
|
||||
key: "initDetails",
|
||||
value: function initDetails() {
|
||||
this.util.forEach(document.getElementsByClassName('details'), function ($details) {
|
||||
Util.forEach(document.getElementsByClassName('details'), function ($details) {
|
||||
var $summary = $details.getElementsByClassName('details-summary')[0];
|
||||
$summary.addEventListener('click', function () {
|
||||
$details.classList.toggle('open');
|
||||
|
@ -488,7 +487,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
value: function initHighlight() {
|
||||
var _this5 = this;
|
||||
|
||||
this.util.forEach(document.querySelectorAll('.highlight > pre.chroma'), function ($preChroma) {
|
||||
Util.forEach(document.querySelectorAll('.highlight > pre.chroma'), function ($preChroma) {
|
||||
var $chroma = document.createElement('div');
|
||||
$chroma.className = $preChroma.className;
|
||||
var $table = document.createElement('table');
|
||||
|
@ -502,7 +501,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
$preChroma.parentElement.replaceChild($chroma, $preChroma);
|
||||
$td.appendChild($preChroma);
|
||||
});
|
||||
this.util.forEach(document.querySelectorAll('.highlight > .chroma'), function ($chroma) {
|
||||
Util.forEach(document.querySelectorAll('.highlight > .chroma'), function ($chroma) {
|
||||
var $codeElements = $chroma.querySelectorAll('pre.chroma > code');
|
||||
|
||||
if ($codeElements.length) {
|
||||
|
@ -527,14 +526,14 @@ var Theme = /*#__PURE__*/function () {
|
|||
$copy.insertAdjacentHTML('afterbegin', '<i class="far fa-copy fa-fw" aria-hidden="true"></i>');
|
||||
$copy.classList.add('copy');
|
||||
var code = $code.innerText;
|
||||
if (_this5.config.code.maxShownLines < 0 || code.split('\n').length < _this5.config.code.maxShownLines + 2) $chroma.classList.add('open');
|
||||
if (_this5.config.code.maxShownLines > 0 && code.split('\n').length < _this5.config.code.maxShownLines + 2) $chroma.classList.add('open');
|
||||
|
||||
if (_this5.config.code.copyTitle) {
|
||||
$copy.setAttribute('data-clipboard-text', code);
|
||||
$copy.title = _this5.config.code.copyTitle;
|
||||
var clipboard = new ClipboardJS($copy);
|
||||
clipboard.on('success', function (_e) {
|
||||
_this5.util.animateCSS($code, 'animate__flash');
|
||||
Util.animateCSS($code, 'animate__flash');
|
||||
});
|
||||
$header.appendChild($copy);
|
||||
}
|
||||
|
@ -546,7 +545,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
}, {
|
||||
key: "initTable",
|
||||
value: function initTable() {
|
||||
this.util.forEach(document.querySelectorAll('.content table'), function ($table) {
|
||||
Util.forEach(document.querySelectorAll('.content table'), function ($table) {
|
||||
var $wrapper = document.createElement('div');
|
||||
$wrapper.className = 'table-wrapper';
|
||||
$table.parentElement.replaceChild($wrapper, $table);
|
||||
|
@ -557,7 +556,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
key: "initHeaderLink",
|
||||
value: function initHeaderLink() {
|
||||
for (var num = 1; num <= 6; num++) {
|
||||
this.util.forEach(document.querySelectorAll('.single .content > h' + num), function ($header) {
|
||||
Util.forEach(document.querySelectorAll('.single .content > h' + num), function ($header) {
|
||||
$header.classList.add('headerLink');
|
||||
$header.insertAdjacentHTML('afterbegin', "<a href=\"#".concat($header.id, "\" class=\"header-mark\"></a>"));
|
||||
});
|
||||
|
@ -571,7 +570,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
var $tocCore = document.getElementById('TableOfContents');
|
||||
if ($tocCore === null) return;
|
||||
|
||||
if (document.getElementById('toc-static').getAttribute('data-kept') || this.util.isTocStatic()) {
|
||||
if (document.getElementById('toc-static').getAttribute('data-kept') || Util.isTocStatic()) {
|
||||
var $tocContentStatic = document.getElementById('toc-content-static');
|
||||
|
||||
if ($tocCore.parentElement !== $tocContentStatic) {
|
||||
|
@ -619,14 +618,12 @@ var Theme = /*#__PURE__*/function () {
|
|||
$toc.style.top = "".concat(TOP_SPACING, "px");
|
||||
}
|
||||
|
||||
_this6.util.forEach($tocLinkElements, function ($tocLink) {
|
||||
Util.forEach($tocLinkElements, function ($tocLink) {
|
||||
$tocLink.classList.remove('active');
|
||||
});
|
||||
|
||||
_this6.util.forEach($tocLiElements, function ($tocLi) {
|
||||
Util.forEach($tocLiElements, function ($tocLi) {
|
||||
$tocLi.classList.remove('has-active');
|
||||
});
|
||||
|
||||
var INDEX_SPACING = 20 + (headerIsFixed ? headerHeight : 0);
|
||||
var activeTocIndex = $headerLinkElements.length - 1;
|
||||
|
||||
|
@ -634,7 +631,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
var thisTop = $headerLinkElements[i].getBoundingClientRect().top;
|
||||
var nextTop = $headerLinkElements[i + 1].getBoundingClientRect().top;
|
||||
|
||||
if (i == 0 && thisTop > INDEX_SPACING || thisTop <= INDEX_SPACING && nextTop > INDEX_SPACING) {
|
||||
if (i === 0 && thisTop > INDEX_SPACING || thisTop <= INDEX_SPACING && nextTop > INDEX_SPACING) {
|
||||
activeTocIndex = i;
|
||||
break;
|
||||
}
|
||||
|
@ -675,8 +672,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
theme: _this7.isDark ? 'dark' : 'neutral',
|
||||
securityLevel: 'loose'
|
||||
});
|
||||
|
||||
_this7.util.forEach($mermaidElements, function ($mermaid) {
|
||||
Util.forEach($mermaidElements, function ($mermaid) {
|
||||
mermaid.render('svg-' + $mermaid.id, _this7.data[$mermaid.id], function (svgCode) {
|
||||
$mermaid.innerHTML = svgCode;
|
||||
}, $mermaid);
|
||||
|
@ -705,8 +701,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
}
|
||||
|
||||
_this8._echartsArr = [];
|
||||
|
||||
_this8.util.forEach(document.getElementsByClassName('echarts'), function ($echarts) {
|
||||
Util.forEach(document.getElementsByClassName('echarts'), function ($echarts) {
|
||||
var chart = echarts.init($echarts, _this8.isDark ? 'dark' : 'light', {
|
||||
renderer: 'svg'
|
||||
});
|
||||
|
@ -738,7 +733,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
mapboxgl.accessToken = this.config.mapbox.accessToken;
|
||||
mapboxgl.setRTLTextPlugin(this.config.mapbox.RTLTextPlugin);
|
||||
this._mapboxArr = this._mapboxArr || [];
|
||||
this.util.forEach(document.getElementsByClassName('mapbox'), function ($mapbox) {
|
||||
Util.forEach(document.getElementsByClassName('mapbox'), function ($mapbox) {
|
||||
var _this9$data$$mapbox$i = _this9.data[$mapbox.id],
|
||||
lng = _this9$data$$mapbox$i.lng,
|
||||
lat = _this9$data$$mapbox$i.lat,
|
||||
|
@ -791,7 +786,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
});
|
||||
|
||||
this._mapboxOnSwitchTheme = this._mapboxOnSwitchTheme || function () {
|
||||
_this9.util.forEach(_this9._mapboxArr, function (mapbox) {
|
||||
Util.forEach(_this9._mapboxArr, function (mapbox) {
|
||||
var $mapbox = mapbox.getContainer();
|
||||
var _this9$data$$mapbox$i2 = _this9.data[$mapbox.id],
|
||||
lightStyle = _this9$data$$mapbox$i2.lightStyle,
|
||||
|
@ -817,7 +812,7 @@ var Theme = /*#__PURE__*/function () {
|
|||
Object.values(typeitConfig.data).forEach(function (group) {
|
||||
var typeone = function typeone(i) {
|
||||
var id = group[i];
|
||||
var instance = new TypeIt("#".concat(id), {
|
||||
new TypeIt("#".concat(id), {
|
||||
strings: _this10.data[id],
|
||||
speed: speed,
|
||||
lifeLike: true,
|
||||
|
@ -944,39 +939,32 @@ var Theme = /*#__PURE__*/function () {
|
|||
var ACCURACY = 20,
|
||||
MINIMUM = 100;
|
||||
window.addEventListener('scroll', function () {
|
||||
_this12.newScrollTop = _this12.util.getScrollTop();
|
||||
_this12.newScrollTop = Util.getScrollTop();
|
||||
var scroll = _this12.newScrollTop - _this12.oldScrollTop;
|
||||
|
||||
var isMobile = _this12.util.isMobile();
|
||||
|
||||
_this12.util.forEach($headers, function ($header) {
|
||||
var isMobile = Util.isMobile();
|
||||
Util.forEach($headers, function ($header) {
|
||||
if (scroll > ACCURACY) {
|
||||
$header.classList.remove('animate__fadeInDown');
|
||||
|
||||
_this12.util.animateCSS($header, ['animate__fadeOutUp', 'animate__faster'], true);
|
||||
Util.animateCSS($header, ['animate__fadeOutUp', 'animate__faster'], true);
|
||||
} else if (scroll < -ACCURACY) {
|
||||
$header.classList.remove('animate__fadeOutUp');
|
||||
|
||||
_this12.util.animateCSS($header, ['animate__fadeInDown', 'animate__faster'], true);
|
||||
Util.animateCSS($header, ['animate__fadeInDown', 'animate__faster'], true);
|
||||
}
|
||||
});
|
||||
|
||||
if (_this12.newScrollTop > MINIMUM) {
|
||||
if (isMobile && scroll > ACCURACY) {
|
||||
$fixedButtons.classList.remove('animate__fadeIn');
|
||||
|
||||
_this12.util.animateCSS($fixedButtons, ['animate__fadeOut', 'animate__faster'], true);
|
||||
Util.animateCSS($fixedButtons, ['animate__fadeOut', 'animate__faster'], true);
|
||||
} else if (!isMobile || scroll < -ACCURACY) {
|
||||
$fixedButtons.style.display = 'block';
|
||||
$fixedButtons.classList.remove('animate__fadeOut');
|
||||
|
||||
_this12.util.animateCSS($fixedButtons, ['animate__fadeIn', 'animate__faster'], true);
|
||||
Util.animateCSS($fixedButtons, ['animate__fadeIn', 'animate__faster'], true);
|
||||
}
|
||||
} else {
|
||||
if (!isMobile) {
|
||||
$fixedButtons.classList.remove('animate__fadeIn');
|
||||
|
||||
_this12.util.animateCSS($fixedButtons, ['animate__fadeOut', 'animate__faster'], true);
|
||||
Util.animateCSS($fixedButtons, ['animate__fadeOut', 'animate__faster'], true);
|
||||
}
|
||||
|
||||
$fixedButtons.style.display = 'none';
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
class Util {
|
||||
forEach(elements, handler) {
|
||||
static forEach(elements, handler) {
|
||||
elements = elements || [];
|
||||
for (let i = 0; i < elements.length; i++) handler(elements[i]);
|
||||
}
|
||||
|
||||
getScrollTop() {
|
||||
static getScrollTop() {
|
||||
return (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
|
||||
}
|
||||
|
||||
isMobile() {
|
||||
static isMobile() {
|
||||
return window.matchMedia('only screen and (max-width: 680px)').matches;
|
||||
}
|
||||
|
||||
isTocStatic() {
|
||||
static isTocStatic() {
|
||||
return window.matchMedia('only screen and (max-width: 960px)').matches;
|
||||
}
|
||||
|
||||
animateCSS(element, animation, reserved, callback) {
|
||||
static animateCSS(element, animation, reserved, callback) {
|
||||
if (!Array.isArray(animation)) animation = [animation];
|
||||
element.classList.add('animate__animated', ...animation);
|
||||
const handler = () => {
|
||||
|
@ -33,8 +33,7 @@ class Theme {
|
|||
this.config = window.config;
|
||||
this.data = this.config.data;
|
||||
this.isDark = document.body.getAttribute('theme') === 'dark';
|
||||
this.util = new Util();
|
||||
this.newScrollTop = this.util.getScrollTop();
|
||||
this.newScrollTop = Util.getScrollTop();
|
||||
this.oldScrollTop = this.newScrollTop;
|
||||
this.scrollEventSet = new Set();
|
||||
this.resizeEventSet = new Set();
|
||||
|
@ -44,13 +43,13 @@ class Theme {
|
|||
}
|
||||
|
||||
initRaw() {
|
||||
this.util.forEach(document.querySelectorAll('[data-raw]'), $raw => {
|
||||
Util.forEach(document.querySelectorAll('[data-raw]'), $raw => {
|
||||
$raw.innerHTML = this.data[$raw.id];
|
||||
});
|
||||
}
|
||||
|
||||
initSVGIcon() {
|
||||
this.util.forEach(document.querySelectorAll('[data-svg-src]'), $icon => {
|
||||
Util.forEach(document.querySelectorAll('[data-svg-src]'), $icon => {
|
||||
fetch($icon.getAttribute('data-svg-src'))
|
||||
.then(response => response.text())
|
||||
.then(svg => {
|
||||
|
@ -87,7 +86,7 @@ class Theme {
|
|||
}
|
||||
|
||||
initSwitchTheme() {
|
||||
this.util.forEach(document.getElementsByClassName('theme-switch'), $themeSwitch => {
|
||||
Util.forEach(document.getElementsByClassName('theme-switch'), $themeSwitch => {
|
||||
$themeSwitch.addEventListener('click', () => {
|
||||
if (document.body.getAttribute('theme') === 'dark') document.body.setAttribute('theme', 'light');
|
||||
else document.body.setAttribute('theme', 'dark');
|
||||
|
@ -100,7 +99,7 @@ class Theme {
|
|||
|
||||
initSearch() {
|
||||
const searchConfig = this.config.search;
|
||||
const isMobile = this.util.isMobile();
|
||||
const isMobile = Util.isMobile();
|
||||
if (!searchConfig || isMobile && this._searchMobileOnce || !isMobile && this._searchDesktopOnce) return;
|
||||
|
||||
const maxResultLength = searchConfig.maxResultLength ? searchConfig.maxResultLength : 10;
|
||||
|
@ -198,10 +197,10 @@ class Theme {
|
|||
});
|
||||
position -= snippetLength / 5;
|
||||
if (position > 0) {
|
||||
position += context.substr(position, 20).lastIndexOf(' ') + 1;
|
||||
context = '...' + context.substr(position, snippetLength);
|
||||
position += context.slice(position, position + 20).lastIndexOf(' ') + 1;
|
||||
context = '...' + context.slice(position, position + snippetLength);
|
||||
} else {
|
||||
context = context.substr(0, snippetLength);
|
||||
context = context.slice(0, snippetLength);
|
||||
}
|
||||
Object.keys(metadata).forEach(key => {
|
||||
title = title.replace(new RegExp(`(${key})`, 'gi'), `<${highlightTag}>$1</${highlightTag}>`);
|
||||
|
@ -308,7 +307,7 @@ class Theme {
|
|||
script.async = true;
|
||||
if (script.readyState) {
|
||||
script.onreadystatechange = () => {
|
||||
if (script.readyState == 'loaded' || script.readyState == 'complete'){
|
||||
if (script.readyState === 'loaded' || script.readyState === 'complete'){
|
||||
script.onreadystatechange = null;
|
||||
initAutosearch();
|
||||
}
|
||||
|
@ -323,7 +322,7 @@ class Theme {
|
|||
}
|
||||
|
||||
initDetails() {
|
||||
this.util.forEach(document.getElementsByClassName('details'), $details => {
|
||||
Util.forEach(document.getElementsByClassName('details'), $details => {
|
||||
const $summary = $details.getElementsByClassName('details-summary')[0];
|
||||
$summary.addEventListener('click', () => {
|
||||
$details.classList.toggle('open');
|
||||
|
@ -348,7 +347,7 @@ class Theme {
|
|||
}
|
||||
|
||||
initHighlight() {
|
||||
this.util.forEach(document.querySelectorAll('.highlight > pre.chroma'), $preChroma => {
|
||||
Util.forEach(document.querySelectorAll('.highlight > pre.chroma'), $preChroma => {
|
||||
const $chroma = document.createElement('div');
|
||||
$chroma.className = $preChroma.className;
|
||||
const $table = document.createElement('table');
|
||||
|
@ -362,7 +361,7 @@ class Theme {
|
|||
$preChroma.parentElement.replaceChild($chroma, $preChroma);
|
||||
$td.appendChild($preChroma);
|
||||
});
|
||||
this.util.forEach(document.querySelectorAll('.highlight > .chroma'), $chroma => {
|
||||
Util.forEach(document.querySelectorAll('.highlight > .chroma'), $chroma => {
|
||||
const $codeElements = $chroma.querySelectorAll('pre.chroma > code');
|
||||
if ($codeElements.length) {
|
||||
const $code = $codeElements[$codeElements.length - 1];
|
||||
|
@ -386,13 +385,13 @@ class Theme {
|
|||
$copy.insertAdjacentHTML('afterbegin', '<i class="far fa-copy fa-fw" aria-hidden="true"></i>');
|
||||
$copy.classList.add('copy');
|
||||
const code = $code.innerText;
|
||||
if (this.config.code.maxShownLines < 0 || code.split('\n').length < this.config.code.maxShownLines + 2) $chroma.classList.add('open');
|
||||
if (this.config.code.maxShownLines > 0 && code.split('\n').length < this.config.code.maxShownLines + 2) $chroma.classList.add('open');
|
||||
if (this.config.code.copyTitle) {
|
||||
$copy.setAttribute('data-clipboard-text', code);
|
||||
$copy.title = this.config.code.copyTitle;
|
||||
const clipboard = new ClipboardJS($copy);
|
||||
clipboard.on('success', _e => {
|
||||
this.util.animateCSS($code, 'animate__flash');
|
||||
Util.animateCSS($code, 'animate__flash');
|
||||
});
|
||||
$header.appendChild($copy);
|
||||
}
|
||||
|
@ -402,7 +401,7 @@ class Theme {
|
|||
}
|
||||
|
||||
initTable() {
|
||||
this.util.forEach(document.querySelectorAll('.content table'), $table => {
|
||||
Util.forEach(document.querySelectorAll('.content table'), $table => {
|
||||
const $wrapper = document.createElement('div');
|
||||
$wrapper.className = 'table-wrapper';
|
||||
$table.parentElement.replaceChild($wrapper, $table);
|
||||
|
@ -412,7 +411,7 @@ class Theme {
|
|||
|
||||
initHeaderLink() {
|
||||
for (let num = 1; num <= 6; num++) {
|
||||
this.util.forEach(document.querySelectorAll('.single .content > h' + num), $header => {
|
||||
Util.forEach(document.querySelectorAll('.single .content > h' + num), $header => {
|
||||
$header.classList.add('headerLink');
|
||||
$header.insertAdjacentHTML('afterbegin', `<a href="#${$header.id}" class="header-mark"></a>`);
|
||||
});
|
||||
|
@ -422,7 +421,7 @@ class Theme {
|
|||
initToc() {
|
||||
const $tocCore = document.getElementById('TableOfContents');
|
||||
if ($tocCore === null) return;
|
||||
if (document.getElementById('toc-static').getAttribute('data-kept') || this.util.isTocStatic()) {
|
||||
if (document.getElementById('toc-static').getAttribute('data-kept') || Util.isTocStatic()) {
|
||||
const $tocContentStatic = document.getElementById('toc-content-static');
|
||||
if ($tocCore.parentElement !== $tocContentStatic) {
|
||||
$tocCore.parentElement.removeChild($tocCore);
|
||||
|
@ -464,14 +463,14 @@ class Theme {
|
|||
$toc.style.top = `${TOP_SPACING}px`;
|
||||
}
|
||||
|
||||
this.util.forEach($tocLinkElements, $tocLink => { $tocLink.classList.remove('active'); });
|
||||
this.util.forEach($tocLiElements, $tocLi => { $tocLi.classList.remove('has-active'); });
|
||||
Util.forEach($tocLinkElements, $tocLink => { $tocLink.classList.remove('active'); });
|
||||
Util.forEach($tocLiElements, $tocLi => { $tocLi.classList.remove('has-active'); });
|
||||
const INDEX_SPACING = 20 + (headerIsFixed ? headerHeight : 0);
|
||||
let activeTocIndex = $headerLinkElements.length - 1;
|
||||
for (let i = 0; i < $headerLinkElements.length - 1; i++) {
|
||||
const thisTop = $headerLinkElements[i].getBoundingClientRect().top;
|
||||
const nextTop = $headerLinkElements[i + 1].getBoundingClientRect().top;
|
||||
if ((i == 0 && thisTop > INDEX_SPACING)
|
||||
if ((i === 0 && thisTop > INDEX_SPACING)
|
||||
|| (thisTop <= INDEX_SPACING && nextTop > INDEX_SPACING)) {
|
||||
activeTocIndex = i;
|
||||
break;
|
||||
|
@ -500,7 +499,7 @@ class Theme {
|
|||
const $mermaidElements = document.getElementsByClassName('mermaid');
|
||||
if ($mermaidElements.length) {
|
||||
mermaid.initialize({startOnLoad: false, theme: this.isDark ? 'dark' : 'neutral', securityLevel: 'loose'});
|
||||
this.util.forEach($mermaidElements, $mermaid => {
|
||||
Util.forEach($mermaidElements, $mermaid => {
|
||||
mermaid.render('svg-' + $mermaid.id, this.data[$mermaid.id], svgCode => {
|
||||
$mermaid.innerHTML = svgCode;
|
||||
}, $mermaid);
|
||||
|
@ -521,7 +520,7 @@ class Theme {
|
|||
this._echartsArr[i].dispose();
|
||||
}
|
||||
this._echartsArr = [];
|
||||
this.util.forEach(document.getElementsByClassName('echarts'), $echarts => {
|
||||
Util.forEach(document.getElementsByClassName('echarts'), $echarts => {
|
||||
const chart = echarts.init($echarts, this.isDark ? 'dark' : 'light', {renderer: 'svg'});
|
||||
chart.setOption(JSON.parse(this.data[$echarts.id]));
|
||||
this._echartsArr.push(chart);
|
||||
|
@ -543,7 +542,7 @@ class Theme {
|
|||
mapboxgl.accessToken = this.config.mapbox.accessToken;
|
||||
mapboxgl.setRTLTextPlugin(this.config.mapbox.RTLTextPlugin);
|
||||
this._mapboxArr = this._mapboxArr || [];
|
||||
this.util.forEach(document.getElementsByClassName('mapbox'), $mapbox => {
|
||||
Util.forEach(document.getElementsByClassName('mapbox'), $mapbox => {
|
||||
const { lng, lat, zoom, lightStyle, darkStyle, marked, navigation, geolocate, scale, fullscreen } = this.data[$mapbox.id];
|
||||
const mapbox = new mapboxgl.Map({
|
||||
container: $mapbox,
|
||||
|
@ -578,7 +577,7 @@ class Theme {
|
|||
this._mapboxArr.push(mapbox);
|
||||
});
|
||||
this._mapboxOnSwitchTheme = this._mapboxOnSwitchTheme || (() => {
|
||||
this.util.forEach(this._mapboxArr, mapbox => {
|
||||
Util.forEach(this._mapboxArr, mapbox => {
|
||||
const $mapbox = mapbox.getContainer();
|
||||
const { lightStyle, darkStyle } = this.data[$mapbox.id];
|
||||
mapbox.setStyle(this.isDark ? darkStyle : lightStyle);
|
||||
|
@ -598,7 +597,7 @@ class Theme {
|
|||
Object.values(typeitConfig.data).forEach(group => {
|
||||
const typeone = (i) => {
|
||||
const id = group[i];
|
||||
const instance = new TypeIt(`#${id}`, {
|
||||
new TypeIt(`#${id}`, {
|
||||
strings: this.data[id],
|
||||
speed: speed,
|
||||
lifeLike: true,
|
||||
|
@ -705,31 +704,31 @@ class Theme {
|
|||
const $fixedButtons = document.getElementById('fixed-buttons');
|
||||
const ACCURACY = 20, MINIMUM = 100;
|
||||
window.addEventListener('scroll', () => {
|
||||
this.newScrollTop = this.util.getScrollTop();
|
||||
this.newScrollTop = Util.getScrollTop();
|
||||
const scroll = this.newScrollTop - this.oldScrollTop;
|
||||
const isMobile = this.util.isMobile();
|
||||
this.util.forEach($headers, $header => {
|
||||
const isMobile = Util.isMobile();
|
||||
Util.forEach($headers, $header => {
|
||||
if (scroll > ACCURACY) {
|
||||
$header.classList.remove('animate__fadeInDown');
|
||||
this.util.animateCSS($header, ['animate__fadeOutUp', 'animate__faster'], true);
|
||||
Util.animateCSS($header, ['animate__fadeOutUp', 'animate__faster'], true);
|
||||
} else if (scroll < - ACCURACY) {
|
||||
$header.classList.remove('animate__fadeOutUp');
|
||||
this.util.animateCSS($header, ['animate__fadeInDown', 'animate__faster'], true);
|
||||
Util.animateCSS($header, ['animate__fadeInDown', 'animate__faster'], true);
|
||||
}
|
||||
});
|
||||
if (this.newScrollTop > MINIMUM) {
|
||||
if (isMobile && scroll > ACCURACY) {
|
||||
$fixedButtons.classList.remove('animate__fadeIn');
|
||||
this.util.animateCSS($fixedButtons, ['animate__fadeOut', 'animate__faster'], true);
|
||||
Util.animateCSS($fixedButtons, ['animate__fadeOut', 'animate__faster'], true);
|
||||
} else if (!isMobile || scroll < - ACCURACY) {
|
||||
$fixedButtons.style.display = 'block';
|
||||
$fixedButtons.classList.remove('animate__fadeOut');
|
||||
this.util.animateCSS($fixedButtons, ['animate__fadeIn', 'animate__faster'], true);
|
||||
Util.animateCSS($fixedButtons, ['animate__fadeIn', 'animate__faster'], true);
|
||||
}
|
||||
} else {
|
||||
if (!isMobile) {
|
||||
$fixedButtons.classList.remove('animate__fadeIn');
|
||||
this.util.animateCSS($fixedButtons, ['animate__fadeOut', 'animate__faster'], true);
|
||||
Util.animateCSS($fixedButtons, ['animate__fadeOut', 'animate__faster'], true);
|
||||
}
|
||||
$fixedButtons.style.display = 'none';
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue