.github
docs
scripts
assets
nodes
utils
childs.mjs
darkMode.mjs
getSVGNode.mjs
getTocsTree.mjs
homeCardIcons.mjs
panelAddNumber.mjs
rehypeUrls.mjs
tooltips.mjs
build.mjs
create.mjs
index.mjs
style.css
watch.mjs
.gitignore
CONTRIBUTING.md
Dockerfile
LICENSE
README.md
package.json
renovate.json
64 lines
2.0 KiB
JavaScript
64 lines
2.0 KiB
JavaScript
![]() |
/**
|
|||
|
* 配置 tooltips 注释
|
|||
|
*
|
|||
|
* ```markdown
|
|||
|
* - [超链接有 tooltips 提示](#1xx-information) _Tooltips 展示内容_ <!--rehype:tooltips-->
|
|||
|
* ```
|
|||
|
*
|
|||
|
* 上面示例:将 “Tooltips 展示内容” 放到 前一个 `<a>` dom 节点作为子节点
|
|||
|
*
|
|||
|
* - 注释配置的,前一个节点 A,A 的前一个节点 B
|
|||
|
* - 如果 A 和 B 其中一个不存在 `tooltips` 将失效
|
|||
|
* - 设置 B 的类名称为 tooltips
|
|||
|
*/
|
|||
|
export function tooltips(node, index, parent) {
|
|||
|
if (node.type === 'comment' && parent?.children.length > 2) {
|
|||
|
const childs = parent?.children;
|
|||
|
const result = [];
|
|||
|
let recordPos = false; // 记录位置
|
|||
|
let tooltipNode = null;
|
|||
|
for(let i = childs.length; i > -1; i--) {
|
|||
|
const node = childs[i];
|
|||
|
// 记录 tooltip 的开始位置
|
|||
|
if (node?.type === 'comment' && node?.value === 'rehype:tooltips') {
|
|||
|
recordPos = true;
|
|||
|
continue
|
|||
|
}
|
|||
|
// 记录 tooltip 的 node
|
|||
|
if (recordPos && !tooltipNode) {
|
|||
|
if (node.type === 'comment' || (node.type === 'text' && !node?.value?.replace(/\s\n/g, ''))) {
|
|||
|
recordPos = false;
|
|||
|
}
|
|||
|
if (recordPos && node.type === 'element') {
|
|||
|
tooltipNode = node;
|
|||
|
tooltipNode.properties['class'] = 'tooltiptext';
|
|||
|
delete tooltipNode.position;
|
|||
|
continue
|
|||
|
}
|
|||
|
}
|
|||
|
// 将 tooltip 节点,插入到下一个 element 节点的子节点中
|
|||
|
if (tooltipNode) {
|
|||
|
if (node.type === 'comment' || (node.type === 'text' && !node?.value?.replace(/\s\n/g, ''))) {
|
|||
|
recordPos = false;
|
|||
|
tooltipNode = null
|
|||
|
}
|
|||
|
if (tooltipNode && node?.type === 'element') {
|
|||
|
recordPos = false;
|
|||
|
node.properties['class'] = 'tooltip';
|
|||
|
node.children.push(tooltipNode);
|
|||
|
tooltipNode = null
|
|||
|
}
|
|||
|
}
|
|||
|
if (!recordPos && node) {
|
|||
|
result.push(node)
|
|||
|
}
|
|||
|
}
|
|||
|
if (parent) {
|
|||
|
parent.children = [...result.reverse()];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
export function getPreviewNode() {
|
|||
|
|
|||
|
}
|