django-unfold 0.66.0__tar.gz → 0.68.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.66.0 → django_unfold-0.68.0}/PKG-INFO +8 -5
- {django_unfold-0.66.0 → django_unfold-0.68.0}/README.md +6 -2
- {django_unfold-0.66.0 → django_unfold-0.68.0}/pyproject.toml +13 -15
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/admin.py +73 -13
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/components.py +2 -2
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/choice_filters.py +13 -1
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/mixins.py +3 -3
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/numeric_filters.py +8 -6
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/forms.py +25 -4
- django_unfold-0.68.0/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +69 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +2 -11
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/widgets.py +5 -5
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/inlines/admin.py +3 -3
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/inlines/forms.py +5 -4
- django_unfold-0.68.0/src/unfold/dataclasses.py +42 -0
- django_unfold-0.68.0/src/unfold/datasets.py +69 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/decorators.py +19 -19
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/fields.py +40 -1
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/forms.py +19 -7
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/mixins/action_model_admin.py +11 -10
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/mixins/base_model_admin.py +6 -6
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/sites.py +14 -17
- django_unfold-0.68.0/src/unfold/static/unfold/css/styles.css +2 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/app.js +65 -5
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/select2.init.js +2 -9
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/styles.css +22 -21
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/change_form.html +5 -1
- django_unfold-0.68.0/src/unfold/templates/admin/change_list_results.html +68 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/edit_inline/stacked.html +1 -1
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/search_form.html +5 -3
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/card.html +12 -3
- django_unfold-0.68.0/src/unfold/templates/unfold/components/progress.html +29 -0
- django_unfold-0.68.0/src/unfold/templates/unfold/helpers/change_list_headers.html +65 -0
- django_unfold-0.68.0/src/unfold/templates/unfold/helpers/dataset.html +19 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_field.html +1 -1
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/empty_results.html +6 -4
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/field_readonly_value.html +1 -1
- django_unfold-0.68.0/src/unfold/templates/unfold/helpers/field_readonly_value_file.html +18 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/tab_items.html +6 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templatetags/unfold.py +18 -13
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templatetags/unfold_list.py +64 -8
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/typing.py +5 -6
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/utils.py +9 -9
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/views.py +15 -1
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/widgets.py +30 -29
- django_unfold-0.66.0/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -35
- django_unfold-0.66.0/src/unfold/dataclasses.py +0 -42
- django_unfold-0.66.0/src/unfold/static/unfold/css/styles.css +0 -2
- django_unfold-0.66.0/src/unfold/templates/admin/change_list_results.html +0 -120
- django_unfold-0.66.0/src/unfold/templates/unfold/components/progress.html +0 -23
- {django_unfold-0.66.0 → django_unfold-0.68.0}/LICENSE.md +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/checks.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/constance/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/constance/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/constance/settings.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/constance/templates/admin/constance/change_list.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/constance/templates/admin/constance/includes/results_list.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/autocomplete_filters.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/datetime_filters.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/dropdown_filters.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/text_filters.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/nouislider.min.css +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/nouislider.min.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/wNumb.min.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/trix.css +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/trix.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/forms.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/inlines/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/inlines/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/inlines/checks.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/location_field/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/location_field/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/location_field/templates/location_field/map_widget.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/simple_history/apps.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/enums.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/exceptions.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/layout.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/mixins/__init__.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/overrides.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/paginator.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/sections.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/settings.py +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/admin/js/admin/RelatedObjectLookups.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/admin/js/inlines.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/css/simplebar/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/css/simplebar/simplebar.css +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/inter/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/material-symbols/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/alpine/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/alpine/alpine.anchor.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/alpine/alpine.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/alpine/alpine.persist.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/alpine/alpine.resize.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/alpine/alpine.sort.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/chart/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/chart/chart.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/htmx/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/htmx/htmx.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/simplebar/LICENSE +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/static/unfold/js/simplebar/simplebar.js +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/actions.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/app_index.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/app_list.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/auth/user/change_password.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/base.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/base_site.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/change_list.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/delete_confirmation.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/delete_selected_confirmation.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/edit_inline/tabular.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/filter.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/includes/object_delete_summary.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/index.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/login.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/object_history.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/pagination.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/admin/submit_line.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/registration/logged_out.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/registration/password_change_done.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/registration/password_change_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/button.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/chart/cohort.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/container.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/flex.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/icon.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/layer.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/navigation.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/separator.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/table.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/text.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/title.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/components/tracker.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/account_links.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/actions_row.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/add_link.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/app_list.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/app_list_default.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/boolean.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/change_list_actions.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/change_list_filter.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/change_list_filter_actions.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/command.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/command_history.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/command_results.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/delete_submit_line.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/display_dropdown.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/display_header.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_delete.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_error.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_row.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_title.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/field.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/fieldset_row_checkbox.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/fieldset_row_field.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/header_back_button.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/header_title.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/help_text.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/history.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/label.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/language_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/language_switch.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/messages/debug.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/messages/success.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/messages/warning.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/messages.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/navigation.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/navigation_header.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/pagination.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/pagination_default.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/pagination_infinite.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/pagination_inline.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/popup_header.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/search.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/search_results.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/shortcut.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/site_branding.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/site_dropdown.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/site_icon.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/tab_action.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/tab_actions.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/tab_list.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/theme_switch.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/unauthenticated_header.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/unauthenticated_title.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/helpers/welcomemsg.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/layouts/skeleton.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/layouts/unauthenticated.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/templatetags/preserve_changelist_filters.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/radio_option.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/select.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/split_datetime.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/text.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold/widgets/url.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/display_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/errors.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/errors_formset.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/field.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/inputs.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/attrs.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/baseinput.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/button.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/buttonholder.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/checkbox.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/column.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/div.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/field_errors.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/fieldset.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/fieldset_subheader.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/help_text.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/help_text_and_errors.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/hr.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/radio_checkbox_select.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/row.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/layout/table_inline_formset.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/uni_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/whole_uni_form.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templates/unfold_crispy/whole_uni_formset.html +0 -0
- {django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/templatetags/__init__.py +0 -0
@@ -1,11 +1,11 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: django-unfold
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.68.0
|
4
4
|
Summary: Modern Django admin theme for seamless interface development
|
5
5
|
License: MIT
|
6
6
|
License-File: LICENSE.md
|
7
7
|
Keywords: django,admin,tailwind,theme
|
8
|
-
Requires-Python: >=3.
|
8
|
+
Requires-Python: >=3.10,<4.0
|
9
9
|
Classifier: Environment :: Web Environment
|
10
10
|
Classifier: Framework :: Django
|
11
11
|
Classifier: Intended Audience :: Developers
|
@@ -13,7 +13,6 @@ Classifier: License :: OSI Approved :: MIT License
|
|
13
13
|
Classifier: Operating System :: OS Independent
|
14
14
|
Classifier: Programming Language :: Python
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
17
16
|
Classifier: Programming Language :: Python :: 3.10
|
18
17
|
Classifier: Programming Language :: Python :: 3.11
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
@@ -24,7 +23,7 @@ Project-URL: Homepage, https://unfoldadmin.com
|
|
24
23
|
Project-URL: Repository, https://github.com/unfoldadmin/django-unfold
|
25
24
|
Description-Content-Type: text/markdown
|
26
25
|
|
27
|
-
](https://unfoldadmin.com)
|
28
27
|
|
29
28
|
## Unfold - Django Admin Theme
|
30
29
|
|
@@ -59,13 +58,16 @@ If you need assistance with integrating or customizing Unfold, support packages
|
|
59
58
|
|
60
59
|
Unfold Studio lets you visually customize your Django admin without writing code — update colors, logos, sidebar, and interface styles to match your brand in minutes. Give your admin a polished, professional look that feels truly yours. Available at [unfoldadmin.com/studio](https://unfoldadmin.com/studio).
|
61
60
|
|
61
|
+
[](https://unfoldadmin.com/studio)
|
62
|
+
|
63
|
+
|
62
64
|
## Fresh Features & Enhancements
|
63
65
|
|
66
|
+
- **Command**: Offers a command palette for quick searching across all models or custom-injected data
|
64
67
|
- **django-constance**: Official support with a completely new design and UX improvements
|
65
68
|
- **Paginated inlines:** Break down large record sets into pages within inlines for better admin performance
|
66
69
|
- **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
|
67
70
|
- **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
|
68
|
-
- **Checkbox & radio filters:** Enhanced filter options with checkbox and radio interfaces for intuitive filtering
|
69
71
|
|
70
72
|
## Core Features & Capabilities
|
71
73
|
|
@@ -84,6 +86,7 @@ Unfold Studio lets you visually customize your Django admin without writing code
|
|
84
86
|
- **Model tabs:** Allow defining custom tab navigation for models
|
85
87
|
- **Fieldset tabs:** Merge multiple fieldsets into tabs in the change form
|
86
88
|
- **Sortable inlines:** Allow sorting inlines by dragging and dropping
|
89
|
+
- **Command**: Offers a command palette for quick searching across all models or custom-injected data
|
87
90
|
- **Environment label:** Distinguish between environments by displaying a label
|
88
91
|
- **Nonrelated inlines:** Display nonrelated models as inlines in the change form
|
89
92
|
- **Paginated inlines:** Break down large record sets into pages within inlines for better admin performance
|
@@ -1,4 +1,4 @@
|
|
1
|
-
](https://unfoldadmin.com)
|
2
2
|
|
3
3
|
## Unfold - Django Admin Theme
|
4
4
|
|
@@ -33,13 +33,16 @@ If you need assistance with integrating or customizing Unfold, support packages
|
|
33
33
|
|
34
34
|
Unfold Studio lets you visually customize your Django admin without writing code — update colors, logos, sidebar, and interface styles to match your brand in minutes. Give your admin a polished, professional look that feels truly yours. Available at [unfoldadmin.com/studio](https://unfoldadmin.com/studio).
|
35
35
|
|
36
|
+
[](https://unfoldadmin.com/studio)
|
37
|
+
|
38
|
+
|
36
39
|
## Fresh Features & Enhancements
|
37
40
|
|
41
|
+
- **Command**: Offers a command palette for quick searching across all models or custom-injected data
|
38
42
|
- **django-constance**: Official support with a completely new design and UX improvements
|
39
43
|
- **Paginated inlines:** Break down large record sets into pages within inlines for better admin performance
|
40
44
|
- **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
|
41
45
|
- **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
|
42
|
-
- **Checkbox & radio filters:** Enhanced filter options with checkbox and radio interfaces for intuitive filtering
|
43
46
|
|
44
47
|
## Core Features & Capabilities
|
45
48
|
|
@@ -58,6 +61,7 @@ Unfold Studio lets you visually customize your Django admin without writing code
|
|
58
61
|
- **Model tabs:** Allow defining custom tab navigation for models
|
59
62
|
- **Fieldset tabs:** Merge multiple fieldsets into tabs in the change form
|
60
63
|
- **Sortable inlines:** Allow sorting inlines by dragging and dropping
|
64
|
+
- **Command**: Offers a command palette for quick searching across all models or custom-injected data
|
61
65
|
- **Environment label:** Distinguish between environments by displaying a label
|
62
66
|
- **Nonrelated inlines:** Display nonrelated models as inlines in the change form
|
63
67
|
- **Paginated inlines:** Break down large record sets into pages within inlines for better admin performance
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "django-unfold"
|
3
|
-
version = "0.
|
3
|
+
version = "0.68.0"
|
4
4
|
description = "Modern Django admin theme for seamless interface development"
|
5
5
|
license = "MIT"
|
6
6
|
readme = "README.md"
|
@@ -11,11 +11,11 @@ packages = [{ include = "unfold", from = "src" }]
|
|
11
11
|
keywords = ["django", "admin", "tailwind", "theme"]
|
12
12
|
classifiers = [
|
13
13
|
"Programming Language :: Python",
|
14
|
-
"Programming Language :: Python :: 3.9",
|
15
14
|
"Programming Language :: Python :: 3.10",
|
16
15
|
"Programming Language :: Python :: 3.11",
|
17
16
|
"Programming Language :: Python :: 3.12",
|
18
17
|
"Programming Language :: Python :: 3.13",
|
18
|
+
"Programming Language :: Python :: 3.14",
|
19
19
|
"Operating System :: OS Independent",
|
20
20
|
"Environment :: Web Environment",
|
21
21
|
"Intended Audience :: Developers",
|
@@ -23,22 +23,23 @@ classifiers = [
|
|
23
23
|
]
|
24
24
|
|
25
25
|
[tool.poetry.dependencies]
|
26
|
-
python = ">=3.
|
26
|
+
python = ">=3.10,<4.0"
|
27
27
|
django = ">=4.2"
|
28
28
|
|
29
29
|
[tool.poetry.group.test.dependencies]
|
30
|
-
pytest = "^8.
|
30
|
+
pytest = "^8.4"
|
31
31
|
pytest-django = "^4.11"
|
32
|
-
pytest-factoryboy = "^2.
|
33
|
-
tox = "^4.
|
32
|
+
pytest-factoryboy = "^2.8"
|
33
|
+
tox = "^4.30"
|
34
34
|
django-money = "^3.5"
|
35
35
|
|
36
36
|
[tool.poetry.group.dev.dependencies]
|
37
|
-
python-semantic-release = "^
|
37
|
+
python-semantic-release = "^10.4"
|
38
38
|
|
39
39
|
[tool.ruff]
|
40
40
|
fix = true
|
41
41
|
line-length = 88
|
42
|
+
target-version = "py310"
|
42
43
|
|
43
44
|
[tool.ruff.lint]
|
44
45
|
select = [
|
@@ -59,20 +60,17 @@ ignore = [
|
|
59
60
|
[tool.semantic_release]
|
60
61
|
tag_format = "{version}"
|
61
62
|
major_on_zero = false
|
63
|
+
allow_zero_version = true
|
62
64
|
version_toml = ["pyproject.toml:tool.poetry.version"]
|
63
65
|
|
64
66
|
[tool.semantic_release.changelog]
|
65
|
-
|
67
|
+
mode = "init"
|
66
68
|
exclude_commit_patterns = [
|
67
69
|
"chore: version bump",
|
68
|
-
|
69
|
-
|
70
|
+
'''chore(?:\(deps\))?: .+''',
|
71
|
+
'''chore(?:\(deps-dev\))?: .+'''
|
70
72
|
]
|
71
73
|
|
72
|
-
[tool.semantic_release.changelog.environment]
|
73
|
-
trim_blocks = true
|
74
|
-
lstrip_blocks = true
|
75
|
-
|
76
74
|
[tool.semantic_release.publish]
|
77
75
|
upload_to_vcs_release = false
|
78
76
|
|
@@ -90,7 +88,7 @@ legacy_tox_ini = """
|
|
90
88
|
[tox]
|
91
89
|
isolated_build = true
|
92
90
|
envlist =
|
93
|
-
python{
|
91
|
+
python{310,311,312,313,314}-django{42,50,51,52}
|
94
92
|
|
95
93
|
[testenv]
|
96
94
|
skip_install = true
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from functools import update_wrapper
|
2
|
-
from typing import Any
|
2
|
+
from typing import Any
|
3
3
|
|
4
4
|
from django import forms
|
5
5
|
from django.contrib.admin import ModelAdmin as BaseModelAdmin
|
@@ -7,6 +7,8 @@ from django.contrib.admin import StackedInline as BaseStackedInline
|
|
7
7
|
from django.contrib.admin import TabularInline as BaseTabularInline
|
8
8
|
from django.contrib.admin import display, helpers
|
9
9
|
from django.contrib.admin.options import InlineModelAdmin
|
10
|
+
from django.contrib.admin.views import main
|
11
|
+
from django.contrib.admin.views.main import IGNORED_PARAMS
|
10
12
|
from django.contrib.contenttypes.admin import (
|
11
13
|
GenericStackedInline as BaseGenericStackedInline,
|
12
14
|
)
|
@@ -23,6 +25,7 @@ from django.utils.translation import gettext_lazy as _
|
|
23
25
|
from django.views import View
|
24
26
|
|
25
27
|
from unfold.checks import UnfoldModelAdminChecks
|
28
|
+
from unfold.datasets import BaseDataset
|
26
29
|
from unfold.forms import (
|
27
30
|
ActionForm,
|
28
31
|
PaginationGenericInlineFormSet,
|
@@ -47,6 +50,8 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
47
50
|
action_form = ActionForm
|
48
51
|
custom_urls = ()
|
49
52
|
add_fieldsets = ()
|
53
|
+
ordering_field = None
|
54
|
+
hide_ordering_field = False
|
50
55
|
list_horizontal_scrollbar_top = False
|
51
56
|
list_filter_submit = False
|
52
57
|
list_filter_sheet = True
|
@@ -58,6 +63,7 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
58
63
|
change_form_after_template = None
|
59
64
|
change_form_outer_before_template = None
|
60
65
|
change_form_outer_after_template = None
|
66
|
+
change_form_datasets = ()
|
61
67
|
compressed_fields = False
|
62
68
|
readonly_preprocess_fields = {}
|
63
69
|
warn_unsaved_form = False
|
@@ -72,7 +78,7 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
72
78
|
|
73
79
|
for filter in self.get_list_filter(self.request):
|
74
80
|
if (
|
75
|
-
isinstance(filter,
|
81
|
+
isinstance(filter, tuple | list)
|
76
82
|
and hasattr(filter[1], "form_class")
|
77
83
|
and hasattr(filter[1].form_class, "Media")
|
78
84
|
):
|
@@ -83,12 +89,61 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
83
89
|
return media
|
84
90
|
|
85
91
|
def changelist_view(
|
86
|
-
self, request: HttpRequest, extra_context:
|
92
|
+
self, request: HttpRequest, extra_context: dict[str, str] | None = None
|
87
93
|
) -> TemplateResponse:
|
88
94
|
self.request = request
|
95
|
+
|
96
|
+
if self.ordering_field and self.ordering_field not in self.list_editable:
|
97
|
+
list_editable = list(getattr(self, "list_editable", []))
|
98
|
+
list_editable.append(self.ordering_field)
|
99
|
+
self.list_editable = list_editable
|
100
|
+
|
89
101
|
return super().changelist_view(request, extra_context)
|
90
102
|
|
91
|
-
def
|
103
|
+
def changeform_view(
|
104
|
+
self,
|
105
|
+
request: HttpRequest,
|
106
|
+
object_id: str | None = None,
|
107
|
+
form_url: str = "",
|
108
|
+
extra_context: dict[str, Any] | None = None,
|
109
|
+
) -> TemplateResponse:
|
110
|
+
self.request = request
|
111
|
+
extra_context = extra_context or {}
|
112
|
+
datasets = self.get_changeform_datasets(request)
|
113
|
+
|
114
|
+
# Monkeypatch IGNORED_PARAMS to add dataset page and search arguments into ignored params
|
115
|
+
ignored_params = []
|
116
|
+
for dataset in datasets:
|
117
|
+
ignored_params.append(f"{dataset.model._meta.model_name}-q")
|
118
|
+
ignored_params.append(f"{dataset.model._meta.model_name}-p")
|
119
|
+
|
120
|
+
main.IGNORED_PARAMS = (*IGNORED_PARAMS, *ignored_params)
|
121
|
+
|
122
|
+
rendered_datasets = []
|
123
|
+
for dataset in datasets:
|
124
|
+
rendered_datasets.append(
|
125
|
+
dataset(
|
126
|
+
request=request,
|
127
|
+
extra_context={
|
128
|
+
"object": object_id,
|
129
|
+
},
|
130
|
+
)
|
131
|
+
)
|
132
|
+
|
133
|
+
extra_context["datasets"] = rendered_datasets
|
134
|
+
return super().changeform_view(request, object_id, form_url, extra_context)
|
135
|
+
|
136
|
+
def get_list_display(self, request: HttpRequest) -> list[str]:
|
137
|
+
list_display = super().get_list_display(request)
|
138
|
+
|
139
|
+
if self.ordering_field and self.ordering_field not in list_display:
|
140
|
+
list_display.append(self.ordering_field)
|
141
|
+
|
142
|
+
return list_display
|
143
|
+
|
144
|
+
def get_fieldsets(
|
145
|
+
self, request: HttpRequest, obj: Model | None = None
|
146
|
+
) -> FieldsetsType:
|
92
147
|
if not obj and self.add_fieldsets:
|
93
148
|
return self.add_fieldsets
|
94
149
|
return super().get_fieldsets(request, obj)
|
@@ -119,7 +174,7 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
119
174
|
|
120
175
|
actions_list_urls = [
|
121
176
|
path(
|
122
|
-
action.path,
|
177
|
+
f"{action.path.removesuffix('/')}/",
|
123
178
|
wrap(action.method),
|
124
179
|
name=action.action_name,
|
125
180
|
)
|
@@ -128,7 +183,7 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
128
183
|
|
129
184
|
action_detail_urls = [
|
130
185
|
path(
|
131
|
-
f"<path:object_id>/{action.path}",
|
186
|
+
f"<path:object_id>/{action.path.removesuffix('/')}/",
|
132
187
|
wrap(action.method),
|
133
188
|
name=action.action_name,
|
134
189
|
)
|
@@ -137,7 +192,7 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
137
192
|
|
138
193
|
action_row_urls = [
|
139
194
|
path(
|
140
|
-
f"<path:object_id>/{action.path}",
|
195
|
+
f"<path:object_id>/{action.path.removesuffix('/')}/",
|
141
196
|
wrap(action.method),
|
142
197
|
name=action.action_name,
|
143
198
|
)
|
@@ -152,7 +207,7 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
152
207
|
+ urls
|
153
208
|
)
|
154
209
|
|
155
|
-
def _path_from_custom_url(self, custom_url) -> URLPattern:
|
210
|
+
def _path_from_custom_url(self, custom_url: tuple[str, str, View]) -> URLPattern:
|
156
211
|
return path(
|
157
212
|
custom_url[0],
|
158
213
|
self.admin_site.admin_view(custom_url[2]),
|
@@ -161,13 +216,15 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
161
216
|
)
|
162
217
|
|
163
218
|
def get_action_choices(
|
164
|
-
self,
|
165
|
-
|
219
|
+
self,
|
220
|
+
request: HttpRequest,
|
221
|
+
default_choices: list[tuple[str, str]] = BLANK_CHOICE_DASH,
|
222
|
+
) -> list[tuple[str, str]]:
|
166
223
|
default_choices = [("", _("Select action"))]
|
167
224
|
return super().get_action_choices(request, default_choices)
|
168
225
|
|
169
226
|
@display(description=mark_safe(checkbox.render("action_toggle_all", 1)))
|
170
|
-
def action_checkbox(self, obj: Model):
|
227
|
+
def action_checkbox(self, obj: Model) -> str:
|
171
228
|
return checkbox.render(helpers.ACTION_CHECKBOX_NAME, str(obj.pk))
|
172
229
|
|
173
230
|
def response_change(self, request: HttpRequest, obj: Model) -> HttpResponse:
|
@@ -177,14 +234,14 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
177
234
|
return res
|
178
235
|
|
179
236
|
def response_add(
|
180
|
-
self, request: HttpRequest, obj: Model, post_url_continue:
|
237
|
+
self, request: HttpRequest, obj: Model, post_url_continue: str | None = None
|
181
238
|
) -> HttpResponse:
|
182
239
|
res = super().response_add(request, obj, post_url_continue)
|
183
240
|
if "next" in request.GET:
|
184
241
|
return redirect(request.GET["next"])
|
185
242
|
return res
|
186
243
|
|
187
|
-
def get_changelist(self, request, **kwargs):
|
244
|
+
def get_changelist(self, request: HttpRequest, **kwargs: Any) -> ChangeList:
|
188
245
|
return ChangeList
|
189
246
|
|
190
247
|
def get_formset_kwargs(
|
@@ -198,6 +255,9 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
198
255
|
|
199
256
|
return formset_kwargs
|
200
257
|
|
258
|
+
def get_changeform_datasets(self, request: HttpRequest) -> list[type[BaseDataset]]:
|
259
|
+
return self.change_form_datasets
|
260
|
+
|
201
261
|
|
202
262
|
class BaseInlineMixin:
|
203
263
|
formfield_overrides = FORMFIELD_OVERRIDES_INLINE
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import Any
|
1
|
+
from typing import Any
|
2
2
|
|
3
3
|
from django.http import HttpRequest
|
4
4
|
|
@@ -21,7 +21,7 @@ class ComponentRegistry:
|
|
21
21
|
cls._registry[class_name] = component_cls
|
22
22
|
|
23
23
|
@classmethod
|
24
|
-
def get_class(cls, class_name: str) ->
|
24
|
+
def get_class(cls, class_name: str) -> type | None:
|
25
25
|
return cls._registry.get(class_name)
|
26
26
|
|
27
27
|
@classmethod
|
{django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/choice_filters.py
RENAMED
@@ -4,10 +4,11 @@ from typing import Any
|
|
4
4
|
from django.contrib import admin
|
5
5
|
from django.contrib.admin.views.main import ChangeList
|
6
6
|
from django.core.validators import EMPTY_VALUES
|
7
|
-
from django.db.models import QuerySet
|
7
|
+
from django.db.models import Model, QuerySet
|
8
8
|
from django.http import HttpRequest
|
9
9
|
from django.utils.translation import gettext_lazy as _
|
10
10
|
|
11
|
+
from unfold.admin import ModelAdmin
|
11
12
|
from unfold.contrib.filters.admin.mixins import (
|
12
13
|
ChoicesMixin,
|
13
14
|
MultiValueMixin,
|
@@ -56,6 +57,17 @@ class CheckboxFilter(RadioFilter):
|
|
56
57
|
form_class = CheckboxForm
|
57
58
|
all_option = None
|
58
59
|
|
60
|
+
# TODO: remove once django 4.x is not supported
|
61
|
+
def __init__(
|
62
|
+
self,
|
63
|
+
request: HttpRequest,
|
64
|
+
params: dict[str, Any],
|
65
|
+
model: type[Model],
|
66
|
+
model_admin: ModelAdmin,
|
67
|
+
) -> None:
|
68
|
+
self.request = request
|
69
|
+
super().__init__(request, params, model, model_admin)
|
70
|
+
|
59
71
|
def value(self) -> list[Any]:
|
60
72
|
return self.request.GET.getlist(self.parameter_name)
|
61
73
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from collections.abc import Generator
|
2
|
-
from typing import Any
|
2
|
+
from typing import Any
|
3
3
|
|
4
4
|
from django.contrib.admin.views.main import ChangeList
|
5
5
|
from django.core.validators import EMPTY_VALUES
|
@@ -18,7 +18,7 @@ from unfold.contrib.filters.forms import (
|
|
18
18
|
|
19
19
|
|
20
20
|
class ValueMixin:
|
21
|
-
def value(self) ->
|
21
|
+
def value(self) -> str | None:
|
22
22
|
return (
|
23
23
|
self.lookup_val[0]
|
24
24
|
if self.lookup_val not in EMPTY_VALUES
|
@@ -29,7 +29,7 @@ class ValueMixin:
|
|
29
29
|
|
30
30
|
|
31
31
|
class MultiValueMixin:
|
32
|
-
def value(self) ->
|
32
|
+
def value(self) -> list[str] | None:
|
33
33
|
return (
|
34
34
|
self.lookup_val
|
35
35
|
if self.lookup_val not in EMPTY_VALUES
|
{django_unfold-0.66.0 → django_unfold-0.68.0}/src/unfold/contrib/filters/admin/numeric_filters.py
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import Any
|
1
|
+
from typing import Any
|
2
2
|
|
3
3
|
from django.contrib import admin
|
4
4
|
from django.contrib.admin.options import ModelAdmin
|
@@ -35,7 +35,7 @@ class SingleNumericFilter(admin.FieldListFilter):
|
|
35
35
|
) -> None:
|
36
36
|
super().__init__(field, request, params, model, model_admin, field_path)
|
37
37
|
|
38
|
-
if not isinstance(field,
|
38
|
+
if not isinstance(field, DecimalField | IntegerField | FloatField | AutoField):
|
39
39
|
raise TypeError(
|
40
40
|
f"Class {type(self.field)} is not supported for {self.__class__.__name__}."
|
41
41
|
)
|
@@ -54,7 +54,7 @@ class SingleNumericFilter(admin.FieldListFilter):
|
|
54
54
|
|
55
55
|
def queryset(
|
56
56
|
self, request: HttpRequest, queryset: QuerySet[Any]
|
57
|
-
) ->
|
57
|
+
) -> QuerySet | None:
|
58
58
|
if self.value():
|
59
59
|
try:
|
60
60
|
return queryset.filter(**{self.parameter_name: self.value()})
|
@@ -64,7 +64,7 @@ class SingleNumericFilter(admin.FieldListFilter):
|
|
64
64
|
def value(self) -> Any:
|
65
65
|
return self.used_parameters.get(self.parameter_name, None)
|
66
66
|
|
67
|
-
def expected_parameters(self) -> list[
|
67
|
+
def expected_parameters(self) -> list[str | None]:
|
68
68
|
return [self.parameter_name]
|
69
69
|
|
70
70
|
def choices(self, changelist: ChangeList) -> tuple[dict[str, Any], ...]:
|
@@ -111,7 +111,7 @@ class RangeNumericFilter(RangeNumericMixin, admin.FieldListFilter):
|
|
111
111
|
field_path: str,
|
112
112
|
) -> None:
|
113
113
|
super().__init__(field, request, params, model, model_admin, field_path)
|
114
|
-
if not isinstance(field,
|
114
|
+
if not isinstance(field, DecimalField | IntegerField | FloatField | AutoField):
|
115
115
|
raise TypeError(
|
116
116
|
f"Class {type(self.field)} is not supported for {self.__class__.__name__}."
|
117
117
|
)
|
@@ -156,7 +156,7 @@ class SliderNumericFilter(RangeNumericFilter):
|
|
156
156
|
else:
|
157
157
|
max_value = None
|
158
158
|
|
159
|
-
if isinstance(self.field,
|
159
|
+
if isinstance(self.field, FloatField | DecimalField):
|
160
160
|
decimals = self.MAX_DECIMALS
|
161
161
|
step = self.STEP if self.STEP else self._get_min_step(self.MAX_DECIMALS)
|
162
162
|
else:
|
@@ -179,6 +179,8 @@ class SliderNumericFilter(RangeNumericFilter):
|
|
179
179
|
),
|
180
180
|
"form": self.form_class(
|
181
181
|
name=self.parameter_name,
|
182
|
+
min=min_value,
|
183
|
+
max=max_value,
|
182
184
|
data={
|
183
185
|
self.parameter_name + "_from": self.used_parameters.get(
|
184
186
|
self.parameter_name + "_from", min_value
|
@@ -59,7 +59,11 @@ class AutocompleteDropdownForm(forms.Form):
|
|
59
59
|
label=label,
|
60
60
|
required=False,
|
61
61
|
queryset=field.remote_field.model.objects,
|
62
|
-
widget=self.widget(
|
62
|
+
widget=self.widget(
|
63
|
+
field,
|
64
|
+
model_admin.admin_site,
|
65
|
+
attrs={"class": "unfold-filter-autocomplete"},
|
66
|
+
),
|
63
67
|
)
|
64
68
|
|
65
69
|
class Media:
|
@@ -175,22 +179,39 @@ class SingleNumericForm(forms.Form):
|
|
175
179
|
|
176
180
|
|
177
181
|
class RangeNumericForm(forms.Form):
|
178
|
-
def __init__(
|
182
|
+
def __init__(
|
183
|
+
self, name: str, min: float = None, max: float = None, *args, **kwargs
|
184
|
+
) -> None:
|
179
185
|
self.name = name
|
180
186
|
super().__init__(*args, **kwargs)
|
181
187
|
|
188
|
+
min_max = {}
|
189
|
+
|
190
|
+
if min:
|
191
|
+
min_max["min"] = min
|
192
|
+
if max:
|
193
|
+
min_max["max"] = max
|
194
|
+
|
182
195
|
self.fields[self.name + "_from"] = forms.FloatField(
|
183
196
|
label="",
|
184
197
|
required=False,
|
185
198
|
widget=forms.NumberInput(
|
186
|
-
attrs={
|
199
|
+
attrs={
|
200
|
+
"placeholder": _("From"),
|
201
|
+
"class": " ".join(INPUT_CLASSES),
|
202
|
+
**min_max,
|
203
|
+
}
|
187
204
|
),
|
188
205
|
)
|
189
206
|
self.fields[self.name + "_to"] = forms.FloatField(
|
190
207
|
label="",
|
191
208
|
required=False,
|
192
209
|
widget=forms.NumberInput(
|
193
|
-
attrs={
|
210
|
+
attrs={
|
211
|
+
"placeholder": _("To"),
|
212
|
+
"class": " ".join(INPUT_CLASSES),
|
213
|
+
**min_max,
|
214
|
+
}
|
194
215
|
),
|
195
216
|
)
|
196
217
|
|
django_unfold-0.68.0/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
document.addEventListener("DOMContentLoaded", function () {
|
2
|
+
Array.from(
|
3
|
+
document.getElementsByClassName("admin-numeric-filter-slider")
|
4
|
+
).forEach(function (slider) {
|
5
|
+
if (Array.from(slider.classList).includes("noUi-target")) {
|
6
|
+
return;
|
7
|
+
}
|
8
|
+
|
9
|
+
const fromInput = slider
|
10
|
+
.closest(".admin-numeric-filter-wrapper")
|
11
|
+
.querySelectorAll(".admin-numeric-filter-wrapper-group input")[0];
|
12
|
+
|
13
|
+
const toInput = slider
|
14
|
+
.closest(".admin-numeric-filter-wrapper")
|
15
|
+
.querySelectorAll(".admin-numeric-filter-wrapper-group input")[1];
|
16
|
+
|
17
|
+
noUiSlider.create(slider, {
|
18
|
+
start: [parseFloat(fromInput.value), parseFloat(toInput.value)],
|
19
|
+
step: parseFloat(slider.getAttribute("data-step")),
|
20
|
+
connect: true,
|
21
|
+
format: wNumb({
|
22
|
+
decimals: parseFloat(slider.getAttribute("data-decimals")),
|
23
|
+
}),
|
24
|
+
range: {
|
25
|
+
min: parseFloat(slider.getAttribute("data-min")),
|
26
|
+
max: parseFloat(slider.getAttribute("data-max")),
|
27
|
+
},
|
28
|
+
});
|
29
|
+
|
30
|
+
/*************************************************************
|
31
|
+
* Update slider when input values change
|
32
|
+
*************************************************************/
|
33
|
+
fromInput.addEventListener("keyup", function () {
|
34
|
+
clearTimeout(this._sliderUpdateTimeout);
|
35
|
+
this._sliderUpdateTimeout = setTimeout(() => {
|
36
|
+
slider.noUiSlider.set([
|
37
|
+
parseFloat(this.value),
|
38
|
+
parseFloat(toInput.value),
|
39
|
+
]);
|
40
|
+
}, 500);
|
41
|
+
});
|
42
|
+
|
43
|
+
toInput.addEventListener("keyup", function () {
|
44
|
+
clearTimeout(this._sliderUpdateTimeout);
|
45
|
+
this._sliderUpdateTimeout = setTimeout(() => {
|
46
|
+
slider.noUiSlider.set([
|
47
|
+
parseFloat(fromInput.value),
|
48
|
+
parseFloat(this.value),
|
49
|
+
]);
|
50
|
+
}, 500);
|
51
|
+
});
|
52
|
+
|
53
|
+
/*************************************************************
|
54
|
+
* Updated inputs when slider is moved
|
55
|
+
*************************************************************/
|
56
|
+
slider.noUiSlider.on("update", function (values, handle) {
|
57
|
+
const parent = this.target.closest(".admin-numeric-filter-wrapper");
|
58
|
+
const from = parent.querySelectorAll(
|
59
|
+
".admin-numeric-filter-wrapper-group input"
|
60
|
+
)[0];
|
61
|
+
const to = parent.querySelectorAll(
|
62
|
+
".admin-numeric-filter-wrapper-group input"
|
63
|
+
)[1];
|
64
|
+
|
65
|
+
from.value = values[0];
|
66
|
+
to.value = values[1];
|
67
|
+
});
|
68
|
+
});
|
69
|
+
});
|
@@ -8,22 +8,13 @@
|
|
8
8
|
</h3>
|
9
9
|
|
10
10
|
{% if choice.min is not None and choice.max is not None and choice.step %}
|
11
|
-
<div class="admin-numeric-filter-slider-tooltips">
|
12
|
-
<span class="admin-numeric-filter-slider-tooltip-from border border-base-200 cursor-not-allowed flex grow flex-row items-center mr-auto rounded-default shadow-xs px-3 py-2 w-full dark:bg-base-900 dark:border-base-700 dark:text-font-default-dark">
|
13
|
-
{{ choice.value_from }}
|
14
|
-
</span>
|
15
11
|
|
16
|
-
|
17
|
-
|
18
|
-
</span>
|
12
|
+
<div class="admin-numeric-filter-wrapper-group flex flex-row gap-4 mb-4">
|
13
|
+
{{ choice.form.as_p }}
|
19
14
|
</div>
|
20
15
|
|
21
16
|
<div class="admin-numeric-filter-slider" data-min="{{ choice.min|unlocalize }}" data-max="{{ choice.max|unlocalize }}" data-decimals="{{ choice.decimals }}" data-step="{{ choice.step|unlocalize }}">
|
22
17
|
</div>
|
23
|
-
|
24
|
-
<div class="admin-numeric-filter-wrapper-group hidden">
|
25
|
-
{{ choice.form.as_p }}
|
26
|
-
</div>
|
27
18
|
{% else %}
|
28
19
|
<div class="admin-numeric-filter-slider-error dark:text-font-default-dark">
|
29
20
|
<p class="border border-base-300 border-dashed leading-[36px] h-[38px] rounded-default text-center dark:border-base-700">
|