web/formwidgets.py
branchtls-sprint
changeset 1541 ddddbb748355
parent 1538 806a7ca31411
child 1557 d2d5428c7a38
child 1562 e6d2c07c0c58
equal deleted inserted replaced
1540:996355824825 1541:ddddbb748355
   157         return super(FCKEditor, self).render(form, field)
   157         return super(FCKEditor, self).render(form, field)
   158 
   158 
   159 
   159 
   160 class Select(FieldWidget):
   160 class Select(FieldWidget):
   161     """<select>, for field having a specific vocabulary"""
   161     """<select>, for field having a specific vocabulary"""
   162     def __init__(self, attrs=None, multiple=False):
   162     def __init__(self, attrs=None, multiple=False, sort=False):
   163         super(Select, self).__init__(attrs)
   163         super(Select, self).__init__(attrs)
   164         self.multiple = multiple
   164         self._multiple = multiple
       
   165         self._sort = sort
   165 
   166 
   166     def render(self, form, field):
   167     def render(self, form, field):
   167         name, curvalues, attrs = self._render_attrs(form, field)
   168         name, curvalues, attrs = self._render_attrs(form, field)
   168         if not 'size' in attrs and self.multiple:
   169         if not 'size' in attrs and self._multiple:
   169             attrs['size'] = '5'
   170             attrs['size'] = '5'
   170         options = []
   171         options = []
   171         for label, value in field.vocabulary(form):
   172         vocab = field.vocabulary(form)
       
   173         if self._sort:
       
   174             vocab = sorted(vocab)
       
   175         for label, value in vocab:
   172             if value is None:
   176             if value is None:
   173                 # handle separator
   177                 # handle separator
   174                 options.append(u'<optgroup label="%s"/>' % (label or ''))
   178                 options.append(u'<optgroup label="%s"/>' % (label or ''))
   175             elif value in curvalues:
   179             elif value in curvalues:
   176                 options.append(tags.option(label, value=value, selected='selected'))
   180                 options.append(tags.option(label, value=value, selected='selected'))
   177             else:
   181             else:
   178                 options.append(tags.option(label, value=value))
   182                 options.append(tags.option(label, value=value))
   179         return tags.select(name=name, multiple=self.multiple,
   183         return tags.select(name=name, multiple=self._multiple,
   180                            options=options, **attrs)
   184                            options=options, **attrs)
   181 
   185 
   182 
   186 
   183 class CheckBox(Input):
   187 class CheckBox(Input):
   184     """<input type='checkbox'>, for field having a specific vocabulary. One
   188     """<input type='checkbox'>, for field having a specific vocabulary. One