django-unfold 0.33.0__tar.gz → 0.35.0__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {django_unfold-0.33.0 → django_unfold-0.35.0}/PKG-INFO +33 -5
- {django_unfold-0.33.0 → django_unfold-0.35.0}/README.md +32 -4
- {django_unfold-0.33.0 → django_unfold-0.35.0}/pyproject.toml +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/admin.py +12 -14
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/admin.py +34 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/forms.py +36 -3
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +10 -10
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +10 -10
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +3 -3
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +6 -6
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +8 -8
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +18 -18
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/decorators.py +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/fields.py +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/forms.py +2 -1
- django_unfold-0.35.0/src/unfold/static/unfold/css/styles.css +1 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/app.js +23 -0
- django_unfold-0.35.0/src/unfold/static/unfold/js/select2.init.js +15 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/styles.css +6 -10
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/actions.html +14 -12
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/app_list.html +3 -5
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_form.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list.html +4 -4
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list_results.html +4 -4
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/delete_confirmation.html +9 -9
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/delete_selected_confirmation.html +9 -9
- django_unfold-0.35.0/src/unfold/templates/admin/edit_inline/stacked.html +92 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/edit_inline/tabular.html +11 -11
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/filter.html +5 -5
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/includes/object_delete_summary.html +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/object_history.html +9 -9
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/pagination.html +3 -3
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/submit_line.html +7 -7
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/change_list_filter.html +3 -3
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/progress.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/table.html +4 -4
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/title.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/account_links.html +2 -2
- django_unfold-0.35.0/src/unfold/templates/unfold/helpers/actions_row.html +21 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/add_link.html +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/app_list.html +7 -7
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/app_list_default.html +7 -7
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/display_header.html +4 -2
- django_unfold-0.35.0/src/unfold/templates/unfold/helpers/field_readonly_value.html +1 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +1 -1
- django_unfold-0.35.0/src/unfold/templates/unfold/helpers/help_text.html +5 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/history.html +3 -3
- django_unfold-0.35.0/src/unfold/templates/unfold/helpers/label.html +16 -0
- django_unfold-0.35.0/src/unfold/templates/unfold/helpers/messages.html +20 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/navigation.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/search_results.html +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/site_icon.html +1 -1
- django_unfold-0.35.0/src/unfold/templates/unfold/helpers/tab_action.html +5 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/tab_list.html +9 -5
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/theme_switch.html +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/welcomemsg.html +5 -3
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/skeleton.html +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +2 -2
- django_unfold-0.35.0/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +19 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/radio_option.html +1 -1
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_datetime.html +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +2 -2
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templatetags/unfold_list.py +6 -7
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/widgets.py +21 -6
- django_unfold-0.33.0/src/unfold/static/unfold/css/styles.css +0 -1
- django_unfold-0.33.0/src/unfold/templates/admin/edit_inline/stacked.html +0 -86
- django_unfold-0.33.0/src/unfold/templates/unfold/helpers/actions_row.html +0 -19
- django_unfold-0.33.0/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -1
- django_unfold-0.33.0/src/unfold/templates/unfold/helpers/help_text.html +0 -5
- django_unfold-0.33.0/src/unfold/templates/unfold/helpers/label.html +0 -16
- django_unfold-0.33.0/src/unfold/templates/unfold/helpers/messages.html +0 -9
- django_unfold-0.33.0/src/unfold/templates/unfold/helpers/tab_action.html +0 -5
- django_unfold-0.33.0/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -15
- {django_unfold-0.33.0 → django_unfold-0.35.0}/LICENSE.md +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/apps.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/checks.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/apps.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider.min.css +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider.min.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/wNumb.min.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/apps.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix.css +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/widgets.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/apps.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/apps.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/forms.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/admin.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/apps.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/checks.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/forms.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/apps.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/dataclasses.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/exceptions.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/settings.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/sites.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/css/simplebar.css +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.anchor.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.persist.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/chart.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/htmx.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/simplebar.js +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/app_index.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/auth/user/change_password.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/base.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/base_site.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/index.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/login.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/search_form.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/registration/logged_out.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/registration/password_change_done.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/registration/password_change_form.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/button.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/card.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/container.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/flex.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/icon.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/navigation.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/separator.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/text.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/boolean.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/field.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/search.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/textarea_expandable.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templatetags/__init__.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templatetags/unfold.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/typing.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/utils.py +0 -0
- {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/views.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: django-unfold
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.35.0
|
4
4
|
Summary: Modern Django admin theme for seamless interface development
|
5
5
|
Home-page: https://unfoldadmin.com
|
6
6
|
License: MIT
|
@@ -111,6 +111,7 @@ Did you decide to start using Unfold but you don't have time to make the switch
|
|
111
111
|
- [Pre-commit](#pre-commit)
|
112
112
|
- [Poetry configuration](#poetry-configuration)
|
113
113
|
- [Compiling Tailwind](#compiling-tailwind)
|
114
|
+
- [Design system](#design-system)
|
114
115
|
- [Using VS Code with containers](#using-vs-code-with-containers)
|
115
116
|
- [Development server](#development-server)
|
116
117
|
- [Compiling Tailwind in devcontainer](#compiling-tailwind-in-devcontainer)
|
@@ -178,7 +179,7 @@ class CustomAdminClass(ModelAdmin):
|
|
178
179
|
from django.contrib import admin
|
179
180
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
180
181
|
from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin
|
181
|
-
from django.contrib.auth.models import User
|
182
|
+
from django.contrib.auth.models import User, Group
|
182
183
|
|
183
184
|
from unfold.admin import ModelAdmin
|
184
185
|
|
@@ -359,6 +360,9 @@ class CustomAdminClass(ModelAdmin):
|
|
359
360
|
# Display fields in changeform in compressed mode
|
360
361
|
compressed_fields = True # Default: False
|
361
362
|
|
363
|
+
# Warn before leaving unsaved changes in changeform
|
364
|
+
warn_unsaved_form = True # Default: False
|
365
|
+
|
362
366
|
# Preprocess content of readonly fields before render
|
363
367
|
readonly_preprocess_fields = {
|
364
368
|
"model_field_name": "html.unescape",
|
@@ -374,6 +378,9 @@ class CustomAdminClass(ModelAdmin):
|
|
374
378
|
# Position horizontal scrollbar in changelist at the top
|
375
379
|
list_horizontal_scrollbar_top = False
|
376
380
|
|
381
|
+
# Dsable select all action in changelist
|
382
|
+
list_disable_select_all = False
|
383
|
+
|
377
384
|
# Custom actions
|
378
385
|
actions_list = [] # Displayed above the results list
|
379
386
|
actions_row = [] # Displayed in a table row in results list
|
@@ -641,7 +648,14 @@ The difference between them is that `ChoicesDropdownFilter` will collect a list
|
|
641
648
|
from django.contrib import admin
|
642
649
|
from django.contrib.auth.models import User
|
643
650
|
from unfold.admin import ModelAdmin
|
644
|
-
from unfold.contrib.filters.admin import
|
651
|
+
from unfold.contrib.filters.admin import (
|
652
|
+
ChoicesDropdownFilter,
|
653
|
+
MultipleChoicesDropdownFilter,
|
654
|
+
RelatedDropdownFilter,
|
655
|
+
MultipleRelatedDropdownFilter,
|
656
|
+
DropdownFilter,
|
657
|
+
MultipleDropdownFilter
|
658
|
+
)
|
645
659
|
|
646
660
|
|
647
661
|
class CustomDropdownFilter(DropdownFilter):
|
@@ -668,7 +682,9 @@ class MyAdmin(ModelAdmin):
|
|
668
682
|
list_filter = [
|
669
683
|
CustomDropdownFilter,
|
670
684
|
("modelfield_with_choices", ChoicesDropdownFilter),
|
685
|
+
("modelfield_with_choices_multiple", MultipleChoicesDropdownFilter),
|
671
686
|
("modelfield_with_foreign_key", RelatedDropdownFilter)
|
687
|
+
("modelfield_with_foreign_key_multiple", MultipleRelatedDropdownFilter)
|
672
688
|
]
|
673
689
|
```
|
674
690
|
|
@@ -1359,8 +1375,8 @@ def dashboard_callback(request: HttpRequest) -> Dict:
|
|
1359
1375
|
```
|
1360
1376
|
|
1361
1377
|
```django-html
|
1362
|
-
{% component "unfold/components/card" with title="Card title" %}
|
1363
|
-
{% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{%
|
1378
|
+
{% component "unfold/components/card.html" with title="Card title" %}
|
1379
|
+
{% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{% endcomponent %}
|
1364
1380
|
{% endcomponent %}
|
1365
1381
|
```
|
1366
1382
|
|
@@ -1402,6 +1418,17 @@ Some components like datepickers, calendars or selectors in admin was not possib
|
|
1402
1418
|
|
1403
1419
|
**Note:** most of the custom styles located in style.css are created via `@apply some-tailwind-class;` as is not possible to manually add CSS class to element which are for example created via jQuery.
|
1404
1420
|
|
1421
|
+
|
1422
|
+
### Design system
|
1423
|
+
|
1424
|
+
| Component | Classes |
|
1425
|
+
| --------------------------------- | ------------------------------------------------------ |
|
1426
|
+
| Regular text | text-gray-600 dark:text-gray-300 |
|
1427
|
+
| Hover regular text | text-gray-700 dark:text-gray-200 |
|
1428
|
+
| Headings | font-semibold text-gray-900 dark:text-gray-100 |
|
1429
|
+
| Icon | text-gray-400 dark:text-gray-500 |
|
1430
|
+
| Hover icon | hover:text-gray-500 dark:hover:text-gray-400 |
|
1431
|
+
|
1405
1432
|
### Using VS Code with containers
|
1406
1433
|
|
1407
1434
|
Unfold already contains prepared support for VS Code development. After cloning the project locally, open the main folder in VS Code (in terminal `code .`). Immediately, you would see a message from VS Code **Folder contains a Dev Container configuration file. Reopen folder to develop in a container** which will inform you that the support for containers is prepared. Confirm the message by clicking on **Reopen in Container**. If the message is not there, you can still manually open the project in a container by running the command **Dev Containers: Reopen in Container**.
|
@@ -1424,4 +1451,5 @@ The container has already a node preinstalled so it is possible to compile a new
|
|
1424
1451
|
- [Material Icons](https://fonts.google.com/icons) - Icons from Google Fonts
|
1425
1452
|
- [Trix](https://trix-editor.org/) - WYSIWYG editor
|
1426
1453
|
- [Alpine.js](https://alpinejs.dev/) - JavaScript interactions
|
1454
|
+
- [Chart.js](https://github.com/chartjs/Chart.js/) - Chart components
|
1427
1455
|
|
@@ -87,6 +87,7 @@ Did you decide to start using Unfold but you don't have time to make the switch
|
|
87
87
|
- [Pre-commit](#pre-commit)
|
88
88
|
- [Poetry configuration](#poetry-configuration)
|
89
89
|
- [Compiling Tailwind](#compiling-tailwind)
|
90
|
+
- [Design system](#design-system)
|
90
91
|
- [Using VS Code with containers](#using-vs-code-with-containers)
|
91
92
|
- [Development server](#development-server)
|
92
93
|
- [Compiling Tailwind in devcontainer](#compiling-tailwind-in-devcontainer)
|
@@ -154,7 +155,7 @@ class CustomAdminClass(ModelAdmin):
|
|
154
155
|
from django.contrib import admin
|
155
156
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
156
157
|
from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin
|
157
|
-
from django.contrib.auth.models import User
|
158
|
+
from django.contrib.auth.models import User, Group
|
158
159
|
|
159
160
|
from unfold.admin import ModelAdmin
|
160
161
|
|
@@ -335,6 +336,9 @@ class CustomAdminClass(ModelAdmin):
|
|
335
336
|
# Display fields in changeform in compressed mode
|
336
337
|
compressed_fields = True # Default: False
|
337
338
|
|
339
|
+
# Warn before leaving unsaved changes in changeform
|
340
|
+
warn_unsaved_form = True # Default: False
|
341
|
+
|
338
342
|
# Preprocess content of readonly fields before render
|
339
343
|
readonly_preprocess_fields = {
|
340
344
|
"model_field_name": "html.unescape",
|
@@ -350,6 +354,9 @@ class CustomAdminClass(ModelAdmin):
|
|
350
354
|
# Position horizontal scrollbar in changelist at the top
|
351
355
|
list_horizontal_scrollbar_top = False
|
352
356
|
|
357
|
+
# Dsable select all action in changelist
|
358
|
+
list_disable_select_all = False
|
359
|
+
|
353
360
|
# Custom actions
|
354
361
|
actions_list = [] # Displayed above the results list
|
355
362
|
actions_row = [] # Displayed in a table row in results list
|
@@ -617,7 +624,14 @@ The difference between them is that `ChoicesDropdownFilter` will collect a list
|
|
617
624
|
from django.contrib import admin
|
618
625
|
from django.contrib.auth.models import User
|
619
626
|
from unfold.admin import ModelAdmin
|
620
|
-
from unfold.contrib.filters.admin import
|
627
|
+
from unfold.contrib.filters.admin import (
|
628
|
+
ChoicesDropdownFilter,
|
629
|
+
MultipleChoicesDropdownFilter,
|
630
|
+
RelatedDropdownFilter,
|
631
|
+
MultipleRelatedDropdownFilter,
|
632
|
+
DropdownFilter,
|
633
|
+
MultipleDropdownFilter
|
634
|
+
)
|
621
635
|
|
622
636
|
|
623
637
|
class CustomDropdownFilter(DropdownFilter):
|
@@ -644,7 +658,9 @@ class MyAdmin(ModelAdmin):
|
|
644
658
|
list_filter = [
|
645
659
|
CustomDropdownFilter,
|
646
660
|
("modelfield_with_choices", ChoicesDropdownFilter),
|
661
|
+
("modelfield_with_choices_multiple", MultipleChoicesDropdownFilter),
|
647
662
|
("modelfield_with_foreign_key", RelatedDropdownFilter)
|
663
|
+
("modelfield_with_foreign_key_multiple", MultipleRelatedDropdownFilter)
|
648
664
|
]
|
649
665
|
```
|
650
666
|
|
@@ -1335,8 +1351,8 @@ def dashboard_callback(request: HttpRequest) -> Dict:
|
|
1335
1351
|
```
|
1336
1352
|
|
1337
1353
|
```django-html
|
1338
|
-
{% component "unfold/components/card" with title="Card title" %}
|
1339
|
-
{% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{%
|
1354
|
+
{% component "unfold/components/card.html" with title="Card title" %}
|
1355
|
+
{% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{% endcomponent %}
|
1340
1356
|
{% endcomponent %}
|
1341
1357
|
```
|
1342
1358
|
|
@@ -1378,6 +1394,17 @@ Some components like datepickers, calendars or selectors in admin was not possib
|
|
1378
1394
|
|
1379
1395
|
**Note:** most of the custom styles located in style.css are created via `@apply some-tailwind-class;` as is not possible to manually add CSS class to element which are for example created via jQuery.
|
1380
1396
|
|
1397
|
+
|
1398
|
+
### Design system
|
1399
|
+
|
1400
|
+
| Component | Classes |
|
1401
|
+
| --------------------------------- | ------------------------------------------------------ |
|
1402
|
+
| Regular text | text-gray-600 dark:text-gray-300 |
|
1403
|
+
| Hover regular text | text-gray-700 dark:text-gray-200 |
|
1404
|
+
| Headings | font-semibold text-gray-900 dark:text-gray-100 |
|
1405
|
+
| Icon | text-gray-400 dark:text-gray-500 |
|
1406
|
+
| Hover icon | hover:text-gray-500 dark:hover:text-gray-400 |
|
1407
|
+
|
1381
1408
|
### Using VS Code with containers
|
1382
1409
|
|
1383
1410
|
Unfold already contains prepared support for VS Code development. After cloning the project locally, open the main folder in VS Code (in terminal `code .`). Immediately, you would see a message from VS Code **Folder contains a Dev Container configuration file. Reopen folder to develop in a container** which will inform you that the support for containers is prepared. Confirm the message by clicking on **Reopen in Container**. If the message is not there, you can still manually open the project in a container by running the command **Dev Containers: Reopen in Container**.
|
@@ -1400,3 +1427,4 @@ The container has already a node preinstalled so it is possible to compile a new
|
|
1400
1427
|
- [Material Icons](https://fonts.google.com/icons) - Icons from Google Fonts
|
1401
1428
|
- [Trix](https://trix-editor.org/) - WYSIWYG editor
|
1402
1429
|
- [Alpine.js](https://alpinejs.dev/) - JavaScript interactions
|
1430
|
+
- [Chart.js](https://github.com/chartjs/Chart.js/) - Chart components
|
@@ -84,7 +84,7 @@ FORMFIELD_OVERRIDES = {
|
|
84
84
|
models.UUIDField: {"widget": UnfoldAdminUUIDInputWidget},
|
85
85
|
models.TextField: {"widget": UnfoldAdminTextareaWidget},
|
86
86
|
models.NullBooleanField: {"widget": UnfoldAdminNullBooleanSelectWidget},
|
87
|
-
models.BooleanField: {"widget":
|
87
|
+
models.BooleanField: {"widget": UnfoldBooleanSwitchWidget},
|
88
88
|
models.IntegerField: {"widget": UnfoldAdminIntegerFieldWidget},
|
89
89
|
models.BigIntegerField: {"widget": UnfoldAdminBigIntegerFieldWidget},
|
90
90
|
models.DecimalField: {"widget": UnfoldAdminDecimalFieldWidget},
|
@@ -119,7 +119,9 @@ FORMFIELD_OVERRIDES_INLINE.update(
|
|
119
119
|
}
|
120
120
|
)
|
121
121
|
|
122
|
-
checkbox = UnfoldBooleanWidget(
|
122
|
+
checkbox = UnfoldBooleanWidget(
|
123
|
+
{"class": "action-select", "aria-label": _("Select record")}, lambda value: False
|
124
|
+
)
|
123
125
|
|
124
126
|
helpers.AdminField = UnfoldAdminField
|
125
127
|
|
@@ -231,8 +233,10 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
|
|
231
233
|
list_horizontal_scrollbar_top = False
|
232
234
|
list_filter_submit = False
|
233
235
|
list_fullwidth = False
|
236
|
+
list_disable_select_all = False
|
234
237
|
compressed_fields = False
|
235
238
|
readonly_preprocess_fields = {}
|
239
|
+
warn_unsaved_form = False
|
236
240
|
checks_class = UnfoldModelAdminChecks
|
237
241
|
|
238
242
|
@property
|
@@ -241,13 +245,14 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
|
|
241
245
|
additional_media = forms.Media()
|
242
246
|
|
243
247
|
for filter in self.list_filter:
|
244
|
-
if
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
filter[1].form_class, "Media"
|
248
|
+
if (
|
249
|
+
isinstance(filter, (tuple, list))
|
250
|
+
and hasattr(filter[1], "form_class")
|
251
|
+
and hasattr(filter[1].form_class, "Media")
|
249
252
|
):
|
250
253
|
additional_media += forms.Media(filter[1].form_class.Media)
|
254
|
+
elif hasattr(filter, "form_class") and hasattr(filter.form_class, "Media"):
|
255
|
+
additional_media += forms.Media(filter.form_class.Media)
|
251
256
|
|
252
257
|
return media + additional_media
|
253
258
|
|
@@ -414,13 +419,6 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
|
|
414
419
|
if extra_context is None:
|
415
420
|
extra_context = {}
|
416
421
|
|
417
|
-
new_formfield_overrides = copy.deepcopy(self.formfield_overrides)
|
418
|
-
new_formfield_overrides.update(
|
419
|
-
{models.BooleanField: {"widget": UnfoldBooleanSwitchWidget}}
|
420
|
-
)
|
421
|
-
|
422
|
-
self.formfield_overrides = new_formfield_overrides
|
423
|
-
|
424
422
|
actions = []
|
425
423
|
if object_id:
|
426
424
|
for action in self.get_actions_detail(request, object_id):
|
@@ -41,12 +41,23 @@ class ValueMixin:
|
|
41
41
|
)
|
42
42
|
|
43
43
|
|
44
|
+
class MultiValueMixin:
|
45
|
+
def value(self) -> Optional[List[str]]:
|
46
|
+
return (
|
47
|
+
self.lookup_val
|
48
|
+
if self.lookup_val not in EMPTY_VALUES
|
49
|
+
and isinstance(self.lookup_val, List)
|
50
|
+
and len(self.lookup_val) > 0
|
51
|
+
else self.lookup_val
|
52
|
+
)
|
53
|
+
|
54
|
+
|
44
55
|
class DropdownMixin:
|
45
56
|
template = "unfold/filters/filters_field.html"
|
46
57
|
form_class = DropdownForm
|
47
58
|
all_option = ["", _("All")]
|
48
59
|
|
49
|
-
def queryset(self, request, queryset) -> QuerySet:
|
60
|
+
def queryset(self, request: HttpRequest, queryset: QuerySet) -> QuerySet:
|
50
61
|
if self.value() not in EMPTY_VALUES:
|
51
62
|
return super().queryset(request, queryset)
|
52
63
|
|
@@ -112,11 +123,23 @@ class DropdownFilter(admin.SimpleListFilter):
|
|
112
123
|
name=self.parameter_name,
|
113
124
|
choices=[self.all_option, *self.lookup_choices],
|
114
125
|
data={self.parameter_name: self.value()},
|
126
|
+
multiple=self.multiple if hasattr(self, "multiple") else False,
|
115
127
|
),
|
116
128
|
},
|
117
129
|
)
|
118
130
|
|
119
131
|
|
132
|
+
class MultipleDropdownFilter(DropdownFilter):
|
133
|
+
multiple = True
|
134
|
+
|
135
|
+
def __init__(self, request, params, model, model_admin):
|
136
|
+
self.request = request
|
137
|
+
super().__init__(request, params, model, model_admin)
|
138
|
+
|
139
|
+
def value(self):
|
140
|
+
return self.request.GET.getlist(self.parameter_name)
|
141
|
+
|
142
|
+
|
120
143
|
class ChoicesDropdownFilter(ValueMixin, DropdownMixin, admin.ChoicesFieldListFilter):
|
121
144
|
def choices(self, changelist: ChangeList):
|
122
145
|
choices = [self.all_option, *self.field.flatchoices]
|
@@ -127,10 +150,15 @@ class ChoicesDropdownFilter(ValueMixin, DropdownMixin, admin.ChoicesFieldListFil
|
|
127
150
|
name=self.lookup_kwarg,
|
128
151
|
choices=choices,
|
129
152
|
data={self.lookup_kwarg: self.value()},
|
153
|
+
multiple=self.multiple if hasattr(self, "multiple") else False,
|
130
154
|
),
|
131
155
|
}
|
132
156
|
|
133
157
|
|
158
|
+
class MultipleChoicesDropdownFilter(MultiValueMixin, ChoicesDropdownFilter):
|
159
|
+
multiple = True
|
160
|
+
|
161
|
+
|
134
162
|
class RelatedDropdownFilter(ValueMixin, DropdownMixin, admin.RelatedFieldListFilter):
|
135
163
|
def choices(self, changelist: ChangeList):
|
136
164
|
yield {
|
@@ -139,10 +167,15 @@ class RelatedDropdownFilter(ValueMixin, DropdownMixin, admin.RelatedFieldListFil
|
|
139
167
|
name=self.lookup_kwarg,
|
140
168
|
choices=[self.all_option, *self.lookup_choices],
|
141
169
|
data={self.lookup_kwarg: self.value()},
|
170
|
+
multiple=self.multiple if hasattr(self, "multiple") else False,
|
142
171
|
),
|
143
172
|
}
|
144
173
|
|
145
174
|
|
175
|
+
class MultipleRelatedDropdownFilter(MultiValueMixin, RelatedDropdownFilter):
|
176
|
+
multiple = True
|
177
|
+
|
178
|
+
|
146
179
|
class SingleNumericFilter(admin.FieldListFilter):
|
147
180
|
request = None
|
148
181
|
parameter_name = None
|
@@ -1,8 +1,10 @@
|
|
1
1
|
from django import forms
|
2
|
+
from django.forms import ChoiceField, MultipleChoiceField
|
2
3
|
from django.utils.translation import gettext_lazy as _
|
3
4
|
|
4
5
|
from ...widgets import (
|
5
6
|
INPUT_CLASSES,
|
7
|
+
UnfoldAdminSelectMultipleWidget,
|
6
8
|
UnfoldAdminSelectWidget,
|
7
9
|
UnfoldAdminSplitDateTimeVerticalWidget,
|
8
10
|
UnfoldAdminTextInputWidget,
|
@@ -21,15 +23,46 @@ class SearchForm(forms.Form):
|
|
21
23
|
|
22
24
|
|
23
25
|
class DropdownForm(forms.Form):
|
24
|
-
|
26
|
+
widget = UnfoldAdminSelectWidget(
|
27
|
+
attrs={
|
28
|
+
"data-theme": "admin-autocomplete",
|
29
|
+
"class": "admin-autocomplete",
|
30
|
+
}
|
31
|
+
)
|
32
|
+
field = ChoiceField
|
33
|
+
|
34
|
+
def __init__(self, name, label, choices, multiple=False, *args, **kwargs):
|
25
35
|
super().__init__(*args, **kwargs)
|
26
36
|
|
27
|
-
|
37
|
+
if multiple:
|
38
|
+
self.widget = UnfoldAdminSelectMultipleWidget(
|
39
|
+
attrs={
|
40
|
+
"data-theme": "admin-autocomplete",
|
41
|
+
"class": "admin-autocomplete",
|
42
|
+
}
|
43
|
+
)
|
44
|
+
self.field = MultipleChoiceField
|
45
|
+
|
46
|
+
self.fields[name] = self.field(
|
28
47
|
label=label,
|
29
48
|
required=False,
|
30
49
|
choices=choices,
|
31
|
-
widget=
|
50
|
+
widget=self.widget,
|
51
|
+
)
|
52
|
+
|
53
|
+
class Media:
|
54
|
+
js = (
|
55
|
+
"admin/js/vendor/jquery/jquery.js",
|
56
|
+
"admin/js/vendor/select2/select2.full.js",
|
57
|
+
"admin/js/jquery.init.js",
|
58
|
+
"unfold/js/select2.init.js",
|
32
59
|
)
|
60
|
+
css = {
|
61
|
+
"screen": (
|
62
|
+
"admin/css/vendor/select2/select2.css",
|
63
|
+
"admin/css/autocomplete.css",
|
64
|
+
),
|
65
|
+
}
|
33
66
|
|
34
67
|
|
35
68
|
class SingleNumericForm(forms.Form):
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
{% with choices.0 as choice %}
|
4
4
|
<div class="flex flex-col mb-6">
|
5
|
-
<h3 class="font-
|
5
|
+
<h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
|
6
6
|
|
7
7
|
<div class="flex flex-col space-y-4">
|
8
8
|
{% for field in choice.form %}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
{% with choices.0 as choice %}
|
4
4
|
<div class="flex flex-col mb-6">
|
5
|
-
<h3 class="font-
|
5
|
+
<h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
|
6
6
|
|
7
7
|
<div class="flex flex-col space-y-4">
|
8
8
|
{% for field in choice.form %}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
{% with choices.0 as choice %}
|
4
4
|
<div class="flex flex-col mb-6">
|
5
|
-
<h3 class="font-
|
5
|
+
<h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
|
6
6
|
|
7
7
|
<div class="flex flex-row gap-4">
|
8
8
|
{% for field in choice.form %}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
{% with choices.0 as choice %}
|
4
4
|
<div class="flex flex-col mb-6">
|
5
|
-
<h3 class="font-
|
5
|
+
<h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
|
6
6
|
|
7
7
|
{% for field in choice.form %}
|
8
8
|
<div class="flex flex-row flex-wrap group relative{% if field.errors %} errors{% endif %}">
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
{% with choices.0 as choice %}
|
5
5
|
<div class="admin-numeric-filter-wrapper mb-6">
|
6
|
-
<h3 class="font-
|
6
|
+
<h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">
|
7
7
|
{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}
|
8
8
|
</h3>
|
9
9
|
|
@@ -3,25 +3,25 @@
|
|
3
3
|
<form method="post">
|
4
4
|
{% csrf_token %}
|
5
5
|
|
6
|
-
<h2 class="font-
|
6
|
+
<h2 class="font-semibold mb-3 text-gray-900 dark:text-gray-100">
|
7
7
|
{% trans "Group permissions" %}
|
8
8
|
</h2>
|
9
9
|
|
10
10
|
{% if groups_perms.items %}
|
11
|
-
<table id="group-permissions" class="border-gray-200 border-spacing-none border-separate mb-6
|
12
|
-
<thead class="hidden lg:table-header-group">
|
11
|
+
<table id="group-permissions" class="border-gray-200 border-spacing-none border-separate mb-6 w-full lg:border lg:rounded-md lg:shadow-sm lg:dark:border-gray-800">
|
12
|
+
<thead class="hidden lg:table-header-group text-gray-900 dark:text-gray-100">
|
13
13
|
<tr>
|
14
|
-
<th class="align-middle font-medium px-3 py-2 text-left
|
14
|
+
<th class="align-middle font-medium px-3 py-2 text-left">
|
15
15
|
{% trans "Group" %}
|
16
16
|
</th>
|
17
17
|
|
18
18
|
{% for perm in model_perms %}
|
19
|
-
<th class="align-middle font-medium px-3 py-2 text-left
|
19
|
+
<th class="align-middle font-medium px-3 py-2 text-left">
|
20
20
|
{{ perm.name }}
|
21
21
|
</th>
|
22
22
|
{% endfor %}
|
23
23
|
|
24
|
-
<th class="align-middle font-medium px-3 py-2 text-right
|
24
|
+
<th class="align-middle font-medium px-3 py-2 text-right">
|
25
25
|
{% trans "Action" %}
|
26
26
|
</th>
|
27
27
|
</tr>
|
@@ -30,14 +30,14 @@
|
|
30
30
|
<tbody>
|
31
31
|
{% for group, group_perms in groups_perms.items %}
|
32
32
|
<tr class="block border mb-3 rounded-md shadow-sm lg:table-row lg:border-none lg:mb-0 lg:shadow-none dark:border-gray-800">
|
33
|
-
<th class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left
|
34
|
-
<span
|
33
|
+
<th class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "User" %}">
|
34
|
+
<span>
|
35
35
|
{{ group }}
|
36
36
|
</span>
|
37
37
|
</th>
|
38
38
|
|
39
39
|
{% for perm in model_perms %}
|
40
|
-
<td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left
|
40
|
+
<td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{{ perm.name }}">
|
41
41
|
{% if perm.codename in group_perms %}
|
42
42
|
{% include "unfold/helpers/boolean.html" with value=False %}
|
43
43
|
{% else %}
|
@@ -46,7 +46,7 @@
|
|
46
46
|
</td>
|
47
47
|
{% endfor %}
|
48
48
|
|
49
|
-
<td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-right
|
49
|
+
<td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-right before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "Action" %}">
|
50
50
|
<a href="group-manage/{{ group.id|safe }}/" class="hover:text-gray-700 dark:hover:text-white">
|
51
51
|
{% trans "Edit" %}
|
52
52
|
</a>
|
@@ -3,25 +3,25 @@
|
|
3
3
|
<form method="post">
|
4
4
|
{% csrf_token %}
|
5
5
|
|
6
|
-
<h2 class="font-medium mb-3
|
6
|
+
<h2 class="font-medium mb-3 text-gray-700 dark:text-gray-200">
|
7
7
|
{% trans "User permissions" %}
|
8
8
|
</h2>
|
9
9
|
|
10
10
|
{% if users_perms.items %}
|
11
|
-
<table id="user-permissions" class="border-gray-200 border-spacing-none border-separate mb-6
|
12
|
-
<thead class="hidden lg:table-header-group">
|
11
|
+
<table id="user-permissions" class="border-gray-200 border-spacing-none border-separate mb-6 w-full lg:border lg:rounded-md lg:shadow-sm lg:dark:border-gray-800">
|
12
|
+
<thead class="hidden lg:table-header-group text-gray-900 dark:text-gray-100">
|
13
13
|
<tr>
|
14
|
-
<th class="align-middle font-medium px-3 py-2 text-left
|
14
|
+
<th class="align-middle font-medium px-3 py-2 text-left">
|
15
15
|
{% trans "User" %}
|
16
16
|
</th>
|
17
17
|
|
18
18
|
{% for perm in model_perms %}
|
19
|
-
<th class="align-middle font-medium px-3 py-2 text-left
|
19
|
+
<th class="align-middle font-medium px-3 py-2 text-left">
|
20
20
|
{{ perm.name }}
|
21
21
|
</th>
|
22
22
|
{% endfor %}
|
23
23
|
|
24
|
-
<th class="align-middle font-medium px-3 py-2 text-right
|
24
|
+
<th class="align-middle font-medium px-3 py-2 text-right">
|
25
25
|
{% trans "Action" %}
|
26
26
|
</th>
|
27
27
|
</tr>
|
@@ -30,14 +30,14 @@
|
|
30
30
|
<tbody>
|
31
31
|
{% for user, user_perms in users_perms.items %}
|
32
32
|
<tr class="block border mb-3 rounded-md shadow-sm lg:table-row lg:border-none lg:mb-0 lg:shadow-none dark:border-gray-800">
|
33
|
-
<th class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left
|
34
|
-
<span
|
33
|
+
<th class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "User" %}">
|
34
|
+
<span>
|
35
35
|
{{ user }}
|
36
36
|
</span>
|
37
37
|
</th>
|
38
38
|
|
39
39
|
{% for perm in model_perms %}
|
40
|
-
<td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left
|
40
|
+
<td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{{ perm.name }}">
|
41
41
|
{% if perm.codename in group_perms %}
|
42
42
|
{% include "unfold/helpers/boolean.html" with value=False %}
|
43
43
|
{% else %}
|
@@ -46,7 +46,7 @@
|
|
46
46
|
</td>
|
47
47
|
{% endfor %}
|
48
48
|
|
49
|
-
<td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-right
|
49
|
+
<td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-right before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "Action" %}">
|
50
50
|
<a href="user-manage/{{ user.id|safe }}/" class="hover:text-gray-700 dark:hover:text-white">
|
51
51
|
{% trans "Edit" %}
|
52
52
|
</a>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
{{ confirm_form.as_p }}
|
8
8
|
|
9
|
-
<p class="font-
|
9
|
+
<p class="font-semibold p-4 text-sm text-gray-900 dark:text-gray-100">
|
10
10
|
{% trans "Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'" %}
|
11
11
|
</p>
|
12
12
|
|
@@ -14,8 +14,8 @@
|
|
14
14
|
{% for line, errors in result.row_errors %}
|
15
15
|
{% for error in errors %}
|
16
16
|
<li x-data="{ open: false }">
|
17
|
-
<div class="bg-red-50 border border-red-200 cursor-pointer mb-4 rounded shadow-sm text-red-500
|
18
|
-
<div class="border-b border-red-200 flex flex-row font-
|
17
|
+
<div class="bg-red-50 border border-red-200 cursor-pointer mb-4 rounded shadow-sm text-red-500 dark:bg-red-500/20 dark:border-red-500/20" x-on:click="open = ! open">
|
18
|
+
<div class="border-b border-red-200 flex flex-row font-semibold py-3 px-4 dark:border-red-500/20">
|
19
19
|
{% trans "Line number" %}: {{ line }} - {{ error.error }}
|
20
20
|
</div>
|
21
21
|
|
@@ -26,7 +26,7 @@
|
|
26
26
|
</div>
|
27
27
|
</div>
|
28
28
|
|
29
|
-
<div class="block border leading-relaxed rounded p-4
|
29
|
+
<div class="block border leading-relaxed mb-4 rounded p-4 traceback dark:border-gray-800 dark:text-gray-300 " x-show="open">
|
30
30
|
{{ error.traceback|linebreaks }}
|
31
31
|
</div>
|
32
32
|
</li>
|