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
@@ -206,6 +206,21 @@ def admin_url_name(obj, action):
206
206
  return obj.snippet_viewset.get_url_name(action)
207
207
 
208
208
 
209
+ @register.simple_tag(takes_context=True)
210
+ def build_absolute_url(context, url):
211
+ """
212
+ Usage: {% build_absolute_url url %}
213
+ Returns the absolute URL of the given URL based on the request's host.
214
+ If the request doesn't exist in the context, falls back to
215
+ WAGTAILADMIN_BASE_URL as the base URL.
216
+ If the given URL is already absolute, returns it unchanged.
217
+ """
218
+ request = context.get("request")
219
+ if not request:
220
+ return urljoin(get_admin_base_url(), url)
221
+ return request.build_absolute_uri(url)
222
+
223
+
209
224
  @register.simple_tag
210
225
  def latest_str(obj):
211
226
  """
@@ -900,9 +915,7 @@ def wagtail_config(context):
900
915
  request = context["request"]
901
916
  config = {
902
917
  "CSRF_TOKEN": get_token(request),
903
- "CSRF_HEADER_NAME": HttpHeaders.parse_header_name(
904
- getattr(settings, "CSRF_HEADER_NAME")
905
- ),
918
+ "CSRF_HEADER_NAME": HttpHeaders.parse_header_name(settings.CSRF_HEADER_NAME),
906
919
  "ADMIN_API": {
907
920
  "PAGES": reverse("wagtailadmin_api:pages:listing"),
908
921
  "DOCUMENTS": reverse("wagtailadmin_api:documents:listing"),
@@ -1175,6 +1188,7 @@ def formattedfield(
1175
1188
  label_text=None,
1176
1189
  error_message_id=None,
1177
1190
  wrapper_id=None,
1191
+ attrs=None,
1178
1192
  ):
1179
1193
  """
1180
1194
  Renders a form field in standard Wagtail admin layout.
@@ -1192,12 +1206,15 @@ def formattedfield(
1192
1206
  - `label_text` - Manually set this if the field’s HTML is hard-coded.
1193
1207
  - `error_message_id` - ID of the error message container element.
1194
1208
  - `wrapper_id` - ID of the overall wrapper element.
1209
+ - `attrs` - Dict of additional HTML attributes to add to the field wrapper element, `data-field-wrapper` will be included by default.
1195
1210
  """
1196
1211
 
1197
1212
  label_for = id_for_label or (field and field.id_for_label) or ""
1198
1213
 
1199
1214
  context = {
1200
1215
  "classname": classname,
1216
+ # Ensure data-field-wrapper is always present
1217
+ "attrs": {**(attrs or {}), "data-field-wrapper": True},
1201
1218
  "show_label": show_label,
1202
1219
  "sr_only_label": sr_only_label,
1203
1220
  "icon": icon,
@@ -1319,15 +1336,42 @@ def keyboard_shortcuts_dialog(context):
1319
1336
  appropriate shortcuts for the user's platform.
1320
1337
  Note: Shortcut keys are intentionally not translated.
1321
1338
  """
1339
+ request = context.get("request")
1340
+ keyboard_shortcuts_enabled = True
1341
+
1342
+ if request and getattr(request, "user", None):
1343
+ profile = getattr(request.user, "wagtail_userprofile", None)
1344
+ if profile is not None:
1345
+ keyboard_shortcuts_enabled = bool(
1346
+ getattr(profile, "keyboard_shortcuts", True)
1347
+ )
1322
1348
 
1323
1349
  comments_enabled = get_comments_enabled()
1324
- user_agent = context["request"].headers.get("User-Agent", "")
1350
+ user_agent = request.headers.get("User-Agent", "") if request else ""
1325
1351
  is_mac = re.search(r"Mac|iPod|iPhone|iPad", user_agent)
1326
- KEYS = get_keyboard_key_labels_from_request(context["request"])
1352
+ KEYS = get_keyboard_key_labels_from_request(request) if request else {}
1327
1353
 
1328
1354
  return {
1355
+ "keyboard_shortcuts_enabled": keyboard_shortcuts_enabled,
1329
1356
  "shortcuts": {
1330
- ("actions-common", _("Common actions")): [
1357
+ # Translators: Shortcuts for admin common shortcuts that are available across the admin
1358
+ ("admin-common", _("Application")): [
1359
+ (_("Show keyboard shortcuts"), "?"),
1360
+ (_("Search"), "/"),
1361
+ (_("Toggle sidebar"), "["),
1362
+ (_("Toggle minimap"), "]"),
1363
+ (_("Close modal dialogs (like this one)"), f"{KEYS.ESC}"),
1364
+ ],
1365
+ # Translators: Shortcuts for admin actions that can be taken while working on core models
1366
+ ("admin-core-models", _("Actions")): [
1367
+ (_("Save changes"), f"{KEYS.MOD} + s"),
1368
+ (_("Preview"), f"{KEYS.MOD} + p"),
1369
+ (_("Add or show comments"), f"{KEYS.CTRL} + {KEYS.ALT} + m")
1370
+ if comments_enabled
1371
+ else None,
1372
+ ],
1373
+ # Translators: Shortcuts for common text editing features available in all fields (even if not a rich text field)
1374
+ ("text-editing-basic", _("Text editing")): [
1331
1375
  (_("Copy"), f"{KEYS.MOD} + c"),
1332
1376
  (_("Cut"), f"{KEYS.MOD} + x"),
1333
1377
  (_("Paste"), f"{KEYS.MOD} + v"),
@@ -1343,27 +1387,17 @@ def keyboard_shortcuts_dialog(context):
1343
1387
  f"{KEYS.MOD} + {KEYS.SHIFT} + z" if is_mac else f"{KEYS.MOD} + y",
1344
1388
  ),
1345
1389
  ],
1346
- ("actions-model", _("Actions")): [
1347
- (_("Save changes"), f"{KEYS.MOD} + s"),
1348
- (_("Preview"), f"{KEYS.MOD} + p"),
1349
- (_("Toggle sidebar"), "["),
1350
- (_("Toggle minimap"), "]"),
1351
- (_("Add or show comments"), f"{KEYS.CTRL} + {KEYS.ALT} + m")
1352
- if comments_enabled
1353
- else None,
1354
- ],
1355
- ("rich-text-content", _("Text content")): [
1356
- (_("Insert or edit a link"), f"{KEYS.MOD} + k")
1357
- ],
1358
- ("rich-text-formatting", _("Text formatting")): [
1390
+ # Translators: Shortcuts for formatting & editing features available in rich text fields
1391
+ ("text-editing-rich-text", _("Text formatting")): [
1392
+ (_("Insert or edit a link"), f"{KEYS.MOD} + k"),
1393
+ (_("Bold"), f"{KEYS.MOD} + b"),
1359
1394
  (_("Italic"), f"{KEYS.MOD} + i"),
1360
- (_("Underline"), f"{KEYS.MOD} + u"),
1361
1395
  (_("Monospace (code)"), f"{KEYS.MOD} + j"),
1362
- (_("Strike-through"), f"{KEYS.MOD} + x"),
1396
+ (_("Strike-through"), f"{KEYS.MOD} + {KEYS.SHIFT} + x"),
1363
1397
  (_("Superscript"), f"{KEYS.MOD} + ."),
1364
1398
  (_("Subscript"), f"{KEYS.MOD} + ,"),
1365
1399
  ],
1366
- }
1400
+ },
1367
1401
  }
1368
1402
 
1369
1403
 
@@ -1378,7 +1378,7 @@ class TestCopyPageAction(AdminAPITestCase, TestCase):
1378
1378
  content,
1379
1379
  {
1380
1380
  "detail": (
1381
- "You do not have permission to publish a page at the destination"
1381
+ "You do not have permission to publish a page at the destination."
1382
1382
  )
1383
1383
  },
1384
1384
  )
@@ -1407,7 +1407,7 @@ class TestCopyPageAction(AdminAPITestCase, TestCase):
1407
1407
  content,
1408
1408
  {
1409
1409
  "slug": [
1410
- "The slug 'events' is already in use within the parent page at '/'"
1410
+ "The slug 'events' is already in use within the parent page at '/'."
1411
1411
  ]
1412
1412
  },
1413
1413
  )
@@ -1517,7 +1517,7 @@ class TestDeletePageAction(AdminAPITestCase, TestCase):
1517
1517
  self.assertEqual(response.status_code, 403)
1518
1518
  content = json.loads(response.content.decode("utf-8"))
1519
1519
  self.assertEqual(
1520
- content, {"detail": "You do not have permission to delete this page"}
1520
+ content, {"detail": "You do not have permission to delete this page."}
1521
1521
  )
1522
1522
 
1523
1523
  # Page is still there
@@ -1565,7 +1565,7 @@ class TestPublishPageAction(AdminAPITestCase, TestCase):
1565
1565
  self.assertEqual(response.status_code, 403)
1566
1566
  content = json.loads(response.content.decode("utf-8"))
1567
1567
  self.assertEqual(
1568
- content, {"detail": "You do not have permission to publish this page"}
1568
+ content, {"detail": "You do not have permission to publish this page."}
1569
1569
  )
1570
1570
 
1571
1571
  def test_publish_alias_page(self):
@@ -1655,7 +1655,7 @@ class TestUnpublishPageAction(AdminAPITestCase, TestCase):
1655
1655
  self.assertEqual(response.status_code, 403)
1656
1656
  content = json.loads(response.content.decode("utf-8"))
1657
1657
  self.assertEqual(
1658
- content, {"detail": "You do not have permission to unpublish this page"}
1658
+ content, {"detail": "You do not have permission to unpublish this page."}
1659
1659
  )
1660
1660
 
1661
1661
 
@@ -1969,7 +1969,7 @@ class TestCreatePageAliasAction(AdminAPITestCase, TestCase):
1969
1969
  content,
1970
1970
  {
1971
1971
  "detail": (
1972
- "You do not have permission to publish a page at the destination"
1972
+ "You do not have permission to publish a page at the destination."
1973
1973
  ),
1974
1974
  },
1975
1975
  )
@@ -2028,7 +2028,7 @@ class TestRevertToPageRevisionAction(AdminAPITestCase, TestCase):
2028
2028
 
2029
2029
  content = json.loads(response.content.decode("utf-8"))
2030
2030
  self.assertEqual(
2031
- content, {"detail": "You do not have permission to edit this page"}
2031
+ content, {"detail": "You do not have permission to edit this page."}
2032
2032
  )
2033
2033
 
2034
2034
  def test_revert_to_page_revision_without_revision_id(self):
@@ -6,6 +6,7 @@ from django.urls import reverse
6
6
  from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer
7
7
 
8
8
  from wagtail.admin.api.views import PagesAdminAPIViewSet
9
+ from wagtail.test.numberformat import ignore_numberformat
9
10
  from wagtail.test.utils import WagtailTestUtils
10
11
 
11
12
 
@@ -59,3 +60,18 @@ class TestPagesAdminAPIRendererClasses(WagtailTestUtils, TestCase):
59
60
  content = json.loads(response.content.decode("UTF-8"))
60
61
  self.assertIn("meta", content)
61
62
  self.assertIn("items", content)
63
+
64
+ def test_api_response_returns_html_with_html_accept_header(self):
65
+ """Test that API returns HTML when HTML is explicitly requested via Accept header."""
66
+ with ignore_numberformat(["rest_framework/base.html"]):
67
+ response = self.client.get(
68
+ reverse("wagtailadmin_api:pages:listing"), HTTP_ACCEPT="text/html"
69
+ )
70
+
71
+ self.assertEqual(response.status_code, 200)
72
+ self.assertEqual(response["Content-Type"], "text/html; charset=utf-8")
73
+
74
+ # Should contain HTML content
75
+ content = response.content.decode("UTF-8")
76
+ self.assertIn("<html", content)
77
+ self.assertIn("</html>", content)
@@ -544,6 +544,26 @@ class TestPageCreation(WagtailTestUtils, TestCase):
544
544
  post_data,
545
545
  )
546
546
 
547
+ soup = self.get_soup(response.content)
548
+ header_messages = soup.css.select(".messages[role='status'] ul > li")
549
+
550
+ # the top level message should indicate that the page could not be created
551
+ self.assertEqual(len(header_messages), 1)
552
+ message = header_messages[0]
553
+ self.assertIn(
554
+ "The page could not be created due to validation errors", message.get_text()
555
+ )
556
+
557
+ # the top level message should provide a go to error button
558
+ buttons = message.find_all("button")
559
+ self.assertEqual(len(buttons), 1)
560
+ self.assertEqual(buttons[0].attrs["data-controller"], "w-count w-focus")
561
+ self.assertEqual(
562
+ set(buttons[0].attrs["data-action"].split()),
563
+ {"click->w-focus#focus", "wagtail:panel-init@document->w-count#count"},
564
+ )
565
+ self.assertIn("Go to the first error", buttons[0].get_text())
566
+
547
567
  # Check that a form error was raised
548
568
  self.assertFormError(
549
569
  response.context["form"], "title", "This field is required."
@@ -760,6 +780,26 @@ class TestPageCreation(WagtailTestUtils, TestCase):
760
780
  )
761
781
  self.assertEqual(response.status_code, 200)
762
782
 
783
+ soup = self.get_soup(response.content)
784
+ header_messages = soup.css.select(".messages[role='status'] ul > li")
785
+
786
+ # the top level message should indicate that the page could not be created
787
+ self.assertEqual(len(header_messages), 1)
788
+ message = header_messages[0]
789
+ self.assertIn(
790
+ "The page could not be created due to validation errors", message.get_text()
791
+ )
792
+
793
+ # the top level message should provide a go to error button
794
+ buttons = message.find_all("button")
795
+ self.assertEqual(len(buttons), 1)
796
+ self.assertEqual(buttons[0].attrs["data-controller"], "w-count w-focus")
797
+ self.assertEqual(
798
+ set(buttons[0].attrs["data-action"].split()),
799
+ {"click->w-focus#focus", "wagtail:panel-init@document->w-count#count"},
800
+ )
801
+ self.assertIn("Go to the first error", buttons[0].get_text())
802
+
763
803
  # Check that a form error was raised
764
804
  self.assertFormError(
765
805
  response.context["form"], "date_from", "This field is required."
@@ -1144,7 +1184,7 @@ class TestPageCreation(WagtailTestUtils, TestCase):
1144
1184
  self.assertFormError(
1145
1185
  response.context["form"],
1146
1186
  "expire_at",
1147
- "Expiry date/time must be in the future",
1187
+ "Expiry date/time must be in the future.",
1148
1188
  )
1149
1189
 
1150
1190
  self.assertContains(
@@ -1328,7 +1368,7 @@ class TestPageCreation(WagtailTestUtils, TestCase):
1328
1368
  self.assertFormError(
1329
1369
  response.context["form"],
1330
1370
  "slug",
1331
- "The slug 'hello-world' is already in use within the parent page",
1371
+ "The slug 'hello-world' is already in use within the parent page.",
1332
1372
  )
1333
1373
 
1334
1374
  # form should be marked as having unsaved changes for the purposes of the dirty-forms warning
@@ -32,6 +32,7 @@ from wagtail.test.testapp.models import (
32
32
  EVENT_AUDIENCE_CHOICES,
33
33
  Advert,
34
34
  AdvertPlacement,
35
+ CommentableJSONPage,
35
36
  CustomPermissionPage,
36
37
  EventCategory,
37
38
  EventPage,
@@ -883,7 +884,7 @@ class TestPageEdit(WagtailTestUtils, TestCase):
883
884
  self.assertFormError(
884
885
  response.context["form"],
885
886
  "expire_at",
886
- "Expiry date/time must be in the future",
887
+ "Expiry date/time must be in the future.",
887
888
  )
888
889
 
889
890
  self.assertContains(
@@ -1749,7 +1750,7 @@ class TestPageEdit(WagtailTestUtils, TestCase):
1749
1750
  self.assertFormError(
1750
1751
  response.context["form"],
1751
1752
  "slug",
1752
- "The slug 'hello-world' is already in use within the parent page",
1753
+ "The slug 'hello-world' is already in use within the parent page.",
1753
1754
  )
1754
1755
 
1755
1756
  def test_preview_on_edit(self):
@@ -2986,12 +2987,31 @@ class TestValidationErrorMessages(WagtailTestUtils, TestCase):
2986
2987
  )
2987
2988
  self.assertEqual(response.status_code, 200)
2988
2989
 
2989
- self.assertContains(
2990
- response, "The page could not be saved due to validation errors"
2990
+ soup = self.get_soup(response.content)
2991
+
2992
+ header_messages = soup.css.select(".messages[role='status'] ul > li")
2993
+
2994
+ # the top level message should indicate that the page could not be saved
2995
+ self.assertEqual(len(header_messages), 1)
2996
+ message = header_messages[0]
2997
+ self.assertIn(
2998
+ "The page could not be saved due to validation errors", message.get_text()
2991
2999
  )
3000
+
3001
+ # the top level message should provide a go to error button
3002
+ buttons = message.find_all("button")
3003
+ self.assertEqual(len(buttons), 1)
3004
+ self.assertEqual(buttons[0].attrs["data-controller"], "w-count w-focus")
3005
+ self.assertIn("Go to the first error", buttons[0].get_text())
3006
+
2992
3007
  # the error should only appear once: against the field, not in the header message
2993
- self.assertContains(response, "error-message", count=1)
2994
- self.assertContains(response, "This field is required", count=1)
3008
+ error_messages = soup.css.select(".error-message")
3009
+ self.assertEqual(len(error_messages), 1)
3010
+ error_message = error_messages[0]
3011
+ self.assertEqual(
3012
+ error_message.parent["id"], "panel-child-content-child-title-errors"
3013
+ )
3014
+ self.assertIn("This field is required", error_message.get_text())
2995
3015
 
2996
3016
  def test_non_field_error(self):
2997
3017
  """Non-field errors should be shown in the header message"""
@@ -3070,19 +3090,43 @@ class TestValidationErrorMessages(WagtailTestUtils, TestCase):
3070
3090
  )
3071
3091
  self.assertEqual(response.status_code, 200)
3072
3092
 
3073
- self.assertContains(
3074
- response, "The page could not be saved due to validation errors"
3093
+ soup = self.get_soup(response.content)
3094
+
3095
+ # there should be top level messages should indicate that the page could not be saved alongside other messages
3096
+ header_messages = soup.css.select(".messages[role='status'] ul > li")
3097
+ self.assertEqual(len(header_messages), 3)
3098
+
3099
+ # the first header message should indicate that the page could not be saved & contain a go to error button
3100
+ self.assertIn(
3101
+ "The page could not be saved due to validation errors",
3102
+ header_messages[0].get_text(),
3075
3103
  )
3076
- self.assertContains(
3077
- response, "<li>The end date must be after the start date</li>", count=1
3104
+ buttons = header_messages[0].find_all("button")
3105
+ self.assertEqual(len(buttons), 1)
3106
+ self.assertEqual(buttons[0].attrs["data-controller"], "w-count w-focus")
3107
+ self.assertIn("Go to the first error", buttons[0].get_text())
3108
+
3109
+ # the second should be a general message about the title, no go to error button
3110
+ self.assertIn(
3111
+ "Title: This field is required",
3112
+ header_messages[1].get_text(),
3113
+ )
3114
+ self.assertEqual(len(header_messages[1].find_all("button")), 0)
3115
+
3116
+ # the third header message should be the non-field error
3117
+ self.assertIn(
3118
+ "The end date must be after the start date",
3119
+ header_messages[2].get_text(),
3078
3120
  )
3079
3121
 
3080
3122
  # Error on title shown against the title field
3081
- self.assertContains(response, "error-message", count=1)
3082
- # Error on title shown in the header message
3083
- self.assertContains(
3084
- response, "<li>Title: This field is required.</li>", count=1
3123
+ error_messages = soup.css.select(".error-message")
3124
+ self.assertEqual(len(error_messages), 1)
3125
+ error_message = error_messages[0]
3126
+ self.assertEqual(
3127
+ error_message.parent["id"], "panel-child-content-child-title-errors"
3085
3128
  )
3129
+ self.assertIn("This field is required.", error_message.get_text())
3086
3130
 
3087
3131
 
3088
3132
  class TestNestedInlinePanel(WagtailTestUtils, TestCase):
@@ -4107,3 +4151,73 @@ class TestCommentOutput(WagtailTestUtils, TestCase):
4107
4151
  comment_text = [comment["text"] for comment in comments_data["comments"]]
4108
4152
  comment_text.sort()
4109
4153
  self.assertEqual(comment_text, ["A test comment", "This is quite expensive"])
4154
+
4155
+ def test_comments_with_deep_contentpath_on_custom_fields(self):
4156
+ page = CommentableJSONPage(
4157
+ title="Commentable JSON Page",
4158
+ slug="commentable-json-page",
4159
+ commentable_body={
4160
+ "header": {
4161
+ "title": "Comments are Welcome",
4162
+ },
4163
+ },
4164
+ uncommentable_body={
4165
+ "title": "No feedback here",
4166
+ },
4167
+ stream_body=[
4168
+ {
4169
+ "id": "1",
4170
+ "type": "text",
4171
+ "value": "This allows comments",
4172
+ }
4173
+ ],
4174
+ )
4175
+ self.root_page.add_child(instance=page)
4176
+
4177
+ Comment.objects.create(
4178
+ page=page,
4179
+ user=self.user,
4180
+ text="1. Comment on an existing JSON path in commentable JSONField",
4181
+ contentpath="commentable_body.header.title",
4182
+ )
4183
+ Comment.objects.create(
4184
+ page=page,
4185
+ user=self.user,
4186
+ text="2. Comment on a non-existing JSON path in commentable JSONField",
4187
+ contentpath="commentable_body.header.not_valid",
4188
+ )
4189
+ Comment.objects.create(
4190
+ page=page,
4191
+ user=self.user,
4192
+ text="3. Comment on an existing JSON path in base JSONField",
4193
+ contentpath="uncommentable_body.title",
4194
+ )
4195
+ Comment.objects.create(
4196
+ page=page,
4197
+ user=self.user,
4198
+ text="4. Comment on a non-existing JSON path in base JSONField",
4199
+ contentpath="uncommentable_body.not_valid",
4200
+ )
4201
+ Comment.objects.create(
4202
+ page=page,
4203
+ user=self.user,
4204
+ text="5. Comment on the top-level of a base JSONField",
4205
+ contentpath="uncommentable_body",
4206
+ )
4207
+
4208
+ response = self.client.get(reverse("wagtailadmin_pages:edit", args=[page.id]))
4209
+ soup = self.get_soup(response.content)
4210
+ comments_data_json = soup.select_one("#comments-data").string
4211
+ comments_data = json.loads(comments_data_json)
4212
+ comment_text = [comment["text"] for comment in comments_data["comments"]]
4213
+ comment_text.sort()
4214
+
4215
+ self.assertEqual(
4216
+ comment_text,
4217
+ [
4218
+ # Custom fields can define which paths are valid for comments
4219
+ "1. Comment on an existing JSON path in commentable JSONField",
4220
+ # Comments directly on the top-level (the field itself) are always valid
4221
+ "5. Comment on the top-level of a base JSONField",
4222
+ ],
4223
+ )
@@ -180,13 +180,15 @@ class TestPageExplorer(WagtailTestUtils, TestCase):
180
180
  self.root_page.add_child(instance=event_page)
181
181
 
182
182
  orderings = {
183
- "content_type": (
184
- [self.new_page.id, self.old_page.id, event_page.id],
185
- "-content_type",
183
+ "content_type__model": (
184
+ # SimplePage, SingleEventPage, StandardIndex
185
+ [self.new_page.id, event_page.id, self.old_page.id],
186
+ "-content_type__model",
186
187
  ),
187
- "-content_type": (
188
- [event_page.id, self.old_page.id, self.new_page.id],
189
- "content_type",
188
+ "-content_type__model": (
189
+ # StandardIndex, SingleEventPage, SimplePage
190
+ [self.old_page.id, event_page.id, self.new_page.id],
191
+ "content_type__model",
190
192
  ),
191
193
  }
192
194
  url = reverse("wagtailadmin_explore", args=(self.root_page.id,))
@@ -345,7 +347,31 @@ class TestPageExplorer(WagtailTestUtils, TestCase):
345
347
  )
346
348
 
347
349
  # Pages must not be paginated
348
- self.assertNotIsInstance(response.context["pages"], paginator.Page)
350
+ self.assertNotIsInstance(response.context["page_obj"], paginator.Page)
351
+
352
+ def test_reordering_disabled_when_searching_or_filtering(self):
353
+ standard_index_ct = ContentType.objects.get_for_model(StandardIndex).pk
354
+ cases = [
355
+ {"q": "old"},
356
+ {"content_type": standard_index_ct},
357
+ {"content_type": standard_index_ct, "q": "old"},
358
+ ]
359
+ for query in cases:
360
+ with self.subTest(query=query):
361
+ response = self.client.get(
362
+ reverse("wagtailadmin_explore", args=(self.root_page.id,)),
363
+ {"ordering": "ord", **query},
364
+ )
365
+ self.assertEqual(response.status_code, 200)
366
+ self.assertTemplateUsed(
367
+ response, "wagtailadmin/pages/explorable_index.html"
368
+ )
369
+ self.assertEqual(
370
+ response.context["ordering"],
371
+ "-latest_revision_created_at",
372
+ )
373
+ # Pages is paginated
374
+ self.assertIsInstance(response.context["page_obj"], paginator.Page)
349
375
 
350
376
  def test_construct_explorer_page_queryset_hook(self):
351
377
  # testapp implements a construct_explorer_page_queryset hook
@@ -421,6 +447,7 @@ class TestPageExplorer(WagtailTestUtils, TestCase):
421
447
  self.assertTemplateUsed(response, "wagtailadmin/pages/explorable_index.html")
422
448
 
423
449
  # Check that we got the correct page
450
+ self.assertIsInstance(response.context["page_obj"], paginator.Page)
424
451
  self.assertEqual(response.context["page_obj"].number, 2)
425
452
  self.assertContains(response, "51-100 of 153")
426
453
 
@@ -70,6 +70,17 @@ class TestPageReorder(WagtailTestUtils, TestCase):
70
70
  child_slugs = self.index_page.get_children().values_list("slug", flat=True)
71
71
  self.assertListEqual(list(child_slugs), ["child-2", "child-3", "child-1"])
72
72
 
73
+ def test_page_set_page_position_non_integer_position_moves_it_to_the_end(self):
74
+ response = self.client.post(
75
+ reverse("wagtailadmin_pages:set_page_position", args=(self.child_1.id,))
76
+ + "?position=good"
77
+ )
78
+ self.assertEqual(response.status_code, 200)
79
+
80
+ # check if child_1 is the last child page:
81
+ child_slugs = self.index_page.get_children().values_list("slug", flat=True)
82
+ self.assertListEqual(list(child_slugs), ["child-2", "child-3", "child-1"])
83
+
73
84
  def test_page_move_page_position_up(self):
74
85
  """Moves child 3 to the first position."""
75
86
  response = self.client.post(
@@ -781,6 +781,18 @@ class TestSetCollectionPrivacy(CollectionInstanceTestUtils, WagtailTestUtils, Te
781
781
  params,
782
782
  )
783
783
 
784
+ def test_privacy_for_collection(self):
785
+ response = self.get(self.finance_collection.id)
786
+
787
+ # Check response
788
+ self.assertEqual(response.status_code, 200)
789
+ self.assertTemplateUsed(response, "wagtailadmin/shared/set_privacy.html")
790
+ self.assertEqual(response.context["object"], self.finance_collection)
791
+ self.assertEqual(
792
+ response.context["action_url"],
793
+ "/admin/collections/{}/privacy/".format(self.finance_collection.id),
794
+ )
795
+
784
796
  def test_get_private_child(self):
785
797
  CollectionViewRestriction.objects.create(
786
798
  collection=self.root_collection,
@@ -1,7 +1,7 @@
1
1
  from collections.abc import Mapping
2
2
  from datetime import date, datetime, timezone
3
3
  from functools import wraps
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
  from unittest import mock
6
6
 
7
7
  from django import VERSION as DJANGO_VERSION
@@ -871,8 +871,8 @@ class TestFieldPanel(TestCase):
871
871
 
872
872
  def _get_form(
873
873
  self,
874
- data: Optional[Mapping[str, Any]] = None,
875
- fields: Optional[list[str]] = None,
874
+ data: Mapping[str, Any] | None = None,
875
+ fields: list[str] | None = None,
876
876
  ) -> WagtailAdminPageForm:
877
877
  cls = get_form_for_model(
878
878
  EventPage,
@@ -75,7 +75,7 @@ class TestFilteredModelChoiceField(WagtailTestUtils, TestCase):
75
75
  users = FilteredModelChoiceField(
76
76
  queryset=User.objects.order_by(User.USERNAME_FIELD),
77
77
  filter_field="id_group",
78
- filter_accessor=lambda user: user.groups.all(),
78
+ filter_accessor=lambda user: user.groups.all().order_by("name"),
79
79
  )
80
80
 
81
81
  form = UserForm()
@@ -83,7 +83,7 @@ class TestFilteredModelChoiceField(WagtailTestUtils, TestCase):
83
83
  expected_html = """
84
84
  <select name="users" data-widget="filtered-select" data-filter-field="id_group" required id="id_users">
85
85
  <option value="" selected>---------</option>
86
- <option value="{david}" data-filter-value="{musicians},{actors}">{david_username}</option>
86
+ <option value="{david}" data-filter-value="{actors},{musicians}">{david_username}</option>
87
87
  <option value="{kevin}" data-filter-value="{actors}">{kevin_username}</option>
88
88
  <option value="{morten}" data-filter-value="{musicians}">{morten_username}</option>
89
89
  </select>