You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
5.2 KiB
193 lines
5.2 KiB
<link rel="stylesheet" href="<%- theme.jsDelivr.url %><%- url_for(theme.libs.css.tocbot) %>">
|
|
<style>
|
|
#articleContent h1::before,
|
|
#articleContent h2::before,
|
|
#articleContent h3::before,
|
|
#articleContent h4::before,
|
|
#articleContent h5::before,
|
|
#articleContent h6::before {
|
|
display: block;
|
|
content: " ";
|
|
height: 100px;
|
|
margin-top: -100px;
|
|
visibility: hidden;
|
|
}
|
|
|
|
#articleContent :focus {
|
|
outline: none;
|
|
}
|
|
|
|
.toc-fixed {
|
|
position: fixed;
|
|
top: 64px;
|
|
}
|
|
|
|
.toc-widget {
|
|
background-color: white;
|
|
width: 345px;
|
|
padding-left: 20px;
|
|
border-radius: 10px;
|
|
box-shadow: 0 10px 35px 2px rgba(0, 0, 0, .15), 0 5px 15px rgba(0, 0, 0, .07), 0 2px 5px -5px rgba(0, 0, 0, .1) !important;
|
|
}
|
|
|
|
.toc-widget .toc-title {
|
|
padding: 35px 0 15px 17px;
|
|
font-size: 1.5rem;
|
|
font-weight: bold;
|
|
line-height: 1.5rem;
|
|
}
|
|
|
|
.toc-widget ol {
|
|
padding: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
#toc-content {
|
|
height: calc(100vh - 300px);
|
|
overflow: scroll;
|
|
|
|
}
|
|
|
|
#toc-content ol {
|
|
padding-left: 10px;
|
|
}
|
|
|
|
#toc-content ol li {
|
|
padding-left: 10px;
|
|
}
|
|
|
|
#toc-content .toc-link:hover {
|
|
color: #42b983;
|
|
font-weight: 700;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
#toc-content .toc-link::before {
|
|
background-color: transparent;
|
|
max-height: 25px;
|
|
|
|
position: absolute;
|
|
right: 23.5vw;
|
|
display: block;
|
|
}
|
|
|
|
#toc-content .is-active-link {
|
|
color: #42b983;
|
|
}
|
|
|
|
#floating-toc-btn {
|
|
position: fixed;
|
|
right: 15px;
|
|
bottom: 76px;
|
|
padding-top: 15px;
|
|
margin-bottom: 0;
|
|
z-index: 998;
|
|
}
|
|
|
|
#floating-toc-btn .btn-floating {
|
|
width: 48px;
|
|
height: 48px;
|
|
bottom: 120px;
|
|
}
|
|
|
|
#floating-toc-btn .btn-floating i {
|
|
line-height: 48px;
|
|
font-size: 1.4rem;
|
|
}
|
|
</style>
|
|
<div class="row">
|
|
<div id="main-content" class="col s12 m12 l9">
|
|
<%- partial('_partial/post-detail.ejs') %>
|
|
</div>
|
|
<div id="toc-aside" class="expanded col l3 hide-on-med-and-down">
|
|
<div class="toc-widget card">
|
|
<div class="toc-title"><i class="far fa-list-alt"></i> <%- __('toc') %></div>
|
|
<div id="toc-content"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- TOC 悬浮按钮. -->
|
|
<% if (theme.toc.enable && theme.toc.showToggleBtn) { %>
|
|
<div id="floating-toc-btn" class="hide-on-med-and-down">
|
|
<a class="btn-floating btn-large bg-color">
|
|
<i class="fas fa-list-ul"></i>
|
|
</a>
|
|
</div>
|
|
<% } %>
|
|
|
|
<script src="<%- theme.jsDelivr.url %><%- url_for(theme.libs.js.tocbot) %>"></script>
|
|
<script>
|
|
$(function () {
|
|
tocbot.init({
|
|
tocSelector: '#toc-content',
|
|
contentSelector: '#articleContent',
|
|
headingsOffset: -($(window).height() * 0.4 - 45),
|
|
collapseDepth: Number('<%- theme.toc.collapseDepth %>'),
|
|
headingSelector: '<%- theme.toc.heading %>'
|
|
});
|
|
|
|
// modify the toc link href to support Chinese.
|
|
let i = 0;
|
|
let tocHeading = 'toc-heading-';
|
|
$('#toc-content a').each(function () {
|
|
$(this).attr('href', '#' + tocHeading + (++i));
|
|
});
|
|
|
|
// modify the heading title id to support Chinese.
|
|
i = 0;
|
|
$('#articleContent').children('<%- theme.toc.heading %>').each(function () {
|
|
$(this).attr('id', tocHeading + (++i));
|
|
});
|
|
|
|
// Set scroll toc fixed.
|
|
let tocHeight = parseInt($(window).height() * 0.4 - 64);
|
|
let $tocWidget = $('.toc-widget');
|
|
$(window).scroll(function () {
|
|
let scroll = $(window).scrollTop();
|
|
/* add post toc fixed. */
|
|
if (scroll > tocHeight) {
|
|
$tocWidget.addClass('toc-fixed');
|
|
} else {
|
|
$tocWidget.removeClass('toc-fixed');
|
|
}
|
|
});
|
|
|
|
<% if (theme.toc.enable && theme.toc.showToggleBtn) { %>
|
|
/* 修复文章卡片 div 的宽度. */
|
|
let fixPostCardWidth = function (srcId, targetId) {
|
|
let srcDiv = $('#' + srcId);
|
|
if (srcDiv.length === 0) {
|
|
return;
|
|
}
|
|
|
|
let w = srcDiv.width();
|
|
if (w >= 450) {
|
|
w = w + 21;
|
|
} else if (w >= 350 && w < 450) {
|
|
w = w + 18;
|
|
} else if (w >= 300 && w < 350) {
|
|
w = w + 16;
|
|
} else {
|
|
w = w + 14;
|
|
}
|
|
$('#' + targetId).width(w);
|
|
};
|
|
|
|
// 切换TOC目录展开收缩的相关操作.
|
|
const expandedClass = 'expanded';
|
|
let $tocAside = $('#toc-aside');
|
|
let $mainContent = $('#main-content');
|
|
$('#floating-toc-btn .btn-floating').click(function () {
|
|
if ($tocAside.hasClass(expandedClass)) {
|
|
$tocAside.removeClass(expandedClass).hide();
|
|
$mainContent.removeClass('l9');
|
|
} else {
|
|
$tocAside.addClass(expandedClass).show();
|
|
$mainContent.addClass('l9');
|
|
}
|
|
fixPostCardWidth('artDetail', 'prenext-posts');
|
|
});
|
|
<% } %>
|
|
});
|
|
</script>
|
|
|