def page_listing_preview_buttons(page, page_perms, is_parent=False, next_url=None): if page.live and page.url: yield Button(_('Polish'), to_i18n_url(page.full_url, 'pl') + '?lang=pl', attrs={ 'aria-label': _("View live version of '%(title)s'") % { 'title': page.get_admin_display_title() }, 'target': '_blank', 'rel': 'noopener noreferrer' }, priority=20) yield Button(_('English'), to_i18n_url(page.full_url, 'en') + '?lang=en', attrs={ 'aria-label': _("View live version of '%(title)s'") % { 'title': page.get_admin_display_title() }, 'target': '_blank', 'rel': 'noopener noreferrer' }, priority=30)
def page_header_buttons(page, page_perms, next_url=None): if page_perms.can_move(): yield Button( _("Move"), reverse("wagtailadmin_pages:move", args=[page.id]), attrs={ "title": _("Move page '%(title)s'") % {"title": page.get_admin_display_title()} }, priority=10, ) if page_perms.can_copy(): url = reverse("wagtailadmin_pages:copy", args=[page.id]) if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Copy"), url, attrs={ "title": _("Copy page '%(title)s'") % {"title": page.get_admin_display_title()} }, priority=20, ) if page_perms.can_add_subpage(): yield Button( _("Add child page"), reverse("wagtailadmin_pages:add_subpage", args=[page.id]), attrs={ "aria-label": _("Add a child page to '%(title)s' ") % {"title": page.get_admin_display_title()}, }, priority=30, )
def page_listing_preview_draft_buttons(page, page_perms, is_parent=False, next_url=None): if page.has_unpublished_changes: if not page.url: rev = page.revisions.order_by('id').first() page = rev.as_page_object() if page.url: yield Button( _('Polish'), to_i18n_url(page.full_url, 'pl') + '?rev=latest&lang=pl', attrs={ 'aria-label': _("Preview draft version of '%(title)s'") % { 'title': page.get_admin_display_title() }, 'target': '_blank', 'rel': 'noopener noreferrer' }, priority=20) yield Button( _('English'), to_i18n_url(page.full_url, 'en') + '?rev=latest&lang=en', attrs={ 'aria-label': _("Preview draft version of '%(title)s'") % { 'title': page.get_admin_display_title() }, 'target': '_blank', 'rel': 'noopener noreferrer' }, priority=30)
def page_listing_more_buttons(page, page_perms, is_parent=False): """Adds a 'more' button to personalisable pages allowing users to quickly create a new variant for the selected segment. """ if not isinstance(page, models.PersonalisablePageMixin): return metadata = page.personalisation_metadata for vm in metadata.variants_metadata: yield Button('%s variant' % (vm.segment.name), reverse('wagtailadmin_pages:edit', args=[vm.variant_id]), attrs={"title": _('Edit this variant')}, classes=("icon", "icon-fa-pencil"), priority=0) for segment in metadata.get_unused_segments(): yield Button('%s variant' % (segment.name), reverse('segment:copy_page', args=[page.pk, segment.pk]), attrs={"title": _('Create this variant')}, classes=("icon", "icon-fa-plus"), priority=100) yield Button(_('Create a new segment'), reverse('wagtail_personalisation_segment_modeladmin_create'), attrs={"title": _('Create a new segment')}, classes=("icon", "icon-fa-snowflake-o"), priority=200)
def page_header_buttons(page, page_perms, next_url=None): if page_perms.can_move(): yield Button( _('Move'), reverse('wagtailadmin_pages:move', args=[page.id]), attrs={"title": _("Move page '%(title)s'") % {'title': page.get_admin_display_title()}}, priority=10 ) if page_perms.can_copy(): url = reverse('wagtailadmin_pages:copy', args=[page.id]) if next_url: url += '?' + urlencode({'next': next_url}) yield Button( _('Copy'), url, attrs={'title': _("Copy page '%(title)s'") % {'title': page.get_admin_display_title()}}, priority=20 ) if page_perms.can_add_subpage(): yield Button( _('Add child page'), reverse('wagtailadmin_pages:add_subpage', args=[page.id]), attrs={ 'aria-label': _("Add a child page to '%(title)s' ") % {'title': page.get_admin_display_title()}, }, priority=30 )
def page_listing_more_buttons(page, page_perms, is_parent=False, next_url=None): if page_perms.can_move(): yield Button(_('Move'), reverse('wagtailadmin_pages:move', args=[page.id]), attrs={ "title": _("Move page '%(title)s'") % { 'title': page.get_admin_display_title() } }, priority=10) if page_perms.can_copy(): yield Button(_('Copy'), append_querystring( reverse('wagtailadmin_pages:copy', args=[page.id]), next_url), attrs={ 'title': _("Copy page '%(title)s'") % { 'title': page.get_admin_display_title() } }, priority=20) if page_perms.can_delete(): yield Button(_('Delete'), append_querystring( reverse('wagtailadmin_pages:delete', args=[page.id]), next_url), attrs={ 'title': _("Delete page '%(title)s'") % { 'title': page.get_admin_display_title() } }, priority=30) if page_perms.can_unpublish(): yield Button(_('Unpublish'), append_querystring( reverse('wagtailadmin_pages:unpublish', args=[page.id]), next_url), attrs={ 'title': _("Unpublish page '%(title)s'") % { 'title': page.get_admin_display_title() } }, priority=40) if page_perms.can_view_revisions(): yield Button(_('Revisions'), reverse('wagtailadmin_pages:revisions_index', args=[page.id]), attrs={ 'title': _("View revision history for '%(title)s'") % { 'title': page.get_admin_display_title() } }, priority=50)
def joplin_page_listing_more_buttons(page, page_perms, is_parent=False): if not page.is_root(): yield Button(_('Copy'), reverse('wagtailadmin_pages:copy', args=[page.id]), attrs={ 'title': _("Copy page '{title}'").format( title=page.get_admin_display_title()) }, priority=20) # if not page.live: # yield Button( # _('Archive'), # "#TODO-archive", # attrs={'title': _("Archive page '{title}'").format(title=page.get_admin_display_title())}, # priority=30 # ) if page_perms.can_unpublish(): yield Button(_('Unpublish'), reverse('wagtailadmin_pages:unpublish', args=[page.id]), attrs={ 'title': _("Unpublish page '{title}'").format( title=page.get_admin_display_title()) }, priority=40) if page_perms.can_publish() and page.has_unpublished_changes: yield Button(_('Publish'), reverse('publish', args=[page.id]), attrs={ 'title': _("Publish page '{title}'").format( title=page.get_admin_display_title()) }, priority=50) if not page.is_root(): yield Button(_('Revisions'), reverse('wagtailadmin_pages:revisions_index', args=[page.id]), attrs={ 'title': _("View revision history for '{title}'").format( title=page.get_admin_display_title()) }, priority=60) if page_perms.can_delete(): yield Button( _('Delete'), reverse('wagtailadmin_pages:delete', args=[page.id]), attrs={ 'title': _("Delete page '{title}'").format( title=page.get_admin_display_title()) }, )
def add_copy_button(page, page_perms, is_parent=False): if isinstance(page, models.BasePage): yield Button('Copy upstream', reverse('copy-upstream', kwargs={'pk': page.id}), attrs={'title': "Copy this page to another environment"}, priority=80) yield Button( 'Update upstream', reverse('update-upstream', kwargs={'pk': page.id}), attrs={'title': "Update this page on another environment"}, priority=80)
def page_listing_more_buttons(page, page_perms, is_parent=False, next_url=None): if page_perms.can_move(): yield Button( _('Move'), reverse('wagtailadmin_pages:move', args=[page.id]), attrs={"title": _("Move page '%(title)s'") % {'title': page.get_admin_display_title()}}, priority=10 ) if page_perms.can_copy(): url = reverse('wagtailadmin_pages:copy', args=[page.id]) if next_url: url += '?' + urlencode({'next': next_url}) yield Button( _('Copy'), url, attrs={'title': _("Copy page '%(title)s'") % {'title': page.get_admin_display_title()}}, priority=20 ) if page_perms.can_delete(): url = reverse('wagtailadmin_pages:delete', args=[page.id]) # After deleting the page, it is impossible to redirect to it. if next_url == reverse('wagtailadmin_explore', args=[page.id]): next_url = None if next_url: url += '?' + urlencode({'next': next_url}) yield Button( _('Delete'), url, attrs={'title': _("Delete page '%(title)s'") % {'title': page.get_admin_display_title()}}, priority=30 ) if page_perms.can_unpublish(): url = reverse('wagtailadmin_pages:unpublish', args=[page.id]) if next_url: url += '?' + urlencode({'next': next_url}) yield Button( _('Unpublish'), url, attrs={'title': _("Unpublish page '%(title)s'") % {'title': page.get_admin_display_title()}}, priority=40 ) if page_perms.can_view_revisions(): yield Button( _('History'), reverse('wagtailadmin_pages:history', args=[page.id]), attrs={'title': _("View page history for '%(title)s'") % {'title': page.get_admin_display_title()}}, priority=50 )
def register_page_listing_button_item(buttons, page, page_perms, context=None): item = Button( label="Dummy Button", url="/dummy-button", priority=10, ) buttons.append(item)
def page_listing_buttons(page, page_perms, is_parent=False, next_url=None): if page_perms.can_edit(): yield PageListingButton( _('Edit'), reverse('wagtailadmin_pages:edit', args=[page.id]), attrs={'aria-label': _("Edit '%(title)s'") % {'title': page.get_admin_display_title()}}, priority=10 ) if page.has_unpublished_changes and page.is_previewable(): yield PageListingButton( _('View draft'), reverse('wagtailadmin_pages:view_draft', args=[page.id]), attrs={ 'aria-label': _("Preview draft version of '%(title)s'") % {'title': page.get_admin_display_title()}, 'target': '_blank', 'rel': 'noopener noreferrer' }, priority=20 ) if page.live and page.url: yield PageListingButton( _('View live'), page.url, attrs={ 'target': "_blank", 'rel': 'noopener noreferrer', 'aria-label': _("View live version of '%(title)s'") % {'title': page.get_admin_display_title()}, }, priority=30 ) if page_perms.can_add_subpage(): if is_parent: yield Button( _('Add child page'), reverse('wagtailadmin_pages:add_subpage', args=[page.id]), attrs={ 'aria-label': _("Add a child page to '%(title)s' ") % {'title': page.get_admin_display_title()}, }, classes={'button', 'button-small', 'bicolor', 'icon', 'white', 'icon-plus'}, priority=40 ) else: yield PageListingButton( _('Add child page'), reverse('wagtailadmin_pages:add_subpage', args=[page.id]), attrs={'aria-label': _("Add a child page to '%(title)s' ") % {'title': page.get_admin_display_title()}}, priority=40 ) yield ButtonWithDropdownFromHook( _('More'), hook_name='register_page_listing_more_buttons', page=page, page_perms=page_perms, is_parent=is_parent, next_url=next_url, attrs={ 'target': '_blank', 'rel': 'noopener noreferrer', 'title': _("View more options for '%(title)s'") % {'title': page.get_admin_display_title()} }, priority=50 )
def register_snippet_listing_button_item(buttons, snippet, user, context=None): item = Button( label="Dummy Button", url="/dummy-button", priority=10, ) buttons.append(item)
def page_listing_more_buttons(page, page_perms, is_parent=False): if page_perms.can_move(): yield Button(_('Move'), reverse('wagtailadmin_pages:move', args=[page.id]), attrs={ "title": _("Move page '{title}'").format( title=page.get_admin_display_title()) }, priority=10) if not page.is_root(): yield Button(_('Copy'), reverse('wagtailadmin_pages:copy', args=[page.id]), attrs={ 'title': _("Copy page '{title}'").format( title=page.get_admin_display_title()) }, priority=20) if page_perms.can_delete(): yield Button(_('Delete'), reverse('wagtailadmin_pages:delete', args=[page.id]), attrs={ 'title': _("Delete page '{title}'").format( title=page.get_admin_display_title()) }, priority=30) if page_perms.can_unpublish(): yield Button(_('Unpublish'), reverse('wagtailadmin_pages:unpublish', args=[page.id]), attrs={ 'title': _("Unpublish page '{title}'").format( title=page.get_admin_display_title()) }, priority=40) if not page.is_root(): yield Button(_('Revisions'), reverse('wagtailadmin_pages:revisions_index', args=[page.id]), attrs={ 'title': _("View revision history for '{title}'").format( title=page.get_admin_display_title()) }, priority=50)
def page_listing_more_buttons(page, page_perms, is_parent=False, next_url=None): if page_perms.can_publish(): yield Button('Publish with children', reverse('publish-with-children', args=(page.id, )), priority=60)
def page_listing_some_more_buttons(page, page_perms, is_parent=False): yield Button(_('Copy to All Countries'), reverse('copy-to-all-confirm', args=(page.id, )), attrs={ 'copy_to_all_confirm': _("Copy page '{title}'").format( title=page.get_admin_display_title()) }, priority=40)
def joplin_page_listing_buttons(page, page_perms, is_parent=False): if page_perms.can_edit(): yield PageListingButton( _('Edit'), reverse('wagtailadmin_pages:edit', args=[page.id]), attrs={'title': _("Edit '{title}'").format( title=page.get_admin_display_title())}, priority=10 ) if page.has_unpublished_changes: try: yield PageListingButton( _('View draft'), page.janis_preview_url(), attrs={'title': _("Preview draft version of '{title}'").format( title=page.get_admin_display_title()), 'target': '_blank'}, priority=20 ) except Exception as e: raise e if page.live and page.url and hasattr(page, 'janis_url'): yield PageListingButton( _('View live'), page.janis_url(), attrs={'target': "_blank", 'title': _("View live version of '{title}'").format( title=page.get_admin_display_title())}, priority=30 ) # make the author notes icon appear if latest revision has notes latest_revision_as_page = page.get_latest_revision_as_page() if hasattr(latest_revision_as_page, 'author_notes') and latest_revision_as_page.author_notes: yield Button( _('📝'), 'javascript:null;', attrs={'title': _("Notes for authors entered"), 'class': 'has-author-notes'}, priority=70 ) yield ButtonWithDropdownFromHook( _('More'), hook_name='register_joplin_page_listing_more_buttons', page=page, page_perms=page_perms, is_parent=is_parent, attrs={'target': '_blank', 'title': _("View more options for '{title}'").format( title=page.get_admin_display_title())}, priority=50 )
def page_listing_more_buttons(page, page_perms, is_parent=False, next_url=None): if page_perms.can_move(): yield Button( _("Move"), reverse("wagtailadmin_pages:move", args=[page.id]), attrs={ "title": _("Move page '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=10, ) if page_perms.can_copy(): url = reverse("wagtailadmin_pages:copy", args=[page.id]) if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Copy"), url, attrs={ "title": _("Copy page '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=20, ) if page_perms.can_delete(): url = reverse("wagtailadmin_pages:delete", args=[page.id]) # After deleting the page, it is impossible to redirect to it. if next_url == reverse("wagtailadmin_explore", args=[page.id]): next_url = None if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Delete"), url, attrs={ "title": _("Delete page '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=30, ) if page_perms.can_unpublish(): url = reverse("wagtailadmin_pages:unpublish", args=[page.id]) if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Unpublish"), url, attrs={ "title": _("Unpublish page '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=40, ) if page_perms.can_view_revisions(): yield Button( _("History"), reverse("wagtailadmin_pages:history", args=[page.id]), attrs={ "title": _("View page history for '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=50, ) if is_parent: yield Button( _("Sort menu order"), "?ordering=ord", attrs={ "title": _("Change ordering of child pages of '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=60, )
def page_listing_buttons(page, page_perms, is_parent=False, next_url=None): if page_perms.can_edit(): yield PageListingButton( _("Edit"), reverse("wagtailadmin_pages:edit", args=[page.id]), attrs={ "aria-label": _("Edit '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=10, ) if page.has_unpublished_changes and page.is_previewable(): yield PageListingButton( _("View draft"), reverse("wagtailadmin_pages:view_draft", args=[page.id]), attrs={ "aria-label": _("Preview draft version of '%(title)s'") % { "title": page.get_admin_display_title() }, "rel": "noreferrer", }, priority=20, ) if page.live and page.url: yield PageListingButton( _("View live"), page.url, attrs={ "rel": "noreferrer", "aria-label": _("View live version of '%(title)s'") % { "title": page.get_admin_display_title() }, }, priority=30, ) if page_perms.can_add_subpage(): if is_parent: yield Button( _("Add child page"), reverse("wagtailadmin_pages:add_subpage", args=[page.id]), attrs={ "aria-label": _("Add a child page to '%(title)s' ") % { "title": page.get_admin_display_title() }, }, classes={ "button", "button-small", "bicolor", "icon", "white", "icon-plus", }, priority=40, ) else: yield PageListingButton( _("Add child page"), reverse("wagtailadmin_pages:add_subpage", args=[page.id]), attrs={ "aria-label": _("Add a child page to '%(title)s' ") % { "title": page.get_admin_display_title() } }, priority=40, ) yield ButtonWithDropdownFromHook( _("More"), hook_name="register_page_listing_more_buttons", page=page, page_perms=page_perms, is_parent=is_parent, next_url=next_url, attrs={ "target": "_blank", "rel": "noreferrer", "title": _("View more options for '%(title)s'") % { "title": page.get_admin_display_title() }, }, priority=50, )
def joplin_page_listing_buttons(page, page_perms, is_parent=False): if page_perms.can_edit(): yield PageListingButton(_('Edit'), reverse('wagtailadmin_pages:edit', args=[page.id]), attrs={ 'title': _("Edit '{title}'").format( title=page.get_admin_display_title()) }, priority=10) if page.has_unpublished_changes: yield PageListingButton( _('View draft'), page.janis_preview_url(), attrs={ 'title': _("Preview draft version of '{title}'").format( title=page.get_admin_display_title()), 'target': '_blank' }, priority=20) if page.live and page.url and hasattr(page, 'janis_url'): yield PageListingButton(_('View live'), page.janis_url(), attrs={ 'target': "_blank", 'title': _("View live version of '{title}'").format( title=page.get_admin_display_title()) }, priority=30) # This is kinda hacky but it should let us know when we have notes on a revision latest_revision = None all_revisions = PageRevision.objects.filter(page_id=page.id) for revision in all_revisions: if revision.is_latest_revision(): latest_revision = revision if latest_revision: author_notes = latest_revision.as_page_object().author_notes # Following this: https://docs.python.org/3/library/html.parser.html#examples parser = CheckForDataInHTMLParser() parser.feed(author_notes) if parser.has_data: yield Button( _('📝'), 'javascript:alert("Wouldn\'t it be cool if this linked to the notes?");', attrs={ 'title': _("Notes for authors entered"), 'class': 'has-author-notes' }, priority=70) yield ButtonWithDropdownFromHook( _('More'), hook_name='register_joplin_page_listing_more_buttons', page=page, page_perms=page_perms, is_parent=is_parent, attrs={ 'target': '_blank', 'title': _("View more options for '{title}'").format( title=page.get_admin_display_title()) }, priority=50)
def page_header_buttons(page, page_perms, is_parent=False, next_url=None): if page_perms.can_edit(): yield Button( _("Edit"), reverse("wagtailadmin_pages:edit", args=[page.id]), icon_name="edit", attrs={ "title": _("Edit '%(title)s'") % {"title": page.get_admin_display_title()} }, priority=10, ) if page_perms.can_move(): yield Button( _("Move"), reverse("wagtailadmin_pages:move", args=[page.id]), icon_name="arrow-right-full", attrs={ "title": _("Move page '%(title)s'") % {"title": page.get_admin_display_title()} }, priority=20, ) if page_perms.can_copy(): url = reverse("wagtailadmin_pages:copy", args=[page.id]) if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Copy"), url, icon_name="copy", attrs={ "title": _("Copy page '%(title)s'") % {"title": page.get_admin_display_title()} }, priority=30, ) if page_perms.can_add_subpage(): yield Button( _("Add child page"), reverse("wagtailadmin_pages:add_subpage", args=[page.id]), icon_name="circle-plus", attrs={ "aria-label": _("Add a child page to '%(title)s' ") % {"title": page.get_admin_display_title()}, }, priority=40, ) if page_perms.can_delete(): url = reverse("wagtailadmin_pages:delete", args=[page.id]) # After deleting the page, it is impossible to redirect to it. if next_url == reverse("wagtailadmin_explore", args=[page.id]): next_url = None if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Delete"), url, icon_name="bin", attrs={ "title": _("Delete page '%(title)s'") % {"title": page.get_admin_display_title()} }, priority=50, ) if page_perms.can_unpublish(): url = reverse("wagtailadmin_pages:unpublish", args=[page.id]) if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Unpublish"), url, icon_name="download-alt", attrs={ "title": _("Unpublish page '%(title)s'") % {"title": page.get_admin_display_title()} }, priority=60, ) if is_parent and page_perms.can_reorder_children(): url = reverse("wagtailadmin_explore", args=[page.id]) url += "?ordering=ord" yield Button( _("Sort menu order"), url, icon_name="list-ul", attrs={ "title": _("Change ordering of child pages of '%(title)s'") % {"title": page.get_admin_display_title()} }, priority=70, )
def page_header_buttons(page, page_perms, next_url=None): if page_perms.can_edit(): yield Button( _("Edit"), reverse("wagtailadmin_pages:edit", args=[page.id]), icon_name="edit", attrs={ "title": _("Edit '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=10, ) if page_perms.can_move(): yield Button( _("Move"), reverse("wagtailadmin_pages:move", args=[page.id]), icon_name="arrow-right-full", attrs={ "title": _("Move page '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=20, ) if page_perms.can_copy(): url = reverse("wagtailadmin_pages:copy", args=[page.id]) if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Copy"), url, icon_name="copy", attrs={ "title": _("Copy page '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=30, ) if page_perms.can_add_subpage(): yield Button( _("Add child page"), reverse("wagtailadmin_pages:add_subpage", args=[page.id]), icon_name="circle-plus", attrs={ "aria-label": _("Add a child page to '%(title)s' ") % { "title": page.get_admin_display_title() }, }, priority=40, ) if page_perms.can_delete(): url = reverse("wagtailadmin_pages:delete", args=[page.id]) # After deleting the page, it is impossible to redirect to it. if next_url == reverse("wagtailadmin_explore", args=[page.id]): next_url = None if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Delete"), url, icon_name="bin", attrs={ "title": _("Delete page '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=50, ) if page_perms.can_unpublish(): url = reverse("wagtailadmin_pages:unpublish", args=[page.id]) if next_url: url += "?" + urlencode({"next": next_url}) yield Button( _("Unpublish"), url, icon_name="download-alt", attrs={ "title": _("Unpublish page '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=60, ) if page_perms.can_reorder_children(): url = reverse("wagtailadmin_explore", args=[page.id]) url += "?ordering=ord" yield Button( _("Sort menu order"), url, icon_name="list-ul", attrs={ "title": _("Change ordering of child pages of '%(title)s'") % { "title": page.get_admin_display_title() } }, priority=70, ) if Permission.objects.filter(content_type__app_label="simple_translation", codename="submit_translation"): if (page_perms.user.has_perm("simple_translation.submit_translation") and not page.is_root()): # If there's at least one locale that we haven't translated into yet, show "Translate this page" button has_locale_to_translate_to = Locale.objects.exclude( id__in=page.get_translations(inclusive=True).values_list( "locale_id", flat=True)).exists() if has_locale_to_translate_to: url = reverse("simple_translation:submit_page_translation", args=[page.id]) yield Button( _("Translate"), url, icon_name="globe", attrs={ "title": _("Translate this page") % { "title": page.get_admin_display_title() } }, priority=80, )