From 01c73b8c7ce51a1a0b1f16e2bb09ed752672e00f Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Wed, 15 Jun 2022 20:47:28 +0200 Subject: [PATCH] fix: Make attention indicators less subtle again (#4069) * fix: Make attention indicators less subtle again Fixes #4009 * Go back to per-action-holder badges, but make them smaller --- ietf/doc/templatetags/ballot_icon.py | 38 ++++++++++++++++++--------- ietf/doc/templatetags/ietf_filters.py | 20 +++++++------- ietf/doc/tests.py | 4 +-- 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/ietf/doc/templatetags/ballot_icon.py b/ietf/doc/templatetags/ballot_icon.py index 8bf0a5961..6d3ddba44 100644 --- a/ietf/doc/templatetags/ballot_icon.py +++ b/ietf/doc/templatetags/ballot_icon.py @@ -162,23 +162,27 @@ def ballotposition(doc, user): @register.filter def state_age_colored(doc): - if doc.type_id == 'draft': + if doc.type_id == "draft": if not doc.get_state_slug() in ["active", "rfc"]: # Don't show anything for expired/withdrawn/replaced drafts return "" - iesg_state = doc.get_state_slug('draft-iesg') + iesg_state = doc.get_state_slug("draft-iesg") if not iesg_state: return "" if iesg_state in ["dead", "watching", "pub", "idexists"]: return "" try: - state_date = doc.docevent_set.filter( - Q(type="started_iesg_process")| - Q(type="changed_state", statedocevent__state_type="draft-iesg") - ).order_by('-time')[0].time.date() + state_date = ( + doc.docevent_set.filter( + Q(type="started_iesg_process") + | Q(type="changed_state", statedocevent__state_type="draft-iesg") + ) + .order_by("-time")[0] + .time.date() + ) except IndexError: - state_date = datetime.date(1990,1,1) + state_date = datetime.date(1990, 1, 1) days = (datetime.date.today() - state_date).days # loosely based on # https://trac.ietf.org/trac/iesg/wiki/PublishPath @@ -191,7 +195,7 @@ def state_age_colored(doc): elif iesg_state in ["lc-req", "ann"]: goal1 = 4 goal2 = 7 - elif 'need-rev' in [x.slug for x in doc.tags.all()]: + elif "need-rev" in [x.slug for x in doc.tags.all()]: goal1 = 14 goal2 = 28 elif iesg_state == "pub-req": @@ -204,21 +208,29 @@ def state_age_colored(doc): goal1 = 14 goal2 = 28 if days > goal2: - class_name = "text-danger" + class_name = "bg-danger" elif days > goal1: - class_name = "text-warning" + class_name = "bg-warning" else: # don't show a badge when things are in the green; clutters display # class_name = "text-success" return "" if days > goal1: - title = ' title="In state for %d day%s; goal is <%d days."' % (days, 's' if days != 1 else '', goal1,) + title = ' title="In state for %d day%s; goal is <%d days."' % ( + days, + "s" if days != 1 else "", + goal1, + ) else: - title = '' - return mark_safe('' % (class_name, title)) + title = "" + return mark_safe( + ' %d' + % (class_name, title, days) + ) else: return "" + @register.filter def auth48_alert_badge(doc): """Return alert badge, if any, for a document""" diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index 21b5288eb..27487dd60 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -705,36 +705,38 @@ def can_ballot(user,doc): else: return user.person.role_set.filter(name="ad", group__type="area", group__state="active") + @register.filter def action_holder_badge(action_holder): """Add a warning tag if action holder age exceeds limit - + >>> from ietf.doc.factories import DocumentActionHolderFactory >>> old_limit = settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS >>> settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS = 15 >>> action_holder_badge(DocumentActionHolderFactory()) '' - + >>> action_holder_badge(DocumentActionHolderFactory(time_added=datetime.datetime.now() - datetime.timedelta(days=15))) '' >>> action_holder_badge(DocumentActionHolderFactory(time_added=datetime.datetime.now() - datetime.timedelta(days=16))) - '' + ' 16' >>> action_holder_badge(DocumentActionHolderFactory(time_added=datetime.datetime.now() - datetime.timedelta(days=30))) - '' + ' 30' >>> settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS = old_limit """ age_limit = settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS age = (datetime.datetime.now() - action_holder.time_added).days if age > age_limit: - return mark_safe('' % ( - age, - 's' if age != 1 else '', - age_limit)) + return mark_safe( + ' %d' + % (age, "s" if age != 1 else "", age_limit, age) + ) else: - return '' # no alert needed + return "" # no alert needed + @register.filter def is_regular_agenda_item(assignment): diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 79a787e27..7a04d3e75 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -356,8 +356,8 @@ class SearchTests(TestCase): self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertEqual(len(q('td.doc')),3) - self.assertTrue(q('td.status span.text-warning *[title*="%s"]' % "for 15 days")) - self.assertTrue(q('td.status span.text-danger *[title*="%s"]' % "for 29 days")) + self.assertTrue(q('td.status span.bg-warning[title*="%s"]' % "for 15 days")) + self.assertTrue(q('td.status span.bg-danger[title*="%s"]' % "for 29 days")) for ah in [draft.action_holders.first() for draft in drafts]: self.assertContains(r, escape(ah.name))