【问题标题】:Quill 2.0.0 beta4 auto syntax highlight doesnt workQuill 2.0.0 beta4 自动语法高亮不起作用
【发布时间】:2021-06-10 08:29:07
【问题描述】:

我通读了 quill 的语法高亮指南,但无法让它发挥作用,因为 quill 一直抱怨 highlight.js 没有先加载。

我在网上尝试了许多解决方案,但都没有奏效。我得到了一个语言选择器(在我的本地项目中,当另存为 html 并重新打开时,还会添加带有语言名称的不必要的 p 标签)。

这是一个沙盒https://codesandbox.io/s/importing-sass-in-vue-forked-skuss?file=/src/components/HelloWorld.vue

我通过cdn直接在index.html上导入highlight.js。

【问题讨论】:

    标签: javascript vue.js quill


    【解决方案1】:

    更新

    根据要求,要求是禁用选择框并自动突出显示语法。

    自 quill 2.0.0 以来,在强制选择语言的情况下,语法高亮的工作方式发生了巨大变化。

    为了达到目的,我们需要重写 quill Syntax 类。

    class CodeSyntax extends Syntax {
      // override initListener to avoid creating selection box
      initListener() {}
      
      // overrider highlightBlot to highlight the text automatically
      highlightBlot(text, language = 'plain') {
        const container = this.quill.root.ownerDocument.createElement('div');
        container.classList.add(CodeBlock.className);
        container.innerHTML = this.options.hljs.highlightAuto(text).value;
        ...
      }
    }
    
    mounted() {
        const editorOpts = {
          modules: {
            syntax: {
              hljs // inject highlight.js to quill
            },
            toolbar: {
              container: [
                [{ header: [1, 2, 3, false] }],
                ["bold", "italic", "underline", "code-block"],
              ],
            },
          },
          theme: "snow",
        };
        editorOpts["scrollingContainer"] = this.$refs.scrollingContainer;
        
        // override the default syntax module with our own version of it
        Quill.register({ "modules/syntax": CodeSyntax }, true);
        this.editorInstance = new Quill(this.$refs.editorNode, editorOpts);
    },
    

    Codesandbox 似乎无法正确处理覆盖包类。我上传了the code in Github

    附:为了简单起见,我只是使用 css 而不是 scss。


    我认为您只是缺少 highlightjs css。

    https://codesandbox.io/s/importing-sass-in-vue-forked-fympz?file=/src/components/HelloWorld.vue:1717-1758

    @import "highlight.js/styles/github.css";
    

    导入并再次测试,语法应该被高亮显示。

    【讨论】:

    • 我想你误会了。 css 已经在 main.js 中导入(因为渲染的 html 将用于可能无法实例化 quill 的地方...... AUTO 语法突出显示不起作用意在这支笔codepen.io/0stone0/pen/poJwBzw(highlightjs 和 quill 的旧版本)中演示。PS:我不想要选择器。:)
    • 好的。但我看不到在代码和框中的 main.js 中导入了 css。所以主要问题是删除选择器并自动自动突出显示,对吧?
    • 是的....我想我不小心删除了 css...抱歉。
    • 没问题。但可能需要一些时间来阅读源代码。今天可能无法回复您。
    • 更新答案,请查看github上的代码。 codeandbox 在覆盖第三方包时出错。
    猜你喜欢
    • 2017-08-29
    • 2013-11-14
    • 2013-08-18
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2017-06-30
    相关资源
    最近更新 更多