django-smartbase-admin 0.2.54__py3-none-any.whl → 1.0.38__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 (179) hide show
  1. django_smartbase_admin/actions/admin_action_list.py +74 -38
  2. django_smartbase_admin/actions/advanced_filters.py +24 -1
  3. django_smartbase_admin/admin/admin_base.py +401 -96
  4. django_smartbase_admin/admin/site.py +93 -35
  5. django_smartbase_admin/admin/widgets.py +589 -26
  6. django_smartbase_admin/apps.py +2 -0
  7. django_smartbase_admin/engine/actions.py +34 -16
  8. django_smartbase_admin/engine/admin_base_view.py +252 -115
  9. django_smartbase_admin/engine/configuration.py +186 -4
  10. django_smartbase_admin/engine/const.py +6 -0
  11. django_smartbase_admin/engine/dashboard.py +44 -23
  12. django_smartbase_admin/engine/fake_inline.py +15 -11
  13. django_smartbase_admin/engine/field.py +42 -12
  14. django_smartbase_admin/engine/field_formatter.py +22 -8
  15. django_smartbase_admin/engine/filter_widgets.py +309 -20
  16. django_smartbase_admin/engine/menu_item.py +8 -5
  17. django_smartbase_admin/engine/modal_view.py +12 -7
  18. django_smartbase_admin/engine/request.py +2 -0
  19. django_smartbase_admin/integration/__init__.py +0 -0
  20. django_smartbase_admin/integration/django_cms.py +43 -0
  21. django_smartbase_admin/locale/sk/LC_MESSAGES/django.mo +0 -0
  22. django_smartbase_admin/locale/sk/LC_MESSAGES/django.po +268 -37
  23. django_smartbase_admin/migrations/0005_sbadminuserconfiguration.py +26 -0
  24. django_smartbase_admin/migrations/0006_alter_sbadminuserconfiguration_color_scheme.py +18 -0
  25. django_smartbase_admin/models.py +22 -0
  26. django_smartbase_admin/monkeypatch/admin_readonly_field_monkeypatch.py +96 -0
  27. django_smartbase_admin/monkeypatch/fake_inline_monkeypatch.py +1 -1
  28. django_smartbase_admin/querysets.py +3 -0
  29. django_smartbase_admin/services/configuration.py +30 -0
  30. django_smartbase_admin/services/thread_local.py +6 -19
  31. django_smartbase_admin/services/views.py +80 -13
  32. django_smartbase_admin/services/xlsx_export.py +6 -0
  33. django_smartbase_admin/static/sb_admin/build/tailwind.config.js +1 -0
  34. django_smartbase_admin/static/sb_admin/build/tailwind_config_partials/colors.js +4 -0
  35. django_smartbase_admin/static/sb_admin/build/tailwind_config_partials/spacing.js +1 -0
  36. django_smartbase_admin/static/sb_admin/build/webpack.common.js +11 -8
  37. django_smartbase_admin/static/sb_admin/css/ckeditor/ckeditor_content_dark.css +208 -0
  38. django_smartbase_admin/static/sb_admin/css/coloris/coloris.min.css +1 -0
  39. django_smartbase_admin/static/sb_admin/dist/calendar.js +1 -0
  40. django_smartbase_admin/static/sb_admin/dist/calendar_style.css +1 -0
  41. django_smartbase_admin/static/sb_admin/dist/calendar_style.js +0 -0
  42. django_smartbase_admin/static/sb_admin/dist/chart.js +1 -1
  43. django_smartbase_admin/static/sb_admin/dist/main.js +1 -1
  44. django_smartbase_admin/static/sb_admin/dist/main_style.css +1 -1
  45. django_smartbase_admin/static/sb_admin/dist/table.js +1 -1
  46. django_smartbase_admin/static/sb_admin/dist/tree_widget.js +1 -0
  47. django_smartbase_admin/static/sb_admin/dist/tree_widget_style.css +1 -0
  48. django_smartbase_admin/static/sb_admin/dist/tree_widget_style.js +0 -0
  49. django_smartbase_admin/static/sb_admin/fancytree/jquery.fancytree-all-deps.min.js +1 -0
  50. django_smartbase_admin/static/sb_admin/images/file_types/file-csv.svg +11 -0
  51. django_smartbase_admin/static/sb_admin/images/file_types/file-doc.svg +11 -0
  52. django_smartbase_admin/static/sb_admin/images/file_types/file-docx.svg +11 -0
  53. django_smartbase_admin/static/sb_admin/images/file_types/file-other.svg +13 -0
  54. django_smartbase_admin/static/sb_admin/images/file_types/file-pdf.svg +11 -0
  55. django_smartbase_admin/static/sb_admin/images/file_types/file-ppt.svg +11 -0
  56. django_smartbase_admin/static/sb_admin/images/file_types/file-xls.svg +11 -0
  57. django_smartbase_admin/static/sb_admin/images/file_types/file-xlsx.svg +11 -0
  58. django_smartbase_admin/static/sb_admin/images/file_types/file-zip.svg +18 -0
  59. django_smartbase_admin/static/sb_admin/images/flags/de-at.png +0 -0
  60. django_smartbase_admin/static/sb_admin/images/flags/de-ch.png +0 -0
  61. django_smartbase_admin/static/sb_admin/images/logo_light.svg +21 -0
  62. django_smartbase_admin/static/sb_admin/js/coloris/coloris.min.js +6 -0
  63. django_smartbase_admin/static/sb_admin/js/fullcalendar.min.js +14804 -0
  64. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Bolt-one.svg +3 -0
  65. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Calendar.svg +3 -0
  66. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Caution.svg +3 -0
  67. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Electric-drill.svg +3 -0
  68. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Fire-extinguisher.svg +3 -0
  69. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Gas.svg +3 -0
  70. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Lightning-fill.svg +3 -0
  71. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Moon.svg +3 -0
  72. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Phone-telephone.svg +3 -0
  73. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Printer.svg +3 -0
  74. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Pull.svg +3 -0
  75. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Sun-one.svg +3 -0
  76. django_smartbase_admin/static/sb_admin/sprites/sb_admin/Time.svg +3 -0
  77. django_smartbase_admin/static/sb_admin/src/css/_base.css +5 -1
  78. django_smartbase_admin/static/sb_admin/src/css/_colors.css +257 -82
  79. django_smartbase_admin/static/sb_admin/src/css/_components.css +61 -13
  80. django_smartbase_admin/static/sb_admin/src/css/_datepicker.css +8 -1
  81. django_smartbase_admin/static/sb_admin/src/css/_filer.css +60 -0
  82. django_smartbase_admin/static/sb_admin/src/css/_inlines.css +51 -10
  83. django_smartbase_admin/static/sb_admin/src/css/_tabulator.css +8 -2
  84. django_smartbase_admin/static/sb_admin/src/css/calendar.css +162 -0
  85. django_smartbase_admin/static/sb_admin/src/css/components/_button.css +41 -1
  86. django_smartbase_admin/static/sb_admin/src/css/components/_dropdown.css +26 -8
  87. django_smartbase_admin/static/sb_admin/src/css/components/_input.css +62 -20
  88. django_smartbase_admin/static/sb_admin/src/css/components/_modal.css +1 -1
  89. django_smartbase_admin/static/sb_admin/src/css/components/_query-builder.css +21 -2
  90. django_smartbase_admin/static/sb_admin/src/css/components/_toggle.css +12 -1
  91. django_smartbase_admin/static/sb_admin/src/css/components/_tooltip.css +8 -22
  92. django_smartbase_admin/static/sb_admin/src/css/style.css +17 -0
  93. django_smartbase_admin/static/sb_admin/src/css/tree_widget.css +411 -0
  94. django_smartbase_admin/static/sb_admin/src/js/autocomplete.js +63 -5
  95. django_smartbase_admin/static/sb_admin/src/js/calendar.js +56 -0
  96. django_smartbase_admin/static/sb_admin/src/js/chart.js +8 -22
  97. django_smartbase_admin/static/sb_admin/src/js/choices.js +18 -8
  98. django_smartbase_admin/static/sb_admin/src/js/datepicker.js +97 -336
  99. django_smartbase_admin/static/sb_admin/src/js/datepicker_plugins.js +357 -0
  100. django_smartbase_admin/static/sb_admin/src/js/main.js +304 -31
  101. django_smartbase_admin/static/sb_admin/src/js/multiselect.js +50 -41
  102. django_smartbase_admin/static/sb_admin/src/js/range.js +3 -2
  103. django_smartbase_admin/static/sb_admin/src/js/table.js +34 -5
  104. django_smartbase_admin/static/sb_admin/src/js/table_modules/advanced_filter_module.js +43 -20
  105. django_smartbase_admin/static/sb_admin/src/js/table_modules/data_edit_module.js +8 -10
  106. django_smartbase_admin/static/sb_admin/src/js/table_modules/filter_module.js +3 -3
  107. django_smartbase_admin/static/sb_admin/src/js/table_modules/header_tabs_module.js +11 -11
  108. django_smartbase_admin/static/sb_admin/src/js/table_modules/selection_module.js +28 -8
  109. django_smartbase_admin/static/sb_admin/src/js/table_modules/table_params_module.js +6 -0
  110. django_smartbase_admin/static/sb_admin/src/js/table_modules/views_module.js +6 -0
  111. django_smartbase_admin/static/sb_admin/src/js/tree_widget.js +406 -0
  112. django_smartbase_admin/static/sb_admin/src/js/utils.js +56 -21
  113. django_smartbase_admin/templates/sb_admin/actions/change_form.html +169 -114
  114. django_smartbase_admin/templates/sb_admin/actions/dashboard.html +2 -2
  115. django_smartbase_admin/templates/sb_admin/actions/list.html +79 -39
  116. django_smartbase_admin/templates/sb_admin/actions/partials/action_link.html +14 -0
  117. django_smartbase_admin/templates/sb_admin/actions/partials/tabulator_header_v2.html +2 -2
  118. django_smartbase_admin/templates/sb_admin/actions/tree_list.html +63 -0
  119. django_smartbase_admin/templates/sb_admin/authentification/login_base.html +5 -1
  120. django_smartbase_admin/templates/sb_admin/components/columns.html +1 -1
  121. django_smartbase_admin/templates/sb_admin/components/filters_v2.html +99 -85
  122. django_smartbase_admin/templates/sb_admin/dashboard/calendar_widget.html +69 -0
  123. django_smartbase_admin/templates/sb_admin/dashboard/chart_widget.html +21 -2
  124. django_smartbase_admin/templates/sb_admin/dashboard/list_widget.html +6 -0
  125. django_smartbase_admin/templates/sb_admin/dashboard/widget_base.html +1 -1
  126. django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/date_field.html +18 -8
  127. django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/multiple_choice_field.html +1 -1
  128. django_smartbase_admin/templates/sb_admin/filter_widgets/advanced_filters/tree_select_filter.html +2 -0
  129. django_smartbase_admin/templates/sb_admin/filter_widgets/date_field.html +18 -4
  130. django_smartbase_admin/templates/sb_admin/filter_widgets/multiple_choice_field.html +14 -0
  131. django_smartbase_admin/templates/sb_admin/filter_widgets/partials/clear.html +10 -5
  132. django_smartbase_admin/templates/sb_admin/filter_widgets/radio_choice_field.html +2 -2
  133. django_smartbase_admin/templates/sb_admin/filter_widgets/tree_select_filter.html +16 -0
  134. django_smartbase_admin/templates/sb_admin/includes/change_form_title.html +3 -1
  135. django_smartbase_admin/templates/sb_admin/includes/inline_fieldset.html +48 -39
  136. django_smartbase_admin/templates/sb_admin/includes/notifications.html +2 -1
  137. django_smartbase_admin/templates/sb_admin/includes/readonly_boolean_field.html +9 -0
  138. django_smartbase_admin/templates/sb_admin/includes/readonly_field.html +12 -0
  139. django_smartbase_admin/templates/sb_admin/includes/table_inline_delete_button.html +4 -5
  140. django_smartbase_admin/templates/sb_admin/inlines/stacked_inline.html +68 -40
  141. django_smartbase_admin/templates/sb_admin/inlines/table_inline.html +76 -34
  142. django_smartbase_admin/templates/sb_admin/integrations/filer/folder_list.html +18 -0
  143. django_smartbase_admin/templates/sb_admin/navigation.html +166 -158
  144. django_smartbase_admin/templates/sb_admin/partials/modal/modal_content.html +2 -6
  145. django_smartbase_admin/templates/sb_admin/sb_admin_base.html +49 -4
  146. django_smartbase_admin/templates/sb_admin/sb_admin_base_no_sidebar.html +27 -11
  147. django_smartbase_admin/templates/sb_admin/sb_admin_js_trans.html +3 -0
  148. django_smartbase_admin/templates/sb_admin/sprites/sb_admin.svg +1 -1
  149. django_smartbase_admin/templates/sb_admin/tailwind_whitelist.html +6 -3
  150. django_smartbase_admin/templates/sb_admin/widgets/array.html +0 -1
  151. django_smartbase_admin/templates/sb_admin/widgets/attributes.html +68 -0
  152. django_smartbase_admin/templates/sb_admin/widgets/autocomplete.html +13 -2
  153. django_smartbase_admin/templates/sb_admin/widgets/{checkbox_select.html → checkbox_dropdown.html} +2 -2
  154. django_smartbase_admin/templates/sb_admin/widgets/clearable_file_input.html +2 -2
  155. django_smartbase_admin/templates/sb_admin/widgets/color_field.html +30 -0
  156. django_smartbase_admin/templates/sb_admin/widgets/date.html +8 -1
  157. django_smartbase_admin/templates/sb_admin/widgets/filer_file.html +84 -0
  158. django_smartbase_admin/templates/sb_admin/widgets/includes/related_item_buttons.html +38 -0
  159. django_smartbase_admin/templates/sb_admin/widgets/multiwidget.html +1 -1
  160. django_smartbase_admin/templates/sb_admin/widgets/radio.html +3 -2
  161. django_smartbase_admin/templates/sb_admin/widgets/radio_dropdown.html +30 -0
  162. django_smartbase_admin/templates/sb_admin/widgets/read_only_password_hash.html +3 -0
  163. django_smartbase_admin/templates/sb_admin/widgets/time.html +8 -1
  164. django_smartbase_admin/templates/sb_admin/widgets/toggle.html +1 -1
  165. django_smartbase_admin/templates/sb_admin/widgets/tree_base.html +59 -0
  166. django_smartbase_admin/templates/sb_admin/widgets/tree_select.html +24 -0
  167. django_smartbase_admin/templates/sb_admin/widgets/tree_select_inline.html +12 -0
  168. django_smartbase_admin/templatetags/sb_admin_tags.py +85 -4
  169. django_smartbase_admin/utils.py +22 -3
  170. django_smartbase_admin/views/dashboard_view.py +6 -0
  171. django_smartbase_admin/views/global_filter_view.py +8 -2
  172. django_smartbase_admin/views/translations_view.py +12 -5
  173. django_smartbase_admin/views/user_config_view.py +52 -0
  174. django_smartbase_admin-1.0.38.dist-info/METADATA +166 -0
  175. {django_smartbase_admin-0.2.54.dist-info → django_smartbase_admin-1.0.38.dist-info}/RECORD +177 -115
  176. {django_smartbase_admin-0.2.54.dist-info → django_smartbase_admin-1.0.38.dist-info}/WHEEL +1 -1
  177. django_smartbase_admin/templates/sb_admin/integrations/sorting/change_list.html +0 -401
  178. django_smartbase_admin-0.2.54.dist-info/METADATA +0 -25
  179. {django_smartbase_admin-0.2.54.dist-info → django_smartbase_admin-1.0.38.dist-info}/LICENSE.md +0 -0
@@ -7,7 +7,7 @@ msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: \n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
- "POT-Creation-Date: 2024-03-20 13:23+0100\n"
10
+ "POT-Creation-Date: 2025-09-11 16:32+0200\n"
11
11
  "PO-Revision-Date: 2023-11-15 15:21+0100\n"
12
12
  "Last-Translator: \n"
13
13
  "Language-Team: \n"
@@ -18,9 +18,82 @@ msgstr ""
18
18
  "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
19
19
  "X-Generator: Poedit 3.4.1\n"
20
20
 
21
+ msgid "Equal"
22
+ msgstr ""
23
+
24
+ msgid "Not equal"
25
+ msgstr ""
26
+
27
+ msgid "Less"
28
+ msgstr ""
29
+
30
+ msgid "Less or equal"
31
+ msgstr ""
32
+
33
+ msgid "Greater"
34
+ msgstr ""
35
+
36
+ msgid "Greater or equal"
37
+ msgstr ""
38
+
39
+ msgid "Between"
40
+ msgstr ""
41
+
42
+ msgid "Not between"
43
+ msgstr ""
44
+
45
+ msgid "In"
46
+ msgstr ""
47
+
48
+ msgid "Not in"
49
+ msgstr ""
50
+
51
+ msgid "Begins with"
52
+ msgstr ""
53
+
54
+ msgid "Not begins with"
55
+ msgstr ""
56
+
57
+ msgid "Contains"
58
+ msgstr ""
59
+
60
+ msgid "Not contains"
61
+ msgstr ""
62
+
63
+ msgid "End with"
64
+ msgstr ""
65
+
66
+ msgid "Not ends with"
67
+ msgstr ""
68
+
69
+ msgid "Is empty"
70
+ msgstr ""
71
+
72
+ msgid "Is null"
73
+ msgstr ""
74
+
75
+ msgid "Is not null"
76
+ msgstr ""
77
+
78
+ msgid "Before"
79
+ msgstr ""
80
+
81
+ msgid "After"
82
+ msgstr ""
83
+
84
+ msgid "In the last"
85
+ msgstr ""
86
+
87
+ msgid "In the next"
88
+ msgstr ""
89
+
21
90
  msgid "Hold down “Control”, or “Command” on a Mac, to select more than one."
22
91
  msgstr "Pre vybratie viacerých súborov podržte “Control”, alebo “Command” na Mac-u."
23
92
 
93
+ #, python-format
94
+ msgid "Change history: %s"
95
+ msgstr "História zmien: %s"
96
+
24
97
  msgid "Clear"
25
98
  msgstr "Vymazať"
26
99
 
@@ -30,6 +103,15 @@ msgstr "Aktuálne"
30
103
  msgid "Change file"
31
104
  msgstr "Zmeniť súbor"
32
105
 
106
+ msgid "Cannot set parent to itself"
107
+ msgstr ""
108
+
109
+ msgid "Cannot set parent to it's own child"
110
+ msgstr ""
111
+
112
+ msgid "Search..."
113
+ msgstr "Vyhľadať..."
114
+
33
115
  msgid "Exit Reorder"
34
116
  msgstr "Ukončiť preusporiadanie"
35
117
 
@@ -46,6 +128,9 @@ msgstr "Exportovať vybrané"
46
128
  msgid "Delete Selected"
47
129
  msgstr "Odstrániť vybrané"
48
130
 
131
+ msgid "No selection made."
132
+ msgstr "Výber je prázdny"
133
+
49
134
  msgid "All"
50
135
  msgstr "Všetky"
51
136
 
@@ -105,6 +190,34 @@ msgstr "Posledných 90 dní"
105
190
  msgid "Last 12 months"
106
191
  msgstr "Posledných 12 mesiacov"
107
192
 
193
+ msgctxt "Tree widget"
194
+ msgid "Loading..."
195
+ msgstr "Načítavanie..."
196
+
197
+ msgctxt "Tree widget"
198
+ msgid "Load error!"
199
+ msgstr "Chyba pri načítavaní!"
200
+
201
+ msgctxt "Tree widget"
202
+ msgid "More..."
203
+ msgstr "Viac..."
204
+
205
+ msgctxt "Tree widget"
206
+ msgid "No data."
207
+ msgstr "Žiadne dáta."
208
+
209
+ msgid "System"
210
+ msgstr "Systém"
211
+
212
+ msgid "Dark"
213
+ msgstr "Tmavá"
214
+
215
+ msgid "Light"
216
+ msgstr "Svetlá"
217
+
218
+ msgid "Theme"
219
+ msgstr "Téma"
220
+
108
221
  msgid "Translations"
109
222
  msgstr "Preklady"
110
223
 
@@ -120,6 +233,22 @@ msgstr[0] "Opravte chybu nižšie."
120
233
  msgstr[1] "Opravte chyby nižšie."
121
234
  msgstr[2] "Opravte chyby nižšie."
122
235
 
236
+ msgid "Save"
237
+ msgstr "Uložiť"
238
+
239
+ msgid "Close"
240
+ msgstr "Zatvoriť"
241
+
242
+ msgid "Prev"
243
+ msgstr "Pred."
244
+
245
+ #, python-format
246
+ msgid "<strong>%(current_index)s</strong> / %(all_objects_count)s"
247
+ msgstr ""
248
+
249
+ msgid "Next"
250
+ msgstr "Ďal."
251
+
123
252
  msgid "Back"
124
253
  msgstr "Naspäť"
125
254
 
@@ -158,12 +287,6 @@ msgstr "Nie, ísť späť"
158
287
  msgid "Yes, I’m sure"
159
288
  msgstr "Áno, som si istý"
160
289
 
161
- msgid "Home"
162
- msgstr "Domov"
163
-
164
- msgid "Delete multiple objects"
165
- msgstr "Zmazať viacero objektov"
166
-
167
290
  #, python-format
168
291
  msgid "Deleting the selected %(objects_name)s would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
169
292
  msgstr "Odstránenie vybraných %(objects_name)s vyžaduje odstránenie súvisiacich objektov ale váš účet nemá potrebné povolenia na odstránenie týchto objektov:"
@@ -179,18 +302,6 @@ msgstr "Ste si istý že chcete odstrániť vybrané %(objects_name)s? Všetky n
179
302
  msgid "Add"
180
303
  msgstr "Pridať"
181
304
 
182
- msgid "Save view"
183
- msgstr "Uložiť zobrazenie"
184
-
185
- msgid "Search and filter"
186
- msgstr "Hľadať a filtrovať"
187
-
188
- msgid "Select all"
189
- msgstr "Vybrať všetky"
190
-
191
- msgid "Select none"
192
- msgstr "Odstrániť výber"
193
-
194
305
  msgid "For page"
195
306
  msgstr "Veľkost strany"
196
307
 
@@ -206,18 +317,42 @@ msgstr "Akcia"
206
317
  msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
207
318
  msgstr "Tento objekt nemá históriu zmien. Pravdepodobne nebolo pridané cez túto admin stránku."
208
319
 
320
+ msgid "Select all"
321
+ msgstr "Vybrať všetky"
322
+
323
+ msgid "Select none"
324
+ msgstr "Odstrániť výber"
325
+
326
+ msgid "Save view"
327
+ msgstr "Uložiť zobrazenie"
328
+
329
+ msgid "Search and filter"
330
+ msgstr "Hľadať a filtrovať"
331
+
332
+ msgid "Quick Search"
333
+ msgstr "Rýchle vyhľadávanie"
334
+
335
+ msgid "Saved Views"
336
+ msgstr "Uložené zobrazenia"
337
+
338
+ msgid "Advanced Filters"
339
+ msgstr "Rozšírené filtrovanie"
340
+
341
+ msgid "Search"
342
+ msgstr "Vyhľadať"
343
+
209
344
  msgid "Copy"
210
345
  msgstr "Kopírovať"
211
346
 
212
- msgid "Save"
213
- msgstr "Uložiť"
214
-
215
347
  msgid "Show translations"
216
348
  msgstr "Zobraziť preklady"
217
349
 
350
+ msgid "Save Order"
351
+ msgstr "Uložiť zoradenie"
352
+
218
353
  #, python-format
219
354
  msgid "You are authenticated as %(username)s, but are not authorized to access this page. Would you like to login to a different account?"
220
- msgstr ""
355
+ msgstr "Ste prihlásený ako %(username)s, ale k tejto stránke nemáte prístup. Chcete sa prihlásiť pod iným účtom?"
221
356
 
222
357
  msgid "Welcome back"
223
358
  msgstr "Vitajte späť"
@@ -308,6 +443,9 @@ msgstr "Vybrať všetky"
308
443
  msgid "Remove"
309
444
  msgstr "Odstrániť"
310
445
 
446
+ msgid "View Results"
447
+ msgstr "Zobraziť výsledky"
448
+
311
449
  msgid ""
312
450
  "\n"
313
451
  " <button class=\"btn btn-primary-light btn-tiny\">Add file</button>\n"
@@ -322,8 +460,11 @@ msgstr ""
322
460
  msgid "JPG, PNG, GIF or WEBP max 10MB"
323
461
  msgstr "JPG, PNG, GIF alebo WEBP max 10MB"
324
462
 
325
- msgid "Delete"
326
- msgstr "Zmazať"
463
+ msgid "Remove View"
464
+ msgstr "Odstrániť zobratenie"
465
+
466
+ msgid "Do you want to remove table view?"
467
+ msgstr "Naozaj chcete odstrániť toto zobrazenie?"
327
468
 
328
469
  msgid "Save view as"
329
470
  msgstr "Uložiť zobrazenie ako"
@@ -340,6 +481,9 @@ msgstr "alebo uložiť ako"
340
481
  msgid "Cancel"
341
482
  msgstr "Zrušiť"
342
483
 
484
+ msgid "Calendar"
485
+ msgstr "Kalendár"
486
+
343
487
  msgid "Yes"
344
488
  msgstr "Áno"
345
489
 
@@ -374,18 +518,27 @@ msgstr ""
374
518
  msgid "Awards"
375
519
  msgstr "Ocenenia"
376
520
 
521
+ msgid "Are you sure?"
522
+ msgstr "Ste si istý?"
523
+
524
+ msgid "Confirm"
525
+ msgstr "Potvrdiť"
526
+
377
527
  msgid "Loading..."
378
528
  msgstr "Načítavanie..."
379
529
 
530
+ #, python-format
531
+ msgid "Add another %(verbose_name)s"
532
+ msgstr "Pridať ďalší %(verbose_name)s"
533
+
380
534
  msgid "Change"
381
535
  msgstr "Zmeniť"
382
536
 
383
537
  msgid "View"
384
538
  msgstr "Zobraziť"
385
539
 
386
- #, python-format
387
- msgid "Add another %(verbose_name)s"
388
- msgstr "Pridať ďalší %(verbose_name)s"
540
+ msgid "Delete"
541
+ msgstr "Zmazať"
389
542
 
390
543
  msgid "results"
391
544
  msgstr "výsledky"
@@ -399,9 +552,6 @@ msgstr "Strom stránok"
399
552
  msgid "Reset filter"
400
553
  msgstr "Vymazať filtre"
401
554
 
402
- msgid "Search"
403
- msgstr "Vyhľadať"
404
-
405
555
  msgid "Sites"
406
556
  msgstr "Stránky"
407
557
 
@@ -481,6 +631,9 @@ msgstr "Duplikáty"
481
631
  msgid "Go back to admin homepage"
482
632
  msgstr "Naspäť na adminovú domovskú stránku"
483
633
 
634
+ msgid "Home"
635
+ msgstr "Domov"
636
+
484
637
  msgid "Go back to Filer app"
485
638
  msgstr "Naspäť do koreňového priečinka"
486
639
 
@@ -515,9 +668,6 @@ msgstr "Zobraziť menu"
515
668
  msgid "Change current folder details"
516
669
  msgstr "Zmeniť detaily priečinka"
517
670
 
518
- msgid "Close"
519
- msgstr "Zatvoriť"
520
-
521
671
  msgid "Limit"
522
672
  msgstr "Limit"
523
673
 
@@ -569,8 +719,8 @@ msgstr "Poradie sa upravuje, prosím čakajte"
569
719
  msgid "Logout"
570
720
  msgstr "Odhlásiť sa"
571
721
 
572
- msgid "Choose domain"
573
- msgstr "Zvoľte si doménu"
722
+ msgid "Continue"
723
+ msgstr "Pokračovať"
574
724
 
575
725
  msgid "Move to last"
576
726
  msgstr "Presunúť na posledné miesto"
@@ -584,6 +734,12 @@ msgstr "Posunúť nižšie"
584
734
  msgid "Reorder"
585
735
  msgstr "Preusporiadať"
586
736
 
737
+ msgid "Expand"
738
+ msgstr "Rozbaliť"
739
+
740
+ msgid "Collapse"
741
+ msgstr "Zbaliť"
742
+
587
743
  #, python-brace-format
588
744
  msgid "<strong>${from} - ${to}</strong> of <strong>${total}</strong><span class=\"max-xs:hidden\"> items</span>"
589
745
  msgstr "<strong>${from} - ${to}</strong> z <strong>${total}</strong><span class=\"max-xs:hidden\"> položiek</span>"
@@ -591,6 +747,10 @@ msgstr "<strong>${from} - ${to}</strong> z <strong>${total}</strong><span class=
591
747
  msgid "<strong>0</strong> items"
592
748
  msgstr "<strong>0</strong> položiek"
593
749
 
750
+ #, python-brace-format
751
+ msgid "${value} selected"
752
+ msgstr "${value} vybrané"
753
+
594
754
  msgid "Basic Settings"
595
755
  msgstr "Základné nastavenia"
596
756
 
@@ -615,6 +775,77 @@ msgstr "alebo pridajte potiahnutím"
615
775
  msgid "Edit"
616
776
  msgstr "Upraviť"
617
777
 
778
+ msgid "Open color picker"
779
+ msgstr "Otvoriť výber farieb"
780
+
781
+ msgid "Close color picker"
782
+ msgstr "Zatvoriť výber farieb"
783
+
784
+ msgid "Clear the selected color"
785
+ msgstr "Vymazať výber farby"
786
+
787
+ #, python-brace-format
788
+ msgid "Saturation: {s}. Brightness: {v}."
789
+ msgstr ""
790
+
791
+ msgid "Hue slider"
792
+ msgstr ""
793
+
794
+ msgid "Opacity slider"
795
+ msgstr ""
796
+
797
+ msgid "Color value field"
798
+ msgstr ""
799
+
800
+ msgid "Color format"
801
+ msgstr ""
802
+
803
+ msgid "Color swatch"
804
+ msgstr ""
805
+
806
+ msgid "Saturation and brightness selector. Use up, down, left and right arrow keys to select."
807
+ msgstr ""
808
+
809
+ msgid "drop your file here or"
810
+ msgstr ""
811
+
812
+ msgid "No file selected"
813
+ msgstr "Nebol vybraný žiadny súbor"
814
+
815
+ msgid "File is missing"
816
+ msgstr "Súbor chýba"
817
+
818
+ msgid "Lookup"
819
+ msgstr "Vyhľadať"
820
+
821
+ msgid "Choose File"
822
+ msgstr "Zvoľte súbor"
823
+
824
+ #, python-brace-format
825
+ msgid "Added {name} “{object}”."
826
+ msgstr "Pridané {name} “{object}”."
827
+
828
+ msgid "Added."
829
+ msgstr "Pridané."
830
+
831
+ msgid "and"
832
+ msgstr "a"
833
+
834
+ #, python-brace-format
835
+ msgid "Changed {fields} for {name} “{object}”."
836
+ msgstr "Zmenené {fields} pre {name} “{object}”"
837
+
838
+ #, python-brace-format
839
+ msgid "Changed {fields}."
840
+ msgstr "Zmenené {fields}."
841
+
842
+ #, python-brace-format
843
+ msgid "Deleted {name} “{object}”."
844
+ msgstr "Odstránené {name} “{object}”."
845
+
846
+ msgid "No fields changed."
847
+ msgstr "Žiadne zmeny."
848
+
618
849
  msgid "Not Translated"
619
850
  msgstr "Nepreložené"
620
851
 
@@ -628,4 +859,4 @@ msgid "Status"
628
859
  msgstr "Stav"
629
860
 
630
861
  msgid " of "
631
- msgstr ""
862
+ msgstr " z "
@@ -0,0 +1,26 @@
1
+ # Generated by Django 5.0.3 on 2025-07-29 08:28
2
+
3
+ import django.db.models.deletion
4
+ from django.conf import settings
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ('django_smartbase_admin', '0004_alter_sbadminlistviewconfiguration_action_and_more'),
12
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.CreateModel(
17
+ name='SBAdminUserConfiguration',
18
+ fields=[
19
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20
+ ('created_at', models.DateTimeField(auto_now_add=True)),
21
+ ('updated_at', models.DateTimeField(auto_now=True)),
22
+ ('color_scheme', models.CharField(choices=[('auto', '<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Translation"></use></svg><span>System</span></span>'), ('dark', '<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Moon"></use></svg><span>Dark</span></span>'), ('light', '<span class="flex gap-8"><svg class="w-20 h-20"><use href="#Sun-one"></use></svg><span>Light</span></span>')], default='auto', max_length=255, verbose_name='Theme')),
23
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
24
+ ],
25
+ ),
26
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.0.14 on 2025-08-04 06:22
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('django_smartbase_admin', '0005_sbadminuserconfiguration'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name='sbadminuserconfiguration',
15
+ name='color_scheme',
16
+ field=models.CharField(choices=[('auto', 'System'), ('dark', 'Dark'), ('light', 'Light')], default='auto', max_length=255, verbose_name='Theme'),
17
+ ),
18
+ ]
@@ -1,9 +1,16 @@
1
1
  from django.conf import settings
2
2
  from django.db import models
3
+ from django.utils.translation import gettext_lazy as _
3
4
 
4
5
  from django_smartbase_admin.querysets import SBAdminListViewConfigurationQueryset
5
6
 
6
7
 
8
+ class ColorScheme(models.TextChoices):
9
+ AUTO = "auto", _("System")
10
+ DARK = "dark", _("Dark")
11
+ LIGHT = "light", _("Light")
12
+
13
+
7
14
  class SBAdminListViewConfiguration(models.Model):
8
15
  created_at = models.DateTimeField(auto_now_add=True)
9
16
  updated_at = models.DateTimeField(auto_now=True)
@@ -18,3 +25,18 @@ class SBAdminListViewConfiguration(models.Model):
18
25
  url_params = models.TextField()
19
26
 
20
27
  objects = SBAdminListViewConfigurationQueryset.as_manager()
28
+
29
+
30
+ class SBAdminUserConfiguration(models.Model):
31
+ created_at = models.DateTimeField(auto_now_add=True)
32
+ updated_at = models.DateTimeField(auto_now=True)
33
+ user = models.ForeignKey(
34
+ to=settings.AUTH_USER_MODEL,
35
+ on_delete=models.CASCADE,
36
+ )
37
+ color_scheme = models.CharField(
38
+ max_length=255,
39
+ choices=ColorScheme.choices,
40
+ default=ColorScheme.AUTO,
41
+ verbose_name=_("Theme"),
42
+ )
@@ -0,0 +1,96 @@
1
+ import django.contrib.admin.helpers
2
+ from django.contrib.admin.utils import lookup_field, display_for_field
3
+ from django.core.exceptions import ObjectDoesNotExist
4
+ from django.db import models
5
+ from django.db.models import ManyToManyRel, ForeignObjectRel, OneToOneField
6
+ from django.template.defaultfilters import linebreaksbr
7
+ from django.template.loader import render_to_string
8
+ from django.utils.html import conditional_escape
9
+ from django.utils.safestring import mark_safe
10
+
11
+ from django_smartbase_admin.admin.site import sb_admin_site
12
+
13
+
14
+ class SBAdminReadonlyField(django.contrib.admin.helpers.AdminReadonlyField):
15
+ readonly_template = "sb_admin/includes/readonly_field.html"
16
+ readonly_boolean_template = "sb_admin/includes/readonly_boolean_field.html"
17
+
18
+ def _boolean_field_content(self, value):
19
+ return mark_safe(
20
+ render_to_string(
21
+ template_name=self.readonly_boolean_template,
22
+ context={
23
+ "field_label": self.field.get("label"),
24
+ "field_name": self.field.get("name"),
25
+ "value": value,
26
+ },
27
+ ),
28
+ )
29
+
30
+ def contents(self, request=None):
31
+ if self.model_admin.admin_site.name != sb_admin_site.name:
32
+ return super().contents()
33
+
34
+ field, obj, model_admin = (
35
+ self.field["field"],
36
+ self.form.instance,
37
+ self.model_admin,
38
+ )
39
+ try:
40
+ f, attr, value = lookup_field(field, obj, model_admin)
41
+ except (AttributeError, ValueError, ObjectDoesNotExist):
42
+ result_repr = self.empty_value_display
43
+ else:
44
+ if field in self.form.fields:
45
+ widget = self.form[field].field.widget
46
+ # This isn't elegant but suffices for contrib.auth's
47
+ # ReadOnlyPasswordHashWidget.
48
+ if getattr(widget, "read_only", False):
49
+ return widget.render(field, value)
50
+ if f is None:
51
+ if getattr(attr, "boolean", False):
52
+ return self._boolean_field_content(value)
53
+ else:
54
+ if hasattr(value, "__html__"):
55
+ result_repr = value
56
+ else:
57
+ result_repr = linebreaksbr(value)
58
+ else:
59
+ base_field = self.form.fields.get(
60
+ field
61
+ ) or model_admin.all_base_fields_form.base_fields.get(field)
62
+ if isinstance(f.remote_field, ManyToManyRel) and value is not None:
63
+ # get label from widget if has base_field
64
+ if base_field:
65
+ result_repr = base_field.widget.get_label(
66
+ request, list(value.all())
67
+ )
68
+ else:
69
+ result_repr = ", ".join(map(str, value.all()))
70
+ elif (
71
+ isinstance(f.remote_field, (ForeignObjectRel, OneToOneField))
72
+ and value is not None
73
+ ):
74
+ # get label from widget if has base_field
75
+ if base_field:
76
+ result_repr = base_field.widget.get_label(
77
+ request, getattr(obj, field)
78
+ )
79
+ else:
80
+ result_repr = self.get_admin_url(f.remote_field, value)
81
+ else:
82
+ if isinstance(f, models.BooleanField):
83
+ return self._boolean_field_content(value)
84
+ result_repr = display_for_field(value, f, self.empty_value_display)
85
+ result_repr = linebreaksbr(result_repr)
86
+ return render_to_string(
87
+ template_name=self.readonly_template,
88
+ context={
89
+ "readonly_content": conditional_escape(result_repr),
90
+ "field_label": self.field.get("label"),
91
+ "field_label_suffix": self.form.label_suffix,
92
+ },
93
+ )
94
+
95
+
96
+ django.contrib.admin.helpers.AdminReadonlyField = SBAdminReadonlyField
@@ -14,7 +14,7 @@ def monkeypatch_get_foreign_key(fnc):
14
14
  result = models.ForeignKey(
15
15
  model.original_model, on_delete=models.DO_NOTHING
16
16
  )
17
- result.name = SBAdminFakeInlineMixin.fk_name
17
+ result.set_attributes_from_name(SBAdminFakeInlineMixin.fk_name)
18
18
 
19
19
  return result
20
20
 
@@ -2,6 +2,9 @@ from django.db import models
2
2
 
3
3
 
4
4
  class SBAdminListViewConfigurationQueryset(models.QuerySet):
5
+ def by_id(self, config_id):
6
+ return self.filter(id=config_id)
7
+
5
8
  def by_user_id(self, user_id):
6
9
  return self.filter(user_id=user_id)
7
10
 
@@ -20,3 +20,33 @@ class SBAdminConfigurationService(object):
20
20
  return slugify(view_id)
21
21
  else:
22
22
  return view_id
23
+
24
+
25
+ class SBAdminUserConfigurationService(object):
26
+ @classmethod
27
+ def get_user_config(cls, request):
28
+ """Delegate to the configuration class's get_user_config method."""
29
+ configuration_class = import_string(settings.SB_ADMIN_CONFIGURATION)
30
+ return configuration_class.get_user_config(request)
31
+
32
+ @classmethod
33
+ def get_saved_views(cls, request, view_id):
34
+ """Delegate to the configuration class's get_saved_views method."""
35
+ configuration_class = import_string(settings.SB_ADMIN_CONFIGURATION)
36
+ return configuration_class.get_saved_views(request, view_id)
37
+
38
+ @classmethod
39
+ def create_or_update_saved_view(
40
+ cls, request, view_id, config_id, config_name, url_params
41
+ ):
42
+ """Delegate to the configuration class's create_or_update_saved_view method."""
43
+ configuration_class = import_string(settings.SB_ADMIN_CONFIGURATION)
44
+ return configuration_class.create_or_update_saved_view(
45
+ request, view_id, config_id, config_name, url_params
46
+ )
47
+
48
+ @classmethod
49
+ def delete_saved_view(cls, request, view_id, config_id):
50
+ """Delegate to the configuration class's delete_saved_view method."""
51
+ configuration_class = import_string(settings.SB_ADMIN_CONFIGURATION)
52
+ return configuration_class.delete_saved_view(request, view_id, config_id)