Xnote est un éditeur riche en texte indépendant de haute performance sans tête et indépendant du cadre qui prend en charge la collaboration en ligne à plusieurs personnes. Fournit de riches fonctions d'édition de documents modernes.
Le Xnote sous-jacent repose sur le Framework de texte riche en open source TextBus et la vue de vue frontale. Par conséquent, vous pouvez continuer à étendre vos capacités sur cette base.
Démo en ligne
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 ( '编辑器准备完成。' )
} ) Pour implémenter le téléchargement de fichiers, vous devez implémenter l'interface 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 ( )
}
} ]
} ) 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>' ) Dans le document, la fonction @ humaine doit implémenter l'interface suivante pour se connecter aux informations utilisateur
export abstract class Organization {
abstract getMembers ( name ?: string ) : Promise < Member [ ] >
abstract atMember ( member : Member ) : void
}Ensuite, transmettez votre implémentation lorsque l'éditeur est initialisé
const editor = new Editor ( {
providers : [ {
provide : Organization ,
useValue : new YourOrganization ( )
} ]
} ) TextBus soutient naturellement la collaboration. Vous n'avez qu'à ajouter des informations de configuration de collaboration à l'élément de configuration de l'éditeur. Pour une configuration spécifique, vous pouvez vous référer à https://textbus.io/guide/collab/
const editor = new Editor ( {
collaborateConfig : {
userinfo : user , // 用户信息
createConnector ( yDoc ) : SyncConnector {
// 返回连接器
return new YWebsocketConnector ( 'wss://example.com' , 'docName' , yDoc )
}
}
} )