django-smartbase-admin 0.2.47__py3-none-any.whl → 1.0.38__py3-none-any.whl
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_smartbase_admin/actions/admin_action_list.py +80 -51
- django_smartbase_admin/actions/advanced_filters.py +55 -20
- django_smartbase_admin/admin/admin_base.py +477 -89
- django_smartbase_admin/admin/site.py +104 -34
- django_smartbase_admin/admin/widgets.py +598 -26
- django_smartbase_admin/apps.py +2 -0
- django_smartbase_admin/engine/actions.py +34 -16
- django_smartbase_admin/engine/admin_base_view.py +253 -115
- django_smartbase_admin/engine/configuration.py +186 -4
- django_smartbase_admin/engine/const.py +7 -0
- django_smartbase_admin/engine/dashboard.py +44 -23
- django_smartbase_admin/engine/fake_inline.py +44 -7
- django_smartbase_admin/engine/field.py +54 -10
- django_smartbase_admin/engine/field_formatter.py +32 -9
- django_smartbase_admin/engine/filter_widgets.py +356 -21
- django_smartbase_admin/engine/menu_item.py +8 -5
- django_smartbase_admin/engine/modal_view.py +12 -7
- django_smartbase_admin/engine/request.py +2 -0
- django_smartbase_admin/integration/__init__.py +0 -0
- django_smartbase_admin/integration/django_cms.py +43 -0
- django_smartbase_admin/locale/sk/LC_MESSAGES/django.mo +0 -0
- django_smartbase_admin/locale/sk/LC_MESSAGES/django.po +268 -37
- django_smartbase_admin/migrations/0005_sbadminuserconfiguration.py +26 -0
- django_smartbase_admin/migrations/0006_alter_sbadminuserconfiguration_color_scheme.py +18 -0
- django_smartbase_admin/models.py +22 -0
- django_smartbase_admin/monkeypatch/admin_readonly_field_monkeypatch.py +96 -0
- django_smartbase_admin/monkeypatch/fake_inline_monkeypatch.py +1 -1
- django_smartbase_admin/querysets.py +3 -0
- django_smartbase_admin/services/configuration.py +30 -0
- django_smartbase_admin/services/thread_local.py +6 -19
- django_smartbase_admin/services/views.py +82 -27
- django_smartbase_admin/services/xlsx_export.py +6 -0
- django_smartbase_admin/static/sb_admin/build/tailwind.config.js +1 -0
- django_smartbase_admin/static/sb_admin/build/tailwind_config_partials/colors.js +4 -0
- django_smartbase_admin/static/sb_admin/build/tailwind_config_partials/spacing.js +1 -0
- django_smartbase_admin/static/sb_admin/build/webpack.common.js +11 -8
- django_smartbase_admin/static/sb_admin/css/ckeditor/ckeditor_content_dark.css +208 -0
- django_smartbase_admin/static/sb_admin/css/coloris/coloris.min.css +1 -0
- django_smartbase_admin/static/sb_admin/dist/calendar.js +1 -0
- django_smartbase_admin/static/sb_admin/dist/calendar_style.css +1 -0
- django_smartbase_admin/static/sb_admin/dist/calendar_style.js +0 -0
- django_smartbase_admin/static/sb_admin/dist/chart.js +1 -1
- django_smartbase_admin/static/sb_admin/dist/main.js +1 -1
- django_smartbase_admin/static/sb_admin/dist/main_style.css +1 -1
- django_smartbase_admin/static/sb_admin/dist/table.js +1 -1
- django_smartbase_admin/static/sb_admin/dist/table.js.LICENSE.txt +9 -0
- django_smartbase_admin/static/sb_admin/dist/tree_widget.js +1 -0
- django_smartbase_admin/static/sb_admin/dist/tree_widget_style.css +1 -0
- django_smartbase_admin/static/sb_admin/dist/tree_widget_style.js +0 -0
- django_smartbase_admin/static/sb_admin/fancytree/jquery.fancytree-all-deps.min.js +1 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-csv.svg +11 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-doc.svg +11 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-docx.svg +11 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-other.svg +13 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-pdf.svg +11 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-ppt.svg +11 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-xls.svg +11 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-xlsx.svg +11 -0
- django_smartbase_admin/static/sb_admin/images/file_types/file-zip.svg +18 -0
- django_smartbase_admin/static/sb_admin/images/flags/de-at.png +0 -0
- django_smartbase_admin/static/sb_admin/images/flags/de-ch.png +0 -0
- django_smartbase_admin/static/sb_admin/images/logo_light.svg +21 -0
- django_smartbase_admin/static/sb_admin/js/coloris/coloris.min.js +6 -0
- django_smartbase_admin/static/sb_admin/js/fullcalendar.min.js +14804 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Bolt-one.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Calendar.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Caution.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Electric-drill.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Fire-extinguisher.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Gas.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Lightning-fill.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Moon.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Phone-telephone.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Printer.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Pull.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Sun-one.svg +3 -0
- django_smartbase_admin/static/sb_admin/sprites/sb_admin/Time.svg +3 -0
- django_smartbase_admin/static/sb_admin/src/css/_base.css +5 -1
- django_smartbase_admin/static/sb_admin/src/css/_colors.css +257 -82
- django_smartbase_admin/static/sb_admin/src/css/_components.css +66 -13
- django_smartbase_admin/static/sb_admin/src/css/_datepicker.css +8 -1
- django_smartbase_admin/static/sb_admin/src/css/_filer.css +60 -0
- django_smartbase_admin/static/sb_admin/src/css/_inlines.css +51 -10
- django_smartbase_admin/static/sb_admin/src/css/_tabulator.css +8 -2
- django_smartbase_admin/static/sb_admin/src/css/calendar.css +162 -0
- django_smartbase_admin/static/sb_admin/src/css/components/_button.css +41 -1
- django_smartbase_admin/static/sb_admin/src/css/components/_dropdown.css +26 -8
- django_smartbase_admin/static/sb_admin/src/css/components/_input.css +62 -20
- django_smartbase_admin/static/sb_admin/src/css/components/_modal.css +1 -1
- django_smartbase_admin/static/sb_admin/src/css/components/_query-builder.css +21 -2
- django_smartbase_admin/static/sb_admin/src/css/components/_toggle.css +12 -1
- django_smartbase_admin/static/sb_admin/src/css/components/_tooltip.css +8 -22
- django_smartbase_admin/static/sb_admin/src/css/style.css +17 -0
- django_smartbase_admin/static/sb_admin/src/css/tree_widget.css +411 -0
- django_smartbase_admin/static/sb_admin/src/js/autocomplete.js +63 -5
- django_smartbase_admin/static/sb_admin/src/js/calendar.js +56 -0
- django_smartbase_admin/static/sb_admin/src/js/chart.js +8 -22
- django_smartbase_admin/static/sb_admin/src/js/choices.js +18 -8
- django_smartbase_admin/static/sb_admin/src/js/datepicker.js +97 -336
- django_smartbase_admin/static/sb_admin/src/js/datepicker_plugins.js +357 -0
- django_smartbase_admin/static/sb_admin/src/js/main.js +307 -26
- django_smartbase_admin/static/sb_admin/src/js/multiselect.js +50 -41
- django_smartbase_admin/static/sb_admin/src/js/range.js +3 -2
- django_smartbase_admin/static/sb_admin/src/js/sb_ajax_params_tabulator_modifier.js +21 -0
- django_smartbase_admin/static/sb_admin/src/js/table.js +38 -13
- django_smartbase_admin/static/sb_admin/src/js/table_modules/advanced_filter_module.js +43 -20
- django_smartbase_admin/static/sb_admin/src/js/table_modules/data_edit_module.js +8 -10
- django_smartbase_admin/static/sb_admin/src/js/table_modules/filter_module.js +3 -3
- django_smartbase_admin/static/sb_admin/src/js/table_modules/header_tabs_module.js +11 -11
- django_smartbase_admin/static/sb_admin/src/js/table_modules/selection_module.js +28 -8
- django_smartbase_admin/static/sb_admin/src/js/table_modules/table_params_module.js +6 -0
- django_smartbase_admin/static/sb_admin/src/js/table_modules/views_module.js +19 -3
- django_smartbase_admin/static/sb_admin/src/js/tree_widget.js +406 -0
- django_smartbase_admin/static/sb_admin/src/js/utils.js +56 -21
- django_smartbase_admin/templates/sb_admin/actions/change_form.html +169 -117
- django_smartbase_admin/templates/sb_admin/actions/dashboard.html +2 -2
- django_smartbase_admin/templates/sb_admin/actions/delete_selected_confirmation.html +56 -32
- django_smartbase_admin/templates/sb_admin/actions/list.html +79 -42
- django_smartbase_admin/templates/sb_admin/actions/object_history.html +2 -2
- django_smartbase_admin/templates/sb_admin/actions/partials/action_link.html +14 -0
- django_smartbase_admin/templates/sb_admin/actions/partials/selected_rows_actions.html +2 -2
- django_smartbase_admin/templates/sb_admin/actions/partials/tabulator_header_v2.html +2 -2
- django_smartbase_admin/templates/sb_admin/actions/tree_list.html +63 -0
- django_smartbase_admin/templates/sb_admin/authentification/login_base.html +5 -1
- django_smartbase_admin/templates/sb_admin/components/columns.html +1 -1
- django_smartbase_admin/templates/sb_admin/components/filters_v2.html +99 -85
- django_smartbase_admin/templates/sb_admin/config/view.html +0 -1
- django_smartbase_admin/templates/sb_admin/dashboard/calendar_widget.html +69 -0
- django_smartbase_admin/templates/sb_admin/dashboard/chart_widget.html +21 -2
- django_smartbase_admin/templates/sb_admin/dashboard/list_widget.html +6 -0
- django_smartbase_admin/templates/sb_admin/dashboard/widget_base.html +1 -1
- django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/date_field.html +18 -8
- django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/multiple_choice_field.html +1 -1
- django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/tree_select_filter.html +2 -0
- django_smartbase_admin/templates/sb_admin/filter_widgets/date_field.html +18 -4
- django_smartbase_admin/templates/sb_admin/filter_widgets/multiple_choice_field.html +14 -0
- django_smartbase_admin/templates/sb_admin/filter_widgets/partials/clear.html +10 -5
- django_smartbase_admin/templates/sb_admin/filter_widgets/radio_choice_field.html +2 -2
- django_smartbase_admin/templates/sb_admin/filter_widgets/tree_select_filter.html +16 -0
- django_smartbase_admin/templates/sb_admin/includes/change_form_title.html +3 -1
- django_smartbase_admin/templates/sb_admin/includes/components.html +5 -1
- django_smartbase_admin/templates/sb_admin/includes/inline_fieldset.html +48 -39
- django_smartbase_admin/templates/sb_admin/includes/notifications.html +2 -1
- django_smartbase_admin/templates/sb_admin/includes/readonly_boolean_field.html +9 -0
- django_smartbase_admin/templates/sb_admin/includes/readonly_field.html +12 -0
- django_smartbase_admin/templates/sb_admin/includes/table_inline_delete_button.html +4 -5
- django_smartbase_admin/templates/sb_admin/inlines/stacked_inline.html +68 -40
- django_smartbase_admin/templates/sb_admin/inlines/table_inline.html +78 -36
- django_smartbase_admin/templates/sb_admin/integrations/filer/folder_list.html +18 -0
- django_smartbase_admin/templates/sb_admin/navigation.html +166 -158
- django_smartbase_admin/templates/sb_admin/partials/modal/modal_content.html +2 -6
- django_smartbase_admin/templates/sb_admin/sb_admin_base.html +49 -4
- django_smartbase_admin/templates/sb_admin/sb_admin_base_no_sidebar.html +35 -11
- django_smartbase_admin/templates/sb_admin/sb_admin_js_trans.html +3 -0
- django_smartbase_admin/templates/sb_admin/sprites/sb_admin.svg +1 -1
- django_smartbase_admin/templates/sb_admin/tailwind_whitelist.html +6 -3
- django_smartbase_admin/templates/sb_admin/widgets/array.html +0 -1
- django_smartbase_admin/templates/sb_admin/widgets/attributes.html +68 -0
- django_smartbase_admin/templates/sb_admin/widgets/autocomplete.html +13 -2
- django_smartbase_admin/templates/sb_admin/widgets/{checkbox_select.html → checkbox_dropdown.html} +2 -2
- django_smartbase_admin/templates/sb_admin/widgets/checkbox_group.html +15 -0
- django_smartbase_admin/templates/sb_admin/widgets/clearable_file_input.html +2 -2
- django_smartbase_admin/templates/sb_admin/widgets/color_field.html +30 -0
- django_smartbase_admin/templates/sb_admin/widgets/date.html +8 -1
- django_smartbase_admin/templates/sb_admin/widgets/filer_file.html +84 -0
- django_smartbase_admin/templates/sb_admin/widgets/html_read_only.html +1 -0
- django_smartbase_admin/templates/sb_admin/widgets/includes/related_item_buttons.html +38 -0
- django_smartbase_admin/templates/sb_admin/widgets/multiwidget.html +1 -1
- django_smartbase_admin/templates/sb_admin/widgets/radio.html +3 -2
- django_smartbase_admin/templates/sb_admin/widgets/radio_dropdown.html +30 -0
- django_smartbase_admin/templates/sb_admin/widgets/read_only_password_hash.html +3 -0
- django_smartbase_admin/templates/sb_admin/widgets/time.html +8 -1
- django_smartbase_admin/templates/sb_admin/widgets/toggle.html +1 -1
- django_smartbase_admin/templates/sb_admin/widgets/tree_base.html +59 -0
- django_smartbase_admin/templates/sb_admin/widgets/tree_select.html +24 -0
- django_smartbase_admin/templates/sb_admin/widgets/tree_select_inline.html +12 -0
- django_smartbase_admin/templatetags/sb_admin_tags.py +163 -4
- django_smartbase_admin/utils.py +22 -3
- django_smartbase_admin/views/dashboard_view.py +6 -0
- django_smartbase_admin/views/global_filter_view.py +8 -2
- django_smartbase_admin/views/translations_view.py +12 -5
- django_smartbase_admin/views/user_config_view.py +52 -0
- django_smartbase_admin-1.0.38.dist-info/METADATA +166 -0
- {django_smartbase_admin-0.2.47.dist-info → django_smartbase_admin-1.0.38.dist-info}/RECORD +186 -121
- {django_smartbase_admin-0.2.47.dist-info → django_smartbase_admin-1.0.38.dist-info}/WHEEL +1 -1
- django_smartbase_admin/templates/sb_admin/integrations/sorting/change_list.html +0 -401
- django_smartbase_admin-0.2.47.dist-info/METADATA +0 -25
- {django_smartbase_admin-0.2.47.dist-info → django_smartbase_admin-1.0.38.dist-info}/LICENSE.md +0 -0
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
{% block view_class %}change-form{% endblock %}
|
|
11
11
|
|
|
12
12
|
{% block js %}
|
|
13
|
-
{
|
|
13
|
+
{% if not sbadmin_is_modal %}
|
|
14
|
+
{{ block.super }}
|
|
15
|
+
{% endif %}
|
|
14
16
|
<script type="text/javascript"
|
|
15
17
|
id="django-admin-form-add-constants"
|
|
16
18
|
src="{% static 'admin/js/change_form.js' %}"
|
|
@@ -23,96 +25,106 @@
|
|
|
23
25
|
{% endblock %}
|
|
24
26
|
|
|
25
27
|
{% block content %}
|
|
26
|
-
{% block form_modal %}
|
|
27
|
-
{% include 'sb_admin/partials/modal/modal.html' %}
|
|
28
|
-
{% endblock %}
|
|
29
28
|
{% get_tabular_context adminform inline_admin_formsets tabs_context as tabular_context %}
|
|
30
29
|
|
|
31
30
|
{% block header %}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
<
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
31
|
+
{% if sbadmin_is_modal %}
|
|
32
|
+
<div class="modal-header">
|
|
33
|
+
<h3 class="text-dark-900 text-18 font-semibold leading-28">
|
|
34
|
+
{% include 'sb_admin/includes/change_form_title.html' %}
|
|
35
|
+
</h3>
|
|
36
|
+
<svg data-bs-dismiss="modal" aria-label="Close"
|
|
37
|
+
class="w-24 h-24 absolute top-16 right-16 cursor-pointer transition-transform hover:rotate-90">
|
|
38
|
+
<use xlink:href="#Close-small"></use>
|
|
39
|
+
</svg>
|
|
40
|
+
</div>
|
|
41
|
+
{% else %}
|
|
42
|
+
<div class="detail-view-header py-16 md:pb-32 flex items-center max-xs:px-20 w-full max-w-1180 mx-auto">
|
|
43
|
+
{% if not is_popup and has_view_permission and show_back_button %}
|
|
44
|
+
{% url opts|admin_urlname:'changelist' as changelist_url %}
|
|
45
|
+
<a href="{% add_preserved_filters back_url %}" class="btn p-0 w-40 mr-16">
|
|
46
|
+
<svg class="w-20 h-20">
|
|
47
|
+
<use xlink:href="#Left-small"></use>
|
|
48
|
+
</svg>
|
|
49
|
+
</a>
|
|
50
|
+
{% endif %}
|
|
51
|
+
<h1 class="text-24 md:text-30 text-dark-900 font-bold font-heading line-clamp-1 first-letter:uppercase">
|
|
52
|
+
{% include 'sb_admin/includes/change_form_title.html' %}
|
|
53
|
+
</h1>
|
|
54
|
+
{% if change and not is_popup %}
|
|
55
|
+
<ul class="detail-view-actions flex ml-auto gap-8 md:gap-16">
|
|
56
|
+
<li class="relative md:hidden">
|
|
57
|
+
<button
|
|
58
|
+
data-bs-toggle="dropdown"
|
|
59
|
+
aria-expanded="false"
|
|
60
|
+
data-bs-popper-placement="bottom-end"
|
|
61
|
+
class="btn btn-empty btn-icon">
|
|
62
|
+
<svg class="w-16 h-16">
|
|
63
|
+
<use xlink:href="#More"></use>
|
|
64
|
+
</svg>
|
|
65
|
+
<span></span>
|
|
66
|
+
</button>
|
|
67
|
+
<div class="dropdown-menu w-248 max-h-432">
|
|
68
|
+
<ul>
|
|
69
|
+
{% block dropdown_actions %}
|
|
70
|
+
{% if detail_actions %}
|
|
71
|
+
{% for action in detail_actions %}
|
|
72
|
+
<li>
|
|
73
|
+
<a {% if action.open_in_modal %}{% include 'sb_admin/actions/partials/open_modal_attrs.html' %}{% endif %} href="{{ action.url }}" class="dropdown-menu-link {{ action.css_class|default_if_none:'' }}">
|
|
74
|
+
{{ action.title }}
|
|
75
|
+
</a>
|
|
76
|
+
</li>
|
|
77
|
+
{% endfor %}
|
|
78
|
+
{% endif %}
|
|
69
79
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
<li>
|
|
81
|
+
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
|
|
82
|
+
<a href="{% add_preserved_filters history_url %}" class="dropdown-menu-link">{% trans "History" %}</a>
|
|
83
|
+
</li>
|
|
84
|
+
{% endblock %}
|
|
85
|
+
</ul>
|
|
86
|
+
</div>
|
|
87
|
+
</li>
|
|
78
88
|
|
|
79
89
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
90
|
+
{% block actions %}
|
|
91
|
+
<li class="max-sm:hidden">
|
|
92
|
+
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
|
|
93
|
+
<a href="{% add_preserved_filters history_url %}" class="btn btn-empty">{% trans "History" %}</a>
|
|
94
|
+
</li>
|
|
85
95
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
96
|
+
{% if detail_actions %}
|
|
97
|
+
{% for action in detail_actions %}
|
|
98
|
+
<li class="max-sm:hidden">
|
|
99
|
+
<a {% if action.open_in_modal %}{% include 'sb_admin/actions/partials/open_modal_attrs.html' %}{% endif %} href="{{ action.url }}" class="btn btn-empty {{ action.css_class|default_if_none:'' }}">
|
|
100
|
+
{{ action.title }}
|
|
101
|
+
</a>
|
|
102
|
+
</li>
|
|
103
|
+
{% endfor %}
|
|
104
|
+
{% endif %}
|
|
105
|
+
{% endblock %}
|
|
106
|
+
{% if has_absolute_url %}
|
|
107
|
+
<li>
|
|
108
|
+
<a href="{{ absolute_url }}" class="btn btn-icon">
|
|
109
|
+
<svg class="w-20 h-20 md:mr-8">
|
|
110
|
+
<use xlink:href="#Preview-open"></use>
|
|
111
|
+
</svg>
|
|
112
|
+
<span>
|
|
113
|
+
{% trans "View on site" %}
|
|
114
|
+
</span>
|
|
115
|
+
</a>
|
|
116
|
+
</li>
|
|
94
117
|
{% endif %}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
<svg class="w-20 h-20 md:mr-8">
|
|
100
|
-
<use xlink:href="#Preview-open"></use>
|
|
101
|
-
</svg>
|
|
102
|
-
<span>
|
|
103
|
-
{% trans "View on site" %}
|
|
104
|
-
</span>
|
|
105
|
-
</a>
|
|
106
|
-
</li>
|
|
107
|
-
{% endif %}
|
|
108
|
-
</ul>
|
|
109
|
-
{% endif %}
|
|
110
|
-
</div>
|
|
118
|
+
</ul>
|
|
119
|
+
{% endif %}
|
|
120
|
+
</div>
|
|
121
|
+
{% endif %}
|
|
111
122
|
{% endblock %}
|
|
112
123
|
|
|
113
124
|
{% block form %}
|
|
114
125
|
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post"
|
|
115
|
-
id="{{ opts.model_name }}_form" class="detail-view-form flex-grow
|
|
126
|
+
id="{% if sbadmin_is_modal %}modal_{% endif %}{{ opts.model_name }}_form" class="flex flex-col{% if sbadmin_is_modal %} min-h-0{% else %} detail-view-form flex-grow w-full max-w-1180 mx-auto{% endif %}" novalidate>
|
|
127
|
+
<div{% if sbadmin_is_modal %} class="modal-body"{% endif %}>
|
|
116
128
|
{% csrf_token %}
|
|
117
129
|
{% if errors %}
|
|
118
130
|
<div class="alert bg-negative-50 border border-negative-100 text-negative-900 mb-24">
|
|
@@ -136,8 +148,8 @@
|
|
|
136
148
|
{% for tab, tab_content_object in tabular_context.context.items %}
|
|
137
149
|
<li role="presentation">
|
|
138
150
|
<button class="relative{% for class in tab_content_object.classes %} {{ class }}{% endfor %}" id="tab_{{ tab|slugify }}" data-bs-toggle="tab"
|
|
139
|
-
data-bs-target="#
|
|
140
|
-
aria-controls="
|
|
151
|
+
data-bs-target="#{% if sbadmin_is_modal %}modal_{% endif %}{{ opts.model_name }}_tabcontent_{{ tab|slugify }}" type="button" role="tab"
|
|
152
|
+
aria-controls="{% if sbadmin_is_modal %}modal_{% endif %}{{ opts.model_name }}_tabcontent_{{ tab|slugify }}" aria-selected="true">
|
|
141
153
|
{{ tab }}
|
|
142
154
|
</button>
|
|
143
155
|
</li>
|
|
@@ -145,7 +157,7 @@
|
|
|
145
157
|
</ul>
|
|
146
158
|
{% endif %}
|
|
147
159
|
{% for tab, tab_content_object in tabular_context.context.items %}
|
|
148
|
-
<div class="detail-view-tab tab-pane fade{% for class in tab_content_object.classes %} {{ class }}{% endfor %} pt-20" id="
|
|
160
|
+
<div class="detail-view-tab tab-pane fade{% for class in tab_content_object.classes %} {{ class }}{% endfor %} pt-20" id="{% if sbadmin_is_modal %}modal_{% endif %}{{ opts.model_name }}_tabcontent_{{ tab|slugify }}" role="tabpanel"
|
|
149
161
|
aria-labelledby="tab_{{ tab|slugify }}">
|
|
150
162
|
<div class="flex max-md:flex-wrap w-full lg:gap-24">
|
|
151
163
|
<div class="min-w-0 w-full">
|
|
@@ -153,7 +165,7 @@
|
|
|
153
165
|
{% if tab_content.type == 'fieldset' %}
|
|
154
166
|
{% block tab_content_fieldset %}
|
|
155
167
|
{% with tab_content.value as fieldset %}
|
|
156
|
-
{% if DETAIL_STRUCTURE_RIGHT_CLASS not in fieldset.classes %}
|
|
168
|
+
{% if DETAIL_STRUCTURE_RIGHT_CLASS not in fieldset.classes or sbadmin_is_modal %}
|
|
157
169
|
{% include "sb_admin/includes/fieldset.html" %}
|
|
158
170
|
{% endif %}
|
|
159
171
|
{% endwith %}
|
|
@@ -172,11 +184,13 @@
|
|
|
172
184
|
<div class="lg:flex-shrink-0 w-full lg:w-370 empty:hidden">
|
|
173
185
|
{% for tab_content in tab_content_object.content %}
|
|
174
186
|
{% if tab_content.type == 'fieldset' %}
|
|
175
|
-
{%
|
|
176
|
-
{%
|
|
177
|
-
{%
|
|
178
|
-
|
|
179
|
-
|
|
187
|
+
{% block tab_content_fieldset_right %}
|
|
188
|
+
{% with tab_content.value as fieldset %}
|
|
189
|
+
{% if DETAIL_STRUCTURE_RIGHT_CLASS in fieldset.classes and not sbadmin_is_modal %}
|
|
190
|
+
{% include "sb_admin/includes/fieldset.html" %}
|
|
191
|
+
{% endif %}
|
|
192
|
+
{% endwith %}
|
|
193
|
+
{% endblock %}
|
|
180
194
|
{% endif %}
|
|
181
195
|
{% endfor %}
|
|
182
196
|
</div>
|
|
@@ -194,41 +208,79 @@
|
|
|
194
208
|
{% endif %}>
|
|
195
209
|
</script>
|
|
196
210
|
{% endblock %}
|
|
211
|
+
</div>
|
|
197
212
|
{% if is_popup %}
|
|
198
213
|
{# TODO: check sticky bar in popups #}
|
|
199
|
-
|
|
200
|
-
{%
|
|
201
|
-
<div class="
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
214
|
+
{% endif %}
|
|
215
|
+
{% if sbadmin_is_modal %}
|
|
216
|
+
<div class="modal-footer">
|
|
217
|
+
{% if original %}
|
|
218
|
+
{% url opts|admin_urlname:'change' original.pk|admin_urlquote as post_url %}
|
|
219
|
+
{% else %}
|
|
220
|
+
{% url opts|admin_urlname:'add' as post_url %}
|
|
221
|
+
{% endif %}
|
|
222
|
+
{% if has_change_permission %}
|
|
223
|
+
<button
|
|
224
|
+
form="{% if sbadmin_is_modal %}modal_{% endif %}{{ opts.model_name }}_form"
|
|
225
|
+
hx-post="{{ post_url }}"
|
|
226
|
+
hx-target="#sb-admin-modal"
|
|
227
|
+
hx-swap="innerHTML"
|
|
228
|
+
hx-select="#modal-content"
|
|
229
|
+
hx-encoding="multipart/form-data"
|
|
230
|
+
hx-vals='{
|
|
231
|
+
"sbadmin_is_modal": 1,
|
|
232
|
+
"sb_admin_source_field": "{{ request.GET.sb_admin_source_field }}",
|
|
233
|
+
"sbadmin_reload_on_save": {% if sbadmin_reload_on_save %}1{% else %}0{% endif %},
|
|
234
|
+
"sbadmin_parent_instance_field": "{{ request.GET.sbadmin_parent_instance_field }}",
|
|
235
|
+
"sbadmin_parent_instance_pk": "{{ request.GET.sbadmin_parent_instance_pk | default:"" }}",
|
|
236
|
+
"sbadmin_parent_instance_label": "{{ request.GET.sbadmin_parent_instance_label }}"
|
|
237
|
+
}'
|
|
238
|
+
class="btn btn-primary flex-grow flex items-center justify-center">
|
|
239
|
+
<svg class="w-20 h-20 mr-8">
|
|
240
|
+
<use xlink:href="#Save"></use>
|
|
241
|
+
</svg>
|
|
242
|
+
{% trans 'Save' %}
|
|
243
|
+
</button>
|
|
244
|
+
{% endif %}
|
|
245
|
+
<button type="button"
|
|
246
|
+
class="btn flex-grow"
|
|
247
|
+
data-bs-dismiss="modal" aria-label="Close">
|
|
248
|
+
{% trans 'Close' %}
|
|
249
|
+
</button>
|
|
250
|
+
</div>
|
|
251
|
+
{% else %}
|
|
252
|
+
{% block action_bar %}
|
|
253
|
+
<div class="detail-view-action-bar">
|
|
254
|
+
<div>
|
|
255
|
+
<h2 class="text-dark-900 font-semibold text-18 mr-16 line-clamp-1">
|
|
256
|
+
{% include 'sb_admin/includes/change_form_title.html' %}
|
|
257
|
+
</h2>
|
|
258
|
+
{% if previous_url or next_url %}
|
|
259
|
+
<div class="flex items-center gap-8 mr-8">
|
|
260
|
+
<{% if previous_url %}a href="{{ previous_url }}"{% else %}button type="button" disabled{% endif %} class="btn btn-small" title="{% trans 'Prev' %}">
|
|
261
|
+
<svg class="w-20 h-20">
|
|
262
|
+
<use xlink:href="#Left"></use>
|
|
263
|
+
</svg>
|
|
264
|
+
</{% if previous_url %}a{% else %}button{% endif %}>
|
|
265
|
+
<div class="text-12">{% blocktrans %}<strong>{{ current_index }}</strong> / {{ all_objects_count }}{% endblocktrans %}</div>
|
|
266
|
+
<{% if next_url %}a href="{{ next_url }}"{% else %}button type="button" disabled{% endif %} class="btn btn-small" title="{% trans 'Next' %}">
|
|
267
|
+
<svg class="w-20 h-20">
|
|
268
|
+
<use xlink:href="#Right"></use>
|
|
269
|
+
</svg>
|
|
270
|
+
</{% if next_url %}a{% else %}button{% endif %}>
|
|
271
|
+
</div>
|
|
225
272
|
{% endif %}
|
|
273
|
+
<div class="flex ml-auto gap-8">
|
|
274
|
+
{% if not is_popup and has_view_permission and show_back_button %}
|
|
275
|
+
<a href="{% add_preserved_filters back_url %}" class="btn btn-empty">{% trans 'Back' %}</a>
|
|
276
|
+
{% endif %}
|
|
226
277
|
|
|
227
|
-
|
|
278
|
+
{% submit_row %}
|
|
279
|
+
</div>
|
|
228
280
|
</div>
|
|
229
281
|
</div>
|
|
230
|
-
|
|
231
|
-
{%
|
|
282
|
+
{% endblock %}
|
|
283
|
+
{% endif %}
|
|
232
284
|
</form>
|
|
233
285
|
{% endblock %}
|
|
234
286
|
{% endblock %}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
{% load i18n sb_admin_tags %}
|
|
3
3
|
|
|
4
4
|
{% block content %}
|
|
5
|
-
<div class="w-full max-w-1180 mx-auto">
|
|
6
|
-
{% for widget in
|
|
5
|
+
<div class="w-full max-w-1180 mx-auto dashboard-wrapper">
|
|
6
|
+
{% for widget in direct_sub_views %}
|
|
7
7
|
{% render_widget widget request %}
|
|
8
8
|
{% endfor %}
|
|
9
9
|
</div>
|
|
@@ -9,39 +9,63 @@
|
|
|
9
9
|
|
|
10
10
|
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %}
|
|
11
11
|
|
|
12
|
-
{% block breadcrumbs %}
|
|
13
|
-
<div class="breadcrumbs">
|
|
14
|
-
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
|
|
15
|
-
› <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
|
|
16
|
-
› <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>
|
|
17
|
-
› {% translate 'Delete multiple objects' %}
|
|
18
|
-
</div>
|
|
19
|
-
{% endblock %}
|
|
20
12
|
|
|
21
13
|
{% block content %}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
{%
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
<ul>{{ deletable_object|unordered_list }}</ul>
|
|
34
|
-
{% endfor %}
|
|
35
|
-
<form method="post">{% csrf_token %}
|
|
36
|
-
<div>
|
|
37
|
-
{% for obj in queryset %}
|
|
38
|
-
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}">
|
|
39
|
-
{% endfor %}
|
|
40
|
-
<input type="hidden" name="action" value="delete_selected">
|
|
41
|
-
<input type="hidden" name="post" value="yes">
|
|
42
|
-
<input type="submit" value="{% translate 'Yes, I’m sure' %}">
|
|
43
|
-
<a href="#" class="button cancel-link">{% translate "No, take me back" %}</a>
|
|
14
|
+
<div class="py-16 md:pb-32 max-xs:px-20">
|
|
15
|
+
<h1 class="text-24 md:text-30 text-dark-900 font-bold font-heading line-clamp-1 first-letter:uppercase">
|
|
16
|
+
{% blocktrans %}Delete {{ object }}{% endblocktrans %}
|
|
17
|
+
</h1>
|
|
18
|
+
{% if perms_lacking %}
|
|
19
|
+
<p class="mt-8">{% blocktranslate %}Deleting the selected {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktranslate %}</p>
|
|
20
|
+
{% elif protected %}
|
|
21
|
+
<p class="mt-8">{% blocktranslate %}Deleting the selected {{ objects_name }} would require deleting the following protected related objects:{% endblocktranslate %}</p>
|
|
22
|
+
{% else %}
|
|
23
|
+
<p class="mt-8">{% blocktranslate %}Are you sure you want to delete the selected {{ objects_name }}? All of the following objects and their related items will be deleted:{% endblocktranslate %}</p>
|
|
24
|
+
{% endif %}
|
|
44
25
|
</div>
|
|
45
|
-
|
|
46
|
-
|
|
26
|
+
{% if perms_lacking %}
|
|
27
|
+
<div class="card">
|
|
28
|
+
<ul id="deleted-objects">{{ perms_lacking|unordered_list }}</ul>
|
|
29
|
+
</div>
|
|
30
|
+
{% elif protected %}
|
|
31
|
+
<div class="card">
|
|
32
|
+
<ul id="deleted-objects">{{ protected|unordered_list }}</ul>
|
|
33
|
+
</div>
|
|
34
|
+
{% else %}
|
|
35
|
+
<div class="card mb-24">
|
|
36
|
+
<header class="mb-24">
|
|
37
|
+
<span class="text-dark-900">{% translate "Summary" %}</span>
|
|
38
|
+
</header>
|
|
39
|
+
|
|
40
|
+
<ul>
|
|
41
|
+
{% for model_name, object_count in model_count %}
|
|
42
|
+
<li>{{ model_name|capfirst }}: {{ object_count }}</li>
|
|
43
|
+
{% endfor %}
|
|
44
|
+
</ul>
|
|
45
|
+
|
|
46
|
+
<h2>{% trans "Objects" %}</h2>
|
|
47
|
+
{% for deletable_object in deletable_objects %}
|
|
48
|
+
<ul>{{ deletable_object|unordered_list }}</ul>
|
|
49
|
+
{% endfor %}
|
|
50
|
+
<ul>{{ deleted_objects|unordered_list }}</ul>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="detail-view-action-bar">
|
|
54
|
+
<div>
|
|
55
|
+
<h2 class="text-dark-900 font-semibold text-18 mr-16 line-clamp-1">
|
|
56
|
+
{% include 'sb_admin/includes/change_form_title.html' %}
|
|
57
|
+
</h2>
|
|
58
|
+
<form method="post" class="flex ml-auto gap-8">
|
|
59
|
+
{% csrf_token %}
|
|
60
|
+
{% for obj in queryset %}
|
|
61
|
+
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}">
|
|
62
|
+
{% endfor %}
|
|
63
|
+
<input type="hidden" name="action" value="delete_selected">
|
|
64
|
+
<input type="hidden" name="post" value="yes">
|
|
65
|
+
<a href="#" class="btn btn-empty cancel-link">{% trans "No, take me back" %}</a>
|
|
66
|
+
<input type="submit" class="btn btn-destructive" value="{% trans 'Yes, I’m sure' %}">
|
|
67
|
+
</form>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
{% endif %}
|
|
47
71
|
{% endblock %}
|
|
@@ -4,45 +4,82 @@
|
|
|
4
4
|
{% block view_class %}change-list{% endblock %}
|
|
5
5
|
|
|
6
6
|
{% block content %}
|
|
7
|
-
{% block form_modal %}
|
|
8
|
-
{% include 'sb_admin/partials/modal/modal.html' %}
|
|
9
|
-
{% endblock %}
|
|
10
7
|
{% block page_header %}
|
|
11
|
-
<div class="list-view-header py-16 md:pb-32 flex items-center max-xs:px-20">
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
8
|
+
<div class="list-view-header py-16 md:pb-32 flex flex-wrap items-center max-xs:px-20 gap-x-16 gap-y-8">
|
|
9
|
+
{% block heading %}
|
|
10
|
+
<h1 class="text-24 md:text-30 text-dark-900 font-bold font-heading line-clamp-1 first-letter:uppercase">{{ list_title|capfirst }}</h1>
|
|
11
|
+
{% endblock %}
|
|
12
|
+
<ul class="ml-auto flex flex-wrap gap-8 md:gap-16">
|
|
13
|
+
{% if content_context.list_actions %}
|
|
14
|
+
<li class="relative md:hidden">
|
|
15
|
+
<button
|
|
16
|
+
data-bs-toggle="dropdown"
|
|
17
|
+
aria-expanded="false"
|
|
18
|
+
data-bs-popper-placement="bottom-end"
|
|
19
|
+
class="btn btn-empty btn-icon">
|
|
20
|
+
<svg class="w-16 h-16">
|
|
21
|
+
<use xlink:href="#More"></use>
|
|
22
|
+
</svg>
|
|
23
|
+
<span></span>
|
|
24
|
+
</button>
|
|
25
|
+
<div class="dropdown-menu w-248 max-h-432">
|
|
26
|
+
<ul>
|
|
27
|
+
{% block dropdown_actions %}
|
|
28
|
+
{% for list_action in content_context.list_actions %}
|
|
29
|
+
{% if not list_action.sub_actions %}
|
|
30
|
+
<li>
|
|
31
|
+
{% include "sb_admin/actions/partials/action_link.html" with action=list_action view_id=view_id extra_classes="dropdown-menu-link items-center" %}
|
|
32
|
+
</li>
|
|
33
|
+
{% endif %}
|
|
34
|
+
{% endfor %}
|
|
35
|
+
<script>
|
|
36
|
+
(function(){
|
|
37
|
+
if(document.currentScript && !document.currentScript.previousElementSibling) {
|
|
38
|
+
const li = document.currentScript.closest('li');
|
|
39
|
+
if(li) {
|
|
40
|
+
li.classList.add('hidden');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}());
|
|
44
|
+
</script>
|
|
45
|
+
{% endblock %}
|
|
46
|
+
</ul>
|
|
47
|
+
</div>
|
|
48
|
+
</li>
|
|
49
|
+
{% endif %}
|
|
38
50
|
|
|
39
51
|
{% block actions %}
|
|
40
52
|
{% for list_action in content_context.list_actions %}
|
|
41
|
-
|
|
42
|
-
<button
|
|
43
|
-
|
|
53
|
+
{% if list_action.sub_actions %}
|
|
54
|
+
<button
|
|
55
|
+
data-bs-toggle="dropdown"
|
|
56
|
+
aria-expanded="false"
|
|
57
|
+
data-bs-popper-placement="bottom-end"
|
|
58
|
+
class="btn btn-icon">
|
|
59
|
+
{% if list_action.icon %}
|
|
60
|
+
<svg class="w-16 h-16 md:mr-8">
|
|
61
|
+
<use xlink:href="#{{ list_action.icon }}"></use>
|
|
62
|
+
</svg>
|
|
63
|
+
{% endif %}
|
|
64
|
+
<span>{{ list_action.title }}</span>
|
|
65
|
+
<svg class="w-16 h-16 ml-4 max-sm:hidden">
|
|
66
|
+
<use xlink:href="#Down"></use>
|
|
67
|
+
</svg>
|
|
44
68
|
</button>
|
|
45
|
-
|
|
69
|
+
<div class="dropdown-menu max-h-432">
|
|
70
|
+
<ul>
|
|
71
|
+
{% for list_sub_action in list_action.sub_actions %}
|
|
72
|
+
<li>
|
|
73
|
+
{% include list_action.template with action=list_sub_action view_id=view_id extra_classes="dropdown-menu-link" %}
|
|
74
|
+
</li>
|
|
75
|
+
{% endfor %}
|
|
76
|
+
</ul>
|
|
77
|
+
</div>
|
|
78
|
+
{% else %}
|
|
79
|
+
<li class="max-sm:hidden">
|
|
80
|
+
{% include list_action.template with action=list_action view_id=view_id extra_classes="btn btn-empty" %}
|
|
81
|
+
</li>
|
|
82
|
+
{% endif %}
|
|
46
83
|
{% endfor %}
|
|
47
84
|
{% endblock %}
|
|
48
85
|
{% if content_context.new_url %}
|
|
@@ -51,7 +88,7 @@
|
|
|
51
88
|
<svg class="w-20 h-20 md:mr-8">
|
|
52
89
|
<use xlink:href="#Plus"></use>
|
|
53
90
|
</svg>
|
|
54
|
-
<span>{% trans 'Add' %} {{
|
|
91
|
+
<span>{% trans 'Add' %}{% if add_label %} {{ add_label }}{% endif %}</span>
|
|
55
92
|
</a>
|
|
56
93
|
</li>
|
|
57
94
|
{% endif %}
|
|
@@ -65,16 +102,16 @@
|
|
|
65
102
|
{% include content_context.tabulator_header_template_name %}
|
|
66
103
|
{% endblock %}
|
|
67
104
|
{% block tabulator_body %}
|
|
68
|
-
|
|
105
|
+
<div id="{{ view_id }}-table" class="list-view-table"></div>
|
|
69
106
|
{% endblock %}
|
|
70
107
|
{% block tabulator_custom_footer %}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
108
|
+
<div class="tabulator-custom-footer">
|
|
109
|
+
<div class="flex items-center">
|
|
110
|
+
<div class="mr-16 max-sm:hidden">{% trans 'For page' %}</div>
|
|
111
|
+
<div id="{{ view_id }}-page-size-widget"></div>
|
|
112
|
+
</div>
|
|
113
|
+
<div id="{{ view_id }}-pagination-widget" class="ml-auto flex items-center"></div>
|
|
75
114
|
</div>
|
|
76
|
-
<div id="{{ view_id }}-pagination-widget" class="ml-auto flex items-center"></div>
|
|
77
|
-
</div>
|
|
78
115
|
{% endblock %}
|
|
79
116
|
</div>
|
|
80
117
|
{% endblock %}
|