from django.forms.widgets import Input from django.forms.utils import flatatt from django.utils.safestring import mark_safe from django.template import Context, Template from django.template.loader import get_template from django.conf import settings from django.utils.translation import ugettext_lazy as _, get_language_bidi from django.utils.dates import ( WEEKDAYS, WEEKDAYS_ABBR, MONTHS, MONTHS_3, MONTHS_AP, MONTHS_ALT ) def list2str(str_iterable): """ Utility function to return a string representing a list of string :params str_iterable: An iterable object where each element is of type str :returns: A representation of the iterable as a list (e.g '["a", "b"]') """ return '["' + '", "'.join(str_iterable) + '"]' class DateTimePicker(Input): is_localized = False def render(self, name, value, attrs=None): super().render(name, value, attrs) flat_attrs = flatatt(attrs) context = Context({ 'time': True, 'name': name, 'attrs': flat_attrs, 'id': attrs['id'], 'closeText': _("Close"), 'currentText': _("Today"), 'dayNames': mark_safe(list2str((str(item[1]) for item in WEEKDAYS.items()))), 'dayNamesMin': mark_safe(list2str((str(item[1]) for item in WEEKDAYS_ABBR.items()))), 'dayNamesShort': mark_safe(list2str((str(item[1]) for item in WEEKDAYS_ABBR.items()))), 'firstDay': mark_safe('"' + str(WEEKDAYS[settings.FIRST_DAY_OF_WEEK]) + '"'), 'isRTL': str(get_language_bidi()).lower(), 'monthNames': mark_safe(list2str((str(item[1]) for item in MONTHS.items()))), 'monthNamesShort': mark_safe(list2str((str(item[1]) for item in MONTHS_3.items()))), 'nextText': mark_safe('"' + str(_('Next')) + '"'), 'prevText': mark_safe('"' + str(_('Previous')) + '"'), 'weekHeader': mark_safe('"' + str(_('Wk')) + '"' ), }) template = get_template('users/datetimepicker.html') return template.render(context) class DatePicker(Input): is_localized = False def render(self, name, value, attrs=None): super().render(name, value, attrs) flat_attrs = flatatt(attrs) context = Context({ 'time': False, 'name': name, 'attrs': flat_attrs, 'id': attrs['id'], 'closeText': _("Close"), 'currentText': _("Today"), 'dayNames': mark_safe(list2str((str(item[1]) for item in WEEKDAYS.items()))), 'dayNamesMin': mark_safe(list2str((str(item[1]) for item in WEEKDAYS_ABBR.items()))), 'dayNamesShort': mark_safe(list2str((str(item[1]) for item in WEEKDAYS_ABBR.items()))), 'firstDay': mark_safe('"' + str(WEEKDAYS[settings.FIRST_DAY_OF_WEEK]) + '"'), 'isRTL': str(get_language_bidi()).lower(), 'monthNames': mark_safe(list2str((str(item[1]) for item in MONTHS.items()))), 'monthNamesShort': mark_safe(list2str((str(item[1]) for item in MONTHS_3.items()))), 'nextText': mark_safe('"' + str(_('Next')) + '"'), 'prevText': mark_safe('"' + str(_('Previous')) + '"'), 'weekHeader': mark_safe('"' + str(_('Wk')) + '"' ), }) template = get_template('users/datetimepicker.html') return template.render(context)