kopia lustrzana https://github.com/wagtail/wagtail
Move delete button in edit view to a header 'more' button
rodzic
040065c73e
commit
45d9efdf99
wagtail
admin
templates/wagtailadmin/generic
views
generic
snippets
|
@ -1,8 +1 @@
|
|||
{% extends "wagtailadmin/generic/form.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block extra_actions %}
|
||||
{% if delete_url %}
|
||||
<a href="{{ delete_url }}" class="button">{{ delete_item_label }}</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -41,6 +41,7 @@ from wagtail.admin.ui.tables import (
|
|||
from wagtail.admin.utils import get_latest_str, get_valid_next_url_from_request
|
||||
from wagtail.admin.views.mixins import SpreadsheetExportMixin
|
||||
from wagtail.admin.widgets.button import (
|
||||
Button,
|
||||
ButtonWithDropdown,
|
||||
HeaderButton,
|
||||
ListingButton,
|
||||
|
@ -728,6 +729,24 @@ class EditView(
|
|||
.first()
|
||||
)
|
||||
|
||||
@cached_property
|
||||
def can_delete(self):
|
||||
return self.user_has_permission_for_instance("delete", self.object)
|
||||
|
||||
@cached_property
|
||||
def header_more_buttons(self):
|
||||
buttons = []
|
||||
if self.can_delete and (delete_url := self.get_delete_url()):
|
||||
buttons.append(
|
||||
Button(
|
||||
self.delete_item_label,
|
||||
url=delete_url,
|
||||
icon_name="bin",
|
||||
priority=20,
|
||||
)
|
||||
)
|
||||
return buttons
|
||||
|
||||
def get_edit_url(self):
|
||||
if not self.edit_url_name:
|
||||
raise ImproperlyConfigured(
|
||||
|
@ -858,9 +877,7 @@ class EditView(
|
|||
context["media"] += side_panels.media
|
||||
context["submit_button_label"] = self.submit_button_label
|
||||
context["has_unsaved_changes"] = self.has_unsaved_changes
|
||||
context["can_delete"] = self.user_has_permission_for_instance(
|
||||
"delete", self.object
|
||||
)
|
||||
context["can_delete"] = self.can_delete
|
||||
if context["can_delete"]:
|
||||
context["delete_url"] = self.get_delete_url()
|
||||
context["delete_item_label"] = self.delete_item_label
|
||||
|
|
|
@ -264,6 +264,7 @@ class Edit(EditView):
|
|||
enable_item_label = _("Enable")
|
||||
enable_url_name = "wagtailadmin_workflows:enable"
|
||||
header_icon = "tasks"
|
||||
header_more_buttons = []
|
||||
edit_handler = None
|
||||
MAX_PAGES = 5
|
||||
_show_breadcrumbs = True
|
||||
|
@ -706,6 +707,7 @@ class EditTask(EditView):
|
|||
enable_item_label = _("Enable")
|
||||
enable_url_name = "wagtailadmin_workflows:enable_task"
|
||||
header_icon = "thumbtack"
|
||||
header_more_buttons = []
|
||||
_show_breadcrumbs = True
|
||||
|
||||
@cached_property
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Handles rendering of the list of actions in the footer of the snippet create/edit views."""
|
||||
from functools import lru_cache
|
||||
from warnings import warn
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.admin.utils import quote
|
||||
|
@ -13,6 +14,7 @@ from wagtail import hooks
|
|||
from wagtail.admin.ui.components import Component
|
||||
from wagtail.models import DraftStateMixin, LockableMixin, WorkflowMixin
|
||||
from wagtail.snippets.permissions import get_permission_name
|
||||
from wagtail.utils.deprecation import RemovedInWagtail70Warning
|
||||
|
||||
|
||||
class ActionMenuItem(Component):
|
||||
|
@ -219,6 +221,14 @@ class DeleteMenuItem(ActionMenuItem):
|
|||
icon_name = "bin"
|
||||
classname = "action-secondary"
|
||||
|
||||
def __init__(self, order=None):
|
||||
super().__init__(order)
|
||||
warn(
|
||||
"DeleteMenuItem is deprecated. "
|
||||
"The delete option is now provided via EditView.get_header_more_buttons().",
|
||||
RemovedInWagtail70Warning,
|
||||
)
|
||||
|
||||
def is_shown(self, context):
|
||||
delete_permission = get_permission_name("delete", context["model"])
|
||||
|
||||
|
@ -258,7 +268,6 @@ def get_base_snippet_action_menu_items(model):
|
|||
"""
|
||||
menu_items = [
|
||||
SaveMenuItem(order=0),
|
||||
DeleteMenuItem(order=10),
|
||||
]
|
||||
if issubclass(model, DraftStateMixin):
|
||||
menu_items += [
|
||||
|
@ -341,6 +350,9 @@ class SnippetActionMenu:
|
|||
self.default_item = None
|
||||
|
||||
def render_html(self):
|
||||
if not self.default_item:
|
||||
return ""
|
||||
|
||||
rendered_menu_items = [
|
||||
menu_item.render_html(self.context) for menu_item in self.menu_items
|
||||
]
|
||||
|
|
|
@ -34,6 +34,7 @@ from wagtail.models import Locale, ModelLogEntry, Revision
|
|||
from wagtail.signals import published, unpublished
|
||||
from wagtail.snippets.action_menu import (
|
||||
ActionMenuItem,
|
||||
DeleteMenuItem,
|
||||
get_base_snippet_action_menu_items,
|
||||
)
|
||||
from wagtail.snippets.blocks import SnippetChooserBlock
|
||||
|
@ -1944,6 +1945,32 @@ class TestSnippetEditView(BaseTestSnippetEditView):
|
|||
|
||||
self.assertNotContains(response, "<em>Save</em>")
|
||||
|
||||
def test_register_deprecated_delete_menu_item(self):
|
||||
def hook_func(model):
|
||||
return DeleteMenuItem(order=900)
|
||||
|
||||
get_base_snippet_action_menu_items.cache_clear()
|
||||
with self.register_hook(
|
||||
"register_snippet_action_menu_item", hook_func
|
||||
), self.assertWarnsMessage(
|
||||
RemovedInWagtail70Warning,
|
||||
"DeleteMenuItem is deprecated. "
|
||||
"The delete option is now provided via EditView.get_header_more_buttons().",
|
||||
):
|
||||
response = self.get()
|
||||
|
||||
get_base_snippet_action_menu_items.cache_clear()
|
||||
|
||||
delete_url = reverse(
|
||||
self.test_snippet.snippet_viewset.get_url_name("delete"),
|
||||
args=(quote(self.test_snippet.pk),),
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
f'<a class="button" href="{ delete_url }"><svg class="icon icon-bin icon" aria-hidden="true"><use href="#icon-bin"></use></svg>Delete</a>',
|
||||
html=True,
|
||||
)
|
||||
|
||||
|
||||
class TestEditTabbedSnippet(BaseTestSnippetEditView):
|
||||
def setUp(self):
|
||||
|
|
Ładowanie…
Reference in New Issue