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.
- wagtail/__init__.py +1 -1
- wagtail/admin/checks.py +51 -0
- wagtail/admin/compare.py +1 -1
- wagtail/admin/filters.py +70 -1
- wagtail/admin/forms/account.py +1 -1
- wagtail/admin/forms/collections.py +15 -0
- wagtail/admin/forms/pages.py +49 -0
- wagtail/admin/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ca/LC_MESSAGES/django.po +122 -0
- wagtail/admin/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/de/LC_MESSAGES/django.po +5 -5
- wagtail/admin/locale/en/LC_MESSAGES/django.po +474 -385
- wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +3 -3
- wagtail/admin/locale/es/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/es/LC_MESSAGES/django.po +6 -6
- wagtail/admin/locale/fr/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/fr/LC_MESSAGES/django.po +70 -3
- wagtail/admin/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/he_IL/LC_MESSAGES/django.po +2 -6
- wagtail/admin/locale/he_IL/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/he_IL/LC_MESSAGES/djangojs.po +2 -2
- wagtail/admin/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/hr_HR/LC_MESSAGES/django.po +4 -0
- wagtail/admin/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/hu/LC_MESSAGES/django.po +142 -2
- wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/it/LC_MESSAGES/django.po +80 -8
- wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +14 -2
- wagtail/admin/locale/lv/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/lv/LC_MESSAGES/django.po +154 -1
- wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +73 -2
- wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ro/LC_MESSAGES/django.po +3 -3
- wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/sl/LC_MESSAGES/django.po +145 -2
- wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/sv/LC_MESSAGES/django.po +77 -3
- wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po +17 -1
- wagtail/admin/panels/comment_panel.py +1 -1
- wagtail/admin/panels/field_panel.py +1 -1
- wagtail/admin/rich_text/converters/editor_html.py +3 -1
- wagtail/admin/rich_text/editors/draftail/__init__.py +28 -2
- wagtail/admin/static/wagtailadmin/css/core.css +1 -1
- wagtail/admin/static/wagtailadmin/css/panels/draftail.css +1 -1
- wagtail/admin/static/wagtailadmin/images/favicon.ico +0 -0
- wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
- wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
- wagtail/admin/static/wagtailadmin/js/core.js +1 -1
- wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
- wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
- wagtail/admin/static/wagtailadmin/js/expanding-formset.js +1 -1
- wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
- wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/preview-panel.js +1 -1
- wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
- wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
- wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
- wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +4 -4
- wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
- wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
- wagtail/admin/staticfiles.py +1 -0
- wagtail/admin/templates/wagtailadmin/admin_base.html +1 -0
- wagtail/admin/templates/wagtailadmin/base.html +1 -0
- wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +3 -1
- wagtail/admin/templates/wagtailadmin/collections/edit.html +0 -1
- wagtail/admin/templates/wagtailadmin/collections/index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/generic/base.html +1 -9
- wagtail/admin/templates/wagtailadmin/generic/form.html +4 -2
- wagtail/admin/templates/wagtailadmin/generic/history/action_cell.html +27 -0
- wagtail/admin/templates/wagtailadmin/generic/index_results.html +8 -0
- wagtail/admin/templates/wagtailadmin/home/workflow_objects_to_moderate.html +3 -4
- wagtail/admin/templates/wagtailadmin/icons/keyboard.svg +1 -0
- wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +3 -1
- wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +0 -15
- wagtail/admin/templates/wagtailadmin/pages/action_menu/save_draft.html +3 -1
- wagtail/admin/templates/wagtailadmin/pages/choose_parent.html +17 -0
- wagtail/admin/templates/wagtailadmin/pages/explorable_index.html +8 -0
- wagtail/admin/templates/wagtailadmin/pages/history.html +1 -61
- wagtail/admin/templates/wagtailadmin/pages/index.html +1 -5
- wagtail/admin/templates/wagtailadmin/pages/listing/_locked_indicator.html +2 -2
- wagtail/admin/templates/wagtailadmin/pages/listing/_page_title_column_header.html +25 -27
- wagtail/admin/templates/wagtailadmin/pages/page_listing_header.html +2 -1
- wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
- wagtail/admin/templates/wagtailadmin/panels/publishing/schedule_publishing_panel.html +3 -1
- wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/active_filters.html +2 -1
- wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +8 -0
- wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/headers/page_edit_header.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +21 -9
- wagtail/admin/templates/wagtailadmin/shared/human_readable_date.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +29 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +2 -1
- wagtail/admin/templates/wagtailadmin/skeleton.html +2 -1
- wagtail/admin/templates/wagtailadmin/tables/related_objects_cell.html +9 -0
- wagtail/admin/templates/wagtailadmin/tables/title_cell.html +9 -7
- wagtail/admin/templates/wagtailadmin/widgets/draftail_rich_text_area.html +1 -1
- wagtail/admin/templates/wagtailadmin/workflows/create.html +6 -23
- wagtail/admin/templates/wagtailadmin/workflows/create_task.html +6 -15
- wagtail/admin/templates/wagtailadmin/workflows/edit.html +6 -23
- wagtail/admin/templates/wagtailadmin/workflows/edit_task.html +6 -13
- wagtail/admin/templates/wagtailadmin/workflows/includes/task_usage_cell.html +4 -4
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_tasks_cell.html +18 -0
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_title_cell.html +7 -0
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_used_by_cell.html +25 -0
- wagtail/admin/templates/wagtailadmin/workflows/index.html +0 -99
- wagtail/admin/templates/wagtailadmin/workflows/index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/workflows/task_index.html +0 -30
- wagtail/admin/templates/wagtailadmin/workflows/task_index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/workflows/usage.html +1 -1
- wagtail/admin/templatetags/wagtailadmin_tags.py +116 -39
- wagtail/admin/tests/api/test_pages.py +26 -10
- wagtail/admin/tests/pages/test_create_page.py +10 -4
- wagtail/admin/tests/pages/test_custom_listing.py +37 -0
- wagtail/admin/tests/pages/test_edit_page.py +6 -6
- wagtail/admin/tests/pages/test_explorer_view.py +19 -18
- wagtail/admin/tests/pages/test_move_page.py +1 -1
- wagtail/admin/tests/pages/test_page_usage.py +50 -2
- wagtail/admin/tests/pages/test_parent_page_chooser_view.py +119 -0
- wagtail/admin/tests/pages/test_preview.py +18 -4
- wagtail/admin/tests/test_account_management.py +20 -1
- wagtail/admin/tests/test_audit_log.py +172 -5
- wagtail/admin/tests/test_checks.py +92 -0
- wagtail/admin/tests/test_collections_views.py +19 -5
- wagtail/admin/tests/test_compare.py +6 -6
- wagtail/admin/tests/test_dashboard.py +404 -0
- wagtail/admin/tests/test_dbwhitelister.py +4 -5
- wagtail/admin/tests/test_edit_handlers.py +2 -2
- wagtail/admin/tests/test_keyboard_shortcuts.py +84 -0
- wagtail/admin/tests/test_page_chooser.py +31 -18
- wagtail/admin/tests/test_privacy.py +36 -2
- wagtail/admin/tests/test_rich_text.py +168 -23
- wagtail/admin/tests/test_templatetags.py +411 -43
- wagtail/admin/tests/test_views.py +4 -2
- wagtail/admin/tests/test_workflows.py +531 -9
- wagtail/admin/tests/tests.py +3 -1
- wagtail/admin/tests/ui/test_tables.py +48 -1
- wagtail/admin/tests/viewsets/test_model_viewset.py +130 -23
- wagtail/admin/ui/side_panels.py +3 -1
- wagtail/admin/ui/tables/__init__.py +13 -1
- wagtail/admin/ui/tables/pages.py +17 -6
- wagtail/admin/urls/__init__.py +8 -3
- wagtail/admin/urls/pages.py +5 -0
- wagtail/admin/urls/workflows.py +10 -0
- wagtail/admin/views/chooser.py +20 -24
- wagtail/admin/views/collections.py +17 -1
- wagtail/admin/views/generic/base.py +34 -4
- wagtail/admin/views/generic/history.py +220 -51
- wagtail/admin/views/generic/mixins.py +7 -4
- wagtail/admin/views/generic/models.py +54 -47
- wagtail/admin/views/generic/multiple_upload.py +17 -8
- wagtail/admin/views/generic/usage.py +17 -11
- wagtail/admin/views/home.py +15 -12
- wagtail/admin/views/mixins.py +30 -0
- wagtail/admin/views/pages/choose_parent.py +73 -0
- wagtail/admin/views/pages/history.py +54 -66
- wagtail/admin/views/pages/listing.py +187 -106
- wagtail/admin/views/pages/usage.py +6 -1
- wagtail/admin/views/pages/utils.py +70 -1
- wagtail/admin/views/workflows.py +150 -21
- wagtail/admin/viewsets/model.py +2 -2
- wagtail/admin/viewsets/pages.py +77 -0
- wagtail/admin/wagtail_hooks.py +40 -2
- wagtail/admin/widgets/button.py +10 -10
- wagtail/api/v2/filters.py +1 -1
- wagtail/api/v2/tests/test_pages.py +1 -1
- wagtail/blocks/base.py +18 -9
- wagtail/blocks/field_block.py +9 -7
- wagtail/blocks/list_block.py +16 -6
- wagtail/blocks/static_block.py +3 -0
- wagtail/blocks/stream_block.py +58 -23
- wagtail/blocks/struct_block.py +15 -9
- wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +39 -47
- wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/forms/models.py +5 -5
- wagtail/contrib/forms/templates/wagtailforms/list_submissions.html +44 -33
- wagtail/contrib/forms/templates/wagtailforms/submissions_index.html +2 -63
- wagtail/contrib/forms/tests/test_models.py +26 -0
- wagtail/contrib/forms/urls.py +6 -0
- wagtail/contrib/forms/views.py +52 -49
- wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +3 -3
- wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +34 -42
- wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/redirects/signal_handlers.py +1 -1
- wagtail/contrib/redirects/templates/wagtailredirects/index.html +1 -36
- wagtail/contrib/redirects/templates/wagtailredirects/index_results.html +18 -0
- wagtail/contrib/redirects/templates/wagtailredirects/redirect_target_cell.html +8 -0
- wagtail/contrib/redirects/tests/test_import_command.py +1 -1
- wagtail/contrib/redirects/tests/test_redirects.py +79 -8
- wagtail/contrib/redirects/urls.py +2 -1
- wagtail/contrib/redirects/views.py +85 -55
- wagtail/contrib/search_promotions/admin_urls.py +2 -1
- wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +41 -64
- wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.po +41 -2
- wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +9 -3
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index.html +1 -16
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index_results.html +11 -0
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/list.html +0 -51
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/results.html +3 -16
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/search_promotion_column.html +15 -0
- wagtail/contrib/search_promotions/tests.py +122 -9
- wagtail/contrib/search_promotions/views.py +66 -65
- wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +3 -3
- wagtail/contrib/settings/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/settings/locale/tr/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/tr/LC_MESSAGES/django.po +6 -2
- wagtail/contrib/settings/registry.py +10 -5
- wagtail/contrib/settings/tests/generic/test_admin.py +9 -0
- wagtail/contrib/settings/tests/site_specific/test_admin.py +10 -1
- wagtail/contrib/settings/tests/site_specific/test_model.py +3 -3
- wagtail/contrib/settings/tests/site_specific/test_templates.py +1 -1
- wagtail/contrib/settings/views.py +3 -1
- wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/simple_translation/tests/test_wagtail_hooks.py +2 -2
- wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
- wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/table_block/blocks.py +2 -2
- wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.po +27 -2
- wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/table_block/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/hu/LC_MESSAGES/django.po +27 -2
- wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +27 -2
- wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
- wagtail/contrib/table_block/tests.py +6 -0
- wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.po +12 -2
- wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.po +12 -2
- wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.po +12 -2
- wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
- wagtail/coreutils.py +3 -2
- wagtail/documents/admin_urls.py +2 -2
- wagtail/documents/locale/en/LC_MESSAGES/django.po +22 -22
- wagtail/documents/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/documents/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/documents/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/hr_HR/LC_MESSAGES/django.po +19 -2
- wagtail/documents/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/hu/LC_MESSAGES/django.po +16 -2
- wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/it/LC_MESSAGES/django.po +19 -2
- wagtail/documents/migrations/0013_delete_uploadeddocument.py +16 -0
- wagtail/documents/models.py +1 -20
- wagtail/documents/rich_text/__init__.py +11 -7
- wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
- wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
- wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
- wagtail/documents/templates/wagtaildocs/documents/index.html +0 -16
- wagtail/documents/tests/test_admin_views.py +155 -23
- wagtail/documents/tests/test_collection_privacy.py +55 -1
- wagtail/documents/tests/test_rich_text.py +14 -0
- wagtail/documents/views/documents.py +25 -22
- wagtail/documents/views/multiple.py +6 -7
- wagtail/documents/views/serve.py +16 -1
- wagtail/documents/wagtail_hooks.py +20 -15
- wagtail/embeds/blocks.py +5 -0
- wagtail/embeds/locale/en/LC_MESSAGES/django.po +2 -2
- wagtail/embeds/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/embeds/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/embeds/rich_text/__init__.py +1 -1
- wagtail/embeds/tests/test_rich_text.py +14 -0
- wagtail/embeds/wagtail_hooks.py +4 -14
- wagtail/fields.py +3 -48
- wagtail/images/admin_urls.py +2 -2
- wagtail/images/check_files/wagtail.jpg +0 -0
- wagtail/images/check_files/wagtail.png +0 -0
- wagtail/images/fields.py +2 -0
- wagtail/images/image_operations.py +1 -1
- wagtail/images/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/ca/LC_MESSAGES/django.po +12 -0
- wagtail/images/locale/en/LC_MESSAGES/django.po +33 -45
- wagtail/images/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/images/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/images/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/hu/LC_MESSAGES/django.po +28 -2
- wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/it/LC_MESSAGES/django.po +14 -2
- wagtail/images/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +4 -0
- wagtail/images/migrations/0026_delete_uploadedimage.py +16 -0
- wagtail/images/models.py +49 -43
- wagtail/images/rich_text/__init__.py +18 -8
- wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
- wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
- wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
- wagtail/images/templates/wagtailimages/images/image_listing_header.html +6 -0
- wagtail/images/templates/wagtailimages/images/index.html +11 -51
- wagtail/images/tests/test_admin_views.py +119 -62
- wagtail/images/tests/test_image_operations.py +10 -0
- wagtail/images/tests/test_models.py +35 -33
- wagtail/images/tests/test_rich_text.py +14 -0
- wagtail/images/tests/utils.py +1 -1
- wagtail/images/views/images.py +35 -64
- wagtail/images/views/multiple.py +6 -7
- wagtail/images/wagtail_hooks.py +4 -14
- wagtail/locale/en/LC_MESSAGES/django.po +150 -136
- wagtail/locale/es/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/es/LC_MESSAGES/django.po +3 -2
- wagtail/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/it/LC_MESSAGES/django.po +5 -5
- wagtail/locale/sl/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/sl/LC_MESSAGES/django.po +27 -2
- wagtail/locales/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/bg/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/de/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/et/LC_MESSAGES/django.po +2 -2
- wagtail/locales/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/he_IL/LC_MESSAGES/django.po +3 -3
- wagtail/locales/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/it/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ru/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/sv/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/locales/tests.py +18 -3
- wagtail/locales/views.py +0 -1
- wagtail/management/commands/rebuild_references_index.py +3 -1
- wagtail/migrations/0092_alter_collectionviewrestriction_password_and_more.py +33 -0
- wagtail/migrations/0093_uploadedfile.py +53 -0
- wagtail/models/__init__.py +147 -32
- wagtail/models/i18n.py +1 -1
- wagtail/models/{collections.py → media.py} +33 -2
- wagtail/models/reference_index.py +1 -1
- wagtail/models/view_restrictions.py +10 -3
- wagtail/project_template/project_name/settings/base.py +6 -0
- wagtail/project_template/requirements.txt +1 -1
- wagtail/rich_text/__init__.py +25 -8
- wagtail/rich_text/pages.py +19 -8
- wagtail/rich_text/rewriters.py +140 -68
- wagtail/search/backends/database/mysql/mysql.py +3 -3
- wagtail/search/backends/database/postgres/postgres.py +3 -3
- wagtail/search/backends/database/sqlite/sqlite.py +2 -2
- wagtail/search/backends/elasticsearch7.py +4 -0
- wagtail/search/locale/en/LC_MESSAGES/django.po +3 -3
- wagtail/search/tests/test_postgres_backend.py +50 -0
- wagtail/sites/locale/en/LC_MESSAGES/django.po +8 -8
- wagtail/sites/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/sites/locale/ro/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/ro/LC_MESSAGES/django.po +3 -2
- wagtail/sites/tests.py +35 -9
- wagtail/sites/views.py +3 -1
- wagtail/snippets/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/de/LC_MESSAGES/django.po +7 -8
- wagtail/snippets/locale/en/LC_MESSAGES/django.po +16 -56
- wagtail/snippets/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/snippets/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.po +6 -2
- wagtail/snippets/locale/lv/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/lv/LC_MESSAGES/django.po +12 -0
- wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po +4 -0
- wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
- wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/publish.html +3 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/save.html +3 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/create.html +2 -3
- wagtail/snippets/templates/wagtailsnippets/snippets/edit.html +2 -3
- wagtail/snippets/tests/test_preview.py +13 -2
- wagtail/snippets/tests/test_snippets.py +41 -16
- wagtail/snippets/tests/test_viewset.py +95 -18
- wagtail/snippets/tests/test_workflows.py +12 -0
- wagtail/snippets/views/snippets.py +1 -40
- wagtail/templatetags/wagtailcore_tags.py +1 -1
- wagtail/test/demosite/models.py +1 -1
- wagtail/test/middleware.py +14 -1
- wagtail/test/testapp/fixtures/test.json +20 -0
- wagtail/test/testapp/migrations/0001_squashed_0073_revisablechildmodel_secret_text.py +8 -8
- wagtail/test/testapp/migrations/0023_snippetchoosermodel_full_featured.py +1 -0
- wagtail/test/testapp/migrations/0034_custompermissionmodel.py +44 -0
- wagtail/test/testapp/migrations/0035_modelwithcustommanager.py +30 -0
- wagtail/test/testapp/migrations/0036_complexdefaultstreampage.py +28 -0
- wagtail/test/testapp/models.py +79 -2
- wagtail/test/testapp/templates/tests/custom_docs_password_required.html +10 -0
- wagtail/test/testapp/templates/tests/custom_page_password_required.html +10 -0
- wagtail/test/testapp/views.py +24 -2
- wagtail/test/testapp/wagtail_hooks.py +19 -0
- wagtail/test/utils/wagtail_tests.py +2 -2
- wagtail/tests/test_blocks.py +262 -1
- wagtail/tests/test_migrations.py +1 -1
- wagtail/tests/test_page_model.py +77 -0
- wagtail/tests/test_page_privacy.py +18 -1
- wagtail/tests/test_rich_text.py +95 -5
- wagtail/tests/test_streamfield.py +43 -0
- wagtail/tests/test_utils.py +8 -2
- wagtail/tests/test_views.py +52 -1
- wagtail/tests/test_whitelist.py +7 -7
- wagtail/users/forms.py +3 -1
- wagtail/users/locale/en/LC_MESSAGES/django.po +124 -96
- wagtail/users/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/users/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/users/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/hr_HR/LC_MESSAGES/django.po +13 -2
- wagtail/users/migrations/0013_userprofile_density.py +23 -0
- wagtail/users/models.py +14 -3
- wagtail/users/templates/wagtailusers/groups/create.html +1 -7
- wagtail/users/templates/wagtailusers/groups/edit.html +1 -13
- wagtail/users/templates/wagtailusers/groups/includes/formatted_permissions.html +46 -2
- wagtail/users/templates/wagtailusers/groups/includes/group_form_js.html +0 -3
- wagtail/users/templates/wagtailusers/users/create.html +1 -14
- wagtail/users/templates/wagtailusers/users/edit.html +1 -14
- wagtail/users/templates/wagtailusers/users/index.html +2 -5
- wagtail/users/templates/wagtailusers/users/index_results.html +3 -13
- wagtail/users/templates/wagtailusers/users/user_cell.html +9 -0
- wagtail/users/templatetags/wagtailusers_tags.py +107 -20
- wagtail/users/tests/test_admin_views.py +669 -90
- wagtail/users/views/groups.py +58 -61
- wagtail/users/views/users.py +211 -92
- wagtail/users/wagtail_hooks.py +6 -38
- wagtail/users/widgets.py +3 -5
- wagtail/utils/text.py +1 -1
- wagtail/views.py +5 -9
- wagtail/whitelist.py +1 -1
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/METADATA +5 -6
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/RECORD +496 -477
- wagtail/admin/static/wagtailadmin/js/page-editor.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/mousetrap.min.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/urlify.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/xregexp.min.js +0 -1
- wagtail/admin/templates/wagtailadmin/collections/index.html +0 -34
- wagtail/admin/templates/wagtailadmin/pages/revisions/_actions.html +0 -22
- wagtail/admin/templates/wagtailadmin/shared/page_breadcrumbs.html +0 -55
- wagtail/admin/tests/pages/test_dashboard.py +0 -172
- wagtail/contrib/redirects/templates/wagtailredirects/results.html +0 -23
- wagtail/documents/templates/wagtaildocs/documents/list.html +0 -2
- wagtail/search/tests/test_postgres_stemming.py +0 -40
- wagtail/sites/templates/wagtailsites/create.html +0 -7
- wagtail/sites/templates/wagtailsites/edit.html +0 -7
- wagtail/snippets/templates/wagtailsnippets/snippets/revisions/_actions.html +0 -36
- wagtail/users/templates/wagtailusers/users/list.html +0 -62
- wagtail/users/urls/users.py +0 -12
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/LICENSE +0 -0
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/WHEEL +0 -0
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/entry_points.txt +0 -0
- {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,
|
|
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.
|
|
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 = ["
|
|
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
|
+
)
|
wagtail/admin/forms/account.py
CHANGED
|
@@ -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")
|
wagtail/admin/forms/pages.py
CHANGED
|
@@ -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
|
|
Binary file
|
|
@@ -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
|
|
|
Binary file
|
|
@@ -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
|
-
"
|
|
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
|
|
407
|
+
msgstr "1 Element ausgewählt"
|
|
408
408
|
|
|
409
409
|
#, python-format
|
|
410
410
|
msgid "%(objects)s snippets selected"
|
|
411
|
-
msgstr "%(objects)s
|
|
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
|
|
415
|
+
msgstr "Alle %(objects)s Elemente auf dem Bildschirm ausgewählt"
|
|
416
416
|
|
|
417
417
|
msgid "All snippets in listing selected"
|
|
418
|
-
msgstr "Alle
|
|
418
|
+
msgstr "Alle Elemente der Auflistung ausgewählt"
|
|
419
419
|
|
|
420
420
|
msgid "1 item selected"
|
|
421
421
|
msgstr "1 Element ausgewählt"
|