Update Draftail integration to latest API

pull/4136/head
Thibaud Colas 2018-01-10 23:47:49 +02:00
rodzic a741f3b7a6
commit 382d59d1f3
6 zmienionych plików z 39 dodań i 19 usunięć

Wyświetl plik

@ -1,3 +1,4 @@
@import '../../../../node_modules/draft-js/dist/Draft';
@import '../../../../node_modules/draftail/dist/draftail'; @import '../../../../node_modules/draftail/dist/draftail';
// Give each block element eg. paragraph some spacing so we don't end up // Give each block element eg. paragraph some spacing so we don't end up

Wyświetl plik

@ -2,6 +2,8 @@ import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import DraftailEditor from 'draftail'; import DraftailEditor from 'draftail';
import Icon from '../Icon/Icon';
import decorators from './decorators'; import decorators from './decorators';
import sources from './sources'; import sources from './sources';
import registry from './registry'; import registry from './registry';
@ -16,12 +18,28 @@ export const initEditor = (fieldName, options = {}) => {
field.value = JSON.stringify(rawContentState || {}); field.value = JSON.stringify(rawContentState || {});
}; };
let blockTypes;
let inlineStyles;
let entityTypes;
if (options && options.blockTypes) {
blockTypes = options.blockTypes.map(type => Object.assign(type, {
icon: <Icon name={type.icon} />,
}));
}
if (options && options.inlineStyles) {
inlineStyles = options.inlineStyles.map(type => Object.assign(type, {
icon: <Icon name={type.icon} />,
}));
}
if (options && options.entityTypes) { if (options && options.entityTypes) {
// eslint-disable-next-line no-param-reassign entityTypes = options.entityTypes.map(type => Object.assign(type, {
options.entityTypes = options.entityTypes.map(entity => Object.assign(entity, { icon: <Icon name={type.icon} />,
source: registry.getSource(entity.source), source: registry.getSource(type.source),
strategy: registry.getStrategy(entity.type) || null, strategy: registry.getStrategy(type.type) || null,
decorator: registry.getDecorator(entity.decorator), decorator: registry.getDecorator(type.decorator),
})); }));
} }
@ -35,6 +53,9 @@ export const initEditor = (fieldName, options = {}) => {
onSave={serialiseInputValue} onSave={serialiseInputValue}
placeholder="Write here…" placeholder="Write here…"
{...options} {...options}
blockTypes={blockTypes}
inlineStyles={inlineStyles}
entityTypes={entityTypes}
/> />
); );

Wyświetl plik

@ -339,7 +339,7 @@ def register_core_features(features):
}) })
features.register_editor_plugin( features.register_editor_plugin(
'draftail', 'ul', draftail_features.BlockFeature({ 'draftail', 'ul', draftail_features.BlockFeature({
'label': 'UL', 'type': BLOCK_TYPES.UNORDERED_LIST_ITEM, 'icon': 'icon-list-ul' 'type': BLOCK_TYPES.UNORDERED_LIST_ITEM, 'icon': 'list-ul'
}) })
) )
features.register_converter_rule('contentstate', 'ul', { features.register_converter_rule('contentstate', 'ul', {
@ -353,7 +353,7 @@ def register_core_features(features):
}) })
features.register_editor_plugin( features.register_editor_plugin(
'draftail', 'ol', draftail_features.BlockFeature({ 'draftail', 'ol', draftail_features.BlockFeature({
'label': 'OL', 'type': BLOCK_TYPES.ORDERED_LIST_ITEM, 'icon': 'icon-list-ol' 'type': BLOCK_TYPES.ORDERED_LIST_ITEM, 'icon': 'list-ol'
}) })
) )
features.register_converter_rule('contentstate', 'ol', { features.register_converter_rule('contentstate', 'ol', {
@ -368,7 +368,7 @@ def register_core_features(features):
features.register_editor_plugin( features.register_editor_plugin(
'draftail', 'bold', draftail_features.InlineStyleFeature({ 'draftail', 'bold', draftail_features.InlineStyleFeature({
'label': 'Bold', 'type': INLINE_STYLES.BOLD, 'icon': 'icon-bold' 'type': INLINE_STYLES.BOLD, 'icon': 'bold'
}) })
) )
features.register_converter_rule('contentstate', 'bold', { features.register_converter_rule('contentstate', 'bold', {
@ -382,7 +382,7 @@ def register_core_features(features):
}) })
features.register_editor_plugin( features.register_editor_plugin(
'draftail', 'italic', draftail_features.InlineStyleFeature({ 'draftail', 'italic', draftail_features.InlineStyleFeature({
'label': 'Italic', 'type': INLINE_STYLES.ITALIC, 'icon': 'icon-italic' 'type': INLINE_STYLES.ITALIC, 'icon': 'italic'
}) })
) )
features.register_converter_rule('contentstate', 'italic', { features.register_converter_rule('contentstate', 'italic', {
@ -397,9 +397,8 @@ def register_core_features(features):
features.register_editor_plugin( features.register_editor_plugin(
'draftail', 'link', draftail_features.EntityFeature({ 'draftail', 'link', draftail_features.EntityFeature({
'label': 'Link',
'type': ENTITY_TYPES.LINK, 'type': ENTITY_TYPES.LINK,
'icon': 'icon-link', 'icon': 'link',
'source': 'LinkSource', 'source': 'LinkSource',
'decorator': 'Link', 'decorator': 'Link',
}) })

Wyświetl plik

@ -89,9 +89,9 @@ def register_document_feature(features):
) )
features.register_editor_plugin( features.register_editor_plugin(
'draftail', 'document-link', draftail_features.EntityFeature({ 'draftail', 'document-link', draftail_features.EntityFeature({
'label': 'Document',
'type': ENTITY_TYPES.DOCUMENT, 'type': ENTITY_TYPES.DOCUMENT,
'icon': 'icon-doc-full', 'icon': 'doc-full',
'description': 'Document',
'source': 'DocumentSource', 'source': 'DocumentSource',
'decorator': 'Document', 'decorator': 'Document',
}) })

Wyświetl plik

@ -53,11 +53,11 @@ def register_embed_feature(features):
# define a draftail plugin to use when the 'embed' feature is active # define a draftail plugin to use when the 'embed' feature is active
features.register_editor_plugin( features.register_editor_plugin(
'draftail', 'embed', draftail_features.EntityFeature({ 'draftail', 'embed', draftail_features.EntityFeature({
'label': 'Embed',
'type': ENTITY_TYPES.EMBED, 'type': ENTITY_TYPES.EMBED,
'icon': 'icon-media', 'icon': 'media',
'description': 'Embed',
'source': 'EmbedSource', 'source': 'EmbedSource',
'decorator': 'Embed', 'block': 'EmbedBlock',
}) })
) )

Wyświetl plik

@ -99,12 +99,11 @@ class ImageFeature(EntityFeature):
format_defs = [get_image_format(f) for f in image_formats] format_defs = [get_image_format(f) for f in image_formats]
super().__init__({ super().__init__({
'label': 'Image',
'type': ENTITY_TYPES.IMAGE, 'type': ENTITY_TYPES.IMAGE,
'icon': 'icon-image', 'icon': 'image',
'imageFormats': [{'label': str(f.label), 'value': f.name} for f in format_defs], 'imageFormats': [{'label': str(f.label), 'value': f.name} for f in format_defs],
'source': 'ImageSource', 'source': 'ImageSource',
'decorator': 'Image', 'block': 'ImageBlock',
}) })