wagtail 6.4.1__py3-none-any.whl → 7.0rc1__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 (1199) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_page.py +4 -4
  3. wagtail/admin/action_menu.py +3 -0
  4. wagtail/admin/active_filters.py +218 -0
  5. wagtail/admin/auth.py +3 -39
  6. wagtail/admin/forms/choosers.py +8 -7
  7. wagtail/admin/forms/models.py +46 -1
  8. wagtail/admin/forms/pages.py +9 -0
  9. wagtail/admin/locale/ar/LC_MESSAGES/django.mo +0 -0
  10. wagtail/admin/locale/ar/LC_MESSAGES/django.po +30 -12
  11. wagtail/admin/locale/ar/LC_MESSAGES/djangojs.mo +0 -0
  12. wagtail/admin/locale/ar/LC_MESSAGES/djangojs.po +5 -1
  13. wagtail/admin/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  14. wagtail/admin/locale/be/LC_MESSAGES/django.mo +0 -0
  15. wagtail/admin/locale/be/LC_MESSAGES/django.po +27 -13
  16. wagtail/admin/locale/be/LC_MESSAGES/djangojs.mo +0 -0
  17. wagtail/admin/locale/be/LC_MESSAGES/djangojs.po +3 -0
  18. wagtail/admin/locale/bg/LC_MESSAGES/django.mo +0 -0
  19. wagtail/admin/locale/bg/LC_MESSAGES/django.po +3 -3
  20. wagtail/admin/locale/bn/LC_MESSAGES/django.po +1 -1
  21. wagtail/admin/locale/ca/LC_MESSAGES/django.mo +0 -0
  22. wagtail/admin/locale/ca/LC_MESSAGES/django.po +30 -28
  23. wagtail/admin/locale/ca/LC_MESSAGES/djangojs.mo +0 -0
  24. wagtail/admin/locale/ca/LC_MESSAGES/djangojs.po +3 -0
  25. wagtail/admin/locale/cs/LC_MESSAGES/django.mo +0 -0
  26. wagtail/admin/locale/cs/LC_MESSAGES/django.po +30 -19
  27. wagtail/admin/locale/cs/LC_MESSAGES/djangojs.mo +0 -0
  28. wagtail/admin/locale/cs/LC_MESSAGES/djangojs.po +5 -2
  29. wagtail/admin/locale/cy/LC_MESSAGES/django.po +1 -1
  30. wagtail/admin/locale/cy/LC_MESSAGES/djangojs.mo +0 -0
  31. wagtail/admin/locale/cy/LC_MESSAGES/djangojs.po +3 -0
  32. wagtail/admin/locale/da/LC_MESSAGES/django.po +4 -4
  33. wagtail/admin/locale/de/LC_MESSAGES/django.mo +0 -0
  34. wagtail/admin/locale/de/LC_MESSAGES/django.po +33 -30
  35. wagtail/admin/locale/de/LC_MESSAGES/djangojs.mo +0 -0
  36. wagtail/admin/locale/de/LC_MESSAGES/djangojs.po +5 -1
  37. wagtail/admin/locale/dv/LC_MESSAGES/django.mo +0 -0
  38. wagtail/admin/locale/dv/LC_MESSAGES/django.po +7 -18
  39. wagtail/admin/locale/dv/LC_MESSAGES/djangojs.mo +0 -0
  40. wagtail/admin/locale/dv/LC_MESSAGES/djangojs.po +3 -0
  41. wagtail/admin/locale/el/LC_MESSAGES/django.mo +0 -0
  42. wagtail/admin/locale/el/LC_MESSAGES/django.po +9 -8
  43. wagtail/admin/locale/el/LC_MESSAGES/djangojs.mo +0 -0
  44. wagtail/admin/locale/el/LC_MESSAGES/djangojs.po +5 -2
  45. wagtail/admin/locale/en/LC_MESSAGES/django.po +386 -319
  46. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +11 -7
  47. wagtail/admin/locale/es/LC_MESSAGES/django.mo +0 -0
  48. wagtail/admin/locale/es/LC_MESSAGES/django.po +32 -22
  49. wagtail/admin/locale/es/LC_MESSAGES/djangojs.mo +0 -0
  50. wagtail/admin/locale/es/LC_MESSAGES/djangojs.po +5 -2
  51. wagtail/admin/locale/es_419/LC_MESSAGES/django.po +2 -1
  52. wagtail/admin/locale/es_VE/LC_MESSAGES/django.po +2 -1
  53. wagtail/admin/locale/et/LC_MESSAGES/django.mo +0 -0
  54. wagtail/admin/locale/et/LC_MESSAGES/django.po +30 -19
  55. wagtail/admin/locale/et/LC_MESSAGES/djangojs.mo +0 -0
  56. wagtail/admin/locale/et/LC_MESSAGES/djangojs.po +3 -0
  57. wagtail/admin/locale/eu/LC_MESSAGES/django.po +1 -1
  58. wagtail/admin/locale/fa/LC_MESSAGES/django.mo +0 -0
  59. wagtail/admin/locale/fa/LC_MESSAGES/django.po +10 -9
  60. wagtail/admin/locale/fa/LC_MESSAGES/djangojs.mo +0 -0
  61. wagtail/admin/locale/fa/LC_MESSAGES/djangojs.po +5 -2
  62. wagtail/admin/locale/fi/LC_MESSAGES/django.mo +0 -0
  63. wagtail/admin/locale/fi/LC_MESSAGES/django.po +30 -21
  64. wagtail/admin/locale/fi/LC_MESSAGES/djangojs.mo +0 -0
  65. wagtail/admin/locale/fi/LC_MESSAGES/djangojs.po +5 -2
  66. wagtail/admin/locale/fr/LC_MESSAGES/django.mo +0 -0
  67. wagtail/admin/locale/fr/LC_MESSAGES/django.po +80 -24
  68. wagtail/admin/locale/fr/LC_MESSAGES/djangojs.mo +0 -0
  69. wagtail/admin/locale/fr/LC_MESSAGES/djangojs.po +3 -0
  70. wagtail/admin/locale/gl/LC_MESSAGES/django.mo +0 -0
  71. wagtail/admin/locale/gl/LC_MESSAGES/django.po +75 -22
  72. wagtail/admin/locale/gl/LC_MESSAGES/djangojs.mo +0 -0
  73. wagtail/admin/locale/gl/LC_MESSAGES/djangojs.po +3 -0
  74. wagtail/admin/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  75. wagtail/admin/locale/he_IL/LC_MESSAGES/django.po +5 -5
  76. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  77. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.po +30 -19
  78. wagtail/admin/locale/hr_HR/LC_MESSAGES/djangojs.mo +0 -0
  79. wagtail/admin/locale/hr_HR/LC_MESSAGES/djangojs.po +3 -0
  80. wagtail/admin/locale/ht/LC_MESSAGES/django.po +1 -1
  81. wagtail/admin/locale/hu/LC_MESSAGES/django.mo +0 -0
  82. wagtail/admin/locale/hu/LC_MESSAGES/django.po +350 -25
  83. wagtail/admin/locale/hu/LC_MESSAGES/djangojs.mo +0 -0
  84. wagtail/admin/locale/hu/LC_MESSAGES/djangojs.po +8 -0
  85. wagtail/admin/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  86. wagtail/admin/locale/id_ID/LC_MESSAGES/django.po +11 -11
  87. wagtail/admin/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  88. wagtail/admin/locale/is_IS/LC_MESSAGES/django.po +30 -29
  89. wagtail/admin/locale/is_IS/LC_MESSAGES/djangojs.mo +0 -0
  90. wagtail/admin/locale/is_IS/LC_MESSAGES/djangojs.po +5 -2
  91. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  92. wagtail/admin/locale/it/LC_MESSAGES/django.po +30 -29
  93. wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
  94. wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +5 -2
  95. wagtail/admin/locale/ja/LC_MESSAGES/django.mo +0 -0
  96. wagtail/admin/locale/ja/LC_MESSAGES/django.po +14 -15
  97. wagtail/admin/locale/ja/LC_MESSAGES/djangojs.mo +0 -0
  98. wagtail/admin/locale/ja/LC_MESSAGES/djangojs.po +5 -2
  99. wagtail/admin/locale/ka/LC_MESSAGES/django.po +1 -1
  100. wagtail/admin/locale/ko/LC_MESSAGES/django.mo +0 -0
  101. wagtail/admin/locale/ko/LC_MESSAGES/django.po +92 -19
  102. wagtail/admin/locale/ko/LC_MESSAGES/djangojs.mo +0 -0
  103. wagtail/admin/locale/ko/LC_MESSAGES/djangojs.po +16 -0
  104. wagtail/admin/locale/lt/LC_MESSAGES/django.mo +0 -0
  105. wagtail/admin/locale/lt/LC_MESSAGES/django.po +30 -15
  106. wagtail/admin/locale/lt/LC_MESSAGES/djangojs.mo +0 -0
  107. wagtail/admin/locale/lt/LC_MESSAGES/djangojs.po +3 -0
  108. wagtail/admin/locale/lv/LC_MESSAGES/django.mo +0 -0
  109. wagtail/admin/locale/lv/LC_MESSAGES/django.po +10 -9
  110. wagtail/admin/locale/lv/LC_MESSAGES/djangojs.mo +0 -0
  111. wagtail/admin/locale/lv/LC_MESSAGES/djangojs.po +3 -0
  112. wagtail/admin/locale/mi/LC_MESSAGES/django.po +1 -1
  113. wagtail/admin/locale/mi/LC_MESSAGES/djangojs.mo +0 -0
  114. wagtail/admin/locale/mi/LC_MESSAGES/djangojs.po +3 -0
  115. wagtail/admin/locale/mn/LC_MESSAGES/django.mo +0 -0
  116. wagtail/admin/locale/mn/LC_MESSAGES/django.po +12 -11
  117. wagtail/admin/locale/my/LC_MESSAGES/django.po +1 -1
  118. wagtail/admin/locale/nb/LC_MESSAGES/django.mo +0 -0
  119. wagtail/admin/locale/nb/LC_MESSAGES/django.po +31 -15
  120. wagtail/admin/locale/nb/LC_MESSAGES/djangojs.mo +0 -0
  121. wagtail/admin/locale/nb/LC_MESSAGES/djangojs.po +5 -2
  122. wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
  123. wagtail/admin/locale/nl/LC_MESSAGES/django.po +32 -29
  124. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.mo +0 -0
  125. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.po +5 -2
  126. wagtail/admin/locale/pl/LC_MESSAGES/django.mo +0 -0
  127. wagtail/admin/locale/pl/LC_MESSAGES/django.po +30 -22
  128. wagtail/admin/locale/pl/LC_MESSAGES/djangojs.mo +0 -0
  129. wagtail/admin/locale/pl/LC_MESSAGES/djangojs.po +3 -0
  130. wagtail/admin/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  131. wagtail/admin/locale/pt_BR/LC_MESSAGES/django.po +33 -28
  132. wagtail/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo +0 -0
  133. wagtail/admin/locale/pt_BR/LC_MESSAGES/djangojs.po +3 -0
  134. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  135. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +31 -18
  136. wagtail/admin/locale/pt_PT/LC_MESSAGES/djangojs.mo +0 -0
  137. wagtail/admin/locale/pt_PT/LC_MESSAGES/djangojs.po +5 -2
  138. wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
  139. wagtail/admin/locale/ro/LC_MESSAGES/django.po +30 -28
  140. wagtail/admin/locale/ro/LC_MESSAGES/djangojs.mo +0 -0
  141. wagtail/admin/locale/ro/LC_MESSAGES/djangojs.po +5 -2
  142. wagtail/admin/locale/ru/LC_MESSAGES/django.mo +0 -0
  143. wagtail/admin/locale/ru/LC_MESSAGES/django.po +34 -29
  144. wagtail/admin/locale/ru/LC_MESSAGES/djangojs.mo +0 -0
  145. wagtail/admin/locale/ru/LC_MESSAGES/djangojs.po +5 -2
  146. wagtail/admin/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  147. wagtail/admin/locale/sk_SK/LC_MESSAGES/django.po +6 -6
  148. wagtail/admin/locale/sk_SK/LC_MESSAGES/djangojs.mo +0 -0
  149. wagtail/admin/locale/sk_SK/LC_MESSAGES/djangojs.po +3 -0
  150. wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
  151. wagtail/admin/locale/sl/LC_MESSAGES/django.po +31 -27
  152. wagtail/admin/locale/sl/LC_MESSAGES/djangojs.mo +0 -0
  153. wagtail/admin/locale/sl/LC_MESSAGES/djangojs.po +3 -0
  154. wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
  155. wagtail/admin/locale/sv/LC_MESSAGES/django.po +30 -18
  156. wagtail/admin/locale/sv/LC_MESSAGES/djangojs.mo +0 -0
  157. wagtail/admin/locale/sv/LC_MESSAGES/djangojs.po +5 -2
  158. wagtail/admin/locale/tet/LC_MESSAGES/django.mo +0 -0
  159. wagtail/admin/locale/tet/LC_MESSAGES/django.po +5 -5
  160. wagtail/admin/locale/tet/LC_MESSAGES/djangojs.mo +0 -0
  161. wagtail/admin/locale/tet/LC_MESSAGES/djangojs.po +5 -2
  162. wagtail/admin/locale/th/LC_MESSAGES/django.mo +0 -0
  163. wagtail/admin/locale/th/LC_MESSAGES/django.po +10 -17
  164. wagtail/admin/locale/tr/LC_MESSAGES/django.mo +0 -0
  165. wagtail/admin/locale/tr/LC_MESSAGES/django.po +28 -13
  166. wagtail/admin/locale/tr/LC_MESSAGES/djangojs.mo +0 -0
  167. wagtail/admin/locale/tr/LC_MESSAGES/djangojs.po +5 -2
  168. wagtail/admin/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  169. wagtail/admin/locale/tr_TR/LC_MESSAGES/django.po +28 -13
  170. wagtail/admin/locale/tr_TR/LC_MESSAGES/djangojs.mo +0 -0
  171. wagtail/admin/locale/tr_TR/LC_MESSAGES/djangojs.po +5 -2
  172. wagtail/admin/locale/ug/LC_MESSAGES/django.mo +0 -0
  173. wagtail/admin/locale/ug/LC_MESSAGES/django.po +12 -29
  174. wagtail/admin/locale/ug/LC_MESSAGES/djangojs.mo +0 -0
  175. wagtail/admin/locale/ug/LC_MESSAGES/djangojs.po +3 -0
  176. wagtail/admin/locale/uk/LC_MESSAGES/django.mo +0 -0
  177. wagtail/admin/locale/uk/LC_MESSAGES/django.po +30 -26
  178. wagtail/admin/locale/uk/LC_MESSAGES/djangojs.mo +0 -0
  179. wagtail/admin/locale/uk/LC_MESSAGES/djangojs.po +6 -3
  180. wagtail/admin/locale/vi/LC_MESSAGES/django.po +2 -1
  181. wagtail/admin/locale/zh/LC_MESSAGES/django.mo +0 -0
  182. wagtail/admin/locale/zh/LC_MESSAGES/django.po +2 -2
  183. wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  184. wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.po +33 -18
  185. wagtail/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo +0 -0
  186. wagtail/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po +5 -2
  187. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  188. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po +11 -14
  189. wagtail/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo +0 -0
  190. wagtail/admin/locale/zh_Hant/LC_MESSAGES/djangojs.po +3 -0
  191. wagtail/admin/localization.py +42 -1
  192. wagtail/admin/menu.py +1 -10
  193. wagtail/admin/paginator.py +95 -0
  194. wagtail/admin/panels/field_panel.py +27 -6
  195. wagtail/admin/panels/inline_panel.py +28 -11
  196. wagtail/admin/panels/multiple_chooser_panel.py +3 -3
  197. wagtail/admin/rich_text/converters/html_to_contentstate.py +6 -6
  198. wagtail/admin/search.py +1 -10
  199. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  200. wagtail/admin/static/wagtailadmin/css/panels/draftail.css +1 -1
  201. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  202. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  203. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  204. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  205. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  206. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  207. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  208. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  209. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +32 -11
  210. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  211. wagtail/admin/templates/wagtailadmin/admin_base.html +1 -0
  212. wagtail/admin/templates/wagtailadmin/generic/index.html +7 -2
  213. wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +2 -3
  214. wagtail/admin/templates/wagtailadmin/pages/action_menu/publish.html +2 -2
  215. wagtail/admin/templates/wagtailadmin/pages/bulk_actions/confirm_bulk_move.html +0 -1
  216. wagtail/admin/templates/wagtailadmin/pages/move_choose_destination.html +0 -1
  217. wagtail/admin/templates/wagtailadmin/panels/publishing/schedule_publishing_panel.html +1 -1
  218. wagtail/admin/templates/wagtailadmin/shared/active_filters.html +8 -1
  219. wagtail/admin/templates/wagtailadmin/shared/pagination_nav.html +25 -13
  220. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/privacy.html +1 -2
  221. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/workflow.html +1 -1
  222. wagtail/admin/templates/wagtailadmin/skeleton.html +2 -1
  223. wagtail/admin/templates/wagtailadmin/tables/locale_cell.html +4 -0
  224. wagtail/admin/templates/wagtailadmin/userbar/base.html +10 -8
  225. wagtail/admin/templatetags/wagtailadmin_tags.py +57 -132
  226. wagtail/admin/tests/pages/test_bulk_actions/test_bulk_move.py +31 -0
  227. wagtail/admin/tests/pages/test_create_page.py +627 -0
  228. wagtail/admin/tests/pages/test_edit_page.py +102 -18
  229. wagtail/admin/tests/pages/test_explorer_view.py +55 -26
  230. wagtail/admin/tests/pages/test_page_search.py +10 -0
  231. wagtail/admin/tests/pages/test_page_usage.py +2 -1
  232. wagtail/admin/tests/pages/test_preview.py +176 -36
  233. wagtail/admin/tests/pages/test_revisions.py +4 -7
  234. wagtail/admin/tests/test_account_management.py +1 -1
  235. wagtail/admin/tests/test_admin_search.py +1 -0
  236. wagtail/admin/tests/test_buttons_hooks.py +9 -145
  237. wagtail/admin/tests/test_collections_views.py +60 -0
  238. wagtail/admin/tests/test_contentstate.py +1 -1
  239. wagtail/admin/tests/test_dashboard.py +25 -0
  240. wagtail/admin/tests/test_edit_handlers.py +64 -0
  241. wagtail/admin/tests/test_forms.py +38 -0
  242. wagtail/admin/tests/test_keyboard_shortcuts.py +141 -5
  243. wagtail/admin/tests/test_page_chooser.py +2 -2
  244. wagtail/admin/tests/test_paginator.py +86 -0
  245. wagtail/admin/tests/test_privacy.py +12 -1
  246. wagtail/admin/tests/test_reports_views.py +8 -43
  247. wagtail/admin/tests/test_rich_text.py +14 -0
  248. wagtail/admin/tests/test_templatetags.py +50 -36
  249. wagtail/admin/tests/test_userbar.py +79 -15
  250. wagtail/admin/tests/test_views.py +16 -1
  251. wagtail/admin/tests/test_widgets.py +47 -8
  252. wagtail/admin/tests/test_workflows.py +119 -6
  253. wagtail/admin/tests/tests.py +16 -15
  254. wagtail/admin/tests/ui/test_sidebar.py +0 -27
  255. wagtail/admin/tests/viewsets/test_chooser_viewset.py +38 -4
  256. wagtail/admin/tests/viewsets/test_model_viewset.py +1 -37
  257. wagtail/admin/ui/side_panels.py +14 -16
  258. wagtail/admin/ui/sidebar.py +5 -37
  259. wagtail/admin/ui/tables/__init__.py +34 -2
  260. wagtail/admin/ui/tables/pages.py +9 -0
  261. wagtail/admin/urls/__init__.py +2 -2
  262. wagtail/admin/urls/pages.py +3 -1
  263. wagtail/admin/userbar.py +3 -5
  264. wagtail/admin/utils.py +43 -4
  265. wagtail/admin/views/generic/base.py +16 -115
  266. wagtail/admin/views/generic/chooser.py +25 -8
  267. wagtail/admin/views/generic/mixins.py +45 -11
  268. wagtail/admin/views/generic/models.py +15 -30
  269. wagtail/admin/views/generic/preview.py +9 -3
  270. wagtail/admin/views/generic/workflow.py +11 -1
  271. wagtail/admin/views/i18n.py +14 -0
  272. wagtail/admin/views/pages/bulk_actions/move.py +1 -1
  273. wagtail/admin/views/pages/create.py +68 -6
  274. wagtail/admin/views/pages/edit.py +33 -14
  275. wagtail/admin/views/pages/listing.py +3 -2
  276. wagtail/admin/views/pages/move.py +43 -29
  277. wagtail/admin/views/pages/preview.py +15 -2
  278. wagtail/admin/views/pages/search.py +3 -0
  279. wagtail/admin/views/reports/base.py +0 -22
  280. wagtail/admin/views/reports/page_types_usage.py +2 -1
  281. wagtail/admin/views/tags.py +3 -1
  282. wagtail/admin/views/workflows.py +0 -3
  283. wagtail/admin/viewsets/model.py +5 -48
  284. wagtail/admin/wagtail_hooks.py +16 -17
  285. wagtail/admin/widgets/button.py +3 -33
  286. wagtail/admin/widgets/tags.py +31 -3
  287. wagtail/api/v2/views.py +4 -4
  288. wagtail/blocks/base.py +18 -15
  289. wagtail/blocks/field_block.py +2 -1
  290. wagtail/blocks/stream_block.py +15 -11
  291. wagtail/compat.py +17 -1
  292. wagtail/contrib/forms/forms.py +10 -7
  293. wagtail/contrib/forms/locale/af/LC_MESSAGES/django.po +1 -1
  294. wagtail/contrib/forms/locale/ar/LC_MESSAGES/django.po +1 -1
  295. wagtail/contrib/forms/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  296. wagtail/contrib/forms/locale/be/LC_MESSAGES/django.po +1 -1
  297. wagtail/contrib/forms/locale/bg/LC_MESSAGES/django.po +1 -1
  298. wagtail/contrib/forms/locale/bn/LC_MESSAGES/django.po +1 -1
  299. wagtail/contrib/forms/locale/ca/LC_MESSAGES/django.po +1 -1
  300. wagtail/contrib/forms/locale/cs/LC_MESSAGES/django.mo +0 -0
  301. wagtail/contrib/forms/locale/cs/LC_MESSAGES/django.po +2 -2
  302. wagtail/contrib/forms/locale/cy/LC_MESSAGES/django.po +2 -1
  303. wagtail/contrib/forms/locale/da/LC_MESSAGES/django.po +1 -1
  304. wagtail/contrib/forms/locale/de/LC_MESSAGES/django.mo +0 -0
  305. wagtail/contrib/forms/locale/de/LC_MESSAGES/django.po +3 -2
  306. wagtail/contrib/forms/locale/dv/LC_MESSAGES/django.po +2 -1
  307. wagtail/contrib/forms/locale/el/LC_MESSAGES/django.po +1 -1
  308. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +4 -4
  309. wagtail/contrib/forms/locale/es/LC_MESSAGES/django.po +1 -1
  310. wagtail/contrib/forms/locale/es_419/LC_MESSAGES/django.po +1 -1
  311. wagtail/contrib/forms/locale/et/LC_MESSAGES/django.po +1 -1
  312. wagtail/contrib/forms/locale/eu/LC_MESSAGES/django.po +1 -1
  313. wagtail/contrib/forms/locale/fa/LC_MESSAGES/django.po +1 -1
  314. wagtail/contrib/forms/locale/fi/LC_MESSAGES/django.po +1 -1
  315. wagtail/contrib/forms/locale/fr/LC_MESSAGES/django.po +2 -1
  316. wagtail/contrib/forms/locale/gl/LC_MESSAGES/django.po +1 -1
  317. wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.po +1 -1
  318. wagtail/contrib/forms/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  319. wagtail/contrib/forms/locale/ht/LC_MESSAGES/django.po +1 -1
  320. wagtail/contrib/forms/locale/hu/LC_MESSAGES/django.po +1 -1
  321. wagtail/contrib/forms/locale/hy/LC_MESSAGES/django.po +1 -1
  322. wagtail/contrib/forms/locale/id_ID/LC_MESSAGES/django.po +1 -1
  323. wagtail/contrib/forms/locale/is_IS/LC_MESSAGES/django.po +1 -1
  324. wagtail/contrib/forms/locale/it/LC_MESSAGES/django.po +1 -1
  325. wagtail/contrib/forms/locale/ja/LC_MESSAGES/django.po +1 -1
  326. wagtail/contrib/forms/locale/ka/LC_MESSAGES/django.po +1 -1
  327. wagtail/contrib/forms/locale/ko/LC_MESSAGES/django.po +1 -1
  328. wagtail/contrib/forms/locale/lt/LC_MESSAGES/django.po +1 -1
  329. wagtail/contrib/forms/locale/lv/LC_MESSAGES/django.po +1 -1
  330. wagtail/contrib/forms/locale/mi/LC_MESSAGES/django.po +1 -1
  331. wagtail/contrib/forms/locale/mn/LC_MESSAGES/django.mo +0 -0
  332. wagtail/contrib/forms/locale/mn/LC_MESSAGES/django.po +3 -2
  333. wagtail/contrib/forms/locale/my/LC_MESSAGES/django.po +1 -1
  334. wagtail/contrib/forms/locale/nb/LC_MESSAGES/django.po +1 -1
  335. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.mo +0 -0
  336. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.po +2 -2
  337. wagtail/contrib/forms/locale/pl/LC_MESSAGES/django.mo +0 -0
  338. wagtail/contrib/forms/locale/pl/LC_MESSAGES/django.po +2 -2
  339. wagtail/contrib/forms/locale/pt_BR/LC_MESSAGES/django.po +2 -1
  340. wagtail/contrib/forms/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  341. wagtail/contrib/forms/locale/ro/LC_MESSAGES/django.mo +0 -0
  342. wagtail/contrib/forms/locale/ro/LC_MESSAGES/django.po +2 -2
  343. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.po +2 -1
  344. wagtail/contrib/forms/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  345. wagtail/contrib/forms/locale/sl/LC_MESSAGES/django.mo +0 -0
  346. wagtail/contrib/forms/locale/sl/LC_MESSAGES/django.po +2 -2
  347. wagtail/contrib/forms/locale/sv/LC_MESSAGES/django.po +1 -1
  348. wagtail/contrib/forms/locale/tet/LC_MESSAGES/django.po +1 -1
  349. wagtail/contrib/forms/locale/th/LC_MESSAGES/django.po +1 -1
  350. wagtail/contrib/forms/locale/tr/LC_MESSAGES/django.po +1 -1
  351. wagtail/contrib/forms/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  352. wagtail/contrib/forms/locale/ug/LC_MESSAGES/django.po +1 -1
  353. wagtail/contrib/forms/locale/uk/LC_MESSAGES/django.po +1 -1
  354. wagtail/contrib/forms/locale/vi/LC_MESSAGES/django.po +1 -1
  355. wagtail/contrib/forms/locale/zh/LC_MESSAGES/django.po +1 -1
  356. wagtail/contrib/forms/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  357. wagtail/contrib/forms/locale/zh_Hans/LC_MESSAGES/django.po +2 -2
  358. wagtail/contrib/forms/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  359. wagtail/contrib/forms/tests/test_forms.py +62 -0
  360. wagtail/contrib/frontend_cache/backends/cloudfront.py +1 -29
  361. wagtail/contrib/frontend_cache/tests.py +112 -52
  362. wagtail/contrib/frontend_cache/utils.py +109 -17
  363. wagtail/contrib/redirects/forms.py +3 -2
  364. wagtail/contrib/redirects/locale/ar/LC_MESSAGES/django.po +1 -1
  365. wagtail/contrib/redirects/locale/be/LC_MESSAGES/django.po +1 -1
  366. wagtail/contrib/redirects/locale/bg/LC_MESSAGES/django.po +1 -1
  367. wagtail/contrib/redirects/locale/bn/LC_MESSAGES/django.po +1 -1
  368. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.mo +0 -0
  369. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +2 -2
  370. wagtail/contrib/redirects/locale/cs/LC_MESSAGES/django.po +1 -1
  371. wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.po +2 -1
  372. wagtail/contrib/redirects/locale/da/LC_MESSAGES/django.po +1 -1
  373. wagtail/contrib/redirects/locale/de/LC_MESSAGES/django.po +2 -1
  374. wagtail/contrib/redirects/locale/dv/LC_MESSAGES/django.po +2 -1
  375. wagtail/contrib/redirects/locale/el/LC_MESSAGES/django.po +1 -1
  376. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +8 -8
  377. wagtail/contrib/redirects/locale/en_IN/LC_MESSAGES/django.po +1 -1
  378. wagtail/contrib/redirects/locale/es/LC_MESSAGES/django.po +1 -1
  379. wagtail/contrib/redirects/locale/es_419/LC_MESSAGES/django.po +1 -1
  380. wagtail/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po +1 -1
  381. wagtail/contrib/redirects/locale/et/LC_MESSAGES/django.po +1 -1
  382. wagtail/contrib/redirects/locale/eu/LC_MESSAGES/django.po +1 -1
  383. wagtail/contrib/redirects/locale/fa/LC_MESSAGES/django.mo +0 -0
  384. wagtail/contrib/redirects/locale/fa/LC_MESSAGES/django.po +3 -2
  385. wagtail/contrib/redirects/locale/fi/LC_MESSAGES/django.mo +0 -0
  386. wagtail/contrib/redirects/locale/fi/LC_MESSAGES/django.po +2 -2
  387. wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.po +3 -1
  388. wagtail/contrib/redirects/locale/gl/LC_MESSAGES/django.po +1 -1
  389. wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.po +1 -1
  390. wagtail/contrib/redirects/locale/hi/LC_MESSAGES/django.po +1 -1
  391. wagtail/contrib/redirects/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  392. wagtail/contrib/redirects/locale/ht/LC_MESSAGES/django.po +1 -1
  393. wagtail/contrib/redirects/locale/hu/LC_MESSAGES/django.po +1 -1
  394. wagtail/contrib/redirects/locale/hy/LC_MESSAGES/django.po +1 -1
  395. wagtail/contrib/redirects/locale/id_ID/LC_MESSAGES/django.po +1 -1
  396. wagtail/contrib/redirects/locale/is_IS/LC_MESSAGES/django.po +1 -1
  397. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.po +1 -1
  398. wagtail/contrib/redirects/locale/ja/LC_MESSAGES/django.po +1 -1
  399. wagtail/contrib/redirects/locale/ka/LC_MESSAGES/django.po +1 -1
  400. wagtail/contrib/redirects/locale/ko/LC_MESSAGES/django.mo +0 -0
  401. wagtail/contrib/redirects/locale/ko/LC_MESSAGES/django.po +18 -2
  402. wagtail/contrib/redirects/locale/lt/LC_MESSAGES/django.po +1 -1
  403. wagtail/contrib/redirects/locale/lv/LC_MESSAGES/django.po +1 -1
  404. wagtail/contrib/redirects/locale/mi/LC_MESSAGES/django.po +1 -1
  405. wagtail/contrib/redirects/locale/mn/LC_MESSAGES/django.po +1 -1
  406. wagtail/contrib/redirects/locale/my/LC_MESSAGES/django.po +1 -1
  407. wagtail/contrib/redirects/locale/nb/LC_MESSAGES/django.po +2 -1
  408. wagtail/contrib/redirects/locale/nl/LC_MESSAGES/django.mo +0 -0
  409. wagtail/contrib/redirects/locale/nl/LC_MESSAGES/django.po +2 -2
  410. wagtail/contrib/redirects/locale/pl/LC_MESSAGES/django.mo +0 -0
  411. wagtail/contrib/redirects/locale/pl/LC_MESSAGES/django.po +2 -2
  412. wagtail/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  413. wagtail/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po +3 -2
  414. wagtail/contrib/redirects/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  415. wagtail/contrib/redirects/locale/ro/LC_MESSAGES/django.mo +0 -0
  416. wagtail/contrib/redirects/locale/ro/LC_MESSAGES/django.po +3 -2
  417. wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.mo +0 -0
  418. wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.po +3 -2
  419. wagtail/contrib/redirects/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  420. wagtail/contrib/redirects/locale/sl/LC_MESSAGES/django.mo +0 -0
  421. wagtail/contrib/redirects/locale/sl/LC_MESSAGES/django.po +2 -2
  422. wagtail/contrib/redirects/locale/sr/LC_MESSAGES/django.po +1 -1
  423. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.mo +0 -0
  424. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.po +2 -2
  425. wagtail/contrib/redirects/locale/ta/LC_MESSAGES/django.po +1 -1
  426. wagtail/contrib/redirects/locale/tet/LC_MESSAGES/django.po +1 -1
  427. wagtail/contrib/redirects/locale/th/LC_MESSAGES/django.po +1 -1
  428. wagtail/contrib/redirects/locale/tr/LC_MESSAGES/django.po +1 -1
  429. wagtail/contrib/redirects/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  430. wagtail/contrib/redirects/locale/ug/LC_MESSAGES/django.po +1 -1
  431. wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.mo +0 -0
  432. wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.po +3 -2
  433. wagtail/contrib/redirects/locale/vi/LC_MESSAGES/django.po +1 -1
  434. wagtail/contrib/redirects/locale/zh/LC_MESSAGES/django.po +1 -1
  435. wagtail/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  436. wagtail/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po +2 -2
  437. wagtail/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  438. wagtail/contrib/redirects/tmp_storages.py +1 -0
  439. wagtail/contrib/routable_page/tests.py +3 -3
  440. wagtail/contrib/search_promotions/forms.py +3 -2
  441. wagtail/contrib/search_promotions/locale/af/LC_MESSAGES/django.po +1 -1
  442. wagtail/contrib/search_promotions/locale/ar/LC_MESSAGES/django.mo +0 -0
  443. wagtail/contrib/search_promotions/locale/ar/LC_MESSAGES/django.po +1 -4
  444. wagtail/contrib/search_promotions/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  445. wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.mo +0 -0
  446. wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.po +1 -4
  447. wagtail/contrib/search_promotions/locale/bg/LC_MESSAGES/django.mo +0 -0
  448. wagtail/contrib/search_promotions/locale/bg/LC_MESSAGES/django.po +1 -4
  449. wagtail/contrib/search_promotions/locale/bn/LC_MESSAGES/django.po +1 -1
  450. wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.mo +0 -0
  451. wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.po +3 -6
  452. wagtail/contrib/search_promotions/locale/cs/LC_MESSAGES/django.mo +0 -0
  453. wagtail/contrib/search_promotions/locale/cs/LC_MESSAGES/django.po +1 -4
  454. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.mo +0 -0
  455. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.po +1 -4
  456. wagtail/contrib/search_promotions/locale/da/LC_MESSAGES/django.po +1 -1
  457. wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.mo +0 -0
  458. wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.po +3 -6
  459. wagtail/contrib/search_promotions/locale/dv/LC_MESSAGES/django.po +2 -1
  460. wagtail/contrib/search_promotions/locale/el/LC_MESSAGES/django.mo +0 -0
  461. wagtail/contrib/search_promotions/locale/el/LC_MESSAGES/django.po +1 -4
  462. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +19 -23
  463. wagtail/contrib/search_promotions/locale/es/LC_MESSAGES/django.mo +0 -0
  464. wagtail/contrib/search_promotions/locale/es/LC_MESSAGES/django.po +1 -4
  465. wagtail/contrib/search_promotions/locale/es_419/LC_MESSAGES/django.po +1 -1
  466. wagtail/contrib/search_promotions/locale/et/LC_MESSAGES/django.mo +0 -0
  467. wagtail/contrib/search_promotions/locale/et/LC_MESSAGES/django.po +1 -4
  468. wagtail/contrib/search_promotions/locale/eu/LC_MESSAGES/django.po +1 -1
  469. wagtail/contrib/search_promotions/locale/fa/LC_MESSAGES/django.mo +0 -0
  470. wagtail/contrib/search_promotions/locale/fa/LC_MESSAGES/django.po +1 -4
  471. wagtail/contrib/search_promotions/locale/fi/LC_MESSAGES/django.mo +0 -0
  472. wagtail/contrib/search_promotions/locale/fi/LC_MESSAGES/django.po +1 -4
  473. wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.mo +0 -0
  474. wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.po +3 -6
  475. wagtail/contrib/search_promotions/locale/gl/LC_MESSAGES/django.mo +0 -0
  476. wagtail/contrib/search_promotions/locale/gl/LC_MESSAGES/django.po +3 -6
  477. wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.po +1 -1
  478. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  479. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.po +1 -4
  480. wagtail/contrib/search_promotions/locale/ht/LC_MESSAGES/django.mo +0 -0
  481. wagtail/contrib/search_promotions/locale/ht/LC_MESSAGES/django.po +1 -4
  482. wagtail/contrib/search_promotions/locale/hu/LC_MESSAGES/django.mo +0 -0
  483. wagtail/contrib/search_promotions/locale/hu/LC_MESSAGES/django.po +11 -5
  484. wagtail/contrib/search_promotions/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  485. wagtail/contrib/search_promotions/locale/id_ID/LC_MESSAGES/django.po +1 -4
  486. wagtail/contrib/search_promotions/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  487. wagtail/contrib/search_promotions/locale/is_IS/LC_MESSAGES/django.po +1 -4
  488. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
  489. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +1 -4
  490. wagtail/contrib/search_promotions/locale/ja/LC_MESSAGES/django.mo +0 -0
  491. wagtail/contrib/search_promotions/locale/ja/LC_MESSAGES/django.po +1 -4
  492. wagtail/contrib/search_promotions/locale/ka/LC_MESSAGES/django.po +1 -1
  493. wagtail/contrib/search_promotions/locale/ko/LC_MESSAGES/django.mo +0 -0
  494. wagtail/contrib/search_promotions/locale/ko/LC_MESSAGES/django.po +5 -4
  495. wagtail/contrib/search_promotions/locale/lt/LC_MESSAGES/django.mo +0 -0
  496. wagtail/contrib/search_promotions/locale/lt/LC_MESSAGES/django.po +1 -4
  497. wagtail/contrib/search_promotions/locale/lv/LC_MESSAGES/django.mo +0 -0
  498. wagtail/contrib/search_promotions/locale/lv/LC_MESSAGES/django.po +1 -4
  499. wagtail/contrib/search_promotions/locale/mi/LC_MESSAGES/django.mo +0 -0
  500. wagtail/contrib/search_promotions/locale/mi/LC_MESSAGES/django.po +1 -4
  501. wagtail/contrib/search_promotions/locale/mn/LC_MESSAGES/django.mo +0 -0
  502. wagtail/contrib/search_promotions/locale/mn/LC_MESSAGES/django.po +1 -4
  503. wagtail/contrib/search_promotions/locale/my/LC_MESSAGES/django.mo +0 -0
  504. wagtail/contrib/search_promotions/locale/my/LC_MESSAGES/django.po +1 -4
  505. wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.mo +0 -0
  506. wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.po +1 -4
  507. wagtail/contrib/search_promotions/locale/nl/LC_MESSAGES/django.mo +0 -0
  508. wagtail/contrib/search_promotions/locale/nl/LC_MESSAGES/django.po +3 -6
  509. wagtail/contrib/search_promotions/locale/pl/LC_MESSAGES/django.mo +0 -0
  510. wagtail/contrib/search_promotions/locale/pl/LC_MESSAGES/django.po +1 -4
  511. wagtail/contrib/search_promotions/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  512. wagtail/contrib/search_promotions/locale/pt_BR/LC_MESSAGES/django.po +1 -4
  513. wagtail/contrib/search_promotions/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  514. wagtail/contrib/search_promotions/locale/pt_PT/LC_MESSAGES/django.po +1 -4
  515. wagtail/contrib/search_promotions/locale/ro/LC_MESSAGES/django.mo +0 -0
  516. wagtail/contrib/search_promotions/locale/ro/LC_MESSAGES/django.po +1 -4
  517. wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.mo +0 -0
  518. wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.po +3 -6
  519. wagtail/contrib/search_promotions/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  520. wagtail/contrib/search_promotions/locale/sk_SK/LC_MESSAGES/django.po +1 -4
  521. wagtail/contrib/search_promotions/locale/sl/LC_MESSAGES/django.mo +0 -0
  522. wagtail/contrib/search_promotions/locale/sl/LC_MESSAGES/django.po +1 -4
  523. wagtail/contrib/search_promotions/locale/sv/LC_MESSAGES/django.mo +0 -0
  524. wagtail/contrib/search_promotions/locale/sv/LC_MESSAGES/django.po +1 -4
  525. wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.mo +0 -0
  526. wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.po +1 -4
  527. wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.mo +0 -0
  528. wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.po +1 -4
  529. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.mo +0 -0
  530. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.po +1 -4
  531. wagtail/contrib/search_promotions/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  532. wagtail/contrib/search_promotions/locale/tr_TR/LC_MESSAGES/django.po +1 -4
  533. wagtail/contrib/search_promotions/locale/ug/LC_MESSAGES/django.mo +0 -0
  534. wagtail/contrib/search_promotions/locale/ug/LC_MESSAGES/django.po +1 -4
  535. wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.mo +0 -0
  536. wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.po +1 -4
  537. wagtail/contrib/search_promotions/locale/vi/LC_MESSAGES/django.mo +0 -0
  538. wagtail/contrib/search_promotions/locale/vi/LC_MESSAGES/django.po +1 -4
  539. wagtail/contrib/search_promotions/locale/zh/LC_MESSAGES/django.mo +0 -0
  540. wagtail/contrib/search_promotions/locale/zh/LC_MESSAGES/django.po +1 -4
  541. wagtail/contrib/search_promotions/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  542. wagtail/contrib/search_promotions/locale/zh_Hans/LC_MESSAGES/django.po +1 -4
  543. wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  544. wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.po +1 -4
  545. wagtail/contrib/search_promotions/models.py +1 -7
  546. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/queries/chooser/results.html +1 -1
  547. wagtail/contrib/search_promotions/tests.py +4 -5
  548. wagtail/contrib/search_promotions/views/settings.py +1 -2
  549. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +1 -1
  550. wagtail/contrib/settings/registry.py +1 -11
  551. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  552. wagtail/contrib/simple_translation/locale/hu/LC_MESSAGES/django.mo +0 -0
  553. wagtail/contrib/simple_translation/locale/hu/LC_MESSAGES/django.po +5 -2
  554. wagtail/contrib/styleguide/locale/af/LC_MESSAGES/django.po +1 -1
  555. wagtail/contrib/styleguide/locale/ar/LC_MESSAGES/django.po +1 -1
  556. wagtail/contrib/styleguide/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  557. wagtail/contrib/styleguide/locale/be/LC_MESSAGES/django.mo +0 -0
  558. wagtail/contrib/styleguide/locale/be/LC_MESSAGES/django.po +3 -2
  559. wagtail/contrib/styleguide/locale/bg/LC_MESSAGES/django.po +1 -1
  560. wagtail/contrib/styleguide/locale/bn/LC_MESSAGES/django.po +1 -1
  561. wagtail/contrib/styleguide/locale/ca/LC_MESSAGES/django.po +1 -1
  562. wagtail/contrib/styleguide/locale/cs/LC_MESSAGES/django.po +1 -1
  563. wagtail/contrib/styleguide/locale/cy/LC_MESSAGES/django.po +2 -1
  564. wagtail/contrib/styleguide/locale/da/LC_MESSAGES/django.po +1 -1
  565. wagtail/contrib/styleguide/locale/de/LC_MESSAGES/django.po +1 -1
  566. wagtail/contrib/styleguide/locale/dv/LC_MESSAGES/django.po +2 -1
  567. wagtail/contrib/styleguide/locale/el/LC_MESSAGES/django.po +2 -1
  568. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
  569. wagtail/contrib/styleguide/locale/en_IN/LC_MESSAGES/django.po +1 -1
  570. wagtail/contrib/styleguide/locale/es/LC_MESSAGES/django.po +1 -1
  571. wagtail/contrib/styleguide/locale/es_419/LC_MESSAGES/django.po +1 -1
  572. wagtail/contrib/styleguide/locale/es_VE/LC_MESSAGES/django.po +1 -1
  573. wagtail/contrib/styleguide/locale/et/LC_MESSAGES/django.po +1 -1
  574. wagtail/contrib/styleguide/locale/fa/LC_MESSAGES/django.po +1 -1
  575. wagtail/contrib/styleguide/locale/fi/LC_MESSAGES/django.po +1 -1
  576. wagtail/contrib/styleguide/locale/fr/LC_MESSAGES/django.po +1 -1
  577. wagtail/contrib/styleguide/locale/gl/LC_MESSAGES/django.po +1 -1
  578. wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.po +1 -1
  579. wagtail/contrib/styleguide/locale/hi/LC_MESSAGES/django.po +1 -1
  580. wagtail/contrib/styleguide/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  581. wagtail/contrib/styleguide/locale/ht/LC_MESSAGES/django.po +1 -1
  582. wagtail/contrib/styleguide/locale/hu/LC_MESSAGES/django.po +1 -1
  583. wagtail/contrib/styleguide/locale/id_ID/LC_MESSAGES/django.po +1 -1
  584. wagtail/contrib/styleguide/locale/is_IS/LC_MESSAGES/django.po +1 -1
  585. wagtail/contrib/styleguide/locale/it/LC_MESSAGES/django.po +1 -1
  586. wagtail/contrib/styleguide/locale/ja/LC_MESSAGES/django.po +1 -1
  587. wagtail/contrib/styleguide/locale/ka/LC_MESSAGES/django.po +1 -1
  588. wagtail/contrib/styleguide/locale/ko/LC_MESSAGES/django.po +1 -1
  589. wagtail/contrib/styleguide/locale/lt/LC_MESSAGES/django.po +1 -1
  590. wagtail/contrib/styleguide/locale/lv/LC_MESSAGES/django.po +1 -1
  591. wagtail/contrib/styleguide/locale/mi/LC_MESSAGES/django.po +1 -1
  592. wagtail/contrib/styleguide/locale/mn/LC_MESSAGES/django.po +1 -1
  593. wagtail/contrib/styleguide/locale/my/LC_MESSAGES/django.po +1 -1
  594. wagtail/contrib/styleguide/locale/nb/LC_MESSAGES/django.po +1 -1
  595. wagtail/contrib/styleguide/locale/nl/LC_MESSAGES/django.po +1 -1
  596. wagtail/contrib/styleguide/locale/pl/LC_MESSAGES/django.po +1 -1
  597. wagtail/contrib/styleguide/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  598. wagtail/contrib/styleguide/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  599. wagtail/contrib/styleguide/locale/ro/LC_MESSAGES/django.po +1 -1
  600. wagtail/contrib/styleguide/locale/ru/LC_MESSAGES/django.po +1 -1
  601. wagtail/contrib/styleguide/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  602. wagtail/contrib/styleguide/locale/sk_SK/LC_MESSAGES/django.po +2 -2
  603. wagtail/contrib/styleguide/locale/sl/LC_MESSAGES/django.po +1 -1
  604. wagtail/contrib/styleguide/locale/sv/LC_MESSAGES/django.po +1 -1
  605. wagtail/contrib/styleguide/locale/ta/LC_MESSAGES/django.po +1 -1
  606. wagtail/contrib/styleguide/locale/tet/LC_MESSAGES/django.po +1 -1
  607. wagtail/contrib/styleguide/locale/th/LC_MESSAGES/django.po +1 -1
  608. wagtail/contrib/styleguide/locale/tr/LC_MESSAGES/django.po +1 -1
  609. wagtail/contrib/styleguide/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  610. wagtail/contrib/styleguide/locale/ug/LC_MESSAGES/django.po +1 -1
  611. wagtail/contrib/styleguide/locale/uk/LC_MESSAGES/django.po +1 -1
  612. wagtail/contrib/styleguide/locale/vi/LC_MESSAGES/django.po +1 -1
  613. wagtail/contrib/styleguide/locale/zh/LC_MESSAGES/django.po +1 -1
  614. wagtail/contrib/styleguide/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  615. wagtail/contrib/styleguide/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  616. wagtail/contrib/styleguide/views.py +2 -1
  617. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  618. wagtail/contrib/typed_table_block/blocks.py +5 -0
  619. wagtail/contrib/typed_table_block/locale/ar/LC_MESSAGES/django.po +1 -1
  620. wagtail/contrib/typed_table_block/locale/be/LC_MESSAGES/django.po +1 -1
  621. wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.po +1 -1
  622. wagtail/contrib/typed_table_block/locale/cy/LC_MESSAGES/django.po +1 -1
  623. wagtail/contrib/typed_table_block/locale/de/LC_MESSAGES/django.po +1 -1
  624. wagtail/contrib/typed_table_block/locale/dv/LC_MESSAGES/django.po +1 -1
  625. wagtail/contrib/typed_table_block/locale/el/LC_MESSAGES/django.po +1 -1
  626. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
  627. wagtail/contrib/typed_table_block/locale/es/LC_MESSAGES/django.po +1 -1
  628. wagtail/contrib/typed_table_block/locale/fa/LC_MESSAGES/django.po +1 -1
  629. wagtail/contrib/typed_table_block/locale/fi/LC_MESSAGES/django.po +1 -1
  630. wagtail/contrib/typed_table_block/locale/fr/LC_MESSAGES/django.po +1 -1
  631. wagtail/contrib/typed_table_block/locale/gl/LC_MESSAGES/django.po +1 -1
  632. wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.po +1 -1
  633. wagtail/contrib/typed_table_block/locale/is_IS/LC_MESSAGES/django.po +1 -1
  634. wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.po +1 -1
  635. wagtail/contrib/typed_table_block/locale/ko/LC_MESSAGES/django.po +1 -1
  636. wagtail/contrib/typed_table_block/locale/lt/LC_MESSAGES/django.po +1 -1
  637. wagtail/contrib/typed_table_block/locale/nl/LC_MESSAGES/django.po +1 -1
  638. wagtail/contrib/typed_table_block/locale/pl/LC_MESSAGES/django.po +1 -1
  639. wagtail/contrib/typed_table_block/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  640. wagtail/contrib/typed_table_block/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  641. wagtail/contrib/typed_table_block/locale/ro/LC_MESSAGES/django.po +1 -1
  642. wagtail/contrib/typed_table_block/locale/ru/LC_MESSAGES/django.po +1 -1
  643. wagtail/contrib/typed_table_block/locale/sl/LC_MESSAGES/django.po +1 -1
  644. wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.po +1 -1
  645. wagtail/contrib/typed_table_block/locale/th/LC_MESSAGES/django.po +1 -1
  646. wagtail/contrib/typed_table_block/locale/ug/LC_MESSAGES/django.po +1 -1
  647. wagtail/contrib/typed_table_block/locale/uk/LC_MESSAGES/django.po +1 -1
  648. wagtail/contrib/typed_table_block/locale/zh/LC_MESSAGES/django.po +1 -1
  649. wagtail/contrib/typed_table_block/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  650. wagtail/contrib/typed_table_block/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  651. wagtail/contrib/typed_table_block/tests.py +27 -0
  652. wagtail/coreutils.py +0 -19
  653. wagtail/documents/locale/af/LC_MESSAGES/django.po +1 -1
  654. wagtail/documents/locale/ar/LC_MESSAGES/django.mo +0 -0
  655. wagtail/documents/locale/ar/LC_MESSAGES/django.po +3 -2
  656. wagtail/documents/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  657. wagtail/documents/locale/be/LC_MESSAGES/django.po +1 -1
  658. wagtail/documents/locale/bg/LC_MESSAGES/django.po +1 -1
  659. wagtail/documents/locale/bn/LC_MESSAGES/django.po +1 -1
  660. wagtail/documents/locale/ca/LC_MESSAGES/django.mo +0 -0
  661. wagtail/documents/locale/ca/LC_MESSAGES/django.po +2 -2
  662. wagtail/documents/locale/cs/LC_MESSAGES/django.po +1 -1
  663. wagtail/documents/locale/cy/LC_MESSAGES/django.po +1 -1
  664. wagtail/documents/locale/da/LC_MESSAGES/django.po +1 -1
  665. wagtail/documents/locale/de/LC_MESSAGES/django.mo +0 -0
  666. wagtail/documents/locale/de/LC_MESSAGES/django.po +3 -3
  667. wagtail/documents/locale/dv/LC_MESSAGES/django.po +2 -1
  668. wagtail/documents/locale/el/LC_MESSAGES/django.po +2 -1
  669. wagtail/documents/locale/en/LC_MESSAGES/django.po +4 -4
  670. wagtail/documents/locale/es/LC_MESSAGES/django.mo +0 -0
  671. wagtail/documents/locale/es/LC_MESSAGES/django.po +3 -2
  672. wagtail/documents/locale/es_419/LC_MESSAGES/django.po +1 -1
  673. wagtail/documents/locale/et/LC_MESSAGES/django.po +1 -1
  674. wagtail/documents/locale/eu/LC_MESSAGES/django.po +1 -1
  675. wagtail/documents/locale/fa/LC_MESSAGES/django.po +1 -1
  676. wagtail/documents/locale/fi/LC_MESSAGES/django.mo +0 -0
  677. wagtail/documents/locale/fi/LC_MESSAGES/django.po +2 -2
  678. wagtail/documents/locale/fr/LC_MESSAGES/django.po +2 -1
  679. wagtail/documents/locale/gl/LC_MESSAGES/django.po +1 -1
  680. wagtail/documents/locale/he_IL/LC_MESSAGES/django.po +1 -1
  681. wagtail/documents/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  682. wagtail/documents/locale/ht/LC_MESSAGES/django.po +1 -1
  683. wagtail/documents/locale/hu/LC_MESSAGES/django.mo +0 -0
  684. wagtail/documents/locale/hu/LC_MESSAGES/django.po +18 -3
  685. wagtail/documents/locale/id_ID/LC_MESSAGES/django.po +1 -1
  686. wagtail/documents/locale/is_IS/LC_MESSAGES/django.po +1 -1
  687. wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
  688. wagtail/documents/locale/it/LC_MESSAGES/django.po +2 -2
  689. wagtail/documents/locale/ja/LC_MESSAGES/django.po +1 -1
  690. wagtail/documents/locale/ka/LC_MESSAGES/django.po +1 -1
  691. wagtail/documents/locale/ko/LC_MESSAGES/django.mo +0 -0
  692. wagtail/documents/locale/ko/LC_MESSAGES/django.po +14 -2
  693. wagtail/documents/locale/lt/LC_MESSAGES/django.po +1 -1
  694. wagtail/documents/locale/lv/LC_MESSAGES/django.po +1 -1
  695. wagtail/documents/locale/mi/LC_MESSAGES/django.po +1 -1
  696. wagtail/documents/locale/mn/LC_MESSAGES/django.po +1 -1
  697. wagtail/documents/locale/my/LC_MESSAGES/django.po +1 -1
  698. wagtail/documents/locale/nb/LC_MESSAGES/django.mo +0 -0
  699. wagtail/documents/locale/nb/LC_MESSAGES/django.po +3 -2
  700. wagtail/documents/locale/nl/LC_MESSAGES/django.mo +0 -0
  701. wagtail/documents/locale/nl/LC_MESSAGES/django.po +2 -2
  702. wagtail/documents/locale/pl/LC_MESSAGES/django.mo +0 -0
  703. wagtail/documents/locale/pl/LC_MESSAGES/django.po +2 -2
  704. wagtail/documents/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  705. wagtail/documents/locale/pt_BR/LC_MESSAGES/django.po +2 -2
  706. wagtail/documents/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  707. wagtail/documents/locale/ro/LC_MESSAGES/django.mo +0 -0
  708. wagtail/documents/locale/ro/LC_MESSAGES/django.po +2 -2
  709. wagtail/documents/locale/ru/LC_MESSAGES/django.mo +0 -0
  710. wagtail/documents/locale/ru/LC_MESSAGES/django.po +5 -2
  711. wagtail/documents/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  712. wagtail/documents/locale/sk_SK/LC_MESSAGES/django.po +2 -2
  713. wagtail/documents/locale/sl/LC_MESSAGES/django.mo +0 -0
  714. wagtail/documents/locale/sl/LC_MESSAGES/django.po +2 -2
  715. wagtail/documents/locale/sv/LC_MESSAGES/django.po +1 -1
  716. wagtail/documents/locale/tet/LC_MESSAGES/django.po +1 -1
  717. wagtail/documents/locale/th/LC_MESSAGES/django.po +1 -1
  718. wagtail/documents/locale/tr/LC_MESSAGES/django.po +1 -1
  719. wagtail/documents/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  720. wagtail/documents/locale/ug/LC_MESSAGES/django.po +1 -1
  721. wagtail/documents/locale/uk/LC_MESSAGES/django.po +1 -1
  722. wagtail/documents/locale/vi/LC_MESSAGES/django.po +1 -1
  723. wagtail/documents/locale/zh/LC_MESSAGES/django.po +1 -1
  724. wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  725. wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.po +3 -2
  726. wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  727. wagtail/documents/rich_text/contentstate.py +1 -0
  728. wagtail/documents/rich_text/editor_html.py +1 -0
  729. wagtail/documents/tests/test_collection_privacy.py +1 -1
  730. wagtail/documents/tests/test_serializers.py +0 -1
  731. wagtail/documents/views/serve.py +0 -15
  732. wagtail/documents/wagtail_hooks.py +2 -17
  733. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  734. wagtail/embeds/rich_text/contentstate.py +1 -0
  735. wagtail/embeds/rich_text/editor_html.py +1 -0
  736. wagtail/embeds/wagtail_hooks.py +1 -1
  737. wagtail/images/formats.py +0 -11
  738. wagtail/images/locale/ar/LC_MESSAGES/django.po +1 -1
  739. wagtail/images/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  740. wagtail/images/locale/be/LC_MESSAGES/django.po +1 -1
  741. wagtail/images/locale/bg/LC_MESSAGES/django.po +1 -1
  742. wagtail/images/locale/bn/LC_MESSAGES/django.po +1 -1
  743. wagtail/images/locale/ca/LC_MESSAGES/django.mo +0 -0
  744. wagtail/images/locale/ca/LC_MESSAGES/django.po +2 -2
  745. wagtail/images/locale/cs/LC_MESSAGES/django.mo +0 -0
  746. wagtail/images/locale/cs/LC_MESSAGES/django.po +3 -2
  747. wagtail/images/locale/cy/LC_MESSAGES/django.po +2 -1
  748. wagtail/images/locale/da/LC_MESSAGES/django.po +1 -1
  749. wagtail/images/locale/de/LC_MESSAGES/django.mo +0 -0
  750. wagtail/images/locale/de/LC_MESSAGES/django.po +3 -2
  751. wagtail/images/locale/dv/LC_MESSAGES/django.po +2 -1
  752. wagtail/images/locale/el/LC_MESSAGES/django.po +1 -1
  753. wagtail/images/locale/en/LC_MESSAGES/django.po +4 -4
  754. wagtail/images/locale/es/LC_MESSAGES/django.po +1 -1
  755. wagtail/images/locale/es_419/LC_MESSAGES/django.po +1 -1
  756. wagtail/images/locale/et/LC_MESSAGES/django.po +1 -1
  757. wagtail/images/locale/eu/LC_MESSAGES/django.po +1 -1
  758. wagtail/images/locale/fa/LC_MESSAGES/django.mo +0 -0
  759. wagtail/images/locale/fa/LC_MESSAGES/django.po +3 -2
  760. wagtail/images/locale/fi/LC_MESSAGES/django.mo +0 -0
  761. wagtail/images/locale/fi/LC_MESSAGES/django.po +2 -2
  762. wagtail/images/locale/fr/LC_MESSAGES/django.mo +0 -0
  763. wagtail/images/locale/fr/LC_MESSAGES/django.po +3 -2
  764. wagtail/images/locale/gl/LC_MESSAGES/django.mo +0 -0
  765. wagtail/images/locale/gl/LC_MESSAGES/django.po +2 -2
  766. wagtail/images/locale/he_IL/LC_MESSAGES/django.po +1 -1
  767. wagtail/images/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  768. wagtail/images/locale/ht/LC_MESSAGES/django.po +1 -1
  769. wagtail/images/locale/hu/LC_MESSAGES/django.mo +0 -0
  770. wagtail/images/locale/hu/LC_MESSAGES/django.po +23 -3
  771. wagtail/images/locale/id_ID/LC_MESSAGES/django.po +1 -1
  772. wagtail/images/locale/is_IS/LC_MESSAGES/django.po +1 -1
  773. wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
  774. wagtail/images/locale/it/LC_MESSAGES/django.po +2 -2
  775. wagtail/images/locale/ja/LC_MESSAGES/django.po +1 -1
  776. wagtail/images/locale/ka/LC_MESSAGES/django.po +1 -1
  777. wagtail/images/locale/ko/LC_MESSAGES/django.mo +0 -0
  778. wagtail/images/locale/ko/LC_MESSAGES/django.po +31 -2
  779. wagtail/images/locale/lt/LC_MESSAGES/django.po +1 -1
  780. wagtail/images/locale/lv/LC_MESSAGES/django.po +1 -1
  781. wagtail/images/locale/mi/LC_MESSAGES/django.po +1 -1
  782. wagtail/images/locale/mn/LC_MESSAGES/django.mo +0 -0
  783. wagtail/images/locale/mn/LC_MESSAGES/django.po +3 -2
  784. wagtail/images/locale/my/LC_MESSAGES/django.po +1 -1
  785. wagtail/images/locale/nb/LC_MESSAGES/django.mo +0 -0
  786. wagtail/images/locale/nb/LC_MESSAGES/django.po +3 -2
  787. wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
  788. wagtail/images/locale/nl/LC_MESSAGES/django.po +4 -5
  789. wagtail/images/locale/pl/LC_MESSAGES/django.mo +0 -0
  790. wagtail/images/locale/pl/LC_MESSAGES/django.po +2 -2
  791. wagtail/images/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  792. wagtail/images/locale/pt_BR/LC_MESSAGES/django.po +2 -2
  793. wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  794. wagtail/images/locale/ro/LC_MESSAGES/django.mo +0 -0
  795. wagtail/images/locale/ro/LC_MESSAGES/django.po +3 -2
  796. wagtail/images/locale/ru/LC_MESSAGES/django.mo +0 -0
  797. wagtail/images/locale/ru/LC_MESSAGES/django.po +5 -2
  798. wagtail/images/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  799. wagtail/images/locale/sk_SK/LC_MESSAGES/django.po +2 -2
  800. wagtail/images/locale/sl/LC_MESSAGES/django.mo +0 -0
  801. wagtail/images/locale/sl/LC_MESSAGES/django.po +2 -2
  802. wagtail/images/locale/sv/LC_MESSAGES/django.mo +0 -0
  803. wagtail/images/locale/sv/LC_MESSAGES/django.po +2 -2
  804. wagtail/images/locale/tet/LC_MESSAGES/django.po +1 -1
  805. wagtail/images/locale/th/LC_MESSAGES/django.po +1 -1
  806. wagtail/images/locale/tr/LC_MESSAGES/django.po +1 -1
  807. wagtail/images/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  808. wagtail/images/locale/ug/LC_MESSAGES/django.po +1 -1
  809. wagtail/images/locale/uk/LC_MESSAGES/django.mo +0 -0
  810. wagtail/images/locale/uk/LC_MESSAGES/django.po +5 -4
  811. wagtail/images/locale/vi/LC_MESSAGES/django.po +1 -1
  812. wagtail/images/locale/zh/LC_MESSAGES/django.po +1 -1
  813. wagtail/images/locale/zh_Hans/LC_MESSAGES/django.po +2 -1
  814. wagtail/images/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  815. wagtail/images/management/commands/wagtail_update_image_renditions.py +1 -1
  816. wagtail/images/models.py +23 -7
  817. wagtail/images/tests/test_admin_views.py +1 -1
  818. wagtail/images/tests/test_models.py +33 -0
  819. wagtail/images/tests/tests.py +0 -6
  820. wagtail/images/wagtail_hooks.py +2 -2
  821. wagtail/locale/af/LC_MESSAGES/django.po +1 -1
  822. wagtail/locale/ar/LC_MESSAGES/django.po +50 -50
  823. wagtail/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  824. wagtail/locale/be/LC_MESSAGES/django.mo +0 -0
  825. wagtail/locale/be/LC_MESSAGES/django.po +52 -51
  826. wagtail/locale/bg/LC_MESSAGES/django.po +4 -4
  827. wagtail/locale/bn/LC_MESSAGES/django.po +1 -1
  828. wagtail/locale/ca/LC_MESSAGES/django.mo +0 -0
  829. wagtail/locale/ca/LC_MESSAGES/django.po +234 -234
  830. wagtail/locale/cs/LC_MESSAGES/django.mo +0 -0
  831. wagtail/locale/cs/LC_MESSAGES/django.po +172 -172
  832. wagtail/locale/cy/LC_MESSAGES/django.po +12 -12
  833. wagtail/locale/da/LC_MESSAGES/django.po +7 -7
  834. wagtail/locale/de/LC_MESSAGES/django.mo +0 -0
  835. wagtail/locale/de/LC_MESSAGES/django.po +237 -236
  836. wagtail/locale/dv/LC_MESSAGES/django.po +216 -215
  837. wagtail/locale/el/LC_MESSAGES/django.po +76 -75
  838. wagtail/locale/en/LC_MESSAGES/django.po +339 -339
  839. wagtail/locale/es/LC_MESSAGES/django.mo +0 -0
  840. wagtail/locale/es/LC_MESSAGES/django.po +192 -192
  841. wagtail/locale/es_419/LC_MESSAGES/django.po +1 -1
  842. wagtail/locale/et/LC_MESSAGES/django.mo +0 -0
  843. wagtail/locale/et/LC_MESSAGES/django.po +173 -173
  844. wagtail/locale/eu/LC_MESSAGES/django.po +1 -1
  845. wagtail/locale/fa/LC_MESSAGES/django.po +50 -50
  846. wagtail/locale/fi/LC_MESSAGES/django.mo +0 -0
  847. wagtail/locale/fi/LC_MESSAGES/django.po +187 -187
  848. wagtail/locale/fr/LC_MESSAGES/django.mo +0 -0
  849. wagtail/locale/fr/LC_MESSAGES/django.po +236 -235
  850. wagtail/locale/gl/LC_MESSAGES/django.mo +0 -0
  851. wagtail/locale/gl/LC_MESSAGES/django.po +235 -235
  852. wagtail/locale/he_IL/LC_MESSAGES/django.po +9 -9
  853. wagtail/locale/hr_HR/LC_MESSAGES/django.po +184 -184
  854. wagtail/locale/hu/LC_MESSAGES/django.mo +0 -0
  855. wagtail/locale/hu/LC_MESSAGES/django.po +251 -229
  856. wagtail/locale/id_ID/LC_MESSAGES/django.po +49 -49
  857. wagtail/locale/is_IS/LC_MESSAGES/django.po +232 -232
  858. wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
  859. wagtail/locale/it/LC_MESSAGES/django.po +224 -224
  860. wagtail/locale/ja/LC_MESSAGES/django.po +110 -110
  861. wagtail/locale/ka/LC_MESSAGES/django.po +4 -4
  862. wagtail/locale/ko/LC_MESSAGES/django.mo +0 -0
  863. wagtail/locale/ko/LC_MESSAGES/django.po +88 -53
  864. wagtail/locale/lt/LC_MESSAGES/django.po +53 -53
  865. wagtail/locale/lv/LC_MESSAGES/django.po +22 -22
  866. wagtail/locale/mi/LC_MESSAGES/django.po +167 -167
  867. wagtail/locale/mn/LC_MESSAGES/django.mo +0 -0
  868. wagtail/locale/mn/LC_MESSAGES/django.po +51 -50
  869. wagtail/locale/my/LC_MESSAGES/django.po +6 -6
  870. wagtail/locale/nb/LC_MESSAGES/django.po +50 -50
  871. wagtail/locale/nl/LC_MESSAGES/django.mo +0 -0
  872. wagtail/locale/nl/LC_MESSAGES/django.po +233 -233
  873. wagtail/locale/pl/LC_MESSAGES/django.mo +0 -0
  874. wagtail/locale/pl/LC_MESSAGES/django.po +232 -232
  875. wagtail/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  876. wagtail/locale/pt_BR/LC_MESSAGES/django.po +202 -202
  877. wagtail/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  878. wagtail/locale/pt_PT/LC_MESSAGES/django.po +180 -178
  879. wagtail/locale/ro/LC_MESSAGES/django.mo +0 -0
  880. wagtail/locale/ro/LC_MESSAGES/django.po +233 -232
  881. wagtail/locale/ru/LC_MESSAGES/django.mo +0 -0
  882. wagtail/locale/ru/LC_MESSAGES/django.po +237 -234
  883. wagtail/locale/sk_SK/LC_MESSAGES/django.po +47 -47
  884. wagtail/locale/sl/LC_MESSAGES/django.mo +0 -0
  885. wagtail/locale/sl/LC_MESSAGES/django.po +233 -233
  886. wagtail/locale/sv/LC_MESSAGES/django.mo +0 -0
  887. wagtail/locale/sv/LC_MESSAGES/django.po +207 -207
  888. wagtail/locale/tet/LC_MESSAGES/django.po +37 -37
  889. wagtail/locale/th/LC_MESSAGES/django.mo +0 -0
  890. wagtail/locale/th/LC_MESSAGES/django.po +54 -53
  891. wagtail/locale/tr/LC_MESSAGES/django.po +50 -50
  892. wagtail/locale/tr_TR/LC_MESSAGES/django.po +50 -50
  893. wagtail/locale/ug/LC_MESSAGES/django.po +232 -232
  894. wagtail/locale/uk/LC_MESSAGES/django.mo +0 -0
  895. wagtail/locale/uk/LC_MESSAGES/django.po +185 -185
  896. wagtail/locale/vi/LC_MESSAGES/django.mo +0 -0
  897. wagtail/locale/vi/LC_MESSAGES/django.po +20 -19
  898. wagtail/locale/zh/LC_MESSAGES/django.po +4 -4
  899. wagtail/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  900. wagtail/locale/zh_Hans/LC_MESSAGES/django.po +189 -189
  901. wagtail/locale/zh_Hant/LC_MESSAGES/django.po +161 -161
  902. wagtail/locales/locale/ar/LC_MESSAGES/django.po +1 -1
  903. wagtail/locales/locale/be/LC_MESSAGES/django.po +1 -1
  904. wagtail/locales/locale/bg/LC_MESSAGES/django.po +1 -1
  905. wagtail/locales/locale/ca/LC_MESSAGES/django.po +1 -1
  906. wagtail/locales/locale/cs/LC_MESSAGES/django.po +1 -1
  907. wagtail/locales/locale/cy/LC_MESSAGES/django.po +1 -1
  908. wagtail/locales/locale/da/LC_MESSAGES/django.po +1 -1
  909. wagtail/locales/locale/de/LC_MESSAGES/django.po +1 -1
  910. wagtail/locales/locale/dv/LC_MESSAGES/django.po +1 -1
  911. wagtail/locales/locale/el/LC_MESSAGES/django.po +1 -1
  912. wagtail/locales/locale/en/LC_MESSAGES/django.po +26 -14
  913. wagtail/locales/locale/es/LC_MESSAGES/django.po +1 -1
  914. wagtail/locales/locale/et/LC_MESSAGES/django.po +1 -1
  915. wagtail/locales/locale/fa/LC_MESSAGES/django.po +1 -1
  916. wagtail/locales/locale/fi/LC_MESSAGES/django.po +1 -1
  917. wagtail/locales/locale/fr/LC_MESSAGES/django.mo +0 -0
  918. wagtail/locales/locale/fr/LC_MESSAGES/django.po +14 -2
  919. wagtail/locales/locale/gl/LC_MESSAGES/django.mo +0 -0
  920. wagtail/locales/locale/gl/LC_MESSAGES/django.po +13 -3
  921. wagtail/locales/locale/he_IL/LC_MESSAGES/django.po +1 -1
  922. wagtail/locales/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  923. wagtail/locales/locale/hu/LC_MESSAGES/django.po +1 -1
  924. wagtail/locales/locale/id_ID/LC_MESSAGES/django.po +1 -1
  925. wagtail/locales/locale/is_IS/LC_MESSAGES/django.po +1 -1
  926. wagtail/locales/locale/it/LC_MESSAGES/django.po +1 -1
  927. wagtail/locales/locale/ja/LC_MESSAGES/django.po +1 -1
  928. wagtail/locales/locale/ko/LC_MESSAGES/django.po +1 -1
  929. wagtail/locales/locale/lt/LC_MESSAGES/django.po +1 -1
  930. wagtail/locales/locale/lv/LC_MESSAGES/django.po +1 -1
  931. wagtail/locales/locale/mi/LC_MESSAGES/django.po +1 -1
  932. wagtail/locales/locale/mn/LC_MESSAGES/django.po +1 -1
  933. wagtail/locales/locale/my/LC_MESSAGES/django.po +1 -1
  934. wagtail/locales/locale/nb/LC_MESSAGES/django.po +1 -1
  935. wagtail/locales/locale/nl/LC_MESSAGES/django.po +1 -1
  936. wagtail/locales/locale/pl/LC_MESSAGES/django.po +1 -1
  937. wagtail/locales/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  938. wagtail/locales/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  939. wagtail/locales/locale/ro/LC_MESSAGES/django.po +1 -1
  940. wagtail/locales/locale/ru/LC_MESSAGES/django.po +1 -1
  941. wagtail/locales/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  942. wagtail/locales/locale/sl/LC_MESSAGES/django.po +1 -1
  943. wagtail/locales/locale/sv/LC_MESSAGES/django.po +1 -1
  944. wagtail/locales/locale/tet/LC_MESSAGES/django.po +1 -1
  945. wagtail/locales/locale/th/LC_MESSAGES/django.po +1 -1
  946. wagtail/locales/locale/tr/LC_MESSAGES/django.po +1 -1
  947. wagtail/locales/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  948. wagtail/locales/locale/ug/LC_MESSAGES/django.po +1 -1
  949. wagtail/locales/locale/uk/LC_MESSAGES/django.po +1 -1
  950. wagtail/locales/locale/vi/LC_MESSAGES/django.po +1 -1
  951. wagtail/locales/locale/zh/LC_MESSAGES/django.po +1 -1
  952. wagtail/locales/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  953. wagtail/locales/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  954. wagtail/locales/tests.py +32 -1
  955. wagtail/locales/views.py +39 -7
  956. wagtail/models/__init__.py +67 -5002
  957. wagtail/models/audit_log.py +1 -1
  958. wagtail/models/content_types.py +11 -0
  959. wagtail/models/draft_state.py +197 -0
  960. wagtail/models/locking.py +82 -0
  961. wagtail/models/orderable.py +10 -0
  962. wagtail/models/pages.py +2754 -0
  963. wagtail/models/preview.py +281 -0
  964. wagtail/models/reference_index.py +1 -1
  965. wagtail/models/revisions.py +433 -0
  966. wagtail/models/view_restrictions.py +3 -3
  967. wagtail/models/workflows.py +1348 -0
  968. wagtail/project_template/home/apps.py +6 -0
  969. wagtail/project_template/manage.py-tpl +22 -0
  970. wagtail/project_template/project_name/settings/base.py +1 -0
  971. wagtail/project_template/requirements.txt +2 -2
  972. wagtail/search/backends/base.py +4 -0
  973. wagtail/search/backends/database/mysql/query.py +8 -4
  974. wagtail/search/backends/elasticsearch7.py +17 -7
  975. wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
  976. wagtail/search/tests/elasticsearch_common_tests.py +43 -0
  977. wagtail/search/tests/test_backends.py +43 -13
  978. wagtail/search/tests/test_mysql_backend.py +22 -0
  979. wagtail/search/tests/test_page_search.py +2 -1
  980. wagtail/search/tests/test_queries.py +2 -2
  981. wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
  982. wagtail/snippets/action_menu.py +9 -30
  983. wagtail/snippets/locale/af/LC_MESSAGES/django.po +1 -1
  984. wagtail/snippets/locale/ar/LC_MESSAGES/django.po +4 -4
  985. wagtail/snippets/locale/az_AZ/LC_MESSAGES/django.po +4 -4
  986. wagtail/snippets/locale/be/LC_MESSAGES/django.mo +0 -0
  987. wagtail/snippets/locale/be/LC_MESSAGES/django.po +6 -5
  988. wagtail/snippets/locale/bg/LC_MESSAGES/django.po +4 -4
  989. wagtail/snippets/locale/bn/LC_MESSAGES/django.po +4 -4
  990. wagtail/snippets/locale/ca/LC_MESSAGES/django.mo +0 -0
  991. wagtail/snippets/locale/ca/LC_MESSAGES/django.po +5 -5
  992. wagtail/snippets/locale/cs/LC_MESSAGES/django.po +5 -4
  993. wagtail/snippets/locale/cy/LC_MESSAGES/django.po +5 -4
  994. wagtail/snippets/locale/da/LC_MESSAGES/django.po +4 -4
  995. wagtail/snippets/locale/de/LC_MESSAGES/django.mo +0 -0
  996. wagtail/snippets/locale/de/LC_MESSAGES/django.po +6 -5
  997. wagtail/snippets/locale/dv/LC_MESSAGES/django.po +5 -4
  998. wagtail/snippets/locale/el/LC_MESSAGES/django.po +5 -4
  999. wagtail/snippets/locale/en/LC_MESSAGES/django.po +31 -23
  1000. wagtail/snippets/locale/en_IN/LC_MESSAGES/django.po +1 -1
  1001. wagtail/snippets/locale/es/LC_MESSAGES/django.mo +0 -0
  1002. wagtail/snippets/locale/es/LC_MESSAGES/django.po +6 -5
  1003. wagtail/snippets/locale/es_419/LC_MESSAGES/django.po +4 -4
  1004. wagtail/snippets/locale/es_VE/LC_MESSAGES/django.po +1 -1
  1005. wagtail/snippets/locale/et/LC_MESSAGES/django.po +4 -4
  1006. wagtail/snippets/locale/eu/LC_MESSAGES/django.po +1 -1
  1007. wagtail/snippets/locale/fa/LC_MESSAGES/django.mo +0 -0
  1008. wagtail/snippets/locale/fa/LC_MESSAGES/django.po +6 -5
  1009. wagtail/snippets/locale/fi/LC_MESSAGES/django.mo +0 -0
  1010. wagtail/snippets/locale/fi/LC_MESSAGES/django.po +6 -5
  1011. wagtail/snippets/locale/fr/LC_MESSAGES/django.mo +0 -0
  1012. wagtail/snippets/locale/fr/LC_MESSAGES/django.po +13 -6
  1013. wagtail/snippets/locale/gl/LC_MESSAGES/django.mo +0 -0
  1014. wagtail/snippets/locale/gl/LC_MESSAGES/django.po +11 -5
  1015. wagtail/snippets/locale/he_IL/LC_MESSAGES/django.po +4 -4
  1016. wagtail/snippets/locale/hi/LC_MESSAGES/django.po +1 -1
  1017. wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.po +4 -4
  1018. wagtail/snippets/locale/ht/LC_MESSAGES/django.po +1 -1
  1019. wagtail/snippets/locale/hu/LC_MESSAGES/django.po +4 -4
  1020. wagtail/snippets/locale/id_ID/LC_MESSAGES/django.po +4 -4
  1021. wagtail/snippets/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  1022. wagtail/snippets/locale/is_IS/LC_MESSAGES/django.po +5 -6
  1023. wagtail/snippets/locale/it/LC_MESSAGES/django.mo +0 -0
  1024. wagtail/snippets/locale/it/LC_MESSAGES/django.po +5 -5
  1025. wagtail/snippets/locale/ja/LC_MESSAGES/django.mo +0 -0
  1026. wagtail/snippets/locale/ja/LC_MESSAGES/django.po +6 -5
  1027. wagtail/snippets/locale/ka/LC_MESSAGES/django.po +4 -4
  1028. wagtail/snippets/locale/ko/LC_MESSAGES/django.po +4 -4
  1029. wagtail/snippets/locale/lt/LC_MESSAGES/django.po +4 -4
  1030. wagtail/snippets/locale/lv/LC_MESSAGES/django.po +4 -4
  1031. wagtail/snippets/locale/mi/LC_MESSAGES/django.po +4 -4
  1032. wagtail/snippets/locale/mn/LC_MESSAGES/django.po +4 -4
  1033. wagtail/snippets/locale/my/LC_MESSAGES/django.po +4 -4
  1034. wagtail/snippets/locale/nb/LC_MESSAGES/django.po +5 -4
  1035. wagtail/snippets/locale/nl/LC_MESSAGES/django.mo +0 -0
  1036. wagtail/snippets/locale/nl/LC_MESSAGES/django.po +5 -5
  1037. wagtail/snippets/locale/pl/LC_MESSAGES/django.mo +0 -0
  1038. wagtail/snippets/locale/pl/LC_MESSAGES/django.po +5 -5
  1039. wagtail/snippets/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  1040. wagtail/snippets/locale/pt_BR/LC_MESSAGES/django.po +7 -5
  1041. wagtail/snippets/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  1042. wagtail/snippets/locale/pt_PT/LC_MESSAGES/django.po +7 -5
  1043. wagtail/snippets/locale/ro/LC_MESSAGES/django.mo +0 -0
  1044. wagtail/snippets/locale/ro/LC_MESSAGES/django.po +6 -5
  1045. wagtail/snippets/locale/ru/LC_MESSAGES/django.mo +0 -0
  1046. wagtail/snippets/locale/ru/LC_MESSAGES/django.po +6 -5
  1047. wagtail/snippets/locale/sk_SK/LC_MESSAGES/django.po +4 -4
  1048. wagtail/snippets/locale/sl/LC_MESSAGES/django.mo +0 -0
  1049. wagtail/snippets/locale/sl/LC_MESSAGES/django.po +5 -5
  1050. wagtail/snippets/locale/sr/LC_MESSAGES/django.po +1 -1
  1051. wagtail/snippets/locale/sv/LC_MESSAGES/django.mo +0 -0
  1052. wagtail/snippets/locale/sv/LC_MESSAGES/django.po +5 -5
  1053. wagtail/snippets/locale/ta/LC_MESSAGES/django.po +1 -1
  1054. wagtail/snippets/locale/tet/LC_MESSAGES/django.po +4 -4
  1055. wagtail/snippets/locale/th/LC_MESSAGES/django.mo +0 -0
  1056. wagtail/snippets/locale/th/LC_MESSAGES/django.po +6 -5
  1057. wagtail/snippets/locale/tr/LC_MESSAGES/django.po +4 -4
  1058. wagtail/snippets/locale/tr_TR/LC_MESSAGES/django.po +4 -4
  1059. wagtail/snippets/locale/ug/LC_MESSAGES/django.po +4 -4
  1060. wagtail/snippets/locale/uk/LC_MESSAGES/django.mo +0 -0
  1061. wagtail/snippets/locale/uk/LC_MESSAGES/django.po +6 -6
  1062. wagtail/snippets/locale/vi/LC_MESSAGES/django.po +4 -4
  1063. wagtail/snippets/locale/zh/LC_MESSAGES/django.po +4 -4
  1064. wagtail/snippets/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  1065. wagtail/snippets/locale/zh_Hans/LC_MESSAGES/django.po +6 -5
  1066. wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po +4 -4
  1067. wagtail/snippets/permissions.py +6 -4
  1068. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  1069. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  1070. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/publish.html +3 -5
  1071. wagtail/snippets/tests/test_preview.py +62 -38
  1072. wagtail/snippets/tests/test_snippets.py +313 -130
  1073. wagtail/snippets/tests/test_viewset.py +69 -6
  1074. wagtail/snippets/tests/test_workflows.py +0 -4
  1075. wagtail/snippets/views/snippets.py +29 -53
  1076. wagtail/snippets/wagtail_hooks.py +3 -7
  1077. wagtail/test/apps.py +5 -0
  1078. wagtail/test/context_processors.py +19 -0
  1079. wagtail/test/customuser/forms.py +19 -0
  1080. wagtail/test/customuser/viewsets.py +12 -0
  1081. wagtail/test/settings.py +8 -9
  1082. wagtail/test/testapp/migrations/0046_alter_custom_rendition_to_unique_constraint.py +24 -0
  1083. wagtail/test/testapp/migrations/{0046_advertwithcustomuuidprimarykey_page.py → 0047_advertwithcustomuuidprimarykey_page.py} +1 -1
  1084. wagtail/test/testapp/migrations/0048_requireddatepage.py +36 -0
  1085. wagtail/test/testapp/migrations/0049_promotionalpage.py +35 -0
  1086. wagtail/test/testapp/migrations/0050_headcountrelatedmodelusingpk_related_page.py +25 -0
  1087. wagtail/test/testapp/migrations/0051_userapprovaltaskstate_userapprovaltask.py +59 -0
  1088. wagtail/test/testapp/models.py +183 -26
  1089. wagtail/test/testapp/templates/tests/workflows/approve_with_style.html +6 -0
  1090. wagtail/test/testapp/views.py +7 -1
  1091. wagtail/test/testapp/wagtail_hooks.py +6 -0
  1092. wagtail/test/utils/form_data.py +1 -0
  1093. wagtail/tests/test_blocks.py +0 -18
  1094. wagtail/tests/test_management_commands.py +1 -1
  1095. wagtail/tests/test_page_model.py +27 -0
  1096. wagtail/tests/test_page_privacy.py +1 -1
  1097. wagtail/tests/test_reference_index.py +26 -0
  1098. wagtail/tests/test_streamfield.py +136 -0
  1099. wagtail/tests/test_utils.py +1 -23
  1100. wagtail/users/forms.py +3 -17
  1101. wagtail/users/locale/ar/LC_MESSAGES/django.po +1 -1
  1102. wagtail/users/locale/be/LC_MESSAGES/django.mo +0 -0
  1103. wagtail/users/locale/be/LC_MESSAGES/django.po +3 -2
  1104. wagtail/users/locale/bg/LC_MESSAGES/django.po +1 -1
  1105. wagtail/users/locale/bn/LC_MESSAGES/django.po +1 -1
  1106. wagtail/users/locale/ca/LC_MESSAGES/django.mo +0 -0
  1107. wagtail/users/locale/ca/LC_MESSAGES/django.po +2 -2
  1108. wagtail/users/locale/cs/LC_MESSAGES/django.po +2 -1
  1109. wagtail/users/locale/cy/LC_MESSAGES/django.po +2 -1
  1110. wagtail/users/locale/da/LC_MESSAGES/django.po +1 -1
  1111. wagtail/users/locale/de/LC_MESSAGES/django.mo +0 -0
  1112. wagtail/users/locale/de/LC_MESSAGES/django.po +3 -3
  1113. wagtail/users/locale/dv/LC_MESSAGES/django.po +2 -1
  1114. wagtail/users/locale/el/LC_MESSAGES/django.po +1 -1
  1115. wagtail/users/locale/en/LC_MESSAGES/django.po +71 -71
  1116. wagtail/users/locale/es/LC_MESSAGES/django.po +1 -1
  1117. wagtail/users/locale/es_419/LC_MESSAGES/django.po +1 -1
  1118. wagtail/users/locale/et/LC_MESSAGES/django.po +1 -1
  1119. wagtail/users/locale/eu/LC_MESSAGES/django.po +1 -1
  1120. wagtail/users/locale/fa/LC_MESSAGES/django.mo +0 -0
  1121. wagtail/users/locale/fa/LC_MESSAGES/django.po +3 -2
  1122. wagtail/users/locale/fi/LC_MESSAGES/django.mo +0 -0
  1123. wagtail/users/locale/fi/LC_MESSAGES/django.po +2 -2
  1124. wagtail/users/locale/fr/LC_MESSAGES/django.mo +0 -0
  1125. wagtail/users/locale/fr/LC_MESSAGES/django.po +4 -2
  1126. wagtail/users/locale/gl/LC_MESSAGES/django.mo +0 -0
  1127. wagtail/users/locale/gl/LC_MESSAGES/django.po +2 -2
  1128. wagtail/users/locale/he_IL/LC_MESSAGES/django.po +1 -1
  1129. wagtail/users/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  1130. wagtail/users/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  1131. wagtail/users/locale/hu/LC_MESSAGES/django.mo +0 -0
  1132. wagtail/users/locale/hu/LC_MESSAGES/django.po +45 -3
  1133. wagtail/users/locale/hy/LC_MESSAGES/django.po +1 -1
  1134. wagtail/users/locale/id_ID/LC_MESSAGES/django.po +1 -1
  1135. wagtail/users/locale/is_IS/LC_MESSAGES/django.po +1 -1
  1136. wagtail/users/locale/it/LC_MESSAGES/django.mo +0 -0
  1137. wagtail/users/locale/it/LC_MESSAGES/django.po +2 -2
  1138. wagtail/users/locale/ja/LC_MESSAGES/django.po +1 -1
  1139. wagtail/users/locale/ka/LC_MESSAGES/django.po +1 -1
  1140. wagtail/users/locale/ko/LC_MESSAGES/django.mo +0 -0
  1141. wagtail/users/locale/ko/LC_MESSAGES/django.po +47 -2
  1142. wagtail/users/locale/lt/LC_MESSAGES/django.po +1 -1
  1143. wagtail/users/locale/lv/LC_MESSAGES/django.po +1 -1
  1144. wagtail/users/locale/mi/LC_MESSAGES/django.po +1 -1
  1145. wagtail/users/locale/mn/LC_MESSAGES/django.mo +0 -0
  1146. wagtail/users/locale/mn/LC_MESSAGES/django.po +3 -2
  1147. wagtail/users/locale/my/LC_MESSAGES/django.po +1 -1
  1148. wagtail/users/locale/nb/LC_MESSAGES/django.po +2 -1
  1149. wagtail/users/locale/nl/LC_MESSAGES/django.mo +0 -0
  1150. wagtail/users/locale/nl/LC_MESSAGES/django.po +3 -2
  1151. wagtail/users/locale/pl/LC_MESSAGES/django.mo +0 -0
  1152. wagtail/users/locale/pl/LC_MESSAGES/django.po +2 -2
  1153. wagtail/users/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  1154. wagtail/users/locale/pt_BR/LC_MESSAGES/django.po +3 -2
  1155. wagtail/users/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  1156. wagtail/users/locale/pt_PT/LC_MESSAGES/django.po +3 -2
  1157. wagtail/users/locale/ro/LC_MESSAGES/django.mo +0 -0
  1158. wagtail/users/locale/ro/LC_MESSAGES/django.po +3 -2
  1159. wagtail/users/locale/ru/LC_MESSAGES/django.mo +0 -0
  1160. wagtail/users/locale/ru/LC_MESSAGES/django.po +4 -2
  1161. wagtail/users/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  1162. wagtail/users/locale/sk_SK/LC_MESSAGES/django.po +2 -2
  1163. wagtail/users/locale/sl/LC_MESSAGES/django.mo +0 -0
  1164. wagtail/users/locale/sl/LC_MESSAGES/django.po +2 -2
  1165. wagtail/users/locale/sv/LC_MESSAGES/django.mo +0 -0
  1166. wagtail/users/locale/sv/LC_MESSAGES/django.po +2 -2
  1167. wagtail/users/locale/tet/LC_MESSAGES/django.po +1 -1
  1168. wagtail/users/locale/th/LC_MESSAGES/django.mo +0 -0
  1169. wagtail/users/locale/th/LC_MESSAGES/django.po +3 -2
  1170. wagtail/users/locale/tr/LC_MESSAGES/django.po +1 -1
  1171. wagtail/users/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1172. wagtail/users/locale/ug/LC_MESSAGES/django.po +1 -1
  1173. wagtail/users/locale/uk/LC_MESSAGES/django.mo +0 -0
  1174. wagtail/users/locale/uk/LC_MESSAGES/django.po +3 -2
  1175. wagtail/users/locale/vi/LC_MESSAGES/django.po +2 -1
  1176. wagtail/users/locale/zh/LC_MESSAGES/django.po +1 -1
  1177. wagtail/users/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  1178. wagtail/users/locale/zh_Hans/LC_MESSAGES/django.po +3 -2
  1179. wagtail/users/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1180. wagtail/users/models.py +7 -1
  1181. wagtail/users/templatetags/wagtailusers_tags.py +0 -29
  1182. wagtail/users/tests/__init__.py +0 -6
  1183. wagtail/users/tests/test_admin_views.py +285 -611
  1184. wagtail/users/views/groups.py +1 -28
  1185. wagtail/users/views/users.py +3 -45
  1186. wagtail/utils/deprecation.py +3 -3
  1187. wagtail/whitelist.py +1 -0
  1188. wagtail/workflows.py +2 -2
  1189. wagtail-7.0rc1.dist-info/METADATA +224 -0
  1190. {wagtail-6.4.1.dist-info → wagtail-7.0rc1.dist-info}/RECORD +1194 -1174
  1191. {wagtail-6.4.1.dist-info → wagtail-7.0rc1.dist-info}/WHEEL +1 -1
  1192. wagtail/admin/templates/wagtailadmin/shared/ajax_pagination_nav.html +0 -25
  1193. wagtail/project_template/manage.py +0 -10
  1194. wagtail/utils/setup.py +0 -90
  1195. wagtail/utils/widgets.py +0 -46
  1196. wagtail-6.4.1.dist-info/METADATA +0 -77
  1197. {wagtail-6.4.1.dist-info → wagtail-7.0rc1.dist-info}/entry_points.txt +0 -0
  1198. {wagtail-6.4.1.dist-info → wagtail-7.0rc1.dist-info/licenses}/LICENSE +0 -0
  1199. {wagtail-6.4.1.dist-info → wagtail-7.0rc1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,86 @@
1
+ from django.test import TestCase
2
+
3
+ from wagtail.admin.paginator import WagtailPaginator
4
+
5
+
6
+ class TestWagtailPaginator(TestCase):
7
+ def test_elided_page_range(self):
8
+ """
9
+ Test the get_elided_page_range method of WagtailPaginator.
10
+
11
+ For example, if there are 10 pages, the output should be:
12
+ At page 1: 1 2 3 4 … 10
13
+ At page 6: 1 … 6 7 … 10
14
+ At page 10: 1 … 7 8 9 10
15
+ """
16
+
17
+ ellipsis = WagtailPaginator.ELLIPSIS
18
+
19
+ test_cases = [
20
+ # Format: (total pages, current page, num_page_buttons, [expected elided page range])
21
+ # Examples of test cases that should fail:
22
+ # (3, 1, 6, [1, 2]), # Too few pages
23
+ # (10, 1, 6, [1, 2, 3, 4, ellipsis, 9, 10]), # Too many pages
24
+ # (10, 6, 6, [1, ellipsis, 5, 6, ellipsis, 10]), # Wrong middle position
25
+ # (10, 10, 6, [1, ellipsis, 7, 8, 9]), # Too few pages
26
+ # num_page_buttons=4
27
+ # If the number of page buttons is less than 5, the elided range should be empty.
28
+ (10, 3, 4, []),
29
+ # num_page_buttons=5
30
+ (1, 1, 5, [1]),
31
+ (3, 1, 5, [1, 2, 3]),
32
+ (3, 3, 5, [1, 2, 3]),
33
+ (5, 2, 5, [1, 2, 3, 4, 5]),
34
+ (10, 1, 5, [1, 2, 3, ellipsis, 10]),
35
+ (10, 6, 5, [1, ellipsis, 6, ellipsis, 10]),
36
+ (10, 10, 5, [1, ellipsis, 8, 9, 10]),
37
+ # Our default number of page buttons.
38
+ # num_page_buttons=6
39
+ (1, 1, 6, [1]),
40
+ (3, 1, 6, [1, 2, 3]),
41
+ (3, 3, 6, [1, 2, 3]),
42
+ (6, 2, 6, [1, 2, 3, 4, 5, 6]),
43
+ (6, 6, 6, [1, 2, 3, 4, 5, 6]),
44
+ (10, 1, 6, [1, 2, 3, 4, ellipsis, 10]),
45
+ (10, 6, 6, [1, ellipsis, 6, 7, ellipsis, 10]),
46
+ (10, 10, 6, [1, ellipsis, 7, 8, 9, 10]),
47
+ # num_page_buttons=7
48
+ (7, 2, 7, [1, 2, 3, 4, 5, 6, 7]),
49
+ (10, 1, 7, [1, 2, 3, 4, 5, ellipsis, 10]),
50
+ (10, 6, 7, [1, ellipsis, 5, 6, 7, ellipsis, 10]),
51
+ (10, 10, 7, [1, ellipsis, 6, 7, 8, 9, 10]),
52
+ # num_page_buttons=8
53
+ (8, 3, 8, [1, 2, 3, 4, 5, 6, 7, 8]),
54
+ (10, 1, 8, [1, 2, 3, 4, 5, 6, ellipsis, 10]),
55
+ (20, 6, 8, [1, ellipsis, 5, 6, 7, 8, ellipsis, 20]),
56
+ (10, 10, 8, [1, ellipsis, 5, 6, 7, 8, 9, 10]),
57
+ # num_page_buttons=9
58
+ (9, 3, 9, [1, 2, 3, 4, 5, 6, 7, 8, 9]),
59
+ (10, 1, 9, [1, 2, 3, 4, 5, 6, 7, ellipsis, 10]),
60
+ (10, 6, 9, [1, ellipsis, 4, 5, 6, 7, 8, 9, 10]),
61
+ (20, 6, 9, [1, ellipsis, 4, 5, 6, 7, 8, ellipsis, 20]),
62
+ (10, 10, 9, [1, ellipsis, 4, 5, 6, 7, 8, 9, 10]),
63
+ # num_page_buttons=10
64
+ (10, 3, 10, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
65
+ (10, 1, 10, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
66
+ (10, 6, 10, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
67
+ (20, 6, 10, [1, ellipsis, 4, 5, 6, 7, 8, 9, ellipsis, 20]),
68
+ (10, 10, 10, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
69
+ ]
70
+
71
+ for (
72
+ total_pages,
73
+ current_page,
74
+ num_page_buttons,
75
+ expected_elided_page_range,
76
+ ) in test_cases:
77
+ paginator = WagtailPaginator(
78
+ list(range(total_pages)), 1
79
+ ) # 1 object per page
80
+ paginator.num_page_buttons = num_page_buttons
81
+ elided_page_range = paginator.get_elided_page_range(current_page)
82
+ self.assertSequenceEqual(
83
+ list(elided_page_range),
84
+ expected_elided_page_range,
85
+ f"Elided page range failed for total_pages={total_pages}, current_page={current_page}, num_page_buttons={num_page_buttons}",
86
+ )
@@ -2,6 +2,7 @@ from django.contrib.auth.models import Group
2
2
  from django.test import TestCase, override_settings
3
3
  from django.urls import reverse
4
4
 
5
+ from wagtail.admin.staticfiles import versioned_static
5
6
  from wagtail.models import Page, PageViewRestriction
6
7
  from wagtail.test.testapp.models import SimplePage
7
8
  from wagtail.test.utils import WagtailTestUtils
@@ -120,7 +121,8 @@ class TestSetPrivacyView(WagtailTestUtils, TestCase):
120
121
  )
121
122
  html = response.json()["html"]
122
123
  self.assertIn(
123
- f'<span>Privacy is inherited from the ancestor page - <a href="{parent_edit_url }">Private page (simple page)</a></span>',
124
+ f"<span>Privacy is inherited from the ancestor page - "
125
+ f'<a href="{parent_edit_url}">Private page (simple page)</a></span>',
124
126
  html,
125
127
  )
126
128
 
@@ -503,9 +505,13 @@ class TestPrivacyIndicators(WagtailTestUtils, TestCase):
503
505
 
504
506
  soup = self.get_soup(response.content)
505
507
 
508
+ privacy_switch_js = versioned_static("wagtailadmin/js/privacy-switch.js")
509
+
506
510
  public_link = soup.select_one('[data-w-zone-switch-key-value="isPublic"]')
507
511
  private_link = soup.select_one('[data-w-zone-switch-key-value="!isPublic"]')
512
+ scripts = soup.select(f"script[src='{privacy_switch_js}']")
508
513
 
514
+ self.assertEqual(len(scripts), 1)
509
515
  # Check the privacy indicator is public
510
516
  self.assertEqual(public_link["class"], ["page-status-tag"])
511
517
 
@@ -524,8 +530,13 @@ class TestPrivacyIndicators(WagtailTestUtils, TestCase):
524
530
 
525
531
  soup = self.get_soup(response.content)
526
532
 
533
+ privacy_switch_js = versioned_static("wagtailadmin/js/privacy-switch.js")
534
+
527
535
  public_link = soup.select_one('[data-w-zone-switch-key-value="isPublic"]')
528
536
  private_link = soup.select_one('[data-w-zone-switch-key-value="!isPublic"]')
537
+ scripts = soup.select(f"script[src='{privacy_switch_js}']")
538
+
539
+ self.assertEqual(len(scripts), 1)
529
540
 
530
541
  # Check the privacy indicator is private
531
542
  self.assertEqual(private_link["class"], ["page-status-tag"])
@@ -33,7 +33,6 @@ from wagtail.test.testapp.models import (
33
33
  )
34
34
  from wagtail.test.utils import WagtailTestUtils
35
35
  from wagtail.test.utils.template_tests import AdminTemplateTestUtils
36
- from wagtail.utils.deprecation import RemovedInWagtail70Warning
37
36
 
38
37
 
39
38
  class BaseReportViewTestCase(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
@@ -793,13 +792,14 @@ class TestFilteredLogEntriesView(BaseReportViewTestCase):
793
792
  def test_decorated_queryset(self):
794
793
  # Ensure that decorate_paginated_queryset is only called with the queryset for the current
795
794
  # page, instead of all objects over all pages.
796
- with mock.patch.object(
797
- LogEntriesView,
798
- "decorate_paginated_queryset",
799
- side_effect=LogEntriesView.decorate_paginated_queryset,
800
- autospec=True,
801
- ) as decorate_paginated_queryset, mock.patch.object(
802
- LogEntriesView, "paginate_by", return_value=1
795
+ with (
796
+ mock.patch.object(
797
+ LogEntriesView,
798
+ "decorate_paginated_queryset",
799
+ side_effect=LogEntriesView.decorate_paginated_queryset,
800
+ autospec=True,
801
+ ) as decorate_paginated_queryset,
802
+ mock.patch.object(LogEntriesView, "paginate_by", return_value=1),
803
803
  ):
804
804
  response = self.get()
805
805
  decorate_paginated_queryset.assert_called_once()
@@ -808,41 +808,6 @@ class TestFilteredLogEntriesView(BaseReportViewTestCase):
808
808
 
809
809
  self.assertEqual(response.status_code, 200)
810
810
 
811
- def test_deprecated_title_attribute(self):
812
- # Remove this test when the deprecation ends
813
- with mock.patch.object(
814
- LogEntriesView,
815
- "page_title",
816
- return_value=None,
817
- new_callable=mock.PropertyMock,
818
- ), mock.patch.object(
819
- LogEntriesView,
820
- "title",
821
- return_value="Deprecated page title",
822
- new_callable=mock.PropertyMock,
823
- ):
824
- with self.assertWarnsMessage(
825
- RemovedInWagtail70Warning,
826
- "The `title` attribute in `LogEntriesView` (a `ReportView` subclass) is "
827
- "deprecated. Use `page_title` instead.",
828
- ):
829
- self.assertEqual(LogEntriesView.title, "Deprecated page title")
830
- self.assertIsNone(LogEntriesView.page_title)
831
- response = self.get()
832
- self.assertEqual(response.status_code, 200)
833
- self.assertPageTitle(
834
- self.get_soup(response.content),
835
- "Deprecated page title - Wagtail",
836
- )
837
- self.assertEqual(
838
- response.context["page_title"],
839
- "Deprecated page title",
840
- )
841
- self.assertEqual(
842
- response.context["title"],
843
- "Deprecated page title",
844
- )
845
-
846
811
 
847
812
  class TestFilteredLogEntriesResultsView(TestFilteredLogEntriesView):
848
813
  url_name = "wagtailadmin_reports:site_history_results"
@@ -4,6 +4,7 @@ from django.conf import settings
4
4
  from django.test import SimpleTestCase, TestCase
5
5
  from django.test.utils import override_settings
6
6
  from django.urls import reverse, reverse_lazy
7
+ from django.utils import translation
7
8
 
8
9
  from wagtail.admin.rich_text import DraftailRichTextArea, get_rich_text_editor_widget
9
10
  from wagtail.admin.rich_text.converters.editor_html import (
@@ -636,3 +637,16 @@ class TestRichTextChooserUrls(WagtailTestUtils, BaseRichTextEditHandlerTestCase)
636
637
  self.assertIn("/admin/images/chooser/", html)
637
638
  self.assertIn("/admin/embeds/chooser/", html)
638
639
  self.assertIn("/admin/documents/chooser/", html)
640
+
641
+
642
+ class TestDraftailLazyTranslations(SimpleTestCase):
643
+ def test_context_i18n(self):
644
+ widget = DraftailRichTextArea(features=["h2"])
645
+ context_default_language = widget.get_context(None, None, {})
646
+ with translation.override("de"):
647
+ context_de = widget.get_context(None, None, {})
648
+ # At least the description of the h2 feature should be different
649
+ self.assertNotEqual(
650
+ context_default_language["widget"]["attrs"]["data-w-init-detail-value"],
651
+ context_de["widget"]["attrs"]["data-w-init-detail-value"],
652
+ )
@@ -1,4 +1,3 @@
1
- import json
2
1
  import os
3
2
  import unittest
4
3
  from datetime import datetime, timedelta
@@ -12,7 +11,6 @@ from django.test.utils import override_settings
12
11
  from django.utils import timezone
13
12
  from freezegun import freeze_time
14
13
 
15
- from wagtail.admin.localization import get_js_translation_strings
16
14
  from wagtail.admin.staticfiles import VERSION_HASH, versioned_static
17
15
  from wagtail.admin.templatetags.wagtailadmin_tags import (
18
16
  avatar_url,
@@ -22,14 +20,12 @@ from wagtail.admin.templatetags.wagtailadmin_tags import (
22
20
  timesince_last_update,
23
21
  timesince_simple,
24
22
  )
25
- from wagtail.admin.templatetags.wagtailadmin_tags import locales as locales_tag
26
23
  from wagtail.coreutils import get_dummy_request
27
24
  from wagtail.images.tests.utils import get_test_image_file
28
25
  from wagtail.models import Locale, Page
29
26
  from wagtail.test.utils import WagtailTestUtils
30
27
  from wagtail.test.utils.template_tests import AdminTemplateTestUtils
31
28
  from wagtail.users.models import UserProfile
32
- from wagtail.utils.deprecation import RemovedInWagtail70Warning
33
29
 
34
30
 
35
31
  class TestAvatarUrlInterceptTemplateTag(WagtailTestUtils, TestCase):
@@ -398,24 +394,6 @@ class TestInternationalisationTags(TestCase):
398
394
  with override_settings(WAGTAIL_I18N_ENABLED=True):
399
395
  self.assertTrue(i18n_enabled())
400
396
 
401
- def test_locales(self):
402
- with self.assertWarnsMessage(
403
- RemovedInWagtail70Warning,
404
- "The `locales` template tag will be removed in a future release.",
405
- ):
406
- locales_output = locales_tag()
407
-
408
- self.assertIsInstance(locales_output, str)
409
- self.assertEqual(
410
- json.loads(locales_output),
411
- [
412
- {"code": "en", "display_name": "English"},
413
- {"code": "fr", "display_name": "French"},
414
- {"code": "ro", "display_name": "Romanian"},
415
- {"code": "ru", "display_name": "Russian"},
416
- ],
417
- )
418
-
419
397
  def test_locale_label_from_id(self):
420
398
  with self.assertNumQueries(1):
421
399
  self.assertEqual(locale_label_from_id(self.locale_ids[0]), "English")
@@ -427,20 +405,6 @@ class TestInternationalisationTags(TestCase):
427
405
  with self.assertNumQueries(0):
428
406
  self.assertIsNone(locale_label_from_id(self.locale_ids[-1] + 100), None)
429
407
 
430
- def test_js_translation_strings(self):
431
- template = """
432
- {% load wagtailadmin_tags %}
433
- {% js_translation_strings %}
434
- """
435
-
436
- expected = json.dumps(get_js_translation_strings())
437
-
438
- with self.assertWarnsMessage(
439
- RemovedInWagtail70Warning,
440
- "The `js_translation_strings` template tag will be removed in a future release.",
441
- ):
442
- self.assertHTMLEqual(expected, Template(template).render(Context()))
443
-
444
408
 
445
409
  class ComponentTest(SimpleTestCase):
446
410
  def test_render_block_component(self):
@@ -1068,3 +1032,53 @@ class PageBreadcrumbsTagTest(AdminTemplateTestUtils, WagtailTestUtils, TestCase)
1068
1032
  self.assertEqual(len(invalid_icons), 0)
1069
1033
  icon = soup.select_one("ol li:last-child svg use[href='#icon-site']")
1070
1034
  self.assertIsNotNone(icon)
1035
+
1036
+
1037
+ class ThemeColorSchemeTest(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
1038
+ def setUp(self):
1039
+ self.request = get_dummy_request()
1040
+ self.user = self.login()
1041
+ self.request.user = self.user
1042
+ self.profile = UserProfile.get_for_user(self.user)
1043
+
1044
+ def test_default_mode(self):
1045
+ template = """
1046
+ {% load wagtailadmin_tags %}
1047
+ <meta name="color-scheme" content="{% admin_theme_color_scheme %}">
1048
+ """
1049
+ rendered = Template(template).render(Context({"request": self.request}))
1050
+
1051
+ soup = self.get_soup(rendered)
1052
+ meta_tag = soup.find("meta", {"name": "color-scheme"})
1053
+ self.assertIsNotNone(meta_tag)
1054
+ self.assertEqual(meta_tag["content"], "dark light")
1055
+
1056
+ def test_dark_mode(self):
1057
+ self.profile.theme = "dark"
1058
+ self.profile.save()
1059
+
1060
+ template = """
1061
+ {% load wagtailadmin_tags %}
1062
+ <meta name="color-scheme" content="{% admin_theme_color_scheme %}">
1063
+ """
1064
+ rendered = Template(template).render(Context({"request": self.request}))
1065
+
1066
+ soup = self.get_soup(rendered)
1067
+ meta_tag = soup.find("meta", {"name": "color-scheme"})
1068
+ self.assertIsNotNone(meta_tag)
1069
+ self.assertEqual(meta_tag["content"], "dark")
1070
+
1071
+ def test_light_mode(self):
1072
+ self.profile.theme = "light"
1073
+ self.profile.save()
1074
+
1075
+ template = """
1076
+ {% load wagtailadmin_tags %}
1077
+ <meta name="color-scheme" content="{% admin_theme_color_scheme %}">
1078
+ """
1079
+ rendered = Template(template).render(Context({"request": self.request}))
1080
+
1081
+ soup = self.get_soup(rendered)
1082
+ meta_tag = soup.find("meta", {"name": "color-scheme"})
1083
+ self.assertIsNotNone(meta_tag)
1084
+ self.assertEqual(meta_tag["content"], "light")
@@ -2,16 +2,20 @@ import json
2
2
 
3
3
  from django.contrib.auth.models import AnonymousUser, Permission
4
4
  from django.template import Context, Template
5
- from django.test import TestCase
5
+ from django.test import TestCase, override_settings
6
6
  from django.urls import reverse
7
+ from django.utils import translation
8
+ from django.utils.translation import gettext
7
9
 
8
10
  from wagtail import hooks
9
11
  from wagtail.admin.userbar import AccessibilityItem
10
12
  from wagtail.coreutils import get_dummy_request
11
- from wagtail.models import PAGE_TEMPLATE_VAR, Page, Site
13
+ from wagtail.models import PAGE_TEMPLATE_VAR, Locale, Page, Site
14
+ from wagtail.test.context_processors import get_call_count, reset_call_count
12
15
  from wagtail.test.testapp.models import BusinessChild, BusinessIndex, SimplePage
13
16
  from wagtail.test.utils import WagtailTestUtils
14
- from wagtail.utils.deprecation import RemovedInWagtail70Warning
17
+ from wagtail.users.models import UserProfile
18
+ from wagtail.utils.deprecation import RemovedInWagtail80Warning
15
19
 
16
20
 
17
21
  class TestUserbarTag(WagtailTestUtils, TestCase):
@@ -441,11 +445,13 @@ class TestUserbarInPageServe(WagtailTestUtils, TestCase):
441
445
  self.homepage.add_child(instance=self.page)
442
446
 
443
447
  def test_userbar_rendered(self):
448
+ reset_call_count()
444
449
  response = self.page.serve(self.request)
445
450
  response.render()
446
451
 
447
452
  self.assertEqual(response.status_code, 200)
448
453
  self.assertContains(response, '<template id="wagtail-userbar-template">')
454
+ self.assertEqual(get_call_count(), 1)
449
455
 
450
456
  def test_userbar_anonymous_user_cannot_see(self):
451
457
  self.request.user = AnonymousUser()
@@ -479,18 +485,72 @@ class TestUserbarInPageServe(WagtailTestUtils, TestCase):
479
485
  kwargs["called"] = True
480
486
  return items
481
487
 
482
- with self.assertWarnsMessage(
483
- RemovedInWagtail70Warning,
484
- "`construct_wagtail_userbar` hook functions should accept a `page` argument in third position",
485
- ), hooks.register_temporarily(
486
- "construct_wagtail_userbar",
487
- construct_wagtail_userbar,
488
+ with (
489
+ self.assertWarnsMessage(
490
+ RemovedInWagtail80Warning,
491
+ "`construct_wagtail_userbar` hook functions should accept a "
492
+ "`page` argument in third position",
493
+ ),
494
+ hooks.register_temporarily(
495
+ "construct_wagtail_userbar",
496
+ construct_wagtail_userbar,
497
+ ),
488
498
  ):
489
499
  response = self.page.serve(self.request)
490
500
  response.render()
491
501
 
492
502
  self.assertTrue(kwargs.get("called"))
493
503
 
504
+ @override_settings(
505
+ WAGTAIL_I18N_ENABLED=True,
506
+ WAGTAIL_CONTENT_LANGUAGES=[("en", "English"), ("fr", "French")],
507
+ WAGTAILADMIN_PERMITTED_LANGUAGES=[("en", "English")],
508
+ LANGUAGE_CODE="en",
509
+ )
510
+ def test_userbar_rendered_in_admin_permitted_language_if_user_has_no_language(self):
511
+ french = Locale.objects.create(language_code="fr")
512
+ self.homepage.copy_for_translation(french)
513
+ french_page = self.page.copy_for_translation(french)
514
+
515
+ with translation.override("fr"):
516
+ response = french_page.serve(self.request)
517
+ response.render()
518
+
519
+ self.assertContains(response, "Go to Wagtail admin")
520
+
521
+ @override_settings(
522
+ WAGTAIL_I18N_ENABLED=True,
523
+ WAGTAIL_CONTENT_LANGUAGES=[("en", "English"), ("fr", "French")],
524
+ LANGUAGE_CODE="en",
525
+ )
526
+ def test_userbar_rendered_in_active_language_if_admin_permitted(self):
527
+ french = Locale.objects.create(language_code="fr")
528
+ self.homepage.copy_for_translation(french)
529
+ french_page = self.page.copy_for_translation(french)
530
+
531
+ with translation.override("fr"):
532
+ response = french_page.serve(self.request)
533
+ response.render()
534
+
535
+ with translation.override("fr"):
536
+ expected_text = gettext("Go to Wagtail admin")
537
+ self.assertContains(response, expected_text)
538
+
539
+ @override_settings(LANGUAGE_CODE="en")
540
+ def test_userbar_rendered_in_user_preferred_language(self):
541
+ profile = UserProfile.get_for_user(self.user)
542
+ profile.preferred_language = "fr"
543
+ profile.save()
544
+
545
+ response = self.page.serve(self.request)
546
+ response.render()
547
+
548
+ # Ensure we have a French string without tests failing if translation changes
549
+ with translation.override("fr"):
550
+ expected_text = gettext("Go to Wagtail admin")
551
+ self.assertNotEqual(expected_text, "Go to Wagtail admin")
552
+ self.assertContains(response, expected_text)
553
+
494
554
 
495
555
  class TestUserbarHooksForChecksPanel(WagtailTestUtils, TestCase):
496
556
  def setUp(self):
@@ -522,12 +582,16 @@ class TestUserbarHooksForChecksPanel(WagtailTestUtils, TestCase):
522
582
  kwargs["called"] = True
523
583
  return items
524
584
 
525
- with self.assertWarnsMessage(
526
- RemovedInWagtail70Warning,
527
- "`construct_wagtail_userbar` hook functions should accept a `page` argument in third position",
528
- ), hooks.register_temporarily(
529
- "construct_wagtail_userbar",
530
- construct_wagtail_userbar,
585
+ with (
586
+ self.assertWarnsMessage(
587
+ RemovedInWagtail80Warning,
588
+ "`construct_wagtail_userbar` hook functions should accept a "
589
+ "`page` argument in third position",
590
+ ),
591
+ hooks.register_temporarily(
592
+ "construct_wagtail_userbar",
593
+ construct_wagtail_userbar,
594
+ ),
531
595
  ):
532
596
  response = self.client.get(
533
597
  reverse("wagtailadmin_pages:edit", args=(self.homepage.id,))
@@ -6,6 +6,7 @@ from wagtail.admin.forms.auth import PasswordResetForm
6
6
  from wagtail.admin.tests.test_forms import CustomLoginForm, CustomPasswordResetForm
7
7
  from wagtail.models import Page
8
8
  from wagtail.test.utils import WagtailTestUtils
9
+ from wagtail.users.models import UserProfile
9
10
 
10
11
 
11
12
  class TestLoginView(WagtailTestUtils, TestCase):
@@ -224,10 +225,24 @@ class TestPasswordResetView(TestCase):
224
225
  )
225
226
 
226
227
 
227
- class TestJsi18nView(TestCase):
228
+ class TestJsi18nView(WagtailTestUtils, TestCase):
228
229
  def test_jsi18n_does_not_require_login(self):
229
230
  response = self.client.get(reverse("wagtailadmin_javascript_catalog"))
230
231
  self.assertEqual(response.status_code, 200)
231
232
  # get content type header without the "charset" suffix
232
233
  content_type = response["content-type"].split(";")[0]
233
234
  self.assertEqual(content_type, "text/javascript")
235
+
236
+ def test_jsi18n_is_localized(self):
237
+ user = self.login()
238
+ profile = UserProfile.get_for_user(user)
239
+ # If a non-default language is activated, the response should contain this:
240
+ pattern = "const newcatalog = "
241
+ # If the preferred language is the default language, the catalog should be empty
242
+ response = self.client.get(reverse("wagtailadmin_javascript_catalog"))
243
+ self.assertNotContains(response, pattern)
244
+ # Changing the language should make the catalog appear
245
+ profile.preferred_language = "de"
246
+ profile.save()
247
+ response = self.client.get(reverse("wagtailadmin_javascript_catalog"))
248
+ self.assertContains(response, pattern)
@@ -12,6 +12,7 @@ from wagtail.admin.forms.tags import TagField
12
12
  from wagtail.models import Page
13
13
  from wagtail.test.testapp.forms import AdminStarDateInput
14
14
  from wagtail.test.testapp.models import EventPage, RestaurantTag, SimplePage
15
+ from wagtail.utils.deprecation import RemovedInWagtail80Warning
15
16
 
16
17
 
17
18
  class TestAdminPageChooserWidget(TestCase):
@@ -430,9 +431,9 @@ class TestAdminTagWidget(TestCase):
430
431
  ],
431
432
  )
432
433
 
433
- @override_settings(TAG_SPACES_ALLOWED=False)
434
+ @override_settings(WAGTAIL_TAG_SPACES_ALLOWED=False)
434
435
  def test_render_js_init_no_spaces_allowed(self):
435
- """Checks that the 'w-tag' controller attributes are correctly added to the tag widgets based on TAG_SPACES_ALLOWED in settings"""
436
+ """Checks that the 'w-tag' controller attributes are correctly added to the tag widgets based on WAGTAIL_TAG_SPACES_ALLOWED in settings"""
436
437
  widget = widgets.AdminTagWidget()
437
438
 
438
439
  html = widget.render("tags", None, attrs={"id": "alpha"})
@@ -447,9 +448,9 @@ class TestAdminTagWidget(TestCase):
447
448
  ],
448
449
  )
449
450
 
450
- @override_settings(TAG_LIMIT=5)
451
+ @override_settings(WAGTAIL_TAG_LIMIT=5)
451
452
  def test_render_js_init_with_tag_limit(self):
452
- """Checks that the 'w-tag' controller attributes are correctly added to the tag widget using options based on TAG_LIMIT in settings"""
453
+ """Checks that the 'w-tag' controller attributes are correctly added to the tag widget using options based on WAGTAIL_TAG_LIMIT in settings"""
453
454
 
454
455
  widget = widgets.AdminTagWidget()
455
456
 
@@ -517,9 +518,9 @@ class TestAdminTagWidget(TestCase):
517
518
  ],
518
519
  )
519
520
 
520
- @override_settings(TAG_SPACES_ALLOWED=True)
521
+ @override_settings(WAGTAIL_TAG_SPACES_ALLOWED=True)
521
522
  def test_tags_help_text_spaces_allowed(self):
522
- """Checks that the tags help text html element content is correct when TAG_SPACES_ALLOWED is True"""
523
+ """Checks that the tags help text html element content is correct when WAGTAIL_TAG_SPACES_ALLOWED is True"""
523
524
  widget = widgets.AdminTagWidget()
524
525
  help_text = widget.get_context(None, None, {})["widget"]["help_text"]
525
526
 
@@ -535,9 +536,9 @@ class TestAdminTagWidget(TestCase):
535
536
  html,
536
537
  )
537
538
 
538
- @override_settings(TAG_SPACES_ALLOWED=False)
539
+ @override_settings(WAGTAIL_TAG_SPACES_ALLOWED=False)
539
540
  def test_tags_help_text_no_spaces_allowed(self):
540
- """Checks that the tags help text html element content is correct when TAG_SPACES_ALLOWED is False"""
541
+ """Checks that the tags help text html element content is correct when WAGTAIL_TAG_SPACES_ALLOWED is False"""
541
542
  widget = widgets.AdminTagWidget()
542
543
  help_text = widget.get_context(None, None, {})["widget"]["help_text"]
543
544
 
@@ -552,6 +553,44 @@ class TestAdminTagWidget(TestCase):
552
553
  html,
553
554
  )
554
555
 
556
+ @override_settings(TAG_LIMIT=3)
557
+ def test_legacy_tag_limit_setting(self):
558
+ widget = widgets.AdminTagWidget()
559
+ with self.assertWarnsMessage(
560
+ RemovedInWagtail80Warning,
561
+ "The setting 'TAG_LIMIT' is deprecated. "
562
+ "Please use 'WAGTAIL_TAG_LIMIT' instead.",
563
+ ):
564
+ html = widget.render("tags", None, attrs={"id": "alpha"})
565
+ params = self.get_js_init_params(html)
566
+ self.assertEqual(
567
+ params,
568
+ [
569
+ "alpha",
570
+ "/admin/tag-autocomplete/",
571
+ {"allowSpaces": True, "tagLimit": 3, "autocompleteOnly": False},
572
+ ],
573
+ )
574
+
575
+ @override_settings(TAG_SPACES_ALLOWED=False)
576
+ def test_legacy_tag_spaces_allowed_setting(self):
577
+ widget = widgets.AdminTagWidget()
578
+ with self.assertWarnsMessage(
579
+ RemovedInWagtail80Warning,
580
+ "The setting 'TAG_SPACES_ALLOWED' is deprecated. "
581
+ "Please use 'WAGTAIL_TAG_SPACES_ALLOWED' instead.",
582
+ ):
583
+ html = widget.render("tags", None, attrs={"id": "alpha"})
584
+ params = self.get_js_init_params(html)
585
+ self.assertEqual(
586
+ params,
587
+ [
588
+ "alpha",
589
+ "/admin/tag-autocomplete/",
590
+ {"allowSpaces": False, "tagLimit": None, "autocompleteOnly": False},
591
+ ],
592
+ )
593
+
555
594
 
556
595
  class TestTagField(TestCase):
557
596
  def setUp(self):