QC2168 / vite-plugin-vitepress-auto-sidebar

The vite plugin that automatically generates sidebar data by scanning directories, based on vitepress
MIT License
85 stars 12 forks source link

feat :文章前缀 功能出发地点是文字是有顺序的 #7

Closed wcySpring closed 1 year ago

wcySpring commented 1 year ago

hello, 指定文章前缀 功能出发地点是文字是有顺序的,我想通过特定名字标识符用来,将文件按照顺序展示。如果我 没有按照特定标识符排序如下 image

但实际顺序我先颠倒过来因此我用了1. 2.来标记 image

但我在菜单展示后的效果并不想展示 1. 2. 因为他仅仅作为一个我文章顺序标记 image

可能错误理解我的pr 我的清除前缀是吧,提供特殊符号 例如. 前面的都清除掉,当然也可能是 @ # 任何符合 1#css 2#ass,变成 css ass

function removePrefix(str, identifier) {
    const index = str.indexOf(identifier)
    if (index === -1) {
        // 如果字符串中不存在标识符,则返回原始字符串
        return str
    } else {
        // 否则返回标识符后面的所有字符
        return str.slice(index + identifier.length)
    }
}

如果有需要的话 我可以将我之前pr在提交回来,并不是现在的简单字符串替换为空,希望的是一个更加动态的

QC2168 commented 1 year ago

@wcySpring 我明白了您的意思了,我把deletePrefix参数支持传入regex进行替换,这样子就可以解决您的问题了

举个例子: 如果您想将1.css2.sass进行替换csssass,可以传入/\d+\./进行替换

wcySpring commented 1 year ago

这是我现在的文章结构 image 这是我的目录 image 代码命名这些先忽略只是我的demo image

你可以看到我的文件名有序号 但是我的目录没有序号,然后我还用了序号进行了排序

wcySpring commented 1 year ago

有的时候我觉得的这种大纲有顺序的目录是更多常态

QC2168 commented 1 year ago

已经发布了V1.4.1版本,您试试看?

wcySpring commented 1 year ago

已经发布了V1.4.1版本,您试试看?

这是我从现在项目暂时抽离出来的一个demo 在我自己的项目使用 我增加了 52 行的代码用来排序 https://github.com/wcySpring/learning-notes-blog/blob/main/docs/.vitepress/config/autoSidebar.ts

可能 npm 缓存还没更新现在我获取不到1.4.1 image

QC2168 commented 1 year ago

您用的是镜像站吗(如果是的话,可能是还没有同步到?),切换到npmjs官方的源尝试下

yarn add vite-plugin-vitepress-auto-sidebar@latest

QC2168 commented 1 year ago

这个排序问题,我打算暴露一个Api,如果外部需要对侧边栏数据进行处理,可以直接在这个接口里面修改

wcySpring commented 1 year ago

这个排序问题,我打算暴露一个Api,如果外部需要对侧边栏数据进行处理,可以直接在这个接口里面修改

是的 我很同意你的想法,但现在1.4.1 版本去掉前缀也没达到预期效果 左侧是我自己的最小demo 展示,右侧是1.4.1 的展示 image

wcySpring commented 1 year ago

文章前缀是用来排序的最简单的标识,但是每个人习惯并不相同 有的人可能是 1、aa 2、bbb 或者 1.aa 2.bbb 最开始出发点是为了不让自定义前缀影响到菜单名字展示会显得很混乱 才增加了这个删除 删除也是删除自定义前缀

QC2168 commented 1 year ago

我看了您的仓库,您需要把deletePrefix: '.'替换成deletePrefix: /\d+\./即可

QC2168 commented 1 year ago

image

QC2168 commented 1 year ago

另外,collapsed默认值为false,可以不传递哦

wcySpring commented 1 year ago

另外,collapsed默认值为false,可以不传递哦

哈哈学到了,之前思维定式认为符号,没想到原来正则作为参数,很期待自定义排序的回调暴露出来,这样我就可以直接对接到现在的自动生成了

QC2168 commented 1 year ago

image

QC2168 commented 1 year ago

@wcySpring 侧边栏排序功能已经实现了,需要在beforeCreateSideBarItems钩子中进行排序操作,实例中的代码如下:

AutoSidebar({
    deletePrefix: /\d+\./,
    collapsed: false,
    ignoreList: ['font'],
    // 按照文件名排序
    beforeCreateSideBarItems(data) {
        const regex = /^\d+/;
        return data.sort((a, b) => {
            const aOrder = a.match(regex)?.[0]
            const bOrder = b.match(regex)?.[0]
            if (!aOrder || !bOrder) {
                return 0
            }
            return Number(aOrder) - Number(bOrder)
        })
    }
}),
QC2168 commented 1 year ago

如果您想对生成好了的侧边栏对象进行修改,可以使用sideBarResolvedsideBarItemsResolved钩子中执行~

wcySpring commented 1 year ago

哇太给力,是我现在在做vitepress搭建博客 所需要的