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/contrib/forms/views.py
CHANGED
|
@@ -6,13 +6,15 @@ from django.core.exceptions import PermissionDenied
|
|
|
6
6
|
from django.shortcuts import get_object_or_404, redirect
|
|
7
7
|
from django.urls import reverse
|
|
8
8
|
from django.utils.translation import gettext, gettext_lazy, ngettext
|
|
9
|
-
from django.views.generic import
|
|
9
|
+
from django.views.generic import TemplateView
|
|
10
|
+
from django_filters import DateFromToRangeFilter
|
|
10
11
|
|
|
11
12
|
from wagtail.admin import messages
|
|
13
|
+
from wagtail.admin.filters import DateRangePickerWidget, WagtailFilterSet
|
|
12
14
|
from wagtail.admin.ui.tables import Column, TitleColumn
|
|
13
15
|
from wagtail.admin.views import generic
|
|
16
|
+
from wagtail.admin.views.generic.base import BaseListingView
|
|
14
17
|
from wagtail.admin.views.mixins import SpreadsheetExportMixin
|
|
15
|
-
from wagtail.contrib.forms.forms import SelectDateForm
|
|
16
18
|
from wagtail.contrib.forms.utils import get_forms_for_user
|
|
17
19
|
from wagtail.models import Page
|
|
18
20
|
|
|
@@ -70,8 +72,6 @@ class FormPagesListView(generic.IndexView):
|
|
|
70
72
|
is_searchable = False
|
|
71
73
|
|
|
72
74
|
def get_breadcrumbs_items(self):
|
|
73
|
-
if not self.model:
|
|
74
|
-
return self.breadcrumbs_items
|
|
75
75
|
return self.breadcrumbs_items + [
|
|
76
76
|
{"url": "", "label": self.page_title, "sublabel": gettext("Pages")},
|
|
77
77
|
]
|
|
@@ -144,22 +144,36 @@ class DeleteSubmissionsView(TemplateView):
|
|
|
144
144
|
return context
|
|
145
145
|
|
|
146
146
|
|
|
147
|
-
class
|
|
147
|
+
class SubmissionsListFilterSet(WagtailFilterSet):
|
|
148
|
+
date = DateFromToRangeFilter(
|
|
149
|
+
label=gettext_lazy("Submission date"),
|
|
150
|
+
field_name="submit_time",
|
|
151
|
+
widget=DateRangePickerWidget,
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class SubmissionsListView(SpreadsheetExportMixin, BaseListingView):
|
|
148
156
|
"""Lists submissions for the provided form page"""
|
|
149
157
|
|
|
150
158
|
template_name = "wagtailforms/submissions_index.html"
|
|
159
|
+
results_template_name = "wagtailforms/list_submissions.html"
|
|
151
160
|
context_object_name = "submissions"
|
|
152
161
|
form_page = None
|
|
153
|
-
|
|
162
|
+
default_ordering = ("-submit_time",)
|
|
154
163
|
ordering_csv = ("submit_time",) # keep legacy CSV ordering
|
|
155
164
|
orderable_fields = (
|
|
156
165
|
"id",
|
|
157
166
|
"submit_time",
|
|
158
167
|
) # used to validate ordering in URL
|
|
159
168
|
page_title = gettext_lazy("Form data")
|
|
160
|
-
|
|
169
|
+
header_icon = "form"
|
|
161
170
|
paginate_by = 20
|
|
162
|
-
|
|
171
|
+
filterset_class = SubmissionsListFilterSet
|
|
172
|
+
forms_index_url_name = "wagtailforms:index"
|
|
173
|
+
index_url_name = "wagtailforms:list_submissions"
|
|
174
|
+
index_results_url_name = "wagtailforms:list_submissions_results"
|
|
175
|
+
_show_breadcrumbs = True
|
|
176
|
+
show_export_buttons = True
|
|
163
177
|
|
|
164
178
|
def dispatch(self, request, *args, **kwargs):
|
|
165
179
|
"""Check permissions and set the form page"""
|
|
@@ -177,29 +191,17 @@ class SubmissionsListView(SpreadsheetExportMixin, ListView):
|
|
|
177
191
|
|
|
178
192
|
return super().dispatch(request, *args, **kwargs)
|
|
179
193
|
|
|
180
|
-
def
|
|
181
|
-
|
|
194
|
+
def get_filterset_kwargs(self):
|
|
195
|
+
kwargs = super().get_filterset_kwargs()
|
|
196
|
+
kwargs["queryset"] = self.get_base_queryset()
|
|
197
|
+
return kwargs
|
|
198
|
+
|
|
199
|
+
def get_base_queryset(self):
|
|
200
|
+
"""Return queryset of form submissions"""
|
|
182
201
|
submission_class = self.form_page.get_submission_class()
|
|
183
202
|
queryset = submission_class._default_manager.filter(page=self.form_page)
|
|
184
|
-
|
|
185
|
-
filtering = self.get_filtering()
|
|
186
|
-
if filtering and isinstance(filtering, dict):
|
|
187
|
-
queryset = queryset.filter(**filtering)
|
|
188
|
-
|
|
189
|
-
ordering = self.get_ordering()
|
|
190
|
-
if ordering:
|
|
191
|
-
if isinstance(ordering, str):
|
|
192
|
-
ordering = (ordering,)
|
|
193
|
-
queryset = queryset.order_by(*ordering)
|
|
194
|
-
|
|
195
203
|
return queryset
|
|
196
204
|
|
|
197
|
-
def get_paginate_by(self, queryset):
|
|
198
|
-
"""Get the number of items to paginate by, or ``None`` for no pagination"""
|
|
199
|
-
if self.is_export:
|
|
200
|
-
return None
|
|
201
|
-
return self.paginate_by
|
|
202
|
-
|
|
203
205
|
def get_validated_ordering(self):
|
|
204
206
|
"""Return a dict of field names with ordering labels if ordering is valid"""
|
|
205
207
|
orderable_fields = self.orderable_fields or ()
|
|
@@ -208,7 +210,7 @@ class SubmissionsListView(SpreadsheetExportMixin, ListView):
|
|
|
208
210
|
# Revert to CSV order_by submit_time ascending for backwards compatibility
|
|
209
211
|
default_ordering = self.ordering_csv or ()
|
|
210
212
|
else:
|
|
211
|
-
default_ordering = self.
|
|
213
|
+
default_ordering = self.default_ordering or ()
|
|
212
214
|
if isinstance(default_ordering, str):
|
|
213
215
|
default_ordering = (default_ordering,)
|
|
214
216
|
ordering_strs = self.request.GET.getlist("order_by") or list(default_ordering)
|
|
@@ -229,25 +231,6 @@ class SubmissionsListView(SpreadsheetExportMixin, ListView):
|
|
|
229
231
|
ordering = self.get_validated_ordering()
|
|
230
232
|
return [values[0] + name for name, values in ordering.items()]
|
|
231
233
|
|
|
232
|
-
def get_filtering(self):
|
|
233
|
-
"""Return filering as a dict for submissions queryset"""
|
|
234
|
-
self.select_date_form = SelectDateForm(self.request.GET)
|
|
235
|
-
result = {}
|
|
236
|
-
if self.select_date_form.is_valid():
|
|
237
|
-
date_from = self.select_date_form.cleaned_data.get("date_from")
|
|
238
|
-
date_to = self.select_date_form.cleaned_data.get("date_to")
|
|
239
|
-
if date_to:
|
|
240
|
-
# careful: date_to must be increased by 1 day
|
|
241
|
-
# as submit_time is a time so will always be greater
|
|
242
|
-
date_to += datetime.timedelta(days=1)
|
|
243
|
-
if date_from:
|
|
244
|
-
result["submit_time__range"] = [date_from, date_to]
|
|
245
|
-
else:
|
|
246
|
-
result["submit_time__lte"] = date_to
|
|
247
|
-
elif date_from:
|
|
248
|
-
result["submit_time__gte"] = date_from
|
|
249
|
-
return result
|
|
250
|
-
|
|
251
234
|
def get_filename(self):
|
|
252
235
|
"""Returns the base filename for the generated spreadsheet data file"""
|
|
253
236
|
return "{}-export-{}".format(
|
|
@@ -268,6 +251,28 @@ class SubmissionsListView(SpreadsheetExportMixin, ListView):
|
|
|
268
251
|
)
|
|
269
252
|
return row_dict
|
|
270
253
|
|
|
254
|
+
def get_index_url(self):
|
|
255
|
+
return reverse(self.index_url_name, args=(self.form_page.id,))
|
|
256
|
+
|
|
257
|
+
def get_index_results_url(self):
|
|
258
|
+
return reverse(self.index_results_url_name, args=(self.form_page.id,))
|
|
259
|
+
|
|
260
|
+
def get_page_subtitle(self):
|
|
261
|
+
return self.form_page.get_admin_display_title()
|
|
262
|
+
|
|
263
|
+
def get_breadcrumbs_items(self):
|
|
264
|
+
return self.breadcrumbs_items + [
|
|
265
|
+
{
|
|
266
|
+
"url": reverse(self.forms_index_url_name),
|
|
267
|
+
"label": gettext("Forms"),
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"url": "",
|
|
271
|
+
"label": self.get_page_title(),
|
|
272
|
+
"sublabel": self.get_page_subtitle(),
|
|
273
|
+
},
|
|
274
|
+
]
|
|
275
|
+
|
|
271
276
|
def get_context_data(self, **kwargs):
|
|
272
277
|
"""Return context for view"""
|
|
273
278
|
context = super().get_context_data(**kwargs)
|
|
@@ -275,7 +280,6 @@ class SubmissionsListView(SpreadsheetExportMixin, ListView):
|
|
|
275
280
|
data_fields = self.form_page.get_data_fields()
|
|
276
281
|
data_rows = []
|
|
277
282
|
context["submissions"] = submissions
|
|
278
|
-
context["page_title"] = self.page_title
|
|
279
283
|
if not self.is_export:
|
|
280
284
|
# Build data_rows as list of dicts containing model_id and fields
|
|
281
285
|
for submission in submissions:
|
|
@@ -310,7 +314,6 @@ class SubmissionsListView(SpreadsheetExportMixin, ListView):
|
|
|
310
314
|
context.update(
|
|
311
315
|
{
|
|
312
316
|
"form_page": self.form_page,
|
|
313
|
-
"select_date_form": self.select_date_form,
|
|
314
317
|
"data_headings": data_headings,
|
|
315
318
|
"data_rows": data_rows,
|
|
316
319
|
}
|
|
Binary file
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
# David Llop, 2014
|
|
7
7
|
# David Llop, 2014
|
|
8
8
|
# David Llop, 2014
|
|
9
|
-
# Roger Pons <rogerpons@gmail.com>, 2017,2023
|
|
9
|
+
# Roger Pons <rogerpons@gmail.com>, 2017,2023-2024
|
|
10
10
|
msgid ""
|
|
11
11
|
msgstr ""
|
|
12
12
|
"Project-Id-Version: Wagtail\n"
|
|
13
13
|
"Report-Msgid-Bugs-To: \n"
|
|
14
14
|
"POT-Creation-Date: 2024-01-24 13:51+0000\n"
|
|
15
15
|
"PO-Revision-Date: 2014-02-20 21:04+0000\n"
|
|
16
|
-
"Last-Translator: Roger Pons <rogerpons@gmail.com>, 2017,2023\n"
|
|
16
|
+
"Last-Translator: Roger Pons <rogerpons@gmail.com>, 2017,2023-2024\n"
|
|
17
17
|
"Language-Team: Catalan (http://app.transifex.com/torchbox/wagtail/language/"
|
|
18
18
|
"ca/)\n"
|
|
19
19
|
"MIME-Version: 1.0\n"
|
|
@@ -243,7 +243,7 @@ msgid "The redirect could not be created due to errors."
|
|
|
243
243
|
msgstr "No s'ha pogut crear el redireccionament."
|
|
244
244
|
|
|
245
245
|
msgid "Search redirects"
|
|
246
|
-
msgstr "
|
|
246
|
+
msgstr "Cercar redireccions"
|
|
247
247
|
|
|
248
248
|
#, python-format
|
|
249
249
|
msgid "File format of type \"%(extension)s\" is not supported"
|
|
@@ -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-
|
|
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"
|
|
@@ -22,7 +22,8 @@ msgstr ""
|
|
|
22
22
|
msgid "Wagtail redirects"
|
|
23
23
|
msgstr ""
|
|
24
24
|
|
|
25
|
-
#: filters.py:12 templates/wagtailredirects/list.html:20 views.py:
|
|
25
|
+
#: filters.py:12 templates/wagtailredirects/list.html:20 views.py:102
|
|
26
|
+
#: views.py:466
|
|
26
27
|
msgid "Type"
|
|
27
28
|
msgstr ""
|
|
28
29
|
|
|
@@ -124,7 +125,7 @@ msgid "redirects"
|
|
|
124
125
|
msgstr ""
|
|
125
126
|
|
|
126
127
|
#: templates/wagtailredirects/add.html:3 templates/wagtailredirects/add.html:5
|
|
127
|
-
#:
|
|
128
|
+
#: views.py:69
|
|
128
129
|
msgid "Add redirect"
|
|
129
130
|
msgstr ""
|
|
130
131
|
|
|
@@ -133,16 +134,14 @@ msgstr ""
|
|
|
133
134
|
msgid "Save"
|
|
134
135
|
msgstr ""
|
|
135
136
|
|
|
136
|
-
#: templates/wagtailredirects/choose_import_file.html:3
|
|
137
|
-
#:
|
|
138
|
-
#: templates/wagtailredirects/index.html:10 wagtail_hooks.py:34
|
|
137
|
+
#: templates/wagtailredirects/choose_import_file.html:3 views.py:78
|
|
138
|
+
#: wagtail_hooks.py:34
|
|
139
139
|
msgid "Redirects"
|
|
140
140
|
msgstr ""
|
|
141
141
|
|
|
142
142
|
#: templates/wagtailredirects/choose_import_file.html:6
|
|
143
143
|
#: templates/wagtailredirects/confirm_import.html:6
|
|
144
|
-
#: templates/wagtailredirects/import_summary.html:5
|
|
145
|
-
#: templates/wagtailredirects/index.html:17
|
|
144
|
+
#: templates/wagtailredirects/import_summary.html:5 views.py:116
|
|
146
145
|
msgid "Import redirects"
|
|
147
146
|
msgstr ""
|
|
148
147
|
|
|
@@ -218,12 +217,12 @@ msgstr ""
|
|
|
218
217
|
|
|
219
218
|
#: templates/wagtailredirects/import_summary.html:17
|
|
220
219
|
#: templates/wagtailredirects/list.html:12
|
|
221
|
-
#: templates/wagtailredirects/list.html:15 views.py:
|
|
220
|
+
#: templates/wagtailredirects/list.html:15 views.py:84 views.py:463
|
|
222
221
|
msgid "From"
|
|
223
222
|
msgstr ""
|
|
224
223
|
|
|
225
224
|
#: templates/wagtailredirects/import_summary.html:18
|
|
226
|
-
#: templates/wagtailredirects/list.html:19 views.py:
|
|
225
|
+
#: templates/wagtailredirects/list.html:19 views.py:96 views.py:465
|
|
227
226
|
msgid "To"
|
|
228
227
|
msgstr ""
|
|
229
228
|
|
|
@@ -235,11 +234,19 @@ msgstr ""
|
|
|
235
234
|
msgid "Continue"
|
|
236
235
|
msgstr ""
|
|
237
236
|
|
|
238
|
-
#: templates/wagtailredirects/
|
|
239
|
-
|
|
237
|
+
#: templates/wagtailredirects/index_results.html:7
|
|
238
|
+
#, python-format
|
|
239
|
+
msgid "Sorry, no redirects match \"<em>%(query_string)s</em>\""
|
|
240
240
|
msgstr ""
|
|
241
241
|
|
|
242
|
-
#: templates/wagtailredirects/
|
|
242
|
+
#: templates/wagtailredirects/index_results.html:13
|
|
243
|
+
#, python-format
|
|
244
|
+
msgid ""
|
|
245
|
+
"No redirects have been created. Why not <a "
|
|
246
|
+
"href=\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
|
|
247
|
+
msgstr ""
|
|
248
|
+
|
|
249
|
+
#: templates/wagtailredirects/list.html:18 views.py:90 views.py:464
|
|
243
250
|
msgid "Site"
|
|
244
251
|
msgstr ""
|
|
245
252
|
|
|
@@ -252,78 +259,63 @@ msgstr ""
|
|
|
252
259
|
msgid "No redirects found."
|
|
253
260
|
msgstr ""
|
|
254
261
|
|
|
255
|
-
#:
|
|
256
|
-
|
|
257
|
-
msgid "There is %(counter)s match"
|
|
258
|
-
msgid_plural "There are %(counter)s matches"
|
|
259
|
-
msgstr[0] ""
|
|
260
|
-
msgstr[1] ""
|
|
261
|
-
|
|
262
|
-
#: templates/wagtailredirects/results.html:18
|
|
263
|
-
#, python-format
|
|
264
|
-
msgid "Sorry, no redirects match \"<em>%(query_string)s</em>\""
|
|
265
|
-
msgstr ""
|
|
266
|
-
|
|
267
|
-
#: templates/wagtailredirects/results.html:21
|
|
268
|
-
#, python-format
|
|
269
|
-
msgid ""
|
|
270
|
-
"No redirects have been created. Why not <a "
|
|
271
|
-
"href=\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
|
|
262
|
+
#: views.py:122
|
|
263
|
+
msgid "Export redirects"
|
|
272
264
|
msgstr ""
|
|
273
265
|
|
|
274
|
-
#: views.py:
|
|
266
|
+
#: views.py:147
|
|
275
267
|
#, python-format
|
|
276
268
|
msgid "Redirect '%(redirect_title)s' updated."
|
|
277
269
|
msgstr ""
|
|
278
270
|
|
|
279
|
-
#: views.py:
|
|
271
|
+
#: views.py:152 views.py:220
|
|
280
272
|
msgid "Edit"
|
|
281
273
|
msgstr ""
|
|
282
274
|
|
|
283
|
-
#: views.py:
|
|
275
|
+
#: views.py:158
|
|
284
276
|
msgid "The redirect could not be saved due to errors."
|
|
285
277
|
msgstr ""
|
|
286
278
|
|
|
287
|
-
#: views.py:
|
|
279
|
+
#: views.py:190
|
|
288
280
|
#, python-format
|
|
289
281
|
msgid "Redirect '%(redirect_title)s' deleted."
|
|
290
282
|
msgstr ""
|
|
291
283
|
|
|
292
|
-
#: views.py:
|
|
284
|
+
#: views.py:215
|
|
293
285
|
#, python-format
|
|
294
286
|
msgid "Redirect '%(redirect_title)s' added."
|
|
295
287
|
msgstr ""
|
|
296
288
|
|
|
297
|
-
#: views.py:
|
|
289
|
+
#: views.py:227
|
|
298
290
|
msgid "The redirect could not be created due to errors."
|
|
299
291
|
msgstr ""
|
|
300
292
|
|
|
301
|
-
#: views.py:
|
|
293
|
+
#: views.py:266
|
|
302
294
|
msgid "Search redirects"
|
|
303
295
|
msgstr ""
|
|
304
296
|
|
|
305
|
-
#: views.py:
|
|
297
|
+
#: views.py:280
|
|
306
298
|
#, python-format
|
|
307
299
|
msgid "File format of type \"%(extension)s\" is not supported"
|
|
308
300
|
msgstr ""
|
|
309
301
|
|
|
310
|
-
#: views.py:
|
|
302
|
+
#: views.py:297
|
|
311
303
|
#, python-format
|
|
312
304
|
msgid "Imported file has a wrong encoding: %(error_message)s"
|
|
313
305
|
msgstr ""
|
|
314
306
|
|
|
315
|
-
#: views.py:
|
|
307
|
+
#: views.py:304
|
|
316
308
|
#, python-format
|
|
317
309
|
msgid "%(error)s encountered while trying to read file: %(filename)s"
|
|
318
310
|
msgstr ""
|
|
319
311
|
|
|
320
|
-
#: views.py:
|
|
312
|
+
#: views.py:395
|
|
321
313
|
#, python-format
|
|
322
314
|
msgid "Imported %(total)d redirect"
|
|
323
315
|
msgid_plural "Imported %(total)d redirects"
|
|
324
316
|
msgstr[0] ""
|
|
325
317
|
msgstr[1] ""
|
|
326
318
|
|
|
327
|
-
#: views.py:
|
|
319
|
+
#: views.py:451
|
|
328
320
|
msgid "Export Redirects"
|
|
329
321
|
msgstr ""
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
# Axel Haustant, 2016
|
|
7
7
|
# Axel Haustant, 2016
|
|
8
8
|
# Bertrand Bordage <bordage.bertrand@gmail.com>, 2015,2017-2018
|
|
9
|
-
#
|
|
10
|
-
#
|
|
9
|
+
# 69c761fa404d2f74d5a7a2904d9e6f47_dc2dbc9 <f37077798760362881f9d396b6e22ec7_1878>, 2018
|
|
10
|
+
# 69c761fa404d2f74d5a7a2904d9e6f47_dc2dbc9 <f37077798760362881f9d396b6e22ec7_1878>, 2018
|
|
11
11
|
# Léo <leo@naeka.fr>, 2016
|
|
12
12
|
# Loic Teixeira, 2020-2022
|
|
13
13
|
# nahuel, 2014
|
|
Binary file
|
|
@@ -20,8 +20,8 @@ msgstr ""
|
|
|
20
20
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
21
21
|
"Content-Transfer-Encoding: 8bit\n"
|
|
22
22
|
"Language: he_IL\n"
|
|
23
|
-
"Plural-Forms: nplurals=
|
|
24
|
-
"1 == 0) ? 1:
|
|
23
|
+
"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % "
|
|
24
|
+
"1 == 0) ? 1: 2;\n"
|
|
25
25
|
|
|
26
26
|
msgid "Type"
|
|
27
27
|
msgstr "סוג"
|
|
@@ -134,7 +134,7 @@ def create_redirects(page: Page, page_old: Page, sites: Iterable[Site]) -> None:
|
|
|
134
134
|
# For bulk-creating redirects in batches
|
|
135
135
|
batch = BatchRedirectCreator(max_size=2000, ignore_conflicts=True)
|
|
136
136
|
|
|
137
|
-
# Treat the page that was updated / moved separately to it's
|
|
137
|
+
# Treat the page that was updated / moved separately to it's descendants,
|
|
138
138
|
# because there may be changes to fields other than `slug` or `url_path`
|
|
139
139
|
# that impact the URL.
|
|
140
140
|
old_urls = _page_urls_for_sites(page_old, sites, cache_target=page)
|
|
@@ -1,36 +1 @@
|
|
|
1
|
-
{% extends "wagtailadmin/
|
|
2
|
-
{% load i18n %}
|
|
3
|
-
{% load static wagtailadmin_tags %}
|
|
4
|
-
|
|
5
|
-
{% block bodyclass %}redirects{% endblock %}
|
|
6
|
-
|
|
7
|
-
{% block titletag %}{% trans "Redirects" %}{% endblock %}
|
|
8
|
-
|
|
9
|
-
{% block content %}
|
|
10
|
-
{% trans "Redirects" as redirects_str %}
|
|
11
|
-
{% url 'wagtailredirects:index' as search_results_url %}
|
|
12
|
-
{% if user_can_add %}
|
|
13
|
-
{% url "wagtailredirects:add" as add_link %}
|
|
14
|
-
{% trans "Add redirect" as add_str %}
|
|
15
|
-
{% url "wagtailredirects:start_import" as import_link %}
|
|
16
|
-
{% url "wagtailredirects:report" as report_link %}
|
|
17
|
-
{% trans "Import redirects" as import_str %}
|
|
18
|
-
{% trans "Export redirects" as export_str %}
|
|
19
|
-
{% fragment as redirect_actions %}
|
|
20
|
-
{% fragment as button %}
|
|
21
|
-
<a href="{{ import_link }}" class="button bicolor button--icon">{% icon name="doc-full-inverse" wrapped=1 %}{{ import_str }}</a>
|
|
22
|
-
{% endfragment %}
|
|
23
|
-
{% dropdown_button classname="w-ml-2.5" button=button toggle_icon="arrow-down" %}
|
|
24
|
-
<a class="button bicolor button--icon" href="{{ report_link }}">{% icon name="download" wrapped=1 %}{{ export_str }}</a>
|
|
25
|
-
{% enddropdown_button %}
|
|
26
|
-
{% endfragment %}
|
|
27
|
-
{% include "wagtailadmin/shared/header.html" with title=redirects_str icon="redirect" search_url="wagtailredirects:index" query_parameters=query_parameters action_url=add_link action_text=add_str action_icon="plus" extra_actions=redirect_actions search_results_url=search_results_url search_target="#redirects-results" %}
|
|
28
|
-
{% else %}
|
|
29
|
-
{% include "wagtailadmin/shared/header.html" with title=redirects_str icon="redirect" search_url="wagtailredirects:index" search_results_url=search_results_url search_target="#redirects-results" %}
|
|
30
|
-
{% endif %}
|
|
31
|
-
<div class="nice-padding">
|
|
32
|
-
<div id="redirects-results" class="redirects">
|
|
33
|
-
{% include "wagtailredirects/results.html" %}
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
{% endblock %}
|
|
1
|
+
{% extends "wagtailadmin/generic/index.html" %}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{% extends "wagtailadmin/generic/index_results.html" %}
|
|
2
|
+
{% load i18n %}
|
|
3
|
+
|
|
4
|
+
{% block no_results_message %}
|
|
5
|
+
{% if query_string %}
|
|
6
|
+
<p role="alert">
|
|
7
|
+
{% blocktrans trimmed %}
|
|
8
|
+
Sorry, no redirects match "<em>{{ query_string }}</em>"
|
|
9
|
+
{% endblocktrans %}
|
|
10
|
+
</p>
|
|
11
|
+
{% else %}
|
|
12
|
+
<p>
|
|
13
|
+
{% blocktrans trimmed with wagtailredirects_add_redirect_url=add_url %}
|
|
14
|
+
No redirects have been created. Why not <a href="{{ wagtailredirects_add_redirect_url }}">add one</a>?
|
|
15
|
+
{% endblocktrans %}
|
|
16
|
+
</p>
|
|
17
|
+
{% endif %}
|
|
18
|
+
{% endblock %}
|
|
@@ -241,7 +241,7 @@ class TestImportCommand(TestCase):
|
|
|
241
241
|
"wagtail.contrib.redirects.management.commands.import_redirects.get_input",
|
|
242
242
|
return_value="Y",
|
|
243
243
|
)
|
|
244
|
-
def
|
|
244
|
+
def test_successful_ask_imports_redirect(self, get_input):
|
|
245
245
|
invalid_file = tempfile.NamedTemporaryFile(mode="w+", encoding="utf-8")
|
|
246
246
|
invalid_file.write("from,to\n")
|
|
247
247
|
invalid_file.write("/alpha,http://omega.test/")
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from django.conf import settings
|
|
1
2
|
from django.test import TestCase, override_settings
|
|
2
3
|
from django.urls import reverse
|
|
3
4
|
|
|
@@ -7,6 +8,7 @@ from wagtail.log_actions import registry as log_registry
|
|
|
7
8
|
from wagtail.models import Page, Site
|
|
8
9
|
from wagtail.test.routablepage.models import RoutablePageTest
|
|
9
10
|
from wagtail.test.utils import WagtailTestUtils
|
|
11
|
+
from wagtail.test.utils.template_tests import AdminTemplateTestUtils
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
@override_settings(
|
|
@@ -200,6 +202,24 @@ class TestRedirects(TestCase):
|
|
|
200
202
|
response, "/redirectto", status_code=302, fetch_redirect_response=False
|
|
201
203
|
)
|
|
202
204
|
|
|
205
|
+
def test_redirect_without_trailing_slash(self):
|
|
206
|
+
# Create a redirect
|
|
207
|
+
redirect = models.Redirect(old_path="/redirectme", redirect_link="/redirectto")
|
|
208
|
+
redirect.save()
|
|
209
|
+
|
|
210
|
+
# confirm that CommonMiddleware's append-slash behaviour is enabled
|
|
211
|
+
self.assertTrue(settings.APPEND_SLASH)
|
|
212
|
+
|
|
213
|
+
response = self.client.get("/redirectme")
|
|
214
|
+
# Request should be picked up by RedirectMiddleware, not CommonMiddleware
|
|
215
|
+
# (which would redirect to /redirectme/ instead).
|
|
216
|
+
# Before Django 4.2, CommonMiddleware performed the 'add trailing slash' test
|
|
217
|
+
# during the initial request processing, which took precedence over RedirectMiddleware
|
|
218
|
+
# and caused a double redirect (/redirectme -> /redirectme/ -> /redirectto).
|
|
219
|
+
self.assertRedirects(
|
|
220
|
+
response, "/redirectto", status_code=301, fetch_redirect_response=False
|
|
221
|
+
)
|
|
222
|
+
|
|
203
223
|
def test_redirect_stripping_query_string(self):
|
|
204
224
|
# Create a redirect which includes a query string
|
|
205
225
|
redirect_with_query_string = models.Redirect(
|
|
@@ -572,7 +592,7 @@ class TestRedirects(TestCase):
|
|
|
572
592
|
self.assertIs(redirect.is_permanent, True)
|
|
573
593
|
|
|
574
594
|
|
|
575
|
-
class TestRedirectsIndexView(WagtailTestUtils, TestCase):
|
|
595
|
+
class TestRedirectsIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
|
|
576
596
|
def setUp(self):
|
|
577
597
|
self.login()
|
|
578
598
|
|
|
@@ -583,11 +603,24 @@ class TestRedirectsIndexView(WagtailTestUtils, TestCase):
|
|
|
583
603
|
response = self.get()
|
|
584
604
|
self.assertEqual(response.status_code, 200)
|
|
585
605
|
self.assertTemplateUsed(response, "wagtailredirects/index.html")
|
|
606
|
+
self.assertBreadcrumbsItemsRendered(
|
|
607
|
+
[{"url": "", "label": "Redirects"}],
|
|
608
|
+
response.content,
|
|
609
|
+
)
|
|
586
610
|
|
|
587
611
|
def test_search(self):
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
612
|
+
models.Redirect.objects.create(
|
|
613
|
+
old_path="/aaargh", redirect_link="http://torchbox.com/"
|
|
614
|
+
)
|
|
615
|
+
models.Redirect.objects.create(
|
|
616
|
+
old_path="/torchbox", redirect_link="http://aaargh.com/"
|
|
617
|
+
)
|
|
618
|
+
models.Redirect.objects.create(
|
|
619
|
+
old_path="/unrelated", redirect_link="http://unrelated.com/"
|
|
620
|
+
)
|
|
621
|
+
response = self.get({"q": "Aaargh"})
|
|
622
|
+
self.assertEqual(len(response.context["redirects"]), 2)
|
|
623
|
+
self.assertEqual(response.context["query_string"], "Aaargh")
|
|
591
624
|
|
|
592
625
|
def test_search_results(self):
|
|
593
626
|
models.Redirect.objects.create(
|
|
@@ -596,8 +629,15 @@ class TestRedirectsIndexView(WagtailTestUtils, TestCase):
|
|
|
596
629
|
models.Redirect.objects.create(
|
|
597
630
|
old_path="/torchbox", redirect_link="http://aaargh.com/"
|
|
598
631
|
)
|
|
599
|
-
|
|
632
|
+
models.Redirect.objects.create(
|
|
633
|
+
old_path="/unrelated", redirect_link="http://unrelated.com/"
|
|
634
|
+
)
|
|
635
|
+
response = self.client.get(
|
|
636
|
+
reverse("wagtailredirects:index_results"),
|
|
637
|
+
{"q": "Aaargh"},
|
|
638
|
+
)
|
|
600
639
|
self.assertEqual(len(response.context["redirects"]), 2)
|
|
640
|
+
self.assertEqual(response.context["query_string"], "Aaargh")
|
|
601
641
|
|
|
602
642
|
def test_pagination(self):
|
|
603
643
|
# page numbers in range should be accepted
|
|
@@ -607,7 +647,7 @@ class TestRedirectsIndexView(WagtailTestUtils, TestCase):
|
|
|
607
647
|
response = self.get({"p": 9999})
|
|
608
648
|
self.assertEqual(response.status_code, 404)
|
|
609
649
|
|
|
610
|
-
def
|
|
650
|
+
def test_default_ordering(self):
|
|
611
651
|
for i in range(0, 10):
|
|
612
652
|
models.Redirect.objects.create(
|
|
613
653
|
old_path="/redirect%d" % i, redirect_link="http://torchbox.com/"
|
|
@@ -621,6 +661,37 @@ class TestRedirectsIndexView(WagtailTestUtils, TestCase):
|
|
|
621
661
|
self.assertEqual(response.status_code, 200)
|
|
622
662
|
self.assertEqual(response.context["redirects"][0].old_path, "/aaargh")
|
|
623
663
|
|
|
664
|
+
def test_custom_orderings(self):
|
|
665
|
+
models.Redirect.objects.create(
|
|
666
|
+
old_path="/test", redirect_link="http://wagtail.org/"
|
|
667
|
+
)
|
|
668
|
+
valid_orderings = {
|
|
669
|
+
"old_path",
|
|
670
|
+
"-old_path",
|
|
671
|
+
"site__site_name",
|
|
672
|
+
"-site__site_name",
|
|
673
|
+
"is_permanent",
|
|
674
|
+
"-is_permanent",
|
|
675
|
+
}
|
|
676
|
+
for ordering in valid_orderings:
|
|
677
|
+
with self.subTest(ordering=ordering):
|
|
678
|
+
response = self.get({"ordering": ordering})
|
|
679
|
+
self.assertEqual(response.status_code, 200)
|
|
680
|
+
soup = self.get_soup(response.content)
|
|
681
|
+
links = {
|
|
682
|
+
reverse("wagtailredirects:index") + "?ordering=" + other
|
|
683
|
+
for other in valid_orderings
|
|
684
|
+
if not other.startswith("-")
|
|
685
|
+
and other != ordering
|
|
686
|
+
or other == f"-{ordering}"
|
|
687
|
+
}
|
|
688
|
+
for link in links:
|
|
689
|
+
self.assertIsNotNone(soup.find("a", {"href": link}))
|
|
690
|
+
self.assertEqual(
|
|
691
|
+
response.context["object_list"].query.order_by,
|
|
692
|
+
(ordering,),
|
|
693
|
+
)
|
|
694
|
+
|
|
624
695
|
|
|
625
696
|
class TestRedirectsAddView(WagtailTestUtils, TestCase):
|
|
626
697
|
fixtures = ["test.json"]
|
|
@@ -810,7 +881,7 @@ class TestRedirectsEditView(WagtailTestUtils, TestCase):
|
|
|
810
881
|
expected_url = "/admin/redirects/%d/" % self.redirect.id
|
|
811
882
|
self.assertEqual(url_finder.get_edit_url(self.redirect), expected_url)
|
|
812
883
|
|
|
813
|
-
def
|
|
884
|
+
def test_nonexistent_redirect(self):
|
|
814
885
|
self.assertEqual(self.get(redirect_id=100000).status_code, 404)
|
|
815
886
|
|
|
816
887
|
def test_edit(self):
|
|
@@ -914,7 +985,7 @@ class TestRedirectsDeleteView(WagtailTestUtils, TestCase):
|
|
|
914
985
|
self.assertEqual(response.status_code, 200)
|
|
915
986
|
self.assertTemplateUsed(response, "wagtailredirects/confirm_delete.html")
|
|
916
987
|
|
|
917
|
-
def
|
|
988
|
+
def test_nonexistent_redirect(self):
|
|
918
989
|
self.assertEqual(self.get(redirect_id=100000).status_code, 404)
|
|
919
990
|
|
|
920
991
|
def test_delete(self):
|
|
@@ -4,7 +4,8 @@ from wagtail.contrib.redirects import views
|
|
|
4
4
|
|
|
5
5
|
app_name = "wagtailredirects"
|
|
6
6
|
urlpatterns = [
|
|
7
|
-
path("", views.
|
|
7
|
+
path("", views.IndexView.as_view(), name="index"),
|
|
8
|
+
path("results/", views.IndexView.as_view(results_only=True), name="index_results"),
|
|
8
9
|
path("add/", views.add, name="add"),
|
|
9
10
|
path("<int:redirect_id>/", views.edit, name="edit"),
|
|
10
11
|
path("<int:redirect_id>/delete/", views.delete, name="delete"),
|