django-spire 0.16.4__py3-none-any.whl → 0.16.5__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_spire/auth/mfa/views/page_views.py +1 -2
- django_spire/auth/templates/django_spire/auth/page/password_change_done_page.html +2 -2
- django_spire/auth/templates/django_spire/auth/page/password_change_page.html +19 -3
- django_spire/auth/views/admin_views.py +16 -0
- django_spire/consts.py +1 -1
- django_spire/core/redirect/generic_redirect.py +1 -1
- django_spire/core/static/django_spire/js/theme.js +2 -2
- django_spire/core/templates/django_spire/navigation/top_navigation.html +39 -35
- django_spire/core/templates/django_spire/page/full_page.html +2 -2
- django_spire/core/templatetags/json.py +7 -4
- django_spire/theme/tests/test_views/__init__.py +0 -0
- django_spire/theme/tests/{test_views.py → test_views/test_json_views.py} +14 -14
- django_spire/theme/urls/__init__.py +1 -1
- django_spire/theme/urls/json_urls.py +10 -0
- {django_spire-0.16.4.dist-info → django_spire-0.16.5.dist-info}/METADATA +1 -1
- {django_spire-0.16.4.dist-info → django_spire-0.16.5.dist-info}/RECORD +20 -19
- django_spire/theme/urls/ajax_urls.py +0 -10
- /django_spire/theme/views/{ajax_views.py → json_views.py} +0 -0
- {django_spire-0.16.4.dist-info → django_spire-0.16.5.dist-info}/WHEEL +0 -0
- {django_spire-0.16.4.dist-info → django_spire-0.16.5.dist-info}/licenses/LICENSE.md +0 -0
- {django_spire-0.16.4.dist-info → django_spire-0.16.5.dist-info}/top_level.txt +0 -0
|
@@ -18,7 +18,7 @@ def mfa_form_view(request):
|
|
|
18
18
|
if form.is_valid():
|
|
19
19
|
mfa_code.set_expired()
|
|
20
20
|
profile.set_mfa_grace_period()
|
|
21
|
-
return HttpResponseRedirect(reverse('home:home'))
|
|
21
|
+
return HttpResponseRedirect(reverse('home:page:home'))
|
|
22
22
|
|
|
23
23
|
if 'mfa_code' in form.errors:
|
|
24
24
|
messages.error(request, form.errors['mfa_code'][0])
|
|
@@ -33,4 +33,3 @@ def mfa_form_view(request):
|
|
|
33
33
|
context=context_data,
|
|
34
34
|
template='django_spire/auth/mfa/mfa_form.html'
|
|
35
35
|
)
|
|
36
|
-
|
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
{% block authentication_page_content %}
|
|
8
8
|
<h3>Password Reset</h3>
|
|
9
9
|
<div class="py-2">You have successfully changed your password!</div>
|
|
10
|
-
<a class="w-100 btn btn-app-primary bg-app-primary mt-2" href="{% url 'home:home' %}">Home</a>
|
|
11
|
-
{% endblock %}
|
|
10
|
+
<a class="w-100 btn btn-app-primary bg-app-primary mt-2" href="{% url 'home:page:home' %}">Home</a>
|
|
11
|
+
{% endblock %}
|
|
@@ -4,9 +4,16 @@
|
|
|
4
4
|
<h5 class="mb-2">Change Password</h5>
|
|
5
5
|
<div>
|
|
6
6
|
<form x-data="{
|
|
7
|
+
passwords_match: false,
|
|
7
8
|
old_password: new GlueCharField('old_password', {required: true}),
|
|
8
|
-
new_password1: new GlueCharField('new_password1', {required: true}),
|
|
9
|
-
new_password2: new GlueCharField('new_password2', {required: true})
|
|
9
|
+
new_password1: new GlueCharField('new_password1', {required: true, label: 'New Password'}),
|
|
10
|
+
new_password2: new GlueCharField('new_password2', {required: true, label: 'Confirm New Password'}),
|
|
11
|
+
|
|
12
|
+
init() {
|
|
13
|
+
$watch(() => [this.new_password1, this.new_password2], () => {
|
|
14
|
+
this.passwords_match = this.new_password1.value === this.new_password2.value
|
|
15
|
+
})
|
|
16
|
+
}
|
|
10
17
|
}" method="post" class="text-app-secondary">
|
|
11
18
|
{% csrf_token %}
|
|
12
19
|
<div class="row">
|
|
@@ -26,7 +33,16 @@
|
|
|
26
33
|
</div>
|
|
27
34
|
<div class="row mt-2">
|
|
28
35
|
<div class="col">
|
|
29
|
-
<
|
|
36
|
+
<span x-show="!passwords_match" class="text-app-danger">
|
|
37
|
+
Password confirmation does not match new password.
|
|
38
|
+
</span>
|
|
39
|
+
<button
|
|
40
|
+
type="submit"
|
|
41
|
+
class="w-100 btn btn-app-primary bg-app-primary mt-2"
|
|
42
|
+
:disabled="!passwords_match"
|
|
43
|
+
>
|
|
44
|
+
Submit
|
|
45
|
+
</button>
|
|
30
46
|
</div>
|
|
31
47
|
</div>
|
|
32
48
|
</form>
|
|
@@ -18,6 +18,10 @@ class PasswordChangeView(auth_views.PasswordChangeView):
|
|
|
18
18
|
template_name = 'django_spire/auth/page/password_change_page.html'
|
|
19
19
|
success_url = reverse_lazy('django_spire:auth:admin:password_change_done')
|
|
20
20
|
|
|
21
|
+
def form_invalid(self, form):
|
|
22
|
+
show_form_errors(self.request, form)
|
|
23
|
+
return super().form_invalid(form)
|
|
24
|
+
|
|
21
25
|
|
|
22
26
|
class PasswordChangeDone(auth_views.PasswordChangeDoneView):
|
|
23
27
|
template_name = 'django_spire/auth/page/password_change_done_page.html'
|
|
@@ -28,6 +32,10 @@ class PasswordResetView(auth_views.PasswordResetView):
|
|
|
28
32
|
success_url = reverse_lazy('django_spire:auth:admin:password_reset_done')
|
|
29
33
|
template_name = 'django_spire/auth/page/password_reset_page.html'
|
|
30
34
|
|
|
35
|
+
def form_invalid(self, form):
|
|
36
|
+
show_form_errors(self.request, form)
|
|
37
|
+
return super().form_invalid(form)
|
|
38
|
+
|
|
31
39
|
|
|
32
40
|
class PasswordResetComplete(auth_views.PasswordResetCompleteView):
|
|
33
41
|
template_name = 'django_spire/auth/page/password_reset_complete_page.html'
|
|
@@ -45,6 +53,10 @@ class PasswordResetDone(auth_views.PasswordResetDoneView):
|
|
|
45
53
|
class PasswordResetKeyForm(auth_views.PasswordResetView):
|
|
46
54
|
template_name = 'django_spire/auth/page/password_reset_key_form_page.html'
|
|
47
55
|
|
|
56
|
+
def form_invalid(self, form):
|
|
57
|
+
show_form_errors(self.request, form)
|
|
58
|
+
return super().form_invalid(form)
|
|
59
|
+
|
|
48
60
|
|
|
49
61
|
class PasswordResetKeyFormDone(auth_views.PasswordResetView):
|
|
50
62
|
template_name = 'django_spire/auth/page/password_reset_key_done_page.html'
|
|
@@ -52,3 +64,7 @@ class PasswordResetKeyFormDone(auth_views.PasswordResetView):
|
|
|
52
64
|
|
|
53
65
|
class PasswordSetForm(auth_views.PasswordResetView):
|
|
54
66
|
template_name = 'django_spire/auth/page/password_set_form_page.html'
|
|
67
|
+
|
|
68
|
+
def form_invalid(self, form):
|
|
69
|
+
show_form_errors(self.request, form)
|
|
70
|
+
return super().form_invalid(form)
|
django_spire/consts.py
CHANGED
|
@@ -14,7 +14,7 @@ document.addEventListener('alpine:init', () => {
|
|
|
14
14
|
try {
|
|
15
15
|
let response = await ajax_request(
|
|
16
16
|
'GET',
|
|
17
|
-
'/theme/
|
|
17
|
+
'/django_spire/theme/json/get_config/'
|
|
18
18
|
);
|
|
19
19
|
|
|
20
20
|
if (response && response.data) {
|
|
@@ -142,7 +142,7 @@ document.addEventListener('alpine:init', () => {
|
|
|
142
142
|
async persist_to_server(value) {
|
|
143
143
|
await ajax_request(
|
|
144
144
|
'POST',
|
|
145
|
-
'/theme/
|
|
145
|
+
'/django_spire/theme/json/set_theme/',
|
|
146
146
|
{ theme: value }
|
|
147
147
|
);
|
|
148
148
|
},
|
|
@@ -23,45 +23,49 @@
|
|
|
23
23
|
</div>
|
|
24
24
|
|
|
25
25
|
<div class="col-auto d-flex">
|
|
26
|
-
|
|
27
|
-
{%
|
|
28
|
-
|
|
26
|
+
{% block top_navigation_icons %}
|
|
27
|
+
{% block theme_selector %}
|
|
28
|
+
<div>
|
|
29
|
+
{% include 'django_spire/theme/element/theme_selector.html' with icon_size='fs-2' %}
|
|
30
|
+
</div>
|
|
31
|
+
{% endblock %}
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
<div class="dropdown">
|
|
34
|
+
<i
|
|
35
|
+
class="bi bi-person-circle fs-2 mx-2 cursor-pointer"
|
|
36
|
+
id="dropdownMenuButton1"
|
|
37
|
+
data-bs-toggle="dropdown"
|
|
38
|
+
aria-expanded="false"
|
|
39
|
+
>
|
|
40
|
+
</i>
|
|
41
|
+
<ul class="dropdown-menu py-0 bg-app-layer-one" aria-labelledby="dropdownMenuButton1">
|
|
42
|
+
{% if request.user.is_superuser %}
|
|
43
|
+
<li class="py-0 ">
|
|
44
|
+
<a class="dropdown-item fs--1 bg-app-layer-three-hover"
|
|
45
|
+
href="{% url 'admin:index' %}" target="_blank">
|
|
46
|
+
Admin Panel
|
|
47
|
+
</a>
|
|
48
|
+
</li>
|
|
49
|
+
{% endif %}
|
|
50
|
+
<li class="py-0">
|
|
51
|
+
<a href="{% url 'django_spire:auth:admin:password_change' %}"
|
|
52
|
+
class="dropdown-item fs--1 bg-app-layer-three-hover">
|
|
53
|
+
Change Password
|
|
44
54
|
</a>
|
|
45
55
|
</li>
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
</
|
|
52
|
-
</
|
|
53
|
-
|
|
54
|
-
<a href="{% url 'django_spire:auth:redirect:logout' %}"
|
|
55
|
-
class="dropdown-item fs--1 bg-app-layer-three-hover">
|
|
56
|
-
Logout
|
|
57
|
-
</a>
|
|
58
|
-
</li>
|
|
59
|
-
</ul>
|
|
60
|
-
</div>
|
|
56
|
+
<li class="py-0">
|
|
57
|
+
<a href="{% url 'django_spire:auth:redirect:logout' %}"
|
|
58
|
+
class="dropdown-item fs--1 bg-app-layer-three-hover">
|
|
59
|
+
Logout
|
|
60
|
+
</a>
|
|
61
|
+
</li>
|
|
62
|
+
</ul>
|
|
63
|
+
</div>
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
<div class="col-auto d-lg-none">
|
|
66
|
+
{% include 'django_spire/navigation/mobile_navigation.html' %}
|
|
67
|
+
</div>
|
|
68
|
+
{% endblock %}
|
|
65
69
|
</div>
|
|
66
70
|
{% endblock %}
|
|
67
71
|
</div>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{% endblock %}
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
|
-
<div class="
|
|
11
|
+
<div class="d-flex flex-column container-fluid">
|
|
12
12
|
<div class="row sticky-top">
|
|
13
13
|
<div class="col-12 sticky-top">
|
|
14
14
|
{% block full_page_top_navigation %}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</div>
|
|
18
18
|
</div>
|
|
19
19
|
|
|
20
|
-
<div class="row">
|
|
20
|
+
<div class="row flex-grow-1">
|
|
21
21
|
<div class="col-12">
|
|
22
22
|
{% block full_page_content %}
|
|
23
23
|
{% endblock %}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
from typing import Sequence
|
|
2
|
+
|
|
1
3
|
from django import template
|
|
2
4
|
import json
|
|
3
5
|
|
|
4
6
|
register = template.Library()
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
|
|
9
|
+
@register.filter(name='to_json')
|
|
10
|
+
def to_json(value: dict | Sequence) -> str:
|
|
8
11
|
try:
|
|
9
|
-
return json.
|
|
12
|
+
return json.dumps(value)
|
|
10
13
|
except (TypeError, ValueError) as e:
|
|
11
|
-
return
|
|
14
|
+
return ''
|
|
File without changes
|
|
@@ -11,7 +11,7 @@ from django.http import JsonResponse
|
|
|
11
11
|
from django_spire.core.tests.test_cases import BaseTestCase
|
|
12
12
|
from django_spire.theme.enums import ThemeFamily
|
|
13
13
|
from django_spire.theme.utils import get_theme_cookie_name
|
|
14
|
-
from django_spire.theme.views import
|
|
14
|
+
from django_spire.theme.views import json_views
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class ThemeViewTests(TestCase):
|
|
@@ -19,8 +19,8 @@ class ThemeViewTests(TestCase):
|
|
|
19
19
|
self.factory = RequestFactory()
|
|
20
20
|
|
|
21
21
|
def test_get_config_success(self) -> None:
|
|
22
|
-
request = self.factory.get('/theme/
|
|
23
|
-
response =
|
|
22
|
+
request = self.factory.get('/django_spire/theme/json/get_config/')
|
|
23
|
+
response = json_views.get_config(request)
|
|
24
24
|
|
|
25
25
|
self.assertIsInstance(response, JsonResponse)
|
|
26
26
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
@@ -42,18 +42,18 @@ class ThemeViewTests(TestCase):
|
|
|
42
42
|
self.assertEqual(set(family_config['modes']), {'dark', 'light'})
|
|
43
43
|
|
|
44
44
|
def test_get_config_cache_header(self) -> None:
|
|
45
|
-
_ = self.factory.get('/theme/
|
|
45
|
+
_ = self.factory.get('/django_spire/theme/json/get_config/')
|
|
46
46
|
|
|
47
|
-
with patch('django_spire.theme.views.
|
|
48
|
-
self.assertTrue(hasattr(
|
|
47
|
+
with patch('django_spire.theme.views.json_views.cache_page') as _:
|
|
48
|
+
self.assertTrue(hasattr(json_views.get_config, '__wrapped__'))
|
|
49
49
|
|
|
50
50
|
def test_set_theme_success(self) -> None:
|
|
51
51
|
request = self.factory.post(
|
|
52
|
-
'/theme/
|
|
52
|
+
'/django_spire/theme/json/set_theme/',
|
|
53
53
|
data=json.dumps({'theme': 'dracula-dark'}),
|
|
54
54
|
content_type='application/json'
|
|
55
55
|
)
|
|
56
|
-
response =
|
|
56
|
+
response = json_views.set_theme(request)
|
|
57
57
|
|
|
58
58
|
self.assertIsInstance(response, JsonResponse)
|
|
59
59
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
@@ -72,11 +72,11 @@ class ThemeViewTests(TestCase):
|
|
|
72
72
|
|
|
73
73
|
def test_set_theme_missing_theme(self) -> None:
|
|
74
74
|
request = self.factory.post(
|
|
75
|
-
'/theme/
|
|
75
|
+
'/django_spire/theme/json/set_theme/',
|
|
76
76
|
data=json.dumps({}),
|
|
77
77
|
content_type='application/json'
|
|
78
78
|
)
|
|
79
|
-
response =
|
|
79
|
+
response = json_views.set_theme(request)
|
|
80
80
|
|
|
81
81
|
self.assertEqual(response.status_code, HTTPStatus.BAD_REQUEST)
|
|
82
82
|
data = json.loads(response.content)
|
|
@@ -86,11 +86,11 @@ class ThemeViewTests(TestCase):
|
|
|
86
86
|
|
|
87
87
|
def test_set_theme_invalid_theme(self) -> None:
|
|
88
88
|
request = self.factory.post(
|
|
89
|
-
'/theme/
|
|
89
|
+
'/django_spire/theme/json/set_theme/',
|
|
90
90
|
data=json.dumps({'theme': 'invalid-theme'}),
|
|
91
91
|
content_type='application/json'
|
|
92
92
|
)
|
|
93
|
-
response =
|
|
93
|
+
response = json_views.set_theme(request)
|
|
94
94
|
|
|
95
95
|
self.assertEqual(response.status_code, HTTPStatus.BAD_REQUEST)
|
|
96
96
|
data = json.loads(response.content)
|
|
@@ -102,7 +102,7 @@ class ThemeViewTests(TestCase):
|
|
|
102
102
|
class ThemeViewIntegrationTests(BaseTestCase):
|
|
103
103
|
def test_set_theme_with_authenticated_client(self) -> None:
|
|
104
104
|
response = self.client.post(
|
|
105
|
-
'/theme/
|
|
105
|
+
'/django_spire/theme/json/set_theme/',
|
|
106
106
|
data=json.dumps({'theme': 'dracula-dark'}),
|
|
107
107
|
content_type='application/json'
|
|
108
108
|
)
|
|
@@ -112,7 +112,7 @@ class ThemeViewIntegrationTests(BaseTestCase):
|
|
|
112
112
|
self.assertTrue(data['success'])
|
|
113
113
|
|
|
114
114
|
def test_get_config_with_authenticated_client(self) -> None:
|
|
115
|
-
response = self.client.get('/theme/
|
|
115
|
+
response = self.client.get('/django_spire/theme/json/get_config/')
|
|
116
116
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
117
117
|
|
|
118
118
|
data = json.loads(response.content)
|
|
@@ -4,6 +4,6 @@ from django.urls.conf import path, include
|
|
|
4
4
|
app_name = 'theme'
|
|
5
5
|
|
|
6
6
|
urlpatterns = [
|
|
7
|
-
path('
|
|
7
|
+
path('json/', include('django_spire.theme.urls.json_urls', namespace='json')),
|
|
8
8
|
path('page/', include('django_spire.theme.urls.page_urls', namespace='page')),
|
|
9
9
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-spire
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.5
|
|
4
4
|
Summary: A project for Django Spire
|
|
5
5
|
Author-email: Brayden Carlson <braydenc@stratusadv.com>, Nathan Johnson <nathanj@stratusadv.com>
|
|
6
6
|
License: Copyright (c) 2024 Stratus Advanced Technologies and Contributors.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
django_spire/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
django_spire/conf.py,sha256=EYC1hXqYqheYrb_b6Q93LrSgNl91JV633E4N5j-KGTo,1012
|
|
3
|
-
django_spire/consts.py,sha256=
|
|
3
|
+
django_spire/consts.py,sha256=MWoKzsjUKe3fISnGCP3AUF30O-pQqwVf496yUBNaewM,390
|
|
4
4
|
django_spire/exceptions.py,sha256=L5ndRO5ftMmh0pHkO2z_NG3LSGZviJ-dDHNT73SzTNw,48
|
|
5
5
|
django_spire/settings.py,sha256=NBDa_kZozESTz2UfHgy2PzhBqj54eIrjZsUsWqDgI0g,735
|
|
6
6
|
django_spire/urls.py,sha256=mKeZszb5U4iIGqddMb5Tt5fRC72U2wABEOi6mvOfEBU,656
|
|
@@ -173,7 +173,7 @@ django_spire/auth/mfa/urls/__init__.py,sha256=2o1bgfG1DH8Er4tK1Bwyb4GiNdxWkK982a
|
|
|
173
173
|
django_spire/auth/mfa/urls/page_urls.py,sha256=1lQ_PEztg7d2Qx5-jjQQhDEOKUeODLyC8rKE40g5keA,196
|
|
174
174
|
django_spire/auth/mfa/urls/redirect_urls.py,sha256=S6XgKg7cuybn9V2nWGukSaoV_L6qZzLdvoabkMZT6WM,241
|
|
175
175
|
django_spire/auth/mfa/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
176
|
-
django_spire/auth/mfa/views/page_views.py,sha256=
|
|
176
|
+
django_spire/auth/mfa/views/page_views.py,sha256=EF9s6tqVqG2OTr9PZq5GJkHWGSkgmGPktPtnMFqpi8E,1148
|
|
177
177
|
django_spire/auth/mfa/views/redirect_views.py,sha256=Wl3m7dyboB5nMk8LmFT_IbxqjxrXCIvPkKWSLK7I77Y,641
|
|
178
178
|
django_spire/auth/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
179
179
|
django_spire/auth/permissions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -189,8 +189,8 @@ django_spire/auth/templates/django_spire/auth/mfa/mfa_form.html,sha256=iFsNsQAiT
|
|
|
189
189
|
django_spire/auth/templates/django_spire/auth/page/auth_page.html,sha256=e6XgU1LUAasVWdB7srFM2zitjtnf8FpfwHhfB6rqDoU,907
|
|
190
190
|
django_spire/auth/templates/django_spire/auth/page/login_page.html,sha256=EXCoVyvc8YPhFPomPL_ff8y7LNsv1dpgxqJex3U_d_Q,1167
|
|
191
191
|
django_spire/auth/templates/django_spire/auth/page/logout_page.html,sha256=WelMT2xcuNHXjbj4XkpAUUXzJirXW2zvO7ejOJD3vO4,788
|
|
192
|
-
django_spire/auth/templates/django_spire/auth/page/password_change_done_page.html,sha256=
|
|
193
|
-
django_spire/auth/templates/django_spire/auth/page/password_change_page.html,sha256=
|
|
192
|
+
django_spire/auth/templates/django_spire/auth/page/password_change_done_page.html,sha256=COGQ59FcB3SC5KkmiBXP1zaivAHximi7nTZS888EM4o,401
|
|
193
|
+
django_spire/auth/templates/django_spire/auth/page/password_change_page.html,sha256=5FFMGD-n61nmRN8XkeFccNuCdWM2kKtMJJQWkGvAcso,2088
|
|
194
194
|
django_spire/auth/templates/django_spire/auth/page/password_reset_complete_page.html,sha256=yaEUxQSO_IGtEIofY2g-jaEhJ6LCfBlW_zWSyh6DHh4,378
|
|
195
195
|
django_spire/auth/templates/django_spire/auth/page/password_reset_confirmation_page.html,sha256=G8Jc8qp7FCmAvKTaq1PQW3SKt4OhMLH6D2hOHw8dmrk,1076
|
|
196
196
|
django_spire/auth/templates/django_spire/auth/page/password_reset_done_page.html,sha256=B5F5E-auOls7OKio6WfW55KXa0am-MBrtcwvX1bZtTM,325
|
|
@@ -245,7 +245,7 @@ django_spire/auth/user/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
245
245
|
django_spire/auth/user/views/form_views.py,sha256=pq6DusBfi5ODwfEzoVMs2fSWMK1SUIjf9rAdOr_dxC0,4250
|
|
246
246
|
django_spire/auth/user/views/page_views.py,sha256=Ve_i5gpYnGDzoUqeCmaMMZbPDgNqJX3pRVxWvjwyJ08,1779
|
|
247
247
|
django_spire/auth/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
248
|
-
django_spire/auth/views/admin_views.py,sha256=
|
|
248
|
+
django_spire/auth/views/admin_views.py,sha256=CI-am-SMGsQo0hpNTWFG-4XcSBzdBATqVEsZL3NnIpg,2455
|
|
249
249
|
django_spire/auth/views/redirect_views.py,sha256=xaCUeUNzN6eSqOjaxPBV6IumdbVus2Mwl22b_C078UQ,906
|
|
250
250
|
django_spire/comment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
251
251
|
django_spire/comment/admin.py,sha256=U8ZapPJ6aniL0ENZ1VwpSfmzaC-9KW0ccU5z3VnjhAs,1446
|
|
@@ -469,7 +469,7 @@ django_spire/core/middleware/__init__.py,sha256=peocpyT_vXsjK3MXzpWIbsNVnHBbuyyb
|
|
|
469
469
|
django_spire/core/middleware/maintenance.py,sha256=jJtmz69UXJBBgPkq5SNspWuER1bGfAjSnsVipYS4TF0,921
|
|
470
470
|
django_spire/core/middleware/profiling.py,sha256=oW8S5oZQYq96a28cmVPLwyhz3xBAZHkTK7NMxLUDXCw,4807
|
|
471
471
|
django_spire/core/redirect/__init__.py,sha256=ubAsz_h3ufwgNNkdtqiJQDgXc6DodE2LTUyBwi9dgkE,71
|
|
472
|
-
django_spire/core/redirect/generic_redirect.py,sha256=
|
|
472
|
+
django_spire/core/redirect/generic_redirect.py,sha256=bfpA2GSRbkf5Y_zqTiTGzakQauLumm3JbaYMzmsDhjA,1245
|
|
473
473
|
django_spire/core/redirect/safe_redirect.py,sha256=deGLqiR1wWwqlJ8BYp76qDUDHnfRrxL-1Vns3nozSG0,2901
|
|
474
474
|
django_spire/core/static/django_spire/css/app-background.css,sha256=xxy0pvHJrGqrBHu_ERg2wfEFOlnRm-IeCsGzxFXO354,5664
|
|
475
475
|
django_spire/core/static/django_spire/css/app-border.css,sha256=z_DT3sB5tNQFu4Y7gSqYFn_bpOmEgEgJCrNmAnmSGDI,3439
|
|
@@ -531,7 +531,7 @@ django_spire/core/static/django_spire/js/cookie.js,sha256=N9ifDzqmJHRDwYI2Lqia1y
|
|
|
531
531
|
django_spire/core/static/django_spire/js/dropdown.js,sha256=cSvzdsct8-45gIWZlO5MzmbW2vDuxJVttLZjOBl14GE,934
|
|
532
532
|
django_spire/core/static/django_spire/js/modal.js,sha256=ay0Sovi0HhedEz3dRhB_INhkh1PEJ7zPc5POYo_Wwg0,370
|
|
533
533
|
django_spire/core/static/django_spire/js/session_controller.js,sha256=aMom087y00MUhdxrZlrg89f88mBC7cWEhGWopeb5hlQ,232
|
|
534
|
-
django_spire/core/static/django_spire/js/theme.js,sha256=
|
|
534
|
+
django_spire/core/static/django_spire/js/theme.js,sha256=JyKPDkblDSay0DNzpPJfvlSptVORFhu3FWF_s84qYaI,5830
|
|
535
535
|
django_spire/core/static/django_spire/js/ui.js,sha256=qxb32pBZz7e5iLuOCbNs80VsqQJKa6cj5aBrGTvIrsY,389
|
|
536
536
|
django_spire/core/templates/django_spire/403.html,sha256=35OX-3z-Yi6Igx9DTAcxNwWiZ17wXdm4wYGML4U2pns,37
|
|
537
537
|
django_spire/core/templates/django_spire/404.html,sha256=91sTr518M2YxQ8X3GlzDsNP6IVo3MW07tbHdcLBL8Iw,235
|
|
@@ -613,7 +613,7 @@ django_spire/core/templates/django_spire/modal/element/model_close_element.html,
|
|
|
613
613
|
django_spire/core/templates/django_spire/navigation/mobile_navigation.html,sha256=btXoeLihu3jd_7XzKrZiwaBgffDiLoDorMSxhYrnhc4,997
|
|
614
614
|
django_spire/core/templates/django_spire/navigation/navigation_links.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
615
615
|
django_spire/core/templates/django_spire/navigation/side_navigation.html,sha256=bGAs_RbYc-fC77UKtleeMtQM0feYEi4r9j9gDFD_hhc,762
|
|
616
|
-
django_spire/core/templates/django_spire/navigation/top_navigation.html,sha256=
|
|
616
|
+
django_spire/core/templates/django_spire/navigation/top_navigation.html,sha256=3oNCt2do6ZkTcn_Qty85G6IsWtHu2G0GnAolNLsf7M4,2945
|
|
617
617
|
django_spire/core/templates/django_spire/navigation/accordion/nav_accordion.html,sha256=dOwp7Gu-VwC8BleBwvCpHtSbI1HsESpn7w-femjFkXY,1326
|
|
618
618
|
django_spire/core/templates/django_spire/navigation/accordion/settings_nav_accordion.html,sha256=5jy4VBU199bG_-WPmWVhe5bZYWsm03bzZC6XqGK2XFM,794
|
|
619
619
|
django_spire/core/templates/django_spire/navigation/elements/nav_link.html,sha256=5GK0KI3h72VAV0nyIWqfP55nlMJ8Xx5cgTKKWGkhUAk,153
|
|
@@ -625,7 +625,7 @@ django_spire/core/templates/django_spire/page/center_card_page.html,sha256=DHU9d
|
|
|
625
625
|
django_spire/core/templates/django_spire/page/delete_confirmation_form_page.html,sha256=kmAA2eeD-5s3oAdS-HdFwbqHnzPlqihqh5JwxMJIP_o,168
|
|
626
626
|
django_spire/core/templates/django_spire/page/delete_form_page.html,sha256=0ZYlWgl3eVq2OTbu_C0UiHVfSIbj2gg_iJ7xeafHVu4,240
|
|
627
627
|
django_spire/core/templates/django_spire/page/form_full_page.html,sha256=5yp3EfOC2LlcTc0PYQ5MLuQvuw1QFPsMtnPvRdP0A2g,299
|
|
628
|
-
django_spire/core/templates/django_spire/page/full_page.html,sha256=
|
|
628
|
+
django_spire/core/templates/django_spire/page/full_page.html,sha256=AtAuEYqi7f5eo7ZFLweSifD5LgjAm8b-HRQh6T44GNA,1239
|
|
629
629
|
django_spire/core/templates/django_spire/page/page.html,sha256=D6qoyoo3E0_Qu8qov6c2YaYbJQ-LnZnCLKHb5bN0sOs,397
|
|
630
630
|
django_spire/core/templates/django_spire/speech/speech_recognition.html,sha256=0SiRq9L4wFPFl_c8WnwflsYFfQ2wVUPi7aklEPdZPjQ,805
|
|
631
631
|
django_spire/core/templates/django_spire/speech/speech_synthesis.html,sha256=25HetXDLzVWxC8hBnIuVbNXfvGxfaYvtZUPPtN0fkQY,805
|
|
@@ -635,7 +635,7 @@ django_spire/core/templates/django_spire/tab/element/tab_trigger_element.html,sh
|
|
|
635
635
|
django_spire/core/templates/django_spire/wizard/wizard.html,sha256=t8sscyIyVfyxnji2gFa6bW0cqkdGE-x_W7nzuBTrjxo,2239
|
|
636
636
|
django_spire/core/templates/django_spire/wizard/wizard_page.html,sha256=emW5W2z_mkGERsbw3A9tFJoUOwhxa4Efr8thtZ_gHkI,75
|
|
637
637
|
django_spire/core/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
638
|
-
django_spire/core/templatetags/json.py,sha256=
|
|
638
|
+
django_spire/core/templatetags/json.py,sha256=2XY8hQZrJOSmGMblL8bLRYD9hvUSQvhYaSJvwGaKzwU,280
|
|
639
639
|
django_spire/core/templatetags/message.py,sha256=y70pMv1ddttJ41c11O1S7h7v8h_gTtJVdXe67J4Ld3g,491
|
|
640
640
|
django_spire/core/templatetags/spire_core_tags.py,sha256=YLVqYEnvuJt93CpKoOO7uQ83zsnVnrfstcZthCNNGgA,4020
|
|
641
641
|
django_spire/core/templatetags/string_formating.py,sha256=pE5ID0-cvOKfmbAIixVXEW3LN8_XLEF_OlpztHkiILk,444
|
|
@@ -1071,15 +1071,16 @@ django_spire/theme/tests/test_enums.py,sha256=38KaKRdJwpUPialpSHU_BFeX98kTsS93sI
|
|
|
1071
1071
|
django_spire/theme/tests/test_filesystem.py,sha256=o-kr76wOEvJoCVAGCmvQKEWMbBIYW_-gWoo_i7hTVa8,6611
|
|
1072
1072
|
django_spire/theme/tests/test_integration.py,sha256=yzA4PIUhw6n79fcKr-7SmKPNJT7IIqy6RH_zfWbhZjc,1869
|
|
1073
1073
|
django_spire/theme/tests/test_model.py,sha256=l-_e0z0f6SXKGmLGLI2JzA3GpDAgwV6876C5Efy6K6M,7023
|
|
1074
|
-
django_spire/theme/tests/test_views.py,sha256=
|
|
1075
|
-
django_spire/theme/
|
|
1076
|
-
django_spire/theme/urls/
|
|
1074
|
+
django_spire/theme/tests/test_views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1075
|
+
django_spire/theme/tests/test_views/test_json_views.py,sha256=CNcVyz-Q4zUsarKpvSKNZ31gxhWd9seVnFsHX2K77ww,4428
|
|
1076
|
+
django_spire/theme/urls/__init__.py,sha256=0AGqZ-kWrE50HwlFRH_t19qO7CH1OqGLtPrf6PDhjF8,249
|
|
1077
|
+
django_spire/theme/urls/json_urls.py,sha256=CHqKcicKQpKI3OrlxTOQKgdYvzHWZDgScqpCDu9r7oU,247
|
|
1077
1078
|
django_spire/theme/urls/page_urls.py,sha256=S8nkKkgbhG3XHI3uMUL-piOjXIrRkuY2UlM_JNX4L3Q,641
|
|
1078
1079
|
django_spire/theme/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1079
|
-
django_spire/theme/views/
|
|
1080
|
+
django_spire/theme/views/json_views.py,sha256=W1khC2K_EMbEzAFmMxC_P76_MFnkRH4-eVdodrRfAhw,1904
|
|
1080
1081
|
django_spire/theme/views/page_views.py,sha256=pHr8iekjtR99xs7w1taj35HEo133Svq1dvDD0y0VL1c,3933
|
|
1081
|
-
django_spire-0.16.
|
|
1082
|
-
django_spire-0.16.
|
|
1083
|
-
django_spire-0.16.
|
|
1084
|
-
django_spire-0.16.
|
|
1085
|
-
django_spire-0.16.
|
|
1082
|
+
django_spire-0.16.5.dist-info/licenses/LICENSE.md,sha256=tlTbOtgKoy-xAQpUk9gPeh9O4oRXCOzoWdW3jJz0wnA,1091
|
|
1083
|
+
django_spire-0.16.5.dist-info/METADATA,sha256=PXy20uNpaGz328ajflrVW0MvcxLd-7GNOccW5UBR284,4762
|
|
1084
|
+
django_spire-0.16.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1085
|
+
django_spire-0.16.5.dist-info/top_level.txt,sha256=xf3QV1e--ONkVpgMDQE9iqjQ1Vg4--_6C8wmO-KxPHQ,13
|
|
1086
|
+
django_spire-0.16.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|