mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
Add outline template for export html (#404)
Draft for outline implementation in exported html file
This commit is contained in:
parent
55b835a97c
commit
03ff391948
56
src/resources/outline.css
Normal file
56
src/resources/outline.css
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
.post-content {
|
||||||
|
width: 960px;
|
||||||
|
min-height: 200px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
|
||||||
|
}
|
||||||
|
.toc {
|
||||||
|
overflow: hidden;
|
||||||
|
color: #555;
|
||||||
|
border: 1px solid #d2d2d2;
|
||||||
|
border-radius: 3px;
|
||||||
|
min-width: 150px;
|
||||||
|
opacity: 1;
|
||||||
|
font-size: inherit;
|
||||||
|
z-index: 19941112;
|
||||||
|
}
|
||||||
|
.toc {
|
||||||
|
display: none;
|
||||||
|
margin-bottom: 2em;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
.toc a {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.toc a:hover{
|
||||||
|
color: #555;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
.toc .catalog-title {
|
||||||
|
cursor: move;
|
||||||
|
padding-left: 12px;
|
||||||
|
width: 100%;
|
||||||
|
height: 35px;
|
||||||
|
line-height: 36px;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #555;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.toc .catalog-close {
|
||||||
|
position: absolute;
|
||||||
|
right: 15px;
|
||||||
|
top: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.fixed {
|
||||||
|
position: fixed;
|
||||||
|
top: 20px;
|
||||||
|
right: 250px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
.blodtoc {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
27
src/resources/outline.html
Normal file
27
src/resources/outline.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<head>
|
||||||
|
<style type="text/css">
|
||||||
|
/* STYLE_GLOBAL_PLACE_HOLDER */
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style type="text/css">
|
||||||
|
/* STYLE_PLACE_HOLDER */
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!-- EXTRA_PLACE_HOLDER -->
|
||||||
|
|
||||||
|
<!-- HEAD_PLACE_HOLDER -->
|
||||||
|
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="toc fixed">
|
||||||
|
<div class="catalog-title"><span>目录</span></div>
|
||||||
|
<a class="catalog-close"><span>X</span></a>
|
||||||
|
</div>
|
||||||
|
<div class="post-content">
|
||||||
|
<!-- BODY_PLACE_HOLDER -->
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
100
src/resources/outline.js
Normal file
100
src/resources/outline.js
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/**
|
||||||
|
* Convert item of header array to html in li
|
||||||
|
* @param item An element of header array
|
||||||
|
*/
|
||||||
|
var itemToHtml = function(item) {
|
||||||
|
return '<a href="#' + item.id + '" id="' + 'menu-'+ item.id + '" >' + item.innerText + '</a>';
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Generate tree from header array
|
||||||
|
* @param toc_list An array containing header elements
|
||||||
|
* @param p_baseLevel The base level number of the toc you want to display
|
||||||
|
*/
|
||||||
|
var tocToTree = function(toc_list, p_baseLevel) {
|
||||||
|
let i;
|
||||||
|
let p_toc = [];
|
||||||
|
for (i in toc_list) {
|
||||||
|
let itemLevel = parseInt(toc_list[i].tagName.substring(1));
|
||||||
|
if (itemLevel >= p_baseLevel) {
|
||||||
|
p_toc.push(toc_list[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let front = '<li>';
|
||||||
|
let ending = ['</li>'];
|
||||||
|
let curLevel = p_baseLevel;
|
||||||
|
let toclen = p_toc.length;
|
||||||
|
for (i in p_toc) {
|
||||||
|
let item = p_toc[i];
|
||||||
|
console.log(item.tagName);
|
||||||
|
let itemLevel = parseInt(item.tagName.substring(1));
|
||||||
|
if (item.tagName == curLevel) {
|
||||||
|
front += '</li>';
|
||||||
|
front += '<li>';
|
||||||
|
front += itemToHtml(item);
|
||||||
|
} else if (itemLevel > curLevel) {
|
||||||
|
// assert(item.level - curLevel == 1)
|
||||||
|
front += '<ul>';
|
||||||
|
ending.push('</ul>');
|
||||||
|
front += '<li>';
|
||||||
|
front += itemToHtml(item);
|
||||||
|
ending.push('</li>');
|
||||||
|
curLevel = itemLevel;
|
||||||
|
} else {
|
||||||
|
while (itemLevel < curLevel) {
|
||||||
|
let ele = ending.pop();
|
||||||
|
front += ele;
|
||||||
|
if (ele == '</ul>') {
|
||||||
|
curLevel--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
front += '</li>';
|
||||||
|
front += '<li>';
|
||||||
|
front += itemToHtml(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (ending.length > 0) {
|
||||||
|
front += ending.pop();
|
||||||
|
}
|
||||||
|
front = front.replace("<li></li>", "");
|
||||||
|
front = '<ul>' + front + '</ul>';
|
||||||
|
return front;
|
||||||
|
};
|
||||||
|
|
||||||
|
let headerObjList = $(":header").toArray();
|
||||||
|
$('.toc').append(tocToTree( headerObjList, 2 ));
|
||||||
|
|
||||||
|
|
||||||
|
// scroll to display side outline
|
||||||
|
$(window).bind('scroll', function(){
|
||||||
|
if ($(document).scrollTop() >= 100) {
|
||||||
|
$('.toc').css("display", "block");
|
||||||
|
highToc();
|
||||||
|
} else {
|
||||||
|
$('.toc').css("display", "none");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// make the corresponding outline text blod
|
||||||
|
let highToc = function(){
|
||||||
|
$(":header").each(function(index, element) {
|
||||||
|
var wst = $(window).scrollTop();
|
||||||
|
let tag_id = $(this).attr("id");
|
||||||
|
if($("#"+tag_id).offset().top <= wst){
|
||||||
|
$('.toc a').removeClass("blodtoc");
|
||||||
|
$('#menu-'+tag_id).addClass("blodtoc");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// click to make outline text blod
|
||||||
|
$('.toc a').click(function(){
|
||||||
|
$('.toc a').removeClass("blodtoc");
|
||||||
|
$(this).addClass("blodtoc");
|
||||||
|
});
|
||||||
|
|
||||||
|
// button to close the outline
|
||||||
|
$('.toc .catalog-close').click(function(){
|
||||||
|
$('.toc').hide();
|
||||||
|
$(window).unbind('scroll');
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user