Quill 2.0.0 beta4 自动语法突出显示不起作用
Quill 2.0.0 beta4 auto syntax highlight doesnt work
我通读了 quill 的语法高亮指南,但无法正常工作,因为 quill 一直抱怨 highlight.js 没有首先加载。
我在网上尝试了很多解决方案,但 none 都奏效了。我得到了一个语言选择器(在我的本地项目中,当保存为 html 并重新打开时,还会添加不必要的带有语言名称的 p 标签)。
这是一个沙盒https://codesandbox.io/s/importing-sass-in-vue-forked-skuss?file=/src/components/HelloWorld.vue
我直接在 index.html 上通过 cdn 导入了 highlight.js。
已更新
根据要求,要求禁用选择框并自动进行语法高亮。
自 quill 2.0.0 以来,在强制选择语言的情况下,语法高亮显示的工作方式发生了巨大变化。
为了达到目的,我们需要重写quill语法class。
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 似乎无法正确处理覆盖包 class。我上传了 the code in Github.
P.S。为了简单起见,我只是使用 css 而不是 scss。
我认为您只是缺少 highlightjs css。
@import "highlight.js/styles/github.css";
导入并再次测试,语法应该被高亮显示。
我通读了 quill 的语法高亮指南,但无法正常工作,因为 quill 一直抱怨 highlight.js 没有首先加载。
我在网上尝试了很多解决方案,但 none 都奏效了。我得到了一个语言选择器(在我的本地项目中,当保存为 html 并重新打开时,还会添加不必要的带有语言名称的 p 标签)。
这是一个沙盒https://codesandbox.io/s/importing-sass-in-vue-forked-skuss?file=/src/components/HelloWorld.vue
我直接在 index.html 上通过 cdn 导入了 highlight.js。
已更新
根据要求,要求禁用选择框并自动进行语法高亮。
自 quill 2.0.0 以来,在强制选择语言的情况下,语法高亮显示的工作方式发生了巨大变化。
为了达到目的,我们需要重写quill语法class。
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 似乎无法正确处理覆盖包 class。我上传了 the code in Github.
P.S。为了简单起见,我只是使用 css 而不是 scss。
我认为您只是缺少 highlightjs css。
@import "highlight.js/styles/github.css";
导入并再次测试,语法应该被高亮显示。