wagtail 6.0.1__py3-none-any.whl → 6.1rc1__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 (512) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/admin/checks.py +51 -0
  3. wagtail/admin/compare.py +1 -1
  4. wagtail/admin/filters.py +70 -1
  5. wagtail/admin/forms/account.py +1 -1
  6. wagtail/admin/forms/collections.py +15 -0
  7. wagtail/admin/forms/pages.py +49 -0
  8. wagtail/admin/locale/ca/LC_MESSAGES/django.mo +0 -0
  9. wagtail/admin/locale/ca/LC_MESSAGES/django.po +122 -0
  10. wagtail/admin/locale/de/LC_MESSAGES/django.mo +0 -0
  11. wagtail/admin/locale/de/LC_MESSAGES/django.po +5 -5
  12. wagtail/admin/locale/en/LC_MESSAGES/django.po +474 -385
  13. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +3 -3
  14. wagtail/admin/locale/es/LC_MESSAGES/django.mo +0 -0
  15. wagtail/admin/locale/es/LC_MESSAGES/django.po +6 -6
  16. wagtail/admin/locale/fr/LC_MESSAGES/django.mo +0 -0
  17. wagtail/admin/locale/fr/LC_MESSAGES/django.po +70 -3
  18. wagtail/admin/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  19. wagtail/admin/locale/he_IL/LC_MESSAGES/django.po +2 -6
  20. wagtail/admin/locale/he_IL/LC_MESSAGES/djangojs.mo +0 -0
  21. wagtail/admin/locale/he_IL/LC_MESSAGES/djangojs.po +2 -2
  22. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  23. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.po +4 -0
  24. wagtail/admin/locale/hu/LC_MESSAGES/django.mo +0 -0
  25. wagtail/admin/locale/hu/LC_MESSAGES/django.po +142 -2
  26. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  27. wagtail/admin/locale/it/LC_MESSAGES/django.po +80 -8
  28. wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
  29. wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +14 -2
  30. wagtail/admin/locale/lv/LC_MESSAGES/django.mo +0 -0
  31. wagtail/admin/locale/lv/LC_MESSAGES/django.po +154 -1
  32. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  33. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +73 -2
  34. wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
  35. wagtail/admin/locale/ro/LC_MESSAGES/django.po +3 -3
  36. wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
  37. wagtail/admin/locale/sl/LC_MESSAGES/django.po +145 -2
  38. wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
  39. wagtail/admin/locale/sv/LC_MESSAGES/django.po +77 -3
  40. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  41. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po +17 -1
  42. wagtail/admin/panels/comment_panel.py +1 -1
  43. wagtail/admin/panels/field_panel.py +1 -1
  44. wagtail/admin/rich_text/converters/editor_html.py +3 -1
  45. wagtail/admin/rich_text/editors/draftail/__init__.py +28 -2
  46. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  47. wagtail/admin/static/wagtailadmin/css/panels/draftail.css +1 -1
  48. wagtail/admin/static/wagtailadmin/images/favicon.ico +0 -0
  49. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  50. wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
  51. wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
  52. wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
  53. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  54. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  55. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
  56. wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
  57. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  58. wagtail/admin/static/wagtailadmin/js/expanding-formset.js +1 -1
  59. wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
  60. wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
  61. wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
  62. wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
  63. wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
  64. wagtail/admin/static/wagtailadmin/js/preview-panel.js +1 -1
  65. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  66. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  67. wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
  68. wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
  69. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  70. wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
  71. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  72. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  73. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  74. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +4 -4
  75. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  76. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  77. wagtail/admin/staticfiles.py +1 -0
  78. wagtail/admin/templates/wagtailadmin/admin_base.html +1 -0
  79. wagtail/admin/templates/wagtailadmin/base.html +1 -0
  80. wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +3 -1
  81. wagtail/admin/templates/wagtailadmin/collections/edit.html +0 -1
  82. wagtail/admin/templates/wagtailadmin/collections/index_results.html +10 -0
  83. wagtail/admin/templates/wagtailadmin/generic/base.html +1 -9
  84. wagtail/admin/templates/wagtailadmin/generic/form.html +4 -2
  85. wagtail/admin/templates/wagtailadmin/generic/history/action_cell.html +27 -0
  86. wagtail/admin/templates/wagtailadmin/generic/index_results.html +8 -0
  87. wagtail/admin/templates/wagtailadmin/home/workflow_objects_to_moderate.html +3 -4
  88. wagtail/admin/templates/wagtailadmin/icons/keyboard.svg +1 -0
  89. wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +3 -1
  90. wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +0 -15
  91. wagtail/admin/templates/wagtailadmin/pages/action_menu/save_draft.html +3 -1
  92. wagtail/admin/templates/wagtailadmin/pages/choose_parent.html +17 -0
  93. wagtail/admin/templates/wagtailadmin/pages/explorable_index.html +8 -0
  94. wagtail/admin/templates/wagtailadmin/pages/history.html +1 -61
  95. wagtail/admin/templates/wagtailadmin/pages/index.html +1 -5
  96. wagtail/admin/templates/wagtailadmin/pages/listing/_locked_indicator.html +2 -2
  97. wagtail/admin/templates/wagtailadmin/pages/listing/_page_title_column_header.html +25 -27
  98. wagtail/admin/templates/wagtailadmin/pages/page_listing_header.html +2 -1
  99. wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
  100. wagtail/admin/templates/wagtailadmin/panels/publishing/schedule_publishing_panel.html +3 -1
  101. wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +1 -1
  102. wagtail/admin/templates/wagtailadmin/shared/active_filters.html +2 -1
  103. wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +8 -0
  104. wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
  105. wagtail/admin/templates/wagtailadmin/shared/headers/page_edit_header.html +1 -1
  106. wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +21 -9
  107. wagtail/admin/templates/wagtailadmin/shared/human_readable_date.html +1 -1
  108. wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +29 -0
  109. wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +2 -1
  110. wagtail/admin/templates/wagtailadmin/skeleton.html +2 -1
  111. wagtail/admin/templates/wagtailadmin/tables/related_objects_cell.html +9 -0
  112. wagtail/admin/templates/wagtailadmin/tables/title_cell.html +9 -7
  113. wagtail/admin/templates/wagtailadmin/widgets/draftail_rich_text_area.html +1 -1
  114. wagtail/admin/templates/wagtailadmin/workflows/create.html +6 -23
  115. wagtail/admin/templates/wagtailadmin/workflows/create_task.html +6 -15
  116. wagtail/admin/templates/wagtailadmin/workflows/edit.html +6 -23
  117. wagtail/admin/templates/wagtailadmin/workflows/edit_task.html +6 -13
  118. wagtail/admin/templates/wagtailadmin/workflows/includes/task_usage_cell.html +4 -4
  119. wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_tasks_cell.html +18 -0
  120. wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_title_cell.html +7 -0
  121. wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_used_by_cell.html +25 -0
  122. wagtail/admin/templates/wagtailadmin/workflows/index.html +0 -99
  123. wagtail/admin/templates/wagtailadmin/workflows/index_results.html +10 -0
  124. wagtail/admin/templates/wagtailadmin/workflows/task_index.html +0 -30
  125. wagtail/admin/templates/wagtailadmin/workflows/task_index_results.html +10 -0
  126. wagtail/admin/templates/wagtailadmin/workflows/usage.html +1 -1
  127. wagtail/admin/templatetags/wagtailadmin_tags.py +116 -39
  128. wagtail/admin/tests/api/test_pages.py +26 -10
  129. wagtail/admin/tests/pages/test_create_page.py +10 -4
  130. wagtail/admin/tests/pages/test_custom_listing.py +37 -0
  131. wagtail/admin/tests/pages/test_edit_page.py +6 -6
  132. wagtail/admin/tests/pages/test_explorer_view.py +19 -18
  133. wagtail/admin/tests/pages/test_move_page.py +1 -1
  134. wagtail/admin/tests/pages/test_page_usage.py +50 -2
  135. wagtail/admin/tests/pages/test_parent_page_chooser_view.py +119 -0
  136. wagtail/admin/tests/pages/test_preview.py +18 -4
  137. wagtail/admin/tests/test_account_management.py +20 -1
  138. wagtail/admin/tests/test_audit_log.py +172 -5
  139. wagtail/admin/tests/test_checks.py +92 -0
  140. wagtail/admin/tests/test_collections_views.py +19 -5
  141. wagtail/admin/tests/test_compare.py +6 -6
  142. wagtail/admin/tests/test_dashboard.py +404 -0
  143. wagtail/admin/tests/test_dbwhitelister.py +4 -5
  144. wagtail/admin/tests/test_edit_handlers.py +2 -2
  145. wagtail/admin/tests/test_keyboard_shortcuts.py +84 -0
  146. wagtail/admin/tests/test_page_chooser.py +31 -18
  147. wagtail/admin/tests/test_privacy.py +36 -2
  148. wagtail/admin/tests/test_rich_text.py +168 -23
  149. wagtail/admin/tests/test_templatetags.py +411 -43
  150. wagtail/admin/tests/test_views.py +4 -2
  151. wagtail/admin/tests/test_workflows.py +531 -9
  152. wagtail/admin/tests/tests.py +3 -1
  153. wagtail/admin/tests/ui/test_tables.py +48 -1
  154. wagtail/admin/tests/viewsets/test_model_viewset.py +130 -23
  155. wagtail/admin/ui/side_panels.py +3 -1
  156. wagtail/admin/ui/tables/__init__.py +13 -1
  157. wagtail/admin/ui/tables/pages.py +17 -6
  158. wagtail/admin/urls/__init__.py +8 -3
  159. wagtail/admin/urls/pages.py +5 -0
  160. wagtail/admin/urls/workflows.py +10 -0
  161. wagtail/admin/views/chooser.py +20 -24
  162. wagtail/admin/views/collections.py +17 -1
  163. wagtail/admin/views/generic/base.py +34 -4
  164. wagtail/admin/views/generic/history.py +220 -51
  165. wagtail/admin/views/generic/mixins.py +7 -4
  166. wagtail/admin/views/generic/models.py +54 -47
  167. wagtail/admin/views/generic/multiple_upload.py +17 -8
  168. wagtail/admin/views/generic/usage.py +17 -11
  169. wagtail/admin/views/home.py +15 -12
  170. wagtail/admin/views/mixins.py +30 -0
  171. wagtail/admin/views/pages/choose_parent.py +73 -0
  172. wagtail/admin/views/pages/history.py +54 -66
  173. wagtail/admin/views/pages/listing.py +187 -106
  174. wagtail/admin/views/pages/usage.py +6 -1
  175. wagtail/admin/views/pages/utils.py +70 -1
  176. wagtail/admin/views/workflows.py +150 -21
  177. wagtail/admin/viewsets/model.py +2 -2
  178. wagtail/admin/viewsets/pages.py +77 -0
  179. wagtail/admin/wagtail_hooks.py +40 -2
  180. wagtail/admin/widgets/button.py +10 -10
  181. wagtail/api/v2/filters.py +1 -1
  182. wagtail/api/v2/tests/test_pages.py +1 -1
  183. wagtail/blocks/base.py +18 -9
  184. wagtail/blocks/field_block.py +9 -7
  185. wagtail/blocks/list_block.py +16 -6
  186. wagtail/blocks/static_block.py +3 -0
  187. wagtail/blocks/stream_block.py +58 -23
  188. wagtail/blocks/struct_block.py +15 -9
  189. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +39 -47
  190. wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  191. wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.po +2 -2
  192. wagtail/contrib/forms/models.py +5 -5
  193. wagtail/contrib/forms/templates/wagtailforms/list_submissions.html +44 -33
  194. wagtail/contrib/forms/templates/wagtailforms/submissions_index.html +2 -63
  195. wagtail/contrib/forms/tests/test_models.py +26 -0
  196. wagtail/contrib/forms/urls.py +6 -0
  197. wagtail/contrib/forms/views.py +52 -49
  198. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.mo +0 -0
  199. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +3 -3
  200. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +34 -42
  201. wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.po +2 -2
  202. wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  203. wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.po +2 -2
  204. wagtail/contrib/redirects/signal_handlers.py +1 -1
  205. wagtail/contrib/redirects/templates/wagtailredirects/index.html +1 -36
  206. wagtail/contrib/redirects/templates/wagtailredirects/index_results.html +18 -0
  207. wagtail/contrib/redirects/templates/wagtailredirects/redirect_target_cell.html +8 -0
  208. wagtail/contrib/redirects/tests/test_import_command.py +1 -1
  209. wagtail/contrib/redirects/tests/test_redirects.py +79 -8
  210. wagtail/contrib/redirects/urls.py +2 -1
  211. wagtail/contrib/redirects/views.py +85 -55
  212. wagtail/contrib/search_promotions/admin_urls.py +2 -1
  213. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +41 -64
  214. wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.po +2 -2
  215. wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  216. wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.po +2 -2
  217. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  218. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.po +41 -2
  219. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
  220. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +9 -3
  221. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index.html +1 -16
  222. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index_results.html +11 -0
  223. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/list.html +0 -51
  224. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/results.html +3 -16
  225. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/search_promotion_column.html +15 -0
  226. wagtail/contrib/search_promotions/tests.py +122 -9
  227. wagtail/contrib/search_promotions/views.py +66 -65
  228. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +3 -3
  229. wagtail/contrib/settings/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  230. wagtail/contrib/settings/locale/he_IL/LC_MESSAGES/django.po +2 -2
  231. wagtail/contrib/settings/locale/tr/LC_MESSAGES/django.mo +0 -0
  232. wagtail/contrib/settings/locale/tr/LC_MESSAGES/django.po +6 -2
  233. wagtail/contrib/settings/registry.py +10 -5
  234. wagtail/contrib/settings/tests/generic/test_admin.py +9 -0
  235. wagtail/contrib/settings/tests/site_specific/test_admin.py +10 -1
  236. wagtail/contrib/settings/tests/site_specific/test_model.py +3 -3
  237. wagtail/contrib/settings/tests/site_specific/test_templates.py +1 -1
  238. wagtail/contrib/settings/views.py +3 -1
  239. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  240. wagtail/contrib/simple_translation/tests/test_wagtail_hooks.py +2 -2
  241. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
  242. wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  243. wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.po +2 -2
  244. wagtail/contrib/table_block/blocks.py +2 -2
  245. wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.mo +0 -0
  246. wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.po +27 -2
  247. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  248. wagtail/contrib/table_block/locale/hu/LC_MESSAGES/django.mo +0 -0
  249. wagtail/contrib/table_block/locale/hu/LC_MESSAGES/django.po +27 -2
  250. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.mo +0 -0
  251. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +27 -2
  252. wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
  253. wagtail/contrib/table_block/tests.py +6 -0
  254. wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.mo +0 -0
  255. wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.po +12 -2
  256. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
  257. wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.mo +0 -0
  258. wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.po +12 -2
  259. wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.mo +0 -0
  260. wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.po +12 -2
  261. wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
  262. wagtail/coreutils.py +3 -2
  263. wagtail/documents/admin_urls.py +2 -2
  264. wagtail/documents/locale/en/LC_MESSAGES/django.po +22 -22
  265. wagtail/documents/locale/fr/LC_MESSAGES/django.po +2 -2
  266. wagtail/documents/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  267. wagtail/documents/locale/he_IL/LC_MESSAGES/django.po +2 -2
  268. wagtail/documents/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  269. wagtail/documents/locale/hr_HR/LC_MESSAGES/django.po +19 -2
  270. wagtail/documents/locale/hu/LC_MESSAGES/django.mo +0 -0
  271. wagtail/documents/locale/hu/LC_MESSAGES/django.po +16 -2
  272. wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
  273. wagtail/documents/locale/it/LC_MESSAGES/django.po +19 -2
  274. wagtail/documents/migrations/0013_delete_uploadeddocument.py +16 -0
  275. wagtail/documents/models.py +1 -20
  276. wagtail/documents/rich_text/__init__.py +11 -7
  277. wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
  278. wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
  279. wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
  280. wagtail/documents/templates/wagtaildocs/documents/index.html +0 -16
  281. wagtail/documents/tests/test_admin_views.py +155 -23
  282. wagtail/documents/tests/test_collection_privacy.py +55 -1
  283. wagtail/documents/tests/test_rich_text.py +14 -0
  284. wagtail/documents/views/documents.py +25 -22
  285. wagtail/documents/views/multiple.py +6 -7
  286. wagtail/documents/views/serve.py +16 -1
  287. wagtail/documents/wagtail_hooks.py +20 -15
  288. wagtail/embeds/blocks.py +5 -0
  289. wagtail/embeds/locale/en/LC_MESSAGES/django.po +2 -2
  290. wagtail/embeds/locale/fr/LC_MESSAGES/django.po +2 -2
  291. wagtail/embeds/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  292. wagtail/embeds/locale/he_IL/LC_MESSAGES/django.po +2 -2
  293. wagtail/embeds/rich_text/__init__.py +1 -1
  294. wagtail/embeds/tests/test_rich_text.py +14 -0
  295. wagtail/embeds/wagtail_hooks.py +4 -14
  296. wagtail/fields.py +3 -48
  297. wagtail/images/admin_urls.py +2 -2
  298. wagtail/images/check_files/wagtail.jpg +0 -0
  299. wagtail/images/check_files/wagtail.png +0 -0
  300. wagtail/images/fields.py +2 -0
  301. wagtail/images/image_operations.py +1 -1
  302. wagtail/images/locale/ca/LC_MESSAGES/django.mo +0 -0
  303. wagtail/images/locale/ca/LC_MESSAGES/django.po +12 -0
  304. wagtail/images/locale/en/LC_MESSAGES/django.po +33 -45
  305. wagtail/images/locale/fr/LC_MESSAGES/django.po +2 -2
  306. wagtail/images/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  307. wagtail/images/locale/he_IL/LC_MESSAGES/django.po +2 -2
  308. wagtail/images/locale/hu/LC_MESSAGES/django.mo +0 -0
  309. wagtail/images/locale/hu/LC_MESSAGES/django.po +28 -2
  310. wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
  311. wagtail/images/locale/it/LC_MESSAGES/django.po +14 -2
  312. wagtail/images/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  313. wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +4 -0
  314. wagtail/images/migrations/0026_delete_uploadedimage.py +16 -0
  315. wagtail/images/models.py +49 -43
  316. wagtail/images/rich_text/__init__.py +18 -8
  317. wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
  318. wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
  319. wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
  320. wagtail/images/templates/wagtailimages/images/image_listing_header.html +6 -0
  321. wagtail/images/templates/wagtailimages/images/index.html +11 -51
  322. wagtail/images/tests/test_admin_views.py +119 -62
  323. wagtail/images/tests/test_image_operations.py +10 -0
  324. wagtail/images/tests/test_models.py +35 -33
  325. wagtail/images/tests/test_rich_text.py +14 -0
  326. wagtail/images/tests/utils.py +1 -1
  327. wagtail/images/views/images.py +35 -64
  328. wagtail/images/views/multiple.py +6 -7
  329. wagtail/images/wagtail_hooks.py +4 -14
  330. wagtail/locale/en/LC_MESSAGES/django.po +150 -136
  331. wagtail/locale/es/LC_MESSAGES/django.mo +0 -0
  332. wagtail/locale/es/LC_MESSAGES/django.po +3 -2
  333. wagtail/locale/fr/LC_MESSAGES/django.po +2 -2
  334. wagtail/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  335. wagtail/locale/he_IL/LC_MESSAGES/django.po +2 -2
  336. wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
  337. wagtail/locale/it/LC_MESSAGES/django.po +5 -5
  338. wagtail/locale/sl/LC_MESSAGES/django.mo +0 -0
  339. wagtail/locale/sl/LC_MESSAGES/django.po +27 -2
  340. wagtail/locales/locale/ar/LC_MESSAGES/django.po +1 -1
  341. wagtail/locales/locale/be/LC_MESSAGES/django.po +1 -1
  342. wagtail/locales/locale/bg/LC_MESSAGES/django.po +1 -1
  343. wagtail/locales/locale/ca/LC_MESSAGES/django.po +1 -1
  344. wagtail/locales/locale/cs/LC_MESSAGES/django.po +1 -1
  345. wagtail/locales/locale/cy/LC_MESSAGES/django.po +1 -1
  346. wagtail/locales/locale/da/LC_MESSAGES/django.po +1 -1
  347. wagtail/locales/locale/de/LC_MESSAGES/django.po +1 -1
  348. wagtail/locales/locale/el/LC_MESSAGES/django.po +1 -1
  349. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  350. wagtail/locales/locale/es/LC_MESSAGES/django.po +1 -1
  351. wagtail/locales/locale/et/LC_MESSAGES/django.po +2 -2
  352. wagtail/locales/locale/fa/LC_MESSAGES/django.po +1 -1
  353. wagtail/locales/locale/fi/LC_MESSAGES/django.po +1 -1
  354. wagtail/locales/locale/fr/LC_MESSAGES/django.po +1 -1
  355. wagtail/locales/locale/gl/LC_MESSAGES/django.po +1 -1
  356. wagtail/locales/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  357. wagtail/locales/locale/he_IL/LC_MESSAGES/django.po +3 -3
  358. wagtail/locales/locale/hr_HR/LC_MESSAGES/django.po +1 -1
  359. wagtail/locales/locale/hu/LC_MESSAGES/django.po +1 -1
  360. wagtail/locales/locale/id_ID/LC_MESSAGES/django.po +1 -1
  361. wagtail/locales/locale/is_IS/LC_MESSAGES/django.po +1 -1
  362. wagtail/locales/locale/it/LC_MESSAGES/django.po +1 -1
  363. wagtail/locales/locale/ja/LC_MESSAGES/django.po +1 -1
  364. wagtail/locales/locale/ko/LC_MESSAGES/django.po +1 -1
  365. wagtail/locales/locale/lt/LC_MESSAGES/django.po +1 -1
  366. wagtail/locales/locale/lv/LC_MESSAGES/django.po +1 -1
  367. wagtail/locales/locale/mi/LC_MESSAGES/django.po +1 -1
  368. wagtail/locales/locale/mn/LC_MESSAGES/django.po +1 -1
  369. wagtail/locales/locale/my/LC_MESSAGES/django.po +1 -1
  370. wagtail/locales/locale/nb/LC_MESSAGES/django.po +1 -1
  371. wagtail/locales/locale/nl/LC_MESSAGES/django.po +1 -1
  372. wagtail/locales/locale/pl/LC_MESSAGES/django.po +1 -1
  373. wagtail/locales/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  374. wagtail/locales/locale/pt_PT/LC_MESSAGES/django.po +1 -1
  375. wagtail/locales/locale/ro/LC_MESSAGES/django.po +1 -1
  376. wagtail/locales/locale/ru/LC_MESSAGES/django.po +1 -1
  377. wagtail/locales/locale/sk_SK/LC_MESSAGES/django.po +1 -1
  378. wagtail/locales/locale/sl/LC_MESSAGES/django.po +1 -1
  379. wagtail/locales/locale/sv/LC_MESSAGES/django.po +1 -1
  380. wagtail/locales/locale/tet/LC_MESSAGES/django.po +1 -1
  381. wagtail/locales/locale/th/LC_MESSAGES/django.po +1 -1
  382. wagtail/locales/locale/tr/LC_MESSAGES/django.po +1 -1
  383. wagtail/locales/locale/tr_TR/LC_MESSAGES/django.po +1 -1
  384. wagtail/locales/locale/uk/LC_MESSAGES/django.po +1 -1
  385. wagtail/locales/locale/vi/LC_MESSAGES/django.po +1 -1
  386. wagtail/locales/locale/zh/LC_MESSAGES/django.po +1 -1
  387. wagtail/locales/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
  388. wagtail/locales/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
  389. wagtail/locales/tests.py +18 -3
  390. wagtail/locales/views.py +0 -1
  391. wagtail/management/commands/rebuild_references_index.py +3 -1
  392. wagtail/migrations/0092_alter_collectionviewrestriction_password_and_more.py +33 -0
  393. wagtail/migrations/0093_uploadedfile.py +53 -0
  394. wagtail/models/__init__.py +147 -32
  395. wagtail/models/i18n.py +1 -1
  396. wagtail/models/{collections.py → media.py} +33 -2
  397. wagtail/models/reference_index.py +1 -1
  398. wagtail/models/view_restrictions.py +10 -3
  399. wagtail/project_template/project_name/settings/base.py +6 -0
  400. wagtail/project_template/requirements.txt +1 -1
  401. wagtail/rich_text/__init__.py +25 -8
  402. wagtail/rich_text/pages.py +19 -8
  403. wagtail/rich_text/rewriters.py +140 -68
  404. wagtail/search/backends/database/mysql/mysql.py +3 -3
  405. wagtail/search/backends/database/postgres/postgres.py +3 -3
  406. wagtail/search/backends/database/sqlite/sqlite.py +2 -2
  407. wagtail/search/backends/elasticsearch7.py +4 -0
  408. wagtail/search/locale/en/LC_MESSAGES/django.po +3 -3
  409. wagtail/search/tests/test_postgres_backend.py +50 -0
  410. wagtail/sites/locale/en/LC_MESSAGES/django.po +8 -8
  411. wagtail/sites/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  412. wagtail/sites/locale/he_IL/LC_MESSAGES/django.po +2 -2
  413. wagtail/sites/locale/ro/LC_MESSAGES/django.mo +0 -0
  414. wagtail/sites/locale/ro/LC_MESSAGES/django.po +3 -2
  415. wagtail/sites/tests.py +35 -9
  416. wagtail/sites/views.py +3 -1
  417. wagtail/snippets/locale/de/LC_MESSAGES/django.mo +0 -0
  418. wagtail/snippets/locale/de/LC_MESSAGES/django.po +7 -8
  419. wagtail/snippets/locale/en/LC_MESSAGES/django.po +16 -56
  420. wagtail/snippets/locale/fr/LC_MESSAGES/django.po +2 -2
  421. wagtail/snippets/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  422. wagtail/snippets/locale/he_IL/LC_MESSAGES/django.po +2 -2
  423. wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  424. wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.po +6 -2
  425. wagtail/snippets/locale/lv/LC_MESSAGES/django.mo +0 -0
  426. wagtail/snippets/locale/lv/LC_MESSAGES/django.po +12 -0
  427. wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
  428. wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po +4 -0
  429. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  430. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  431. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/publish.html +3 -1
  432. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/save.html +3 -1
  433. wagtail/snippets/templates/wagtailsnippets/snippets/create.html +2 -3
  434. wagtail/snippets/templates/wagtailsnippets/snippets/edit.html +2 -3
  435. wagtail/snippets/tests/test_preview.py +13 -2
  436. wagtail/snippets/tests/test_snippets.py +41 -16
  437. wagtail/snippets/tests/test_viewset.py +95 -18
  438. wagtail/snippets/tests/test_workflows.py +12 -0
  439. wagtail/snippets/views/snippets.py +1 -40
  440. wagtail/templatetags/wagtailcore_tags.py +1 -1
  441. wagtail/test/demosite/models.py +1 -1
  442. wagtail/test/middleware.py +14 -1
  443. wagtail/test/testapp/fixtures/test.json +20 -0
  444. wagtail/test/testapp/migrations/0001_squashed_0073_revisablechildmodel_secret_text.py +8 -8
  445. wagtail/test/testapp/migrations/0023_snippetchoosermodel_full_featured.py +1 -0
  446. wagtail/test/testapp/migrations/0034_custompermissionmodel.py +44 -0
  447. wagtail/test/testapp/migrations/0035_modelwithcustommanager.py +30 -0
  448. wagtail/test/testapp/migrations/0036_complexdefaultstreampage.py +28 -0
  449. wagtail/test/testapp/models.py +79 -2
  450. wagtail/test/testapp/templates/tests/custom_docs_password_required.html +10 -0
  451. wagtail/test/testapp/templates/tests/custom_page_password_required.html +10 -0
  452. wagtail/test/testapp/views.py +24 -2
  453. wagtail/test/testapp/wagtail_hooks.py +19 -0
  454. wagtail/test/utils/wagtail_tests.py +2 -2
  455. wagtail/tests/test_blocks.py +262 -1
  456. wagtail/tests/test_migrations.py +1 -1
  457. wagtail/tests/test_page_model.py +77 -0
  458. wagtail/tests/test_page_privacy.py +18 -1
  459. wagtail/tests/test_rich_text.py +95 -5
  460. wagtail/tests/test_streamfield.py +43 -0
  461. wagtail/tests/test_utils.py +8 -2
  462. wagtail/tests/test_views.py +52 -1
  463. wagtail/tests/test_whitelist.py +7 -7
  464. wagtail/users/forms.py +3 -1
  465. wagtail/users/locale/en/LC_MESSAGES/django.po +124 -96
  466. wagtail/users/locale/fr/LC_MESSAGES/django.po +2 -2
  467. wagtail/users/locale/he_IL/LC_MESSAGES/django.mo +0 -0
  468. wagtail/users/locale/he_IL/LC_MESSAGES/django.po +2 -2
  469. wagtail/users/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
  470. wagtail/users/locale/hr_HR/LC_MESSAGES/django.po +13 -2
  471. wagtail/users/migrations/0013_userprofile_density.py +23 -0
  472. wagtail/users/models.py +14 -3
  473. wagtail/users/templates/wagtailusers/groups/create.html +1 -7
  474. wagtail/users/templates/wagtailusers/groups/edit.html +1 -13
  475. wagtail/users/templates/wagtailusers/groups/includes/formatted_permissions.html +46 -2
  476. wagtail/users/templates/wagtailusers/groups/includes/group_form_js.html +0 -3
  477. wagtail/users/templates/wagtailusers/users/create.html +1 -14
  478. wagtail/users/templates/wagtailusers/users/edit.html +1 -14
  479. wagtail/users/templates/wagtailusers/users/index.html +2 -5
  480. wagtail/users/templates/wagtailusers/users/index_results.html +3 -13
  481. wagtail/users/templates/wagtailusers/users/user_cell.html +9 -0
  482. wagtail/users/templatetags/wagtailusers_tags.py +107 -20
  483. wagtail/users/tests/test_admin_views.py +669 -90
  484. wagtail/users/views/groups.py +58 -61
  485. wagtail/users/views/users.py +211 -92
  486. wagtail/users/wagtail_hooks.py +6 -38
  487. wagtail/users/widgets.py +3 -5
  488. wagtail/utils/text.py +1 -1
  489. wagtail/views.py +5 -9
  490. wagtail/whitelist.py +1 -1
  491. {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/METADATA +5 -6
  492. {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/RECORD +496 -477
  493. wagtail/admin/static/wagtailadmin/js/page-editor.js +0 -1
  494. wagtail/admin/static/wagtailadmin/js/vendor/mousetrap.min.js +0 -1
  495. wagtail/admin/static/wagtailadmin/js/vendor/urlify.js +0 -1
  496. wagtail/admin/static/wagtailadmin/js/vendor/xregexp.min.js +0 -1
  497. wagtail/admin/templates/wagtailadmin/collections/index.html +0 -34
  498. wagtail/admin/templates/wagtailadmin/pages/revisions/_actions.html +0 -22
  499. wagtail/admin/templates/wagtailadmin/shared/page_breadcrumbs.html +0 -55
  500. wagtail/admin/tests/pages/test_dashboard.py +0 -172
  501. wagtail/contrib/redirects/templates/wagtailredirects/results.html +0 -23
  502. wagtail/documents/templates/wagtaildocs/documents/list.html +0 -2
  503. wagtail/search/tests/test_postgres_stemming.py +0 -40
  504. wagtail/sites/templates/wagtailsites/create.html +0 -7
  505. wagtail/sites/templates/wagtailsites/edit.html +0 -7
  506. wagtail/snippets/templates/wagtailsnippets/snippets/revisions/_actions.html +0 -36
  507. wagtail/users/templates/wagtailusers/users/list.html +0 -62
  508. wagtail/users/urls/users.py +0 -12
  509. {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/LICENSE +0 -0
  510. {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/WHEEL +0 -0
  511. {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/entry_points.txt +0 -0
  512. {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/top_level.txt +0 -0
wagtail/__init__.py CHANGED
@@ -6,7 +6,7 @@ from wagtail.utils.version import get_semver_version, get_version
6
6
 
7
7
  # major.minor.patch.release.number
8
8
  # release must be one of alpha, beta, rc, or final
9
- VERSION = (6, 0, 1, "final", 1)
9
+ VERSION = (6, 1, 0, "rc", 1)
10
10
 
11
11
  __version__ = get_version(VERSION)
12
12
 
wagtail/admin/checks.py CHANGED
@@ -235,3 +235,54 @@ def file_overwrite_check(app_configs, **kwargs):
235
235
  )
236
236
 
237
237
  return errors
238
+
239
+
240
+ @register("datetime_format")
241
+ def datetime_format_check(app_configs, **kwargs):
242
+ """
243
+ If L10N is enabled, check if WAGTAIL_* formats are compatible with Django input formats.
244
+ See https://docs.djangoproject.com/en/stable/topics/i18n/formatting/#creating-custom-format-files
245
+ See https://docs.wagtail.org/en/stable/reference/settings.html#wagtail-date-format-wagtail-datetime-format-wagtail-time-format
246
+ """
247
+
248
+ from django.conf import settings
249
+ from django.utils import formats, translation
250
+
251
+ errors = []
252
+
253
+ if not getattr(settings, "USE_L10N", False):
254
+ return errors
255
+
256
+ formats.FORMAT_SETTINGS = formats.FORMAT_SETTINGS.union(
257
+ [
258
+ "WAGTAIL_DATE_FORMAT",
259
+ "WAGTAIL_DATETIME_FORMAT",
260
+ "WAGTAIL_TIME_FORMAT",
261
+ ]
262
+ )
263
+
264
+ for code, label in settings.LANGUAGES:
265
+ with translation.override(code):
266
+ for wagtail_format, django_formats in [
267
+ ("WAGTAIL_DATE_FORMAT", "DATE_INPUT_FORMATS"),
268
+ ("WAGTAIL_DATETIME_FORMAT", "DATETIME_INPUT_FORMATS"),
269
+ ("WAGTAIL_TIME_FORMAT", "TIME_INPUT_FORMATS"),
270
+ ]:
271
+ wagtail_format_value = getattr(settings, wagtail_format, None)
272
+ django_formats_value = getattr(settings, django_formats, None)
273
+
274
+ if wagtail_format_value is None:
275
+ # Skip the iteration if wagtail_format is not present
276
+ continue
277
+
278
+ input_format = formats.get_format_lazy(wagtail_format_value)
279
+ input_formats = formats.get_format_lazy(django_formats_value)
280
+ if str(input_format) not in str(input_formats):
281
+ errors.append(
282
+ Error(
283
+ "Configuration error",
284
+ hint=f"{wagtail_format} {input_format} must be in {django_formats} for language {label} ({code}).",
285
+ )
286
+ )
287
+
288
+ return errors
wagtail/admin/compare.py CHANGED
@@ -511,7 +511,7 @@ class ChildRelationComparison:
511
511
  # Relations don't have a verbose_name
512
512
  if self.label:
513
513
  # If the panel has a label, we set it instead.
514
- # See InlinePanel.get_comparision for usage
514
+ # See InlinePanel.get_comparison for usage
515
515
  verbose_name = self.label
516
516
  else:
517
517
  verbose_name = self.field.name.replace("_", " ")
wagtail/admin/filters.py CHANGED
@@ -2,9 +2,11 @@ import django_filters
2
2
  from django import forms
3
3
  from django.conf import settings
4
4
  from django.db import models
5
+ from django.utils.functional import cached_property
5
6
  from django.utils.translation import gettext_lazy as _
6
7
  from django_filters.widgets import SuffixedMultiWidget
7
8
 
9
+ from wagtail.admin.models import popular_tags_for_model
8
10
  from wagtail.admin.utils import get_user_display_name
9
11
  from wagtail.admin.widgets import AdminDateInput, BooleanRadioSelect, FilteredSelect
10
12
  from wagtail.coreutils import get_content_languages, get_content_type_label
@@ -16,7 +18,7 @@ class DateRangePickerWidget(SuffixedMultiWidget):
16
18
  """
17
19
 
18
20
  template_name = "wagtailadmin/widgets/daterange_input.html"
19
- suffixes = ["after", "before"]
21
+ suffixes = ["from", "to"]
20
22
 
21
23
  def __init__(self, attrs=None):
22
24
  widgets = (
@@ -191,3 +193,70 @@ class UserModelMultipleChoiceField(django_filters.fields.ModelMultipleChoiceFiel
191
193
 
192
194
  class MultipleUserFilter(django_filters.ModelMultipleChoiceFilter):
193
195
  field_class = UserModelMultipleChoiceField
196
+
197
+
198
+ class CollectionChoiceIterator(django_filters.fields.ModelChoiceIterator):
199
+ @cached_property
200
+ def min_depth(self):
201
+ return self.queryset.get_min_depth()
202
+
203
+ def choice(self, obj):
204
+ return (obj.pk, obj.get_indented_name(self.min_depth, html=True))
205
+
206
+
207
+ class CollectionChoiceField(django_filters.fields.ModelChoiceField):
208
+ iterator = CollectionChoiceIterator
209
+
210
+
211
+ class CollectionFilter(django_filters.ModelChoiceFilter):
212
+ field_class = CollectionChoiceField
213
+
214
+
215
+ class PopularTagsFilter(django_filters.MultipleChoiceFilter):
216
+ # This uses a MultipleChoiceFilter instead of a ModelMultipleChoiceFilter
217
+ # because the queryset has been sliced, which means ModelMultipleChoiceFilter
218
+ # cannot do further queries to validate the selected tags.
219
+
220
+ def __init__(self, *args, use_subquery=False, **kwargs):
221
+ super().__init__(*args, **kwargs)
222
+ self.use_subquery = use_subquery
223
+
224
+ def filter(self, qs, value):
225
+ filtered = super().filter(qs, value)
226
+ if not self.use_subquery:
227
+ return filtered
228
+
229
+ # Workaround for https://github.com/wagtail/wagtail/issues/6616
230
+ pks = list(filtered.values_list("pk", flat=True))
231
+ return qs.filter(pk__in=pks)
232
+
233
+
234
+ class BaseMediaFilterSet(WagtailFilterSet):
235
+ permission_policy = None
236
+
237
+ def __init__(
238
+ self, data=None, queryset=None, *, request=None, prefix=None, is_searching=None
239
+ ):
240
+ super().__init__(data, queryset, request=request, prefix=prefix)
241
+ collections_qs = self.permission_policy.collections_user_has_any_permission_for(
242
+ request.user, ["add", "change"]
243
+ )
244
+ # Add collection filter only if there are multiple collections
245
+ if collections_qs.count() > 1:
246
+ self.filters["collection_id"] = CollectionFilter(
247
+ field_name="collection_id",
248
+ label=_("Collection"),
249
+ queryset=collections_qs,
250
+ )
251
+
252
+ popular_tags = popular_tags_for_model(self._meta.model)
253
+
254
+ if popular_tags:
255
+ self.filters["tag"] = PopularTagsFilter(
256
+ label=_("Tag"),
257
+ field_name="tags__name",
258
+ choices=[(tag.name, tag.name) for tag in popular_tags],
259
+ widget=forms.CheckboxSelectMultiple,
260
+ use_subquery=is_searching,
261
+ help_text=_("Filter by up to ten most popular tags."),
262
+ )
@@ -140,4 +140,4 @@ class AvatarPreferencesForm(forms.ModelForm):
140
140
  class ThemePreferencesForm(forms.ModelForm):
141
141
  class Meta:
142
142
  model = UserProfile
143
- fields = ["theme"]
143
+ fields = ["theme", "density"]
@@ -1,6 +1,7 @@
1
1
  from itertools import groupby
2
2
 
3
3
  from django import forms
4
+ from django.conf import settings
4
5
  from django.contrib.auth.models import Group, Permission
5
6
  from django.core.exceptions import ValidationError
6
7
  from django.db import transaction
@@ -19,6 +20,20 @@ from .view_restrictions import BaseViewRestrictionForm
19
20
 
20
21
 
21
22
  class CollectionViewRestrictionForm(BaseViewRestrictionForm):
23
+ def __init__(self, *args, **kwargs):
24
+ super().__init__(*args, **kwargs)
25
+
26
+ if not getattr(settings, "WAGTAILDOCS_PRIVATE_COLLECTION_OPTIONS", {}).get(
27
+ "SHARED_PASSWORD",
28
+ True,
29
+ ):
30
+ self.fields["restriction_type"].choices = [
31
+ choice
32
+ for choice in CollectionViewRestriction.RESTRICTION_CHOICES
33
+ if choice[0] != CollectionViewRestriction.PASSWORD
34
+ ]
35
+ del self.fields["password"]
36
+
22
37
  class Meta:
23
38
  model = CollectionViewRestriction
24
39
  fields = ("restriction_type", "password", "groups")
@@ -124,6 +124,19 @@ class CopyForm(forms.Form):
124
124
 
125
125
 
126
126
  class PageViewRestrictionForm(BaseViewRestrictionForm):
127
+ def __init__(self, *args, **kwargs):
128
+ super().__init__(*args, **kwargs)
129
+
130
+ if not getattr(settings, "WAGTAIL_PRIVATE_PAGE_OPTIONS", {}).get(
131
+ "SHARED_PASSWORD", True
132
+ ):
133
+ self.fields["restriction_type"].choices = [
134
+ choice
135
+ for choice in PageViewRestriction.RESTRICTION_CHOICES
136
+ if choice[0] != PageViewRestriction.PASSWORD
137
+ ]
138
+ del self.fields["password"]
139
+
127
140
  class Meta:
128
141
  model = PageViewRestriction
129
142
  fields = ("restriction_type", "password", "groups")
@@ -215,3 +228,39 @@ class MoveForm(forms.Form):
215
228
  label=_("New parent page"),
216
229
  help_text=_("Select a new parent for this page."),
217
230
  )
231
+
232
+
233
+ class ParentChooserForm(forms.Form):
234
+ def __init__(self, child_page_type, user, *args, **kwargs):
235
+ self.child_page_type = child_page_type
236
+ self.user = user
237
+ super().__init__(*args, **kwargs)
238
+ self.fields["parent_page"] = forms.ModelChoiceField(
239
+ queryset=Page.objects.all(),
240
+ widget=widgets.AdminPageChooser(
241
+ target_models=self.child_page_type.allowed_parent_page_models(),
242
+ can_choose_root=True,
243
+ user_perms="add_subpage",
244
+ ),
245
+ label=_("Parent page"),
246
+ help_text=_("The new page will be a child of this given parent page."),
247
+ )
248
+
249
+ def clean_parent_page(self):
250
+ parent_page = self.cleaned_data["parent_page"].specific_deferred
251
+ if not parent_page.permissions_for_user(self.user).can_add_subpage():
252
+ raise forms.ValidationError(
253
+ _('You do not have permission to create a page under "%(page_title)s".')
254
+ % {"page_title": parent_page.get_admin_display_title()}
255
+ )
256
+ if not self.child_page_type.can_create_at(parent_page):
257
+ raise forms.ValidationError(
258
+ _(
259
+ 'You cannot create a page of type "%(page_type)s" under "%(page_title)s".'
260
+ )
261
+ % {
262
+ "page_type": self.child_page_type.get_verbose_name(),
263
+ "page_title": parent_page.get_admin_display_title(),
264
+ }
265
+ )
266
+ return parent_page
@@ -243,6 +243,9 @@ msgstr "El llimac '%(page_slug)s' ja està en ús a la pàgina principal"
243
243
  msgid "Select a new parent for this page."
244
244
  msgstr "Seleccioneu un nou pare per aquesta pàgina."
245
245
 
246
+ msgid "Search…"
247
+ msgstr "Cercar..."
248
+
246
249
  #, python-format
247
250
  msgid "Tag(s) %(value_too_long)s are over %(max_tag_length)d characters"
248
251
  msgstr ""
@@ -701,6 +704,14 @@ msgstr "Cancel·lar"
701
704
  msgid "No %(model_name)s match your query."
702
705
  msgstr "Cap %(model_name)s concorda amb la vostra consulta."
703
706
 
707
+ #, python-format
708
+ msgid ""
709
+ "There are no %(model_name)s to display. Why not <a href=\"%(add_url)s\">add "
710
+ "one</a>?"
711
+ msgstr ""
712
+ "No hi ha %(model_name)s per mostrar. En voleu <a "
713
+ "href=\"%(add_url)s\">afegir</a>?"
714
+
704
715
  #, python-format
705
716
  msgid "There are no %(model_name)s to display."
706
717
  msgstr "No hi ha %(model_name)s per mostrar."
@@ -1681,6 +1692,10 @@ msgstr "Afegeix una pàgina filla a '%(title)s'"
1681
1692
  msgid "Drag"
1682
1693
  msgstr "Agafa"
1683
1694
 
1695
+ #, python-format
1696
+ msgid "Item %(index)s of %(total)s"
1697
+ msgstr "Element %(index)s de %(total)s"
1698
+
1684
1699
  msgid "Disable ordering of child pages"
1685
1700
  msgstr "Desactiva l'ordenació de les pàgines fill"
1686
1701
 
@@ -1690,9 +1705,37 @@ msgstr "Ordenació"
1690
1705
  msgid "Enable ordering of child pages"
1691
1706
  msgstr "Activa l'ordenació de les pàgines fill"
1692
1707
 
1708
+ #, python-format
1709
+ msgid "%(start_index)s-%(end_index)s of %(items_count)s across entire site."
1710
+ msgstr "%(start_index)s-%(end_index)s de %(items_count)s a tot el lloc."
1711
+
1712
+ msgid "No results across entire site."
1713
+ msgstr "No s'han trobat resultats en tot el lloc."
1714
+
1715
+ #, python-format
1716
+ msgid "Search in '<span class=\"w-title-ellipsis\">%(title)s</span>'"
1717
+ msgstr "Cercar a '<span class=\"w-title-ellipsis\">%(title)s</span>'"
1718
+
1719
+ #, python-format
1720
+ msgid ""
1721
+ "%(start_index)s-%(end_index)s of %(items_count)s in '<span class=\"w-title-"
1722
+ "ellipsis\">%(title)s</span>'."
1723
+ msgstr ""
1724
+ "%(start_index)s-%(end_index)s de %(items_count)s a '<span class=\"w-title-"
1725
+ "ellipsis\">%(title)s</span>'."
1726
+
1727
+ #, python-format
1728
+ msgid "No results in '<span class=\"w-title-ellipsis\">%(title)s</span>'."
1729
+ msgstr ""
1730
+ "No hi ha resultats a '<span class=\"w-title-ellipsis\">%(title)s</span>'."
1731
+
1693
1732
  msgid "Search the whole site"
1694
1733
  msgstr "Cercar en tot el lloc"
1695
1734
 
1735
+ #, python-format
1736
+ msgid "%(start_index)s-%(end_index)s of %(items_count)s"
1737
+ msgstr "%(start_index)s-%(end_index)s de %(items_count)s"
1738
+
1696
1739
  msgid "Sites menu"
1697
1740
  msgstr "Menú de llocs"
1698
1741
 
@@ -1806,9 +1849,21 @@ msgstr "No s'han trobat pàgines que acompleixin aquests criteris d'informe."
1806
1849
  msgid "Updated"
1807
1850
  msgstr "Actualitzat"
1808
1851
 
1852
+ msgid "App"
1853
+ msgstr "Aplicació"
1854
+
1809
1855
  msgid "Pages"
1810
1856
  msgstr "Pàgines"
1811
1857
 
1858
+ msgid "Last edited page"
1859
+ msgstr "Última pàgina editada"
1860
+
1861
+ msgid "Last edit"
1862
+ msgstr "Última edició"
1863
+
1864
+ msgid "No page types found."
1865
+ msgstr "No s'ha trobat cap tipus de pàgina."
1866
+
1812
1867
  msgid "Locking status"
1813
1868
  msgstr "Estat de bloqueig"
1814
1869
 
@@ -1891,6 +1946,12 @@ msgstr "Aplica els filtres"
1891
1946
  msgid "Add comment"
1892
1947
  msgstr "Afegir comentari"
1893
1948
 
1949
+ msgid "Show filters"
1950
+ msgstr "Mostrar filtres"
1951
+
1952
+ msgid "Filter by"
1953
+ msgstr "Filtrar per"
1954
+
1894
1955
  msgid "Back"
1895
1956
  msgstr "Tornar"
1896
1957
 
@@ -2456,6 +2517,12 @@ msgstr "Mostrar/ocultar comentaris"
2456
2517
  msgid "Comments"
2457
2518
  msgstr "Comentaris"
2458
2519
 
2520
+ msgid "Toggle checks"
2521
+ msgstr "Commutar marques"
2522
+
2523
+ msgid "Checks"
2524
+ msgstr "Marques"
2525
+
2459
2526
  msgid "Toggle preview"
2460
2527
  msgstr "Mostrar/ocultar previsualització"
2461
2528
 
@@ -2674,6 +2741,10 @@ msgstr ""
2674
2741
  msgid "Edit '%(title)s'"
2675
2742
  msgstr "Editar '%(title)s'"
2676
2743
 
2744
+ #, python-format
2745
+ msgid "Copy '%(title)s'"
2746
+ msgstr "Copiar '%(title)s'"
2747
+
2677
2748
  msgid "Inspect"
2678
2749
  msgstr "Inspeccionar"
2679
2750
 
@@ -2689,6 +2760,14 @@ msgstr "Esborrar '%(title)s'"
2689
2760
  msgid "More options for '%(title)s'"
2690
2761
  msgstr "Més opcions per '%(title)s'"
2691
2762
 
2763
+ #, python-format
2764
+ msgid "Add %(model_name)s"
2765
+ msgstr "Afegir %(model_name)s"
2766
+
2767
+ #, python-format
2768
+ msgid "The %(model_name)s could not be created due to errors."
2769
+ msgstr "No s'ha pogut crear el %(model_name)s per causa d'errors."
2770
+
2692
2771
  #, python-format
2693
2772
  msgid "New: %(model_name)s"
2694
2773
  msgstr "Nou: %(model_name)s"
@@ -2696,6 +2775,10 @@ msgstr "Nou: %(model_name)s"
2696
2775
  msgid "Editing"
2697
2776
  msgstr "Editant"
2698
2777
 
2778
+ #, python-format
2779
+ msgid "The %(model_name)s could not be saved due to errors."
2780
+ msgstr "No s'ha pogut desar el %(model_name)s per causa d'errors."
2781
+
2699
2782
  #, python-format
2700
2783
  msgid "%(model_name)s '%(object)s' deleted."
2701
2784
  msgstr "%(model_name)s '%(object)s' esborrat."
@@ -2902,6 +2985,10 @@ msgstr "No es pot crear la pàgina per causa d'errors de validació"
2902
2985
  msgid "Page '%(page_title)s' deleted."
2903
2986
  msgstr "Pàgina '%(page_title)s' eliminada."
2904
2987
 
2988
+ #, python-format
2989
+ msgid "Editing %(page_type)s"
2990
+ msgstr "Editant %(page_type)s"
2991
+
2905
2992
  #, python-format
2906
2993
  msgid ""
2907
2994
  "Page '%(page_title)s' has been replaced with version from "
@@ -2966,12 +3053,44 @@ msgstr "Amagar les accions de comentaris"
2966
3053
  msgid "Page history"
2967
3054
  msgstr "Historial de pàgina"
2968
3055
 
3056
+ msgid "Page type"
3057
+ msgstr "Tipus de pàgina"
3058
+
3059
+ msgid "Date updated"
3060
+ msgstr "Data actualitzada"
3061
+
3062
+ msgid "Owner"
3063
+ msgstr "Propietari"
3064
+
3065
+ msgid "Edited by"
3066
+ msgstr "Editat per"
3067
+
2969
3068
  msgid "Site"
2970
3069
  msgstr "Lloc web"
2971
3070
 
3071
+ msgid "Has child pages"
3072
+ msgstr "Té pàgines filles"
3073
+
3074
+ msgid "Any"
3075
+ msgstr "Algun/a"
3076
+
2972
3077
  msgid "Yes"
2973
3078
  msgstr "Sí"
2974
3079
 
3080
+ msgid "Exploring"
3081
+ msgstr "Explorant"
3082
+
3083
+ msgid ""
3084
+ "Focus on the drag button and press up or down arrows to move the item, then "
3085
+ "press enter to submit the change."
3086
+ msgstr ""
3087
+ "Centreu-vos en el botó d'arrossegar i premeu les fletxes amunt o avall per "
3088
+ "moure l'element i, a continuació, premeu Intro per enviar el canvi."
3089
+
3090
+ #, python-format
3091
+ msgid "'%(page_title)s' has been moved successfully."
3092
+ msgstr "S'ha mogut '%(page_title)s'."
3093
+
2975
3094
  #, python-format
2976
3095
  msgid "Page '%(page_title)s' is now unlocked."
2977
3096
  msgstr "La pàgina '%(page_title)s' ara està desbloquejada."
@@ -3039,6 +3158,9 @@ msgstr "Data/Hora"
3039
3158
  msgid "Locked pages"
3040
3159
  msgstr "Pàgines bloquejades"
3041
3160
 
3161
+ msgid "Page types usage"
3162
+ msgstr "Ús de tipus de pàgines"
3163
+
3042
3164
  msgid "Show"
3043
3165
  msgstr "Mostra"
3044
3166
 
@@ -335,7 +335,7 @@ msgstr "Sie können diesen Workflow nicht mehrfach derselben Seite zuweisen."
335
335
  msgid ""
336
336
  "Snippet '%(content_type)s' already has workflow '%(workflow_name)s' assigned."
337
337
  msgstr ""
338
- "Schnipsel '%(content_type)s' wurde bereits Workflow '%(workflow_name)s' "
338
+ "'%(content_type)s'-Objekt wurde bereits Workflow '%(workflow_name)s' "
339
339
  "zugewiesen."
340
340
 
341
341
  msgid "Give your workflow a name"
@@ -404,18 +404,18 @@ msgid "All users in listing selected"
404
404
  msgstr "Alle Benutzer der Auflistung ausgewählt"
405
405
 
406
406
  msgid "1 snippet selected"
407
- msgstr "1 Schnipsel ausgewählt"
407
+ msgstr "1 Element ausgewählt"
408
408
 
409
409
  #, python-format
410
410
  msgid "%(objects)s snippets selected"
411
- msgstr "%(objects)s Schnipsel ausgewählt"
411
+ msgstr "%(objects)s Elemente ausgewählt"
412
412
 
413
413
  #, python-format
414
414
  msgid "All %(objects)s snippets on this screen selected"
415
- msgstr "Alle %(objects)s Schnipsel auf dem Bildschirm ausgewählt"
415
+ msgstr "Alle %(objects)s Elemente auf dem Bildschirm ausgewählt"
416
416
 
417
417
  msgid "All snippets in listing selected"
418
- msgstr "Alle Schnipsel der Auflistung ausgewählt"
418
+ msgstr "Alle Elemente der Auflistung ausgewählt"
419
419
 
420
420
  msgid "1 item selected"
421
421
  msgstr "1 Element ausgewählt"