From e40a3e8b670b1529ba8666b269eb19eea874257c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Thu, 23 Jan 2020 16:18:51 +0100 Subject: [PATCH] placeholder: optional placeholders display and edition (#37135) --- combo/data/models.py | 5 +- combo/manager/templates/combo/page_view.html | 14 ++++ combo/manager/views.py | 31 +++++++++ .../public/templates/combo/page_template.html | 2 +- tests/test_lingo_manager.py | 6 +- tests/test_manager.py | 69 ++++++++++++++++--- 6 files changed, 113 insertions(+), 14 deletions(-) diff --git a/combo/data/models.py b/combo/data/models.py index 25d5e3aa..025346b1 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -84,11 +84,12 @@ def element_is_visible(element, user=None): class Placeholder(object): - def __init__(self, key, name=None, acquired=False, render=True, cell=None, - force_synchronous=False): + def __init__(self, key, name=None, acquired=False, optional=False, + render=True, cell=None, force_synchronous=False): self.key = key self.name = name self.acquired = acquired + self.optional = optional self.render = render self.cell = cell self.force_synchronous = force_synchronous diff --git a/combo/manager/templates/combo/page_view.html b/combo/manager/templates/combo/page_view.html index 76232102..b9c8f0d7 100644 --- a/combo/manager/templates/combo/page_view.html +++ b/combo/manager/templates/combo/page_view.html @@ -106,6 +106,20 @@ {% endif %} +{% if optional_placeholders %} +
+

{% trans 'Optional sections' %}

+ +
+{% endif %} + {% endblock %} {# sidebar #} diff --git a/combo/manager/views.py b/combo/manager/views.py index 8977bc95..5d28d239 100644 --- a/combo/manager/views.py +++ b/combo/manager/views.py @@ -264,6 +264,7 @@ class PageView(DetailView): cells = CellBase.get_cells(page_id=self.object.id) template = self.object.template_name placeholders = [] + optional_placeholders = [] combo_template = settings.COMBO_PUBLIC_TEMPLATES.get(template) for placeholder in self.object.get_placeholders(request=self.request, traverse_cells=True): @@ -272,9 +273,39 @@ class PageView(DetailView): 'name': placeholder.get_name(), } placeholder_dict['cells'] = [x for x in cells if x.placeholder == placeholder.key] + + # not optional placeholder + if not placeholder.optional: + placeholders.append(placeholder_dict) + continue + + # optional placeholder, but requested for edition + if self.request.GET.get('include-section') == placeholder.key: + placeholders.append(placeholder_dict) + continue + + # empty optional placeholder: in optional sections + if not placeholder_dict['cells']: + placeholder_dict['is_empty'] = True + optional_placeholders.append(placeholder_dict) + continue + + # optional placeholder with at least 2 cells: in page edition + if len(placeholder_dict['cells']) > 1: + placeholders.append(placeholder_dict) + continue + + # optional placeholder with only one ParentContentCell: in optional sections + if isinstance(placeholder_dict['cells'][0], ParentContentCell): + placeholder_dict['is_empty'] = False + optional_placeholders.append(placeholder_dict) + continue + + # other cases: in page edition placeholders.append(placeholder_dict) context['placeholders'] = placeholders + context['optional_placeholders'] = optional_placeholders context.update({ 'previous_page': self.object.get_previous_page(check_visibility=False), diff --git a/combo/public/templates/combo/page_template.html b/combo/public/templates/combo/page_template.html index 5d830adf..f3c481e2 100644 --- a/combo/public/templates/combo/page_template.html +++ b/combo/public/templates/combo/page_template.html @@ -38,7 +38,7 @@