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() {
|
|||
|
|
|||
|
}
|