From f8d009337807e67992027dff4779b0a3e7ed08fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 30 May 2016 21:06:31 +0200 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(-) diff --git a/wcs/qommon/form.py b/wcs/qommon/form.py index a7ba2c9..e14f4d3 100644 --- a/wcs/qommon/form.py +++ b/wcs/qommon/form.py @@ -957,7 +957,6 @@ class DateWidget(StringWidget): self.attrs['size'] = '12' self.attrs['maxlength'] = '10' self.attrs['autocomplete'] = 'off' - self.jpicker_args = kwargs.pop('jpicker_args', {}) self.jquery = kwargs.pop('jquery', True) def parse(self, request=None): @@ -998,7 +997,8 @@ class DateWidget(StringWidget): @classmethod def prepare_javascript(cls): - get_response().add_javascript(['jquery.js', 'bootstrap-datetimepicker.js']) + get_response().add_javascript([ + 'jquery.js', 'bootstrap-datetimepicker.js', 'qommon.forms.js']) current_language = get_request().language if current_language != 'en' and current_language in get_publisher().supported_languages or []: get_response().add_javascript(['bootstrap-datetimepicker.%s.js' % current_language]) @@ -1009,7 +1009,7 @@ class DateWidget(StringWidget): self.attrs['id'] = 'form_%s' % self.name self.attrs['class'] = 'date-pick' - if self.attrs.get('readonly') or not self.jquery: + if self.attrs.get('readonly'): return StringWidget.render_content(self) self.prepare_javascript() @@ -1018,18 +1018,17 @@ class DateWidget(StringWidget): '%m', 'mm').replace('%d', 'dd').replace('%H', 'hh').replace( '%M', 'ii').replace('%S', 'ss') - args = [] - args.append('format: "%s"' % date_format) + self.attrs['data-date-format'] = date_format + self.attrs['data-min-view'] = '0' + self.attrs['data-start-view'] = '2' if not 'hh' in date_format: # if the date format doesn't contain the time, set widget not to go # into the time pages - args.append('minView: 2') - if not self.value: - # if there's no value we set the initial view to be the view of - # decades, it's more appropriate to select a far away date. - args.append('startView: 4') - args.append('autoclose: true') - args.append('weekStart: 1') + self.attrs['data-min-view'] = '2' + if not self.value: + # if there's no value we set the initial view to be the view of + # decades, it's more appropriate to select a far away date. + self.attrs['data-start-view'] = '4' if self.minimum_date: start_date = date_format.replace( @@ -1037,7 +1036,7 @@ class DateWidget(StringWidget): 'mm', '%02d' % self.minimum_date[1]).replace( 'dd', '%02d' % self.minimum_date[2]).replace( 'hh', '00').replace('ii', '00').replace('ss', '00') - args.append('startDate: "%s"' % start_date) + self.attrs['data-start-date'] = start_date if self.maximum_date: end_date = date_format.replace( @@ -1045,29 +1044,9 @@ class DateWidget(StringWidget): 'mm', '%02d' % self.maximum_date[1]).replace( 'dd', '%02d' % self.maximum_date[2]).replace( 'hh', '00').replace('ii', '00').replace('ss', '00') - args.append('endDate: "%s"' % end_date) - for key, value in self.jpicker_args.iteritems(): - args.append("%s: %s" % (key, value)) - - if args: - args = '{' + ','.join(args) + '}' - else: - args = '' - - if get_request().get_header('x-popup') == 'true': - # unfortunately we cannot add a popup calendar inside a popup :/ - return StringWidget.render_content(self) - else: - get_response().add_javascript_code(''' -$(function() { - $('#%(id)s').datetimepicker(%(args)s) - .on('changeDate', function(ev) { - $(this).data('datetimepicker').startViewMode = 2; - }); -});''' % {'id': self.attrs['id'], 'args': args}) - t = StringWidget.render_content(self) - return t + self.attrs['data-end-date'] = end_date + return StringWidget.render_content(self) class DateTimeWidget(DateWidget): diff --git a/wcs/qommon/static/js/qommon.forms.js b/wcs/qommon/static/js/qommon.forms.js index e0a161f..6387b27 100644 --- a/wcs/qommon/static/js/qommon.forms.js +++ b/wcs/qommon/static/js/qommon.forms.js @@ -31,6 +31,18 @@ $(function() { $('#tracking-code button').click(function() { $('input[name=savedraft]').click(); }); + $('.date-pick').each(function() { + var $date_input = $(this); + var options = Object(); + options.autoclose = true; + options.weekStart = 1; + options.format = $date_input.data('date-format'); + options.minView = $date_input.data('min-view'); + options.startView = $date_input.data('start-view'); + if ($date_input.data('start-date')) options.startDate = $date_input.data('start-date'); + if ($date_input.data('end-date')) options.endDate = $date_input.data('end-date'); + $date_input.datetimepicker(options); + }); if ($('.widget-with-error').length) { var first_field_with_error = $($('.widget-with-error')[0]).find('input,textarea,select'); if (first_field_with_error.length) { -- 2.8.1