kopia lustrzana https://github.com/wagtail/wagtail
Add register_page_action_menu_item hook
rodzic
89779f6e49
commit
6adf7c8423
|
@ -493,6 +493,46 @@ Hooks for customising the way users are directed through the process of creating
|
||||||
Uses the same behaviour as ``before_create_page``.
|
Uses the same behaviour as ``before_create_page``.
|
||||||
|
|
||||||
|
|
||||||
|
.. _register_page_action_menu_item:
|
||||||
|
|
||||||
|
``register_page_action_menu_item``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Add an item to the popup menu of actions on the page creation and edit views. The callable passed to this hook must return an instance of ``wagtail.admin.views.pages.ActionMenuItem``. The following attributes and methods are available to be overridden on subclasses of ``ActionMenuItem``:
|
||||||
|
|
||||||
|
:order: an integer (default 100) which determines the item's position in the menu. Can also be passed as a keyword argument to the object constructor
|
||||||
|
:label: the displayed text of the menu item
|
||||||
|
:get_url: a method which returns a URL for the menu item to link to; by default, returns ``None`` which causes the menu item to behave as a form submit button instead
|
||||||
|
:name: value of the ``name`` attribute of the submit button, if no URL is specified
|
||||||
|
:is_shown: a method which returns a boolean indicating whether the menu item should be shown; by default, true except when editing a locked page
|
||||||
|
:template: path to a template to render to produce the menu item HTML
|
||||||
|
:get_context: a method that returns a context dictionary to pass to the template
|
||||||
|
:render_html: a method that returns the menu item HTML; by default, renders ``template`` with the context returned from ``get_context``
|
||||||
|
|
||||||
|
The ``get_url``, ``is_shown``, ``get_context`` and ``render_html`` methods all accept a request object and a context dictionary containing the following fields:
|
||||||
|
|
||||||
|
:view: name of the current view: ``'create'``, ``'edit'`` or ``'revisions_revert'``
|
||||||
|
:page: For ``view`` = ``'edit'`` or ``'revisions_revert'``, the page being edited
|
||||||
|
:parent_page: For ``view`` = ``'create'``, the parent page of the page being created
|
||||||
|
:user_page_permissions: a ``UserPagePermissionsProxy`` object for the current user, to test permissions against
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from wagtail.core import hooks
|
||||||
|
from wagtail.admin.views.pages import ActionMenuItem
|
||||||
|
|
||||||
|
class GuacamoleMenuItem(ActionMenuItem):
|
||||||
|
label = "Guacamole"
|
||||||
|
|
||||||
|
def get_url(self, request, context):
|
||||||
|
return "https://www.youtube.com/watch?v=dNJdJIwCF_Y"
|
||||||
|
|
||||||
|
|
||||||
|
@hooks.register('register_page_action_menu_item')
|
||||||
|
def register_guacamole_menu_item():
|
||||||
|
return GuacamoleMenuItem(order=10)
|
||||||
|
|
||||||
|
|
||||||
.. _construct_wagtail_userbar:
|
.. _construct_wagtail_userbar:
|
||||||
|
|
||||||
``construct_wagtail_userbar``
|
``construct_wagtail_userbar``
|
||||||
|
|
|
@ -663,6 +663,8 @@ class TestPageCreation(TestCase, WagtailTestUtils):
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertContains(response, '<a href="#tab-content" class="active">Content</a>')
|
self.assertContains(response, '<a href="#tab-content" class="active">Content</a>')
|
||||||
self.assertContains(response, '<a href="#tab-promote" class="">Promote</a>')
|
self.assertContains(response, '<a href="#tab-promote" class="">Promote</a>')
|
||||||
|
# test register_page_action_menu_item hook
|
||||||
|
self.assertContains(response, '<input type="submit" name="action-panic" value="Panic!" class="button" />')
|
||||||
|
|
||||||
def test_create_multipart(self):
|
def test_create_multipart(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1274,6 +1276,9 @@ class TestPageEdit(TestCase, WagtailTestUtils):
|
||||||
self.assertContains(response, '<legend>Speaker lineup</legend>')
|
self.assertContains(response, '<legend>Speaker lineup</legend>')
|
||||||
self.assertContains(response, 'Add speakers')
|
self.assertContains(response, 'Add speakers')
|
||||||
|
|
||||||
|
# test register_page_action_menu_item hook
|
||||||
|
self.assertContains(response, '<input type="submit" name="action-panic" value="Panic!" class="button" />')
|
||||||
|
|
||||||
def test_edit_draft_page_with_no_revisions(self):
|
def test_edit_draft_page_with_no_revisions(self):
|
||||||
# Tests that the edit page loads
|
# Tests that the edit page loads
|
||||||
response = self.client.get(reverse('wagtailadmin_pages:edit', args=(self.unpublished_page.id, )))
|
response = self.client.get(reverse('wagtailadmin_pages:edit', args=(self.unpublished_page.id, )))
|
||||||
|
|
|
@ -133,12 +133,23 @@ class DeleteMenuItem(ActionMenuItem):
|
||||||
return reverse('wagtailadmin_pages:delete', args=(context['page'].id,))
|
return reverse('wagtailadmin_pages:delete', args=(context['page'].id,))
|
||||||
|
|
||||||
|
|
||||||
ACTION_MENU_ITEMS = [
|
ACTION_MENU_ITEMS = None
|
||||||
UnpublishMenuItem(order=10),
|
|
||||||
DeleteMenuItem(order=20),
|
|
||||||
PublishMenuItem(order=30),
|
def _get_action_menu_items():
|
||||||
SubmitForModerationMenuItem(order=40),
|
global ACTION_MENU_ITEMS
|
||||||
]
|
|
||||||
|
if ACTION_MENU_ITEMS is None:
|
||||||
|
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'):
|
||||||
|
ACTION_MENU_ITEMS.append(hook())
|
||||||
|
|
||||||
|
return ACTION_MENU_ITEMS
|
||||||
|
|
||||||
|
|
||||||
def get_valid_next_url_from_request(request):
|
def get_valid_next_url_from_request(request):
|
||||||
|
@ -416,7 +427,7 @@ def create(request, content_type_app_name, content_type_model_name, parent_page_
|
||||||
'page_class': page_class,
|
'page_class': page_class,
|
||||||
'parent_page': parent_page,
|
'parent_page': parent_page,
|
||||||
'edit_handler': edit_handler,
|
'edit_handler': edit_handler,
|
||||||
'action_menu_items': ACTION_MENU_ITEMS,
|
'action_menu_items': _get_action_menu_items(),
|
||||||
'preview_modes': page.preview_modes,
|
'preview_modes': page.preview_modes,
|
||||||
'form': form,
|
'form': form,
|
||||||
'next': next_url,
|
'next': next_url,
|
||||||
|
@ -646,7 +657,7 @@ def edit(request, page_id):
|
||||||
'content_type': content_type,
|
'content_type': content_type,
|
||||||
'edit_handler': edit_handler,
|
'edit_handler': edit_handler,
|
||||||
'errors_debug': errors_debug,
|
'errors_debug': errors_debug,
|
||||||
'action_menu_items': ACTION_MENU_ITEMS,
|
'action_menu_items': _get_action_menu_items(),
|
||||||
'preview_modes': page.preview_modes,
|
'preview_modes': page.preview_modes,
|
||||||
'form': form,
|
'form': form,
|
||||||
'next': next_url,
|
'next': next_url,
|
||||||
|
@ -1257,7 +1268,7 @@ def revisions_revert(request, page_id, revision_id):
|
||||||
'content_type': content_type,
|
'content_type': content_type,
|
||||||
'edit_handler': edit_handler,
|
'edit_handler': edit_handler,
|
||||||
'errors_debug': None,
|
'errors_debug': None,
|
||||||
'action_menu_items': ACTION_MENU_ITEMS,
|
'action_menu_items': _get_action_menu_items(),
|
||||||
'preview_modes': page.preview_modes,
|
'preview_modes': page.preview_modes,
|
||||||
'form': form, # Used in unit tests
|
'form': form, # Used in unit tests
|
||||||
})
|
})
|
||||||
|
|
|
@ -6,6 +6,7 @@ import wagtail.admin.rich_text.editors.draftail.features as draftail_features
|
||||||
from wagtail.admin.menu import MenuItem
|
from wagtail.admin.menu import MenuItem
|
||||||
from wagtail.admin.rich_text import HalloPlugin
|
from wagtail.admin.rich_text import HalloPlugin
|
||||||
from wagtail.admin.search import SearchArea
|
from wagtail.admin.search import SearchArea
|
||||||
|
from wagtail.admin.views.pages import ActionMenuItem
|
||||||
from wagtail.core import hooks
|
from wagtail.core import hooks
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,3 +105,13 @@ def register_blockquote_feature(features):
|
||||||
css={'all': ['testapp/css/draftail-blockquote.css']},
|
css={'all': ['testapp/css/draftail-blockquote.css']},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class PanicMenuItem(ActionMenuItem):
|
||||||
|
label = "Panic!"
|
||||||
|
name = 'action-panic'
|
||||||
|
|
||||||
|
|
||||||
|
@hooks.register('register_page_action_menu_item')
|
||||||
|
def register_panic_menu_item():
|
||||||
|
return PanicMenuItem()
|
||||||
|
|
Ładowanie…
Reference in New Issue