提交 1302ee2c 编写于 作者: 郭维嘉

fix:优化目录生成规则

上级 4665e8e3
此差异已折叠。
...@@ -325,6 +325,7 @@ export default { ...@@ -325,6 +325,7 @@ export default {
text: this.text, text: this.text,
html: this.html html: this.html
}); });
this.addTocClickToBody();
}, 0); }, 0);
}, },
watch: { watch: {
...@@ -488,22 +489,13 @@ export default { ...@@ -488,22 +489,13 @@ export default {
tocEls.forEach(el => { tocEls.forEach(el => {
el.innerHTML = `<ul class="md_toc_list">${dirTags el.innerHTML = `<ul class="md_toc_list">${dirTags
.map(tag => { .map(tag => {
return `<li class="md_toc_item" data-type="${tag.tag}" data-id="${tag.id}">${tag.text}</li>`; return `<li class="md_toc_item type_${tag.tag}" href="${tag.id}">${tag.text}</li>`;
}) })
.join("")}</ul>`; .join("")}</ul>`;
}); });
this.html = vDom.innerHTML; this.html = vDom.innerHTML;
// console.log(document.querySelectorAll(".md_toc_list")); // console.log(document.querySelectorAll(".md_toc_list"));
document.querySelector("body").addEventListener("click", function(e) {
if (!e.target?.className.includes("md_toc_item")) return;
console.log(e.target.dataset.id);
const targetEl = document.getElementById(e.target?.dataset?.id);
if (!targetEl) return;
targetEl.scrollIntoView({
behavior: "smooth"
});
});
}, },
renderLinksHtml({ vDom, links }) { renderLinksHtml({ vDom, links }) {
// 缓存里没有的链接,就发送请求获取信息 // 缓存里没有的链接,就发送请求获取信息
...@@ -549,10 +541,21 @@ export default { ...@@ -549,10 +541,21 @@ export default {
const title = getLinkTitle(linkEl, item); const title = getLinkTitle(linkEl, item);
linkEl.innerHTML = renderLinkCard(title, item); linkEl.innerHTML = renderLinkCard(title, item);
}); });
this.html = vDom.innerHTML; this.html = vDom.innerHTML;
} }
}); });
},
addTocClickToBody() {
document.querySelector("body").addEventListener("click", function(e) {
if (!e.target?.className.includes("md_toc_item")) return;
const targetEl = document.getElementById(
e.target?.getAttribute("href")
);
if (!targetEl) return;
targetEl.scrollIntoView({
behavior: "smooth"
});
});
} }
} }
}; };
......
...@@ -88,35 +88,35 @@ textarea { ...@@ -88,35 +88,35 @@ textarea {
.md_toc_list { .md_toc_list {
li.md_toc_item { li.md_toc_item {
list-style-type: none; list-style: disc;
// list-style-type: none;
cursor: pointer; cursor: pointer;
color: var(--md-editor-border-color-active); color: var(--md-editor-border-color-active);
position: relative; position: relative;
margin: 12px 8px; // &::before {
&::before { // content: "\·";
content: "\·"; // font-size: 20px;
font-size: 20px; // position: absolute;
position: absolute; // left: 0;
left: 0; // top: 50%;
top: 50%; // transform: translateY(-50%);
transform: translateY(-50%); // }
} &.type_h1 {
&[data-type="h1"] {
padding-left: 20px; padding-left: 20px;
} }
&[data-type="h2"] { &.type_h2 {
padding-left: 30px; padding-left: 30px;
} }
&[data-type="h3"] { &.type_h3 {
padding-left: 40px; padding-left: 40px;
} }
&[data-type="h4"] { &.type_h4 {
padding-left: 50px; padding-left: 50px;
} }
&[data-type="h5"] { &.type_h5 {
padding-left: 60px; padding-left: 60px;
} }
&[data-type="h6"] { &.type_h6 {
padding-left: 70px; padding-left: 70px;
} }
} }
......
...@@ -60,6 +60,11 @@ export default { ...@@ -60,6 +60,11 @@ export default {
doc: "[链接标题](url)", doc: "[链接标题](url)",
icon: "lianjie" icon: "lianjie"
}, },
{
title: "目录",
doc: "[toc](目录)",
icon: "dir"
},
{ {
title: "图片", title: "图片",
doc: "![alt](url)", doc: "![alt](url)",
......
...@@ -72,10 +72,24 @@ export default { ...@@ -72,10 +72,24 @@ export default {
scrollToTitle(item) { scrollToTitle(item) {
const targetEl = document.getElementById(item.id); const targetEl = document.getElementById(item.id);
if (!targetEl) return; if (!targetEl) return;
const targetOffsetTop = targetEl.offsetTop; const scrollEl = document.querySelector(
document.querySelector(
".md_preview .md_preview_scroll_container" ".md_preview .md_preview_scroll_container"
).scrollTop = targetOffsetTop; );
if (
scrollEl.scrollHeight > scrollEl.clientHeight ||
scrollEl.offsetHeight > scrollEl.clientHeight
) {
const targetOffsetTop = targetEl.offsetTop;
scrollEl.scrollTop = targetOffsetTop;
} else {
targetEl.scrollIntoView({
behavior: "smooth"
});
}
// const targetOffsetTop = targetEl.offsetTop;
// document.querySelector(
// ".md_preview .md_preview_scroll_container"
// ).scrollTop = targetOffsetTop;
}, },
dirItemActive(item) { dirItemActive(item) {
const itemScrollTop = document.getElementById(item.id)?.offsetTop; const itemScrollTop = document.getElementById(item.id)?.offsetTop;
......
...@@ -81,8 +81,6 @@ export default { ...@@ -81,8 +81,6 @@ export default {
src="${href}" src="${href}"
></video></p>`; ></video></p>`;
} }
console.log("imgimgimg");
// ![img](...)渲染图片 // ![img](...)渲染图片
let out = let out =
'<p class="md_img_container"><img src="' + '<p class="md_img_container"><img src="' +
...@@ -144,7 +142,6 @@ export default { ...@@ -144,7 +142,6 @@ export default {
return "<h" + level + ">" + text + "</h" + level + ">\n"; return "<h" + level + ">" + text + "</h" + level + ">\n";
}, },
link(href, title, text) { link(href, title, text) {
console.log("linklink");
if (text?.toLowerCase() === "toc") { if (text?.toLowerCase() === "toc") {
return ` return `
<h1 class="toc_title">${href}</h1> <h1 class="toc_title">${href}</h1>
...@@ -194,7 +191,7 @@ export default { ...@@ -194,7 +191,7 @@ export default {
return `<span style="display:inline-block;text-indent:2em;">${val}</span>`; return `<span style="display:inline-block;text-indent:2em;">${val}</span>`;
}) })
.replace( .replace(
/\[TOC\]/i, /@?\[TOC\]/i,
`<h1 class="toc_title">目录</h1><div class="tocEl"></div>` `<h1 class="toc_title">目录</h1><div class="tocEl"></div>`
); );
......
...@@ -197,7 +197,7 @@ export default { ...@@ -197,7 +197,7 @@ export default {
{ {
name: "call", name: "call",
icon: "aite", icon: "aite",
tip: "@好友", tip: "@关注的人",
startStr: "@", startStr: "@",
endStr: "" endStr: ""
}, },
......
...@@ -8,6 +8,8 @@ module.exports = { ...@@ -8,6 +8,8 @@ module.exports = {
}, },
devServer: { devServer: {
contentBase: path.resolve(__dirname, "dist"), contentBase: path.resolve(__dirname, "dist"),
host: "0.0.0.0",
https: true,
open: true open: true
}, },
resolve: { resolve: {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册