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/blocks/static_block.py
CHANGED
wagtail/blocks/stream_block.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import itertools
|
|
2
|
+
import json
|
|
2
3
|
import uuid
|
|
3
4
|
from collections import OrderedDict, defaultdict
|
|
4
5
|
from collections.abc import Mapping, MutableSequence
|
|
@@ -88,16 +89,8 @@ class BaseStreamBlock(Block):
|
|
|
88
89
|
block.set_name(name)
|
|
89
90
|
self.child_blocks[name] = block
|
|
90
91
|
|
|
91
|
-
def
|
|
92
|
-
|
|
93
|
-
Default values set on a StreamBlock should be a list of (type_name, value) tuples -
|
|
94
|
-
we can't use StreamValue directly, because that would require a reference back to
|
|
95
|
-
the StreamBlock that hasn't been built yet.
|
|
96
|
-
|
|
97
|
-
For consistency, then, we need to convert it to a StreamValue here for StreamBlock
|
|
98
|
-
to work with.
|
|
99
|
-
"""
|
|
100
|
-
return StreamValue(self, self.meta.default)
|
|
92
|
+
def empty_value(self, raw_text=None):
|
|
93
|
+
return StreamValue(self, [], raw_text=raw_text)
|
|
101
94
|
|
|
102
95
|
def sorted_child_blocks(self):
|
|
103
96
|
"""Child blocks, sorted in to their groups."""
|
|
@@ -230,19 +223,58 @@ class BaseStreamBlock(Block):
|
|
|
230
223
|
return StreamValue(self, cleaned_data)
|
|
231
224
|
|
|
232
225
|
def to_python(self, value):
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
226
|
+
if isinstance(value, StreamValue):
|
|
227
|
+
return value
|
|
228
|
+
elif isinstance(value, str) and value:
|
|
229
|
+
try:
|
|
230
|
+
value = json.loads(value)
|
|
231
|
+
except ValueError:
|
|
232
|
+
# value is not valid JSON; most likely, this field was previously a
|
|
233
|
+
# rich text field before being migrated to StreamField, and the data
|
|
234
|
+
# was left intact in the migration. Return an empty stream instead
|
|
235
|
+
# (but keep the raw text available as an attribute, so that it can be
|
|
236
|
+
# used to migrate that data to StreamField)
|
|
237
|
+
return self.empty_value(raw_text=value)
|
|
238
|
+
|
|
239
|
+
if not value:
|
|
240
|
+
return self.empty_value()
|
|
241
|
+
|
|
242
|
+
# ensure value is a list and not some other kind of iterable
|
|
243
|
+
value = list(value)
|
|
244
|
+
|
|
245
|
+
if isinstance(value[0], dict):
|
|
246
|
+
# value is in JSONish representation - a dict with 'type' and 'value' keys.
|
|
247
|
+
# This is passed to StreamValue to be expanded lazily - but first we reject any unrecognised
|
|
248
|
+
# block types from the list
|
|
249
|
+
return StreamValue(
|
|
250
|
+
self,
|
|
251
|
+
[
|
|
252
|
+
child_data
|
|
253
|
+
for child_data in value
|
|
254
|
+
if child_data["type"] in self.child_blocks
|
|
255
|
+
],
|
|
256
|
+
is_lazy=True,
|
|
257
|
+
)
|
|
258
|
+
else:
|
|
259
|
+
# See if it looks like the standard non-smart representation of a
|
|
260
|
+
# StreamField value: a list of (block_name, value) tuples
|
|
261
|
+
try:
|
|
262
|
+
[None for (x, y) in value]
|
|
263
|
+
except (TypeError, ValueError) as exc:
|
|
264
|
+
# Give up trying to make sense of the value
|
|
265
|
+
raise TypeError(
|
|
266
|
+
f"Cannot handle {value!r} (type {type(value)!r}) as a value of a StreamBlock"
|
|
267
|
+
) from exc
|
|
268
|
+
|
|
269
|
+
# Test succeeded, so return as a StreamValue-ified version of that value
|
|
270
|
+
return StreamValue(
|
|
271
|
+
self,
|
|
272
|
+
[
|
|
273
|
+
(k, self.child_blocks[k].normalize(v))
|
|
274
|
+
for k, v in value
|
|
275
|
+
if k in self.child_blocks
|
|
276
|
+
],
|
|
277
|
+
)
|
|
246
278
|
|
|
247
279
|
def bulk_to_python(self, values):
|
|
248
280
|
# 'values' is a list of streams, each stream being a list of dicts with 'type', 'value' and
|
|
@@ -304,6 +336,9 @@ class BaseStreamBlock(Block):
|
|
|
304
336
|
# round-trips to the full data representation and back)
|
|
305
337
|
return value.get_prep_value()
|
|
306
338
|
|
|
339
|
+
def normalize(self, value):
|
|
340
|
+
return self.to_python(value)
|
|
341
|
+
|
|
307
342
|
def get_form_state(self, value):
|
|
308
343
|
if not value:
|
|
309
344
|
return []
|
wagtail/blocks/struct_block.py
CHANGED
|
@@ -125,16 +125,14 @@ class BaseStructBlock(Block):
|
|
|
125
125
|
rather than a StructValue; for consistency, we need to convert it to a StructValue
|
|
126
126
|
for StructBlock to work with
|
|
127
127
|
"""
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
else block.get_default(),
|
|
135
|
-
)
|
|
128
|
+
|
|
129
|
+
return self.normalize(
|
|
130
|
+
{
|
|
131
|
+
name: self.meta.default[name]
|
|
132
|
+
if name in self.meta.default
|
|
133
|
+
else block.get_default()
|
|
136
134
|
for name, block in self.child_blocks.items()
|
|
137
|
-
|
|
135
|
+
}
|
|
138
136
|
)
|
|
139
137
|
|
|
140
138
|
def value_from_datadict(self, data, files, prefix):
|
|
@@ -238,6 +236,14 @@ class BaseStructBlock(Block):
|
|
|
238
236
|
for name, val in value.items()
|
|
239
237
|
}
|
|
240
238
|
|
|
239
|
+
def normalize(self, value):
|
|
240
|
+
if isinstance(value, self.meta.value_class):
|
|
241
|
+
return value
|
|
242
|
+
|
|
243
|
+
return self._to_struct_value(
|
|
244
|
+
{k: self.child_blocks[k].normalize(v) for k, v in value.items()}
|
|
245
|
+
)
|
|
246
|
+
|
|
241
247
|
def get_form_state(self, value):
|
|
242
248
|
return {
|
|
243
249
|
name: self.child_blocks[name].get_form_state(val)
|
|
@@ -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"
|
|
@@ -37,118 +37,118 @@ msgid ""
|
|
|
37
37
|
"them."
|
|
38
38
|
msgstr ""
|
|
39
39
|
|
|
40
|
-
#: models.py:
|
|
40
|
+
#: models.py:20
|
|
41
41
|
msgid "Single line text"
|
|
42
42
|
msgstr ""
|
|
43
43
|
|
|
44
|
-
#: models.py:
|
|
44
|
+
#: models.py:21
|
|
45
45
|
msgid "Multi-line text"
|
|
46
46
|
msgstr ""
|
|
47
47
|
|
|
48
|
-
#: models.py:
|
|
48
|
+
#: models.py:22
|
|
49
49
|
msgid "Email"
|
|
50
50
|
msgstr ""
|
|
51
51
|
|
|
52
|
-
#: models.py:
|
|
52
|
+
#: models.py:23
|
|
53
53
|
msgid "Number"
|
|
54
54
|
msgstr ""
|
|
55
55
|
|
|
56
|
-
#: models.py:
|
|
56
|
+
#: models.py:24
|
|
57
57
|
msgid "URL"
|
|
58
58
|
msgstr ""
|
|
59
59
|
|
|
60
|
-
#: models.py:
|
|
60
|
+
#: models.py:25
|
|
61
61
|
msgid "Checkbox"
|
|
62
62
|
msgstr ""
|
|
63
63
|
|
|
64
|
-
#: models.py:
|
|
64
|
+
#: models.py:26
|
|
65
65
|
msgid "Checkboxes"
|
|
66
66
|
msgstr ""
|
|
67
67
|
|
|
68
|
-
#: models.py:
|
|
68
|
+
#: models.py:27
|
|
69
69
|
msgid "Drop down"
|
|
70
70
|
msgstr ""
|
|
71
71
|
|
|
72
|
-
#: models.py:
|
|
72
|
+
#: models.py:28
|
|
73
73
|
msgid "Multiple select"
|
|
74
74
|
msgstr ""
|
|
75
75
|
|
|
76
|
-
#: models.py:
|
|
76
|
+
#: models.py:29
|
|
77
77
|
msgid "Radio buttons"
|
|
78
78
|
msgstr ""
|
|
79
79
|
|
|
80
|
-
#: models.py:
|
|
80
|
+
#: models.py:30
|
|
81
81
|
msgid "Date"
|
|
82
82
|
msgstr ""
|
|
83
83
|
|
|
84
|
-
#: models.py:
|
|
84
|
+
#: models.py:31
|
|
85
85
|
msgid "Date/time"
|
|
86
86
|
msgstr ""
|
|
87
87
|
|
|
88
|
-
#: models.py:
|
|
88
|
+
#: models.py:32
|
|
89
89
|
msgid "Hidden field"
|
|
90
90
|
msgstr ""
|
|
91
91
|
|
|
92
|
-
#: models.py:
|
|
92
|
+
#: models.py:47
|
|
93
93
|
msgid "submit time"
|
|
94
94
|
msgstr ""
|
|
95
95
|
|
|
96
|
-
#: models.py:
|
|
96
|
+
#: models.py:66
|
|
97
97
|
msgid "form submission"
|
|
98
98
|
msgstr ""
|
|
99
99
|
|
|
100
|
-
#: models.py:
|
|
100
|
+
#: models.py:67
|
|
101
101
|
msgid "form submissions"
|
|
102
102
|
msgstr ""
|
|
103
103
|
|
|
104
|
-
#: models.py:
|
|
104
|
+
#: models.py:80
|
|
105
105
|
msgid "name"
|
|
106
106
|
msgstr ""
|
|
107
107
|
|
|
108
|
-
#: models.py:
|
|
108
|
+
#: models.py:85
|
|
109
109
|
msgid "Safe name of the form field, the label converted to ascii_snake_case"
|
|
110
110
|
msgstr ""
|
|
111
111
|
|
|
112
|
-
#: models.py:
|
|
112
|
+
#: models.py:89
|
|
113
113
|
msgid "label"
|
|
114
114
|
msgstr ""
|
|
115
115
|
|
|
116
|
-
#: models.py:
|
|
116
|
+
#: models.py:91
|
|
117
117
|
msgid "The label of the form field"
|
|
118
118
|
msgstr ""
|
|
119
119
|
|
|
120
|
-
#: models.py:
|
|
120
|
+
#: models.py:94
|
|
121
121
|
msgid "field type"
|
|
122
122
|
msgstr ""
|
|
123
123
|
|
|
124
|
-
#: models.py:
|
|
124
|
+
#: models.py:96
|
|
125
125
|
msgid "required"
|
|
126
126
|
msgstr ""
|
|
127
127
|
|
|
128
|
-
#: models.py:
|
|
128
|
+
#: models.py:98
|
|
129
129
|
msgid "choices"
|
|
130
130
|
msgstr ""
|
|
131
131
|
|
|
132
|
-
#: models.py:
|
|
132
|
+
#: models.py:101
|
|
133
133
|
msgid ""
|
|
134
134
|
"Comma or new line separated list of choices. Only applicable in checkboxes, "
|
|
135
135
|
"radio and dropdown."
|
|
136
136
|
msgstr ""
|
|
137
137
|
|
|
138
|
-
#: models.py:
|
|
138
|
+
#: models.py:105
|
|
139
139
|
msgid "default value"
|
|
140
140
|
msgstr ""
|
|
141
141
|
|
|
142
|
-
#: models.py:
|
|
142
|
+
#: models.py:108
|
|
143
143
|
msgid ""
|
|
144
144
|
"Default value. Comma or new line separated values supported for checkboxes."
|
|
145
145
|
msgstr ""
|
|
146
146
|
|
|
147
|
-
#: models.py:
|
|
147
|
+
#: models.py:112
|
|
148
148
|
msgid "help text"
|
|
149
149
|
msgstr ""
|
|
150
150
|
|
|
151
|
-
#: models.py:
|
|
151
|
+
#: models.py:195 views.py:149
|
|
152
152
|
msgid "Submission date"
|
|
153
153
|
msgstr ""
|
|
154
154
|
|
|
@@ -202,10 +202,15 @@ msgstr[1] ""
|
|
|
202
202
|
msgid "Delete"
|
|
203
203
|
msgstr ""
|
|
204
204
|
|
|
205
|
-
#: templates/wagtailforms/list_submissions.html:
|
|
205
|
+
#: templates/wagtailforms/list_submissions.html:36
|
|
206
206
|
msgid "Delete selected submissions"
|
|
207
207
|
msgstr ""
|
|
208
208
|
|
|
209
|
+
#: templates/wagtailforms/list_submissions.html:44
|
|
210
|
+
#, python-format
|
|
211
|
+
msgid "There have been no submissions of the '%(title)s' form."
|
|
212
|
+
msgstr ""
|
|
213
|
+
|
|
209
214
|
#: templates/wagtailforms/panels/form_responses_panel.html:2
|
|
210
215
|
msgid "Total submissions"
|
|
211
216
|
msgstr ""
|
|
@@ -219,28 +224,15 @@ msgstr ""
|
|
|
219
224
|
msgid "Submissions of %(form_title)s"
|
|
220
225
|
msgstr ""
|
|
221
226
|
|
|
222
|
-
#:
|
|
223
|
-
#, python-format
|
|
224
|
-
msgid "There have been no submissions of the '%(title)s' form."
|
|
225
|
-
msgstr ""
|
|
226
|
-
|
|
227
|
-
#: templates/wagtailforms/submissions_index.html:46
|
|
228
|
-
msgid "Filter"
|
|
229
|
-
msgstr ""
|
|
230
|
-
|
|
231
|
-
#: templates/wagtailforms/submissions_index.html:54
|
|
232
|
-
msgid "Apply filters"
|
|
233
|
-
msgstr ""
|
|
234
|
-
|
|
235
|
-
#: views.py:50 wagtail_hooks.py:26
|
|
227
|
+
#: views.py:52 views.py:267 wagtail_hooks.py:26
|
|
236
228
|
msgid "Forms"
|
|
237
229
|
msgstr ""
|
|
238
230
|
|
|
239
|
-
#: views.py:
|
|
231
|
+
#: views.py:59
|
|
240
232
|
msgid "Title"
|
|
241
233
|
msgstr ""
|
|
242
234
|
|
|
243
|
-
#: views.py:
|
|
235
|
+
#: views.py:66
|
|
244
236
|
msgid "Origin"
|
|
245
237
|
msgstr ""
|
|
246
238
|
|
|
@@ -255,6 +247,6 @@ msgid_plural "%(count)d submissions have been deleted."
|
|
|
255
247
|
msgstr[0] ""
|
|
256
248
|
msgstr[1] ""
|
|
257
249
|
|
|
258
|
-
#: views.py:
|
|
250
|
+
#: views.py:168
|
|
259
251
|
msgid "Form data"
|
|
260
252
|
msgstr ""
|
|
Binary file
|
|
@@ -17,8 +17,8 @@ msgstr ""
|
|
|
17
17
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
18
18
|
"Content-Transfer-Encoding: 8bit\n"
|
|
19
19
|
"Language: he_IL\n"
|
|
20
|
-
"Plural-Forms: nplurals=
|
|
21
|
-
"1 == 0) ? 1:
|
|
20
|
+
"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % "
|
|
21
|
+
"1 == 0) ? 1: 2;\n"
|
|
22
22
|
|
|
23
23
|
msgid "Date from"
|
|
24
24
|
msgstr "מתאריך"
|
wagtail/contrib/forms/models.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
|
-
from django.conf import settings
|
|
5
4
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
6
5
|
from django.core.validators import validate_email
|
|
7
6
|
from django.db import models
|
|
@@ -264,10 +263,11 @@ class FormMixin:
|
|
|
264
263
|
"""
|
|
265
264
|
Returns list submissions view for admin.
|
|
266
265
|
|
|
267
|
-
`list_submissions_view_class` can
|
|
266
|
+
`list_submissions_view_class` can be set to provide custom view class.
|
|
268
267
|
Your class must be inherited from SubmissionsListView.
|
|
269
268
|
"""
|
|
270
|
-
|
|
269
|
+
results_only = kwargs.pop("results_only", False)
|
|
270
|
+
view = self.get_submissions_list_view_class().as_view(results_only=results_only)
|
|
271
271
|
return view(request, form_page=self, *args, **kwargs)
|
|
272
272
|
|
|
273
273
|
def serve(self, request, *args, **kwargs):
|
|
@@ -365,9 +365,9 @@ class EmailFormMixin(models.Model):
|
|
|
365
365
|
|
|
366
366
|
# Format dates and datetime(s) with SHORT_DATE(TIME)_FORMAT
|
|
367
367
|
if isinstance(value, datetime.datetime):
|
|
368
|
-
value = date_format(value,
|
|
368
|
+
value = date_format(value, "SHORT_DATETIME_FORMAT")
|
|
369
369
|
elif isinstance(value, datetime.date):
|
|
370
|
-
value = date_format(value,
|
|
370
|
+
value = date_format(value, "SHORT_DATE_FORMAT")
|
|
371
371
|
|
|
372
372
|
content.append(f"{field.label}: {value}")
|
|
373
373
|
|
|
@@ -1,37 +1,48 @@
|
|
|
1
|
+
{% extends "wagtailadmin/generic/index_results.html" %}
|
|
1
2
|
{% load i18n %}
|
|
2
|
-
|
|
3
|
-
<
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<
|
|
9
|
-
<th colspan="{{ data_headings|length|add:1 }}">
|
|
10
|
-
<button class="button no w-invisible" data-w-bulk-target="action">{% trans "Delete selected submissions" %}</button>
|
|
11
|
-
</th>
|
|
12
|
-
</tr>
|
|
13
|
-
<tr>
|
|
14
|
-
<th><input type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" /></th>
|
|
15
|
-
{% for heading in data_headings %}
|
|
16
|
-
<th id="{{ heading.name }}" class="{% if heading.order %}ordered icon {% if heading.order == 'ascending' %}icon-arrow-up-after{% else %}icon-arrow-down-after{% endif %}{% endif %}">
|
|
17
|
-
{% if heading.order %}<a href="?order_by={% if heading.order == 'ascending' %}-{% endif %}{{ heading.name }}">{{ heading.label }}</a>{% else %}{{ heading.label }}{% endif %}
|
|
18
|
-
</th>
|
|
19
|
-
{% endfor %}
|
|
20
|
-
</tr>
|
|
21
|
-
</thead>
|
|
22
|
-
<tbody>
|
|
23
|
-
{% for row in data_rows %}
|
|
3
|
+
{% block results %}
|
|
4
|
+
<form class="w-overflow-auto" data-controller="w-bulk" data-w-bulk-action-inactive-class="w-invisible" action="{% url 'wagtailforms:delete_submissions' form_page.id %}" method="get">
|
|
5
|
+
<table class="listing">
|
|
6
|
+
<col />
|
|
7
|
+
<col />
|
|
8
|
+
<col />
|
|
9
|
+
<thead>
|
|
24
10
|
<tr>
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
{{ cell }}
|
|
31
|
-
</td>
|
|
11
|
+
<th><input type="checkbox" data-action="w-bulk#toggleAll" data-w-bulk-target="all" /></th>
|
|
12
|
+
{% for heading in data_headings %}
|
|
13
|
+
<th id="{{ heading.name }}" class="{% if heading.order %}ordered icon {% if heading.order == 'ascending' %}icon-arrow-up-after{% else %}icon-arrow-down-after{% endif %}{% endif %}">
|
|
14
|
+
{% if heading.order %}<a href="?order_by={% if heading.order == 'ascending' %}-{% endif %}{{ heading.name }}">{{ heading.label }}</a>{% else %}{{ heading.label }}{% endif %}
|
|
15
|
+
</th>
|
|
32
16
|
{% endfor %}
|
|
33
17
|
</tr>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
18
|
+
</thead>
|
|
19
|
+
<tbody>
|
|
20
|
+
{% for row in data_rows %}
|
|
21
|
+
<tr>
|
|
22
|
+
<td>
|
|
23
|
+
<input type="checkbox" name="selected-submissions" class="select-submission" value="{{ row.model_id }}" data-action="w-bulk#toggle" data-w-bulk-target="item" />
|
|
24
|
+
</td>
|
|
25
|
+
{% for cell in row.fields %}
|
|
26
|
+
<td>
|
|
27
|
+
{{ cell }}
|
|
28
|
+
</td>
|
|
29
|
+
{% endfor %}
|
|
30
|
+
</tr>
|
|
31
|
+
{% endfor %}
|
|
32
|
+
</tbody>
|
|
33
|
+
</table>
|
|
34
|
+
<div class="nice-padding">
|
|
35
|
+
<button class="button no w-invisible" data-w-bulk-target="action">
|
|
36
|
+
{% trans "Delete selected submissions" %}
|
|
37
|
+
</button>
|
|
38
|
+
</div>
|
|
39
|
+
</form>
|
|
40
|
+
{% endblock %}
|
|
41
|
+
|
|
42
|
+
{% block no_results_message %}
|
|
43
|
+
<p>
|
|
44
|
+
{% blocktrans trimmed with title=form_page.title %}
|
|
45
|
+
There have been no submissions of the '{{ title }}' form.
|
|
46
|
+
{% endblocktrans %}
|
|
47
|
+
</p>
|
|
48
|
+
{% endblock %}
|
|
@@ -1,64 +1,3 @@
|
|
|
1
|
-
{% extends "wagtailadmin/
|
|
2
|
-
{% load i18n
|
|
1
|
+
{% extends "wagtailadmin/generic/listing.html" %}
|
|
2
|
+
{% load i18n %}
|
|
3
3
|
{% block titletag %}{% blocktrans trimmed with form_title=form_page.title|capfirst %}Submissions of {{ form_title }}{% endblocktrans %}{% endblock %}
|
|
4
|
-
{% block extra_js %}
|
|
5
|
-
{{ block.super }}
|
|
6
|
-
|
|
7
|
-
<script>
|
|
8
|
-
$.fn.datetimepicker.defaults.i18n.wagtail_custom_locale = {
|
|
9
|
-
months: wagtailConfig.STRINGS.MONTHS,
|
|
10
|
-
dayOfWeek: wagtailConfig.STRINGS.WEEKDAYS,
|
|
11
|
-
dayOfWeekShort: wagtailConfig.STRINGS.WEEKDAYS_SHORT,
|
|
12
|
-
}
|
|
13
|
-
$.datetimepicker.setLocale('wagtail_custom_locale');
|
|
14
|
-
|
|
15
|
-
$(function() {
|
|
16
|
-
$('#id_date_from').datetimepicker({
|
|
17
|
-
timepicker: false,
|
|
18
|
-
format: 'Y-m-d',
|
|
19
|
-
});
|
|
20
|
-
$('#id_date_to').datetimepicker({
|
|
21
|
-
timepicker: false,
|
|
22
|
-
format: 'Y-m-d',
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
</script>
|
|
26
|
-
{% endblock %}
|
|
27
|
-
{% block content %}
|
|
28
|
-
{% fragment as form_actions %}
|
|
29
|
-
{% include view.export_buttons_template_name %}
|
|
30
|
-
{% endfragment %}
|
|
31
|
-
|
|
32
|
-
{% include "wagtailadmin/shared/header.html" with classname="w-header--no-border" title=page_title subtitle=form_page.title|capfirst icon="form" merged=1 extra_actions=form_actions %}
|
|
33
|
-
|
|
34
|
-
<div class="report filterable">
|
|
35
|
-
<div class="report__results w-overflow-y-hidden w-overflow-x-scroll w-pb-6">
|
|
36
|
-
{% if submissions %}
|
|
37
|
-
<form action="{% url 'wagtailforms:delete_submissions' form_page.id %}" method="get">
|
|
38
|
-
{% include "wagtailforms/list_submissions.html" %}
|
|
39
|
-
{% include "wagtailadmin/shared/pagination_nav.html" with items=page_obj %}
|
|
40
|
-
</form>
|
|
41
|
-
{% else %}
|
|
42
|
-
<p class="no-results-message">{% blocktrans trimmed with title=form_page.title %}There have been no submissions of the '{{ title }}' form.{% endblocktrans %}</p>
|
|
43
|
-
{% endif %}
|
|
44
|
-
</div>
|
|
45
|
-
<div class="filterable__filters">
|
|
46
|
-
<h2>{% trans 'Filter' %}</h2>
|
|
47
|
-
<form action="" method="get" novalidate>
|
|
48
|
-
<button
|
|
49
|
-
class="button button-longrunning"
|
|
50
|
-
type="submit"
|
|
51
|
-
data-controller="w-progress"
|
|
52
|
-
data-action="w-progress#activate"
|
|
53
|
-
>
|
|
54
|
-
{% icon name="spinner" %}{% trans 'Apply filters' %}
|
|
55
|
-
</button>
|
|
56
|
-
{% for field in select_date_form %}
|
|
57
|
-
<li>
|
|
58
|
-
{% formattedfield field %}
|
|
59
|
-
</li>
|
|
60
|
-
{% endfor %}
|
|
61
|
-
</form>
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
{% endblock %}
|
|
@@ -770,6 +770,32 @@ class TestCleanedDataEmails(TestCase):
|
|
|
770
770
|
self.assertEqual(len(mail.outbox), 3)
|
|
771
771
|
self.assertIn("Datetime: 12/21/1910 9:19 p.m.", mail.outbox[2].body)
|
|
772
772
|
|
|
773
|
+
@override_settings(USE_I18N=True, LANGUAGE_CODE="de")
|
|
774
|
+
def test_date_localization(self):
|
|
775
|
+
self.client.post(
|
|
776
|
+
"/contact-us/",
|
|
777
|
+
{
|
|
778
|
+
"date": "2017-12-31",
|
|
779
|
+
},
|
|
780
|
+
)
|
|
781
|
+
|
|
782
|
+
# Check the email
|
|
783
|
+
self.assertEqual(len(mail.outbox), 1)
|
|
784
|
+
self.assertIn("Date: 31.12.2017", mail.outbox[0].body)
|
|
785
|
+
|
|
786
|
+
@override_settings(USE_I18N=True, LANGUAGE_CODE="de")
|
|
787
|
+
def test_datetime_localization(self):
|
|
788
|
+
self.client.post(
|
|
789
|
+
"/contact-us/",
|
|
790
|
+
{
|
|
791
|
+
"datetime": "1910-12-21 21:19:12",
|
|
792
|
+
},
|
|
793
|
+
)
|
|
794
|
+
|
|
795
|
+
# Check the email
|
|
796
|
+
self.assertEqual(len(mail.outbox), 1)
|
|
797
|
+
self.assertIn("Datetime: 21.12.1910 21:19", mail.outbox[0].body)
|
|
798
|
+
|
|
773
799
|
|
|
774
800
|
class TestIssue798(WagtailTestUtils, TestCase):
|
|
775
801
|
fixtures = ["test.json"]
|
wagtail/contrib/forms/urls.py
CHANGED
|
@@ -15,6 +15,12 @@ urlpatterns = [
|
|
|
15
15
|
path(
|
|
16
16
|
"submissions/<int:page_id>/", get_submissions_list_view, name="list_submissions"
|
|
17
17
|
),
|
|
18
|
+
path(
|
|
19
|
+
"submissions/<int:page_id>/results/",
|
|
20
|
+
get_submissions_list_view,
|
|
21
|
+
{"results_only": True},
|
|
22
|
+
name="list_submissions_results",
|
|
23
|
+
),
|
|
18
24
|
path(
|
|
19
25
|
"submissions/<int:page_id>/delete/",
|
|
20
26
|
DeleteSubmissionsView.as_view(),
|