wagtail 7.1.1__py3-none-any.whl → 7.2rc1__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 (345) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_page.py +1 -1
  3. wagtail/actions/create_alias.py +1 -1
  4. wagtail/actions/delete_page.py +1 -1
  5. wagtail/actions/publish_page_revision.py +1 -1
  6. wagtail/actions/publish_revision.py +1 -1
  7. wagtail/actions/revert_to_page_revision.py +1 -1
  8. wagtail/actions/unpublish.py +1 -1
  9. wagtail/actions/unpublish_page.py +1 -1
  10. wagtail/admin/auth.py +3 -1
  11. wagtail/admin/checks.py +2 -2
  12. wagtail/admin/filters.py +28 -1
  13. wagtail/admin/forms/collections.py +1 -1
  14. wagtail/admin/forms/comments.py +1 -1
  15. wagtail/admin/forms/models.py +1 -1
  16. wagtail/admin/forms/pages.py +1 -1
  17. wagtail/admin/forms/tags.py +1 -1
  18. wagtail/admin/locale/cs/LC_MESSAGES/django.mo +0 -0
  19. wagtail/admin/locale/cs/LC_MESSAGES/django.po +25 -1
  20. wagtail/admin/locale/en/LC_MESSAGES/django.po +278 -192
  21. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +29 -15
  22. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  23. wagtail/admin/locale/it/LC_MESSAGES/django.po +3 -2
  24. wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
  25. wagtail/admin/locale/nl/LC_MESSAGES/django.po +57 -3
  26. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.mo +0 -0
  27. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.po +8 -2
  28. wagtail/admin/locale/ru/LC_MESSAGES/django.mo +0 -0
  29. wagtail/admin/locale/ru/LC_MESSAGES/django.po +58 -1
  30. wagtail/admin/locale/tr/LC_MESSAGES/django.mo +0 -0
  31. wagtail/admin/locale/tr/LC_MESSAGES/django.po +3 -2
  32. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  33. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  34. wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
  35. wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
  36. wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
  37. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  38. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  39. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +2 -2
  40. wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
  41. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  42. wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
  43. wagtail/admin/static/wagtailadmin/js/icons.js +1 -1
  44. wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
  45. wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
  46. wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
  47. wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
  48. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  49. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  50. wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
  51. wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
  52. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  53. wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
  54. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  55. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  56. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +2 -2
  57. wagtail/admin/static/wagtailadmin/js/vendor/bootstrap-modal.js +1 -1
  58. wagtail/admin/static/wagtailadmin/js/vendor/bootstrap-transition.js +1 -1
  59. wagtail/admin/static/wagtailadmin/js/vendor/jquery-3.6.0.min.js +1 -1
  60. wagtail/admin/static/wagtailadmin/js/vendor/jquery-ui-1.13.2.min.js +1 -1
  61. wagtail/admin/static/wagtailadmin/js/vendor/jquery.datetimepicker.js +1 -1
  62. wagtail/admin/static/wagtailadmin/js/vendor/jquery.fileupload-process.js +1 -1
  63. wagtail/admin/static/wagtailadmin/js/vendor/jquery.fileupload.js +1 -1
  64. wagtail/admin/static/wagtailadmin/js/vendor/jquery.iframe-transport.js +1 -1
  65. wagtail/admin/static/wagtailadmin/js/vendor/tag-it.js +1 -1
  66. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  67. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +1 -1
  68. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  69. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  70. wagtail/admin/templates/wagtailadmin/account/account.html +2 -0
  71. wagtail/admin/templates/wagtailadmin/base.html +14 -0
  72. wagtail/admin/templates/wagtailadmin/generic/chooser/chooser.html +2 -1
  73. wagtail/admin/templates/wagtailadmin/generic/chooser/creation_form.html +2 -1
  74. wagtail/admin/templates/wagtailadmin/generic/form.html +3 -1
  75. wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
  76. wagtail/admin/templates/wagtailadmin/panels/object_list.html +1 -1
  77. wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +3 -2
  78. wagtail/admin/templates/wagtailadmin/shared/formatted_field.html +1 -1
  79. wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
  80. wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +19 -0
  81. wagtail/admin/templates/wagtailadmin/shared/panel.html +1 -1
  82. wagtail/admin/templates/wagtailadmin/shared/set_privacy.html +15 -0
  83. wagtail/admin/templates/wagtailadmin/shared/side_panels/checks.html +28 -1
  84. wagtail/admin/templates/wagtailadmin/shared/workflow_history/detail.html +2 -2
  85. wagtail/admin/templates/wagtailadmin/{pages/listing/_ordering_header.html → tables/ordering_header.html} +2 -2
  86. wagtail/admin/templates/wagtailadmin/tables/title_cell.html +1 -1
  87. wagtail/admin/templates/wagtailadmin/userbar/base.html +6 -3
  88. wagtail/admin/templates/wagtailadmin/userbar/item_admin.html +2 -2
  89. wagtail/admin/templates/wagtailadmin/userbar/item_page_add.html +2 -2
  90. wagtail/admin/templates/wagtailadmin/userbar/item_page_edit.html +2 -2
  91. wagtail/admin/templates/wagtailadmin/userbar/item_page_explore.html +2 -2
  92. wagtail/admin/templates/wagtailadmin/widgets/{daterange_input.html → range_input.html} +1 -1
  93. wagtail/admin/templates/wagtailadmin/workflows/task_chooser/chooser.html +4 -2
  94. wagtail/admin/templatetags/wagtailadmin_tags.py +56 -22
  95. wagtail/admin/tests/api/test_pages.py +7 -7
  96. wagtail/admin/tests/api/test_renderer_classes.py +16 -0
  97. wagtail/admin/tests/pages/test_create_page.py +34 -2
  98. wagtail/admin/tests/pages/test_edit_page.py +128 -14
  99. wagtail/admin/tests/pages/test_explorer_view.py +34 -7
  100. wagtail/admin/tests/pages/test_reorder_page.py +11 -0
  101. wagtail/admin/tests/test_collections_views.py +12 -0
  102. wagtail/admin/tests/test_edit_handlers.py +3 -3
  103. wagtail/admin/tests/test_filters.py +2 -2
  104. wagtail/admin/tests/test_keyboard_shortcuts.py +52 -2
  105. wagtail/admin/tests/test_menu.py +0 -2
  106. wagtail/admin/tests/test_privacy.py +16 -16
  107. wagtail/admin/tests/test_templatetags.py +137 -0
  108. wagtail/admin/tests/test_userbar.py +75 -35
  109. wagtail/admin/tests/test_views_generic.py +34 -0
  110. wagtail/admin/tests/test_workflows.py +34 -0
  111. wagtail/admin/tests/viewsets/test_model_viewset.py +322 -0
  112. wagtail/admin/ui/tables/orderable.py +73 -0
  113. wagtail/admin/ui/tables/pages.py +3 -13
  114. wagtail/admin/userbar.py +6 -1
  115. wagtail/admin/views/collection_privacy.py +6 -2
  116. wagtail/admin/views/generic/__init__.py +1 -0
  117. wagtail/admin/views/generic/mixins.py +20 -2
  118. wagtail/admin/views/generic/models.py +67 -1
  119. wagtail/admin/views/generic/ordering.py +79 -0
  120. wagtail/admin/views/home.py +3 -3
  121. wagtail/admin/views/page_privacy.py +5 -2
  122. wagtail/admin/views/pages/create.py +1 -1
  123. wagtail/admin/views/pages/edit.py +2 -2
  124. wagtail/admin/views/pages/listing.py +7 -42
  125. wagtail/admin/views/pages/move.py +1 -1
  126. wagtail/admin/views/pages/ordering.py +1 -1
  127. wagtail/admin/viewsets/base.py +1 -1
  128. wagtail/admin/viewsets/model.py +49 -1
  129. wagtail/admin/wagtail_hooks.py +2 -1
  130. wagtail/admin/widgets/slug.py +10 -10
  131. wagtail/api/v2/serializers.py +1 -1
  132. wagtail/api/v2/tests/test_renderer_classes.py +32 -0
  133. wagtail/apps.py +2 -0
  134. wagtail/bin/wagtail.py +1 -1
  135. wagtail/blocks/struct_block.py +2 -1
  136. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +14 -14
  137. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.mo +0 -0
  138. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.po +19 -2
  139. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.mo +0 -0
  140. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.po +18 -1
  141. wagtail/contrib/frontend_cache/tests.py +4 -2
  142. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +4 -4
  143. wagtail/contrib/redirects/tests/test_tmp_storages.py +20 -0
  144. wagtail/contrib/redirects/tmp_storages.py +1 -1
  145. wagtail/contrib/redirects/views.py +3 -3
  146. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +3 -3
  147. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.mo +0 -0
  148. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.po +43 -3
  149. wagtail/contrib/search_promotions/static/wagtailsearchpromotions/js/query-chooser-modal.js +1 -1
  150. wagtail/contrib/search_promotions/views/settings.py +2 -2
  151. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.mo +0 -0
  152. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.po +6 -1
  153. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +1 -1
  154. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.mo +0 -0
  155. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.po +6 -2
  156. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.mo +0 -0
  157. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.po +6 -1
  158. wagtail/contrib/settings/tests/site_specific/test_admin.py +40 -6
  159. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  160. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +1 -1
  161. wagtail/contrib/styleguide/templates/wagtailstyleguide/base.html +5 -5
  162. wagtail/contrib/table_block/blocks.py +1 -0
  163. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +5 -1
  164. wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
  165. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
  166. wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
  167. wagtail/coreutils.py +5 -5
  168. wagtail/documents/forms.py +18 -1
  169. wagtail/documents/locale/en/LC_MESSAGES/django.po +10 -10
  170. wagtail/documents/locale/nl/LC_MESSAGES/django.mo +0 -0
  171. wagtail/documents/locale/nl/LC_MESSAGES/django.po +9 -0
  172. wagtail/documents/locale/ru/LC_MESSAGES/django.mo +0 -0
  173. wagtail/documents/locale/ru/LC_MESSAGES/django.po +9 -0
  174. wagtail/documents/models.py +1 -1
  175. wagtail/documents/static/wagtaildocs/js/add-multiple.js +1 -1
  176. wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
  177. wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
  178. wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
  179. wagtail/documents/templates/wagtaildocs/documents/add.html +0 -34
  180. wagtail/documents/tests/test_admin_views.py +132 -26
  181. wagtail/documents/tests/test_collection_privacy.py +18 -4
  182. wagtail/documents/tests/test_form_overrides.py +1 -1
  183. wagtail/documents/tests/test_search.py +21 -8
  184. wagtail/documents/views/documents.py +1 -1
  185. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  186. wagtail/embeds/static/wagtailembeds/js/embed-chooser-modal.js +1 -1
  187. wagtail/images/forms.py +16 -1
  188. wagtail/images/locale/cs/LC_MESSAGES/django.mo +0 -0
  189. wagtail/images/locale/cs/LC_MESSAGES/django.po +12 -1
  190. wagtail/images/locale/en/LC_MESSAGES/django.po +57 -46
  191. wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
  192. wagtail/images/locale/nl/LC_MESSAGES/django.po +37 -14
  193. wagtail/images/locale/ru/LC_MESSAGES/django.mo +0 -0
  194. wagtail/images/locale/ru/LC_MESSAGES/django.po +20 -1
  195. wagtail/images/models.py +1 -1
  196. wagtail/images/static/wagtailimages/js/add-multiple.js +1 -1
  197. wagtail/images/static/wagtailimages/js/focal-point-chooser.js +1 -1
  198. wagtail/images/static/wagtailimages/js/image-block.js +1 -1
  199. wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
  200. wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
  201. wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
  202. wagtail/images/static/wagtailimages/js/image-url-generator.js +1 -1
  203. wagtail/images/static/wagtailimages/js/vendor/jquery.Jcrop.min.js +1 -1
  204. wagtail/images/static/wagtailimages/js/vendor/jquery.fileupload-image.js +1 -1
  205. wagtail/images/static/wagtailimages/js/vendor/jquery.fileupload-validate.js +1 -1
  206. wagtail/images/static/wagtailimages/js/vendor/load-image.min.js +1 -1
  207. wagtail/images/templates/wagtailimages/chooser/chooser.html +22 -13
  208. wagtail/images/templates/wagtailimages/chooser/image_preview_column_cell.html +10 -0
  209. wagtail/images/templates/wagtailimages/chooser/results.html +24 -20
  210. wagtail/images/templates/wagtailimages/chooser/title_column_cell.html +15 -0
  211. wagtail/images/templates/wagtailimages/images/add.html +0 -34
  212. wagtail/images/templates/wagtailimages/images/index.html +3 -3
  213. wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
  214. wagtail/images/templates/wagtailimages/images/layout_toggle_button.html +8 -7
  215. wagtail/images/templatetags/wagtailimages_tags.py +2 -2
  216. wagtail/images/tests/test_admin_views.py +87 -0
  217. wagtail/images/tests/test_form_overrides.py +1 -1
  218. wagtail/images/tests/test_models.py +48 -9
  219. wagtail/images/views/chooser.py +66 -2
  220. wagtail/locale/en/LC_MESSAGES/django.po +55 -55
  221. wagtail/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  222. wagtail/locale/is_IS/LC_MESSAGES/django.po +3 -3
  223. wagtail/locale/nl/LC_MESSAGES/django.mo +0 -0
  224. wagtail/locale/nl/LC_MESSAGES/django.po +11 -2
  225. wagtail/locale/ru/LC_MESSAGES/django.mo +0 -0
  226. wagtail/locale/ru/LC_MESSAGES/django.po +11 -1
  227. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  228. wagtail/locales/locale/nl/LC_MESSAGES/django.mo +0 -0
  229. wagtail/locales/locale/nl/LC_MESSAGES/django.po +12 -1
  230. wagtail/locales/locale/ru/LC_MESSAGES/django.mo +0 -0
  231. wagtail/locales/locale/ru/LC_MESSAGES/django.po +10 -1
  232. wagtail/locales/views.py +2 -2
  233. wagtail/models/orderable.py +10 -0
  234. wagtail/models/pages.py +9 -11
  235. wagtail/models/sites.py +1 -1
  236. wagtail/models/workflows.py +8 -5
  237. wagtail/project_template/home/tests.py +6 -7
  238. wagtail/project_template/project_name/settings/base.py +9 -9
  239. wagtail/project_template/requirements.txt +1 -1
  240. wagtail/query.py +7 -2
  241. wagtail/rich_text/rewriters.py +1 -1
  242. wagtail/search/apps.py +4 -49
  243. wagtail/search/backends/__init__.py +1 -113
  244. wagtail/search/backends/base.py +1 -547
  245. wagtail/search/backends/database/__init__.py +1 -50
  246. wagtail/search/backends/database/fallback.py +1 -253
  247. wagtail/search/backends/database/mysql/mysql.py +1 -700
  248. wagtail/search/backends/database/mysql/query.py +1 -258
  249. wagtail/search/backends/database/postgres/postgres.py +1 -749
  250. wagtail/search/backends/database/postgres/query.py +1 -83
  251. wagtail/search/backends/database/postgres/weights.py +1 -63
  252. wagtail/search/backends/database/sqlite/query.py +1 -294
  253. wagtail/search/backends/database/sqlite/sqlite.py +1 -719
  254. wagtail/search/backends/database/sqlite/utils.py +1 -35
  255. wagtail/search/backends/deprecation.py +45 -0
  256. wagtail/search/backends/elasticsearch7.py +18 -1260
  257. wagtail/search/backends/elasticsearch8.py +21 -96
  258. wagtail/search/backends/elasticsearch9.py +35 -0
  259. wagtail/search/backends/opensearch2.py +35 -0
  260. wagtail/search/backends/opensearch3.py +35 -0
  261. wagtail/search/index.py +1 -358
  262. wagtail/search/locale/en/LC_MESSAGES/django.po +2 -10
  263. wagtail/search/management/commands/update_index.py +1 -205
  264. wagtail/search/management/commands/wagtail_update_index.py +1 -4
  265. wagtail/search/models.py +32 -158
  266. wagtail/search/query.py +1 -114
  267. wagtail/search/queryset.py +1 -43
  268. wagtail/search/signal_handlers.py +1 -24
  269. wagtail/search/tasks.py +1 -10
  270. wagtail/search/tests/test_elasticsearch.py +22 -0
  271. wagtail/search/utils.py +1 -206
  272. wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
  273. wagtail/snippets/locale/en/LC_MESSAGES/django.po +3 -3
  274. wagtail/snippets/locale/ru/LC_MESSAGES/django.mo +0 -0
  275. wagtail/snippets/locale/ru/LC_MESSAGES/django.po +8 -1
  276. wagtail/snippets/locale/tr/LC_MESSAGES/django.mo +0 -0
  277. wagtail/snippets/locale/tr/LC_MESSAGES/django.po +8 -1
  278. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  279. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  280. wagtail/snippets/tests/test_preview.py +5 -6
  281. wagtail/snippets/tests/test_reordering.py +319 -0
  282. wagtail/snippets/tests/test_snippets.py +65 -12
  283. wagtail/snippets/views/snippets.py +16 -0
  284. wagtail/test/numberformat.py +30 -0
  285. wagtail/test/settings.py +35 -12
  286. wagtail/test/testapp/fields.py +12 -0
  287. wagtail/test/testapp/migrations/0056_commentablejsonpage.py +50 -0
  288. wagtail/test/testapp/migrations/0057_featurecompletetoy_sort_order.py +23 -0
  289. wagtail/test/testapp/migrations/0058_customlocktask.py +31 -0
  290. wagtail/test/testapp/models.py +27 -0
  291. wagtail/test/testapp/urls.py +1 -0
  292. wagtail/test/testapp/views.py +18 -2
  293. wagtail/test/utils/page_tests.py +17 -17
  294. wagtail/test/utils/template_tests.py +4 -6
  295. wagtail/test/utils/wagtail_tests.py +1 -2
  296. wagtail/tests/test_blocks.py +15 -0
  297. wagtail/tests/test_page_model.py +15 -0
  298. wagtail/{search/tests → tests}/test_page_search.py +29 -2
  299. wagtail/tests/test_search_fields.py +69 -0
  300. wagtail/tests/test_tests.py +62 -6
  301. wagtail/tests/test_workflow.py +25 -1
  302. wagtail/users/locale/cs/LC_MESSAGES/django.mo +0 -0
  303. wagtail/users/locale/cs/LC_MESSAGES/django.po +3 -0
  304. wagtail/users/locale/en/LC_MESSAGES/django.po +2 -2
  305. wagtail/users/locale/nl/LC_MESSAGES/django.mo +0 -0
  306. wagtail/users/locale/nl/LC_MESSAGES/django.po +6 -3
  307. wagtail/users/locale/ru/LC_MESSAGES/django.mo +0 -0
  308. wagtail/users/locale/ru/LC_MESSAGES/django.po +5 -1
  309. wagtail/users/locale/tr/LC_MESSAGES/django.mo +0 -0
  310. wagtail/users/locale/tr/LC_MESSAGES/django.po +78 -4
  311. wagtail/users/templates/wagtailusers/users/create.html +2 -0
  312. wagtail/users/templates/wagtailusers/users/edit.html +2 -0
  313. wagtail/users/tests/test_admin_views.py +4 -0
  314. wagtail/users/views/users.py +1 -1
  315. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/METADATA +7 -6
  316. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/RECORD +322 -328
  317. wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +0 -13
  318. wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +0 -13
  319. wagtail/search/tests/__init__.py +0 -0
  320. wagtail/search/tests/elasticsearch_common_tests.py +0 -251
  321. wagtail/search/tests/test_backends.py +0 -1215
  322. wagtail/search/tests/test_db_backend.py +0 -62
  323. wagtail/search/tests/test_elasticsearch7_backend.py +0 -1452
  324. wagtail/search/tests/test_elasticsearch8_backend.py +0 -15
  325. wagtail/search/tests/test_index_functions.py +0 -256
  326. wagtail/search/tests/test_indexed_class.py +0 -157
  327. wagtail/search/tests/test_mysql_backend.py +0 -192
  328. wagtail/search/tests/test_postgres_backend.py +0 -210
  329. wagtail/search/tests/test_queries.py +0 -332
  330. wagtail/search/tests/test_related_fields.py +0 -102
  331. wagtail/search/tests/test_sqlite_backend.py +0 -52
  332. wagtail/test/search/__init__.py +0 -0
  333. wagtail/test/search/apps.py +0 -9
  334. wagtail/test/search/fixtures/search.json +0 -545
  335. wagtail/test/search/migrations/0001_initial.py +0 -146
  336. wagtail/test/search/migrations/0002_bookunindexed.py +0 -43
  337. wagtail/test/search/migrations/0003_book_summary.py +0 -18
  338. wagtail/test/search/migrations/__init__.py +0 -0
  339. wagtail/test/search/models.py +0 -137
  340. /wagtail/admin/templates/wagtailadmin/{pages/listing/_ordering_cell.html → tables/ordering_cell.html} +0 -0
  341. /wagtail/{search/checks.py → checks.py} +0 -0
  342. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/WHEEL +0 -0
  343. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/entry_points.txt +0 -0
  344. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/licenses/LICENSE +0 -0
  345. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/top_level.txt +0 -0
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -128,60 +128,60 @@ msgstr ""
128
128
  msgid "field type"
129
129
  msgstr ""
130
130
 
131
- #: models.py:96
131
+ #: models.py:98
132
132
  msgid "required"
133
133
  msgstr ""
134
134
 
135
- #: models.py:98
135
+ #: models.py:100
136
136
  msgid "choices"
137
137
  msgstr ""
138
138
 
139
- #: models.py:101
139
+ #: models.py:103
140
140
  msgid ""
141
141
  "Comma or new line separated list of choices. Only applicable in checkboxes, "
142
142
  "radio and dropdown."
143
143
  msgstr ""
144
144
 
145
- #: models.py:105
145
+ #: models.py:107
146
146
  msgid "default value"
147
147
  msgstr ""
148
148
 
149
- #: models.py:108
149
+ #: models.py:110
150
150
  msgid ""
151
151
  "Default value. Comma or new line separated values supported for checkboxes."
152
152
  msgstr ""
153
153
 
154
- #: models.py:112
154
+ #: models.py:114
155
155
  msgid "help text"
156
156
  msgstr ""
157
157
 
158
- #: models.py:195 views.py:198
158
+ #: models.py:197 views.py:198
159
159
  msgid "Submission date"
160
160
  msgstr ""
161
161
 
162
- #: models.py:292
162
+ #: models.py:294
163
163
  msgid "Form"
164
164
  msgstr ""
165
165
 
166
- #: models.py:293
166
+ #: models.py:295
167
167
  msgid "Landing page"
168
168
  msgstr ""
169
169
 
170
- #: models.py:324
170
+ #: models.py:326
171
171
  msgid "to address"
172
172
  msgstr ""
173
173
 
174
- #: models.py:328
174
+ #: models.py:330
175
175
  msgid ""
176
176
  "Optional - form submissions will be emailed to these addresses. Separate "
177
177
  "multiple addresses by comma."
178
178
  msgstr ""
179
179
 
180
- #: models.py:334
180
+ #: models.py:336
181
181
  msgid "from address"
182
182
  msgstr ""
183
183
 
184
- #: models.py:336
184
+ #: models.py:338
185
185
  msgid "subject"
186
186
  msgstr ""
187
187
 
@@ -5,7 +5,7 @@
5
5
  # Translators:
6
6
  # Bram <bram2w@live.nl>, 2015
7
7
  # Franklin Kingma <franklin@statix.net>, 2015
8
- # Storm Heg <storm@stormbase.digital>, 2022-2023
8
+ # Storm Heg <storm@stormbase.digital>, 2022-2023,2025
9
9
  # Thijs Kramer <thijskramer@gmail.com>, 2015
10
10
  # Thijs Kramer <thijskramer@gmail.com>, 2015-2016,2022
11
11
  msgid ""
@@ -14,7 +14,7 @@ msgstr ""
14
14
  "Report-Msgid-Bugs-To: \n"
15
15
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
16
16
  "PO-Revision-Date: 2014-09-11 15:42+0000\n"
17
- "Last-Translator: Thijs Kramer <thijskramer@gmail.com>, 2015-2016,2022\n"
17
+ "Last-Translator: Storm Heg <storm@stormbase.digital>, 2022-2023,2025\n"
18
18
  "Language-Team: Dutch (http://app.transifex.com/torchbox/wagtail/language/"
19
19
  "nl/)\n"
20
20
  "MIME-Version: 1.0\n"
@@ -32,6 +32,23 @@ msgstr "Datum vanaf"
32
32
  msgid "Date to"
33
33
  msgstr "Datum tot"
34
34
 
35
+ #, python-format
36
+ msgid ""
37
+ "The name '%(duplicate_clean_name)s' is already assigned to this field and "
38
+ "cannot be changed. Please enter a different label for the conflicting field."
39
+ msgstr ""
40
+ "De naam '%(duplicate_clean_name)s' is al in gebruik voor dit veld en kan "
41
+ "daarom niet worden gewijzigd. Kies een ander label voor het conflicterende "
42
+ "veld."
43
+
44
+ #, python-format
45
+ msgid ""
46
+ "Field name '%(duplicate_clean_name)s' conflicts with another field. Please "
47
+ "change the label."
48
+ msgstr ""
49
+ "Veld met naam '%(duplicate_clean_name)s' gebruikt hetzelfde label als een "
50
+ "ander veld. Kies alsjeblieft een ander label."
51
+
35
52
  msgid "Single line text"
36
53
  msgstr "Enkele regel tekst"
37
54
 
@@ -14,6 +14,7 @@
14
14
  # sergeybe <sergeybe@gmail.com>, 2020
15
15
  # Sergey Khalymon <sergiykhalimon@gmail.com>, 2015
16
16
  # Sergey Khalymon <sergiykhalimon@gmail.com>, 2015
17
+ # Twixxik, 2025
17
18
  # Влад <integration.into.society@gmail.com>, 2022
18
19
  msgid ""
19
20
  msgstr ""
@@ -21,7 +22,7 @@ msgstr ""
21
22
  "Report-Msgid-Bugs-To: \n"
22
23
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
23
24
  "PO-Revision-Date: 2014-09-11 15:42+0000\n"
24
- "Last-Translator: Влад <integration.into.society@gmail.com>, 2022\n"
25
+ "Last-Translator: Twixxik, 2025\n"
25
26
  "Language-Team: Russian (http://app.transifex.com/torchbox/wagtail/language/"
26
27
  "ru/)\n"
27
28
  "MIME-Version: 1.0\n"
@@ -41,6 +42,22 @@ msgstr "Дата от"
41
42
  msgid "Date to"
42
43
  msgstr "Дата до"
43
44
 
45
+ #, python-format
46
+ msgid ""
47
+ "The name '%(duplicate_clean_name)s' is already assigned to this field and "
48
+ "cannot be changed. Please enter a different label for the conflicting field."
49
+ msgstr ""
50
+ "Имя '%(duplicate_clean_name)s' уже назначено этому полю и не может быть "
51
+ "изменено. Пожалуйста, введите другой ярлык для конфликтующего поля."
52
+
53
+ #, python-format
54
+ msgid ""
55
+ "Field name '%(duplicate_clean_name)s' conflicts with another field. Please "
56
+ "change the label."
57
+ msgstr ""
58
+ "Имя поля '%(duplicate_clean_name)s' конфликтует с другим полем. Пожалуйста, "
59
+ "измените ярлык."
60
+
44
61
  msgid "Single line text"
45
62
  msgstr "Однострочный текст"
46
63
 
@@ -34,7 +34,6 @@ EVENTPAGE_URLS = {
34
34
  "http://localhost/events/saint-patrick/",
35
35
  "http://localhost/events/tentative-unpublished-event/",
36
36
  "http://localhost/events/someone-elses-event/",
37
- "http://localhost/events/tentative-unpublished-event/",
38
37
  "http://localhost/secret-plans/steal-underpants/",
39
38
  }
40
39
 
@@ -629,7 +628,10 @@ class TestCachePurgingFunctions(TestCase):
629
628
  }
630
629
  )
631
630
  def test_invalidate_specific_location(self):
632
- with self.assertLogs(level="INFO") as log_output:
631
+ with self.assertLogs(
632
+ logger="wagtail.frontendcache",
633
+ level="INFO",
634
+ ) as log_output:
633
635
  with self.captureOnCommitCallbacks(execute=True):
634
636
  purge_url_from_cache("http://localhost/foo")
635
637
 
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -248,17 +248,17 @@ msgstr ""
248
248
 
249
249
  #: views.py:249
250
250
  #, python-format
251
- msgid "File format of type \"%(extension)s\" is not supported"
251
+ msgid "File format of type \"%(extension)s\" is not supported."
252
252
  msgstr ""
253
253
 
254
254
  #: views.py:266
255
255
  #, python-format
256
- msgid "Imported file has a wrong encoding: %(error_message)s"
256
+ msgid "Imported file has a wrong encoding: %(error_message)s."
257
257
  msgstr ""
258
258
 
259
259
  #: views.py:273
260
260
  #, python-format
261
- msgid "%(error)s encountered while trying to read file: %(filename)s"
261
+ msgid "%(error)s encountered while trying to read file: %(filename)s."
262
262
  msgstr ""
263
263
 
264
264
  #: views.py:364
@@ -0,0 +1,20 @@
1
+ from django.core.cache import cache
2
+ from django.test import TestCase
3
+
4
+ from wagtail.contrib.redirects.tmp_storages import CacheStorage
5
+
6
+
7
+ class CacheStorageTests(TestCase):
8
+ def test_cache_storage_save_and_remove(self):
9
+ name = "testfile.txt"
10
+ content = b"hello world"
11
+ storage = CacheStorage(name)
12
+
13
+ # Adds to cache
14
+ storage.save(content)
15
+ key = storage.CACHE_PREFIX + storage.name
16
+ self.assertEqual(cache.get(key), content)
17
+
18
+ # Removes from cache
19
+ storage.remove()
20
+ self.assertIsNone(cache.get(key))
@@ -89,7 +89,7 @@ class CacheStorage(BaseStorage):
89
89
  return cache.get(self.CACHE_PREFIX + self.name)
90
90
 
91
91
  def remove(self):
92
- cache.delete(self.name)
92
+ cache.delete(self.CACHE_PREFIX + self.name)
93
93
 
94
94
 
95
95
  class MediaStorage(BaseStorage):
@@ -246,7 +246,7 @@ def start_import(request):
246
246
  if extension not in supported_extensions:
247
247
  messages.error(
248
248
  request,
249
- _('File format of type "%(extension)s" is not supported')
249
+ _('File format of type "%(extension)s" is not supported.')
250
250
  % {"extension": extension},
251
251
  )
252
252
  return redirect("wagtailredirects:start_import")
@@ -263,14 +263,14 @@ def start_import(request):
263
263
  except UnicodeDecodeError as e:
264
264
  messages.error(
265
265
  request,
266
- _("Imported file has a wrong encoding: %(error_message)s")
266
+ _("Imported file has a wrong encoding: %(error_message)s.")
267
267
  % {"error_message": e},
268
268
  )
269
269
  return redirect("wagtailredirects:start_import")
270
270
  except Exception as e: # noqa: BLE001; pragma: no cover
271
271
  messages.error(
272
272
  request,
273
- _("%(error)s encountered while trying to read file: %(filename)s")
273
+ _("%(error)s encountered while trying to read file: %(filename)s.")
274
274
  % {"error": type(e).__name__, "filename": import_file.name},
275
275
  )
276
276
  return redirect("wagtailredirects:start_import")
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -216,7 +216,7 @@ msgid "Editor's picks for '%(query)s' created."
216
216
  msgstr ""
217
217
 
218
218
  #: views/settings.py:184
219
- msgid "Recommendations have not been created due to errors"
219
+ msgid "Recommendations have not been created due to errors."
220
220
  msgstr ""
221
221
 
222
222
  #: views/settings.py:193
@@ -225,7 +225,7 @@ msgid "Editor's picks for '%(query)s' updated."
225
225
  msgstr ""
226
226
 
227
227
  #: views/settings.py:194
228
- msgid "Recommendations have not been saved due to errors"
228
+ msgid "Recommendations have not been saved due to errors."
229
229
  msgstr ""
230
230
 
231
231
  #: views/settings.py:203
@@ -4,6 +4,7 @@
4
4
  #
5
5
  # Translators:
6
6
  # Cihad GÜNDOĞDU <cihadgundogdu@gmail.com>, 2025
7
+ # Ertuğrul Keremoğlu, 2025
7
8
  # Py Data Geek <pydatageek@gmail.com>, 2019
8
9
  # Py Data Geek <pydatageek@gmail.com>, 2019
9
10
  # Ragıp Ünal <ragip@ragipunal.com>, 2016
@@ -13,7 +14,7 @@ msgstr ""
13
14
  "Report-Msgid-Bugs-To: \n"
14
15
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
15
16
  "PO-Revision-Date: 2015-08-26 14:04+0000\n"
16
- "Last-Translator: Ragıp Ünal <ragip@ragipunal.com>, 2016\n"
17
+ "Last-Translator: Ertuğrul Keremoğlu, 2025\n"
17
18
  "Language-Team: Turkish (http://app.transifex.com/torchbox/wagtail/language/"
18
19
  "tr/)\n"
19
20
  "MIME-Version: 1.0\n"
@@ -26,7 +27,7 @@ msgid "Wagtail search promotions"
26
27
  msgstr "Wagtail arama tanıtımları (search promotions)"
27
28
 
28
29
  msgid "Search term(s)/phrase"
29
- msgstr "Terim/kelime ara"
30
+ msgstr "Arama terimi/ifadesi"
30
31
 
31
32
  msgid ""
32
33
  "Enter the full search string to match. An exact match is required for your "
@@ -58,6 +59,12 @@ msgstr "sayfa"
58
59
  msgid "Choose an internal page for this promotion"
59
60
  msgstr "Bu tanıtım için bir iç sayfa seçin"
60
61
 
62
+ msgid "External link URL"
63
+ msgstr "Dış bağlantı URL'si"
64
+
65
+ msgid "Alternatively, use an external link for this promotion"
66
+ msgstr "Alternatif olarak, bu tanıtım için bir dış bağlantı kullanın"
67
+
61
68
  msgid "description"
62
69
  msgstr "açıklama"
63
70
 
@@ -67,6 +74,30 @@ msgstr "İç sayfa veya dış bağlantı için geçerlidir"
67
74
  msgid "search promotion"
68
75
  msgstr "arama tanıtımı"
69
76
 
77
+ msgid ""
78
+ "<p>Promoted search results are a means of recommending specific pages or "
79
+ "external links that might not organically come high up in search results. "
80
+ "E.g recommending your primary donation page to a user searching with the "
81
+ "less common term \"<em>giving</em>\".</p>"
82
+ msgstr ""
83
+ "<p>Tanıtılan arama sonuçları, arama sonuçlarında organik olarak üst "
84
+ "sıralarda çıkmayabilecek belirli sayfaları veya harici bağlantıları önermek "
85
+ "için kullanılan bir yöntemdir. Örneğin, \"<em>yap</em>\" gibi daha az yaygın "
86
+ "bir terimle arama yapan bir kullanıcıya bağış sayfanızı önermek için bir "
87
+ "tanıtılan arama sonucu oluşturabilirsiniz.</p>"
88
+
89
+ msgid ""
90
+ "<p>The \"Search term(s)/phrase\" field below must contain the full and exact "
91
+ "search for which you wish to provide recommended results, <em>including</em> "
92
+ "any misspellings/user error. To help, you can choose from search terms that "
93
+ "have been popular with users of your site.</p>"
94
+ msgstr ""
95
+ "<p>Aşağıdaki \"Arama terimi/ifadesi\" alanı, aratıldığı takdirde önerilen "
96
+ "sonuçlar sunmak istediğiniz tam ve eksiksiz arama ifadesini içermelidir; "
97
+ "buna yazım hataları veya kullanıcı hataları da <em>dahildir</em>. Kolaylık "
98
+ "olması için, sitenizin kullanıcıları arasında popüler olmuş arama "
99
+ "terimlerinden seçim yapabilirsiniz.</p>"
100
+
70
101
  #, python-format
71
102
  msgid "Delete %(query)s"
72
103
  msgstr "%(query)s sil"
@@ -89,9 +120,15 @@ msgstr "Sürükle"
89
120
  msgid "Delete"
90
121
  msgstr "Sil"
91
122
 
123
+ msgid "Recommended search result"
124
+ msgstr "Önerilen arama sonucu"
125
+
92
126
  msgid "Promoted search results"
93
127
  msgstr "Tanıtılan arama sonuçları"
94
128
 
129
+ msgid "Add a recommended result"
130
+ msgstr "Önerilen bir sonuç ekle"
131
+
95
132
  #, python-format
96
133
  msgid "Sorry, no promoted results match \"<em>%(query_string)s</em>\""
97
134
  msgstr "Üzgünüm, \"<em>%(query_string)s</em>\" ile eşleşen sonuç yok"
@@ -101,7 +138,7 @@ msgid ""
101
138
  "No promoted results have been created. Why not <a "
102
139
  "href=\"%(wagtailsearchpromotions_add_url)s\">add one</a>?"
103
140
  msgstr ""
104
- "Hiçbir tanıtılan sonuç oluştuurlmadı. Neden <a "
141
+ "Hiçbir tanıtılan sonuç oluşturulmadı. Neden <a "
105
142
  "href=\"%(wagtailsearchpromotions_add_url)s\">bir tane eklemiyorsunuz</a>?"
106
143
 
107
144
  msgid "No promoted results have been created."
@@ -134,6 +171,9 @@ msgstr "Yok"
134
171
  msgid "Date"
135
172
  msgstr "Tarih"
136
173
 
174
+ msgid "Search terms"
175
+ msgstr "Arama terimleri"
176
+
137
177
  msgid "Search term(s)"
138
178
  msgstr "Arama terimi(leri)"
139
179
 
@@ -1 +1 @@
1
- QUERY_CHOOSER_MODAL_ONLOAD_HANDLERS={chooser:function(t,r){function n(t){$(".listing a.choose-query",t).on("click",o),$(".pagination a",t).on("click",(function(){return t=this.getAttribute("data-page"),r=$("#id_q").val().length?{q:$("#id_q").val(),p:t}:{p:t},u=$.ajax({url:e,data:r,success:function(t,r){u=null,$("#query-results").html(t),n($("#query-results"))},error:function(){u=null}}),!1;var t,r}))}var u,e=$("form.query-search",t.body).attr("action");function a(){return u=$.ajax({url:e,data:{q:$("#id_q").val()},success:function(t,r){u=null,$("#query-results").html(t),n($("#query-results"))},error:function(){u=null}}),!1}function o(){return t.respond("queryChosen",$(this).data()),t.close(),!1}n(t.body),$("form.query-search",t.body).on("submit",a),$("#id_q").on("input",(function(){u&&u.abort(),clearTimeout($.data(this,"timer"));var t=setTimeout(a,200);$(this).data("timer",t)}))}};
1
+ QUERY_CHOOSER_MODAL_ONLOAD_HANDLERS={chooser:function(t,r){function n(t){$(".listing a.choose-query",t).on("click",o),$(".pagination a",t).on("click",function(){return t=this.getAttribute("data-page"),r=$("#id_q").val().length?{q:$("#id_q").val(),p:t}:{p:t},u=$.ajax({url:e,data:r,success:function(t,r){u=null,$("#query-results").html(t),n($("#query-results"))},error:function(){u=null}}),!1;var t,r})}var u,e=$("form.query-search",t.body).attr("action");function a(){return u=$.ajax({url:e,data:{q:$("#id_q").val()},success:function(t,r){u=null,$("#query-results").html(t),n($("#query-results"))},error:function(){u=null}}),!1}function o(){return t.respond("queryChosen",$(this).data()),t.close(),!1}n(t.body),$("form.query-search",t.body).on("submit",a),$("#id_q").on("input",function(){u&&u.abort(),clearTimeout($.data(this,"timer"));var t=setTimeout(a,200);$(this).data("timer",t)})}};
@@ -181,7 +181,7 @@ class SearchPromotionCreateEditMixin:
181
181
 
182
182
  class CreateView(SearchPromotionCreateEditMixin, generic.CreateView):
183
183
  success_message = gettext_lazy("Editor's picks for '%(query)s' created.")
184
- error_message = gettext_lazy("Recommendations have not been created due to errors")
184
+ error_message = gettext_lazy("Recommendations have not been created due to errors.")
185
185
  template_name = "wagtailsearchpromotions/add.html"
186
186
  add_url_name = "wagtailsearchpromotions:add"
187
187
 
@@ -191,7 +191,7 @@ class EditView(SearchPromotionCreateEditMixin, generic.EditView):
191
191
  context_object_name = "query"
192
192
  delete_url_name = "wagtailsearchpromotions:delete"
193
193
  success_message = gettext_lazy("Editor's picks for '%(query)s' updated.")
194
- error_message = gettext_lazy("Recommendations have not been saved due to errors")
194
+ error_message = gettext_lazy("Recommendations have not been saved due to errors.")
195
195
  template_name = "wagtailsearchpromotions/edit.html"
196
196
 
197
197
 
@@ -5,6 +5,7 @@
5
5
  # Translators:
6
6
  # IT Management <hudan@itmanagement.cz>, 2018
7
7
  # IT Management <hudan@itmanagement.cz>, 2018,2024
8
+ # Jan Zelený <janzeleny@outlook.com>, 2025
8
9
  # Marek Turnovec <aesculap@gmail.com>, 2016,2020
9
10
  # Mirek Zvolský <zvolsky@seznam.cz>, 2020
10
11
  # IT Management <hudan@itmanagement.cz>, 2018
@@ -14,7 +15,7 @@ msgstr ""
14
15
  "Report-Msgid-Bugs-To: \n"
15
16
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
16
17
  "PO-Revision-Date: 2016-03-01 19:20+0000\n"
17
- "Last-Translator: IT Management <hudan@itmanagement.cz>, 2018,2024\n"
18
+ "Last-Translator: Jan Zelený <janzeleny@outlook.com>, 2025\n"
18
19
  "Language-Team: Czech (http://app.transifex.com/torchbox/wagtail/language/"
19
20
  "cs/)\n"
20
21
  "MIME-Version: 1.0\n"
@@ -30,6 +31,10 @@ msgstr "výchozí"
30
31
  msgid "Sites"
31
32
  msgstr "Weby"
32
33
 
34
+ #, python-format
35
+ msgid "%(model)s permissions"
36
+ msgstr "oprávnění pro %(model)s"
37
+
33
38
  #, python-format
34
39
  msgid "%(site_setting)s for %(site)s"
35
40
  msgstr "%(site_setting)s pro %(site)s"
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -10,7 +10,7 @@
10
10
  # Meteor0id, 2021
11
11
  # Meteor0id, 2021
12
12
  # Rob Moorman <rob@moori.nl>, 2016
13
- # Storm Heg <storm@stormbase.digital>, 2022
13
+ # Storm Heg <storm@stormbase.digital>, 2022,2025
14
14
  # Thijs Kramer <thijskramer@gmail.com>, 2016,2020
15
15
  msgid ""
16
16
  msgstr ""
@@ -18,7 +18,7 @@ msgstr ""
18
18
  "Report-Msgid-Bugs-To: \n"
19
19
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
20
20
  "PO-Revision-Date: 2016-03-01 19:20+0000\n"
21
- "Last-Translator: Thijs Kramer <thijskramer@gmail.com>, 2016,2020\n"
21
+ "Last-Translator: Storm Heg <storm@stormbase.digital>, 2022,2025\n"
22
22
  "Language-Team: Dutch (http://app.transifex.com/torchbox/wagtail/language/"
23
23
  "nl/)\n"
24
24
  "MIME-Version: 1.0\n"
@@ -33,6 +33,10 @@ msgstr "standaard"
33
33
  msgid "Sites"
34
34
  msgstr "Sites"
35
35
 
36
+ #, python-format
37
+ msgid "%(model)s permissions"
38
+ msgstr "%(model)s machtigingen"
39
+
36
40
  #, python-format
37
41
  msgid "%(site_setting)s for %(site)s"
38
42
  msgstr "%(site_setting)s voor %(site)s"
@@ -15,6 +15,7 @@
15
15
  # Nikita Tonkoshkur <humapen@gmail.com>, 2018
16
16
  # sergeybe <sergeybe@gmail.com>, 2020
17
17
  # sergeybe <sergeybe@gmail.com>, 2020
18
+ # Twixxik, 2025
18
19
  # Zhdan Parfenov, 2022
19
20
  # Zhdan Parfenov, 2022
20
21
  # Влад <integration.into.society@gmail.com>, 2022
@@ -24,7 +25,7 @@ msgstr ""
24
25
  "Report-Msgid-Bugs-To: \n"
25
26
  "POT-Creation-Date: 2025-07-24 16:20+0200\n"
26
27
  "PO-Revision-Date: 2016-03-01 19:20+0000\n"
27
- "Last-Translator: Влад <integration.into.society@gmail.com>, 2022\n"
28
+ "Last-Translator: Twixxik, 2025\n"
28
29
  "Language-Team: Russian (http://app.transifex.com/torchbox/wagtail/language/"
29
30
  "ru/)\n"
30
31
  "MIME-Version: 1.0\n"
@@ -41,6 +42,10 @@ msgstr "по умолчанию"
41
42
  msgid "Sites"
42
43
  msgstr "Сайты"
43
44
 
45
+ #, python-format
46
+ msgid "%(model)s permissions"
47
+ msgstr "%(model)s разрешения"
48
+
44
49
  #, python-format
45
50
  msgid "%(site_setting)s for %(site)s"
46
51
  msgstr "%(site_setting)s для %(site)s"
@@ -134,9 +134,27 @@ class TestSiteSettingCreateView(SiteSettingTestMixin, BaseTestSiteSettingView):
134
134
 
135
135
  def test_edit_invalid(self):
136
136
  response = self.post(post_data={"foo": "bar"})
137
- self.assertContains(response, "The setting could not be saved due to errors.")
138
- self.assertContains(response, "error-message", count=2)
139
- self.assertContains(response, "This field is required", count=2)
137
+ soup = self.get_soup(response.content)
138
+ header_messages = soup.css.select(".messages[role='status'] ul > li")
139
+
140
+ # there should be one header message that indicates the issue and has a go to error button
141
+ self.assertEqual(len(header_messages), 1)
142
+ message = header_messages[0]
143
+ self.assertIn(
144
+ "The setting could not be saved due to errors.", message.get_text()
145
+ )
146
+ buttons = message.find_all("button")
147
+ self.assertEqual(len(buttons), 1)
148
+ self.assertEqual(buttons[0].attrs["data-controller"], "w-count w-focus")
149
+ self.assertIn("Go to the first error", buttons[0].get_text())
150
+
151
+ # the field errors should indicate that two fields were required
152
+ error_messages = soup.css.select(".error-message")
153
+ self.assertEqual(len(error_messages), 2)
154
+ self.assertIn("This field is required.", error_messages[0].get_text())
155
+ self.assertEqual(error_messages[0].parent["id"], "panel-child-title-errors")
156
+ self.assertIn("This field is required.", error_messages[1].get_text())
157
+ self.assertEqual(error_messages[1].parent["id"], "panel-child-email-errors")
140
158
 
141
159
  def test_edit(self):
142
160
  response = self.post(
@@ -348,9 +366,25 @@ class TestSiteSettingEditView(SiteSettingTestMixin, BaseTestSiteSettingView):
348
366
 
349
367
  def test_edit_invalid(self):
350
368
  response = self.post(post_data={"foo": "bar"})
351
- self.assertContains(response, "The setting could not be saved due to errors.")
352
- self.assertContains(response, "error-message", count=2)
353
- self.assertContains(response, "This field is required", count=2)
369
+ soup = self.get_soup(response.content)
370
+ header_messages = soup.css.select(".messages[role='status'] ul > li")
371
+
372
+ # there should be one header message that indicates the issue and has a go to error button
373
+ self.assertEqual(len(header_messages), 1)
374
+ message = header_messages[0]
375
+ self.assertIn(
376
+ "The setting could not be saved due to errors.", message.get_text()
377
+ )
378
+ buttons = message.find_all("button")
379
+ self.assertEqual(len(buttons), 1)
380
+ self.assertEqual(buttons[0].attrs["data-controller"], "w-count w-focus")
381
+ self.assertIn("Go to the first error", buttons[0].get_text())
382
+
383
+ # the field errors should indicate that two fields were required
384
+ error_messages = soup.css.select(".error-message")
385
+ self.assertEqual(len(error_messages), 2)
386
+ self.assertIn("This field is required.", error_messages[0].get_text())
387
+ self.assertIn("This field is required.", error_messages[1].get_text())
354
388
 
355
389
  def test_edit(self):
356
390
  response = self.post(
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"