Add editor source files
This commit is contained in:
parent
219981913e
commit
8189a68fa9
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@
|
|||
wiki
|
||||
data/
|
||||
session/
|
||||
editor/node_modules/*
|
||||
|
|
4046
editor/package-lock.json
generated
Normal file
4046
editor/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
32
editor/package.json
Normal file
32
editor/package.json
Normal file
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"devDependencies": {
|
||||
"@editorjs/attaches": "^1.0.1",
|
||||
"webpack": "^4.39.2",
|
||||
"webpack-cli": "^3.3.7"
|
||||
},
|
||||
"dependencies": {
|
||||
"@editorjs/checklist": "^1.1.0",
|
||||
"@editorjs/code": "^2.4.1",
|
||||
"@editorjs/editorjs": "^2.15.0",
|
||||
"@editorjs/header": "^2.3.0",
|
||||
"@editorjs/image": "^2.3.1",
|
||||
"@editorjs/link": "^2.1.3",
|
||||
"@editorjs/list": "^1.4.0",
|
||||
"@editorjs/marker": "^1.2.1",
|
||||
"@editorjs/table": "^1.2.0",
|
||||
"axios": "^0.19.0",
|
||||
"clean-webpack-plugin": "^3.0.0",
|
||||
"css-loader": "^3.2.0",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"node-sass": "^4.12.0",
|
||||
"sass-loader": "^7.3.1",
|
||||
"style-loader": "^1.0.0",
|
||||
"webpack-dev-server": "^3.8.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"watch": "webpack --watch",
|
||||
"start": "webpack-dev-server --open --hot",
|
||||
"build": "webpack"
|
||||
}
|
||||
}
|
109
editor/src/index.js
Normal file
109
editor/src/index.js
Normal file
|
@ -0,0 +1,109 @@
|
|||
import EditorJS from '@editorjs/editorjs';
|
||||
|
||||
import Header from '@editorjs/header';
|
||||
import List from '@editorjs/list';
|
||||
import Table from '@editorjs/table';
|
||||
import Checklist from '@editorjs/checklist';
|
||||
import Code from '@editorjs/code';
|
||||
import Marker from '@editorjs/marker';
|
||||
import Link from '@editorjs/link';
|
||||
import Attaches from '@editorjs/attaches';
|
||||
import Image from '@editorjs/image';
|
||||
|
||||
import axios from 'axios';
|
||||
import qs from 'querystring'
|
||||
|
||||
import './styles.css';
|
||||
|
||||
function addSaver(editor, saveUrl, page, beforeSave) {
|
||||
return {
|
||||
save() {
|
||||
return editor.save().then(outputData => {
|
||||
beforeSave()
|
||||
let data = {
|
||||
'json': 1,
|
||||
'p': page,
|
||||
'summary': "JSON test",
|
||||
'content': JSON.stringify(outputData),
|
||||
};
|
||||
return axios.post(saveUrl, qs.encode(data))
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Indicator(element, timeout) {
|
||||
let timeoutId;
|
||||
|
||||
return {
|
||||
done() {
|
||||
timeoutId = setTimeout(() => {
|
||||
element.classList.add('hidden')
|
||||
}, timeout*1000);
|
||||
},
|
||||
|
||||
setText(text) {
|
||||
if (timeoutId) {
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = null;
|
||||
}
|
||||
element.innerText = text;
|
||||
element.classList.remove('hidden')
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
function addIndicator(editor, indicator) {
|
||||
return {
|
||||
save() {
|
||||
editor.save().then(() => {
|
||||
indicator.setText('saved!');
|
||||
indicator.done();
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const editor = new EditorJS({
|
||||
holder: 'editor',
|
||||
tools: {
|
||||
header: {
|
||||
class: Header
|
||||
},
|
||||
list: List,
|
||||
table: Table,
|
||||
checklist: Checklist,
|
||||
code: Code,
|
||||
marker: Marker,
|
||||
link: {
|
||||
class: Link,
|
||||
config: {
|
||||
endpoint: '/fetchLink'
|
||||
}
|
||||
},
|
||||
attaches: {
|
||||
class: Attaches
|
||||
},
|
||||
image: {
|
||||
class: Image
|
||||
}
|
||||
},
|
||||
onChange() {
|
||||
let element = document.getElementById('editor');
|
||||
let indicator = Indicator(document.getElementById('save-indicator'), 2);
|
||||
let saveUrl = element.dataset.saveurl;
|
||||
let page = element.dataset.page;
|
||||
|
||||
indicator.setText('has changes...');
|
||||
addIndicator(
|
||||
addSaver(editor, saveUrl, page, () => indicator.setText('saving...')),
|
||||
indicator
|
||||
).save()
|
||||
},
|
||||
onReady() {
|
||||
let data = document.getElementById('editor').dataset.input;
|
||||
if (data) {
|
||||
editor.blocks.render(JSON.parse(data));
|
||||
}
|
||||
}
|
||||
});
|
18
editor/src/styles.css
Normal file
18
editor/src/styles.css
Normal file
|
@ -0,0 +1,18 @@
|
|||
#editor {
|
||||
max-width: 650px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#save-indicator {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: lightskyblue;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
padding: 3px;
|
||||
z-index: 50;
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
33
editor/webpack.config.js
Normal file
33
editor/webpack.config.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
const path = require('path');
|
||||
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
|
||||
|
||||
module.exports = {
|
||||
mode: 'development',
|
||||
entry: {
|
||||
index: './src/index.js'
|
||||
},
|
||||
output: {
|
||||
filename: '[name].bundle.js',
|
||||
path: path.resolve(__dirname, 'dist')
|
||||
},
|
||||
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: ['style-loader', 'css-loader']
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
plugins: [
|
||||
new CleanWebpackPlugin()
|
||||
],
|
||||
|
||||
devServer: {
|
||||
contentBase: './dist',
|
||||
hot: true
|
||||
},
|
||||
};
|
Loading…
Reference in New Issue
Block a user