django-smartbase-admin 0.2.54__py3-none-any.whl → 1.0.42__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 +79 -38
- django_smartbase_admin/actions/advanced_filters.py +24 -1
- django_smartbase_admin/admin/admin_base.py +402 -97
- django_smartbase_admin/admin/site.py +93 -35
- django_smartbase_admin/admin/widgets.py +636 -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 +49 -24
- django_smartbase_admin/engine/fake_inline.py +15 -11
- django_smartbase_admin/engine/field.py +42 -12
- django_smartbase_admin/engine/field_formatter.py +38 -14
- django_smartbase_admin/engine/filter_widgets.py +348 -24
- 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/js/sbadmin_prepopulated_fields_init.js +25 -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 +31 -7
- 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 +69 -11
- 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 +306 -31
- django_smartbase_admin/static/sb_admin/src/js/multiselect.js +50 -41
- django_smartbase_admin/static/sb_admin/src/js/radio.js +31 -0
- 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/detail_view_module.js +50 -1
- django_smartbase_admin/static/sb_admin/src/js/table_modules/filter_module.js +10 -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 +176 -116
- 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.html +1 -0
- 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/boolean_field.html +1 -14
- 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 +12 -6
- django_smartbase_admin/templates/sb_admin/filter_widgets/radio_choice_field.html +5 -3
- 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 +115 -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.42.dist-info/METADATA +166 -0
- {django_smartbase_admin-0.2.54.dist-info → django_smartbase_admin-1.0.42.dist-info}/RECORD +182 -118
- {django_smartbase_admin-0.2.54.dist-info → django_smartbase_admin-1.0.42.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.42.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' %}"
|
|
@@ -18,98 +20,110 @@
|
|
|
18
20
|
data-model-name="{{ opts.model_name }}"
|
|
19
21
|
{% endif %}>
|
|
20
22
|
</script>
|
|
21
|
-
{
|
|
22
|
-
{% prepopulated_fields_js %}
|
|
23
|
+
<script src="{% static 'sb_admin/js/sbadmin_prepopulated_fields_init.js' %}"></script>
|
|
23
24
|
{% endblock %}
|
|
24
25
|
|
|
25
26
|
{% block content %}
|
|
26
27
|
{% get_tabular_context adminform inline_admin_formsets tabs_context as tabular_context %}
|
|
27
28
|
|
|
28
29
|
{% 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
|
-
|
|
30
|
+
{% if sbadmin_is_modal %}
|
|
31
|
+
<div class="modal-header">
|
|
32
|
+
<h3 class="text-dark-900 text-18 font-semibold leading-28">
|
|
33
|
+
{% include 'sb_admin/includes/change_form_title.html' %}
|
|
34
|
+
</h3>
|
|
35
|
+
<svg data-bs-dismiss="modal" aria-label="Close"
|
|
36
|
+
class="w-24 h-24 absolute top-16 right-16 cursor-pointer transition-transform hover:rotate-90">
|
|
37
|
+
<use xlink:href="#Close-small"></use>
|
|
38
|
+
</svg>
|
|
39
|
+
</div>
|
|
40
|
+
{% else %}
|
|
41
|
+
<div class="detail-view-header py-16 md:pb-32 flex items-center max-xs:px-20 w-full max-w-1180 mx-auto">
|
|
42
|
+
{% if not is_popup and has_view_permission and show_back_button %}
|
|
43
|
+
{% url opts|admin_urlname:'changelist' as changelist_url %}
|
|
44
|
+
<a href="{% add_preserved_filters back_url %}" class="btn p-0 w-40 mr-16">
|
|
45
|
+
<svg class="w-20 h-20">
|
|
46
|
+
<use xlink:href="#Left-small"></use>
|
|
47
|
+
</svg>
|
|
48
|
+
</a>
|
|
49
|
+
{% endif %}
|
|
50
|
+
<h1 class="text-24 md:text-30 text-dark-900 font-bold font-heading line-clamp-1 first-letter:uppercase">
|
|
51
|
+
{% include 'sb_admin/includes/change_form_title.html' %}
|
|
52
|
+
</h1>
|
|
53
|
+
{% if change and not is_popup %}
|
|
54
|
+
<ul class="detail-view-actions flex ml-auto gap-8 md:gap-16">
|
|
55
|
+
<li class="relative md:hidden">
|
|
56
|
+
<button
|
|
57
|
+
data-bs-toggle="dropdown"
|
|
58
|
+
aria-expanded="false"
|
|
59
|
+
data-bs-popper-placement="bottom-end"
|
|
60
|
+
class="btn btn-empty btn-icon">
|
|
61
|
+
<svg class="w-16 h-16">
|
|
62
|
+
<use xlink:href="#More"></use>
|
|
63
|
+
</svg>
|
|
64
|
+
<span></span>
|
|
65
|
+
</button>
|
|
66
|
+
<div class="dropdown-menu w-248 max-h-432">
|
|
67
|
+
<ul>
|
|
68
|
+
{% block dropdown_actions %}
|
|
69
|
+
{% if detail_actions %}
|
|
70
|
+
{% for action in detail_actions %}
|
|
71
|
+
<li>
|
|
72
|
+
<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:'' }}">
|
|
73
|
+
{{ action.title }}
|
|
74
|
+
</a>
|
|
75
|
+
</li>
|
|
76
|
+
{% endfor %}
|
|
77
|
+
{% endif %}
|
|
66
78
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
79
|
+
<li>
|
|
80
|
+
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
|
|
81
|
+
<a href="{% add_preserved_filters history_url %}" class="dropdown-menu-link">{% trans "History" %}</a>
|
|
82
|
+
</li>
|
|
83
|
+
{% endblock %}
|
|
84
|
+
</ul>
|
|
85
|
+
</div>
|
|
86
|
+
</li>
|
|
75
87
|
|
|
76
88
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
89
|
+
{% block actions %}
|
|
90
|
+
<li class="max-sm:hidden">
|
|
91
|
+
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
|
|
92
|
+
<a href="{% add_preserved_filters history_url %}" class="btn btn-empty">{% trans "History" %}</a>
|
|
93
|
+
</li>
|
|
82
94
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
95
|
+
{% if detail_actions %}
|
|
96
|
+
{% for action in detail_actions %}
|
|
97
|
+
<li class="max-sm:hidden">
|
|
98
|
+
<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:'' }}">
|
|
99
|
+
{{ action.title }}
|
|
100
|
+
</a>
|
|
101
|
+
</li>
|
|
102
|
+
{% endfor %}
|
|
103
|
+
{% endif %}
|
|
104
|
+
{% endblock %}
|
|
105
|
+
{% if has_absolute_url %}
|
|
106
|
+
<li>
|
|
107
|
+
<a href="{{ absolute_url }}" class="btn btn-icon">
|
|
108
|
+
<svg class="w-20 h-20 md:mr-8">
|
|
109
|
+
<use xlink:href="#Preview-open"></use>
|
|
110
|
+
</svg>
|
|
111
|
+
<span>
|
|
112
|
+
{% trans "View on site" %}
|
|
113
|
+
</span>
|
|
114
|
+
</a>
|
|
115
|
+
</li>
|
|
91
116
|
{% 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>
|
|
117
|
+
</ul>
|
|
118
|
+
{% endif %}
|
|
119
|
+
</div>
|
|
120
|
+
{% endif %}
|
|
108
121
|
{% endblock %}
|
|
109
122
|
|
|
110
123
|
{% block form %}
|
|
111
124
|
<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
|
|
125
|
+
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>
|
|
126
|
+
<div{% if sbadmin_is_modal %} class="modal-body"{% endif %}>
|
|
113
127
|
{% csrf_token %}
|
|
114
128
|
{% if errors %}
|
|
115
129
|
<div class="alert bg-negative-50 border border-negative-100 text-negative-900 mb-24">
|
|
@@ -133,8 +147,8 @@
|
|
|
133
147
|
{% for tab, tab_content_object in tabular_context.context.items %}
|
|
134
148
|
<li role="presentation">
|
|
135
149
|
<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="
|
|
150
|
+
data-bs-target="#{% if sbadmin_is_modal %}modal_{% endif %}{{ opts.model_name }}_tabcontent_{{ tab|slugify }}" type="button" role="tab"
|
|
151
|
+
aria-controls="{% if sbadmin_is_modal %}modal_{% endif %}{{ opts.model_name }}_tabcontent_{{ tab|slugify }}" aria-selected="true">
|
|
138
152
|
{{ tab }}
|
|
139
153
|
</button>
|
|
140
154
|
</li>
|
|
@@ -142,7 +156,7 @@
|
|
|
142
156
|
</ul>
|
|
143
157
|
{% endif %}
|
|
144
158
|
{% 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="
|
|
159
|
+
<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
160
|
aria-labelledby="tab_{{ tab|slugify }}">
|
|
147
161
|
<div class="flex max-md:flex-wrap w-full lg:gap-24">
|
|
148
162
|
<div class="min-w-0 w-full">
|
|
@@ -150,7 +164,7 @@
|
|
|
150
164
|
{% if tab_content.type == 'fieldset' %}
|
|
151
165
|
{% block tab_content_fieldset %}
|
|
152
166
|
{% with tab_content.value as fieldset %}
|
|
153
|
-
{% if DETAIL_STRUCTURE_RIGHT_CLASS not in fieldset.classes %}
|
|
167
|
+
{% if DETAIL_STRUCTURE_RIGHT_CLASS not in fieldset.classes or sbadmin_is_modal %}
|
|
154
168
|
{% include "sb_admin/includes/fieldset.html" %}
|
|
155
169
|
{% endif %}
|
|
156
170
|
{% endwith %}
|
|
@@ -169,11 +183,13 @@
|
|
|
169
183
|
<div class="lg:flex-shrink-0 w-full lg:w-370 empty:hidden">
|
|
170
184
|
{% for tab_content in tab_content_object.content %}
|
|
171
185
|
{% if tab_content.type == 'fieldset' %}
|
|
172
|
-
{%
|
|
173
|
-
{%
|
|
174
|
-
{%
|
|
175
|
-
|
|
176
|
-
|
|
186
|
+
{% block tab_content_fieldset_right %}
|
|
187
|
+
{% with tab_content.value as fieldset %}
|
|
188
|
+
{% if DETAIL_STRUCTURE_RIGHT_CLASS in fieldset.classes and not sbadmin_is_modal %}
|
|
189
|
+
{% include "sb_admin/includes/fieldset.html" %}
|
|
190
|
+
{% endif %}
|
|
191
|
+
{% endwith %}
|
|
192
|
+
{% endblock %}
|
|
177
193
|
{% endif %}
|
|
178
194
|
{% endfor %}
|
|
179
195
|
</div>
|
|
@@ -191,41 +207,85 @@
|
|
|
191
207
|
{% endif %}>
|
|
192
208
|
</script>
|
|
193
209
|
{% endblock %}
|
|
210
|
+
</div>
|
|
194
211
|
{% if is_popup %}
|
|
195
212
|
{# 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
|
-
|
|
213
|
+
{% endif %}
|
|
214
|
+
{% if sbadmin_is_modal %}
|
|
215
|
+
<div class="modal-footer">
|
|
216
|
+
{% if original %}
|
|
217
|
+
{% url opts|admin_urlname:'change' original.pk|admin_urlquote as post_url %}
|
|
218
|
+
{% else %}
|
|
219
|
+
{% url opts|admin_urlname:'add' as post_url %}
|
|
220
|
+
{% endif %}
|
|
221
|
+
{% if has_change_permission %}
|
|
222
|
+
<button
|
|
223
|
+
form="{% if sbadmin_is_modal %}modal_{% endif %}{{ opts.model_name }}_form"
|
|
224
|
+
hx-post="{{ post_url }}"
|
|
225
|
+
hx-target="#sb-admin-modal"
|
|
226
|
+
hx-swap="innerHTML"
|
|
227
|
+
hx-select="#modal-content"
|
|
228
|
+
hx-encoding="multipart/form-data"
|
|
229
|
+
hx-vals='{
|
|
230
|
+
"sbadmin_is_modal": 1,
|
|
231
|
+
"sb_admin_source_field": "{{ request.GET.sb_admin_source_field }}",
|
|
232
|
+
"sbadmin_reload_on_save": {% if sbadmin_reload_on_save %}1{% else %}0{% endif %},
|
|
233
|
+
"sbadmin_parent_instance_field": "{{ request.GET.sbadmin_parent_instance_field }}",
|
|
234
|
+
"sbadmin_parent_instance_pk": "{{ request.GET.sbadmin_parent_instance_pk | default:"" }}",
|
|
235
|
+
"sbadmin_parent_instance_label": "{{ request.GET.sbadmin_parent_instance_label }}"
|
|
236
|
+
}'
|
|
237
|
+
class="btn btn-primary flex-grow flex items-center justify-center">
|
|
238
|
+
<svg class="w-20 h-20 mr-8">
|
|
239
|
+
<use xlink:href="#Save"></use>
|
|
240
|
+
</svg>
|
|
241
|
+
{% trans 'Save' %}
|
|
242
|
+
</button>
|
|
243
|
+
{% endif %}
|
|
244
|
+
<button type="button"
|
|
245
|
+
class="btn flex-grow"
|
|
246
|
+
data-bs-dismiss="modal" aria-label="Close">
|
|
247
|
+
{% trans 'Close' %}
|
|
248
|
+
</button>
|
|
249
|
+
</div>
|
|
250
|
+
{% else %}
|
|
251
|
+
{% block action_bar %}
|
|
252
|
+
<div class="detail-view-action-bar">
|
|
253
|
+
<div>
|
|
254
|
+
<h2 class="text-dark-900 font-semibold text-18 mr-16 line-clamp-1">
|
|
255
|
+
{% include 'sb_admin/includes/change_form_title.html' %}
|
|
256
|
+
</h2>
|
|
257
|
+
{% if previous_url or next_url %}
|
|
258
|
+
<div class="flex items-center gap-8 mr-8">
|
|
259
|
+
<{% if previous_url %}a href="{{ previous_url }}"{% else %}button type="button" disabled{% endif %} class="btn btn-small" title="{% trans 'Prev' %}">
|
|
260
|
+
<svg class="w-20 h-20">
|
|
261
|
+
<use xlink:href="#Left"></use>
|
|
262
|
+
</svg>
|
|
263
|
+
</{% if previous_url %}a{% else %}button{% endif %}>
|
|
264
|
+
<div class="text-12">{% blocktrans %}<strong>{{ current_index }}</strong> / {{ all_objects_count }}{% endblocktrans %}</div>
|
|
265
|
+
<{% if next_url %}a href="{{ next_url }}"{% else %}button type="button" disabled{% endif %} class="btn btn-small" title="{% trans 'Next' %}">
|
|
266
|
+
<svg class="w-20 h-20">
|
|
267
|
+
<use xlink:href="#Right"></use>
|
|
268
|
+
</svg>
|
|
269
|
+
</{% if next_url %}a{% else %}button{% endif %}>
|
|
270
|
+
</div>
|
|
222
271
|
{% endif %}
|
|
272
|
+
<div class="flex ml-auto gap-8">
|
|
273
|
+
{% if not is_popup and has_view_permission and show_back_button %}
|
|
274
|
+
<a href="{% add_preserved_filters back_url %}" class="btn btn-empty">{% trans 'Back' %}</a>
|
|
275
|
+
{% endif %}
|
|
223
276
|
|
|
224
|
-
|
|
277
|
+
{% submit_row %}
|
|
278
|
+
</div>
|
|
225
279
|
</div>
|
|
226
280
|
</div>
|
|
227
|
-
|
|
228
|
-
{%
|
|
281
|
+
{% endblock %}
|
|
282
|
+
{% endif %}
|
|
229
283
|
</form>
|
|
284
|
+
{% sb_admin_prepopulated_fields_init %}
|
|
285
|
+
{% if sbadmin_is_modal %}
|
|
286
|
+
<script>
|
|
287
|
+
init_prepopulate(document.getElementById("modal-content"));
|
|
288
|
+
</script>
|
|
289
|
+
{% endif %}
|
|
230
290
|
{% endblock %}
|
|
231
291
|
{% 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 list_action.template with action=list_action view_id=view_id dropdown=True 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 %}
|