diff --git a/combo/data/models.py b/combo/data/models.py
index daf7ee2a..6cdab0de 100644
--- a/combo/data/models.py
+++ b/combo/data/models.py
@@ -1338,6 +1338,10 @@ class LinkListCell(CellBase):
for link in self.get_items():
link.duplicate(page_target=new_cell.page, placeholder=new_cell.link_placeholder)
+ def is_visible(self, check_validity_info=True, **kwargs):
+ # cell is visible even if items are invalid
+ return super().is_visible(check_validity_info=False, **kwargs)
+
def check_validity(self):
for link in self.get_items(prefetch_validity_info=True):
validity_info = link.get_validity_info()
diff --git a/combo/data/templates/combo/manager/link-list-cell-form.html b/combo/data/templates/combo/manager/link-list-cell-form.html
index 647dc417..b5634a01 100644
--- a/combo/data/templates/combo/manager/link-list-cell-form.html
+++ b/combo/data/templates/combo/manager/link-list-cell-form.html
@@ -15,7 +15,13 @@
{{ link|truncatechars:100 }}
{% with link.get_invalid_reason as invalid_reason %}
{% if invalid_reason %}
- {{ invalid_reason }}
+ {{ invalid_reason }} -
+ {% if cell.get_validity_info.invalid_datetime|datetime_in_past %}
+ {% blocktrans with link.get_validity_info.invalid_datetime|date:"DATETIME_FORMAT" as invalidity_date %}This link is no longer displayed since {{ invalidity_date }}.{% endblocktrans %}
+ {% else %}
+ {% blocktrans with link.get_validity_info.invalid_datetime|timeuntil as invalidity_delay %}This link will no longer be displayed in {{ invalidity_delay }}.{% endblocktrans %}
+ {% endif %}
+
{% endif %}
{% endwith %}
diff --git a/combo/manager/templates/combo/page_view.html b/combo/manager/templates/combo/page_view.html
index f12c9b78..d5e0cb95 100644
--- a/combo/manager/templates/combo/page_view.html
+++ b/combo/manager/templates/combo/page_view.html
@@ -151,13 +151,13 @@
{% endif %}
{{cell.get_additional_label|default_if_none:""}}
{% if cell.get_invalid_reason %}
- {{ cell.get_invalid_reason }} -
- {% if cell.get_validity_info.invalid_datetime|datetime_in_past %}
- {% blocktrans with cell.get_validity_info.invalid_datetime|date:"DATETIME_FORMAT" as invalidity_date %}This cell is no longer displayed since {{ invalidity_date }}.{% endblocktrans %}
- {% else %}
- {% blocktrans with cell.get_validity_info.invalid_datetime|timeuntil as invalidity_delay %}This cell will no longer be displayed in {{ invalidity_delay }}.{% endblocktrans %}
- {% endif %}
-
+ {{ cell.get_invalid_reason }}{% if cell.class_name != 'link-list-cell' %} -
+ {% if cell.get_validity_info.invalid_datetime|datetime_in_past %}
+ {% blocktrans with cell.get_validity_info.invalid_datetime|date:"DATETIME_FORMAT" as invalidity_date %}This cell is no longer displayed since {{ invalidity_date }}.{% endblocktrans %}
+ {% else %}
+ {% blocktrans with cell.get_validity_info.invalid_datetime|timeuntil as invalidity_delay %}This cell will no longer be displayed in {{ invalidity_delay }}.{% endblocktrans %}
+ {% endif %}
+ {% endif %}
{% endif %}
{% if not cell.public %}
diff --git a/tests/test_cells.py b/tests/test_cells.py
index 4c39c64e..89b5a4a5 100644
--- a/tests/test_cells.py
+++ b/tests/test_cells.py
@@ -288,6 +288,9 @@ def test_link_list_cell_validity():
validity_info = ValidityInfo.objects.latest('pk')
assert validity_info.invalid_reason_code == 'data_link_invalid'
assert validity_info.invalid_since is not None
+ validity_info.invalid_since = now() - datetime.timedelta(days=2)
+ validity_info.save()
+ assert cell.is_visible() # particular case: cell is visible
def test_feed_cell_validity(context):
diff --git a/tests/test_manager.py b/tests/test_manager.py
index 688d29e2..2fe303f5 100644
--- a/tests/test_manager.py
+++ b/tests/test_manager.py
@@ -211,9 +211,14 @@ def test_edit_page_cell_invalid_placeholder(freezer, app, admin_user):
item.mark_as_invalid('foo_bar_reason')
cell2.check_validity()
resp = app.get('/manage/pages/%s/' % page.pk)
- assert 'Invalid link' in resp.text
- assert 'This cell will no longer be displayed in 2 days.' in resp.text
- assert 'foo_bar_reason' in resp.text
+ assert 'Invalid link' in resp.text
+ assert 'foo_bar_reason' in resp.text
+ assert 'This link will no longer be displayed in 2 days.' in resp.text
+ ValidityInfo.objects.update(invalid_since=now() - datetime.timedelta(days=2))
+ resp = app.get('/manage/pages/%s/' % page.pk)
+ assert 'Invalid link' in resp.text
+ assert 'foo_bar_reason' in resp.text
+ assert 'This link is no longer displayed since June 5, 2020, noon.' in resp.text
def test_edit_page_optional_placeholder(app, admin_user):