[js] [css] 全链路 Callout (提示块) 中文化 && 样式分享

Callout (提示块)中文化(内容区 + 两种菜单 + 编辑弹窗强同步)

1、斜杠 ‘/’ 菜单翻译

image.png

2、内容区域翻译

image.png

3、修改类型翻译

image.png

// custom.js - 全链路 Callout 中文化(内容区 + 两种菜单 + 编辑弹窗强同步)
(function () {
    const translations = {
        "Note": "信息补充",
        "Tip": "提示",
        "Important": "重要",
        "Warning": "警告",
        "Caution": "问题"
    };

    const defaultTitles = {
        "NOTE": "Note",
        "TIP": "Tip",
        "IMPORTANT": "Important",
        "WARNING": "Warning",
        "CAUTION": "Caution"
    };

    const menuButtonIds = {
        "NOTE": "calloutNote",
        "TIP": "calloutTip",
        "IMPORTANT": "calloutImportant",
        "WARNING": "calloutWarning",
        "CAUTION": "calloutCaution"
    };

    // === 通用翻译函数:安全更新匹配的 span ===
    function translateCalloutSpans(spans) {
        spans.forEach(span => {
            const original = span.textContent.trim();
            if (translations[original]) {
                span.textContent = translations[original];
            }
        });
    }

    // === 1. 内容区 Callout 标题更新(节流 + 直接匹配英文文本)===
    let contentUpdateTimer = null;
    function updateCalloutTitlesInContent() {
        if (contentUpdateTimer) return;
        contentUpdateTimer = setTimeout(() => {
            document.querySelectorAll('.callout[data-subtype] .callout-title').forEach(titleEl => {
                const text = titleEl.textContent.trim();
                if (translations[text]) {
                    titleEl.textContent = translations[text];
                }
            });
            contentUpdateTimer = null;
        }, 60);
    }

    // === 2. 菜单项更新(支持两类结构)===
    function updateCalloutMenuItems() {
        // 类型 A: 工具栏按钮(如侧边栏)
        Object.values(menuButtonIds).forEach(dataId => {
            const button = document.querySelector(`button[data-id="${dataId}"]`);
            if (!button) return;
            const colorSpan = button.querySelector('.b3-list-item__text span[style*="--b3-callout"]');
            if (colorSpan) {
                translateCalloutSpans([colorSpan]);
            }
        });

        // 类型 B: 下拉/右键菜单(data-name="callout-select")
        const selectMenu = document.querySelector('.b3-menu[data-name="callout-select"]');
        if (selectMenu) {
            const spans = selectMenu.querySelectorAll('.b3-menu__label > span[style*="--b3-callout"]');
            translateCalloutSpans(spans);
        }
    }

    // === 3. Callout 编辑弹窗:强制同步标题为中文默认值 ===
    function updateCalloutEditDialog() {
        document.querySelectorAll('.b3-dialog__content').forEach(dialog => {
            const typeInput = dialog.querySelector('input.b3-form__icona-input'); // 类型输入框
            const titleInput = dialog.querySelector('input.b3-text-field.fn__flex-1[type="text"]'); // 标题输入框

            if (!typeInput || !titleInput) return;

            const calloutType = typeInput.value; // e.g., "CAUTION"
            const englishTitle = defaultTitles[calloutType]; // e.g., "Caution"
            const chineseTitle = englishTitle ? translations[englishTitle] : null;

            if (chineseTitle !== null) {
                titleInput.value = chineseTitle; // 强制设为中文(覆盖用户旧值)
            }
        });
    }

    // === 合并 DOM 变更处理(区分策略)===
    function onDomChange() {
        updateCalloutTitlesInContent();   // 节流
        updateCalloutMenuItems();         // 即时
        updateCalloutEditDialog();        // 即时,强同步
    }

    // === 初始执行 ===
    updateCalloutTitlesInContent();
    updateCalloutMenuItems();
    updateCalloutEditDialog();

    // === 监听整个页面的动态变化 ===
    const observer = new MutationObserver(onDomChange);
    observer.observe(document.body, { childList: true, subtree: true });
})();

Callout(提示块) 样式

/* === 通用 callout 样式 === */
.callout {
    display: block;
    border-radius: 6px;
    padding: 10px 16px;
    margin: 8px 0;
    position: relative;
    background-color: white !important;
    color: var(--b3-theme-on-background);
    border-left: none !important;
    box-shadow: none !important;
}

/* === Note —— 蓝色系 === */
.callout[data-subtype="NOTE"] {
    border-left: 0.25em solid #1f6feb !important;
    background-color: rgba(247, 250, 255, 0.8) !important;
}
.callout[data-subtype="NOTE"] .callout-info {
    color: #1f6feb;
}

/* === Tip —— 绿色系 === */
.callout[data-subtype="TIP"] {
    border-left: 0.25em solid #238636 !important;
    background-color: rgba(238, 250, 240, 0.8) !important;
}
.callout[data-subtype="TIP"] .callout-info {
    color: #238636;
}

/* === IMPORTANT —— 全新紫色系 (#9E75E7) === */
.callout[data-subtype="IMPORTANT"] {
    border-left: 0.25em solid #9E75E7 !important;
    background-color: rgba(158, 117, 231, 0.12) !important; /* 浅紫背景 */
}
.callout[data-subtype="IMPORTANT"] .callout-info {
    color: #9E75E7;
}

/* === Warning —— 橙色系(可选:也可改为独立色)=== */
.callout[data-subtype="WARNING"] {
    border-left: 0.25em solid #e3b341 !important;
    background-color: rgba(255, 250, 235, 0.8) !important;
}
.callout[data-subtype="WARNING"] .callout-info {
    color: #e3b341;
}

/* === Caution —— 红色系 === */
.callout[data-subtype="CAUTION"] {
    border-left: 0.25em solid #d1242f !important;
    background-color: rgba(255, 240, 240, 0.8) !important;
}
.callout[data-subtype="CAUTION"] .callout-info {
    color: #d1242f;
}

/* === 移除默认 ::before 竖线 === */
.callout:before {
    background: transparent !important;
    width: 0 !important;
}
  • 思源笔记

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

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

    28450 引用 • 119803 回帖
  • 代码片段

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

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

    286 引用 • 1988 回帖
1 操作
JeffreyChen 在 2025-12-23 11:19:33 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    6 引用 • 35 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 235 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 184 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    188 引用 • 833 回帖 • 1 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 559 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    140 引用 • 407 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 650 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 74 关注
  • abitmean

    有点意思就行了

    45 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 686 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 43 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 55 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4602 回帖 • 732 关注
  • Follow
    4 引用 • 13 回帖 • 20 关注
  • 分享

    有什么新发现就分享给大家吧!

    251 引用 • 1801 回帖 • 3 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 572 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 367 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 181 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 56 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • 996
    13 引用 • 200 回帖 • 7 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 329 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    95 引用 • 122 回帖 • 633 关注