Quill文档(二):如何定制Quill

Quill的设计考虑了定制化和扩展性。这是通过实现一个小型的编辑器核心,并通过一个粒度细致、定义明确的API公开实现的。核心通过模块进行增强,使用与您相同的API

一般来说,常见的定制在配置,用户界面由主题和CSS处理,功能由模块处理,编辑器内容由Parchment处理。

配置


Quill倾向于代码优于配置,但对于非常常见的需求,特别是等价代码会很长或复杂的情况下,Quill提供了配置选项。这是一个很好的起点,用来确定您是否需要实现任何自定义功能。

两个最强大的选项是模块和主题您可以通过简单地添加或删除单个模块或使用不同的主题,来极大地改变或扩展Quill能够和已经做的事情。

主题


Quill官方支持标准工具栏主题Snow和浮动提示主题Bubble。由于Quill不像许多传统编辑器那样局限于iframe内,许多视觉修改只需使用CSS即可完成,使用现有的主题之一。

如果您想大幅度改变UI交互,您可以省略主题配置选项,这将给您一个未经过样式化的Quill编辑器。您仍然需要包含一个最小的样式表,例如,确保所有浏览器中空格都能渲染,有序列表正确编号。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/quill@2.0.0-rc.4/dist/quill.core.css">

从那里开始,您可以实现并附加您自己的UI元素,如自定义下拉菜单或提示。在“使用Parchment克隆Medium”的最后一部分提供了一个实际示例。

模块


Quill采用了模块化架构设计,由一个小型编辑核心和增强其功能的模块组成。其中一些功能对于编辑非常重要,例如历史模块,它管理撤销和重做。因为所有模块都使用与开发者公开的相同公共API,所以即使是互换核心模块也是可能的,当有必要时。

像Quill的核心本身一样,许多模块都公开了额外的配置选项和API。在决定替换一个模块之前,先看看它的文档。通常,您想要的定制已经作为配置或API调用实现。

否则,如果您想大幅度改变现有模块已经涵盖的功能,您可以简单地不包括它——或者明确排除它,当主题默认包含它时——并在Quill外部实现您喜欢的功能性,使用默认模块使用的相同API。

const quill = new Quill('#editor', {
  modules: {
    toolbar: false    // Snow默认包含工具栏
  },
  theme: 'snow'
});

一些模块——剪贴板、键盘和历史——需要作为核心功能包含,因为核心功能依赖于它们提供的API。例如,尽管撤销和重做是基本的、预期的编辑功能,但浏览器原生处理这些功能的原生行为是不一致和不可预测的。历史模块通过实现自己的撤销管理器,并公开undo()和redo()作为API,来弥合这一差距。

尽管如此,Quill仍然坚持模块化设计,您仍然可以通过实现自己的撤销管理器来大幅度改变撤销和重做——或任何其他核心功能——的工作方式。只要您实现相同的API接口,Quill就会很高兴地使用您的替代模块。这最容易通过继承现有模块,并覆盖您想要更改的方法来完成。看看模块文档,了解一个非常简单的覆盖核心剪贴板模块的示例。

最后,如果您想添加现有模块未提供的功能。在这种情况下,将其组织为Quill模块可能很方便,构建自定义模块指南涵盖了这一点。当然,将这个逻辑与Quill分开,保留在您的应用程序代码中,也完全是有效的。

内容和格式


Quill允许通过其文档模型Parchment修改和扩展它理解的内容和格式。内容和格式在Parchment中被表示为Blots或Attributors,大致对应于DOM中的节点或属性。

class vs inline

Quill尽可能使用class,而不是inline样式属性,但两者都为您实现,供您选择。

const ColorClass = Quill.import('attributors/class/color');
const SizeStyle = Quill.import('attributors/style/size');
Quill.register(ColorClass, true);
Quill.register(SizeStyle, true);

// 像通常一样初始化
const quill = new Quill('#editor', {
  modules: {
    toolbar: true
  },
  theme: 'snow'
});

自定义Attributors

除了选择特定的Attributor之外,您还可以自定义现有的Attributors。以下是一个添加额外字体的字体白名单的示例。如果不配置白名单该属性无法被注册到Blots上和生效。

const FontAttributor = Quill.import('attributors/class/font');
FontAttributor.whitelist = [
  'sofia', 'slabo', 'roboto', 'inconsolata', 'ubuntu'
];
Quill.register(FontAttributor, true);

注意您仍然需要在CSS文件中为这些类添加样式。

<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<style>
.ql-font-roboto {
  font-family: 'Roboto', sans-serif;
}
</style>

自定义Blots

由Blots表示的格式也可以定制。以下是您如何更改用于表示加粗格式的DOM节点的示例。

const Bold = Quill.import('formats/bold');
Bold.tagName = 'B';   // Quill默认使用<strong>
Quill.register(Bold, true);

// 像通常一样初始化
const quill = new Quill('#editor', {
  modules: {
    toolbar: true
  },
  theme: 'snow'
});

const Delta = Quill.import('delta');
quill.setContents(
  new Delta()
    .insert('Rendered with <b>!', { bold: true })
    .insert('\n')
);

扩展Blots

您还可以扩展现有格式。以下是一个不允许对其内容进行格式化的列表项的快速ES6实现。代码块正是以这种方式实现的。

const ListItem = Quill.import('formats/list/item');

class PlainListItem extends ListItem {
  formatAt(index, length, name, value) {
    if (name === 'list') {
      // 允许更改或删除列表格式
      super.formatAt(name, value);
    }
    // 否则忽略
  }
}

Quill.register(PlainListItem, true);

// 像通常一样初始化
const quill = new Quill('#editor', {
  modules: {
    toolbar: true
  },
  theme: 'snow'
});

您可以通过调用console.log(Quill.imports);查看可用的Blots和Attributors列表。直接修改此对象是不支持的。使用Quill.register代替。

关于Parchment、Blots和Attributors的完整参考可以在Parchment自己的README上找到。要进行深入的演练,请查看使用Parchment克隆Medium,它从Quill只理解纯文本开始,到添加Medium支持的所有格式。大多数时候,您不需要从头开始构建格式,因为大多数格式已经在Quill中实现,但了解Quill在这个更深层次上的工作原理仍然很有用。

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue-quill-editor 是一个基于 Quill.js 的富文本编辑器组件,它提供了一些方便的 API,使得在 Vue.js 应用中使用 Quill.js 编辑器更加容易。下面是使用文档: 1. 安装 ``` npm install vue-quill-editor --save ``` 2. 引入 ```javascript import Vue from 'vue' import VueQuillEditor from 'vue-quill-editor' // 引入样式 import 'quill/dist/quill.core.css' import 'quill/dist/quill.snow.css' import 'quill/dist/quill.bubble.css' Vue.use(VueQuillEditor) ``` 3. 使用 ```html <template> <div> <quill-editor v-model="content" :options="editorOption"></quill-editor> </div> </template> <script> export default { data() { return { content: '', editorOption: { // Quill 选项 } } } } </script> ``` 4. 组件选项 Vue-quill-editor 组件支持传递一个对象作为选项,这些选项将传递给 Quill 实例。这些选项可以在组件的 `options` 属性中设置。下面是一些常用的选项: - `placeholder`:编辑器的占位符文本 - `modules`:Quill 模块 - `theme`:Quill 主题 - `readOnly`:是否只读 - `formats`:Quill 支持的格式 更多选项可以参考 Quill文档。 5. 事件 Vue-quill-editor 组件支持一些事件: - `@blur`:失去焦点时触发 - `@focus`:获得焦点时触发 - `@ready`:编辑器初始化完成后触发 - `@change`:内容发生改变时触发 - `@selection-change`:选区发生改变时触发 6. 提交表单 由于 Vue-quill-editor 组件是一个自定义组件,需要在提交表单时手动获取编辑器内容并将其设置为表单数据。可以在表单提交前调用一个方法来实现这个功能,例如: ```html <template> <form @submit.prevent="submitForm"> <quill-editor v-model="content" :options="editorOption"></quill-editor> <button type="submit">提交</button> </form> </template> <script> export default { data() { return { content: '', editorOption: { // Quill 选项 } } }, methods: { submitForm() { // 获取编辑器内容 const content = this.$refs.quillEditor.quill.root.innerHTML // 设置表单数据 this.form.content = content // 提交表单 this.$http.post('/api/form', this.form) } } } </script> ``` 以上就是使用 Vue-quill-editor 组件的基本方法,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值