fly63前端网

www.fly63.com

首页文章资源工具教程 栏目
  • 关于我们
  • 网站投稿
  • 赞助一下
搜索

在线工具_工作生活好帮手

打造各种简单、易用、便捷的在线工具,网友无需注册和下载安装即可使用

点击查看

关闭

提交网站

TextBus
分享
复制链接
新浪微博
QQ 好友

扫一扫分享

网站地址:https://textbus.tanboui.com/
GitHub:https://github.com/textbus/textbus
网站描述:一个面向未来的 web 富文本框架

extBus 是一个面向未来的 web 富文本框架,同时也可以作为一个开箱即用的富文本编辑器,拥有非常好的扩展性和可定制性,是驱动复杂富文本的不二之选!

一直致力于让富文本开发也能像普通前端框架一样,通过简明易懂的 api 和少量的约定,即可编写出健壮的,可预期的行为。在 TextBus 1.0 的时,我们为此做了非常多的探索和努力,取得了不错的成果,但也因为如此,1.0 的设计在某些方面还留下一些遗憾。

幸运的是,TextBus 2.0 即将面世,我们在 1.0 的成果之上,重新设计了整个架构,致力于更简洁的 api,更友好的开发接入方式。

  • 重新设计了组件系统,去掉了大家难以理解的装饰器,改为用类似 vue 的 setup 形式开发组件,并提供了一系列的 hooks 供大家定制交互行为
  • 重新设计了数据模型,可根据用户的操作生成特定的底层原子命令,这让细粒度的历史记录和文档协同成为可能
  • 核心架构脱离了具体平台,让 TextBus 的能力不仅限于在 PC 端,通过编写特定的中间层,可以方便的在移动端,甚至小程序上实现丰富的富文本能力
  • 重写了渲染层,现在 TextBus 2.0 大多数情况下更新视图仅需要 1ms 时间,比 1.0 性能更好

安装

npm install @textbus/editor @textbus/core @textbus/browser

使用

import { createEditor } from '@textbus/editor'

const editor = createEditor('#editor')

editor.onChange.subscribe(() => {
const content = editor.getContent()
console.log(content)
})

组件

和前端框架一样,组件是指带有特定交互行为或结构的一个单独功能模块。要创建一个组件,只需要调用 defineComponent 函数,并编写特定的配置项即可。

import { defineComponent, ContentType, useSlots } from '@textbus/core'

export const myComponent = defineComponent({
type: ContentType.BlockComponent, // 设置组件类型
name: 'MyComponent', // 组件的名字,不可重复
transform(translator, state) { // 将当前组件 json 数据转换为实例
return translator.createSlot(state)
},
setup(slot) {
// 组件的具体逻辑
const slots = useSlots(slot)

return {
render(isOutputMode, slotRender) {
return (
<my-component>
{
slotRender(slots.get(0), () => {
return <div/>
})
}
</my-component>
)
},
toJSON() {
slots.get(0).toJSON()
}
}
}
})

上面示例是一个最简单的组件,但它基本包含了 TextBus 组件的基本形态,更复杂的组件,无非是在这个基础上增加更多的逻辑而已。

组件加载器

组件加载器用于从文档中识别并读取出组件的必要信息,从而生成 TextBus 的组件实例的工具类,由于 TextBus 是跨平台的,所以不同平台的加载器也可能是不同的,我们以 PC 平台为例。

import { Slot, ContentType } from '@textbus/core'

export const myComponentLoader = {
  match(element) {
    // 匹配一个 dom 元素,返回 true 即表示为当前组件
    return element.tagName.toLowerCase() === 'my-component'
  },
  read(element, injector, slotParser) {
    // 读取当前 DOM 元素下组件指定的结构,并返回组件实例
    const slot = slotParser(new Slot([
      ContentType.Text,
      ContentType.InlineComponent
    ]), element.children[0])
    return paragraphComponent.createInstance(injector, slot)
  },
  component: myComponent
}

格式

格式是指对文档中,插槽内(可编辑片段)的文本进行美化或增强的附加信息,如加粗、对齐方式等。

import { FormatType, VElement } from '@textbus/core'

export const boldFormatter = {
  type: FormatType.InlineTag,
  name: 'bold',
  render() {
    return new VElement('strong')
  }
}

格式加载器

格式加载器用于从文档中识别并读取出格式信息,由于 TextBus 是跨平台的,所以不同平台的加载器也可能是不同的,我们以 PC 平台为例。

export const boldFormatLoader = {
  match(element) {
    return ['strong', 'b'].includes(element.tagName.toLowerCase()) || 
      ['bold', '500', '600', '700', '800', '900'].includes(element.style.fontWeight)
  },
  read() {
    return true
  },
  formatter: boldFormatter
}

创建自定义编辑器

把我们定义好的组件和格式添加到编辑器中。

import { createEditor } from '@textbus/editor'

import { myComponentLoader } from './my-component'
import { boldFormatLoader } from './bold-formatter'

const editor = createEditor('#editor', {
  componentLoaders: [
    myComponentLoader
  ],
  formatLoaders: [
    boldFormatLoader
  ]
})

至此,我们就扩展了自己的组件和格式,我们可以按照此方法,继续编写出任意你想要的组件和格式。


链接: https://fly63.com/nav/3471

more>>
相关栏目
layer
layer是一款口碑极佳的web弹层组件
点击进入GitHub
iScroll.js
IScroll是移动页面上被使用的一款仿系统滚动插件。
官网GitHub
wangEditor
基于javascript和css开发的 Web富文本编辑器
官网GitHub
ueditor
由百度web前端研发部开发所见即所得富文本web编辑器
官网GitHub
highlight
Highlight.js 是一个用 JavaScript 写的代码高亮插件,在客户端和服务端都能工作。
官网GitHub
UglifyJS
一个js 解释器、最小化器、压缩器、美化器工具集
官网GitHub
lozad.js
高性能,轻量级,可配置的懒加载图片工具
官网GitHub
Sortable.js
简单灵活的 JavaScript 拖放排序插件
官网GitHub
validate.js
表单提供了强大的验证功能,让客户端表单验证变得更简单
官网GitHub
Draggin.js
一款兼容移动手机的js拖拽插件
官网GitHub
lazysizes.js
响应式图像延迟加载JS插件【懒加载】
官网GitHub
cropper.js
通过canvas实现图片裁剪
官网GitHub
clipboard.js
浏览器中复制文本到剪贴板的插件,不需要Flash,仅仅2kb
官网GitHub
siema
轻量级简单的纯 Js轮播插件
官网GitHub
Mermrender
用于生成序列和UML图的RESTful渲染管道
官网GitHub
Editor.js
JSON格式输出数据的富文本和媒体编辑器
官网GitHub

手机预览