From bdfa0197b20280a1bc5c58ea6db601025a8e1056 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Tue, 13 Aug 2024 16:29:34 -0500 Subject: [PATCH] feat: improve widget, rendering for Role notes --- src/wuttaweb/forms/widgets.py | 42 +++++++++----- src/wuttaweb/grids/base.py | 56 +++++++++++++++++++ .../templates/deform/readonly/notes.pt | 7 +++ .../templates/deform/readonly/objectref.pt | 1 + src/wuttaweb/templates/deform/textarea.pt | 11 ++++ src/wuttaweb/views/master.py | 28 ++++++++++ src/wuttaweb/views/roles.py | 7 +++ tests/forms/test_widgets.py | 15 +++-- tests/grids/test_base.py | 24 ++++++++ tests/util.py | 4 +- tests/views/test_master.py | 25 +++++++++ 11 files changed, 201 insertions(+), 19 deletions(-) create mode 100644 src/wuttaweb/templates/deform/readonly/notes.pt create mode 100644 src/wuttaweb/templates/deform/readonly/objectref.pt create mode 100644 src/wuttaweb/templates/deform/textarea.pt diff --git a/src/wuttaweb/forms/widgets.py b/src/wuttaweb/forms/widgets.py index 6627375..bdd7666 100644 --- a/src/wuttaweb/forms/widgets.py +++ b/src/wuttaweb/forms/widgets.py @@ -30,10 +30,11 @@ in the namespace: * :class:`deform:deform.widget.Widget` (base class) * :class:`deform:deform.widget.TextInputWidget` +* :class:`deform:deform.widget.TextAreaWidget` * :class:`deform:deform.widget.SelectWidget` """ -from deform.widget import Widget, TextInputWidget, SelectWidget +from deform.widget import Widget, TextInputWidget, TextAreaWidget, SelectWidget from webhelpers2.html import HTML @@ -48,6 +49,18 @@ class ObjectRefWidget(SelectWidget): the form schema; via :meth:`~wuttaweb.forms.schema.ObjectRef.widget_maker()`. + In readonly mode, this renders a ```` tag around the + :attr:`model_instance` (converted to string). + + Otherwise it renders a select (dropdown) element allowing user to + choose from available records. + + This is a subclass of :class:`deform:deform.widget.SelectWidget` + and uses these Deform templates: + + * ``select`` + * ``readonly/objectref`` + .. attribute:: model_instance Reference to the model record instance, i.e. the "far side" of @@ -60,23 +73,26 @@ class ObjectRefWidget(SelectWidget): when the :class:`~wuttaweb.forms.schema.ObjectRef` type instance (associated with the node) is serialized. """ + readonly_template = 'readonly/objectref' def __init__(self, request, *args, **kwargs): super().__init__(*args, **kwargs) self.request = request - def serialize(self, field, cstruct, **kw): - """ - Serialize the widget. - In readonly mode, returns a ```` tag around the - :attr:`model_instance` rendered as string. +class NotesWidget(TextAreaWidget): + """ + Widget for use with "notes" fields. - Otherwise renders via the ``deform/select`` template. - """ - readonly = kw.get('readonly', self.readonly) - if readonly: - obj = field.schema.model_instance - return HTML.tag('span', c=str(obj or '')) + In readonly mode, this shows the notes with a background to make + them stand out a bit more. - return super().serialize(field, cstruct, **kw) + Otherwise it effectively shows a ``