mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-05-22 05:51:53 +00:00
Replace the page_action_menu template tag with a PageActionMenu class to manage rendering
This commit is contained in:
parent
b48566e735
commit
9b3e0c15e0
5 changed files with 47 additions and 40 deletions
|
|
@ -5,6 +5,7 @@ from django.urls import reverse
|
|||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from wagtail.core import hooks
|
||||
from wagtail.core.models import UserPagePermissionsProxy
|
||||
|
||||
|
||||
class ActionMenuItem:
|
||||
|
|
@ -111,20 +112,53 @@ class DeleteMenuItem(ActionMenuItem):
|
|||
return reverse('wagtailadmin_pages:delete', args=(context['page'].id,))
|
||||
|
||||
|
||||
PAGE_ACTION_MENU_ITEMS = None
|
||||
BASE_PAGE_ACTION_MENU_ITEMS = None
|
||||
|
||||
|
||||
def _get_action_menu_items():
|
||||
global PAGE_ACTION_MENU_ITEMS
|
||||
def _get_base_page_action_menu_items():
|
||||
"""
|
||||
Retrieve the global list of menu items for the page action menu,
|
||||
which may then be customised on a per-request basis
|
||||
"""
|
||||
global BASE_PAGE_ACTION_MENU_ITEMS
|
||||
|
||||
if PAGE_ACTION_MENU_ITEMS is None:
|
||||
PAGE_ACTION_MENU_ITEMS = [
|
||||
if BASE_PAGE_ACTION_MENU_ITEMS is None:
|
||||
BASE_PAGE_ACTION_MENU_ITEMS = [
|
||||
UnpublishMenuItem(order=10),
|
||||
DeleteMenuItem(order=20),
|
||||
PublishMenuItem(order=30),
|
||||
SubmitForModerationMenuItem(order=40),
|
||||
]
|
||||
for hook in hooks.get_hooks('register_page_action_menu_item'):
|
||||
PAGE_ACTION_MENU_ITEMS.append(hook())
|
||||
BASE_PAGE_ACTION_MENU_ITEMS.append(hook())
|
||||
|
||||
return PAGE_ACTION_MENU_ITEMS
|
||||
return BASE_PAGE_ACTION_MENU_ITEMS
|
||||
|
||||
|
||||
class PageActionMenu:
|
||||
template = 'wagtailadmin/pages/action_menu/menu.html'
|
||||
|
||||
def __init__(self, request, **kwargs):
|
||||
self.request = request
|
||||
self.context = kwargs
|
||||
self.context['user_page_permissions'] = UserPagePermissionsProxy(self.request.user)
|
||||
|
||||
self.menu_items = [
|
||||
menu_item
|
||||
for menu_item in _get_base_page_action_menu_items()
|
||||
if menu_item.is_shown(self.request, self.context)
|
||||
]
|
||||
|
||||
self.menu_items.sort(key=lambda item: item.order)
|
||||
|
||||
for hook in hooks.get_hooks('construct_page_action_menu'):
|
||||
hook(self.menu_items, self.request, self.context)
|
||||
|
||||
def render_html(self):
|
||||
return render_to_string(self.template, {
|
||||
'show_menu': bool(self.menu_items),
|
||||
'rendered_menu_items': [
|
||||
menu_item.render_html(self.request, self.context)
|
||||
for menu_item in self.menu_items
|
||||
]
|
||||
}, request=self.request)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
<li class="actions">
|
||||
<div class="dropdown dropup dropdown-button match-width">
|
||||
<button type="submit" class="button action-save button-longrunning" tabindex="3" data-clicked-text="{% trans 'Saving…' %}"><span class="icon icon-spinner"></span><em>{% trans 'Save draft' %}</em></button>
|
||||
{% page_action_menu action_menu_items view='create' parent_page=parent_page %}
|
||||
{{ action_menu.render_html }}
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
<div class="dropdown dropup dropdown-button match-width {% if is_revision %}warning{% endif %}">
|
||||
<button type="submit" class="button action-save button-longrunning {% if is_revision %}warning{% endif %}" tabindex="3" data-clicked-text="{% trans 'Saving…' %}" {% if page.locked %}disabled {% endif %}><span class="icon icon-spinner"></span><em>{% if page.locked %}{% trans 'Page locked' %}{% else %}{% if is_revision %}{% trans 'Replace current draft' %}{% else %}{% trans 'Save draft' %}{% endif %}{% endif %}</em></button>
|
||||
|
||||
{% page_action_menu action_menu_items view=view_type page=page %}
|
||||
{{ action_menu.render_html }}
|
||||
</div>
|
||||
</li>
|
||||
|
||||
|
|
|
|||
|
|
@ -395,28 +395,3 @@ def avatar_url(user, size=50):
|
|||
return gravatar_url
|
||||
|
||||
return static('wagtailadmin/images/default-user-avatar.png')
|
||||
|
||||
|
||||
@register.inclusion_tag("wagtailadmin/pages/action_menu/menu.html", takes_context=True)
|
||||
def page_action_menu(context, menu_items, **kwargs):
|
||||
menu_item_context = kwargs
|
||||
menu_item_context.update({
|
||||
'user_page_permissions': _get_user_page_permissions(context),
|
||||
})
|
||||
|
||||
visible_menu_items = [
|
||||
menu_item for menu_item in menu_items
|
||||
if menu_item.is_shown(context['request'], menu_item_context)
|
||||
]
|
||||
visible_menu_items.sort(key=lambda item: item.order)
|
||||
|
||||
for hook in hooks.get_hooks('construct_page_action_menu'):
|
||||
hook(visible_menu_items, context['request'], menu_item_context)
|
||||
|
||||
return {
|
||||
'show_menu': bool(visible_menu_items),
|
||||
'rendered_menu_items': [
|
||||
menu_item.render_html(context['request'], menu_item_context)
|
||||
for menu_item in visible_menu_items
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ from django.views.decorators.vary import vary_on_headers
|
|||
from django.views.generic import View
|
||||
|
||||
from wagtail.admin import messages, signals
|
||||
from wagtail.admin.action_menu import _get_action_menu_items
|
||||
from wagtail.admin.action_menu import PageActionMenu
|
||||
from wagtail.admin.forms.pages import CopyForm
|
||||
from wagtail.admin.forms.search import SearchForm
|
||||
from wagtail.admin.navigation import get_explorable_root_page
|
||||
|
|
@ -304,7 +304,7 @@ def create(request, content_type_app_name, content_type_model_name, parent_page_
|
|||
'page_class': page_class,
|
||||
'parent_page': parent_page,
|
||||
'edit_handler': edit_handler,
|
||||
'action_menu_items': _get_action_menu_items(),
|
||||
'action_menu': PageActionMenu(request, view='create', parent_page=parent_page),
|
||||
'preview_modes': page.preview_modes,
|
||||
'form': form,
|
||||
'next': next_url,
|
||||
|
|
@ -528,13 +528,12 @@ def edit(request, page_id):
|
|||
page_for_status = page
|
||||
|
||||
return render(request, 'wagtailadmin/pages/edit.html', {
|
||||
'view_type': 'edit',
|
||||
'page': page,
|
||||
'page_for_status': page_for_status,
|
||||
'content_type': content_type,
|
||||
'edit_handler': edit_handler,
|
||||
'errors_debug': errors_debug,
|
||||
'action_menu_items': _get_action_menu_items(),
|
||||
'action_menu': PageActionMenu(request, view='edit', page=page),
|
||||
'preview_modes': page.preview_modes,
|
||||
'form': form,
|
||||
'next': next_url,
|
||||
|
|
@ -1138,14 +1137,13 @@ def revisions_revert(request, page_id, revision_id):
|
|||
))
|
||||
|
||||
return render(request, 'wagtailadmin/pages/edit.html', {
|
||||
'view_type': 'revisions_revert',
|
||||
'page': page,
|
||||
'revision': revision,
|
||||
'is_revision': True,
|
||||
'content_type': content_type,
|
||||
'edit_handler': edit_handler,
|
||||
'errors_debug': None,
|
||||
'action_menu_items': _get_action_menu_items(),
|
||||
'action_menu': PageActionMenu(request, view='revisions_revert', page=page),
|
||||
'preview_modes': page.preview_modes,
|
||||
'form': form, # Used in unit tests
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue