cubicweb/web/formwidgets.py
changeset 12567 26744ad37953
parent 12006 c2230b7f6358
child 12680 30a98fd4ce31
equal deleted inserted replaced
12566:6b3523f81f42 12567:26744ad37953
    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: