wagtail 7.1.1__py3-none-any.whl → 7.2__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 (1138) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_page.py +1 -1
  3. wagtail/actions/create_alias.py +1 -1
  4. wagtail/actions/delete_page.py +1 -1
  5. wagtail/actions/publish_page_revision.py +1 -1
  6. wagtail/actions/publish_revision.py +1 -1
  7. wagtail/actions/revert_to_page_revision.py +1 -1
  8. wagtail/actions/unpublish.py +1 -1
  9. wagtail/actions/unpublish_page.py +1 -1
  10. wagtail/admin/auth.py +3 -1
  11. wagtail/admin/checks.py +2 -2
  12. wagtail/admin/filters.py +28 -1
  13. wagtail/admin/forms/collections.py +1 -1
  14. wagtail/admin/forms/comments.py +1 -1
  15. wagtail/admin/forms/models.py +1 -1
  16. wagtail/admin/forms/pages.py +1 -1
  17. wagtail/admin/forms/tags.py +1 -1
  18. wagtail/admin/locale/ar/LC_MESSAGES/django.mo +0 -0
  19. wagtail/admin/locale/ar/LC_MESSAGES/django.po +44 -89
  20. wagtail/admin/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
  21. wagtail/admin/locale/az_AZ/LC_MESSAGES/django.po +4 -7
  22. wagtail/admin/locale/be/LC_MESSAGES/django.mo +0 -0
  23. wagtail/admin/locale/be/LC_MESSAGES/django.po +15 -42
  24. wagtail/admin/locale/bg/LC_MESSAGES/django.mo +0 -0
  25. wagtail/admin/locale/bg/LC_MESSAGES/django.po +7 -16
  26. wagtail/admin/locale/bn/LC_MESSAGES/django.mo +0 -0
  27. wagtail/admin/locale/bn/LC_MESSAGES/django.po +4 -13
  28. wagtail/admin/locale/ca/LC_MESSAGES/django.mo +0 -0
  29. wagtail/admin/locale/ca/LC_MESSAGES/django.po +159 -74
  30. wagtail/admin/locale/ca/LC_MESSAGES/djangojs.mo +0 -0
  31. wagtail/admin/locale/ca/LC_MESSAGES/djangojs.po +11 -0
  32. wagtail/admin/locale/cs/LC_MESSAGES/django.mo +0 -0
  33. wagtail/admin/locale/cs/LC_MESSAGES/django.po +40 -50
  34. wagtail/admin/locale/cy/LC_MESSAGES/django.mo +0 -0
  35. wagtail/admin/locale/cy/LC_MESSAGES/django.po +6 -13
  36. wagtail/admin/locale/da/LC_MESSAGES/django.mo +0 -0
  37. wagtail/admin/locale/da/LC_MESSAGES/django.po +10 -22
  38. wagtail/admin/locale/de/LC_MESSAGES/django.mo +0 -0
  39. wagtail/admin/locale/de/LC_MESSAGES/django.po +42 -93
  40. wagtail/admin/locale/dv/LC_MESSAGES/django.mo +0 -0
  41. wagtail/admin/locale/dv/LC_MESSAGES/django.po +26 -64
  42. wagtail/admin/locale/el/LC_MESSAGES/django.mo +0 -0
  43. wagtail/admin/locale/el/LC_MESSAGES/django.po +9 -31
  44. wagtail/admin/locale/en/LC_MESSAGES/django.po +278 -192
  45. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +29 -15
  46. wagtail/admin/locale/es/LC_MESSAGES/django.mo +0 -0
  47. wagtail/admin/locale/es/LC_MESSAGES/django.po +17 -52
  48. wagtail/admin/locale/es_419/LC_MESSAGES/django.mo +0 -0
  49. wagtail/admin/locale/es_419/LC_MESSAGES/django.po +4 -22
  50. wagtail/admin/locale/es_VE/LC_MESSAGES/django.mo +0 -0
  51. wagtail/admin/locale/es_VE/LC_MESSAGES/django.po +4 -7
  52. wagtail/admin/locale/et/LC_MESSAGES/django.mo +0 -0
  53. wagtail/admin/locale/et/LC_MESSAGES/django.po +15 -42
  54. wagtail/admin/locale/eu/LC_MESSAGES/django.po +1 -1
  55. wagtail/admin/locale/fa/LC_MESSAGES/django.mo +0 -0
  56. wagtail/admin/locale/fa/LC_MESSAGES/django.po +12 -50
  57. wagtail/admin/locale/fi/LC_MESSAGES/django.mo +0 -0
  58. wagtail/admin/locale/fi/LC_MESSAGES/django.po +43 -70
  59. wagtail/admin/locale/fi/LC_MESSAGES/djangojs.mo +0 -0
  60. wagtail/admin/locale/fi/LC_MESSAGES/djangojs.po +17 -0
  61. wagtail/admin/locale/fr/LC_MESSAGES/django.mo +0 -0
  62. wagtail/admin/locale/fr/LC_MESSAGES/django.po +157 -74
  63. wagtail/admin/locale/fr/LC_MESSAGES/djangojs.mo +0 -0
  64. wagtail/admin/locale/fr/LC_MESSAGES/djangojs.po +11 -0
  65. wagtail/admin/locale/gl/LC_MESSAGES/django.mo +0 -0
  66. wagtail/admin/locale/gl/LC_MESSAGES/django.po +155 -72
  67. wagtail/admin/locale/gl/LC_MESSAGES/djangojs.mo +0 -0
  68. wagtail/admin/locale/gl/LC_MESSAGES/djangojs.po +11 -0
  69. wagtail/admin/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  70. wagtail/admin/locale/he_IL/LC_MESSAGES/django.po +7 -28
  71. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  72. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.po +15 -38
  73. wagtail/admin/locale/ht/LC_MESSAGES/django.po +4 -4
  74. wagtail/admin/locale/hu/LC_MESSAGES/django.mo +0 -0
  75. wagtail/admin/locale/hu/LC_MESSAGES/django.po +44 -91
  76. wagtail/admin/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  77. wagtail/admin/locale/id_ID/LC_MESSAGES/django.po +10 -31
  78. wagtail/admin/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  79. wagtail/admin/locale/is_IS/LC_MESSAGES/django.po +41 -87
  80. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  81. wagtail/admin/locale/it/LC_MESSAGES/django.po +34 -78
  82. wagtail/admin/locale/ja/LC_MESSAGES/django.mo +0 -0
  83. wagtail/admin/locale/ja/LC_MESSAGES/django.po +15 -42
  84. wagtail/admin/locale/ka/LC_MESSAGES/django.po +4 -4
  85. wagtail/admin/locale/ko/LC_MESSAGES/django.mo +0 -0
  86. wagtail/admin/locale/ko/LC_MESSAGES/django.po +20 -57
  87. wagtail/admin/locale/lt/LC_MESSAGES/django.mo +0 -0
  88. wagtail/admin/locale/lt/LC_MESSAGES/django.po +12 -31
  89. wagtail/admin/locale/lv/LC_MESSAGES/django.mo +0 -0
  90. wagtail/admin/locale/lv/LC_MESSAGES/django.po +9 -40
  91. wagtail/admin/locale/mi/LC_MESSAGES/django.mo +0 -0
  92. wagtail/admin/locale/mi/LC_MESSAGES/django.po +6 -10
  93. wagtail/admin/locale/mn/LC_MESSAGES/django.mo +0 -0
  94. wagtail/admin/locale/mn/LC_MESSAGES/django.po +10 -43
  95. wagtail/admin/locale/my/LC_MESSAGES/django.po +4 -4
  96. wagtail/admin/locale/nb/LC_MESSAGES/django.mo +0 -0
  97. wagtail/admin/locale/nb/LC_MESSAGES/django.po +15 -53
  98. wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
  99. wagtail/admin/locale/nl/LC_MESSAGES/django.po +208 -70
  100. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.mo +0 -0
  101. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.po +19 -2
  102. wagtail/admin/locale/pl/LC_MESSAGES/django.mo +0 -0
  103. wagtail/admin/locale/pl/LC_MESSAGES/django.po +27 -72
  104. wagtail/admin/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  105. wagtail/admin/locale/pt_BR/LC_MESSAGES/django.po +38 -83
  106. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  107. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +17 -56
  108. wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
  109. wagtail/admin/locale/ro/LC_MESSAGES/django.po +23 -68
  110. wagtail/admin/locale/ru/LC_MESSAGES/django.mo +0 -0
  111. wagtail/admin/locale/ru/LC_MESSAGES/django.po +96 -84
  112. wagtail/admin/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  113. wagtail/admin/locale/sk_SK/LC_MESSAGES/django.po +9 -28
  114. wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
  115. wagtail/admin/locale/sl/LC_MESSAGES/django.po +45 -90
  116. wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
  117. wagtail/admin/locale/sv/LC_MESSAGES/django.po +27 -72
  118. wagtail/admin/locale/tet/LC_MESSAGES/django.mo +0 -0
  119. wagtail/admin/locale/tet/LC_MESSAGES/django.po +12 -22
  120. wagtail/admin/locale/th/LC_MESSAGES/django.mo +0 -0
  121. wagtail/admin/locale/th/LC_MESSAGES/django.po +10 -42
  122. wagtail/admin/locale/tr/LC_MESSAGES/django.mo +0 -0
  123. wagtail/admin/locale/tr/LC_MESSAGES/django.po +64 -70
  124. wagtail/admin/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  125. wagtail/admin/locale/tr_TR/LC_MESSAGES/django.po +15 -42
  126. wagtail/admin/locale/ug/LC_MESSAGES/django.mo +0 -0
  127. wagtail/admin/locale/ug/LC_MESSAGES/django.po +38 -83
  128. wagtail/admin/locale/uk/LC_MESSAGES/django.mo +0 -0
  129. wagtail/admin/locale/uk/LC_MESSAGES/django.po +15 -45
  130. wagtail/admin/locale/vi/LC_MESSAGES/django.mo +0 -0
  131. wagtail/admin/locale/vi/LC_MESSAGES/django.po +4 -17
  132. wagtail/admin/locale/zh/LC_MESSAGES/django.mo +0 -0
  133. wagtail/admin/locale/zh/LC_MESSAGES/django.po +7 -19
  134. wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  135. wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.po +17 -54
  136. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  137. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po +15 -37
  138. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  139. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  140. wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
  141. wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
  142. wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
  143. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  144. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  145. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +2 -2
  146. wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
  147. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  148. wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
  149. wagtail/admin/static/wagtailadmin/js/icons.js +1 -1
  150. wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
  151. wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
  152. wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
  153. wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
  154. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  155. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  156. wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
  157. wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
  158. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  159. wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
  160. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  161. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  162. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +2 -2
  163. wagtail/admin/static/wagtailadmin/js/vendor/bootstrap-modal.js +1 -1
  164. wagtail/admin/static/wagtailadmin/js/vendor/bootstrap-transition.js +1 -1
  165. wagtail/admin/static/wagtailadmin/js/vendor/jquery-3.6.0.min.js +1 -1
  166. wagtail/admin/static/wagtailadmin/js/vendor/jquery-ui-1.13.2.min.js +1 -1
  167. wagtail/admin/static/wagtailadmin/js/vendor/jquery.datetimepicker.js +1 -1
  168. wagtail/admin/static/wagtailadmin/js/vendor/jquery.fileupload-process.js +1 -1
  169. wagtail/admin/static/wagtailadmin/js/vendor/jquery.fileupload.js +1 -1
  170. wagtail/admin/static/wagtailadmin/js/vendor/jquery.iframe-transport.js +1 -1
  171. wagtail/admin/static/wagtailadmin/js/vendor/tag-it.js +1 -1
  172. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  173. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +1 -1
  174. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  175. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  176. wagtail/admin/templates/wagtailadmin/account/account.html +2 -0
  177. wagtail/admin/templates/wagtailadmin/base.html +14 -0
  178. wagtail/admin/templates/wagtailadmin/generic/chooser/chooser.html +2 -1
  179. wagtail/admin/templates/wagtailadmin/generic/chooser/creation_form.html +2 -1
  180. wagtail/admin/templates/wagtailadmin/generic/form.html +3 -1
  181. wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
  182. wagtail/admin/templates/wagtailadmin/panels/object_list.html +1 -1
  183. wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +3 -2
  184. wagtail/admin/templates/wagtailadmin/shared/formatted_field.html +1 -1
  185. wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
  186. wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +19 -0
  187. wagtail/admin/templates/wagtailadmin/shared/panel.html +1 -1
  188. wagtail/admin/templates/wagtailadmin/shared/set_privacy.html +15 -0
  189. wagtail/admin/templates/wagtailadmin/shared/side_panels/checks.html +28 -1
  190. wagtail/admin/templates/wagtailadmin/shared/workflow_history/detail.html +2 -2
  191. wagtail/admin/templates/wagtailadmin/{pages/listing/_ordering_header.html → tables/ordering_header.html} +2 -2
  192. wagtail/admin/templates/wagtailadmin/tables/title_cell.html +1 -1
  193. wagtail/admin/templates/wagtailadmin/userbar/base.html +6 -3
  194. wagtail/admin/templates/wagtailadmin/userbar/item_admin.html +2 -2
  195. wagtail/admin/templates/wagtailadmin/userbar/item_page_add.html +2 -2
  196. wagtail/admin/templates/wagtailadmin/userbar/item_page_edit.html +2 -2
  197. wagtail/admin/templates/wagtailadmin/userbar/item_page_explore.html +2 -2
  198. wagtail/admin/templates/wagtailadmin/widgets/{daterange_input.html → range_input.html} +1 -1
  199. wagtail/admin/templates/wagtailadmin/workflows/task_chooser/chooser.html +4 -2
  200. wagtail/admin/templatetags/wagtailadmin_tags.py +56 -22
  201. wagtail/admin/tests/api/test_pages.py +7 -7
  202. wagtail/admin/tests/api/test_renderer_classes.py +16 -0
  203. wagtail/admin/tests/pages/test_create_page.py +42 -2
  204. wagtail/admin/tests/pages/test_edit_page.py +128 -14
  205. wagtail/admin/tests/pages/test_explorer_view.py +34 -7
  206. wagtail/admin/tests/pages/test_reorder_page.py +11 -0
  207. wagtail/admin/tests/test_collections_views.py +12 -0
  208. wagtail/admin/tests/test_edit_handlers.py +3 -3
  209. wagtail/admin/tests/test_filters.py +2 -2
  210. wagtail/admin/tests/test_keyboard_shortcuts.py +52 -2
  211. wagtail/admin/tests/test_menu.py +0 -2
  212. wagtail/admin/tests/test_privacy.py +16 -16
  213. wagtail/admin/tests/test_templatetags.py +137 -0
  214. wagtail/admin/tests/test_userbar.py +75 -35
  215. wagtail/admin/tests/test_views_generic.py +34 -0
  216. wagtail/admin/tests/test_workflows.py +34 -0
  217. wagtail/admin/tests/viewsets/test_model_viewset.py +322 -0
  218. wagtail/admin/ui/tables/orderable.py +73 -0
  219. wagtail/admin/ui/tables/pages.py +3 -13
  220. wagtail/admin/userbar.py +6 -1
  221. wagtail/admin/views/collection_privacy.py +6 -2
  222. wagtail/admin/views/generic/__init__.py +1 -0
  223. wagtail/admin/views/generic/mixins.py +20 -2
  224. wagtail/admin/views/generic/models.py +67 -1
  225. wagtail/admin/views/generic/ordering.py +79 -0
  226. wagtail/admin/views/home.py +3 -3
  227. wagtail/admin/views/page_privacy.py +5 -2
  228. wagtail/admin/views/pages/create.py +1 -1
  229. wagtail/admin/views/pages/edit.py +2 -2
  230. wagtail/admin/views/pages/listing.py +7 -42
  231. wagtail/admin/views/pages/move.py +1 -1
  232. wagtail/admin/views/pages/ordering.py +1 -1
  233. wagtail/admin/viewsets/base.py +1 -1
  234. wagtail/admin/viewsets/model.py +49 -1
  235. wagtail/admin/wagtail_hooks.py +2 -1
  236. wagtail/admin/widgets/slug.py +10 -10
  237. wagtail/api/v2/serializers.py +1 -1
  238. wagtail/api/v2/tests/test_renderer_classes.py +32 -0
  239. wagtail/apps.py +2 -0
  240. wagtail/bin/wagtail.py +1 -1
  241. wagtail/blocks/struct_block.py +2 -1
  242. wagtail/contrib/forms/locale/af/LC_MESSAGES/django.po +1 -1
  243. wagtail/contrib/forms/locale/ar/LC_MESSAGES/django.po +1 -1
  244. wagtail/contrib/forms/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  245. wagtail/contrib/forms/locale/be/LC_MESSAGES/django.po +1 -1
  246. wagtail/contrib/forms/locale/bg/LC_MESSAGES/django.po +1 -1
  247. wagtail/contrib/forms/locale/bn/LC_MESSAGES/django.po +1 -1
  248. wagtail/contrib/forms/locale/ca/LC_MESSAGES/django.po +1 -1
  249. wagtail/contrib/forms/locale/cs/LC_MESSAGES/django.po +1 -1
  250. wagtail/contrib/forms/locale/cy/LC_MESSAGES/django.po +1 -1
  251. wagtail/contrib/forms/locale/da/LC_MESSAGES/django.po +1 -1
  252. wagtail/contrib/forms/locale/de/LC_MESSAGES/django.po +1 -1
  253. wagtail/contrib/forms/locale/dv/LC_MESSAGES/django.po +1 -1
  254. wagtail/contrib/forms/locale/el/LC_MESSAGES/django.po +1 -1
  255. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +14 -14
  256. wagtail/contrib/forms/locale/es/LC_MESSAGES/django.po +1 -1
  257. wagtail/contrib/forms/locale/es_419/LC_MESSAGES/django.po +1 -1
  258. wagtail/contrib/forms/locale/et/LC_MESSAGES/django.po +1 -1
  259. wagtail/contrib/forms/locale/eu/LC_MESSAGES/django.po +1 -1
  260. wagtail/contrib/forms/locale/fa/LC_MESSAGES/django.po +1 -1
  261. wagtail/contrib/forms/locale/fi/LC_MESSAGES/django.po +1 -1
  262. wagtail/contrib/forms/locale/fr/LC_MESSAGES/django.po +1 -1
  263. wagtail/contrib/forms/locale/gl/LC_MESSAGES/django.po +1 -1
  264. wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.po +1 -1
  265. wagtail/contrib/forms/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  266. wagtail/contrib/forms/locale/ht/LC_MESSAGES/django.po +1 -1
  267. wagtail/contrib/forms/locale/hu/LC_MESSAGES/django.po +1 -1
  268. wagtail/contrib/forms/locale/hy/LC_MESSAGES/django.po +1 -1
  269. wagtail/contrib/forms/locale/id_ID/LC_MESSAGES/django.po +1 -1
  270. wagtail/contrib/forms/locale/is_IS/LC_MESSAGES/django.po +1 -1
  271. wagtail/contrib/forms/locale/it/LC_MESSAGES/django.po +1 -1
  272. wagtail/contrib/forms/locale/ja/LC_MESSAGES/django.po +1 -1
  273. wagtail/contrib/forms/locale/ka/LC_MESSAGES/django.po +1 -1
  274. wagtail/contrib/forms/locale/ko/LC_MESSAGES/django.po +1 -1
  275. wagtail/contrib/forms/locale/lt/LC_MESSAGES/django.po +1 -1
  276. wagtail/contrib/forms/locale/lv/LC_MESSAGES/django.po +1 -1
  277. wagtail/contrib/forms/locale/mi/LC_MESSAGES/django.po +1 -1
  278. wagtail/contrib/forms/locale/mn/LC_MESSAGES/django.po +1 -1
  279. wagtail/contrib/forms/locale/my/LC_MESSAGES/django.po +1 -1
  280. wagtail/contrib/forms/locale/nb/LC_MESSAGES/django.po +1 -1
  281. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.mo +0 -0
  282. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.po +20 -3
  283. wagtail/contrib/forms/locale/pl/LC_MESSAGES/django.po +1 -1
  284. wagtail/contrib/forms/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  285. wagtail/contrib/forms/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  286. wagtail/contrib/forms/locale/ro/LC_MESSAGES/django.po +1 -1
  287. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.mo +0 -0
  288. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.po +19 -2
  289. wagtail/contrib/forms/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  290. wagtail/contrib/forms/locale/sl/LC_MESSAGES/django.po +1 -1
  291. wagtail/contrib/forms/locale/sv/LC_MESSAGES/django.po +1 -1
  292. wagtail/contrib/forms/locale/tet/LC_MESSAGES/django.po +1 -1
  293. wagtail/contrib/forms/locale/th/LC_MESSAGES/django.po +1 -1
  294. wagtail/contrib/forms/locale/tr/LC_MESSAGES/django.mo +0 -0
  295. wagtail/contrib/forms/locale/tr/LC_MESSAGES/django.po +12 -2
  296. wagtail/contrib/forms/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  297. wagtail/contrib/forms/locale/ug/LC_MESSAGES/django.po +1 -1
  298. wagtail/contrib/forms/locale/uk/LC_MESSAGES/django.po +1 -1
  299. wagtail/contrib/forms/locale/vi/LC_MESSAGES/django.po +1 -1
  300. wagtail/contrib/forms/locale/zh/LC_MESSAGES/django.po +1 -1
  301. wagtail/contrib/forms/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  302. wagtail/contrib/forms/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  303. wagtail/contrib/frontend_cache/tests.py +4 -2
  304. wagtail/contrib/redirects/locale/ar/LC_MESSAGES/django.mo +0 -0
  305. wagtail/contrib/redirects/locale/ar/LC_MESSAGES/django.po +1 -13
  306. wagtail/contrib/redirects/locale/be/LC_MESSAGES/django.po +1 -1
  307. wagtail/contrib/redirects/locale/bg/LC_MESSAGES/django.po +1 -1
  308. wagtail/contrib/redirects/locale/bn/LC_MESSAGES/django.po +1 -1
  309. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.mo +0 -0
  310. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +9 -10
  311. wagtail/contrib/redirects/locale/cs/LC_MESSAGES/django.mo +0 -0
  312. wagtail/contrib/redirects/locale/cs/LC_MESSAGES/django.po +1 -13
  313. wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.mo +0 -0
  314. wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.po +1 -13
  315. wagtail/contrib/redirects/locale/da/LC_MESSAGES/django.po +1 -1
  316. wagtail/contrib/redirects/locale/de/LC_MESSAGES/django.mo +0 -0
  317. wagtail/contrib/redirects/locale/de/LC_MESSAGES/django.po +1 -13
  318. wagtail/contrib/redirects/locale/dv/LC_MESSAGES/django.po +1 -1
  319. wagtail/contrib/redirects/locale/el/LC_MESSAGES/django.po +1 -1
  320. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +4 -4
  321. wagtail/contrib/redirects/locale/en_IN/LC_MESSAGES/django.po +1 -1
  322. wagtail/contrib/redirects/locale/es/LC_MESSAGES/django.mo +0 -0
  323. wagtail/contrib/redirects/locale/es/LC_MESSAGES/django.po +1 -14
  324. wagtail/contrib/redirects/locale/es_419/LC_MESSAGES/django.po +1 -1
  325. wagtail/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po +1 -1
  326. wagtail/contrib/redirects/locale/et/LC_MESSAGES/django.mo +0 -0
  327. wagtail/contrib/redirects/locale/et/LC_MESSAGES/django.po +1 -13
  328. wagtail/contrib/redirects/locale/eu/LC_MESSAGES/django.po +1 -1
  329. wagtail/contrib/redirects/locale/fa/LC_MESSAGES/django.po +1 -1
  330. wagtail/contrib/redirects/locale/fi/LC_MESSAGES/django.mo +0 -0
  331. wagtail/contrib/redirects/locale/fi/LC_MESSAGES/django.po +7 -11
  332. wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.mo +0 -0
  333. wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.po +9 -8
  334. wagtail/contrib/redirects/locale/gl/LC_MESSAGES/django.mo +0 -0
  335. wagtail/contrib/redirects/locale/gl/LC_MESSAGES/django.po +9 -9
  336. wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.po +1 -1
  337. wagtail/contrib/redirects/locale/hi/LC_MESSAGES/django.po +1 -1
  338. wagtail/contrib/redirects/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  339. wagtail/contrib/redirects/locale/hr_HR/LC_MESSAGES/django.po +1 -13
  340. wagtail/contrib/redirects/locale/ht/LC_MESSAGES/django.po +1 -1
  341. wagtail/contrib/redirects/locale/hu/LC_MESSAGES/django.mo +0 -0
  342. wagtail/contrib/redirects/locale/hu/LC_MESSAGES/django.po +1 -13
  343. wagtail/contrib/redirects/locale/hy/LC_MESSAGES/django.po +1 -1
  344. wagtail/contrib/redirects/locale/id_ID/LC_MESSAGES/django.po +1 -1
  345. wagtail/contrib/redirects/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  346. wagtail/contrib/redirects/locale/is_IS/LC_MESSAGES/django.po +1 -13
  347. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.mo +0 -0
  348. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.po +1 -14
  349. wagtail/contrib/redirects/locale/ja/LC_MESSAGES/django.mo +0 -0
  350. wagtail/contrib/redirects/locale/ja/LC_MESSAGES/django.po +1 -13
  351. wagtail/contrib/redirects/locale/ka/LC_MESSAGES/django.po +1 -1
  352. wagtail/contrib/redirects/locale/ko/LC_MESSAGES/django.po +1 -1
  353. wagtail/contrib/redirects/locale/lt/LC_MESSAGES/django.po +1 -1
  354. wagtail/contrib/redirects/locale/lv/LC_MESSAGES/django.po +1 -1
  355. wagtail/contrib/redirects/locale/mi/LC_MESSAGES/django.po +1 -1
  356. wagtail/contrib/redirects/locale/mn/LC_MESSAGES/django.po +1 -1
  357. wagtail/contrib/redirects/locale/my/LC_MESSAGES/django.po +1 -1
  358. wagtail/contrib/redirects/locale/nb/LC_MESSAGES/django.mo +0 -0
  359. wagtail/contrib/redirects/locale/nb/LC_MESSAGES/django.po +1 -13
  360. wagtail/contrib/redirects/locale/nl/LC_MESSAGES/django.mo +0 -0
  361. wagtail/contrib/redirects/locale/nl/LC_MESSAGES/django.po +9 -9
  362. wagtail/contrib/redirects/locale/pl/LC_MESSAGES/django.mo +0 -0
  363. wagtail/contrib/redirects/locale/pl/LC_MESSAGES/django.po +1 -14
  364. wagtail/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  365. wagtail/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po +1 -13
  366. wagtail/contrib/redirects/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  367. wagtail/contrib/redirects/locale/pt_PT/LC_MESSAGES/django.po +1 -13
  368. wagtail/contrib/redirects/locale/ro/LC_MESSAGES/django.mo +0 -0
  369. wagtail/contrib/redirects/locale/ro/LC_MESSAGES/django.po +1 -13
  370. wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.mo +0 -0
  371. wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.po +1 -13
  372. wagtail/contrib/redirects/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  373. wagtail/contrib/redirects/locale/sl/LC_MESSAGES/django.mo +0 -0
  374. wagtail/contrib/redirects/locale/sl/LC_MESSAGES/django.po +1 -14
  375. wagtail/contrib/redirects/locale/sr/LC_MESSAGES/django.po +1 -1
  376. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.mo +0 -0
  377. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.po +1 -13
  378. wagtail/contrib/redirects/locale/ta/LC_MESSAGES/django.po +1 -1
  379. wagtail/contrib/redirects/locale/tet/LC_MESSAGES/django.po +1 -1
  380. wagtail/contrib/redirects/locale/th/LC_MESSAGES/django.po +1 -1
  381. wagtail/contrib/redirects/locale/tr/LC_MESSAGES/django.mo +0 -0
  382. wagtail/contrib/redirects/locale/tr/LC_MESSAGES/django.po +1 -13
  383. wagtail/contrib/redirects/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  384. wagtail/contrib/redirects/locale/ug/LC_MESSAGES/django.mo +0 -0
  385. wagtail/contrib/redirects/locale/ug/LC_MESSAGES/django.po +1 -13
  386. wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.mo +0 -0
  387. wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.po +1 -13
  388. wagtail/contrib/redirects/locale/vi/LC_MESSAGES/django.po +1 -1
  389. wagtail/contrib/redirects/locale/zh/LC_MESSAGES/django.po +1 -1
  390. wagtail/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  391. wagtail/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po +1 -13
  392. wagtail/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  393. wagtail/contrib/redirects/tests/test_tmp_storages.py +20 -0
  394. wagtail/contrib/redirects/tmp_storages.py +1 -1
  395. wagtail/contrib/redirects/views.py +3 -3
  396. wagtail/contrib/search_promotions/locale/af/LC_MESSAGES/django.po +1 -1
  397. wagtail/contrib/search_promotions/locale/ar/LC_MESSAGES/django.mo +0 -0
  398. wagtail/contrib/search_promotions/locale/ar/LC_MESSAGES/django.po +1 -7
  399. wagtail/contrib/search_promotions/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  400. wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.mo +0 -0
  401. wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.po +1 -7
  402. wagtail/contrib/search_promotions/locale/bg/LC_MESSAGES/django.po +1 -1
  403. wagtail/contrib/search_promotions/locale/bn/LC_MESSAGES/django.po +1 -1
  404. wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.mo +0 -0
  405. wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.po +5 -5
  406. wagtail/contrib/search_promotions/locale/cs/LC_MESSAGES/django.mo +0 -0
  407. wagtail/contrib/search_promotions/locale/cs/LC_MESSAGES/django.po +1 -7
  408. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.mo +0 -0
  409. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.po +1 -7
  410. wagtail/contrib/search_promotions/locale/da/LC_MESSAGES/django.po +1 -1
  411. wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.mo +0 -0
  412. wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.po +1 -7
  413. wagtail/contrib/search_promotions/locale/dv/LC_MESSAGES/django.po +1 -1
  414. wagtail/contrib/search_promotions/locale/el/LC_MESSAGES/django.mo +0 -0
  415. wagtail/contrib/search_promotions/locale/el/LC_MESSAGES/django.po +1 -7
  416. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +3 -3
  417. wagtail/contrib/search_promotions/locale/es/LC_MESSAGES/django.mo +0 -0
  418. wagtail/contrib/search_promotions/locale/es/LC_MESSAGES/django.po +1 -7
  419. wagtail/contrib/search_promotions/locale/es_419/LC_MESSAGES/django.po +1 -1
  420. wagtail/contrib/search_promotions/locale/et/LC_MESSAGES/django.mo +0 -0
  421. wagtail/contrib/search_promotions/locale/et/LC_MESSAGES/django.po +1 -7
  422. wagtail/contrib/search_promotions/locale/eu/LC_MESSAGES/django.po +1 -1
  423. wagtail/contrib/search_promotions/locale/fa/LC_MESSAGES/django.mo +0 -0
  424. wagtail/contrib/search_promotions/locale/fa/LC_MESSAGES/django.po +1 -7
  425. wagtail/contrib/search_promotions/locale/fi/LC_MESSAGES/django.mo +0 -0
  426. wagtail/contrib/search_promotions/locale/fi/LC_MESSAGES/django.po +1 -7
  427. wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.mo +0 -0
  428. wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.po +5 -5
  429. wagtail/contrib/search_promotions/locale/gl/LC_MESSAGES/django.mo +0 -0
  430. wagtail/contrib/search_promotions/locale/gl/LC_MESSAGES/django.po +5 -5
  431. wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  432. wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.po +1 -7
  433. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  434. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.po +1 -7
  435. wagtail/contrib/search_promotions/locale/ht/LC_MESSAGES/django.po +1 -1
  436. wagtail/contrib/search_promotions/locale/hu/LC_MESSAGES/django.mo +0 -0
  437. wagtail/contrib/search_promotions/locale/hu/LC_MESSAGES/django.po +1 -7
  438. wagtail/contrib/search_promotions/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  439. wagtail/contrib/search_promotions/locale/id_ID/LC_MESSAGES/django.po +1 -7
  440. wagtail/contrib/search_promotions/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  441. wagtail/contrib/search_promotions/locale/is_IS/LC_MESSAGES/django.po +1 -7
  442. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
  443. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +1 -7
  444. wagtail/contrib/search_promotions/locale/ja/LC_MESSAGES/django.mo +0 -0
  445. wagtail/contrib/search_promotions/locale/ja/LC_MESSAGES/django.po +1 -7
  446. wagtail/contrib/search_promotions/locale/ka/LC_MESSAGES/django.po +1 -1
  447. wagtail/contrib/search_promotions/locale/ko/LC_MESSAGES/django.mo +0 -0
  448. wagtail/contrib/search_promotions/locale/ko/LC_MESSAGES/django.po +1 -7
  449. wagtail/contrib/search_promotions/locale/lt/LC_MESSAGES/django.mo +0 -0
  450. wagtail/contrib/search_promotions/locale/lt/LC_MESSAGES/django.po +1 -7
  451. wagtail/contrib/search_promotions/locale/lv/LC_MESSAGES/django.mo +0 -0
  452. wagtail/contrib/search_promotions/locale/lv/LC_MESSAGES/django.po +1 -7
  453. wagtail/contrib/search_promotions/locale/mi/LC_MESSAGES/django.po +1 -1
  454. wagtail/contrib/search_promotions/locale/mn/LC_MESSAGES/django.po +1 -1
  455. wagtail/contrib/search_promotions/locale/my/LC_MESSAGES/django.po +1 -1
  456. wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.mo +0 -0
  457. wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.po +1 -7
  458. wagtail/contrib/search_promotions/locale/nl/LC_MESSAGES/django.mo +0 -0
  459. wagtail/contrib/search_promotions/locale/nl/LC_MESSAGES/django.po +4 -4
  460. wagtail/contrib/search_promotions/locale/pl/LC_MESSAGES/django.mo +0 -0
  461. wagtail/contrib/search_promotions/locale/pl/LC_MESSAGES/django.po +1 -7
  462. wagtail/contrib/search_promotions/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  463. wagtail/contrib/search_promotions/locale/pt_BR/LC_MESSAGES/django.po +1 -7
  464. wagtail/contrib/search_promotions/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  465. wagtail/contrib/search_promotions/locale/pt_PT/LC_MESSAGES/django.po +1 -7
  466. wagtail/contrib/search_promotions/locale/ro/LC_MESSAGES/django.mo +0 -0
  467. wagtail/contrib/search_promotions/locale/ro/LC_MESSAGES/django.po +1 -7
  468. wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.mo +0 -0
  469. wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.po +1 -7
  470. wagtail/contrib/search_promotions/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  471. wagtail/contrib/search_promotions/locale/sk_SK/LC_MESSAGES/django.po +1 -7
  472. wagtail/contrib/search_promotions/locale/sl/LC_MESSAGES/django.mo +0 -0
  473. wagtail/contrib/search_promotions/locale/sl/LC_MESSAGES/django.po +1 -7
  474. wagtail/contrib/search_promotions/locale/sv/LC_MESSAGES/django.mo +0 -0
  475. wagtail/contrib/search_promotions/locale/sv/LC_MESSAGES/django.po +1 -7
  476. wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.mo +0 -0
  477. wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.po +1 -7
  478. wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.mo +0 -0
  479. wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.po +1 -7
  480. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.mo +0 -0
  481. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.po +44 -10
  482. wagtail/contrib/search_promotions/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  483. wagtail/contrib/search_promotions/locale/tr_TR/LC_MESSAGES/django.po +1 -7
  484. wagtail/contrib/search_promotions/locale/ug/LC_MESSAGES/django.mo +0 -0
  485. wagtail/contrib/search_promotions/locale/ug/LC_MESSAGES/django.po +1 -7
  486. wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.mo +0 -0
  487. wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.po +1 -7
  488. wagtail/contrib/search_promotions/locale/vi/LC_MESSAGES/django.po +1 -1
  489. wagtail/contrib/search_promotions/locale/zh/LC_MESSAGES/django.po +1 -1
  490. wagtail/contrib/search_promotions/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  491. wagtail/contrib/search_promotions/locale/zh_Hans/LC_MESSAGES/django.po +1 -7
  492. wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  493. wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.po +1 -7
  494. wagtail/contrib/search_promotions/static/wagtailsearchpromotions/js/query-chooser-modal.js +1 -1
  495. wagtail/contrib/search_promotions/views/settings.py +2 -2
  496. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.mo +0 -0
  497. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.po +6 -1
  498. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +1 -1
  499. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.mo +0 -0
  500. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.po +6 -2
  501. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.mo +0 -0
  502. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.po +6 -1
  503. wagtail/contrib/settings/tests/site_specific/test_admin.py +48 -6
  504. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  505. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +1 -1
  506. wagtail/contrib/styleguide/templates/wagtailstyleguide/base.html +5 -5
  507. wagtail/contrib/table_block/blocks.py +1 -0
  508. wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.po +1 -1
  509. wagtail/contrib/table_block/locale/be/LC_MESSAGES/django.po +1 -1
  510. wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.mo +0 -0
  511. wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.po +6 -3
  512. wagtail/contrib/table_block/locale/cs/LC_MESSAGES/django.po +1 -1
  513. wagtail/contrib/table_block/locale/cy/LC_MESSAGES/django.po +1 -1
  514. wagtail/contrib/table_block/locale/de/LC_MESSAGES/django.po +1 -1
  515. wagtail/contrib/table_block/locale/dv/LC_MESSAGES/django.po +1 -1
  516. wagtail/contrib/table_block/locale/el/LC_MESSAGES/django.po +1 -1
  517. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +5 -1
  518. wagtail/contrib/table_block/locale/en_IN/LC_MESSAGES/django.po +1 -1
  519. wagtail/contrib/table_block/locale/es/LC_MESSAGES/django.po +1 -1
  520. wagtail/contrib/table_block/locale/et/LC_MESSAGES/django.po +1 -1
  521. wagtail/contrib/table_block/locale/fa/LC_MESSAGES/django.po +1 -1
  522. wagtail/contrib/table_block/locale/fi/LC_MESSAGES/django.po +1 -1
  523. wagtail/contrib/table_block/locale/fr/LC_MESSAGES/django.mo +0 -0
  524. wagtail/contrib/table_block/locale/fr/LC_MESSAGES/django.po +6 -3
  525. wagtail/contrib/table_block/locale/gl/LC_MESSAGES/django.mo +0 -0
  526. wagtail/contrib/table_block/locale/gl/LC_MESSAGES/django.po +6 -3
  527. wagtail/contrib/table_block/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  528. wagtail/contrib/table_block/locale/ht/LC_MESSAGES/django.po +1 -1
  529. wagtail/contrib/table_block/locale/hu/LC_MESSAGES/django.po +1 -1
  530. wagtail/contrib/table_block/locale/id_ID/LC_MESSAGES/django.po +1 -1
  531. wagtail/contrib/table_block/locale/is_IS/LC_MESSAGES/django.po +1 -1
  532. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +1 -1
  533. wagtail/contrib/table_block/locale/ja/LC_MESSAGES/django.po +1 -1
  534. wagtail/contrib/table_block/locale/ko/LC_MESSAGES/django.po +1 -1
  535. wagtail/contrib/table_block/locale/lt/LC_MESSAGES/django.po +1 -1
  536. wagtail/contrib/table_block/locale/lv/LC_MESSAGES/django.po +1 -1
  537. wagtail/contrib/table_block/locale/mi/LC_MESSAGES/django.po +1 -1
  538. wagtail/contrib/table_block/locale/mn/LC_MESSAGES/django.po +1 -1
  539. wagtail/contrib/table_block/locale/my/LC_MESSAGES/django.po +1 -1
  540. wagtail/contrib/table_block/locale/nb/LC_MESSAGES/django.po +1 -1
  541. wagtail/contrib/table_block/locale/nl/LC_MESSAGES/django.mo +0 -0
  542. wagtail/contrib/table_block/locale/nl/LC_MESSAGES/django.po +6 -3
  543. wagtail/contrib/table_block/locale/pl/LC_MESSAGES/django.po +1 -1
  544. wagtail/contrib/table_block/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  545. wagtail/contrib/table_block/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  546. wagtail/contrib/table_block/locale/ro/LC_MESSAGES/django.po +1 -1
  547. wagtail/contrib/table_block/locale/ru/LC_MESSAGES/django.po +1 -1
  548. wagtail/contrib/table_block/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  549. wagtail/contrib/table_block/locale/sl/LC_MESSAGES/django.po +1 -1
  550. wagtail/contrib/table_block/locale/sv/LC_MESSAGES/django.po +1 -1
  551. wagtail/contrib/table_block/locale/tet/LC_MESSAGES/django.po +1 -1
  552. wagtail/contrib/table_block/locale/th/LC_MESSAGES/django.po +1 -1
  553. wagtail/contrib/table_block/locale/tr/LC_MESSAGES/django.po +1 -1
  554. wagtail/contrib/table_block/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  555. wagtail/contrib/table_block/locale/ug/LC_MESSAGES/django.po +1 -1
  556. wagtail/contrib/table_block/locale/uk/LC_MESSAGES/django.po +1 -1
  557. wagtail/contrib/table_block/locale/vi/LC_MESSAGES/django.po +1 -1
  558. wagtail/contrib/table_block/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  559. wagtail/contrib/table_block/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  560. wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
  561. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
  562. wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
  563. wagtail/coreutils.py +5 -5
  564. wagtail/documents/forms.py +18 -1
  565. wagtail/documents/locale/af/LC_MESSAGES/django.po +1 -1
  566. wagtail/documents/locale/ar/LC_MESSAGES/django.mo +0 -0
  567. wagtail/documents/locale/ar/LC_MESSAGES/django.po +1 -5
  568. wagtail/documents/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  569. wagtail/documents/locale/be/LC_MESSAGES/django.mo +0 -0
  570. wagtail/documents/locale/be/LC_MESSAGES/django.po +1 -5
  571. wagtail/documents/locale/bg/LC_MESSAGES/django.po +1 -1
  572. wagtail/documents/locale/bn/LC_MESSAGES/django.po +1 -1
  573. wagtail/documents/locale/ca/LC_MESSAGES/django.mo +0 -0
  574. wagtail/documents/locale/ca/LC_MESSAGES/django.po +5 -5
  575. wagtail/documents/locale/cs/LC_MESSAGES/django.mo +0 -0
  576. wagtail/documents/locale/cs/LC_MESSAGES/django.po +1 -7
  577. wagtail/documents/locale/cy/LC_MESSAGES/django.po +1 -1
  578. wagtail/documents/locale/da/LC_MESSAGES/django.po +1 -1
  579. wagtail/documents/locale/de/LC_MESSAGES/django.mo +0 -0
  580. wagtail/documents/locale/de/LC_MESSAGES/django.po +1 -7
  581. wagtail/documents/locale/dv/LC_MESSAGES/django.po +1 -1
  582. wagtail/documents/locale/el/LC_MESSAGES/django.mo +0 -0
  583. wagtail/documents/locale/el/LC_MESSAGES/django.po +1 -7
  584. wagtail/documents/locale/en/LC_MESSAGES/django.po +10 -10
  585. wagtail/documents/locale/es/LC_MESSAGES/django.mo +0 -0
  586. wagtail/documents/locale/es/LC_MESSAGES/django.po +1 -7
  587. wagtail/documents/locale/es_419/LC_MESSAGES/django.po +1 -1
  588. wagtail/documents/locale/et/LC_MESSAGES/django.mo +0 -0
  589. wagtail/documents/locale/et/LC_MESSAGES/django.po +1 -5
  590. wagtail/documents/locale/eu/LC_MESSAGES/django.po +1 -1
  591. wagtail/documents/locale/fa/LC_MESSAGES/django.mo +0 -0
  592. wagtail/documents/locale/fa/LC_MESSAGES/django.po +1 -5
  593. wagtail/documents/locale/fi/LC_MESSAGES/django.mo +0 -0
  594. wagtail/documents/locale/fi/LC_MESSAGES/django.po +1 -5
  595. wagtail/documents/locale/fr/LC_MESSAGES/django.mo +0 -0
  596. wagtail/documents/locale/fr/LC_MESSAGES/django.po +5 -5
  597. wagtail/documents/locale/gl/LC_MESSAGES/django.mo +0 -0
  598. wagtail/documents/locale/gl/LC_MESSAGES/django.po +5 -5
  599. wagtail/documents/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  600. wagtail/documents/locale/he_IL/LC_MESSAGES/django.po +1 -5
  601. wagtail/documents/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  602. wagtail/documents/locale/hr_HR/LC_MESSAGES/django.po +1 -6
  603. wagtail/documents/locale/ht/LC_MESSAGES/django.po +1 -1
  604. wagtail/documents/locale/hu/LC_MESSAGES/django.mo +0 -0
  605. wagtail/documents/locale/hu/LC_MESSAGES/django.po +1 -7
  606. wagtail/documents/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  607. wagtail/documents/locale/id_ID/LC_MESSAGES/django.po +1 -6
  608. wagtail/documents/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  609. wagtail/documents/locale/is_IS/LC_MESSAGES/django.po +1 -5
  610. wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
  611. wagtail/documents/locale/it/LC_MESSAGES/django.po +1 -5
  612. wagtail/documents/locale/ja/LC_MESSAGES/django.mo +0 -0
  613. wagtail/documents/locale/ja/LC_MESSAGES/django.po +1 -7
  614. wagtail/documents/locale/ka/LC_MESSAGES/django.po +1 -1
  615. wagtail/documents/locale/ko/LC_MESSAGES/django.mo +0 -0
  616. wagtail/documents/locale/ko/LC_MESSAGES/django.po +1 -6
  617. wagtail/documents/locale/lt/LC_MESSAGES/django.mo +0 -0
  618. wagtail/documents/locale/lt/LC_MESSAGES/django.po +1 -5
  619. wagtail/documents/locale/lv/LC_MESSAGES/django.po +1 -1
  620. wagtail/documents/locale/mi/LC_MESSAGES/django.mo +0 -0
  621. wagtail/documents/locale/mi/LC_MESSAGES/django.po +1 -7
  622. wagtail/documents/locale/mn/LC_MESSAGES/django.mo +0 -0
  623. wagtail/documents/locale/mn/LC_MESSAGES/django.po +1 -5
  624. wagtail/documents/locale/my/LC_MESSAGES/django.po +1 -1
  625. wagtail/documents/locale/nb/LC_MESSAGES/django.mo +0 -0
  626. wagtail/documents/locale/nb/LC_MESSAGES/django.po +1 -5
  627. wagtail/documents/locale/nl/LC_MESSAGES/django.mo +0 -0
  628. wagtail/documents/locale/nl/LC_MESSAGES/django.po +15 -6
  629. wagtail/documents/locale/pl/LC_MESSAGES/django.mo +0 -0
  630. wagtail/documents/locale/pl/LC_MESSAGES/django.po +1 -6
  631. wagtail/documents/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  632. wagtail/documents/locale/pt_BR/LC_MESSAGES/django.po +1 -7
  633. wagtail/documents/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  634. wagtail/documents/locale/pt_PT/LC_MESSAGES/django.po +1 -6
  635. wagtail/documents/locale/ro/LC_MESSAGES/django.mo +0 -0
  636. wagtail/documents/locale/ro/LC_MESSAGES/django.po +1 -5
  637. wagtail/documents/locale/ru/LC_MESSAGES/django.mo +0 -0
  638. wagtail/documents/locale/ru/LC_MESSAGES/django.po +10 -7
  639. wagtail/documents/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  640. wagtail/documents/locale/sk_SK/LC_MESSAGES/django.po +1 -5
  641. wagtail/documents/locale/sl/LC_MESSAGES/django.mo +0 -0
  642. wagtail/documents/locale/sl/LC_MESSAGES/django.po +1 -7
  643. wagtail/documents/locale/sv/LC_MESSAGES/django.mo +0 -0
  644. wagtail/documents/locale/sv/LC_MESSAGES/django.po +1 -6
  645. wagtail/documents/locale/tet/LC_MESSAGES/django.po +1 -1
  646. wagtail/documents/locale/th/LC_MESSAGES/django.mo +0 -0
  647. wagtail/documents/locale/th/LC_MESSAGES/django.po +1 -5
  648. wagtail/documents/locale/tr/LC_MESSAGES/django.mo +0 -0
  649. wagtail/documents/locale/tr/LC_MESSAGES/django.po +13 -5
  650. wagtail/documents/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  651. wagtail/documents/locale/tr_TR/LC_MESSAGES/django.po +1 -5
  652. wagtail/documents/locale/ug/LC_MESSAGES/django.mo +0 -0
  653. wagtail/documents/locale/ug/LC_MESSAGES/django.po +1 -5
  654. wagtail/documents/locale/uk/LC_MESSAGES/django.mo +0 -0
  655. wagtail/documents/locale/uk/LC_MESSAGES/django.po +1 -5
  656. wagtail/documents/locale/vi/LC_MESSAGES/django.po +1 -1
  657. wagtail/documents/locale/zh/LC_MESSAGES/django.po +1 -1
  658. wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  659. wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.po +1 -5
  660. wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  661. wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.po +1 -5
  662. wagtail/documents/models.py +1 -1
  663. wagtail/documents/static/wagtaildocs/js/add-multiple.js +1 -1
  664. wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
  665. wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
  666. wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
  667. wagtail/documents/templates/wagtaildocs/documents/add.html +0 -34
  668. wagtail/documents/tests/test_admin_views.py +132 -26
  669. wagtail/documents/tests/test_collection_privacy.py +18 -4
  670. wagtail/documents/tests/test_form_overrides.py +1 -1
  671. wagtail/documents/tests/test_search.py +21 -8
  672. wagtail/documents/views/documents.py +1 -1
  673. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  674. wagtail/embeds/static/wagtailembeds/js/embed-chooser-modal.js +1 -1
  675. wagtail/images/forms.py +16 -1
  676. wagtail/images/locale/ar/LC_MESSAGES/django.mo +0 -0
  677. wagtail/images/locale/ar/LC_MESSAGES/django.po +7 -10
  678. wagtail/images/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  679. wagtail/images/locale/be/LC_MESSAGES/django.po +7 -7
  680. wagtail/images/locale/bg/LC_MESSAGES/django.po +4 -4
  681. wagtail/images/locale/bn/LC_MESSAGES/django.po +1 -1
  682. wagtail/images/locale/ca/LC_MESSAGES/django.mo +0 -0
  683. wagtail/images/locale/ca/LC_MESSAGES/django.po +15 -9
  684. wagtail/images/locale/cs/LC_MESSAGES/django.mo +0 -0
  685. wagtail/images/locale/cs/LC_MESSAGES/django.po +19 -8
  686. wagtail/images/locale/cy/LC_MESSAGES/django.po +4 -4
  687. wagtail/images/locale/da/LC_MESSAGES/django.po +1 -1
  688. wagtail/images/locale/de/LC_MESSAGES/django.po +7 -7
  689. wagtail/images/locale/dv/LC_MESSAGES/django.po +7 -7
  690. wagtail/images/locale/el/LC_MESSAGES/django.po +7 -7
  691. wagtail/images/locale/en/LC_MESSAGES/django.po +57 -46
  692. wagtail/images/locale/es/LC_MESSAGES/django.po +7 -7
  693. wagtail/images/locale/es_419/LC_MESSAGES/django.po +1 -1
  694. wagtail/images/locale/et/LC_MESSAGES/django.po +7 -7
  695. wagtail/images/locale/eu/LC_MESSAGES/django.po +1 -1
  696. wagtail/images/locale/fa/LC_MESSAGES/django.po +4 -4
  697. wagtail/images/locale/fi/LC_MESSAGES/django.mo +0 -0
  698. wagtail/images/locale/fi/LC_MESSAGES/django.po +18 -9
  699. wagtail/images/locale/fr/LC_MESSAGES/django.mo +0 -0
  700. wagtail/images/locale/fr/LC_MESSAGES/django.po +15 -9
  701. wagtail/images/locale/gl/LC_MESSAGES/django.mo +0 -0
  702. wagtail/images/locale/gl/LC_MESSAGES/django.po +15 -9
  703. wagtail/images/locale/he_IL/LC_MESSAGES/django.po +4 -4
  704. wagtail/images/locale/hr_HR/LC_MESSAGES/django.po +7 -7
  705. wagtail/images/locale/ht/LC_MESSAGES/django.po +1 -1
  706. wagtail/images/locale/hu/LC_MESSAGES/django.mo +0 -0
  707. wagtail/images/locale/hu/LC_MESSAGES/django.po +7 -10
  708. wagtail/images/locale/id_ID/LC_MESSAGES/django.po +4 -4
  709. wagtail/images/locale/is_IS/LC_MESSAGES/django.po +7 -7
  710. wagtail/images/locale/it/LC_MESSAGES/django.po +7 -7
  711. wagtail/images/locale/ja/LC_MESSAGES/django.po +7 -7
  712. wagtail/images/locale/ka/LC_MESSAGES/django.po +4 -4
  713. wagtail/images/locale/ko/LC_MESSAGES/django.po +7 -7
  714. wagtail/images/locale/lt/LC_MESSAGES/django.po +7 -7
  715. wagtail/images/locale/lv/LC_MESSAGES/django.po +4 -4
  716. wagtail/images/locale/mi/LC_MESSAGES/django.po +7 -7
  717. wagtail/images/locale/mn/LC_MESSAGES/django.po +4 -4
  718. wagtail/images/locale/my/LC_MESSAGES/django.po +1 -1
  719. wagtail/images/locale/nb/LC_MESSAGES/django.po +7 -7
  720. wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
  721. wagtail/images/locale/nl/LC_MESSAGES/django.po +50 -21
  722. wagtail/images/locale/pl/LC_MESSAGES/django.po +7 -7
  723. wagtail/images/locale/pt_BR/LC_MESSAGES/django.po +7 -7
  724. wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +7 -7
  725. wagtail/images/locale/ro/LC_MESSAGES/django.po +7 -7
  726. wagtail/images/locale/ru/LC_MESSAGES/django.mo +0 -0
  727. wagtail/images/locale/ru/LC_MESSAGES/django.po +24 -8
  728. wagtail/images/locale/sk_SK/LC_MESSAGES/django.po +4 -4
  729. wagtail/images/locale/sl/LC_MESSAGES/django.po +7 -7
  730. wagtail/images/locale/sv/LC_MESSAGES/django.po +7 -7
  731. wagtail/images/locale/tet/LC_MESSAGES/django.po +4 -4
  732. wagtail/images/locale/th/LC_MESSAGES/django.po +4 -4
  733. wagtail/images/locale/tr/LC_MESSAGES/django.mo +0 -0
  734. wagtail/images/locale/tr/LC_MESSAGES/django.po +85 -7
  735. wagtail/images/locale/tr_TR/LC_MESSAGES/django.po +4 -4
  736. wagtail/images/locale/ug/LC_MESSAGES/django.po +7 -7
  737. wagtail/images/locale/uk/LC_MESSAGES/django.po +7 -7
  738. wagtail/images/locale/vi/LC_MESSAGES/django.po +4 -4
  739. wagtail/images/locale/zh/LC_MESSAGES/django.po +4 -4
  740. wagtail/images/locale/zh_Hans/LC_MESSAGES/django.po +7 -7
  741. wagtail/images/locale/zh_Hant/LC_MESSAGES/django.po +7 -7
  742. wagtail/images/models.py +1 -1
  743. wagtail/images/static/wagtailimages/js/add-multiple.js +1 -1
  744. wagtail/images/static/wagtailimages/js/focal-point-chooser.js +1 -1
  745. wagtail/images/static/wagtailimages/js/image-block.js +1 -1
  746. wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
  747. wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
  748. wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
  749. wagtail/images/static/wagtailimages/js/image-url-generator.js +1 -1
  750. wagtail/images/static/wagtailimages/js/vendor/jquery.Jcrop.min.js +1 -1
  751. wagtail/images/static/wagtailimages/js/vendor/jquery.fileupload-image.js +1 -1
  752. wagtail/images/static/wagtailimages/js/vendor/jquery.fileupload-validate.js +1 -1
  753. wagtail/images/static/wagtailimages/js/vendor/load-image.min.js +1 -1
  754. wagtail/images/templates/wagtailimages/chooser/chooser.html +22 -13
  755. wagtail/images/templates/wagtailimages/chooser/image_preview_column_cell.html +10 -0
  756. wagtail/images/templates/wagtailimages/chooser/results.html +24 -20
  757. wagtail/images/templates/wagtailimages/chooser/title_column_cell.html +15 -0
  758. wagtail/images/templates/wagtailimages/images/add.html +0 -34
  759. wagtail/images/templates/wagtailimages/images/index.html +3 -3
  760. wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
  761. wagtail/images/templates/wagtailimages/images/layout_toggle_button.html +8 -7
  762. wagtail/images/templatetags/wagtailimages_tags.py +2 -2
  763. wagtail/images/tests/test_admin_views.py +87 -0
  764. wagtail/images/tests/test_form_overrides.py +1 -1
  765. wagtail/images/tests/test_models.py +48 -9
  766. wagtail/images/views/chooser.py +66 -2
  767. wagtail/locale/af/LC_MESSAGES/django.po +1 -1
  768. wagtail/locale/ar/LC_MESSAGES/django.mo +0 -0
  769. wagtail/locale/ar/LC_MESSAGES/django.po +1 -9
  770. wagtail/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  771. wagtail/locale/be/LC_MESSAGES/django.po +1 -1
  772. wagtail/locale/bg/LC_MESSAGES/django.po +1 -1
  773. wagtail/locale/bn/LC_MESSAGES/django.po +1 -1
  774. wagtail/locale/ca/LC_MESSAGES/django.mo +0 -0
  775. wagtail/locale/ca/LC_MESSAGES/django.po +4 -4
  776. wagtail/locale/cs/LC_MESSAGES/django.po +1 -1
  777. wagtail/locale/cy/LC_MESSAGES/django.po +1 -1
  778. wagtail/locale/da/LC_MESSAGES/django.po +1 -1
  779. wagtail/locale/de/LC_MESSAGES/django.mo +0 -0
  780. wagtail/locale/de/LC_MESSAGES/django.po +1 -9
  781. wagtail/locale/dv/LC_MESSAGES/django.mo +0 -0
  782. wagtail/locale/dv/LC_MESSAGES/django.po +1 -8
  783. wagtail/locale/el/LC_MESSAGES/django.po +1 -1
  784. wagtail/locale/en/LC_MESSAGES/django.po +55 -55
  785. wagtail/locale/es/LC_MESSAGES/django.po +1 -1
  786. wagtail/locale/es_419/LC_MESSAGES/django.po +1 -1
  787. wagtail/locale/et/LC_MESSAGES/django.po +1 -1
  788. wagtail/locale/eu/LC_MESSAGES/django.po +1 -1
  789. wagtail/locale/fa/LC_MESSAGES/django.po +1 -1
  790. wagtail/locale/fi/LC_MESSAGES/django.po +1 -1
  791. wagtail/locale/fr/LC_MESSAGES/django.mo +0 -0
  792. wagtail/locale/fr/LC_MESSAGES/django.po +4 -4
  793. wagtail/locale/gl/LC_MESSAGES/django.mo +0 -0
  794. wagtail/locale/gl/LC_MESSAGES/django.po +3 -3
  795. wagtail/locale/he_IL/LC_MESSAGES/django.po +1 -1
  796. wagtail/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  797. wagtail/locale/hu/LC_MESSAGES/django.mo +0 -0
  798. wagtail/locale/hu/LC_MESSAGES/django.po +1 -9
  799. wagtail/locale/id_ID/LC_MESSAGES/django.po +1 -1
  800. wagtail/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  801. wagtail/locale/is_IS/LC_MESSAGES/django.po +4 -12
  802. wagtail/locale/it/LC_MESSAGES/django.po +1 -1
  803. wagtail/locale/ja/LC_MESSAGES/django.po +1 -1
  804. wagtail/locale/ka/LC_MESSAGES/django.po +1 -1
  805. wagtail/locale/ko/LC_MESSAGES/django.po +1 -1
  806. wagtail/locale/lt/LC_MESSAGES/django.po +1 -1
  807. wagtail/locale/lv/LC_MESSAGES/django.po +1 -1
  808. wagtail/locale/mi/LC_MESSAGES/django.po +1 -1
  809. wagtail/locale/mn/LC_MESSAGES/django.po +1 -1
  810. wagtail/locale/my/LC_MESSAGES/django.po +1 -1
  811. wagtail/locale/nb/LC_MESSAGES/django.po +1 -1
  812. wagtail/locale/nl/LC_MESSAGES/django.mo +0 -0
  813. wagtail/locale/nl/LC_MESSAGES/django.po +15 -6
  814. wagtail/locale/pl/LC_MESSAGES/django.mo +0 -0
  815. wagtail/locale/pl/LC_MESSAGES/django.po +1 -9
  816. wagtail/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  817. wagtail/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  818. wagtail/locale/ro/LC_MESSAGES/django.mo +0 -0
  819. wagtail/locale/ro/LC_MESSAGES/django.po +1 -9
  820. wagtail/locale/ru/LC_MESSAGES/django.mo +0 -0
  821. wagtail/locale/ru/LC_MESSAGES/django.po +12 -10
  822. wagtail/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  823. wagtail/locale/sl/LC_MESSAGES/django.mo +0 -0
  824. wagtail/locale/sl/LC_MESSAGES/django.po +1 -9
  825. wagtail/locale/sv/LC_MESSAGES/django.mo +0 -0
  826. wagtail/locale/sv/LC_MESSAGES/django.po +1 -9
  827. wagtail/locale/tet/LC_MESSAGES/django.po +1 -1
  828. wagtail/locale/th/LC_MESSAGES/django.po +1 -1
  829. wagtail/locale/tr/LC_MESSAGES/django.mo +0 -0
  830. wagtail/locale/tr/LC_MESSAGES/django.po +4 -8
  831. wagtail/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  832. wagtail/locale/ug/LC_MESSAGES/django.mo +0 -0
  833. wagtail/locale/ug/LC_MESSAGES/django.po +1 -8
  834. wagtail/locale/uk/LC_MESSAGES/django.po +1 -1
  835. wagtail/locale/vi/LC_MESSAGES/django.po +1 -1
  836. wagtail/locale/zh/LC_MESSAGES/django.po +1 -1
  837. wagtail/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  838. wagtail/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  839. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  840. wagtail/locales/locale/nl/LC_MESSAGES/django.mo +0 -0
  841. wagtail/locales/locale/nl/LC_MESSAGES/django.po +12 -1
  842. wagtail/locales/locale/ru/LC_MESSAGES/django.mo +0 -0
  843. wagtail/locales/locale/ru/LC_MESSAGES/django.po +10 -1
  844. wagtail/locales/views.py +2 -2
  845. wagtail/models/orderable.py +10 -0
  846. wagtail/models/pages.py +9 -11
  847. wagtail/models/sites.py +1 -1
  848. wagtail/models/workflows.py +8 -5
  849. wagtail/project_template/home/tests.py +6 -7
  850. wagtail/project_template/project_name/settings/base.py +9 -9
  851. wagtail/project_template/requirements.txt +1 -1
  852. wagtail/query.py +7 -2
  853. wagtail/rich_text/rewriters.py +1 -1
  854. wagtail/search/apps.py +4 -49
  855. wagtail/search/backends/__init__.py +1 -113
  856. wagtail/search/backends/base.py +1 -547
  857. wagtail/search/backends/database/__init__.py +1 -50
  858. wagtail/search/backends/database/fallback.py +1 -253
  859. wagtail/search/backends/database/mysql/mysql.py +1 -700
  860. wagtail/search/backends/database/mysql/query.py +1 -258
  861. wagtail/search/backends/database/postgres/postgres.py +1 -749
  862. wagtail/search/backends/database/postgres/query.py +1 -83
  863. wagtail/search/backends/database/postgres/weights.py +1 -63
  864. wagtail/search/backends/database/sqlite/query.py +1 -294
  865. wagtail/search/backends/database/sqlite/sqlite.py +1 -719
  866. wagtail/search/backends/database/sqlite/utils.py +1 -35
  867. wagtail/search/backends/deprecation.py +45 -0
  868. wagtail/search/backends/elasticsearch7.py +18 -1260
  869. wagtail/search/backends/elasticsearch8.py +21 -96
  870. wagtail/search/backends/elasticsearch9.py +35 -0
  871. wagtail/search/backends/opensearch2.py +35 -0
  872. wagtail/search/backends/opensearch3.py +35 -0
  873. wagtail/search/index.py +1 -358
  874. wagtail/search/locale/ar/LC_MESSAGES/django.mo +0 -0
  875. wagtail/search/locale/ar/LC_MESSAGES/django.po +1 -7
  876. wagtail/search/locale/be/LC_MESSAGES/django.mo +0 -0
  877. wagtail/search/locale/be/LC_MESSAGES/django.po +1 -7
  878. wagtail/search/locale/ca/LC_MESSAGES/django.mo +0 -0
  879. wagtail/search/locale/ca/LC_MESSAGES/django.po +1 -7
  880. wagtail/search/locale/cs/LC_MESSAGES/django.po +1 -1
  881. wagtail/search/locale/cy/LC_MESSAGES/django.mo +0 -0
  882. wagtail/search/locale/cy/LC_MESSAGES/django.po +1 -7
  883. wagtail/search/locale/de/LC_MESSAGES/django.mo +0 -0
  884. wagtail/search/locale/de/LC_MESSAGES/django.po +1 -7
  885. wagtail/search/locale/dv/LC_MESSAGES/django.mo +0 -0
  886. wagtail/search/locale/dv/LC_MESSAGES/django.po +1 -7
  887. wagtail/search/locale/en/LC_MESSAGES/django.po +2 -10
  888. wagtail/search/locale/es/LC_MESSAGES/django.mo +0 -0
  889. wagtail/search/locale/es/LC_MESSAGES/django.po +1 -7
  890. wagtail/search/locale/et/LC_MESSAGES/django.po +1 -1
  891. wagtail/search/locale/fa/LC_MESSAGES/django.po +1 -1
  892. wagtail/search/locale/fi/LC_MESSAGES/django.mo +0 -0
  893. wagtail/search/locale/fi/LC_MESSAGES/django.po +1 -7
  894. wagtail/search/locale/fr/LC_MESSAGES/django.mo +0 -0
  895. wagtail/search/locale/fr/LC_MESSAGES/django.po +1 -7
  896. wagtail/search/locale/gl/LC_MESSAGES/django.mo +0 -0
  897. wagtail/search/locale/gl/LC_MESSAGES/django.po +1 -7
  898. wagtail/search/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  899. wagtail/search/locale/hr_HR/LC_MESSAGES/django.po +1 -7
  900. wagtail/search/locale/ht/LC_MESSAGES/django.po +1 -1
  901. wagtail/search/locale/hu/LC_MESSAGES/django.mo +0 -0
  902. wagtail/search/locale/hu/LC_MESSAGES/django.po +1 -7
  903. wagtail/search/locale/id_ID/LC_MESSAGES/django.po +1 -1
  904. wagtail/search/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  905. wagtail/search/locale/is_IS/LC_MESSAGES/django.po +1 -7
  906. wagtail/search/locale/it/LC_MESSAGES/django.mo +0 -0
  907. wagtail/search/locale/it/LC_MESSAGES/django.po +1 -7
  908. wagtail/search/locale/ja/LC_MESSAGES/django.po +1 -1
  909. wagtail/search/locale/ko/LC_MESSAGES/django.mo +0 -0
  910. wagtail/search/locale/ko/LC_MESSAGES/django.po +1 -7
  911. wagtail/search/locale/lt/LC_MESSAGES/django.po +1 -1
  912. wagtail/search/locale/mi/LC_MESSAGES/django.po +1 -1
  913. wagtail/search/locale/mn/LC_MESSAGES/django.po +1 -1
  914. wagtail/search/locale/my/LC_MESSAGES/django.po +1 -1
  915. wagtail/search/locale/nb/LC_MESSAGES/django.mo +0 -0
  916. wagtail/search/locale/nb/LC_MESSAGES/django.po +1 -7
  917. wagtail/search/locale/nl/LC_MESSAGES/django.mo +0 -0
  918. wagtail/search/locale/nl/LC_MESSAGES/django.po +1 -7
  919. wagtail/search/locale/pl/LC_MESSAGES/django.mo +0 -0
  920. wagtail/search/locale/pl/LC_MESSAGES/django.po +1 -7
  921. wagtail/search/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  922. wagtail/search/locale/pt_BR/LC_MESSAGES/django.po +1 -7
  923. wagtail/search/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  924. wagtail/search/locale/pt_PT/LC_MESSAGES/django.po +1 -7
  925. wagtail/search/locale/ro/LC_MESSAGES/django.mo +0 -0
  926. wagtail/search/locale/ro/LC_MESSAGES/django.po +1 -7
  927. wagtail/search/locale/ru/LC_MESSAGES/django.mo +0 -0
  928. wagtail/search/locale/ru/LC_MESSAGES/django.po +1 -7
  929. wagtail/search/locale/sl/LC_MESSAGES/django.mo +0 -0
  930. wagtail/search/locale/sl/LC_MESSAGES/django.po +1 -7
  931. wagtail/search/locale/sv/LC_MESSAGES/django.mo +0 -0
  932. wagtail/search/locale/sv/LC_MESSAGES/django.po +1 -7
  933. wagtail/search/locale/tet/LC_MESSAGES/django.po +1 -1
  934. wagtail/search/locale/th/LC_MESSAGES/django.po +1 -1
  935. wagtail/search/locale/tr/LC_MESSAGES/django.mo +0 -0
  936. wagtail/search/locale/tr/LC_MESSAGES/django.po +1 -7
  937. wagtail/search/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  938. wagtail/search/locale/ug/LC_MESSAGES/django.mo +0 -0
  939. wagtail/search/locale/ug/LC_MESSAGES/django.po +1 -7
  940. wagtail/search/locale/uk/LC_MESSAGES/django.mo +0 -0
  941. wagtail/search/locale/uk/LC_MESSAGES/django.po +1 -7
  942. wagtail/search/locale/vi/LC_MESSAGES/django.po +1 -1
  943. wagtail/search/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  944. wagtail/search/locale/zh_Hans/LC_MESSAGES/django.po +1 -7
  945. wagtail/search/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  946. wagtail/search/management/commands/update_index.py +1 -205
  947. wagtail/search/management/commands/wagtail_update_index.py +1 -4
  948. wagtail/search/models.py +29 -158
  949. wagtail/search/query.py +1 -114
  950. wagtail/search/queryset.py +1 -43
  951. wagtail/search/signal_handlers.py +1 -24
  952. wagtail/search/tasks.py +1 -10
  953. wagtail/search/tests/test_elasticsearch.py +22 -0
  954. wagtail/search/utils.py +1 -206
  955. wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
  956. wagtail/snippets/locale/af/LC_MESSAGES/django.po +1 -1
  957. wagtail/snippets/locale/ar/LC_MESSAGES/django.po +1 -1
  958. wagtail/snippets/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  959. wagtail/snippets/locale/be/LC_MESSAGES/django.po +1 -1
  960. wagtail/snippets/locale/bg/LC_MESSAGES/django.po +1 -1
  961. wagtail/snippets/locale/bn/LC_MESSAGES/django.po +1 -1
  962. wagtail/snippets/locale/ca/LC_MESSAGES/django.po +1 -1
  963. wagtail/snippets/locale/cs/LC_MESSAGES/django.po +1 -1
  964. wagtail/snippets/locale/cy/LC_MESSAGES/django.po +1 -1
  965. wagtail/snippets/locale/da/LC_MESSAGES/django.po +1 -1
  966. wagtail/snippets/locale/de/LC_MESSAGES/django.po +1 -1
  967. wagtail/snippets/locale/dv/LC_MESSAGES/django.po +1 -1
  968. wagtail/snippets/locale/el/LC_MESSAGES/django.po +1 -1
  969. wagtail/snippets/locale/en/LC_MESSAGES/django.po +3 -3
  970. wagtail/snippets/locale/en_IN/LC_MESSAGES/django.po +1 -1
  971. wagtail/snippets/locale/es/LC_MESSAGES/django.po +1 -1
  972. wagtail/snippets/locale/es_419/LC_MESSAGES/django.po +1 -1
  973. wagtail/snippets/locale/es_VE/LC_MESSAGES/django.po +1 -1
  974. wagtail/snippets/locale/et/LC_MESSAGES/django.po +1 -1
  975. wagtail/snippets/locale/eu/LC_MESSAGES/django.po +1 -1
  976. wagtail/snippets/locale/fa/LC_MESSAGES/django.po +1 -1
  977. wagtail/snippets/locale/fi/LC_MESSAGES/django.po +1 -1
  978. wagtail/snippets/locale/fr/LC_MESSAGES/django.po +1 -1
  979. wagtail/snippets/locale/gl/LC_MESSAGES/django.po +1 -1
  980. wagtail/snippets/locale/he_IL/LC_MESSAGES/django.po +1 -1
  981. wagtail/snippets/locale/hi/LC_MESSAGES/django.po +1 -1
  982. wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  983. wagtail/snippets/locale/ht/LC_MESSAGES/django.po +1 -1
  984. wagtail/snippets/locale/hu/LC_MESSAGES/django.po +1 -1
  985. wagtail/snippets/locale/id_ID/LC_MESSAGES/django.po +1 -1
  986. wagtail/snippets/locale/is_IS/LC_MESSAGES/django.po +1 -1
  987. wagtail/snippets/locale/it/LC_MESSAGES/django.po +1 -1
  988. wagtail/snippets/locale/ja/LC_MESSAGES/django.po +1 -1
  989. wagtail/snippets/locale/ka/LC_MESSAGES/django.po +1 -1
  990. wagtail/snippets/locale/ko/LC_MESSAGES/django.po +1 -1
  991. wagtail/snippets/locale/lt/LC_MESSAGES/django.po +1 -1
  992. wagtail/snippets/locale/lv/LC_MESSAGES/django.po +1 -1
  993. wagtail/snippets/locale/mi/LC_MESSAGES/django.po +1 -1
  994. wagtail/snippets/locale/mn/LC_MESSAGES/django.po +1 -1
  995. wagtail/snippets/locale/my/LC_MESSAGES/django.po +1 -1
  996. wagtail/snippets/locale/nb/LC_MESSAGES/django.po +1 -1
  997. wagtail/snippets/locale/nl/LC_MESSAGES/django.po +1 -1
  998. wagtail/snippets/locale/pl/LC_MESSAGES/django.po +1 -1
  999. wagtail/snippets/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  1000. wagtail/snippets/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  1001. wagtail/snippets/locale/ro/LC_MESSAGES/django.po +1 -1
  1002. wagtail/snippets/locale/ru/LC_MESSAGES/django.mo +0 -0
  1003. wagtail/snippets/locale/ru/LC_MESSAGES/django.po +9 -2
  1004. wagtail/snippets/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  1005. wagtail/snippets/locale/sl/LC_MESSAGES/django.po +1 -1
  1006. wagtail/snippets/locale/sr/LC_MESSAGES/django.po +1 -1
  1007. wagtail/snippets/locale/sv/LC_MESSAGES/django.po +1 -1
  1008. wagtail/snippets/locale/ta/LC_MESSAGES/django.po +1 -1
  1009. wagtail/snippets/locale/tet/LC_MESSAGES/django.po +1 -1
  1010. wagtail/snippets/locale/th/LC_MESSAGES/django.po +1 -1
  1011. wagtail/snippets/locale/tr/LC_MESSAGES/django.mo +0 -0
  1012. wagtail/snippets/locale/tr/LC_MESSAGES/django.po +9 -2
  1013. wagtail/snippets/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1014. wagtail/snippets/locale/ug/LC_MESSAGES/django.po +1 -1
  1015. wagtail/snippets/locale/uk/LC_MESSAGES/django.po +1 -1
  1016. wagtail/snippets/locale/vi/LC_MESSAGES/django.po +1 -1
  1017. wagtail/snippets/locale/zh/LC_MESSAGES/django.po +1 -1
  1018. wagtail/snippets/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  1019. wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1020. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  1021. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  1022. wagtail/snippets/tests/test_preview.py +5 -6
  1023. wagtail/snippets/tests/test_reordering.py +319 -0
  1024. wagtail/snippets/tests/test_snippets.py +77 -12
  1025. wagtail/snippets/views/snippets.py +16 -0
  1026. wagtail/test/numberformat.py +30 -0
  1027. wagtail/test/settings.py +35 -12
  1028. wagtail/test/testapp/fields.py +12 -0
  1029. wagtail/test/testapp/migrations/0056_commentablejsonpage.py +50 -0
  1030. wagtail/test/testapp/migrations/0057_featurecompletetoy_sort_order.py +23 -0
  1031. wagtail/test/testapp/migrations/0058_customlocktask.py +31 -0
  1032. wagtail/test/testapp/models.py +27 -0
  1033. wagtail/test/testapp/urls.py +1 -0
  1034. wagtail/test/testapp/views.py +18 -2
  1035. wagtail/test/utils/page_tests.py +17 -17
  1036. wagtail/test/utils/template_tests.py +4 -6
  1037. wagtail/test/utils/wagtail_tests.py +1 -2
  1038. wagtail/tests/test_blocks.py +15 -0
  1039. wagtail/tests/test_page_model.py +15 -0
  1040. wagtail/{search/tests → tests}/test_page_search.py +29 -2
  1041. wagtail/tests/test_search_fields.py +69 -0
  1042. wagtail/tests/test_tests.py +62 -6
  1043. wagtail/tests/test_workflow.py +25 -1
  1044. wagtail/users/locale/ar/LC_MESSAGES/django.po +1 -1
  1045. wagtail/users/locale/be/LC_MESSAGES/django.po +1 -1
  1046. wagtail/users/locale/bg/LC_MESSAGES/django.po +1 -1
  1047. wagtail/users/locale/bn/LC_MESSAGES/django.po +1 -1
  1048. wagtail/users/locale/ca/LC_MESSAGES/django.po +1 -1
  1049. wagtail/users/locale/cs/LC_MESSAGES/django.mo +0 -0
  1050. wagtail/users/locale/cs/LC_MESSAGES/django.po +4 -1
  1051. wagtail/users/locale/cy/LC_MESSAGES/django.po +1 -1
  1052. wagtail/users/locale/da/LC_MESSAGES/django.po +1 -1
  1053. wagtail/users/locale/de/LC_MESSAGES/django.po +1 -1
  1054. wagtail/users/locale/dv/LC_MESSAGES/django.po +1 -1
  1055. wagtail/users/locale/el/LC_MESSAGES/django.po +1 -1
  1056. wagtail/users/locale/en/LC_MESSAGES/django.po +2 -2
  1057. wagtail/users/locale/es/LC_MESSAGES/django.po +1 -1
  1058. wagtail/users/locale/es_419/LC_MESSAGES/django.po +1 -1
  1059. wagtail/users/locale/et/LC_MESSAGES/django.po +1 -1
  1060. wagtail/users/locale/eu/LC_MESSAGES/django.po +1 -1
  1061. wagtail/users/locale/fa/LC_MESSAGES/django.po +1 -1
  1062. wagtail/users/locale/fi/LC_MESSAGES/django.mo +0 -0
  1063. wagtail/users/locale/fi/LC_MESSAGES/django.po +6 -3
  1064. wagtail/users/locale/fr/LC_MESSAGES/django.po +1 -1
  1065. wagtail/users/locale/gl/LC_MESSAGES/django.po +1 -1
  1066. wagtail/users/locale/he_IL/LC_MESSAGES/django.po +1 -1
  1067. wagtail/users/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  1068. wagtail/users/locale/hu/LC_MESSAGES/django.po +1 -1
  1069. wagtail/users/locale/hy/LC_MESSAGES/django.po +1 -1
  1070. wagtail/users/locale/id_ID/LC_MESSAGES/django.po +1 -1
  1071. wagtail/users/locale/is_IS/LC_MESSAGES/django.po +1 -1
  1072. wagtail/users/locale/it/LC_MESSAGES/django.po +1 -1
  1073. wagtail/users/locale/ja/LC_MESSAGES/django.po +1 -1
  1074. wagtail/users/locale/ka/LC_MESSAGES/django.po +1 -1
  1075. wagtail/users/locale/ko/LC_MESSAGES/django.po +1 -1
  1076. wagtail/users/locale/lt/LC_MESSAGES/django.po +1 -1
  1077. wagtail/users/locale/lv/LC_MESSAGES/django.po +1 -1
  1078. wagtail/users/locale/mi/LC_MESSAGES/django.po +1 -1
  1079. wagtail/users/locale/mn/LC_MESSAGES/django.po +1 -1
  1080. wagtail/users/locale/my/LC_MESSAGES/django.po +1 -1
  1081. wagtail/users/locale/nb/LC_MESSAGES/django.po +1 -1
  1082. wagtail/users/locale/nl/LC_MESSAGES/django.mo +0 -0
  1083. wagtail/users/locale/nl/LC_MESSAGES/django.po +7 -4
  1084. wagtail/users/locale/pl/LC_MESSAGES/django.po +1 -1
  1085. wagtail/users/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  1086. wagtail/users/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  1087. wagtail/users/locale/ro/LC_MESSAGES/django.po +1 -1
  1088. wagtail/users/locale/ru/LC_MESSAGES/django.mo +0 -0
  1089. wagtail/users/locale/ru/LC_MESSAGES/django.po +6 -2
  1090. wagtail/users/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  1091. wagtail/users/locale/sl/LC_MESSAGES/django.po +1 -1
  1092. wagtail/users/locale/sv/LC_MESSAGES/django.po +1 -1
  1093. wagtail/users/locale/tet/LC_MESSAGES/django.po +1 -1
  1094. wagtail/users/locale/th/LC_MESSAGES/django.po +1 -1
  1095. wagtail/users/locale/tr/LC_MESSAGES/django.mo +0 -0
  1096. wagtail/users/locale/tr/LC_MESSAGES/django.po +79 -5
  1097. wagtail/users/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1098. wagtail/users/locale/ug/LC_MESSAGES/django.po +1 -1
  1099. wagtail/users/locale/uk/LC_MESSAGES/django.po +1 -1
  1100. wagtail/users/locale/vi/LC_MESSAGES/django.po +1 -1
  1101. wagtail/users/locale/zh/LC_MESSAGES/django.po +1 -1
  1102. wagtail/users/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  1103. wagtail/users/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1104. wagtail/users/templates/wagtailusers/users/create.html +2 -0
  1105. wagtail/users/templates/wagtailusers/users/edit.html +2 -0
  1106. wagtail/users/tests/test_admin_views.py +4 -0
  1107. wagtail/users/views/users.py +1 -1
  1108. {wagtail-7.1.1.dist-info → wagtail-7.2.dist-info}/METADATA +8 -7
  1109. {wagtail-7.1.1.dist-info → wagtail-7.2.dist-info}/RECORD +1115 -1121
  1110. wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +0 -13
  1111. wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +0 -13
  1112. wagtail/search/tests/__init__.py +0 -0
  1113. wagtail/search/tests/elasticsearch_common_tests.py +0 -251
  1114. wagtail/search/tests/test_backends.py +0 -1215
  1115. wagtail/search/tests/test_db_backend.py +0 -62
  1116. wagtail/search/tests/test_elasticsearch7_backend.py +0 -1452
  1117. wagtail/search/tests/test_elasticsearch8_backend.py +0 -15
  1118. wagtail/search/tests/test_index_functions.py +0 -256
  1119. wagtail/search/tests/test_indexed_class.py +0 -157
  1120. wagtail/search/tests/test_mysql_backend.py +0 -192
  1121. wagtail/search/tests/test_postgres_backend.py +0 -210
  1122. wagtail/search/tests/test_queries.py +0 -332
  1123. wagtail/search/tests/test_related_fields.py +0 -102
  1124. wagtail/search/tests/test_sqlite_backend.py +0 -52
  1125. wagtail/test/search/__init__.py +0 -0
  1126. wagtail/test/search/apps.py +0 -9
  1127. wagtail/test/search/fixtures/search.json +0 -545
  1128. wagtail/test/search/migrations/0001_initial.py +0 -146
  1129. wagtail/test/search/migrations/0002_bookunindexed.py +0 -43
  1130. wagtail/test/search/migrations/0003_book_summary.py +0 -18
  1131. wagtail/test/search/migrations/__init__.py +0 -0
  1132. wagtail/test/search/models.py +0 -137
  1133. /wagtail/admin/templates/wagtailadmin/{pages/listing/_ordering_cell.html → tables/ordering_cell.html} +0 -0
  1134. /wagtail/{search/checks.py → checks.py} +0 -0
  1135. {wagtail-7.1.1.dist-info → wagtail-7.2.dist-info}/WHEEL +0 -0
  1136. {wagtail-7.1.1.dist-info → wagtail-7.2.dist-info}/entry_points.txt +0 -0
  1137. {wagtail-7.1.1.dist-info → wagtail-7.2.dist-info}/licenses/LICENSE +0 -0
  1138. {wagtail-7.1.1.dist-info → wagtail-7.2.dist-info}/top_level.txt +0 -0
@@ -38,6 +38,7 @@ from wagtail.admin.ui.tables import (
38
38
  TitleColumn,
39
39
  UpdatedAtColumn,
40
40
  )
41
+ from wagtail.admin.ui.tables.orderable import OrderableTableMixin
41
42
  from wagtail.admin.utils import get_latest_str, get_valid_next_url_from_request
42
43
  from wagtail.admin.views.mixins import SpreadsheetExportMixin
43
44
  from wagtail.admin.widgets.button import (
@@ -50,6 +51,7 @@ from wagtail.log_actions import log
50
51
  from wagtail.log_actions import registry as log_registry
51
52
  from wagtail.models import DraftStateMixin, Locale, ReferenceIndex
52
53
  from wagtail.models.audit_log import ModelLogEntry
54
+ from wagtail.models.orderable import set_max_order
53
55
  from wagtail.search.index import class_is_indexed
54
56
 
55
57
  from .base import BaseListingView, WagtailAdminTemplateMixin
@@ -71,9 +73,11 @@ class IndexView(
71
73
  copy_url_name = None
72
74
  inspect_url_name = None
73
75
  delete_url_name = None
76
+ reorder_url_name = None
74
77
  any_permission_required = ["add", "change", "delete", "view"]
75
78
  list_filter = None
76
79
  show_other_searches = False
80
+ sort_order_field = None
77
81
 
78
82
  @cached_property
79
83
  def is_searchable(self):
@@ -105,6 +109,24 @@ class IndexView(
105
109
  {"Meta": Meta},
106
110
  )
107
111
 
112
+ @cached_property
113
+ def table_class(self):
114
+ table_class = super().table_class
115
+ if self.show_ordering_column:
116
+ return type(
117
+ f"{self.model.__name__}Table",
118
+ (OrderableTableMixin, table_class),
119
+ {},
120
+ )
121
+ return table_class
122
+
123
+ def get_table_kwargs(self):
124
+ kwargs = super().get_table_kwargs()
125
+ if self.show_ordering_column:
126
+ kwargs["sort_order_field"] = self.sort_order_field
127
+ kwargs["reorder_url"] = self.get_reorder_url()
128
+ return kwargs
129
+
108
130
  def _annotate_queryset_updated_at(self, queryset):
109
131
  # Annotate the objects' updated_at, use _ prefix to avoid name collision
110
132
  # with an existing database field.
@@ -138,9 +160,11 @@ class IndexView(
138
160
  if has_updated_at_column:
139
161
  queryset = self._annotate_queryset_updated_at(queryset)
140
162
 
163
+ if self.show_ordering_column:
164
+ return queryset.order_by(self.sort_order_field)
141
165
  # Explicitly handle null values for the updated at column to ensure consistency
142
166
  # across database backends and match the behaviour in page explorer
143
- if self.ordering == "_updated_at":
167
+ elif self.ordering == "_updated_at":
144
168
  return queryset.order_by(models.F("_updated_at").asc(nulls_first=True))
145
169
  elif self.ordering == "-_updated_at":
146
170
  return queryset.order_by(models.F("_updated_at").desc(nulls_last=True))
@@ -276,6 +300,10 @@ class IndexView(
276
300
  if self.delete_url_name and self.user_has_permission("delete"):
277
301
  return reverse(self.delete_url_name, args=(quote(instance.pk),))
278
302
 
303
+ def get_reorder_url(self):
304
+ if self.reorder_url_name and self.user_has_permission("change"):
305
+ return reverse(self.reorder_url_name, args=(999999,))
306
+
279
307
  def get_add_url(self):
280
308
  if self.add_url_name and self.user_has_permission("add"):
281
309
  return self._set_locale_query_param(reverse(self.add_url_name))
@@ -302,6 +330,19 @@ class IndexView(
302
330
  )
303
331
  return buttons
304
332
 
333
+ @cached_property
334
+ def header_more_buttons(self):
335
+ buttons = super().header_more_buttons
336
+ if self.get_reorder_url():
337
+ buttons.append(
338
+ Button(
339
+ _("Sort item order"),
340
+ url=self.index_url + f"?ordering={self.sort_order_field}",
341
+ icon_name="list-ul",
342
+ )
343
+ )
344
+ return buttons
345
+
305
346
  def get_list_more_buttons(self, instance):
306
347
  buttons = []
307
348
  if edit_url := self.get_edit_url(instance):
@@ -382,6 +423,26 @@ class IndexView(
382
423
  return self.model._meta.verbose_name_plural
383
424
  return None
384
425
 
426
+ @cached_property
427
+ def show_ordering_column(self):
428
+ return self.sort_order_field and (self.ordering == self.sort_order_field)
429
+
430
+ def get_paginate_by(self, queryset):
431
+ if self.show_ordering_column:
432
+ # Don't paginate if sorting by custom order - all items must be shown
433
+ # to allow drag-and-drop reordering
434
+ return None
435
+ return super().get_paginate_by(queryset)
436
+
437
+ def get_valid_orderings(self):
438
+ valid_orderings = super().get_valid_orderings()
439
+
440
+ if self.sort_order_field and not (self.is_searching or self.is_filtering):
441
+ # ordering by custom order is only available when not searching/filtering
442
+ valid_orderings.append(self.sort_order_field)
443
+
444
+ return valid_orderings
445
+
385
446
  def get_context_data(self, *args, **kwargs):
386
447
  context = super().get_context_data(*args, **kwargs)
387
448
 
@@ -424,6 +485,7 @@ class CreateView(
424
485
  submit_button_label = gettext_lazy("Create")
425
486
  submit_button_active_label = gettext_lazy("Creating…")
426
487
  actions = ["create"]
488
+ sort_order_field = None
427
489
 
428
490
  def setup(self, request, *args, **kwargs):
429
491
  super().setup(request, *args, **kwargs)
@@ -575,6 +637,10 @@ class CreateView(
575
637
  and returns the new object. Override this to implement custom save logic.
576
638
  """
577
639
  instance = self.form.save()
640
+ # Apply max order number if the model uses custom ordering and the
641
+ # sort_order_field is not set.
642
+ if self.sort_order_field and getattr(instance, self.sort_order_field) is None:
643
+ set_max_order(instance, self.sort_order_field)
578
644
  log(instance=instance, action="wagtail.create", content_changed=True)
579
645
  return instance
580
646
 
@@ -0,0 +1,79 @@
1
+ from django.contrib.admin.utils import unquote
2
+ from django.db import transaction
3
+ from django.db.models import F
4
+ from django.http import JsonResponse
5
+ from django.shortcuts import get_object_or_404
6
+ from django.views.generic import View
7
+
8
+ from .permissions import PermissionCheckedMixin
9
+
10
+
11
+ class ReorderView(PermissionCheckedMixin, View):
12
+ """View for handling the reordering of model instances that have an order field."""
13
+
14
+ model = None
15
+ sort_order_field = None
16
+ permission_required = "change"
17
+
18
+ def get_queryset(self):
19
+ return self.model._default_manager.all().order_by(self.sort_order_field)
20
+
21
+ def post(self, request, *args, **kwargs):
22
+ item_to_move = get_object_or_404(self.model, pk=unquote(kwargs.get("pk")))
23
+
24
+ try:
25
+ # Position is an index in the list of items,
26
+ # not a value of the sort_order_field.
27
+ new_position = int(request.GET.get("position", ""))
28
+ except ValueError:
29
+ new_position = -1
30
+
31
+ queryset = self.get_queryset()
32
+ items = list(queryset.values("pk", self.sort_order_field))
33
+
34
+ # If position is missing or not a valid integer, move to the end
35
+ if new_position < 0 or new_position >= len(items):
36
+ new_position = len(items) - 1
37
+
38
+ # Get the current sort_order_field value of the item being moved,
39
+ # to be used as the relative anchor for updating the other items.
40
+ current_sort_order = getattr(item_to_move, self.sort_order_field)
41
+
42
+ # The current position index of the item being moved (may not be the
43
+ # same as the sort_order_field value), to be used to determine
44
+ # whether to move items up or down.
45
+ current_position = next(
46
+ (i for i, obj in enumerate(items) if obj["pk"] == item_to_move.pk),
47
+ current_sort_order,
48
+ )
49
+
50
+ # The sort_order_field value of the item at the new position, which
51
+ # will be set as the new sort_order_field value for the item being moved.
52
+ sort_order_at_position = items[new_position][self.sort_order_field]
53
+
54
+ with transaction.atomic():
55
+ if new_position < current_position:
56
+ # We are moving the item up in the list, so we need to push down
57
+ # the items from the new position and below.
58
+ queryset.filter(
59
+ **{
60
+ f"{self.sort_order_field}__gte": sort_order_at_position,
61
+ f"{self.sort_order_field}__lt": current_sort_order,
62
+ }
63
+ ).update(**{self.sort_order_field: F(self.sort_order_field) + 1})
64
+ elif new_position > current_position:
65
+ # We are moving the item down in the list, so we need to pull up
66
+ # the items from the new position and above.
67
+ queryset.filter(
68
+ **{
69
+ f"{self.sort_order_field}__gt": current_sort_order,
70
+ f"{self.sort_order_field}__lte": sort_order_at_position,
71
+ }
72
+ ).update(**{self.sort_order_field: F(self.sort_order_field) - 1})
73
+
74
+ if new_position != current_position:
75
+ # Once the other items have been moved, update the actual item.
76
+ setattr(item_to_move, self.sort_order_field, sort_order_at_position)
77
+ item_to_move.save(update_fields=[self.sort_order_field])
78
+
79
+ return JsonResponse({"success": True})
@@ -1,5 +1,5 @@
1
1
  from collections.abc import Mapping
2
- from typing import Any, Union
2
+ from typing import Any
3
3
 
4
4
  from django.conf import settings
5
5
  from django.contrib.auth import get_user_model
@@ -38,7 +38,7 @@ class UpgradeNotificationPanel(Component):
38
38
  template_name = "wagtailadmin/home/upgrade_notification.html"
39
39
  dismissible_id = "last_upgrade_check"
40
40
 
41
- def get_upgrade_check_setting(self) -> Union[bool, str]:
41
+ def get_upgrade_check_setting(self) -> bool | str:
42
42
  return getattr(settings, "WAGTAIL_ENABLE_UPDATE_CHECK", True)
43
43
 
44
44
  def upgrade_check_lts_only(self) -> bool:
@@ -77,7 +77,7 @@ class WhatsNewInWagtailVersionPanel(Component):
77
77
  order = 110
78
78
  _version = "4"
79
79
 
80
- def get_whats_new_banner_setting(self) -> Union[bool, str]:
80
+ def get_whats_new_banner_setting(self) -> bool | str:
81
81
  return getattr(settings, "WAGTAIL_ENABLE_WHATS_NEW_BANNER", True)
82
82
 
83
83
  def get_dismissible_id(self) -> str:
@@ -108,10 +108,13 @@ def set_privacy(request, page_id):
108
108
  else:
109
109
  return render_modal_workflow(
110
110
  request,
111
- "wagtailadmin/page_privacy/set_privacy.html",
111
+ "wagtailadmin/shared/set_privacy.html",
112
112
  None,
113
113
  {
114
- "page": page,
114
+ "action_url": reverse(
115
+ "wagtailadmin_pages:set_privacy", args=(page.pk,)
116
+ ),
117
+ "object": page,
115
118
  "form": form,
116
119
  },
117
120
  json_data={"step": "set_privacy"},
@@ -383,7 +383,7 @@ class CreateView(WagtailAdminTemplateMixin, HookResponseMixin, View):
383
383
  def form_invalid(self, form):
384
384
  messages.validation_error(
385
385
  self.request,
386
- _("The page could not be created due to validation errors"),
386
+ _("The page could not be created due to validation errors."),
387
387
  self.form,
388
388
  )
389
389
  self.has_unsaved_changes = True
@@ -852,12 +852,12 @@ class EditView(WagtailAdminTemplateMixin, HookResponseMixin, View):
852
852
  )
853
853
  elif self.locked_for_user:
854
854
  messages.error(
855
- self.request, _("The page could not be saved as it is locked")
855
+ self.request, _("The page could not be saved as it is locked.")
856
856
  )
857
857
  else:
858
858
  messages.validation_error(
859
859
  self.request,
860
- _("The page could not be saved due to validation errors"),
860
+ _("The page could not be saved due to validation errors."),
861
861
  self.form,
862
862
  )
863
863
  self.errors_debug = repr(self.form.errors) + repr(
@@ -27,7 +27,6 @@ from wagtail.admin.ui.tables import DateColumn
27
27
  from wagtail.admin.ui.tables.pages import (
28
28
  BulkActionsColumn,
29
29
  NavigateToChildrenColumn,
30
- OrderingColumn,
31
30
  PageStatusColumn,
32
31
  PageTable,
33
32
  PageTitleColumn,
@@ -152,7 +151,7 @@ class PageListingMixin:
152
151
  "type",
153
152
  label=_("Type"),
154
153
  accessor="page_type_display_name",
155
- sort_key="content_type",
154
+ sort_key="content_type__model",
156
155
  width="12%",
157
156
  ),
158
157
  PageStatusColumn(
@@ -310,6 +309,9 @@ class ExplorableIndexView(IndexView):
310
309
  index_results_url_name = "wagtailadmin_explore_results"
311
310
  page_title = _("Exploring")
312
311
  filterset_class = GenericPageFilterSet
312
+ # This is not a real field on the model, but it allows reuse of ordering
313
+ # logic from generic IndexView
314
+ sort_order_field = "ord"
313
315
 
314
316
  @classproperty
315
317
  def columns(cls):
@@ -394,39 +396,14 @@ class ExplorableIndexView(IndexView):
394
396
  if permissions.can_view_revisions():
395
397
  return reverse("wagtailadmin_pages:history", args=[self.parent_page.id])
396
398
 
399
+ def get_reorder_url(self):
400
+ return reverse("wagtailadmin_pages:set_page_position", args=[999999])
401
+
397
402
  def get_table_kwargs(self):
398
403
  kwargs = super().get_table_kwargs()
399
- kwargs["use_row_ordering_attributes"] = self.show_ordering_column
400
404
  kwargs["parent_page"] = self.parent_page
401
-
402
- if self.show_ordering_column:
403
- kwargs["caption"] = _(
404
- "Focus on the drag button and press up or down arrows to move the item, then press enter to submit the change."
405
- )
406
- kwargs["attrs"] = {
407
- "data-controller": "w-orderable",
408
- "data-w-orderable-active-class": "w-orderable--active",
409
- "data-w-orderable-chosen-class": "w-orderable__item--active",
410
- "data-w-orderable-container-value": "tbody",
411
- "data-w-orderable-message-value": _(
412
- "'%(page_title)s' has been moved successfully."
413
- )
414
- % {"page_title": "__LABEL__"},
415
- "data-w-orderable-url-value": reverse(
416
- "wagtailadmin_pages:set_page_position", args=[999999]
417
- ),
418
- }
419
405
  return kwargs
420
406
 
421
- def get_valid_orderings(self):
422
- valid_orderings = super().get_valid_orderings()
423
-
424
- if not self.is_searching:
425
- # ordering by page order is only available when not searching
426
- valid_orderings.append("ord")
427
-
428
- return valid_orderings
429
-
430
407
  def get_ordering(self):
431
408
  if self.is_searching and not self.is_explicitly_ordered:
432
409
  # default to ordering by relevance
@@ -440,22 +417,10 @@ class ExplorableIndexView(IndexView):
440
417
 
441
418
  return ordering
442
419
 
443
- def get_paginate_by(self, queryset):
444
- if self.ordering == "ord":
445
- # Don't paginate if sorting by page order - all pages must be shown to
446
- # allow drag-and-drop reordering
447
- return None
448
- else:
449
- return self.paginate_by
450
-
451
420
  def get_page_subtitle(self):
452
421
  return self.parent_page.get_admin_display_title()
453
422
 
454
423
  def get_context_data(self, **kwargs):
455
- self.show_ordering_column = self.ordering == "ord"
456
- if self.show_ordering_column:
457
- self.columns = self.columns.copy()
458
- self.columns[0] = OrderingColumn("ordering", width="80px", sort_key="ord")
459
424
  context = super().get_context_data(**kwargs)
460
425
 
461
426
  if self.is_searching:
@@ -70,7 +70,7 @@ def move_confirm(request, page_to_move_id, destination_id):
70
70
  messages.error(
71
71
  request,
72
72
  _(
73
- "The slug '%(page_slug)s' is already in use at the selected parent page. Make sure the slug is unique and try again"
73
+ "The slug '%(page_slug)s' is already in use at the selected parent page. Make sure the slug is unique and try again."
74
74
  )
75
75
  % {"page_slug": page_to_move.slug},
76
76
  )
@@ -21,7 +21,7 @@ def set_page_position(request, page_to_move_id):
21
21
  if position is not None:
22
22
  try:
23
23
  position_page = parent_page.get_children()[int(position)]
24
- except IndexError:
24
+ except (IndexError, ValueError):
25
25
  pass # No page in this position
26
26
 
27
27
  # Move page
@@ -18,7 +18,7 @@ class ViewSet(WagtailMenuRegisterable):
18
18
  """
19
19
 
20
20
  #: A special value that, when passed in a kwargs dict to construct a view, indicates that
21
- #: the attribute should not be written and should instead be left as the view's initial value
21
+ #: the attribute should not be written and should instead be left as the view's initial value.
22
22
  UNDEFINED = object()
23
23
 
24
24
  #: A name for this viewset, used as the default URL prefix and namespace.
@@ -59,6 +59,9 @@ class ModelViewSet(ViewSet):
59
59
  #: The view class to use for the inspect view; must be a subclass of ``wagtail.admin.views.generic.InspectView``.
60
60
  inspect_view_class = generic.InspectView
61
61
 
62
+ #: The view class to use for the reorder view; must be a subclass of ``wagtail.admin.views.generic.ReorderView``.
63
+ reorder_view_class = generic.ReorderView
64
+
62
65
  #: The prefix of template names to look for when rendering the admin views.
63
66
  template_prefix = ""
64
67
 
@@ -92,6 +95,18 @@ class ModelViewSet(ViewSet):
92
95
  #: Whether to enable the copy view. Defaults to ``True``.
93
96
  copy_view_enabled = True
94
97
 
98
+ sort_order_field = ViewSet.UNDEFINED
99
+ """
100
+ The name of an integer field on the model to use for ordering items
101
+ in the index view. If not set and the model has a ``sort_order_field``
102
+ attribute (e.g.
103
+ :attr:`Orderable.sort_order_field <wagtail.models.Orderable.sort_order_field>`),
104
+ that will be used instead. To disable reordering, set this to ``None``.
105
+
106
+ .. versionadded:: 7.2
107
+ The ``sort_order_field`` attribute was added in Wagtail 7.2.
108
+ """
109
+
95
110
  def __init__(self, name=None, **kwargs):
96
111
  super().__init__(name=name, **kwargs)
97
112
  if not self.model:
@@ -104,6 +119,12 @@ class ModelViewSet(ViewSet):
104
119
  self.app_label = self.model_opts.app_label
105
120
  self.model_name = self.model_opts.model_name
106
121
 
122
+ # Auto-detect sort_order_field from the model, e.g. from Orderable mixin
123
+ if self.sort_order_field is self.UNDEFINED and hasattr(
124
+ self.model, "sort_order_field"
125
+ ):
126
+ self.sort_order_field = self.model.sort_order_field
127
+
107
128
  @property
108
129
  def permission_policy(self):
109
130
  return ModelPermissionPolicy(self.model)
@@ -116,6 +137,10 @@ class ModelViewSet(ViewSet):
116
137
  """
117
138
  return self.model_name
118
139
 
140
+ @cached_property
141
+ def reorder_view_enabled(self):
142
+ return self.sort_order_field not in {self.UNDEFINED, None}
143
+
119
144
  def get_common_view_kwargs(self, **kwargs):
120
145
  view_kwargs = super().get_common_view_kwargs(
121
146
  **{
@@ -155,15 +180,21 @@ class ModelViewSet(ViewSet):
155
180
  }
156
181
  if self.ordering:
157
182
  view_kwargs["default_ordering"] = self.ordering
183
+ if self.reorder_view_enabled:
184
+ view_kwargs["sort_order_field"] = self.sort_order_field
185
+ view_kwargs["reorder_url_name"] = self.get_url_name("reorder")
158
186
  return view_kwargs
159
187
 
160
188
  def get_add_view_kwargs(self, **kwargs):
161
- return {
189
+ view_kwargs = {
162
190
  "panel": self._edit_handler,
163
191
  "form_class": self.get_form_class(),
164
192
  "template_name": self.create_template_name,
165
193
  **kwargs,
166
194
  }
195
+ if self.reorder_view_enabled:
196
+ view_kwargs["sort_order_field"] = self.sort_order_field
197
+ return view_kwargs
167
198
 
168
199
  def get_edit_view_kwargs(self, **kwargs):
169
200
  return {
@@ -206,6 +237,12 @@ class ModelViewSet(ViewSet):
206
237
  def get_copy_view_kwargs(self, **kwargs):
207
238
  return self.get_add_view_kwargs(**kwargs)
208
239
 
240
+ def get_reorder_view_kwargs(self, **kwargs):
241
+ return {
242
+ "sort_order_field": self.sort_order_field,
243
+ **kwargs,
244
+ }
245
+
209
246
  @property
210
247
  def index_view(self):
211
248
  return self.construct_view(
@@ -260,6 +297,12 @@ class ModelViewSet(ViewSet):
260
297
  def copy_view(self):
261
298
  return self.construct_view(self.copy_view_class, **self.get_copy_view_kwargs())
262
299
 
300
+ @property
301
+ def reorder_view(self):
302
+ return self.construct_view(
303
+ self.reorder_view_class, **self.get_reorder_view_kwargs()
304
+ )
305
+
263
306
  def get_templates(self, name="index", fallback=""):
264
307
  """
265
308
  Utility function that provides a list of templates to try for a given
@@ -621,6 +664,11 @@ class ModelViewSet(ViewSet):
621
664
  path("usage/<str:pk>/", self.usage_view, name="usage"),
622
665
  ]
623
666
 
667
+ if self.reorder_view_enabled:
668
+ urlpatterns.append(
669
+ path("reorder/<str:pk>/", self.reorder_view, name="reorder")
670
+ )
671
+
624
672
  if self.inspect_view_enabled:
625
673
  urlpatterns.append(
626
674
  path("inspect/<str:pk>/", self.inspect_view, name="inspect")
@@ -986,7 +986,8 @@ def register_keyboard_shortcuts_menu_item():
986
986
  "role": "button", # Ensure screen readers announce this as a button
987
987
  "data-a11y-dialog-show": "keyboard-shortcuts-dialog",
988
988
  "data-action": "w-action#noop:prevent:stop",
989
- "data-controller": "w-action",
989
+ "data-controller": "w-kbd w-action",
990
+ "data-w-kbd-key-value": "?",
990
991
  },
991
992
  name="keyboard-shortcuts-trigger",
992
993
  url="#",
@@ -1,6 +1,5 @@
1
1
  import json
2
2
  import re
3
- from typing import List, Optional, Tuple, Union
4
3
 
5
4
  from django.conf import settings
6
5
  from django.forms import widgets
@@ -19,16 +18,17 @@ class SlugInput(widgets.TextInput):
19
18
 
20
19
  def __init__(
21
20
  self,
22
- attrs: Optional[dict] = None,
23
- formatters: Optional[
24
- List[
25
- Tuple[
26
- Union[re.Pattern, str, bytes],
27
- Optional[str],
21
+ attrs: dict | None = None,
22
+ formatters: None
23
+ | (
24
+ list[
25
+ tuple[
26
+ re.Pattern | str | bytes,
27
+ str | None,
28
28
  ],
29
29
  ]
30
- ] = [],
31
- locale: Optional[object] = None,
30
+ ) = [],
31
+ locale: object | None = None,
32
32
  ):
33
33
  default_attrs = {
34
34
  "data-controller": "w-slug",
@@ -63,7 +63,7 @@ class SlugInput(widgets.TextInput):
63
63
  if locale is not None:
64
64
  # Attempt to resolve a non-empty locale string from a `Locale` instance or the string itself.
65
65
  # If no locale can be found, use 'und' - as per ISO639-2 standard, 'und' represents 'undetermined'.
66
- # If the attribute is not set, the input will fall back to the ``ACTIVE_LOCALE`` or document lang within the CleanController.
66
+ # If the attribute is not set, the input will fall back to the ``ACTIVE_CONTENT_LOCALE`` or document lang within the CleanController.
67
67
  default_attrs["data-w-slug-locale-value"] = (
68
68
  getattr(locale, "language_code", locale) or "und"
69
69
  )
@@ -376,7 +376,7 @@ class PageSerializer(BaseSerializer):
376
376
  # Find all relation fields that point to child class and make them use
377
377
  # the ChildRelationField class.
378
378
  if relation_info.to_many:
379
- model = getattr(self.Meta, "model")
379
+ model = self.Meta.model
380
380
  child_relations = {
381
381
  child_relation.field.remote_field.related_name: child_relation.related_model
382
382
  for child_relation in get_all_child_relations(model)
@@ -6,6 +6,7 @@ from django.urls import reverse
6
6
  from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer
7
7
 
8
8
  from wagtail.api.v2.views import BaseAPIViewSet
9
+ from wagtail.test.numberformat import ignore_numberformat
9
10
  from wagtail.test.utils import WagtailTestUtils
10
11
 
11
12
 
@@ -57,3 +58,34 @@ class TestBaseAPIViewSetRendererClasses(WagtailTestUtils, TestCase):
57
58
  content = json.loads(response.content.decode("UTF-8"))
58
59
  self.assertIn("meta", content)
59
60
  self.assertIn("items", content)
61
+
62
+ def test_api_response_returns_html_with_html_accept_header(self):
63
+ """Test that API returns HTML when HTML is explicitly requested via Accept header."""
64
+ with ignore_numberformat(["rest_framework/base.html"]):
65
+ response = self.client.get(
66
+ reverse("wagtailapi_v2:pages:listing"), HTTP_ACCEPT="text/html"
67
+ )
68
+
69
+ self.assertEqual(response.status_code, 200)
70
+ self.assertEqual(response["Content-Type"], "text/html; charset=utf-8")
71
+
72
+ # Should contain HTML content
73
+ content = response.content.decode("UTF-8")
74
+ self.assertIn("<html", content)
75
+ self.assertIn("</html>", content)
76
+
77
+ def test_api_response_returns_html_with_browser_accept_header(self):
78
+ """Test that API returns HTML when accessed with typical browser Accept headers."""
79
+ with ignore_numberformat(["rest_framework/base.html"]):
80
+ response = self.client.get(
81
+ reverse("wagtailapi_v2:pages:listing"),
82
+ HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9",
83
+ )
84
+
85
+ self.assertEqual(response.status_code, 200)
86
+ self.assertEqual(response["Content-Type"], "text/html; charset=utf-8")
87
+
88
+ # Should contain HTML content
89
+ content = response.content.decode("UTF-8")
90
+ self.assertIn("<html", content)
91
+ self.assertIn("</html>", content)
wagtail/apps.py CHANGED
@@ -1,6 +1,8 @@
1
1
  from django.apps import AppConfig, apps
2
2
  from django.utils.translation import gettext_lazy as _
3
3
 
4
+ from . import checks # NOQA: F401
5
+
4
6
 
5
7
  class WagtailAppConfig(AppConfig):
6
8
  name = "wagtail"
wagtail/bin/wagtail.py CHANGED
@@ -10,7 +10,7 @@ from difflib import unified_diff
10
10
  from django.core.management import ManagementUtility
11
11
 
12
12
  CURRENT_PYTHON = sys.version_info[:2]
13
- REQUIRED_PYTHON = (3, 7)
13
+ REQUIRED_PYTHON = (3, 10)
14
14
 
15
15
  if CURRENT_PYTHON < REQUIRED_PYTHON:
16
16
  sys.stderr.write(
@@ -427,7 +427,8 @@ class StructBlockAdapter(Adapter):
427
427
  if block.meta.form_template:
428
428
  meta["formTemplate"] = block.render_form_template()
429
429
 
430
- if block.meta.label_format:
430
+ # Check specifically for None to allow for empty string
431
+ if block.meta.label_format is not None:
431
432
  meta["labelFormat"] = block.meta.label_format
432
433
 
433
434
  return [
@@ -7,7 +7,7 @@ msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: Wagtail\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
10
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
11
11
  "PO-Revision-Date: 2014-09-11 15:42+0000\n"
12
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
13
  "Language-Team: Afrikaans (http://app.transifex.com/torchbox/wagtail/language/"