equal
deleted
inserted
replaced
95 """ |
95 """ |
96 |
96 |
97 |
97 |
98 from functools import reduce |
98 from functools import reduce |
99 from datetime import date |
99 from datetime import date |
100 |
|
101 from six import text_type, string_types |
|
102 |
100 |
103 from logilab.mtconverter import xml_escape |
101 from logilab.mtconverter import xml_escape |
104 from logilab.common.date import todatetime |
102 from logilab.common.date import todatetime |
105 |
103 |
106 from cubicweb import tags, uilib |
104 from cubicweb import tags, uilib |
270 understandable by the associated `field`. That value may be correctly |
268 understandable by the associated `field`. That value may be correctly |
271 typed or a string that the field may parse. |
269 typed or a string that the field may parse. |
272 """ |
270 """ |
273 posted = form._cw.form |
271 posted = form._cw.form |
274 val = posted.get(field.input_name(form, self.suffix)) |
272 val = posted.get(field.input_name(form, self.suffix)) |
275 if isinstance(val, string_types): |
273 if isinstance(val, str): |
276 val = val.strip() |
274 val = val.strip() |
277 return val |
275 return val |
278 |
276 |
279 # XXX deprecates |
277 # XXX deprecates |
280 def values_and_attributes(self, form, field): |
278 def values_and_attributes(self, form, field): |
461 options.append(tags.option(label, value=value, **oattrs)) |
459 options.append(tags.option(label, value=value, **oattrs)) |
462 if optgroup_opened: |
460 if optgroup_opened: |
463 options.append(u'</optgroup>') |
461 options.append(u'</optgroup>') |
464 if 'size' not in attrs: |
462 if 'size' not in attrs: |
465 if self._multiple: |
463 if self._multiple: |
466 size = text_type(min(self.default_size, len(vocab) or 1)) |
464 size = str(min(self.default_size, len(vocab) or 1)) |
467 else: |
465 else: |
468 size = u'1' |
466 size = u'1' |
469 attrs['size'] = size |
467 attrs['size'] = size |
470 return tags.select(name=field.input_name(form, self.suffix), |
468 return tags.select(name=field.input_name(form, self.suffix), |
471 multiple=self._multiple, options=options, **attrs) |
469 multiple=self._multiple, options=options, **attrs) |
725 if self.value is None: |
723 if self.value is None: |
726 value = self.values(form, field)[0] |
724 value = self.values(form, field)[0] |
727 else: |
725 else: |
728 value = self.value |
726 value = self.value |
729 attrs = self.attributes(form, field) |
727 attrs = self.attributes(form, field) |
730 attrs.setdefault('size', text_type(self.default_size)) |
728 attrs.setdefault('size', str(self.default_size)) |
731 return tags.input(name=field.input_name(form, self.suffix), |
729 return tags.input(name=field.input_name(form, self.suffix), |
732 value=value, type='text', **attrs) |
730 value=value, type='text', **attrs) |
733 |
731 |
734 |
732 |
735 class JQueryTimePicker(JQueryDatePicker): |
733 class JQueryTimePicker(JQueryDatePicker): |
799 if not datestr: |
797 if not datestr: |
800 return None |
798 return None |
801 try: |
799 try: |
802 date = todatetime(req.parse_datetime(datestr, 'Date')) |
800 date = todatetime(req.parse_datetime(datestr, 'Date')) |
803 except ValueError as exc: |
801 except ValueError as exc: |
804 raise ProcessFormError(text_type(exc)) |
802 raise ProcessFormError(str(exc)) |
805 timestr = req.form.get(field.input_name(form, 'time')) |
803 timestr = req.form.get(field.input_name(form, 'time')) |
806 if timestr: |
804 if timestr: |
807 timestr = timestr.strip() |
805 timestr = timestr.strip() |
808 if not timestr: |
806 if not timestr: |
809 return date |
807 return date |
810 try: |
808 try: |
811 time = req.parse_datetime(timestr, 'Time') |
809 time = req.parse_datetime(timestr, 'Time') |
812 except ValueError as exc: |
810 except ValueError as exc: |
813 raise ProcessFormError(text_type(exc)) |
811 raise ProcessFormError(str(exc)) |
814 return date.replace(hour=time.hour, minute=time.minute, second=time.second) |
812 return date.replace(hour=time.hour, minute=time.minute, second=time.second) |
815 |
813 |
816 |
814 |
817 # ajax widgets ################################################################ |
815 # ajax widgets ################################################################ |
818 |
816 |
1012 |
1010 |
1013 def process_field_data(self, form, field): |
1011 def process_field_data(self, form, field): |
1014 req = form._cw |
1012 req = form._cw |
1015 values = {} |
1013 values = {} |
1016 path = req.form.get(field.input_name(form, 'path')) |
1014 path = req.form.get(field.input_name(form, 'path')) |
1017 if isinstance(path, string_types): |
1015 if isinstance(path, str): |
1018 path = path.strip() |
1016 path = path.strip() |
1019 if path is None: |
1017 if path is None: |
1020 path = u'' |
1018 path = u'' |
1021 fqs = req.form.get(field.input_name(form, 'fqs')) |
1019 fqs = req.form.get(field.input_name(form, 'fqs')) |
1022 if isinstance(fqs, string_types): |
1020 if isinstance(fqs, str): |
1023 fqs = fqs.strip() or None |
1021 fqs = fqs.strip() or None |
1024 if fqs: |
1022 if fqs: |
1025 for i, line in enumerate(fqs.split('\n')): |
1023 for i, line in enumerate(fqs.split('\n')): |
1026 line = line.strip() |
1024 line = line.strip() |
1027 if line: |
1025 if line: |