wagtail 6.0.2__py3-none-any.whl → 6.1rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wagtail/__init__.py +1 -1
- wagtail/admin/checks.py +51 -0
- wagtail/admin/compare.py +1 -1
- wagtail/admin/filters.py +70 -1
- wagtail/admin/forms/account.py +1 -1
- wagtail/admin/forms/collections.py +15 -0
- wagtail/admin/forms/pages.py +49 -0
- wagtail/admin/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/de/LC_MESSAGES/django.po +5 -5
- wagtail/admin/locale/en/LC_MESSAGES/django.po +474 -385
- wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +3 -3
- wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +73 -2
- wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ro/LC_MESSAGES/django.po +3 -3
- wagtail/admin/panels/comment_panel.py +1 -1
- wagtail/admin/panels/field_panel.py +1 -1
- wagtail/admin/rich_text/converters/editor_html.py +3 -1
- wagtail/admin/rich_text/editors/draftail/__init__.py +28 -2
- wagtail/admin/static/wagtailadmin/css/core.css +1 -1
- wagtail/admin/static/wagtailadmin/css/panels/draftail.css +1 -1
- wagtail/admin/static/wagtailadmin/images/favicon.ico +0 -0
- wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
- wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
- wagtail/admin/static/wagtailadmin/js/core.js +1 -1
- wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
- wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
- wagtail/admin/static/wagtailadmin/js/expanding-formset.js +1 -1
- wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
- wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/preview-panel.js +1 -1
- wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
- wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
- wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
- wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +4 -4
- wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
- wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
- wagtail/admin/staticfiles.py +1 -0
- wagtail/admin/templates/wagtailadmin/base.html +1 -0
- wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +3 -1
- wagtail/admin/templates/wagtailadmin/collections/index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/generic/base.html +1 -9
- wagtail/admin/templates/wagtailadmin/generic/form.html +3 -2
- wagtail/admin/templates/wagtailadmin/generic/history/action_cell.html +27 -0
- wagtail/admin/templates/wagtailadmin/home/workflow_objects_to_moderate.html +3 -3
- wagtail/admin/templates/wagtailadmin/icons/keyboard.svg +1 -0
- wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +3 -1
- wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +0 -14
- wagtail/admin/templates/wagtailadmin/pages/action_menu/save_draft.html +3 -1
- wagtail/admin/templates/wagtailadmin/pages/choose_parent.html +17 -0
- wagtail/admin/templates/wagtailadmin/pages/explorable_index.html +8 -0
- wagtail/admin/templates/wagtailadmin/pages/history.html +1 -61
- wagtail/admin/templates/wagtailadmin/pages/index.html +1 -3
- wagtail/admin/templates/wagtailadmin/pages/listing/_locked_indicator.html +2 -2
- wagtail/admin/templates/wagtailadmin/pages/listing/_page_title_column_header.html +25 -27
- wagtail/admin/templates/wagtailadmin/pages/page_listing_header.html +2 -1
- wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
- wagtail/admin/templates/wagtailadmin/panels/publishing/schedule_publishing_panel.html +3 -1
- wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/active_filters.html +2 -1
- wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +8 -0
- wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/headers/page_edit_header.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +21 -9
- wagtail/admin/templates/wagtailadmin/shared/human_readable_date.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +29 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +2 -1
- wagtail/admin/templates/wagtailadmin/skeleton.html +2 -1
- wagtail/admin/templates/wagtailadmin/tables/related_objects_cell.html +9 -0
- wagtail/admin/templates/wagtailadmin/tables/title_cell.html +9 -7
- wagtail/admin/templates/wagtailadmin/widgets/draftail_rich_text_area.html +1 -1
- wagtail/admin/templates/wagtailadmin/workflows/create.html +6 -23
- wagtail/admin/templates/wagtailadmin/workflows/create_task.html +6 -15
- wagtail/admin/templates/wagtailadmin/workflows/edit.html +6 -23
- wagtail/admin/templates/wagtailadmin/workflows/edit_task.html +6 -13
- wagtail/admin/templates/wagtailadmin/workflows/includes/task_usage_cell.html +4 -4
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_tasks_cell.html +18 -0
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_title_cell.html +7 -0
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_used_by_cell.html +25 -0
- wagtail/admin/templates/wagtailadmin/workflows/index.html +0 -99
- wagtail/admin/templates/wagtailadmin/workflows/index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/workflows/task_index.html +0 -30
- wagtail/admin/templates/wagtailadmin/workflows/task_index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/workflows/usage.html +1 -1
- wagtail/admin/templatetags/wagtailadmin_tags.py +116 -39
- wagtail/admin/tests/pages/test_create_page.py +10 -4
- wagtail/admin/tests/pages/test_custom_listing.py +37 -0
- wagtail/admin/tests/pages/test_edit_page.py +6 -6
- wagtail/admin/tests/pages/test_explorer_view.py +19 -18
- wagtail/admin/tests/pages/test_move_page.py +1 -1
- wagtail/admin/tests/pages/test_page_usage.py +50 -2
- wagtail/admin/tests/pages/test_parent_page_chooser_view.py +119 -0
- wagtail/admin/tests/pages/test_preview.py +18 -4
- wagtail/admin/tests/test_account_management.py +20 -1
- wagtail/admin/tests/test_audit_log.py +172 -5
- wagtail/admin/tests/test_checks.py +92 -0
- wagtail/admin/tests/test_collections_views.py +19 -5
- wagtail/admin/tests/test_compare.py +6 -6
- wagtail/admin/tests/test_dashboard.py +404 -0
- wagtail/admin/tests/test_dbwhitelister.py +4 -5
- wagtail/admin/tests/test_edit_handlers.py +2 -2
- wagtail/admin/tests/test_keyboard_shortcuts.py +84 -0
- wagtail/admin/tests/test_page_chooser.py +31 -18
- wagtail/admin/tests/test_privacy.py +36 -2
- wagtail/admin/tests/test_rich_text.py +168 -23
- wagtail/admin/tests/test_templatetags.py +411 -43
- wagtail/admin/tests/test_views.py +4 -2
- wagtail/admin/tests/test_workflows.py +531 -9
- wagtail/admin/tests/tests.py +3 -1
- wagtail/admin/tests/ui/test_tables.py +48 -1
- wagtail/admin/tests/viewsets/test_model_viewset.py +126 -29
- wagtail/admin/ui/side_panels.py +3 -1
- wagtail/admin/ui/tables/__init__.py +13 -1
- wagtail/admin/ui/tables/pages.py +17 -6
- wagtail/admin/urls/__init__.py +8 -3
- wagtail/admin/urls/pages.py +5 -0
- wagtail/admin/urls/workflows.py +10 -0
- wagtail/admin/views/chooser.py +20 -24
- wagtail/admin/views/collections.py +17 -1
- wagtail/admin/views/generic/base.py +31 -4
- wagtail/admin/views/generic/history.py +220 -51
- wagtail/admin/views/generic/mixins.py +7 -4
- wagtail/admin/views/generic/models.py +54 -38
- wagtail/admin/views/generic/multiple_upload.py +17 -8
- wagtail/admin/views/generic/usage.py +17 -11
- wagtail/admin/views/home.py +15 -12
- wagtail/admin/views/mixins.py +30 -0
- wagtail/admin/views/pages/choose_parent.py +73 -0
- wagtail/admin/views/pages/history.py +54 -66
- wagtail/admin/views/pages/listing.py +187 -106
- wagtail/admin/views/pages/usage.py +6 -1
- wagtail/admin/views/pages/utils.py +70 -1
- wagtail/admin/views/workflows.py +150 -21
- wagtail/admin/viewsets/model.py +2 -2
- wagtail/admin/viewsets/pages.py +77 -0
- wagtail/admin/wagtail_hooks.py +40 -2
- wagtail/admin/widgets/button.py +10 -9
- wagtail/api/v2/filters.py +1 -1
- wagtail/api/v2/tests/test_pages.py +1 -1
- wagtail/blocks/base.py +18 -9
- wagtail/blocks/field_block.py +9 -7
- wagtail/blocks/list_block.py +16 -6
- wagtail/blocks/static_block.py +3 -0
- wagtail/blocks/stream_block.py +58 -23
- wagtail/blocks/struct_block.py +15 -9
- wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +39 -47
- wagtail/contrib/forms/models.py +5 -5
- wagtail/contrib/forms/templates/wagtailforms/list_submissions.html +44 -33
- wagtail/contrib/forms/templates/wagtailforms/submissions_index.html +2 -63
- wagtail/contrib/forms/tests/test_models.py +26 -0
- wagtail/contrib/forms/urls.py +6 -0
- wagtail/contrib/forms/views.py +52 -49
- wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +3 -3
- wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +34 -42
- wagtail/contrib/redirects/signal_handlers.py +1 -1
- wagtail/contrib/redirects/templates/wagtailredirects/index.html +1 -36
- wagtail/contrib/redirects/templates/wagtailredirects/index_results.html +18 -0
- wagtail/contrib/redirects/templates/wagtailredirects/redirect_target_cell.html +8 -0
- wagtail/contrib/redirects/tests/test_import_command.py +1 -1
- wagtail/contrib/redirects/tests/test_redirects.py +79 -8
- wagtail/contrib/redirects/urls.py +2 -1
- wagtail/contrib/redirects/views.py +85 -55
- wagtail/contrib/search_promotions/admin_urls.py +2 -1
- wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +41 -64
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index.html +1 -16
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index_results.html +11 -0
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/list.html +0 -51
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/results.html +3 -16
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/search_promotion_column.html +15 -0
- wagtail/contrib/search_promotions/tests.py +122 -9
- wagtail/contrib/search_promotions/views.py +66 -65
- wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +3 -3
- wagtail/contrib/settings/registry.py +10 -5
- wagtail/contrib/settings/tests/generic/test_admin.py +9 -0
- wagtail/contrib/settings/tests/site_specific/test_admin.py +10 -1
- wagtail/contrib/settings/tests/site_specific/test_model.py +3 -3
- wagtail/contrib/settings/tests/site_specific/test_templates.py +1 -1
- wagtail/contrib/settings/views.py +3 -1
- wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/simple_translation/tests/test_wagtail_hooks.py +2 -2
- wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
- wagtail/contrib/table_block/blocks.py +1 -1
- wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
- wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
- wagtail/coreutils.py +3 -2
- wagtail/documents/admin_urls.py +2 -2
- wagtail/documents/locale/en/LC_MESSAGES/django.po +22 -22
- wagtail/documents/migrations/0013_delete_uploadeddocument.py +16 -0
- wagtail/documents/models.py +1 -20
- wagtail/documents/rich_text/__init__.py +11 -7
- wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
- wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
- wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
- wagtail/documents/templates/wagtaildocs/documents/index.html +0 -16
- wagtail/documents/tests/test_admin_views.py +155 -23
- wagtail/documents/tests/test_collection_privacy.py +55 -1
- wagtail/documents/tests/test_rich_text.py +14 -0
- wagtail/documents/views/documents.py +25 -22
- wagtail/documents/views/multiple.py +6 -7
- wagtail/documents/views/serve.py +16 -1
- wagtail/documents/wagtail_hooks.py +20 -15
- wagtail/embeds/blocks.py +5 -0
- wagtail/embeds/locale/en/LC_MESSAGES/django.po +2 -2
- wagtail/embeds/rich_text/__init__.py +1 -1
- wagtail/embeds/tests/test_rich_text.py +14 -0
- wagtail/embeds/wagtail_hooks.py +4 -14
- wagtail/fields.py +3 -48
- wagtail/images/admin_urls.py +2 -2
- wagtail/images/check_files/wagtail.jpg +0 -0
- wagtail/images/check_files/wagtail.png +0 -0
- wagtail/images/fields.py +2 -0
- wagtail/images/image_operations.py +1 -1
- wagtail/images/locale/en/LC_MESSAGES/django.po +33 -45
- wagtail/images/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +4 -0
- wagtail/images/migrations/0026_delete_uploadedimage.py +16 -0
- wagtail/images/models.py +49 -43
- wagtail/images/rich_text/__init__.py +18 -8
- wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
- wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
- wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
- wagtail/images/templates/wagtailimages/images/image_listing_header.html +6 -0
- wagtail/images/templates/wagtailimages/images/index.html +11 -51
- wagtail/images/tests/test_admin_views.py +119 -62
- wagtail/images/tests/test_image_operations.py +10 -0
- wagtail/images/tests/test_models.py +35 -33
- wagtail/images/tests/test_rich_text.py +14 -0
- wagtail/images/tests/utils.py +1 -1
- wagtail/images/views/images.py +35 -64
- wagtail/images/views/multiple.py +6 -7
- wagtail/images/wagtail_hooks.py +4 -14
- wagtail/locale/en/LC_MESSAGES/django.po +150 -136
- wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/locales/tests.py +18 -3
- wagtail/locales/views.py +0 -1
- wagtail/management/commands/rebuild_references_index.py +3 -1
- wagtail/migrations/0092_alter_collectionviewrestriction_password_and_more.py +33 -0
- wagtail/migrations/0093_uploadedfile.py +53 -0
- wagtail/models/__init__.py +147 -32
- wagtail/models/i18n.py +1 -1
- wagtail/models/{collections.py → media.py} +33 -2
- wagtail/models/reference_index.py +1 -1
- wagtail/models/view_restrictions.py +10 -3
- wagtail/project_template/project_name/settings/base.py +6 -0
- wagtail/project_template/requirements.txt +1 -1
- wagtail/rich_text/__init__.py +25 -8
- wagtail/rich_text/pages.py +19 -8
- wagtail/rich_text/rewriters.py +140 -68
- wagtail/search/backends/database/mysql/mysql.py +3 -3
- wagtail/search/backends/database/postgres/postgres.py +3 -3
- wagtail/search/backends/database/sqlite/sqlite.py +2 -2
- wagtail/search/backends/elasticsearch7.py +4 -0
- wagtail/search/locale/en/LC_MESSAGES/django.po +3 -3
- wagtail/search/tests/test_postgres_backend.py +50 -0
- wagtail/sites/locale/en/LC_MESSAGES/django.po +8 -8
- wagtail/sites/tests.py +35 -9
- wagtail/sites/views.py +3 -1
- wagtail/snippets/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/de/LC_MESSAGES/django.po +5 -6
- wagtail/snippets/locale/en/LC_MESSAGES/django.po +16 -56
- wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
- wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/publish.html +3 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/save.html +3 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/create.html +1 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/edit.html +1 -1
- wagtail/snippets/tests/test_preview.py +13 -2
- wagtail/snippets/tests/test_snippets.py +41 -16
- wagtail/snippets/tests/test_viewset.py +63 -18
- wagtail/snippets/tests/test_workflows.py +12 -0
- wagtail/snippets/views/snippets.py +1 -40
- wagtail/templatetags/wagtailcore_tags.py +1 -1
- wagtail/test/demosite/models.py +1 -1
- wagtail/test/middleware.py +14 -1
- wagtail/test/testapp/fixtures/test.json +20 -0
- wagtail/test/testapp/migrations/0001_squashed_0073_revisablechildmodel_secret_text.py +8 -8
- wagtail/test/testapp/migrations/0023_snippetchoosermodel_full_featured.py +1 -0
- wagtail/test/testapp/migrations/0034_custompermissionmodel.py +44 -0
- wagtail/test/testapp/migrations/0035_modelwithcustommanager.py +30 -0
- wagtail/test/testapp/migrations/0036_complexdefaultstreampage.py +28 -0
- wagtail/test/testapp/models.py +79 -2
- wagtail/test/testapp/templates/tests/custom_docs_password_required.html +10 -0
- wagtail/test/testapp/templates/tests/custom_page_password_required.html +10 -0
- wagtail/test/testapp/views.py +24 -2
- wagtail/test/testapp/wagtail_hooks.py +19 -0
- wagtail/test/utils/wagtail_tests.py +2 -2
- wagtail/tests/test_blocks.py +262 -1
- wagtail/tests/test_migrations.py +1 -1
- wagtail/tests/test_page_model.py +77 -0
- wagtail/tests/test_page_privacy.py +18 -1
- wagtail/tests/test_rich_text.py +95 -5
- wagtail/tests/test_streamfield.py +43 -0
- wagtail/tests/test_utils.py +8 -2
- wagtail/tests/test_views.py +52 -1
- wagtail/tests/test_whitelist.py +7 -7
- wagtail/users/forms.py +3 -1
- wagtail/users/locale/en/LC_MESSAGES/django.po +124 -96
- wagtail/users/migrations/0013_userprofile_density.py +23 -0
- wagtail/users/models.py +14 -3
- wagtail/users/templates/wagtailusers/groups/create.html +1 -7
- wagtail/users/templates/wagtailusers/groups/edit.html +1 -13
- wagtail/users/templates/wagtailusers/groups/includes/formatted_permissions.html +46 -2
- wagtail/users/templates/wagtailusers/groups/includes/group_form_js.html +0 -2
- wagtail/users/templates/wagtailusers/users/create.html +1 -9
- wagtail/users/templates/wagtailusers/users/edit.html +1 -9
- wagtail/users/templates/wagtailusers/users/index.html +2 -5
- wagtail/users/templates/wagtailusers/users/index_results.html +3 -13
- wagtail/users/templates/wagtailusers/users/user_cell.html +9 -0
- wagtail/users/templatetags/wagtailusers_tags.py +107 -20
- wagtail/users/tests/test_admin_views.py +669 -90
- wagtail/users/views/groups.py +58 -61
- wagtail/users/views/users.py +211 -92
- wagtail/users/wagtail_hooks.py +6 -38
- wagtail/users/widgets.py +3 -5
- wagtail/utils/text.py +1 -1
- wagtail/views.py +5 -9
- wagtail/whitelist.py +1 -1
- {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/METADATA +4 -5
- {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/RECORD +339 -320
- wagtail/admin/static/wagtailadmin/js/page-editor.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/mousetrap.min.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/urlify.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/xregexp.min.js +0 -1
- wagtail/admin/templates/wagtailadmin/collections/index.html +0 -34
- wagtail/admin/templates/wagtailadmin/pages/revisions/_actions.html +0 -22
- wagtail/admin/templates/wagtailadmin/shared/page_breadcrumbs.html +0 -55
- wagtail/admin/tests/pages/test_dashboard.py +0 -172
- wagtail/contrib/redirects/templates/wagtailredirects/results.html +0 -23
- wagtail/documents/templates/wagtaildocs/documents/list.html +0 -2
- wagtail/search/tests/test_postgres_stemming.py +0 -40
- wagtail/sites/templates/wagtailsites/create.html +0 -6
- wagtail/sites/templates/wagtailsites/edit.html +0 -6
- wagtail/snippets/templates/wagtailsnippets/snippets/revisions/_actions.html +0 -36
- wagtail/users/templates/wagtailusers/users/list.html +0 -62
- wagtail/users/urls/users.py +0 -12
- {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/LICENSE +0 -0
- {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/WHEEL +0 -0
- {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/entry_points.txt +0 -0
- {wagtail-6.0.2.dist-info → wagtail-6.1rc1.dist-info}/top_level.txt +0 -0
wagtail/images/models.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import concurrent.futures
|
|
1
2
|
import hashlib
|
|
2
3
|
import itertools
|
|
3
4
|
import logging
|
|
@@ -5,7 +6,6 @@ import os.path
|
|
|
5
6
|
import re
|
|
6
7
|
import time
|
|
7
8
|
from collections import OrderedDict, defaultdict
|
|
8
|
-
from concurrent.futures import ThreadPoolExecutor
|
|
9
9
|
from contextlib import contextmanager
|
|
10
10
|
from io import BytesIO
|
|
11
11
|
from tempfile import SpooledTemporaryFile
|
|
@@ -17,9 +17,9 @@ from django.conf import settings
|
|
|
17
17
|
from django.core import checks
|
|
18
18
|
from django.core.cache import DEFAULT_CACHE_ALIAS, InvalidCacheBackendError, caches
|
|
19
19
|
from django.core.cache.backends.base import BaseCache
|
|
20
|
+
from django.core.exceptions import ImproperlyConfigured
|
|
20
21
|
from django.core.files import File
|
|
21
|
-
from django.core.files.
|
|
22
|
-
from django.core.files.storage import default_storage
|
|
22
|
+
from django.core.files.storage import InvalidStorageError, default_storage, storages
|
|
23
23
|
from django.db import models
|
|
24
24
|
from django.db.models import Q
|
|
25
25
|
from django.forms.utils import flatatt
|
|
@@ -128,8 +128,19 @@ def get_rendition_storage():
|
|
|
128
128
|
"""
|
|
129
129
|
storage = getattr(settings, "WAGTAILIMAGES_RENDITION_STORAGE", default_storage)
|
|
130
130
|
if isinstance(storage, str):
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
try:
|
|
132
|
+
# First see if the string is a storage alias
|
|
133
|
+
storage = storages[storage]
|
|
134
|
+
except InvalidStorageError:
|
|
135
|
+
# Otherwise treat the string as a dotted path
|
|
136
|
+
try:
|
|
137
|
+
module = import_string(storage)
|
|
138
|
+
storage = module()
|
|
139
|
+
except ImportError:
|
|
140
|
+
raise ImproperlyConfigured(
|
|
141
|
+
"WAGTAILIMAGES_RENDITION_STORAGE must be either a valid storage alias or dotted module path."
|
|
142
|
+
)
|
|
143
|
+
|
|
133
144
|
return storage
|
|
134
145
|
|
|
135
146
|
|
|
@@ -344,6 +355,8 @@ class AbstractImage(ImageFileMixin, CollectionMember, index.Indexed, models.Mode
|
|
|
344
355
|
],
|
|
345
356
|
),
|
|
346
357
|
index.FilterField("uploaded_by_user"),
|
|
358
|
+
index.FilterField("created_at"),
|
|
359
|
+
index.FilterField("id"),
|
|
347
360
|
]
|
|
348
361
|
|
|
349
362
|
def __str__(self):
|
|
@@ -557,7 +570,7 @@ class AbstractImage(ImageFileMixin, CollectionMember, index.Indexed, models.Mode
|
|
|
557
570
|
values (images) reflecting the supplied ``filters`` and the focal point
|
|
558
571
|
values from this object.
|
|
559
572
|
|
|
560
|
-
Filters for which an existing rendition cannot be found are
|
|
573
|
+
Filters for which an existing rendition cannot be found are omitted
|
|
561
574
|
from the return value. If none of the requested renditions have been
|
|
562
575
|
created before, the return value will be an empty dict.
|
|
563
576
|
"""
|
|
@@ -651,28 +664,22 @@ class AbstractImage(ImageFileMixin, CollectionMember, index.Indexed, models.Mode
|
|
|
651
664
|
return_value: Dict[Filter, AbstractRendition] = {}
|
|
652
665
|
filter_map: Dict[str, Filter] = {f.spec: f for f in filters}
|
|
653
666
|
|
|
667
|
+
# Read file contents into memory
|
|
654
668
|
with self.open_file() as file:
|
|
655
669
|
original_image_bytes = file.read()
|
|
656
670
|
|
|
657
671
|
to_create = []
|
|
658
672
|
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
to_create.append(
|
|
666
|
-
Rendition(
|
|
667
|
-
image=self,
|
|
668
|
-
filter_spec=filter.spec,
|
|
669
|
-
focal_point_key=filter.get_cache_key(self),
|
|
670
|
-
file=image_file,
|
|
673
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
|
|
674
|
+
for future in concurrent.futures.as_completed(
|
|
675
|
+
executor.submit(
|
|
676
|
+
self.generate_rendition_instance,
|
|
677
|
+
filter,
|
|
678
|
+
BytesIO(original_image_bytes),
|
|
671
679
|
)
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
executor.map(_generate_single_rendition, filters)
|
|
680
|
+
for filter in filters
|
|
681
|
+
):
|
|
682
|
+
to_create.append(future.result())
|
|
676
683
|
|
|
677
684
|
# Rendition generation can take a while. So, if other processes have created
|
|
678
685
|
# identical renditions in the meantime, we should find them to avoid clashes.
|
|
@@ -693,7 +700,7 @@ class AbstractImage(ImageFileMixin, CollectionMember, index.Indexed, models.Mode
|
|
|
693
700
|
filter = filter_map[existing.filter_spec]
|
|
694
701
|
return_value[filter] = existing
|
|
695
702
|
|
|
696
|
-
for new in to_create:
|
|
703
|
+
for new in list(to_create):
|
|
697
704
|
if (
|
|
698
705
|
new.filter_spec == existing.filter_spec
|
|
699
706
|
and new.focal_point_key == existing.focal_point_key
|
|
@@ -713,6 +720,23 @@ class AbstractImage(ImageFileMixin, CollectionMember, index.Indexed, models.Mode
|
|
|
713
720
|
|
|
714
721
|
return return_value
|
|
715
722
|
|
|
723
|
+
def generate_rendition_instance(
|
|
724
|
+
self, filter: "Filter", source: BytesIO
|
|
725
|
+
) -> "AbstractRendition":
|
|
726
|
+
"""
|
|
727
|
+
Use the supplied ``source`` image to create and return an
|
|
728
|
+
**unsaved** ``Rendition`` instance, with a ``file`` value reflecting
|
|
729
|
+
the supplied ``filter`` value and focal point values from this object.
|
|
730
|
+
"""
|
|
731
|
+
return self.get_rendition_model()(
|
|
732
|
+
image=self,
|
|
733
|
+
filter_spec=filter.spec,
|
|
734
|
+
focal_point_key=filter.get_cache_key(self),
|
|
735
|
+
file=self.generate_rendition_file(
|
|
736
|
+
filter, source=File(source, name=self.file.name)
|
|
737
|
+
),
|
|
738
|
+
)
|
|
739
|
+
|
|
716
740
|
def generate_rendition_file(self, filter: "Filter", *, source: File = None) -> File:
|
|
717
741
|
"""
|
|
718
742
|
Generates an in-memory image matching the supplied ``filter`` value
|
|
@@ -1033,6 +1057,8 @@ class Filter:
|
|
|
1033
1057
|
return willow.save_as_avif(output, quality=quality)
|
|
1034
1058
|
elif output_format == "svg":
|
|
1035
1059
|
return willow.save_as_svg(output)
|
|
1060
|
+
elif output_format == "ico":
|
|
1061
|
+
return willow.save_as_ico(output)
|
|
1036
1062
|
raise UnknownOutputImageFormatError(
|
|
1037
1063
|
f"Unknown output image format '{output_format}'"
|
|
1038
1064
|
)
|
|
@@ -1329,23 +1355,3 @@ class Rendition(AbstractRendition):
|
|
|
1329
1355
|
|
|
1330
1356
|
class Meta:
|
|
1331
1357
|
unique_together = (("image", "filter_spec", "focal_point_key"),)
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
class UploadedImage(models.Model):
|
|
1335
|
-
"""
|
|
1336
|
-
Temporary storage for images uploaded through the multiple image uploader, when validation rules (e.g.
|
|
1337
|
-
required metadata fields) prevent creating an Image object from the image file alone. In this case,
|
|
1338
|
-
the image file is stored against this model, to be turned into an Image object once the full form
|
|
1339
|
-
has been filled in.
|
|
1340
|
-
"""
|
|
1341
|
-
|
|
1342
|
-
file = models.ImageField(upload_to="uploaded_images", max_length=200)
|
|
1343
|
-
uploaded_by_user = models.ForeignKey(
|
|
1344
|
-
settings.AUTH_USER_MODEL,
|
|
1345
|
-
verbose_name=_("uploaded by user"),
|
|
1346
|
-
null=True,
|
|
1347
|
-
blank=True,
|
|
1348
|
-
editable=False,
|
|
1349
|
-
on_delete=models.SET_NULL,
|
|
1350
|
-
)
|
|
1351
|
-
uploaded_by_user.wagtail_reference_index_ignore = True
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from typing import List
|
|
2
2
|
|
|
3
3
|
from wagtail.images import get_image_model
|
|
4
4
|
from wagtail.images.formats import get_image_format
|
|
@@ -15,18 +15,28 @@ class ImageEmbedHandler(EmbedHandler):
|
|
|
15
15
|
return get_image_model()
|
|
16
16
|
|
|
17
17
|
@classmethod
|
|
18
|
-
def expand_db_attributes(cls, attrs):
|
|
18
|
+
def expand_db_attributes(cls, attrs: dict) -> str:
|
|
19
|
+
return cls.expand_db_attributes_many([attrs])[0]
|
|
20
|
+
|
|
21
|
+
@classmethod
|
|
22
|
+
def expand_db_attributes_many(cls, attrs_list: List[dict]) -> List[str]:
|
|
19
23
|
"""
|
|
20
24
|
Given a dict of attributes from the <embed> tag, return the real HTML
|
|
21
25
|
representation for use on the front-end.
|
|
22
26
|
"""
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
images = cls.get_many(attrs_list)
|
|
28
|
+
|
|
29
|
+
tags = []
|
|
30
|
+
for attrs, image in zip(attrs_list, images):
|
|
31
|
+
if image:
|
|
32
|
+
image_format = get_image_format(attrs["format"])
|
|
33
|
+
tag = image_format.image_to_html(image, attrs.get("alt", ""))
|
|
34
|
+
else:
|
|
35
|
+
tag = '<img alt="">'
|
|
36
|
+
|
|
37
|
+
tags.append(tag)
|
|
27
38
|
|
|
28
|
-
|
|
29
|
-
return image_format.image_to_html(image, attrs.get("alt", ""))
|
|
39
|
+
return tags
|
|
30
40
|
|
|
31
41
|
@classmethod
|
|
32
42
|
def extract_references(cls, attrs):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,o={
|
|
1
|
+
(()=>{"use strict";var e,o={3188:(e,o,t)=>{var r=t(1669),a=t.n(r),i=t(2614);class n extends i.C4{ajaxifyLinks(e,o){super.ajaxifyLinks(e,o),a()("a.upload-one-now").on("click",(e=>{const o=a()("#id_collection_id").val();o&&a()("#id_image-chooser-upload-collection").val(o),e.preventDefault()}))}onLoadChooseStep(e){super.onLoadChooseStep(e),a()("a.suggested-tag").on("click",(e=>(a()("#id_q").val(""),this.searchController.search({tag:a()(e.currentTarget).text(),collection_id:a()("#id_collection_id").val()}),!1)))}onLoadDuplicateFoundStep(e,o){a()("#tab-upload",e.body).replaceWith(o.htmlFragment),a()(".use-new-image",e.body).on("click",(o=>(e.loadUrl(o.currentTarget.href),!1))),a()(".use-existing-image",e.body).on("click",(o=>{var t=a()(o.currentTarget).closest("form"),r=a()('input[name="csrfmiddlewaretoken"]',t).val();return e.postForm(o.currentTarget.href,{csrfmiddlewaretoken:r}),!1}))}onLoadSelectFormatStep(e){var o=document.querySelector("#id_image-chooser-insertion-image_is_decorative"),t=document.querySelector("#id_image-chooser-insertion-alt_text"),r=document.querySelector('[for="id_image-chooser-insertion-alt_text"]');function i(){t.setAttribute("disabled","disabled"),r.classList.remove("required")}function n(){t.removeAttribute("disabled"),r.classList.add("required")}o.checked?i():n(),o.addEventListener("change",(e=>{e.target.checked?i():n()})),a()("form",e.body).on("submit",(o=>(a().post(o.currentTarget.action,a()(o.currentTarget).serialize(),e.loadResponseText,"text"),!1)))}getOnLoadHandlers(){const e=super.getOnLoadHandlers();return e.duplicate_found=(e,o)=>{this.onLoadDuplicateFoundStep(e,o)},e.select_format=(e,o)=>{this.onLoadSelectFormatStep(e,o)},e}}window.IMAGE_CHOOSER_MODAL_ONLOAD_HANDLERS=new n({creationFormFileFieldSelector:"#id_image-chooser-upload-file",creationFormTitleFieldSelector:"#id_image-chooser-upload-title",creationFormEventName:"wagtail:images-upload",creationFormTabSelector:"#tab-upload"}).getOnLoadHandlers();class l extends i.ZZ{onloadHandlers=window.IMAGE_CHOOSER_MODAL_ONLOAD_HANDLERS}window.ImageChooserModal=l},1669:e=>{e.exports=jQuery}},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var i=t[e]={id:e,loaded:!1,exports:{}};return o[e].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=o,e=[],r.O=(o,t,a,i)=>{if(!t){var n=1/0;for(s=0;s<e.length;s++){for(var[t,a,i]=e[s],l=!0,d=0;d<t.length;d++)(!1&i||n>=i)&&Object.keys(r.O).every((e=>r.O[e](t[d])))?t.splice(d--,1):(l=!1,i<n&&(n=i));if(l){e.splice(s--,1);var c=a();void 0!==c&&(o=c)}}return o}i=i||0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];e[s]=[t,a,i]},r.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return r.d(o,{a:o}),o},r.d=(e,o)=>{for(var t in o)r.o(o,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.j=678,(()=>{var e={678:0};r.O.j=o=>0===e[o];var o=(o,t)=>{var a,i,[n,l,d]=t,c=0;if(n.some((o=>0!==e[o]))){for(a in l)r.o(l,a)&&(r.m[a]=l[a]);if(d)var s=d(r)}for(o&&o(t);c<n.length;c++)i=n[c],r.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return r.O(s)},t=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];t.forEach(o.bind(null,0)),t.push=o.bind(null,t.push.bind(t))})();var a=r.O(void 0,[321],(()=>r(3188)));a=r.O(a)})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,t={
|
|
1
|
+
(()=>{"use strict";var e,t={7199:(e,t,r)=>{var i=r(9465);class o extends i.y{chooserModalClass=ImageChooserModal;initHTMLElements(e){super.initHTMLElements(e),this.previewImage=this.chooserElement.querySelector("[data-chooser-image]")}getStateFromHTML(){const e=super.getStateFromHTML();return e&&(e.preview={url:this.previewImage.getAttribute("src"),width:this.previewImage.getAttribute("width"),height:this.previewImage.getAttribute("height")}),e}renderState(e){super.renderState(e),this.previewImage.setAttribute("src",e.preview.url),this.previewImage.setAttribute("width",e.preview.width)}}class a extends i._{widgetClass=o;chooserModalClass=ImageChooserModal}window.telepath.register("wagtail.images.widgets.ImageChooser",a)},1669:e=>{e.exports=jQuery}},r={};function i(e){var o=r[e];if(void 0!==o)return o.exports;var a=r[e]={id:e,loaded:!1,exports:{}};return t[e].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=t,e=[],i.O=(t,r,o,a)=>{if(!r){var s=1/0;for(h=0;h<e.length;h++){for(var[r,o,a]=e[h],n=!0,l=0;l<r.length;l++)(!1&a||s>=a)&&Object.keys(i.O).every((e=>i.O[e](r[l])))?r.splice(l--,1):(n=!1,a<s&&(s=a));if(n){e.splice(h--,1);var d=o();void 0!==d&&(t=d)}}return t}a=a||0;for(var h=e.length;h>0&&e[h-1][2]>a;h--)e[h]=e[h-1];e[h]=[r,o,a]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),i.j=246,(()=>{var e={246:0};i.O.j=t=>0===e[t];var t=(t,r)=>{var o,a,[s,n,l]=r,d=0;if(s.some((t=>0!==e[t]))){for(o in n)i.o(n,o)&&(i.m[o]=n[o]);if(l)var h=l(i)}for(t&&t(r);d<s.length;d++)a=s[d],i.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return i.O(h)},r=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var o=i.O(void 0,[321],(()=>i(7199)));o=i.O(o)})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,t={
|
|
1
|
+
(()=>{"use strict";var e,t={4023:(e,t,r)=>{var i=r(9465);class o extends i.y{chooserModalClass=ImageChooserModal;initHTMLElements(e){super.initHTMLElements(e),this.previewImage=this.chooserElement.querySelector("[data-chooser-image]")}getStateFromHTML(){const e=super.getStateFromHTML();return e&&(e.preview={url:this.previewImage.getAttribute("src"),width:this.previewImage.getAttribute("width"),height:this.previewImage.getAttribute("height")}),e}renderState(e){super.renderState(e),this.previewImage.setAttribute("src",e.preview.url),this.previewImage.setAttribute("width",e.preview.width)}}window.ImageChooser=o},1669:e=>{e.exports=jQuery}},r={};function i(e){var o=r[e];if(void 0!==o)return o.exports;var a=r[e]={id:e,loaded:!1,exports:{}};return t[e].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=t,e=[],i.O=(t,r,o,a)=>{if(!r){var n=1/0;for(u=0;u<e.length;u++){for(var[r,o,a]=e[u],s=!0,l=0;l<r.length;l++)(!1&a||n>=a)&&Object.keys(i.O).every((e=>i.O[e](r[l])))?r.splice(l--,1):(s=!1,a<n&&(n=a));if(s){e.splice(u--,1);var h=o();void 0!==h&&(t=h)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,o,a]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),i.j=306,(()=>{var e={306:0};i.O.j=t=>0===e[t];var t=(t,r)=>{var o,a,[n,s,l]=r,h=0;if(n.some((t=>0!==e[t]))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(l)var u=l(i)}for(t&&t(r);h<n.length;h++)a=n[h],i.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return i.O(u)},r=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var o=i.O(void 0,[321],(()=>i(4023)));o=i.O(o)})();
|
|
@@ -9,57 +9,17 @@
|
|
|
9
9
|
<script defer src="{% versioned_static 'wagtailadmin/js/bulk-actions.js' %}"></script>
|
|
10
10
|
{% endblock %}
|
|
11
11
|
|
|
12
|
-
{% block
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{% trans "Sort by" as sort_by %}
|
|
25
|
-
{% rawformattedfield label_text=sort_by id_for_label="order_images_by" %}
|
|
26
|
-
<select id="order_images_by" name="ordering" data-controller="w-submit" data-action="change->w-submit#submit">
|
|
27
|
-
{% for ordering, ordering_text in ORDERING_OPTIONS.items %}
|
|
28
|
-
<option value="{{ ordering }}" {% if current_ordering == ordering %}selected="selected"{% endif %}>{{ ordering_text }}</option>
|
|
29
|
-
{% endfor %}
|
|
30
|
-
</select>
|
|
31
|
-
{% endrawformattedfield %}
|
|
32
|
-
|
|
33
|
-
{% trans "Entries per page" as entries_per_page_label %}
|
|
34
|
-
{% rawformattedfield label_text=entries_per_page_label id_for_label="entries_per_page_label" %}
|
|
35
|
-
<select id="entries_per_page" name="entries_per_page" data-controller="w-submit" data-action="change->w-submit#submit">
|
|
36
|
-
{% for value in ENTRIES_PER_PAGE_CHOICES %}
|
|
37
|
-
<option value="{{ value }}" {% if entries_per_page == value %}selected="selected"{% endif %}>{{ value }}</option>
|
|
38
|
-
{% endfor %}
|
|
39
|
-
</select>
|
|
40
|
-
{% endrawformattedfield %}
|
|
41
|
-
{% endfield_row %}
|
|
42
|
-
|
|
43
|
-
{% if popular_tags %}
|
|
44
|
-
<fieldset class="tagfilter">
|
|
45
|
-
<legend>{% trans 'Popular Tags:' %}</legend>
|
|
46
|
-
{% for tag in popular_tags %}
|
|
47
|
-
{% if tag.name != current_tag %}
|
|
48
|
-
<a class="button button-small button-secondary bicolor button--icon" href="{{ index_url }}{% querystring tag=tag.name %}">{% icon name="tag" wrapped=1 %}{{ tag.name }}</a>
|
|
49
|
-
{% else %}
|
|
50
|
-
<a class="button button-small bicolor button--icon" href="{{ index_url }}{% querystring tag=tag.name %}">{% icon name="tag" wrapped=1 %}{{ tag.name }}</a>
|
|
51
|
-
{% endif %}
|
|
52
|
-
{% endfor %}
|
|
53
|
-
{% if current_tag %}
|
|
54
|
-
<a class="button button-small bicolor button-secondary button--icon" href="{{ index_url }}{% querystring tag='' %}">{% icon name="cross" wrapped=1 %}{% trans 'Clear' %}</a>
|
|
55
|
-
{% endif %}
|
|
56
|
-
</fieldset>
|
|
57
|
-
{% endif %}
|
|
58
|
-
</form>
|
|
59
|
-
<div id="listing-results">
|
|
60
|
-
{% include "wagtailimages/images/index_results.html" %}
|
|
61
|
-
</div>
|
|
62
|
-
</div>
|
|
12
|
+
{% block slim_header %}
|
|
13
|
+
{% fragment as extra_form_fields %}
|
|
14
|
+
{% rawformattedfield label_text=_("Sort by") id_for_label="order_images_by" sr_only_label=True %}
|
|
15
|
+
<select id="order_images_by" name="ordering">
|
|
16
|
+
{% for ordering, ordering_text in ORDERING_OPTIONS.items %}
|
|
17
|
+
<option value="{{ ordering }}" {% if current_ordering == ordering %}selected="selected"{% endif %}>{{ ordering_text }}</option>
|
|
18
|
+
{% endfor %}
|
|
19
|
+
</select>
|
|
20
|
+
{% endrawformattedfield %}
|
|
21
|
+
{% endfragment %}
|
|
22
|
+
{% include "wagtailimages/images/image_listing_header.html" with breadcrumbs_items=breadcrumbs_items side_panels=side_panels history_url=history_url title=header_title search_url=index_results_url search_form=search_form filters=filters buttons=header_buttons icon_name=header_icon extra_form_fields=extra_form_fields only %}
|
|
63
23
|
{% endblock %}
|
|
64
24
|
|
|
65
25
|
{% block bulk_actions %}
|