from distutils.version import StrictVersion
from datetime import datetime
from jinja2 import Markup
from flask import current_app
class _moment(object):
@staticmethod
def include_moment(version='2.10.3', local_js=None):
js = ''
if local_js is not None:
js = '\n' % local_js
elif version is not None:
js_filename = 'moment-with-locales.min.js' \
if StrictVersion(version) >= StrictVersion('2.8.0') \
else 'moment-with-langs.min.js'
js = '\n' % (version, js_filename)
return Markup('''%s''' % js)
@staticmethod
def include_jquery(version='2.1.0', local_js=None):
js = ''
if local_js is not None:
js = '\n' % local_js
else:
js = ('') % version
return Markup(js)
@staticmethod
def locale(language):
return Markup('' % language)
@staticmethod
def lang(language):
return _moment.locale(language)
def __init__(self, timestamp=None, local=False):
if timestamp is None:
timestamp = datetime.utcnow()
self.timestamp = timestamp
self.local = local
def _timestamp_as_iso_8601(self, timestamp):
tz = ''
if not self.local:
tz = 'Z'
return timestamp.strftime('%Y-%m-%dT%H:%M:%S' + tz)
def _render(self, format, refresh=False):
t = self._timestamp_as_iso_8601(self.timestamp)
return Markup(('%s') %
(t, format, int(refresh) * 60000, t))
def format(self, fmt, refresh=False):
return self._render("format('%s')" % fmt, refresh)
def fromNow(self, no_suffix=False, refresh=False):
return self._render("fromNow(%s)" % int(no_suffix), refresh)
def fromTime(self, timestamp, no_suffix=False, refresh=False):
return self._render("from(moment('%s'),%s)" %
(self._timestamp_as_iso_8601(timestamp),
int(no_suffix)), refresh)
def calendar(self, refresh=False):
return self._render("calendar()", refresh)
def valueOf(self, refresh=False):
return self._render("valueOf()", refresh)
def unix(self, refresh=False):
return self._render("unix()", refresh)
class Moment(object):
def __init__(self, app=None):
if app is not None:
self.init_app(app)
def init_app(self, app):
if not hasattr(app, 'extensions'):
app.extensions = {}
app.extensions['moment'] = _moment
app.context_processor(self.context_processor)
@staticmethod
def context_processor():
return {
'moment': current_app.extensions['moment']
}
def create(self, timestamp=None):
return current_app.extensions['moment'](timestamp)