django-unfold 0.56.0__tar.gz → 0.58.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_unfold-0.56.0 → django_unfold-0.58.0}/PKG-INFO +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/pyproject.toml +5 -6
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +1 -5
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/decorators.py +1 -2
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/forms.py +3 -2
- django_unfold-0.58.0/src/unfold/layout.py +41 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/sites.py +64 -41
- django_unfold-0.58.0/src/unfold/static/unfold/css/styles.css +2 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/styles.css +66 -117
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/actions.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/auth/user/change_password.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/submit_line.html +7 -7
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/registration/password_change_done.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/registration/password_change_form.html +1 -1
- django_unfold-0.58.0/src/unfold/templates/unfold/components/card.html +27 -0
- django_unfold-0.58.0/src/unfold/templates/unfold/components/progress.html +23 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/table.html +5 -5
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/change_list_filter_actions.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_field.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/field.html +2 -2
- django_unfold-0.58.0/src/unfold/templates/unfold/helpers/field_readonly_value.html +1 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/fieldset_row_checkbox.html +2 -2
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/fieldset_row_field.html +2 -2
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/form_errors.html +1 -1
- django_unfold-0.58.0/src/unfold/templates/unfold/helpers/messages/errornote.html +7 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/navigation.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/layouts/skeleton.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +3 -3
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +1 -1
- django_unfold-0.58.0/src/unfold/templates/unfold/widgets/select.html +9 -0
- django_unfold-0.58.0/src/unfold/templates/unfold_crispy/errors_formset.html +3 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/field.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/inputs.html +1 -1
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/checkbox.html +2 -2
- django_unfold-0.58.0/src/unfold/templates/unfold_crispy/layout/field_errors.html +7 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/fieldset.html +1 -1
- django_unfold-0.58.0/src/unfold/templates/unfold_crispy/layout/hr.html +13 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/table_inline_formset.html +23 -19
- django_unfold-0.58.0/src/unfold/templates/unfold_crispy/whole_uni_formset.html +30 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templatetags/unfold.py +14 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/widgets.py +32 -2
- django_unfold-0.56.0/src/unfold/layout.py +0 -23
- django_unfold-0.56.0/src/unfold/static/unfold/css/styles.css +0 -2
- django_unfold-0.56.0/src/unfold/templates/unfold/components/card.html +0 -27
- django_unfold-0.56.0/src/unfold/templates/unfold/components/progress.html +0 -21
- django_unfold-0.56.0/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -1
- django_unfold-0.56.0/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -11
- django_unfold-0.56.0/src/unfold/templates/unfold_crispy/layout/field_errors.html +0 -7
- {django_unfold-0.56.0 → django_unfold-0.58.0}/LICENSE.md +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/README.md +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/admin.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/apps.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/checks.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/components.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/admin/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/admin/autocomplete_filters.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/admin/choice_filters.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/admin/datetime_filters.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/admin/dropdown_filters.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/admin/mixins.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/admin/numeric_filters.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/admin/text_filters.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/apps.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/forms.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/nouislider.min.css +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/nouislider.min.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/wNumb.min.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/apps.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/trix.css +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/trix.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/forms/widgets.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/apps.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/apps.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/forms.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/inlines/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/inlines/admin.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/inlines/apps.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/inlines/checks.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/inlines/forms.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/simple_history/apps.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/dataclasses.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/enums.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/exceptions.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/fields.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/mixins/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/mixins/action_model_admin.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/mixins/base_model_admin.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/overrides.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/paginator.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/sections.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/settings.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/admin/js/admin/RelatedObjectLookups.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/admin/js/inlines.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/css/simplebar/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/css/simplebar/simplebar.css +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/inter/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/material-symbols/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/alpine/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/alpine/alpine.anchor.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/alpine/alpine.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/alpine/alpine.persist.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/alpine/alpine.resize.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/alpine/alpine.sort.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/app.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/chart/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/chart/chart.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/htmx/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/htmx/htmx.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/select2.init.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/simplebar/LICENSE +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/static/unfold/js/simplebar/simplebar.js +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/app_index.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/app_list.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/base.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/base_site.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/change_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/change_list.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/change_list_results.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/delete_confirmation.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/delete_selected_confirmation.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/edit_inline/stacked.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/edit_inline/tabular.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/filter.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/includes/object_delete_summary.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/index.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/login.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/object_history.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/pagination.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/admin/search_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/registration/logged_out.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/button.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/chart/cohort.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/container.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/flex.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/icon.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/navigation.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/separator.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/text.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/title.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/components/tracker.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/account_links.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/actions_row.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/add_link.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/app_list.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/app_list_default.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/boolean.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/change_list_actions.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/change_list_filter.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/delete_submit_line.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/display_dropdown.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/display_header.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_delete.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_error.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_row.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_title.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/empty_results.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/header_back_button.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/help_text.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/history.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/label.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/language_switch.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/messages/debug.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/messages/success.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/messages/warning.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/messages.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/navigation_header.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/pagination.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/pagination_default.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/pagination_infinite.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/search.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/search_results.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/site_branding.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/site_dropdown.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/site_icon.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/tab_action.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/tab_actions.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/tab_items.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/tab_list.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/theme_switch.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/helpers/welcomemsg.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/templatetags/preserve_changelist_filters.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/radio_option.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/split_datetime.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold/widgets/url.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/display_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/errors.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/attrs.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/baseinput.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/button.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/buttonholder.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/column.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/div.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/help_text.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/help_text_and_errors.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/radio_checkbox_select.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/layout/row.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/uni_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templates/unfold_crispy/whole_uni_form.html +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templatetags/__init__.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/templatetags/unfold_list.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/typing.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/utils.py +0 -0
- {django_unfold-0.56.0 → django_unfold-0.58.0}/src/unfold/views.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "django-unfold"
|
3
|
-
version = "0.
|
3
|
+
version = "0.58.0"
|
4
4
|
description = "Modern Django admin theme for seamless interface development"
|
5
5
|
license = "MIT"
|
6
6
|
readme = "README.md"
|
@@ -28,13 +28,12 @@ django = ">=4.2"
|
|
28
28
|
|
29
29
|
[tool.poetry.group.test.dependencies]
|
30
30
|
pytest = "^8.3"
|
31
|
-
pytest-django = "^4.
|
32
|
-
tox = "^4.
|
33
|
-
django-money = "^3.5
|
34
|
-
|
31
|
+
pytest-django = "^4.11"
|
32
|
+
tox = "^4.26"
|
33
|
+
django-money = "^3.5"
|
35
34
|
|
36
35
|
[tool.poetry.group.dev.dependencies]
|
37
|
-
python-semantic-release = "^
|
36
|
+
python-semantic-release = "^9.21"
|
38
37
|
|
39
38
|
[tool.ruff]
|
40
39
|
fix = true
|
@@ -1,11 +1,7 @@
|
|
1
1
|
{% extends "admin/base_site.html" %}
|
2
2
|
{% load admin_modify admin_urls i18n static %}
|
3
3
|
|
4
|
-
{% block extrastyle %}
|
5
|
-
{{ block.super }}
|
6
|
-
|
7
|
-
<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />
|
8
|
-
{% endblock %}
|
4
|
+
{% block extrastyle %}{{ block.super }}{% endblock %}
|
9
5
|
|
10
6
|
{% block bodyclass %}
|
11
7
|
{{ block.super }} {{ opts.app_label }}-{{ opts.object_name.lower }} change-form
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
{% include "admin/import_export/resource_fields_list.html" with import_or_export="import" %}
|
8
8
|
|
9
|
-
<fieldset class="border border-base-200 mb-8 rounded-default pt-
|
9
|
+
<fieldset class="border border-base-200 mb-8 rounded-default pt-2.5 px-3 shadow-xs dark:border-base-800">
|
10
10
|
{% for field in form %}
|
11
11
|
{% if field.field.widget.attrs.readonly %}
|
12
12
|
{% include "unfold/helpers/field_readonly.html" with title=field.label value=field.field.value %}
|
@@ -43,7 +43,7 @@
|
|
43
43
|
{% endblock %}
|
44
44
|
|
45
45
|
{% block form_top %}
|
46
|
-
<p class="px-3 py-3 rounded-default text-sm last:mb-8
|
46
|
+
<p class="px-3 py-3 rounded-default text-sm last:mb-8 bg-blue-50 mb-8 text-blue-500 dark:bg-blue-500/20">
|
47
47
|
{% if not revert_disabled %}
|
48
48
|
{% blocktrans %}Press the 'Revert' button below to revert to this version of the object.{% endblocktrans %}
|
49
49
|
{% endif %}
|
@@ -8,8 +8,7 @@ from django.db.models.expressions import BaseExpression, Combinable
|
|
8
8
|
from django.http import HttpRequest, HttpResponse
|
9
9
|
|
10
10
|
from unfold.enums import ActionVariant
|
11
|
-
|
12
|
-
from .typing import ActionFunction
|
11
|
+
from unfold.typing import ActionFunction
|
13
12
|
|
14
13
|
|
15
14
|
def action(
|
@@ -22,11 +22,12 @@ from django.http import HttpRequest
|
|
22
22
|
from django.utils.safestring import mark_safe
|
23
23
|
from django.utils.translation import gettext_lazy as _
|
24
24
|
|
25
|
-
from .widgets import (
|
25
|
+
from unfold.widgets import (
|
26
26
|
BASE_INPUT_CLASSES,
|
27
27
|
INPUT_CLASSES,
|
28
28
|
UnfoldAdminPasswordInput,
|
29
29
|
UnfoldAdminRadioSelectWidget,
|
30
|
+
UnfoldAdminSelectWidget,
|
30
31
|
)
|
31
32
|
|
32
33
|
|
@@ -37,7 +38,7 @@ class UnfoldReadOnlyPasswordHashWidget(ReadOnlyPasswordHashWidget):
|
|
37
38
|
class ActionForm(forms.Form):
|
38
39
|
action = forms.ChoiceField(
|
39
40
|
label="",
|
40
|
-
widget=
|
41
|
+
widget=UnfoldAdminSelectWidget(
|
41
42
|
{
|
42
43
|
"class": " ".join(
|
43
44
|
[
|
@@ -0,0 +1,41 @@
|
|
1
|
+
from crispy_forms.layout import BaseInput, LayoutObject
|
2
|
+
from crispy_forms.utils import TEMPLATE_PACK
|
3
|
+
from django.template.loader import render_to_string
|
4
|
+
|
5
|
+
from unfold.widgets import BUTTON_CLASSES
|
6
|
+
|
7
|
+
|
8
|
+
class ButtonClassesMixin:
|
9
|
+
def __init__(self, *args, css_class=None, **kwargs):
|
10
|
+
classes = BUTTON_CLASSES
|
11
|
+
|
12
|
+
if css_class:
|
13
|
+
classes.append(css_class)
|
14
|
+
|
15
|
+
self.field_classes = " ".join(classes)
|
16
|
+
|
17
|
+
super().__init__(*args, **kwargs)
|
18
|
+
|
19
|
+
|
20
|
+
class Submit(ButtonClassesMixin, BaseInput):
|
21
|
+
input_type = "submit"
|
22
|
+
|
23
|
+
|
24
|
+
class Button(ButtonClassesMixin, BaseInput):
|
25
|
+
input_type = "button"
|
26
|
+
|
27
|
+
|
28
|
+
class Hr(LayoutObject):
|
29
|
+
template = "unfold_crispy/layout/hr.html"
|
30
|
+
|
31
|
+
def __init__(self, title=None, *args, **kwargs):
|
32
|
+
self.title = title
|
33
|
+
super().__init__(*args, **kwargs)
|
34
|
+
|
35
|
+
def render(self, form, context, template_pack=TEMPLATE_PACK, **kwargs):
|
36
|
+
return render_to_string(
|
37
|
+
self.template,
|
38
|
+
{
|
39
|
+
"title": self.title,
|
40
|
+
},
|
41
|
+
)
|
@@ -243,58 +243,58 @@ class UnfoldAdminSite(AdminSite):
|
|
243
243
|
results = []
|
244
244
|
|
245
245
|
for group in copy.deepcopy(navigation):
|
246
|
-
|
247
|
-
|
248
|
-
for item in group["items"]:
|
249
|
-
if "active" in item:
|
250
|
-
item["active"] = self._get_value(item["active"], request)
|
251
|
-
else:
|
252
|
-
item["active"] = self._get_is_active(
|
253
|
-
request, item.get("link_callback") or item["link"]
|
254
|
-
)
|
246
|
+
group["items"] = self._get_navigation_items(request, group["items"], tabs)
|
247
|
+
results.append(group)
|
255
248
|
|
256
|
-
|
257
|
-
for tab in tabs:
|
258
|
-
has_primary_link = False
|
259
|
-
has_tab_link_active = False
|
249
|
+
return results
|
260
250
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
251
|
+
def _get_navigation_items(
|
252
|
+
self, request: HttpRequest, items: list[dict], tabs: list[dict] = None
|
253
|
+
) -> list:
|
254
|
+
allowed_items = []
|
265
255
|
|
266
|
-
|
267
|
-
|
268
|
-
):
|
269
|
-
has_tab_link_active = True
|
270
|
-
break
|
256
|
+
for item in items:
|
257
|
+
link = item.get("link")
|
271
258
|
|
272
|
-
|
273
|
-
|
259
|
+
if "active" in item:
|
260
|
+
item["active"] = self._get_value(item["active"], request)
|
261
|
+
else:
|
262
|
+
item["active"] = self._get_is_active(
|
263
|
+
request, item.get("link_callback") or link
|
264
|
+
)
|
274
265
|
|
275
|
-
|
276
|
-
|
266
|
+
# Checks if any tab item is active and then marks the sidebar link as active
|
267
|
+
if (
|
268
|
+
tabs
|
269
|
+
and (is_active := self._get_is_tab_active(request, tabs, link))
|
270
|
+
and is_active
|
271
|
+
):
|
272
|
+
item["active"] = True
|
277
273
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
)
|
274
|
+
# Link callback
|
275
|
+
if isinstance(link, Callable):
|
276
|
+
item["link_callback"] = lazy(link)(request)
|
282
277
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
item["badge_callback"] = lazy(callback)(request)
|
288
|
-
except ImportError:
|
289
|
-
pass
|
278
|
+
# Permission callback
|
279
|
+
item["has_permission"] = self._call_permission_callback(
|
280
|
+
item.get("permission"), request
|
281
|
+
)
|
290
282
|
|
291
|
-
|
283
|
+
# Badge callbacks
|
284
|
+
if "badge" in item and isinstance(item["badge"], str):
|
285
|
+
try:
|
286
|
+
callback = import_string(item["badge"])
|
287
|
+
item["badge_callback"] = lazy(callback)(request)
|
288
|
+
except ImportError:
|
289
|
+
pass
|
292
290
|
|
293
|
-
|
291
|
+
# Process nested items
|
292
|
+
if "items" in item:
|
293
|
+
item["items"] = self._get_navigation_items(request, item["items"])
|
294
294
|
|
295
|
-
|
295
|
+
allowed_items.append(item)
|
296
296
|
|
297
|
-
return
|
297
|
+
return allowed_items
|
298
298
|
|
299
299
|
def get_tabs_list(self, request: HttpRequest) -> list[dict[str, Any]]:
|
300
300
|
tabs = copy.deepcopy(self._get_config("TABS", request))
|
@@ -381,6 +381,29 @@ class UnfoldAdminSite(AdminSite):
|
|
381
381
|
|
382
382
|
return False
|
383
383
|
|
384
|
+
def _get_is_tab_active(
|
385
|
+
self, request: HttpRequest, tabs: list[dict], link: str
|
386
|
+
) -> bool:
|
387
|
+
for tab in tabs:
|
388
|
+
has_primary_link = False
|
389
|
+
has_tab_link_active = False
|
390
|
+
|
391
|
+
for tab_item in tab["items"]:
|
392
|
+
if link == tab_item["link"]:
|
393
|
+
has_primary_link = True
|
394
|
+
continue
|
395
|
+
|
396
|
+
if self._get_is_active(
|
397
|
+
request, tab_item.get("link_callback") or tab_item["link"]
|
398
|
+
):
|
399
|
+
has_tab_link_active = True
|
400
|
+
break
|
401
|
+
|
402
|
+
if has_primary_link and has_tab_link_active:
|
403
|
+
return True
|
404
|
+
|
405
|
+
return False
|
406
|
+
|
384
407
|
def _get_config(self, key: str, *args) -> Any:
|
385
408
|
config = get_config(self.settings_name)
|
386
409
|
|