django-smartbase-admin 0.2.54__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 +74 -38
- django_smartbase_admin/actions/advanced_filters.py +24 -1
- django_smartbase_admin/admin/admin_base.py +401 -96
- django_smartbase_admin/admin/site.py +93 -35
- django_smartbase_admin/admin/widgets.py +589 -26
- django_smartbase_admin/apps.py +2 -0
- django_smartbase_admin/engine/actions.py +34 -16
- django_smartbase_admin/engine/admin_base_view.py +252 -115
- django_smartbase_admin/engine/configuration.py +186 -4
- django_smartbase_admin/engine/const.py +6 -0
- django_smartbase_admin/engine/dashboard.py +44 -23
- django_smartbase_admin/engine/fake_inline.py +15 -11
- django_smartbase_admin/engine/field.py +42 -12
- django_smartbase_admin/engine/field_formatter.py +22 -8
- django_smartbase_admin/engine/filter_widgets.py +309 -20
- 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 +80 -13
- 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/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 +61 -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 +304 -31
- 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/table.js +34 -5
- 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 +6 -0
- 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 -114
- django_smartbase_admin/templates/sb_admin/actions/dashboard.html +2 -2
- django_smartbase_admin/templates/sb_admin/actions/list.html +79 -39
- django_smartbase_admin/templates/sb_admin/actions/partials/action_link.html +14 -0
- 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/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/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 +76 -34
- 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 +27 -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/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/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 +85 -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.54.dist-info → django_smartbase_admin-1.0.38.dist-info}/RECORD +177 -115
- {django_smartbase_admin-0.2.54.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.54.dist-info/METADATA +0 -25
- {django_smartbase_admin-0.2.54.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' %}"
|
|
@@ -26,90 +28,103 @@
|
|
|
26
28
|
{% get_tabular_context adminform inline_admin_formsets tabs_context as tabular_context %}
|
|
27
29
|
|
|
28
30
|
{% block header %}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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 %}
|
|
66
79
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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>
|
|
75
88
|
|
|
76
89
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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>
|
|
82
95
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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>
|
|
91
117
|
{% endif %}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
<svg class="w-20 h-20 md:mr-8">
|
|
97
|
-
<use xlink:href="#Preview-open"></use>
|
|
98
|
-
</svg>
|
|
99
|
-
<span>
|
|
100
|
-
{% trans "View on site" %}
|
|
101
|
-
</span>
|
|
102
|
-
</a>
|
|
103
|
-
</li>
|
|
104
|
-
{% endif %}
|
|
105
|
-
</ul>
|
|
106
|
-
{% endif %}
|
|
107
|
-
</div>
|
|
118
|
+
</ul>
|
|
119
|
+
{% endif %}
|
|
120
|
+
</div>
|
|
121
|
+
{% endif %}
|
|
108
122
|
{% endblock %}
|
|
109
123
|
|
|
110
124
|
{% block form %}
|
|
111
125
|
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post"
|
|
112
|
-
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 %}>
|
|
113
128
|
{% csrf_token %}
|
|
114
129
|
{% if errors %}
|
|
115
130
|
<div class="alert bg-negative-50 border border-negative-100 text-negative-900 mb-24">
|
|
@@ -133,8 +148,8 @@
|
|
|
133
148
|
{% for tab, tab_content_object in tabular_context.context.items %}
|
|
134
149
|
<li role="presentation">
|
|
135
150
|
<button class="relative{% for class in tab_content_object.classes %} {{ class }}{% endfor %}" id="tab_{{ tab|slugify }}" data-bs-toggle="tab"
|
|
136
|
-
data-bs-target="#
|
|
137
|
-
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">
|
|
138
153
|
{{ tab }}
|
|
139
154
|
</button>
|
|
140
155
|
</li>
|
|
@@ -142,7 +157,7 @@
|
|
|
142
157
|
</ul>
|
|
143
158
|
{% endif %}
|
|
144
159
|
{% for tab, tab_content_object in tabular_context.context.items %}
|
|
145
|
-
<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"
|
|
146
161
|
aria-labelledby="tab_{{ tab|slugify }}">
|
|
147
162
|
<div class="flex max-md:flex-wrap w-full lg:gap-24">
|
|
148
163
|
<div class="min-w-0 w-full">
|
|
@@ -150,7 +165,7 @@
|
|
|
150
165
|
{% if tab_content.type == 'fieldset' %}
|
|
151
166
|
{% block tab_content_fieldset %}
|
|
152
167
|
{% with tab_content.value as fieldset %}
|
|
153
|
-
{% if DETAIL_STRUCTURE_RIGHT_CLASS not in fieldset.classes %}
|
|
168
|
+
{% if DETAIL_STRUCTURE_RIGHT_CLASS not in fieldset.classes or sbadmin_is_modal %}
|
|
154
169
|
{% include "sb_admin/includes/fieldset.html" %}
|
|
155
170
|
{% endif %}
|
|
156
171
|
{% endwith %}
|
|
@@ -169,11 +184,13 @@
|
|
|
169
184
|
<div class="lg:flex-shrink-0 w-full lg:w-370 empty:hidden">
|
|
170
185
|
{% for tab_content in tab_content_object.content %}
|
|
171
186
|
{% if tab_content.type == 'fieldset' %}
|
|
172
|
-
{%
|
|
173
|
-
{%
|
|
174
|
-
{%
|
|
175
|
-
|
|
176
|
-
|
|
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 %}
|
|
177
194
|
{% endif %}
|
|
178
195
|
{% endfor %}
|
|
179
196
|
</div>
|
|
@@ -191,41 +208,79 @@
|
|
|
191
208
|
{% endif %}>
|
|
192
209
|
</script>
|
|
193
210
|
{% endblock %}
|
|
211
|
+
</div>
|
|
194
212
|
{% if is_popup %}
|
|
195
213
|
{# TODO: check sticky bar in popups #}
|
|
196
|
-
|
|
197
|
-
{%
|
|
198
|
-
<div class="
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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>
|
|
222
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 %}
|
|
223
277
|
|
|
224
|
-
|
|
278
|
+
{% submit_row %}
|
|
279
|
+
</div>
|
|
225
280
|
</div>
|
|
226
281
|
</div>
|
|
227
|
-
|
|
228
|
-
{%
|
|
282
|
+
{% endblock %}
|
|
283
|
+
{% endif %}
|
|
229
284
|
</form>
|
|
230
285
|
{% endblock %}
|
|
231
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>
|
|
@@ -5,41 +5,81 @@
|
|
|
5
5
|
|
|
6
6
|
{% block content %}
|
|
7
7
|
{% block page_header %}
|
|
8
|
-
<div class="list-view-header py-16 md:pb-32 flex items-center max-xs:px-20">
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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 %}
|
|
35
50
|
|
|
36
51
|
{% block actions %}
|
|
37
52
|
{% for list_action in content_context.list_actions %}
|
|
38
|
-
|
|
39
|
-
<button
|
|
40
|
-
|
|
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>
|
|
41
68
|
</button>
|
|
42
|
-
|
|
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 %}
|
|
43
83
|
{% endfor %}
|
|
44
84
|
{% endblock %}
|
|
45
85
|
{% if content_context.new_url %}
|
|
@@ -48,7 +88,7 @@
|
|
|
48
88
|
<svg class="w-20 h-20 md:mr-8">
|
|
49
89
|
<use xlink:href="#Plus"></use>
|
|
50
90
|
</svg>
|
|
51
|
-
<span>{% trans 'Add' %} {{
|
|
91
|
+
<span>{% trans 'Add' %}{% if add_label %} {{ add_label }}{% endif %}</span>
|
|
52
92
|
</a>
|
|
53
93
|
</li>
|
|
54
94
|
{% endif %}
|
|
@@ -62,16 +102,16 @@
|
|
|
62
102
|
{% include content_context.tabulator_header_template_name %}
|
|
63
103
|
{% endblock %}
|
|
64
104
|
{% block tabulator_body %}
|
|
65
|
-
|
|
105
|
+
<div id="{{ view_id }}-table" class="list-view-table"></div>
|
|
66
106
|
{% endblock %}
|
|
67
107
|
{% block tabulator_custom_footer %}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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>
|
|
72
114
|
</div>
|
|
73
|
-
<div id="{{ view_id }}-pagination-widget" class="ml-auto flex items-center"></div>
|
|
74
|
-
</div>
|
|
75
115
|
{% endblock %}
|
|
76
116
|
</div>
|
|
77
117
|
{% endblock %}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<a {% if action.open_in_modal %}
|
|
2
|
+
{% include 'sb_admin/actions/partials/open_modal_attrs.html' with action=action %}
|
|
3
|
+
hx-vals="js:{params: window.SBAdminTable['{{ view_id }}'].getAllUrlParams()}"
|
|
4
|
+
{% else %}
|
|
5
|
+
onclick="window.SBAdmin.executeListAction('{{ view_id }}', '{{ action.url }}', {{ action.no_params|yesno:'true,false' }}, {{ action.open_in_new_tab|default:False|yesno:'true,false'|lower }})"
|
|
6
|
+
{% endif %}
|
|
7
|
+
class="{{ extra_classes|default:'' }} {{ action.css_class|default_if_none:'' }}">
|
|
8
|
+
{% if action.icon %}
|
|
9
|
+
<svg class="w-16 h-16 mr-8">
|
|
10
|
+
<use xlink:href="#{{ action.icon }}"></use>
|
|
11
|
+
</svg>
|
|
12
|
+
{% endif %}
|
|
13
|
+
{{ action.title }}
|
|
14
|
+
</a>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<input form="{{ view_id }}-filter-form"
|
|
8
8
|
type="hidden"
|
|
9
9
|
value=""
|
|
10
|
-
id="
|
|
10
|
+
id="{{ view_id }}-{{ content_context.const.TABLE_PARAMS_SELECTED_FILTER_TYPE }}"
|
|
11
11
|
name="{{ content_context.const.TABLE_PARAMS_SELECTED_FILTER_TYPE }}">
|
|
12
12
|
{% block table_header_before_tabs_header %}
|
|
13
13
|
{% endblock %}
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
</svg>
|
|
86
86
|
</div>
|
|
87
87
|
</div>
|
|
88
|
-
<button class="btn btn-primary">{% trans 'Search' %}</button>
|
|
88
|
+
<button type="button" class="btn btn-primary">{% trans 'Search' %}</button>
|
|
89
89
|
</div>
|
|
90
90
|
</div>
|
|
91
91
|
</div>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{% extends "sb_admin/actions/list.html" %}
|
|
2
|
+
{% load static sb_admin_tags i18n %}
|
|
3
|
+
|
|
4
|
+
{% block extrahead %}
|
|
5
|
+
{{ block.super }}
|
|
6
|
+
<style>
|
|
7
|
+
#table-columns-dropdown-wrapper {
|
|
8
|
+
display: none;
|
|
9
|
+
}
|
|
10
|
+
</style>
|
|
11
|
+
{% endblock %}
|
|
12
|
+
|
|
13
|
+
{% block tabulator_card %}
|
|
14
|
+
{% with enable_table_filter=request.reorder_active|yesno:',True' %}
|
|
15
|
+
{% if enable_table_filter %}
|
|
16
|
+
{{ block.super }}
|
|
17
|
+
{% else %}
|
|
18
|
+
<div class="overflow-hidden pb-8 relative tree-list-view">
|
|
19
|
+
{{ block.super }}
|
|
20
|
+
</div>
|
|
21
|
+
{% endif %}
|
|
22
|
+
{% endwith %}
|
|
23
|
+
{% endblock %}
|
|
24
|
+
|
|
25
|
+
{% block tabulator_custom_header %}
|
|
26
|
+
{% if not request.reorder_active %}
|
|
27
|
+
{% include content_context.tabulator_header_template_name %}
|
|
28
|
+
{% endif %}
|
|
29
|
+
{% endblock %}
|
|
30
|
+
{% block tabulator_body %}
|
|
31
|
+
{% with view_id|add:'_tree' as tree_id %}
|
|
32
|
+
<div class="overflow-auto w-full relative">
|
|
33
|
+
{% include "sb_admin/widgets/tree_base.html" with tree_main_column_name=list_title tree_reorder_url=content_context.tabulator_definition.treeReorderUrl tree_additional_columns=additional_columns tree_component_id=tree_id tree_data_url=tree_json_url tree_detail_url=content_context.tabulator_definition.tableDetailUrl hide_tree_search=True filter_by_table_data=enable_table_filter tree_show_checkbox=enable_table_filter tree_multiselect=enable_table_filter search_wrapper_classes="py-16 md:p-16" %}
|
|
34
|
+
</div>
|
|
35
|
+
{% endwith %}
|
|
36
|
+
{% if not request.reorder_active %}
|
|
37
|
+
<div class="hidden">
|
|
38
|
+
{{ block.super }}
|
|
39
|
+
</div>
|
|
40
|
+
{% endif %}
|
|
41
|
+
{% endblock %}
|
|
42
|
+
{% block tabulator_custom_footer %}
|
|
43
|
+
{% endblock %}
|
|
44
|
+
|
|
45
|
+
{% block actions %}
|
|
46
|
+
{% with view_id|add:'_tree' as tree_id %}
|
|
47
|
+
{% if request.request_data.action == 'action_enter_reorder' %}
|
|
48
|
+
<li class="max-sm:hidden">
|
|
49
|
+
<button onclick="$.ui.fancytree.getTree('#' + '{{ tree_id }}' + '_tree').saveTreeOrder()"
|
|
50
|
+
class="btn btn-empty">
|
|
51
|
+
{% trans 'Save Order' %}
|
|
52
|
+
</button>
|
|
53
|
+
</li>
|
|
54
|
+
{% endif %}
|
|
55
|
+
{% endwith %}
|
|
56
|
+
{{ block.super }}
|
|
57
|
+
{% endblock %}
|
|
58
|
+
|
|
59
|
+
{% block additional_js %}
|
|
60
|
+
{% if not request.reorder_active %}
|
|
61
|
+
{{ block.super }}
|
|
62
|
+
{% endif %}
|
|
63
|
+
{% endblock %}
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
{% load i18n static %}
|
|
3
3
|
|
|
4
4
|
{% block main_wrapper %}
|
|
5
|
+
{% include "sb_admin/includes/notifications.html" with classes="top-16 xl:!left-0" %}
|
|
5
6
|
<div class="flex items-center max-h-screen">
|
|
6
|
-
<img loading="lazy" src="{% static "sb_admin/images/logo.svg" %}" alt="Logo"
|
|
7
|
+
<img loading="lazy" src="{% static "sb_admin/images/logo.svg" %}" alt="Logo"
|
|
8
|
+
class="max-h-40 absolute md:left-40 md:top-40 left-24 top-24 dark:hidden">
|
|
9
|
+
<img loading="lazy" src="{% static "sb_admin/images/logo_light.svg" %}" alt="Logo"
|
|
10
|
+
class="max-h-40 absolute md:left-40 md:top-40 left-24 top-24 hidden dark:block">
|
|
7
11
|
<div class="md:max-w-640 w-full flex justify-center items-center h-screen">
|
|
8
12
|
<div class="max-w-370 w-full mx-24">
|
|
9
13
|
{% block content %}{% endblock %}
|