Projet

Général

Profil

0001-forms-use-native-date-widget-if-available-11109.patch

Frédéric Péters, 04 avril 2020 20:49

Télécharger (6,33 ko)

Voir les différences:

Subject: [PATCH] forms: use native date widget if available (#11109)

 wcs/qommon/form.py                            | 35 +++++++++----------
 wcs/qommon/static/js/qommon.forms.js          |  1 +
 .../templates/qommon/forms/widgets/date.html  | 12 +++++--
 3 files changed, 27 insertions(+), 21 deletions(-)
wcs/qommon/form.py
1017 1017
    def __init__(self, name, value=None, **kwargs):
1018 1018
        minimum_date = kwargs.pop('minimum_date', None)
1019 1019
        if minimum_date:
1020
            self.minimum_date = misc.get_as_datetime(minimum_date).timetuple()[:3]
1020
            self.minimum_date = misc.get_as_datetime(minimum_date)
1021 1021
        maximum_date = kwargs.pop('maximum_date', None)
1022 1022
        if maximum_date:
1023
            self.maximum_date = misc.get_as_datetime(maximum_date).timetuple()[:3]
1023
            self.maximum_date = misc.get_as_datetime(maximum_date)
1024 1024
        if kwargs.pop('minimum_is_future', False):
1025 1025
            if kwargs.get('date_can_be_today'):
1026
                self.minimum_date = time.localtime()
1026
                self.minimum_date = datetime.date.today()
1027 1027
            else:
1028
                self.minimum_date = (datetime.datetime.today() + datetime.timedelta(1)).timetuple()
1028
                self.minimum_date = (datetime.datetime.today() + datetime.timedelta(1))
1029 1029
        if kwargs.pop('date_in_the_past', False):
1030 1030
            if kwargs.get('date_can_be_today'):
1031
                self.maximum_date = time.localtime()
1031
                self.maximum_date = datetime.date.today()
1032 1032
            else:
1033
                self.maximum_date = (datetime.datetime.today() - datetime.timedelta(1)).timetuple()
1033
                self.maximum_date = (datetime.datetime.today() - datetime.timedelta(1))
1034 1034

  
1035 1035
        if 'date_can_be_today' in kwargs:
1036 1036
            del kwargs['date_can_be_today']
......
1063 1063
            if value[0] < 1800 or value[0] > 2099:
1064 1064
                self.error = _('invalid date')
1065 1065
                self.value = None
1066
            elif self.minimum_date and value[:3] < self.minimum_date[:3]:
1066
            elif self.minimum_date and value[:3] < self.minimum_date.timetuple()[:3]:
1067 1067
                self.error = _('invalid date: date must be on or after %s') % strftime(
1068
                        misc.date_format(), datetime.datetime(*self.minimum_date[:6]))
1069
            elif self.maximum_date and value[:3] > self.maximum_date[:3]:
1070
                format_string = misc.date_format()
1068
                        misc.date_format(), self.minimum_date)
1069
            elif self.maximum_date and value[:3] > self.maximum_date.timetuple()[:3]:
1071 1070
                self.error = _('invalid date; date must be on or before %s') % strftime(
1072
                        misc.date_format(), datetime.datetime(*self.maximum_date[:6]))
1071
                        misc.date_format(), self.maximum_date)
1073 1072

  
1074 1073
    def add_media(self):
1075 1074
        self.prepare_javascript()
......
1087 1086
    def date_format(self):
1088 1087
        return self.get_format_string().replace('%Y', 'yyyy').replace(
1089 1088
                '%m', 'mm').replace('%d', 'dd').replace('%H', 'hh').replace(
1090
                '%M',  'ii').replace('%S', 'ss')
1089
                '%M', 'ii').replace('%S', 'ss')
1091 1090

  
1092 1091
    def start_date(self):
1093 1092
        return self.date_format().replace(
1094
                    'yyyy', '%04d' % self.minimum_date[0]).replace(
1095
                    'mm', '%02d' % self.minimum_date[1]).replace(
1096
                    'dd', '%02d' % self.minimum_date[2]).replace(
1093
                    'yyyy', '%04d' % self.minimum_date.year).replace(
1094
                    'mm', '%02d' % self.minimum_date.month).replace(
1095
                    'dd', '%02d' % self.minimum_date.day).replace(
1097 1096
                    'hh', '00').replace('ii', '00').replace('ss', '00')
1098 1097

  
1099 1098
    def end_date(self):
1100 1099
        return self.date_format().replace(
1101
                    'yyyy', '%04d' % self.maximum_date[0]).replace(
1102
                    'mm', '%02d' % self.maximum_date[1]).replace(
1103
                    'dd', '%02d' % self.maximum_date[2]).replace(
1100
                    'yyyy', '%04d' % self.maximum_date.year).replace(
1101
                    'mm', '%02d' % self.maximum_date.month).replace(
1102
                    'dd', '%02d' % self.maximum_date.day).replace(
1104 1103
                    'hh', '00').replace('ii', '00').replace('ss', '00')
1105 1104

  
1106 1105

  
wcs/qommon/static/js/qommon.forms.js
31 31
    });
32 32
  }
33 33
  $('.date-pick').each(function() {
34
    if (this.type == "date") return;  // prefer native date widget
34 35
    var $date_input = $(this);
35 36
    var options = Object();
36 37
    options.autoclose = true;
wcs/qommon/templates/qommon/forms/widgets/date.html
1 1
{% extends "qommon/forms/widget.html" %}
2 2

  
3 3
{% block widget-control %}
4
<input id="form_{{widget.name}}" name="{{widget.name}}" type="text"
4
<input id="form_{{widget.name}}" name="{{widget.name}}" type="date"
5 5
  {% for attr in widget.attrs.items %}{{attr.0}}="{{attr.1}}"{% endfor %}
6 6
  {% if widget.required %}aria-required="true"{% endif %}
7 7
  {% if widget.value %}value="{{ widget.value }}"{% endif %}
......
17 17
  {# it is more appropriate to select a far away date. #}
18 18
  data-start-view="{% if widget.value %}2{% else %}4{% endif %}"
19 19

  
20
  {% if widget.minimum_date %}data-start-date="{{ widget.start_date }}"{% endif %}
21
  {% if widget.maximum_date %}data-end-date="{{ widget.end_date }}"{% endif %}
20
  {% if widget.minimum_date %}
21
  data-start-date="{{ widget.start_date }}"
22
  min="{{widget.minimum_date|date:"Y-m-d"}}"
23
  {% endif %}
24
  {% if widget.maximum_date %}
25
  data-end-date="{{ widget.end_date }}"
26
  max="{{widget.maximum_date|date:"Y-m-d"}}"
27
  {% endif %}
22 28
  {% endif %}
23 29
  >
24 30
{% endblock %}
25
-