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
This commit is contained in:
parent
6e97628a64
commit
01c73b8c7c
|
@ -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('<span class="%s"><i class="bi bi-hourglass-split"%s></i></span>' % (class_name, title))
|
||||
title = ""
|
||||
return mark_safe(
|
||||
'<span class="badge %s" %s><i class="bi bi-clock-fill"></i> %d</span>'
|
||||
% (class_name, title, days)
|
||||
)
|
||||
else:
|
||||
return ""
|
||||
|
||||
|
||||
@register.filter
|
||||
def auth48_alert_badge(doc):
|
||||
"""Return alert badge, if any, for a document"""
|
||||
|
|
|
@ -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)))
|
||||
'<span class="text-danger"><i class="bi bi-hourglass-split" title="In state for 16 days; goal is <15 days."></i></span>'
|
||||
'<span class="badge bg-danger" title="In state for 16 days; goal is <15 days."><i class="bi bi-clock-fill"></i> 16</span>'
|
||||
|
||||
>>> action_holder_badge(DocumentActionHolderFactory(time_added=datetime.datetime.now() - datetime.timedelta(days=30)))
|
||||
'<span class="text-danger"><i class="bi bi-hourglass-split" title="In state for 30 days; goal is <15 days."></i></span>'
|
||||
'<span class="badge bg-danger" title="In state for 30 days; goal is <15 days."><i class="bi bi-clock-fill"></i> 30</span>'
|
||||
|
||||
>>> 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('<span class="text-danger"><i class="bi bi-hourglass-split" title="In state for %d day%s; goal is <%d days."></i></span>' % (
|
||||
age,
|
||||
's' if age != 1 else '',
|
||||
age_limit))
|
||||
return mark_safe(
|
||||
'<span class="badge bg-danger" title="In state for %d day%s; goal is <%d days."><i class="bi bi-clock-fill"></i> %d</span>'
|
||||
% (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):
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
Loading…
Reference in a new issue