codex-team / codex.editor
PHP backend implementation for the Editor.js
Requires
- php: >=5.6
- ezyang/htmlpurifier: ^4.8
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- phpunit/phpunit: 5.4.*
This package is not auto-updated.
Last update: 2024-11-04 08:05:54 UTC
README
Server-side implementation sample for the Editor.js. It contains data validation, HTML sanitization and converts output from Editor.js to the Block objects.
Installation
To install lib use composer:
composer require codex-team/editor.js:dev-master
Guide
Add this line at the top of your PHP script
use \EditorJS\EditorJS;
this line allows you to get editors class that has the following method:
getBlocks
- return array of sanitized blocks
Basic usage
You can get data from editor and send as param to editor's server validator like
try { // Initialize Editor backend and validate structure $editor = new EditorJS( $data, $configuration ); // Get sanitized blocks (according to the rules from configuration) $blocks = $editor->getBlocks(); } catch (\EditorJSException $e) { // process exception }
Editor.js constructor has the following arguments:
$data
— JSON string with data from CodeX Editor frontend.
$configuration
— JSON string with CodeX Editor tools configuration (see an example in the following paragraph).
Configuration file
You can manually configure validation rules for different types of Editor.js tools (header, paragraph, list, quote and other). You can also extend configuration with new tools.
Sample validation rule set:
{
"tools": {
"header": {
"text": {
"type": "string",
"required": true,
"allowedTags": "b,i,a[href]"
},
"level": {
"type": "int",
"canBeOnly": [2, 3, 4]
}
}
}
}
Where:
tools
— array of supported Editor.js tools.
header
— defines header
tool settings.
text
and level
— parameters in header
tool structure.
text
is a required string, which will be sanitized except b, i and a[href] tags.
level
is an optional integer that can be only 0, 1 or 2.
allowedTags
param should follow HTMLPurifier format.
There are three common parameters for every block:
type
(required) — type of the block
allowedTags
(optional) — HTML tags in string that won't be removed
Other values are allowed according to the HTMLPurifier format.
Example:
"paragraph": {
"text": {
"type": "string",
"allowedTags": "i,b,u,a[href]"
}
}
canBeOnly
(optional) — define set of allowed values
Example:
"quote": {
"text": {
"type": "string"
},
"caption": {
"type": "string"
},
"alignment": {
"type": "string",
"canBeOnly": ["left", "center"]
}
}
Short settings syntax
Some syntax sugar has been added.
Tool settings can be a string
. It defines tool's type with default settings.
"header": { "text": "string", "level": "int" }
It evaluates to:
"header": { "text": { "type": "string", "allowedTags": "", "required": true }, "level": { "type": "int", "allowedTags": "", "required": true } }
Tool settings can be an array
. It defines a set of allowed values without sanitizing.
"quote": { "alignment": ["left", "center"], "caption": "string" }
It evaluates to:
"quote": { "alignment": { "type": "string", "canBeOnly": ["left", "center"] }, "caption": { "type": "string", "allowedTags": "", "required": true } }
Another configuration example: /tests/samples/syntax-sugar.json
Nested tools
Tools can contain nested values. It is possible with the array
type.
Let the JSON input be the following:
{
"blocks": [
"type": list,
"data": {
"items": [
"first", "second", "third"
],
"style": {
"background-color": "red",
"font-color": "black"
}
}
]
}
We can define validation rules for this input in the config:
"list": {
"items": {
"type": "array",
"data": {
"-": {
"type": "string",
"allowedTags": "i,b,u"
}
}
},
"style": {
"type": "array",
"data": {
"background-color": {
"type": "string",
"canBeOnly": ["red", "blue", "green"]
},
"font-color": {
"type": "string",
"canBeOnly": ["black", "white"]
}
}
}
}
where data
is the container for values of the array and -
is the special shortcut for values if the array is sequential.
Another configuration example: /tests/samples/test-config.json
Exceptions
EditorJS class
BlockHandler class
ConfigLoader class
Make Tools
If you connect a new Tool on the frontend-side, then you should create a configuration rule for that Tool to validate it on server-side.
Repository
https://github.com/codex-editor/editorjs-php/
About CodeX
We are small team of Web-developing fans consisting of IFMO students and graduates located in St. Petersburg, Russia. Feel free to give us a feedback on team@ifmo.su