tiptap写一个extension

news/2024/9/8 19:03:54 标签: javascript

Tiptap 是一个基于 ProseMirror 的富文本编辑器,允许开发者通过扩展(extensions)来定义编辑器的功能、行为和内容。下面是一个关于如何编写一个 Tiptap 扩展的简单介绍,以及它的工作原理。

Tiptap Extensions 简介

在 Tiptap 中,扩展是指对编辑器功能的增强,比如添加新的节点、标记或命令。每个扩展都是一个 JavaScript 类,通常继承自 Extension 类,并定义一些属性和方法。

工作原理

1、节点(Nodes)和标记(Marks):

Tiptap 允许创建自定义的节点和标记。节点通常用于定义文档的结构(如段落、标题、列表等),而标记则用于定义文本的样式(如粗体、斜体等)。

2、命令(Commands):

扩展可定义命令,用于处理用户输入,比如添加、删除或修改内容。

3、样式(Styles):

可通过 CSS 对节点和标记进行样式化,使其在编辑器中以特定的方式呈现。

4、事件(Events):

Tiptap 允许监听编辑器的各种事件,扩展可以基于这些事件执行特定的操作。

创建一个简单的 Tiptap 扩展

下面是一个创建自定义扩展的基本示例:

javascript">import { Extension } from '@tiptap/core'  

const CustomExtension = Extension.create({  
  name: 'customExtension',  

  // 定义节点  
  addNode() {  
    return {  
      // 自定义节点的名称  
      group: 'block',  
      content: 'inline*',  
      // 其他属性  
      defining: true,  
      // 自定义节点可以被渲染成什么样子  
      parseDOM: [{  
        tag: 'div.custom-node', // DOM 中的标签  
        getAttrs: node => ({  
          // 从 DOM 节点获取属性  
          class: node.className  
        }),  
      }],  
      toDOM: node => {  
        return ['div', { class: 'custom-node' }, 0] // 将节点渲染为 DOM  
      },  
    }  
  },  

  // 定义命令  
  addCommands() {  
    return {  
      // 添加命令来插入自定义节点  
      insertCustomNode: () => ({ commands }) => {  
        return commands.insertContent({  
          type: this.type.name, // 指向定义的节点类型  
        })  
      },  
    }  
  },  
})  

export default CustomExtension

使用扩展

创建完扩展后,在Tiptap 编辑器实例中使用它:

javascript">import { Editor } from '@tiptap/core'  
import CustomExtension from './CustomExtension'  

const editor = new Editor({  
  extensions: [  
    CustomExtension,  
  ],  
})  

editor.commands.insertCustomNode()  

http://www.niftyadmin.cn/n/5575504.html

相关文章

解析西门子PLC的String和WString

西门子PLC有两种字符串类型,String与WString String 用于存放英文数字标点符号等ASCII字符,每个字符占用一个字节 WString宽字符串用于存放中文、英文、数字等Unicode字符,每个字符占用两个字节 之前我搞过一篇解析String的 关于使用TCP-…

【C++】使用哈希表封装unordered_map与unordered_set

文章目录 1. unordered系列关联式容器1.1 unordered_set1.2 unordered_map 2. unordered_set/map的封装2.1 基本接口2.2 迭代器2.2.1 迭代器的结构2.2.2 set迭代器的封装2.2.3 map迭代器的封装 3.完整代码3.1HashTable3.2unordered_set3.3unordered_map 1. unordered系列关联式…

第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024,9月13-15)

第三届人工智能、物联网与云计算技术国际会议(AIoTC 2024)将于2024年9月13日-15日在中国武汉举行。 本次会议由华中师范大学伍伦贡联合研究院与南京大学联合主办、江苏省大数据区块链与智能信息专委会承办、江苏省概率统计学会、江苏省应用统计学会、Sir Forum、南京理工大学、…

java算法day25

java算法day25 广度优先搜索岛屿数量深搜岛屿数量广搜994 腐烂的橘子 广度优先搜索 核心:从起点出发,以起始点为中心一圈一圈进行搜索,一旦遇到终点,记录之前走过的节点就是一条最短路。搜索的方式是上下左右 一张图说明白模拟…

Redis zset 共享对象

前言 本文介绍 Redis 中 skiplist 编码的 zset 对象是如何共享对象的。 skiplist 编码的 zset 对象为了同时支持高效的点查询和范围查询,内部使用了跳表和哈希表。倘若将每个插入的元素都拷贝两份,分别插入跳表和哈希表,将浪费大量的内存&a…

【JavaScript】01数组原型对象的最后一个元素、计数器

题目一:数组原型对象的最后一个元素 请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素。如果数组中没有元素,则返回 -1 。 你可以假设数组是 JSON.parse 的输出结果。…

原理图----备份

从公司学到的电路图,做一个备份:

Docker重启策略和缩小镜像体积

目录 Docker重启策略 命令格式 命令选项 Docker缩小镜像体积 Docker重启策略 命令格式 docker run --restartno|always|on-failure|unless-stopped .... 命令选项 no:不管容器是正常退出还是异常退出,都不会重启容器。默认策略。always&#xf…