Source code for literature.formset
from typing import Any, Dict
from django import forms
from django.utils.translation import gettext as _
from formset.collection import FormCollection
from formset.fieldset import Fieldset
from formset.renderers import bootstrap
from formset.richtext.widgets import RichTextarea
from formset.widgets import (
Selectize,
)
# from django.forms import fields
from .choices import TypeChoices
from .csl_map import CSL_FIELDS, CSL_TYPES
# def show_if(field):
# return {"show-if": " || ".join([f".type == '{x}'" for x in CSLMap[field]])}
[docs]class CSLMixin:
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.csl_fields = CSL_FIELDS
self.csl_types = CSL_TYPES
self.update_fields()
self.update_field_visibility()
[docs] def update_fields(self):
for field in self.Meta.fields:
attrs = self.csl_fields[field]
if attrs["type"] == "standard":
self.fields[field] = forms.CharField(
label=attrs["name"],
help_text=_(attrs["description"]),
required=False,
widget=self.Meta.widgets.get(field, None),
)
self.fields[field].widget.attrs.update({"show-if": ""})
[docs] def update_field_visibility(self):
for csl_type, fields in self.csl_types.items():
for field_name in fields:
if field_name in self.fields:
if not self.fields[field_name].widget.attrs["show-if"]:
self.fields[field_name].widget.attrs["show-if"] += f"literature.type == '{csl_type}'"
else:
self.fields[field_name].widget.attrs["show-if"] += f" || literature.type == '{csl_type}'"
# def show_if(field):
# return {"show-if": " || ".join([f".type == '{x}'" for x in CSLMap[field]])}