from django.forms.widgets import Input from django.forms.utils import flatatt from django.utils.safestring import mark_safe from django.template import 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 = { "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)