web/formwidgets.py
branchtls-sprint
changeset 1562 e6d2c07c0c58
parent 1541 ddddbb748355
child 1564 de0548cb0ab8
equal deleted inserted replaced
1561:85752d14c15d 1562:e6d2c07c0c58
   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, sort=False):
   162     def __init__(self, attrs=None, multiple=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
       
   166 
   165 
   167     def render(self, form, field):
   166     def render(self, form, field):
   168         name, curvalues, attrs = self._render_attrs(form, field)
   167         name, curvalues, attrs = self._render_attrs(form, field)
   169         if not 'size' in attrs and self._multiple:
   168         if not 'size' in attrs and self._multiple:
   170             attrs['size'] = '5'
   169             attrs['size'] = '5'
   171         options = []
   170         options = []
   172         vocab = field.vocabulary(form)
   171         for label, value in field.vocabulary(form):
   173         if self._sort:
       
   174             vocab = sorted(vocab)
       
   175         for label, value in vocab:
       
   176             if value is None:
   172             if value is None:
   177                 # handle separator
   173                 # handle separator
   178                 options.append(u'<optgroup label="%s"/>' % (label or ''))
   174                 options.append(u'<optgroup label="%s"/>' % (label or ''))
   179             elif value in curvalues:
   175             elif value in curvalues:
   180                 options.append(tags.option(label, value=value, selected='selected'))
   176                 options.append(tags.option(label, value=value, selected='selected'))