django-bootstrap6-admin 0.1.0__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.
Files changed (52) hide show
  1. django_bootstrap6_admin/__init__.py +3 -0
  2. django_bootstrap6_admin/apps.py +13 -0
  3. django_bootstrap6_admin/static/django_bootstrap6_admin/css/admin.css +3530 -0
  4. django_bootstrap6_admin/static/django_bootstrap6_admin/css/widgets-overrides.css +47 -0
  5. django_bootstrap6_admin/static/django_bootstrap6_admin/js/admin.js +360 -0
  6. django_bootstrap6_admin/static/django_bootstrap6_admin/js/theme.js +108 -0
  7. django_bootstrap6_admin/static/django_bootstrap6_admin/vendor/bootstrap/LICENSE +21 -0
  8. django_bootstrap6_admin/static/django_bootstrap6_admin/vendor/bootstrap/css/bootstrap.min.css +2 -0
  9. django_bootstrap6_admin/static/django_bootstrap6_admin/vendor/bootstrap/js/bootstrap.bundle.min.js +9 -0
  10. django_bootstrap6_admin/templates/admin/404.html +17 -0
  11. django_bootstrap6_admin/templates/admin/500.html +31 -0
  12. django_bootstrap6_admin/templates/admin/actions.html +40 -0
  13. django_bootstrap6_admin/templates/admin/app_index.html +43 -0
  14. django_bootstrap6_admin/templates/admin/app_list.html +59 -0
  15. django_bootstrap6_admin/templates/admin/auth/user/add_form.html +11 -0
  16. django_bootstrap6_admin/templates/admin/auth/user/change_password.html +105 -0
  17. django_bootstrap6_admin/templates/admin/base.html +220 -0
  18. django_bootstrap6_admin/templates/admin/base_site.html +19 -0
  19. django_bootstrap6_admin/templates/admin/change_form.html +124 -0
  20. django_bootstrap6_admin/templates/admin/change_form_object_tools.html +14 -0
  21. django_bootstrap6_admin/templates/admin/change_list.html +179 -0
  22. django_bootstrap6_admin/templates/admin/change_list_object_tools.html +10 -0
  23. django_bootstrap6_admin/templates/admin/change_list_results.html +42 -0
  24. django_bootstrap6_admin/templates/admin/color_theme_toggle.html +15 -0
  25. django_bootstrap6_admin/templates/admin/date_hierarchy.html +27 -0
  26. django_bootstrap6_admin/templates/admin/delete_confirmation.html +89 -0
  27. django_bootstrap6_admin/templates/admin/delete_selected_confirmation.html +81 -0
  28. django_bootstrap6_admin/templates/admin/edit_inline/stacked.html +67 -0
  29. django_bootstrap6_admin/templates/admin/edit_inline/tabular.html +94 -0
  30. django_bootstrap6_admin/templates/admin/filter.html +17 -0
  31. django_bootstrap6_admin/templates/admin/includes/fieldset.html +54 -0
  32. django_bootstrap6_admin/templates/admin/includes/object_delete_summary.html +7 -0
  33. django_bootstrap6_admin/templates/admin/index.html +136 -0
  34. django_bootstrap6_admin/templates/admin/login.html +99 -0
  35. django_bootstrap6_admin/templates/admin/nav_sidebar.html +21 -0
  36. django_bootstrap6_admin/templates/admin/object_history.html +81 -0
  37. django_bootstrap6_admin/templates/admin/pagination.html +18 -0
  38. django_bootstrap6_admin/templates/admin/search_form.html +28 -0
  39. django_bootstrap6_admin/templates/admin/submit_line.html +35 -0
  40. django_bootstrap6_admin/templates/admin/widgets/foreign_key_raw_id.html +14 -0
  41. django_bootstrap6_admin/templates/admin/widgets/related_widget_wrapper.html +49 -0
  42. django_bootstrap6_admin/templates/registration/logged_out.html +32 -0
  43. django_bootstrap6_admin/templates/registration/password_change_done.html +30 -0
  44. django_bootstrap6_admin/templates/registration/password_change_form.html +74 -0
  45. django_bootstrap6_admin/templatetags/__init__.py +0 -0
  46. django_bootstrap6_admin/templatetags/bootstrap6_admin.py +38 -0
  47. django_bootstrap6_admin-0.1.0.dist-info/METADATA +262 -0
  48. django_bootstrap6_admin-0.1.0.dist-info/RECORD +52 -0
  49. django_bootstrap6_admin-0.1.0.dist-info/WHEEL +5 -0
  50. django_bootstrap6_admin-0.1.0.dist-info/licenses/LICENSE +21 -0
  51. django_bootstrap6_admin-0.1.0.dist-info/licenses/NOTICE +48 -0
  52. django_bootstrap6_admin-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,17 @@
1
+ {% extends "admin/base_site.html" %}
2
+ {% load i18n %}
3
+
4
+ {% block content_title %}{% endblock %}
5
+
6
+ {% block title %}{% translate 'Page not found' %}{% endblock %}
7
+
8
+ {% block content %}
9
+ <div class="card ba-error-card">
10
+ <div class="card-body">
11
+ <span class="ba-error-code" aria-hidden="true">404</span>
12
+ <h1>{% translate 'Page not found' %}</h1>
13
+ <p>{% translate 'We’re sorry, but the requested page could not be found.' %}</p>
14
+ <a class="btn btn-solid theme-primary" href="{% url 'admin:index' %}">{% translate 'Back to dashboard' %}</a>
15
+ </div>
16
+ </div>
17
+ {% endblock %}
@@ -0,0 +1,31 @@
1
+ {% extends "admin/base_site.html" %}
2
+ {% load i18n %}
3
+
4
+ {% block content_title %}{% endblock %}
5
+
6
+ {% block breadcrumbs %}
7
+ <ol class="breadcrumb">
8
+ <li class="breadcrumb-item">
9
+ <a class="breadcrumb-link" href="{% url 'admin:index' %}">
10
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-home"></use></svg>
11
+ {% translate 'Home' %}
12
+ </a>
13
+ </li>
14
+ <li class="breadcrumb-divider" aria-hidden="true"></li>
15
+ <li class="breadcrumb-item">
16
+ <span class="breadcrumb-link active" aria-current="page">{% translate 'Server error' %}</span>
17
+ </li>
18
+ </ol>
19
+ {% endblock %}
20
+
21
+ {% block title %}{% translate 'Server error (500)' %}{% endblock %}
22
+
23
+ {% block content %}
24
+ <div class="card ba-error-card">
25
+ <div class="card-body">
26
+ <span class="ba-error-code" aria-hidden="true">500</span>
27
+ <h1>{% translate 'Server Error' %} <em>(500)</em></h1>
28
+ <p>{% translate 'There’s been an error. It’s been reported to the site administrators via email and should be fixed shortly. Thanks for your patience.' %}</p>
29
+ </div>
30
+ </div>
31
+ {% endblock %}
@@ -0,0 +1,40 @@
1
+ {% load i18n %}
2
+ <div class="actions ba-actions">
3
+ {% block actions %}
4
+ <div class="ba-actions-fields">
5
+ {% block actions-form %}
6
+ {% for field in action_form %}
7
+ {% if field.label %}
8
+ <label class="ba-action-label">
9
+ <span>{{ field.label }}</span>
10
+ {{ field }}
11
+ </label>
12
+ {% else %}
13
+ {{ field }}
14
+ {% endif %}
15
+ {% endfor %}
16
+ {% endblock %}
17
+ {% block actions-submit %}
18
+ <button type="submit" class="btn btn-solid theme-primary btn-sm" name="index" value="{{ action_index|default:0 }}">
19
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-check"></use></svg>
20
+ {% translate "Run" %}
21
+ </button>
22
+ {% endblock %}
23
+ </div>
24
+
25
+ <div class="ba-actions-selection">
26
+ {% block actions-counter %}
27
+ {% if actions_selection_counter %}
28
+ <span class="action-counter" data-actions-icnt="{{ cl.result_list|length }}" aria-live="polite" aria-atomic="true">{{ selection_note }}</span>
29
+ {% if cl.result_count != cl.result_list|length %}
30
+ <span class="all hidden">{{ selection_note_all }}</span>
31
+ <span class="question hidden">
32
+ <a role="button" href="#">{% blocktranslate with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktranslate %}</a>
33
+ </span>
34
+ <span class="clear hidden"><a role="button" href="#">{% translate "Clear selection" %}</a></span>
35
+ {% endif %}
36
+ {% endif %}
37
+ {% endblock %}
38
+ </div>
39
+ {% endblock %}
40
+ </div>
@@ -0,0 +1,43 @@
1
+ {% extends "admin/index.html" %}
2
+ {% load i18n %}
3
+
4
+ {% block bodyclass %}{{ block.super }} app-{{ app_label }} ba-dashboard-single{% endblock %}
5
+
6
+ {% block dashboard-heading %}
7
+ <div class="ba-section-heading">
8
+ <div>
9
+ <p class="ba-eyebrow">{% translate 'Application' %}</p>
10
+ <h1 class="ba-page-title">{% for app in app_list %}{{ app.name }}{% endfor %}</h1>
11
+ </div>
12
+ <a class="btn btn-outline theme-secondary btn-sm" href="{% url 'admin:index' %}">
13
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-grid"></use></svg>
14
+ {% translate 'All applications' %}
15
+ </a>
16
+ </div>
17
+ {% endblock %}
18
+
19
+ {% block dashboard-aside %}{% endblock %}
20
+ {% block recent-actions %}{% endblock %}
21
+
22
+ {% if not is_popup %}
23
+ {% block nav-breadcrumbs %}
24
+ <nav class="ba-breadcrumb-nav" aria-label="{% translate 'Breadcrumbs' %}">
25
+ <ol class="breadcrumb">
26
+ <li class="breadcrumb-item">
27
+ <a class="breadcrumb-link" href="{% url 'admin:index' %}">
28
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-home"></use></svg>
29
+ {% translate 'Home' %}
30
+ </a>
31
+ </li>
32
+ <li class="breadcrumb-divider" aria-hidden="true"></li>
33
+ <li class="breadcrumb-item">
34
+ <span class="breadcrumb-link active" aria-current="page">
35
+ {% for app in app_list %}{{ app.name }}{% endfor %}
36
+ </span>
37
+ </li>
38
+ </ol>
39
+ </nav>
40
+ {% endblock %}
41
+ {% endif %}
42
+
43
+ {% block sidebar %}{% endblock %}
@@ -0,0 +1,59 @@
1
+ {% load i18n %}
2
+
3
+ {% if app_list %}
4
+ <div class="ba-nav-apps">
5
+ {% for app in app_list %}
6
+ <section class="ba-nav-app{% if app.app_url in request.path|urlencode %} current-app{% endif %}">
7
+ <a href="{{ app.app_url }}" class="ba-nav-app-title section">{{ app.name }}</a>
8
+ <table class="ba-nav-table">
9
+ <tbody>
10
+ {% for model in app.models %}
11
+ {% with model_name=model.object_name|lower %}
12
+ <tr class="model-{{ model_name }}{% if model.admin_url in request.path|urlencode %} current-model{% endif %}">
13
+ <th scope="row" id="{{ app.app_label }}-{{ model_name }}">
14
+ {% if model.admin_url %}
15
+ <a href="{{ model.admin_url }}"{% if model.admin_url in request.path|urlencode %} aria-current="page"{% endif %}>{{ model.name }}</a>
16
+ {% else %}
17
+ <span>{{ model.name }}</span>
18
+ {% endif %}
19
+ </th>
20
+ {% if show_changelinks %}
21
+ <td class="ba-nav-action">
22
+ {% if model.add_url %}
23
+ <a href="{{ model.add_url }}" class="ba-nav-link addlink"
24
+ aria-describedby="{{ app.app_label }}-{{ model_name }}"
25
+ title="{% translate 'Add' %}">
26
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-plus"></use></svg>
27
+ <span class="visually-hidden">{% translate 'Add' %}</span>
28
+ </a>
29
+ {% endif %}
30
+ {% if model.admin_url %}
31
+ {% if model.view_only %}
32
+ <a href="{{ model.admin_url }}" class="ba-nav-link viewlink"
33
+ aria-describedby="{{ app.app_label }}-{{ model_name }}"
34
+ title="{% translate 'View' %}">
35
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-eye"></use></svg>
36
+ <span class="visually-hidden">{% translate 'View' %}</span>
37
+ </a>
38
+ {% else %}
39
+ <a href="{{ model.admin_url }}" class="ba-nav-link changelink"
40
+ aria-describedby="{{ app.app_label }}-{{ model_name }}"
41
+ title="{% translate 'Change' %}">
42
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-edit"></use></svg>
43
+ <span class="visually-hidden">{% translate 'Change' %}</span>
44
+ </a>
45
+ {% endif %}
46
+ {% endif %}
47
+ </td>
48
+ {% endif %}
49
+ </tr>
50
+ {% endwith %}
51
+ {% endfor %}
52
+ </tbody>
53
+ </table>
54
+ </section>
55
+ {% endfor %}
56
+ </div>
57
+ {% else %}
58
+ <p class="ba-empty">{% translate 'You don’t have permission to view or edit anything.' %}</p>
59
+ {% endif %}
@@ -0,0 +1,11 @@
1
+ {% extends "admin/change_form.html" %}
2
+ {% load i18n static %}
3
+
4
+ {% block form_top %}
5
+ {% if not is_popup %}
6
+ <div class="alert theme-info ba-callout" role="status">
7
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-info"></use></svg>
8
+ <div>{% translate "After you’ve created a user, you’ll be able to edit more user options." %}</div>
9
+ </div>
10
+ {% endif %}
11
+ {% endblock %}
@@ -0,0 +1,105 @@
1
+ {% extends "admin/base_site.html" %}
2
+ {% load i18n static admin_urls admin_filters %}
3
+
4
+ {% block title %}{% if form.errors %}{% translate "Error:" %} {% endif %}{{ block.super }}{% endblock %}
5
+
6
+ {% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form ba-password-page{% endblock %}
7
+
8
+ {% if not is_popup %}
9
+ {% block breadcrumbs %}
10
+ <ol class="breadcrumb">
11
+ <li class="breadcrumb-item">
12
+ <a class="breadcrumb-link" href="{% url 'admin:index' %}">
13
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-home"></use></svg>
14
+ {% translate 'Home' %}
15
+ </a>
16
+ </li>
17
+ <li class="breadcrumb-divider" aria-hidden="true"></li>
18
+ <li class="breadcrumb-item">
19
+ <a class="breadcrumb-link" href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
20
+ </li>
21
+ <li class="breadcrumb-divider" aria-hidden="true"></li>
22
+ <li class="breadcrumb-item">
23
+ <a class="breadcrumb-link" href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>
24
+ </li>
25
+ <li class="breadcrumb-divider" aria-hidden="true"></li>
26
+ <li class="breadcrumb-item">
27
+ <a class="breadcrumb-link" href="{% url opts|admin_urlname:'change' original.pk|admin_urlquote %}">{{ original|to_object_display_value|truncatewords:"18" }}</a>
28
+ </li>
29
+ <li class="breadcrumb-divider" aria-hidden="true"></li>
30
+ <li class="breadcrumb-item">
31
+ <span class="breadcrumb-link active" aria-current="page">{% if form.user.has_usable_password %}{% translate 'Change password' %}{% else %}{% translate 'Set password' %}{% endif %}</span>
32
+ </li>
33
+ </ol>
34
+ {% endblock %}
35
+ {% endif %}
36
+
37
+ {% block content %}
38
+ <div id="content-main" class="ba-password">
39
+ <form{% if form_url %} action="{{ form_url }}"{% endif %} method="post" id="{{ opts.model_name }}_form">
40
+ {% csrf_token %}
41
+ {% block form_top %}{% endblock %}
42
+ <input type="text" name="username" value="{{ original.get_username }}" class="hidden">
43
+
44
+ {% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %}
45
+
46
+ <div class="card ba-password-card">
47
+ <div class="card-body">
48
+ {% if form.errors %}
49
+ <div class="alert theme-danger" role="alert">
50
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-alert"></use></svg>
51
+ <div>
52
+ {% blocktranslate count counter=form.errors.items|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktranslate %}
53
+ </div>
54
+ </div>
55
+ {% endif %}
56
+
57
+ <p>{% blocktranslate with username=original %}Enter a new password for the user <strong>{{ username }}</strong>.{% endblocktranslate %}</p>
58
+ {% if not form.user.has_usable_password %}
59
+ <p>{% blocktranslate %}This action will <strong>enable</strong> password-based authentication for this user.{% endblocktranslate %}</p>
60
+ {% endif %}
61
+
62
+ <fieldset class="ba-form-group ba-radio-group">
63
+ {{ form.usable_password.legend_tag }}
64
+ {% if form.usable_password.help_text %}
65
+ <div class="help"{% if form.usable_password.id_for_label %} id="{{ form.usable_password.id_for_label }}_helptext"{% endif %}>
66
+ <p>{{ form.usable_password.help_text|safe }}</p>
67
+ </div>
68
+ {% endif %}
69
+ {{ form.usable_password.errors }}
70
+ {{ form.usable_password }}
71
+ </fieldset>
72
+
73
+ <div class="ba-form-group">
74
+ {{ form.password1.label_tag }}
75
+ {% if form.password1.help_text %}
76
+ <div class="help"{% if form.password1.id_for_label %} id="{{ form.password1.id_for_label }}_helptext"{% endif %}>{{ form.password1.help_text|safe }}</div>
77
+ {% endif %}
78
+ {{ form.password1.errors }}
79
+ {{ form.password1 }}
80
+ </div>
81
+
82
+ <div class="ba-form-group">
83
+ {{ form.password2.label_tag }}
84
+ {% if form.password2.help_text %}
85
+ <div class="help"{% if form.password2.id_for_label %} id="{{ form.password2.id_for_label }}_helptext"{% endif %}>{{ form.password2.help_text|safe }}</div>
86
+ {% endif %}
87
+ {{ form.password2.errors }}
88
+ {{ form.password2 }}
89
+ </div>
90
+
91
+ <div class="submit-row ba-submit-row ba-submit-row-static">
92
+ <div class="ba-submit-actions">
93
+ {% if form.user.has_usable_password %}
94
+ <input type="submit" name="set-password" value="{% translate 'Change password' %}" class="btn btn-solid theme-primary default set-password">
95
+ <input type="submit" name="unset-password" value="{% translate 'Disable password-based authentication' %}" class="btn btn-outline theme-danger unset-password">
96
+ {% else %}
97
+ <input type="submit" name="set-password" value="{% translate 'Enable password-based authentication' %}" class="btn btn-solid theme-primary default set-password">
98
+ {% endif %}
99
+ </div>
100
+ </div>
101
+ </div>
102
+ </div>
103
+ </form>
104
+ </div>
105
+ {% endblock %}
@@ -0,0 +1,220 @@
1
+ {% load i18n static tz bootstrap6_admin %}<!DOCTYPE html>
2
+ {% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
3
+ <html lang="{{ LANGUAGE_CODE|default:'en-us' }}" dir="{{ LANGUAGE_BIDI|yesno:'rtl,ltr,auto' }}">
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>{% block title %}{% endblock %}</title>
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <meta name="color-scheme" content="light dark">
9
+ <meta name="theme-color" content="#172b45" media="(prefers-color-scheme: light)">
10
+ <meta name="theme-color" content="#0c1520" media="(prefers-color-scheme: dark)">
11
+ <script src="{% static 'django_bootstrap6_admin/js/theme.js' %}" {% csp_nonce_attr %}></script>
12
+ <link rel="stylesheet" href="{% static 'django_bootstrap6_admin/vendor/bootstrap/css/bootstrap.min.css' %}" {% csp_nonce_attr %}>
13
+ <link rel="stylesheet" href="{% static 'admin/css/widgets.css' %}" {% csp_nonce_attr %}>
14
+ <link rel="stylesheet" href="{% static 'admin/css/autocomplete.css' %}" {% csp_nonce_attr %}>
15
+ <link rel="stylesheet" href="{% static 'admin/css/vendor/select2/select2.min.css' %}" {% csp_nonce_attr %}>
16
+ <link rel="stylesheet" href="{% static 'admin/css/unusable_password_field.css' %}" {% csp_nonce_attr %}>
17
+ <link rel="stylesheet" href="{% static 'django_bootstrap6_admin/css/admin.css' %}" {% csp_nonce_attr %}>
18
+ {% block stylesheet %}{% endblock %}
19
+ {% block dark-mode-vars %}{% endblock %}
20
+ {% block extrastyle %}{% endblock %}
21
+ {% block extrahead %}{% endblock %}
22
+ {% if LANGUAGE_BIDI %}{% block stylesheet_rtl %}{% endblock %}{% endif %}
23
+ <!-- Must load after widget media, which Django renders in extrahead. -->
24
+ <link rel="stylesheet" href="{% static 'django_bootstrap6_admin/css/widgets-overrides.css' %}" {% csp_nonce_attr %}>
25
+ {% block responsive %}{% endblock %}
26
+ {% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE">{% endblock %}
27
+ </head>
28
+
29
+ <body class="{% if is_popup %}popup {% endif %}ba-body {% block bodyclass %}{% endblock %}"
30
+ data-admin-utc-offset="{% now 'Z' %}"
31
+ data-admin-server-timezone="{% get_current_timezone as time_zone %}{{ time_zone }}">
32
+ <a href="#content-start" class="skip-to-content-link">{% translate 'Skip to main content' %}</a>
33
+
34
+ <div id="container" class="ba-app">
35
+ {% if not is_popup %}
36
+ {% block header %}
37
+ <header id="header" class="ba-topbar">
38
+ <div class="ba-topbar-inner">
39
+ <button type="button" class="btn btn-icon ba-sidebar-toggle" id="ba-sidebar-toggle"
40
+ aria-controls="nav-sidebar" aria-expanded="false"
41
+ title="{% translate 'Toggle navigation' %}">
42
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-menu"></use></svg>
43
+ <span class="visually-hidden">{% translate 'Toggle navigation' %}</span>
44
+ </button>
45
+
46
+ <div id="branding" class="ba-branding">
47
+ {% block branding %}{% endblock %}
48
+ </div>
49
+
50
+ {% block usertools %}
51
+ {% if has_permission %}
52
+ <div id="user-tools" class="ba-user-tools">
53
+ {% include "admin/color_theme_toggle.html" %}
54
+ {% firstof user.get_short_name user.get_username as user_name %}
55
+ <div class="ba-user-menu-wrap">
56
+ <button type="button" class="btn btn-outline theme-secondary ba-user-menu-button"
57
+ data-bs-toggle="menu" data-bs-target="#ba-user-menu"
58
+ aria-expanded="false" aria-haspopup="true">
59
+ <span class="visually-hidden">{% translate 'User menu' %}</span>
60
+ <span class="ba-user-avatar" aria-hidden="true">{{ user_name|first|upper }}</span>
61
+ <span class="ba-user-name">{% firstof user.get_short_name user.get_username %}</span>
62
+ <svg class="ba-icon ba-chevron" aria-hidden="true"><use href="#ba-chevron-down"></use></svg>
63
+ </button>
64
+ <div class="menu ba-user-menu" id="ba-user-menu">
65
+ {% block welcome-msg %}
66
+ <div class="menu-header">
67
+ {% translate 'Welcome,' %} <strong>{% firstof user.get_short_name user.get_username %}</strong>.
68
+ </div>
69
+ {% endblock %}
70
+ {% block userlinks %}
71
+ {% if site_url %}
72
+ <a class="menu-item" href="{{ site_url }}">
73
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-external"></use></svg>
74
+ {% translate 'View site' %}
75
+ </a>
76
+ {% endif %}
77
+ {% if user.is_active and user.is_staff %}
78
+ {% url 'django-admindocs-docroot' as docsroot %}
79
+ {% if docsroot %}
80
+ <a class="menu-item" href="{{ docsroot }}">
81
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-document"></use></svg>
82
+ {% translate 'Documentation' %}
83
+ </a>
84
+ {% endif %}
85
+ {% endif %}
86
+ {% if user.has_usable_password %}
87
+ <a class="menu-item" href="{% url 'admin:password_change' %}">
88
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-key"></use></svg>
89
+ {% translate 'Change password' %}
90
+ </a>
91
+ {% endif %}
92
+ <div class="menu-divider"></div>
93
+ <form id="logout-form" method="post" action="{% url 'admin:logout' %}">
94
+ {% csrf_token %}
95
+ <button type="submit" class="menu-item">
96
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-logout"></use></svg>
97
+ {% translate 'Log out' %}
98
+ </button>
99
+ </form>
100
+ {% endblock %}
101
+ </div>
102
+ </div>
103
+ </div>
104
+ {% endif %}
105
+ {% endblock %}
106
+ {% block nav-global %}{% endblock %}
107
+ </div>
108
+ </header>
109
+ {% endblock %}
110
+
111
+ {% block nav-breadcrumbs %}
112
+ <nav class="ba-breadcrumb-nav" aria-label="{% translate 'Breadcrumbs' %}">
113
+ {% block breadcrumbs %}
114
+ <ol class="breadcrumb">
115
+ <li class="breadcrumb-item">
116
+ <a class="breadcrumb-link" href="{% url 'admin:index' %}">
117
+ <svg class="ba-icon" aria-hidden="true"><use href="#ba-home"></use></svg>
118
+ {% translate 'Home' %}
119
+ </a>
120
+ </li>
121
+ {% if title %}
122
+ <li class="breadcrumb-divider" aria-hidden="true"></li>
123
+ <li class="breadcrumb-item">
124
+ <span class="breadcrumb-link active" aria-current="page">{{ title }}</span>
125
+ </li>
126
+ {% endif %}
127
+ </ol>
128
+ {% endblock %}
129
+ </nav>
130
+ {% endblock %}
131
+ {% endif %}
132
+
133
+ <div class="main" id="main">
134
+ {% if not is_popup and is_nav_sidebar_enabled %}
135
+ {% block nav-sidebar %}
136
+ {% include "admin/nav_sidebar.html" %}
137
+ {% endblock %}
138
+ {% endif %}
139
+
140
+ <main id="content-start" class="content" tabindex="-1">
141
+ {% block messages %}
142
+ {% if messages %}
143
+ <div class="ba-messages" aria-live="polite" aria-atomic="true">
144
+ {% for message in messages %}
145
+ <div class="alert theme-{{ message.tags|message_theme }} ba-message"
146
+ role="{% if 'error' in message.tags or 'warning' in message.tags %}alert{% else %}status{% endif %}">
147
+ <svg class="ba-icon ba-message-icon" aria-hidden="true"><use href="#{{ message.tags|message_icon }}"></use></svg>
148
+ <div class="ba-message-body">{{ message|capfirst }}</div>
149
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{% translate 'Close' %}"></button>
150
+ </div>
151
+ {% endfor %}
152
+ </div>
153
+ {% endif %}
154
+ {% endblock messages %}
155
+
156
+ <div id="content" class="{% block coltype %}colM{% endblock %}">
157
+ <div class="titles-and-tools">
158
+ <div class="titles">
159
+ {% block pretitle %}{% endblock %}
160
+ {% block content_title %}{% if title %}<h1 class="ba-page-title">{{ title }}</h1>{% endif %}{% endblock %}
161
+ {% block content_subtitle %}{% if subtitle %}<p class="ba-page-subtitle">{{ subtitle }}</p>{% endif %}{% endblock %}
162
+ </div>
163
+ {% block object-tools %}{% endblock %}
164
+ </div>
165
+ {% block content %}{{ content }}{% endblock %}
166
+ {% block sidebar %}{% endblock %}
167
+ </div>
168
+ </main>
169
+ </div>
170
+
171
+ {% if not is_popup %}
172
+ <div id="ba-sidebar-backdrop" class="ba-sidebar-backdrop" hidden></div>
173
+ <footer id="footer" class="ba-footer">
174
+ {% block footer %}
175
+ <span>{% blocktranslate %}Powered by Django{% endblocktranslate %}</span>
176
+ {% endblock %}
177
+ </footer>
178
+ {% endif %}
179
+ </div>
180
+
181
+ <svg xmlns="http://www.w3.org/2000/svg" class="ba-svg-sprite" aria-hidden="true">
182
+ <symbol viewBox="0 0 24 24" id="icon-auto"><path d="M0 0h24v24H0z" fill="currentColor"/><path d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-2V4a8 8 0 1 0 0 16z"/></symbol>
183
+ <symbol viewBox="0 0 24 24" id="icon-moon"><path d="M0 0h24v24H0z" fill="currentColor"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol>
184
+ <symbol viewBox="0 0 24 24" id="icon-sun"><path d="M0 0h24v24H0z" fill="currentColor"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol>
185
+
186
+ <symbol viewBox="0 0 24 24" id="ba-menu"><path d="M3 5h18M3 12h18M3 19h18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
187
+ <symbol viewBox="0 0 24 24" id="ba-plus"><path d="M12 5v14M5 12h14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
188
+ <symbol viewBox="0 0 24 24" id="ba-search"><circle cx="11" cy="11" r="7" fill="none" stroke="currentColor" stroke-width="2"/><path d="m16.5 16.5 4 4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
189
+ <symbol viewBox="0 0 24 24" id="ba-filter"><path d="M3 5h18l-7 8v6l-4 2v-8L3 5z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/></symbol>
190
+ <symbol viewBox="0 0 24 24" id="ba-chevron-down"><path d="m6 9 6 6 6-6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
191
+ <symbol viewBox="0 0 24 24" id="ba-chevron-left"><path d="m15 18-6-6 6-6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
192
+ <symbol viewBox="0 0 24 24" id="ba-chevron-right"><path d="m9 18 6-6-6-6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
193
+ <symbol viewBox="0 0 24 24" id="ba-user"><circle cx="12" cy="8" r="4" fill="none" stroke="currentColor" stroke-width="2"/><path d="M4 21a8 8 0 0 1 16 0" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
194
+ <symbol viewBox="0 0 24 24" id="ba-logout"><path d="M10 5H5v14h5M14 8l4 4-4 4M8 12h10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
195
+ <symbol viewBox="0 0 24 24" id="ba-external"><path d="M14 4h6v6M20 4l-9 9M18 14v5H5V6h5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
196
+ <symbol viewBox="0 0 24 24" id="ba-history"><path d="M4 12a8 8 0 1 0 2.34-5.66M4 4v5h5M12 8v5l3 2" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
197
+ <symbol viewBox="0 0 24 24" id="ba-edit"><path d="M4 20h4l10-10-4-4L4 16v4zM13 7l4 4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
198
+ <symbol viewBox="0 0 24 24" id="ba-eye"><path d="M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6S2 12 2 12z" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="12" cy="12" r="2.5" fill="none" stroke="currentColor" stroke-width="2"/></symbol>
199
+ <symbol viewBox="0 0 24 24" id="ba-trash"><path d="M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13M10 11v5M14 11v5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
200
+ <symbol viewBox="0 0 24 24" id="ba-check"><path d="m5 12 4 4 10-10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
201
+ <symbol viewBox="0 0 24 24" id="ba-x"><path d="m6 6 12 12M18 6 6 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
202
+ <symbol viewBox="0 0 24 24" id="ba-home"><path d="m3 11 9-8 9 8M5 10v10h14V10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
203
+ <symbol viewBox="0 0 24 24" id="ba-grid"><path d="M4 4h6v6H4zM14 4h6v6h-6zM4 14h6v6H4zM14 14h6v6h-6z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/></symbol>
204
+ <symbol viewBox="0 0 24 24" id="ba-key"><circle cx="8" cy="15" r="4" fill="none" stroke="currentColor" stroke-width="2"/><path d="m11 12 9-9M17 6l3 3M14 9l3 3" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
205
+ <symbol viewBox="0 0 24 24" id="ba-lock"><rect x="5" y="10" width="14" height="11" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><path d="M8 10V7a4 4 0 0 1 8 0v3M12 14v3" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
206
+ <symbol viewBox="0 0 24 24" id="ba-document"><path d="M6 3h8l4 4v14H6zM14 3v4h4M9 12h6M9 16h6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
207
+ <symbol viewBox="0 0 24 24" id="ba-alert"><path d="M12 3 2 21h20L12 3zM12 9v5M12 18h.01" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
208
+ <symbol viewBox="0 0 24 24" id="ba-info"><circle cx="12" cy="12" r="9" fill="none" stroke="currentColor" stroke-width="2"/><path d="M12 11v5M12 8h.01" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
209
+ <symbol viewBox="0 0 24 24" id="ba-database"><ellipse cx="12" cy="5" rx="8" ry="3" fill="none" stroke="currentColor" stroke-width="2"/><path d="M4 5v14c0 1.7 3.6 3 8 3s8-1.3 8-3V5M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3" fill="none" stroke="currentColor" stroke-width="2"/></symbol>
210
+ <symbol viewBox="0 0 24 24" id="ba-clock"><circle cx="12" cy="12" r="9" fill="none" stroke="currentColor" stroke-width="2"/><path d="M12 7v5l3 2" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
211
+ </svg>
212
+
213
+ <script type="module" src="{% static 'django_bootstrap6_admin/vendor/bootstrap/js/bootstrap.bundle.min.js' %}" {% csp_nonce_attr %}></script>
214
+ {% if not is_popup and is_nav_sidebar_enabled %}
215
+ <script src="{% static 'admin/js/nav_sidebar.js' %}" defer {% csp_nonce_attr %}></script>
216
+ {% endif %}
217
+ <script src="{% static 'django_bootstrap6_admin/js/admin.js' %}" defer {% csp_nonce_attr %}></script>
218
+ {% block extrabody %}{% endblock extrabody %}
219
+ </body>
220
+ </html>
@@ -0,0 +1,19 @@
1
+ {% extends "admin/base.html" %}
2
+ {% load i18n %}
3
+
4
+ {% block title %}{% if subtitle %}{{ subtitle }} | {% endif %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
5
+
6
+ {% block branding %}
7
+ <a class="ba-brand" href="{% url 'admin:index' %}">
8
+ <span class="ba-brand-mark" aria-hidden="true">{{ site_header|default:_('Django administration')|first|upper }}</span>
9
+ <span class="ba-brand-text">
10
+ <span class="ba-brand-title">{{ site_header|default:_('Django administration') }}</span>
11
+ <span class="ba-brand-subtitle">{{ site_title|default:_('Django site admin') }}</span>
12
+ </span>
13
+ </a>
14
+ {% if user.is_anonymous %}
15
+ {% include "admin/color_theme_toggle.html" %}
16
+ {% endif %}
17
+ {% endblock %}
18
+
19
+ {% block nav-global %}{% endblock %}