Add a view_name argument to register_page_header_buttons

pull/11069/head
Matt Westcott 2023-10-06 14:11:14 +01:00
rodzic 3d8e6824a8
commit 8079cad7df
7 zmienionych plików z 24 dodań i 12 usunięć

Wyświetl plik

@ -551,7 +551,7 @@ This example will add a simple button to the secondary dropdown menu:
from wagtail.admin import widgets as wagtailadmin_widgets
@hooks.register('register_page_header_buttons')
def page_header_buttons(page, user, next_url=None):
def page_header_buttons(page, user, view_name, next_url=None):
yield wagtailadmin_widgets.Button(
'A dropdown button',
'/goes/to/a/url/',
@ -563,12 +563,13 @@ The arguments passed to the hook are as follows:
- `page` - the page object to generate the button for
- `user` - the logged-in user
- `view_name` - either `index` or `edit`, depending on whether the button is being generated for the page listing or edit view
- `next_url` - the URL that the linked action should redirect back to on completion of the action, if the view supports it
The `priority` argument controls the order the buttons are displayed in the dropdown. Buttons are ordered from low to high priority, so a button with `priority=10` will be displayed before a button with `priority=60`.
```{versionchanged} 5.2
The hook function now receives a `user` argument instead of a `page_perms` argument. To check the user's permissions on the page, use `page.permissions_for_user(user)`.
The hook function now receives a `user` argument instead of a `page_perms` argument, and a `view_name` argument. To check the user's permissions on the page, use `page.permissions_for_user(user)`.
```
## Editor workflow

Wyświetl plik

@ -11,7 +11,7 @@
{# Actions divider #}
<div class="w-w-px w-h-[30px] w-ml-auto sm:w-ml-0 w-bg-border-furniture"></div>
{# Page actions dropdown #}
{% page_header_buttons parent_page user=request.user %}
{% page_header_buttons parent_page user=request.user view_name="index" %}
{% endblock %}
{% block actions %}
{% if not parent_page.is_root %}

Wyświetl plik

@ -11,7 +11,7 @@
{# Actions divider #}
<div class="w-w-px w-h-[30px] w-ml-auto sm:w-ml-0 w-bg-border-furniture"></div>
{# Page actions dropdown #}
{% page_header_buttons page user=request.user %}
{% page_header_buttons page user=request.user view_name="edit" %}
{% endblock %}
{% block actions %}

Wyświetl plik

@ -505,7 +505,7 @@ def page_listing_buttons(context, page, user):
@register.inclusion_tag(
"wagtailadmin/pages/listing/_page_header_buttons.html", takes_context=True
)
def page_header_buttons(context, page, user):
def page_header_buttons(context, page, user, view_name):
next_url = context["request"].path
page_perms = page.permissions_for_user(user)
button_hooks = hooks.get_hooks("register_page_header_buttons")
@ -513,7 +513,9 @@ def page_header_buttons(context, page, user):
buttons = []
for hook in button_hooks:
if accepts_kwarg(hook, "user"):
buttons.extend(hook(page=page, user=user, next_url=next_url))
buttons.extend(
hook(page=page, user=user, next_url=next_url, view_name=view_name)
)
else:
# old-style hook that accepts page_perms instead of user
warn(

Wyświetl plik

@ -345,10 +345,13 @@ class TestPageHeaderButtonsHooks(TestButtonsHooks):
self.assertContains(response, "Another useless header button")
def test_register_page_header_buttons_new_signature(self):
def custom_page_header_buttons(page, user, next_url=None):
def custom_page_header_buttons(page, user, view_name, next_url=None):
if not isinstance(user, AbstractBaseUser):
raise TypeError("expected a user instance")
if view_name != "edit":
raise ValueError("expected view_name to be 'edit'")
yield wagtailadmin_widgets.Button(
"Another useless header button", "/custom-url", priority=10
)
@ -378,7 +381,9 @@ class TestPageHeaderButtonsHooks(TestButtonsHooks):
next_url = "a/random/url/"
full_url = base_url + "?" + urlencode({"next": next_url})
buttons = page_header_buttons(page, self.user, next_url=next_url)
buttons = page_header_buttons(
page, self.user, view_name="index", next_url=next_url
)
delete_button = next(button for button in buttons if button.label == "Delete")
self.assertEqual(delete_button.url, full_url)
@ -395,7 +400,9 @@ class TestPageHeaderButtonsHooks(TestButtonsHooks):
base_url = reverse("wagtailadmin_pages:delete", args=[page.id])
next_url = reverse("wagtailadmin_explore", args=[page.id])
buttons = page_header_buttons(page, self.user, next_url=next_url)
buttons = page_header_buttons(
page, self.user, view_name="index", next_url=next_url
)
delete_button = next(button for button in buttons if button.label == "Delete")
@ -405,7 +412,9 @@ class TestPageHeaderButtonsHooks(TestButtonsHooks):
base_url = reverse("wagtailadmin_pages:delete", args=[page.id])
next_url = reverse("wagtailadmin_pages:edit", args=[page.id])
buttons = page_header_buttons(page, self.user, next_url=next_url)
buttons = page_header_buttons(
page, self.user, view_name="index", next_url=next_url
)
delete_button = next(button for button in buttons if button.label == "Delete")

Wyświetl plik

@ -442,7 +442,7 @@ def page_listing_more_buttons(page, user, next_url=None):
@hooks.register("register_page_header_buttons")
def page_header_buttons(page, user, next_url=None):
def page_header_buttons(page, user, view_name, next_url=None):
page_perms = page.permissions_for_user(user)
yield PageListingEditButton(
page=page,

Wyświetl plik

@ -64,7 +64,7 @@ def page_listing_more_buttons(page, user, next_url=None):
@hooks.register("register_page_header_buttons")
def page_header_buttons(page, user, next_url=None):
def page_header_buttons(page, user, view_name, next_url=None):
if not page.is_root() and user.has_perm("simple_translation.submit_translation"):
# If there's at least one locale that we haven't translated into yet,
# show "Translate this page" button