Xnote ist ein kopfloser, hochleistungsfähiger, rahmenunabhängiger, reicher Texteditor, der die Online-Zusammenarbeit mit mehreren Personen unterstützt. Bietet reichhaltige moderne Dokumentbearbeitungsfunktionen.
Der zugrunde liegende Xnote basiert auf dem Open Source Rich Text Framework Textbus und der Front-End-Ansichtsansicht. Daher können Sie Ihre Fähigkeiten auf dieser Grundlage weiter erweitern.
Online -Demo
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 ( '编辑器准备完成。' )
} ) Um das Datei -Upload zu implementieren, müssen Sie die DateiEmploader -Schnittstelle implementieren
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 ( )
}
} ]
} ) 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
} ]
} ) const html = editor . getHTML ( ) const editor = new Editor ( {
content : '<div>HTML 内容</div>'
} ) editor . setContent ( '<p>你好!</p>' ) Im Dokument muss die @ Human -Funktion die folgende Schnittstelle implementieren, um eine Verbindung zu Benutzerinformationen herzustellen
export abstract class Organization {
abstract getMembers ( name ?: string ) : Promise < Member [ ] >
abstract atMember ( member : Member ) : void
}Geben Sie dann Ihre Implementierung weiter, wenn der Editor initialisiert wird
const editor = new Editor ( {
providers : [ {
provide : Organization ,
useValue : new YourOrganization ( )
} ]
} ) Textbus unterstützt natürlich die Zusammenarbeit. Sie müssen nur die Konfigurationsinformationen der Zusammenarbeit zum Editor -Konfigurationselement hinzufügen. Für eine bestimmte Konfiguration finden Sie unter https://textbus.io/guide/collab/
const editor = new Editor ( {
collaborateConfig : {
userinfo : user , // 用户信息
createConnector ( yDoc ) : SyncConnector {
// 返回连接器
return new YWebsocketConnector ( 'wss://example.com' , 'docName' , yDoc )
}
}
} )