django-spire 0.16.9__py3-none-any.whl → 0.16.11__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 (68) hide show
  1. django_spire/ai/chat/templates/django_spire/ai/chat/dropdown/ellipsis_dropdown.html +2 -2
  2. django_spire/ai/chat/templates/django_spire/ai/chat/widget/search_chat_widget.html +1 -1
  3. django_spire/auth/group/templates/django_spire/auth/group/element/group_perm_element.html +50 -32
  4. django_spire/auth/group/templates/django_spire/auth/group/element/group_special_role_element.html +51 -34
  5. django_spire/auth/templates/django_spire/auth/page/login_page.html +8 -9
  6. django_spire/auth/templates/django_spire/auth/page/logout_page.html +1 -1
  7. django_spire/auth/templates/django_spire/auth/page/password_set_form_page.html +1 -1
  8. django_spire/comment/templates/django_spire/comment/element/comment_button_element.html +4 -4
  9. django_spire/comment/templates/django_spire/comment/element/comment_textarea_element.html +1 -1
  10. django_spire/comment/templates/django_spire/comment/widget/tagging_widget.html +1 -1
  11. django_spire/consts.py +1 -1
  12. django_spire/contrib/form/templates/django_spire/contrib/form/button/form_submit_button.html +1 -1
  13. django_spire/contrib/help/templates/django_spire/contrib/help/help_modal.html +2 -2
  14. django_spire/core/context_processors.py +0 -3
  15. django_spire/core/management/commands/spire_startapp_pkg/maps.py +18 -11
  16. django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/spirechildapp_detail_card.html +6 -6
  17. django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/spirechildapp_form_card.html +2 -2
  18. django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/spirechildapp_list_card.html +5 -5
  19. django_spire/core/management/commands/spire_startapp_pkg/template/templates/item/spirechildapp_item.html +9 -9
  20. django_spire/core/management/commands/spire_startapp_pkg/template/templates/page/spirechildapp_detail_page.html +2 -2
  21. django_spire/core/static/django_spire/css/app-default.css +1 -0
  22. django_spire/core/static/django_spire/css/bootstrap-extension.css +15 -0
  23. django_spire/core/templates/django_spire/badge/accent_badge.html +1 -1
  24. django_spire/core/templates/django_spire/badge/primary_badge.html +1 -1
  25. django_spire/core/templates/django_spire/badge/secondary_badge.html +1 -1
  26. django_spire/core/templates/django_spire/badge/warning_badge.html +1 -1
  27. django_spire/core/templates/django_spire/card/delete_confirmation_form_card.html +1 -1
  28. django_spire/core/templates/django_spire/card/infinite_scroll_card.html +1 -1
  29. django_spire/core/templates/django_spire/card/title_card.html +1 -2
  30. django_spire/core/templates/django_spire/dropdown/dropdown.html +1 -1
  31. django_spire/core/templates/django_spire/dropdown/element/dropdown_link_element.html +16 -16
  32. django_spire/core/templates/django_spire/dropdown/element/ellipsis_dropdown_modal_link_element.html +11 -8
  33. django_spire/core/templates/django_spire/filtering/form/base_session_filter_form.html +2 -2
  34. django_spire/core/templates/django_spire/modal/content/dispatch_modal_delete_confirmation_content.html +1 -1
  35. django_spire/core/templates/django_spire/modal/content/modal_title_content.html +1 -1
  36. django_spire/core/templates/django_spire/modal/modal.html +1 -1
  37. django_spire/core/templates/django_spire/navigation/accordion/nav_accordion.html +0 -1
  38. django_spire/core/templates/django_spire/navigation/top_navigation.html +13 -0
  39. django_spire/core/templates/django_spire/page/center_card_page.html +1 -1
  40. django_spire/core/templates/django_spire/wizard/wizard.html +4 -4
  41. django_spire/help_desk/apps.py +8 -0
  42. django_spire/help_desk/auth/__init__.py +0 -0
  43. django_spire/help_desk/auth/controller.py +15 -0
  44. django_spire/help_desk/templates/django_spire/help_desk/card/ticket_detail_card.html +3 -9
  45. django_spire/help_desk/templates/django_spire/help_desk/card/ticket_list_card.html +9 -10
  46. django_spire/help_desk/templates/django_spire/help_desk/element/icon.html +3 -0
  47. django_spire/help_desk/templates/django_spire/help_desk/form/ticket_form.html +1 -1
  48. django_spire/help_desk/templates/django_spire/help_desk/item/ticket_item.html +33 -32
  49. django_spire/help_desk/views/form_views.py +3 -3
  50. django_spire/help_desk/views/page_views.py +4 -5
  51. django_spire/knowledge/entry/views/json_views.py +1 -1
  52. django_spire/knowledge/templates/django_spire/knowledge/collection/card/context_menu_card.html +5 -5
  53. django_spire/knowledge/templates/django_spire/knowledge/entry/card/context_menu_card.html +5 -5
  54. django_spire/knowledge/templates/django_spire/knowledge/entry/version/block/dropdown/add_dropdown.html +1 -0
  55. django_spire/notification/app/templates/django_spire/notification/app/dropdown/notification_dropdown.html +1 -1
  56. django_spire/notification/app/templates/django_spire/notification/app/dropdown/notification_dropdown_content.html +6 -3
  57. django_spire/settings.py +1 -0
  58. django_spire/theme/templates/django_spire/theme/card/colors_preview_card.html +9 -9
  59. django_spire/theme/templates/django_spire/theme/card/example_preview_card.html +2 -2
  60. django_spire/theme/templates/django_spire/theme/card/preview_card.html +6 -6
  61. django_spire/theme/templates/django_spire/theme/example/item/example_item.html +2 -2
  62. django_spire/theme/templates/django_spire/theme/section/badge_section.html +4 -4
  63. django_spire/theme/templates/django_spire/theme/section/color_section.html +32 -32
  64. {django_spire-0.16.9.dist-info → django_spire-0.16.11.dist-info}/METADATA +1 -1
  65. {django_spire-0.16.9.dist-info → django_spire-0.16.11.dist-info}/RECORD +68 -65
  66. {django_spire-0.16.9.dist-info → django_spire-0.16.11.dist-info}/WHEEL +0 -0
  67. {django_spire-0.16.9.dist-info → django_spire-0.16.11.dist-info}/licenses/LICENSE.md +0 -0
  68. {django_spire-0.16.9.dist-info → django_spire-0.16.11.dist-info}/top_level.txt +0 -0
@@ -11,8 +11,8 @@
11
11
  {% endblock %}
12
12
 
13
13
  {% block dropdown_content %}
14
- {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_click="enable_rename_chat()" link_text='Rename' %}
14
+ {% include 'django_spire/dropdown/element/dropdown_link_element.html' with x_click="enable_rename_chat()" link_text='Rename' link_css='text-start' %}
15
15
 
16
16
  {% url 'django_spire:ai:chat:template:confirm_delete' pk=recent_chat.id as delete_url %}
17
- {% include 'django_spire/dropdown/element/ellipsis_dropdown_modal_link_element.html' with view_url=delete_url link_text='Delete' link_css='text-app-danger' %}
17
+ {% include 'django_spire/dropdown/element/ellipsis_dropdown_modal_link_element.html' with view_url=delete_url link_text='Delete' link_css='text-app-danger text-start' %}
18
18
  {% endblock %}
@@ -30,7 +30,7 @@
30
30
  @keydown.up="$focus.wrap().previous()"
31
31
  x-show="expanded && search_query.trim() !== ''"
32
32
 
33
- class="position-absolute overflow-auto top-100 start-0 w-100 bg-white border border-bottom-2 rounded-bottom-1 shadow p-0 m-0"
33
+ class="position-absolute overflow-auto top-100 start-0 w-100 border border-bottom-2 rounded-bottom-1 shadow p-0 m-0"
34
34
  style="z-index: 1100;"
35
35
  x-ref="search_results">
36
36
 
@@ -1,40 +1,58 @@
1
- <div x-data="{
2
- current_permission: '{{ perm_data.level_verbose }}',
3
- permission_choices: ['None', 'View', 'Add', 'Change', 'Delete'],
4
- loading: false,
5
- error_message: '',
6
- show_dropdown: false,
7
- async update(perm) {
8
- this.show_dropdown = false
9
- this.error_message = null
10
- if(this.current_permission !== perm) {
11
- this.loading = true
12
- let response = await ajax_request(
13
- 'POST',
14
- '{% url "django_spire:auth:group:json:group_permission_ajax" app_name=perm_data.app_name pk=group.pk %}',
15
- {'perm_level': perm}
16
- )
17
- this.loading = false
18
- let status = response.data.status
19
- if (status === 200){
20
- this.current_permission = perm
21
- } else {
22
- this.error_message = response.data.message
23
- }
24
- }
25
- }
26
- }">
1
+ <div
2
+ x-data="{
3
+ current_permission: '{{ perm_data.level_verbose }}',
4
+ permission_choices: ['None', 'View', 'Add', 'Change', 'Delete'],
5
+ loading: false,
6
+ error_message: '',
7
+ show_dropdown: false,
8
+
9
+ async update(perm) {
10
+ this.show_dropdown = false
11
+ this.error_message = null
12
+
13
+ if(this.current_permission !== perm) {
14
+ this.loading = true
15
+ let response = await ajax_request(
16
+ 'POST',
17
+ '{% url "django_spire:auth:group:json:group_permission_ajax" app_name=perm_data.app_name pk=group.pk %}',
18
+ {'perm_level': perm}
19
+ )
20
+ this.loading = false
21
+ let status = response.data.status
22
+ if (status === 200){
23
+ this.current_permission = perm
24
+ } else {
25
+ this.error_message = response.data.message
26
+ }
27
+ }
28
+ }
29
+ }"
30
+ >
27
31
  <div class="position-relative">
28
32
  <div @click="show_dropdown = true" class="btn btn-sm border dropdown-toggle">
29
33
  <span x-text="current_permission"></span>
30
34
  </div>
31
- <div @click.outside="show_dropdown = false" x-show="show_dropdown" style="width: 80px; z-index: 2"
32
- class="card position-absolute bg-app-layer-three mt-1">
35
+ <div
36
+ style="width: 80px; z-index: 2"
37
+ class="card position-absolute bg-app-layer-one mt-1 border"
38
+ x-show="show_dropdown"
39
+ @click.outside="show_dropdown = false"
40
+ >
33
41
  <template x-for="perm in permission_choices">
34
- <div @click="update(perm)" class="py-1 ps-2 cursor-pointer text-app-primary-hover"
35
- x-bind:class="{ 'border-bottom': perm !== 'Delete' }">
36
- <span class="fs--1" x-bind:class="{ 'text-app-secondary': perm === current_permission }"
37
- x-text="perm"></span>
42
+ <div
43
+ class="py-1 ps-2 cursor-pointer bg-app-layer-three-hover"
44
+ :class="{ 'border-bottom': perm !== 'Delete' }"
45
+ :style="
46
+ perm === 'None' ? 'border-top-left-radius: 0.30rem !important; border-top-right-radius: 0.30rem !important;' :
47
+ perm === 'Delete' ? 'border-bottom-left-radius: 0.30rem !important; border-bottom-right-radius: 0.30rem !important;' : ''
48
+ "
49
+ @click="update(perm)"
50
+ >
51
+ <span
52
+ class="fs--1"
53
+ :class="{ 'text-app-secondary': perm === current_permission }"
54
+ x-text="perm"
55
+ ></span>
38
56
  </div>
39
57
  </template>
40
58
  </div>
@@ -1,43 +1,60 @@
1
- <div x-data="{
2
- has_access: '{{ special_role.has_access }}' === 'True',
3
- get has_access_verbose() { return this.has_access ? 'Yes' : 'No' },
4
- codename: '{{ special_role.codename }}',
5
- permission_choices: ['No', 'Yes'],
6
- loading: false,
7
- error_message: '',
8
- show_dropdown: false,
9
- async update(perm) {
10
- this.show_dropdown = false
11
- this.error_message = null
12
- this.loading = true
13
- let response = await ajax_request(
14
- 'POST',
15
- '{% url "django_spire:auth:group:json:group_special_role_ajax" app_name=perm_data.app_name pk=group.pk %}',
16
- {
17
- 'codename': this.codename,
18
- 'grant_special_role_access': perm === 'Yes'
19
- }
20
- )
21
- this.loading = false
22
- let status = response.data.status
23
- if (status === 200){
24
- this.has_access = perm === 'Yes'
25
- } else {
26
- this.error_message = response.data.message
27
- }
1
+ <div
2
+ x-data="{
3
+ has_access: '{{ special_role.has_access }}' === 'True',
4
+ get has_access_verbose() { return this.has_access ? 'Yes' : 'No' },
5
+ codename: '{{ special_role.codename }}',
6
+ permission_choices: ['No', 'Yes'],
7
+ loading: false,
8
+ error_message: '',
9
+ show_dropdown: false,
10
+
11
+ async update(perm) {
12
+ this.show_dropdown = false
13
+ this.error_message = null
14
+ this.loading = true
15
+ let response = await ajax_request(
16
+ 'POST',
17
+ '{% url "django_spire:auth:group:json:group_special_role_ajax" app_name=perm_data.app_name pk=group.pk %}',
18
+ {
19
+ 'codename': this.codename,
20
+ 'grant_special_role_access': perm === 'Yes'
28
21
  }
29
- }">
22
+ )
23
+ this.loading = false
24
+ let status = response.data.status
25
+ if (status === 200){
26
+ this.has_access = perm === 'Yes'
27
+ } else {
28
+ this.error_message = response.data.message
29
+ }
30
+ }
31
+ }"
32
+ >
30
33
  <div class="position-relative">
31
34
  <div @click="show_dropdown = true" class="btn btn-sm btn-app-primary-outlined dropdown-toggle">
32
35
  <span x-text="has_access_verbose"></span>
33
36
  </div>
34
- <div @click.outside="show_dropdown = false" x-show="show_dropdown" style="width: 80px; z-index: 2"
35
- class="card position-absolute bg-white mt-1">
37
+ <div
38
+ style="width: 80px; z-index: 2"
39
+ class="card position-absolute bg-app-layer-one mt-1 border"
40
+ x-show="show_dropdown"
41
+ @click.outside="show_dropdown = false"
42
+ >
36
43
  <template x-for="perm in permission_choices">
37
- <div @click="update(perm)" class="py-1 ps-2 cursor-pointer bg-soft-primary-hover"
38
- x-bind:class="{ 'border-bottom': perm !== 'Yes' }">
39
- <span class="fs--1" x-bind:class="{ 'text-app-secondary': has_access_verbose === perm }"
40
- x-text="perm"></span>
44
+ <div
45
+ class="py-1 ps-2 cursor-pointer bg-app-layer-three-hover"
46
+ :class="{ 'border-bottom': perm !== 'Yes' }"
47
+ :style="
48
+ perm === 'No' ? 'border-top-left-radius: 0.30rem !important; border-top-right-radius: 0.30rem !important;' :
49
+ perm === 'Yes' ? 'border-bottom-left-radius: 0.30rem !important; border-bottom-right-radius: 0.30rem !important;' : ''
50
+ "
51
+ @click="update(perm)"
52
+ >
53
+ <span
54
+ class="fs--1"
55
+ :class="{ 'text-app-secondary': has_access_verbose === perm }"
56
+ x-text="perm"
57
+ ></span>
41
58
  </div>
42
59
  </template>
43
60
  </div>
@@ -1,11 +1,14 @@
1
1
  {% extends 'django_spire/auth/page/auth_page.html' %}
2
2
 
3
3
  {% block authentication_page_content %}
4
-
5
- <form x-data="{
6
- username: new GlueCharField('username', {required: true}),
7
- password: new GlueCharField('password', {required: true})
8
- }" method="post" class="text-app-secondary">
4
+ <form
5
+ class="text-app-secondary"
6
+ method="post"
7
+ x-data="{
8
+ username: new GlueCharField('username', {required: true, label: {% block username_label %}'Email Address'{% endblock %}}),
9
+ password: new GlueCharField('password', {required: true})
10
+ }"
11
+ >
9
12
  {% csrf_token %}
10
13
  <div class="row">
11
14
  <div class="col">
@@ -30,8 +33,4 @@
30
33
  Forgot my password
31
34
  </a>
32
35
  </div>
33
-
34
36
  {% endblock %}
35
-
36
-
37
-
@@ -15,7 +15,7 @@
15
15
  <div class="col px-4">
16
16
  <form method="post" action="{% url 'django_spire:auth:redirect:logout' %}" class="text-app-secondary">
17
17
  {% csrf_token %}
18
- <button type="submit" class="d-block mx-auto bg-light-primary shadow-sm text-white btn my-4 w-100">Logout</button>
18
+ <button type="submit" class="d-block mx-auto shadow-sm btn my-4 w-100">Logout</button>
19
19
  </form>
20
20
  </div>
21
21
  </div>
@@ -13,7 +13,7 @@
13
13
  </div>
14
14
  <div class="row mt-2">
15
15
  <div class="col">
16
- <button type="submit" class="w-100 btn btn-blue mt-2">Submit</button>
16
+ <button type="submit" class="w-100 btn btn-app-success mt-2">Submit</button>
17
17
  </div>
18
18
  </div>
19
19
  </form>
@@ -122,7 +122,7 @@
122
122
 
123
123
  {% elif button_text %}
124
124
  <button @click="toggle_show_comment_dropdown()"
125
- class="btn bg-white text-business-base-blue rounded border-1 border-business-base-blue btn-sm px-2"
125
+ class="btn text-business-base-blue rounded border-1 border-business-base-blue btn-sm px-2"
126
126
  type="button" data-display="static"
127
127
  aria-haspopup="true" aria-expanded="false">
128
128
  {{ button_text }}
@@ -143,7 +143,7 @@
143
143
 
144
144
  <div style="max-height: 100px; overflow-x: hidden; overflow-y: auto"
145
145
  x-show="show_user_list_dropdown" @click.outside="show_user_list_dropdown = false"
146
- class="text-business-base-blue bg-white fs-0 w-75 ms-3 border rounded position-absolute top-25 start-0">
146
+ class="text-business-base-blue fs-0 w-75 ms-3 border rounded position-absolute top-25 start-0">
147
147
  <template x-for="(user, index) in filtered_users" :key="user.username">
148
148
  <a class="text-decoration-none text-business-base-blue" href="#">
149
149
  <li @click="add_user_to_comment(user)"
@@ -153,7 +153,7 @@
153
153
  </template>
154
154
  </div>
155
155
 
156
- <button @click="$store.page_state.toggle_page_loading_state()" class="btn btn-primary btn-sm w-100 mt-1"
156
+ <button @click="$store.page_state.toggle_page_loading_state()" class="btn btn-app-primary btn-sm w-100 mt-1"
157
157
  type="submit">Submit
158
158
  </button>
159
159
  </form>
@@ -162,4 +162,4 @@
162
162
  </div>
163
163
  </div>
164
164
  </div>
165
- {% endif %}
165
+ {% endif %}
@@ -101,7 +101,7 @@
101
101
  </form>
102
102
 
103
103
  <div style="max-height: 125px; z-index: 2; overflow-x: hidden; overflow-y: auto" x-show="show_user_list" @click.outside="show_user_list=false" x-transition
104
- class="bg-white text-900 w-100 shadow border rounded position-absolute top-50 start-0">
104
+ class="text-900 w-100 shadow border rounded position-absolute top-50 start-0">
105
105
  <template x-if="filtered_users.length > 0">
106
106
  <template x-for="user in filtered_users" :key="user.id">
107
107
  <div @click="add_user_to_comment(user)"
@@ -108,7 +108,7 @@
108
108
  @keydown.up.prevent.stop="$focus.wrap().prev()"
109
109
  @keydown.tab.prevent.stop="$focus.wrap().next()"
110
110
  @keydown.esc.prevent.stop="document.getElementById(id).focus()"
111
- class="bg-white w-100 shadow border border-1 rounded position-absolute top-100 start-0 mt-1">
111
+ class="w-100 shadow border border-1 rounded position-absolute top-100 start-0 mt-1">
112
112
  <template x-if="filtered_users.length > 0">
113
113
  <template x-for="user in filtered_users" :key="user.id">
114
114
  <button
django_spire/consts.py CHANGED
@@ -1,4 +1,4 @@
1
- __VERSION__ = '0.16.9'
1
+ __VERSION__ = '0.16.11'
2
2
 
3
3
 
4
4
  AI_CHAT_WORKFLOW_SENDER_SETTINGS_NAME = 'AI_CHAT_WORKFLOW_NAME'
@@ -36,7 +36,7 @@
36
36
  x-cloak
37
37
  >
38
38
  <div
39
- class="spinner-border text-white spinner-border-sm"
39
+ class="spinner-border spinner-border-sm"
40
40
  role="status"
41
41
  x-transition
42
42
  >
@@ -1,5 +1,5 @@
1
1
  <div
2
- class="modal fade text-dark"
2
+ class="modal fade"
3
3
  id="{{ help_id }}"
4
4
  tabindex="-1"
5
5
  aria-labelledby="exampleModalLabel"
@@ -38,4 +38,4 @@
38
38
  </div>
39
39
  </div>
40
40
  </div>
41
- </div>
41
+ </div>
@@ -20,9 +20,6 @@ def django_spire(request: WSGIRequest) -> dict[str, Any]:
20
20
 
21
21
  return {
22
22
  'DJANGO_SPIRE_VERSION': __VERSION__,
23
- 'app_bootstrap_icon': {
24
- 'help_desk': 'bi bi-headset'
25
- },
26
23
  'AuthController': auth_controller_dict
27
24
  }
28
25
 
@@ -3,19 +3,26 @@ from __future__ import annotations
3
3
 
4
4
  def generate_replacement_map(components: list[str]) -> dict[str, str]:
5
5
  app_name = components[-1]
6
- class_name = ''.join(word.title() for word in app_name.split('_'))
7
- parent = components[-2] if len(components) > 1 else app_name
6
+ model_name = ''.join(word.title() for word in app_name.split('_'))
7
+ if len(components)> 1:
8
+ parents = components[0:-1]
9
+ parent = components[-2]
10
+ else:
11
+ parents = [app_name,]
12
+ parent = app_name
8
13
  module = '.'.join(components)
9
14
 
15
+ # The sequence is important. Plurals must be replaced first;
16
+ # otherwise, it will generate _plural variables and names.
10
17
  return {
11
18
  'module': module,
12
- 'spirepermission': parent.lower() + app_name.lower(),
13
- 'SpireChildApp': class_name,
14
- 'SpireChildApps': class_name + 's',
15
- 'spirechildapp': app_name.lower(),
16
- 'spirechildapps': app_name.lower() + 's',
17
- 'SpireParentApp': class_name,
18
- 'SpireParentApps': class_name + 's',
19
- 'spireparentapp': parent.lower(),
20
- 'spireparentapps': parent.lower() + 's'
19
+ 'spire_model_name_plural': model_name + 's',
20
+ 'spire_model_name': model_name,
21
+ 'spire_app_name_plural': app_name.lower() + 's',
22
+ 'spire_app_name': app_name.lower(),
23
+ 'spire_parent_app': parent.lower(),
24
+ 'spire_reverse_parent_path': ':'.join(parents[1:]).lower(),
25
+ 'spire_reverse_path': ':'.join(parents[1:]).lower() + ':' + app_name.lower(),
26
+ 'spire_label_path': '_'.join(parents[1:]).lower() + '_' + app_name.lower(),
27
+ 'spire_template_path': '/'.join(parents[1:]).lower() + '/' + app_name.lower(),
21
28
  }
@@ -1,24 +1,24 @@
1
1
  {% extends 'django_spire/card/title_card.html' %}
2
2
 
3
3
  {% block card_title %}
4
- SpireChildApp
4
+ spire_model_name
5
5
  {% endblock %}
6
6
 
7
7
  {% block card_button %}
8
- {% if perms.spireparentapp.change_spirepermission %}
9
- {% url 'spireparentapp:spirechildapp:page:form' pk=spirechildapp.pk as spirechildapp_edit_url %}
10
- {% include 'django_spire/button/primary_dark_button.html' with button_text='Edit' button_icon='bi bi-pencil' button_href=spirechildapp_edit_url %}
8
+ {% if perms.spire_label_path.change_spire_app_name %}
9
+ {% url 'spire_parent_app:spire_app_name:page:form' pk=spire_app_name.pk as spire_app_name_edit_url %}
10
+ {% include 'django_spire/button/primary_dark_button.html' with button_text='Edit' button_icon='bi bi-pencil' button_href=spire_app_name_edit_url %}
11
11
  {% endif %}
12
12
  {% endblock %}
13
13
 
14
14
  {% block card_title_content %}
15
15
  <div class="row g-3">
16
16
  <div class="col-12">
17
- {% include 'django_spire/element/attribute_element.html' with attribute_title='Name' attribute_value=spirechildapp.name %}
17
+ {% include 'django_spire/element/attribute_element.html' with attribute_title='Name' attribute_value=spire_app_name.name %}
18
18
  </div>
19
19
 
20
20
  <div class="col-12">
21
- {% include 'django_spire/element/attribute_element.html' with attribute_title='Description' attribute_value=spirechildapp.description|linebreaksbr %}
21
+ {% include 'django_spire/element/attribute_element.html' with attribute_title='Description' attribute_value=spire_app_name.description|linebreaksbr %}
22
22
  </div>
23
23
  </div>
24
24
  {% endblock %}
@@ -1,9 +1,9 @@
1
1
  {% extends 'django_spire/card/title_card.html' %}
2
2
 
3
3
  {% block card_title %}
4
- SpireChildApp
4
+ spire_model_name
5
5
  {% endblock %}
6
6
 
7
7
  {% block card_title_content %}
8
- {% include 'spireparentapp/spirechildapp/form/spirechildapp_form.html' %}
8
+ {% include 'spire_parent_app/spire_app_name/form/spire_app_name_form.html' %}
9
9
  {% endblock %}
@@ -1,17 +1,17 @@
1
1
  {% extends 'django_spire/card/title_card.html' %}
2
2
 
3
3
  {% block card_title %}
4
- SpireChildApps
4
+ spire_model_name_plural
5
5
  {% endblock %}
6
6
 
7
7
  {% block card_button %}
8
- {% url 'spireparentapp:spirechildapp:page:form' pk=0 as new_spirechildapp_url %}
9
- {% include 'django_spire/button/primary_dark_button.html' with button_text='Add' button_icon='bi bi-plus' button_href=new_spirechildapp_url %}
8
+ {% url 'spire_parent_app:spire_app_name:page:form' pk=0 as new_spire_app_name_url %}
9
+ {% include 'django_spire/button/primary_dark_button.html' with button_text='Add' button_icon='bi bi-plus' button_href=new_spire_app_name_url %}
10
10
  {% endblock %}
11
11
 
12
12
  {% block card_title_content %}
13
- {% for spirechildapp in spirechildapps %}
14
- {% include 'spireparentapp/spirechildapp/item/spirechildapp_item.html' %}
13
+ {% for spire_app_name in spire_app_name_plural %}
14
+ {% include 'spire_parent_app/spire_app_name/item/spire_app_name_item.html' %}
15
15
  {% empty %}
16
16
  {% include 'django_spire/item/no_data_item.html' %}
17
17
  {% endfor %}
@@ -1,24 +1,24 @@
1
1
  {% extends 'django_spire/item/item.html' %}
2
2
 
3
3
  {% block item_title %}
4
- {% url 'spireparentapp:spirechildapp:page:detail' pk=spirechildapp.pk as spirechildapp_view_url %}
5
- {% include 'django_spire/element/attribute_element.html' with attribute_title='SpireChildApp' attribute_value=spirechildapp.name attribute_href=spirechildapp_view_url %}
4
+ {% url 'spire_parent_app:spire_app_name:page:detail' pk=spire_app_name.pk as spire_app_name_view_url %}
5
+ {% include 'django_spire/element/attribute_element.html' with attribute_title='spire_model_name' attribute_value=spire_app_name.name attribute_href=spire_app_name_view_url %}
6
6
  {% endblock %}
7
7
 
8
8
  {% block item_row_content %}
9
- {% include 'django_spire/element/attribute_element.html' with attribute_title='Description' attribute_value=spirechildapp.description %}
9
+ {% include 'django_spire/element/attribute_element.html' with attribute_title='Description' attribute_value=spire_app_name.description %}
10
10
  {% endblock %}
11
11
 
12
12
  {% block item_button %}
13
- {% url 'spireparentapp:spirechildapp:page:detail' pk=spirechildapp.pk as spirechildapp_view_url %}
13
+ {% url 'spire_parent_app:spire_app_name:page:detail' pk=spire_app_name.pk as spire_app_name_view_url %}
14
14
 
15
- {% if perms.spireparentapp.change_spirepermission %}
16
- {% url 'spireparentapp:spirechildapp:page:form' pk=spirechildapp.pk as spirechildapp_edit_url %}
15
+ {% if perms.spire_label_path.change_spire_app_name %}
16
+ {% url 'spire_parent_app:spire_app_name:page:form' pk=spire_app_name.pk as spire_app_name_edit_url %}
17
17
  {% endif %}
18
18
 
19
- {% if perms.spireparentapp.delete_spirepermission %}
20
- {% url 'spireparentapp:spirechildapp:page:delete' pk=spirechildapp.pk as spirechildapp_delete_url %}
19
+ {% if perms.spire_label_path.delete_spire_app_name %}
20
+ {% url 'spire_parent_app:spire_app_name:page:delete' pk=spire_app_name.pk as spire_app_name_delete_url %}
21
21
  {% endif %}
22
22
 
23
- {% include 'django_spire/dropdown/ellipsis_dropdown.html' with view_url=spirechildapp_view_url edit_url=spirechildapp_edit_url delete_url=spirechildapp_delete_url %}
23
+ {% include 'django_spire/dropdown/ellipsis_dropdown.html' with view_url=spire_app_name_view_url edit_url=spire_app_name_edit_url delete_url=spire_app_name_delete_url %}
24
24
  {% endblock %}
@@ -3,11 +3,11 @@
3
3
  {% block page_content %}
4
4
  <div class="row g-3">
5
5
  <div class="col-12">
6
- {% include 'spireparentapp/spirechildapp/card/spirechildapp_detail_card.html' %}
6
+ {% include 'spire_parent_app/spire_app_name/card/spire_app_name_detail_card.html' %}
7
7
  </div>
8
8
 
9
9
  <div class="col-4">
10
- {% include 'history/card/activity_list_card.html' with activity_log=spirechildapp.activity_log.prefetch_user %}
10
+ {% include 'history/card/activity_list_card.html' with activity_log=spire_app_name.activity_log.prefetch_user %}
11
11
  </div>
12
12
  </div>
13
13
  {% endblock %}
@@ -13,4 +13,5 @@ a:visited:hover {
13
13
 
14
14
  body {
15
15
  color: var(--app-default-text-color);
16
+ scrollbar-color: var(--app-bg-secondary) transparent;
16
17
  }
@@ -26,6 +26,21 @@ h1, h2, h3, h4, h5, h6 {
26
26
  box-shadow: rgba(0, 0, 0, 0.1) 0 0.25rem 0.375rem -0.0625rem, rgba(0, 0, 0, 0.06) 0 0.125rem 0.25rem -0.0625rem !important;
27
27
  }
28
28
 
29
+ .dropdown-item {
30
+ border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
31
+ }
32
+
33
+ .dropdown-item:first-child {
34
+ border-top-left-radius: 0.30rem !important;
35
+ border-top-right-radius: 0.30rem !important;
36
+ }
37
+
38
+ .dropdown-item:last-child {
39
+ border-bottom: 0;
40
+ border-bottom-left-radius: 0.30rem !important;
41
+ border-bottom-right-radius: 0.30rem !important;
42
+ }
43
+
29
44
  .cursor-pointer {
30
45
  cursor: pointer !important;
31
46
  }
@@ -1,3 +1,3 @@
1
1
  {% extends 'django_spire/badge/base_badge.html' %}
2
2
 
3
- {% block badge_class %}bg-app-accent text-white{% endblock %}
3
+ {% block badge_class %}bg-app-accent{% endblock %}
@@ -1,3 +1,3 @@
1
1
  {% extends 'django_spire/badge/base_badge.html' %}
2
2
 
3
- {% block badge_class %}bg-app-primary text-white{% endblock %}
3
+ {% block badge_class %}bg-app-primary{% endblock %}
@@ -1,3 +1,3 @@
1
1
  {% extends 'django_spire/badge/base_badge.html' %}
2
2
 
3
- {% block badge_class %}bg-app-secondary text-white{% endblock %}
3
+ {% block badge_class %}bg-app-secondary{% endblock %}
@@ -1,3 +1,3 @@
1
1
  {% extends 'django_spire/badge/base_badge.html' %}
2
2
 
3
- {% block badge_class %}bg-app-warning text-dark{% endblock %}
3
+ {% block badge_class %}bg-app-warning {% endblock %}
@@ -18,7 +18,7 @@
18
18
  <input hidden id="delete_confirmation_should_delete" value="false" name="should_delete" type="text">
19
19
 
20
20
  <div class="col-auto me-3">
21
- {% include 'django_spire/button/danger_dark_button.html' with x_button_click='submit_value(true)' button_text='Delete' %}
21
+ {% include 'django_spire/button/danger_button.html' with x_button_click='submit_value(true)' button_text='Delete' %}
22
22
  </div>
23
23
  <div class="col-auto">
24
24
  {% include 'django_spire/button/secondary_button.html' with x_button_click='submit_value(false)' button_text='Cancel' %}
@@ -114,7 +114,7 @@
114
114
 
115
115
  <div class="row justify-content-between align-items-center {% block card_title_class %}mb-2 pb-2 border-bottom-secondary{% endblock %}">
116
116
  <div class="col">
117
- <div class="card-title text-uppercase text-black mb-0">{% block card_title %}{% endblock %}</div>
117
+ <div class="card-title text-uppercase mb-0">{% block card_title %}{% endblock %}</div>
118
118
  </div>
119
119
  <div class="col-auto d-flex align-items-center" style="min-height: 2.0rem;">
120
120
  {% block card_button %}
@@ -17,8 +17,7 @@
17
17
  </div>
18
18
  </div>
19
19
  <div class="col-auto d-flex">
20
- {% block card_button %}
21
- {% endblock %}
20
+ {% block card_button %}{% endblock %}
22
21
  </div>
23
22
  </div>
24
23
  <div x-show="card_title_dropdown" x-cloak x-collapse>
@@ -5,7 +5,7 @@
5
5
  {% endblock %}
6
6
  <div
7
7
  style="{% block dropdown_style %}{% endblock %} z-index: 4;"
8
- class="position-absolute shadow-lg card border-1 mt-1 {% block dropdown_position %}top-100{% endblock %}"
8
+ class="position-absolute shadow-lg card border border-bott mt-1 {% block dropdown_position %}top-100{% endblock %}"
9
9
  x-bind="dialogue"
10
10
  x-cloak
11
11
  >