wagtail 6.2.2__py3-none-any.whl → 6.3rc2__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 (386) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_for_translation.py +6 -0
  3. wagtail/actions/publish_revision.py +3 -3
  4. wagtail/admin/action_menu.py +5 -3
  5. wagtail/admin/forms/account.py +1 -1
  6. wagtail/admin/icons.py +2 -6
  7. wagtail/admin/locale/cy/LC_MESSAGES/django.mo +0 -0
  8. wagtail/admin/locale/cy/LC_MESSAGES/django.po +32 -0
  9. wagtail/admin/locale/dv/LC_MESSAGES/django.mo +0 -0
  10. wagtail/admin/locale/dv/LC_MESSAGES/django.po +28 -0
  11. wagtail/admin/locale/en/LC_MESSAGES/django.po +451 -485
  12. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +7 -7
  13. wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
  14. wagtail/admin/locale/sl/LC_MESSAGES/django.po +150 -0
  15. wagtail/admin/locale/sl/LC_MESSAGES/djangojs.mo +0 -0
  16. wagtail/admin/locale/sl/LC_MESSAGES/djangojs.po +9 -2
  17. wagtail/admin/locale/ug/LC_MESSAGES/django.mo +0 -0
  18. wagtail/admin/locale/ug/LC_MESSAGES/django.po +3250 -196
  19. wagtail/admin/localization.py +12 -2
  20. wagtail/admin/panels/model_utils.py +1 -1
  21. wagtail/admin/site_summary.py +0 -2
  22. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  23. wagtail/admin/static/wagtailadmin/css/panels/draftail.css +1 -1
  24. wagtail/admin/static/wagtailadmin/images/email-header.jpg +0 -0
  25. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  26. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  27. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +12 -0
  28. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  29. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  30. wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
  31. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  32. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  33. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +1 -1
  34. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  35. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  36. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  37. wagtail/admin/staticfiles.py +6 -4
  38. wagtail/admin/templates/wagtailadmin/account/account.html +42 -59
  39. wagtail/admin/templates/wagtailadmin/admin_base.html +0 -28
  40. wagtail/admin/templates/wagtailadmin/bulk_actions/footer.html +1 -1
  41. wagtail/admin/templates/wagtailadmin/chooser/_search_results.html +7 -5
  42. wagtail/admin/templates/wagtailadmin/chooser/tables/page_navigate_to_children_cell.html +1 -1
  43. wagtail/admin/templates/wagtailadmin/generic/chooser/results.html +7 -5
  44. wagtail/admin/templates/wagtailadmin/generic/edit.html +0 -8
  45. wagtail/admin/templates/wagtailadmin/generic/form.html +60 -17
  46. wagtail/admin/templates/wagtailadmin/generic/index.html +17 -0
  47. wagtail/admin/templates/wagtailadmin/generic/index_results.html +9 -35
  48. wagtail/admin/templates/wagtailadmin/generic/inspect.html +2 -21
  49. wagtail/admin/templates/wagtailadmin/generic/listing.html +11 -17
  50. wagtail/admin/templates/wagtailadmin/generic/listing_results.html +19 -1
  51. wagtail/admin/templates/wagtailadmin/home/account_summary.html +26 -0
  52. wagtail/admin/templates/wagtailadmin/home/locked_pages.html +28 -18
  53. wagtail/admin/templates/wagtailadmin/home/recent_edits.html +28 -17
  54. wagtail/admin/templates/wagtailadmin/home/site_summary_pages.html +2 -2
  55. wagtail/admin/templates/wagtailadmin/home/upgrade_notification.html +35 -13
  56. wagtail/admin/templates/wagtailadmin/home/user_objects_in_workflow_moderation.html +28 -18
  57. wagtail/admin/templates/wagtailadmin/home/workflow_objects_to_moderate.html +43 -32
  58. wagtail/admin/templates/wagtailadmin/home.html +22 -5
  59. wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +0 -1
  60. wagtail/admin/templates/wagtailadmin/pages/action_menu/menu.html +1 -11
  61. wagtail/admin/templates/wagtailadmin/pages/action_menu/menu_item.html +1 -6
  62. wagtail/admin/templates/wagtailadmin/pages/action_menu/page_locked.html +1 -1
  63. wagtail/admin/templates/wagtailadmin/pages/action_menu/publish.html +1 -1
  64. wagtail/admin/templates/wagtailadmin/pages/action_menu/save_draft.html +1 -1
  65. wagtail/admin/templates/wagtailadmin/pages/bulk_actions/confirm_bulk_delete.html +12 -6
  66. wagtail/admin/templates/wagtailadmin/pages/bulk_actions/confirm_bulk_move.html +12 -7
  67. wagtail/admin/templates/wagtailadmin/pages/bulk_actions/confirm_bulk_publish.html +17 -11
  68. wagtail/admin/templates/wagtailadmin/pages/bulk_actions/confirm_bulk_unpublish.html +15 -9
  69. wagtail/admin/templates/wagtailadmin/pages/confirm_delete.html +9 -9
  70. wagtail/admin/templates/wagtailadmin/pages/confirm_move.html +2 -2
  71. wagtail/admin/templates/wagtailadmin/pages/confirm_unpublish.html +4 -4
  72. wagtail/admin/templates/wagtailadmin/pages/create.html +15 -34
  73. wagtail/admin/templates/wagtailadmin/pages/edit.html +15 -30
  74. wagtail/admin/templates/wagtailadmin/pages/explorable_index.html +6 -0
  75. wagtail/admin/templates/wagtailadmin/pages/explorable_index_results.html +60 -0
  76. wagtail/admin/templates/wagtailadmin/pages/index.html +1 -36
  77. wagtail/admin/templates/wagtailadmin/pages/index_results.html +2 -50
  78. wagtail/admin/templates/wagtailadmin/pages/listing/_locked_indicator.html +1 -1
  79. wagtail/admin/templates/wagtailadmin/pages/listing/_ordering_cell.html +1 -1
  80. wagtail/admin/templates/wagtailadmin/pages/listing/_page_header_buttons.html +1 -1
  81. wagtail/admin/templates/wagtailadmin/pages/listing/_page_title_column_header.html +3 -3
  82. wagtail/admin/templates/wagtailadmin/pages/listing/_pagination.html +1 -1
  83. wagtail/admin/templates/wagtailadmin/pages/listing.html +24 -0
  84. wagtail/admin/templates/wagtailadmin/pages/search.html +1 -20
  85. wagtail/admin/templates/wagtailadmin/pages/search_results.html +27 -25
  86. wagtail/admin/templates/wagtailadmin/permissions/includes/collection_member_permissions_formset.html +0 -1
  87. wagtail/admin/templates/wagtailadmin/reports/listing/_list_page_report.html +2 -2
  88. wagtail/admin/templates/wagtailadmin/reports/listing/_list_page_types_usage.html +6 -6
  89. wagtail/admin/templates/wagtailadmin/reports/workflow_tasks_results.html +1 -1
  90. wagtail/admin/templates/wagtailadmin/shared/action_menu/menu.html +14 -0
  91. wagtail/admin/templates/wagtailadmin/shared/action_menu/menu_item.html +6 -0
  92. wagtail/admin/templates/wagtailadmin/shared/avatar.html +13 -3
  93. wagtail/admin/templates/wagtailadmin/shared/header.html +0 -5
  94. wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +1 -1
  95. wagtail/admin/templates/wagtailadmin/shared/page_status_tag_new.html +4 -1
  96. wagtail/admin/templates/wagtailadmin/shared/pagination_nav.html +1 -1
  97. wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +1 -1
  98. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/locale.html +1 -1
  99. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/usage.html +2 -2
  100. wagtail/admin/templates/wagtailadmin/shared/side_panels/preview.html +94 -52
  101. wagtail/admin/templates/wagtailadmin/{pages/_unsaved_changes_warning.html → shared/unsaved_changes_warning.html} +4 -4
  102. wagtail/admin/templates/wagtailadmin/shared/usage_summary.html +2 -2
  103. wagtail/admin/templates/wagtailadmin/shared/workflow_history/detail.html +1 -7
  104. wagtail/admin/templates/wagtailadmin/shared/workflow_history/listing.html +1 -0
  105. wagtail/admin/templates/wagtailadmin/shared/workflow_history/{list.html → listing_results.html} +33 -35
  106. wagtail/admin/templates/wagtailadmin/tables/references_cell.html +1 -1
  107. wagtail/admin/templates/wagtailadmin/workflows/create.html +11 -36
  108. wagtail/admin/templates/wagtailadmin/workflows/create_task.html +0 -38
  109. wagtail/admin/templates/wagtailadmin/workflows/edit.html +44 -74
  110. wagtail/admin/templates/wagtailadmin/workflows/edit_task.html +27 -66
  111. wagtail/admin/templates/wagtailadmin/workflows/includes/task_usage_cell.html +4 -2
  112. wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_tasks_cell.html +4 -4
  113. wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_used_by_cell.html +15 -11
  114. wagtail/admin/templates/wagtailadmin/workflows/task_chooser/includes/results.html +7 -5
  115. wagtail/admin/templatetags/wagtailadmin_tags.py +51 -22
  116. wagtail/admin/tests/pages/test_content_type_use_view.py +82 -2
  117. wagtail/admin/tests/pages/test_edit_page.py +70 -0
  118. wagtail/admin/tests/pages/test_explorer_view.py +65 -4
  119. wagtail/admin/tests/pages/test_page_search.py +8 -7
  120. wagtail/admin/tests/pages/test_page_usage.py +3 -1
  121. wagtail/admin/tests/pages/test_preview.py +208 -63
  122. wagtail/admin/tests/pages/test_reorder_page.py +91 -1
  123. wagtail/admin/tests/pages/test_view_draft.py +32 -1
  124. wagtail/admin/tests/pages/test_workflow_history.py +288 -7
  125. wagtail/admin/tests/test_account_management.py +23 -3
  126. wagtail/admin/tests/test_audit_log.py +24 -2
  127. wagtail/admin/tests/test_collections_views.py +17 -5
  128. wagtail/admin/tests/test_dashboard.py +1 -1
  129. wagtail/admin/tests/test_edit_handlers.py +3 -2
  130. wagtail/admin/tests/test_icon_sprite.py +4 -0
  131. wagtail/admin/tests/test_privacy.py +5 -19
  132. wagtail/admin/tests/test_reports_views.py +1 -1
  133. wagtail/admin/tests/test_site_summary.py +3 -3
  134. wagtail/admin/tests/test_templatetags.py +27 -3
  135. wagtail/admin/tests/test_upgrade_notification.py +71 -18
  136. wagtail/admin/tests/test_views.py +2 -2
  137. wagtail/admin/tests/test_views_generic.py +13 -0
  138. wagtail/admin/tests/test_widgets.py +3 -3
  139. wagtail/admin/tests/test_workflows.py +172 -27
  140. wagtail/admin/tests/tests.py +1 -1
  141. wagtail/admin/tests/viewsets/test_model_viewset.py +55 -3
  142. wagtail/admin/ui/side_panels.py +19 -0
  143. wagtail/admin/ui/sidebar.py +4 -3
  144. wagtail/admin/ui/tables/__init__.py +14 -1
  145. wagtail/admin/ui/tables/pages.py +6 -1
  146. wagtail/admin/urls/pages.py +10 -1
  147. wagtail/admin/urls/workflows.py +6 -1
  148. wagtail/admin/views/account.py +5 -1
  149. wagtail/admin/views/collections.py +0 -2
  150. wagtail/admin/views/generic/base.py +118 -1
  151. wagtail/admin/views/generic/history.py +158 -26
  152. wagtail/admin/views/generic/models.py +113 -99
  153. wagtail/admin/views/home.py +24 -9
  154. wagtail/admin/views/page_privacy.py +54 -30
  155. wagtail/admin/views/pages/history.py +11 -4
  156. wagtail/admin/views/pages/listing.py +76 -89
  157. wagtail/admin/views/pages/preview.py +1 -1
  158. wagtail/admin/views/pages/search.py +27 -71
  159. wagtail/admin/views/pages/usage.py +63 -24
  160. wagtail/admin/views/pages/utils.py +4 -3
  161. wagtail/admin/views/reports/base.py +0 -6
  162. wagtail/admin/views/workflows.py +67 -25
  163. wagtail/admin/viewsets/model.py +4 -3
  164. wagtail/admin/widgets/chooser.py +2 -1
  165. wagtail/api/v2/tests/test_pages.py +15 -2
  166. wagtail/blocks/field_block.py +15 -3
  167. wagtail/blocks/static_block.py +3 -0
  168. wagtail/contrib/forms/locale/cy/LC_MESSAGES/django.mo +0 -0
  169. wagtail/contrib/forms/locale/cy/LC_MESSAGES/django.po +29 -1
  170. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +15 -11
  171. wagtail/contrib/forms/templates/wagtailforms/confirm_delete.html +1 -0
  172. wagtail/contrib/forms/templates/wagtailforms/index.html +1 -1
  173. wagtail/contrib/forms/templates/wagtailforms/index_results.html +1 -1
  174. wagtail/contrib/forms/templates/wagtailforms/list_submissions.html +2 -1
  175. wagtail/contrib/forms/templates/wagtailforms/panels/form_responses_panel.html +2 -2
  176. wagtail/contrib/forms/tests/test_views.py +234 -35
  177. wagtail/contrib/forms/utils.py +8 -14
  178. wagtail/contrib/forms/views.py +72 -27
  179. wagtail/contrib/frontend_cache/backends/azure.py +1 -1
  180. wagtail/contrib/frontend_cache/backends/cloudfront.py +2 -2
  181. wagtail/contrib/frontend_cache/backends/dummy.py +11 -0
  182. wagtail/contrib/frontend_cache/tests.py +31 -37
  183. wagtail/contrib/frontend_cache/utils.py +12 -5
  184. wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.mo +0 -0
  185. wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.po +16 -1
  186. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +20 -24
  187. wagtail/contrib/redirects/models.py +16 -1
  188. wagtail/contrib/redirects/signal_handlers.py +18 -3
  189. wagtail/contrib/redirects/templates/wagtailredirects/add.html +5 -16
  190. wagtail/contrib/redirects/templates/wagtailredirects/import_summary.html +1 -1
  191. wagtail/contrib/redirects/tests/test_redirects.py +49 -6
  192. wagtail/contrib/redirects/tests/test_signal_handlers.py +42 -1
  193. wagtail/contrib/redirects/views.py +27 -3
  194. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.mo +0 -0
  195. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.po +60 -1
  196. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +12 -18
  197. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/add.html +5 -8
  198. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/edit.html +15 -10
  199. wagtail/contrib/search_promotions/tests.py +13 -2
  200. wagtail/contrib/search_promotions/views.py +15 -3
  201. wagtail/contrib/settings/locale/cy/LC_MESSAGES/django.mo +0 -0
  202. wagtail/contrib/settings/locale/cy/LC_MESSAGES/django.po +6 -1
  203. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +2 -10
  204. wagtail/contrib/settings/templates/wagtailsettings/edit.html +12 -45
  205. wagtail/contrib/simple_translation/locale/cy/LC_MESSAGES/django.mo +0 -0
  206. wagtail/contrib/simple_translation/locale/cy/LC_MESSAGES/django.po +13 -1
  207. wagtail/contrib/simple_translation/locale/dv/LC_MESSAGES/django.mo +0 -0
  208. wagtail/contrib/simple_translation/locale/dv/LC_MESSAGES/django.po +3 -0
  209. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +4 -4
  210. wagtail/contrib/simple_translation/locale/sl/LC_MESSAGES/django.mo +0 -0
  211. wagtail/contrib/simple_translation/locale/sl/LC_MESSAGES/django.po +5 -2
  212. wagtail/contrib/simple_translation/tests/test_views.py +51 -0
  213. wagtail/contrib/simple_translation/wagtail_hooks.py +16 -11
  214. wagtail/contrib/styleguide/locale/cy/LC_MESSAGES/django.mo +0 -0
  215. wagtail/contrib/styleguide/locale/cy/LC_MESSAGES/django.po +5 -1
  216. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +1 -1
  217. wagtail/contrib/table_block/locale/cy/LC_MESSAGES/django.mo +0 -0
  218. wagtail/contrib/table_block/locale/cy/LC_MESSAGES/django.po +27 -1
  219. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  220. wagtail/contrib/typed_table_block/blocks.py +25 -0
  221. wagtail/contrib/typed_table_block/locale/cy/LC_MESSAGES/django.mo +0 -0
  222. wagtail/contrib/typed_table_block/locale/cy/LC_MESSAGES/django.po +12 -1
  223. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
  224. wagtail/contrib/typed_table_block/tests.py +24 -1
  225. wagtail/coreutils.py +5 -11
  226. wagtail/documents/admin_urls.py +2 -2
  227. wagtail/documents/locale/cy/LC_MESSAGES/django.mo +0 -0
  228. wagtail/documents/locale/cy/LC_MESSAGES/django.po +10 -0
  229. wagtail/documents/locale/en/LC_MESSAGES/django.po +61 -76
  230. wagtail/documents/migrations/0014_alter_document_file_size.py +18 -0
  231. wagtail/documents/models.py +1 -1
  232. wagtail/documents/rich_text/__init__.py +1 -3
  233. wagtail/documents/static/wagtaildocs/js/add-multiple.js +1 -1
  234. wagtail/documents/templates/wagtaildocs/bulk_actions/confirm_bulk_add_tags.html +5 -1
  235. wagtail/documents/templates/wagtaildocs/bulk_actions/confirm_bulk_add_to_collection.html +5 -1
  236. wagtail/documents/templates/wagtaildocs/bulk_actions/confirm_bulk_delete.html +11 -5
  237. wagtail/documents/templates/wagtaildocs/documents/add.html +13 -41
  238. wagtail/documents/templates/wagtaildocs/documents/edit.html +28 -56
  239. wagtail/documents/templates/wagtaildocs/documents/index.html +1 -4
  240. wagtail/documents/templates/wagtaildocs/homepage/site_summary_documents.html +2 -2
  241. wagtail/documents/templates/wagtaildocs/multiple/add.html +36 -41
  242. wagtail/documents/tests/test_admin_views.py +64 -6
  243. wagtail/documents/tests/test_site_summary.py +3 -3
  244. wagtail/documents/views/documents.py +103 -113
  245. wagtail/documents/views/multiple.py +19 -1
  246. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  247. wagtail/embeds/oembed_providers.py +9 -19
  248. wagtail/fields.py +43 -27
  249. wagtail/images/admin_urls.py +2 -2
  250. wagtail/images/blocks.py +230 -2
  251. wagtail/images/fields.py +17 -29
  252. wagtail/images/image_operations.py +1 -1
  253. wagtail/images/locale/cy/LC_MESSAGES/django.mo +0 -0
  254. wagtail/images/locale/cy/LC_MESSAGES/django.po +128 -1
  255. wagtail/images/locale/en/LC_MESSAGES/django.po +119 -129
  256. wagtail/images/migrations/0025_alter_image_file_alter_rendition_file.py +36 -43
  257. wagtail/images/migrations/0027_image_description.py +20 -0
  258. wagtail/images/models.py +120 -45
  259. wagtail/images/rich_text/__init__.py +1 -3
  260. wagtail/images/static/wagtailimages/js/add-multiple.js +1 -1
  261. wagtail/images/static/wagtailimages/js/image-block.js +1 -0
  262. wagtail/images/templates/wagtailimages/bulk_actions/confirm_bulk_add_tags.html +5 -1
  263. wagtail/images/templates/wagtailimages/bulk_actions/confirm_bulk_add_to_collection.html +5 -1
  264. wagtail/images/templates/wagtailimages/bulk_actions/confirm_bulk_delete.html +11 -5
  265. wagtail/images/templates/wagtailimages/chooser/results.html +2 -2
  266. wagtail/images/templates/wagtailimages/homepage/site_summary_images.html +2 -2
  267. wagtail/images/templates/wagtailimages/images/_file_field.html +2 -2
  268. wagtail/images/templates/wagtailimages/images/add.html +13 -31
  269. wagtail/images/templates/wagtailimages/images/edit.html +53 -82
  270. wagtail/images/templates/wagtailimages/images/index.html +1 -4
  271. wagtail/images/templates/wagtailimages/images/url_generator.html +1 -1
  272. wagtail/images/templates/wagtailimages/multiple/add.html +40 -47
  273. wagtail/images/templates/wagtailimages/widgets/image.html +5 -0
  274. wagtail/images/templates/wagtailimages/widgets/image_chooser.html +1 -1
  275. wagtail/images/tests/test_admin_views.py +70 -10
  276. wagtail/images/tests/test_blocks.py +367 -1
  277. wagtail/images/tests/test_image_operations.py +23 -0
  278. wagtail/images/tests/test_models.py +20 -0
  279. wagtail/images/tests/test_signal_handlers.py +99 -95
  280. wagtail/images/tests/test_site_summary.py +3 -3
  281. wagtail/images/tests/test_templatetags.py +11 -7
  282. wagtail/images/tests/tests.py +4 -0
  283. wagtail/images/views/images.py +103 -104
  284. wagtail/images/views/multiple.py +17 -1
  285. wagtail/locale/cy/LC_MESSAGES/django.mo +0 -0
  286. wagtail/locale/cy/LC_MESSAGES/django.po +3 -0
  287. wagtail/locale/en/LC_MESSAGES/django.po +137 -125
  288. wagtail/locale/sl/LC_MESSAGES/django.mo +0 -0
  289. wagtail/locale/sl/LC_MESSAGES/django.po +3 -0
  290. wagtail/locales/locale/en/LC_MESSAGES/django.po +8 -8
  291. wagtail/locales/views.py +4 -1
  292. wagtail/migrations/0089_log_entry_data_json_null_to_object.py +1 -7
  293. wagtail/models/__init__.py +122 -14
  294. wagtail/models/audit_log.py +1 -3
  295. wagtail/models/i18n.py +1 -2
  296. wagtail/project_template/Dockerfile +3 -3
  297. wagtail/project_template/requirements.txt +2 -2
  298. wagtail/query.py +17 -4
  299. wagtail/rich_text/__init__.py +2 -3
  300. wagtail/rich_text/pages.py +2 -4
  301. wagtail/rich_text/rewriters.py +2 -2
  302. wagtail/search/backends/database/mysql/query.py +3 -3
  303. wagtail/search/backends/database/sqlite/query.py +6 -6
  304. wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
  305. wagtail/sites/locale/en/LC_MESSAGES/django.po +6 -6
  306. wagtail/sites/views.py +0 -1
  307. wagtail/snippets/action_menu.py +14 -4
  308. wagtail/snippets/locale/cy/LC_MESSAGES/django.mo +0 -0
  309. wagtail/snippets/locale/cy/LC_MESSAGES/django.po +73 -1
  310. wagtail/snippets/locale/en/LC_MESSAGES/django.po +27 -33
  311. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  312. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  313. wagtail/snippets/templates/wagtailsnippets/bulk_actions/confirm_bulk_delete.html +5 -3
  314. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/locked.html +1 -1
  315. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/menu.html +1 -11
  316. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/menu_item.html +1 -6
  317. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/publish.html +1 -1
  318. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/save.html +1 -1
  319. wagtail/snippets/templates/wagtailsnippets/snippets/create.html +1 -18
  320. wagtail/snippets/templates/wagtailsnippets/snippets/edit.html +1 -14
  321. wagtail/snippets/templates/wagtailsnippets/snippets/index.html +2 -5
  322. wagtail/snippets/tests/test_preview.py +193 -61
  323. wagtail/snippets/tests/test_snippets.py +247 -38
  324. wagtail/snippets/tests/test_usage.py +5 -0
  325. wagtail/snippets/tests/test_viewset.py +25 -9
  326. wagtail/snippets/tests/test_workflows.py +232 -19
  327. wagtail/snippets/views/snippets.py +1 -10
  328. wagtail/test/numberformat.py +104 -0
  329. wagtail/test/settings.py +10 -0
  330. wagtail/test/settings_ui.py +2 -0
  331. wagtail/test/testapp/migrations/0010_alter_customimage_file_and_more.py +71 -78
  332. wagtail/test/testapp/migrations/0040_nocreatablesubpagetypespage_nosubpagetypespage.py +54 -0
  333. wagtail/test/testapp/migrations/0041_alter_jsonstreammodel_options.py +17 -0
  334. wagtail/test/testapp/migrations/0042_alter_customdocument_file_size_and_more.py +28 -0
  335. wagtail/test/testapp/migrations/0043_customimage_description.py +41 -0
  336. wagtail/test/testapp/migrations/0044_custompreviewsizesmodel_custompreviewsizespage.py +52 -0
  337. wagtail/test/testapp/migrations/0045_alter_streampage_body.py +52 -0
  338. wagtail/test/testapp/models.py +62 -4
  339. wagtail/test/testapp/rich_text.py +2 -2
  340. wagtail/test/testapp/templates/tests/form_page_landing.html +2 -1
  341. wagtail/test/testapp/urls.py +5 -0
  342. wagtail/test/testapp/views.py +5 -0
  343. wagtail/test/utils/page_tests.py +5 -5
  344. wagtail/test/utils/template_tests.py +2 -2
  345. wagtail/tests/test_blocks.py +15 -0
  346. wagtail/tests/test_page_permissions.py +109 -0
  347. wagtail/tests/test_revision_model.py +27 -0
  348. wagtail/tests/test_signals.py +21 -2
  349. wagtail/tests/test_tests.py +30 -0
  350. wagtail/users/locale/cy/LC_MESSAGES/django.mo +0 -0
  351. wagtail/users/locale/cy/LC_MESSAGES/django.po +118 -1
  352. wagtail/users/locale/dv/LC_MESSAGES/django.mo +0 -0
  353. wagtail/users/locale/dv/LC_MESSAGES/django.po +3 -0
  354. wagtail/users/locale/en/LC_MESSAGES/django.po +89 -113
  355. wagtail/users/locale/sl/LC_MESSAGES/django.mo +0 -0
  356. wagtail/users/locale/sl/LC_MESSAGES/django.po +3 -0
  357. wagtail/users/migrations/0014_userprofile_contrast.py +23 -0
  358. wagtail/users/models.py +11 -0
  359. wagtail/users/templates/wagtailusers/bulk_actions/confirm_bulk_assign_role.html +5 -1
  360. wagtail/users/templates/wagtailusers/bulk_actions/confirm_bulk_delete.html +5 -1
  361. wagtail/users/templates/wagtailusers/bulk_actions/confirm_bulk_set_active_state.html +5 -1
  362. wagtail/users/templates/wagtailusers/groups/create.html +19 -17
  363. wagtail/users/templates/wagtailusers/groups/edit.html +2 -40
  364. wagtail/users/templates/wagtailusers/groups/includes/formatted_permissions.html +1 -62
  365. wagtail/users/templates/wagtailusers/groups/includes/page_permissions_formset.html +0 -1
  366. wagtail/users/templates/wagtailusers/users/create.html +46 -50
  367. wagtail/users/templates/wagtailusers/users/edit.html +45 -62
  368. wagtail/users/templates/wagtailusers/users/index.html +1 -4
  369. wagtail/users/templatetags/wagtailusers_tags.py +1 -5
  370. wagtail/users/tests/test_admin_views.py +85 -66
  371. wagtail/users/views/groups.py +4 -1
  372. wagtail/users/views/users.py +2 -0
  373. {wagtail-6.2.2.dist-info → wagtail-6.3rc2.dist-info}/METADATA +6 -6
  374. {wagtail-6.2.2.dist-info → wagtail-6.3rc2.dist-info}/RECORD +378 -367
  375. wagtail/admin/static/wagtailadmin/js/preview-panel.js +0 -2
  376. wagtail/admin/static/wagtailadmin/js/preview-panel.js.LICENSE.txt +0 -11
  377. wagtail/admin/templates/wagtailadmin/generic/history_results.html +0 -1
  378. wagtail/admin/templates/wagtailadmin/page_privacy/ancestor_privacy.html +0 -3
  379. wagtail/admin/templates/wagtailadmin/pages/usage_results.html +0 -6
  380. wagtail/admin/templates/wagtailadmin/shared/workflow_history/index.html +0 -17
  381. wagtail/admin/templates/wagtailadmin/shared/workflow_history/results.html +0 -17
  382. wagtail/admin/templates/wagtailadmin/workflows/usage.html +0 -44
  383. {wagtail-6.2.2.dist-info → wagtail-6.3rc2.dist-info}/LICENSE +0 -0
  384. {wagtail-6.2.2.dist-info → wagtail-6.3rc2.dist-info}/WHEEL +0 -0
  385. {wagtail-6.2.2.dist-info → wagtail-6.3rc2.dist-info}/entry_points.txt +0 -0
  386. {wagtail-6.2.2.dist-info → wagtail-6.3rc2.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,8 @@
1
+ {% extends "wagtailadmin/generic/listing_results.html" %}
1
2
  {% load i18n wagtailadmin_tags %}
2
- <div class="nice-padding">
3
- {% if pages %}
4
- <h2 role="alert">
5
- {% blocktrans trimmed count counter=all_pages.count %}
6
- There is one matching page
7
- {% plural %}
8
- There are {{ counter }} matching pages
9
- {% endblocktrans %}
10
- </h2>
11
3
 
4
+ {% block before_results %}
5
+ <div class="nice-padding">
12
6
  {% search_other %}
13
7
 
14
8
  {% if object_list.supports_facet %}
@@ -16,34 +10,42 @@
16
10
  <h3 id="page-types-title" class="filter-title">{% trans "Page types" %}</h3>
17
11
  <ul class="filter-options">
18
12
  {% if not selected_content_type %}
19
- <li class="w-bg-border-furniture">{% trans "All" %} ({{ all_pages.count }})</li>
13
+ <li class="w-bg-border-furniture">{% trans "All" %} ({{ all_pages.count|intcomma }})</li>
20
14
  {% else %}
21
- <li><a href="{% url 'wagtailadmin_pages:search' %}?q={{ query_string|urlencode }}">{% trans "All" %} ({{ all_pages.count }})</a></li>
15
+ <li><a href="{{ index_url }}?q={{ query_string|urlencode }}">{% trans "All" %} ({{ all_pages.count|intcomma }})</a></li>
22
16
  {% endif %}
23
17
 
24
18
  {% for content_type, count in content_types %}
25
19
  {% if content_type == selected_content_type %}
26
- <li class="w-bg-border-furniture">{{ content_type.model_class.get_verbose_name }} ({{ count }})</li>
20
+ <li class="w-bg-border-furniture">{{ content_type.model_class.get_verbose_name }} ({{ count|intcomma }})</li>
27
21
  {% else %}
28
- <li><a href="{% url 'wagtailadmin_pages:search' %}?q={{ query_string|urlencode }}&amp;content_type={{ content_type.app_label }}.{{ content_type.model|lower }}">{{ content_type.model_class.get_verbose_name }} ({{ count }})</a></li>
22
+ <li><a href="{{ index_url }}?q={{ query_string|urlencode }}&amp;content_type={{ content_type.app_label }}.{{ content_type.model|lower }}">{{ content_type.model_class.get_verbose_name }} ({{ count|intcomma }})</a></li>
29
23
  {% endif %}
30
24
  {% endfor %}
31
25
  </ul>
32
26
  </nav>
33
27
  {% endif %}
34
28
 
35
- {% component table %}
36
-
37
- {% if is_paginated %}
38
- {% include "wagtailadmin/shared/pagination_nav.html" with items=page_obj linkurl=index_url %}
39
- {% endif %}
40
- {% else %}
41
- {% if query_string %}
42
- <h2 role="alert">{% blocktrans trimmed %}Sorry, no pages match <em>{{ query_string }}</em>{% endblocktrans %}</h2>
43
-
44
- {% search_other %}
29
+ {% if object_list %}
30
+ <h2 role="alert">
31
+ {% with page_count=all_pages.count %}
32
+ {% blocktrans trimmed with counter=page_count|intcomma count counter_val=page_count %}
33
+ There is one matching page
34
+ {% plural %}
35
+ There are {{ counter }} matching pages
36
+ {% endblocktrans %}
37
+ {% endwith %}
38
+ </h2>
39
+ {% elif query_string %}
40
+ <h2 role="alert">
41
+ {% blocktrans trimmed %}Sorry, no pages match <em>{{ query_string }}</em>{% endblocktrans %}
42
+ </h2>
45
43
  {% else %}
46
44
  <p>{% trans 'Enter a search term above' %}</p>
47
45
  {% endif %}
48
- {% endif %}
49
- </div>
46
+ </div>
47
+ {% endblock %}
48
+
49
+ {% block no_results_message %}
50
+ {# This view has a custom no results message using the alert h2 like the results count message #}
51
+ {% endblock %}
@@ -26,7 +26,6 @@
26
26
  {% for codename, short_label, long_label in formset.permission_types %}
27
27
  <th title="{{ long_label }}">{{ short_label }}</th>
28
28
  {% endfor %}
29
- <th></th>
30
29
  </tr>
31
30
  </thead>
32
31
  <tbody id="id_{{ formset.prefix }}-FORMS">
@@ -1,10 +1,10 @@
1
1
  {% load i18n wagtailadmin_tags %}
2
2
  <table class="listing {% block table_classname %}{% endblock %}">
3
- <col />
3
+ <col width="35%" />
4
4
  <col width="12%" />
5
5
  <col width="12%" />
6
6
  <col width="12%" />
7
- <col width="10%" />
7
+ <col />
8
8
  <thead>
9
9
  {% block post_parent_page_headers %}
10
10
  <tr class="table-headers">
@@ -1,11 +1,11 @@
1
1
  {% load i18n wagtailadmin_tags wagtailcore_tags %}
2
2
 
3
3
  <table class="listing {% block table_classname %}{% endblock table_classname %}">
4
- <col width="12%" />
5
- <col width="12%" />
6
- <col width="10%" />
4
+ <col width="25%" />
7
5
  <col width="20%" />
8
- <col />
6
+ <col width="10%" />
7
+ <col width="30%" />
8
+ <col width="15%" />
9
9
  <thead>
10
10
  {% block post_parent_page_headers %}
11
11
  <tr class="table-headers">
@@ -42,9 +42,9 @@
42
42
  </td>
43
43
  <td class="count" valign="top">
44
44
  {% if page_type.count > 0 %}
45
- <a href="{% url 'wagtailadmin_pages:type_use' content_type_app_name=page_type.app_label content_type_model_name=page_type.model %}">{{ page_type.count }}</a>
45
+ <a href="{% url 'wagtailadmin_pages:type_use' content_type_app_name=page_type.app_label content_type_model_name=page_type.model %}">{{ page_type.count|intcomma }}</a>
46
46
  {% else %}
47
- {{ page_type.count }}
47
+ {{ page_type.count|intcomma }}
48
48
  {% endif %}
49
49
  </td>
50
50
  <td class="last-edited-page" valign="top">
@@ -44,7 +44,7 @@
44
44
  {% status task_state.get_status_display classname="w-status--primary" %}
45
45
  </td>
46
46
  <td>{{ task_state.started_at }}</td>
47
- <td>{{ task_state.finished_at }}</td>
47
+ <td>{{ task_state.finished_at|default:"-" }}</td>
48
48
  </tr>
49
49
  {% endfor %}
50
50
  </tbody>
@@ -0,0 +1,14 @@
1
+ {% load wagtailadmin_tags %}
2
+
3
+ {% if show_menu %}
4
+ {% dropdown_button button=default_menu_item toggle_icon="arrow-up" keep_mounted=True %}
5
+ {% if menu_items_fragment %}
6
+ {{ menu_items_fragment }}
7
+ {% endif %}
8
+ {% for item in rendered_menu_items %}
9
+ {{ item }}
10
+ {% endfor %}
11
+ {% enddropdown_button %}
12
+ {% elif default_menu_item %}
13
+ {{ default_menu_item }}
14
+ {% endif %}
@@ -0,0 +1,6 @@
1
+ {% load wagtailadmin_tags %}
2
+ {% if url %}
3
+ <a class="button{% if classname %} {{ classname }}{% endif %}" href="{{ url }}">{% if icon_name %}{% icon name=icon_name %}{% endif %}{{ label }}</a>
4
+ {% else %}
5
+ <button type="submit" name="{{ name }}" value="{{ label }}" class="button{% if classname %} {{ classname }}{% endif %}">{% if icon_name %}{% icon name=icon_name %}{% endif %}{{ label }}</button>
6
+ {% endif %}
@@ -1,4 +1,4 @@
1
- {% load wagtailadmin_tags %}
1
+ {% load i18n wagtailadmin_tags %}
2
2
  {% comment "text/markdown" %}
3
3
  Displays a user avatar using the avatar template
4
4
  Variables this template accepts:
@@ -8,9 +8,10 @@
8
8
  - `size` (string?) - small, large, square
9
9
  - `tooltip` (string?) - Modifier classes
10
10
  - `tooltip_html` (string?) - An HTML element to use for the tooltip content
11
+ - `edit_link` (boolean?) - Edit link to display underneath the avatar
11
12
  {% endcomment %}
12
13
  <span
13
- class="{% classnames 'avatar' size classname %}"
14
+ class="{% classnames 'avatar' size classname edit_link|yesno:"avatar--edit," %}"
14
15
  {% if tooltip or tooltip_html %} data-controller="w-tooltip" {% endif %}
15
16
  {% if tooltip %} data-w-tooltip-content-value="{{ tooltip }}" {% endif %}
16
17
  >
@@ -22,10 +23,19 @@
22
23
  {% if size == 'small' %}
23
24
  <img src="{% avatar_url user size=25 %}" alt="" decoding="async" loading="lazy"/>
24
25
  {% elif size == 'large' %}
25
- <img src="{% avatar_url user size=100 %}" alt="" decoding="async" loading="lazy"/>
26
+ <img src="{% avatar_url user size=80 %}" alt="" decoding="async" loading="lazy"/>
26
27
  {% elif size == 'square' %}
27
28
  <img src="{% avatar_url user %}" alt="" decoding="async" loading="lazy"/>
28
29
  {% else %}
29
30
  <img src="{% avatar_url user %}" alt="" decoding="async" loading="lazy"/>
30
31
  {% endif %}
32
+ {% if edit_link %}
33
+ <a
34
+ class="avatar__edit-link"
35
+ aria-label="{% trans 'Edit account avatar' %}"
36
+ href="{% url 'wagtailadmin_account' %}#avatar-section"
37
+ >
38
+ {% icon name="edit" %}
39
+ </a>
40
+ {% endif %}
31
41
  </span>
@@ -6,7 +6,6 @@
6
6
  - `classname` - if present, adds classname to the header class list
7
7
  - `title` - Displayed as `h1`
8
8
  - `subtitle` - Within the `h1` tag but smaller
9
- - `description` - if present, displayed as a small text below the `h1` tag title
10
9
  - `search_url` - if present, display a search box. This is a URL route name (taking no parameters) to be used as the action for that search box
11
10
  - `search_form` - form object for the search form. Required if search_url is passed
12
11
  - `search_results_url` - URL to be used for async requests to search results, if not provided, the form's action URL will be used
@@ -14,7 +13,6 @@
14
13
  - `search_disable_async` - If True, the default header async search functionality will not be used
15
14
  - `query_parameters` - a query string (without the '?') to be placed after the search URL
16
15
  - `icon` - name of an icon to place against the title
17
- - `avatar` - if present, display an 'avatar' in place of icon. This is the URL to be used as the img src for avatar
18
16
  - `merged` - if true, add the classname 'w-header--merged'
19
17
  - `action_url` - if present, display an 'action' button. This is the URL to be used as the link URL for the button
20
18
  - `action_text` - text for the 'action' button
@@ -36,13 +34,10 @@
36
34
  <h1 class="w-header__title" id="header-title">
37
35
  {% if icon %}
38
36
  {% icon classname="w-header__glyph" name=icon %}
39
- {% elif avatar %}
40
- <div class="w-header__glyph avatar large"><img src="{{ avatar }}" alt="" /></div>
41
37
  {% endif %}
42
38
  {{ title }}{% if subtitle %} <span class="w-header__subtitle">{{ subtitle }}</span>{% endif %}
43
39
  </h1>
44
40
  {% endif %}
45
- {% if description %}<div class="w-header__description">{{ description }}</div>{% endif %}
46
41
  </div>
47
42
  {% if search_url %}
48
43
  <form
@@ -19,7 +19,7 @@
19
19
 
20
20
  {% endcomment %}
21
21
  {% fragment as nav_icon_classes %}w-w-4 w-h-4 group-hover:w-transform group-hover:w-scale-110{% endfragment %}
22
- {% fragment as nav_icon_button_classes %}w-w-slim-header w-h-slim-header w-bg-transparent w-border-transparent w-box-border w-py-3 w-px-3 w-flex w-justify-center w-items-center w-outline-offset-inside w-text-text-meta w-transition w-group hover:w-text-text-label focus:w-text-text-label expanded:w-text-text-label expanded:w-border-y-2 expanded:w-border-b-current w-shrink-0{% endfragment %}
22
+ {% fragment as nav_icon_button_classes %}w-w-slim-header w-h-slim-header w-bg-transparent w-border-transparent w-box-border w-py-3 w-px-3 w-flex w-justify-center w-items-center w-outline-offset-inside w-text-text-meta w-transition w-group hover:w-text-text-label focus:w-text-text-label expanded:w-text-text-label expanded:w-border-y-2 expanded:w-border-b-current w-shrink-0 more-contrast:w-border more-contrast:w-border-border-interactive-more-contrast hover:more-contrast:w-border-border-interactive-more-contrast-hover{% endfragment %}
23
23
  {% fragment as nav_icon_counter_classes %}-w-mr-3 w-py-0.5 w-px-[0.325rem] w-translate-y-[-8px] rtl:w-translate-x-[4px] w-translate-x-[-4px] w-text-[0.5625rem] w-font-bold w-text-text-button w-border w-border-surface-page w-rounded-[1rem]{% endfragment %}
24
24
  {# Z index 99 to ensure header is always above #}
25
25
  <div class="w-sticky w-top-0 w-z-header">
@@ -31,7 +31,10 @@
31
31
  w-font-semibold
32
32
  hover:w-border-surface-menus
33
33
  hover:w-text-text-label
34
- w-transition"
34
+ w-transition
35
+ more-contrast:w-border
36
+ more-contrast:w-border-border-interactive-more-contrast
37
+ hover:more-contrast:w-border-border-interactive-more-contrast-hover"
35
38
  aria-label="{% if is_public %}{% trans 'Visible to all. Visit the live page' %}{% else %}{% trans 'Private. Visit the live page' %}{% endif %}"
36
39
  data-controller="w-tooltip"
37
40
  data-w-tooltip-content-value="{% if is_public %}{% trans 'Visible to all' %}{% else %}{% trans 'Private' %}{% endif %}"
@@ -9,7 +9,7 @@
9
9
  {% resolve_url linkurl as url_path %}
10
10
 
11
11
  <nav class="pagination" aria-label="{% trans 'Pagination' %}">
12
- <p>{% blocktrans trimmed with page_num=items.number total_pages=items.paginator.num_pages %}Page {{ page_num }} of {{ total_pages }}.{% endblocktrans %}</p>
12
+ <p>{% blocktrans trimmed with page_num=items.number|intcomma total_pages=items.paginator.num_pages|intcomma %}Page {{ page_num }} of {{ total_pages }}.{% endblocktrans %}</p>
13
13
  <ul>
14
14
  <li class="prev">
15
15
  {% if items.has_previous %}
@@ -13,7 +13,7 @@
13
13
  {% icon name=toggle.icon_name classname=nav_icon_classes %}
14
14
  {% if toggle.has_counter %}
15
15
  <div data-side-panel-toggle-counter class="{{ nav_icon_counter_classes }} {{ toggle.counter_classname|default:'w-bg-surface-button-default'}}" {% if not count %}hidden{% endif %}>
16
- {{ count }}
16
+ {{ count|intcomma }}
17
17
  </div>
18
18
  {% endif %}
19
19
  </button>
@@ -5,7 +5,7 @@
5
5
  {% trans 'Locale: ' as screen_reader_title_prefix %}
6
6
 
7
7
  {% if object.pk and translations %}
8
- {% blocktrans trimmed asvar help_text %}
8
+ {% blocktrans trimmed with translations_total=translations_total|intcomma asvar help_text %}
9
9
  Available in {{ translations_total }} locales
10
10
  {% endblocktrans %}
11
11
  {% else %}
@@ -1,4 +1,4 @@
1
- {% load i18n %}
1
+ {% load i18n wagtailadmin_tags %}
2
2
  <div class="w-py-6 w-space-y-3">
3
3
  <section class="w-flex w-space-x-3">
4
4
  <div class="w-flex w-flex-1">
@@ -13,7 +13,7 @@
13
13
  {% if usage_url_text %}
14
14
  {{ usage_url_text }}
15
15
  {% else %}
16
- {% blocktrans trimmed count usage_count=usage_count %}Used {{ usage_count }} time{% plural %}Used {{ usage_count }} times{% endblocktrans %}
16
+ {% blocktrans trimmed with counter=usage_count usage_count=usage_count|intcomma count counter=counter %}Used {{ usage_count }} time{% plural %}Used {{ usage_count }} times{% endblocktrans %}
17
17
  {% endif %}
18
18
  </a>
19
19
  </div>
@@ -1,64 +1,106 @@
1
- {% load i18n wagtailadmin_tags %}
1
+ {% load i18n l10n wagtailadmin_tags %}
2
2
 
3
- {% wagtail_config as settings %}
3
+ <div
4
+ class="w-preview"
5
+ data-controller="w-preview"
6
+ data-w-preview-has-errors-class="w-preview--has-errors"
7
+ data-w-preview-proxy-class="w-preview__proxy"
8
+ data-w-preview-selected-size-class="w-preview__size-button--selected"
9
+ data-w-preview-auto-update-interval-value="{{ auto_update_interval|unlocalize }}"
10
+ data-w-preview-url-value="{{ preview_url }}"
11
+ data-w-preview-w-progress-outlet="[data-controller='w-preview'] [data-controller='w-progress']"
12
+ >
13
+ <div class="w-preview__sizes">
14
+ {% block size_buttons %}
15
+ {% for size in object.preview_sizes %}
16
+ <label class="w-preview__size-button">
17
+ {% icon name=size.icon %}
18
+ <input
19
+ type="radio"
20
+ class="w-preview__proxy"
21
+ name="preview-size"
22
+ value="{{ size.name }}"
23
+ data-action="w-preview#togglePreviewSize"
24
+ data-w-preview-target="size"
25
+ aria-label="{{ size.label }}"
26
+ data-device-width="{{ size.device_width|stringformat:'s' }}"
27
+ {% if object.default_preview_size == size.name %}
28
+ checked
29
+ {% endif %}
30
+ />
31
+ </label>
32
+ {% endfor %}
33
+ {% endblock %}
4
34
 
5
- <div class="preview-panel preview-panel--mobile" data-preview-panel data-action="{{ preview_url }}">
6
- <div class="preview-panel__sizes">
7
- <label class="preview-panel__size-button preview-panel__size-button--mobile">
8
- {% icon name="mobile-alt" %}
9
- <input type="radio" name="preview-size" value="mobile" data-device-width="375" data-default-size checked aria-label="{% trans 'Preview in mobile size' %}" />
10
- </label>
11
- <label class="preview-panel__size-button preview-panel__size-button--tablet">
12
- {% icon name="tablet-alt" %}
13
- <input type="radio" name="preview-size" value="tablet" data-device-width="768" aria-label="{% trans 'Preview in tablet size' %}" />
14
- </label>
15
- <label class="preview-panel__size-button preview-panel__size-button--desktop">
16
- {% icon name="desktop" %}
17
- <input type="radio" name="preview-size" value="desktop" data-device-width="1280" aria-label="{% trans 'Preview in desktop size' %}" />
18
- </label>
19
-
20
- <a href="{{ preview_url }}?mode={{ object.default_preview_mode|urlencode }}" target="_blank" rel="noreferrer" class="preview-panel__size-button preview-panel__size-button--new-tab" data-preview-new-tab aria-label="{% trans 'Preview in new tab' %}">{% icon name="link-external" %}</a>
21
- </div>
22
-
23
- <div class="preview-panel__spinner w-hidden" data-preview-spinner>
24
- {% icon name="spinner" classname="default" %}
25
- <span class="w-sr-only">{% trans 'Loading'%}</span>
35
+ {% block new_tab_button %}
36
+ <a href="{{ preview_url }}?mode={{ object.default_preview_mode|urlencode }}" target="_blank" rel="noreferrer" class="w-preview__size-button" data-w-preview-target="newTab" data-action="w-preview#openPreviewInNewTab" aria-label="{% trans 'Preview in new tab' %}">{% icon name="link-external" %}</a>
37
+ {% endblock %}
26
38
  </div>
27
39
 
28
- {% if not settings.WAGTAIL_AUTO_UPDATE_PREVIEW %}
29
- <button class="button button-small button-secondary button--icon preview-panel__refresh-button" data-refresh-preview>{% icon name="rotate" %} Refresh</button>
40
+ {% if auto_update_interval %}
41
+ <div class="w-preview__spinner" data-w-preview-target="spinner" hidden>
42
+ {% icon name="spinner" classname="default" %}
43
+ <span class="w-sr-only">{% trans 'Loading'%}</span>
44
+ </div>
45
+ {% else %}
46
+ <button
47
+ type="button"
48
+ class="button button-small button-secondary button-longrunning button--icon w-preview__refresh-button"
49
+ data-controller="w-progress"
50
+ data-action="click->w-preview#setPreviewDataWithAlert click->w-progress#activate"
51
+ data-w-progress-active-value="{% trans 'Refreshing…' %}"
52
+ data-w-progress-duration-seconds-value="300"
53
+ >
54
+ {% icon name="rotate" classname="button-longrunning__icon" %}
55
+ {% icon name="spinner" %}
56
+ {# Using sr-only for the label as there might not be enough room for the label if the panel is resized #}
57
+ <em class="w-sr-only" data-w-progress-target="label">{% trans 'Refresh' %}</em>
58
+ </button>
30
59
  {% endif %}
31
60
 
32
- <div class="preview-panel__area">
33
- <div class="preview-panel__controls{% if has_multiple_modes %} preview-panel__controls--multiple{% endif %}">
34
- <div id="preview-panel-error-banner" class="preview-panel__error-banner">
35
- {% icon name='warning' classname='default' %}
36
- <div>
37
- <h3 class="preview-panel__error-title">
38
- {% trans 'Preview is out of date' %}
39
- </h3>
40
- <p class="preview-panel__error-details">
41
- {% trans 'Correct the validation errors to resume preview (saving will highlight errors)' %}
42
- </p>
61
+ <div class="w-preview__area">
62
+ <div class="w-preview__controls{% if has_multiple_modes %} w-preview__controls--multiple{% endif %}">
63
+ {% block error_banner %}
64
+ <div id="w-preview-error-banner" class="w-preview__error-banner">
65
+ {% icon name='warning' classname='default' %}
66
+ <div>
67
+ <h3 class="w-preview__error-title">
68
+ {% trans 'Preview is out of date' %}
69
+ </h3>
70
+ <p class="w-preview__error-details">
71
+ {% trans 'Correct the validation errors to resume preview (saving will highlight errors)' %}
72
+ </p>
73
+ </div>
43
74
  </div>
44
- </div>
45
- {% if has_multiple_modes %}
46
- {% rawformattedfield label_text=_("Preview mode") id_for_label="id_preview_mode" classname="preview-panel__modes" %}
47
- <select id="id_preview_mode" name="preview_mode" class="preview-panel__mode-select" data-preview-mode-select>
48
- {% for internal_name, display_name in object.preview_modes %}
49
- <option value="{{ internal_name }}"{% if internal_name == object.default_preview_mode %} selected{% endif %}>{{ display_name }}</option>
50
- {% endfor %}
51
- </select>
52
- {% endrawformattedfield %}
53
- {% endif %}
75
+ {% endblock %}
76
+ {% block mode_select %}
77
+ {% if has_multiple_modes %}
78
+ {% rawformattedfield label_text=_("Preview mode") id_for_label="id_preview_mode" classname="w-preview__modes" %}
79
+ <select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-w-preview-target="mode" data-action="w-preview#setPreviewMode">
80
+ {% for internal_name, display_name in object.preview_modes %}
81
+ <option value="{{ internal_name }}"{% if internal_name == object.default_preview_mode %} selected{% endif %}>{{ display_name }}</option>
82
+ {% endfor %}
83
+ </select>
84
+ {% endrawformattedfield %}
85
+ {% endif %}
86
+ {% endblock %}
54
87
  </div>
55
88
 
56
- <div class="preview-panel__wrapper">
57
- <iframe id="preview-iframe" loading="lazy" title="{% trans 'Preview' %}" class="preview-panel__iframe" data-preview-iframe aria-describedby="preview-panel-error-banner">
58
- <div>
59
- {# Add placeholder element to support styling content when iframe has loaded #}
60
- </div>
61
- </iframe>
89
+ <div class="w-preview__wrapper">
90
+ {% block iframe %}
91
+ <iframe
92
+ id="w-preview-iframe"
93
+ title="{% trans 'Preview' %}"
94
+ class="w-preview__iframe"
95
+ data-w-preview-target="iframe"
96
+ data-action="load->w-preview#replaceIframe"
97
+ aria-describedby="w-preview-error-banner"
98
+ >
99
+ <div>
100
+ {# Add placeholder element to support styling content when iframe has loaded #}
101
+ </div>
102
+ </iframe>
103
+ {% endblock %}
62
104
  </div>
63
105
  </div>
64
106
  </div>
@@ -10,23 +10,23 @@
10
10
  >
11
11
  <div class="footer__save-warning footer__emphasise-span-tags" data-w-messages-target="container"></div>
12
12
  {% block message_templates %}
13
- {% trans 'Save the page before leaving' as generic_save_page_message %}
13
+ {% trans 'Save your changes before leaving' as generic_save_message %}
14
14
  <template data-w-messages-target="template" data-type="edits">
15
15
  <div>
16
16
  <b>{% blocktrans trimmed %}You have <span>unsaved edits</span>{% endblocktrans %}</b>
17
- <p>{{ generic_save_page_message }}</p>
17
+ <p>{{ generic_save_message }}</p>
18
18
  </div>
19
19
  </template>
20
20
  <template data-w-messages-target="template" data-type="comments">
21
21
  <div>
22
22
  <b>{% blocktrans trimmed %}You have <span>unsaved comments</span>{% endblocktrans %}</b>
23
- <p>{{ generic_save_page_message }}</p>
23
+ <p>{{ generic_save_message }}</p>
24
24
  </div>
25
25
  </template>
26
26
  <template data-w-messages-target="template" data-type="all">
27
27
  <div>
28
28
  <b>{% blocktrans trimmed %}You have <span>unsaved edits</span> and <span>comments</span>{% endblocktrans %}</b>
29
- <p>{{ generic_save_page_message }}</p>
29
+ <p>{{ generic_save_message }}</p>
30
30
  </div>
31
31
  </template>
32
32
  {% endblock %}
@@ -1,4 +1,4 @@
1
- {% load i18n %}
1
+ {% load i18n wagtailadmin_tags %}
2
2
  {% comment "text/markdown" %}
3
3
  This shared template is used to display the usage count for an object as a link
4
4
  to the object's usage page. It is used by the admin's delete and unpublish views.
@@ -11,7 +11,7 @@ Variables this template accepts:
11
11
  {% endcomment %}
12
12
  <p>
13
13
  <a href="{{ usage_url }}">
14
- {% blocktrans trimmed with model_name=model_opts.verbose_name count usage_count=usage_count asvar usage_message %}
14
+ {% blocktrans trimmed with counter=usage_count model_name=model_opts.verbose_name usage_count=usage_count|intcomma count counter=counter asvar usage_message %}
15
15
  This {{ model_name }} is referenced {{ usage_count }} time.
16
16
  {% plural %}
17
17
  This {{ model_name }} is referenced {{ usage_count }} times.
@@ -2,13 +2,7 @@
2
2
  {% load i18n wagtailadmin_tags %}
3
3
 
4
4
  {% block main_content %}
5
- <h2>{% icon object_icon classname="initial" %} {% latest_str object %}</h2>
6
- <p>
7
- <a href="{% admin_edit_url object %}" class="button button-small button-secondary">{% trans "Edit / Review" %}</a>
8
- <a href="{% url workflow_history_url_name object.pk|admin_urlquote %}" class="button button-small button-secondary">{% trans "Workflow history" %}</a>
9
- </p>
10
-
11
- <h2>{% icon "clipboard-list" classname="initial" %} {{ workflow_state.workflow.name }}</h2>
5
+ <h2 class="w-mt-8">{% icon "clipboard-list" classname="initial" %} {{ workflow_state.workflow.name }}</h2>
12
6
 
13
7
  <p>
14
8
  {% blocktrans trimmed with modified_by=workflow_state.requested_by|user_display_name %}Requested by <b>{{ modified_by }}</b>{% endblocktrans %}
@@ -0,0 +1 @@
1
+ {% extends "wagtailadmin/generic/listing.html" %}
@@ -1,25 +1,25 @@
1
+ {% extends "wagtailadmin/generic/listing_results.html" %}
1
2
  {% load i18n wagtailadmin_tags %}
2
- {% load l10n %}
3
3
 
4
- <table class="listing">
5
- <thead>
6
- <tr>
7
- <th>
8
- {% trans 'Status' %}
9
- </th>
10
- <th>
11
- {% trans 'Tasks' %}
12
- </th>
13
- <th>
14
- {% trans 'Requested by' %}
15
- </th>
16
- <th>
17
- {% trans 'Started at' %}
18
- </th>
19
- </tr>
20
- </thead>
21
- <tbody>
22
- {% if workflow_states %}
4
+ {% block results %}
5
+ <table class="listing">
6
+ <thead>
7
+ <tr>
8
+ <th>
9
+ {% trans 'Status' %}
10
+ </th>
11
+ <th>
12
+ {% trans 'Tasks' %}
13
+ </th>
14
+ <th>
15
+ {% trans 'Requested by' %}
16
+ </th>
17
+ <th>
18
+ {% trans 'Started at' %}
19
+ </th>
20
+ </tr>
21
+ </thead>
22
+ <tbody>
23
23
  {% for workflow_state in workflow_states %}
24
24
  <tr>
25
25
  <td>
@@ -46,20 +46,18 @@
46
46
  <td>{% human_readable_date workflow_state.created_at %}</td>
47
47
  </tr>
48
48
  {% endfor %}
49
+ </tbody>
50
+ </table>
51
+ {% endblock %}
52
+
53
+ {% block no_results_message %}
54
+ <p>
55
+ {% if page %}
56
+ {% trans "This page hasn't been submitted for moderation yet" %}
49
57
  {% else %}
50
- {% block no_results %}
51
- <tr><td class="no-results-message">
52
- <p>
53
- {% if page %}
54
- {% trans "This page hasn't been submitted for moderation yet" %}
55
- {% else %}
56
- {% blocktrans trimmed with model_name=model_opts.verbose_name %}
57
- This {{ model_name }} hasn't been submitted for moderation yet
58
- {% endblocktrans %}
59
- {% endif %}
60
- </p>
61
- </td></tr>
62
- {% endblock %}
58
+ {% blocktrans trimmed with model_name=model_opts.verbose_name %}
59
+ This {{ model_name }} hasn't been submitted for moderation yet
60
+ {% endblocktrans %}
63
61
  {% endif %}
64
- </tbody>
65
- </table>
62
+ </p>
63
+ {% endblock %}
@@ -3,7 +3,7 @@
3
3
  {% for reference in value %}
4
4
  <li>
5
5
  {% if edit_url %}
6
- <a href="{{ edit_url }}#content-path-{{ reference.content_path }}">
6
+ <a href="{{ edit_url }}#:w:contentpath={{ reference.content_path }}">
7
7
  {% endif %}
8
8
  {{ reference.describe_source_field }}{% if edit_url %}</a>{% endif %}{% if describe_on_delete %}: {{ reference.describe_on_delete }}{% endif %}
9
9
  </li>