Browse Source

Compact datetime formats and filters #102

Ralfp 12 years ago
parent
commit
8627c5bb74
2 changed files with 48 additions and 2 deletions
  1. 11 1
      misago/templatetags/datetime.py
  2. 37 1
      misago/utils/datesformats.py

+ 11 - 1
misago/templatetags/datetime.py

@@ -1,5 +1,5 @@
 from coffin.template import Library
-from misago.utils.datesformats import date, reldate, reltimesince
+from misago.utils.datesformats import date, reldate, reltimesince, compact, relcompact
 
 register = Library()
 
@@ -17,3 +17,13 @@ def reldate_filter(val, arg=""):
 @register.filter(name='reltimesince')
 def reltimesince_filter(val, arg=""):
     return reltimesince(val, arg)
+
+
+@register.filter(name='compact')
+def compact_filter(val, arg=""):
+    return compact(val, arg)
+
+
+@register.filter(name='relcompact')
+def relcompact_filter(val, arg=""):
+    return relcompact(val, arg)

+ 37 - 1
misago/utils/datesformats.py

@@ -103,4 +103,40 @@ def reltimesince(val, arg=""):
                 hours) % {'hours': hours}
 
     # Fallback to reldate
-    return reldate(val, arg)
+    return reldate(val, arg)
+
+
+def compact(val):
+    if not val:
+        return _("Never")
+    now = datetime.now(utc if is_aware(val) else None)
+    local = localtime(val)
+
+    if now.year == local.year:        
+        return format(localtime(val), _('j M'))
+    return format(localtime(val), _('j M y'))
+
+
+
+def relcompact(val):
+    if not val:
+        return _("Never")
+    now = datetime.now(utc if is_aware(val) else None)
+    diff = now - val
+    local = localtime(val)
+
+    # Difference is greater than day for sure
+    if diff.days != 0:
+        return compact(val)
+
+    if diff.seconds >= 0:
+        if diff.seconds <= 60:
+            return _("Now")
+        if diff.seconds < 3600:
+            minutes = int(math.ceil(diff.seconds / 60.0))
+            return pgettext("number of minutes", "%(minute)sm") % {'minute': minutes}
+        if diff.seconds < 86400:
+            hours = int(math.ceil(diff.seconds / 3600.0))
+            return pgettext("number of hours", "%(hour)sh") % {'hour': hours}
+
+    return compact(val)