wagtail 7.2.1__py3-none-any.whl → 7.3__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/actions/copy_for_translation.py +4 -2
- wagtail/admin/action_menu.py +4 -1
- wagtail/admin/api/actions/convert_alias.py +2 -2
- wagtail/admin/api/actions/copy.py +2 -2
- wagtail/admin/api/actions/copy_for_translation.py +2 -2
- wagtail/admin/api/actions/create_alias.py +2 -2
- wagtail/admin/api/actions/delete.py +1 -1
- wagtail/admin/api/actions/move.py +1 -1
- wagtail/admin/api/actions/publish.py +2 -2
- wagtail/admin/api/actions/revert_to_page_revision.py +2 -2
- wagtail/admin/api/actions/unpublish.py +1 -1
- wagtail/admin/api/filters.py +2 -2
- wagtail/admin/compare.py +22 -0
- wagtail/admin/forms/account.py +52 -1
- wagtail/admin/forms/comments.py +53 -0
- wagtail/admin/forms/models.py +36 -0
- wagtail/admin/forms/pages.py +7 -0
- wagtail/admin/forms/workflows.py +5 -2
- wagtail/admin/icons.py +4 -3
- wagtail/admin/locale/af/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/af/LC_MESSAGES/djangojs.po +8 -1
- wagtail/admin/locale/ar/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ar/LC_MESSAGES/django.po +42 -16
- wagtail/admin/locale/ar/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ar/LC_MESSAGES/djangojs.po +20 -11
- wagtail/admin/locale/az_AZ/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/az_AZ/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/az_AZ/LC_MESSAGES/djangojs.po +5 -2
- wagtail/admin/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/be/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/be/LC_MESSAGES/djangojs.po +21 -3
- wagtail/admin/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/bg/LC_MESSAGES/django.po +299 -2
- wagtail/admin/locale/bg/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/bg/LC_MESSAGES/djangojs.po +37 -3
- wagtail/admin/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/bn/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/bn/LC_MESSAGES/djangojs.po +9 -3
- wagtail/admin/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ca/LC_MESSAGES/django.po +36 -18
- wagtail/admin/locale/ca/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ca/LC_MESSAGES/djangojs.po +34 -12
- wagtail/admin/locale/cs/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/cs/LC_MESSAGES/django.po +1 -7
- wagtail/admin/locale/cs/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/cs/LC_MESSAGES/djangojs.po +22 -4
- wagtail/admin/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/cy/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/cy/LC_MESSAGES/djangojs.po +15 -3
- wagtail/admin/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/da/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/da/LC_MESSAGES/djangojs.po +19 -4
- wagtail/admin/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/de/LC_MESSAGES/django.po +201 -21
- wagtail/admin/locale/de/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/de/LC_MESSAGES/djangojs.po +53 -14
- wagtail/admin/locale/dv/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/dv/LC_MESSAGES/django.po +7 -16
- wagtail/admin/locale/dv/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/dv/LC_MESSAGES/djangojs.po +20 -2
- wagtail/admin/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/el/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/el/LC_MESSAGES/djangojs.po +22 -13
- wagtail/admin/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/en/LC_MESSAGES/django.po +262 -234
- wagtail/admin/locale/en/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +72 -43
- wagtail/admin/locale/en_IN/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/en_IN/LC_MESSAGES/djangojs.po +5 -2
- wagtail/admin/locale/es/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/es/LC_MESSAGES/django.po +1 -10
- wagtail/admin/locale/es/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/es/LC_MESSAGES/djangojs.po +22 -13
- wagtail/admin/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/es_419/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/es_419/LC_MESSAGES/djangojs.po +8 -2
- wagtail/admin/locale/es_VE/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/es_VE/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/es_VE/LC_MESSAGES/djangojs.po +5 -2
- wagtail/admin/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/et/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/et/LC_MESSAGES/djangojs.po +17 -2
- wagtail/admin/locale/eu/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/eu/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/eu/LC_MESSAGES/djangojs.po +8 -2
- wagtail/admin/locale/fa/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/fa/LC_MESSAGES/django.po +5 -11
- wagtail/admin/locale/fa/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/fa/LC_MESSAGES/djangojs.po +18 -3
- wagtail/admin/locale/fi/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/fi/LC_MESSAGES/django.po +1 -12
- wagtail/admin/locale/fi/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/fi/LC_MESSAGES/djangojs.po +22 -12
- wagtail/admin/locale/fr/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/fr/LC_MESSAGES/django.po +38 -21
- wagtail/admin/locale/fr/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/fr/LC_MESSAGES/djangojs.po +35 -14
- wagtail/admin/locale/gl/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/gl/LC_MESSAGES/django.po +36 -18
- wagtail/admin/locale/gl/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/gl/LC_MESSAGES/djangojs.po +34 -12
- wagtail/admin/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/he_IL/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/he_IL/LC_MESSAGES/djangojs.po +20 -3
- wagtail/admin/locale/hi/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/hi/LC_MESSAGES/djangojs.po +5 -2
- wagtail/admin/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/hr_HR/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/hr_HR/LC_MESSAGES/djangojs.po +17 -2
- wagtail/admin/locale/ht/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/ht/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ht/LC_MESSAGES/djangojs.po +5 -2
- wagtail/admin/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/hu/LC_MESSAGES/django.po +7 -18
- wagtail/admin/locale/hu/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/hu/LC_MESSAGES/djangojs.po +21 -11
- wagtail/admin/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/id_ID/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/id_ID/LC_MESSAGES/djangojs.po +18 -3
- wagtail/admin/locale/is_IS/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/is_IS/LC_MESSAGES/django.po +7 -17
- wagtail/admin/locale/is_IS/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/is_IS/LC_MESSAGES/djangojs.po +21 -12
- wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/it/LC_MESSAGES/django.po +599 -19
- wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +73 -13
- wagtail/admin/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/ja/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ja/LC_MESSAGES/djangojs.po +23 -3
- wagtail/admin/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/ka/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ka/LC_MESSAGES/djangojs.po +5 -2
- wagtail/admin/locale/ko/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ko/LC_MESSAGES/django.po +1 -11
- wagtail/admin/locale/ko/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ko/LC_MESSAGES/djangojs.po +23 -13
- wagtail/admin/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/lt/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/lt/LC_MESSAGES/djangojs.po +21 -12
- wagtail/admin/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/lv/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/lv/LC_MESSAGES/djangojs.po +22 -4
- wagtail/admin/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/mi/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/mi/LC_MESSAGES/djangojs.po +14 -2
- wagtail/admin/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/mn/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/mn/LC_MESSAGES/djangojs.po +17 -2
- wagtail/admin/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/my/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/my/LC_MESSAGES/djangojs.po +8 -2
- wagtail/admin/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/nb/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/nb/LC_MESSAGES/djangojs.po +18 -3
- wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/nl/LC_MESSAGES/django.po +38 -21
- wagtail/admin/locale/nl/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/nl/LC_MESSAGES/djangojs.po +36 -13
- wagtail/admin/locale/pl/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/pl/LC_MESSAGES/django.po +1 -10
- wagtail/admin/locale/pl/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/pl/LC_MESSAGES/djangojs.po +21 -12
- wagtail/admin/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/pt_BR/LC_MESSAGES/django.po +7 -16
- wagtail/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/pt_BR/LC_MESSAGES/djangojs.po +21 -13
- wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +1 -7
- wagtail/admin/locale/pt_PT/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/pt_PT/LC_MESSAGES/djangojs.po +18 -12
- wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ro/LC_MESSAGES/django.po +7 -16
- wagtail/admin/locale/ro/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ro/LC_MESSAGES/djangojs.po +20 -11
- wagtail/admin/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ru/LC_MESSAGES/django.po +186 -22
- wagtail/admin/locale/ru/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ru/LC_MESSAGES/djangojs.po +53 -14
- wagtail/admin/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/sk_SK/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/sk_SK/LC_MESSAGES/djangojs.po +20 -3
- wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/sl/LC_MESSAGES/django.po +7 -16
- wagtail/admin/locale/sl/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/sl/LC_MESSAGES/djangojs.po +21 -12
- wagtail/admin/locale/sr/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/sr/LC_MESSAGES/djangojs.po +15 -0
- wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/sv/LC_MESSAGES/django.po +329 -23
- wagtail/admin/locale/sv/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/sv/LC_MESSAGES/djangojs.po +23 -13
- wagtail/admin/locale/ta/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ta/LC_MESSAGES/djangojs.po +5 -2
- wagtail/admin/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/tet/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/tet/LC_MESSAGES/djangojs.po +19 -4
- wagtail/admin/locale/th/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/th/LC_MESSAGES/django.po +1 -4
- wagtail/admin/locale/th/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/th/LC_MESSAGES/djangojs.po +22 -3
- wagtail/admin/locale/tr/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/tr/LC_MESSAGES/django.po +4 -10
- wagtail/admin/locale/tr/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/tr/LC_MESSAGES/djangojs.po +23 -5
- wagtail/admin/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/tr_TR/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/tr_TR/LC_MESSAGES/djangojs.po +19 -4
- wagtail/admin/locale/ug/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ug/LC_MESSAGES/django.po +7 -16
- wagtail/admin/locale/ug/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/ug/LC_MESSAGES/djangojs.po +20 -11
- wagtail/admin/locale/uk/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/uk/LC_MESSAGES/django.po +5 -11
- wagtail/admin/locale/uk/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/uk/LC_MESSAGES/djangojs.po +22 -14
- wagtail/admin/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/vi/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/vi/LC_MESSAGES/djangojs.po +9 -2
- wagtail/admin/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/admin/locale/zh/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/zh/LC_MESSAGES/djangojs.po +20 -5
- wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.po +1 -7
- wagtail/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po +23 -13
- wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po +1 -7
- wagtail/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/zh_Hant/LC_MESSAGES/djangojs.po +21 -3
- wagtail/admin/panels/comment_panel.py +1 -51
- wagtail/admin/panels/title_field_panel.py +3 -1
- wagtail/admin/static/wagtailadmin/css/core.css +1 -1
- wagtail/admin/static/wagtailadmin/js/bulk-actions.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/draftail.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/telepath/blocks.js +1 -1
- wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +1 -1
- wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
- wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
- wagtail/admin/templates/wagtailadmin/base.html +1 -1
- wagtail/admin/templates/wagtailadmin/generic/edit_partials.html +100 -0
- wagtail/admin/templates/wagtailadmin/generic/form.html +26 -5
- wagtail/admin/templates/wagtailadmin/generic/includes/_loaded_revision_inputs.html +3 -0
- wagtail/admin/templates/wagtailadmin/generic/listing_results.html +1 -17
- wagtail/admin/templates/wagtailadmin/pages/create.html +14 -4
- wagtail/admin/templates/wagtailadmin/pages/edit.html +16 -3
- wagtail/admin/templates/wagtailadmin/pages/edit_partials.html +19 -0
- wagtail/admin/templates/wagtailadmin/pages/index_results.html +1 -9
- wagtail/admin/templates/wagtailadmin/shared/autosave/indicator.html +36 -0
- wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/editing_sessions/list.html +2 -2
- wagtail/admin/templates/wagtailadmin/shared/editing_sessions/module.html +19 -3
- wagtail/admin/templates/wagtailadmin/shared/headers/_actions.html +5 -0
- wagtail/admin/templates/wagtailadmin/shared/headers/_history_icon_link.html +2 -2
- wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +8 -9
- wagtail/admin/templates/wagtailadmin/shared/listing/filter_partials.html +19 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +3 -3
- wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/side_panel.html +3 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/privacy.html +18 -6
- wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/usage.html +11 -4
- wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/workflow.html +22 -1
- wagtail/admin/templates/wagtailadmin/shared/side_panels/preview.html +1 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panels.html +1 -2
- wagtail/admin/templates/wagtailadmin/shared/unsaved_changes_warning.html +20 -20
- wagtail/admin/templates/wagtailadmin/userbar/base.html +2 -0
- wagtail/admin/templates/wagtailadmin/userbar/item_accessibility.html +1 -1
- wagtail/admin/templatetags/wagtailadmin_tags.py +6 -14
- wagtail/admin/tests/pages/test_create_page.py +359 -1
- wagtail/admin/tests/pages/test_custom_listing.py +48 -2
- wagtail/admin/tests/pages/test_edit_page.py +987 -10
- wagtail/admin/tests/pages/test_explorer_view.py +9 -5
- wagtail/admin/tests/pages/test_page_search.py +15 -0
- wagtail/admin/tests/pages/test_preview.py +81 -0
- wagtail/admin/tests/pages/test_revisions.py +4 -0
- wagtail/admin/tests/test_account_management.py +88 -2
- wagtail/admin/tests/test_collections_views.py +15 -15
- wagtail/admin/tests/test_compare.py +34 -0
- wagtail/admin/tests/test_editing_sessions.py +230 -8
- wagtail/admin/tests/test_forms.py +192 -1
- wagtail/admin/tests/test_icon_sprite.py +22 -2
- wagtail/admin/tests/test_page_chooser.py +13 -13
- wagtail/admin/tests/test_reports_views.py +4 -1
- wagtail/admin/tests/test_userbar.py +69 -5
- wagtail/admin/tests/test_views_generic.py +5 -5
- wagtail/admin/tests/test_workflows.py +14 -12
- wagtail/admin/tests/viewsets/test_model_viewset.py +13 -0
- wagtail/admin/ui/autosave.py +5 -0
- wagtail/admin/ui/editing_sessions.py +3 -0
- wagtail/admin/ui/side_panels.py +19 -20
- wagtail/admin/userbar.py +48 -27
- wagtail/admin/views/bulk_action/dispatcher.py +2 -2
- wagtail/admin/views/chooser.py +6 -6
- wagtail/admin/views/editing_sessions.py +20 -7
- wagtail/admin/views/generic/__init__.py +1 -0
- wagtail/admin/views/generic/chooser.py +5 -5
- wagtail/admin/views/generic/mixins.py +143 -26
- wagtail/admin/views/generic/models.py +157 -27
- wagtail/admin/views/generic/ordering.py +1 -1
- wagtail/admin/views/generic/preview.py +12 -5
- wagtail/admin/views/home.py +3 -1
- wagtail/admin/views/pages/create.py +78 -29
- wagtail/admin/views/pages/edit.py +162 -34
- wagtail/admin/views/pages/preview.py +14 -5
- wagtail/admin/views/pages/revisions.py +3 -0
- wagtail/admin/views/pages/search.py +4 -4
- wagtail/admin/views/pages/usage.py +2 -2
- wagtail/admin/views/tags.py +2 -2
- wagtail/admin/views/workflows.py +73 -54
- wagtail/admin/viewsets/model.py +34 -8
- wagtail/admin/widgets/button.py +11 -4
- wagtail/admin/widgets/chooser.py +6 -4
- wagtail/admin/widgets/slug.py +1 -1
- wagtail/api/v2/filters.py +27 -21
- wagtail/api/v2/pagination.py +4 -4
- wagtail/api/v2/views.py +7 -7
- wagtail/blocks/list_block.py +0 -8
- wagtail/blocks/migrations/migrate_operation.py +8 -1
- wagtail/blocks/stream_block.py +2 -10
- wagtail/blocks/struct_block.py +192 -12
- wagtail/compat.py +2 -2
- wagtail/contrib/forms/locale/af/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/bg/LC_MESSAGES/django.po +4 -1
- wagtail/contrib/forms/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/forms/locale/eu/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/ht/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/hy/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/it/LC_MESSAGES/django.po +40 -2
- wagtail/contrib/forms/locale/ka/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/frontend_cache/backends/azure.py +6 -6
- wagtail/contrib/frontend_cache/backends/cloudfront.py +2 -2
- wagtail/contrib/frontend_cache/utils.py +1 -1
- wagtail/contrib/redirects/forms.py +1 -1
- wagtail/contrib/redirects/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/bg/LC_MESSAGES/django.po +7 -1
- wagtail/contrib/redirects/locale/bn/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/de/LC_MESSAGES/django.po +15 -3
- wagtail/contrib/redirects/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +14 -14
- wagtail/contrib/redirects/locale/en_IN/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/en_IN/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/es_419/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/eu/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/eu/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/hi/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/hi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/ht/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/ht/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/hy/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/hy/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.po +17 -4
- wagtail/contrib/redirects/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/ka/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.po +15 -2
- wagtail/contrib/redirects/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/sr/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/sr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.po +17 -4
- wagtail/contrib/redirects/locale/ta/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/ta/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/redirects/middleware.py +11 -7
- wagtail/contrib/redirects/models.py +17 -1
- wagtail/contrib/redirects/tests/test_import_admin_views.py +3 -3
- wagtail/contrib/redirects/tests/test_redirects.py +56 -8
- wagtail/contrib/search_promotions/locale/af/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/af/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/az_AZ/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/bg/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/bn/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.po +9 -3
- wagtail/contrib/search_promotions/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +6 -6
- wagtail/contrib/search_promotions/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/es_419/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/eu/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/ht/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +44 -3
- wagtail/contrib/search_promotions/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.po +9 -3
- wagtail/contrib/search_promotions/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/sv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/search_promotions/tests.py +1 -1
- wagtail/contrib/search_promotions/views/settings.py +24 -25
- wagtail/contrib/settings/jinja2tags.py +2 -2
- wagtail/contrib/settings/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/az_AZ/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/{locale/af → contrib/settings/locale/bg}/LC_MESSAGES/django.po +7 -16
- wagtail/contrib/settings/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/de/LC_MESSAGES/django.po +7 -3
- wagtail/contrib/settings/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/settings/locale/en_IN/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/en_IN/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/es_VE/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/hi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/ht/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/it/LC_MESSAGES/django.po +7 -3
- wagtail/contrib/settings/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/ka/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/sr/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/sr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.po +4 -3
- wagtail/contrib/settings/locale/ta/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/zh/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/settings/tests/generic/test_admin.py +118 -2
- wagtail/contrib/settings/tests/shared/test_preview.py +29 -0
- wagtail/contrib/settings/tests/site_specific/test_admin.py +78 -15
- wagtail/contrib/settings/tests/site_specific/test_model.py +2 -2
- wagtail/contrib/settings/views.py +15 -2
- wagtail/contrib/simple_translation/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/bg/LC_MESSAGES/django.po +26 -0
- wagtail/contrib/simple_translation/locale/el/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/simple_translation/locale/es_419/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/fa/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.po +5 -2
- wagtail/contrib/simple_translation/locale/mi/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/mn/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/nb/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/vi/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/af/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/af/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/az_AZ/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/bg/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/bn/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/da/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/de/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
- wagtail/contrib/styleguide/locale/en_IN/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/en_IN/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/es_419/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/es_VE/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/es_VE/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/hi/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/hi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ht/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/it/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ka/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ru/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/sv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ta/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/ta/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/zh/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/styleguide/tests.py +2 -0
- wagtail/contrib/styleguide/views.py +4 -5
- wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.po +5 -1
- wagtail/contrib/table_block/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/de/LC_MESSAGES/django.po +6 -3
- wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/table_block/locale/en_IN/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/et/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/fa/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/ht/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/id_ID/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +5 -2
- wagtail/contrib/table_block/locale/ja/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/lv/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/mi/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/mn/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/my/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/nb/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/ru/LC_MESSAGES/django.po +6 -3
- wagtail/contrib/table_block/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/tet/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/blocks.py +37 -0
- wagtail/contrib/typed_table_block/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/de/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/dv/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
- wagtail/contrib/typed_table_block/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/ru/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.po +5 -4
- wagtail/contrib/typed_table_block/locale/th/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/tests.py +108 -0
- wagtail/coreutils.py +4 -4
- wagtail/documents/__init__.py +4 -4
- wagtail/documents/locale/af/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/af/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/az_AZ/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/bg/LC_MESSAGES/django.po +10 -1
- wagtail/documents/locale/bn/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/de/LC_MESSAGES/django.po +18 -3
- wagtail/documents/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/en/LC_MESSAGES/django.po +15 -15
- wagtail/documents/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/eu/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/eu/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/ht/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/ht/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/it/LC_MESSAGES/django.po +33 -3
- wagtail/documents/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/ru/LC_MESSAGES/django.po +7 -3
- wagtail/documents/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/sv/LC_MESSAGES/django.po +33 -5
- wagtail/documents/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/documents/models.py +1 -1
- wagtail/documents/tests/test_admin_views.py +19 -4
- wagtail/documents/tests/test_search.py +0 -2
- wagtail/documents/tests/test_views.py +6 -4
- wagtail/documents/views/bulk_actions/add_tags.py +1 -1
- wagtail/embeds/finders/facebook.py +3 -3
- wagtail/embeds/finders/instagram.py +3 -3
- wagtail/embeds/finders/oembed.py +7 -2
- wagtail/embeds/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/bn/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/da/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/dv/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/embeds/locale/es_419/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/lv/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/my/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/oembed_providers.py +8 -0
- wagtail/embeds/tests/test_embeds.py +35 -0
- wagtail/images/__init__.py +4 -4
- wagtail/images/admin_urls.py +3 -3
- wagtail/images/blocks.py +1 -1
- wagtail/images/formats.py +2 -2
- wagtail/images/image_operations.py +2 -2
- wagtail/images/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/az_AZ/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/bg/LC_MESSAGES/django.po +13 -1
- wagtail/images/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/ca/LC_MESSAGES/django.po +6 -3
- wagtail/images/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/de/LC_MESSAGES/django.po +30 -3
- wagtail/images/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/en/LC_MESSAGES/django.po +44 -40
- wagtail/images/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/eu/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/eu/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/fr/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/fr/LC_MESSAGES/django.po +6 -3
- wagtail/images/locale/gl/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/gl/LC_MESSAGES/django.po +6 -3
- wagtail/images/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/ht/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/ht/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/it/LC_MESSAGES/django.po +54 -5
- wagtail/images/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/nl/LC_MESSAGES/django.po +9 -6
- wagtail/images/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/ru/LC_MESSAGES/django.po +15 -3
- wagtail/images/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/sv/LC_MESSAGES/django.po +50 -7
- wagtail/images/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/images/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/images/models.py +11 -10
- wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
- wagtail/images/templates/wagtailimages/images/url_generator.html +17 -38
- wagtail/images/templates/wagtailimages/images/url_generator_output.html +28 -0
- wagtail/images/templatetags/wagtailimages_tags.py +4 -4
- wagtail/images/tests/test_admin_views.py +432 -59
- wagtail/images/tests/test_image_operations.py +2 -2
- wagtail/images/tests/test_models.py +0 -2
- wagtail/images/views/bulk_actions/add_tags.py +1 -1
- wagtail/images/views/images.py +72 -39
- wagtail/locale/ar/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/ar/LC_MESSAGES/django.po +10 -19
- wagtail/locale/az_AZ/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/az_AZ/LC_MESSAGES/django.po +4 -4
- wagtail/locale/be/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/be/LC_MESSAGES/django.po +7 -19
- wagtail/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/bg/LC_MESSAGES/django.po +35 -11
- wagtail/locale/bn/LC_MESSAGES/django.po +4 -4
- wagtail/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/ca/LC_MESSAGES/django.po +24 -21
- wagtail/locale/cs/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/cs/LC_MESSAGES/django.po +7 -19
- wagtail/locale/cy/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/cy/LC_MESSAGES/django.po +10 -13
- wagtail/locale/da/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/da/LC_MESSAGES/django.po +7 -16
- wagtail/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/de/LC_MESSAGES/django.po +41 -21
- wagtail/locale/dv/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/dv/LC_MESSAGES/django.po +7 -19
- wagtail/locale/el/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/el/LC_MESSAGES/django.po +10 -19
- wagtail/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/en/LC_MESSAGES/django.po +103 -105
- wagtail/locale/es/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/es/LC_MESSAGES/django.po +10 -19
- wagtail/locale/es_419/LC_MESSAGES/django.po +6 -6
- wagtail/locale/et/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/et/LC_MESSAGES/django.po +7 -16
- wagtail/locale/eu/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/eu/LC_MESSAGES/django.po +4 -10
- wagtail/locale/fa/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/fa/LC_MESSAGES/django.po +10 -16
- wagtail/locale/fi/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/fi/LC_MESSAGES/django.po +10 -19
- wagtail/locale/fr/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/fr/LC_MESSAGES/django.po +24 -21
- wagtail/locale/gl/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/gl/LC_MESSAGES/django.po +24 -21
- wagtail/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/he_IL/LC_MESSAGES/django.po +10 -16
- wagtail/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/hr_HR/LC_MESSAGES/django.po +7 -16
- wagtail/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/hu/LC_MESSAGES/django.po +10 -19
- wagtail/locale/id_ID/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/id_ID/LC_MESSAGES/django.po +7 -16
- wagtail/locale/is_IS/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/is_IS/LC_MESSAGES/django.po +10 -19
- wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/it/LC_MESSAGES/django.po +126 -21
- wagtail/locale/ja/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/ja/LC_MESSAGES/django.po +10 -19
- wagtail/locale/ka/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/ka/LC_MESSAGES/django.po +9 -6
- wagtail/locale/ko/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/ko/LC_MESSAGES/django.po +10 -19
- wagtail/locale/lt/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/lt/LC_MESSAGES/django.po +7 -19
- wagtail/locale/lv/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/lv/LC_MESSAGES/django.po +10 -19
- wagtail/locale/mi/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/mi/LC_MESSAGES/django.po +7 -13
- wagtail/locale/mn/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/mn/LC_MESSAGES/django.po +7 -16
- wagtail/locale/my/LC_MESSAGES/django.po +6 -6
- wagtail/locale/nb/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/nb/LC_MESSAGES/django.po +10 -16
- wagtail/locale/nl/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/nl/LC_MESSAGES/django.po +22 -21
- wagtail/locale/pl/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/pl/LC_MESSAGES/django.po +10 -19
- wagtail/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/pt_BR/LC_MESSAGES/django.po +10 -19
- wagtail/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/pt_PT/LC_MESSAGES/django.po +10 -19
- wagtail/locale/ro/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/ro/LC_MESSAGES/django.po +10 -19
- wagtail/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/ru/LC_MESSAGES/django.po +32 -21
- wagtail/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/sk_SK/LC_MESSAGES/django.po +10 -16
- wagtail/locale/sl/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/sl/LC_MESSAGES/django.po +10 -19
- wagtail/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/sv/LC_MESSAGES/django.po +105 -31
- wagtail/locale/tet/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/tet/LC_MESSAGES/django.po +7 -16
- wagtail/locale/th/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/th/LC_MESSAGES/django.po +7 -19
- wagtail/locale/tr/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/tr/LC_MESSAGES/django.po +10 -19
- wagtail/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/tr_TR/LC_MESSAGES/django.po +10 -16
- wagtail/locale/ug/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/ug/LC_MESSAGES/django.po +10 -19
- wagtail/locale/uk/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/uk/LC_MESSAGES/django.po +7 -19
- wagtail/locale/vi/LC_MESSAGES/django.po +7 -7
- wagtail/locale/zh/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/zh/LC_MESSAGES/django.po +6 -15
- wagtail/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/zh_Hans/LC_MESSAGES/django.po +10 -19
- wagtail/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/zh_Hant/LC_MESSAGES/django.po +7 -19
- wagtail/locales/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/bg/LC_MESSAGES/django.po +9 -2
- wagtail/locales/locale/da/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/el/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/et/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/fa/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/id_ID/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/it/LC_MESSAGES/django.po +13 -2
- wagtail/locales/locale/ja/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/lv/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/mn/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/my/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/nb/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/ru/LC_MESSAGES/django.po +7 -2
- wagtail/locales/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/sv/LC_MESSAGES/django.po +4 -3
- wagtail/locales/locale/tet/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/th/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/vi/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/zh/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/tests.py +5 -5
- wagtail/models/i18n.py +4 -6
- wagtail/models/media.py +18 -0
- wagtail/models/pages.py +65 -11
- wagtail/models/reference_index.py +15 -0
- wagtail/models/revisions.py +40 -12
- wagtail/models/workflows.py +0 -3
- wagtail/permission_policies/base.py +2 -2
- wagtail/permission_policies/collections.py +2 -2
- wagtail/project_template/requirements.txt +2 -2
- wagtail/search/locale/ar/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/be/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/cs/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/cy/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/dv/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/search/locale/es/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/et/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/fa/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/fi/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/fr/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/gl/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/ht/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/id_ID/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/is_IS/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/ja/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/ko/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/lt/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/mi/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/mn/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/my/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/nb/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/nl/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/pl/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/ro/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/sl/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/tet/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/th/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/tr/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/ug/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/uk/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/vi/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- wagtail/search/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/signal_handlers.py +1 -0
- wagtail/sites/locale/bn/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/da/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/dv/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/sites/locale/en_IN/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/es_419/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/es_VE/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/hi/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/ka/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/sr/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/sv/LC_MESSAGES/django.po +3 -2
- wagtail/sites/locale/ta/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/tests.py +7 -7
- wagtail/snippets/action_menu.py +2 -1
- wagtail/snippets/locale/af/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/af/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/az_AZ/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/bg/LC_MESSAGES/django.po +10 -1
- wagtail/snippets/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/ca/LC_MESSAGES/django.po +11 -3
- wagtail/snippets/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/de/LC_MESSAGES/django.po +15 -3
- wagtail/snippets/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/en/LC_MESSAGES/django.po +23 -13
- wagtail/snippets/locale/en_IN/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/en_IN/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/es_VE/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/eu/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/eu/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/fr/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/fr/LC_MESSAGES/django.po +11 -3
- wagtail/snippets/locale/gl/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/gl/LC_MESSAGES/django.po +9 -1
- wagtail/snippets/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/hi/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/hi/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/ht/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/ht/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/it/LC_MESSAGES/django.po +11 -1
- wagtail/snippets/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/ka/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/nl/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/nl/LC_MESSAGES/django.po +11 -3
- wagtail/snippets/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/ru/LC_MESSAGES/django.po +11 -3
- wagtail/snippets/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/sr/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/sr/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/sv/LC_MESSAGES/django.po +13 -2
- wagtail/snippets/locale/ta/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/ta/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/snippets/tests/test_chooser_block.py +197 -0
- wagtail/snippets/tests/test_chooser_panel.py +149 -0
- wagtail/snippets/tests/test_chooser_views.py +375 -0
- wagtail/snippets/tests/test_chooser_widget.py +22 -0
- wagtail/snippets/tests/test_compare_revisions_view.py +167 -0
- wagtail/snippets/tests/test_copy_view.py +38 -0
- wagtail/snippets/tests/test_create_view.py +1163 -0
- wagtail/snippets/tests/test_delete_view.py +225 -0
- wagtail/snippets/tests/test_edit_view.py +3243 -0
- wagtail/snippets/tests/test_history_view.py +182 -0
- wagtail/snippets/tests/test_index_view.py +105 -0
- wagtail/snippets/tests/test_list_view.py +786 -0
- wagtail/snippets/tests/test_locking.py +28 -0
- wagtail/snippets/tests/test_permissions.py +167 -0
- wagtail/snippets/tests/test_preview.py +56 -3
- wagtail/snippets/tests/test_revert_view.py +343 -0
- wagtail/snippets/tests/test_snippet_models.py +112 -0
- wagtail/snippets/tests/test_unpublish_view.py +228 -0
- wagtail/snippets/tests/test_unschedule_view.py +151 -0
- wagtail/snippets/tests/test_viewset.py +38 -5
- wagtail/snippets/views/snippets.py +76 -30
- wagtail/snippets/widgets.py +2 -2
- wagtail/templatetags/wagtailcore_tags.py +2 -2
- wagtail/test/dummy_external_storage.py +1 -1
- wagtail/test/testapp/fixtures/test.json +22 -0
- wagtail/test/testapp/fixtures/test_empty.json +2 -0
- wagtail/test/testapp/fixtures/test_explorable_pages.json +10 -0
- wagtail/test/testapp/fixtures/test_specific.json +9 -0
- wagtail/test/testapp/migrations/0059_nopromotepage.py +25 -0
- wagtail/test/testapp/models.py +7 -0
- wagtail/test/testapp/views.py +5 -0
- wagtail/test/utils/page_tests.py +7 -7
- wagtail/test/utils/wagtail_factories/builder.py +2 -2
- wagtail/tests/streamfield_migrations/test_migrations.py +35 -0
- wagtail/tests/test_blocks.py +321 -61
- wagtail/tests/test_collection_model.py +12 -0
- wagtail/tests/test_page_model.py +190 -1
- wagtail/tests/test_page_privacy.py +5 -0
- wagtail/tests/test_reference_index.py +42 -0
- wagtail/tests/test_revision_model.py +118 -1
- wagtail/tests/test_utils.py +2 -2
- wagtail/users/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/bg/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/bg/LC_MESSAGES/django.po +10 -1
- wagtail/users/locale/bn/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/de/LC_MESSAGES/django.po +6 -3
- wagtail/users/locale/dv/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/en/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/en/LC_MESSAGES/django.po +14 -14
- wagtail/users/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/es_419/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/et/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/eu/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/eu/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/he_IL/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/hy/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/id_ID/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/id_ID/LC_MESSAGES/django.po +7 -3
- wagtail/users/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/it/LC_MESSAGES/django.po +15 -3
- wagtail/users/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/ka/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/ru/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/ru/LC_MESSAGES/django.po +4 -4
- wagtail/users/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/sv/LC_MESSAGES/django.po +49 -18
- wagtail/users/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/ug/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/users/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/users/tests/test_admin_views.py +39 -25
- wagtail/users/utils.py +4 -1
- wagtail/users/views/groups.py +19 -5
- wagtail/users/wagtail_hooks.py +1 -1
- wagtail/utils/loading.py +2 -2
- wagtail-7.3.data/data/AGENTS.md +21 -0
- wagtail-7.3.data/data/CHANGELOG.txt +4957 -0
- wagtail-7.3.data/data/CODE_OF_CONDUCT.md +71 -0
- wagtail-7.3.data/data/CONTRIBUTORS.md +1001 -0
- wagtail-7.3.data/data/SPONSORS.md +55 -0
- {wagtail-7.2.1.dist-info → wagtail-7.3.dist-info}/METADATA +6 -6
- {wagtail-7.2.1.dist-info → wagtail-7.3.dist-info}/RECORD +1301 -1267
- {wagtail-7.2.1.dist-info → wagtail-7.3.dist-info}/WHEEL +1 -1
- wagtail/images/static/wagtailimages/js/image-url-generator.js +0 -1
- wagtail/snippets/tests/test_snippets.py +0 -6377
- {wagtail-7.2.1.dist-info → wagtail-7.3.dist-info}/entry_points.txt +0 -0
- {wagtail-7.2.1.dist-info → wagtail-7.3.dist-info}/licenses/LICENSE +0 -0
- {wagtail-7.2.1.dist-info → wagtail-7.3.dist-info}/top_level.txt +0 -0
|
@@ -7,13 +7,13 @@ from django.conf import settings
|
|
|
7
7
|
from django.contrib.auth.models import Group, Permission
|
|
8
8
|
from django.core import mail
|
|
9
9
|
from django.core.files.base import ContentFile
|
|
10
|
-
from django.http import HttpRequest, HttpResponse
|
|
10
|
+
from django.http import HttpRequest, HttpResponse, JsonResponse
|
|
11
11
|
from django.test import TestCase, modify_settings, override_settings
|
|
12
12
|
from django.urls import reverse
|
|
13
13
|
from django.utils import timezone
|
|
14
14
|
from django.utils.translation import gettext_lazy as _
|
|
15
15
|
|
|
16
|
-
from wagtail.admin.action_menu import ActionMenuItem
|
|
16
|
+
from wagtail.admin.action_menu import ActionMenuItem, PublishMenuItem
|
|
17
17
|
from wagtail.admin.admin_url_finder import AdminURLFinder
|
|
18
18
|
from wagtail.exceptions import PageClassNotFoundError
|
|
19
19
|
from wagtail.models import (
|
|
@@ -119,6 +119,28 @@ class TestPageEdit(WagtailTestUtils, TestCase):
|
|
|
119
119
|
# Login
|
|
120
120
|
self.user = self.login()
|
|
121
121
|
|
|
122
|
+
def get_publish_button_label(self, response):
|
|
123
|
+
soup = self.get_soup(response.content)
|
|
124
|
+
publish_button = soup.select_one('.w-dropdown-button > [name="action-publish"]')
|
|
125
|
+
if publish_button is None:
|
|
126
|
+
publish_button = soup.select_one('[name="action-publish"]')
|
|
127
|
+
self.assertIsNotNone(publish_button)
|
|
128
|
+
label = publish_button.select_one('[data-w-progress-target="label"]')
|
|
129
|
+
self.assertIsNotNone(label)
|
|
130
|
+
return label.get_text(strip=True)
|
|
131
|
+
|
|
132
|
+
def schedule_child_page(self, go_live_at):
|
|
133
|
+
edit_url = reverse("wagtailadmin_pages:edit", args=(self.child_page.id,))
|
|
134
|
+
post_data = {
|
|
135
|
+
"title": self.child_page.title,
|
|
136
|
+
"content": self.child_page.content,
|
|
137
|
+
"slug": self.child_page.slug,
|
|
138
|
+
"go_live_at": submittable_timestamp(go_live_at),
|
|
139
|
+
}
|
|
140
|
+
self.client.post(edit_url, post_data, follow=True)
|
|
141
|
+
self.child_page.refresh_from_db(fields=["go_live_at"])
|
|
142
|
+
return edit_url
|
|
143
|
+
|
|
122
144
|
def assertSchedulingDialogRendered(self, response, edit_url):
|
|
123
145
|
# Should show the "Edit schedule" button
|
|
124
146
|
html = response.content.decode()
|
|
@@ -220,6 +242,106 @@ class TestPageEdit(WagtailTestUtils, TestCase):
|
|
|
220
242
|
expected_url = "/admin/pages/%d/edit/" % self.event_page.id
|
|
221
243
|
self.assertEqual(url_finder.get_edit_url(self.event_page), expected_url)
|
|
222
244
|
|
|
245
|
+
# Autosave defaults to enabled with 500ms interval
|
|
246
|
+
soup = self.get_soup(response.content)
|
|
247
|
+
form = soup.select_one("form[data-edit-form]")
|
|
248
|
+
self.assertIsNotNone(form)
|
|
249
|
+
self.assertIn("w-autosave", form["data-controller"].split())
|
|
250
|
+
self.assertTrue(
|
|
251
|
+
{
|
|
252
|
+
"w-unsaved:add->w-autosave#save:prevent",
|
|
253
|
+
"w-autosave:success->w-unsaved#clear",
|
|
254
|
+
}.issubset(form["data-action"].split())
|
|
255
|
+
)
|
|
256
|
+
self.assertEqual(form.attrs.get("data-w-autosave-interval-value"), "500")
|
|
257
|
+
|
|
258
|
+
def test_loaded_revision_id_and_timestamp_included_in_form(self):
|
|
259
|
+
# Ensure there's a revision for the page
|
|
260
|
+
self.event_page.title = "Updated event page"
|
|
261
|
+
revision = self.event_page.save_revision()
|
|
262
|
+
self.assertEqual(self.event_page.revisions.count(), 1)
|
|
263
|
+
|
|
264
|
+
response = self.client.get(
|
|
265
|
+
reverse("wagtailadmin_pages:edit", args=(self.event_page.id,)),
|
|
266
|
+
)
|
|
267
|
+
self.assertEqual(response.status_code, 200)
|
|
268
|
+
soup = self.get_soup(response.content)
|
|
269
|
+
form = soup.select_one("form[data-edit-form]")
|
|
270
|
+
self.assertIsNotNone(form)
|
|
271
|
+
loaded_revision = form.select_one("input[name='loaded_revision_id']")
|
|
272
|
+
self.assertIsNotNone(loaded_revision)
|
|
273
|
+
self.assertEqual(int(loaded_revision["value"]), revision.pk)
|
|
274
|
+
loaded_timestamp = form.select_one("input[name='loaded_revision_created_at']")
|
|
275
|
+
self.assertIsNotNone(loaded_timestamp)
|
|
276
|
+
self.assertEqual(loaded_timestamp["value"], revision.created_at.isoformat())
|
|
277
|
+
|
|
278
|
+
@override_settings(WAGTAIL_AUTOSAVE_INTERVAL=0)
|
|
279
|
+
def test_autosave_disabled(self):
|
|
280
|
+
response = self.client.get(
|
|
281
|
+
reverse("wagtailadmin_pages:edit", args=(self.event_page.id,))
|
|
282
|
+
)
|
|
283
|
+
self.assertEqual(response.status_code, 200)
|
|
284
|
+
soup = self.get_soup(response.content)
|
|
285
|
+
form = soup.select_one("form[data-edit-form]")
|
|
286
|
+
self.assertIsNotNone(form)
|
|
287
|
+
self.assertNotIn("w-autosave", form["data-controller"].split())
|
|
288
|
+
self.assertNotIn("w-autosave", form["data-action"])
|
|
289
|
+
self.assertIsNone(form.attrs.get("data-w-autosave-interval-value"))
|
|
290
|
+
|
|
291
|
+
@override_settings(WAGTAIL_AUTOSAVE_INTERVAL=2000)
|
|
292
|
+
def test_autosave_custom_interval(self):
|
|
293
|
+
response = self.client.get(
|
|
294
|
+
reverse("wagtailadmin_pages:edit", args=(self.event_page.id,))
|
|
295
|
+
)
|
|
296
|
+
self.assertEqual(response.status_code, 200)
|
|
297
|
+
soup = self.get_soup(response.content)
|
|
298
|
+
form = soup.select_one("form[data-edit-form]")
|
|
299
|
+
self.assertIsNotNone(form)
|
|
300
|
+
self.assertIn("w-autosave", form["data-controller"].split())
|
|
301
|
+
self.assertTrue(
|
|
302
|
+
{
|
|
303
|
+
"w-unsaved:add->w-autosave#save:prevent",
|
|
304
|
+
"w-autosave:success->w-unsaved#clear",
|
|
305
|
+
}.issubset(form["data-action"].split())
|
|
306
|
+
)
|
|
307
|
+
self.assertEqual(form.attrs.get("data-w-autosave-interval-value"), "2000")
|
|
308
|
+
|
|
309
|
+
def test_publish_button_shows_schedule_label_for_future_go_live(self):
|
|
310
|
+
go_live_at = timezone.now() + datetime.timedelta(hours=1)
|
|
311
|
+
|
|
312
|
+
response = self.client.get(self.schedule_child_page(go_live_at))
|
|
313
|
+
self.assertEqual(response.status_code, 200)
|
|
314
|
+
|
|
315
|
+
publish_menu_item = next(
|
|
316
|
+
item
|
|
317
|
+
for item in response.context["action_menu"].menu_items
|
|
318
|
+
if getattr(item, "name", "") == "action-publish"
|
|
319
|
+
)
|
|
320
|
+
publish_context = publish_menu_item.get_context_data(
|
|
321
|
+
response.context["action_menu"].context
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
self.assertTrue(publish_context["is_scheduled"])
|
|
325
|
+
self.assertEqual(self.get_publish_button_label(response), "Schedule to publish")
|
|
326
|
+
|
|
327
|
+
def test_publish_button_shows_publish_label_for_past_schedule(self):
|
|
328
|
+
go_live_at = timezone.now() - datetime.timedelta(hours=1)
|
|
329
|
+
|
|
330
|
+
response = self.client.get(self.schedule_child_page(go_live_at))
|
|
331
|
+
self.assertEqual(response.status_code, 200)
|
|
332
|
+
|
|
333
|
+
publish_menu_item = next(
|
|
334
|
+
item
|
|
335
|
+
for item in response.context["action_menu"].menu_items
|
|
336
|
+
if getattr(item, "name", "") == "action-publish"
|
|
337
|
+
)
|
|
338
|
+
publish_context = publish_menu_item.get_context_data(
|
|
339
|
+
response.context["action_menu"].context
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
self.assertFalse(publish_context["is_scheduled"])
|
|
343
|
+
self.assertEqual(self.get_publish_button_label(response), "Publish")
|
|
344
|
+
|
|
223
345
|
def test_construct_page_action_menu_hook_with_custom_default_button(self):
|
|
224
346
|
class CustomDefaultItem(ActionMenuItem):
|
|
225
347
|
label = "Custom button"
|
|
@@ -468,6 +590,485 @@ class TestPageEdit(WagtailTestUtils, TestCase):
|
|
|
468
590
|
# The draft_title should have a new title
|
|
469
591
|
self.assertEqual(child_page_new.draft_title, post_data["title"])
|
|
470
592
|
|
|
593
|
+
def test_page_edit_post_with_json_response(self):
|
|
594
|
+
self.assertEqual(self.child_page.revisions.count(), 1)
|
|
595
|
+
loaded_revision = self.child_page.get_latest_revision()
|
|
596
|
+
# Tests simple editing
|
|
597
|
+
post_data = {
|
|
598
|
+
"title": "I've been edited!",
|
|
599
|
+
"content": "Some content",
|
|
600
|
+
"slug": "hello-world",
|
|
601
|
+
"loaded_revision_id": loaded_revision.pk,
|
|
602
|
+
"loaded_revision_created_at": loaded_revision.created_at.isoformat(),
|
|
603
|
+
}
|
|
604
|
+
response = self.client.post(
|
|
605
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
606
|
+
post_data,
|
|
607
|
+
headers={"Accept": "application/json"},
|
|
608
|
+
)
|
|
609
|
+
|
|
610
|
+
# Should be a 200 OK JSON response
|
|
611
|
+
self.assertEqual(response.status_code, 200)
|
|
612
|
+
self.assertEqual(response["Content-Type"], "application/json")
|
|
613
|
+
response_json = response.json()
|
|
614
|
+
self.assertEqual(response_json["success"], True)
|
|
615
|
+
self.assertEqual(response_json["pk"], self.child_page.pk)
|
|
616
|
+
self.assertEqual(response_json["field_updates"], {})
|
|
617
|
+
|
|
618
|
+
# Should create a new revision to be overwritten later
|
|
619
|
+
self.assertEqual(self.child_page.revisions.count(), 2)
|
|
620
|
+
self.assertNotEqual(response_json["revision_id"], loaded_revision.pk)
|
|
621
|
+
revision = self.child_page.revisions.get(pk=response_json["revision_id"])
|
|
622
|
+
self.assertEqual(
|
|
623
|
+
response_json["revision_created_at"],
|
|
624
|
+
revision.created_at.isoformat(),
|
|
625
|
+
)
|
|
626
|
+
self.assertEqual(revision.content["title"], "I've been edited!")
|
|
627
|
+
self.assertEqual(
|
|
628
|
+
response_json["comments"],
|
|
629
|
+
{
|
|
630
|
+
"comments": [],
|
|
631
|
+
"user": str(self.user.pk),
|
|
632
|
+
"authors": {},
|
|
633
|
+
},
|
|
634
|
+
)
|
|
635
|
+
|
|
636
|
+
soup = self.get_soup(response_json["html"])
|
|
637
|
+
|
|
638
|
+
# Should reload only the status side panel
|
|
639
|
+
side_panels = soup.select(
|
|
640
|
+
"template[data-controller='w-teleport']"
|
|
641
|
+
"[data-w-teleport-target-value^='[data-side-panel=']"
|
|
642
|
+
"[data-w-teleport-mode-value='innerHTML']"
|
|
643
|
+
)
|
|
644
|
+
self.assertEqual(len(side_panels), 1)
|
|
645
|
+
status_side_panel = side_panels[0]
|
|
646
|
+
self.assertEqual(
|
|
647
|
+
status_side_panel["data-w-teleport-target-value"],
|
|
648
|
+
"[data-side-panel='status']",
|
|
649
|
+
)
|
|
650
|
+
|
|
651
|
+
# These dialogs will be teleported to the body, so don't rerender them
|
|
652
|
+
# as we would end up with multiple instances of each
|
|
653
|
+
workflow_status_dialog = soup.find("div", id="workflow-status-dialog")
|
|
654
|
+
self.assertIsNone(workflow_status_dialog)
|
|
655
|
+
set_privacy_dialog = soup.find("div", id="set-privacy")
|
|
656
|
+
self.assertIsNone(set_privacy_dialog)
|
|
657
|
+
|
|
658
|
+
breadcrumbs = soup.find(
|
|
659
|
+
"template",
|
|
660
|
+
{
|
|
661
|
+
"data-controller": "w-teleport",
|
|
662
|
+
"data-w-teleport-target-value": "header [data-w-breadcrumbs]",
|
|
663
|
+
"data-w-teleport-mode-value": "outerHTML",
|
|
664
|
+
},
|
|
665
|
+
)
|
|
666
|
+
self.assertIsNotNone(breadcrumbs)
|
|
667
|
+
# Should not include header buttons as they're already rendered
|
|
668
|
+
self.assertIsNone(breadcrumbs.select_one("#w-slim-header-buttons"))
|
|
669
|
+
|
|
670
|
+
# History link should not be included as it's already present on the page
|
|
671
|
+
history_link = soup.find(
|
|
672
|
+
"template",
|
|
673
|
+
{
|
|
674
|
+
"data-controller": "w-teleport",
|
|
675
|
+
"data-w-teleport-target-value": "[data-side-panel-toggle]:last-of-type",
|
|
676
|
+
"data-w-teleport-mode-value": "afterend",
|
|
677
|
+
},
|
|
678
|
+
)
|
|
679
|
+
self.assertIsNone(history_link)
|
|
680
|
+
|
|
681
|
+
form_title_heading = soup.find(
|
|
682
|
+
"template",
|
|
683
|
+
{
|
|
684
|
+
"data-controller": "w-teleport",
|
|
685
|
+
"data-w-teleport-target-value": "#header-title span",
|
|
686
|
+
"data-w-teleport-mode-value": "textContent",
|
|
687
|
+
},
|
|
688
|
+
)
|
|
689
|
+
self.assertIsNone(form_title_heading)
|
|
690
|
+
header_title = soup.find(
|
|
691
|
+
"template",
|
|
692
|
+
{
|
|
693
|
+
"data-controller": "w-teleport",
|
|
694
|
+
"data-w-teleport-target-value": "head title",
|
|
695
|
+
"data-w-teleport-mode-value": "textContent",
|
|
696
|
+
},
|
|
697
|
+
)
|
|
698
|
+
self.assertIsNotNone(header_title)
|
|
699
|
+
self.assertEqual(
|
|
700
|
+
header_title.text.strip(),
|
|
701
|
+
# Looks a bit off because get_admin_display_title for SimplePage
|
|
702
|
+
# adds (simple page) suffix
|
|
703
|
+
"Editing Simple page: I've been edited! (simple page)",
|
|
704
|
+
)
|
|
705
|
+
|
|
706
|
+
# No form updates as we already have the loaded revision id and timestamp
|
|
707
|
+
form_adds = soup.find(
|
|
708
|
+
"template",
|
|
709
|
+
{
|
|
710
|
+
"data-controller": "w-teleport",
|
|
711
|
+
"data-w-teleport-target-value": "form[data-edit-form]",
|
|
712
|
+
"data-w-teleport-mode-value": "afterbegin",
|
|
713
|
+
},
|
|
714
|
+
)
|
|
715
|
+
self.assertIsNone(form_adds)
|
|
716
|
+
|
|
717
|
+
# Should not load the editing sessions module as it's already rendered
|
|
718
|
+
editing_sessions = soup.find(
|
|
719
|
+
"template",
|
|
720
|
+
{
|
|
721
|
+
"data-controller": "w-teleport",
|
|
722
|
+
"data-w-teleport-target-value": "#w-autosave-indicator",
|
|
723
|
+
"data-w-teleport-mode-value": "afterend",
|
|
724
|
+
},
|
|
725
|
+
)
|
|
726
|
+
self.assertIsNone(editing_sessions)
|
|
727
|
+
|
|
728
|
+
# The page should have "has_unpublished_changes" flag set
|
|
729
|
+
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
|
730
|
+
self.assertTrue(child_page_new.has_unpublished_changes)
|
|
731
|
+
|
|
732
|
+
# Page fields should not be changed (because we just created a new draft)
|
|
733
|
+
self.assertEqual(child_page_new.title, self.child_page.title)
|
|
734
|
+
self.assertEqual(child_page_new.content, self.child_page.content)
|
|
735
|
+
self.assertEqual(child_page_new.slug, self.child_page.slug)
|
|
736
|
+
|
|
737
|
+
# The draft_title should have a new title
|
|
738
|
+
self.assertEqual(child_page_new.draft_title, post_data["title"])
|
|
739
|
+
|
|
740
|
+
def test_save_outdated_revision_with_json_response(self):
|
|
741
|
+
self.assertEqual(self.child_page.revisions.count(), 1)
|
|
742
|
+
loaded_revision = self.child_page.get_latest_revision()
|
|
743
|
+
self.child_page.title = "Someone else edited after the page is loaded"
|
|
744
|
+
other_revision = self.child_page.save_revision(user=self.user)
|
|
745
|
+
self.assertEqual(self.child_page.revisions.count(), 2)
|
|
746
|
+
|
|
747
|
+
post_data = {
|
|
748
|
+
"title": "Just another edit submitted after the other edit is done",
|
|
749
|
+
"content": "Some content",
|
|
750
|
+
"slug": "hello-world",
|
|
751
|
+
"loaded_revision_id": loaded_revision.pk,
|
|
752
|
+
}
|
|
753
|
+
response = self.client.post(
|
|
754
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
755
|
+
post_data,
|
|
756
|
+
headers={"Accept": "application/json"},
|
|
757
|
+
)
|
|
758
|
+
|
|
759
|
+
# Instead of creating a new revision for autosave (which means the user
|
|
760
|
+
# would unknowingly replace a newer revision), we return an error
|
|
761
|
+
# response that should be a 400 response
|
|
762
|
+
self.assertEqual(response.status_code, 400)
|
|
763
|
+
self.assertEqual(response["Content-Type"], "application/json")
|
|
764
|
+
self.assertEqual(
|
|
765
|
+
response.json(),
|
|
766
|
+
{
|
|
767
|
+
"success": False,
|
|
768
|
+
"error_code": "invalid_revision",
|
|
769
|
+
"error_message": "Saving will overwrite a newer version.",
|
|
770
|
+
},
|
|
771
|
+
)
|
|
772
|
+
|
|
773
|
+
# Page fields should still be from the published version
|
|
774
|
+
self.child_page.refresh_from_db()
|
|
775
|
+
self.assertEqual(self.child_page.title, "Hello world!")
|
|
776
|
+
|
|
777
|
+
# The initially loaded revision, and the actual latest revision,
|
|
778
|
+
# should both be unchanged
|
|
779
|
+
self.assertEqual(self.child_page.revisions.count(), 2)
|
|
780
|
+
loaded_revision.refresh_from_db()
|
|
781
|
+
self.assertEqual(loaded_revision.content["title"], "Hello world!")
|
|
782
|
+
other_revision.refresh_from_db()
|
|
783
|
+
self.assertEqual(
|
|
784
|
+
other_revision.content["title"],
|
|
785
|
+
"Someone else edited after the page is loaded",
|
|
786
|
+
)
|
|
787
|
+
self.assertEqual(self.child_page.get_latest_revision().id, other_revision.id)
|
|
788
|
+
|
|
789
|
+
def test_save_outdated_revision_timestamp_with_json_response(self):
|
|
790
|
+
self.assertEqual(self.child_page.revisions.count(), 1)
|
|
791
|
+
loaded_revision = self.child_page.get_latest_revision()
|
|
792
|
+
loaded_revision_created_at = loaded_revision.created_at.isoformat()
|
|
793
|
+
# Simulate the loaded revision being updated via another session's autosave,
|
|
794
|
+
# which means the revision is overwritten with new content and created_at
|
|
795
|
+
self.child_page.title = "Someone else edited after the page is loaded"
|
|
796
|
+
self.child_page.save_revision(overwrite_revision=loaded_revision)
|
|
797
|
+
self.assertEqual(self.child_page.revisions.count(), 1)
|
|
798
|
+
|
|
799
|
+
post_data = {
|
|
800
|
+
"title": "Just another edit submitted after the other edit is done",
|
|
801
|
+
"content": "Some content",
|
|
802
|
+
"slug": "hello-world",
|
|
803
|
+
"loaded_revision_id": loaded_revision.pk,
|
|
804
|
+
"loaded_revision_created_at": loaded_revision_created_at,
|
|
805
|
+
}
|
|
806
|
+
response = self.client.post(
|
|
807
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
808
|
+
post_data,
|
|
809
|
+
headers={"Accept": "application/json"},
|
|
810
|
+
)
|
|
811
|
+
|
|
812
|
+
# Instead of creating a new revision for autosave (which means the user
|
|
813
|
+
# would unknowingly replace the updated revision), we return an error
|
|
814
|
+
# response that should be a 400 response
|
|
815
|
+
self.assertEqual(response.status_code, 400)
|
|
816
|
+
self.assertEqual(response["Content-Type"], "application/json")
|
|
817
|
+
self.assertEqual(
|
|
818
|
+
response.json(),
|
|
819
|
+
{
|
|
820
|
+
"success": False,
|
|
821
|
+
"error_code": "invalid_revision",
|
|
822
|
+
"error_message": "Saving will overwrite a newer version.",
|
|
823
|
+
},
|
|
824
|
+
)
|
|
825
|
+
|
|
826
|
+
# Page fields should still be from the published version
|
|
827
|
+
self.child_page.refresh_from_db()
|
|
828
|
+
self.assertEqual(self.child_page.title, "Hello world!")
|
|
829
|
+
|
|
830
|
+
# The initially loaded revision should prefer the other session's autosave
|
|
831
|
+
self.assertEqual(self.child_page.revisions.count(), 1)
|
|
832
|
+
loaded_revision.refresh_from_db()
|
|
833
|
+
self.assertEqual(
|
|
834
|
+
loaded_revision.content["title"],
|
|
835
|
+
"Someone else edited after the page is loaded",
|
|
836
|
+
)
|
|
837
|
+
self.assertEqual(self.child_page.get_latest_revision().id, loaded_revision.id)
|
|
838
|
+
|
|
839
|
+
def test_page_edit_post_with_overwrite_revision_and_json_response(self):
|
|
840
|
+
self.assertEqual(self.child_page.revisions.count(), 1)
|
|
841
|
+
loaded_revision = self.child_page.get_latest_revision()
|
|
842
|
+
self.child_page.title = "A changed title"
|
|
843
|
+
revision = self.child_page.save_revision(user=self.user)
|
|
844
|
+
self.assertEqual(self.child_page.revisions.count(), 2)
|
|
845
|
+
|
|
846
|
+
post_data = {
|
|
847
|
+
"title": "I've been edited again!",
|
|
848
|
+
"content": "Some content",
|
|
849
|
+
"slug": "hello-world",
|
|
850
|
+
# The page was originally loaded with loaded_revision, but
|
|
851
|
+
# a successful autosave created a new revision which we now
|
|
852
|
+
# want to overwrite with a new autosave request
|
|
853
|
+
"loaded_revision_id": loaded_revision.pk,
|
|
854
|
+
"overwrite_revision_id": revision.id,
|
|
855
|
+
}
|
|
856
|
+
response = self.client.post(
|
|
857
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
858
|
+
post_data,
|
|
859
|
+
headers={"Accept": "application/json"},
|
|
860
|
+
)
|
|
861
|
+
|
|
862
|
+
# Should be a 200 OK JSON response
|
|
863
|
+
self.assertEqual(response.status_code, 200)
|
|
864
|
+
self.assertEqual(response["Content-Type"], "application/json")
|
|
865
|
+
revision.refresh_from_db()
|
|
866
|
+
response_json = response.json()
|
|
867
|
+
self.assertEqual(response_json["success"], True)
|
|
868
|
+
self.assertEqual(response_json["pk"], self.child_page.pk)
|
|
869
|
+
self.assertEqual(response_json["revision_id"], revision.pk)
|
|
870
|
+
self.assertEqual(
|
|
871
|
+
response_json["revision_created_at"],
|
|
872
|
+
revision.created_at.isoformat(),
|
|
873
|
+
)
|
|
874
|
+
|
|
875
|
+
# The page should have "has_unpublished_changes" flag set
|
|
876
|
+
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
|
877
|
+
self.assertTrue(child_page_new.has_unpublished_changes)
|
|
878
|
+
|
|
879
|
+
# Page fields should still be from the published version
|
|
880
|
+
self.assertEqual(child_page_new.title, "Hello world!")
|
|
881
|
+
|
|
882
|
+
# The draft_title should have a new title
|
|
883
|
+
self.assertEqual(child_page_new.draft_title, "I've been edited again!")
|
|
884
|
+
|
|
885
|
+
# There should still be only two revisions, but the latest one should be overwritten
|
|
886
|
+
self.assertEqual(self.child_page.revisions.count(), 2)
|
|
887
|
+
self.assertEqual(self.child_page.get_latest_revision().id, revision.id)
|
|
888
|
+
revision.refresh_from_db()
|
|
889
|
+
self.assertEqual(revision.content["title"], "I've been edited again!")
|
|
890
|
+
|
|
891
|
+
def test_overwrite_non_latest_revision(self):
|
|
892
|
+
self.child_page.title = "A changed title"
|
|
893
|
+
user_revision = self.child_page.save_revision(user=self.user)
|
|
894
|
+
self.child_page.title = "Someone else's changed title"
|
|
895
|
+
later_revision = self.child_page.save_revision()
|
|
896
|
+
self.assertEqual(self.child_page.revisions.count(), 3)
|
|
897
|
+
|
|
898
|
+
post_data = {
|
|
899
|
+
"title": "I've been edited again!",
|
|
900
|
+
"content": "Some content",
|
|
901
|
+
"slug": "hello-world",
|
|
902
|
+
"overwrite_revision_id": user_revision.id,
|
|
903
|
+
}
|
|
904
|
+
response = self.client.post(
|
|
905
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
906
|
+
post_data,
|
|
907
|
+
headers={"Accept": "application/json"},
|
|
908
|
+
)
|
|
909
|
+
|
|
910
|
+
# Should be a 400 response
|
|
911
|
+
self.assertEqual(response.status_code, 400)
|
|
912
|
+
self.assertEqual(response["Content-Type"], "application/json")
|
|
913
|
+
self.assertEqual(
|
|
914
|
+
response.json(),
|
|
915
|
+
{
|
|
916
|
+
"success": False,
|
|
917
|
+
"error_code": "invalid_revision",
|
|
918
|
+
"error_message": "Saving will overwrite a newer version.",
|
|
919
|
+
},
|
|
920
|
+
)
|
|
921
|
+
|
|
922
|
+
# Page fields should still be from the published version
|
|
923
|
+
self.child_page.refresh_from_db()
|
|
924
|
+
self.assertEqual(self.child_page.title, "Hello world!")
|
|
925
|
+
|
|
926
|
+
# The passed revision for overwriting, and the actual latest revision, should both be unchanged
|
|
927
|
+
self.assertEqual(self.child_page.revisions.count(), 3)
|
|
928
|
+
user_revision.refresh_from_db()
|
|
929
|
+
self.assertEqual(user_revision.content["title"], "A changed title")
|
|
930
|
+
later_revision.refresh_from_db()
|
|
931
|
+
self.assertEqual(
|
|
932
|
+
later_revision.content["title"], "Someone else's changed title"
|
|
933
|
+
)
|
|
934
|
+
self.assertEqual(self.child_page.get_latest_revision().id, later_revision.id)
|
|
935
|
+
|
|
936
|
+
def test_get_hydrate_create_view(self):
|
|
937
|
+
response = self.client.get(
|
|
938
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,))
|
|
939
|
+
+ "?_w_hydrate_create_view=1",
|
|
940
|
+
)
|
|
941
|
+
self.assertEqual(response.status_code, 200)
|
|
942
|
+
self.assertTemplateUsed(response, "wagtailadmin/pages/edit_partials.html")
|
|
943
|
+
soup = self.get_soup(response.content)
|
|
944
|
+
|
|
945
|
+
# Should reload the status and preview side panels
|
|
946
|
+
side_panels = soup.select(
|
|
947
|
+
"template[data-controller='w-teleport']"
|
|
948
|
+
"[data-w-teleport-target-value^='[data-side-panel=']"
|
|
949
|
+
"[data-w-teleport-mode-value='innerHTML']"
|
|
950
|
+
)
|
|
951
|
+
self.assertEqual(len(side_panels), 2)
|
|
952
|
+
status_side_panel = side_panels[0]
|
|
953
|
+
self.assertEqual(
|
|
954
|
+
status_side_panel["data-w-teleport-target-value"],
|
|
955
|
+
"[data-side-panel='status']",
|
|
956
|
+
)
|
|
957
|
+
|
|
958
|
+
# Under normal circumstances, a newly-created page would never
|
|
959
|
+
# immediately enter a workflow without a full-page reload, so don't
|
|
960
|
+
# bother rendering the workflow status dialog when hydrating a create view
|
|
961
|
+
workflow_status_dialog = soup.find("div", id="workflow-status-dialog")
|
|
962
|
+
self.assertIsNone(workflow_status_dialog)
|
|
963
|
+
# However, we should still render the set privacy dialog, since the
|
|
964
|
+
# user might want to set the page to private immediately after creating it,
|
|
965
|
+
# and a full-page reload is not required for that
|
|
966
|
+
set_privacy_dialog = soup.find("div", id="set-privacy")
|
|
967
|
+
self.assertIsNotNone(set_privacy_dialog)
|
|
968
|
+
|
|
969
|
+
# We need to change the preview URL to use the one for editing, but there is
|
|
970
|
+
# no way to declaratively change attributes via partial rendering yet, and we
|
|
971
|
+
# need to restart the controller anyway, so just re-render the whole panel
|
|
972
|
+
preview_side_panel = side_panels[1]
|
|
973
|
+
self.assertEqual(
|
|
974
|
+
preview_side_panel["data-w-teleport-target-value"],
|
|
975
|
+
"[data-side-panel='preview']",
|
|
976
|
+
)
|
|
977
|
+
preview_url = reverse(
|
|
978
|
+
"wagtailadmin_pages:preview_on_edit", args=(self.child_page.id,)
|
|
979
|
+
)
|
|
980
|
+
self.assertIsNotNone(
|
|
981
|
+
preview_side_panel.select_one(f"[data-w-preview-url-value='{preview_url}']")
|
|
982
|
+
)
|
|
983
|
+
|
|
984
|
+
breadcrumbs = soup.find(
|
|
985
|
+
"template",
|
|
986
|
+
{
|
|
987
|
+
"data-controller": "w-teleport",
|
|
988
|
+
"data-w-teleport-target-value": "header [data-w-breadcrumbs]",
|
|
989
|
+
"data-w-teleport-mode-value": "outerHTML",
|
|
990
|
+
},
|
|
991
|
+
)
|
|
992
|
+
self.assertIsNotNone(breadcrumbs)
|
|
993
|
+
# Should include header buttons as they were not rendered in the create view
|
|
994
|
+
self.assertIsNotNone(breadcrumbs.select_one("#w-slim-header-buttons"))
|
|
995
|
+
|
|
996
|
+
# Should render the history link button as it wasn't rendered in the create view
|
|
997
|
+
history_link = soup.find(
|
|
998
|
+
"template",
|
|
999
|
+
{
|
|
1000
|
+
"data-controller": "w-teleport",
|
|
1001
|
+
"data-w-teleport-target-value": "[data-side-panel-toggle]:last-of-type",
|
|
1002
|
+
"data-w-teleport-mode-value": "afterend",
|
|
1003
|
+
},
|
|
1004
|
+
)
|
|
1005
|
+
history_url = reverse("wagtailadmin_pages:history", args=(self.child_page.id,))
|
|
1006
|
+
self.assertIsNotNone(history_link)
|
|
1007
|
+
self.assertIsNotNone(history_link.select_one(f"a[href='{history_url}']"))
|
|
1008
|
+
|
|
1009
|
+
form_title_heading = soup.find(
|
|
1010
|
+
"template",
|
|
1011
|
+
{
|
|
1012
|
+
"data-controller": "w-teleport",
|
|
1013
|
+
"data-w-teleport-target-value": "#header-title span",
|
|
1014
|
+
"data-w-teleport-mode-value": "textContent",
|
|
1015
|
+
},
|
|
1016
|
+
)
|
|
1017
|
+
self.assertIsNone(form_title_heading)
|
|
1018
|
+
header_title = soup.find(
|
|
1019
|
+
"template",
|
|
1020
|
+
{
|
|
1021
|
+
"data-controller": "w-teleport",
|
|
1022
|
+
"data-w-teleport-target-value": "head title",
|
|
1023
|
+
"data-w-teleport-mode-value": "textContent",
|
|
1024
|
+
},
|
|
1025
|
+
)
|
|
1026
|
+
self.assertIsNotNone(header_title)
|
|
1027
|
+
self.assertEqual(
|
|
1028
|
+
header_title.text.strip(),
|
|
1029
|
+
"Editing Simple page: Hello world! (simple page)",
|
|
1030
|
+
)
|
|
1031
|
+
|
|
1032
|
+
# Should include loaded revision ID and timestamp in the form for
|
|
1033
|
+
# subsequent autosave requests
|
|
1034
|
+
form_adds = soup.find(
|
|
1035
|
+
"template",
|
|
1036
|
+
{
|
|
1037
|
+
"data-controller": "w-teleport",
|
|
1038
|
+
"data-w-teleport-target-value": "form[data-edit-form]",
|
|
1039
|
+
"data-w-teleport-mode-value": "afterbegin",
|
|
1040
|
+
},
|
|
1041
|
+
)
|
|
1042
|
+
latest_revision = self.child_page.get_latest_revision()
|
|
1043
|
+
self.assertIsNotNone(form_adds)
|
|
1044
|
+
self.assertEqual(
|
|
1045
|
+
form_adds.select_one("input[name='loaded_revision_id']")["value"],
|
|
1046
|
+
str(latest_revision.pk),
|
|
1047
|
+
)
|
|
1048
|
+
self.assertEqual(
|
|
1049
|
+
form_adds.select_one("input[name='loaded_revision_created_at']")["value"],
|
|
1050
|
+
latest_revision.created_at.isoformat(),
|
|
1051
|
+
)
|
|
1052
|
+
|
|
1053
|
+
# Should load the editing sessions module as it was not in the create view
|
|
1054
|
+
editing_sessions = soup.find(
|
|
1055
|
+
"template",
|
|
1056
|
+
{
|
|
1057
|
+
"data-controller": "w-teleport",
|
|
1058
|
+
"data-w-teleport-target-value": "#w-autosave-indicator",
|
|
1059
|
+
"data-w-teleport-mode-value": "afterend",
|
|
1060
|
+
},
|
|
1061
|
+
)
|
|
1062
|
+
self.assertIsNotNone(editing_sessions)
|
|
1063
|
+
self.assertEqual(
|
|
1064
|
+
editing_sessions.select_one("input[name='revision_id']")["value"],
|
|
1065
|
+
str(latest_revision.pk),
|
|
1066
|
+
)
|
|
1067
|
+
self.assertEqual(
|
|
1068
|
+
editing_sessions.select_one("input[name='revision_created_at']")["value"],
|
|
1069
|
+
latest_revision.created_at.isoformat(),
|
|
1070
|
+
)
|
|
1071
|
+
|
|
471
1072
|
def test_page_edit_post_unpublished_page(self):
|
|
472
1073
|
# Based on test_page_edit_post(), but tests changes on a draft page vs. live page.
|
|
473
1074
|
post_data = {
|
|
@@ -648,9 +1249,42 @@ class TestPageEdit(WagtailTestUtils, TestCase):
|
|
|
648
1249
|
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)), post_data
|
|
649
1250
|
)
|
|
650
1251
|
|
|
651
|
-
# Shouldn't be redirected
|
|
652
|
-
self.assertContains(response, "The page could not be saved as it is locked")
|
|
653
|
-
|
|
1252
|
+
# Shouldn't be redirected
|
|
1253
|
+
self.assertContains(response, "The page could not be saved as it is locked")
|
|
1254
|
+
|
|
1255
|
+
# The page shouldn't have "has_unpublished_changes" flag set
|
|
1256
|
+
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
|
1257
|
+
self.assertFalse(child_page_new.has_unpublished_changes)
|
|
1258
|
+
|
|
1259
|
+
def test_page_edit_post_when_locked_with_json_response(self):
|
|
1260
|
+
# Tests that trying to edit a locked page results in an error
|
|
1261
|
+
|
|
1262
|
+
# Lock the page
|
|
1263
|
+
self.child_page.locked = True
|
|
1264
|
+
self.child_page.save()
|
|
1265
|
+
|
|
1266
|
+
# Post
|
|
1267
|
+
post_data = {
|
|
1268
|
+
"title": "I've been edited!",
|
|
1269
|
+
"content": "Some content",
|
|
1270
|
+
"slug": "hello-world",
|
|
1271
|
+
}
|
|
1272
|
+
response = self.client.post(
|
|
1273
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
1274
|
+
post_data,
|
|
1275
|
+
headers={"Accept": "application/json"},
|
|
1276
|
+
)
|
|
1277
|
+
|
|
1278
|
+
self.assertEqual(response.status_code, 400)
|
|
1279
|
+
self.assertEqual(
|
|
1280
|
+
response.json(),
|
|
1281
|
+
{
|
|
1282
|
+
"success": False,
|
|
1283
|
+
"error_code": "locked",
|
|
1284
|
+
"error_message": "The page could not be saved as it is locked.",
|
|
1285
|
+
},
|
|
1286
|
+
)
|
|
1287
|
+
|
|
654
1288
|
# The page shouldn't have "has_unpublished_changes" flag set
|
|
655
1289
|
child_page_new = SimplePage.objects.get(id=self.child_page.id)
|
|
656
1290
|
self.assertFalse(child_page_new.has_unpublished_changes)
|
|
@@ -1979,6 +2613,44 @@ class TestPageEdit(WagtailTestUtils, TestCase):
|
|
|
1979
2613
|
self.assertEqual(response.status_code, 200)
|
|
1980
2614
|
self.assertEqual(response.content, b"Overridden!")
|
|
1981
2615
|
|
|
2616
|
+
def test_before_edit_page_hook_with_json_response(self):
|
|
2617
|
+
def non_json_hook_func(request, page):
|
|
2618
|
+
self.assertIsInstance(request, HttpRequest)
|
|
2619
|
+
self.assertEqual(page.id, self.child_page.id)
|
|
2620
|
+
|
|
2621
|
+
return HttpResponse("Overridden!")
|
|
2622
|
+
|
|
2623
|
+
def json_hook_func(request, page):
|
|
2624
|
+
self.assertIsInstance(request, HttpRequest)
|
|
2625
|
+
self.assertEqual(page.id, self.child_page.id)
|
|
2626
|
+
|
|
2627
|
+
return JsonResponse({"status": "purple"})
|
|
2628
|
+
|
|
2629
|
+
with self.register_hook("before_edit_page", non_json_hook_func):
|
|
2630
|
+
response = self.client.get(
|
|
2631
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
2632
|
+
headers={"Accept": "application/json"},
|
|
2633
|
+
)
|
|
2634
|
+
|
|
2635
|
+
self.assertEqual(response.status_code, 400)
|
|
2636
|
+
self.assertEqual(
|
|
2637
|
+
response.json(),
|
|
2638
|
+
{
|
|
2639
|
+
"success": False,
|
|
2640
|
+
"error_code": "blocked_by_hook",
|
|
2641
|
+
"error_message": "Request to edit page was blocked by hook.",
|
|
2642
|
+
},
|
|
2643
|
+
)
|
|
2644
|
+
|
|
2645
|
+
with self.register_hook("before_edit_page", json_hook_func):
|
|
2646
|
+
response = self.client.get(
|
|
2647
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
2648
|
+
headers={"Accept": "application/json"},
|
|
2649
|
+
)
|
|
2650
|
+
|
|
2651
|
+
self.assertEqual(response.status_code, 200)
|
|
2652
|
+
self.assertEqual(response.json(), {"status": "purple"})
|
|
2653
|
+
|
|
1982
2654
|
def test_before_edit_page_hook_post(self):
|
|
1983
2655
|
def hook_func(request, page):
|
|
1984
2656
|
self.assertIsInstance(request, HttpRequest)
|
|
@@ -2004,6 +2676,72 @@ class TestPageEdit(WagtailTestUtils, TestCase):
|
|
|
2004
2676
|
# page should not be edited
|
|
2005
2677
|
self.assertEqual(Page.objects.get(id=self.child_page.id).title, "Hello world!")
|
|
2006
2678
|
|
|
2679
|
+
def test_before_edit_page_hook_post_with_json_response(self):
|
|
2680
|
+
def non_json_hook_func(request, page):
|
|
2681
|
+
self.assertIsInstance(request, HttpRequest)
|
|
2682
|
+
self.assertEqual(page.id, self.child_page.id)
|
|
2683
|
+
|
|
2684
|
+
return HttpResponse("Overridden!")
|
|
2685
|
+
|
|
2686
|
+
def json_hook_func(request, page):
|
|
2687
|
+
self.assertIsInstance(request, HttpRequest)
|
|
2688
|
+
self.assertEqual(page.id, self.child_page.id)
|
|
2689
|
+
|
|
2690
|
+
return JsonResponse({"status": "purple"})
|
|
2691
|
+
|
|
2692
|
+
with self.register_hook("before_edit_page", non_json_hook_func):
|
|
2693
|
+
post_data = {
|
|
2694
|
+
"title": "I've been edited!",
|
|
2695
|
+
"content": "Some content",
|
|
2696
|
+
"slug": "hello-world-new",
|
|
2697
|
+
}
|
|
2698
|
+
response = self.client.post(
|
|
2699
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
2700
|
+
post_data,
|
|
2701
|
+
headers={"Accept": "application/json"},
|
|
2702
|
+
)
|
|
2703
|
+
|
|
2704
|
+
self.assertEqual(response.status_code, 400)
|
|
2705
|
+
self.assertEqual(
|
|
2706
|
+
response.json(),
|
|
2707
|
+
{
|
|
2708
|
+
"success": False,
|
|
2709
|
+
"error_code": "blocked_by_hook",
|
|
2710
|
+
"error_message": "Request to edit page was blocked by hook.",
|
|
2711
|
+
},
|
|
2712
|
+
)
|
|
2713
|
+
|
|
2714
|
+
# page should not be edited
|
|
2715
|
+
self.assertEqual(
|
|
2716
|
+
Page.objects.get(id=self.child_page.id)
|
|
2717
|
+
.get_latest_revision_as_object()
|
|
2718
|
+
.title,
|
|
2719
|
+
"Hello world!",
|
|
2720
|
+
)
|
|
2721
|
+
|
|
2722
|
+
with self.register_hook("before_edit_page", json_hook_func):
|
|
2723
|
+
post_data = {
|
|
2724
|
+
"title": "I've been edited!",
|
|
2725
|
+
"content": "Some content",
|
|
2726
|
+
"slug": "hello-world-new",
|
|
2727
|
+
}
|
|
2728
|
+
response = self.client.post(
|
|
2729
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
2730
|
+
post_data,
|
|
2731
|
+
headers={"Accept": "application/json"},
|
|
2732
|
+
)
|
|
2733
|
+
|
|
2734
|
+
self.assertEqual(response.status_code, 200)
|
|
2735
|
+
self.assertEqual(response.json(), {"status": "purple"})
|
|
2736
|
+
|
|
2737
|
+
# page should not be edited
|
|
2738
|
+
self.assertEqual(
|
|
2739
|
+
Page.objects.get(id=self.child_page.id)
|
|
2740
|
+
.get_latest_revision_as_object()
|
|
2741
|
+
.title,
|
|
2742
|
+
"Hello world!",
|
|
2743
|
+
)
|
|
2744
|
+
|
|
2007
2745
|
def test_after_edit_page_hook(self):
|
|
2008
2746
|
def hook_func(request, page):
|
|
2009
2747
|
self.assertIsInstance(request, HttpRequest)
|
|
@@ -2031,6 +2769,66 @@ class TestPageEdit(WagtailTestUtils, TestCase):
|
|
|
2031
2769
|
Page.objects.get(id=self.child_page.id).title, "I've been edited!"
|
|
2032
2770
|
)
|
|
2033
2771
|
|
|
2772
|
+
def test_after_edit_page_hook_with_json_response(self):
|
|
2773
|
+
def non_json_hook_func(request, page):
|
|
2774
|
+
self.assertIsInstance(request, HttpRequest)
|
|
2775
|
+
self.assertEqual(page.id, self.child_page.id)
|
|
2776
|
+
|
|
2777
|
+
return HttpResponse("Overridden!")
|
|
2778
|
+
|
|
2779
|
+
def json_hook_func(request, page):
|
|
2780
|
+
self.assertIsInstance(request, HttpRequest)
|
|
2781
|
+
self.assertEqual(page.id, self.child_page.id)
|
|
2782
|
+
|
|
2783
|
+
return JsonResponse({"status": "purple"})
|
|
2784
|
+
|
|
2785
|
+
with self.register_hook("after_edit_page", non_json_hook_func):
|
|
2786
|
+
post_data = {
|
|
2787
|
+
"title": "I've been edited!",
|
|
2788
|
+
"content": "Some content",
|
|
2789
|
+
"slug": "hello-world-new",
|
|
2790
|
+
}
|
|
2791
|
+
response = self.client.post(
|
|
2792
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
2793
|
+
post_data,
|
|
2794
|
+
headers={"Accept": "application/json"},
|
|
2795
|
+
)
|
|
2796
|
+
|
|
2797
|
+
self.assertEqual(response.status_code, 200)
|
|
2798
|
+
# hook response is ignored, since it's not a JSON response
|
|
2799
|
+
self.assertEqual(response.json()["success"], True)
|
|
2800
|
+
|
|
2801
|
+
# page should be edited
|
|
2802
|
+
self.assertEqual(
|
|
2803
|
+
Page.objects.get(id=self.child_page.id)
|
|
2804
|
+
.get_latest_revision_as_object()
|
|
2805
|
+
.title,
|
|
2806
|
+
"I've been edited!",
|
|
2807
|
+
)
|
|
2808
|
+
|
|
2809
|
+
with self.register_hook("after_edit_page", json_hook_func):
|
|
2810
|
+
post_data = {
|
|
2811
|
+
"title": "I've been edited again!",
|
|
2812
|
+
"content": "Some content",
|
|
2813
|
+
"slug": "hello-world-new",
|
|
2814
|
+
}
|
|
2815
|
+
response = self.client.post(
|
|
2816
|
+
reverse("wagtailadmin_pages:edit", args=(self.child_page.id,)),
|
|
2817
|
+
post_data,
|
|
2818
|
+
headers={"Accept": "application/json"},
|
|
2819
|
+
)
|
|
2820
|
+
|
|
2821
|
+
self.assertEqual(response.status_code, 200)
|
|
2822
|
+
self.assertEqual(response.json(), {"status": "purple"})
|
|
2823
|
+
|
|
2824
|
+
# page should be edited
|
|
2825
|
+
self.assertEqual(
|
|
2826
|
+
Page.objects.get(id=self.child_page.id)
|
|
2827
|
+
.get_latest_revision_as_object()
|
|
2828
|
+
.title,
|
|
2829
|
+
"I've been edited again!",
|
|
2830
|
+
)
|
|
2831
|
+
|
|
2034
2832
|
def test_after_publish_page(self):
|
|
2035
2833
|
def hook_func(request, page):
|
|
2036
2834
|
self.assertIsInstance(request, HttpRequest)
|
|
@@ -2103,11 +2901,14 @@ class TestPageEdit(WagtailTestUtils, TestCase):
|
|
|
2103
2901
|
self.assertIsNotNone(publish_button)
|
|
2104
2902
|
|
|
2105
2903
|
def test_override_publish_action_menu_item_label(self):
|
|
2904
|
+
class CustomPublishMenuItem(PublishMenuItem):
|
|
2905
|
+
label = "Foobar"
|
|
2906
|
+
|
|
2106
2907
|
def hook_func(menu_items, request, context):
|
|
2107
|
-
|
|
2108
|
-
if item.name == "action-publish"
|
|
2109
|
-
|
|
2110
|
-
|
|
2908
|
+
menu_items[:] = [
|
|
2909
|
+
CustomPublishMenuItem() if item.name == "action-publish" else item
|
|
2910
|
+
for item in menu_items
|
|
2911
|
+
]
|
|
2111
2912
|
|
|
2112
2913
|
with self.register_hook("construct_page_action_menu", hook_func):
|
|
2113
2914
|
response = self.client.get(
|
|
@@ -2947,7 +3748,7 @@ class TestParentalM2M(WagtailTestUtils, TestCase):
|
|
|
2947
3748
|
self.assertIn(self.men_with_beards_category, updated_page.categories.all())
|
|
2948
3749
|
|
|
2949
3750
|
|
|
2950
|
-
class
|
|
3751
|
+
class TestValidationerror_messages(WagtailTestUtils, TestCase):
|
|
2951
3752
|
fixtures = ["test.json"]
|
|
2952
3753
|
|
|
2953
3754
|
def setUp(self):
|
|
@@ -3013,6 +3814,46 @@ class TestValidationErrorMessages(WagtailTestUtils, TestCase):
|
|
|
3013
3814
|
)
|
|
3014
3815
|
self.assertIn("This field is required", error_message.get_text())
|
|
3015
3816
|
|
|
3817
|
+
def test_field_error_with_json_response(self):
|
|
3818
|
+
post_data = {
|
|
3819
|
+
"title": "",
|
|
3820
|
+
"date_from": "2017-12-25",
|
|
3821
|
+
"slug": "christmas",
|
|
3822
|
+
"audience": "public",
|
|
3823
|
+
"location": "The North Pole",
|
|
3824
|
+
"cost": "Free",
|
|
3825
|
+
"carousel_items-TOTAL_FORMS": 0,
|
|
3826
|
+
"carousel_items-INITIAL_FORMS": 0,
|
|
3827
|
+
"carousel_items-MIN_NUM_FORMS": 0,
|
|
3828
|
+
"carousel_items-MAX_NUM_FORMS": 0,
|
|
3829
|
+
"speakers-TOTAL_FORMS": 0,
|
|
3830
|
+
"speakers-INITIAL_FORMS": 0,
|
|
3831
|
+
"speakers-MIN_NUM_FORMS": 0,
|
|
3832
|
+
"speakers-MAX_NUM_FORMS": 0,
|
|
3833
|
+
"related_links-TOTAL_FORMS": 0,
|
|
3834
|
+
"related_links-INITIAL_FORMS": 0,
|
|
3835
|
+
"related_links-MIN_NUM_FORMS": 0,
|
|
3836
|
+
"related_links-MAX_NUM_FORMS": 0,
|
|
3837
|
+
"head_counts-TOTAL_FORMS": 0,
|
|
3838
|
+
"head_counts-INITIAL_FORMS": 0,
|
|
3839
|
+
"head_counts-MIN_NUM_FORMS": 0,
|
|
3840
|
+
"head_counts-MAX_NUM_FORMS": 0,
|
|
3841
|
+
}
|
|
3842
|
+
response = self.client.post(
|
|
3843
|
+
reverse("wagtailadmin_pages:edit", args=(self.christmas_page.id,)),
|
|
3844
|
+
post_data,
|
|
3845
|
+
headers={"Accept": "application/json"},
|
|
3846
|
+
)
|
|
3847
|
+
self.assertEqual(response.status_code, 400)
|
|
3848
|
+
self.assertEqual(
|
|
3849
|
+
response.json(),
|
|
3850
|
+
{
|
|
3851
|
+
"success": False,
|
|
3852
|
+
"error_code": "validation_error",
|
|
3853
|
+
"error_message": "There are validation errors, click save to highlight them.",
|
|
3854
|
+
},
|
|
3855
|
+
)
|
|
3856
|
+
|
|
3016
3857
|
def test_non_field_error(self):
|
|
3017
3858
|
"""Non-field errors should be shown in the header message"""
|
|
3018
3859
|
post_data = {
|
|
@@ -3231,6 +4072,72 @@ class TestNestedInlinePanel(WagtailTestUtils, TestCase):
|
|
|
3231
4072
|
self.assertEqual(awards[0].name, "Beard Of The Century")
|
|
3232
4073
|
self.assertEqual(awards[1].name, "Bobsleigh Olympic gold medallist")
|
|
3233
4074
|
|
|
4075
|
+
def test_post_edit_with_json_response(self):
|
|
4076
|
+
self.christmas_page.unpublish() # so that draft changes are applied to the database record
|
|
4077
|
+
|
|
4078
|
+
post_data = nested_form_data(
|
|
4079
|
+
{
|
|
4080
|
+
"title": "Christmas",
|
|
4081
|
+
"date_from": "2017-12-25",
|
|
4082
|
+
"date_to": "2017-12-25",
|
|
4083
|
+
"slug": "christmas",
|
|
4084
|
+
"audience": "public",
|
|
4085
|
+
"location": "The North Pole",
|
|
4086
|
+
"cost": "Free",
|
|
4087
|
+
"carousel_items": inline_formset([]),
|
|
4088
|
+
"speakers": inline_formset(
|
|
4089
|
+
[
|
|
4090
|
+
{
|
|
4091
|
+
"id": self.speaker.id,
|
|
4092
|
+
"first_name": "Jeff",
|
|
4093
|
+
"last_name": "Christmas",
|
|
4094
|
+
"awards": inline_formset(
|
|
4095
|
+
[
|
|
4096
|
+
{
|
|
4097
|
+
"id": self.speaker.awards.first().id,
|
|
4098
|
+
"name": "Beard Of The Century",
|
|
4099
|
+
"date_awarded": "1997-12-25",
|
|
4100
|
+
},
|
|
4101
|
+
{
|
|
4102
|
+
"name": "Bobsleigh Olympic gold medallist",
|
|
4103
|
+
"date_awarded": "2018-02-01",
|
|
4104
|
+
},
|
|
4105
|
+
],
|
|
4106
|
+
initial=1,
|
|
4107
|
+
),
|
|
4108
|
+
},
|
|
4109
|
+
],
|
|
4110
|
+
initial=1,
|
|
4111
|
+
),
|
|
4112
|
+
"related_links": inline_formset([]),
|
|
4113
|
+
"head_counts": inline_formset([]),
|
|
4114
|
+
}
|
|
4115
|
+
)
|
|
4116
|
+
response = self.client.post(
|
|
4117
|
+
reverse("wagtailadmin_pages:edit", args=(self.christmas_page.id,)),
|
|
4118
|
+
post_data,
|
|
4119
|
+
headers={"Accept": "application/json"},
|
|
4120
|
+
)
|
|
4121
|
+
self.assertEqual(response.status_code, 200)
|
|
4122
|
+
response_json = response.json()
|
|
4123
|
+
self.assertEqual(response_json["success"], True)
|
|
4124
|
+
self.assertEqual(response_json["pk"], self.christmas_page.id)
|
|
4125
|
+
self.christmas_page.refresh_from_db()
|
|
4126
|
+
self.assertEqual(
|
|
4127
|
+
response_json["revision_id"], self.christmas_page.get_latest_revision().pk
|
|
4128
|
+
)
|
|
4129
|
+
|
|
4130
|
+
new_award = self.christmas_page.speakers.first().awards.get(
|
|
4131
|
+
name="Bobsleigh Olympic gold medallist"
|
|
4132
|
+
)
|
|
4133
|
+
self.assertEqual(
|
|
4134
|
+
response_json["field_updates"],
|
|
4135
|
+
{
|
|
4136
|
+
"speakers-0-awards-INITIAL_FORMS": "2",
|
|
4137
|
+
"speakers-0-awards-1-id": str(new_award.id),
|
|
4138
|
+
},
|
|
4139
|
+
)
|
|
4140
|
+
|
|
3234
4141
|
|
|
3235
4142
|
@override_settings(WAGTAIL_I18N_ENABLED=True)
|
|
3236
4143
|
class TestLocaleSelector(WagtailTestUtils, TestCase):
|
|
@@ -3559,6 +4466,76 @@ class TestCommenting(WagtailTestUtils, TestCase):
|
|
|
3559
4466
|
self.assertEqual(log_entry.data["comment"]["contentpath"], comment.contentpath)
|
|
3560
4467
|
self.assertEqual(log_entry.data["comment"]["text"], comment.text)
|
|
3561
4468
|
|
|
4469
|
+
def test_new_comment_json(self):
|
|
4470
|
+
post_data = {
|
|
4471
|
+
"title": "I've been edited!",
|
|
4472
|
+
"content": "Some content",
|
|
4473
|
+
"slug": "hello-world",
|
|
4474
|
+
"comments-TOTAL_FORMS": "1",
|
|
4475
|
+
"comments-INITIAL_FORMS": "0",
|
|
4476
|
+
"comments-MIN_NUM_FORMS": "0",
|
|
4477
|
+
"comments-MAX_NUM_FORMS": "",
|
|
4478
|
+
"comments-0-DELETE": "",
|
|
4479
|
+
"comments-0-resolved": "",
|
|
4480
|
+
"comments-0-id": "",
|
|
4481
|
+
"comments-0-contentpath": "title",
|
|
4482
|
+
"comments-0-text": "A test comment",
|
|
4483
|
+
"comments-0-position": "",
|
|
4484
|
+
"comments-0-replies-TOTAL_FORMS": "0",
|
|
4485
|
+
"comments-0-replies-INITIAL_FORMS": "0",
|
|
4486
|
+
"comments-0-replies-MIN_NUM_FORMS": "0",
|
|
4487
|
+
"comments-0-replies-MAX_NUM_FORMS": "0",
|
|
4488
|
+
}
|
|
4489
|
+
|
|
4490
|
+
response = self.client.post(
|
|
4491
|
+
reverse("wagtailadmin_pages:edit", args=[self.child_page.id]),
|
|
4492
|
+
post_data,
|
|
4493
|
+
headers={"Accept": "application/json"},
|
|
4494
|
+
)
|
|
4495
|
+
|
|
4496
|
+
self.assertEqual(response.status_code, 200)
|
|
4497
|
+
|
|
4498
|
+
# Refresh so that latest_revision is correct (instead of using the cached id)
|
|
4499
|
+
self.child_page.refresh_from_db()
|
|
4500
|
+
|
|
4501
|
+
# Check the comment was added
|
|
4502
|
+
comment = self.child_page.wagtail_admin_comments.get()
|
|
4503
|
+
self.assertEqual(comment.text, "A test comment")
|
|
4504
|
+
|
|
4505
|
+
# Should include serialized comments data in the response
|
|
4506
|
+
response_json = response.json()
|
|
4507
|
+
self.assertEqual(response_json["success"], True)
|
|
4508
|
+
self.assertEqual(response_json["pk"], self.child_page.id)
|
|
4509
|
+
comments_json = response_json["comments"]
|
|
4510
|
+
self.assertEqual(len(comments_json["comments"]), 1)
|
|
4511
|
+
comment_json = comments_json["comments"][0]
|
|
4512
|
+
self.assertEqual(comment_json["pk"], comment.pk)
|
|
4513
|
+
self.assertEqual(comment_json["page"], self.child_page.pk)
|
|
4514
|
+
self.assertEqual(comment_json["user"], str(self.user.pk))
|
|
4515
|
+
self.assertEqual(comment_json["text"], "A test comment")
|
|
4516
|
+
self.assertEqual(comment_json["contentpath"], "title")
|
|
4517
|
+
self.assertEqual(comments_json["user"], str(self.user.pk))
|
|
4518
|
+
self.assertIn(str(self.user.pk), comments_json["authors"])
|
|
4519
|
+
|
|
4520
|
+
# Check notification email
|
|
4521
|
+
self.assertEqual(len(mail.outbox), 1)
|
|
4522
|
+
self.assertNeverEmailedWrongUser()
|
|
4523
|
+
self.assertEqual(mail.outbox[0].to, [self.subscriber.email])
|
|
4524
|
+
self.assertEqual(
|
|
4525
|
+
mail.outbox[0].subject,
|
|
4526
|
+
'test@email.com has updated comments on "I\'ve been edited! (simple page)"',
|
|
4527
|
+
)
|
|
4528
|
+
self.assertIn('New comments:\n - "A test comment"\n\n', mail.outbox[0].body)
|
|
4529
|
+
|
|
4530
|
+
# Check audit log
|
|
4531
|
+
log_entry = PageLogEntry.objects.get(action="wagtail.comments.create")
|
|
4532
|
+
self.assertEqual(log_entry.page, self.child_page.page_ptr)
|
|
4533
|
+
self.assertEqual(log_entry.user, self.user)
|
|
4534
|
+
self.assertEqual(log_entry.revision, self.child_page.get_latest_revision())
|
|
4535
|
+
self.assertEqual(log_entry.data["comment"]["id"], comment.id)
|
|
4536
|
+
self.assertEqual(log_entry.data["comment"]["contentpath"], comment.contentpath)
|
|
4537
|
+
self.assertEqual(log_entry.data["comment"]["text"], comment.text)
|
|
4538
|
+
|
|
3562
4539
|
def test_edit_comment(self):
|
|
3563
4540
|
comment = Comment.objects.create(
|
|
3564
4541
|
page=self.child_page,
|