kopia lustrzana https://github.com/wagtail/wagtail
Convert SiteSummaryPanel to a Component
Ensure that media defined on summary items is pulled through to the template.pull/7362/head
rodzic
18a093e14b
commit
21d5a9bbfc
|
@ -1,5 +1,6 @@
|
|||
from warnings import warn
|
||||
|
||||
from django.forms import Media
|
||||
from django.template.loader import get_template, render_to_string
|
||||
|
||||
from wagtail.admin.auth import user_has_any_page_permission
|
||||
|
@ -107,21 +108,27 @@ class PagesSummaryItem(SummaryItem):
|
|||
return user_has_any_page_permission(self.request.user)
|
||||
|
||||
|
||||
class SiteSummaryPanel:
|
||||
class SiteSummaryPanel(Component):
|
||||
name = 'site_summary'
|
||||
template_name = 'wagtailadmin/home/site_summary.html'
|
||||
order = 100
|
||||
|
||||
def __init__(self, request):
|
||||
self.request = request
|
||||
self.summary_items = []
|
||||
summary_items = []
|
||||
for fn in hooks.get_hooks('construct_homepage_summary_items'):
|
||||
fn(request, self.summary_items)
|
||||
fn(request, summary_items)
|
||||
self.summary_items = [s for s in summary_items if s.is_shown()]
|
||||
self.summary_items.sort(key=lambda p: p.order)
|
||||
|
||||
def render(self):
|
||||
summary_items = [s for s in self.summary_items if s.is_shown()]
|
||||
if not summary_items:
|
||||
return ''
|
||||
def get_context_data(self, parent_context):
|
||||
context = super().get_context_data(parent_context)
|
||||
context['summary_items'] = self.summary_items
|
||||
return context
|
||||
|
||||
return render_to_string('wagtailadmin/home/site_summary.html', {
|
||||
'summary_items': sorted(summary_items, key=lambda p: p.order),
|
||||
}, request=self.request)
|
||||
@property
|
||||
def media(self):
|
||||
media = Media()
|
||||
for item in self.summary_items:
|
||||
media += item.media
|
||||
return media
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
{% load i18n wagtailadmin_tags %}
|
||||
<section class="panel summary nice-padding">
|
||||
<h2 class="visuallyhidden">{% trans "Site summary" %}</h2>
|
||||
<ul class="stats">
|
||||
{% for item in summary_items %}
|
||||
{% component item %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</section>
|
||||
{% if summary_items %}
|
||||
<section class="panel summary nice-padding">
|
||||
<h2 class="visuallyhidden">{% trans "Site summary" %}</h2>
|
||||
<ul class="stats">
|
||||
{% for item in summary_items %}
|
||||
{% component item %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
|
|
@ -87,6 +87,18 @@ class TestHome(TestCase, WagtailTestUtils):
|
|||
html=True
|
||||
)
|
||||
|
||||
def test_summary_items(self):
|
||||
response = self.client.get(reverse('wagtailadmin_home'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertContains(response, "<p>0 broken links</p>")
|
||||
|
||||
# check that media attached to summary items is correctly pulled in
|
||||
self.assertContains(
|
||||
response,
|
||||
'<link href="/static/testapp/css/broken-links.css" type="text/css" media="all" rel="stylesheet">',
|
||||
html=True
|
||||
)
|
||||
|
||||
def test_never_cache_header(self):
|
||||
# This tests that wagtailadmins global cache settings have been applied correctly
|
||||
response = self.client.get(reverse('wagtailadmin_home'))
|
||||
|
|
|
@ -10,6 +10,7 @@ from wagtail.admin.menu import MenuItem
|
|||
from wagtail.admin.rich_text import HalloPlugin
|
||||
from wagtail.admin.rich_text.converters.html_to_contentstate import BlockElementHandler
|
||||
from wagtail.admin.search import SearchArea
|
||||
from wagtail.admin.site_summary import SummaryItem
|
||||
from wagtail.admin.ui.components import Component
|
||||
from wagtail.admin.views.account import BaseSettingsPanel
|
||||
from wagtail.admin.widgets import Button
|
||||
|
@ -206,3 +207,18 @@ class ClippyPanel(Component):
|
|||
@hooks.register('construct_homepage_panels')
|
||||
def add_clippy_panel(request, panels):
|
||||
panels.append(ClippyPanel())
|
||||
|
||||
|
||||
class BrokenLinksSummaryItem(SummaryItem):
|
||||
order = 100
|
||||
|
||||
def render_html(self, parent_context):
|
||||
return mark_safe("<p>0 broken links</p>")
|
||||
|
||||
class Media:
|
||||
css = {'all': ['testapp/css/broken-links.css']}
|
||||
|
||||
|
||||
@hooks.register('construct_homepage_summary_items')
|
||||
def add_broken_links_summary_item(request, items):
|
||||
items.append(BrokenLinksSummaryItem(request))
|
||||
|
|
Ładowanie…
Reference in New Issue