Projet

Général

Profil

0001-forms-use-declarative-js-for-date-widgets-11108.patch

Frédéric Péters, 31 mai 2016 14:24

Télécharger (5,68 ko)

Voir les différences:

Subject: [PATCH] forms: use declarative js for date widgets (#11108)

 wcs/qommon/form.py                   | 49 +++++++++++-------------------------
 wcs/qommon/static/js/qommon.forms.js | 12 +++++++++
 2 files changed, 26 insertions(+), 35 deletions(-)
wcs/qommon/form.py
957 957
        self.attrs['size'] = '12'
958 958
        self.attrs['maxlength'] = '10'
959 959
        self.attrs['autocomplete'] = 'off'
960
        self.jpicker_args = kwargs.pop('jpicker_args', {})
961 960
        self.jquery = kwargs.pop('jquery', True)
962 961

  
963 962
    def parse(self, request=None):
......
998 997

  
999 998
    @classmethod
1000 999
    def prepare_javascript(cls):
1001
        get_response().add_javascript(['jquery.js', 'bootstrap-datetimepicker.js'])
1000
        get_response().add_javascript([
1001
            'jquery.js', 'bootstrap-datetimepicker.js', 'qommon.forms.js'])
1002 1002
        current_language = get_request().language
1003 1003
        if current_language != 'en' and current_language in get_publisher().supported_languages or []:
1004 1004
            get_response().add_javascript(['bootstrap-datetimepicker.%s.js' % current_language])
......
1009 1009
        self.attrs['id'] = 'form_%s' % self.name
1010 1010
        self.attrs['class'] = 'date-pick'
1011 1011

  
1012
        if self.attrs.get('readonly') or not self.jquery:
1012
        if self.attrs.get('readonly'):
1013 1013
            return StringWidget.render_content(self)
1014 1014

  
1015 1015
        self.prepare_javascript()
......
1018 1018
                '%m', 'mm').replace('%d', 'dd').replace('%H', 'hh').replace(
1019 1019
                '%M',  'ii').replace('%S', 'ss')
1020 1020

  
1021
        args = []
1022
        args.append('format: "%s"' % date_format)
1021
        self.attrs['data-date-format'] = date_format
1022
        self.attrs['data-min-view'] = '0'
1023
        self.attrs['data-start-view'] = '2'
1023 1024
        if not 'hh' in date_format:
1024 1025
            # if the date format doesn't contain the time, set widget not to go
1025 1026
            # into the time pages
1026
            args.append('minView: 2')
1027
            if not self.value:
1028
                # if there's no value we set the initial view to be the view of
1029
                # decades, it's more appropriate to select a far away date.
1030
                args.append('startView: 4')
1031
        args.append('autoclose: true')
1032
        args.append('weekStart: 1')
1027
            self.attrs['data-min-view'] = '2'
1028
        if not self.value:
1029
            # if there's no value we set the initial view to be the view of
1030
            # decades, it's more appropriate to select a far away date.
1031
            self.attrs['data-start-view'] = '4'
1033 1032

  
1034 1033
        if self.minimum_date:
1035 1034
            start_date = date_format.replace(
......
1037 1036
                    'mm', '%02d' % self.minimum_date[1]).replace(
1038 1037
                    'dd', '%02d' % self.minimum_date[2]).replace(
1039 1038
                    'hh', '00').replace('ii', '00').replace('ss', '00')
1040
            args.append('startDate: "%s"' % start_date)
1039
            self.attrs['data-start-date'] = start_date
1041 1040

  
1042 1041
        if self.maximum_date:
1043 1042
            end_date = date_format.replace(
......
1045 1044
                    'mm', '%02d' % self.maximum_date[1]).replace(
1046 1045
                    'dd', '%02d' % self.maximum_date[2]).replace(
1047 1046
                    'hh', '00').replace('ii', '00').replace('ss', '00')
1048
            args.append('endDate: "%s"' % end_date)
1049
        for key, value in self.jpicker_args.iteritems():
1050
            args.append("%s: %s" % (key, value))
1051

  
1052
        if args:
1053
            args = '{' + ','.join(args) + '}'
1054
        else:
1055
            args = ''
1056

  
1057
        if get_request().get_header('x-popup') == 'true':
1058
            # unfortunately we cannot add a popup calendar inside a popup :/
1059
            return StringWidget.render_content(self)
1060
        else:
1061
            get_response().add_javascript_code('''
1062
$(function() {
1063
        $('#%(id)s').datetimepicker(%(args)s)
1064
        .on('changeDate', function(ev) {
1065
          $(this).data('datetimepicker').startViewMode = 2;
1066
        });
1067
});''' % {'id': self.attrs['id'], 'args': args})
1068
            t = StringWidget.render_content(self)
1069
            return t
1047
            self.attrs['data-end-date'] = end_date
1070 1048

  
1049
        return StringWidget.render_content(self)
1071 1050

  
1072 1051

  
1073 1052
class DateTimeWidget(DateWidget):
wcs/qommon/static/js/qommon.forms.js
31 31
  $('#tracking-code button').click(function() {
32 32
    $('input[name=savedraft]').click();
33 33
  });
34
  $('.date-pick').each(function() {
35
    var $date_input = $(this);
36
    var options = Object();
37
    options.autoclose = true;
38
    options.weekStart = 1;
39
    options.format = $date_input.data('date-format');
40
    options.minView = $date_input.data('min-view');
41
    options.startView = $date_input.data('start-view');
42
    if ($date_input.data('start-date')) options.startDate = $date_input.data('start-date');
43
    if ($date_input.data('end-date')) options.endDate = $date_input.data('end-date');
44
    $date_input.datetimepicker(options);
45
  });
34 46
  if ($('.widget-with-error').length) {
35 47
    var first_field_with_error = $($('.widget-with-error')[0]).find('input,textarea,select');
36 48
    if (first_field_with_error.length) {
37
-