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
|
@@ -1,172 +1,180 @@
|
|
|
1
1
|
{% load static sb_admin_tags widget_tweaks i18n %}
|
|
2
2
|
|
|
3
3
|
{% block content %}
|
|
4
|
-
|
|
5
|
-
<
|
|
6
|
-
<
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
</div>
|
|
10
|
-
<img src="{{ LAZY_LOAD_DEFAULT_IMAGE }}" data-src="{% static 'sb_admin/images/logo.svg' %}" class="lazyload h-32 w-auto"
|
|
11
|
-
alt="SBAdmin" width="106" height="16">
|
|
12
|
-
<div class="w-32 h-32 rounded-full leading-none flex-center flex-shrink-0 bg-dark-300 ml-auto">
|
|
13
|
-
{{ username_data.initials }}
|
|
14
|
-
</div>
|
|
15
|
-
</header>
|
|
16
|
-
<nav class="w-260 xl:fixed top-0 bottom-0 left-0 max-lg:sidebar border-r border-dark-200 overflow-hidden flex flex-col relative bg-dark-50 z-1"
|
|
17
|
-
id="main-navigation">
|
|
18
|
-
<header class="px-24 py-32 hidden xl:!block">
|
|
19
|
-
<img src="{{ LAZY_LOAD_DEFAULT_IMAGE }}" data-src="{% static 'sb_admin/images/logo.svg' %}" class="lazyload h-32 w-auto"
|
|
20
|
-
alt="SBAdmin" width="133" height="20">
|
|
21
|
-
</header>
|
|
22
|
-
<header class="px-16 py-8 flex items-center xl:hidden border-b border-dark-200 bg-light min-h-56">
|
|
23
|
-
<div class="js-sidebar-toggle w-24 h-24 flex-center ml-auto" data-sidebar-target="main-navigation">
|
|
24
|
-
<svg class="w-20 h-20 flex-shrink-0">
|
|
25
|
-
<use xlink:href="#Close"></use>
|
|
4
|
+
{% if not sec_fetch_site or request.META.HTTP_SEC_FETCH_DEST == 'document' %}
|
|
5
|
+
<header class="flex items-center bg-light border-b border-dark-200 p-12 xl:hidden">
|
|
6
|
+
<div class="js-sidebar-toggle mr-12" data-sidebar-target="main-navigation">
|
|
7
|
+
<svg class="w-24 h-24">
|
|
8
|
+
<use xlink:href="#Hamburger-button"></use>
|
|
26
9
|
</svg>
|
|
27
10
|
</div>
|
|
11
|
+
<img src="{% static 'sb_admin/images/logo.svg' %}" class="h-32 w-auto dark:hidden"
|
|
12
|
+
alt="SBAdmin" width="106" height="16">
|
|
13
|
+
<img src="{% static 'sb_admin/images/logo_light.svg' %}" class="h-32 w-auto hidden dark:block"
|
|
14
|
+
alt="SBAdmin" width="106" height="16">
|
|
15
|
+
<div class="w-32 h-32 rounded-full leading-none flex-center flex-shrink-0 bg-dark-300 ml-auto">
|
|
16
|
+
{{ username_data.initials }}
|
|
17
|
+
</div>
|
|
28
18
|
</header>
|
|
29
|
-
<
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
<use xlink:href="#{{ menu_item.get_icon }}"></use>
|
|
42
|
-
</svg>
|
|
43
|
-
{% endif %}
|
|
44
|
-
<span>{{ menu_item.get_label }}</span>
|
|
45
|
-
</a>
|
|
46
|
-
<ul id="{{ menu_item.get_id }}" class="collapse -mb-2 mt-2{% if menu_item.is_active %} show{% endif %}">
|
|
47
|
-
{% for sub_menu_item in menu_item.sub_items %}
|
|
48
|
-
<li class="py-2">
|
|
49
|
-
<a href="{{ sub_menu_item.get_url }}"
|
|
50
|
-
class="menu-item text-dark-600 leading-20 pl-36 py-8 pr-8{% if sub_menu_item.is_active %} active{% endif %}">
|
|
51
|
-
<span>{{ sub_menu_item.get_label }}</span>
|
|
52
|
-
</a>
|
|
53
|
-
</li>
|
|
54
|
-
{% endfor %}
|
|
55
|
-
</ul>
|
|
56
|
-
</div>
|
|
57
|
-
{% else %}
|
|
58
|
-
<div class="menu-item{% if menu_item.is_active %} active{% endif %}">
|
|
59
|
-
<a href="{{ menu_item.get_url }}" class="inline-flex w-full p-8">
|
|
60
|
-
{% if menu_item.get_icon %}
|
|
61
|
-
<svg class="w-20 h-20 mr-8 flex-shrink-0">
|
|
62
|
-
<use xlink:href="#{{ menu_item.get_icon }}"></use>
|
|
63
|
-
</svg>
|
|
64
|
-
{% endif %}
|
|
65
|
-
<span>{{ menu_item.get_label }}</span>
|
|
66
|
-
</a>
|
|
67
|
-
</div>
|
|
68
|
-
{% endif %}
|
|
69
|
-
</li>
|
|
70
|
-
{% endfor %}
|
|
71
|
-
</ul>
|
|
72
|
-
{# <hr class="my-32">#}
|
|
73
|
-
{# <div class="text-14 mb-24 px-16">#}
|
|
74
|
-
{# Pomoc a podpora#}
|
|
75
|
-
{# </div>#}
|
|
76
|
-
{# <ul class="-my-2 px-16">#}
|
|
77
|
-
{# <li class="py-2">#}
|
|
78
|
-
{# <div class="menu-item">#}
|
|
79
|
-
{# <a href="#" class="inline-flex w-full p-8">#}
|
|
80
|
-
{# <svg class="w-20 h-20 mr-8 flex-shrink-0">#}
|
|
81
|
-
{# <use xlink:href="#Accept-email"></use>#}
|
|
82
|
-
{# </svg>#}
|
|
83
|
-
{# <span class="leading-20 line-clamp-1">Menu Item 8</span>#}
|
|
84
|
-
{# </a>#}
|
|
85
|
-
{# </div>#}
|
|
86
|
-
{# </li>#}
|
|
87
|
-
{# <li class="py-2">#}
|
|
88
|
-
{# <div class="menu-item">#}
|
|
89
|
-
{# <a href="#" class="inline-flex w-full p-8">#}
|
|
90
|
-
{# <svg class="w-20 h-20 mr-8 flex-shrink-0">#}
|
|
91
|
-
{# <use xlink:href="#Accept-email"></use>#}
|
|
92
|
-
{# </svg>#}
|
|
93
|
-
{# <span class="leading-20 line-clamp-1">Menu Item 8</span>#}
|
|
94
|
-
{# </a>#}
|
|
95
|
-
{# </div>#}
|
|
96
|
-
{# </li>#}
|
|
97
|
-
{# </ul>#}
|
|
98
|
-
</div>
|
|
99
|
-
<footer class="mt-auto border-t border-dark-200">
|
|
100
|
-
{# Global Search #}
|
|
101
|
-
{# <div class="flex p-16 gap-x-8 border-b border-dark-200 w-full">#}
|
|
102
|
-
{# <div class="flex gap-x-4">#}
|
|
103
|
-
{# <div class="key">#}
|
|
104
|
-
{# ⌘#}
|
|
105
|
-
{# </div>#}
|
|
106
|
-
{# <div class="key">#}
|
|
107
|
-
{# K#}
|
|
108
|
-
{# </div>#}
|
|
109
|
-
{# </div>#}
|
|
110
|
-
{##}
|
|
111
|
-
{# <div class="text-dark">#}
|
|
112
|
-
{# Rýchla navigácia#}
|
|
113
|
-
{# </div>#}
|
|
114
|
-
{# </div>#}
|
|
115
|
-
<div class="relative">
|
|
116
|
-
<div class="dropdown-btn flex items-center w-full p-16 cursor-pointer min-h-72"
|
|
117
|
-
data-bs-toggle="dropdown"
|
|
118
|
-
data-bs-offset="[16,8]"
|
|
119
|
-
data-bs-popper-placement="top-start">
|
|
120
|
-
<div class="w-32 h-32 rounded-full leading-none flex-center flex-shrink-0 bg-dark-300">
|
|
121
|
-
{{ username_data.initials }}
|
|
122
|
-
</div>
|
|
123
|
-
<div class="ml-8">
|
|
124
|
-
<div class="text-14 text-dark-900">{{ username_data.full_name }}</div>
|
|
125
|
-
<div class="text-12 leading-16 js-alias-domain-name hidden"></div>
|
|
126
|
-
</div>
|
|
127
|
-
<svg class="w-16 h-16 ml-auto flex-shrink-0">
|
|
128
|
-
<use xlink:href="#Sort Alt"></use>
|
|
19
|
+
<nav class="w-260 xl:fixed top-0 bottom-0 left-0 max-lg:sidebar border-r border-dark-200 overflow-hidden flex flex-col relative bg-dark-50 z-1"
|
|
20
|
+
id="main-navigation">
|
|
21
|
+
<header class="px-24 py-32 hidden xl:!block">
|
|
22
|
+
<img src="{% static 'sb_admin/images/logo.svg' %}" class="h-32 w-auto dark:hidden"
|
|
23
|
+
alt="SBAdmin" width="133" height="20">
|
|
24
|
+
<img src="{% static 'sb_admin/images/logo_light.svg' %}" class="h-32 w-auto hidden dark:block"
|
|
25
|
+
alt="SBAdmin" width="133" height="20">
|
|
26
|
+
</header>
|
|
27
|
+
<header class="px-16 py-8 flex items-center xl:hidden border-b border-dark-200 bg-light min-h-56">
|
|
28
|
+
<div class="js-sidebar-toggle w-24 h-24 flex-center ml-auto" data-sidebar-target="main-navigation">
|
|
29
|
+
<svg class="w-20 h-20 flex-shrink-0">
|
|
30
|
+
<use xlink:href="#Close"></use>
|
|
129
31
|
</svg>
|
|
130
32
|
</div>
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
33
|
+
</header>
|
|
34
|
+
<div class="h-full overflow-auto custom-scrollbar max-lg:py-16">
|
|
35
|
+
<ul class="-my-2 px-16">
|
|
36
|
+
{% for menu_item in request_data.menu_items %}
|
|
37
|
+
<li class="py-2">
|
|
38
|
+
{% if menu_item.sub_items %}
|
|
39
|
+
<div class="menu-item">
|
|
40
|
+
<a href="{{ menu_item.get_url|default:menu_item.sub_items.0.get_url }}"
|
|
41
|
+
class="inline-flex w-full p-8 justify-start collapse-btn{% if not menu_item.is_active %} collapsed{% endif %}"
|
|
42
|
+
aria-expanded="{% if menu_item.is_active %}true{% else %}false{% endif %}"
|
|
43
|
+
>
|
|
44
|
+
{% if menu_item.get_icon %}
|
|
45
|
+
<svg class="w-20 h-20 mr-8 flex-shrink-0">
|
|
46
|
+
<use xlink:href="#{{ menu_item.get_icon }}"></use>
|
|
47
|
+
</svg>
|
|
48
|
+
{% endif %}
|
|
49
|
+
<span>{{ menu_item.get_label }}</span>
|
|
50
|
+
</a>
|
|
51
|
+
<ul id="{{ menu_item.get_id }}" class="collapse -mb-2 mt-2{% if menu_item.is_active %} show{% endif %}">
|
|
52
|
+
{% for sub_menu_item in menu_item.sub_items %}
|
|
53
|
+
<li class="py-2">
|
|
54
|
+
<a href="{{ sub_menu_item.get_url }}"
|
|
55
|
+
class="menu-item text-dark-600 leading-20 pl-36 py-8 pr-8{% if sub_menu_item.is_active %} active{% endif %}">
|
|
56
|
+
<span>{{ sub_menu_item.get_label }}</span>
|
|
57
|
+
</a>
|
|
58
|
+
</li>
|
|
59
|
+
{% endfor %}
|
|
60
|
+
</ul>
|
|
61
|
+
</div>
|
|
62
|
+
{% else %}
|
|
63
|
+
<div class="menu-item{% if menu_item.is_active %} active{% endif %}">
|
|
64
|
+
<a href="{{ menu_item.get_url }}" class="inline-flex w-full p-8">
|
|
65
|
+
{% if menu_item.get_icon %}
|
|
66
|
+
<svg class="w-20 h-20 mr-8 flex-shrink-0">
|
|
67
|
+
<use xlink:href="#{{ menu_item.get_icon }}"></use>
|
|
68
|
+
</svg>
|
|
69
|
+
{% endif %}
|
|
70
|
+
<span>{{ menu_item.get_label }}</span>
|
|
71
|
+
</a>
|
|
72
|
+
</div>
|
|
73
|
+
{% endif %}
|
|
149
74
|
</li>
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
75
|
+
{% endfor %}
|
|
76
|
+
</ul>
|
|
77
|
+
{# <hr class="my-32">#}
|
|
78
|
+
{# <div class="text-14 mb-24 px-16">#}
|
|
79
|
+
{# Pomoc a podpora#}
|
|
80
|
+
{# </div>#}
|
|
81
|
+
{# <ul class="-my-2 px-16">#}
|
|
82
|
+
{# <li class="py-2">#}
|
|
83
|
+
{# <div class="menu-item">#}
|
|
84
|
+
{# <a href="#" class="inline-flex w-full p-8">#}
|
|
85
|
+
{# <svg class="w-20 h-20 mr-8 flex-shrink-0">#}
|
|
86
|
+
{# <use xlink:href="#Accept-email"></use>#}
|
|
87
|
+
{# </svg>#}
|
|
88
|
+
{# <span class="leading-20 line-clamp-1">Menu Item 8</span>#}
|
|
89
|
+
{# </a>#}
|
|
90
|
+
{# </div>#}
|
|
91
|
+
{# </li>#}
|
|
92
|
+
{# <li class="py-2">#}
|
|
93
|
+
{# <div class="menu-item">#}
|
|
94
|
+
{# <a href="#" class="inline-flex w-full p-8">#}
|
|
95
|
+
{# <svg class="w-20 h-20 mr-8 flex-shrink-0">#}
|
|
96
|
+
{# <use xlink:href="#Accept-email"></use>#}
|
|
97
|
+
{# </svg>#}
|
|
98
|
+
{# <span class="leading-20 line-clamp-1">Menu Item 8</span>#}
|
|
99
|
+
{# </a>#}
|
|
100
|
+
{# </div>#}
|
|
101
|
+
{# </li>#}
|
|
102
|
+
{# </ul>#}
|
|
103
|
+
</div>
|
|
104
|
+
<footer class="mt-auto border-t border-dark-200">
|
|
105
|
+
{# Global Search #}
|
|
106
|
+
{# <div class="flex p-16 gap-x-8 border-b border-dark-200 w-full">#}
|
|
107
|
+
{# <div class="flex gap-x-4">#}
|
|
108
|
+
{# <div class="key">#}
|
|
109
|
+
{# ⌘#}
|
|
110
|
+
{# </div>#}
|
|
111
|
+
{# <div class="key">#}
|
|
112
|
+
{# K#}
|
|
113
|
+
{# </div>#}
|
|
114
|
+
{# </div>#}
|
|
115
|
+
{##}
|
|
116
|
+
{# <div class="text-dark">#}
|
|
117
|
+
{# Rýchla navigácia#}
|
|
118
|
+
{# </div>#}
|
|
119
|
+
{# </div>#}
|
|
120
|
+
<div class="relative">
|
|
121
|
+
<div class="dropdown-btn flex items-center w-full p-16 cursor-pointer min-h-72"
|
|
122
|
+
data-bs-toggle="dropdown"
|
|
123
|
+
data-bs-offset="[16,8]"
|
|
124
|
+
data-bs-popper-placement="top-start">
|
|
125
|
+
<div class="w-32 h-32 rounded-full leading-none flex-center flex-shrink-0 bg-dark-300">
|
|
126
|
+
{{ username_data.initials }}
|
|
127
|
+
</div>
|
|
128
|
+
<div class="ml-8">
|
|
129
|
+
<div class="text-14 text-dark-900">{{ username_data.full_name }}</div>
|
|
130
|
+
<div class="text-12 leading-16 js-alias-domain-name hidden"></div>
|
|
131
|
+
</div>
|
|
132
|
+
<svg class="w-16 h-16 ml-auto flex-shrink-0">
|
|
133
|
+
<use xlink:href="#Sort Alt"></use>
|
|
134
|
+
</svg>
|
|
135
|
+
</div>
|
|
136
|
+
<div class="dropdown-menu max-h-432">
|
|
137
|
+
<form id="logout-form" method="post" action="{% url 'sb_admin:logout' %}" class="hidden">
|
|
138
|
+
{% csrf_token %}
|
|
139
|
+
</form>
|
|
140
|
+
|
|
141
|
+
<ul>
|
|
142
|
+
<li class="flex items-center p-12 text-dark-900 border-b border-dark-100 cursor-pointer hover:bg-dark-100"
|
|
143
|
+
onclick="document.getElementById('logout-form').submit();">
|
|
144
|
+
<svg class="w-16 h-16 flex-shrink-0 mr-8">
|
|
145
|
+
<use xlink:href="#Logout"></use>
|
|
146
|
+
</svg>
|
|
147
|
+
{% trans 'Logout' %}
|
|
153
148
|
</li>
|
|
154
|
-
<li>
|
|
155
|
-
<
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
</div>
|
|
160
|
-
{{ field.errors }}
|
|
161
|
-
{% endfor %}
|
|
162
|
-
</form>
|
|
149
|
+
<li class="flex items-center p-12 text-dark-900 cursor-pointer hover:bg-dark-100" onclick="window.location='{% url "sb_admin:password_change" %}'">
|
|
150
|
+
<svg class="w-16 h-16 flex-shrink-0 mr-8">
|
|
151
|
+
<use xlink:href="#Lock"></use>
|
|
152
|
+
</svg>
|
|
153
|
+
{% trans 'Change password' %}
|
|
163
154
|
</li>
|
|
164
|
-
|
|
165
|
-
|
|
155
|
+
{% block color_scheme %}
|
|
156
|
+
<li class="border-t border-dark-100 pt-8">
|
|
157
|
+
<form hx-post="{% url 'sb_admin:color_scheme' %}" hx-trigger="change" hx-swap="none" id="color-schema-form" class="js-color-scheme-picker">
|
|
158
|
+
{{ color_scheme_form.color_scheme }}
|
|
159
|
+
</form>
|
|
160
|
+
</li>
|
|
161
|
+
{% endblock %}
|
|
162
|
+
{% if request_data.global_filter_instance %}
|
|
163
|
+
<li class="border-t border-dark-100 pt-8">
|
|
164
|
+
<form hx-post="{% url 'sb_admin:global_filter' %}" hx-trigger="change" hx-swap="none" id="global_filter_form">
|
|
165
|
+
{% for field in request_data.global_filter_instance %}
|
|
166
|
+
{{ field }}
|
|
167
|
+
{{ field.errors }}
|
|
168
|
+
{% endfor %}
|
|
169
|
+
</form>
|
|
170
|
+
</li>
|
|
171
|
+
{% endif %}
|
|
172
|
+
</ul>
|
|
173
|
+
</div>
|
|
166
174
|
</div>
|
|
167
|
-
</div>
|
|
168
175
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
176
|
+
</footer>
|
|
177
|
+
</nav>
|
|
178
|
+
<div class="bg-filter js-sidebar-toggle" data-sidebar-target="main-navigation"></div>
|
|
179
|
+
{% endif %}
|
|
172
180
|
{% endblock %}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
</div>
|
|
17
17
|
<div class="modal-body">
|
|
18
18
|
{% block modal_body %}
|
|
19
|
-
<form id="sb-admin-modal-form" hx-indicator=".sb-admin-modal-loading" hx-target="#sb-admin-modal" hx-post="{{ request.get_full_path }}" action="{{ request.get_full_path }}" method="post">
|
|
19
|
+
<form id="sb-admin-modal-form" enctype="multipart/form-data" hx-indicator=".sb-admin-modal-loading" hx-target="#sb-admin-modal" hx-post="{{ request.get_full_path }}" action="{{ request.get_full_path }}" method="post">
|
|
20
20
|
{% if form.errors %}
|
|
21
21
|
<div class="alert bg-negative-50 border border-negative-100 text-negative-900 mb-24">
|
|
22
22
|
<div class="flex">
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
</div>
|
|
43
43
|
<div class="modal-footer">
|
|
44
44
|
{% block modal_footer %}
|
|
45
|
-
<button form="sb-admin-modal-form" type="button" class="btn btn-destructive
|
|
45
|
+
<button form="sb-admin-modal-form" type="button" class="btn btn-destructive" data-bs-dismiss="modal">{% trans 'Close' %}</button>
|
|
46
46
|
<button form="sb-admin-modal-form" type="submit" class="btn btn-primary">{% trans 'Continue' %}</button>
|
|
47
47
|
{% endblock %}
|
|
48
48
|
</div>
|
|
@@ -51,10 +51,6 @@
|
|
|
51
51
|
</div>
|
|
52
52
|
<script>
|
|
53
53
|
(function(){
|
|
54
|
-
const choiceElements = document.getElementById('sb-admin-modal').querySelectorAll('.js-autocomplete');
|
|
55
|
-
choiceElements.forEach((choiceInput) => {
|
|
56
|
-
window.SBAdmin.autocomplete.initAutocomplete(choiceInput);
|
|
57
|
-
})
|
|
58
54
|
document.body.dispatchEvent(new Event('SBModalShown'));
|
|
59
55
|
})();
|
|
60
56
|
</script>
|
|
@@ -1,15 +1,60 @@
|
|
|
1
1
|
{% extends 'sb_admin/sb_admin_base_no_sidebar.html' %}
|
|
2
|
+
{% load sb_admin_tags %}
|
|
2
3
|
|
|
3
4
|
{% block main_wrapper %}
|
|
4
|
-
|
|
5
|
+
{% get_item request.META 'HTTP_SEC_FETCH_SITE' as sec_fetch_site %}
|
|
6
|
+
<div class="w-full h-full min-h-full{% if not sec_fetch_site or request.META.HTTP_SEC_FETCH_DEST == 'document' %} xl:pl-260{% endif %}">
|
|
5
7
|
{% include 'sb_admin/navigation.html' %}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
{% if sbadmin_is_modal %}
|
|
10
|
+
<div id="modal-content" class="modal-dialog">
|
|
11
|
+
<div class="modal-content">
|
|
12
|
+
{% endif %}
|
|
13
|
+
|
|
14
|
+
<div id="content" class="relative flex flex-col{% if sbadmin_is_modal %} min-h-0 h-full{% else %} min-h-screen sm:p-24 {% block view_class %}{% endblock %}{% endif %}">
|
|
15
|
+
{% if sbadmin_is_modal %}
|
|
16
|
+
{# load media which are missing #}
|
|
17
|
+
<script>
|
|
18
|
+
(function(){
|
|
19
|
+
const mediaString = '{{ media|escapejs }}';
|
|
20
|
+
const mediaList = mediaString.split('\n');
|
|
21
|
+
const tmpEl = document.createElement('div');
|
|
22
|
+
function duplicateScript(script) {
|
|
23
|
+
const newScript = document.createElement('script');
|
|
24
|
+
for (let i = 0; i < script.attributes.length; i++) {
|
|
25
|
+
const attr = script.attributes[i];
|
|
26
|
+
newScript.setAttribute(attr.name, attr.value);
|
|
27
|
+
}
|
|
28
|
+
newScript.textContent = script.textContent;
|
|
29
|
+
newScript.async = false;
|
|
30
|
+
return newScript;
|
|
31
|
+
}
|
|
32
|
+
mediaList.forEach(media => {
|
|
33
|
+
tmpEl.innerHTML = media.trim();
|
|
34
|
+
const mediaEl = tmpEl.firstElementChild;
|
|
35
|
+
if(mediaEl.tagName === 'LINK' && !document.head.querySelector(`link[href="${mediaEl.getAttribute('href')}"]`)) {
|
|
36
|
+
document.head.appendChild(mediaEl);
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
if(mediaEl.tagName === 'SCRIPT' && !document.head.querySelector(`script[src="${mediaEl.getAttribute('src')}"]`)) {
|
|
40
|
+
document.head.appendChild(duplicateScript(mediaEl));
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}());
|
|
44
|
+
</script>
|
|
45
|
+
{% else %}
|
|
46
|
+
{% include "sb_admin/includes/loading.html" %}
|
|
47
|
+
{% include "sb_admin/includes/notifications.html" %}
|
|
48
|
+
{% endif %}
|
|
9
49
|
|
|
10
50
|
{% block content %}
|
|
11
51
|
{% endblock %}
|
|
12
52
|
{{ inner_content }}
|
|
13
53
|
</div>
|
|
54
|
+
|
|
55
|
+
{% if sbadmin_is_modal %}
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
{% endif %}
|
|
14
59
|
</div>
|
|
15
60
|
{% endblock %}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{% load static %}
|
|
2
2
|
|
|
3
3
|
<!DOCTYPE html>
|
|
4
|
-
<html lang="{{ request.LANGUAGE_CODE }}" data-theme="
|
|
4
|
+
<html lang="{{ request.LANGUAGE_CODE }}" data-theme="{{ user_config.color_scheme }}">
|
|
5
5
|
<head>
|
|
6
6
|
{% include 'sb_admin/fonts.html' %}
|
|
7
7
|
<meta name="robots" content="noindex"/>
|
|
@@ -11,20 +11,24 @@
|
|
|
11
11
|
<title>{% block title %}SBAdmin{% endblock %}</title>
|
|
12
12
|
|
|
13
13
|
{% block icons %}
|
|
14
|
-
<link rel="apple-touch-icon" sizes="180x180" href="{% static 'favicon/apple-touch-icon.png' %}">
|
|
15
|
-
<link rel="icon" type="image/png" sizes="32x32" href="{% static 'favicon/favicon-32x32.png' %}">
|
|
16
|
-
<link rel="icon" type="image/png" sizes="16x16" href="{% static 'favicon/favicon-16x16.png' %}">
|
|
17
|
-
<link rel="manifest" href="{% static 'favicon/site.webmanifest' %}">
|
|
18
|
-
<link rel="mask-icon" href="{% static 'favicon/safari-pinned-tab.svg' %}" color="#e0004d">
|
|
19
|
-
<link rel="shortcut icon" href="{% static 'favicon/favicon.ico' %}">
|
|
14
|
+
<link rel="apple-touch-icon" sizes="180x180" href="{% static 'sb_admin/favicon/apple-touch-icon.png' %}">
|
|
15
|
+
<link rel="icon" type="image/png" sizes="32x32" href="{% static 'sb_admin/favicon/favicon-32x32.png' %}">
|
|
16
|
+
<link rel="icon" type="image/png" sizes="16x16" href="{% static 'sb_admin/favicon/favicon-16x16.png' %}">
|
|
17
|
+
<link rel="manifest" href="{% static 'sb_admin/favicon/site.webmanifest' %}">
|
|
18
|
+
<link rel="mask-icon" href="{% static 'sb_admin/favicon/safari-pinned-tab.svg' %}" color="#e0004d">
|
|
19
|
+
<link rel="shortcut icon" href="{% static 'sb_admin/favicon/favicon.ico' %}">
|
|
20
20
|
<meta name="msapplication-TileColor" content="#e0004d">
|
|
21
|
-
<meta name="msapplication-config" content="{% static 'favicon/browserconfig.xml' %}">
|
|
21
|
+
<meta name="msapplication-config" content="{% static 'sb_admin/favicon/browserconfig.xml' %}">
|
|
22
22
|
<meta name="theme-color" content="#ffffff">
|
|
23
23
|
{% endblock %}
|
|
24
24
|
<link rel="stylesheet" href="{% static 'sb_admin/dist/main_style.css' %}">
|
|
25
25
|
{% block style_init %}{% endblock %}
|
|
26
26
|
|
|
27
27
|
<script>window.csrf_token = "{{ csrf_token }}"</script>
|
|
28
|
+
|
|
29
|
+
{% block jquery %}
|
|
30
|
+
<script src="{% static 'sb_admin/js/jquery-3.7.1.min.js' %}"></script>
|
|
31
|
+
{% endblock %}
|
|
28
32
|
{% block js_init %}
|
|
29
33
|
<script>
|
|
30
34
|
{% if const %}
|
|
@@ -35,11 +39,23 @@
|
|
|
35
39
|
}
|
|
36
40
|
</script>
|
|
37
41
|
{% endblock %}
|
|
38
|
-
{%
|
|
39
|
-
<script src="{% static 'sb_admin/
|
|
40
|
-
|
|
42
|
+
{% block tree_widget_static %}
|
|
43
|
+
<script src="{% static 'sb_admin/fancytree/jquery.fancytree-all-deps.min.js' %}"></script>
|
|
44
|
+
<script src="{% static 'sb_admin/dist/tree_widget.js' %}"></script>
|
|
45
|
+
<link rel="stylesheet" href="{% static 'sb_admin/dist/tree_widget_style.css' %}">
|
|
46
|
+
{% endblock %}
|
|
41
47
|
{% block extrahead %}{% endblock %}
|
|
42
48
|
<style>@media (min-width: 1200px){.xl\:\!block {display: block !important;}}</style>
|
|
49
|
+
{% if request.META.HTTP_SEC_FETCH_DEST == "iframe" %}
|
|
50
|
+
<style>
|
|
51
|
+
.detail-view-action-bar {
|
|
52
|
+
display: none !important;
|
|
53
|
+
}
|
|
54
|
+
.change-form {
|
|
55
|
+
margin-top: 0 !important;
|
|
56
|
+
}
|
|
57
|
+
</style>
|
|
58
|
+
{% endif %}
|
|
43
59
|
</head>
|
|
44
60
|
<body hx-ext="remove-me" class="{{ view_id }} {% block bodyclass %}{% endblock %}" hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
|
|
45
61
|
<div class="hidden">
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
window.sb_admin_translation_strings["up"] = '{% trans "Move up" %}';
|
|
7
7
|
window.sb_admin_translation_strings["down"] = '{% trans "Move down" %}';
|
|
8
8
|
window.sb_admin_translation_strings["reorder"] = '{% trans "Reorder" %}';
|
|
9
|
+
window.sb_admin_translation_strings["expand"] = '{% trans "Expand" %}';
|
|
10
|
+
window.sb_admin_translation_strings["collapse"] = '{% trans "Collapse" %}';
|
|
9
11
|
window.sb_admin_translation_strings["page"] = '{% blocktrans %}<strong>${from} - ${to}</strong> of <strong>${total}</strong><span class="max-xs:hidden"> items</span>{% endblocktrans %}'
|
|
10
12
|
window.sb_admin_translation_strings["page_empty"] = '{% blocktrans %}<strong>0</strong> items{% endblocktrans %}'
|
|
13
|
+
window.sb_admin_translation_strings["selected"] = '{% blocktrans %}${value} selected{% endblocktrans %}'
|
|
11
14
|
</script>
|