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
	
	 Matt Westcott
						Matt Westcott