django-spire 0.16.6__py3-none-any.whl → 0.16.8__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/consts.py CHANGED
@@ -1,4 +1,4 @@
1
- __VERSION__ = '0.16.6'
1
+ __VERSION__ = '0.16.8'
2
2
 
3
3
 
4
4
  AI_CHAT_WORKFLOW_SENDER_SETTINGS_NAME = 'AI_CHAT_WORKFLOW_NAME'
@@ -74,16 +74,17 @@
74
74
  --bs-popover-header-color: var(--app-default-text-color);
75
75
 
76
76
  --bs-form-control-color: var(--app-default-text-color);
77
- --bs-form-control-bg: var(--app-layer-one);
78
- --bs-form-control-border-color: var(--app-layer-two);
77
+ --bs-form-control-bg: var(--app-layer-two);
78
+ --bs-form-control-border-color: var(--bs-border-color);
79
79
  --bs-form-control-focus-border-color: var(--app-primary);
80
- --bs-form-control-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
80
+ --bs-form-control-focus-box-shadow: 0 0 0 0.25rem rgba(0, 0, 0, 0.25);
81
+ --bs-form-control-disabled-bg: var(--app-layer-three);
81
82
 
82
83
  --bs-form-select-color: var(--app-default-text-color);
83
- --bs-form-select-bg: var(--app-layer-one);
84
- --bs-form-select-border-color: var(--app-layer-two);
84
+ --bs-form-select-bg: var(--app-layer-two);
85
+ --bs-form-select-border-color: var(--bs-border-color);
85
86
  --bs-form-select-focus-border-color: var(--app-primary);
86
- --bs-form-select-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
87
+ --bs-form-select-focus-box-shadow: 0 0 0 0.25rem rgba(0, 0, 0, 0.25);
87
88
 
88
89
  --bs-btn-color: var(--app-default-button-text-color);
89
90
  --bs-btn-bg: var(--app-primary);
@@ -141,8 +142,8 @@
141
142
 
142
143
  --bs-border-color-translucent: rgba(64, 61, 82, 0.175);
143
144
 
144
- --bs-form-control-focus-box-shadow: 0 0 0 0.25rem rgba(196, 167, 231, 0.25);
145
- --bs-form-select-focus-box-shadow: 0 0 0 0.25rem rgba(196, 167, 231, 0.25);
145
+ --bs-form-control-focus-box-shadow: 0 0 0 0.25rem var(--app-focus-ring-primary);
146
+ --bs-form-select-focus-box-shadow: 0 0 0 0.25rem var(--app-focus-ring-primary);
146
147
 
147
148
  --bs-tooltip-bg: var(--app-layer-two);
148
149
  --bs-tooltip-color: var(--app-default-text-color);
@@ -160,6 +161,33 @@
160
161
 
161
162
  --bs-border-color-translucent: rgba(206, 202, 205, 0.175);
162
163
 
163
- --bs-form-control-focus-box-shadow: 0 0 0 0.25rem rgba(144, 122, 169, 0.25);
164
- --bs-form-select-focus-box-shadow: 0 0 0 0.25rem rgba(144, 122, 169, 0.25);
164
+ --bs-form-control-focus-box-shadow: 0 0 0 0.25rem var(--app-focus-ring-primary);
165
+ --bs-form-select-focus-box-shadow: 0 0 0 0.25rem var(--app-focus-ring-primary);
166
+ }
167
+
168
+ .form-control {
169
+ background-color: var(--app-layer-two) !important;
170
+ color: var(--app-default-text-color) !important;
171
+ border-color: var(--bs-border-color) !important;
172
+ caret-color: var(--app-default-text-color) !important;
173
+ }
174
+
175
+ .form-control:focus {
176
+ box-shadow: none !important;
177
+ outline: none !important;
178
+ border-color: var(--app-primary) !important;
179
+ border-width: 2px !important;
180
+ }
181
+
182
+ .form-control:disabled,
183
+ .form-control[readonly] {
184
+ background-color: var(--app-layer-three) !important;
185
+ }
186
+
187
+ .form-control:-webkit-autofill,
188
+ .form-control:-webkit-autofill:hover,
189
+ .form-control:-webkit-autofill:focus,
190
+ .form-control:-webkit-autofill:active {
191
+ -webkit-box-shadow: 0 0 0 30px var(--app-layer-two) inset !important;
192
+ -webkit-text-fill-color: var(--app-default-text-color) !important;
165
193
  }
@@ -0,0 +1,21 @@
1
+ input[type="datetime-local"]::-webkit-calendar-picker-indicator,
2
+ input[type="date"]::-webkit-calendar-picker-indicator,
3
+ input[type="time"]::-webkit-calendar-picker-indicator,
4
+ input[type="week"]::-webkit-calendar-picker-indicator,
5
+ input[type="month"]::-webkit-calendar-picker-indicator {
6
+ cursor: pointer;
7
+ border: none;
8
+ opacity: 0.75;
9
+ }
10
+
11
+ input[type="datetime-local"]::-webkit-calendar-picker-indicator:hover,
12
+ input[type="date"]::-webkit-calendar-picker-indicator:hover,
13
+ input[type="time"]::-webkit-calendar-picker-indicator:hover,
14
+ input[type="week"]::-webkit-calendar-picker-indicator:hover,
15
+ input[type="month"]::-webkit-calendar-picker-indicator:hover {
16
+ opacity: 1;
17
+ }
18
+
19
+ [data-theme="dark"] input {
20
+ color-scheme: dark;
21
+ }
@@ -102,6 +102,54 @@ document.addEventListener('alpine:init', () => {
102
102
  if (window.django_spire && window.django_spire.theme) {
103
103
  window.django_spire.theme.active = theme.value;
104
104
  }
105
+
106
+ if (!document.querySelector('link[data-input-css]')) {
107
+ let link = document.createElement('link');
108
+ link.rel = 'stylesheet';
109
+ link.href = '/static/django_spire/css/themes/input.css';
110
+ link.setAttribute('data-input-css', 'true');
111
+
112
+ document.head.appendChild(link);
113
+ }
114
+
115
+ setTimeout(() => this.apply_input_icon_theme(), 100);
116
+ },
117
+
118
+ apply_input_icon_theme() {
119
+ // This is a fix for a Chromium-based browser. We have to dynamically
120
+ // target the input field icon, otherwise it won't be styled properly.
121
+
122
+ let text_color = getComputedStyle(document.documentElement).getPropertyValue('--app-default-text-color').trim();
123
+
124
+ if (!text_color) return;
125
+
126
+ let hex = text_color.replace('#', '%23');
127
+ let style_id = 'calendar-icon-theme';
128
+ let existing = document.getElementById(style_id);
129
+
130
+ if (existing) {
131
+ existing.remove();
132
+ }
133
+
134
+ let calendar_svg = `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" stroke="${hex}" stroke-width="1.5" viewBox="0 0 16 16"><rect x="2" y="3" width="12" height="11" rx="1"/><path d="M2 6h12M5 1v3M11 1v3"/><circle cx="5" cy="9" r="0.5" fill="${hex}"/><circle cx="8" cy="9" r="0.5" fill="${hex}"/><circle cx="11" cy="9" r="0.5" fill="${hex}"/><circle cx="5" cy="12" r="0.5" fill="${hex}"/><circle cx="8" cy="12" r="0.5" fill="${hex}"/><circle cx="11" cy="12" r="0.5" fill="${hex}"/></svg>`;
135
+ let clock_svg = `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="${hex}"><path d="M8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z"/><path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm7-8A7 7 0 1 1 1 8a7 7 0 0 1 14 0z"/></svg>`;
136
+
137
+ let style = document.createElement('style');
138
+ style.id = style_id;
139
+
140
+ style.textContent = `
141
+ input[type="datetime-local"]::-webkit-calendar-picker-indicator,
142
+ input[type="date"]::-webkit-calendar-picker-indicator,
143
+ input[type="week"]::-webkit-calendar-picker-indicator,
144
+ input[type="month"]::-webkit-calendar-picker-indicator {
145
+ background-image: url('${calendar_svg}');
146
+ }
147
+
148
+ input[type="time"]::-webkit-calendar-picker-indicator {
149
+ background-image: url('${clock_svg}');
150
+ }
151
+ `;
152
+ document.head.appendChild(style);
105
153
  },
106
154
 
107
155
  load_theme_css(family, mode) {
@@ -134,6 +182,8 @@ document.addEventListener('alpine:init', () => {
134
182
  if (existing) {
135
183
  existing.remove();
136
184
  }
185
+
186
+ this.apply_input_icon_theme();
137
187
  };
138
188
 
139
189
  document.head.appendChild(link);
@@ -150,6 +200,7 @@ document.addEventListener('alpine:init', () => {
150
200
  async set(value) {
151
201
  this.current = value;
152
202
  this.apply();
203
+
153
204
  await this.persist_to_server(value);
154
205
  },
155
206
 
@@ -2,8 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from django.core.handlers.wsgi import WSGIRequest
5
6
  from django.db.models import Count, Q
6
7
 
8
+ from django_spire.auth.controller.controller import AppAuthController
7
9
  from django_spire.contrib.ordering.querysets import OrderingQuerySetMixin
8
10
  from django_spire.history.querysets import HistoryQuerySet
9
11
 
@@ -26,10 +28,31 @@ class CollectionQuerySet(HistoryQuerySet, OrderingQuerySetMixin):
26
28
  def childless(self) -> QuerySet[Collection]:
27
29
  return self.annotate(child_count=Count('child')).filter(child_count=0)
28
30
 
31
+ def exclude_children(self, collection: Collection) -> QuerySet[Collection]:
32
+ descendant_ids = set()
33
+ current_level_ids = [collection.id]
34
+
35
+ while current_level_ids:
36
+ children = self.filter(parent_id__in=current_level_ids)
37
+ child_ids = list(children.values_list('id', flat=True))
38
+
39
+ if not child_ids:
40
+ break
41
+
42
+ descendant_ids.update(child_ids)
43
+ current_level_ids = child_ids
44
+
45
+ return self.exclude(id__in=descendant_ids)
46
+
29
47
  def parentless(self) -> QuerySet[Collection]:
30
48
  return self.filter(parent_id__isnull=True)
31
49
 
32
- def user_has_access(self, user: AuthUser) -> QuerySet[Collection]:
50
+ def request_user_has_access(self, request: WSGIRequest) -> QuerySet[Collection]:
51
+ user = request.user
52
+
53
+ if user.is_superuser or AppAuthController('knowledge', request).can_access_all_collections():
54
+ return self.all()
55
+
33
56
  direct_access = self.filter(group__auth_group__user=user)
34
57
  accessible_ids = set(direct_access.values_list('id', flat=True))
35
58
 
@@ -7,7 +7,6 @@ from django.contrib.sites.models import Site
7
7
  from django.db.models import Prefetch
8
8
  from django.urls import reverse
9
9
 
10
- from django_spire.auth.controller.controller import AppAuthController
11
10
  from django_spire.contrib.service import BaseDjangoModelService
12
11
 
13
12
  from typing import TYPE_CHECKING
@@ -21,27 +20,20 @@ class CollectionTransformationService(BaseDjangoModelService['Collection']):
21
20
  obj: Collection
22
21
 
23
22
  def to_hierarchy_json(self, request: WSGIRequest) -> str:
24
- user = request.user
25
-
26
23
  collections = (
27
24
  self.obj_class.objects
28
25
  .active()
26
+ .request_user_has_access(request)
29
27
  .select_related('parent')
30
28
  )
31
29
 
32
- if not (
33
- user.is_superuser or
34
- AppAuthController('knowledge', request).can_access_all_collections()
35
- ):
36
- collections = collections.user_has_access(user=user)
37
-
38
30
  entry_queryset = (
39
31
  collections.model._meta.fields_map.get('entry')
40
32
  .related_model
41
33
  .objects
42
34
  .active()
43
35
  .has_current_version()
44
- .user_has_access(user=user)
36
+ .user_has_access(user=request.user)
45
37
  .select_related('current_version__author')
46
38
  .order_by('order')
47
39
  )
@@ -31,7 +31,13 @@ def form_view(
31
31
  dg.glue_query_set(
32
32
  request,
33
33
  unique_name='collections',
34
- target=Collection.objects.active().user_has_access(request.user),
34
+ target=(
35
+ Collection.objects
36
+ .active()
37
+ .request_user_has_access(request)
38
+ .exclude(pk=collection.pk)
39
+ .exclude_children(collection=collection)
40
+ ),
35
41
  fields=['name']
36
42
  )
37
43
  dg.glue_query_set(
@@ -41,7 +41,7 @@ def reorder_view(request: WSGIRequest) -> JsonResponse:
41
41
  destination_objects=(
42
42
  collection.entries
43
43
  .has_current_version()
44
- .user_has_access(user=request.user)
44
+ .request_user_has_access(user=request.user)
45
45
  .active()
46
46
  ),
47
47
  position=order,
@@ -5,6 +5,5 @@
5
5
  }
6
6
 
7
7
  .knowledge-nav-item:hover {
8
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2);
9
- background-color: var(--app-layer-two);
8
+ background-color: var(--app-layer-three);
10
9
  }
@@ -57,9 +57,9 @@
57
57
  tabindex="-1"
58
58
  id="navigation-card"
59
59
  >
60
- <div class="offcanvas-header">
61
- <h5 class="offcanvas-title">Navigation</h5>
62
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas"></button>
60
+ <div class="row offcanvas-header">
61
+ <h5 class="col offcanvas-title">Navigation</h5>
62
+ <span class="col-auto bi bi-x-lg cursor-pointer fs-5" data-bs-dismiss="offcanvas"></span>
63
63
  </div>
64
64
  {% include 'django_spire/knowledge/collection/navigation/navigation.html' %}
65
65
  </div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-spire
3
- Version: 0.16.6
3
+ Version: 0.16.8
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.
@@ -46,7 +46,7 @@ Requires-Python: >=3.11
46
46
  Description-Content-Type: text/markdown
47
47
  License-File: LICENSE.md
48
48
  Requires-Dist: crispy-bootstrap5==2024.10
49
- Requires-Dist: dandy>=0.18.0
49
+ Requires-Dist: dandy==0.20.0
50
50
  Requires-Dist: django>=5.1.8
51
51
  Requires-Dist: django-crispy-forms==2.3
52
52
  Requires-Dist: django-glue>=0.8.1
@@ -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=b-ZLKW2TfJ9usKaHkyvoGYTqBCMCxBJ4TbeFRowbO2Q,390
3
+ django_spire/consts.py,sha256=xJzmLn-YJcLRPoG1nYm4Fi3bi3V4ZWbX7cvJ--a8I5w,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
@@ -442,9 +442,10 @@ django_spire/core/static/django_spire/css/app-template.css,sha256=D5ORspwfokNqRW
442
442
  django_spire/core/static/django_spire/css/app-text.css,sha256=4hyHj-6EJmTtj15OAHGLMaNJIbruKVEMRC_ucmYE_UY,5833
443
443
  django_spire/core/static/django_spire/css/app-theme.css,sha256=6vxu-tNDS4i1wWwLxdkCuiucN_ZKzGqwZmqZ8Vcwzk0,421
444
444
  django_spire/core/static/django_spire/css/bootstrap-extension.css,sha256=TLCzs5SE9__bu2l3oAg9G-j_kuFSC0HxhQw1YQiOhy8,9712
445
- django_spire/core/static/django_spire/css/bootstrap-override.css,sha256=qfe2tS0hSRIuuwaRa37LniFSN91LVMNN_I-JSlQwTWY,6605
445
+ django_spire/core/static/django_spire/css/bootstrap-override.css,sha256=OqSfW94DwcqZebQMWHtk_djywSGgnxSlUPtxZJ8sId0,7490
446
446
  django_spire/core/static/django_spire/css/bootstrap.css,sha256=GEgESnyGv91X48AEz35ovTv1fF8JPaB_VZB-JXJjdb0,155840
447
447
  django_spire/core/static/django_spire/css/flatpickr.min.css,sha256=RXPAyxHVyMLxb0TYCM2OW5R4GWkcDe02jdYgyZp41OU,16081
448
+ django_spire/core/static/django_spire/css/themes/input.css,sha256=dHY08qEODw-L1xbelx2q-5zu7g9hznVw3Ii3INKlQKU,738
448
449
  django_spire/core/static/django_spire/css/themes/ayu/app-dark.css,sha256=1ynbgAPB7VmrI8WjfEJ4hCv8C23o3C2PqheAIzzHkaQ,2235
449
450
  django_spire/core/static/django_spire/css/themes/ayu/app-light.css,sha256=qYO9Wzevku-PRgT77DtYVSD_cpNb6XWdGAsIIu4s6iM,2040
450
451
  django_spire/core/static/django_spire/css/themes/catppuccin/app-dark.css,sha256=hTfq9GzzKABKWA3wpLO7TGP0TYqUn2W7SOVeiTZf54w,2236
@@ -490,7 +491,7 @@ django_spire/core/static/django_spire/js/cookie.js,sha256=N9ifDzqmJHRDwYI2Lqia1y
490
491
  django_spire/core/static/django_spire/js/dropdown.js,sha256=cSvzdsct8-45gIWZlO5MzmbW2vDuxJVttLZjOBl14GE,934
491
492
  django_spire/core/static/django_spire/js/modal.js,sha256=ay0Sovi0HhedEz3dRhB_INhkh1PEJ7zPc5POYo_Wwg0,370
492
493
  django_spire/core/static/django_spire/js/session_controller.js,sha256=aMom087y00MUhdxrZlrg89f88mBC7cWEhGWopeb5hlQ,232
493
- django_spire/core/static/django_spire/js/theme.js,sha256=JyKPDkblDSay0DNzpPJfvlSptVORFhu3FWF_s84qYaI,5830
494
+ django_spire/core/static/django_spire/js/theme.js,sha256=APZnTjuhgXV7m1vVlmvNIMZACJ0gG8uGeiyWSmhZTmQ,8512
494
495
  django_spire/core/static/django_spire/js/ui.js,sha256=qxb32pBZz7e5iLuOCbNs80VsqQJKa6cj5aBrGTvIrsY,389
495
496
  django_spire/core/templates/django_spire/403.html,sha256=35OX-3z-Yi6Igx9DTAcxNwWiZ17wXdm4wYGML4U2pns,37
496
497
  django_spire/core/templates/django_spire/404.html,sha256=91sTr518M2YxQ8X3GlzDsNP6IVo3MW07tbHdcLBL8Iw,235
@@ -716,7 +717,7 @@ django_spire/knowledge/collection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
716
717
  django_spire/knowledge/collection/admin.py,sha256=7Ykw1zDBzMuoO4OfyszsOXWmVvtof4ooXseplTmqa-E,677
717
718
  django_spire/knowledge/collection/forms.py,sha256=4zMzdonUjYEK7GW-3m0DDimG19zm9ji89j0FVFIg6W0,202
718
719
  django_spire/knowledge/collection/models.py,sha256=eArUPJu9bnFMixnfogQiA-TSbnz2NGoaJbmR4tJU3Mw,1625
719
- django_spire/knowledge/collection/querysets.py,sha256=bmLCqlRMkZ_9GOzNUiRanuxTIjiIXeQ8tiXMvXvsk-8,1717
720
+ django_spire/knowledge/collection/querysets.py,sha256=EJM-LqOeFmaPZQkTcHAYp4qu1nuEXu36BH0-cJ339II,2532
720
721
  django_spire/knowledge/collection/seeding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
721
722
  django_spire/knowledge/collection/seeding/seed.py,sha256=DVTYx8gt4zQQ1UpeOfMq5G1PWGdeENaw-XdA7DtjRUg,267
722
723
  django_spire/knowledge/collection/seeding/seeder.py,sha256=l8qDxIPYMlc8hntpVtb3BpvlPXr3XLemxOdnl8B16fo,1531
@@ -725,7 +726,7 @@ django_spire/knowledge/collection/services/factory_service.py,sha256=92DLZODSRPF
725
726
  django_spire/knowledge/collection/services/ordering_service.py,sha256=vTkSdt1lVT4VxSK3GhZibj8FPDDy5butwPkVzqmm07g,1243
726
727
  django_spire/knowledge/collection/services/processor_service.py,sha256=3ArKBndoL3HEvH_1EBqfiw7AnbFYZ0WmBgcPV8BHdLQ,911
727
728
  django_spire/knowledge/collection/services/service.py,sha256=Vg9ZPWlCxZ_43fkudvBUBZfd7L7A8_vKlBA9dIHUNas,1709
728
- django_spire/knowledge/collection/services/transformation_service.py,sha256=dfjl5xm_N1CrAMBShNxMs351plwaN_eTfcWXZHy0cek,3648
729
+ django_spire/knowledge/collection/services/transformation_service.py,sha256=AZVKA7RCFkoT3Iey0PmeZPZEb3Q6GUJTEG1MVPhFlLg,3387
729
730
  django_spire/knowledge/collection/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
730
731
  django_spire/knowledge/collection/tests/factories.py,sha256=rQfLX9kz72X-ne6i_IDWXoQMlAnyrxrReuOFM01bC2Q,393
731
732
  django_spire/knowledge/collection/tests/test_services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -739,7 +740,7 @@ django_spire/knowledge/collection/urls/form_urls.py,sha256=zOAbLQXw-POh9F7lzxAFW
739
740
  django_spire/knowledge/collection/urls/json_urls.py,sha256=XZp5wt8m9x38Uuy1dhegqZ4qlJLZK2EgJsLltx97o0Q,195
740
741
  django_spire/knowledge/collection/urls/page_urls.py,sha256=zvcqS6zE_OZd_Ah1nMIIbMOzYkIYJ-BQbCMXijeDj7E,324
741
742
  django_spire/knowledge/collection/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
742
- django_spire/knowledge/collection/views/form_views.py,sha256=FoVC9IjD-3nLemw9ai5pIyKFdsBN04mmP1DkDN7d034,2460
743
+ django_spire/knowledge/collection/views/form_views.py,sha256=QA-z-iDhtJTAQlPxrQP6KdQl-M8W01NG2TK_EwEo4d8,2605
743
744
  django_spire/knowledge/collection/views/json_views.py,sha256=JvTciCngT_dc_7JlTlAcc1zD5aaFelqLL67kc0e6JmU,994
744
745
  django_spire/knowledge/collection/views/page_views.py,sha256=Vbi87b0xSCrXQULAReK2SY-8HVvDT7Y83zAM6nVYwNM,2566
745
746
  django_spire/knowledge/entry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -836,7 +837,7 @@ django_spire/knowledge/entry/version/views/page_views.py,sha256=QtwI2CM0dcSkKApX
836
837
  django_spire/knowledge/entry/version/views/redirect_views.py,sha256=VCtgwXIzzpYx7vufDQB4G04cDoX_ceH_KL-yZ7WxGSg,718
837
838
  django_spire/knowledge/entry/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
838
839
  django_spire/knowledge/entry/views/form_views.py,sha256=X0S8tQsONjuK46Y4F-a0blB1KydoJ34q8kIzJdQxmo8,4461
839
- django_spire/knowledge/entry/views/json_views.py,sha256=UqfKcJZ908y2UmKBBF0PoQj1-a6liQBbEt4RD7dwEeI,1761
840
+ django_spire/knowledge/entry/views/json_views.py,sha256=-9Ug9cBbIsAZa7RStGErNfg_ANiyYiBnwyjRoTIS30s,1769
840
841
  django_spire/knowledge/entry/views/page_views.py,sha256=fsS4G58o1ZsFG2JlGgjUYhWAMY22C3FjmWCXh5JFZXs,914
841
842
  django_spire/knowledge/entry/views/template_views.py,sha256=U3pqndOpPQlC2zJBKcOIM4IUXK870FH_Wpna5imIkm0,1782
842
843
  django_spire/knowledge/intelligence/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -860,7 +861,7 @@ django_spire/knowledge/seeding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
860
861
  django_spire/knowledge/seeding/seed.py,sha256=mdVbtQVbGdTjheHAnMPEQojik_gv7rT1YcvWZRLgFy8,61
861
862
  django_spire/knowledge/static/django_spire/knowledge/collection/js/managers.js,sha256=1b0pRPYJvYjKKZB2wshdoseAUR3_Al-2qxFUWE5q-oo,4319
862
863
  django_spire/knowledge/static/django_spire/knowledge/collection/js/x_component.js,sha256=avczuHac3i58k06wA-LPpgupedCYbuDVTjTYVjEho18,898
863
- django_spire/knowledge/static/django_spire/knowledge/css/navigation_items.css,sha256=V4e4cq5fVUsUswhoXQHWI-L0vYQveDVq6DnyhNOeSaQ,223
864
+ django_spire/knowledge/static/django_spire/knowledge/css/navigation_items.css,sha256=LwWOW4lsgkeIz3JuP9DQ-x10_04TvQw8fM4Fi-QT9M8,179
864
865
  django_spire/knowledge/static/django_spire/knowledge/entry/version/js/managers.js,sha256=q-HiSnOnMMomxU0EAWSbQO55HMVvb8wPxA0KCP3VyP4,2772
865
866
  django_spire/knowledge/templates/django_spire/knowledge/collection/card/collection_card.html,sha256=VTSB4ddVYg7-QMWrlTgb0b7UakITmhWbFzlttMlHVWU,2462
866
867
  django_spire/knowledge/templates/django_spire/knowledge/collection/card/context_menu_card.html,sha256=yvJjkzRheXSZYBoGnMM-EQCFonJBVThWQp6KHd4cx9k,1386
@@ -904,7 +905,7 @@ django_spire/knowledge/templates/django_spire/knowledge/entry/version/container/
904
905
  django_spire/knowledge/templates/django_spire/knowledge/entry/version/page/detail_page.html,sha256=bVxildiAIrQR9lFFdnc8H0eYVr2itX97A_y3pQk87E4,326
905
906
  django_spire/knowledge/templates/django_spire/knowledge/entry/version/page/form_page.html,sha256=ufUISOfNmk45hl7F-ujtAzpHdEmUxh55odW0eyL6SMU,722
906
907
  django_spire/knowledge/templates/django_spire/knowledge/message/knowledge_message_intel.html,sha256=yIca58o4_UC-6WgeGT9WOrJ0cQrXfZo3B0QFd03nlXU,130
907
- django_spire/knowledge/templates/django_spire/knowledge/page/full_page.html,sha256=eeT8YzSNH0NKu5N41PafajcO3nTWglbcFIXHdT2wolg,2316
908
+ django_spire/knowledge/templates/django_spire/knowledge/page/full_page.html,sha256=bYuOvJpPAiufBaNsqqGg12E3lIdX_X_kFnrNexUguPE,2336
908
909
  django_spire/knowledge/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
909
910
  django_spire/knowledge/templatetags/spire_knowledge_tags.py,sha256=WQcmaS7sh6ga3_HqblThYv0__u3soyJ5Jp6sn9rU76c,585
910
911
  django_spire/knowledge/urls/__init__.py,sha256=f_d2AMnV2eD9eXe3-RAZk17rb39Kvl654ptSirNmfmI,266
@@ -1040,8 +1041,8 @@ django_spire/theme/urls/page_urls.py,sha256=S8nkKkgbhG3XHI3uMUL-piOjXIrRkuY2UlM_
1040
1041
  django_spire/theme/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1041
1042
  django_spire/theme/views/json_views.py,sha256=W1khC2K_EMbEzAFmMxC_P76_MFnkRH4-eVdodrRfAhw,1904
1042
1043
  django_spire/theme/views/page_views.py,sha256=pHr8iekjtR99xs7w1taj35HEo133Svq1dvDD0y0VL1c,3933
1043
- django_spire-0.16.6.dist-info/licenses/LICENSE.md,sha256=tlTbOtgKoy-xAQpUk9gPeh9O4oRXCOzoWdW3jJz0wnA,1091
1044
- django_spire-0.16.6.dist-info/METADATA,sha256=SgNlsugbwqiRdETA-JSmu4l8643rKabhbRLFbuBHpbo,4762
1045
- django_spire-0.16.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1046
- django_spire-0.16.6.dist-info/top_level.txt,sha256=xf3QV1e--ONkVpgMDQE9iqjQ1Vg4--_6C8wmO-KxPHQ,13
1047
- django_spire-0.16.6.dist-info/RECORD,,
1044
+ django_spire-0.16.8.dist-info/licenses/LICENSE.md,sha256=tlTbOtgKoy-xAQpUk9gPeh9O4oRXCOzoWdW3jJz0wnA,1091
1045
+ django_spire-0.16.8.dist-info/METADATA,sha256=izsGOT7mjwb2qLchqMng-xy4nv2TuKaPlWv9n5UhRdg,4762
1046
+ django_spire-0.16.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1047
+ django_spire-0.16.8.dist-info/top_level.txt,sha256=xf3QV1e--ONkVpgMDQE9iqjQ1Vg4--_6C8wmO-KxPHQ,13
1048
+ django_spire-0.16.8.dist-info/RECORD,,