# ckeditor5
**Repository Path**: soddy/ckeditor5
## Basic Information
- **Project Name**: ckeditor5
- **Description**: 扩展ckeditor5富文本编辑器的功能
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 2
- **Created**: 2022-02-22
- **Last Updated**: 2024-05-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 富文本编辑器, ckeditor, upload, Video, Emoji
## README
# CKEditor 5 编辑器扩展
1.扩展CKEditor5支持本地视频文件上传功能,兼容vue,react
2.扩展了Emoji表情插件
## 环境
node v14+
## 如何继续扩展
1.将开发的插件放到 src/plugins 中
2.npm install 安装依赖
3.npm run build 重新编译CKEditor5
## 测试方法
1.启动测试接口,进入 testapi 文件夹,npm install 安装依赖,npm start 启动接口服务
2.进入 sample 文件夹,运行 index.html
## CKEditor 5 配置
以下不同框架环境config采用以下配置,全开经典,支持自由配置
```js
const CONFIG=
{
imageUpload: (file) => {
const formData = new FormData();
return new Promise((resolve, reject) => {
formData.append("file", file);
axios.post("http://127.0.0.1:8360/api/file/upload", formData).then(res => {
resolve({url: res.data.url})
})
})
},
videoUpload: (file) => {
const formData = new FormData();
return new Promise((resolve, reject) => {
formData.append("file", file);
axios.post("http://127.0.0.1:8360/api/file/upload", formData).then(res => {
resolve({url: res.data.url})
})
})
},
mediaEmbed: {
extraProviders: [
{
name: 'leo',
url: [
/(.*?)/,
],
html: match => {
const src = match.input;
return (
'
' +
'' +
'
'
);
}
},
]
},
licenseKey: '',
toolbar: {
items: [
'heading',
'|',
'bold',
'italic',
'underline',
'fontBackgroundColor',
'fontColor',
'fontSize',
'fontFamily',
'link',
'insertTable',
'imageUpload',
'mediaEmbed',
'|',
'indent',
'outdent',
'alignment',
'|',
'blockQuote',
'code',
'codeBlock',
'highlight',
'horizontalLine',
'numberedList',
'bulletedList',
'removeFormat',
'specialCharacters',
'emoji',
'restrictedEditingException',
'strikethrough',
'subscript',
'superscript',
'todoList',
'undo',
'redo'
]
},
language: 'zh-cn',
image: {
toolbar: [
'imageTextAlternative',
'imageStyle:inline',
'imageStyle:block',
'imageStyle:side',
'linkImage'
]
},
table: {
contentToolbar: [
'tableColumn',
'tableRow',
'mergeTableCells',
'tableCellProperties',
'tableProperties'
]
}
}
```
## vue
#### 步骤一装包
```sh
npm install --save @ckeditor/ckeditor5-vue2 @leodigital/ckeditor5
```
#### 步骤二导包
main.js
```vue2
import Vue from 'vue'
import CKEditor from '@ckeditor/ckeditor5-vue2'
// 再main.js导入import
Vue.use(CKEditor)
```
#### 步骤三用包
```vue2
```
## react
#### 步骤一装包
```sh
npm install --save @ckeditor/ckeditor5-react @leodigital/ckeditor5
```
#### 步骤二用包
###### Hook方式
```react
import axios from 'axios';
import { CKEditor } from '@ckeditor/ckeditor5-react';
import ClassicEditor from '@leodigital/ckeditor5';
const CONFIG = {
// 这里放上面的配置
}
// 扩展config中的方法
CONFIG.imageUpload = CONFIG.videoUpload = (file) => {
const config = {
headers: {
'Content-Type': 'mutipart/form-data;charset=UTF-8'
}
}
const formData = new FormData()
formData.append('file', file)
return new Promise((resolve) => {
// 使用自己的上传接口
axios.post('/api/file/upload', formData, config).then(res => {
resolve({url: res.data.url})
})
})
}
const Ck = () => {
return (
<>
>
)
}
export default Ck
```
###### Class方式
```react
import { Component } from 'react';
import axios from 'axios';
import { CKEditor } from '@ckeditor/ckeditor5-react';
import ClassicEditor from '@leodigital/ckeditor5';
const CONFIG = {
// 这里放上面的配置
}
// 扩展config中的方法
CONFIG.imageUpload = CONFIG.videoUpload = (file) => {
const config = {
headers: {
'Content-Type': 'mutipart/form-data;charset=UTF-8'
}
}
const formData = new FormData()
formData.append('file', file)
return new Promise((resolve) => {
// 使用自己的上传接口
axios.post('/api/file/upload', formData, config).then(res => {
resolve({url: res.data.url})
})
})
}
class App extends Component {
render() {
return (
Using CKEditor 5 build in React
);
}
}
export default App;
```