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