wagtail 6.1.3__py3-none-any.whl → 6.2rc1__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 (257) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_for_translation.py +15 -1
  3. wagtail/admin/checks.py +20 -30
  4. wagtail/admin/forms/pages.py +10 -0
  5. wagtail/admin/icons.py +43 -0
  6. wagtail/admin/locale/en/LC_MESSAGES/django.po +405 -295
  7. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +21 -3
  8. wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
  9. wagtail/admin/locale/sl/LC_MESSAGES/django.po +30 -0
  10. wagtail/admin/menu.py +2 -2
  11. wagtail/admin/migrations/0004_editingsession.py +57 -0
  12. wagtail/admin/migrations/0005_editingsession_is_editing.py +18 -0
  13. wagtail/admin/models.py +36 -3
  14. wagtail/admin/rich_text/editors/draftail/__init__.py +2 -20
  15. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  16. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  17. wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
  18. wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
  19. wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
  20. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  21. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  22. wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
  23. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  24. wagtail/admin/static/wagtailadmin/js/expanding-formset.js +1 -1
  25. wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
  26. wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
  27. wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
  28. wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
  29. wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
  30. wagtail/admin/static/wagtailadmin/js/preview-panel.js +2 -1
  31. wagtail/admin/static/wagtailadmin/js/preview-panel.js.LICENSE.txt +11 -0
  32. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  33. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  34. wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
  35. wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
  36. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  37. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  38. wagtail/admin/static/wagtailadmin/js/userbar.js +2 -1
  39. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +11 -0
  40. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  41. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +0 -12
  42. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  43. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  44. wagtail/admin/templates/wagtailadmin/collection_privacy/ancestor_privacy.html +2 -6
  45. wagtail/admin/templates/wagtailadmin/generic/index_results.html +1 -17
  46. wagtail/admin/templates/wagtailadmin/generic/listing_results.html +20 -1
  47. wagtail/admin/templates/wagtailadmin/home/workflow_objects_to_moderate.html +2 -11
  48. wagtail/admin/templates/wagtailadmin/page_privacy/ancestor_privacy.html +2 -6
  49. wagtail/admin/templates/wagtailadmin/page_privacy/no_privacy.html +2 -0
  50. wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +0 -1
  51. wagtail/admin/templates/wagtailadmin/pages/action_menu/menu.html +1 -1
  52. wagtail/admin/templates/wagtailadmin/reports/aging_pages_results.html +54 -0
  53. wagtail/admin/templates/wagtailadmin/reports/base_page_report.html +1 -17
  54. wagtail/admin/templates/wagtailadmin/reports/base_page_report_results.html +10 -0
  55. wagtail/admin/templates/wagtailadmin/reports/base_report.html +1 -40
  56. wagtail/admin/templates/wagtailadmin/reports/base_report_results.html +1 -0
  57. wagtail/admin/templates/wagtailadmin/reports/listing/_list_page_report.html +21 -27
  58. wagtail/admin/templates/wagtailadmin/reports/listing/_list_page_types_usage.html +48 -54
  59. wagtail/admin/templates/wagtailadmin/reports/{locked_pages.html → locked_pages_results.html} +3 -3
  60. wagtail/admin/templates/wagtailadmin/reports/page_types_usage_results.html +10 -0
  61. wagtail/admin/templates/wagtailadmin/reports/site_history_results.html +53 -0
  62. wagtail/admin/templates/wagtailadmin/reports/workflow_results.html +74 -0
  63. wagtail/admin/templates/wagtailadmin/reports/workflow_tasks_results.html +56 -0
  64. wagtail/admin/templates/wagtailadmin/shared/_workflow_init.html +8 -44
  65. wagtail/admin/templates/wagtailadmin/shared/avatar.html +11 -1
  66. wagtail/admin/templates/wagtailadmin/shared/dialog/dialog.html +5 -4
  67. wagtail/admin/templates/wagtailadmin/shared/dropdown/dropdown_button.html +2 -1
  68. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/list.html +132 -0
  69. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/module.html +44 -0
  70. wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +7 -1
  71. wagtail/admin/templates/wagtailadmin/shared/page_status_tag_new.html +1 -1
  72. wagtail/admin/templates/wagtailadmin/shared/side_panels/checks.html +32 -16
  73. wagtail/admin/templates/wagtailadmin/skeleton.html +1 -1
  74. wagtail/admin/templates/wagtailadmin/userbar/item_accessibility.html +9 -11
  75. wagtail/admin/templatetags/wagtailadmin_tags.py +13 -2
  76. wagtail/admin/tests/formats/en/__init__.py +0 -0
  77. wagtail/admin/tests/formats/en/formats.py +1 -0
  78. wagtail/admin/tests/pages/test_create_page.py +47 -0
  79. wagtail/admin/tests/pages/test_edit_page.py +10 -8
  80. wagtail/admin/tests/pages/test_parent_page_chooser_view.py +45 -1
  81. wagtail/admin/tests/test_checks.py +53 -3
  82. wagtail/admin/tests/test_collections_views.py +62 -1
  83. wagtail/admin/tests/test_edit_handlers.py +37 -0
  84. wagtail/admin/tests/test_editing_sessions.py +1336 -0
  85. wagtail/admin/tests/test_icon_sprite.py +12 -21
  86. wagtail/admin/tests/test_page_chooser.py +309 -7
  87. wagtail/admin/tests/test_privacy.py +82 -0
  88. wagtail/admin/tests/test_reports_views.py +464 -70
  89. wagtail/admin/tests/test_userbar.py +93 -6
  90. wagtail/admin/tests/test_workflows.py +223 -33
  91. wagtail/admin/tests/viewsets/test_model_viewset.py +151 -2
  92. wagtail/admin/ui/editing_sessions.py +57 -0
  93. wagtail/admin/urls/__init__.py +9 -15
  94. wagtail/admin/urls/editing_sessions.py +17 -0
  95. wagtail/admin/urls/reports.py +33 -1
  96. wagtail/admin/userbar.py +77 -20
  97. wagtail/admin/views/chooser.py +49 -22
  98. wagtail/admin/views/collections.py +0 -11
  99. wagtail/admin/views/editing_sessions.py +193 -0
  100. wagtail/admin/views/generic/__init__.py +1 -0
  101. wagtail/admin/views/generic/history.py +9 -3
  102. wagtail/admin/views/generic/mixins.py +44 -3
  103. wagtail/admin/views/generic/models.py +46 -72
  104. wagtail/admin/views/generic/permissions.py +20 -10
  105. wagtail/admin/views/home.py +2 -31
  106. wagtail/admin/views/page_privacy.py +20 -5
  107. wagtail/admin/views/pages/choose_parent.py +62 -0
  108. wagtail/admin/views/pages/edit.py +28 -0
  109. wagtail/admin/views/reports/aging_pages.py +6 -10
  110. wagtail/admin/views/reports/audit_logging.py +13 -42
  111. wagtail/admin/views/reports/base.py +31 -4
  112. wagtail/admin/views/reports/locked_pages.py +5 -8
  113. wagtail/admin/views/reports/page_types_usage.py +6 -10
  114. wagtail/admin/views/reports/workflows.py +36 -12
  115. wagtail/admin/viewsets/base.py +8 -3
  116. wagtail/admin/viewsets/chooser.py +1 -1
  117. wagtail/admin/viewsets/model.py +26 -1
  118. wagtail/admin/wagtail_hooks.py +2 -1
  119. wagtail/api/v2/filters.py +6 -0
  120. wagtail/api/v2/tests/test_documents.py +1 -1
  121. wagtail/api/v2/tests/test_images.py +1 -1
  122. wagtail/api/v2/tests/test_pages.py +11 -1
  123. wagtail/api/v2/utils.py +2 -2
  124. wagtail/blocks/base.py +35 -12
  125. wagtail/blocks/definition_lookup.py +85 -0
  126. wagtail/blocks/list_block.py +12 -0
  127. wagtail/blocks/migrations/migrate_operation.py +2 -0
  128. wagtail/blocks/stream_block.py +19 -0
  129. wagtail/blocks/struct_block.py +19 -0
  130. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +1 -1
  131. wagtail/contrib/frontend_cache/backends/__init__.py +5 -0
  132. wagtail/contrib/frontend_cache/backends/azure.py +179 -0
  133. wagtail/contrib/frontend_cache/backends/base.py +28 -0
  134. wagtail/contrib/frontend_cache/backends/cloudflare.py +114 -0
  135. wagtail/contrib/frontend_cache/backends/cloudfront.py +99 -0
  136. wagtail/contrib/frontend_cache/backends/http.py +64 -0
  137. wagtail/contrib/frontend_cache/tests.py +59 -17
  138. wagtail/contrib/frontend_cache/utils.py +26 -8
  139. wagtail/contrib/redirects/filters.py +15 -1
  140. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +37 -72
  141. wagtail/contrib/redirects/models.py +6 -5
  142. wagtail/contrib/redirects/templates/wagtailredirects/edit.html +1 -38
  143. wagtail/contrib/redirects/tests/test_redirects.py +141 -1
  144. wagtail/contrib/redirects/urls.py +1 -2
  145. wagtail/contrib/redirects/views.py +39 -80
  146. wagtail/contrib/routable_page/models.py +6 -4
  147. wagtail/contrib/routable_page/tests.py +11 -0
  148. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +1 -1
  149. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +4 -4
  150. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +5 -1
  151. wagtail/contrib/simple_translation/models.py +2 -1
  152. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
  153. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  154. wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
  155. wagtail/contrib/typed_table_block/blocks.py +19 -0
  156. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
  157. wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
  158. wagtail/contrib/typed_table_block/tests.py +38 -0
  159. wagtail/coreutils.py +1 -1
  160. wagtail/documents/__init__.py +1 -1
  161. wagtail/documents/locale/en/LC_MESSAGES/django.po +8 -8
  162. wagtail/documents/locale/sl/LC_MESSAGES/django.mo +0 -0
  163. wagtail/documents/locale/sl/LC_MESSAGES/django.po +20 -0
  164. wagtail/documents/models.py +5 -1
  165. wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
  166. wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
  167. wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
  168. wagtail/documents/tests/test_models.py +5 -1
  169. wagtail/embeds/apps.py +2 -0
  170. wagtail/embeds/embeds.py +12 -14
  171. wagtail/embeds/finders/__init__.py +2 -0
  172. wagtail/embeds/finders/facebook.py +17 -33
  173. wagtail/embeds/finders/instagram.py +19 -16
  174. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  175. wagtail/embeds/signal_handlers.py +13 -0
  176. wagtail/embeds/tests/test_embeds.py +7 -7
  177. wagtail/fields.py +58 -14
  178. wagtail/images/__init__.py +1 -1
  179. wagtail/images/locale/en/LC_MESSAGES/django.po +34 -34
  180. wagtail/images/locale/sl/LC_MESSAGES/django.mo +0 -0
  181. wagtail/images/locale/sl/LC_MESSAGES/django.po +20 -0
  182. wagtail/images/models.py +2 -0
  183. wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
  184. wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
  185. wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
  186. wagtail/images/templates/wagtailimages/images/edit.html +4 -4
  187. wagtail/images/tests/test_admin_views.py +26 -2
  188. wagtail/images/views/chooser.py +6 -1
  189. wagtail/locale/en/LC_MESSAGES/django.po +84 -80
  190. wagtail/locales/locale/en/LC_MESSAGES/django.po +2 -2
  191. wagtail/locales/tests.py +16 -0
  192. wagtail/locales/wagtail_hooks.py +0 -9
  193. wagtail/migrations/0094_alter_page_locale.py +19 -0
  194. wagtail/models/__init__.py +11 -5
  195. wagtail/models/i18n.py +6 -1
  196. wagtail/project_template/requirements.txt +1 -1
  197. wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
  198. wagtail/signals.py +4 -0
  199. wagtail/sites/locale/en/LC_MESSAGES/django.po +2 -2
  200. wagtail/sites/tests.py +15 -0
  201. wagtail/sites/wagtail_hooks.py +0 -9
  202. wagtail/snippets/locale/en/LC_MESSAGES/django.po +9 -9
  203. wagtail/snippets/permissions.py +5 -3
  204. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  205. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  206. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/menu.html +1 -1
  207. wagtail/snippets/tests/test_snippets.py +78 -12
  208. wagtail/snippets/tests/test_viewset.py +22 -0
  209. wagtail/snippets/views/snippets.py +19 -14
  210. wagtail/snippets/wagtail_hooks.py +2 -10
  211. wagtail/templatetags/wagtailcore_tags.py +3 -0
  212. wagtail/test/dummy_external_storage.py +1 -1
  213. wagtail/test/i18n/migrations/0003_alter_clusterabletestmodel_locale_and_more.py +40 -0
  214. wagtail/test/routablepage/models.py +4 -0
  215. wagtail/test/snippets/migrations/0012_alter_translatablesnippet_locale.py +20 -0
  216. wagtail/test/testapp/migrations/0038_sociallink.py +52 -0
  217. wagtail/test/testapp/migrations/0039_alter_eventcategory_locale_and_more.py +45 -0
  218. wagtail/test/testapp/models.py +24 -0
  219. wagtail/test/testapp/views.py +1 -0
  220. wagtail/test/testapp/wagtail_hooks.py +9 -0
  221. wagtail/test/urls_multilang.py +6 -1
  222. wagtail/test/urls_multilang_non_root.py +11 -0
  223. wagtail/tests/streamfield_migrations/test_migrations.py +53 -12
  224. wagtail/tests/test_audit_log.py +72 -2
  225. wagtail/tests/test_blocks.py +103 -0
  226. wagtail/tests/test_signals.py +49 -2
  227. wagtail/tests/test_streamfield.py +153 -0
  228. wagtail/tests/test_utils.py +14 -0
  229. wagtail/tests/tests.py +5 -0
  230. wagtail/users/apps.py +1 -0
  231. wagtail/users/forms.py +7 -0
  232. wagtail/users/locale/en/LC_MESSAGES/django.po +55 -50
  233. wagtail/users/models.py +1 -0
  234. wagtail/users/templates/wagtailusers/groups/includes/formatted_permissions.html +3 -2
  235. wagtail/users/templatetags/wagtailusers_tags.py +9 -0
  236. wagtail/users/tests/__init__.py +7 -1
  237. wagtail/users/tests/test_admin_views.py +117 -32
  238. wagtail/users/views/groups.py +4 -0
  239. wagtail/users/views/users.py +58 -14
  240. wagtail/users/wagtail_hooks.py +7 -123
  241. wagtail/utils/utils.py +1 -0
  242. wagtail/utils/version.py +5 -2
  243. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/METADATA +3 -3
  244. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/RECORD +248 -222
  245. wagtail/admin/templates/wagtailadmin/reports/aging_pages.html +0 -58
  246. wagtail/admin/templates/wagtailadmin/reports/page_types_usage.html +0 -18
  247. wagtail/admin/templates/wagtailadmin/reports/site_history.html +0 -57
  248. wagtail/admin/templates/wagtailadmin/reports/workflow.html +0 -81
  249. wagtail/admin/templates/wagtailadmin/reports/workflow_tasks.html +0 -63
  250. wagtail/contrib/frontend_cache/backends.py +0 -400
  251. wagtail/contrib/redirects/templates/wagtailredirects/list.html +0 -43
  252. wagtail/contrib/redirects/templates/wagtailredirects/reports/redirects_report.html +0 -14
  253. wagtail/contrib/redirects/tests/test_reports_view.py +0 -82
  254. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/LICENSE +0 -0
  255. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/WHEEL +0 -0
  256. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/entry_points.txt +0 -0
  257. {wagtail-6.1.3.dist-info → wagtail-6.2rc1.dist-info}/top_level.txt +0 -0
@@ -22,6 +22,12 @@ msgid_plural "%(num)s errors"
22
22
  msgstr[0] ""
23
23
  msgstr[1] ""
24
24
 
25
+ #: src/includes/contentMetrics.ts:113
26
+ msgid "%(num)s min"
27
+ msgid_plural "%(num)s mins"
28
+ msgstr[0] ""
29
+ msgstr[1] ""
30
+
25
31
  #: src/includes/sidePanel.js:152
26
32
  msgid "%(num)s pixel"
27
33
  msgid_plural "%(num)s pixels"
@@ -41,7 +47,7 @@ msgstr ""
41
47
  msgid "Are you sure?"
42
48
  msgstr ""
43
49
 
44
- #: src/entrypoints/admin/telepath/widgets.js:350
50
+ #: src/entrypoints/admin/telepath/widgets.js:407
45
51
  msgid "Blocks"
46
52
  msgstr ""
47
53
 
@@ -121,7 +127,7 @@ msgstr ""
121
127
  msgid "Enter your reply..."
122
128
  msgstr ""
123
129
 
124
- #: src/entrypoints/admin/preview-panel.js:276
130
+ #: src/entrypoints/admin/preview-panel.js:283
125
131
  msgid "Error while sending preview data."
126
132
  msgstr ""
127
133
 
@@ -268,7 +274,7 @@ msgstr ""
268
274
  msgid "Show latest content"
269
275
  msgstr ""
270
276
 
271
- #: src/entrypoints/admin/telepath/widgets.js:241
277
+ #: src/entrypoints/admin/telepath/widgets.js:298
272
278
  msgid "Split block"
273
279
  msgstr ""
274
280
 
@@ -276,6 +282,18 @@ msgstr ""
276
282
  msgid "The editor just crashed. Content has been reset to the last saved version."
277
283
  msgstr ""
278
284
 
285
+ #: src/components/StreamField/blocks/ListBlock.js:196
286
+ #: src/components/StreamField/blocks/StreamBlock.js:271
287
+ #: src/components/StreamField/blocks/StreamBlock.js:295
288
+ msgid "The maximum number of items is %(max_num)d"
289
+ msgstr ""
290
+
291
+ #: src/components/StreamField/blocks/ListBlock.js:207
292
+ #: src/components/StreamField/blocks/StreamBlock.js:279
293
+ #: src/components/StreamField/blocks/StreamBlock.js:309
294
+ msgid "The minimum number of items is %(min_num)d"
295
+ msgstr ""
296
+
279
297
  #: src/includes/chooserModal.js:21
280
298
  msgid "This field is required."
281
299
  msgstr ""
@@ -270,6 +270,13 @@ msgstr "Nova stran bo podrejena tej nadrejeni strani."
270
270
  msgid "You do not have permission to create a page under \"%(page_title)s\"."
271
271
  msgstr "Nimate dovoljenja za ustvarjanje strani pod \"%(page_title)s\"."
272
272
 
273
+ #, python-format
274
+ msgid ""
275
+ "You cannot create a page of type \"%(page_type)s\" under \"%(page_title)s\"."
276
+ msgstr ""
277
+ "Strani tipa \" 1%(page_type)s \" ne morete ustvariti pod \" 2%(page_title)s "
278
+ "\"."
279
+
273
280
  msgid "Search…"
274
281
  msgstr "Iskanje…"
275
282
 
@@ -706,6 +713,14 @@ msgstr ""
706
713
  "Ta %(model_name)s je bil označen kot potrebna sprememb pri <strong>%(task)s</"
707
714
  "strong> v <strong>%(workflow)s</strong>."
708
715
 
716
+ #, python-format
717
+ msgid ""
718
+ "This %(model_name)s is currently at <strong>%(task)s</strong> in "
719
+ "<strong>%(workflow)s</strong>."
720
+ msgstr ""
721
+ "Ta %(model_name)s je trenutno na <strong>%(task)s</strong> v "
722
+ "<strong>%(workflow)s</strong>."
723
+
709
724
  #, python-format
710
725
  msgid "Publishing this %(model_name)s will cancel the current workflow."
711
726
  msgstr "Objava tega %(model_name)s bo preklica trenutni potek dela."
@@ -1410,6 +1425,10 @@ msgstr "Ni rezultatov v '<span class=\"w-title-ellipsis\">%(title)s</span>'."
1410
1425
  msgid "Search the whole site"
1411
1426
  msgstr "Iskanje po celotnem spletnem mestu"
1412
1427
 
1428
+ #, python-format
1429
+ msgid "%(start_index)s-%(end_index)s of %(items_count)s"
1430
+ msgstr "%(start_index)s - %(end_index)s od %(items_count)s"
1431
+
1413
1432
  msgid "Sites menu"
1414
1433
  msgstr "Meniji strani"
1415
1434
 
@@ -2054,6 +2073,13 @@ msgstr ""
2054
2073
  "Ustvarjena ni bila nobena naloga. Zakaj nebi <a "
2055
2074
  "href=\"%(add_url)s\">ustvarili nove </a>?"
2056
2075
 
2076
+ #, python-format
2077
+ msgid ""
2078
+ "There are no enabled tasks. Why not <a href=\"%(add_url)s\">add one</a>?"
2079
+ msgstr ""
2080
+ "Omogočenih nalog ni. Zakaj ne bi dodali <a href=\"%(add_url)s\">eno nalogo</"
2081
+ "a>?"
2082
+
2057
2083
  #, python-format
2058
2084
  msgid "Pages that use workflow '%(name)s'"
2059
2085
  msgstr "Strani, ki uporabljajo potek dela '%(name)s'"
@@ -2640,6 +2666,10 @@ msgstr ""
2640
2666
  "navzdol, da premaknete element, nato pa pritisnite enter, da pošljete "
2641
2667
  "spremembo."
2642
2668
 
2669
+ #, python-format
2670
+ msgid "'%(page_title)s' has been moved successfully."
2671
+ msgstr "'%(page_title)s' je bil uspešno premaknjen."
2672
+
2643
2673
  #, python-format
2644
2674
  msgid "Page '%(page_title)s' is now unlocked."
2645
2675
  msgstr "Stran '%(page_title)s' je sedaj odklenjena."
wagtail/admin/menu.py CHANGED
@@ -228,7 +228,7 @@ class WagtailMenuRegisterable:
228
228
  url=self.menu_url,
229
229
  name=self.menu_name,
230
230
  icon_name=self.menu_icon,
231
- order=order or self.menu_order,
231
+ order=order if order is not None else self.menu_order,
232
232
  )
233
233
 
234
234
  @cached_property
@@ -286,7 +286,7 @@ class WagtailMenuRegisterableGroup(WagtailMenuRegisterable):
286
286
  menu=Menu(items=self.get_submenu_items()),
287
287
  name=self.menu_name,
288
288
  icon_name=self.menu_icon,
289
- order=order or self.menu_order,
289
+ order=order if order is not None else self.menu_order,
290
290
  )
291
291
 
292
292
 
@@ -0,0 +1,57 @@
1
+ # Generated by Django 5.1a1 on 2024-07-01 16:13
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
+ ("contenttypes", "0002_remove_content_type_name"),
12
+ ("wagtailadmin", "0003_admin_managed"),
13
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.CreateModel(
18
+ name="EditingSession",
19
+ fields=[
20
+ (
21
+ "id",
22
+ models.AutoField(
23
+ auto_created=True,
24
+ primary_key=True,
25
+ serialize=False,
26
+ verbose_name="ID",
27
+ ),
28
+ ),
29
+ ("object_id", models.CharField(max_length=255)),
30
+ ("last_seen_at", models.DateTimeField()),
31
+ (
32
+ "content_type",
33
+ models.ForeignKey(
34
+ on_delete=django.db.models.deletion.CASCADE,
35
+ related_name="+",
36
+ to="contenttypes.contenttype",
37
+ ),
38
+ ),
39
+ (
40
+ "user",
41
+ models.ForeignKey(
42
+ on_delete=django.db.models.deletion.CASCADE,
43
+ related_name="editing_sessions",
44
+ to=settings.AUTH_USER_MODEL,
45
+ ),
46
+ ),
47
+ ],
48
+ options={
49
+ "indexes": [
50
+ models.Index(
51
+ fields=["content_type", "object_id"],
52
+ name="wagtailadmi_content_717955_idx",
53
+ )
54
+ ],
55
+ },
56
+ ),
57
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.1a1 on 2024-07-03 19:02
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("wagtailadmin", "0004_editingsession"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name="editingsession",
15
+ name="is_editing",
16
+ field=models.BooleanField(default=False),
17
+ ),
18
+ ]
wagtail/admin/models.py CHANGED
@@ -1,5 +1,10 @@
1
+ from django.contrib.auth import get_user_model
2
+ from django.contrib.contenttypes.fields import GenericForeignKey
1
3
  from django.contrib.contenttypes.models import ContentType
2
- from django.db.models import Count, Model
4
+ from django.db import models
5
+ from django.db.models import Count
6
+ from django.utils import timezone
7
+ from django.utils.translation import gettext_lazy as _
3
8
  from modelcluster.fields import ParentalKey
4
9
  from taggit.models import Tag
5
10
 
@@ -14,11 +19,11 @@ from wagtail.models import Page
14
19
  # A dummy model that exists purely to attach the access_admin permission type to, so that it
15
20
  # doesn't get identified as a stale content type and removed by the remove_stale_contenttypes
16
21
  # management command.
17
- class Admin(Model):
22
+ class Admin(models.Model):
18
23
  class Meta:
19
24
  default_permissions = [] # don't create the default add / change / delete / view perms
20
25
  permissions = [
21
- ("access_admin", "Can access Wagtail admin"),
26
+ ("access_admin", _("Can access Wagtail admin")),
22
27
  ]
23
28
 
24
29
 
@@ -67,3 +72,31 @@ def popular_tags_for_model(model, count=10):
67
72
  .annotate(item_count=Count("taggit_taggeditem_items"))
68
73
  .order_by("-item_count")[:count]
69
74
  )
75
+
76
+
77
+ class EditingSession(models.Model):
78
+ user = models.ForeignKey(
79
+ get_user_model(),
80
+ on_delete=models.CASCADE,
81
+ related_name="editing_sessions",
82
+ )
83
+ content_type = models.ForeignKey(
84
+ ContentType, on_delete=models.CASCADE, related_name="+"
85
+ )
86
+ object_id = models.CharField(max_length=255)
87
+ content_object = GenericForeignKey(
88
+ "content_type", "object_id", for_concrete_model=False
89
+ )
90
+ last_seen_at = models.DateTimeField()
91
+ is_editing = models.BooleanField(default=False)
92
+
93
+ @staticmethod
94
+ def cleanup():
95
+ EditingSession.objects.filter(
96
+ last_seen_at__lt=timezone.now() - timezone.timedelta(hours=1)
97
+ ).delete()
98
+
99
+ class Meta:
100
+ indexes = [
101
+ models.Index(fields=["content_type", "object_id"]),
102
+ ]
@@ -1,10 +1,9 @@
1
1
  import json
2
2
  import warnings
3
3
 
4
+ from django.core.serializers.json import DjangoJSONEncoder
4
5
  from django.forms import Media, widgets
5
- from django.urls import reverse_lazy
6
6
  from django.utils.functional import cached_property
7
- from django.utils.translation import gettext_lazy
8
7
 
9
8
  from wagtail.admin.rich_text.converters.contentstate import ContentstateConverter
10
9
  from wagtail.admin.staticfiles import versioned_static
@@ -13,23 +12,6 @@ from wagtail.telepath import register
13
12
  from wagtail.widget_adapters import WidgetAdapter
14
13
 
15
14
 
16
- class LazyStringEncoder(json.JSONEncoder):
17
- """
18
- Add support for lazy strings to the JSON encoder so that URLs and
19
- translations can be resolved when rendering the widget only.
20
- """
21
-
22
- # The string "Edit" here is arbitrary, chosen because it exists elsewhere in the
23
- # translations dictionary and is likely to remain in the future.
24
- lazy_string_types = [type(reverse_lazy("Edit")), type(gettext_lazy("Edit"))]
25
-
26
- def default(self, obj):
27
- if type(obj) in self.lazy_string_types:
28
- return str(obj)
29
-
30
- return json.JSONEncoder.default(self, obj)
31
-
32
-
33
15
  class DraftailRichTextArea(widgets.HiddenInput):
34
16
  template_name = "wagtailadmin/widgets/draftail_rich_text_area.html"
35
17
  is_hidden = False
@@ -90,7 +72,7 @@ class DraftailRichTextArea(widgets.HiddenInput):
90
72
  context = super().get_context(name, value, attrs)
91
73
  context["widget"]["attrs"]["data-w-init-detail-value"] = json.dumps(
92
74
  self.options,
93
- cls=LazyStringEncoder,
75
+ cls=DjangoJSONEncoder,
94
76
  )
95
77
  return context
96
78