django-spire 0.17.5__py3-none-any.whl → 0.17.7__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 (45) hide show
  1. django_spire/consts.py +1 -1
  2. django_spire/core/templates/django_spire/dropdown/element/dropdown_link_element.html +5 -2
  3. django_spire/knowledge/collection/models.py +1 -1
  4. django_spire/knowledge/collection/tests/test_urls/test_page_urls.py +1 -11
  5. django_spire/knowledge/collection/urls/page_urls.py +0 -2
  6. django_spire/knowledge/collection/views/form_views.py +1 -1
  7. django_spire/knowledge/collection/views/page_views.py +1 -53
  8. django_spire/knowledge/entry/version/views/form_views.py +1 -8
  9. django_spire/knowledge/entry/version/views/page_views.py +1 -9
  10. django_spire/knowledge/entry/views/form_views.py +3 -11
  11. django_spire/knowledge/entry/views/page_views.py +1 -4
  12. django_spire/knowledge/entry/views/template_views.py +1 -18
  13. django_spire/knowledge/templates/django_spire/knowledge/collection/component/x_collection_navigation.html +20 -12
  14. django_spire/knowledge/templates/django_spire/knowledge/collection/page/form_page.html +2 -2
  15. django_spire/knowledge/templates/django_spire/knowledge/entry/file/page/list_page.html +1 -1
  16. django_spire/knowledge/templates/django_spire/knowledge/entry/page/form_page.html +2 -2
  17. django_spire/knowledge/templates/django_spire/knowledge/entry/page/import_form_page.html +2 -2
  18. django_spire/knowledge/templates/django_spire/knowledge/entry/version/page/detail_page.html +2 -2
  19. django_spire/knowledge/templates/django_spire/knowledge/entry/version/page/form_page.html +1 -1
  20. django_spire/knowledge/templates/django_spire/knowledge/{collection → navigation}/card/navigation_card.html +1 -1
  21. django_spire/knowledge/templates/django_spire/knowledge/{collection/navigation/navigation.html → navigation/content/navigation_content.html} +60 -54
  22. django_spire/knowledge/templates/django_spire/knowledge/navigation/item/collection/collection_item.html +29 -0
  23. django_spire/knowledge/templates/django_spire/knowledge/navigation/item/collection/dropdown/navigation_ellipsis_dropdown.html +15 -0
  24. django_spire/knowledge/templates/django_spire/knowledge/navigation/item/entry/dropdown/navigation_ellipsis_dropdown.html +12 -0
  25. django_spire/knowledge/templates/django_spire/knowledge/navigation/item/entry/entry_item.html +18 -0
  26. django_spire/knowledge/templates/django_spire/knowledge/navigation/page/full_page.html +85 -0
  27. django_spire/knowledge/templates/django_spire/knowledge/page/home_page.html +11 -0
  28. django_spire/knowledge/urls/__init__.py +1 -0
  29. django_spire/knowledge/urls/page_urls.py +10 -0
  30. django_spire/knowledge/views/__init__.py +0 -0
  31. django_spire/knowledge/views/page_views.py +18 -0
  32. {django_spire-0.17.5.dist-info → django_spire-0.17.7.dist-info}/METADATA +2 -2
  33. {django_spire-0.17.5.dist-info → django_spire-0.17.7.dist-info}/RECORD +36 -36
  34. django_spire/knowledge/templates/django_spire/knowledge/collection/card/collection_card.html +0 -50
  35. django_spire/knowledge/templates/django_spire/knowledge/collection/card/context_menu_card.html +0 -39
  36. django_spire/knowledge/templates/django_spire/knowledge/collection/navigation/content/navigation_content.html +0 -64
  37. django_spire/knowledge/templates/django_spire/knowledge/collection/navigation/item/collection_item.html +0 -24
  38. django_spire/knowledge/templates/django_spire/knowledge/collection/page/detail_page.html +0 -9
  39. django_spire/knowledge/templates/django_spire/knowledge/collection/page/list_page.html +0 -23
  40. django_spire/knowledge/templates/django_spire/knowledge/entry/card/context_menu_card.html +0 -39
  41. django_spire/knowledge/templates/django_spire/knowledge/entry/navigation/item/navigation_item.html +0 -8
  42. django_spire/knowledge/templates/django_spire/knowledge/page/full_page.html +0 -66
  43. {django_spire-0.17.5.dist-info → django_spire-0.17.7.dist-info}/WHEEL +0 -0
  44. {django_spire-0.17.5.dist-info → django_spire-0.17.7.dist-info}/licenses/LICENSE.md +0 -0
  45. {django_spire-0.17.5.dist-info → django_spire-0.17.7.dist-info}/top_level.txt +0 -0
django_spire/consts.py CHANGED
@@ -1,4 +1,4 @@
1
- __VERSION__ = '0.17.5'
1
+ __VERSION__ = '0.17.7'
2
2
 
3
3
 
4
4
  AI_CHAT_WORKFLOW_SENDER_SETTINGS_NAME = 'AI_CHAT_WORKFLOW_NAME'
@@ -1,7 +1,7 @@
1
1
  {# Background colours must be applied outside 'a' tag #}
2
2
  <div class="bg-app-layer-one bg-app-layer-three-hover dropdown-item">
3
3
  <a
4
- class="fs--1 p-0 cursor-pointer text-decoration-none text-app-default-text-color"
4
+ class="fs-7 p-0 cursor-pointer text-decoration-none text-app-default-text-color"
5
5
  {% if link_url %}href="{{ link_url }}"{% endif %}
6
6
  {% if x_link_url %}
7
7
  x-show="{{ x_link_url }} ? true : false"
@@ -13,7 +13,10 @@
13
13
  }"
14
14
  >
15
15
  {% block link_content %}
16
- <div class="px-3 py-1 text-nowrap {{ link_css }}">
16
+ <div class="px-3 py-2 text-nowrap {{ link_css }}">
17
+ {% if link_icon %}
18
+ <i class="{{ link_icon }} pe-1"></i>
19
+ {% endif %}
17
20
  {% if link_text %}
18
21
  {{ link_text }}
19
22
  {% elif x_link_text %}
@@ -35,7 +35,7 @@ class Collection(HistoryModelMixin, OrderingModelMixin):
35
35
  db_table = 'django_spire_knowledge_collection'
36
36
  permissions = [
37
37
  ('can_access_all_collections', 'Can Access All Collections'),
38
- ('can_change_collection_groups', 'Can Change Collection Groups')
38
+ ('can_change_collection_groups', 'Can Change Collection Groups'),
39
39
  ]
40
40
 
41
41
 
@@ -21,19 +21,9 @@ class CollectionPageUrlsTests(BaseTestCase):
21
21
 
22
22
  self.assertEqual(response.status_code, 200)
23
23
 
24
- def test_detail_view_url_path(self):
25
- response = self.client.get(
26
- reverse(
27
- 'django_spire:knowledge:collection:page:detail',
28
- kwargs={'pk': self.test_collection.pk}
29
- )
30
- )
31
-
32
- self.assertEqual(response.status_code, 200)
33
-
34
24
  def test_list_view_url_path(self):
35
25
  response = self.client.get(
36
- reverse('django_spire:knowledge:collection:page:list')
26
+ reverse('django_spire:knowledge:page:home')
37
27
  )
38
28
 
39
29
  self.assertEqual(response.status_code, 200)
@@ -7,6 +7,4 @@ app_name = 'page'
7
7
 
8
8
  urlpatterns = [
9
9
  path('<int:pk>/delete/', page_views.delete_view, name='delete'),
10
- path('<int:pk>/detail/', page_views.detail_view, name='detail'),
11
- path('list/', page_views.list_view, name='list'),
12
10
  ]
@@ -60,7 +60,7 @@ def form_view(
60
60
  )
61
61
 
62
62
  return HttpResponseRedirect(
63
- reverse('django_spire:knowledge:collection:page:list')
63
+ reverse('django_spire:knowledge:page:home')
64
64
  )
65
65
 
66
66
  show_form_errors(request, form)
@@ -20,58 +20,6 @@ def delete_view(request: WSGIRequest, pk: int) -> TemplateResponse:
20
20
  delete_func=collection.services.processor.set_deleted,
21
21
  return_url=request.GET.get(
22
22
  'return_url',
23
- reverse('django_spire:knowledge:collection:page:list')
23
+ reverse('django_spire:knowledge:page:home')
24
24
  )
25
25
  )
26
-
27
-
28
- @AppAuthController('knowledge').permission_required('can_view')
29
- def detail_view(request: WSGIRequest, pk: int) -> TemplateResponse:
30
- collection = get_object_or_404(Collection, pk=pk)
31
-
32
- def breadcrumbs_func(breadcrumbs):
33
- breadcrumbs.add_breadcrumb(name='Knowledge')
34
- breadcrumbs.add_breadcrumb(
35
- name='Collections',
36
- href=reverse('django_spire:knowledge:collection:page:list')
37
- )
38
-
39
- if collection.parent_id is not None:
40
- parent = collection.parent
41
- breadcrumbs.add_breadcrumb(
42
- name=parent.name,
43
- href=reverse(
44
- viewname='django_spire:knowledge:collection:page:detail',
45
- kwargs={'pk': parent.pk}
46
- )
47
- )
48
-
49
- breadcrumbs.add_breadcrumb(name=collection.name)
50
-
51
- return portal_views.detail_view(
52
- request,
53
- obj=collection,
54
- breadcrumbs_func=breadcrumbs_func,
55
- context_data={
56
- 'collection': collection,
57
- 'current_entries': (
58
- collection.entries
59
- .active()
60
- .has_current_version()
61
- .user_has_access(user=request.user)
62
- .select_related('current_version__author')
63
- .order_by('order')
64
- )
65
- },
66
- template='django_spire/knowledge/collection/page/detail_page.html'
67
- )
68
-
69
-
70
- @AppAuthController('knowledge').permission_required('can_view')
71
- def list_view(request: WSGIRequest) -> TemplateResponse:
72
- return portal_views.list_view(
73
- request,
74
- model=Collection,
75
- context_data={},
76
- template='django_spire/knowledge/collection/page/list_page.html'
77
- )
@@ -34,14 +34,7 @@ def update_form_view(request: WSGIRequest, pk: int) -> TemplateResponse:
34
34
  breadcrumbs.add_breadcrumb(name='Knowledge')
35
35
  breadcrumbs.add_breadcrumb(
36
36
  name='Collections',
37
- href=reverse('django_spire:knowledge:collection:page:list')
38
- )
39
- breadcrumbs.add_breadcrumb(
40
- name=entry.collection.name,
41
- href=reverse(
42
- 'django_spire:knowledge:collection:page:detail',
43
- kwargs={'pk': entry.collection_id}
44
- )
37
+ href=reverse('django_spire:knowledge:page:home')
45
38
  )
46
39
  breadcrumbs.add_breadcrumb(
47
40
  name=f'View {entry.name}',
@@ -20,16 +20,8 @@ def detail_view(request: WSGIRequest, pk: int) -> TemplateResponse:
20
20
  breadcrumbs.add_breadcrumb(name='Knowledge')
21
21
  breadcrumbs.add_breadcrumb(
22
22
  name='Collections',
23
- href=reverse('django_spire:knowledge:collection:page:list')
23
+ href=reverse('django_spire:knowledge:page:home')
24
24
  )
25
- breadcrumbs.add_breadcrumb(
26
- name=entry.collection.name,
27
- href=reverse(
28
- 'django_spire:knowledge:collection:page:detail',
29
- kwargs={'pk': entry.collection.pk}
30
- )
31
- )
32
- breadcrumbs.add_breadcrumb(name=f'View {entry.name}')
33
25
 
34
26
  return portal_views.detail_view(
35
27
  request,
@@ -33,12 +33,12 @@ def form_view(
33
33
 
34
34
  if form.is_valid():
35
35
  form.cleaned_data['collection'] = collection
36
- _, _ = entry.services.save_model_obj(author=request.user, **form.cleaned_data)
36
+ entry, _ = entry.services.save_model_obj(author=request.user, **form.cleaned_data)
37
37
 
38
38
  return HttpResponseRedirect(
39
39
  reverse(
40
- 'django_spire:knowledge:collection:page:detail',
41
- kwargs={'pk': collection.pk}
40
+ 'django_spire:knowledge:entry:version:page:detail',
41
+ kwargs={'pk': entry.pk}
42
42
  )
43
43
  )
44
44
 
@@ -105,14 +105,6 @@ def import_form_view(
105
105
  show_form_errors(request, file_form)
106
106
 
107
107
  breadcrumbs = Breadcrumbs()
108
- if collection_pk != 0:
109
- breadcrumbs.add_breadcrumb(
110
- name=Collection.objects.get(pk=collection_pk).name,
111
- href=reverse(
112
- 'django_spire:knowledge:collection:page:detail',
113
- kwargs={'pk': collection_pk}
114
- )
115
- )
116
108
  breadcrumbs.add_breadcrumb(name='Import Files')
117
109
  supported_file_types = [
118
110
  '.' + file_type for file_type in list(FILE_TYPE_CONVERTER_MAP.keys())
@@ -18,9 +18,6 @@ def delete_view(request: WSGIRequest, pk: int) -> TemplateResponse:
18
18
  delete_func=entry.services.processor.set_deleted,
19
19
  return_url=request.GET.get(
20
20
  'return_url',
21
- reverse(
22
- 'django_spire:knowledge:collection:page:detail',
23
- kwargs={'pk': entry.collection.pk}
24
- )
21
+ reverse('django_spire:knowledge:page:home')
25
22
  )
26
23
  )
@@ -18,26 +18,9 @@ def file_list_view(request: WSGIRequest, collection_pk: int = 0) -> TemplateResp
18
18
 
19
19
  breadcrumbs.add_breadcrumb(
20
20
  name='Collections',
21
- href=reverse('django_spire:knowledge:collection:page:list')
21
+ href=reverse('django_spire:knowledge:page:home')
22
22
  )
23
23
 
24
- if collection.parent_id is not None:
25
- parent = collection.parent
26
- breadcrumbs.add_breadcrumb(
27
- name=parent.name,
28
- href=reverse(
29
- viewname='django_spire:knowledge:collection:page:detail',
30
- kwargs={'pk': parent.pk}
31
- )
32
- )
33
-
34
- breadcrumbs.add_breadcrumb(
35
- name=collection.name,
36
- href=reverse(
37
- viewname='django_spire:knowledge:collection:page:detail',
38
- kwargs={'pk': collection.pk}
39
- )
40
- )
41
24
  breadcrumbs.add_breadcrumb(name='Importing Files')
42
25
 
43
26
  return TemplateResponse(
@@ -1,33 +1,41 @@
1
1
  <template x-component="collection-navigation">
2
2
  <div
3
- x-sort="await move_collection({collection: $item, order: $position, new_parent: data.id})"
4
- x-sort:group="collection"
3
+ {% if AuthController.knowledge.can_change %}
4
+ x-sort="await move_collection({collection: $item, order: $position, new_parent: data.id})"
5
+ x-sort:group="collection"
6
+ {% endif %}
5
7
  >
6
8
  <template x-for="collection in data.items" :key="collection.id">
7
9
  <div
8
- x-sort:item="collection"
10
+ {% if AuthController.knowledge.can_change %}
11
+ x-sort:item="collection"
12
+ @dragstart="toggle_dragging(true)"
13
+ @dragend="toggle_dragging(false)"
14
+ {% endif %}
9
15
  :id="collection.name"
10
16
  class="my-1 ms-4 collection"
11
- @dragstart="toggle_dragging(true)"
12
- @dragend="toggle_dragging(false)"
13
17
  >
14
- {% include 'django_spire/knowledge/collection/navigation/item/collection_item.html' %}
18
+ {% include 'django_spire/knowledge/navigation/item/collection/collection_item.html' %}
15
19
  <div x-show="collection.show_details" class="my-1">
16
20
  <x-collection-navigation :data="{items: collection.children, id: collection.id}"></x-collection-navigation>
17
21
  <div class="ms-4">
18
22
  <div
19
- x-sort="await move_entry({entry: $item, collection: collection, order: $position})"
20
- x-sort:group="entry"
23
+ {% if AuthController.knowledge.can_change %}
24
+ x-sort="await move_entry({entry: $item, collection: collection, order: $position})"
25
+ x-sort:group="entry"
26
+ {% endif %}
21
27
  >
22
28
  <template x-for="entry in collection.entries" :key="entry.version_id">
23
29
  <div
24
30
  class="entry"
25
- x-sort:item="entry"
31
+ {% if AuthController.knowledge.can_change %}
32
+ x-sort:item="collection"
33
+ @dragstart="toggle_dragging(true)"
34
+ @dragend="toggle_dragging(false)"
35
+ {% endif %}
26
36
  :id="entry.name"
27
- @dragstart="toggle_dragging(true)"
28
- @dragend="toggle_dragging(false)"
29
37
  >
30
- {% include 'django_spire/knowledge/entry/navigation/item/navigation_item.html' %}
38
+ {% include 'django_spire/knowledge/navigation/item/entry/entry_item.html' %}
31
39
  </div>
32
40
  </template>
33
41
  </div>
@@ -1,6 +1,6 @@
1
- {% extends 'django_spire/page/full_page.html' %}
1
+ {% extends 'django_spire/knowledge/navigation/page/full_page.html' %}
2
2
 
3
- {% block full_page_content %}
3
+ {% block knowledge_full_page_content %}
4
4
  <div class="row">
5
5
  <div class="col-12">
6
6
  {% include 'django_spire/knowledge/collection/card/form_card.html' %}
@@ -1,6 +1,6 @@
1
1
  {% extends 'django_spire/page/full_page.html' %}
2
2
 
3
- {% block full_page_content %}
3
+ {% block knowledge_full_page_content %}
4
4
  <div class="row">
5
5
  <div class="col-12">
6
6
  {% include 'django_spire/knowledge/entry/file/card/list_card.html' %}
@@ -1,6 +1,6 @@
1
- {% extends 'django_spire/page/full_page.html' %}
1
+ {% extends 'django_spire/knowledge/navigation/page/full_page.html' %}
2
2
 
3
- {% block full_page_content %}
3
+ {% block knowledge_full_page_content %}
4
4
  <div class="row">
5
5
  <div class="col-12">
6
6
  {% include 'django_spire/knowledge/entry/card/form_card.html' %}
@@ -1,6 +1,6 @@
1
- {% extends 'django_spire/page/full_page.html' %}
1
+ {% extends 'django_spire/knowledge/navigation/page/full_page.html' %}
2
2
 
3
- {% block full_page_content %}
3
+ {% block knowledge_full_page_content %}
4
4
  <div class="row">
5
5
  <div class="col-12">
6
6
  {% include 'django_spire/knowledge/entry/container/import_form_container.html' %}
@@ -1,8 +1,8 @@
1
- {% extends 'django_spire/knowledge/page/full_page.html' %}
1
+ {% extends 'django_spire/knowledge/navigation/page/full_page.html' %}
2
2
 
3
3
  {% block knowledge_full_page_content %}
4
4
  <div class="row justify-content-center ps-3">
5
- <div class="col-12 col-xl-8">
5
+ <div class="col-12 col-xl-8'">
6
6
  {% include 'django_spire/knowledge/entry/version/container/detail_container.html' %}
7
7
  </div>
8
8
  </div>
@@ -1,4 +1,4 @@
1
- {% extends 'django_spire/knowledge/page/full_page.html' %}
1
+ {% extends 'django_spire/knowledge/navigation/page/full_page.html' %}
2
2
 
3
3
  {% load static %}
4
4
 
@@ -5,5 +5,5 @@
5
5
  {% endblock %}
6
6
 
7
7
  {% block card_content %}
8
- {% include 'django_spire/knowledge/collection/navigation/navigation.html' %}
8
+ {% include 'django_spire/knowledge/navigation/content/navigation_content.html' %}
9
9
  {% endblock %}
@@ -2,9 +2,6 @@
2
2
  x-data="{
3
3
  user_search: '',
4
4
  found_items: new Map(),
5
- show_context_menu: false,
6
- x: 0,
7
- y: 0,
8
5
  focused_object: {},
9
6
  focused_type: '',
10
7
  title: '',
@@ -83,57 +80,66 @@
83
80
  this.found_items = item_map
84
81
  }
85
82
  },
86
-
87
-
88
- show_menu({event, type, object}) {
89
- this.x = event.pageX
90
- this.y = event.pageY
91
- this.focused_type = type
92
- this.focused_object = object
93
- this.title = this.focused_object.name
94
- this.show_context_menu = true
95
- },
96
- hide_menu() {
97
- this.show_context_menu = false
98
- this.focused_object = {}
99
- },
100
-
101
- {% if AuthController.knowledge.can_view %}
102
- view_entry() {
103
- window.location.href = this.focused_object.view_url
104
- },
105
- {% endif %}
106
-
107
- {% if AuthController.knowledge.can_change %}
108
- edit_collection() {
109
- window.location.href = this.focused_object.edit_url
110
- },
111
- edit_entry() {
112
- window.location.href = this.focused_object.edit_url
113
- },
114
- edit_entry_version() {
115
- window.location.href = this.focused_object.edit_version_url
116
- },
117
- {% endif %}
118
-
119
- {% if AuthController.knowledge.can_delete %}
120
- delete_entry() {
121
- window.location.href = this.focused_object.delete_url
122
- },
123
- delete_collection() {
124
- window.location.href = this.focused_object.delete_url
125
- },
126
- {% endif %}
127
-
128
- {% if AuthController.knowledge.can_add %}
129
- import_entry() {
130
- window.location.href = this.focused_object.import_entry_url
131
- },
132
- add_entry() {
133
- window.location.href = this.focused_object.create_entry_url
134
- },
135
- {% endif %}
136
83
  }"
137
84
  >
138
- {% include 'django_spire/knowledge/collection/navigation/content/navigation_content.html' %}
85
+ <div class="container-fluid">
86
+ <div class="row align-items-center border-bottom mx-1 pb-2">
87
+ <div class="col px-0 text-uppercase pb-2 d-flex align-items-center">
88
+ Collections
89
+ </div>
90
+ <div class="col-auto px-0 pb-2">
91
+ {% if AuthController.knowledge.can_add %}
92
+ {% url 'django_spire:knowledge:collection:form:create' as create_url %}
93
+ {% include 'django_spire/button/primary_button.html' with button_text='Add' button_href=create_url button_icon="bi bi-plus" %}
94
+ {% endif %}
95
+ </div>
96
+ <div class="col-12 px-0">
97
+ <input
98
+ class="rounded-2 p-1 form-control"
99
+ type="text"
100
+ placeholder="Search ..."
101
+ x-model="user_search"
102
+ @input.debounce.300ms="search"
103
+ >
104
+ </div>
105
+ </div>
106
+ </div>
107
+ <div
108
+ class="user-select-none pe-3"
109
+ x-sort:config="{
110
+ handle: '[x-sort\\:handle]',
111
+ distance: 20,
112
+ swapThreshold: 0.01
113
+ }"
114
+ >
115
+ {% include 'django_spire/knowledge/collection/component/x_collection_navigation.html' %}
116
+
117
+ <div class="navigation-items">
118
+ <x-collection-navigation :data="{items: manager.collection_map, id: null}"></x-collection-navigation>
119
+ </div>
120
+ <div class="search-items">
121
+ <template x-for="(item, index) in Array.from(found_items.values())" :key="index">
122
+ <div>
123
+ <template x-if="item?.constructor.name === 'Collection'">
124
+ <div
125
+ x-data="{
126
+ collection: item
127
+ }"
128
+ >
129
+ {% include 'django_spire/knowledge/navigation/item/collection/collection_item.html' with hide_chevron=True %}
130
+ </div>
131
+ </template>
132
+ <template x-if="item?.constructor.name === 'Entry'">
133
+ <div
134
+ x-data="{
135
+ entry: item
136
+ }"
137
+ >
138
+ {% include 'django_spire/knowledge/navigation/item/entry/entry_item.html' %}
139
+ </div>
140
+ </template>
141
+ </div>
142
+ </template>
143
+ </div>
144
+ </div>
139
145
  </div>
@@ -0,0 +1,29 @@
1
+ <div class="knowledge-nav-item cursor-pointer row">
2
+ <div
3
+ class="col text-start"
4
+ {% if AuthController.knowledge.can_view %}
5
+ @click="collection.toggle_show_details({value: !collection.show_details})"
6
+ {% endif %}
7
+ >
8
+ <i
9
+ :class="collection.show_details ? 'bi bi-chevron-down' : 'bi bi-chevron-right'"
10
+ {% if hide_chevron %}
11
+ style="visibility: hidden"
12
+ {% else %}
13
+ :style="{visibility: (collection.has_child_collections() || collection.has_entries()) ? 'visible' : 'hidden'}"
14
+ {% endif %}
15
+ ></i>
16
+ <i class="bi bi-folder2 fs-5"></i>
17
+ <span
18
+ :class="collection.id === {{ collection.pk|default:0 }} ? 'text-app-accent' : ''"
19
+ x-text="collection.name"
20
+ ></span>
21
+ </div>
22
+ {% if AuthController.knowledge.can_view %}
23
+ <div class="col-auto">
24
+ <div class="d-flex h-100 justify-content-center align-items-center">
25
+ {% include 'django_spire/knowledge/navigation/item/collection/dropdown/navigation_ellipsis_dropdown.html' %}
26
+ </div>
27
+ </div>
28
+ {% endif %}
29
+ </div>
@@ -0,0 +1,15 @@
1
+ {% extends 'django_spire/dropdown/ellipsis_dropdown.html' %}
2
+
3
+ {% block dropdown_content %}
4
+ {% if AuthController.knowledge.can_change %}
5
+ {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_link_url='collection.edit_url' link_icon='bi bi-pencil' link_text='Edit Collection' %}
6
+ {% endif %}
7
+ {% if AuthController.knowledge.can_add %}
8
+ {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_link_url='collection.create_entry_url' link_icon='bi bi-plus' link_text='Add Entry' %}
9
+ {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_link_url='collection.import_entry_url' link_icon='bi bi-upload' link_text='Import Entry' %}
10
+ {% endif %}
11
+ {% if AuthController.knowledge.can_delete %}
12
+ {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_link_url='collection.delete_url' link_icon='bi bi-trash3' link_text='Delete Collection' link_css='text-app-danger' %}
13
+ {% endif %}
14
+ {% endblock %}
15
+
@@ -0,0 +1,12 @@
1
+ {% extends 'django_spire/dropdown/ellipsis_dropdown.html' %}
2
+
3
+ {% block dropdown_content %}
4
+ {% if AuthController.knowledge.can_change %}
5
+ {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_link_url='entry.edit_url' link_icon='bi bi-input-cursor-text' link_text='Rename' %}
6
+ {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_link_url='entry.edit_version_url' link_icon='bi bi-pencil' link_text='Edit' %}
7
+ {% endif %}
8
+ {% if AuthController.knowledge.can_delete %}
9
+ {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_link_url='entry.delete_url' link_icon='bi bi-trash3' link_text='Delete' link_css='text-app-danger' %}
10
+ {% endif %}
11
+ {% endblock %}
12
+
@@ -0,0 +1,18 @@
1
+ <div class="row ms-4 knowledge-nav-item cursor-pointer">
2
+ <a
3
+ class="col text-decoration-none text-black"
4
+ {% if AuthController.knowledge.can_view %}
5
+ :href="'{% url "django_spire:knowledge:entry:version:page:detail" pk=0 %}'.replace(0, entry.version_id)"
6
+ {% endif %}
7
+ >
8
+ <i class="bi bi-file-earmark-text"></i>
9
+ <span class="fw-normal" x-text="entry.name"></span>
10
+ </a>
11
+ {% if AuthController.knowledge.can_view %}
12
+ <div class="col-auto">
13
+ <div class="d-flex h-100 justify-content-center align-items-center">
14
+ {% include 'django_spire/knowledge/navigation/item/entry/dropdown/navigation_ellipsis_dropdown.html' %}
15
+ </div>
16
+ </div>
17
+ {% endif %}
18
+ </div>