fields: add option for simple rich text on text field (#76013) #398
|
@ -2140,7 +2140,8 @@ def test_form_edit_text_field(pub):
|
|||
pub.site_options.write(fd)
|
||||
resp = app.get('/backoffice/forms/1/fields/1/')
|
||||
assert resp.form['display_mode'].options == [
|
||||
('Rich Text', False, None),
|
||||
('Rich Text (simple: bold, italic..)', False, None),
|
||||
('Rich Text (full: titles, lists...)', False, None),
|
||||
('Plain Text (with automatic paragraphs on blank lines)', True, None),
|
||||
('Plain Text (with linebreaks as typed)', False, None),
|
||||
]
|
||||
|
|
|
@ -114,7 +114,14 @@ def test_text(pub):
|
|||
fields.TextField(display_mode='rich').get_view_short_value('<p>foo</p>' * 15)
|
||||
== ('foo' * 10)[:27] + '(…)'
|
||||
)
|
||||
assert fields.TextField(display_mode='rich').get_view_value('<script></script><p>foo</p>') == '<p>foo</p>'
|
||||
assert (
|
||||
fields.TextField(display_mode='rich').get_view_value('<script></script><h1>bar</h1><p>foo</p>')
|
||||
== '<h1>bar</h1><p>foo</p>'
|
||||
)
|
||||
assert (
|
||||
fields.TextField(display_mode='basic-rich').get_view_value('<script></script><h1>bar</h1><p>foo</p>')
|
||||
== 'bar<p>foo</p>'
|
||||
)
|
||||
|
||||
form = Form(use_tokens=False)
|
||||
fields.TextField().add_to_form(form)
|
||||
|
@ -128,6 +135,14 @@ def test_text(pub):
|
|||
assert 'cols="12"' in str(form.render())
|
||||
assert 'rows="12"' in str(form.render())
|
||||
|
||||
form = Form(use_tokens=False)
|
||||
fields.TextField(display_mode='rich').add_to_form(form)
|
||||
assert 'data-godo-schema="full"' in str(form.render())
|
||||
|
||||
form = Form(use_tokens=False)
|
||||
fields.TextField(display_mode='basic-rich').add_to_form(form)
|
||||
assert 'data-godo-schema="basic"' in str(form.render())
|
||||
|
||||
|
||||
def test_text_anonymise(pub):
|
||||
formdef = FormDef()
|
||||
|
|
|
@ -57,6 +57,7 @@ from .qommon.form import (
|
|||
JsonpSingleSelectWidget,
|
||||
MapMarkerSelectionWidget,
|
||||
MapWidget,
|
||||
MiniRichTextWidget,
|
||||
MultiSelectWidget,
|
||||
PasswordEntryWidget,
|
||||
RadiobuttonsWidget,
|
||||
|
@ -1432,7 +1433,9 @@ class TextField(WidgetField):
|
|||
return changed
|
||||
|
||||
def perform_more_widget_changes(self, *args, **kwargs):
|
||||
if self.display_mode == 'rich':
|
||||
if self.display_mode == 'basic-rich':
|
||||
self.widget_class = MiniRichTextWidget
|
||||
elif self.display_mode == 'rich':
|
||||
self.widget_class = RichTextWidget
|
||||
|
||||
def fill_admin_form(self, form):
|
||||
|
@ -1455,7 +1458,8 @@ class TextField(WidgetField):
|
|||
display_options = []
|
||||
if get_publisher().get_site_option('enable-richtext-field'):
|
||||
display_options += [
|
||||
('rich', _('Rich Text')),
|
||||
('basic-rich', _('Rich Text (simple: bold, italic..)')),
|
||||
('rich', _('Rich Text (full: titles, lists...)')),
|
||||
]
|
||||
display_options += [
|
||||
('plain', _('Plain Text (with automatic paragraphs on blank lines)')),
|
||||
|
@ -1486,6 +1490,8 @@ class TextField(WidgetField):
|
|||
def get_view_value(self, value, **kwargs):
|
||||
if self.display_mode == 'pre':
|
||||
return htmltext('<p class="plain-text-pre">') + value + htmltext('</p>')
|
||||
elif self.display_mode == 'basic-rich':
|
||||
return htmltext(strip_some_tags(value, MiniRichTextWidget.ALL_TAGS))
|
||||
elif self.display_mode == 'rich':
|
||||
return htmltext(strip_some_tags(value, RichTextWidget.ALL_TAGS))
|
||||
else:
|
||||
|
@ -1499,7 +1505,7 @@ class TextField(WidgetField):
|
|||
return ''
|
||||
|
||||
def get_opendocument_node_value(self, value, formdata=None, **kwargs):
|
||||
if self.display_mode == 'rich':
|
||||
if self.display_mode in ('rich', 'basic-rich'):
|
||||
return
|
||||
paragraphs = []
|
||||
for paragraph in value.splitlines():
|
||||
|
@ -1510,12 +1516,12 @@ class TextField(WidgetField):
|
|||
return paragraphs
|
||||
|
||||
def get_view_short_value(self, value, max_len=30, **kwargs):
|
||||
if self.display_mode == 'rich':
|
||||
if self.display_mode in ('rich', 'basic-rich'):
|
||||
return ellipsize(str(strip_tags(value)), max_len)
|
||||
return ellipsize(str(value), max_len)
|
||||
|
||||
def get_json_value(self, value, **kwargs):
|
||||
if self.display_mode == 'rich':
|
||||
if self.display_mode in ('rich', 'basic-rich'):
|
||||
return str(self.get_view_value(value))
|
||||
return value
|
||||
|
||||
|
|
Loading…
Reference in New Issue