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):
|