wagtail 7.2.1__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 (312) 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 +35 -0
  23. wagtail/admin/locale/en/LC_MESSAGES/django.po +262 -234
  24. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +72 -43
  25. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  26. wagtail/admin/locale/it/LC_MESSAGES/django.po +566 -6
  27. wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
  28. wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +40 -2
  29. wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
  30. wagtail/admin/locale/nl/LC_MESSAGES/django.po +2 -2
  31. wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
  32. wagtail/admin/locale/sv/LC_MESSAGES/django.po +330 -15
  33. wagtail/admin/locale/sv/LC_MESSAGES/djangojs.mo +0 -0
  34. wagtail/admin/locale/sv/LC_MESSAGES/djangojs.po +3 -2
  35. wagtail/admin/panels/comment_panel.py +1 -51
  36. wagtail/admin/panels/title_field_panel.py +3 -1
  37. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  38. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  39. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  40. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  41. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
  42. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  43. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  44. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  45. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  46. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  47. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +1 -1
  48. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  49. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  50. wagtail/admin/templates/wagtailadmin/base.html +1 -1
  51. wagtail/admin/templates/wagtailadmin/generic/edit_partials.html +100 -0
  52. wagtail/admin/templates/wagtailadmin/generic/form.html +26 -5
  53. wagtail/admin/templates/wagtailadmin/generic/includes/_loaded_revision_inputs.html +3 -0
  54. wagtail/admin/templates/wagtailadmin/generic/listing_results.html +1 -17
  55. wagtail/admin/templates/wagtailadmin/pages/create.html +14 -4
  56. wagtail/admin/templates/wagtailadmin/pages/edit.html +16 -3
  57. wagtail/admin/templates/wagtailadmin/pages/edit_partials.html +31 -0
  58. wagtail/admin/templates/wagtailadmin/pages/index_results.html +1 -9
  59. wagtail/admin/templates/wagtailadmin/shared/autosave/indicator.html +36 -0
  60. wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +1 -1
  61. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/list.html +2 -2
  62. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/module.html +19 -3
  63. wagtail/admin/templates/wagtailadmin/shared/headers/_actions.html +5 -0
  64. wagtail/admin/templates/wagtailadmin/shared/headers/_history_icon_link.html +2 -2
  65. wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +8 -9
  66. wagtail/admin/templates/wagtailadmin/shared/listing/filter_partials.html +19 -0
  67. wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +3 -3
  68. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/side_panel.html +3 -0
  69. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/privacy.html +18 -6
  70. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/usage.html +11 -4
  71. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/workflow.html +22 -1
  72. wagtail/admin/templates/wagtailadmin/shared/side_panels/preview.html +1 -0
  73. wagtail/admin/templates/wagtailadmin/shared/side_panels.html +1 -2
  74. wagtail/admin/templates/wagtailadmin/shared/unsaved_changes_warning.html +20 -20
  75. wagtail/admin/templates/wagtailadmin/userbar/base.html +2 -0
  76. wagtail/admin/templates/wagtailadmin/userbar/item_accessibility.html +1 -1
  77. wagtail/admin/templatetags/wagtailadmin_tags.py +6 -14
  78. wagtail/admin/tests/pages/test_create_page.py +298 -1
  79. wagtail/admin/tests/pages/test_custom_listing.py +48 -2
  80. wagtail/admin/tests/pages/test_edit_page.py +721 -7
  81. wagtail/admin/tests/pages/test_explorer_view.py +9 -5
  82. wagtail/admin/tests/pages/test_page_search.py +15 -0
  83. wagtail/admin/tests/pages/test_revisions.py +4 -0
  84. wagtail/admin/tests/test_account_management.py +88 -2
  85. wagtail/admin/tests/test_collections_views.py +15 -15
  86. wagtail/admin/tests/test_compare.py +34 -0
  87. wagtail/admin/tests/test_editing_sessions.py +230 -8
  88. wagtail/admin/tests/test_forms.py +192 -1
  89. wagtail/admin/tests/test_icon_sprite.py +22 -2
  90. wagtail/admin/tests/test_page_chooser.py +13 -13
  91. wagtail/admin/tests/test_reports_views.py +4 -1
  92. wagtail/admin/tests/test_userbar.py +69 -5
  93. wagtail/admin/tests/test_views_generic.py +5 -5
  94. wagtail/admin/tests/test_workflows.py +14 -12
  95. wagtail/admin/tests/viewsets/test_model_viewset.py +13 -0
  96. wagtail/admin/ui/autosave.py +5 -0
  97. wagtail/admin/ui/editing_sessions.py +3 -0
  98. wagtail/admin/ui/side_panels.py +19 -20
  99. wagtail/admin/userbar.py +48 -27
  100. wagtail/admin/views/bulk_action/dispatcher.py +2 -2
  101. wagtail/admin/views/chooser.py +6 -6
  102. wagtail/admin/views/editing_sessions.py +20 -7
  103. wagtail/admin/views/generic/__init__.py +1 -0
  104. wagtail/admin/views/generic/chooser.py +5 -5
  105. wagtail/admin/views/generic/mixins.py +143 -26
  106. wagtail/admin/views/generic/models.py +157 -27
  107. wagtail/admin/views/generic/ordering.py +1 -1
  108. wagtail/admin/views/generic/preview.py +4 -4
  109. wagtail/admin/views/home.py +3 -1
  110. wagtail/admin/views/pages/create.py +77 -29
  111. wagtail/admin/views/pages/edit.py +160 -34
  112. wagtail/admin/views/pages/preview.py +4 -4
  113. wagtail/admin/views/pages/revisions.py +3 -0
  114. wagtail/admin/views/pages/search.py +4 -4
  115. wagtail/admin/views/pages/usage.py +2 -2
  116. wagtail/admin/views/tags.py +2 -2
  117. wagtail/admin/views/workflows.py +73 -54
  118. wagtail/admin/viewsets/model.py +34 -8
  119. wagtail/admin/widgets/button.py +11 -4
  120. wagtail/admin/widgets/chooser.py +6 -4
  121. wagtail/admin/widgets/slug.py +1 -1
  122. wagtail/api/v2/filters.py +27 -21
  123. wagtail/api/v2/pagination.py +4 -4
  124. wagtail/api/v2/views.py +7 -7
  125. wagtail/blocks/list_block.py +0 -8
  126. wagtail/blocks/migrations/migrate_operation.py +8 -1
  127. wagtail/blocks/stream_block.py +2 -10
  128. wagtail/blocks/struct_block.py +192 -12
  129. wagtail/compat.py +2 -2
  130. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +1 -1
  131. wagtail/contrib/forms/locale/it/LC_MESSAGES/django.mo +0 -0
  132. wagtail/contrib/forms/locale/it/LC_MESSAGES/django.po +40 -2
  133. wagtail/contrib/frontend_cache/backends/azure.py +6 -6
  134. wagtail/contrib/frontend_cache/backends/cloudfront.py +2 -2
  135. wagtail/contrib/frontend_cache/utils.py +1 -1
  136. wagtail/contrib/redirects/forms.py +1 -1
  137. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +14 -14
  138. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.mo +0 -0
  139. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.po +15 -2
  140. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.mo +0 -0
  141. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.po +16 -3
  142. wagtail/contrib/redirects/middleware.py +11 -7
  143. wagtail/contrib/redirects/models.py +17 -1
  144. wagtail/contrib/redirects/tests/test_import_admin_views.py +3 -3
  145. wagtail/contrib/redirects/tests/test_redirects.py +56 -8
  146. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +6 -6
  147. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
  148. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +43 -2
  149. wagtail/contrib/search_promotions/tests.py +1 -1
  150. wagtail/contrib/search_promotions/views/settings.py +24 -25
  151. wagtail/contrib/settings/jinja2tags.py +2 -2
  152. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +2 -2
  153. wagtail/contrib/settings/locale/it/LC_MESSAGES/django.mo +0 -0
  154. wagtail/contrib/settings/locale/it/LC_MESSAGES/django.po +6 -2
  155. wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.mo +0 -0
  156. wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.po +3 -2
  157. wagtail/contrib/settings/tests/generic/test_admin.py +118 -2
  158. wagtail/contrib/settings/tests/site_specific/test_admin.py +78 -15
  159. wagtail/contrib/settings/tests/site_specific/test_model.py +2 -2
  160. wagtail/contrib/settings/views.py +7 -0
  161. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  162. wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.mo +0 -0
  163. wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.po +5 -2
  164. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
  165. wagtail/contrib/styleguide/tests.py +2 -0
  166. wagtail/contrib/styleguide/views.py +4 -5
  167. wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.mo +0 -0
  168. wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.po +5 -1
  169. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  170. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.mo +0 -0
  171. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +5 -2
  172. wagtail/contrib/typed_table_block/blocks.py +37 -0
  173. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
  174. wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.mo +0 -0
  175. wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.po +4 -3
  176. wagtail/contrib/typed_table_block/tests.py +108 -0
  177. wagtail/coreutils.py +4 -4
  178. wagtail/documents/__init__.py +4 -4
  179. wagtail/documents/locale/en/LC_MESSAGES/django.po +15 -15
  180. wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
  181. wagtail/documents/locale/it/LC_MESSAGES/django.po +32 -2
  182. wagtail/documents/locale/sv/LC_MESSAGES/django.mo +0 -0
  183. wagtail/documents/locale/sv/LC_MESSAGES/django.po +32 -4
  184. wagtail/documents/models.py +1 -1
  185. wagtail/documents/tests/test_admin_views.py +19 -4
  186. wagtail/documents/tests/test_search.py +0 -2
  187. wagtail/documents/tests/test_views.py +6 -4
  188. wagtail/documents/views/bulk_actions/add_tags.py +1 -1
  189. wagtail/embeds/finders/facebook.py +3 -3
  190. wagtail/embeds/finders/instagram.py +3 -3
  191. wagtail/embeds/finders/oembed.py +7 -2
  192. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  193. wagtail/embeds/oembed_providers.py +8 -0
  194. wagtail/embeds/tests/test_embeds.py +35 -0
  195. wagtail/images/__init__.py +4 -4
  196. wagtail/images/admin_urls.py +3 -3
  197. wagtail/images/blocks.py +1 -1
  198. wagtail/images/formats.py +2 -2
  199. wagtail/images/image_operations.py +2 -2
  200. wagtail/images/locale/en/LC_MESSAGES/django.po +44 -40
  201. wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
  202. wagtail/images/locale/it/LC_MESSAGES/django.po +50 -4
  203. wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
  204. wagtail/images/locale/nl/LC_MESSAGES/django.po +3 -3
  205. wagtail/images/locale/sv/LC_MESSAGES/django.mo +0 -0
  206. wagtail/images/locale/sv/LC_MESSAGES/django.po +49 -6
  207. wagtail/images/models.py +11 -10
  208. wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
  209. wagtail/images/templates/wagtailimages/images/url_generator.html +17 -38
  210. wagtail/images/templates/wagtailimages/images/url_generator_output.html +28 -0
  211. wagtail/images/templatetags/wagtailimages_tags.py +4 -4
  212. wagtail/images/tests/test_admin_views.py +432 -59
  213. wagtail/images/tests/test_image_operations.py +2 -2
  214. wagtail/images/tests/test_models.py +0 -2
  215. wagtail/images/views/bulk_actions/add_tags.py +1 -1
  216. wagtail/images/views/images.py +72 -39
  217. wagtail/locale/en/LC_MESSAGES/django.po +103 -105
  218. wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
  219. wagtail/locale/it/LC_MESSAGES/django.po +105 -2
  220. wagtail/locale/sv/LC_MESSAGES/django.mo +0 -0
  221. wagtail/locale/sv/LC_MESSAGES/django.po +95 -12
  222. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  223. wagtail/locales/locale/it/LC_MESSAGES/django.mo +0 -0
  224. wagtail/locales/locale/it/LC_MESSAGES/django.po +13 -2
  225. wagtail/locales/locale/sv/LC_MESSAGES/django.mo +0 -0
  226. wagtail/locales/locale/sv/LC_MESSAGES/django.po +4 -3
  227. wagtail/locales/tests.py +5 -5
  228. wagtail/models/i18n.py +4 -6
  229. wagtail/models/media.py +18 -0
  230. wagtail/models/pages.py +65 -11
  231. wagtail/models/reference_index.py +15 -0
  232. wagtail/models/revisions.py +40 -12
  233. wagtail/models/workflows.py +0 -3
  234. wagtail/permission_policies/base.py +2 -2
  235. wagtail/permission_policies/collections.py +2 -2
  236. wagtail/project_template/requirements.txt +2 -2
  237. wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
  238. wagtail/signal_handlers.py +1 -0
  239. wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
  240. wagtail/sites/locale/sv/LC_MESSAGES/django.mo +0 -0
  241. wagtail/sites/locale/sv/LC_MESSAGES/django.po +3 -2
  242. wagtail/sites/tests.py +7 -7
  243. wagtail/snippets/action_menu.py +2 -1
  244. wagtail/snippets/locale/en/LC_MESSAGES/django.po +23 -13
  245. wagtail/snippets/locale/sv/LC_MESSAGES/django.mo +0 -0
  246. wagtail/snippets/locale/sv/LC_MESSAGES/django.po +12 -1
  247. wagtail/snippets/tests/test_chooser_block.py +197 -0
  248. wagtail/snippets/tests/test_chooser_panel.py +149 -0
  249. wagtail/snippets/tests/test_chooser_views.py +375 -0
  250. wagtail/snippets/tests/test_chooser_widget.py +22 -0
  251. wagtail/snippets/tests/test_compare_revisions_view.py +167 -0
  252. wagtail/snippets/tests/test_copy_view.py +38 -0
  253. wagtail/snippets/tests/test_create_view.py +1159 -0
  254. wagtail/snippets/tests/test_delete_view.py +225 -0
  255. wagtail/snippets/tests/test_edit_view.py +2882 -0
  256. wagtail/snippets/tests/test_history_view.py +182 -0
  257. wagtail/snippets/tests/test_index_view.py +105 -0
  258. wagtail/snippets/tests/test_list_view.py +786 -0
  259. wagtail/snippets/tests/test_locking.py +28 -0
  260. wagtail/snippets/tests/test_permissions.py +167 -0
  261. wagtail/snippets/tests/test_preview.py +3 -3
  262. wagtail/snippets/tests/test_revert_view.py +343 -0
  263. wagtail/snippets/tests/test_snippet_models.py +112 -0
  264. wagtail/snippets/tests/test_unpublish_view.py +228 -0
  265. wagtail/snippets/tests/test_unschedule_view.py +151 -0
  266. wagtail/snippets/tests/test_viewset.py +38 -5
  267. wagtail/snippets/views/snippets.py +78 -30
  268. wagtail/snippets/widgets.py +2 -2
  269. wagtail/templatetags/wagtailcore_tags.py +2 -2
  270. wagtail/test/dummy_external_storage.py +1 -1
  271. wagtail/test/testapp/fixtures/test.json +22 -0
  272. wagtail/test/testapp/fixtures/test_empty.json +2 -0
  273. wagtail/test/testapp/fixtures/test_explorable_pages.json +10 -0
  274. wagtail/test/testapp/fixtures/test_specific.json +9 -0
  275. wagtail/test/testapp/migrations/0059_nopromotepage.py +25 -0
  276. wagtail/test/testapp/models.py +7 -0
  277. wagtail/test/testapp/views.py +5 -0
  278. wagtail/test/utils/page_tests.py +7 -7
  279. wagtail/test/utils/wagtail_factories/builder.py +2 -2
  280. wagtail/tests/streamfield_migrations/test_migrations.py +35 -0
  281. wagtail/tests/test_blocks.py +321 -61
  282. wagtail/tests/test_collection_model.py +12 -0
  283. wagtail/tests/test_page_model.py +190 -1
  284. wagtail/tests/test_page_privacy.py +5 -0
  285. wagtail/tests/test_reference_index.py +42 -0
  286. wagtail/tests/test_revision_model.py +118 -1
  287. wagtail/tests/test_utils.py +2 -2
  288. wagtail/users/locale/en/LC_MESSAGES/django.po +14 -14
  289. wagtail/users/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  290. wagtail/users/locale/id_ID/LC_MESSAGES/django.po +6 -2
  291. wagtail/users/locale/it/LC_MESSAGES/django.mo +0 -0
  292. wagtail/users/locale/it/LC_MESSAGES/django.po +14 -2
  293. wagtail/users/locale/sv/LC_MESSAGES/django.mo +0 -0
  294. wagtail/users/locale/sv/LC_MESSAGES/django.po +48 -17
  295. wagtail/users/tests/test_admin_views.py +39 -25
  296. wagtail/users/utils.py +4 -1
  297. wagtail/users/views/groups.py +19 -5
  298. wagtail/users/wagtail_hooks.py +1 -1
  299. wagtail/utils/loading.py +2 -2
  300. wagtail-7.3rc1.data/data/AGENTS.md +21 -0
  301. wagtail-7.3rc1.data/data/CHANGELOG.txt +4941 -0
  302. wagtail-7.3rc1.data/data/CODE_OF_CONDUCT.md +71 -0
  303. wagtail-7.3rc1.data/data/CONTRIBUTORS.md +999 -0
  304. wagtail-7.3rc1.data/data/SPONSORS.md +55 -0
  305. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/METADATA +6 -6
  306. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/RECORD +310 -280
  307. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/WHEEL +1 -1
  308. wagtail/images/static/wagtailimages/js/image-url-generator.js +0 -1
  309. wagtail/snippets/tests/test_snippets.py +0 -6377
  310. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/entry_points.txt +0 -0
  311. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/licenses/LICENSE +0 -0
  312. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/top_level.txt +0 -0
@@ -4,6 +4,7 @@
4
4
  #
5
5
  # Translators:
6
6
  # Jim Brouzoulis <jim.brouzoulis@chalmers.se>, 2017
7
+ # Jonathan Lindén, 2025
7
8
  # Martin Sandström <martin@marteinn.se>, 2020-2021
8
9
  # Philip Andersen <renegadevi@codeofmagi.net>, 2018-2019
9
10
  # Thomas Kunambi <kunambi@gmail.com>, 2022
@@ -13,7 +14,7 @@ msgstr ""
13
14
  "Report-Msgid-Bugs-To: \n"
14
15
  "POT-Creation-Date: 2025-10-23 16:45+0100\n"
15
16
  "PO-Revision-Date: 2014-02-20 21:06+0000\n"
16
- "Last-Translator: Thomas Kunambi <kunambi@gmail.com>, 2022\n"
17
+ "Last-Translator: Jonathan Lindén, 2025\n"
17
18
  "Language-Team: Swedish (http://app.transifex.com/torchbox/wagtail/language/"
18
19
  "sv/)\n"
19
20
  "MIME-Version: 1.0\n"
@@ -155,6 +156,15 @@ msgstr "Du har inte laddat upp några dokument i den här samlingen."
155
156
  msgid "You haven't uploaded any documents."
156
157
  msgstr "Du har inte laddat upp några dokument."
157
158
 
159
+ msgid ""
160
+ "Why not <a class=\"upload-one-now\" href=\"#tab-upload\" data-action=\"w-"
161
+ "tabs#select:prevent\" data-w-tabs-target=\"trigger\" data-w-tabs-focus-"
162
+ "param=\"true\">upload one now</a>?"
163
+ msgstr ""
164
+ "Varför inte <a class=\"upload-one-now\" href=\"#tab-upload\" data-action=\"w-"
165
+ "tabs#select:prevent\" data-w-tabs-target=\"trigger\" data-w-tabs-focus-"
166
+ "param=\"true\">ladda upp en nu</a>?"
167
+
158
168
  msgid "Change document:"
159
169
  msgstr "Ändra dokument:"
160
170
 
@@ -205,6 +215,16 @@ msgstr ""
205
215
  "Du har inte laddat upp några dokument. Varför inte <a "
206
216
  "href=\"%(wagtaildocs_add_document_url)s\">ladda upp ett nu</a>?"
207
217
 
218
+ #, python-format
219
+ msgid ""
220
+ "%(total)s Document <span class=\"w-sr-only\">created in %(site_name)s</span>"
221
+ msgid_plural ""
222
+ "%(total)s Documents <span class=\"w-sr-only\">created in %(site_name)s</span>"
223
+ msgstr[0] ""
224
+ "%(total)s Dokument <span class=\"w-sr-only\">skapat i %(site_name)s</span>"
225
+ msgstr[1] ""
226
+ "%(total)s Dokument <span class=\"w-sr-only\">skapade i %(site_name)s</span>"
227
+
208
228
  msgid "Add multiple documents"
209
229
  msgstr "Lägg till flera dokument"
210
230
 
@@ -302,23 +322,31 @@ msgstr "Dokument"
302
322
  msgid "Title"
303
323
  msgstr "Titel"
304
324
 
325
+ msgid "The document could not be created due to errors."
326
+ msgstr "Dokumentet kunde inte skapas på grund av fel."
327
+
305
328
  #, python-format
306
329
  msgid "Document '%(document_title)s' added."
307
330
  msgstr "Dokument '%(document_title)s' lades till."
308
331
 
309
332
  msgid "The document could not be saved due to errors."
310
- msgstr "Dokumentet kunde inte sparas p.g.a. fel."
333
+ msgstr "Dokumentet kunde inte sparas grund av fel."
311
334
 
312
335
  #, python-format
313
336
  msgid "Document '%(document_title)s' updated"
314
337
  msgstr "Dokument '%(document_title)s' laddades upp"
315
338
 
339
+ msgid ""
340
+ "The file could not be found. Please change the source or delete the document."
341
+ msgstr ""
342
+ "Filen kunde inte hittas. Vänligen ändra källan eller radera dokumentet."
343
+
316
344
  msgid "Delete document"
317
- msgstr "Ta bort dokument"
345
+ msgstr "Radera dokument"
318
346
 
319
347
  #, python-format
320
348
  msgid "Document '%(document_title)s' deleted."
321
- msgstr "Dokument '%(document_title)s' borttaget."
349
+ msgstr "Dokument '%(document_title)s' raderat."
322
350
 
323
351
  msgid "Add documents"
324
352
  msgstr "Lägg till dokument"
@@ -76,7 +76,7 @@ class AbstractDocument(CollectionMember, index.Indexed, models.Model):
76
76
  try:
77
77
  validate(self.file)
78
78
  except ValidationError as e:
79
- raise ValidationError({"file": e.messages[0]})
79
+ raise ValidationError({"file": e.messages[0]}) from e
80
80
 
81
81
  def is_stored_locally(self):
82
82
  """
@@ -12,6 +12,7 @@ from django.utils.http import urlencode
12
12
  from django.utils.text import capfirst
13
13
 
14
14
  from wagtail.admin.admin_url_finder import AdminURLFinder
15
+ from wagtail.admin.staticfiles import versioned_static
15
16
  from wagtail.documents import get_document_model, models
16
17
  from wagtail.documents.tests.utils import get_test_document_file
17
18
  from wagtail.models import (
@@ -37,7 +38,7 @@ class TestDocumentIndexView(WagtailTestUtils, TestCase):
37
38
  def setUp(self):
38
39
  self.login()
39
40
 
40
- def get(self, params={}):
41
+ def get(self, params=None):
41
42
  return self.client.get(reverse("wagtaildocs:index"), params)
42
43
 
43
44
  def test_simple(self):
@@ -398,13 +399,27 @@ class TestDocumentIndexView(WagtailTestUtils, TestCase):
398
399
  [doc3],
399
400
  )
400
401
 
402
+ def test_bulk_action_rendered(self):
403
+ response = self.get()
404
+ self.assertEqual(response.status_code, 200)
405
+ # Should render bulk actions markup
406
+ bulk_actions_js = versioned_static("wagtailadmin/js/bulk-actions.js")
407
+ soup = self.get_soup(response.content)
408
+ script = soup.select_one(f"script[src='{bulk_actions_js}']")
409
+ self.assertIsNotNone(script)
410
+ bulk_actions = soup.select("[data-bulk-action-button]")
411
+ self.assertTrue(bulk_actions)
412
+ # 'next' parameter is constructed client-side later based on filters state
413
+ for action in bulk_actions:
414
+ self.assertNotIn("next=", action["href"])
415
+
401
416
 
402
417
  class TestDocumentIndexViewSearch(WagtailTestUtils, TransactionTestCase):
403
418
  def setUp(self):
404
419
  Collection.add_root(name="Root")
405
420
  self.login()
406
421
 
407
- def get(self, params={}):
422
+ def get(self, params=None):
408
423
  return self.client.get(reverse("wagtaildocs:index"), params)
409
424
 
410
425
  def make_docs(self):
@@ -533,7 +548,7 @@ class TestDocumentIndexResultsView(WagtailTestUtils, TransactionTestCase):
533
548
  Collection.add_root(name="Root")
534
549
  self.login()
535
550
 
536
- def get(self, params={}):
551
+ def get(self, params=None):
537
552
  return self.client.get(reverse("wagtaildocs:index_results"), params)
538
553
 
539
554
  def test_search(self):
@@ -1071,7 +1086,7 @@ class TestDocumentEditViewWithCustomDocumentModel(WagtailTestUtils, TestCase):
1071
1086
 
1072
1087
  self.storage = self.document.file.storage
1073
1088
 
1074
- def get(self, params={}):
1089
+ def get(self, params=None):
1075
1090
  return self.client.get(
1076
1091
  reverse("wagtaildocs:edit", args=(self.document.id,)), params
1077
1092
  )
@@ -96,7 +96,6 @@ class TestIssue613(WagtailTestUtils, TestCase):
96
96
  # Add a document with some tags
97
97
  document = self.add_document(tags="hello")
98
98
 
99
- # TODO: remove this when https://github.com/kaedroho/django-modelsearch/pull/40 is merged and released
100
99
  search_backend.refresh_indexes()
101
100
 
102
101
  # Search for it by tag
@@ -125,7 +124,6 @@ class TestIssue613(WagtailTestUtils, TestCase):
125
124
  # Add a document with some tags
126
125
  document = self.edit_document(tags="hello")
127
126
 
128
- # TODO: remove this when https://github.com/kaedroho/django-modelsearch/pull/40 is merged and released
129
127
  search_backend.refresh_indexes()
130
128
 
131
129
  # Search for it by tag
@@ -285,8 +285,8 @@ class TestServeViewWithSendfile(TestCase):
285
285
  # django-sendfile module is not installed
286
286
  try:
287
287
  import sendfile # noqa: F401
288
- except ImportError:
289
- raise unittest.SkipTest("django-sendfile not installed")
288
+ except ImportError as e:
289
+ raise unittest.SkipTest("django-sendfile not installed") from e
290
290
 
291
291
  self.document = models.Document(title="Test document")
292
292
  self.document.file.save(
@@ -367,8 +367,10 @@ class TestServeWithUnicodeFilename(TestCase):
367
367
  self.document.file.save(
368
368
  self.filename, ContentFile("A boring example document")
369
369
  )
370
- except UnicodeEncodeError:
371
- raise unittest.SkipTest("Filesystem doesn't support unicode filenames")
370
+ except UnicodeEncodeError as e:
371
+ raise unittest.SkipTest(
372
+ "Filesystem doesn't support unicode filenames"
373
+ ) from e
372
374
 
373
375
  def tearDown(self):
374
376
  # delete the FieldFile directly because the TestCase does not commit
@@ -27,7 +27,7 @@ class AddTagsBulkAction(DocumentBulkAction):
27
27
  return {"tags": self.cleaned_form.cleaned_data["tags"].split(",")}
28
28
 
29
29
  @classmethod
30
- def execute_action(cls, objects, tags=[], **kwargs):
30
+ def execute_action(cls, objects, tags=None, **kwargs):
31
31
  num_parent_objects = 0
32
32
  if not tags:
33
33
  return
@@ -78,11 +78,11 @@ class FacebookOEmbedFinder(OEmbedFinder):
78
78
  r = urllib_request.urlopen(request)
79
79
  except (HTTPError, URLError) as e:
80
80
  if isinstance(e, HTTPError) and e.code == 404:
81
- raise EmbedNotFoundException
81
+ raise EmbedNotFoundException from e
82
82
  elif isinstance(e, HTTPError) and e.code in [400, 401, 403]:
83
- raise AccessDeniedFacebookOEmbedException
83
+ raise AccessDeniedFacebookOEmbedException from e
84
84
  else:
85
- raise EmbedNotFoundException
85
+ raise EmbedNotFoundException from e
86
86
  oembed = json.loads(r.read().decode("utf-8"))
87
87
 
88
88
  # Return embed as a dict
@@ -60,11 +60,11 @@ class InstagramOEmbedFinder(OEmbedFinder):
60
60
  r = urllib_request.urlopen(request)
61
61
  except (HTTPError, URLError) as e:
62
62
  if isinstance(e, HTTPError) and e.code == 404:
63
- raise EmbedNotFoundException
63
+ raise EmbedNotFoundException from e
64
64
  elif isinstance(e, HTTPError) and e.code in [400, 401, 403]:
65
- raise AccessDeniedInstagramOEmbedException
65
+ raise AccessDeniedInstagramOEmbedException from e
66
66
  else:
67
- raise EmbedNotFoundException
67
+ raise EmbedNotFoundException from e
68
68
  oembed = json.loads(r.read().decode("utf-8"))
69
69
 
70
70
  # Convert photos into HTML
@@ -60,9 +60,14 @@ class OEmbedFinder(EmbedFinder):
60
60
  r = requests.get(
61
61
  endpoint, params=params, headers={"User-agent": "Mozilla/5.0"}
62
62
  )
63
+ r.raise_for_status()
63
64
  oembed = r.json()
64
- except requests.RequestException:
65
- raise EmbedNotFoundException
65
+ except requests.RequestException as e:
66
+ raise EmbedNotFoundException(f"Request failed: {e}") from e
67
+
68
+ # Check if 'type' is missing
69
+ if "type" not in oembed:
70
+ raise EmbedNotFoundException("Missing 'type' in response")
66
71
 
67
72
  # Convert photos into HTML
68
73
  if oembed["type"] == "photo":
@@ -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-10-23 16:45+0100\n"
11
+ "POT-Creation-Date: 2026-01-21 18:00+0000\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"
@@ -291,6 +291,13 @@ kinomap = {
291
291
  ],
292
292
  }
293
293
 
294
+ loom = {
295
+ "endpoint": "https://www.loom.com/v1/oembed",
296
+ "urls": [
297
+ r"^https?://(?:www\.)?loom\.com/share/.+$",
298
+ ],
299
+ }
300
+
294
301
  major_league_gaming = {
295
302
  "endpoint": "http://tv.majorleaguegaming.com/oembed",
296
303
  "urls": [
@@ -667,6 +674,7 @@ all_providers = [
667
674
  justin_tv,
668
675
  kickstarter,
669
676
  kinomap,
677
+ loom,
670
678
  major_league_gaming,
671
679
  meetup,
672
680
  minoto,
@@ -664,6 +664,41 @@ class TestOembed(TestCase):
664
664
  result = OEmbedFinder().find_embed("https://vimeo.com/217403396")
665
665
  self.assertEqual(result["type"], "video")
666
666
 
667
+ @responses.activate
668
+ def test_oembed_non_200_response(self):
669
+ responses.get(
670
+ url="https://www.youtube.com/oembed",
671
+ match=[
672
+ matchers.query_param_matcher(
673
+ {"url": "https://www.youtube.com/watch/", "format": "json"}
674
+ ),
675
+ ],
676
+ json={"error": "not found"},
677
+ status=403,
678
+ )
679
+
680
+ with self.assertRaises(EmbedNotFoundException):
681
+ OEmbedFinder().find_embed("https://www.youtube.com/watch/")
682
+
683
+ @responses.activate
684
+ def test_oembed_missing_type_field(self):
685
+ responses.get(
686
+ url="https://www.youtube.com/oembed",
687
+ match=[
688
+ matchers.query_param_matcher(
689
+ {"url": "https://www.youtube.com/watch/", "format": "json"}
690
+ ),
691
+ ],
692
+ json={ # valid JSON but missing 'type'
693
+ "title": "Video without type",
694
+ "url": "http://example.com/video",
695
+ },
696
+ status=200,
697
+ )
698
+
699
+ with self.assertRaises(EmbedNotFoundException):
700
+ OEmbedFinder().find_embed("https://www.youtube.com/watch/")
701
+
667
702
 
668
703
  class TestInstagramOEmbed(TestCase):
669
704
  def setUp(self):
@@ -23,12 +23,12 @@ def get_image_model():
23
23
  model_string = get_image_model_string()
24
24
  try:
25
25
  return apps.get_model(model_string, require_ready=False)
26
- except ValueError:
26
+ except ValueError as e:
27
27
  raise ImproperlyConfigured(
28
28
  "WAGTAILIMAGES_IMAGE_MODEL must be of the form 'app_label.model_name'"
29
- )
30
- except LookupError:
29
+ ) from e
30
+ except LookupError as e:
31
31
  raise ImproperlyConfigured(
32
32
  "WAGTAILIMAGES_IMAGE_MODEL refers to model '%s' that has not been installed"
33
33
  % model_string
34
- )
34
+ ) from e
@@ -14,9 +14,9 @@ urlpatterns = [
14
14
  name="url_generator",
15
15
  ),
16
16
  path(
17
- "<int:image_id>/generate_url/<str:filter_spec>/",
18
- images.GenerateURLView.as_view(),
19
- name="generate_url",
17
+ "<int:image_id>/generate_url/output/",
18
+ images.URLGeneratorView.as_view(output_only=True),
19
+ name="url_generator_output",
20
20
  ),
21
21
  path("<int:image_id>/preview/<str:filter_spec>/", images.preview, name="preview"),
22
22
  path("add/", images.CreateView.as_view(), name="add"),
wagtail/images/blocks.py CHANGED
@@ -186,7 +186,7 @@ class ImageBlock(StructBlock):
186
186
  except ValidationError as e:
187
187
  raise StructBlockValidationError(
188
188
  block_errors={"image": e},
189
- )
189
+ ) from e
190
190
 
191
191
  if value and not value.contextual_alt_text and not value.decorative:
192
192
  raise StructBlockValidationError(
wagtail/images/formats.py CHANGED
@@ -72,8 +72,8 @@ def unregister_image_format(format_name):
72
72
  try:
73
73
  del FORMATS_BY_NAME[format_name]
74
74
  FORMATS = [fmt for fmt in FORMATS if fmt.name != format_name]
75
- except KeyError:
76
- raise KeyError("Image format '%s' is not registered" % format_name)
75
+ except KeyError as e:
76
+ raise KeyError("Image format '%s' is not registered" % format_name) from e
77
77
 
78
78
 
79
79
  def get_image_formats():
@@ -14,13 +14,13 @@ class Operation:
14
14
  try:
15
15
  inspect.getcallargs(self.construct, *args)
16
16
  except TypeError as e:
17
- raise InvalidFilterSpecError(e)
17
+ raise InvalidFilterSpecError(e) from e
18
18
 
19
19
  # Call construct
20
20
  try:
21
21
  self.construct(*args)
22
22
  except ValueError as e:
23
- raise InvalidFilterSpecError(e)
23
+ raise InvalidFilterSpecError(e) from e
24
24
 
25
25
  def construct(self, *args):
26
26
  raise NotImplementedError
@@ -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-10-23 16:45+0100\n"
11
+ "POT-Creation-Date: 2026-01-21 18:00+0000\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"
@@ -88,8 +88,8 @@ msgstr ""
88
88
  msgid "Right-aligned"
89
89
  msgstr ""
90
90
 
91
- #: forms.py:31 views/bulk_actions/add_to_collection.py:13 views/chooser.py:175
92
- #: views/images.py:166
91
+ #: forms.py:31 views/bulk_actions/add_to_collection.py:13 views/chooser.py:180
92
+ #: views/images.py:200
93
93
  msgid "Collection"
94
94
  msgstr ""
95
95
 
@@ -271,7 +271,7 @@ msgid "Delete images"
271
271
  msgstr ""
272
272
 
273
273
  #: templates/wagtailimages/bulk_actions/confirm_bulk_delete.html:18
274
- #: views/images.py:406
274
+ #: views/images.py:469
275
275
  msgid "Are you sure you want to delete this image?"
276
276
  msgid_plural "Are you sure you want to delete these images?"
277
277
  msgstr[0] ""
@@ -368,17 +368,17 @@ msgstr[1] ""
368
368
  msgid "Change image file:"
369
369
  msgstr ""
370
370
 
371
- #: templates/wagtailimages/images/add.html:3 views/images.py:71
371
+ #: templates/wagtailimages/images/add.html:3 views/images.py:77
372
372
  msgid "Add an image"
373
373
  msgstr ""
374
374
 
375
375
  #: templates/wagtailimages/images/add.html:11 views/chooser.py:61
376
- #: views/chooser.py:384
376
+ #: views/chooser.py:389
377
377
  msgid "Uploading…"
378
378
  msgstr ""
379
379
 
380
380
  #: templates/wagtailimages/images/add.html:14 views/chooser.py:60
381
- #: views/chooser.py:383
381
+ #: views/chooser.py:388
382
382
  msgid "Upload"
383
383
  msgstr ""
384
384
 
@@ -432,8 +432,8 @@ msgstr ""
432
432
  msgid "File not found"
433
433
  msgstr ""
434
434
 
435
- #: templates/wagtailimages/images/edit.html:65 views/chooser.py:182
436
- #: views/images.py:174
435
+ #: templates/wagtailimages/images/edit.html:65 views/chooser.py:187
436
+ #: views/images.py:208
437
437
  msgid "Usage"
438
438
  msgstr ""
439
439
 
@@ -479,29 +479,29 @@ msgstr ""
479
479
  msgid "List layout"
480
480
  msgstr ""
481
481
 
482
- #: templates/wagtailimages/images/url_generator.html:16
483
- #: templates/wagtailimages/images/url_generator.html:20 views/chooser.py:164
484
- #: views/images.py:154
482
+ #: templates/wagtailimages/images/url_generator_output.html:3
483
+ #: templates/wagtailimages/images/url_generator_output.html:7
484
+ #: views/chooser.py:169 views/images.py:188
485
485
  msgid "Preview"
486
486
  msgstr ""
487
487
 
488
- #: templates/wagtailimages/images/url_generator.html:25
488
+ #: templates/wagtailimages/images/url_generator_output.html:12
489
489
  msgid "URL"
490
490
  msgstr ""
491
491
 
492
- #: templates/wagtailimages/images/url_generator.html:28
492
+ #: templates/wagtailimages/images/url_generator_output.html:15
493
493
  msgid "Image URL"
494
494
  msgstr ""
495
495
 
496
- #: templates/wagtailimages/images/url_generator.html:32
496
+ #: templates/wagtailimages/images/url_generator_output.html:18
497
497
  msgid "Copy URL"
498
498
  msgstr ""
499
499
 
500
- #: templates/wagtailimages/images/url_generator.html:36
500
+ #: templates/wagtailimages/images/url_generator_output.html:22
501
501
  msgid "Copied to clipboard"
502
502
  msgstr ""
503
503
 
504
- #: templates/wagtailimages/images/url_generator.html:39
504
+ #: templates/wagtailimages/images/url_generator_output.html:25
505
505
  msgid "Copying to clipboard failed"
506
506
  msgstr ""
507
507
 
@@ -600,7 +600,7 @@ msgid_plural "%(num_parent_objects)d images have been added to %(collection)s"
600
600
  msgstr[0] ""
601
601
  msgstr[1] ""
602
602
 
603
- #: views/bulk_actions/delete.py:9 views/images.py:257
603
+ #: views/bulk_actions/delete.py:9 views/images.py:293
604
604
  msgid "Delete"
605
605
  msgstr ""
606
606
 
@@ -615,95 +615,99 @@ msgid_plural "%(num_parent_objects)d images have been deleted"
615
615
  msgstr[0] ""
616
616
  msgstr[1] ""
617
617
 
618
- #: views/chooser.py:170 views/images.py:160
618
+ #: views/chooser.py:175 views/images.py:194
619
619
  msgid "Title"
620
620
  msgstr ""
621
621
 
622
- #: views/chooser.py:178 views/images.py:169
622
+ #: views/chooser.py:183 views/images.py:203
623
623
  msgid "Created"
624
624
  msgstr ""
625
625
 
626
- #: views/chooser.py:382 widgets.py:13
626
+ #: views/chooser.py:387 widgets.py:13
627
627
  msgid "Choose an image"
628
628
  msgstr ""
629
629
 
630
- #: views/chooser.py:385
630
+ #: views/chooser.py:390
631
631
  msgid "Choose another image"
632
632
  msgstr ""
633
633
 
634
- #: views/chooser.py:386 widgets.py:15
634
+ #: views/chooser.py:391 widgets.py:15
635
635
  msgid "Edit this image"
636
636
  msgstr ""
637
637
 
638
- #: views/images.py:53
638
+ #: views/images.py:59
639
639
  msgid "Newest"
640
640
  msgstr ""
641
641
 
642
- #: views/images.py:54
642
+ #: views/images.py:60
643
643
  msgid "Oldest"
644
644
  msgstr ""
645
645
 
646
- #: views/images.py:55
646
+ #: views/images.py:61
647
647
  msgid "Title: (A -> Z)"
648
648
  msgstr ""
649
649
 
650
- #: views/images.py:56
650
+ #: views/images.py:62
651
651
  msgid "Title: (Z -> A)"
652
652
  msgstr ""
653
653
 
654
- #: views/images.py:57
654
+ #: views/images.py:63
655
655
  msgid "File size: (low to high)"
656
656
  msgstr ""
657
657
 
658
- #: views/images.py:58
658
+ #: views/images.py:64
659
659
  msgid "File size: (high to low)"
660
660
  msgstr ""
661
661
 
662
- #: views/images.py:59
662
+ #: views/images.py:65
663
663
  msgid "Usage count: (low to high)"
664
664
  msgstr ""
665
665
 
666
- #: views/images.py:60
666
+ #: views/images.py:66
667
667
  msgid "Usage count: (high to low)"
668
668
  msgstr ""
669
669
 
670
- #: views/images.py:70 wagtail_hooks.py:52 wagtail_hooks.py:160
670
+ #: views/images.py:76 wagtail_hooks.py:52 wagtail_hooks.py:160
671
671
  msgid "Images"
672
672
  msgstr ""
673
673
 
674
- #: views/images.py:206
674
+ #: views/images.py:242
675
675
  msgid "The image could not be saved due to errors."
676
676
  msgstr ""
677
677
 
678
- #: views/images.py:236
678
+ #: views/images.py:272
679
679
  #, python-format
680
680
  msgid "Image '%(image_title)s' updated."
681
681
  msgstr ""
682
682
 
683
- #: views/images.py:254
683
+ #: views/images.py:290
684
684
  msgid ""
685
685
  "The source image file could not be found. Please change the source or delete "
686
686
  "the image."
687
687
  msgstr ""
688
688
 
689
- #: views/images.py:288
689
+ #: views/images.py:325
690
690
  msgid "Generate URL"
691
691
  msgstr ""
692
692
 
693
- #: views/images.py:394
693
+ #: views/images.py:332
694
+ msgid "The filter options you have selected are not valid."
695
+ msgstr ""
696
+
697
+ #: views/images.py:457
694
698
  msgid "Delete image"
695
699
  msgstr ""
696
700
 
697
- #: views/images.py:412
701
+ #: views/images.py:475
698
702
  #, python-format
699
703
  msgid "Image '%(image_title)s' deleted."
700
704
  msgstr ""
701
705
 
702
- #: views/images.py:422
706
+ #: views/images.py:485
703
707
  msgid "The image could not be created due to errors."
704
708
  msgstr ""
705
709
 
706
- #: views/images.py:442
710
+ #: views/images.py:505
707
711
  #, python-format
708
712
  msgid "Image '%(image_title)s' added."
709
713
  msgstr ""