wagtail 6.0.2__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 (355) 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/de/LC_MESSAGES/django.mo +0 -0
  9. wagtail/admin/locale/de/LC_MESSAGES/django.po +5 -5
  10. wagtail/admin/locale/en/LC_MESSAGES/django.po +474 -385
  11. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +3 -3
  12. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  13. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +73 -2
  14. wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
  15. wagtail/admin/locale/ro/LC_MESSAGES/django.po +3 -3
  16. wagtail/admin/panels/comment_panel.py +1 -1
  17. wagtail/admin/panels/field_panel.py +1 -1
  18. wagtail/admin/rich_text/converters/editor_html.py +3 -1
  19. wagtail/admin/rich_text/editors/draftail/__init__.py +28 -2
  20. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  21. wagtail/admin/static/wagtailadmin/css/panels/draftail.css +1 -1
  22. wagtail/admin/static/wagtailadmin/images/favicon.ico +0 -0
  23. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  24. wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
  25. wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
  26. wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
  27. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  28. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  29. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
  30. wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
  31. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  32. wagtail/admin/static/wagtailadmin/js/expanding-formset.js +1 -1
  33. wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
  34. wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
  35. wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
  36. wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
  37. wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
  38. wagtail/admin/static/wagtailadmin/js/preview-panel.js +1 -1
  39. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  40. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  41. wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
  42. wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
  43. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  44. wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
  45. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  46. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  47. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  48. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +4 -4
  49. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  50. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  51. wagtail/admin/staticfiles.py +1 -0
  52. wagtail/admin/templates/wagtailadmin/base.html +1 -0
  53. wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +3 -1
  54. wagtail/admin/templates/wagtailadmin/collections/index_results.html +10 -0
  55. wagtail/admin/templates/wagtailadmin/generic/base.html +1 -9
  56. wagtail/admin/templates/wagtailadmin/generic/form.html +3 -2
  57. wagtail/admin/templates/wagtailadmin/generic/history/action_cell.html +27 -0
  58. wagtail/admin/templates/wagtailadmin/home/workflow_objects_to_moderate.html +3 -3
  59. wagtail/admin/templates/wagtailadmin/icons/keyboard.svg +1 -0
  60. wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +3 -1
  61. wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +0 -14
  62. wagtail/admin/templates/wagtailadmin/pages/action_menu/save_draft.html +3 -1
  63. wagtail/admin/templates/wagtailadmin/pages/choose_parent.html +17 -0
  64. wagtail/admin/templates/wagtailadmin/pages/explorable_index.html +8 -0
  65. wagtail/admin/templates/wagtailadmin/pages/history.html +1 -61
  66. wagtail/admin/templates/wagtailadmin/pages/index.html +1 -3
  67. wagtail/admin/templates/wagtailadmin/pages/listing/_locked_indicator.html +2 -2
  68. wagtail/admin/templates/wagtailadmin/pages/listing/_page_title_column_header.html +25 -27
  69. wagtail/admin/templates/wagtailadmin/pages/page_listing_header.html +2 -1
  70. wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
  71. wagtail/admin/templates/wagtailadmin/panels/publishing/schedule_publishing_panel.html +3 -1
  72. wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +1 -1
  73. wagtail/admin/templates/wagtailadmin/shared/active_filters.html +2 -1
  74. wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +8 -0
  75. wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
  76. wagtail/admin/templates/wagtailadmin/shared/headers/page_edit_header.html +1 -1
  77. wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +21 -9
  78. wagtail/admin/templates/wagtailadmin/shared/human_readable_date.html +1 -1
  79. wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +29 -0
  80. wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +2 -1
  81. wagtail/admin/templates/wagtailadmin/skeleton.html +2 -1
  82. wagtail/admin/templates/wagtailadmin/tables/related_objects_cell.html +9 -0
  83. wagtail/admin/templates/wagtailadmin/tables/title_cell.html +9 -7
  84. wagtail/admin/templates/wagtailadmin/widgets/draftail_rich_text_area.html +1 -1
  85. wagtail/admin/templates/wagtailadmin/workflows/create.html +6 -23
  86. wagtail/admin/templates/wagtailadmin/workflows/create_task.html +6 -15
  87. wagtail/admin/templates/wagtailadmin/workflows/edit.html +6 -23
  88. wagtail/admin/templates/wagtailadmin/workflows/edit_task.html +6 -13
  89. wagtail/admin/templates/wagtailadmin/workflows/includes/task_usage_cell.html +4 -4
  90. wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_tasks_cell.html +18 -0
  91. wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_title_cell.html +7 -0
  92. wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_used_by_cell.html +25 -0
  93. wagtail/admin/templates/wagtailadmin/workflows/index.html +0 -99
  94. wagtail/admin/templates/wagtailadmin/workflows/index_results.html +10 -0
  95. wagtail/admin/templates/wagtailadmin/workflows/task_index.html +0 -30
  96. wagtail/admin/templates/wagtailadmin/workflows/task_index_results.html +10 -0
  97. wagtail/admin/templates/wagtailadmin/workflows/usage.html +1 -1
  98. wagtail/admin/templatetags/wagtailadmin_tags.py +116 -39
  99. wagtail/admin/tests/pages/test_create_page.py +10 -4
  100. wagtail/admin/tests/pages/test_custom_listing.py +37 -0
  101. wagtail/admin/tests/pages/test_edit_page.py +6 -6
  102. wagtail/admin/tests/pages/test_explorer_view.py +19 -18
  103. wagtail/admin/tests/pages/test_move_page.py +1 -1
  104. wagtail/admin/tests/pages/test_page_usage.py +50 -2
  105. wagtail/admin/tests/pages/test_parent_page_chooser_view.py +119 -0
  106. wagtail/admin/tests/pages/test_preview.py +18 -4
  107. wagtail/admin/tests/test_account_management.py +20 -1
  108. wagtail/admin/tests/test_audit_log.py +172 -5
  109. wagtail/admin/tests/test_checks.py +92 -0
  110. wagtail/admin/tests/test_collections_views.py +19 -5
  111. wagtail/admin/tests/test_compare.py +6 -6
  112. wagtail/admin/tests/test_dashboard.py +404 -0
  113. wagtail/admin/tests/test_dbwhitelister.py +4 -5
  114. wagtail/admin/tests/test_edit_handlers.py +2 -2
  115. wagtail/admin/tests/test_keyboard_shortcuts.py +84 -0
  116. wagtail/admin/tests/test_page_chooser.py +31 -18
  117. wagtail/admin/tests/test_privacy.py +36 -2
  118. wagtail/admin/tests/test_rich_text.py +168 -23
  119. wagtail/admin/tests/test_templatetags.py +411 -43
  120. wagtail/admin/tests/test_views.py +4 -2
  121. wagtail/admin/tests/test_workflows.py +531 -9
  122. wagtail/admin/tests/tests.py +3 -1
  123. wagtail/admin/tests/ui/test_tables.py +48 -1
  124. wagtail/admin/tests/viewsets/test_model_viewset.py +126 -29
  125. wagtail/admin/ui/side_panels.py +3 -1
  126. wagtail/admin/ui/tables/__init__.py +13 -1
  127. wagtail/admin/ui/tables/pages.py +17 -6
  128. wagtail/admin/urls/__init__.py +8 -3
  129. wagtail/admin/urls/pages.py +5 -0
  130. wagtail/admin/urls/workflows.py +10 -0
  131. wagtail/admin/views/chooser.py +20 -24
  132. wagtail/admin/views/collections.py +17 -1
  133. wagtail/admin/views/generic/base.py +31 -4
  134. wagtail/admin/views/generic/history.py +220 -51
  135. wagtail/admin/views/generic/mixins.py +7 -4
  136. wagtail/admin/views/generic/models.py +54 -38
  137. wagtail/admin/views/generic/multiple_upload.py +17 -8
  138. wagtail/admin/views/generic/usage.py +17 -11
  139. wagtail/admin/views/home.py +15 -12
  140. wagtail/admin/views/mixins.py +30 -0
  141. wagtail/admin/views/pages/choose_parent.py +73 -0
  142. wagtail/admin/views/pages/history.py +54 -66
  143. wagtail/admin/views/pages/listing.py +187 -106
  144. wagtail/admin/views/pages/usage.py +6 -1
  145. wagtail/admin/views/pages/utils.py +70 -1
  146. wagtail/admin/views/workflows.py +150 -21
  147. wagtail/admin/viewsets/model.py +2 -2
  148. wagtail/admin/viewsets/pages.py +77 -0
  149. wagtail/admin/wagtail_hooks.py +40 -2
  150. wagtail/admin/widgets/button.py +10 -9
  151. wagtail/api/v2/filters.py +1 -1
  152. wagtail/api/v2/tests/test_pages.py +1 -1
  153. wagtail/blocks/base.py +18 -9
  154. wagtail/blocks/field_block.py +9 -7
  155. wagtail/blocks/list_block.py +16 -6
  156. wagtail/blocks/static_block.py +3 -0
  157. wagtail/blocks/stream_block.py +58 -23
  158. wagtail/blocks/struct_block.py +15 -9
  159. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +39 -47
  160. wagtail/contrib/forms/models.py +5 -5
  161. wagtail/contrib/forms/templates/wagtailforms/list_submissions.html +44 -33
  162. wagtail/contrib/forms/templates/wagtailforms/submissions_index.html +2 -63
  163. wagtail/contrib/forms/tests/test_models.py +26 -0
  164. wagtail/contrib/forms/urls.py +6 -0
  165. wagtail/contrib/forms/views.py +52 -49
  166. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.mo +0 -0
  167. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +3 -3
  168. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +34 -42
  169. wagtail/contrib/redirects/signal_handlers.py +1 -1
  170. wagtail/contrib/redirects/templates/wagtailredirects/index.html +1 -36
  171. wagtail/contrib/redirects/templates/wagtailredirects/index_results.html +18 -0
  172. wagtail/contrib/redirects/templates/wagtailredirects/redirect_target_cell.html +8 -0
  173. wagtail/contrib/redirects/tests/test_import_command.py +1 -1
  174. wagtail/contrib/redirects/tests/test_redirects.py +79 -8
  175. wagtail/contrib/redirects/urls.py +2 -1
  176. wagtail/contrib/redirects/views.py +85 -55
  177. wagtail/contrib/search_promotions/admin_urls.py +2 -1
  178. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +41 -64
  179. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index.html +1 -16
  180. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index_results.html +11 -0
  181. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/list.html +0 -51
  182. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/results.html +3 -16
  183. wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/search_promotion_column.html +15 -0
  184. wagtail/contrib/search_promotions/tests.py +122 -9
  185. wagtail/contrib/search_promotions/views.py +66 -65
  186. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +3 -3
  187. wagtail/contrib/settings/registry.py +10 -5
  188. wagtail/contrib/settings/tests/generic/test_admin.py +9 -0
  189. wagtail/contrib/settings/tests/site_specific/test_admin.py +10 -1
  190. wagtail/contrib/settings/tests/site_specific/test_model.py +3 -3
  191. wagtail/contrib/settings/tests/site_specific/test_templates.py +1 -1
  192. wagtail/contrib/settings/views.py +3 -1
  193. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  194. wagtail/contrib/simple_translation/tests/test_wagtail_hooks.py +2 -2
  195. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
  196. wagtail/contrib/table_block/blocks.py +1 -1
  197. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  198. wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
  199. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
  200. wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
  201. wagtail/coreutils.py +3 -2
  202. wagtail/documents/admin_urls.py +2 -2
  203. wagtail/documents/locale/en/LC_MESSAGES/django.po +22 -22
  204. wagtail/documents/migrations/0013_delete_uploadeddocument.py +16 -0
  205. wagtail/documents/models.py +1 -20
  206. wagtail/documents/rich_text/__init__.py +11 -7
  207. wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
  208. wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
  209. wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
  210. wagtail/documents/templates/wagtaildocs/documents/index.html +0 -16
  211. wagtail/documents/tests/test_admin_views.py +155 -23
  212. wagtail/documents/tests/test_collection_privacy.py +55 -1
  213. wagtail/documents/tests/test_rich_text.py +14 -0
  214. wagtail/documents/views/documents.py +25 -22
  215. wagtail/documents/views/multiple.py +6 -7
  216. wagtail/documents/views/serve.py +16 -1
  217. wagtail/documents/wagtail_hooks.py +20 -15
  218. wagtail/embeds/blocks.py +5 -0
  219. wagtail/embeds/locale/en/LC_MESSAGES/django.po +2 -2
  220. wagtail/embeds/rich_text/__init__.py +1 -1
  221. wagtail/embeds/tests/test_rich_text.py +14 -0
  222. wagtail/embeds/wagtail_hooks.py +4 -14
  223. wagtail/fields.py +3 -48
  224. wagtail/images/admin_urls.py +2 -2
  225. wagtail/images/check_files/wagtail.jpg +0 -0
  226. wagtail/images/check_files/wagtail.png +0 -0
  227. wagtail/images/fields.py +2 -0
  228. wagtail/images/image_operations.py +1 -1
  229. wagtail/images/locale/en/LC_MESSAGES/django.po +33 -45
  230. wagtail/images/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  231. wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +4 -0
  232. wagtail/images/migrations/0026_delete_uploadedimage.py +16 -0
  233. wagtail/images/models.py +49 -43
  234. wagtail/images/rich_text/__init__.py +18 -8
  235. wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
  236. wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
  237. wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
  238. wagtail/images/templates/wagtailimages/images/image_listing_header.html +6 -0
  239. wagtail/images/templates/wagtailimages/images/index.html +11 -51
  240. wagtail/images/tests/test_admin_views.py +119 -62
  241. wagtail/images/tests/test_image_operations.py +10 -0
  242. wagtail/images/tests/test_models.py +35 -33
  243. wagtail/images/tests/test_rich_text.py +14 -0
  244. wagtail/images/tests/utils.py +1 -1
  245. wagtail/images/views/images.py +35 -64
  246. wagtail/images/views/multiple.py +6 -7
  247. wagtail/images/wagtail_hooks.py +4 -14
  248. wagtail/locale/en/LC_MESSAGES/django.po +150 -136
  249. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  250. wagtail/locales/tests.py +18 -3
  251. wagtail/locales/views.py +0 -1
  252. wagtail/management/commands/rebuild_references_index.py +3 -1
  253. wagtail/migrations/0092_alter_collectionviewrestriction_password_and_more.py +33 -0
  254. wagtail/migrations/0093_uploadedfile.py +53 -0
  255. wagtail/models/__init__.py +147 -32
  256. wagtail/models/i18n.py +1 -1
  257. wagtail/models/{collections.py → media.py} +33 -2
  258. wagtail/models/reference_index.py +1 -1
  259. wagtail/models/view_restrictions.py +10 -3
  260. wagtail/project_template/project_name/settings/base.py +6 -0
  261. wagtail/project_template/requirements.txt +1 -1
  262. wagtail/rich_text/__init__.py +25 -8
  263. wagtail/rich_text/pages.py +19 -8
  264. wagtail/rich_text/rewriters.py +140 -68
  265. wagtail/search/backends/database/mysql/mysql.py +3 -3
  266. wagtail/search/backends/database/postgres/postgres.py +3 -3
  267. wagtail/search/backends/database/sqlite/sqlite.py +2 -2
  268. wagtail/search/backends/elasticsearch7.py +4 -0
  269. wagtail/search/locale/en/LC_MESSAGES/django.po +3 -3
  270. wagtail/search/tests/test_postgres_backend.py +50 -0
  271. wagtail/sites/locale/en/LC_MESSAGES/django.po +8 -8
  272. wagtail/sites/tests.py +35 -9
  273. wagtail/sites/views.py +3 -1
  274. wagtail/snippets/locale/de/LC_MESSAGES/django.mo +0 -0
  275. wagtail/snippets/locale/de/LC_MESSAGES/django.po +5 -6
  276. wagtail/snippets/locale/en/LC_MESSAGES/django.po +16 -56
  277. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  278. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  279. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/publish.html +3 -1
  280. wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/save.html +3 -1
  281. wagtail/snippets/templates/wagtailsnippets/snippets/create.html +1 -1
  282. wagtail/snippets/templates/wagtailsnippets/snippets/edit.html +1 -1
  283. wagtail/snippets/tests/test_preview.py +13 -2
  284. wagtail/snippets/tests/test_snippets.py +41 -16
  285. wagtail/snippets/tests/test_viewset.py +63 -18
  286. wagtail/snippets/tests/test_workflows.py +12 -0
  287. wagtail/snippets/views/snippets.py +1 -40
  288. wagtail/templatetags/wagtailcore_tags.py +1 -1
  289. wagtail/test/demosite/models.py +1 -1
  290. wagtail/test/middleware.py +14 -1
  291. wagtail/test/testapp/fixtures/test.json +20 -0
  292. wagtail/test/testapp/migrations/0001_squashed_0073_revisablechildmodel_secret_text.py +8 -8
  293. wagtail/test/testapp/migrations/0023_snippetchoosermodel_full_featured.py +1 -0
  294. wagtail/test/testapp/migrations/0034_custompermissionmodel.py +44 -0
  295. wagtail/test/testapp/migrations/0035_modelwithcustommanager.py +30 -0
  296. wagtail/test/testapp/migrations/0036_complexdefaultstreampage.py +28 -0
  297. wagtail/test/testapp/models.py +79 -2
  298. wagtail/test/testapp/templates/tests/custom_docs_password_required.html +10 -0
  299. wagtail/test/testapp/templates/tests/custom_page_password_required.html +10 -0
  300. wagtail/test/testapp/views.py +24 -2
  301. wagtail/test/testapp/wagtail_hooks.py +19 -0
  302. wagtail/test/utils/wagtail_tests.py +2 -2
  303. wagtail/tests/test_blocks.py +262 -1
  304. wagtail/tests/test_migrations.py +1 -1
  305. wagtail/tests/test_page_model.py +77 -0
  306. wagtail/tests/test_page_privacy.py +18 -1
  307. wagtail/tests/test_rich_text.py +95 -5
  308. wagtail/tests/test_streamfield.py +43 -0
  309. wagtail/tests/test_utils.py +8 -2
  310. wagtail/tests/test_views.py +52 -1
  311. wagtail/tests/test_whitelist.py +7 -7
  312. wagtail/users/forms.py +3 -1
  313. wagtail/users/locale/en/LC_MESSAGES/django.po +124 -96
  314. wagtail/users/migrations/0013_userprofile_density.py +23 -0
  315. wagtail/users/models.py +14 -3
  316. wagtail/users/templates/wagtailusers/groups/create.html +1 -7
  317. wagtail/users/templates/wagtailusers/groups/edit.html +1 -13
  318. wagtail/users/templates/wagtailusers/groups/includes/formatted_permissions.html +46 -2
  319. wagtail/users/templates/wagtailusers/groups/includes/group_form_js.html +0 -2
  320. wagtail/users/templates/wagtailusers/users/create.html +1 -9
  321. wagtail/users/templates/wagtailusers/users/edit.html +1 -9
  322. wagtail/users/templates/wagtailusers/users/index.html +2 -5
  323. wagtail/users/templates/wagtailusers/users/index_results.html +3 -13
  324. wagtail/users/templates/wagtailusers/users/user_cell.html +9 -0
  325. wagtail/users/templatetags/wagtailusers_tags.py +107 -20
  326. wagtail/users/tests/test_admin_views.py +669 -90
  327. wagtail/users/views/groups.py +58 -61
  328. wagtail/users/views/users.py +211 -92
  329. wagtail/users/wagtail_hooks.py +6 -38
  330. wagtail/users/widgets.py +3 -5
  331. wagtail/utils/text.py +1 -1
  332. wagtail/views.py +5 -9
  333. wagtail/whitelist.py +1 -1
  334. {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/METADATA +4 -5
  335. {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/RECORD +339 -320
  336. wagtail/admin/static/wagtailadmin/js/page-editor.js +0 -1
  337. wagtail/admin/static/wagtailadmin/js/vendor/mousetrap.min.js +0 -1
  338. wagtail/admin/static/wagtailadmin/js/vendor/urlify.js +0 -1
  339. wagtail/admin/static/wagtailadmin/js/vendor/xregexp.min.js +0 -1
  340. wagtail/admin/templates/wagtailadmin/collections/index.html +0 -34
  341. wagtail/admin/templates/wagtailadmin/pages/revisions/_actions.html +0 -22
  342. wagtail/admin/templates/wagtailadmin/shared/page_breadcrumbs.html +0 -55
  343. wagtail/admin/tests/pages/test_dashboard.py +0 -172
  344. wagtail/contrib/redirects/templates/wagtailredirects/results.html +0 -23
  345. wagtail/documents/templates/wagtaildocs/documents/list.html +0 -2
  346. wagtail/search/tests/test_postgres_stemming.py +0 -40
  347. wagtail/sites/templates/wagtailsites/create.html +0 -6
  348. wagtail/sites/templates/wagtailsites/edit.html +0 -6
  349. wagtail/snippets/templates/wagtailsnippets/snippets/revisions/_actions.html +0 -36
  350. wagtail/users/templates/wagtailusers/users/list.html +0 -62
  351. wagtail/users/urls/users.py +0 -12
  352. {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/LICENSE +0 -0
  353. {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/WHEEL +0 -0
  354. {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/entry_points.txt +0 -0
  355. {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/top_level.txt +0 -0
@@ -1,8 +1,13 @@
1
+ from unittest import mock
2
+
1
3
  from django.test import TestCase
2
4
  from django.urls import reverse
3
5
 
4
- from wagtail.models import Page
6
+ from wagtail.coreutils import get_dummy_request
7
+ from wagtail.models import Page, Site
8
+ from wagtail.test.testapp.models import SimplePage
5
9
  from wagtail.test.utils import WagtailTestUtils
10
+ from wagtail.views import serve
6
11
 
7
12
 
8
13
  class TestLoginView(WagtailTestUtils, TestCase):
@@ -47,3 +52,49 @@ class TestLoginView(WagtailTestUtils, TestCase):
47
52
  },
48
53
  )
49
54
  self.assertRedirects(response, self.events_index.url)
55
+
56
+
57
+ @mock.patch("wagtail.hooks.get_hooks", mock.Mock(return_value=[]))
58
+ class TestServeView(TestCase):
59
+ fixtures = ["test.json"]
60
+
61
+ def test_serve_query_count(self):
62
+ request = get_dummy_request()
63
+ Site.find_for_request(request)
64
+ page, args, kwargs = Page.route_for_request(request, request.path)
65
+ with mock.patch.object(page, "serve", wraps=page.serve) as m:
66
+ with self.assertNumQueries(0):
67
+ serve(request, "/")
68
+ m.assert_called_once_with(request, *args, **kwargs)
69
+
70
+ def test_process_view_by_page_query_count(self):
71
+ expected_query_count = 3
72
+ site = Site.objects.get()
73
+ page = site.root_page.add_child(
74
+ instance=SimplePage(title="Simple page", slug="simple", content="Simple")
75
+ )
76
+ with mock.patch.object(
77
+ Page, "route_for_request", wraps=Page.route_for_request
78
+ ) as m:
79
+ with self.modify_settings(
80
+ MIDDLEWARE={
81
+ "prepend": "wagtail.test.middleware.SimplePageViewInterceptorMiddleware"
82
+ }
83
+ ):
84
+ with self.assertNumQueries(expected_query_count):
85
+ response_a = self.client.get("/simple/")
86
+ self.assertEqual(
87
+ response_a.content,
88
+ b'\n\n\n\n<!DOCTYPE HTML>\n<html lang="en" dir="ltr">\n <head>\n <title>Simple page</title>\n </head>\n <body>\n \n <h1>Simple page</h1>\n \n <h2>Simple page</h2>\n\n </body>\n</html>\n',
89
+ )
90
+ self.assertEqual(m.call_count, 2)
91
+ page.content = "Intercept me"
92
+ page.save_revision().publish()
93
+ m.reset_mock()
94
+ with self.assertNumQueries(expected_query_count):
95
+ # verify the same number of queries are used when the
96
+ # middleware activates to demonstrate Page.route_for_request()
97
+ # prevents extra database queries for serving pages
98
+ response_b = self.client.get("/simple/")
99
+ self.assertEqual(response_b.content, b"Intercepted")
100
+ self.assertEqual(m.call_count, 1)
@@ -28,7 +28,7 @@ class TestCheckUrl(TestCase):
28
28
 
29
29
  class TestAttributeRule(WagtailTestUtils, TestCase):
30
30
  def setUp(self):
31
- self.soup = self.get_soup('<b foo="bar">baz</b>', "html5lib")
31
+ self.soup = self.get_soup('<b foo="bar">baz</b>')
32
32
 
33
33
  def test_no_rule_for_attr(self):
34
34
  """
@@ -88,7 +88,7 @@ class TestAttributeRule(WagtailTestUtils, TestCase):
88
88
  attributes.
89
89
  """
90
90
  soup = self.get_soup(
91
- '<b foo="bar" baz="quux" snowman="barbecue"></b>', "html5lib"
91
+ '<b foo="bar" baz="quux" snowman="barbecue"></b>',
92
92
  )
93
93
  tag = soup.b
94
94
  allow_without_attributes(tag)
@@ -103,7 +103,7 @@ class TestWhitelister(WagtailTestUtils, TestCase):
103
103
  """
104
104
  Unknown node should remove a node from the parent document
105
105
  """
106
- soup = self.get_soup("<foo><bar>baz</bar>quux</foo>", "html5lib")
106
+ soup = self.get_soup("<foo><bar>baz</bar>quux</foo>")
107
107
  tag = soup.foo
108
108
  self.whitelister.clean_unknown_node("", soup.bar)
109
109
  self.assertEqual(str(tag), "<foo>quux</foo>")
@@ -113,7 +113,7 @@ class TestWhitelister(WagtailTestUtils, TestCase):
113
113
  <b> tags are allowed without attributes. This remains true
114
114
  when tags are nested.
115
115
  """
116
- soup = self.get_soup('<b><b class="delete me">foo</b></b>', "html5lib")
116
+ soup = self.get_soup('<b><b class="delete me">foo</b></b>')
117
117
  tag = soup.b
118
118
  self.whitelister.clean_tag_node(tag, tag)
119
119
  self.assertEqual(str(tag), "<b><b>foo</b></b>")
@@ -122,19 +122,19 @@ class TestWhitelister(WagtailTestUtils, TestCase):
122
122
  """
123
123
  <foo> tags should be removed, even when nested.
124
124
  """
125
- soup = self.get_soup("<b><foo>bar</foo></b>", "html5lib")
125
+ soup = self.get_soup("<b><foo>bar</foo></b>")
126
126
  tag = soup.b
127
127
  self.whitelister.clean_tag_node(tag, tag)
128
128
  self.assertEqual(str(tag), "<b>bar</b>")
129
129
 
130
130
  def test_clean_string_node_does_nothing(self):
131
- soup = self.get_soup("<b>bar</b>", "html5lib")
131
+ soup = self.get_soup("<b>bar</b>")
132
132
  string = soup.b.string
133
133
  self.whitelister.clean_string_node(string, string)
134
134
  self.assertEqual(str(string), "bar")
135
135
 
136
136
  def test_clean_node_does_not_change_navigable_strings(self):
137
- soup = self.get_soup("<b>bar</b>", "html5lib")
137
+ soup = self.get_soup("<b>bar</b>")
138
138
  string = soup.b.string
139
139
  self.whitelister.clean_node(string, string)
140
140
  self.assertEqual(str(string), "bar")
wagtail/users/forms.py CHANGED
@@ -297,7 +297,9 @@ class PagePermissionsForm(forms.Form):
297
297
  content_type__app_label="wagtailcore",
298
298
  content_type__model="page",
299
299
  codename__in=PAGE_PERMISSION_CODENAMES,
300
- ).order_by("codename"),
300
+ )
301
+ .select_related("content_type")
302
+ .order_by("codename"),
301
303
  # Use codename as the field to use for the option values rather than pk,
302
304
  # to minimise the changes needed since we moved to the Permission model
303
305
  # and to ease testing.
@@ -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: 2024-01-24 13:51+0000\n"
11
+ "POT-Creation-Date: 2024-04-18 17:28+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -66,7 +66,7 @@ msgstr ""
66
66
  msgid "Enter the same password as above, for verification."
67
67
  msgstr ""
68
68
 
69
- #: forms.py:103 forms.py:240
69
+ #: forms.py:103 forms.py:240 views/users.py:95
70
70
  msgid "Administrator"
71
71
  msgstr ""
72
72
 
@@ -78,7 +78,7 @@ msgstr ""
78
78
  msgid "A group with that name already exists."
79
79
  msgstr ""
80
80
 
81
- #: forms.py:369
81
+ #: forms.py:371
82
82
  msgid "You cannot have multiple permission records for the same page."
83
83
  msgstr ""
84
84
 
@@ -152,11 +152,23 @@ msgstr ""
152
152
  msgid "admin theme"
153
153
  msgstr ""
154
154
 
155
- #: models.py:101
155
+ #: models.py:88
156
+ msgid "Default"
157
+ msgstr ""
158
+
159
+ #: models.py:89
160
+ msgid "Snug"
161
+ msgstr ""
162
+
163
+ #: models.py:92
164
+ msgid "density"
165
+ msgstr ""
166
+
167
+ #: models.py:112
156
168
  msgid "user profile"
157
169
  msgstr ""
158
170
 
159
- #: models.py:102
171
+ #: models.py:113
160
172
  msgid "user profiles"
161
173
  msgstr ""
162
174
 
@@ -201,7 +213,7 @@ msgstr[1] ""
201
213
  #: templates/wagtailusers/bulk_actions/confirm_bulk_delete.html:7
202
214
  #: templates/wagtailusers/groups/includes/formatted_permissions.html:32
203
215
  #: templates/wagtailusers/groups/includes/page_permissions_form.html:13
204
- #: views/bulk_actions/delete.py:9 wagtail_hooks.py:160
216
+ #: views/bulk_actions/delete.py:9
205
217
  msgid "Delete"
206
218
  msgstr ""
207
219
 
@@ -268,26 +280,22 @@ msgid ""
268
280
  "users."
269
281
  msgstr ""
270
282
 
271
- #: templates/wagtailusers/groups/confirm_delete.html:18 views/groups.py:152
283
+ #: templates/wagtailusers/groups/confirm_delete.html:18 views/groups.py:144
272
284
  msgid "Are you sure you want to delete this group?"
273
285
  msgstr ""
274
286
 
275
- #: templates/wagtailusers/groups/create.html:27 views/groups.py:74
287
+ #: templates/wagtailusers/groups/create.html:21 views/groups.py:100
276
288
  msgid "Add group"
277
289
  msgstr ""
278
290
 
279
- #: templates/wagtailusers/groups/edit.html:11
280
- msgid "View users in this group"
281
- msgstr ""
282
-
283
- #: templates/wagtailusers/groups/edit.html:38
284
- #: templates/wagtailusers/users/edit.html:56
285
- #: templates/wagtailusers/users/edit.html:77
291
+ #: templates/wagtailusers/groups/edit.html:26
292
+ #: templates/wagtailusers/users/edit.html:48
293
+ #: templates/wagtailusers/users/edit.html:69
286
294
  msgid "Save"
287
295
  msgstr ""
288
296
 
289
- #: templates/wagtailusers/groups/edit.html:41 views/groups.py:115
290
- #: views/groups.py:151
297
+ #: templates/wagtailusers/groups/edit.html:29 views/groups.py:116
298
+ #: views/groups.py:143
291
299
  msgid "Delete group"
292
300
  msgstr ""
293
301
 
@@ -297,9 +305,8 @@ msgid "Object permissions"
297
305
  msgstr ""
298
306
 
299
307
  #: templates/wagtailusers/groups/includes/formatted_permissions.html:29
300
- #: templates/wagtailusers/groups/includes/formatted_permissions.html:122
301
- #: templates/wagtailusers/users/list.html:9
302
- #: templates/wagtailusers/users/list.html:13 views/groups.py:66
308
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:166
309
+ #: views/groups.py:92 views/users.py:149
303
310
  msgid "Name"
304
311
  msgstr ""
305
312
 
@@ -329,7 +336,39 @@ msgid "Custom permissions"
329
336
  msgstr ""
330
337
 
331
338
  #: templates/wagtailusers/groups/includes/formatted_permissions.html:112
339
+ msgid "Toggle all"
340
+ msgstr ""
341
+
332
342
  #: templates/wagtailusers/groups/includes/formatted_permissions.html:115
343
+ msgid "Toggle all add permissions"
344
+ msgstr ""
345
+
346
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:119
347
+ msgid "Toggle all change permissions"
348
+ msgstr ""
349
+
350
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:123
351
+ msgid "Toggle all delete permissions"
352
+ msgstr ""
353
+
354
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:128
355
+ msgid "Toggle all publish permissions"
356
+ msgstr ""
357
+
358
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:134
359
+ msgid "Toggle all lock permissions"
360
+ msgstr ""
361
+
362
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:140
363
+ msgid "Toggle all unlock permissions"
364
+ msgstr ""
365
+
366
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:146
367
+ msgid "Toggle all custom permissions"
368
+ msgstr ""
369
+
370
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:156
371
+ #: templates/wagtailusers/groups/includes/formatted_permissions.html:159
333
372
  msgid "Other permissions"
334
373
  msgstr ""
335
374
 
@@ -361,80 +400,41 @@ msgstr ""
361
400
  msgid "Are you sure you want to delete this user?"
362
401
  msgstr ""
363
402
 
364
- #: templates/wagtailusers/users/create.html:17
365
- #: templates/wagtailusers/users/edit.html:17
403
+ #: templates/wagtailusers/users/create.html:9
404
+ #: templates/wagtailusers/users/edit.html:9
366
405
  msgid "Account"
367
406
  msgstr ""
368
407
 
369
- #: templates/wagtailusers/users/create.html:19
370
- #: templates/wagtailusers/users/create.html:53
371
- #: templates/wagtailusers/users/edit.html:19
408
+ #: templates/wagtailusers/users/create.html:11
409
+ #: templates/wagtailusers/users/create.html:45
410
+ #: templates/wagtailusers/users/edit.html:11
372
411
  msgid "Roles"
373
412
  msgstr ""
374
413
 
375
- #: templates/wagtailusers/users/create.html:69 views/users.py:157
414
+ #: templates/wagtailusers/users/create.html:61 views/users.py:266
376
415
  msgid "Add user"
377
416
  msgstr ""
378
417
 
379
- #: templates/wagtailusers/users/edit.html:58
380
- #: templates/wagtailusers/users/edit.html:79 views/users.py:254
418
+ #: templates/wagtailusers/users/edit.html:50
419
+ #: templates/wagtailusers/users/edit.html:71 views/users.py:340
381
420
  msgid "Delete user"
382
421
  msgstr ""
383
422
 
384
- #: templates/wagtailusers/users/index.html:15
423
+ #: templates/wagtailusers/users/index.html:12
385
424
  msgid "Select all users in listing"
386
425
  msgstr ""
387
426
 
388
- #: templates/wagtailusers/users/index_results.html:10
389
- #, python-format
390
- msgid "Sorry, no users match \"<em>%(query_string)s</em>\""
427
+ #: templates/wagtailusers/users/index_results.html:6
428
+ msgid "Sorry, no users match your query"
391
429
  msgstr ""
392
430
 
393
- #: templates/wagtailusers/users/index_results.html:14
394
- #, python-format
395
- msgid ""
396
- "The %(group_name)s group has no users configured. Why not <a "
397
- "href=\"%(wagtailusers_add_url)s\">add some</a>?"
398
- msgstr ""
399
-
400
- #: templates/wagtailusers/users/index_results.html:17
431
+ #: templates/wagtailusers/users/index_results.html:8
401
432
  #, python-format
402
433
  msgid ""
403
434
  "There are no users configured. Why not <a "
404
435
  "href=\"%(wagtailusers_add_url)s\">add some</a>?"
405
436
  msgstr ""
406
437
 
407
- #: templates/wagtailusers/users/list.html:20
408
- #: templates/wagtailusers/users/list.html:24
409
- msgid "Username"
410
- msgstr ""
411
-
412
- #: templates/wagtailusers/users/list.html:28
413
- msgid "Access level"
414
- msgstr ""
415
-
416
- #: templates/wagtailusers/users/list.html:29
417
- msgid "Status"
418
- msgstr ""
419
-
420
- #: templates/wagtailusers/users/list.html:30
421
- msgid "Last Login"
422
- msgstr ""
423
-
424
- #: templates/wagtailusers/users/list.html:48
425
- msgid "Admin"
426
- msgstr ""
427
-
428
- #: templates/wagtailusers/users/list.html:51
429
- #: views/bulk_actions/set_active_state.py:11
430
- msgid "Active"
431
- msgstr ""
432
-
433
- #: templates/wagtailusers/users/list.html:54
434
- #: views/bulk_actions/set_active_state.py:11
435
- msgid "Inactive"
436
- msgstr ""
437
-
438
438
  #: utils.py:53
439
439
  #, python-format
440
440
  msgid "user %(id)s (deleted)"
@@ -462,6 +462,15 @@ msgid_plural "%(num_parent_objects)d users have been deleted"
462
462
  msgstr[0] ""
463
463
  msgstr[1] ""
464
464
 
465
+ #: views/bulk_actions/set_active_state.py:11 views/users.py:118
466
+ #: views/users.py:174
467
+ msgid "Active"
468
+ msgstr ""
469
+
470
+ #: views/bulk_actions/set_active_state.py:11 views/users.py:176
471
+ msgid "Inactive"
472
+ msgstr ""
473
+
465
474
  #: views/bulk_actions/set_active_state.py:12
466
475
  msgid "Mark as active"
467
476
  msgstr ""
@@ -484,74 +493,93 @@ msgid_plural "%(num_parent_objects)d users have been marked as inactive"
484
493
  msgstr[0] ""
485
494
  msgstr[1] ""
486
495
 
487
- #: views/groups.py:56 wagtail_hooks.py:100
496
+ #: views/groups.py:82 wagtail_hooks.py:93
488
497
  msgid "Groups"
489
498
  msgstr ""
490
499
 
491
- #: views/groups.py:57
500
+ #: views/groups.py:83
492
501
  msgid "Add a group"
493
502
  msgstr ""
494
503
 
495
- #: views/groups.py:58
504
+ #: views/groups.py:84
496
505
  msgid "Search groups"
497
506
  msgstr ""
498
507
 
499
- #: views/groups.py:75
508
+ #: views/groups.py:101
500
509
  #, python-format
501
510
  msgid "Group '%(object)s' created."
502
511
  msgstr ""
503
512
 
504
- #: views/groups.py:113
513
+ #: views/groups.py:114
505
514
  #, python-format
506
515
  msgid "Group '%(object)s' updated."
507
516
  msgstr ""
508
517
 
509
- #: views/groups.py:114
518
+ #: views/groups.py:115
510
519
  msgid "The group could not be saved due to errors."
511
520
  msgstr ""
512
521
 
513
- #: views/groups.py:150
522
+ #: views/groups.py:123
523
+ msgid "View users in this group"
524
+ msgstr ""
525
+
526
+ #: views/groups.py:142
514
527
  #, python-format
515
528
  msgid "Group '%(object)s' deleted."
516
529
  msgstr ""
517
530
 
518
- #: views/users.py:78
531
+ #: views/users.py:99 views/users.py:185
532
+ msgid "Last login"
533
+ msgstr ""
534
+
535
+ #: views/users.py:105
536
+ msgid "Group"
537
+ msgstr ""
538
+
539
+ #: views/users.py:135
519
540
  msgid "Add a user"
520
541
  msgstr ""
521
542
 
522
- #: views/users.py:86 wagtail_hooks.py:80 wagtail_hooks.py:138
543
+ #: views/users.py:138 wagtail_hooks.py:73 wagtail_hooks.py:131
523
544
  msgid "Users"
524
545
  msgstr ""
525
546
 
526
- #: views/users.py:156
527
- #, python-format
528
- msgid "User '%(object)s' created."
547
+ #: views/users.py:159
548
+ msgid "Username"
529
549
  msgstr ""
530
550
 
531
- #: views/users.py:189
532
- #, python-format
533
- msgid "User '%(object)s' updated."
551
+ #: views/users.py:166
552
+ msgid "Admin"
534
553
  msgstr ""
535
554
 
536
- #: views/users.py:191
537
- msgid "The user could not be saved due to errors."
555
+ #: views/users.py:167
556
+ msgid "Access level"
538
557
  msgstr ""
539
558
 
540
- #: views/users.py:256
559
+ #: views/users.py:178
560
+ msgid "Status"
561
+ msgstr ""
562
+
563
+ #: views/users.py:230
541
564
  #, python-format
542
- msgid "User '%(object)s' deleted."
565
+ msgid "More options for '%(title)s'"
543
566
  msgstr ""
544
567
 
545
- #: wagtail_hooks.py:149
546
- msgid "Edit"
568
+ #: views/users.py:265
569
+ #, python-format
570
+ msgid "User '%(object)s' created."
547
571
  msgstr ""
548
572
 
549
- #: wagtail_hooks.py:153
573
+ #: views/users.py:287
550
574
  #, python-format
551
- msgid "Edit user '%(name)s'"
575
+ msgid "User '%(object)s' updated."
552
576
  msgstr ""
553
577
 
554
- #: wagtail_hooks.py:164
578
+ #: views/users.py:288
579
+ msgid "The user could not be saved due to errors."
580
+ msgstr ""
581
+
582
+ #: views/users.py:341
555
583
  #, python-format
556
- msgid "Delete user '%(name)s'"
584
+ msgid "User '%(object)s' deleted."
557
585
  msgstr ""
@@ -0,0 +1,23 @@
1
+ # Generated by Django 4.2.9 on 2024-04-11 08:38
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("wagtailusers", "0012_userprofile_theme"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name="userprofile",
15
+ name="density",
16
+ field=models.CharField(
17
+ choices=[("default", "Default"), ("snug", "Snug")],
18
+ default="default",
19
+ max_length=40,
20
+ verbose_name="density",
21
+ ),
22
+ ),
23
+ ]
wagtail/users/models.py CHANGED
@@ -72,15 +72,26 @@ class UserProfile(models.Model):
72
72
 
73
73
  dismissibles = models.JSONField(default=dict, blank=True)
74
74
 
75
- class AdminThemes(models.TextChoices):
75
+ class AdminColorThemes(models.TextChoices):
76
76
  SYSTEM = "system", _("System default")
77
77
  LIGHT = "light", _("Light")
78
78
  DARK = "dark", _("Dark")
79
79
 
80
80
  theme = models.CharField(
81
81
  verbose_name=_("admin theme"),
82
- choices=AdminThemes.choices,
83
- default=AdminThemes.SYSTEM,
82
+ choices=AdminColorThemes.choices,
83
+ default=AdminColorThemes.SYSTEM,
84
+ max_length=40,
85
+ )
86
+
87
+ class AdminDensityThemes(models.TextChoices):
88
+ DEFAULT = "default", _("Default")
89
+ SNUG = "snug", _("Snug")
90
+
91
+ density = models.CharField(
92
+ verbose_name=_("density"),
93
+ choices=AdminDensityThemes.choices,
94
+ default=AdminDensityThemes.DEFAULT,
84
95
  max_length=40,
85
96
  )
86
97
 
@@ -1,12 +1,6 @@
1
- {% extends "wagtailadmin/generic/base.html" %}
1
+ {% extends "wagtailadmin/generic/create.html" %}
2
2
  {% load wagtailusers_tags i18n wagtailadmin_tags %}
3
3
 
4
- {% block extra_css %}
5
- {{ block.super }}
6
-
7
- {{ form_media.css }}
8
- {% endblock %}
9
-
10
4
  {% block main_content %}
11
5
  <form action="{% url 'wagtailusers_groups:add' %}" method="POST" novalidate>
12
6
  {% csrf_token %}
@@ -1,18 +1,6 @@
1
- {% extends "wagtailadmin/generic/base.html" %}
1
+ {% extends "wagtailadmin/generic/edit.html" %}
2
2
  {% load wagtailusers_tags wagtailadmin_tags i18n %}
3
3
 
4
- {% block extra_css %}
5
- {{ block.super }}
6
-
7
- {{ form_media.css }}
8
- {% endblock %}
9
-
10
- {% block main_header %}
11
- {% trans "View users in this group" as users_str %}
12
- {% url 'wagtailusers_groups:users' group.id as group_users_url %}
13
- {% include "wagtailadmin/shared/header.html" with title=page_title action_icon="user" action_url=group_users_url action_text=users_str subtitle=page_subtitle icon="group" %}
14
- {% endblock %}
15
-
16
4
  {% block main_content %}
17
5
  <form action="{% url 'wagtailusers_groups:edit' group.id %}" method="POST" novalidate>
18
6
  {% csrf_token %}
@@ -5,7 +5,7 @@
5
5
  <fieldset>
6
6
  <legend class="w-sr-only">{% trans "Object permissions" %}</legend>
7
7
 
8
- <table class="listing">
8
+ <table class="listing" data-controller="w-bulk">
9
9
  <colgroup>
10
10
  <col />
11
11
  <col width="10%" />
@@ -96,7 +96,7 @@
96
96
  <fieldset class="w-p-0">
97
97
  <legend class="w-sr-only">{% trans "Custom permissions" %}</legend>
98
98
  {% for custom_perm in content_perms_dict.custom %}
99
- {% include "wagtailadmin/shared/forms/single_checkbox.html" with name="permissions" value=custom_perm.perm.id checked=custom_perm.selected text=custom_perm.name %}
99
+ {% include "wagtailadmin/shared/forms/single_checkbox.html" with name="permissions" value=custom_perm.perm.id checked=custom_perm.selected text=custom_perm.name attrs=custom_perm.attrs %}
100
100
  {% endfor %}
101
101
  </fieldset>
102
102
  {% endif %}
@@ -105,6 +105,50 @@
105
105
  </tr>
106
106
  {% endfor %}
107
107
  </tbody>
108
+ <tfoot>
109
+ <tr>
110
+ <th scope="row">
111
+ <input id="toggle-all" type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all">
112
+ <label for="toggle-all" >{% trans "Toggle all" %}</label>
113
+ </th>
114
+ <td>
115
+ <label for="toggle-all-add" class="visuallyhidden">{% trans "Toggle all add permissions" %}</label>
116
+ <input id="toggle-all-add" type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" data-w-bulk-group-param="add">
117
+ </td>
118
+ <td>
119
+ <label for="toggle-all-change" class="visuallyhidden">{% trans "Toggle all change permissions" %}</label>
120
+ <input id="toggle-all-change" type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" data-w-bulk-group-param="change">
121
+ </td>
122
+ <td>
123
+ <label for="toggle-all-delete" class="visuallyhidden">{% trans "Toggle all delete permissions" %}</label>
124
+ <input id="toggle-all-delete" type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" data-w-bulk-group-param="delete">
125
+ </td>
126
+ {% if extra_perms_exist.publish %}
127
+ <td>
128
+ <label for="toggle-all-publish" class="visuallyhidden">{% trans "Toggle all publish permissions" %}</label>
129
+ <input id="toggle-all-publish" type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" data-w-bulk-group-param="publish">
130
+ </td>
131
+ {% endif %}
132
+ {% if extra_perms_exist.lock %}
133
+ <td>
134
+ <label for="toggle-all-lock" class="visuallyhidden">{% trans "Toggle all lock permissions" %}</label>
135
+ <input id="toggle-all-lock" type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" data-w-bulk-group-param="lock">
136
+ </td>
137
+ {% endif %}
138
+ {% if extra_perms_exist.unlock %}
139
+ <td>
140
+ <label for="toggle-all-unlock" class="visuallyhidden">{% trans "Toggle all unlock permissions" %}</label>
141
+ <input id="toggle-all-unlock" type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" data-w-bulk-group-param="unlock">
142
+ </td>
143
+ {% endif %}
144
+ {% if extra_perms_exist.custom %}
145
+ <td>
146
+ <label for="toggle-all-custom" class="visuallyhidden">{% trans "Toggle all custom permissions" %}</label>
147
+ <input id="toggle-all-custom" type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" data-w-bulk-group-param="custom">
148
+ </td>
149
+ {% endif %}
150
+ </tr>
151
+ </tfoot>
108
152
  </table>
109
153
  </fieldset>
110
154
  {% endpanel %}
@@ -1,5 +1,3 @@
1
1
  {% load wagtailadmin_tags %}
2
2
  <script src="{% versioned_static 'wagtailadmin/js/expanding-formset.js' %}"></script>
3
3
  <script src="{% versioned_static 'wagtailusers/js/group-form.js' %}"></script>
4
-
5
- {{ form_media.js }}