workflows: use a rich text widget to configure display message action (#27993) #797
|
@ -3,7 +3,8 @@ from quixote import cleanup
|
|||
|
||||
from wcs.workflows import Workflow
|
||||
|
||||
from ..utilities import clean_temporary_pub, create_temporary_pub
|
||||
from ..admin_pages.test_all import create_superuser
|
||||
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
|
||||
|
||||
|
||||
def setup_module(module):
|
||||
|
@ -42,3 +43,22 @@ def test_display_message_migrate(pub):
|
|||
workflow.migrate()
|
||||
assert not workflow.possible_status[0].items[0].level
|
||||
assert workflow.possible_status[0].items[0].message == '<div class="errornotice blah">message</div>'
|
||||
|
||||
|
||||
def test_display_message_rich_text(pub):
|
||||
create_superuser(pub)
|
||||
|
||||
workflow = Workflow(name='display message to')
|
||||
st1 = workflow.add_status('Status1', 'st1')
|
||||
display_message = st1.add_action('displaymsg')
|
||||
display_message.message = '<p>hello world</p>'
|
||||
workflow.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get(display_message.get_admin_url())
|
||||
assert resp.pyquery('textarea[data-godo-schema]') # godo
|
||||
|
||||
display_message.message = '<table><tr><td>hello world</td></tr></table>'
|
||||
workflow.store()
|
||||
resp = app.get(display_message.get_admin_url())
|
||||
assert resp.pyquery('textarea[data-config]') # ckeditor
|
||||
|
|
|
@ -3962,3 +3962,11 @@ class DjangoConditionWidget(StringWidget):
|
|||
Condition({'type': 'django', 'value': self.value}).validate()
|
||||
except ValidationError as e:
|
||||
self.set_error(str(e))
|
||||
|
||||
|
||||
def get_rich_text_widget_class(content):
|
||||
# use godo.js if all tags in existing content are supported
|
||||
tags = set(re.findall(r'<([a-z]+)[\s>]', content or ''))
|
||||
if tags.issubset(set(RichTextWidget.ALL_TAGS)):
|
||||
return RichTextWidget
|
||||
return WysiwygTextWidget
|
||||
|
||||
|
|
|
@ -21,7 +21,12 @@ from quixote import get_publisher
|
|||
from quixote.html import htmltext
|
||||
|
||||
from wcs.qommon import _, ezt, misc
|
||||
from wcs.qommon.form import ComputedExpressionWidget, SingleSelectWidget, TextWidget, WidgetListOfRoles
|
||||
from wcs.qommon.form import (
|
||||
ComputedExpressionWidget,
|
||||
SingleSelectWidget,
|
||||
WidgetListOfRoles,
|
||||
get_rich_text_widget_class,
|
||||
)
|
||||
from wcs.qommon.template import Template
|
||||
from wcs.workflows import WorkflowGlobalAction, WorkflowStatusItem, register_item_class
|
||||
|
||||
|
@ -107,7 +112,7 @@ class DisplayMessageWorkflowStatusItem(WorkflowStatusItem):
|
|||
in_global_action = isinstance(self.parent, WorkflowGlobalAction)
|
||||
if 'message' in parameters:
|
||||
form.add(
|
||||
TextWidget,
|
||||
get_rich_text_widget_class(self.message),
|
||||
'%smessage' % prefix,
|
||||
title=_('Message'),
|
||||
value=self.message,
|
||||
|
|
Loading…
Reference in New Issue
L'existant permet d'écrire manuellement du balisage HTML, pour ne pas le perdre on envoie sur RichTextWidget (godo) uniquement si le on est uniquement sur les balises acceptées/gérées, sinon ça va vers WysiwygTextWidget (ckeditor).
Il sera peut-être opportun un jour de déprécier la possibilité de n'importe quelle balise mais je préfère ne pas mêler ça maintenant.