django-spire 0.22.2__py3-none-any.whl → 0.22.4__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.22.2'
1
+ __VERSION__ = '0.22.4'
2
2
 
3
3
  MAINTENANCE_MODE_SETTINGS_NAME = 'MAINTENANCE_MODE'
4
4
 
@@ -24,24 +24,21 @@ class CollectionQuerySet(HistoryQuerySet, OrderingQuerySetMixin):
24
24
  def by_parent_id(self, parent_id: int) -> QuerySet[Collection]:
25
25
  return self.filter(parent_id=parent_id)
26
26
 
27
+ def by_parent_ids(self, parent_ids: list[int]) -> QuerySet[Collection]:
28
+ return self.filter(parent_id__in=parent_ids)
29
+
27
30
  def childless(self) -> QuerySet[Collection]:
28
31
  return self.annotate(child_count=Count('child')).filter(child_count=0)
29
32
 
30
- def exclude_children(self, collection: Collection) -> QuerySet[Collection]:
31
- descendant_ids = set()
32
- current_level_ids = [collection.id]
33
-
34
- while current_level_ids:
35
- children = self.filter(parent_id__in=current_level_ids)
36
- child_ids = list(children.values_list('id', flat=True))
37
-
38
- if not child_ids:
39
- break
40
-
41
- descendant_ids.update(child_ids)
42
- current_level_ids = child_ids
33
+ def children(self, collection_id: int) -> QuerySet[Collection]:
34
+ return self.filter(
35
+ id__in=self.model.services.tool.get_children_ids(parent_id=collection_id)
36
+ )
43
37
 
44
- return self.exclude(id__in=descendant_ids)
38
+ def exclude_children(self, collection_id: int) -> QuerySet[Collection]:
39
+ return self.exclude(
40
+ id__in=self.model.services.tool.get_children_ids(parent_id=collection_id)
41
+ )
45
42
 
46
43
  def parentless(self) -> QuerySet[Collection]:
47
44
  return self.filter(parent_id__isnull=True)
@@ -11,6 +11,8 @@ from django_spire.knowledge.collection.services.ordering_service import \
11
11
  from django_spire.knowledge.collection.services.processor_service import \
12
12
  CollectionProcessorService
13
13
  from django_spire.knowledge.collection.services.tag_service import CollectionTagService
14
+ from django_spire.knowledge.collection.services.tool_services import \
15
+ CollectionToolService
14
16
  from django_spire.knowledge.collection.services.transformation_service import \
15
17
  CollectionTransformationService
16
18
 
@@ -24,6 +26,7 @@ class CollectionService(BaseDjangoModelService['Collection']):
24
26
  ordering = CollectionOrderingService()
25
27
  processor = CollectionProcessorService()
26
28
  tag = CollectionTagService()
29
+ tool = CollectionToolService()
27
30
  transformation = CollectionTransformationService()
28
31
 
29
32
  def save_model_obj(self, **field_data) -> tuple[Collection, bool]:
@@ -0,0 +1,37 @@
1
+ from __future__ import annotations
2
+
3
+ from django_spire.contrib.service import BaseDjangoModelService
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ if TYPE_CHECKING:
8
+ from django_spire.knowledge.collection.models import Collection
9
+
10
+
11
+ class CollectionToolService(BaseDjangoModelService['Collection']):
12
+ obj: Collection
13
+
14
+ def get_children_ids(self, parent_id: int) -> set[int]:
15
+ descendant_ids = set()
16
+ current_level_ids = [parent_id]
17
+
18
+ while current_level_ids:
19
+ child_ids = self.obj_class.objects.by_parent_ids(
20
+ parent_ids=current_level_ids
21
+ ).values_list('id', flat=True)
22
+
23
+ if not child_ids:
24
+ break
25
+
26
+ descendant_ids.update(child_ids)
27
+ current_level_ids = child_ids
28
+
29
+ return descendant_ids
30
+
31
+ def get_root_collection_pk(self) -> int:
32
+ collection = self.obj
33
+
34
+ while collection.parent_id:
35
+ collection = collection.parent
36
+
37
+ return collection.id
@@ -19,11 +19,11 @@ if TYPE_CHECKING:
19
19
  class CollectionTransformationService(BaseDjangoModelService['Collection']):
20
20
  obj: Collection
21
21
 
22
- def to_hierarchy_json(self, request: WSGIRequest, parent_id: int | None = None) -> str:
22
+ def to_hierarchy_json(self, request: WSGIRequest, parent_id: int) -> str:
23
23
  collections = (
24
24
  self.obj_class.objects
25
25
  .active()
26
- .by_parent_id(parent_id=parent_id)
26
+ .children(collection_id=parent_id)
27
27
  .request_user_has_access(request)
28
28
  .select_related('parent')
29
29
  )
@@ -38,7 +38,7 @@ def form_view(
38
38
  .active()
39
39
  .request_user_has_access(request)
40
40
  .exclude(pk=collection.pk)
41
- .exclude_children(collection=collection)
41
+ .exclude_children(collection_id=pk)
42
42
  ),
43
43
  fields=['name']
44
44
  )
@@ -66,7 +66,7 @@ def form_view(
66
66
  if collection.parent_id:
67
67
  return_url = reverse(
68
68
  'django_spire:knowledge:collection:page:top_level',
69
- kwargs={'pk': collection.parent_id}
69
+ kwargs={'pk': collection.services.tool.get_root_collection_pk()}
70
70
  )
71
71
  else:
72
72
  return_url = reverse('django_spire:knowledge:page:home')
@@ -0,0 +1,93 @@
1
+ .ce-popover__container {
2
+ background-color: var(--app-layer-one);
3
+ border: 1px solid var(--bs-border-color) !important;
4
+ }
5
+
6
+ .ce-toolbar__plus,
7
+ .ce-toolbar__settings-btn,
8
+ .ce-popover-item__title,
9
+ .ce-popover-item__icon,
10
+ .cdx-search-field__input {
11
+ color: var(--app-default-text-color);
12
+ }
13
+
14
+ .cdx-search-field.ce-popover__search {
15
+ background-color: var(--app-layer-two);
16
+ border-color: var(--bs-border-color);
17
+ }
18
+
19
+ .ce-popover-item--active {
20
+ background-color: var(--app-bg-accent-soft) !important;
21
+ }
22
+
23
+ .ce-popover-item--active .ce-popover-item__title,
24
+ .ce-popover-item--active .ce-popover-item__icon {
25
+ color: var(--app-accent-dark) !important;
26
+ }
27
+
28
+ .cdx-block,
29
+ .ce-block {
30
+ color: var(--app-default-text-color);
31
+ }
32
+
33
+ .ce-inline-toolbar,
34
+ .ce-conversion-tool__icon,
35
+ .ce-popover-item__icon {
36
+ color: var(--app-default-text-color);
37
+ background-color: inherit;
38
+ border-color: var(--bs-border-color);
39
+ }
40
+
41
+ .ce-popover,
42
+ .ce-conversion-toolbar,
43
+ .ce-inline-toolbar {
44
+ background-color: var(--app-layer-one);
45
+ border-color: var(--bs-border-color);
46
+ box-shadow: 0 3px 15px -3px var(--bs-border-color);
47
+ }
48
+
49
+ .ce-inline-tool:hover,
50
+ .ce-inline-toolbar__dropdown:hover,
51
+ .ce-toolbar__plus:hover,
52
+ .ce-toolbar__settings-btn:hover,
53
+ .ce-conversion-tool:hover,
54
+ .ce-popover-item:hover {
55
+ background-color: var(--app-layer-three) !important;
56
+ }
57
+
58
+ *::selection,
59
+ .ce-block.ce-block--selected .ce-block__content {
60
+ background-color: var(--app-bg-accent-soft) !important;
61
+ }
62
+
63
+ .ce-popover__items {
64
+ scrollbar-color: var(--bs-border-color) var(--app-layer-one);
65
+
66
+ /* Safari and Chrome */
67
+ &::-webkit-scrollbar {
68
+ width: 8px;
69
+ }
70
+
71
+ &::-webkit-scrollbar-track {
72
+ background: var(--app-layer-one);
73
+ }
74
+
75
+ &::-webkit-scrollbar-thumb {
76
+ background-color: var(--bs-border-color);
77
+ border-radius: 4px;
78
+ }
79
+
80
+ }
81
+
82
+ .ce-popover-item-separator__line {
83
+ background: var(--bs-border-color) !important;
84
+ }
85
+
86
+ @media (max-width: 650px) {
87
+ .ce-toolbar__settings-btn,
88
+ .ce-toolbar__plus {
89
+ background-color: var(--app-layer-one);
90
+ border-color: var(--bs-border-color);
91
+ box-shadow: 0 3px 15px -3px var(--bs-border-color);
92
+ }
93
+ }
@@ -75,7 +75,6 @@ function create_editorjs_instance({holder_id, update_url, initial_editor_blocks}
75
75
  if (block_id) {
76
76
  setTimeout(() => {
77
77
  const element = document.querySelector(`[data-id="${block_id}"]`)
78
- console.log('element', element)
79
78
  if (element) {
80
79
  element.scrollIntoView({behavior: 'smooth', block: 'center'})
81
80
  element.style.transition = 'background-color 1s ease'
@@ -18,4 +18,3 @@
18
18
  No Items Found
19
19
  {% endfor %}
20
20
  {% endblock %}
21
-
@@ -16,13 +16,6 @@
16
16
  :class="{'ms-4': collection.parent.id !== -1}"
17
17
  class="mb-1 collection"
18
18
  >
19
- <div x-data="{
20
- init() {
21
- console.log(collection)
22
- }
23
- }">
24
-
25
- </div>
26
19
  {% include 'django_spire/knowledge/sub_navigation/item/collection_sub_navigation_item.html' %}
27
20
 
28
21
  <div x-show="is_expanded(collection.id)" class="my-1">
@@ -11,7 +11,6 @@
11
11
  await this.collection.get()
12
12
  this.collection.glue_fields.parent.choices = await this.collection_query_set.to_choices()
13
13
  this.collection.glue_fields.parent.label = 'Parent Collection'
14
- console.log(this.collection.parent)
15
14
 
16
15
  if (!this.collection.parent) {
17
16
  this.collection.parent = {{ collection_parent_pk|default:'null' }}
@@ -64,15 +64,11 @@
64
64
  x-data="{
65
65
  editor_element_id: 'knowledge-entry-version-editor',
66
66
  init() {
67
- console.log('Editor blocks:', {{ version_blocks }})
68
67
  KNOWLEDGE_ENTRY_VERSION_EDITOR = create_editorjs_instance({
69
68
  holder_id: this.editor_element_id,
70
69
  initial_editor_blocks: {{ version_blocks }},
71
70
  update_url: '{% url "django_spire:knowledge:entry:version:json:update_blocks" pk=entry.id %}'
72
71
  })
73
- console.log('Editor initialized:', KNOWLEDGE_ENTRY_VERSION_EDITOR)
74
- console.log(KNOWLEDGE_ENTRY_VERSION_EDITOR)
75
-
76
72
  }
77
73
 
78
74
  }"
@@ -3,6 +3,10 @@
3
3
  {% load static %}
4
4
  {% load spire_core_tags %}
5
5
 
6
+ {% block base_head_additional_css %}
7
+ <link href="{% static 'django_spire/knowledge/css/editor.css' %}?v={{ DJANGO_SPIRE_VERSION }}" rel="stylesheet">
8
+ {% endblock %}
9
+
6
10
  {% block base_body_additional_top_js %}
7
11
  {{ block.super }}
8
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-spire
3
- Version: 0.22.2
3
+ Version: 0.22.4
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=c5Hs-7lk9T15254tOasiQ2ZTFLQIVJof9_QJDfm1PAI,933
3
- django_spire/consts.py,sha256=1J7ryfVhX7ewZWLdT-crPPUphnRDSFPBY8tn8WUekUo,171
3
+ django_spire/consts.py,sha256=EAUGXdT7Q7gQlKrDajxHIirS4sdyHaD3WfcplzxrLRk,171
4
4
  django_spire/exceptions.py,sha256=L5ndRO5ftMmh0pHkO2z_NG3LSGZviJ-dDHNT73SzTNw,48
5
5
  django_spire/settings.py,sha256=B4GPqBGt_dmkt0Ay0j-IP-SZ6mY44m2Ap5kVSON5YLA,1005
6
6
  django_spire/urls.py,sha256=mKeZszb5U4iIGqddMb5Tt5fRC72U2wABEOi6mvOfEBU,656
@@ -833,7 +833,7 @@ django_spire/knowledge/collection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
833
833
  django_spire/knowledge/collection/admin.py,sha256=9OKEgiSDiSHX6ZwB11l6mCx-jdF4VKfOe-SwFBdjKK4,1370
834
834
  django_spire/knowledge/collection/forms.py,sha256=7JovVxNzE67hSydDa-1JGK4U4zPyzOj605QyEl0JkP8,238
835
835
  django_spire/knowledge/collection/models.py,sha256=69ol2B-ytH6mJ48afFywPhENQNnM37gAsX-Grjim-g4,2387
836
- django_spire/knowledge/collection/querysets.py,sha256=8DWTGvo4WovXQ9n7XRLoxtyDdBUka2N-kcPUnJVOhOo,2479
836
+ django_spire/knowledge/collection/querysets.py,sha256=JzrCudpAzO45cVt-sqdXva8LMJB5wiwSL1zS2eki47E,2485
837
837
  django_spire/knowledge/collection/seeding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
838
838
  django_spire/knowledge/collection/seeding/seed.py,sha256=i4VEvScJvZ1SUV9ukKZp0qdh_owyLyVSHGgl8vIzhwQ,303
839
839
  django_spire/knowledge/collection/seeding/seeder.py,sha256=Zgrl-S0iAwK6LU2pMmRIdr87kAvrPtQ7GLJlONUSBlM,1523
@@ -841,9 +841,10 @@ django_spire/knowledge/collection/services/__init__.py,sha256=47DEQpj8HBSa-_TImW
841
841
  django_spire/knowledge/collection/services/factory_service.py,sha256=92DLZODSRPF-iA9r3Jgys2GzbC39KssGEk9eOJ5wZjs,1298
842
842
  django_spire/knowledge/collection/services/ordering_service.py,sha256=vTkSdt1lVT4VxSK3GhZibj8FPDDy5butwPkVzqmm07g,1243
843
843
  django_spire/knowledge/collection/services/processor_service.py,sha256=3ArKBndoL3HEvH_1EBqfiw7AnbFYZ0WmBgcPV8BHdLQ,911
844
- django_spire/knowledge/collection/services/service.py,sha256=sEamdqRcKdNcL6yz18hok0jww3Z4VRCPWrMF2QLvKGE,1830
844
+ django_spire/knowledge/collection/services/service.py,sha256=g2agKPcnoccjjAw0P5Sj9CVYOA6qU4vNZwn0g4hFvE4,1962
845
845
  django_spire/knowledge/collection/services/tag_service.py,sha256=o1HnL0-du0XCGIl_8nMGMgW9AzEQE-AWbGOoBN_cQb0,1774
846
- django_spire/knowledge/collection/services/transformation_service.py,sha256=ME_jYURSG7at4oujTbcRzIVXyKnb75Xi6M4Nclbw6Yo,3464
846
+ django_spire/knowledge/collection/services/tool_services.py,sha256=tnOL23zJ_x7vKBH4PtR7a0AzYnmfLxHcEpYHIWzu9Kc,984
847
+ django_spire/knowledge/collection/services/transformation_service.py,sha256=KDCLBSdT9sszjtwtDO2yWdT-iwGpxmCwhIRN6MvEvTU,3450
847
848
  django_spire/knowledge/collection/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
848
849
  django_spire/knowledge/collection/tests/factories.py,sha256=NUu4OliEZIQL9c05RPIPdzYP3Dtn1szLZxP4Wl-kX2w,429
849
850
  django_spire/knowledge/collection/tests/test_services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -857,7 +858,7 @@ django_spire/knowledge/collection/urls/form_urls.py,sha256=yHU3sbaA3w-m9rVvon6nX
857
858
  django_spire/knowledge/collection/urls/json_urls.py,sha256=XZp5wt8m9x38Uuy1dhegqZ4qlJLZK2EgJsLltx97o0Q,195
858
859
  django_spire/knowledge/collection/urls/page_urls.py,sha256=M8zZJJzVmMx7QUc3uGIrjyb8-Kz00fz7u0mHYqFZf3M,280
859
860
  django_spire/knowledge/collection/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
860
- django_spire/knowledge/collection/views/form_views.py,sha256=ziQhlrLEJ62VzYiIAApd0ZThM2jc-who-qw0_BlO-VI,3014
861
+ django_spire/knowledge/collection/views/form_views.py,sha256=jh9pV6SBF7gqflvFooKVU4EFS34eTqRK-Nt22iqAlRg,3038
861
862
  django_spire/knowledge/collection/views/json_views.py,sha256=uzSD83O7p-L5Oh8jo_Ejh-4lbo5zXjLkZGe0cn6SXSw,1030
862
863
  django_spire/knowledge/collection/views/page_views.py,sha256=jiKsIqi9pvSY5KbLLGDdTHSPHXmnd-7oyYXckF2ONh4,2045
863
864
  django_spire/knowledge/entry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -973,16 +974,17 @@ django_spire/knowledge/seeding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
973
974
  django_spire/knowledge/seeding/seed.py,sha256=LRhVfPHiFluSLLtjSY44YM9Oo1Hvfs_U-ksRvKk7pOg,97
974
975
  django_spire/knowledge/static/django_spire/knowledge/collection/js/managers.js,sha256=1b0pRPYJvYjKKZB2wshdoseAUR3_Al-2qxFUWE5q-oo,4319
975
976
  django_spire/knowledge/static/django_spire/knowledge/collection/js/x_component.js,sha256=avczuHac3i58k06wA-LPpgupedCYbuDVTjTYVjEho18,898
977
+ django_spire/knowledge/static/django_spire/knowledge/css/editor.css,sha256=9iDzPcMvf462CjfnOkdAFHBfRFt2io8HAyIQfwoSlug,2189
976
978
  django_spire/knowledge/static/django_spire/knowledge/css/navigation_items.css,sha256=jhjW4fiQI13PUAkSupLrLn-Fu9nzAVqMezK8EkJnGZ8,178
977
- django_spire/knowledge/static/django_spire/knowledge/entry/version/js/editor.js,sha256=FjcLWrZRRNyDIRE43hqbtlo3Thypzk2GD3uBPzl1SNI,3858
979
+ django_spire/knowledge/static/django_spire/knowledge/entry/version/js/editor.js,sha256=zDK9PNO7XR0j95I17uBmfguSF8LzYijx3irM2my3IqA,3798
978
980
  django_spire/knowledge/static/django_spire/knowledge/entry/version/js/managers.js,sha256=q-HiSnOnMMomxU0EAWSbQO55HMVvb8wPxA0KCP3VyP4,2772
979
981
  django_spire/knowledge/static/django_spire/knowledge/entry/version/js/null_paragraph.js,sha256=Bc0oslLdlLcncbcUklhU1RF4PGiByC-mH-ENq1S1Niw,211
980
982
  django_spire/knowledge/templates/django_spire/knowledge/collection/card/form_card.html,sha256=Fm1PFgMJO0B1ji86pjeL_KbGkKq-ho7n6v9gtCODlzU,154
981
- django_spire/knowledge/templates/django_spire/knowledge/collection/card/top_level_list_card.html,sha256=LeE67fpcF8OfOXnjOp1199RWunX4pAFbqgVV_wdK9gY,696
982
- django_spire/knowledge/templates/django_spire/knowledge/collection/component/x_collection_navigation.html,sha256=ozztAZ_dfBHDh13thPkmZK1w1neHKht_cnbypUB1e8U,2590
983
+ django_spire/knowledge/templates/django_spire/knowledge/collection/card/top_level_list_card.html,sha256=RFcSfk37OpuyRTdb3UjQc6ntyE5Rt3_2BgLEoD1mI3Y,695
984
+ django_spire/knowledge/templates/django_spire/knowledge/collection/component/x_collection_navigation.html,sha256=3lHzZ1pD-SWVGnzquczsVaAswli8FM7PSQNiLmg0Pn4,2415
983
985
  django_spire/knowledge/templates/django_spire/knowledge/collection/container/detail_container.html,sha256=0T1L7mRyAH-I04_8rmyL6ZbsT1TWcIGzZ-NnGPllRco,321
984
986
  django_spire/knowledge/templates/django_spire/knowledge/collection/element/ellipsis_dropdown.html,sha256=o9cceexfwUSDtac4uhlUm4LimnBQrgTP6QPkpJF6DD0,1376
985
- django_spire/knowledge/templates/django_spire/knowledge/collection/form/form.html,sha256=gDjvFBpNQHGn4PNJBi4pBw89-IakpyrC23D9dr0xQ-c,1902
987
+ django_spire/knowledge/templates/django_spire/knowledge/collection/form/form.html,sha256=o015wNWZCsdqafvdjzsdOS3xUo2UtkyHaXn9-2N2s4s,1854
986
988
  django_spire/knowledge/templates/django_spire/knowledge/collection/item/collection_item.html,sha256=gaOqh1wxf5IcWdxWWiYyz6HWjoPyn6FohaTMIssJ67k,517
987
989
  django_spire/knowledge/templates/django_spire/knowledge/collection/page/display_page.html,sha256=AzYod7og_yU_lfxWIRFC2R_ga_jwH_Cr4VE07sRlGT8,2400
988
990
  django_spire/knowledge/templates/django_spire/knowledge/collection/page/form_page.html,sha256=eD190iYnmx-6u8Y0EAExDdilPtxTlS_ic6-WBfTtj2s,274
@@ -1000,8 +1002,8 @@ django_spire/knowledge/templates/django_spire/knowledge/entry/item/list_item.htm
1000
1002
  django_spire/knowledge/templates/django_spire/knowledge/entry/modal/publish_confirm_modal.html,sha256=7SsTjvk_iOdBgnYy83pMBPIdbuvJadd4h5XI5mPos5o,724
1001
1003
  django_spire/knowledge/templates/django_spire/knowledge/entry/page/form_page.html,sha256=EBfDjDBvo7IR6f5joTtZjzK5LtZb4rt0U1FO1HQNt88,291
1002
1004
  django_spire/knowledge/templates/django_spire/knowledge/entry/page/import_form_page.html,sha256=TK8Bc7mUZwsmV1Xm9FPyWz7Hws68Ijy4c55orvNoOC4,308
1003
- django_spire/knowledge/templates/django_spire/knowledge/entry/version/container/editor_container.html,sha256=NAtXEq8UJOV9_vp3l5HIIdQp-lZhNVW4luF0Nvv8Sl8,3389
1004
- django_spire/knowledge/templates/django_spire/knowledge/entry/version/page/editor_page.html,sha256=Gc5uYGjYJR8nwaLa0hm-5GHO3ezI9CLO0H_OLp8EvdE,3092
1005
+ django_spire/knowledge/templates/django_spire/knowledge/entry/version/container/editor_container.html,sha256=-fPVVnCdDUMA0AoKjQ3bA7gRrbnggPRlRlPqYvgIoKA,3153
1006
+ django_spire/knowledge/templates/django_spire/knowledge/entry/version/page/editor_page.html,sha256=uAIz2OP9AXah7xbZv_ukjGuKwPH330CqTBmnWGNXBMs,3262
1005
1007
  django_spire/knowledge/templates/django_spire/knowledge/message/knowledge_message_intel.html,sha256=kOSsRJHkh8hFYp1k1Y0wc-wh75VVjdXldEKErkfANGY,855
1006
1008
  django_spire/knowledge/templates/django_spire/knowledge/page/full_page.html,sha256=vz3WQ6SAL43QALRf0haaLfNkUfIQQemR0FAZQ2tznV4,1331
1007
1009
  django_spire/knowledge/templates/django_spire/knowledge/page/home_page.html,sha256=LMGSoPuP4N0NMX9QB1r5qJaExDvt6IKlJNp69Dt2EeQ,293
@@ -1161,8 +1163,8 @@ django_spire/theme/urls/page_urls.py,sha256=S8nkKkgbhG3XHI3uMUL-piOjXIrRkuY2UlM_
1161
1163
  django_spire/theme/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1162
1164
  django_spire/theme/views/json_views.py,sha256=W1khC2K_EMbEzAFmMxC_P76_MFnkRH4-eVdodrRfAhw,1904
1163
1165
  django_spire/theme/views/page_views.py,sha256=pHr8iekjtR99xs7w1taj35HEo133Svq1dvDD0y0VL1c,3933
1164
- django_spire-0.22.2.dist-info/licenses/LICENSE.md,sha256=tlTbOtgKoy-xAQpUk9gPeh9O4oRXCOzoWdW3jJz0wnA,1091
1165
- django_spire-0.22.2.dist-info/METADATA,sha256=x7u7O7BVs3ABSXG2JluNWbD6vZ08dKZT5pIOVmY9Sj4,4967
1166
- django_spire-0.22.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1167
- django_spire-0.22.2.dist-info/top_level.txt,sha256=xf3QV1e--ONkVpgMDQE9iqjQ1Vg4--_6C8wmO-KxPHQ,13
1168
- django_spire-0.22.2.dist-info/RECORD,,
1166
+ django_spire-0.22.4.dist-info/licenses/LICENSE.md,sha256=tlTbOtgKoy-xAQpUk9gPeh9O4oRXCOzoWdW3jJz0wnA,1091
1167
+ django_spire-0.22.4.dist-info/METADATA,sha256=oPznU0Kjxk-EDLKt3e1TUWnN-HoCr3w4hb3MiVN875s,4967
1168
+ django_spire-0.22.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1169
+ django_spire-0.22.4.dist-info/top_level.txt,sha256=xf3QV1e--ONkVpgMDQE9iqjQ1Vg4--_6C8wmO-KxPHQ,13
1170
+ django_spire-0.22.4.dist-info/RECORD,,