检测到论坛CSS可能没有正确加载,如出现排版混乱请刷新重试。

We detected that the CSS might not be loaded correctly. If the website displays abnormally, Please refresh and try again.

话说能不能把目录结构改一下🤔然后模仿twemoji打个包丢到npm上
我看flarum/emoji有import twemoji from 'twemoji';

    你们可能忘了Flamoji面板()
    这货自己加载了一遍Twemoji 如果要换的话可以顺便看看==

      綾瀬桃桃 这可能会是下一个 Plan,但对我来说应该只能完成一个“P”,因为“lan”。放 NPM 上面似乎也不会比现在有用多少吧,也可能是我不了解它的好处。
      事实上我觉得已经不错了。


      JC_ProPlus 加载速度应该还可以吧?数据加载量太多了?

        DaleZ 放 NPM 上面似乎也不会比现在有用多少吧,也可能是我不了解它的好处


        上图为官方实现 可以看出它使用了twemoji前端库(而不是写死链接)
        然后渲染代码长这样

        export default function renderEmoji() {
          override(Post.prototype, 'contentHtml', function (original) {
            const contentHtml = original();
        
            if (this.oldContentHtml !== contentHtml) {
              // We need to parse the HTML string into a DOM node, then give it to Twemoji.
              //
              // This prevents some issues with the default find-replace that would be performed
              // on a string passed to `Twemoji.parse()`.
              //
              // The parse function can only handle a single DOM node provided, so we need to
              // wrap it in a node. In our `parseHTML` implementation, we wrap it in a `<body>`
              // element. This gets stripped below.
              //
              // See https://github.com/flarum/core/issues/2958
              const emojifiedDom = twemoji.parse(parseHTML(contentHtml), options);
        
              // Steal the HTML string inside the emojified DOM `<body>` tag.
              this.emojifiedContentHtml = emojifiedDom.innerHTML;
        
              this.oldContentHtml = contentHtml;
            }
        
            return this.emojifiedContentHtml;
          });
        
          override(s9e.TextFormatter, 'preview', (original, text, element) => {
            original(text, element);
        
            twemoji.parse(element, options);
          });
        }

        twemoji.parse就是去获取对应的emoji的
        对应位于Twemoji(看这些注释就够了)

        /**
         * If given to parse, this callback will be invoked per each found emoji.
         *
         * If this callback returns a falsy value instead of a valid `src` to use for the image, nothing will actually change for that specific emoji.
         *
         * @param icon the lower case HEX code point i.e. "1f4a9"
         * @param options all info for this parsing operation
         * @param variant the optional \uFE0F ("as image") variant, in case this info is anyhow meaningful. By default this is ignored.
         */

        Flarum侧还有一个cdn.js用于获取url

        import twemoji from 'twemoji';
        
        export const version = /([0-9]+).[0-9]+.[0-9]+/g.exec(twemoji.base)[1];
        
        export default `https://cdn.jsdelivr.net/gh/twitter/twemoji@${version}/assets/`;

        最大的优点是

        1. 不需要再根据Twemoji版本变更相应改变nginx配置(目前Twemoji版本号是14 如果一旦Twemoji更新了所有emoji会全部自动滚回Twemoji)
        2. 可以打包成插件便于快速在其他站点使用

          DaleZ 暴力修改资源链接太不优雅了
          不过我赌 Twemoji15出来之后马上 #意见反馈 就会多一个帖子出来(

            綾瀬桃桃 不过我赌 Twemoji15出来之后马上 #意见反馈 就会多一个帖子出来(

            ?
            你是说要求跟进 Twemoji 更新吗?那不会。

            DaleZ 以后 msemoji 更新会在此处通知。

              DaleZ 我是说

              DaleZ 然后更改图片源链接。如果我的理解正确,应该通过 Nginx 将https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/替换成https://gh.sourcegcdn.com/DellZHackintosh/msemoji/1.0.0/src/。

              注意这里 twemoji@14

                綾瀬桃桃 呃,也就是说届时所有的 Emoji 都会 Boom?😰这倒是个问题。。。

                綾瀬桃桃 看了下 twemoji 的实现是有个 base 参数的,用来表示 CDN url 的前半部分,感觉不用重新发 npm 包,把这个 base 改下就可以复用

                JC_ProPlus 物尽其用,当时我正在寻找一个现成的拥有大批量 Emoji 的帖子用于测试,然后想起了这个🤪

                JC_ProPlus 呵呵呵呵呵呵呵呵呵呵呵呵

                綾瀬桃桃 话又说回来,这个问题乍一看挺难的,其实有一个笨办法:
                通过 Nginx 再增加一个https://cdn.jsdelivr.net/gh/twitter/twemoji@15/assets/替换https://gh.sourcegcdn.com/DellZHackintosh/msemoji/1.0.0/src/的命令。
                只要用户不使用 Unicode 15 的表情,他们就不会有感知了。

                何木槿 不太明白您什么意思呢……请更详细地补充此话,然后重试。
                事实上,希望也不算大,目前只有1500多个表情可用。还少了很多。


                我早说了,只要微软想做,微软肯定可以用 SVG 做 3D 效果,你看,这不就成了吗?


                何木槿 开源了4种类型。

                1. 3D,PNG
                2. 3D,SVG
                3. 2D,SVG
                4. 回滚式文字型(被称为“高对比度”),SVG

                可惜还不完整,不知道下次 msemoji 更新能不能在这个仓库里面找到。

                1 个月 后

                msemoji 1.1.0 Beta1 推出

                PNG 版本的 MSEmoji 已获得 Emoji 14.0 的支持。


                如果论坛已跟进此更新,那么以下表情应全部显示为微软表情:
                🫠 🫢 🫣 🫡 🫥 🫤 🥹 🫱 🫲 🫳 🫴 🫰 🫵 🫶 🫦 🫅 🫃 🫄 🧌 🪸 🪷 🪹 🪺 🫘 🫗 🫙 🛝 🛞 🛟 🪬 🪩 🪫 🩼 🩻 🫧 🪪 🟰 🫱🏻 🫱🏼 🫱🏽 🫱🏾 🫱🏿 🫲🏻 🫲🏼 🫲🏽 🫲🏾 🫲🏿 🫳🏻 🫳🏼 🫳🏽 🫳🏾 🫳🏿 🫴🏻 🫴🏼 🫴🏽 🫴🏾 🫴🏿 🫰🏻 🫰🏼 🫰🏽 🫰🏾 🫰🏿 🫵🏻 🫵🏼 🫵🏽 🫵🏾 🫵🏿 🫶🏻 🫶🏼 🫶🏽 🫶🏾 🫶🏿 🤝🏻 🤝🏼 🤝🏽 🤝🏾 🤝🏿 🫱🏻🫲🏼 🫱🏻🫲🏽 🫱🏻🫲🏾 🫱🏻🫲🏿 🫱🏼🫲🏻 🫱🏼🫲🏽 🫱🏼🫲🏾 🫱🏼🫲🏿 🫱🏽🫲🏻 🫱🏽🫲🏼 🫱🏽🫲🏾 🫱🏽🫲🏿 🫱🏾🫲🏻 🫱🏾🫲🏼 🫱🏾🫲🏽 🫱🏾🫲🏿 🫱🏿🫲🏻 🫱🏿🫲🏼 🫱🏿🫲🏽 🫱🏿🫲🏾 🫅🏻 🫅🏼 🫅🏽 🫅🏾 🫅🏿 🫃🏻 🫃🏼 🫃🏽 🫃🏾 🫃🏿 🫄🏻 🫄🏼 🫄🏽 🫄🏾 🫄🏿

                而下列表情应该有外观变动:
                😷 🥲 💨 💦 🌸 👅 ❤️ 🧡 💛 💚 💙 💜 🖤 🤍 🤎 🔄 ✖️

                5 个月 后

                最近论坛是有些乱。希望这个新消息能够活跃活跃气氛。

                宣布 MSEmoji 1.1.0 正式版!

                • 全面支持 Emoji 14.0;
                • 全面换用微软开源仓库内表情资源;
                • 现支持5种不同变体风格;

                虽然现在还处在最后收尾阶段,但论坛已经可以准备上车了!😃

                © 2025 wvbCommunity 管理团队

                删封申诉 | 知乎专栏 | 状态监控 | 用户协议(EULA) | 隐私政策

                本站文章除其作者特殊声明外,一律采用CC BY-NC-SA 4.0许可协议进行授权,进行转载或二次创作时务必以相同协议进行共享,严禁用于商业用途。