1
0
Fork 0
mirror of https://github.com/codex-team/codex.docs.git synced 2025-07-19 05:09:41 +02:00
codex.docs/src/frontend/js/classes/editor.js
2019-03-12 17:24:20 +03:00

113 lines
2.4 KiB
JavaScript

import EditorJS from '@editorjs/editorjs';
/**
* Block Tools for the Editor
*/
import Header from '@editorjs/header';
import Image from '@editorjs/image';
import CodeTool from '@editorjs/code';
import List from '@editorjs/list';
import Delimiter from '@editorjs/delimiter';
import Table from '@editorjs/table';
/**
* Inline Tools for the Editor
*/
import InlineCode from '@editorjs/inline-code';
import Marker from '@editorjs/marker';
/**
* Class for working with Editor.js
*/
export default class Editor {
/**
* Creates Editor instance
* @param {object} editorConfig - configuration object for Editor.js
* @param {object} data.blocks - data to start with
* @param {object} options
* @param {string} options.headerPlaceholder - placeholder for Header tool
*/
constructor(editorConfig = {}, options = {}) {
const defaultConfig = {
tools: {
header: {
class: Header,
inlineToolbar: ['link', 'marker', 'inlineCode'],
config: {
placeholder: options.headerPlaceholder || ''
}
},
image: {
class: Image,
inlineToolbar: true,
config: {
types: 'image/*, video/mp4',
endpoints: {
byFile: '/api/transport/image',
byUrl: '/api/transport/fetch'
},
additionalRequestData: {
map: JSON.stringify({
path: 'file:url',
size: 'file:size',
mimetype: 'file:mime'
})
}
}
},
code: {
class: CodeTool,
shortcut: 'CMD+SHIFT+D'
},
list: {
class: List,
inlineToolbar: true
},
delimiter: Delimiter,
table: {
class: Table,
inlineToolbar: true
},
/**
* Inline Tools
*/
inlineCode: {
class: InlineCode,
shortcut: 'CMD+SHIFT+C'
},
marker: {
class: Marker,
shortcut: 'CMD+SHIFT+M'
}
},
data: {
blocks: [
{
type: 'header',
data: {
text: '',
level: 2
}
}
]
}
};
this.editor = new EditorJS(Object.assign(defaultConfig, editorConfig));
}
/**
* Return Editor data
* @return {Promise.<{}>}
*/
save() {
return this.editor.saver.save();
}
}