@textbus/xnote
TypeScript icon, indicating that this package has built-in type declarations

0.0.1-alpha.50 • Public • Published

XNote

Xnote 是一个无头、高性能、与框架无关的富文本编辑器,支持多人在线协作。提供了丰富的现代文档编辑功能。

Xnote 底层依赖于开源富文本框架 Textbus 和前端视图 Viewfly。因此,你可以在此基础上继续扩展自己的功能。

在线演示

在线演示

安装

npm install @textbus/xnote katex

使用

import 'katex/dist/katex.min.css'
import { Editor } from '@textbus/xnote'

const editor = new Editor()
editor.mount(document.getElementById('editor')).then(() => {
  console.log('编辑器准备完成。')
})

文件上传

要实现文件上传需实现 FileUploader 接口

import { FileUploader } from '@textbus/xnote'

class YourUploader extends FileUploader {
  uploadFile(type: string): string | Promise<string> {
    if (type === 'image') {
      return 'imageUrl'
    }
    if (type === 'video') {
      return 'videoUrl'
    }
  }
}

const editor = new Editor({
  providers: [{
    provide: FileUploader,
    useFactory() {
      return new YourFileUplader()
    }
  }]
})

粘贴图片 Base64 转 URL

base64 转 url 实现思路为 base64 转

import { Commander } from '@textbus/core'
import { Injectable } from '@viewfly/core'
import { ImageComponent } from '@textbus/xnote'

@Injectable()
class YourCommander extends Commander {
  paste(slot: Slot, text: string) {
    slot.sliceContent().forEach(content => {
      if (content instanceof ImageComponent) {
        const base64 = content.state.url
        // base64 转 url,请自行实现
        content.state.url = 'https://xxx.com/xxx.jpg'
      }
    })
    
    // 待图片转换完成后,可调用超类的 paste 方法
    super.paste(slot, text)
    return true
  }
}

const editor = new Editor({
  providers: [{
    provide: Commander,
    useClass: YourCommander
  }]
})

获取 HTML

const html = editor.getHTML()

设置初始 HTML

const editor = new Editor({
  content: '<div>HTML 内容</div>'
})

Package Sidebar

Install

npm i @textbus/xnote

Weekly Downloads

500

Version

0.0.1-alpha.50

License

none

Unpacked Size

691 kB

Total Files

99

Last publish

Collaborators

  • textbus