[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