[js] 文档树文档置顶和设置颜色 [0.0.8 完美版]

本贴最后更新于 289 天前,其中的信息可能已经东海扬尘

功能

  1. 文档树中,选择文档或文件夹,右键置顶,即在父级文件夹中置顶选中的文档或文件夹。
  2. 文档树中,选择文档或文件夹,右键选择颜色,即为选中的文档或文件夹添加指定的颜色。
  3. 文档树中,右键菜单出现时,按住 shift(手机版长按置顶按钮),可以置顶到顶层(支持文档和文件夹)。
  4. 兼容 pc 版和手机版

注意:暂不支持笔记本的置顶和设置颜色。

最新版 0.0.8

  1. 增加记住顶层置顶文件夹展开状态;
  2. 修复文件夹置顶到顶层后定位不到问题;
  3. 增加置顶/取消置顶时自动定位到目标文档;
  4. 修复文档全部折叠后顶层置顶恢复后需要刷新才能显示的问题;
  5. 修复已取消的顶层置顶无法实时同步问题;
  6. 优化交互体验细节

效果

动画演示
r119.gif

pc 版
image.png

手机版
image.png

使用说明

参数说明

// 是否开启置顶功能,true 开启,false 不开启
const isEnableTopmost = true;

// 是否开启颜色功能,true 开启,false 不开启
const isEnableColor = true;

// 是否开启顶层置顶功能,true 开启,false 不开启
const isEnableTopmostLevel1 = true;

// 预设颜色列表,格式 {"主题":{"明暗风格":{"编码":{style:"颜色值", "description":"颜色描述"}}}},编码值必须唯一,编码修改则原来设置的颜色将失效
// "---1": {}, 代表分割线,后面的序号必须递增
// (切换主题或亮色暗色风格时自动会切换配色方案)
// 为了让目录树的颜色更突出,默认加了加粗显示(font-weight:bold 样式),如果你不需要去掉这个样式即可

let colors = {
    "default": {
        "light": {
            "now": { "style": "color:#1D4ED8;font-weight:bold;", "description": "NOW" },
            ...
        },
        "dark": {
            "now": { "style": "color:#42A5F5;font-weight:bold;", "description": "NOW" },
            ...
        }
    }
};

第一次运行后,会把该默认配置保存到 /data/storage/tree_colors_user_config.json 中,以后配置颜色只需要修改该文件即可,这样不受代码片段升级的影响。

也可以把 tree_colors_user_config.json 发出来与大家分享您的创意。

该配色灵感来自 @Floria233 大佬提供的配色方案,感谢 @Floria233 大佬!

see [js] 文档树文档置顶和设置颜色 [0.0.8 完美版] - Floria233 的回帖

存储文件及使用说明
  1. 修改/data/storage/tree_colors_user_config.json 文件即可修改默认配色方案(第一次运行后生成)
  2. 取消全部置顶只需删除/data/storage/tree_topmost.json 文件即可(第一次置顶时生成)
  3. 取消全部颜色只需删除/data/storage/tree_colors.json 文件即可(第一次设置颜色时生成)
  4. 取消全部顶层置顶只需删除/data/storage/tree_topmost_level1.json 文件即可(第一次设置顶层置顶时生成)
更新说明

0.0.4 版本及以前的用户升级,需要先备份好代码里的 colors 参数配置再升级。

0.0.5 及以后的用户升级,只需要备份好/data/storage/tree_colors_user_config.json 文件即可。

获取已标记颜色的文档

可以用 F 佬的书签 + 实现,操作步骤如下图

image.png

JavaScript 代码如下:

async function main() {
    let colors = await getFile('/data/storage/tree_colors.json') || '{}';
    try {
        colors = JSON.parse(colors);
    } catch (e) {}
    const colorIds = Object.keys(colors) || [];
    return colorIds;
    async function getFile(path, type = 'text') {
        return fetch("/api/file/getFile", {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({ path }),
        }).then((response) => {
            if (response.ok) {
                if(type==='json') return response.json();
                else if(type==='blob') return response.blob();
                else return response.text();
            } else {
                throw new Error("Failed to get file content");
            }
        }).catch((error) => {
            console.error(error);
        });
    }
}
return main();

缘起

看到论坛小伙伴们和我都有置顶的需求,就实现了这个功能,顺便也把我想要的颜色配置也实现了。

起初本想用插件来着,后来鉴于能用就不折腾的思想,一切从简了。

分享您的配色方案

也可以把您的 tree_colors_user_config.json 配色方案贴出来与大家分享。

默认配色方案如下(切换主题或亮色暗色风格时自动会切换颜色方案)

亮色主题
image.png

image.png

image.png

暗色主题
image.png

image.png

image.png

多个风格主题,可在不同文件夹中使用不同风格样式。

旧版本(0.0.4 版)

与 0.0.5+ 的区别是不支持根据主题及明暗风格配置颜色方案。

代码

https://gitee.com/wish163/mysoft/blob/db03ef3d4206b5235ee7b85d2dd273f717b315d1/%E6%80%9D%E6%BA%90/%E7%BB%99%E6%96%87%E6%A1%A3%E6%A0%91%E6%96%87%E6%A1%A3%E6%B7%BB%E5%8A%A0%E9%A2%9C%E8%89%B2%E5%92%8C%E7%BD%AE%E9%A1%B6.js

效果

pc 版

image.png

手机版

image.png

参数说明
// 是否开启置顶功能,true开启,false不开启
const isEnableTopmost = true;

// 是否开启颜色功能,true开启,false不开启
const isEnableColor = true;
  
  
// 预设颜色列表,格式 {"编码":{style:"颜色值", "description":"颜色描述"}},编码值必须唯一
// 也可以把该配置贴出来与大家分享您的创意
//默认颜色组采用20种人类最易识别的颜色 see https://zhuanlan.zhihu.com/p/508870810
const colors = {
   "orangeRed": { style: "color:#e6194B", description: "橙红色" },
   "green": { style: "color:#3cb44b", description: "绿色" },
   "yellow": { style: "color:#ffe119", description: "黄色" },
   ...
}

鸣谢

再次感谢 @Floria233 大佬的配色灵感及提供这么多好的配色方案!

打赏作者

image.png

代码

👇 打赏后可见(为什么要打赏后可见?主要想通过这种方式统计使用人数及用户需求,以帮助作者分析哪些功能是用户最需要的)

打赏 30 积分后可见
30 积分 • 26 打赏
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    28445 引用 • 119765 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    285 引用 • 1985 回帖

相关帖子

优质回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Floria233 1 3 评论

    回答大大的建议,这里给出一份颜色方案(说是如此,其实也就是更改了下颜色定义而已,当然,这里是我的习惯,相较颜色颜值,个人认为颜色的意义更重要)

    红色 now (红色给人感觉最紧张,一旦标注为红色,从潜意识上将会催促人赶紧改变 or 消灭这个“红色”)
    黄色 重要 (黄色也会造成一定视觉刺激,但不具备红色的危险性,虽说如此,黄色标注也不该过多,否则就会失去焦点)
    绿色 完成(这个越多越好,很有成就感)
    蓝色 任务 TODO(比较冷静的颜色,用于规划 思考 任务 之类的较为耗费意志力的活动时,给人的心理压迫最小)
    紫色 特别(注意-其他,这个颜色在自然界中很少见,在各行各业的使用场景也比较少,一旦发生就是比较特别的东西)【我给的色彩方案改成了橙色,原因是,我个人感觉同色系的紫色和粉色很相近,容易混淆】
    灰色 pass (不是“delete”,而是更像 later 处理)
    粉色 喜欢 收藏(为什么会喜欢某个文档呢?哈哈,可能这个文档实际是自己的精华笔记之类的,这个按我的用法,一般也会标注较少,而是用爱心图标取代颜色)

    • 文档靠颜色赋予某种含义,在这个 JS 的使用场景下,最好避免使用多彩文档树,否则就无法发挥这个“颜色的定义功能”
    • 颜色也不宜过多,一来将会造成选择困难症,二来文档颜色过多过杂也失去筛选的标注意义,三来颜色越多,其对应的意义就越多,则越难记住
    • 给文档标注颜色,这个功能的本质就是“给某些文档定义属性”,“属性”作为架构底层的信息设计,应当越简单越容易被记住——
      举个例子,就好比读纸质书时用彩笔标注,如果拿一整盒水彩笔去画线,那满篇的花花绿绿基本上也没啥意义了。

    image.png

    知乎给的这份颜色表大致看起来就挺不错的,不用怎么改了,我主要是改了下“蓝色”数值,它原来的那份颜色太深不易读。

    "orangeRed": { style: "color:#e6194B", description: "NOW" },
    "yellow": { style: "color:#ffe119", description: "重要" },
    "teal": { style: "color:#469990", description: "完成" },
    "blueDark": { style: "color:#87CEEB", description: "TODO" },
    "gray": { style: "color:#778899", description: "PASS" },
    "pink": { style: "color:#fabed4", description: "喜欢" },
    "orange": { style: "color:#f58231", description: "特别" }

    image.png

    改了下“特别”的 css,变成这种渐变色

    1 回复
    1 操作
    Floria233 在 2025-03-08 20:25:10 更新了该回帖
    非常好,下个版本,默认按照你这个配色方案,另外菜单去掉加粗显示,让菜单和文档树的样式一致,所见即所得。另外,如果多彩文档树也可以通过给文字添加背景色和描边等加以区分。
    wilsons
    @wilsons 感谢大大认可,哈哈
    Floria233
    "blue-green": { style: "background: linear-gradient(45deg, #d4fc79 0%, #00ffd0 40%, #0050d4 70%, #000080 100%); -webkit-background-clip: text; background-clip: text; color: transparent;", description: "特别" } 忽然想到一个更花哨的(因为我本来不喜欢橙色),所以又将橙色的方案改成了渐变色——这个从视觉上绝对是非常特殊了,这个只放在这里,用于喜欢的小伙伴用于替代,效果是青柠色渐变,很亮眼,这里好像放不了图,不过很显眼
    Floria233 1 赞同
  • 其他回帖
  • wilsons

    感觉这个主题仅适用于特定主题的暗色风格,不适用于其他主题或明色风格

    所以,我打算按照这种格式设计,即主题 > 明/暗 > 列表,自定义主题会和 default 主题合并,相同的自定义的覆盖默认的。

    let colors = {
            "default": {
                "light": {
              
                },
                "dark", {
                    "orangeRed": { style: "color:#e6194B", description: "NOW" },
                    "yellow": { style: "color:#ffe119", description: "重要" },
                    "teal": { style: "color:#469990", description: "完成" },
                    "blueDark": { style: "color:#87CEEB", description: "TODO" },
                    "gray": { style: "color:#778899", description: "PASS" },
                    "pink": { style: "color:#fabed4", description: "喜欢" },
                    "orange": { style: "color:#f58231", description: "特别" }
                }
            }
        };
    

    不知道哪位大神能帮忙设计一个好看的思源官方默认主题的明暗色系?如果没有,我只能按照自己的喜好,随便设计一个了。

    并且,这个默认配置在第一次运行时会保存到 /data/storage/tree_colors_user_config.json 文件中,以后只需要修改和分享这个文件即可,这样好处时,用户自定义配置,不受代码片段升级的影响。

  • Floria233 3 评论

    大大,有个奇怪的问题,应当不是 bug,只是有种奇怪的联动感,这个让我很迷惑……

    如图,实际上在大多数情况下,我应当不会给文件夹赋予颜色(靠图标来区分文件夹属性),而是给文档赋予颜色。

    image.png

    因此,我一直将二级文档树(集市有二级文档列表这个插件)的 dock 部件固定在右边,目前大大你给的 JS 片段在思源原生文档树上的操作没有问题(我没有碰到其他题主的 bug,因为我用的是 Asri,最开始那个版本就可以用),奇怪的地方在于——

    当我用了 0.0.4 这个更新后的 JS 片段后,某一个瞬间,二级文档树的右键菜单里忽然也可以直接更改文档颜色片段(之前是不可以的),然而这个事只发生了一次,之后我再在二级文档列表里调用右键菜单时,就再也没有看到过这个“更改文档颜色”选项。

    我好奇的是,大大的这个 JS 片段是可以影响到二级文档树列表的吗?还是说这反而是我操作时无意发生的某种 bug?

    另一个关注的点是,我很希望这个功能主要是发生在“二级文档树”上(原因如前,文件夹并不需要赋予太多颜色 😂 ),这个也可以通过请求开发“二级文档列表”这个插件的大大做到跟您差不多的效果吗?还是说,大大你的这个 JS 片段本来就可以融汇到“二级文档列表”右键菜单的吗?

    非常感谢您的建议和反馈!1. 关于你说在二级文档树上出现菜单项的问题,理论上应该不会,这些菜单被限制在只有在思源文档树上右键才显示的。2. 关于你说希望二级文档树上也显示相关菜单项,理论上应该可以实现的,但通常这类操作不会太频繁,在主文档树上操作应该就行了,兼容插件会带来更多复杂性,通常不会这么做,如插件更新啥的也可能导致意外产生等,暂时先不考虑吧。
    wilsons 1
    @wilsons 收到,看来果然是 bug,哈哈哈,因为只出现了那么一次。
    Floria233
    @Floria233 不清楚耶,理论上不会才对,一次性的很难排查,再出现再说吧。
    wilsons
  • 确实有这种情况,必须要选中文档树上的文档后,右健才会出现选项。确切说:

    • 第一次直接右击文档,是有选项的;
    • 从第二次开始,直接右击就没有选项,必须选中文档后,才有选项。
    1 回复
  • 查看全部回帖
wilsons
正式入驻知乎了,以后新贴主要在这里。 欢迎大家订阅关注! 你的关注对我是莫大鼓励,也能让我持续产出优质内容,我们一起成长 🙏 点这里立即关注:https://www.zhihu.com/people/wilsonses