GithubHelp home page GithubHelp logo

目录导出 about vditor HOT 2 CLOSED

prclin avatar prclin commented on June 20, 2024
目录导出

from vditor.

Comments (2)

prclin avatar prclin commented on June 20, 2024 1

renders中收集大纲实现:

//类型声明
export interface ReferenceEntry {
    level: number,
    label: string,
    children: ReferenceEntry[]
}
//查找父级
const searchParent = (entries: ReferenceEntry[], level: number): ReferenceEntry[] => {
    if (entries.length == 0) return entries;
    const cLevel = entries[entries.length - 1].level;
    if (cLevel >= level) {
        return entries;
    } else {
        return searchParent(entries[entries.length - 1].children, level);
    }
};

//创建state
const [references, setReferences] = useState<ReferenceEntry[]>([]);

//renderHeading抽取目录
renderHeading: (node, entering) => {
                        const id = Lute.GetHeadingID(node);
                        const level = node.__internal_object__.HeadingLevel;
                        if (entering) {
                            return [
                                `<h${level} id='${id}' class='heading'>`,
                                Lute.WalkContinue];
                        } else {
                         
                            setReferences(prevState => {
                                //lodash 浅拷贝
                                const nextState = clone(prevState);
                                searchParent(nextState, Number(level)).push({
                                    level: Number(level),
                                    label: id,
                                    children: [],
                                });
                                return nextState;
                            });
                            return [
                                `</h${level}>`,
                                Lute.WalkContinue];
                        }
                    }

收集结果:

//收集结果
[
    {
        "level": 2,
        "label": "教程",
        "children": []
    },
    {
        "level": 2,
        "label": "语法指导",
        "children": [
            {
                "level": 3,
                "label": "普通内容",
                "children": []
            },
            {
                "level": 3,
                "label": "提及用户",
                "children": []
            },
            {
                "level": 3,
                "label": "表情符号-Emoji",
                "children": [
                    {
                        "level": 4,
                        "label": "一些表情例子",
                        "children": []
                    }
                ]
            },
            {
                "level": 3,
                "label": "大标题---Heading-3",
                "children": [
                    {
                        "level": 4,
                        "label": "Heading-4",
                        "children": [
                            {
                                "level": 5,
                                "label": "Heading-5",
                                "children": [
                                    {
                                        "level": 6,
                                        "label": "Heading-6",
                                        "children": []
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "level": 3,
                "label": "图片",
                "children": []
            },
            {
                "level": 3,
                "label": "代码块",
                "children": [
                    {
                        "level": 4,
                        "label": "普通",
                        "children": []
                    },
                    {
                        "level": 4,
                        "label": "语法高亮支持",
                        "children": [
                            {
                                "level": 5,
                                "label": "演示-Go-代码高亮",
                                "children": []
                            },
                            {
                                "level": 5,
                                "label": "演示-Java-高亮",
                                "children": []
                            }
                        ]
                    }
                ]
            },
            {
                "level": 3,
                "label": "有序-无序-任务列表",
                "children": [
                    {
                        "level": 4,
                        "label": "无序列表",
                        "children": []
                    },
                    {
                        "level": 4,
                        "label": "有序列表",
                        "children": []
                    },
                    {
                        "level": 4,
                        "label": "任务列表",
                        "children": []
                    }
                ]
            },
            {
                "level": 3,
                "label": "表格",
                "children": []
            },
            {
                "level": 3,
                "label": "隐藏细节",
                "children": []
            },
            {
                "level": 3,
                "label": "段落",
                "children": []
            },
            {
                "level": 3,
                "label": "链接引用",
                "children": []
            },
            {
                "level": 3,
                "label": "数学公式",
                "children": []
            },
            {
                "level": 3,
                "label": "脑图",
                "children": []
            },
            {
                "level": 3,
                "label": "流程图",
                "children": []
            },
            {
                "level": 3,
                "label": "时序图",
                "children": []
            },
            {
                "level": 3,
                "label": "甘特图",
                "children": []
            },
            {
                "level": 3,
                "label": "图表",
                "children": []
            },
            {
                "level": 3,
                "label": "五线谱",
                "children": []
            },
            {
                "level": 3,
                "label": "Graphviz",
                "children": []
            },
            {
                "level": 3,
                "label": "Flowchart",
                "children": []
            },
            {
                "level": 3,
                "label": "多媒体",
                "children": []
            },
            {
                "level": 3,
                "label": "脚注",
                "children": []
            }
        ]
    },
    {
        "level": 2,
        "label": "快捷键",
        "children": []
    }
]

渲染结果

image

from vditor.

Vanessa219 avatar Vanessa219 commented on June 20, 2024

目录导出具体可参见 outlineRender

from vditor.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.