#20 Multiple laws

* improves w-100 handling for ModalForms
* adds documentation strings
This commit is contained in:
mipel 2021-09-20 14:13:59 +02:00
parent 8a2bbb1fc2
commit 89c75d471b
2 changed files with 49 additions and 11 deletions

View File

@ -412,10 +412,13 @@ class RunCheckForm(BaseModalForm):
super().__init__(*args, **kwargs)
self.form_title = _("Run check")
self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name)
# Disable automatic w-100 setting for this type of modal form. Looks kinda strange
self.fields["confirm"].widget.attrs["class"] = ""
def is_valid(self):
def is_valid(self) -> bool:
""" Perform a validity check based on quality_check() logic
Returns:
result (bool)
"""
super_result = super().is_valid()
# Perform check
msgs = self.instance.quality_check()
@ -427,6 +430,11 @@ class RunCheckForm(BaseModalForm):
return super_result and (len(msgs) == 0)
def save(self):
""" Saving logic
Returns:
"""
with transaction.atomic():
user_action = UserActionLogEntry.objects.create(
user=self.user,

View File

@ -101,6 +101,37 @@ class BaseForm(forms.Form):
for field in disabled_fields:
self.disable_form_field(field)
def add_widget_html_class(self, field: str, cls: str):
""" Adds a HTML class string to the widget of a field
Args:
field (str): The field's name
cls (str): The new class string
Returns:
"""
set_class = self.fields[field].widget.attrs.get("class", "")
if cls in set_class:
return
else:
set_class += " " + cls
self.fields[field].widget.attrs["class"] = set_class
def remove_widget_html_class(self, field: str, cls: str):
""" Removes a HTML class string from the widget of a field
Args:
field (str): The field's name
cls (str): The new class string
Returns:
"""
set_class = self.fields[field].widget.attrs.get("class", "")
set_class = set_class.replace(cls, "")
self.fields[field].widget.attrs["class"] = set_class
class RemoveForm(BaseForm):
check = forms.BooleanField(
@ -153,17 +184,16 @@ class BaseModalForm(BaseForm, BSModalForm):
"""
is_modal_form = True
render_submit = True
full_width_fields = False
template = "modal/modal_form.html"
def __init__(self, *args, **kwargs):
def __init__(self, full_width_fields: bool = True, *args, **kwargs):
self.full_width_fields = full_width_fields
super().__init__(*args, **kwargs)
if self.full_width_fields:
# Automatically add bootstrap w-100 class for maximum width of form fields in modals
for key, val in self.fields.items():
val.widget.attrs.update(
{
"class": "w-100"
}
)
self.add_widget_html_class(key, "w-100")
def process_request(self, request: HttpRequest, msg_success: str = _("Object removed"), msg_error: str = FORM_INVALID, redirect_url: str = None):
""" Generic processing of request