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 @@