From 96eab7937c91f59a239317a0183555efe009a87f Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 15 Dec 2017 16:31:19 +0000 Subject: [PATCH] Ensure that draftail contentstate is never empty --- wagtail/admin/rich_text/converters/contentstate.py | 6 ++++++ wagtail/admin/rich_text/editors/draftail/__init__.py | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/wagtail/admin/rich_text/converters/contentstate.py b/wagtail/admin/rich_text/converters/contentstate.py index d33a03d912..5b4e99d1c6 100644 --- a/wagtail/admin/rich_text/converters/contentstate.py +++ b/wagtail/admin/rich_text/converters/contentstate.py @@ -7,6 +7,7 @@ from draftjs_exporter.defaults import render_children from draftjs_exporter.dom import DOM from draftjs_exporter.html import HTML as HTMLExporter +from wagtail.admin.rich_text.converters.contentstate_models import Block from wagtail.admin.rich_text.converters.html_to_contentstate import HtmlToContentStateHandler from wagtail.core.rich_text import features as feature_registry @@ -87,6 +88,11 @@ class ContentstateConverter(): def from_database_format(self, html): self.html_to_contentstate_handler.reset() self.html_to_contentstate_handler.feed(html) + + if not self.html_to_contentstate_handler.contentstate.blocks: + # add an empty paragraph block to make contentstate valid + self.html_to_contentstate_handler.add_block(Block('unstyled', depth=0)) + return self.html_to_contentstate_handler.contentstate.as_json(indent=4, separators=(',', ': ')) def to_database_format(self, contentstate_json): diff --git a/wagtail/admin/rich_text/editors/draftail/__init__.py b/wagtail/admin/rich_text/editors/draftail/__init__.py index f7ba4af5a1..7865e42b69 100644 --- a/wagtail/admin/rich_text/editors/draftail/__init__.py +++ b/wagtail/admin/rich_text/editors/draftail/__init__.py @@ -35,9 +35,9 @@ class DraftailRichTextArea(WidgetWithScript, widgets.HiddenInput): def render(self, name, value, attrs=None): if value is None: - translated_value = None - else: - translated_value = self.converter.from_database_format(value) + value = '' + + translated_value = self.converter.from_database_format(value) return super().render(name, translated_value, attrs) def render_js_init(self, id_, name, value):