wagtail 7.2rc1__py3-none-any.whl → 7.3rc1__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 (1485) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_for_translation.py +4 -2
  3. wagtail/admin/action_menu.py +4 -1
  4. wagtail/admin/api/actions/convert_alias.py +2 -2
  5. wagtail/admin/api/actions/copy.py +2 -2
  6. wagtail/admin/api/actions/copy_for_translation.py +2 -2
  7. wagtail/admin/api/actions/create_alias.py +2 -2
  8. wagtail/admin/api/actions/delete.py +1 -1
  9. wagtail/admin/api/actions/move.py +1 -1
  10. wagtail/admin/api/actions/publish.py +2 -2
  11. wagtail/admin/api/actions/revert_to_page_revision.py +2 -2
  12. wagtail/admin/api/actions/unpublish.py +1 -1
  13. wagtail/admin/api/filters.py +2 -2
  14. wagtail/admin/compare.py +22 -0
  15. wagtail/admin/forms/account.py +52 -1
  16. wagtail/admin/forms/comments.py +53 -0
  17. wagtail/admin/forms/models.py +36 -0
  18. wagtail/admin/forms/pages.py +7 -0
  19. wagtail/admin/forms/workflows.py +5 -2
  20. wagtail/admin/icons.py +4 -3
  21. wagtail/admin/locale/ar/LC_MESSAGES/django.mo +0 -0
  22. wagtail/admin/locale/ar/LC_MESSAGES/django.po +62 -72
  23. wagtail/admin/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
  24. wagtail/admin/locale/az_AZ/LC_MESSAGES/django.po +4 -7
  25. wagtail/admin/locale/be/LC_MESSAGES/django.mo +0 -0
  26. wagtail/admin/locale/be/LC_MESSAGES/django.po +15 -42
  27. wagtail/admin/locale/bg/LC_MESSAGES/django.mo +0 -0
  28. wagtail/admin/locale/bg/LC_MESSAGES/django.po +7 -16
  29. wagtail/admin/locale/bn/LC_MESSAGES/django.mo +0 -0
  30. wagtail/admin/locale/bn/LC_MESSAGES/django.po +4 -13
  31. wagtail/admin/locale/ca/LC_MESSAGES/django.mo +0 -0
  32. wagtail/admin/locale/ca/LC_MESSAGES/django.po +159 -74
  33. wagtail/admin/locale/ca/LC_MESSAGES/djangojs.mo +0 -0
  34. wagtail/admin/locale/ca/LC_MESSAGES/djangojs.po +11 -0
  35. wagtail/admin/locale/cs/LC_MESSAGES/django.mo +0 -0
  36. wagtail/admin/locale/cs/LC_MESSAGES/django.po +17 -51
  37. wagtail/admin/locale/cy/LC_MESSAGES/django.mo +0 -0
  38. wagtail/admin/locale/cy/LC_MESSAGES/django.po +6 -13
  39. wagtail/admin/locale/da/LC_MESSAGES/django.mo +0 -0
  40. wagtail/admin/locale/da/LC_MESSAGES/django.po +10 -22
  41. wagtail/admin/locale/de/LC_MESSAGES/django.mo +0 -0
  42. wagtail/admin/locale/de/LC_MESSAGES/django.po +42 -93
  43. wagtail/admin/locale/dv/LC_MESSAGES/django.mo +0 -0
  44. wagtail/admin/locale/dv/LC_MESSAGES/django.po +26 -64
  45. wagtail/admin/locale/el/LC_MESSAGES/django.mo +0 -0
  46. wagtail/admin/locale/el/LC_MESSAGES/django.po +9 -31
  47. wagtail/admin/locale/en/LC_MESSAGES/django.po +262 -234
  48. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +72 -43
  49. wagtail/admin/locale/es/LC_MESSAGES/django.mo +0 -0
  50. wagtail/admin/locale/es/LC_MESSAGES/django.po +17 -52
  51. wagtail/admin/locale/es_419/LC_MESSAGES/django.mo +0 -0
  52. wagtail/admin/locale/es_419/LC_MESSAGES/django.po +4 -22
  53. wagtail/admin/locale/es_VE/LC_MESSAGES/django.mo +0 -0
  54. wagtail/admin/locale/es_VE/LC_MESSAGES/django.po +4 -7
  55. wagtail/admin/locale/et/LC_MESSAGES/django.mo +0 -0
  56. wagtail/admin/locale/et/LC_MESSAGES/django.po +15 -42
  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 +12 -50
  60. wagtail/admin/locale/fi/LC_MESSAGES/django.mo +0 -0
  61. wagtail/admin/locale/fi/LC_MESSAGES/django.po +43 -70
  62. wagtail/admin/locale/fi/LC_MESSAGES/djangojs.mo +0 -0
  63. wagtail/admin/locale/fi/LC_MESSAGES/djangojs.po +17 -0
  64. wagtail/admin/locale/fr/LC_MESSAGES/django.mo +0 -0
  65. wagtail/admin/locale/fr/LC_MESSAGES/django.po +157 -74
  66. wagtail/admin/locale/fr/LC_MESSAGES/djangojs.mo +0 -0
  67. wagtail/admin/locale/fr/LC_MESSAGES/djangojs.po +11 -0
  68. wagtail/admin/locale/gl/LC_MESSAGES/django.mo +0 -0
  69. wagtail/admin/locale/gl/LC_MESSAGES/django.po +155 -72
  70. wagtail/admin/locale/gl/LC_MESSAGES/djangojs.mo +0 -0
  71. wagtail/admin/locale/gl/LC_MESSAGES/djangojs.po +11 -0
  72. wagtail/admin/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  73. wagtail/admin/locale/he_IL/LC_MESSAGES/django.po +7 -28
  74. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  75. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.po +15 -38
  76. wagtail/admin/locale/ht/LC_MESSAGES/django.po +4 -4
  77. wagtail/admin/locale/hu/LC_MESSAGES/django.mo +0 -0
  78. wagtail/admin/locale/hu/LC_MESSAGES/django.po +44 -91
  79. wagtail/admin/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  80. wagtail/admin/locale/id_ID/LC_MESSAGES/django.po +10 -31
  81. wagtail/admin/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  82. wagtail/admin/locale/is_IS/LC_MESSAGES/django.po +172 -68
  83. wagtail/admin/locale/is_IS/LC_MESSAGES/djangojs.mo +0 -0
  84. wagtail/admin/locale/is_IS/LC_MESSAGES/djangojs.po +8 -2
  85. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  86. wagtail/admin/locale/it/LC_MESSAGES/django.po +580 -65
  87. wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
  88. wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +40 -2
  89. wagtail/admin/locale/ja/LC_MESSAGES/django.mo +0 -0
  90. wagtail/admin/locale/ja/LC_MESSAGES/django.po +15 -42
  91. wagtail/admin/locale/ka/LC_MESSAGES/django.po +4 -4
  92. wagtail/admin/locale/ko/LC_MESSAGES/django.mo +0 -0
  93. wagtail/admin/locale/ko/LC_MESSAGES/django.po +20 -57
  94. wagtail/admin/locale/lt/LC_MESSAGES/django.mo +0 -0
  95. wagtail/admin/locale/lt/LC_MESSAGES/django.po +12 -31
  96. wagtail/admin/locale/lv/LC_MESSAGES/django.mo +0 -0
  97. wagtail/admin/locale/lv/LC_MESSAGES/django.po +9 -40
  98. wagtail/admin/locale/mi/LC_MESSAGES/django.mo +0 -0
  99. wagtail/admin/locale/mi/LC_MESSAGES/django.po +6 -10
  100. wagtail/admin/locale/mn/LC_MESSAGES/django.mo +0 -0
  101. wagtail/admin/locale/mn/LC_MESSAGES/django.po +10 -43
  102. wagtail/admin/locale/my/LC_MESSAGES/django.po +4 -4
  103. wagtail/admin/locale/nb/LC_MESSAGES/django.mo +0 -0
  104. wagtail/admin/locale/nb/LC_MESSAGES/django.po +15 -53
  105. wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
  106. wagtail/admin/locale/nl/LC_MESSAGES/django.po +157 -73
  107. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.mo +0 -0
  108. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.po +11 -0
  109. wagtail/admin/locale/pl/LC_MESSAGES/django.mo +0 -0
  110. wagtail/admin/locale/pl/LC_MESSAGES/django.po +27 -72
  111. wagtail/admin/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  112. wagtail/admin/locale/pt_BR/LC_MESSAGES/django.po +38 -83
  113. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  114. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +17 -56
  115. wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
  116. wagtail/admin/locale/ro/LC_MESSAGES/django.po +23 -68
  117. wagtail/admin/locale/ru/LC_MESSAGES/django.mo +0 -0
  118. wagtail/admin/locale/ru/LC_MESSAGES/django.po +44 -89
  119. wagtail/admin/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  120. wagtail/admin/locale/sk_SK/LC_MESSAGES/django.po +9 -28
  121. wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
  122. wagtail/admin/locale/sl/LC_MESSAGES/django.po +45 -90
  123. wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
  124. wagtail/admin/locale/sv/LC_MESSAGES/django.po +347 -77
  125. wagtail/admin/locale/sv/LC_MESSAGES/djangojs.mo +0 -0
  126. wagtail/admin/locale/sv/LC_MESSAGES/djangojs.po +3 -2
  127. wagtail/admin/locale/tet/LC_MESSAGES/django.mo +0 -0
  128. wagtail/admin/locale/tet/LC_MESSAGES/django.po +12 -22
  129. wagtail/admin/locale/th/LC_MESSAGES/django.mo +0 -0
  130. wagtail/admin/locale/th/LC_MESSAGES/django.po +10 -42
  131. wagtail/admin/locale/tr/LC_MESSAGES/django.mo +0 -0
  132. wagtail/admin/locale/tr/LC_MESSAGES/django.po +61 -68
  133. wagtail/admin/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  134. wagtail/admin/locale/tr_TR/LC_MESSAGES/django.po +15 -42
  135. wagtail/admin/locale/ug/LC_MESSAGES/django.mo +0 -0
  136. wagtail/admin/locale/ug/LC_MESSAGES/django.po +38 -83
  137. wagtail/admin/locale/uk/LC_MESSAGES/django.mo +0 -0
  138. wagtail/admin/locale/uk/LC_MESSAGES/django.po +15 -45
  139. wagtail/admin/locale/vi/LC_MESSAGES/django.mo +0 -0
  140. wagtail/admin/locale/vi/LC_MESSAGES/django.po +4 -17
  141. wagtail/admin/locale/zh/LC_MESSAGES/django.mo +0 -0
  142. wagtail/admin/locale/zh/LC_MESSAGES/django.po +7 -19
  143. wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  144. wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.po +17 -54
  145. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  146. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po +15 -37
  147. wagtail/admin/panels/comment_panel.py +1 -51
  148. wagtail/admin/panels/title_field_panel.py +3 -1
  149. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  150. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  151. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  152. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  153. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
  154. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  155. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  156. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  157. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  158. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  159. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +1 -1
  160. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  161. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  162. wagtail/admin/templates/wagtailadmin/base.html +2 -2
  163. wagtail/admin/templates/wagtailadmin/generic/edit_partials.html +100 -0
  164. wagtail/admin/templates/wagtailadmin/generic/form.html +26 -5
  165. wagtail/admin/templates/wagtailadmin/generic/includes/_loaded_revision_inputs.html +3 -0
  166. wagtail/admin/templates/wagtailadmin/generic/listing_results.html +1 -17
  167. wagtail/admin/templates/wagtailadmin/pages/create.html +14 -4
  168. wagtail/admin/templates/wagtailadmin/pages/edit.html +16 -3
  169. wagtail/admin/templates/wagtailadmin/pages/edit_partials.html +31 -0
  170. wagtail/admin/templates/wagtailadmin/pages/index_results.html +1 -9
  171. wagtail/admin/templates/wagtailadmin/shared/autosave/indicator.html +36 -0
  172. wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +1 -1
  173. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/list.html +2 -2
  174. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/module.html +19 -3
  175. wagtail/admin/templates/wagtailadmin/shared/headers/_actions.html +5 -0
  176. wagtail/admin/templates/wagtailadmin/shared/headers/_history_icon_link.html +2 -2
  177. wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +8 -9
  178. wagtail/admin/templates/wagtailadmin/shared/listing/filter_partials.html +19 -0
  179. wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +3 -3
  180. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/side_panel.html +3 -0
  181. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/privacy.html +18 -6
  182. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/usage.html +11 -4
  183. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/workflow.html +22 -1
  184. wagtail/admin/templates/wagtailadmin/shared/side_panels/preview.html +1 -0
  185. wagtail/admin/templates/wagtailadmin/shared/side_panels.html +1 -2
  186. wagtail/admin/templates/wagtailadmin/shared/unsaved_changes_warning.html +20 -20
  187. wagtail/admin/templates/wagtailadmin/userbar/base.html +2 -0
  188. wagtail/admin/templates/wagtailadmin/userbar/item_accessibility.html +1 -1
  189. wagtail/admin/templatetags/wagtailadmin_tags.py +19 -15
  190. wagtail/admin/tests/pages/test_create_page.py +306 -1
  191. wagtail/admin/tests/pages/test_custom_listing.py +48 -2
  192. wagtail/admin/tests/pages/test_edit_page.py +721 -7
  193. wagtail/admin/tests/pages/test_explorer_view.py +9 -5
  194. wagtail/admin/tests/pages/test_page_search.py +15 -0
  195. wagtail/admin/tests/pages/test_preview.py +30 -0
  196. wagtail/admin/tests/pages/test_revisions.py +4 -0
  197. wagtail/admin/tests/test_account_management.py +88 -2
  198. wagtail/admin/tests/test_collections_views.py +15 -15
  199. wagtail/admin/tests/test_compare.py +34 -0
  200. wagtail/admin/tests/test_editing_sessions.py +230 -8
  201. wagtail/admin/tests/test_forms.py +192 -1
  202. wagtail/admin/tests/test_icon_sprite.py +22 -2
  203. wagtail/admin/tests/test_page_chooser.py +13 -13
  204. wagtail/admin/tests/test_reports_views.py +4 -1
  205. wagtail/admin/tests/test_userbar.py +69 -5
  206. wagtail/admin/tests/test_views_generic.py +5 -5
  207. wagtail/admin/tests/test_workflows.py +14 -12
  208. wagtail/admin/tests/viewsets/test_model_viewset.py +13 -0
  209. wagtail/admin/ui/autosave.py +5 -0
  210. wagtail/admin/ui/editing_sessions.py +3 -0
  211. wagtail/admin/ui/side_panels.py +19 -20
  212. wagtail/admin/userbar.py +48 -27
  213. wagtail/admin/views/bulk_action/dispatcher.py +2 -2
  214. wagtail/admin/views/chooser.py +6 -6
  215. wagtail/admin/views/editing_sessions.py +20 -7
  216. wagtail/admin/views/generic/__init__.py +1 -0
  217. wagtail/admin/views/generic/chooser.py +5 -5
  218. wagtail/admin/views/generic/mixins.py +143 -26
  219. wagtail/admin/views/generic/models.py +157 -27
  220. wagtail/admin/views/generic/ordering.py +1 -1
  221. wagtail/admin/views/generic/preview.py +4 -4
  222. wagtail/admin/views/home.py +3 -1
  223. wagtail/admin/views/pages/create.py +77 -29
  224. wagtail/admin/views/pages/edit.py +160 -34
  225. wagtail/admin/views/pages/preview.py +4 -4
  226. wagtail/admin/views/pages/revisions.py +3 -0
  227. wagtail/admin/views/pages/search.py +4 -4
  228. wagtail/admin/views/pages/usage.py +2 -2
  229. wagtail/admin/views/tags.py +2 -2
  230. wagtail/admin/views/workflows.py +73 -54
  231. wagtail/admin/viewsets/model.py +34 -8
  232. wagtail/admin/widgets/button.py +11 -4
  233. wagtail/admin/widgets/chooser.py +6 -4
  234. wagtail/admin/widgets/slug.py +1 -1
  235. wagtail/api/v2/filters.py +27 -21
  236. wagtail/api/v2/pagination.py +4 -4
  237. wagtail/api/v2/views.py +7 -7
  238. wagtail/blocks/list_block.py +0 -8
  239. wagtail/blocks/migrations/migrate_operation.py +8 -1
  240. wagtail/blocks/stream_block.py +2 -10
  241. wagtail/blocks/struct_block.py +192 -12
  242. wagtail/compat.py +2 -2
  243. wagtail/contrib/forms/locale/af/LC_MESSAGES/django.po +1 -1
  244. wagtail/contrib/forms/locale/ar/LC_MESSAGES/django.po +1 -1
  245. wagtail/contrib/forms/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  246. wagtail/contrib/forms/locale/be/LC_MESSAGES/django.po +1 -1
  247. wagtail/contrib/forms/locale/bg/LC_MESSAGES/django.po +1 -1
  248. wagtail/contrib/forms/locale/bn/LC_MESSAGES/django.po +1 -1
  249. wagtail/contrib/forms/locale/ca/LC_MESSAGES/django.po +1 -1
  250. wagtail/contrib/forms/locale/cs/LC_MESSAGES/django.po +1 -1
  251. wagtail/contrib/forms/locale/cy/LC_MESSAGES/django.po +1 -1
  252. wagtail/contrib/forms/locale/da/LC_MESSAGES/django.po +1 -1
  253. wagtail/contrib/forms/locale/de/LC_MESSAGES/django.po +1 -1
  254. wagtail/contrib/forms/locale/dv/LC_MESSAGES/django.po +1 -1
  255. wagtail/contrib/forms/locale/el/LC_MESSAGES/django.po +1 -1
  256. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +1 -1
  257. wagtail/contrib/forms/locale/es/LC_MESSAGES/django.po +1 -1
  258. wagtail/contrib/forms/locale/es_419/LC_MESSAGES/django.po +1 -1
  259. wagtail/contrib/forms/locale/et/LC_MESSAGES/django.po +1 -1
  260. wagtail/contrib/forms/locale/eu/LC_MESSAGES/django.po +1 -1
  261. wagtail/contrib/forms/locale/fa/LC_MESSAGES/django.po +1 -1
  262. wagtail/contrib/forms/locale/fi/LC_MESSAGES/django.po +1 -1
  263. wagtail/contrib/forms/locale/fr/LC_MESSAGES/django.po +1 -1
  264. wagtail/contrib/forms/locale/gl/LC_MESSAGES/django.po +1 -1
  265. wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.po +1 -1
  266. wagtail/contrib/forms/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  267. wagtail/contrib/forms/locale/ht/LC_MESSAGES/django.po +1 -1
  268. wagtail/contrib/forms/locale/hu/LC_MESSAGES/django.po +1 -1
  269. wagtail/contrib/forms/locale/hy/LC_MESSAGES/django.po +1 -1
  270. wagtail/contrib/forms/locale/id_ID/LC_MESSAGES/django.po +1 -1
  271. wagtail/contrib/forms/locale/is_IS/LC_MESSAGES/django.po +1 -1
  272. wagtail/contrib/forms/locale/it/LC_MESSAGES/django.mo +0 -0
  273. wagtail/contrib/forms/locale/it/LC_MESSAGES/django.po +41 -3
  274. wagtail/contrib/forms/locale/ja/LC_MESSAGES/django.po +1 -1
  275. wagtail/contrib/forms/locale/ka/LC_MESSAGES/django.po +1 -1
  276. wagtail/contrib/forms/locale/ko/LC_MESSAGES/django.po +1 -1
  277. wagtail/contrib/forms/locale/lt/LC_MESSAGES/django.po +1 -1
  278. wagtail/contrib/forms/locale/lv/LC_MESSAGES/django.po +1 -1
  279. wagtail/contrib/forms/locale/mi/LC_MESSAGES/django.po +1 -1
  280. wagtail/contrib/forms/locale/mn/LC_MESSAGES/django.po +1 -1
  281. wagtail/contrib/forms/locale/my/LC_MESSAGES/django.po +1 -1
  282. wagtail/contrib/forms/locale/nb/LC_MESSAGES/django.po +1 -1
  283. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.po +1 -1
  284. wagtail/contrib/forms/locale/pl/LC_MESSAGES/django.po +1 -1
  285. wagtail/contrib/forms/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  286. wagtail/contrib/forms/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  287. wagtail/contrib/forms/locale/ro/LC_MESSAGES/django.po +1 -1
  288. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.po +1 -1
  289. wagtail/contrib/forms/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  290. wagtail/contrib/forms/locale/sl/LC_MESSAGES/django.po +1 -1
  291. wagtail/contrib/forms/locale/sv/LC_MESSAGES/django.po +1 -1
  292. wagtail/contrib/forms/locale/tet/LC_MESSAGES/django.po +1 -1
  293. wagtail/contrib/forms/locale/th/LC_MESSAGES/django.po +1 -1
  294. wagtail/contrib/forms/locale/tr/LC_MESSAGES/django.mo +0 -0
  295. wagtail/contrib/forms/locale/tr/LC_MESSAGES/django.po +12 -2
  296. wagtail/contrib/forms/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  297. wagtail/contrib/forms/locale/ug/LC_MESSAGES/django.po +1 -1
  298. wagtail/contrib/forms/locale/uk/LC_MESSAGES/django.po +1 -1
  299. wagtail/contrib/forms/locale/vi/LC_MESSAGES/django.po +1 -1
  300. wagtail/contrib/forms/locale/zh/LC_MESSAGES/django.po +1 -1
  301. wagtail/contrib/forms/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  302. wagtail/contrib/forms/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  303. wagtail/contrib/frontend_cache/backends/azure.py +6 -6
  304. wagtail/contrib/frontend_cache/backends/cloudfront.py +2 -2
  305. wagtail/contrib/frontend_cache/utils.py +1 -1
  306. wagtail/contrib/redirects/forms.py +1 -1
  307. wagtail/contrib/redirects/locale/ar/LC_MESSAGES/django.mo +0 -0
  308. wagtail/contrib/redirects/locale/ar/LC_MESSAGES/django.po +1 -13
  309. wagtail/contrib/redirects/locale/be/LC_MESSAGES/django.po +1 -1
  310. wagtail/contrib/redirects/locale/bg/LC_MESSAGES/django.po +1 -1
  311. wagtail/contrib/redirects/locale/bn/LC_MESSAGES/django.po +1 -1
  312. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.mo +0 -0
  313. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +9 -10
  314. wagtail/contrib/redirects/locale/cs/LC_MESSAGES/django.mo +0 -0
  315. wagtail/contrib/redirects/locale/cs/LC_MESSAGES/django.po +1 -13
  316. wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.mo +0 -0
  317. wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.po +1 -13
  318. wagtail/contrib/redirects/locale/da/LC_MESSAGES/django.po +1 -1
  319. wagtail/contrib/redirects/locale/de/LC_MESSAGES/django.mo +0 -0
  320. wagtail/contrib/redirects/locale/de/LC_MESSAGES/django.po +1 -13
  321. wagtail/contrib/redirects/locale/dv/LC_MESSAGES/django.po +1 -1
  322. wagtail/contrib/redirects/locale/el/LC_MESSAGES/django.po +1 -1
  323. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +14 -14
  324. wagtail/contrib/redirects/locale/en_IN/LC_MESSAGES/django.po +1 -1
  325. wagtail/contrib/redirects/locale/es/LC_MESSAGES/django.mo +0 -0
  326. wagtail/contrib/redirects/locale/es/LC_MESSAGES/django.po +1 -14
  327. wagtail/contrib/redirects/locale/es_419/LC_MESSAGES/django.po +1 -1
  328. wagtail/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po +1 -1
  329. wagtail/contrib/redirects/locale/et/LC_MESSAGES/django.mo +0 -0
  330. wagtail/contrib/redirects/locale/et/LC_MESSAGES/django.po +1 -13
  331. wagtail/contrib/redirects/locale/eu/LC_MESSAGES/django.po +1 -1
  332. wagtail/contrib/redirects/locale/fa/LC_MESSAGES/django.po +1 -1
  333. wagtail/contrib/redirects/locale/fi/LC_MESSAGES/django.mo +0 -0
  334. wagtail/contrib/redirects/locale/fi/LC_MESSAGES/django.po +7 -11
  335. wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.mo +0 -0
  336. wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.po +9 -8
  337. wagtail/contrib/redirects/locale/gl/LC_MESSAGES/django.mo +0 -0
  338. wagtail/contrib/redirects/locale/gl/LC_MESSAGES/django.po +9 -9
  339. wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.po +1 -1
  340. wagtail/contrib/redirects/locale/hi/LC_MESSAGES/django.po +1 -1
  341. wagtail/contrib/redirects/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  342. wagtail/contrib/redirects/locale/hr_HR/LC_MESSAGES/django.po +1 -13
  343. wagtail/contrib/redirects/locale/ht/LC_MESSAGES/django.po +1 -1
  344. wagtail/contrib/redirects/locale/hu/LC_MESSAGES/django.mo +0 -0
  345. wagtail/contrib/redirects/locale/hu/LC_MESSAGES/django.po +1 -13
  346. wagtail/contrib/redirects/locale/hy/LC_MESSAGES/django.po +1 -1
  347. wagtail/contrib/redirects/locale/id_ID/LC_MESSAGES/django.po +1 -1
  348. wagtail/contrib/redirects/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  349. wagtail/contrib/redirects/locale/is_IS/LC_MESSAGES/django.po +10 -9
  350. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.mo +0 -0
  351. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.po +9 -9
  352. wagtail/contrib/redirects/locale/ja/LC_MESSAGES/django.mo +0 -0
  353. wagtail/contrib/redirects/locale/ja/LC_MESSAGES/django.po +1 -13
  354. wagtail/contrib/redirects/locale/ka/LC_MESSAGES/django.po +1 -1
  355. wagtail/contrib/redirects/locale/ko/LC_MESSAGES/django.po +1 -1
  356. wagtail/contrib/redirects/locale/lt/LC_MESSAGES/django.po +1 -1
  357. wagtail/contrib/redirects/locale/lv/LC_MESSAGES/django.po +1 -1
  358. wagtail/contrib/redirects/locale/mi/LC_MESSAGES/django.po +1 -1
  359. wagtail/contrib/redirects/locale/mn/LC_MESSAGES/django.po +1 -1
  360. wagtail/contrib/redirects/locale/my/LC_MESSAGES/django.po +1 -1
  361. wagtail/contrib/redirects/locale/nb/LC_MESSAGES/django.mo +0 -0
  362. wagtail/contrib/redirects/locale/nb/LC_MESSAGES/django.po +1 -13
  363. wagtail/contrib/redirects/locale/nl/LC_MESSAGES/django.mo +0 -0
  364. wagtail/contrib/redirects/locale/nl/LC_MESSAGES/django.po +9 -9
  365. wagtail/contrib/redirects/locale/pl/LC_MESSAGES/django.mo +0 -0
  366. wagtail/contrib/redirects/locale/pl/LC_MESSAGES/django.po +1 -14
  367. wagtail/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  368. wagtail/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po +1 -13
  369. wagtail/contrib/redirects/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  370. wagtail/contrib/redirects/locale/pt_PT/LC_MESSAGES/django.po +1 -13
  371. wagtail/contrib/redirects/locale/ro/LC_MESSAGES/django.mo +0 -0
  372. wagtail/contrib/redirects/locale/ro/LC_MESSAGES/django.po +1 -13
  373. wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.mo +0 -0
  374. wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.po +1 -13
  375. wagtail/contrib/redirects/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  376. wagtail/contrib/redirects/locale/sl/LC_MESSAGES/django.mo +0 -0
  377. wagtail/contrib/redirects/locale/sl/LC_MESSAGES/django.po +1 -14
  378. wagtail/contrib/redirects/locale/sr/LC_MESSAGES/django.po +1 -1
  379. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.mo +0 -0
  380. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.po +11 -10
  381. wagtail/contrib/redirects/locale/ta/LC_MESSAGES/django.po +1 -1
  382. wagtail/contrib/redirects/locale/tet/LC_MESSAGES/django.po +1 -1
  383. wagtail/contrib/redirects/locale/th/LC_MESSAGES/django.po +1 -1
  384. wagtail/contrib/redirects/locale/tr/LC_MESSAGES/django.mo +0 -0
  385. wagtail/contrib/redirects/locale/tr/LC_MESSAGES/django.po +1 -13
  386. wagtail/contrib/redirects/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  387. wagtail/contrib/redirects/locale/ug/LC_MESSAGES/django.mo +0 -0
  388. wagtail/contrib/redirects/locale/ug/LC_MESSAGES/django.po +1 -13
  389. wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.mo +0 -0
  390. wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.po +1 -13
  391. wagtail/contrib/redirects/locale/vi/LC_MESSAGES/django.po +1 -1
  392. wagtail/contrib/redirects/locale/zh/LC_MESSAGES/django.po +1 -1
  393. wagtail/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  394. wagtail/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po +1 -13
  395. wagtail/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  396. wagtail/contrib/redirects/middleware.py +11 -7
  397. wagtail/contrib/redirects/models.py +17 -1
  398. wagtail/contrib/redirects/tests/test_import_admin_views.py +3 -3
  399. wagtail/contrib/redirects/tests/test_redirects.py +56 -8
  400. wagtail/contrib/search_promotions/locale/af/LC_MESSAGES/django.po +1 -1
  401. wagtail/contrib/search_promotions/locale/ar/LC_MESSAGES/django.mo +0 -0
  402. wagtail/contrib/search_promotions/locale/ar/LC_MESSAGES/django.po +1 -7
  403. wagtail/contrib/search_promotions/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  404. wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.mo +0 -0
  405. wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.po +1 -7
  406. wagtail/contrib/search_promotions/locale/bg/LC_MESSAGES/django.po +1 -1
  407. wagtail/contrib/search_promotions/locale/bn/LC_MESSAGES/django.po +1 -1
  408. wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.mo +0 -0
  409. wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.po +5 -5
  410. wagtail/contrib/search_promotions/locale/cs/LC_MESSAGES/django.mo +0 -0
  411. wagtail/contrib/search_promotions/locale/cs/LC_MESSAGES/django.po +1 -7
  412. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.mo +0 -0
  413. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.po +1 -7
  414. wagtail/contrib/search_promotions/locale/da/LC_MESSAGES/django.po +1 -1
  415. wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.mo +0 -0
  416. wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.po +1 -7
  417. wagtail/contrib/search_promotions/locale/dv/LC_MESSAGES/django.po +1 -1
  418. wagtail/contrib/search_promotions/locale/el/LC_MESSAGES/django.mo +0 -0
  419. wagtail/contrib/search_promotions/locale/el/LC_MESSAGES/django.po +1 -7
  420. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +6 -6
  421. wagtail/contrib/search_promotions/locale/es/LC_MESSAGES/django.mo +0 -0
  422. wagtail/contrib/search_promotions/locale/es/LC_MESSAGES/django.po +1 -7
  423. wagtail/contrib/search_promotions/locale/es_419/LC_MESSAGES/django.po +1 -1
  424. wagtail/contrib/search_promotions/locale/et/LC_MESSAGES/django.mo +0 -0
  425. wagtail/contrib/search_promotions/locale/et/LC_MESSAGES/django.po +1 -7
  426. wagtail/contrib/search_promotions/locale/eu/LC_MESSAGES/django.po +1 -1
  427. wagtail/contrib/search_promotions/locale/fa/LC_MESSAGES/django.mo +0 -0
  428. wagtail/contrib/search_promotions/locale/fa/LC_MESSAGES/django.po +1 -7
  429. wagtail/contrib/search_promotions/locale/fi/LC_MESSAGES/django.mo +0 -0
  430. wagtail/contrib/search_promotions/locale/fi/LC_MESSAGES/django.po +1 -7
  431. wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.mo +0 -0
  432. wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.po +5 -5
  433. wagtail/contrib/search_promotions/locale/gl/LC_MESSAGES/django.mo +0 -0
  434. wagtail/contrib/search_promotions/locale/gl/LC_MESSAGES/django.po +5 -5
  435. wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  436. wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.po +1 -7
  437. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  438. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.po +1 -7
  439. wagtail/contrib/search_promotions/locale/ht/LC_MESSAGES/django.po +1 -1
  440. wagtail/contrib/search_promotions/locale/hu/LC_MESSAGES/django.mo +0 -0
  441. wagtail/contrib/search_promotions/locale/hu/LC_MESSAGES/django.po +1 -7
  442. wagtail/contrib/search_promotions/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  443. wagtail/contrib/search_promotions/locale/id_ID/LC_MESSAGES/django.po +1 -7
  444. wagtail/contrib/search_promotions/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  445. wagtail/contrib/search_promotions/locale/is_IS/LC_MESSAGES/django.po +8 -7
  446. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
  447. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +42 -7
  448. wagtail/contrib/search_promotions/locale/ja/LC_MESSAGES/django.mo +0 -0
  449. wagtail/contrib/search_promotions/locale/ja/LC_MESSAGES/django.po +1 -7
  450. wagtail/contrib/search_promotions/locale/ka/LC_MESSAGES/django.po +1 -1
  451. wagtail/contrib/search_promotions/locale/ko/LC_MESSAGES/django.mo +0 -0
  452. wagtail/contrib/search_promotions/locale/ko/LC_MESSAGES/django.po +1 -7
  453. wagtail/contrib/search_promotions/locale/lt/LC_MESSAGES/django.mo +0 -0
  454. wagtail/contrib/search_promotions/locale/lt/LC_MESSAGES/django.po +1 -7
  455. wagtail/contrib/search_promotions/locale/lv/LC_MESSAGES/django.mo +0 -0
  456. wagtail/contrib/search_promotions/locale/lv/LC_MESSAGES/django.po +1 -7
  457. wagtail/contrib/search_promotions/locale/mi/LC_MESSAGES/django.po +1 -1
  458. wagtail/contrib/search_promotions/locale/mn/LC_MESSAGES/django.po +1 -1
  459. wagtail/contrib/search_promotions/locale/my/LC_MESSAGES/django.po +1 -1
  460. wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.mo +0 -0
  461. wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.po +1 -7
  462. wagtail/contrib/search_promotions/locale/nl/LC_MESSAGES/django.mo +0 -0
  463. wagtail/contrib/search_promotions/locale/nl/LC_MESSAGES/django.po +4 -4
  464. wagtail/contrib/search_promotions/locale/pl/LC_MESSAGES/django.mo +0 -0
  465. wagtail/contrib/search_promotions/locale/pl/LC_MESSAGES/django.po +1 -7
  466. wagtail/contrib/search_promotions/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  467. wagtail/contrib/search_promotions/locale/pt_BR/LC_MESSAGES/django.po +1 -7
  468. wagtail/contrib/search_promotions/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  469. wagtail/contrib/search_promotions/locale/pt_PT/LC_MESSAGES/django.po +1 -7
  470. wagtail/contrib/search_promotions/locale/ro/LC_MESSAGES/django.mo +0 -0
  471. wagtail/contrib/search_promotions/locale/ro/LC_MESSAGES/django.po +1 -7
  472. wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.mo +0 -0
  473. wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.po +1 -7
  474. wagtail/contrib/search_promotions/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  475. wagtail/contrib/search_promotions/locale/sk_SK/LC_MESSAGES/django.po +1 -7
  476. wagtail/contrib/search_promotions/locale/sl/LC_MESSAGES/django.mo +0 -0
  477. wagtail/contrib/search_promotions/locale/sl/LC_MESSAGES/django.po +1 -7
  478. wagtail/contrib/search_promotions/locale/sv/LC_MESSAGES/django.mo +0 -0
  479. wagtail/contrib/search_promotions/locale/sv/LC_MESSAGES/django.po +1 -7
  480. wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.mo +0 -0
  481. wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.po +1 -7
  482. wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.mo +0 -0
  483. wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.po +1 -7
  484. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.mo +0 -0
  485. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.po +1 -7
  486. wagtail/contrib/search_promotions/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  487. wagtail/contrib/search_promotions/locale/tr_TR/LC_MESSAGES/django.po +1 -7
  488. wagtail/contrib/search_promotions/locale/ug/LC_MESSAGES/django.mo +0 -0
  489. wagtail/contrib/search_promotions/locale/ug/LC_MESSAGES/django.po +1 -7
  490. wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.mo +0 -0
  491. wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.po +1 -7
  492. wagtail/contrib/search_promotions/locale/vi/LC_MESSAGES/django.po +1 -1
  493. wagtail/contrib/search_promotions/locale/zh/LC_MESSAGES/django.po +1 -1
  494. wagtail/contrib/search_promotions/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  495. wagtail/contrib/search_promotions/locale/zh_Hans/LC_MESSAGES/django.po +1 -7
  496. wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  497. wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.po +1 -7
  498. wagtail/contrib/search_promotions/tests.py +1 -1
  499. wagtail/contrib/search_promotions/views/settings.py +24 -25
  500. wagtail/contrib/settings/jinja2tags.py +2 -2
  501. wagtail/contrib/settings/locale/ar/LC_MESSAGES/django.po +1 -1
  502. wagtail/contrib/settings/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  503. wagtail/contrib/settings/locale/be/LC_MESSAGES/django.po +1 -1
  504. wagtail/contrib/settings/locale/bn/LC_MESSAGES/django.po +1 -1
  505. wagtail/contrib/settings/locale/ca/LC_MESSAGES/django.po +1 -1
  506. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.po +1 -1
  507. wagtail/contrib/settings/locale/cy/LC_MESSAGES/django.po +1 -1
  508. wagtail/contrib/settings/locale/da/LC_MESSAGES/django.po +1 -1
  509. wagtail/contrib/settings/locale/de/LC_MESSAGES/django.po +1 -1
  510. wagtail/contrib/settings/locale/dv/LC_MESSAGES/django.po +1 -1
  511. wagtail/contrib/settings/locale/el/LC_MESSAGES/django.po +1 -1
  512. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +2 -2
  513. wagtail/contrib/settings/locale/en_IN/LC_MESSAGES/django.po +1 -1
  514. wagtail/contrib/settings/locale/es/LC_MESSAGES/django.po +1 -1
  515. wagtail/contrib/settings/locale/es_419/LC_MESSAGES/django.po +1 -1
  516. wagtail/contrib/settings/locale/es_VE/LC_MESSAGES/django.po +1 -1
  517. wagtail/contrib/settings/locale/et/LC_MESSAGES/django.po +1 -1
  518. wagtail/contrib/settings/locale/fa/LC_MESSAGES/django.po +1 -1
  519. wagtail/contrib/settings/locale/fi/LC_MESSAGES/django.po +1 -1
  520. wagtail/contrib/settings/locale/fr/LC_MESSAGES/django.po +1 -1
  521. wagtail/contrib/settings/locale/gl/LC_MESSAGES/django.po +1 -1
  522. wagtail/contrib/settings/locale/he_IL/LC_MESSAGES/django.po +1 -1
  523. wagtail/contrib/settings/locale/hi/LC_MESSAGES/django.po +1 -1
  524. wagtail/contrib/settings/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  525. wagtail/contrib/settings/locale/ht/LC_MESSAGES/django.po +1 -1
  526. wagtail/contrib/settings/locale/hu/LC_MESSAGES/django.po +1 -1
  527. wagtail/contrib/settings/locale/id_ID/LC_MESSAGES/django.po +1 -1
  528. wagtail/contrib/settings/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  529. wagtail/contrib/settings/locale/is_IS/LC_MESSAGES/django.po +8 -3
  530. wagtail/contrib/settings/locale/it/LC_MESSAGES/django.mo +0 -0
  531. wagtail/contrib/settings/locale/it/LC_MESSAGES/django.po +7 -3
  532. wagtail/contrib/settings/locale/ja/LC_MESSAGES/django.po +1 -1
  533. wagtail/contrib/settings/locale/ka/LC_MESSAGES/django.po +1 -1
  534. wagtail/contrib/settings/locale/ko/LC_MESSAGES/django.po +1 -1
  535. wagtail/contrib/settings/locale/lt/LC_MESSAGES/django.po +1 -1
  536. wagtail/contrib/settings/locale/lv/LC_MESSAGES/django.po +1 -1
  537. wagtail/contrib/settings/locale/mi/LC_MESSAGES/django.po +1 -1
  538. wagtail/contrib/settings/locale/mn/LC_MESSAGES/django.po +1 -1
  539. wagtail/contrib/settings/locale/my/LC_MESSAGES/django.po +1 -1
  540. wagtail/contrib/settings/locale/nb/LC_MESSAGES/django.po +1 -1
  541. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.po +1 -1
  542. wagtail/contrib/settings/locale/pl/LC_MESSAGES/django.po +1 -1
  543. wagtail/contrib/settings/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  544. wagtail/contrib/settings/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  545. wagtail/contrib/settings/locale/ro/LC_MESSAGES/django.po +1 -1
  546. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.po +1 -1
  547. wagtail/contrib/settings/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  548. wagtail/contrib/settings/locale/sl/LC_MESSAGES/django.po +1 -1
  549. wagtail/contrib/settings/locale/sr/LC_MESSAGES/django.po +1 -1
  550. wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.mo +0 -0
  551. wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.po +4 -3
  552. wagtail/contrib/settings/locale/ta/LC_MESSAGES/django.po +1 -1
  553. wagtail/contrib/settings/locale/tet/LC_MESSAGES/django.po +1 -1
  554. wagtail/contrib/settings/locale/th/LC_MESSAGES/django.po +1 -1
  555. wagtail/contrib/settings/locale/tr/LC_MESSAGES/django.po +1 -1
  556. wagtail/contrib/settings/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  557. wagtail/contrib/settings/locale/ug/LC_MESSAGES/django.po +1 -1
  558. wagtail/contrib/settings/locale/uk/LC_MESSAGES/django.po +1 -1
  559. wagtail/contrib/settings/locale/vi/LC_MESSAGES/django.po +1 -1
  560. wagtail/contrib/settings/locale/zh/LC_MESSAGES/django.po +1 -1
  561. wagtail/contrib/settings/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  562. wagtail/contrib/settings/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  563. wagtail/contrib/settings/tests/generic/test_admin.py +118 -2
  564. wagtail/contrib/settings/tests/site_specific/test_admin.py +86 -15
  565. wagtail/contrib/settings/tests/site_specific/test_model.py +2 -2
  566. wagtail/contrib/settings/views.py +7 -0
  567. wagtail/contrib/simple_translation/locale/ar/LC_MESSAGES/django.po +1 -1
  568. wagtail/contrib/simple_translation/locale/be/LC_MESSAGES/django.po +1 -1
  569. wagtail/contrib/simple_translation/locale/ca/LC_MESSAGES/django.po +1 -1
  570. wagtail/contrib/simple_translation/locale/cs/LC_MESSAGES/django.po +1 -1
  571. wagtail/contrib/simple_translation/locale/cy/LC_MESSAGES/django.po +1 -1
  572. wagtail/contrib/simple_translation/locale/de/LC_MESSAGES/django.po +1 -1
  573. wagtail/contrib/simple_translation/locale/dv/LC_MESSAGES/django.po +1 -1
  574. wagtail/contrib/simple_translation/locale/el/LC_MESSAGES/django.po +1 -1
  575. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  576. wagtail/contrib/simple_translation/locale/es/LC_MESSAGES/django.po +1 -1
  577. wagtail/contrib/simple_translation/locale/es_419/LC_MESSAGES/django.po +1 -1
  578. wagtail/contrib/simple_translation/locale/fa/LC_MESSAGES/django.po +1 -1
  579. wagtail/contrib/simple_translation/locale/fi/LC_MESSAGES/django.po +1 -1
  580. wagtail/contrib/simple_translation/locale/fr/LC_MESSAGES/django.po +1 -1
  581. wagtail/contrib/simple_translation/locale/gl/LC_MESSAGES/django.po +1 -1
  582. wagtail/contrib/simple_translation/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  583. wagtail/contrib/simple_translation/locale/hu/LC_MESSAGES/django.po +1 -1
  584. wagtail/contrib/simple_translation/locale/is_IS/LC_MESSAGES/django.po +1 -1
  585. wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.mo +0 -0
  586. wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.po +6 -3
  587. wagtail/contrib/simple_translation/locale/ko/LC_MESSAGES/django.po +1 -1
  588. wagtail/contrib/simple_translation/locale/lt/LC_MESSAGES/django.po +1 -1
  589. wagtail/contrib/simple_translation/locale/mi/LC_MESSAGES/django.po +1 -1
  590. wagtail/contrib/simple_translation/locale/mn/LC_MESSAGES/django.po +1 -1
  591. wagtail/contrib/simple_translation/locale/nb/LC_MESSAGES/django.po +1 -1
  592. wagtail/contrib/simple_translation/locale/nl/LC_MESSAGES/django.po +1 -1
  593. wagtail/contrib/simple_translation/locale/pl/LC_MESSAGES/django.po +1 -1
  594. wagtail/contrib/simple_translation/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  595. wagtail/contrib/simple_translation/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  596. wagtail/contrib/simple_translation/locale/ro/LC_MESSAGES/django.po +1 -1
  597. wagtail/contrib/simple_translation/locale/ru/LC_MESSAGES/django.po +1 -1
  598. wagtail/contrib/simple_translation/locale/sl/LC_MESSAGES/django.po +1 -1
  599. wagtail/contrib/simple_translation/locale/sv/LC_MESSAGES/django.po +1 -1
  600. wagtail/contrib/simple_translation/locale/tr/LC_MESSAGES/django.po +1 -1
  601. wagtail/contrib/simple_translation/locale/ug/LC_MESSAGES/django.po +1 -1
  602. wagtail/contrib/simple_translation/locale/uk/LC_MESSAGES/django.po +1 -1
  603. wagtail/contrib/simple_translation/locale/vi/LC_MESSAGES/django.po +1 -1
  604. wagtail/contrib/simple_translation/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  605. wagtail/contrib/simple_translation/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  606. wagtail/contrib/styleguide/locale/af/LC_MESSAGES/django.po +1 -1
  607. wagtail/contrib/styleguide/locale/ar/LC_MESSAGES/django.po +1 -1
  608. wagtail/contrib/styleguide/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  609. wagtail/contrib/styleguide/locale/be/LC_MESSAGES/django.po +1 -1
  610. wagtail/contrib/styleguide/locale/bg/LC_MESSAGES/django.po +1 -1
  611. wagtail/contrib/styleguide/locale/bn/LC_MESSAGES/django.po +1 -1
  612. wagtail/contrib/styleguide/locale/ca/LC_MESSAGES/django.po +1 -1
  613. wagtail/contrib/styleguide/locale/cs/LC_MESSAGES/django.po +1 -1
  614. wagtail/contrib/styleguide/locale/cy/LC_MESSAGES/django.po +1 -1
  615. wagtail/contrib/styleguide/locale/da/LC_MESSAGES/django.po +1 -1
  616. wagtail/contrib/styleguide/locale/de/LC_MESSAGES/django.po +1 -1
  617. wagtail/contrib/styleguide/locale/dv/LC_MESSAGES/django.po +1 -1
  618. wagtail/contrib/styleguide/locale/el/LC_MESSAGES/django.po +1 -1
  619. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
  620. wagtail/contrib/styleguide/locale/en_IN/LC_MESSAGES/django.po +1 -1
  621. wagtail/contrib/styleguide/locale/es/LC_MESSAGES/django.po +1 -1
  622. wagtail/contrib/styleguide/locale/es_419/LC_MESSAGES/django.po +1 -1
  623. wagtail/contrib/styleguide/locale/es_VE/LC_MESSAGES/django.po +1 -1
  624. wagtail/contrib/styleguide/locale/et/LC_MESSAGES/django.po +1 -1
  625. wagtail/contrib/styleguide/locale/fa/LC_MESSAGES/django.po +1 -1
  626. wagtail/contrib/styleguide/locale/fi/LC_MESSAGES/django.po +1 -1
  627. wagtail/contrib/styleguide/locale/fr/LC_MESSAGES/django.po +1 -1
  628. wagtail/contrib/styleguide/locale/gl/LC_MESSAGES/django.po +1 -1
  629. wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.po +1 -1
  630. wagtail/contrib/styleguide/locale/hi/LC_MESSAGES/django.po +1 -1
  631. wagtail/contrib/styleguide/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  632. wagtail/contrib/styleguide/locale/ht/LC_MESSAGES/django.po +1 -1
  633. wagtail/contrib/styleguide/locale/hu/LC_MESSAGES/django.po +1 -1
  634. wagtail/contrib/styleguide/locale/id_ID/LC_MESSAGES/django.po +1 -1
  635. wagtail/contrib/styleguide/locale/is_IS/LC_MESSAGES/django.po +1 -1
  636. wagtail/contrib/styleguide/locale/it/LC_MESSAGES/django.po +1 -1
  637. wagtail/contrib/styleguide/locale/ja/LC_MESSAGES/django.po +1 -1
  638. wagtail/contrib/styleguide/locale/ka/LC_MESSAGES/django.po +1 -1
  639. wagtail/contrib/styleguide/locale/ko/LC_MESSAGES/django.po +1 -1
  640. wagtail/contrib/styleguide/locale/lt/LC_MESSAGES/django.po +1 -1
  641. wagtail/contrib/styleguide/locale/lv/LC_MESSAGES/django.po +1 -1
  642. wagtail/contrib/styleguide/locale/mi/LC_MESSAGES/django.po +1 -1
  643. wagtail/contrib/styleguide/locale/mn/LC_MESSAGES/django.po +1 -1
  644. wagtail/contrib/styleguide/locale/my/LC_MESSAGES/django.po +1 -1
  645. wagtail/contrib/styleguide/locale/nb/LC_MESSAGES/django.po +1 -1
  646. wagtail/contrib/styleguide/locale/nl/LC_MESSAGES/django.po +1 -1
  647. wagtail/contrib/styleguide/locale/pl/LC_MESSAGES/django.po +1 -1
  648. wagtail/contrib/styleguide/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  649. wagtail/contrib/styleguide/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  650. wagtail/contrib/styleguide/locale/ro/LC_MESSAGES/django.po +1 -1
  651. wagtail/contrib/styleguide/locale/ru/LC_MESSAGES/django.po +1 -1
  652. wagtail/contrib/styleguide/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  653. wagtail/contrib/styleguide/locale/sl/LC_MESSAGES/django.po +1 -1
  654. wagtail/contrib/styleguide/locale/sv/LC_MESSAGES/django.po +1 -1
  655. wagtail/contrib/styleguide/locale/ta/LC_MESSAGES/django.po +1 -1
  656. wagtail/contrib/styleguide/locale/tet/LC_MESSAGES/django.po +1 -1
  657. wagtail/contrib/styleguide/locale/th/LC_MESSAGES/django.po +1 -1
  658. wagtail/contrib/styleguide/locale/tr/LC_MESSAGES/django.po +1 -1
  659. wagtail/contrib/styleguide/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  660. wagtail/contrib/styleguide/locale/ug/LC_MESSAGES/django.po +1 -1
  661. wagtail/contrib/styleguide/locale/uk/LC_MESSAGES/django.po +1 -1
  662. wagtail/contrib/styleguide/locale/vi/LC_MESSAGES/django.po +1 -1
  663. wagtail/contrib/styleguide/locale/zh/LC_MESSAGES/django.po +1 -1
  664. wagtail/contrib/styleguide/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  665. wagtail/contrib/styleguide/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  666. wagtail/contrib/styleguide/tests.py +2 -0
  667. wagtail/contrib/styleguide/views.py +4 -5
  668. wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.mo +0 -0
  669. wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.po +6 -2
  670. wagtail/contrib/table_block/locale/be/LC_MESSAGES/django.po +1 -1
  671. wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.mo +0 -0
  672. wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.po +6 -3
  673. wagtail/contrib/table_block/locale/cs/LC_MESSAGES/django.po +1 -1
  674. wagtail/contrib/table_block/locale/cy/LC_MESSAGES/django.po +1 -1
  675. wagtail/contrib/table_block/locale/de/LC_MESSAGES/django.po +1 -1
  676. wagtail/contrib/table_block/locale/dv/LC_MESSAGES/django.po +1 -1
  677. wagtail/contrib/table_block/locale/el/LC_MESSAGES/django.po +1 -1
  678. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  679. wagtail/contrib/table_block/locale/en_IN/LC_MESSAGES/django.po +1 -1
  680. wagtail/contrib/table_block/locale/es/LC_MESSAGES/django.po +1 -1
  681. wagtail/contrib/table_block/locale/et/LC_MESSAGES/django.po +1 -1
  682. wagtail/contrib/table_block/locale/fa/LC_MESSAGES/django.po +1 -1
  683. wagtail/contrib/table_block/locale/fi/LC_MESSAGES/django.po +1 -1
  684. wagtail/contrib/table_block/locale/fr/LC_MESSAGES/django.mo +0 -0
  685. wagtail/contrib/table_block/locale/fr/LC_MESSAGES/django.po +6 -3
  686. wagtail/contrib/table_block/locale/gl/LC_MESSAGES/django.mo +0 -0
  687. wagtail/contrib/table_block/locale/gl/LC_MESSAGES/django.po +6 -3
  688. wagtail/contrib/table_block/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  689. wagtail/contrib/table_block/locale/ht/LC_MESSAGES/django.po +1 -1
  690. wagtail/contrib/table_block/locale/hu/LC_MESSAGES/django.po +1 -1
  691. wagtail/contrib/table_block/locale/id_ID/LC_MESSAGES/django.po +1 -1
  692. wagtail/contrib/table_block/locale/is_IS/LC_MESSAGES/django.po +1 -1
  693. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.mo +0 -0
  694. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +6 -3
  695. wagtail/contrib/table_block/locale/ja/LC_MESSAGES/django.po +1 -1
  696. wagtail/contrib/table_block/locale/ko/LC_MESSAGES/django.po +1 -1
  697. wagtail/contrib/table_block/locale/lt/LC_MESSAGES/django.po +1 -1
  698. wagtail/contrib/table_block/locale/lv/LC_MESSAGES/django.po +1 -1
  699. wagtail/contrib/table_block/locale/mi/LC_MESSAGES/django.po +1 -1
  700. wagtail/contrib/table_block/locale/mn/LC_MESSAGES/django.po +1 -1
  701. wagtail/contrib/table_block/locale/my/LC_MESSAGES/django.po +1 -1
  702. wagtail/contrib/table_block/locale/nb/LC_MESSAGES/django.po +1 -1
  703. wagtail/contrib/table_block/locale/nl/LC_MESSAGES/django.mo +0 -0
  704. wagtail/contrib/table_block/locale/nl/LC_MESSAGES/django.po +6 -3
  705. wagtail/contrib/table_block/locale/pl/LC_MESSAGES/django.po +1 -1
  706. wagtail/contrib/table_block/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  707. wagtail/contrib/table_block/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  708. wagtail/contrib/table_block/locale/ro/LC_MESSAGES/django.po +1 -1
  709. wagtail/contrib/table_block/locale/ru/LC_MESSAGES/django.po +1 -1
  710. wagtail/contrib/table_block/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  711. wagtail/contrib/table_block/locale/sl/LC_MESSAGES/django.po +1 -1
  712. wagtail/contrib/table_block/locale/sv/LC_MESSAGES/django.po +1 -1
  713. wagtail/contrib/table_block/locale/tet/LC_MESSAGES/django.po +1 -1
  714. wagtail/contrib/table_block/locale/th/LC_MESSAGES/django.po +1 -1
  715. wagtail/contrib/table_block/locale/tr/LC_MESSAGES/django.po +1 -1
  716. wagtail/contrib/table_block/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  717. wagtail/contrib/table_block/locale/ug/LC_MESSAGES/django.po +1 -1
  718. wagtail/contrib/table_block/locale/uk/LC_MESSAGES/django.po +1 -1
  719. wagtail/contrib/table_block/locale/vi/LC_MESSAGES/django.po +1 -1
  720. wagtail/contrib/table_block/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  721. wagtail/contrib/table_block/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  722. wagtail/contrib/typed_table_block/blocks.py +37 -0
  723. wagtail/contrib/typed_table_block/locale/ar/LC_MESSAGES/django.po +1 -1
  724. wagtail/contrib/typed_table_block/locale/be/LC_MESSAGES/django.po +1 -1
  725. wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.po +1 -1
  726. wagtail/contrib/typed_table_block/locale/cy/LC_MESSAGES/django.po +1 -1
  727. wagtail/contrib/typed_table_block/locale/de/LC_MESSAGES/django.po +1 -1
  728. wagtail/contrib/typed_table_block/locale/dv/LC_MESSAGES/django.po +1 -1
  729. wagtail/contrib/typed_table_block/locale/el/LC_MESSAGES/django.po +1 -1
  730. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
  731. wagtail/contrib/typed_table_block/locale/es/LC_MESSAGES/django.po +1 -1
  732. wagtail/contrib/typed_table_block/locale/fa/LC_MESSAGES/django.po +1 -1
  733. wagtail/contrib/typed_table_block/locale/fi/LC_MESSAGES/django.po +1 -1
  734. wagtail/contrib/typed_table_block/locale/fr/LC_MESSAGES/django.po +1 -1
  735. wagtail/contrib/typed_table_block/locale/gl/LC_MESSAGES/django.po +1 -1
  736. wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.po +1 -1
  737. wagtail/contrib/typed_table_block/locale/is_IS/LC_MESSAGES/django.po +1 -1
  738. wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.po +1 -1
  739. wagtail/contrib/typed_table_block/locale/ko/LC_MESSAGES/django.po +1 -1
  740. wagtail/contrib/typed_table_block/locale/lt/LC_MESSAGES/django.po +1 -1
  741. wagtail/contrib/typed_table_block/locale/nl/LC_MESSAGES/django.po +1 -1
  742. wagtail/contrib/typed_table_block/locale/pl/LC_MESSAGES/django.po +1 -1
  743. wagtail/contrib/typed_table_block/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  744. wagtail/contrib/typed_table_block/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  745. wagtail/contrib/typed_table_block/locale/ro/LC_MESSAGES/django.po +1 -1
  746. wagtail/contrib/typed_table_block/locale/ru/LC_MESSAGES/django.po +1 -1
  747. wagtail/contrib/typed_table_block/locale/sl/LC_MESSAGES/django.po +1 -1
  748. wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.mo +0 -0
  749. wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.po +5 -4
  750. wagtail/contrib/typed_table_block/locale/th/LC_MESSAGES/django.po +1 -1
  751. wagtail/contrib/typed_table_block/locale/tr/LC_MESSAGES/django.po +1 -1
  752. wagtail/contrib/typed_table_block/locale/ug/LC_MESSAGES/django.po +1 -1
  753. wagtail/contrib/typed_table_block/locale/uk/LC_MESSAGES/django.po +1 -1
  754. wagtail/contrib/typed_table_block/locale/zh/LC_MESSAGES/django.po +1 -1
  755. wagtail/contrib/typed_table_block/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  756. wagtail/contrib/typed_table_block/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  757. wagtail/contrib/typed_table_block/tests.py +108 -0
  758. wagtail/coreutils.py +4 -4
  759. wagtail/documents/__init__.py +4 -4
  760. wagtail/documents/forms.py +1 -1
  761. wagtail/documents/locale/af/LC_MESSAGES/django.po +1 -1
  762. wagtail/documents/locale/ar/LC_MESSAGES/django.mo +0 -0
  763. wagtail/documents/locale/ar/LC_MESSAGES/django.po +1 -5
  764. wagtail/documents/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  765. wagtail/documents/locale/be/LC_MESSAGES/django.mo +0 -0
  766. wagtail/documents/locale/be/LC_MESSAGES/django.po +1 -5
  767. wagtail/documents/locale/bg/LC_MESSAGES/django.po +1 -1
  768. wagtail/documents/locale/bn/LC_MESSAGES/django.po +1 -1
  769. wagtail/documents/locale/ca/LC_MESSAGES/django.mo +0 -0
  770. wagtail/documents/locale/ca/LC_MESSAGES/django.po +5 -5
  771. wagtail/documents/locale/cs/LC_MESSAGES/django.mo +0 -0
  772. wagtail/documents/locale/cs/LC_MESSAGES/django.po +1 -7
  773. wagtail/documents/locale/cy/LC_MESSAGES/django.po +1 -1
  774. wagtail/documents/locale/da/LC_MESSAGES/django.po +1 -1
  775. wagtail/documents/locale/de/LC_MESSAGES/django.mo +0 -0
  776. wagtail/documents/locale/de/LC_MESSAGES/django.po +1 -7
  777. wagtail/documents/locale/dv/LC_MESSAGES/django.po +1 -1
  778. wagtail/documents/locale/el/LC_MESSAGES/django.mo +0 -0
  779. wagtail/documents/locale/el/LC_MESSAGES/django.po +1 -7
  780. wagtail/documents/locale/en/LC_MESSAGES/django.po +15 -15
  781. wagtail/documents/locale/es/LC_MESSAGES/django.mo +0 -0
  782. wagtail/documents/locale/es/LC_MESSAGES/django.po +1 -7
  783. wagtail/documents/locale/es_419/LC_MESSAGES/django.po +1 -1
  784. wagtail/documents/locale/et/LC_MESSAGES/django.mo +0 -0
  785. wagtail/documents/locale/et/LC_MESSAGES/django.po +1 -5
  786. wagtail/documents/locale/eu/LC_MESSAGES/django.po +1 -1
  787. wagtail/documents/locale/fa/LC_MESSAGES/django.mo +0 -0
  788. wagtail/documents/locale/fa/LC_MESSAGES/django.po +1 -5
  789. wagtail/documents/locale/fi/LC_MESSAGES/django.mo +0 -0
  790. wagtail/documents/locale/fi/LC_MESSAGES/django.po +1 -5
  791. wagtail/documents/locale/fr/LC_MESSAGES/django.mo +0 -0
  792. wagtail/documents/locale/fr/LC_MESSAGES/django.po +5 -5
  793. wagtail/documents/locale/gl/LC_MESSAGES/django.mo +0 -0
  794. wagtail/documents/locale/gl/LC_MESSAGES/django.po +5 -5
  795. wagtail/documents/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  796. wagtail/documents/locale/he_IL/LC_MESSAGES/django.po +1 -5
  797. wagtail/documents/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  798. wagtail/documents/locale/hr_HR/LC_MESSAGES/django.po +1 -6
  799. wagtail/documents/locale/ht/LC_MESSAGES/django.po +1 -1
  800. wagtail/documents/locale/hu/LC_MESSAGES/django.mo +0 -0
  801. wagtail/documents/locale/hu/LC_MESSAGES/django.po +1 -7
  802. wagtail/documents/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  803. wagtail/documents/locale/id_ID/LC_MESSAGES/django.po +1 -6
  804. wagtail/documents/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  805. wagtail/documents/locale/is_IS/LC_MESSAGES/django.po +14 -4
  806. wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
  807. wagtail/documents/locale/it/LC_MESSAGES/django.po +31 -5
  808. wagtail/documents/locale/ja/LC_MESSAGES/django.mo +0 -0
  809. wagtail/documents/locale/ja/LC_MESSAGES/django.po +1 -7
  810. wagtail/documents/locale/ka/LC_MESSAGES/django.po +1 -1
  811. wagtail/documents/locale/ko/LC_MESSAGES/django.mo +0 -0
  812. wagtail/documents/locale/ko/LC_MESSAGES/django.po +1 -6
  813. wagtail/documents/locale/lt/LC_MESSAGES/django.mo +0 -0
  814. wagtail/documents/locale/lt/LC_MESSAGES/django.po +1 -5
  815. wagtail/documents/locale/lv/LC_MESSAGES/django.po +1 -1
  816. wagtail/documents/locale/mi/LC_MESSAGES/django.mo +0 -0
  817. wagtail/documents/locale/mi/LC_MESSAGES/django.po +1 -7
  818. wagtail/documents/locale/mn/LC_MESSAGES/django.mo +0 -0
  819. wagtail/documents/locale/mn/LC_MESSAGES/django.po +1 -5
  820. wagtail/documents/locale/my/LC_MESSAGES/django.po +1 -1
  821. wagtail/documents/locale/nb/LC_MESSAGES/django.mo +0 -0
  822. wagtail/documents/locale/nb/LC_MESSAGES/django.po +1 -5
  823. wagtail/documents/locale/nl/LC_MESSAGES/django.mo +0 -0
  824. wagtail/documents/locale/nl/LC_MESSAGES/django.po +6 -6
  825. wagtail/documents/locale/pl/LC_MESSAGES/django.mo +0 -0
  826. wagtail/documents/locale/pl/LC_MESSAGES/django.po +1 -6
  827. wagtail/documents/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  828. wagtail/documents/locale/pt_BR/LC_MESSAGES/django.po +1 -7
  829. wagtail/documents/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  830. wagtail/documents/locale/pt_PT/LC_MESSAGES/django.po +1 -6
  831. wagtail/documents/locale/ro/LC_MESSAGES/django.mo +0 -0
  832. wagtail/documents/locale/ro/LC_MESSAGES/django.po +1 -5
  833. wagtail/documents/locale/ru/LC_MESSAGES/django.mo +0 -0
  834. wagtail/documents/locale/ru/LC_MESSAGES/django.po +1 -7
  835. wagtail/documents/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
  836. wagtail/documents/locale/sk_SK/LC_MESSAGES/django.po +1 -5
  837. wagtail/documents/locale/sl/LC_MESSAGES/django.mo +0 -0
  838. wagtail/documents/locale/sl/LC_MESSAGES/django.po +1 -7
  839. wagtail/documents/locale/sv/LC_MESSAGES/django.mo +0 -0
  840. wagtail/documents/locale/sv/LC_MESSAGES/django.po +30 -7
  841. wagtail/documents/locale/tet/LC_MESSAGES/django.po +1 -1
  842. wagtail/documents/locale/th/LC_MESSAGES/django.mo +0 -0
  843. wagtail/documents/locale/th/LC_MESSAGES/django.po +1 -5
  844. wagtail/documents/locale/tr/LC_MESSAGES/django.mo +0 -0
  845. wagtail/documents/locale/tr/LC_MESSAGES/django.po +13 -5
  846. wagtail/documents/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  847. wagtail/documents/locale/tr_TR/LC_MESSAGES/django.po +1 -5
  848. wagtail/documents/locale/ug/LC_MESSAGES/django.mo +0 -0
  849. wagtail/documents/locale/ug/LC_MESSAGES/django.po +1 -5
  850. wagtail/documents/locale/uk/LC_MESSAGES/django.mo +0 -0
  851. wagtail/documents/locale/uk/LC_MESSAGES/django.po +1 -5
  852. wagtail/documents/locale/vi/LC_MESSAGES/django.po +1 -1
  853. wagtail/documents/locale/zh/LC_MESSAGES/django.po +1 -1
  854. wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  855. wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.po +1 -5
  856. wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  857. wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.po +1 -5
  858. wagtail/documents/models.py +1 -1
  859. wagtail/documents/tests/test_admin_views.py +54 -7
  860. wagtail/documents/tests/test_search.py +39 -27
  861. wagtail/documents/tests/test_views.py +6 -4
  862. wagtail/documents/views/bulk_actions/add_tags.py +1 -1
  863. wagtail/documents/views/documents.py +31 -5
  864. wagtail/embeds/finders/facebook.py +3 -3
  865. wagtail/embeds/finders/instagram.py +3 -3
  866. wagtail/embeds/finders/oembed.py +7 -2
  867. wagtail/embeds/locale/ar/LC_MESSAGES/django.po +1 -1
  868. wagtail/embeds/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  869. wagtail/embeds/locale/be/LC_MESSAGES/django.po +1 -1
  870. wagtail/embeds/locale/bg/LC_MESSAGES/django.po +1 -1
  871. wagtail/embeds/locale/bn/LC_MESSAGES/django.po +1 -1
  872. wagtail/embeds/locale/ca/LC_MESSAGES/django.po +1 -1
  873. wagtail/embeds/locale/cs/LC_MESSAGES/django.po +1 -1
  874. wagtail/embeds/locale/cy/LC_MESSAGES/django.po +1 -1
  875. wagtail/embeds/locale/da/LC_MESSAGES/django.po +1 -1
  876. wagtail/embeds/locale/de/LC_MESSAGES/django.po +1 -1
  877. wagtail/embeds/locale/dv/LC_MESSAGES/django.po +1 -1
  878. wagtail/embeds/locale/el/LC_MESSAGES/django.po +1 -1
  879. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  880. wagtail/embeds/locale/es/LC_MESSAGES/django.po +1 -1
  881. wagtail/embeds/locale/es_419/LC_MESSAGES/django.po +1 -1
  882. wagtail/embeds/locale/et/LC_MESSAGES/django.po +1 -1
  883. wagtail/embeds/locale/fa/LC_MESSAGES/django.po +1 -1
  884. wagtail/embeds/locale/fi/LC_MESSAGES/django.po +1 -1
  885. wagtail/embeds/locale/fr/LC_MESSAGES/django.po +1 -1
  886. wagtail/embeds/locale/gl/LC_MESSAGES/django.po +1 -1
  887. wagtail/embeds/locale/he_IL/LC_MESSAGES/django.po +1 -1
  888. wagtail/embeds/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  889. wagtail/embeds/locale/ht/LC_MESSAGES/django.po +1 -1
  890. wagtail/embeds/locale/hu/LC_MESSAGES/django.po +1 -1
  891. wagtail/embeds/locale/id_ID/LC_MESSAGES/django.po +1 -1
  892. wagtail/embeds/locale/is_IS/LC_MESSAGES/django.po +1 -1
  893. wagtail/embeds/locale/it/LC_MESSAGES/django.po +1 -1
  894. wagtail/embeds/locale/ja/LC_MESSAGES/django.po +1 -1
  895. wagtail/embeds/locale/ko/LC_MESSAGES/django.po +1 -1
  896. wagtail/embeds/locale/lt/LC_MESSAGES/django.po +1 -1
  897. wagtail/embeds/locale/lv/LC_MESSAGES/django.po +1 -1
  898. wagtail/embeds/locale/mi/LC_MESSAGES/django.po +1 -1
  899. wagtail/embeds/locale/mn/LC_MESSAGES/django.po +1 -1
  900. wagtail/embeds/locale/my/LC_MESSAGES/django.po +1 -1
  901. wagtail/embeds/locale/nb/LC_MESSAGES/django.po +1 -1
  902. wagtail/embeds/locale/nl/LC_MESSAGES/django.po +1 -1
  903. wagtail/embeds/locale/pl/LC_MESSAGES/django.po +1 -1
  904. wagtail/embeds/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  905. wagtail/embeds/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  906. wagtail/embeds/locale/ro/LC_MESSAGES/django.po +1 -1
  907. wagtail/embeds/locale/ru/LC_MESSAGES/django.po +1 -1
  908. wagtail/embeds/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  909. wagtail/embeds/locale/sl/LC_MESSAGES/django.po +1 -1
  910. wagtail/embeds/locale/sv/LC_MESSAGES/django.po +1 -1
  911. wagtail/embeds/locale/tet/LC_MESSAGES/django.po +1 -1
  912. wagtail/embeds/locale/th/LC_MESSAGES/django.po +1 -1
  913. wagtail/embeds/locale/tr/LC_MESSAGES/django.po +1 -1
  914. wagtail/embeds/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  915. wagtail/embeds/locale/ug/LC_MESSAGES/django.po +1 -1
  916. wagtail/embeds/locale/uk/LC_MESSAGES/django.po +1 -1
  917. wagtail/embeds/locale/vi/LC_MESSAGES/django.po +1 -1
  918. wagtail/embeds/locale/zh/LC_MESSAGES/django.po +1 -1
  919. wagtail/embeds/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  920. wagtail/embeds/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  921. wagtail/embeds/oembed_providers.py +8 -0
  922. wagtail/embeds/tests/test_embeds.py +35 -0
  923. wagtail/images/__init__.py +4 -4
  924. wagtail/images/admin_urls.py +3 -3
  925. wagtail/images/blocks.py +1 -1
  926. wagtail/images/formats.py +2 -2
  927. wagtail/images/forms.py +1 -1
  928. wagtail/images/image_operations.py +2 -2
  929. wagtail/images/locale/ar/LC_MESSAGES/django.mo +0 -0
  930. wagtail/images/locale/ar/LC_MESSAGES/django.po +7 -10
  931. wagtail/images/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  932. wagtail/images/locale/be/LC_MESSAGES/django.po +7 -7
  933. wagtail/images/locale/bg/LC_MESSAGES/django.po +4 -4
  934. wagtail/images/locale/bn/LC_MESSAGES/django.po +1 -1
  935. wagtail/images/locale/ca/LC_MESSAGES/django.mo +0 -0
  936. wagtail/images/locale/ca/LC_MESSAGES/django.po +15 -9
  937. wagtail/images/locale/cs/LC_MESSAGES/django.po +7 -7
  938. wagtail/images/locale/cy/LC_MESSAGES/django.po +4 -4
  939. wagtail/images/locale/da/LC_MESSAGES/django.po +1 -1
  940. wagtail/images/locale/de/LC_MESSAGES/django.po +7 -7
  941. wagtail/images/locale/dv/LC_MESSAGES/django.po +7 -7
  942. wagtail/images/locale/el/LC_MESSAGES/django.po +7 -7
  943. wagtail/images/locale/en/LC_MESSAGES/django.po +44 -40
  944. wagtail/images/locale/es/LC_MESSAGES/django.po +7 -7
  945. wagtail/images/locale/es_419/LC_MESSAGES/django.po +1 -1
  946. wagtail/images/locale/et/LC_MESSAGES/django.po +7 -7
  947. wagtail/images/locale/eu/LC_MESSAGES/django.po +1 -1
  948. wagtail/images/locale/fa/LC_MESSAGES/django.po +4 -4
  949. wagtail/images/locale/fi/LC_MESSAGES/django.mo +0 -0
  950. wagtail/images/locale/fi/LC_MESSAGES/django.po +18 -9
  951. wagtail/images/locale/fr/LC_MESSAGES/django.mo +0 -0
  952. wagtail/images/locale/fr/LC_MESSAGES/django.po +15 -9
  953. wagtail/images/locale/gl/LC_MESSAGES/django.mo +0 -0
  954. wagtail/images/locale/gl/LC_MESSAGES/django.po +15 -9
  955. wagtail/images/locale/he_IL/LC_MESSAGES/django.po +4 -4
  956. wagtail/images/locale/hr_HR/LC_MESSAGES/django.po +7 -7
  957. wagtail/images/locale/ht/LC_MESSAGES/django.po +1 -1
  958. wagtail/images/locale/hu/LC_MESSAGES/django.mo +0 -0
  959. wagtail/images/locale/hu/LC_MESSAGES/django.po +7 -10
  960. wagtail/images/locale/id_ID/LC_MESSAGES/django.po +4 -4
  961. wagtail/images/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  962. wagtail/images/locale/is_IS/LC_MESSAGES/django.po +34 -9
  963. wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
  964. wagtail/images/locale/it/LC_MESSAGES/django.po +57 -11
  965. wagtail/images/locale/ja/LC_MESSAGES/django.po +7 -7
  966. wagtail/images/locale/ka/LC_MESSAGES/django.po +4 -4
  967. wagtail/images/locale/ko/LC_MESSAGES/django.po +7 -7
  968. wagtail/images/locale/lt/LC_MESSAGES/django.po +7 -7
  969. wagtail/images/locale/lv/LC_MESSAGES/django.po +4 -4
  970. wagtail/images/locale/mi/LC_MESSAGES/django.po +7 -7
  971. wagtail/images/locale/mn/LC_MESSAGES/django.po +4 -4
  972. wagtail/images/locale/my/LC_MESSAGES/django.po +1 -1
  973. wagtail/images/locale/nb/LC_MESSAGES/django.po +7 -7
  974. wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
  975. wagtail/images/locale/nl/LC_MESSAGES/django.po +18 -12
  976. wagtail/images/locale/pl/LC_MESSAGES/django.po +7 -7
  977. wagtail/images/locale/pt_BR/LC_MESSAGES/django.po +7 -7
  978. wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +7 -7
  979. wagtail/images/locale/ro/LC_MESSAGES/django.po +7 -7
  980. wagtail/images/locale/ru/LC_MESSAGES/django.mo +0 -0
  981. wagtail/images/locale/ru/LC_MESSAGES/django.po +7 -10
  982. wagtail/images/locale/sk_SK/LC_MESSAGES/django.po +4 -4
  983. wagtail/images/locale/sl/LC_MESSAGES/django.po +7 -7
  984. wagtail/images/locale/sv/LC_MESSAGES/django.mo +0 -0
  985. wagtail/images/locale/sv/LC_MESSAGES/django.po +56 -13
  986. wagtail/images/locale/tet/LC_MESSAGES/django.po +4 -4
  987. wagtail/images/locale/th/LC_MESSAGES/django.po +4 -4
  988. wagtail/images/locale/tr/LC_MESSAGES/django.mo +0 -0
  989. wagtail/images/locale/tr/LC_MESSAGES/django.po +85 -7
  990. wagtail/images/locale/tr_TR/LC_MESSAGES/django.po +4 -4
  991. wagtail/images/locale/ug/LC_MESSAGES/django.po +7 -7
  992. wagtail/images/locale/uk/LC_MESSAGES/django.po +7 -7
  993. wagtail/images/locale/vi/LC_MESSAGES/django.po +4 -4
  994. wagtail/images/locale/zh/LC_MESSAGES/django.po +4 -4
  995. wagtail/images/locale/zh_Hans/LC_MESSAGES/django.po +7 -7
  996. wagtail/images/locale/zh_Hant/LC_MESSAGES/django.po +7 -7
  997. wagtail/images/models.py +11 -10
  998. wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
  999. wagtail/images/templates/wagtailimages/images/url_generator.html +17 -38
  1000. wagtail/images/templates/wagtailimages/images/url_generator_output.html +28 -0
  1001. wagtail/images/templatetags/wagtailimages_tags.py +4 -4
  1002. wagtail/images/tests/test_admin_views.py +507 -65
  1003. wagtail/images/tests/test_image_operations.py +2 -2
  1004. wagtail/images/tests/test_models.py +38 -26
  1005. wagtail/images/views/bulk_actions/add_tags.py +1 -1
  1006. wagtail/images/views/chooser.py +10 -5
  1007. wagtail/images/views/images.py +108 -45
  1008. wagtail/locale/af/LC_MESSAGES/django.po +1 -1
  1009. wagtail/locale/ar/LC_MESSAGES/django.mo +0 -0
  1010. wagtail/locale/ar/LC_MESSAGES/django.po +1 -9
  1011. wagtail/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  1012. wagtail/locale/be/LC_MESSAGES/django.po +1 -1
  1013. wagtail/locale/bg/LC_MESSAGES/django.po +1 -1
  1014. wagtail/locale/bn/LC_MESSAGES/django.po +1 -1
  1015. wagtail/locale/ca/LC_MESSAGES/django.mo +0 -0
  1016. wagtail/locale/ca/LC_MESSAGES/django.po +4 -4
  1017. wagtail/locale/cs/LC_MESSAGES/django.po +1 -1
  1018. wagtail/locale/cy/LC_MESSAGES/django.po +1 -1
  1019. wagtail/locale/da/LC_MESSAGES/django.po +1 -1
  1020. wagtail/locale/de/LC_MESSAGES/django.mo +0 -0
  1021. wagtail/locale/de/LC_MESSAGES/django.po +1 -9
  1022. wagtail/locale/dv/LC_MESSAGES/django.mo +0 -0
  1023. wagtail/locale/dv/LC_MESSAGES/django.po +1 -8
  1024. wagtail/locale/el/LC_MESSAGES/django.po +1 -1
  1025. wagtail/locale/en/LC_MESSAGES/django.po +103 -105
  1026. wagtail/locale/es/LC_MESSAGES/django.po +1 -1
  1027. wagtail/locale/es_419/LC_MESSAGES/django.po +1 -1
  1028. wagtail/locale/et/LC_MESSAGES/django.po +1 -1
  1029. wagtail/locale/eu/LC_MESSAGES/django.po +1 -1
  1030. wagtail/locale/fa/LC_MESSAGES/django.po +1 -1
  1031. wagtail/locale/fi/LC_MESSAGES/django.po +1 -1
  1032. wagtail/locale/fr/LC_MESSAGES/django.mo +0 -0
  1033. wagtail/locale/fr/LC_MESSAGES/django.po +4 -4
  1034. wagtail/locale/gl/LC_MESSAGES/django.mo +0 -0
  1035. wagtail/locale/gl/LC_MESSAGES/django.po +3 -3
  1036. wagtail/locale/he_IL/LC_MESSAGES/django.po +1 -1
  1037. wagtail/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  1038. wagtail/locale/hu/LC_MESSAGES/django.mo +0 -0
  1039. wagtail/locale/hu/LC_MESSAGES/django.po +1 -9
  1040. wagtail/locale/id_ID/LC_MESSAGES/django.po +1 -1
  1041. wagtail/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  1042. wagtail/locale/is_IS/LC_MESSAGES/django.po +14 -4
  1043. wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
  1044. wagtail/locale/it/LC_MESSAGES/django.po +106 -3
  1045. wagtail/locale/ja/LC_MESSAGES/django.po +1 -1
  1046. wagtail/locale/ka/LC_MESSAGES/django.po +1 -1
  1047. wagtail/locale/ko/LC_MESSAGES/django.po +1 -1
  1048. wagtail/locale/lt/LC_MESSAGES/django.po +1 -1
  1049. wagtail/locale/lv/LC_MESSAGES/django.po +1 -1
  1050. wagtail/locale/mi/LC_MESSAGES/django.po +1 -1
  1051. wagtail/locale/mn/LC_MESSAGES/django.po +1 -1
  1052. wagtail/locale/my/LC_MESSAGES/django.po +1 -1
  1053. wagtail/locale/nb/LC_MESSAGES/django.po +1 -1
  1054. wagtail/locale/nl/LC_MESSAGES/django.mo +0 -0
  1055. wagtail/locale/nl/LC_MESSAGES/django.po +4 -4
  1056. wagtail/locale/pl/LC_MESSAGES/django.mo +0 -0
  1057. wagtail/locale/pl/LC_MESSAGES/django.po +1 -9
  1058. wagtail/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  1059. wagtail/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  1060. wagtail/locale/ro/LC_MESSAGES/django.mo +0 -0
  1061. wagtail/locale/ro/LC_MESSAGES/django.po +1 -9
  1062. wagtail/locale/ru/LC_MESSAGES/django.mo +0 -0
  1063. wagtail/locale/ru/LC_MESSAGES/django.po +1 -9
  1064. wagtail/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  1065. wagtail/locale/sl/LC_MESSAGES/django.mo +0 -0
  1066. wagtail/locale/sl/LC_MESSAGES/django.po +1 -9
  1067. wagtail/locale/sv/LC_MESSAGES/django.mo +0 -0
  1068. wagtail/locale/sv/LC_MESSAGES/django.po +90 -15
  1069. wagtail/locale/tet/LC_MESSAGES/django.po +1 -1
  1070. wagtail/locale/th/LC_MESSAGES/django.po +1 -1
  1071. wagtail/locale/tr/LC_MESSAGES/django.mo +0 -0
  1072. wagtail/locale/tr/LC_MESSAGES/django.po +4 -8
  1073. wagtail/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1074. wagtail/locale/ug/LC_MESSAGES/django.mo +0 -0
  1075. wagtail/locale/ug/LC_MESSAGES/django.po +1 -8
  1076. wagtail/locale/uk/LC_MESSAGES/django.po +1 -1
  1077. wagtail/locale/vi/LC_MESSAGES/django.po +1 -1
  1078. wagtail/locale/zh/LC_MESSAGES/django.po +1 -1
  1079. wagtail/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  1080. wagtail/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1081. wagtail/locales/locale/ar/LC_MESSAGES/django.po +1 -1
  1082. wagtail/locales/locale/be/LC_MESSAGES/django.po +1 -1
  1083. wagtail/locales/locale/bg/LC_MESSAGES/django.po +1 -1
  1084. wagtail/locales/locale/ca/LC_MESSAGES/django.po +1 -1
  1085. wagtail/locales/locale/cs/LC_MESSAGES/django.po +1 -1
  1086. wagtail/locales/locale/cy/LC_MESSAGES/django.po +1 -1
  1087. wagtail/locales/locale/da/LC_MESSAGES/django.po +1 -1
  1088. wagtail/locales/locale/de/LC_MESSAGES/django.po +1 -1
  1089. wagtail/locales/locale/dv/LC_MESSAGES/django.po +1 -1
  1090. wagtail/locales/locale/el/LC_MESSAGES/django.po +1 -1
  1091. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  1092. wagtail/locales/locale/es/LC_MESSAGES/django.po +1 -1
  1093. wagtail/locales/locale/et/LC_MESSAGES/django.po +1 -1
  1094. wagtail/locales/locale/fa/LC_MESSAGES/django.po +1 -1
  1095. wagtail/locales/locale/fi/LC_MESSAGES/django.po +1 -1
  1096. wagtail/locales/locale/fr/LC_MESSAGES/django.po +1 -1
  1097. wagtail/locales/locale/gl/LC_MESSAGES/django.po +1 -1
  1098. wagtail/locales/locale/he_IL/LC_MESSAGES/django.po +1 -1
  1099. wagtail/locales/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  1100. wagtail/locales/locale/hu/LC_MESSAGES/django.po +1 -1
  1101. wagtail/locales/locale/id_ID/LC_MESSAGES/django.po +1 -1
  1102. wagtail/locales/locale/is_IS/LC_MESSAGES/django.po +1 -1
  1103. wagtail/locales/locale/it/LC_MESSAGES/django.mo +0 -0
  1104. wagtail/locales/locale/it/LC_MESSAGES/django.po +14 -3
  1105. wagtail/locales/locale/ja/LC_MESSAGES/django.po +1 -1
  1106. wagtail/locales/locale/ko/LC_MESSAGES/django.po +1 -1
  1107. wagtail/locales/locale/lt/LC_MESSAGES/django.po +1 -1
  1108. wagtail/locales/locale/lv/LC_MESSAGES/django.po +1 -1
  1109. wagtail/locales/locale/mi/LC_MESSAGES/django.po +1 -1
  1110. wagtail/locales/locale/mn/LC_MESSAGES/django.po +1 -1
  1111. wagtail/locales/locale/my/LC_MESSAGES/django.po +1 -1
  1112. wagtail/locales/locale/nb/LC_MESSAGES/django.po +1 -1
  1113. wagtail/locales/locale/nl/LC_MESSAGES/django.po +1 -1
  1114. wagtail/locales/locale/pl/LC_MESSAGES/django.po +1 -1
  1115. wagtail/locales/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  1116. wagtail/locales/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  1117. wagtail/locales/locale/ro/LC_MESSAGES/django.po +1 -1
  1118. wagtail/locales/locale/ru/LC_MESSAGES/django.po +1 -1
  1119. wagtail/locales/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  1120. wagtail/locales/locale/sl/LC_MESSAGES/django.po +1 -1
  1121. wagtail/locales/locale/sv/LC_MESSAGES/django.mo +0 -0
  1122. wagtail/locales/locale/sv/LC_MESSAGES/django.po +5 -4
  1123. wagtail/locales/locale/tet/LC_MESSAGES/django.po +1 -1
  1124. wagtail/locales/locale/th/LC_MESSAGES/django.po +1 -1
  1125. wagtail/locales/locale/tr/LC_MESSAGES/django.po +1 -1
  1126. wagtail/locales/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1127. wagtail/locales/locale/ug/LC_MESSAGES/django.po +1 -1
  1128. wagtail/locales/locale/uk/LC_MESSAGES/django.po +1 -1
  1129. wagtail/locales/locale/vi/LC_MESSAGES/django.po +1 -1
  1130. wagtail/locales/locale/zh/LC_MESSAGES/django.po +1 -1
  1131. wagtail/locales/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  1132. wagtail/locales/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1133. wagtail/locales/tests.py +5 -5
  1134. wagtail/migrations/0096_referenceindex_referenceindex_source_object_and_more.py +28 -0
  1135. wagtail/models/i18n.py +4 -6
  1136. wagtail/models/media.py +18 -0
  1137. wagtail/models/pages.py +65 -11
  1138. wagtail/models/reference_index.py +41 -0
  1139. wagtail/models/revisions.py +40 -12
  1140. wagtail/models/workflows.py +0 -3
  1141. wagtail/permission_policies/base.py +2 -2
  1142. wagtail/permission_policies/collections.py +2 -2
  1143. wagtail/project_template/requirements.txt +2 -2
  1144. wagtail/search/apps.py +1 -1
  1145. wagtail/search/backends/__init__.py +1 -1
  1146. wagtail/search/backends/base.py +1 -1
  1147. wagtail/search/backends/database/__init__.py +1 -1
  1148. wagtail/search/backends/database/fallback.py +1 -1
  1149. wagtail/search/backends/database/mysql/mysql.py +1 -1
  1150. wagtail/search/backends/database/mysql/query.py +1 -1
  1151. wagtail/search/backends/database/postgres/postgres.py +1 -1
  1152. wagtail/search/backends/database/postgres/query.py +1 -1
  1153. wagtail/search/backends/database/postgres/weights.py +1 -1
  1154. wagtail/search/backends/database/sqlite/query.py +1 -1
  1155. wagtail/search/backends/database/sqlite/sqlite.py +1 -1
  1156. wagtail/search/backends/database/sqlite/utils.py +1 -1
  1157. wagtail/search/backends/elasticsearch7.py +4 -4
  1158. wagtail/search/backends/elasticsearch8.py +4 -4
  1159. wagtail/search/backends/elasticsearch9.py +4 -4
  1160. wagtail/search/backends/opensearch2.py +4 -4
  1161. wagtail/search/backends/opensearch3.py +4 -4
  1162. wagtail/search/index.py +1 -1
  1163. wagtail/search/locale/ar/LC_MESSAGES/django.mo +0 -0
  1164. wagtail/search/locale/ar/LC_MESSAGES/django.po +1 -7
  1165. wagtail/search/locale/be/LC_MESSAGES/django.mo +0 -0
  1166. wagtail/search/locale/be/LC_MESSAGES/django.po +1 -7
  1167. wagtail/search/locale/ca/LC_MESSAGES/django.mo +0 -0
  1168. wagtail/search/locale/ca/LC_MESSAGES/django.po +1 -7
  1169. wagtail/search/locale/cs/LC_MESSAGES/django.po +1 -1
  1170. wagtail/search/locale/cy/LC_MESSAGES/django.mo +0 -0
  1171. wagtail/search/locale/cy/LC_MESSAGES/django.po +1 -7
  1172. wagtail/search/locale/de/LC_MESSAGES/django.mo +0 -0
  1173. wagtail/search/locale/de/LC_MESSAGES/django.po +1 -7
  1174. wagtail/search/locale/dv/LC_MESSAGES/django.mo +0 -0
  1175. wagtail/search/locale/dv/LC_MESSAGES/django.po +1 -7
  1176. wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
  1177. wagtail/search/locale/es/LC_MESSAGES/django.mo +0 -0
  1178. wagtail/search/locale/es/LC_MESSAGES/django.po +1 -7
  1179. wagtail/search/locale/et/LC_MESSAGES/django.po +1 -1
  1180. wagtail/search/locale/fa/LC_MESSAGES/django.po +1 -1
  1181. wagtail/search/locale/fi/LC_MESSAGES/django.mo +0 -0
  1182. wagtail/search/locale/fi/LC_MESSAGES/django.po +1 -7
  1183. wagtail/search/locale/fr/LC_MESSAGES/django.mo +0 -0
  1184. wagtail/search/locale/fr/LC_MESSAGES/django.po +1 -7
  1185. wagtail/search/locale/gl/LC_MESSAGES/django.mo +0 -0
  1186. wagtail/search/locale/gl/LC_MESSAGES/django.po +1 -7
  1187. wagtail/search/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  1188. wagtail/search/locale/hr_HR/LC_MESSAGES/django.po +1 -7
  1189. wagtail/search/locale/ht/LC_MESSAGES/django.po +1 -1
  1190. wagtail/search/locale/hu/LC_MESSAGES/django.mo +0 -0
  1191. wagtail/search/locale/hu/LC_MESSAGES/django.po +1 -7
  1192. wagtail/search/locale/id_ID/LC_MESSAGES/django.po +1 -1
  1193. wagtail/search/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  1194. wagtail/search/locale/is_IS/LC_MESSAGES/django.po +1 -7
  1195. wagtail/search/locale/it/LC_MESSAGES/django.mo +0 -0
  1196. wagtail/search/locale/it/LC_MESSAGES/django.po +1 -7
  1197. wagtail/search/locale/ja/LC_MESSAGES/django.po +1 -1
  1198. wagtail/search/locale/ko/LC_MESSAGES/django.mo +0 -0
  1199. wagtail/search/locale/ko/LC_MESSAGES/django.po +1 -7
  1200. wagtail/search/locale/lt/LC_MESSAGES/django.po +1 -1
  1201. wagtail/search/locale/mi/LC_MESSAGES/django.po +1 -1
  1202. wagtail/search/locale/mn/LC_MESSAGES/django.po +1 -1
  1203. wagtail/search/locale/my/LC_MESSAGES/django.po +1 -1
  1204. wagtail/search/locale/nb/LC_MESSAGES/django.mo +0 -0
  1205. wagtail/search/locale/nb/LC_MESSAGES/django.po +1 -7
  1206. wagtail/search/locale/nl/LC_MESSAGES/django.mo +0 -0
  1207. wagtail/search/locale/nl/LC_MESSAGES/django.po +1 -7
  1208. wagtail/search/locale/pl/LC_MESSAGES/django.mo +0 -0
  1209. wagtail/search/locale/pl/LC_MESSAGES/django.po +1 -7
  1210. wagtail/search/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  1211. wagtail/search/locale/pt_BR/LC_MESSAGES/django.po +1 -7
  1212. wagtail/search/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  1213. wagtail/search/locale/pt_PT/LC_MESSAGES/django.po +1 -7
  1214. wagtail/search/locale/ro/LC_MESSAGES/django.mo +0 -0
  1215. wagtail/search/locale/ro/LC_MESSAGES/django.po +1 -7
  1216. wagtail/search/locale/ru/LC_MESSAGES/django.mo +0 -0
  1217. wagtail/search/locale/ru/LC_MESSAGES/django.po +1 -7
  1218. wagtail/search/locale/sl/LC_MESSAGES/django.mo +0 -0
  1219. wagtail/search/locale/sl/LC_MESSAGES/django.po +1 -7
  1220. wagtail/search/locale/sv/LC_MESSAGES/django.mo +0 -0
  1221. wagtail/search/locale/sv/LC_MESSAGES/django.po +1 -7
  1222. wagtail/search/locale/tet/LC_MESSAGES/django.po +1 -1
  1223. wagtail/search/locale/th/LC_MESSAGES/django.po +1 -1
  1224. wagtail/search/locale/tr/LC_MESSAGES/django.mo +0 -0
  1225. wagtail/search/locale/tr/LC_MESSAGES/django.po +1 -7
  1226. wagtail/search/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1227. wagtail/search/locale/ug/LC_MESSAGES/django.mo +0 -0
  1228. wagtail/search/locale/ug/LC_MESSAGES/django.po +1 -7
  1229. wagtail/search/locale/uk/LC_MESSAGES/django.mo +0 -0
  1230. wagtail/search/locale/uk/LC_MESSAGES/django.po +1 -7
  1231. wagtail/search/locale/vi/LC_MESSAGES/django.po +1 -1
  1232. wagtail/search/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  1233. wagtail/search/locale/zh_Hans/LC_MESSAGES/django.po +1 -7
  1234. wagtail/search/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1235. wagtail/search/management/commands/update_index.py +1 -1
  1236. wagtail/search/management/commands/wagtail_update_index.py +1 -1
  1237. wagtail/search/models.py +1 -4
  1238. wagtail/search/query.py +1 -1
  1239. wagtail/search/queryset.py +1 -1
  1240. wagtail/search/signal_handlers.py +1 -1
  1241. wagtail/search/tasks.py +1 -1
  1242. wagtail/search/utils.py +1 -1
  1243. wagtail/signal_handlers.py +1 -0
  1244. wagtail/sites/locale/ar/LC_MESSAGES/django.po +1 -1
  1245. wagtail/sites/locale/be/LC_MESSAGES/django.po +1 -1
  1246. wagtail/sites/locale/bn/LC_MESSAGES/django.po +1 -1
  1247. wagtail/sites/locale/ca/LC_MESSAGES/django.po +1 -1
  1248. wagtail/sites/locale/cs/LC_MESSAGES/django.po +1 -1
  1249. wagtail/sites/locale/cy/LC_MESSAGES/django.po +1 -1
  1250. wagtail/sites/locale/da/LC_MESSAGES/django.po +1 -1
  1251. wagtail/sites/locale/de/LC_MESSAGES/django.po +1 -1
  1252. wagtail/sites/locale/dv/LC_MESSAGES/django.po +1 -1
  1253. wagtail/sites/locale/el/LC_MESSAGES/django.po +1 -1
  1254. wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
  1255. wagtail/sites/locale/en_IN/LC_MESSAGES/django.po +1 -1
  1256. wagtail/sites/locale/es/LC_MESSAGES/django.po +1 -1
  1257. wagtail/sites/locale/es_419/LC_MESSAGES/django.po +1 -1
  1258. wagtail/sites/locale/es_VE/LC_MESSAGES/django.po +1 -1
  1259. wagtail/sites/locale/et/LC_MESSAGES/django.po +1 -1
  1260. wagtail/sites/locale/fa/LC_MESSAGES/django.po +1 -1
  1261. wagtail/sites/locale/fi/LC_MESSAGES/django.po +1 -1
  1262. wagtail/sites/locale/fr/LC_MESSAGES/django.po +1 -1
  1263. wagtail/sites/locale/gl/LC_MESSAGES/django.po +1 -1
  1264. wagtail/sites/locale/he_IL/LC_MESSAGES/django.po +1 -1
  1265. wagtail/sites/locale/hi/LC_MESSAGES/django.po +1 -1
  1266. wagtail/sites/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  1267. wagtail/sites/locale/ht/LC_MESSAGES/django.po +1 -1
  1268. wagtail/sites/locale/hu/LC_MESSAGES/django.po +1 -1
  1269. wagtail/sites/locale/id_ID/LC_MESSAGES/django.po +1 -1
  1270. wagtail/sites/locale/is_IS/LC_MESSAGES/django.po +1 -1
  1271. wagtail/sites/locale/it/LC_MESSAGES/django.po +1 -1
  1272. wagtail/sites/locale/ja/LC_MESSAGES/django.po +1 -1
  1273. wagtail/sites/locale/ka/LC_MESSAGES/django.po +1 -1
  1274. wagtail/sites/locale/ko/LC_MESSAGES/django.po +1 -1
  1275. wagtail/sites/locale/lt/LC_MESSAGES/django.po +1 -1
  1276. wagtail/sites/locale/lv/LC_MESSAGES/django.po +1 -1
  1277. wagtail/sites/locale/mi/LC_MESSAGES/django.po +1 -1
  1278. wagtail/sites/locale/mn/LC_MESSAGES/django.po +1 -1
  1279. wagtail/sites/locale/my/LC_MESSAGES/django.po +1 -1
  1280. wagtail/sites/locale/nb/LC_MESSAGES/django.po +1 -1
  1281. wagtail/sites/locale/nl/LC_MESSAGES/django.po +1 -1
  1282. wagtail/sites/locale/pl/LC_MESSAGES/django.po +1 -1
  1283. wagtail/sites/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  1284. wagtail/sites/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  1285. wagtail/sites/locale/ro/LC_MESSAGES/django.po +1 -1
  1286. wagtail/sites/locale/ru/LC_MESSAGES/django.po +1 -1
  1287. wagtail/sites/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  1288. wagtail/sites/locale/sl/LC_MESSAGES/django.po +1 -1
  1289. wagtail/sites/locale/sr/LC_MESSAGES/django.po +1 -1
  1290. wagtail/sites/locale/sv/LC_MESSAGES/django.mo +0 -0
  1291. wagtail/sites/locale/sv/LC_MESSAGES/django.po +4 -3
  1292. wagtail/sites/locale/ta/LC_MESSAGES/django.po +1 -1
  1293. wagtail/sites/locale/tet/LC_MESSAGES/django.po +1 -1
  1294. wagtail/sites/locale/th/LC_MESSAGES/django.po +1 -1
  1295. wagtail/sites/locale/tr/LC_MESSAGES/django.po +1 -1
  1296. wagtail/sites/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1297. wagtail/sites/locale/ug/LC_MESSAGES/django.po +1 -1
  1298. wagtail/sites/locale/uk/LC_MESSAGES/django.po +1 -1
  1299. wagtail/sites/locale/vi/LC_MESSAGES/django.po +1 -1
  1300. wagtail/sites/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  1301. wagtail/sites/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1302. wagtail/sites/tests.py +7 -7
  1303. wagtail/snippets/action_menu.py +2 -1
  1304. wagtail/snippets/locale/af/LC_MESSAGES/django.po +1 -1
  1305. wagtail/snippets/locale/ar/LC_MESSAGES/django.po +1 -1
  1306. wagtail/snippets/locale/az_AZ/LC_MESSAGES/django.po +1 -1
  1307. wagtail/snippets/locale/be/LC_MESSAGES/django.po +1 -1
  1308. wagtail/snippets/locale/bg/LC_MESSAGES/django.po +1 -1
  1309. wagtail/snippets/locale/bn/LC_MESSAGES/django.po +1 -1
  1310. wagtail/snippets/locale/ca/LC_MESSAGES/django.po +1 -1
  1311. wagtail/snippets/locale/cs/LC_MESSAGES/django.po +1 -1
  1312. wagtail/snippets/locale/cy/LC_MESSAGES/django.po +1 -1
  1313. wagtail/snippets/locale/da/LC_MESSAGES/django.po +1 -1
  1314. wagtail/snippets/locale/de/LC_MESSAGES/django.po +1 -1
  1315. wagtail/snippets/locale/dv/LC_MESSAGES/django.po +1 -1
  1316. wagtail/snippets/locale/el/LC_MESSAGES/django.po +1 -1
  1317. wagtail/snippets/locale/en/LC_MESSAGES/django.po +23 -13
  1318. wagtail/snippets/locale/en_IN/LC_MESSAGES/django.po +1 -1
  1319. wagtail/snippets/locale/es/LC_MESSAGES/django.po +1 -1
  1320. wagtail/snippets/locale/es_419/LC_MESSAGES/django.po +1 -1
  1321. wagtail/snippets/locale/es_VE/LC_MESSAGES/django.po +1 -1
  1322. wagtail/snippets/locale/et/LC_MESSAGES/django.po +1 -1
  1323. wagtail/snippets/locale/eu/LC_MESSAGES/django.po +1 -1
  1324. wagtail/snippets/locale/fa/LC_MESSAGES/django.po +1 -1
  1325. wagtail/snippets/locale/fi/LC_MESSAGES/django.po +1 -1
  1326. wagtail/snippets/locale/fr/LC_MESSAGES/django.po +1 -1
  1327. wagtail/snippets/locale/gl/LC_MESSAGES/django.po +1 -1
  1328. wagtail/snippets/locale/he_IL/LC_MESSAGES/django.po +1 -1
  1329. wagtail/snippets/locale/hi/LC_MESSAGES/django.po +1 -1
  1330. wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  1331. wagtail/snippets/locale/ht/LC_MESSAGES/django.po +1 -1
  1332. wagtail/snippets/locale/hu/LC_MESSAGES/django.po +1 -1
  1333. wagtail/snippets/locale/id_ID/LC_MESSAGES/django.po +1 -1
  1334. wagtail/snippets/locale/is_IS/LC_MESSAGES/django.po +1 -1
  1335. wagtail/snippets/locale/it/LC_MESSAGES/django.po +1 -1
  1336. wagtail/snippets/locale/ja/LC_MESSAGES/django.po +1 -1
  1337. wagtail/snippets/locale/ka/LC_MESSAGES/django.po +1 -1
  1338. wagtail/snippets/locale/ko/LC_MESSAGES/django.po +1 -1
  1339. wagtail/snippets/locale/lt/LC_MESSAGES/django.po +1 -1
  1340. wagtail/snippets/locale/lv/LC_MESSAGES/django.po +1 -1
  1341. wagtail/snippets/locale/mi/LC_MESSAGES/django.po +1 -1
  1342. wagtail/snippets/locale/mn/LC_MESSAGES/django.po +1 -1
  1343. wagtail/snippets/locale/my/LC_MESSAGES/django.po +1 -1
  1344. wagtail/snippets/locale/nb/LC_MESSAGES/django.po +1 -1
  1345. wagtail/snippets/locale/nl/LC_MESSAGES/django.po +1 -1
  1346. wagtail/snippets/locale/pl/LC_MESSAGES/django.po +1 -1
  1347. wagtail/snippets/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  1348. wagtail/snippets/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  1349. wagtail/snippets/locale/ro/LC_MESSAGES/django.po +1 -1
  1350. wagtail/snippets/locale/ru/LC_MESSAGES/django.po +1 -1
  1351. wagtail/snippets/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  1352. wagtail/snippets/locale/sl/LC_MESSAGES/django.po +1 -1
  1353. wagtail/snippets/locale/sr/LC_MESSAGES/django.po +1 -1
  1354. wagtail/snippets/locale/sv/LC_MESSAGES/django.mo +0 -0
  1355. wagtail/snippets/locale/sv/LC_MESSAGES/django.po +13 -2
  1356. wagtail/snippets/locale/ta/LC_MESSAGES/django.po +1 -1
  1357. wagtail/snippets/locale/tet/LC_MESSAGES/django.po +1 -1
  1358. wagtail/snippets/locale/th/LC_MESSAGES/django.po +1 -1
  1359. wagtail/snippets/locale/tr/LC_MESSAGES/django.po +1 -1
  1360. wagtail/snippets/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1361. wagtail/snippets/locale/ug/LC_MESSAGES/django.po +1 -1
  1362. wagtail/snippets/locale/uk/LC_MESSAGES/django.po +1 -1
  1363. wagtail/snippets/locale/vi/LC_MESSAGES/django.po +1 -1
  1364. wagtail/snippets/locale/zh/LC_MESSAGES/django.po +1 -1
  1365. wagtail/snippets/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  1366. wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1367. wagtail/snippets/tests/test_chooser_block.py +197 -0
  1368. wagtail/snippets/tests/test_chooser_panel.py +149 -0
  1369. wagtail/snippets/tests/test_chooser_views.py +375 -0
  1370. wagtail/snippets/tests/test_chooser_widget.py +22 -0
  1371. wagtail/snippets/tests/test_compare_revisions_view.py +167 -0
  1372. wagtail/snippets/tests/test_copy_view.py +38 -0
  1373. wagtail/snippets/tests/test_create_view.py +1159 -0
  1374. wagtail/snippets/tests/test_delete_view.py +225 -0
  1375. wagtail/snippets/tests/test_edit_view.py +2882 -0
  1376. wagtail/snippets/tests/test_history_view.py +182 -0
  1377. wagtail/snippets/tests/test_index_view.py +105 -0
  1378. wagtail/snippets/tests/test_list_view.py +786 -0
  1379. wagtail/snippets/tests/test_locking.py +28 -0
  1380. wagtail/snippets/tests/test_permissions.py +167 -0
  1381. wagtail/snippets/tests/test_preview.py +25 -11
  1382. wagtail/snippets/tests/test_revert_view.py +343 -0
  1383. wagtail/snippets/tests/test_snippet_models.py +112 -0
  1384. wagtail/snippets/tests/test_unpublish_view.py +228 -0
  1385. wagtail/snippets/tests/test_unschedule_view.py +151 -0
  1386. wagtail/snippets/tests/test_viewset.py +38 -5
  1387. wagtail/snippets/views/snippets.py +78 -30
  1388. wagtail/snippets/widgets.py +2 -2
  1389. wagtail/templatetags/wagtailcore_tags.py +2 -2
  1390. wagtail/test/dummy_external_storage.py +1 -1
  1391. wagtail/test/testapp/fixtures/test.json +22 -0
  1392. wagtail/test/testapp/fixtures/test_empty.json +2 -0
  1393. wagtail/test/testapp/fixtures/test_explorable_pages.json +10 -0
  1394. wagtail/test/testapp/fixtures/test_specific.json +9 -0
  1395. wagtail/test/testapp/migrations/0059_nopromotepage.py +25 -0
  1396. wagtail/test/testapp/models.py +7 -0
  1397. wagtail/test/testapp/views.py +5 -0
  1398. wagtail/test/utils/page_tests.py +7 -7
  1399. wagtail/test/utils/wagtail_factories/builder.py +2 -2
  1400. wagtail/tests/streamfield_migrations/test_migrations.py +35 -0
  1401. wagtail/tests/test_blocks.py +321 -61
  1402. wagtail/tests/test_collection_model.py +12 -0
  1403. wagtail/tests/test_page_model.py +190 -1
  1404. wagtail/tests/test_page_privacy.py +5 -0
  1405. wagtail/tests/test_reference_index.py +42 -0
  1406. wagtail/tests/test_revision_model.py +118 -1
  1407. wagtail/tests/test_utils.py +2 -2
  1408. wagtail/users/locale/ar/LC_MESSAGES/django.po +1 -1
  1409. wagtail/users/locale/be/LC_MESSAGES/django.po +1 -1
  1410. wagtail/users/locale/bg/LC_MESSAGES/django.po +1 -1
  1411. wagtail/users/locale/bn/LC_MESSAGES/django.po +1 -1
  1412. wagtail/users/locale/ca/LC_MESSAGES/django.po +1 -1
  1413. wagtail/users/locale/cs/LC_MESSAGES/django.po +1 -1
  1414. wagtail/users/locale/cy/LC_MESSAGES/django.po +1 -1
  1415. wagtail/users/locale/da/LC_MESSAGES/django.po +1 -1
  1416. wagtail/users/locale/de/LC_MESSAGES/django.po +1 -1
  1417. wagtail/users/locale/dv/LC_MESSAGES/django.po +1 -1
  1418. wagtail/users/locale/el/LC_MESSAGES/django.po +1 -1
  1419. wagtail/users/locale/en/LC_MESSAGES/django.po +14 -14
  1420. wagtail/users/locale/es/LC_MESSAGES/django.po +1 -1
  1421. wagtail/users/locale/es_419/LC_MESSAGES/django.po +1 -1
  1422. wagtail/users/locale/et/LC_MESSAGES/django.po +1 -1
  1423. wagtail/users/locale/eu/LC_MESSAGES/django.po +1 -1
  1424. wagtail/users/locale/fa/LC_MESSAGES/django.po +1 -1
  1425. wagtail/users/locale/fi/LC_MESSAGES/django.mo +0 -0
  1426. wagtail/users/locale/fi/LC_MESSAGES/django.po +6 -3
  1427. wagtail/users/locale/fr/LC_MESSAGES/django.po +1 -1
  1428. wagtail/users/locale/gl/LC_MESSAGES/django.po +1 -1
  1429. wagtail/users/locale/he_IL/LC_MESSAGES/django.po +1 -1
  1430. wagtail/users/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  1431. wagtail/users/locale/hu/LC_MESSAGES/django.po +1 -1
  1432. wagtail/users/locale/hy/LC_MESSAGES/django.po +1 -1
  1433. wagtail/users/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  1434. wagtail/users/locale/id_ID/LC_MESSAGES/django.po +7 -3
  1435. wagtail/users/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  1436. wagtail/users/locale/is_IS/LC_MESSAGES/django.po +7 -3
  1437. wagtail/users/locale/it/LC_MESSAGES/django.mo +0 -0
  1438. wagtail/users/locale/it/LC_MESSAGES/django.po +15 -3
  1439. wagtail/users/locale/ja/LC_MESSAGES/django.po +1 -1
  1440. wagtail/users/locale/ka/LC_MESSAGES/django.po +1 -1
  1441. wagtail/users/locale/ko/LC_MESSAGES/django.po +1 -1
  1442. wagtail/users/locale/lt/LC_MESSAGES/django.po +1 -1
  1443. wagtail/users/locale/lv/LC_MESSAGES/django.po +1 -1
  1444. wagtail/users/locale/mi/LC_MESSAGES/django.po +1 -1
  1445. wagtail/users/locale/mn/LC_MESSAGES/django.po +1 -1
  1446. wagtail/users/locale/my/LC_MESSAGES/django.po +1 -1
  1447. wagtail/users/locale/nb/LC_MESSAGES/django.po +1 -1
  1448. wagtail/users/locale/nl/LC_MESSAGES/django.po +1 -1
  1449. wagtail/users/locale/pl/LC_MESSAGES/django.po +1 -1
  1450. wagtail/users/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  1451. wagtail/users/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  1452. wagtail/users/locale/ro/LC_MESSAGES/django.po +1 -1
  1453. wagtail/users/locale/ru/LC_MESSAGES/django.po +1 -1
  1454. wagtail/users/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  1455. wagtail/users/locale/sl/LC_MESSAGES/django.po +1 -1
  1456. wagtail/users/locale/sv/LC_MESSAGES/django.mo +0 -0
  1457. wagtail/users/locale/sv/LC_MESSAGES/django.po +49 -18
  1458. wagtail/users/locale/tet/LC_MESSAGES/django.po +1 -1
  1459. wagtail/users/locale/th/LC_MESSAGES/django.po +1 -1
  1460. wagtail/users/locale/tr/LC_MESSAGES/django.po +1 -1
  1461. wagtail/users/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  1462. wagtail/users/locale/ug/LC_MESSAGES/django.po +1 -1
  1463. wagtail/users/locale/uk/LC_MESSAGES/django.po +1 -1
  1464. wagtail/users/locale/vi/LC_MESSAGES/django.po +1 -1
  1465. wagtail/users/locale/zh/LC_MESSAGES/django.po +1 -1
  1466. wagtail/users/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  1467. wagtail/users/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  1468. wagtail/users/tests/test_admin_views.py +39 -25
  1469. wagtail/users/utils.py +4 -1
  1470. wagtail/users/views/groups.py +19 -5
  1471. wagtail/users/wagtail_hooks.py +1 -1
  1472. wagtail/utils/loading.py +2 -2
  1473. wagtail-7.3rc1.data/data/AGENTS.md +21 -0
  1474. wagtail-7.3rc1.data/data/CHANGELOG.txt +4941 -0
  1475. wagtail-7.3rc1.data/data/CODE_OF_CONDUCT.md +71 -0
  1476. wagtail-7.3rc1.data/data/CONTRIBUTORS.md +999 -0
  1477. wagtail-7.3rc1.data/data/SPONSORS.md +55 -0
  1478. {wagtail-7.2rc1.dist-info → wagtail-7.3rc1.dist-info}/METADATA +8 -8
  1479. {wagtail-7.2rc1.dist-info → wagtail-7.3rc1.dist-info}/RECORD +1483 -1452
  1480. {wagtail-7.2rc1.dist-info → wagtail-7.3rc1.dist-info}/WHEEL +1 -1
  1481. wagtail/images/static/wagtailimages/js/image-url-generator.js +0 -1
  1482. wagtail/snippets/tests/test_snippets.py +0 -6365
  1483. {wagtail-7.2rc1.dist-info → wagtail-7.3rc1.dist-info}/entry_points.txt +0 -0
  1484. {wagtail-7.2rc1.dist-info → wagtail-7.3rc1.dist-info}/licenses/LICENSE +0 -0
  1485. {wagtail-7.2rc1.dist-info → wagtail-7.3rc1.dist-info}/top_level.txt +0 -0
@@ -257,8 +257,8 @@ class BaseChooseView(
257
257
  self.paginator = self.paginator_class(objects, per_page=self.per_page)
258
258
  try:
259
259
  return self.paginator.page(request.GET.get("p", 1))
260
- except InvalidPage:
261
- raise Http404
260
+ except InvalidPage as e:
261
+ raise Http404 from e
262
262
 
263
263
  def get(self, request):
264
264
  self.filter_form = self.get_filter_form()
@@ -516,9 +516,9 @@ class ChosenViewMixin(ModelLookupMixin):
516
516
 
517
517
  def get(self, request, pk):
518
518
  try:
519
- item = self.get_object(unquote(pk))
520
- except ObjectDoesNotExist:
521
- raise Http404
519
+ item = self.get_object(unquote(str(pk)))
520
+ except ObjectDoesNotExist as e:
521
+ raise Http404 from e
522
522
 
523
523
  return self.get_chosen_response(item)
524
524
 
@@ -3,8 +3,10 @@ import json
3
3
  from django.conf import settings
4
4
  from django.contrib.admin.utils import quote
5
5
  from django.contrib.contenttypes.models import ContentType
6
+ from django.core.exceptions import PermissionDenied
6
7
  from django.db import models, transaction
7
8
  from django.forms import Media
9
+ from django.http import JsonResponse
8
10
  from django.shortcuts import get_object_or_404
9
11
  from django.template.loader import render_to_string
10
12
  from django.urls import reverse
@@ -21,6 +23,7 @@ from wagtail.admin.forms.models import WagtailAdminModelForm
21
23
  from wagtail.admin.models import EditingSession
22
24
  from wagtail.admin.telepath import JSContext
23
25
  from wagtail.admin.templatetags.wagtailadmin_tags import user_display_name
26
+ from wagtail.admin.ui.autosave import AutosaveIndicator
24
27
  from wagtail.admin.ui.editing_sessions import EditingSessionsModule
25
28
  from wagtail.admin.ui.tables import LiveStatusTagColumn, TitleColumn
26
29
  from wagtail.admin.utils import get_latest_str, set_query_params
@@ -32,6 +35,7 @@ from wagtail.models import (
32
35
  Locale,
33
36
  LockableMixin,
34
37
  PreviewableMixin,
38
+ Revision,
35
39
  RevisionMixin,
36
40
  TranslatableMixin,
37
41
  WorkflowMixin,
@@ -279,6 +283,8 @@ class CreateEditViewOptionalFeaturesMixin:
279
283
  and issubclass(self.model, LockableMixin)
280
284
  and self.view_name != "create"
281
285
  )
286
+ self.autosave_interval = getattr(settings, "WAGTAIL_AUTOSAVE_INTERVAL", 500)
287
+ self.autosave_enabled = self.revision_enabled and self.autosave_interval > 0
282
288
 
283
289
  # Set the object before super().setup() as LocaleMixin.setup() needs it
284
290
  self.object = self.get_object()
@@ -446,16 +452,6 @@ class CreateEditViewOptionalFeaturesMixin:
446
452
  self.confirm_workflow_cancellation_url_name, args=[quote(self.object.pk)]
447
453
  )
448
454
 
449
- def get_error_message(self):
450
- if self.action == "cancel-workflow":
451
- return None
452
- if self.locked_for_user:
453
- return capfirst(
454
- _("The %(model_name)s could not be saved as it is locked")
455
- % {"model_name": self.model._meta.verbose_name}
456
- )
457
- return super().get_error_message()
458
-
459
455
  def get_success_message(self, instance=None):
460
456
  object = instance or self.object
461
457
 
@@ -547,8 +543,23 @@ class CreateEditViewOptionalFeaturesMixin:
547
543
  # Save revision if the model inherits from RevisionMixin
548
544
  self.new_revision = None
549
545
  if self.revision_enabled:
546
+ overwrite_revision_id = self.request.POST.get("overwrite_revision_id")
547
+ if overwrite_revision_id:
548
+ try:
549
+ overwrite_revision = instance.revisions.get(
550
+ pk=overwrite_revision_id
551
+ )
552
+ except Revision.DoesNotExist as e:
553
+ raise PermissionDenied(
554
+ "Cannot overwrite a revision that does not exist"
555
+ ) from e
556
+ else:
557
+ overwrite_revision = None
558
+
550
559
  self.new_revision = instance.save_revision(
551
- user=self.request.user, clean=not self.saving_as_draft
560
+ user=self.request.user,
561
+ clean=not self.saving_as_draft,
562
+ overwrite_revision=overwrite_revision,
552
563
  )
553
564
 
554
565
  log(
@@ -617,8 +628,14 @@ class CreateEditViewOptionalFeaturesMixin:
617
628
 
618
629
  def form_valid(self, form):
619
630
  self.form = form
620
- with transaction.atomic():
621
- self.object = self.save_instance()
631
+ try:
632
+ with transaction.atomic():
633
+ self.object = self.save_instance()
634
+ except PermissionDenied as e:
635
+ # The revision passed to overwrite_revision was not valid
636
+ self.produced_error_code = "invalid_revision"
637
+ self.produced_error_message = str(e)
638
+ return self.form_invalid(form)
622
639
 
623
640
  response = self.run_action_method()
624
641
  if response is not None:
@@ -632,9 +649,18 @@ class CreateEditViewOptionalFeaturesMixin:
632
649
 
633
650
  return response
634
651
 
652
+ def get_success_json(self):
653
+ data = super().get_success_json()
654
+ if self.revision_enabled and self.new_revision:
655
+ data["revision_id"] = self.new_revision.id
656
+ data["revision_created_at"] = self.new_revision.created_at.isoformat()
657
+ return data
658
+
635
659
  def form_invalid(self, form):
636
- # Even if the object is locked due to not having permissions,
637
- # the original submitter can still cancel the workflow
660
+ # Even if the form is invalid, a cancel-workflow action can still proceed. This accommodates
661
+ # the typical case for a lockable model, where the object is locked to the submitter at the
662
+ # point of submission (and thus the lock would make the form submission invalid) - but also
663
+ # applies to other error conditions such as actual validation errors.
638
664
  if self.action == "cancel-workflow":
639
665
  self.cancel_workflow_action()
640
666
  messages.success(
@@ -645,6 +671,10 @@ class CreateEditViewOptionalFeaturesMixin:
645
671
  # Refresh the lock object as now WorkflowLock no longer applies
646
672
  self.lock = self.get_lock()
647
673
  self.locked_for_user = self.lock and self.lock.for_user(self.request.user)
674
+ # Unset whichever error message was set by is_valid() (most likely "this X could not be
675
+ # saved as it is locked") so that we just show the success message.
676
+ self.produced_error_message = None
677
+
648
678
  return super().form_invalid(form)
649
679
 
650
680
  def get_last_updated_info(self):
@@ -743,7 +773,6 @@ class CreateEditViewOptionalFeaturesMixin:
743
773
  object_id=self.object.pk,
744
774
  last_seen_at=timezone.now(),
745
775
  )
746
- revision_id = self.object.latest_revision_id if self.revision_enabled else None
747
776
  return EditingSessionsModule(
748
777
  session,
749
778
  reverse(
@@ -760,15 +789,56 @@ class CreateEditViewOptionalFeaturesMixin:
760
789
  args=(session.id,),
761
790
  ),
762
791
  [],
763
- revision_id,
792
+ self.latest_revision and self.latest_revision.pk,
793
+ self.latest_revision_created_at,
764
794
  )
765
795
 
796
+ @cached_property
797
+ def latest_revision(self):
798
+ return self.revision_enabled and self.object and self.object.latest_revision
799
+
800
+ @cached_property
801
+ def latest_revision_created_at(self):
802
+ return self.latest_revision and self.latest_revision.created_at.isoformat()
803
+
804
+ @cached_property
805
+ def is_out_of_date(self):
806
+ if not self.latest_revision:
807
+ return False
808
+
809
+ latest_revision_id = str(self.latest_revision.pk)
810
+
811
+ # Two different sessions cannot have the same autosave revision, so if
812
+ # autosave revision is present, it is either the latest or it is not.
813
+ if overwrite_revision_id := self.request.POST.get("overwrite_revision_id"):
814
+ return overwrite_revision_id != latest_revision_id
815
+
816
+ # Client has not made an autosave revision, check the loaded revision.
817
+ if loaded_revision_id := self.request.POST.get("loaded_revision_id"):
818
+ # If the loaded revision is not the latest revision, it is outdated.
819
+ if loaded_revision_id != latest_revision_id:
820
+ return True
821
+
822
+ # It's pointing to the latest revision, but that revision may have
823
+ # been overwritten by another session (via autosave) since the editor
824
+ # loaded it. The created_at is strictly increasing, so assume the
825
+ # loaded revision outdated if it doesn't match the latest created_at.
826
+ return (
827
+ self.request.POST.get("loaded_revision_created_at", "")
828
+ != self.latest_revision_created_at
829
+ )
830
+
831
+ # Not enough information to deduce, assume it's up to date.
832
+ return False
833
+
766
834
  def get_context_data(self, **kwargs):
767
835
  context = super().get_context_data(**kwargs)
768
836
  context.update(self.get_lock_context())
769
837
  context["revision_enabled"] = self.revision_enabled
770
838
  context["draftstate_enabled"] = self.draftstate_enabled
771
839
  context["workflow_enabled"] = self.workflow_enabled
840
+ context["autosave_enabled"] = self.autosave_enabled
841
+ context["autosave_interval"] = self.autosave_interval
772
842
  context["workflow_history_url"] = self.get_workflow_history_url()
773
843
  context["confirm_workflow_cancellation_url"] = (
774
844
  self.get_confirm_workflow_cancellation_url()
@@ -778,27 +848,36 @@ class CreateEditViewOptionalFeaturesMixin:
778
848
  ) and bool(self.workflow_tasks)
779
849
  context["revisions_compare_url_name"] = self.revisions_compare_url_name
780
850
  context["editing_sessions"] = self.get_editing_sessions()
851
+ context["loaded_revision_created_at"] = self.latest_revision_created_at
852
+ if self.autosave_enabled:
853
+ context["autosave_indicator"] = AutosaveIndicator()
781
854
  return context
782
855
 
783
- def post(self, request, *args, **kwargs):
784
- form = self.get_form()
856
+ def is_valid(self, form):
857
+ # For autosave, we only want to save the page if there are no conflicts
858
+ if self.expects_json_response and self.is_out_of_date:
859
+ self.produced_error_code = "invalid_revision"
860
+ self.produced_error_message = _("Saving will overwrite a newer version.")
861
+ return False
785
862
 
786
863
  # Make sure object is not locked
787
864
  if self.locked_for_user:
788
- return self.form_invalid(form)
865
+ self.produced_error_code = "locked"
866
+ self.produced_error_message = capfirst(
867
+ _("The %(model_name)s could not be saved as it is locked")
868
+ % {"model_name": self.model._meta.verbose_name}
869
+ )
870
+ return False
789
871
 
790
872
  # If saving as draft, do not enforce full validation
791
873
  if self.saving_as_draft and isinstance(form, WagtailAdminModelForm):
792
874
  form.defer_required_fields()
793
- form_is_valid = form.is_valid()
875
+ result = super().is_valid(form)
794
876
  form.restore_required_fields()
795
877
  else:
796
- form_is_valid = form.is_valid()
878
+ result = super().is_valid(form)
797
879
 
798
- if form_is_valid:
799
- return self.form_valid(form)
800
- else:
801
- return self.form_invalid(form)
880
+ return result
802
881
 
803
882
 
804
883
  class RevisionsRevertMixin:
@@ -880,4 +959,42 @@ class RevisionsRevertMixin:
880
959
  context = super().get_context_data(**kwargs)
881
960
  context["revision"] = self.revision
882
961
  context["action_url"] = self.get_revisions_revert_url()
962
+ # Autosave does not make much sense in this view, we want the user to
963
+ # explicitly confirm they want to revert to the previous revision
964
+ context["autosave_enabled"] = False
883
965
  return context
966
+
967
+
968
+ class JsonPostResponseMixin:
969
+ """
970
+ Helper methods for create/edit views that return JSON responses when POSTed to with an
971
+ Accepts: application/json header, rather than the usual "redirect on success, HTML form
972
+ on failure" behaviour.
973
+ """
974
+
975
+ partials_template_name = None
976
+
977
+ @cached_property
978
+ def expects_json_response(self):
979
+ return not self.request.accepts("text/html")
980
+
981
+ def json_error_response(self, error_code, error_message):
982
+ return JsonResponse(
983
+ {
984
+ "success": False,
985
+ "error_code": error_code,
986
+ "error_message": error_message,
987
+ },
988
+ status=400,
989
+ )
990
+
991
+ @staticmethod
992
+ def response_is_json(response):
993
+ return response.headers.get("Content-Type") == "application/json"
994
+
995
+ def render_partials(self):
996
+ return render_to_string(
997
+ self.partials_template_name,
998
+ self.get_context_data(),
999
+ request=self.request,
1000
+ )
@@ -8,7 +8,7 @@ from django.core.exceptions import (
8
8
  from django.db import models, transaction
9
9
  from django.db.models.constants import LOOKUP_SEP
10
10
  from django.db.models.functions import Cast
11
- from django.http import Http404, HttpResponseRedirect
11
+ from django.http import Http404, HttpResponseRedirect, JsonResponse
12
12
  from django.shortcuts import get_object_or_404, redirect
13
13
  from django.urls import reverse
14
14
  from django.utils.functional import cached_property
@@ -39,7 +39,11 @@ from wagtail.admin.ui.tables import (
39
39
  UpdatedAtColumn,
40
40
  )
41
41
  from wagtail.admin.ui.tables.orderable import OrderableTableMixin
42
- from wagtail.admin.utils import get_latest_str, get_valid_next_url_from_request
42
+ from wagtail.admin.utils import (
43
+ get_latest_str,
44
+ get_valid_next_url_from_request,
45
+ set_query_params,
46
+ )
43
47
  from wagtail.admin.views.mixins import SpreadsheetExportMixin
44
48
  from wagtail.admin.widgets.button import (
45
49
  BaseButton,
@@ -55,7 +59,13 @@ from wagtail.models.orderable import set_max_order
55
59
  from wagtail.search.index import class_is_indexed
56
60
 
57
61
  from .base import BaseListingView, WagtailAdminTemplateMixin
58
- from .mixins import BeforeAfterHookMixin, HookResponseMixin, LocaleMixin, PanelMixin
62
+ from .mixins import (
63
+ BeforeAfterHookMixin,
64
+ HookResponseMixin,
65
+ JsonPostResponseMixin,
66
+ LocaleMixin,
67
+ PanelMixin,
68
+ )
59
69
  from .permissions import PermissionCheckedMixin
60
70
 
61
71
 
@@ -468,6 +478,7 @@ class CreateView(
468
478
  PermissionCheckedMixin,
469
479
  BeforeAfterHookMixin,
470
480
  WagtailAdminTemplateMixin,
481
+ JsonPostResponseMixin,
471
482
  BaseCreateView,
472
483
  ):
473
484
  model = None
@@ -475,6 +486,7 @@ class CreateView(
475
486
  index_url_name = None
476
487
  add_url_name = None
477
488
  edit_url_name = None
489
+ usage_url_name = None
478
490
  template_name = "wagtailadmin/generic/create.html"
479
491
  page_title = gettext_lazy("New")
480
492
  permission_required = "add"
@@ -491,6 +503,32 @@ class CreateView(
491
503
  super().setup(request, *args, **kwargs)
492
504
  self.action = self.get_action(request)
493
505
 
506
+ def post(self, request, *args, **kwargs):
507
+ # BaseCreateView.post() would set self.object here, but some subclasses need
508
+ # to do that during setup() instead, so only do that if it hasn't already been set.
509
+ if not hasattr(self, "object"):
510
+ self.object = None
511
+
512
+ form = self.get_form()
513
+ if self.is_valid(form):
514
+ return self.form_valid(form)
515
+ else:
516
+ return self.form_invalid(form)
517
+
518
+ def is_valid(self, form):
519
+ """
520
+ Validate the form, setting the produced_error_message attribute if validation fails.
521
+
522
+ Subclasses that require extra validation conditions not handled by
523
+ form.is_valid() (such as formsets, or a locked status on the model) should
524
+ override this method.
525
+ """
526
+ result = form.is_valid()
527
+ if not result:
528
+ self.produced_error_code = "validation_error"
529
+ self.produced_error_message = self.get_error_message()
530
+ return result
531
+
494
532
  def get_action(self, request):
495
533
  for action in self.get_available_actions():
496
534
  if request.POST.get(f"action-{action}"):
@@ -568,8 +606,13 @@ class CreateView(
568
606
  return [messages.button(self.get_edit_url(), _("Edit"))]
569
607
 
570
608
  def get_error_message(self):
609
+ """
610
+ Return the top-level error message to be shown when the form is invalid.
611
+ """
571
612
  if self.error_message is None:
572
613
  return None
614
+ if self.expects_json_response:
615
+ return _("There are validation errors, click save to highlight them.")
573
616
  return capfirst(
574
617
  self.error_message
575
618
  % {"model_name": self.model and self.model._meta.verbose_name}
@@ -600,6 +643,8 @@ class CreateView(
600
643
  self.request,
601
644
  locale=self.locale,
602
645
  translations=self.translations,
646
+ # Show skeleton for usage info if usage_url_name is set
647
+ usage_url="" if self.usage_url_name else None,
603
648
  )
604
649
  )
605
650
  return MediaContainer(side_panels)
@@ -644,16 +689,32 @@ class CreateView(
644
689
  log(instance=instance, action="wagtail.create", content_changed=True)
645
690
  return instance
646
691
 
692
+ def get_success_json(self):
693
+ edit_url = self.get_edit_url()
694
+ hydrate_url = set_query_params(edit_url, {"_w_hydrate_create_view": "1"})
695
+ result = {
696
+ "success": True,
697
+ "pk": self.object.pk,
698
+ "url": edit_url,
699
+ "hydrate_url": hydrate_url,
700
+ }
701
+ if isinstance(self.form, WagtailAdminModelForm):
702
+ result["field_updates"] = dict(self.form.get_field_updates_for_resave())
703
+ return result
704
+
647
705
  def save_action(self):
648
- success_message = self.get_success_message(self.object)
649
- success_buttons = self.get_success_buttons()
650
- if success_message is not None:
651
- messages.success(
652
- self.request,
653
- success_message,
654
- buttons=success_buttons,
655
- )
656
- return redirect(self.get_success_url())
706
+ if self.expects_json_response:
707
+ return JsonResponse(self.get_success_json())
708
+ else:
709
+ success_message = self.get_success_message(self.object)
710
+ success_buttons = self.get_success_buttons()
711
+ if success_message is not None:
712
+ messages.success(
713
+ self.request,
714
+ success_message,
715
+ buttons=success_buttons,
716
+ )
717
+ return redirect(self.get_success_url())
657
718
 
658
719
  def form_valid(self, form):
659
720
  self.form = form
@@ -670,9 +731,15 @@ class CreateView(
670
731
 
671
732
  def form_invalid(self, form):
672
733
  self.form = form
673
- error_message = self.get_error_message()
674
- if error_message is not None:
675
- messages.validation_error(self.request, error_message, form)
734
+
735
+ if self.expects_json_response:
736
+ return self.json_error_response(
737
+ getattr(self, "produced_error_code", "internal_error"),
738
+ self.produced_error_message or "",
739
+ )
740
+
741
+ if self.produced_error_message is not None:
742
+ messages.validation_error(self.request, self.produced_error_message, form)
676
743
  return super().form_invalid(form)
677
744
 
678
745
 
@@ -696,6 +763,7 @@ class EditView(
696
763
  PermissionCheckedMixin,
697
764
  BeforeAfterHookMixin,
698
765
  WagtailAdminTemplateMixin,
766
+ JsonPostResponseMixin,
699
767
  BaseUpdateView,
700
768
  ):
701
769
  model = None
@@ -710,6 +778,7 @@ class EditView(
710
778
  page_title = gettext_lazy("Editing")
711
779
  context_object_name = None
712
780
  template_name = "wagtailadmin/generic/edit.html"
781
+ partials_template_name = "wagtailadmin/generic/edit_partials.html"
713
782
  permission_required = "change"
714
783
  delete_item_label = gettext_lazy("Delete")
715
784
  success_message = gettext_lazy("%(model_name)s '%(object)s' updated.")
@@ -722,6 +791,37 @@ class EditView(
722
791
  super().setup(request, *args, **kwargs)
723
792
  self.action = self.get_action(request)
724
793
 
794
+ def get_template_names(self):
795
+ if self.hydrate_create_view:
796
+ return [self.partials_template_name]
797
+ return super().get_template_names()
798
+
799
+ def post(self, request, *args, **kwargs):
800
+ # BaseUpdateView.post() would set self.object here, but some subclasses need
801
+ # to do that during setup() instead, so only do that if it hasn't already been set.
802
+ if not hasattr(self, "object"):
803
+ self.object = self.get_object()
804
+
805
+ form = self.get_form()
806
+ if self.is_valid(form):
807
+ return self.form_valid(form)
808
+ else:
809
+ return self.form_invalid(form)
810
+
811
+ def is_valid(self, form):
812
+ """
813
+ Validate the form, setting the produced_error_message attribute if validation fails.
814
+
815
+ Subclasses that require extra validation conditions not handled by
816
+ form.is_valid() (such as formsets, or a locked status on the model) should
817
+ override this method.
818
+ """
819
+ result = form.is_valid()
820
+ if not result:
821
+ self.produced_error_code = "validation_error"
822
+ self.produced_error_message = self.get_error_message()
823
+ return result
824
+
725
825
  @cached_property
726
826
  def object_pk(self):
727
827
  # Must be a cached_property to prevent this from being re-run on the unquoted
@@ -896,16 +996,29 @@ class EditView(
896
996
 
897
997
  return instance
898
998
 
999
+ def get_success_json(self):
1000
+ result = {
1001
+ "success": True,
1002
+ "pk": self.object.pk,
1003
+ "html": self.render_partials(),
1004
+ }
1005
+ if isinstance(self.form, WagtailAdminModelForm):
1006
+ result["field_updates"] = dict(self.form.get_field_updates_for_resave())
1007
+ return result
1008
+
899
1009
  def save_action(self):
900
- success_message = self.get_success_message()
901
- success_buttons = self.get_success_buttons()
902
- if success_message is not None:
903
- messages.success(
904
- self.request,
905
- success_message,
906
- buttons=success_buttons,
907
- )
908
- return redirect(self.get_success_url())
1010
+ if self.expects_json_response:
1011
+ return JsonResponse(self.get_success_json())
1012
+ else:
1013
+ success_message = self.get_success_message()
1014
+ success_buttons = self.get_success_buttons()
1015
+ if success_message is not None:
1016
+ messages.success(
1017
+ self.request,
1018
+ success_message,
1019
+ buttons=success_buttons,
1020
+ )
1021
+ return redirect(self.get_success_url())
909
1022
 
910
1023
  def get_success_message(self):
911
1024
  if self.success_message is None:
@@ -922,8 +1035,13 @@ class EditView(
922
1035
  return [messages.button(self.get_edit_url(), _("Edit"))]
923
1036
 
924
1037
  def get_error_message(self):
1038
+ """
1039
+ Return the top-level error message to be displayed when form validation fails.
1040
+ """
925
1041
  if self.error_message is None:
926
1042
  return None
1043
+ if self.expects_json_response:
1044
+ return _("There are validation errors, click save to highlight them.")
927
1045
  return capfirst(
928
1046
  self.error_message
929
1047
  % {"model_name": self.model and self.model._meta.verbose_name}
@@ -944,15 +1062,25 @@ class EditView(
944
1062
 
945
1063
  def form_invalid(self, form):
946
1064
  self.form = form
947
- error_message = self.get_error_message()
948
- if error_message is not None:
949
- messages.validation_error(self.request, error_message, form)
1065
+
1066
+ if self.expects_json_response:
1067
+ return self.json_error_response(
1068
+ getattr(self, "produced_error_code", "internal_error"),
1069
+ self.produced_error_message or "",
1070
+ )
1071
+
1072
+ if self.produced_error_message is not None:
1073
+ messages.validation_error(self.request, self.produced_error_message, form)
950
1074
  return super().form_invalid(form)
951
1075
 
952
1076
  @cached_property
953
1077
  def has_unsaved_changes(self):
954
1078
  return self.form.is_bound
955
1079
 
1080
+ @cached_property
1081
+ def hydrate_create_view(self):
1082
+ return bool(self.request.GET.get("_w_hydrate_create_view"))
1083
+
956
1084
  def get_context_data(self, **kwargs):
957
1085
  context = super().get_context_data(**kwargs)
958
1086
  self.form = context.get("form")
@@ -964,6 +1092,8 @@ class EditView(
964
1092
  context["submit_button_label"] = self.submit_button_label
965
1093
  context["submit_button_active_label"] = self.submit_button_active_label
966
1094
  context["has_unsaved_changes"] = self.has_unsaved_changes
1095
+ context["is_partial"] = self.expects_json_response or self.hydrate_create_view
1096
+ context["hydrate_create_view"] = self.hydrate_create_view
967
1097
  context["can_delete"] = self.can_delete
968
1098
  if context["can_delete"]:
969
1099
  context["delete_url"] = self.get_delete_url()
@@ -19,7 +19,7 @@ class ReorderView(PermissionCheckedMixin, View):
19
19
  return self.model._default_manager.all().order_by(self.sort_order_field)
20
20
 
21
21
  def post(self, request, *args, **kwargs):
22
- item_to_move = get_object_or_404(self.model, pk=unquote(kwargs.get("pk")))
22
+ item_to_move = get_object_or_404(self.model, pk=unquote(str(kwargs.get("pk"))))
23
23
 
24
24
  try:
25
25
  # Position is an index in the list of items,
@@ -123,8 +123,8 @@ class PreviewOnEdit(View):
123
123
 
124
124
  try:
125
125
  preview_mode = request.GET.get("mode", self.object.default_preview_mode)
126
- except IndexError:
127
- raise PermissionDenied
126
+ except IndexError as e:
127
+ raise PermissionDenied from e
128
128
 
129
129
  extra_attrs = self.get_extra_request_attrs()
130
130
 
@@ -171,8 +171,8 @@ class PreviewRevision(View):
171
171
  preview_mode = request.GET.get(
172
172
  "mode", self.revision_object.default_preview_mode
173
173
  )
174
- except IndexError:
175
- raise PermissionDenied
174
+ except IndexError as e:
175
+ raise PermissionDenied from e
176
176
 
177
177
  return self.revision_object.make_preview_request(request, preview_mode)
178
178
 
@@ -312,7 +312,9 @@ class HomeView(WagtailAdminTemplateMixin, TemplateView):
312
312
 
313
313
  return {**context, **site_details}
314
314
 
315
- def get_media(self, panels=[]):
315
+ def get_media(self, panels=None):
316
+ if panels is None:
317
+ panels = []
316
318
  media = Media()
317
319
 
318
320
  for panel in panels: