[Checkins] SVN: z3ext.formatter/trunk/ Added humandatetime formatter js implementation

Nikolay Kim fafhrd91 at gmail.com
Fri Sep 25 16:05:34 EDT 2009


Log message for revision 104549:
  Added humandatetime formatter js implementation

Changed:
  U   z3ext.formatter/trunk/CHANGES.txt
  U   z3ext.formatter/trunk/setup.py
  U   z3ext.formatter/trunk/src/z3ext/formatter/configure.zcml
  U   z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py
  A   z3ext.formatter/trunk/src/z3ext/formatter/resources/
  A   z3ext.formatter/trunk/src/z3ext/formatter/resources/humandatetime.js

-=-
Modified: z3ext.formatter/trunk/CHANGES.txt
===================================================================
--- z3ext.formatter/trunk/CHANGES.txt	2009-09-25 19:15:30 UTC (rev 104548)
+++ z3ext.formatter/trunk/CHANGES.txt	2009-09-25 20:05:33 UTC (rev 104549)
@@ -5,7 +5,9 @@
 1.4.1 (Unreleased)
 ------------------
 
+- Add `humandatetime` formatter js implementation
 
+
 1.4.0 (2009-08-11)
 ------------------
 

Modified: z3ext.formatter/trunk/setup.py
===================================================================
--- z3ext.formatter/trunk/setup.py	2009-09-25 19:15:30 UTC (rev 104548)
+++ z3ext.formatter/trunk/setup.py	2009-09-25 20:05:33 UTC (rev 104549)
@@ -21,7 +21,7 @@
 def read(*rnames):
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
-version = '1.4.1dev'
+version = '0'
 
 
 setup(name='z3ext.formatter',

Modified: z3ext.formatter/trunk/src/z3ext/formatter/configure.zcml
===================================================================
--- z3ext.formatter/trunk/src/z3ext/formatter/configure.zcml	2009-09-25 19:15:30 UTC (rev 104548)
+++ z3ext.formatter/trunk/src/z3ext/formatter/configure.zcml	2009-09-25 20:05:33 UTC (rev 104549)
@@ -21,19 +21,19 @@
 
   <!-- formatters -->
   <adapter name="date"
-	   factory=".dformatter.DateFormatterFactory" />
+     factory=".dformatter.DateFormatterFactory" />
 
   <adapter name="time"
-	   factory=".timeformatter.TimeFormatterFactory" />
+     factory=".timeformatter.TimeFormatterFactory" />
 
   <adapter name="dateTime"
-	   factory=".dtformatter.DatetimeFormatterFactory" />
+     factory=".dtformatter.DatetimeFormatterFactory" />
 
   <adapter name="fancyDatetime"
-	   factory=".fancydatetime.FancyDatetimeFormatterFactory" />
+     factory=".fancydatetime.FancyDatetimeFormatterFactory" />
 
   <adapter name="humanDatetime"
-	   factory=".humandatetime.HumanDatetimeFormatterFactory" />
+     factory=".humandatetime.HumanDatetimeFormatterFactory" />
 
   <!-- vocabularies -->
   <utility
@@ -63,6 +63,22 @@
        file="preferences-formatter.png" />
   </configure>
 
+  <configure
+     xmlns:zcml="http://namespaces.zope.org/zcml"
+     xmlns:browser="http://namespaces.zope.org/browser"
+     zcml:condition="installed z3ext.resourcepackage">
+
+    <!-- ecmascripts -->
+    <z3ext:resourceinclude
+       name="humandatetime.js"
+       type="javascript"
+       library="z3ext-formatter"
+       require="jquery-plugins"
+       file="resources/humandatetime.js"
+       />
+
+  </configure>
+
   <!-- Registering documentation with API doc -->
   <configure
      xmlns:apidoc="http://namespaces.zope.org/apidoc"

Modified: z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py
===================================================================
--- z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py	2009-09-25 19:15:30 UTC (rev 104548)
+++ z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py	2009-09-25 20:05:33 UTC (rev 104549)
@@ -40,45 +40,40 @@
                              value.minute, value.second, value.microsecond, tz)
 
         value = value.astimezone(tz)
+        delta = datetime.now(utc) - value.astimezone(utc)
 
-        d1 = datetime.now(utc)
-        d2 = value.astimezone(utc)
-
-        delta = d1 - d2
-
         years, months, weeks, hours, minutes = (
             delta.days/365, delta.days/30, delta.days/7,
             delta.seconds/3600, delta.seconds/60)
-
+        formatted = None
         if years > 0:
-            return translate(
+            formatted = translate(
                 u'${value} year(s) ago', 'z3ext.formatter',
                 mapping={'value': years})
 
         if months > 0:
-            return translate(u'${value} month(s) ago', 'z3ext.formatter',
+            formatted = translate(u'${value} month(s) ago', 'z3ext.formatter',
                              mapping={'value': months})
-
-        if weeks > 0:
-            return translate(u'${value} week(s) ago', 'z3ext.formatter',
+        elif weeks > 0:
+            formatted = translate(u'${value} week(s) ago', 'z3ext.formatter',
                              mapping={'value': weeks})
-
-        if delta.days > 0:
-            return translate(u'${value} day(s) ago', 'z3ext.formatter',
+        elif delta.days > 0:
+            formatted = translate(u'${value} day(s) ago', 'z3ext.formatter',
                              mapping={'value': delta.days})
-
-        if hours > 0:
-            return translate(u'${value} hour(s) ago', 'z3ext.formatter',
+        elif hours > 0:
+            formatted = translate(u'${value} hour(s) ago', 'z3ext.formatter',
                              mapping={'value': hours})
-
-        if minutes > 0:
-            return translate(u'${value} minute(s) ago', 'z3ext.formatter',
+        elif minutes > 0:
+            formatted = translate(u'${value} minute(s) ago', 'z3ext.formatter',
                              mapping={'value': minutes})
-
-        return translate(u'${value} second(s) ago', 'z3ext.formatter',
+        else:
+            formatted = translate(u'${value} second(s) ago', 'z3ext.formatter',
                          mapping={'value': delta.seconds})
 
+        return """<span class="z3ext-formatter-humandatetime" value="%s">%s</span>""" \
+                % (value.strftime('%Y %B %d %H:%M:%S %Z'), formatted)
 
+
 class HumanDatetimeFormatterFactory(object):
     component.adapts(IHTTPRequest)
     interface.implements(IFormatterFactory)

Added: z3ext.formatter/trunk/src/z3ext/formatter/resources/humandatetime.js
===================================================================
--- z3ext.formatter/trunk/src/z3ext/formatter/resources/humandatetime.js	                        (rev 0)
+++ z3ext.formatter/trunk/src/z3ext/formatter/resources/humandatetime.js	2009-09-25 20:05:33 UTC (rev 104549)
@@ -0,0 +1,94 @@
+var my_dictionary = {
+    'year(s) ago'  : 'year(s) ago',
+    'month(s) ago'  : 'month(s) ago',
+    'weeks(s) ago': 'weeks(s) ago',
+    'days(s) ago' : 'days(s) ago',
+    'hours(s) ago' : 'hours(s) ago',
+    'minutes(s) ago' : 'minutes(s) ago',
+    'second(s) ago' : 'second(s) ago'
+};
+
+$.i18n.setDictionary(my_dictionary);
+
+function setFormatter(el)
+{
+    var time = new Date()
+    time.setTime(Date.parse(el.attr('value')));
+    var new_time = new Date();
+    delta = new_time-time;
+    years = Math.floor(delta/(365*24*60*60*1000.0));
+    months = Math.floor(delta/(30*24*60*60*1000.0));
+    weeks = Math.floor(delta/(7*24*60*60*1000.0));
+    days = Math.floor(delta/(24*60*60*1000.0));
+    hours = Math.floor(delta/(60*60*1000.0));
+    minutes = Math.floor(delta/(60*1000.0));
+    seconds = Math.floor(delta/(1000.0));
+    var res;
+    if (years)
+        res = years + ' ' +$.i18n._('year(s) ago')
+    else if (months)
+        res = months + ' ' +$.i18n._('month(s) ago')
+    else if (weeks)
+        res = weeks + ' ' +$.i18n._('weeks(s) ago')
+    else if (days)
+        res = days + ' ' +$.i18n._('days(s) ago')
+    else if (hours)
+        res = hours + ' ' +$.i18n._('hours(s) ago')
+    else if (minutes)
+        res = minutes + ' ' +$.i18n._('minutes(s) ago')
+    else
+        res = seconds + ' ' +$.i18n._('second(s) ago')
+    el.text(res);
+    el.attr('processed', 'true')
+}
+
+
+$(document).ready(function() {
+    var elems = $("span.z3ext-formatter-humandatetime");
+    for (var i = 0; i < elems.length; i++)
+    {
+        var el = $(elems[i]);
+        if (!el.attr('processed')) {
+            setFormatter(el);
+        }
+    }
+});
+
+/*
+d1 = datetime.now(utc)
+d2 = value.astimezone(utc)
+
+delta = d1 - d2
+
+years, months, weeks, hours, minutes = (
+    delta.days/365, delta.days/30, delta.days/7,
+    delta.seconds/3600, delta.seconds/60)
+
+if years > 0:
+    return translate(
+        u'${value} year(s) ago', 'z3ext.formatter',
+        mapping={'value': years})
+
+if months > 0:
+    return translate(u'${value} month(s) ago', 'z3ext.formatter',
+                     mapping={'value': months})
+
+if weeks > 0:
+    return translate(u'${value} week(s) ago', 'z3ext.formatter',
+                     mapping={'value': weeks})
+
+if delta.days > 0:
+    return translate(u'${value} day(s) ago', 'z3ext.formatter',
+                     mapping={'value': delta.days})
+
+if hours > 0:
+    return translate(u'${value} hour(s) ago', 'z3ext.formatter',
+                     mapping={'value': hours})
+
+if minutes > 0:
+    return translate(u'${value} minute(s) ago', 'z3ext.formatter',
+                     mapping={'value': minutes})
+
+return translate(u'${value} second(s) ago', 'z3ext.formatter',
+                 mapping={'value': delta.seconds})
+*/
\ No newline at end of file



More information about the checkins mailing list