2019-11-04 16:55:03 +00:00
|
|
|
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,
|
2018-05-12 19:21:00 +00:00
|
|
|
)
|
2018-05-05 15:58:13 +00:00
|
|
|
|
2019-11-04 16:55:03 +00:00
|
|
|
|
2018-05-12 19:21:00 +00:00
|
|
|
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) + '"]'
|
2019-11-04 16:55:03 +00:00
|
|
|
|
|
|
|
|
2018-05-05 15:58:13 +00:00
|
|
|
class DateTimePicker(Input):
|
2018-05-12 19:21:00 +00:00
|
|
|
is_localized = False
|
2019-11-04 16:55:03 +00:00
|
|
|
|
|
|
|
def render(self, name, value, attrs=None):
|
|
|
|
super().render(name, value, attrs)
|
2018-05-05 15:58:13 +00:00
|
|
|
flat_attrs = flatatt(attrs)
|
2019-09-01 21:25:41 +00:00
|
|
|
context = {
|
2019-11-04 16:55:03 +00:00
|
|
|
"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)
|