# 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; ```