web/formwidgets.py
changeset 1889 874a055c373b
parent 1875 7bcb02377516
child 1934 be86bb31c4c2
child 1963 c97c03082de9
equal deleted inserted replaced
1888:f36d43f00f32 1889:874a055c373b
   197     """
   197     """
   198     type = 'checkbox'
   198     type = 'checkbox'
   199 
   199 
   200     def render(self, form, field):
   200     def render(self, form, field):
   201         name, curvalues, attrs = self._render_attrs(form, field)
   201         name, curvalues, attrs = self._render_attrs(form, field)
   202         options = []
       
   203         for label, value in field.vocabulary(form):
       
   204             if value in curvalues:
       
   205                 tag = tags.input(name=name, value=value, type=self.type,
       
   206                                  checked='checked', **attrs)
       
   207             else:
       
   208                 tag = tags.input(name=name, value=value, type=self.type,
       
   209                                  **attrs)
       
   210             options.append(tag + label)
       
   211         return '<br/>\n'.join(options)
       
   212 
       
   213 
       
   214 class Radio(Input):
       
   215     """<input type='radio'>, for field having a specific vocabulary. One
       
   216     input will be generated for each possible value.
       
   217     """
       
   218     type = 'radio'
       
   219 
       
   220     def render(self, form, field):
       
   221         name, curvalues, attrs = self._render_attrs(form, field)
       
   222         domid = attrs.pop('id', None)
   202         domid = attrs.pop('id', None)
       
   203         sep = attrs.pop('separator', u'<br/>')
   223         options = []
   204         options = []
   224         for i, (label, value) in enumerate(field.vocabulary(form)):
   205         for i, (label, value) in enumerate(field.vocabulary(form)):
   225             iattrs = attrs.copy()
   206             iattrs = attrs.copy()
   226             if i == 0 and domid is not None:
   207             if i == 0 and domid is not None:
   227                 iattrs['id'] = domid
   208                 iattrs['id'] = domid
   228             if value in curvalues:
   209             if value in curvalues:
   229                 iattrs['checked'] = u'checked'
   210                 iattrs['checked'] = u'checked'
   230             tag = tags.input(name=name, type=self.type, value=value, **iattrs)
   211             tag = tags.input(name=name, type=self.type, value=value, **iattrs)
   231             options.append(tag + label + '<br/>')
   212             options.append(tag + label + sep)
   232         return '\n'.join(options)
   213         return '\n'.join(options)
   233 
   214 
       
   215 
       
   216 class Radio(CheckBox):
       
   217     """<input type='radio'>, for field having a specific vocabulary. One
       
   218     input will be generated for each possible value.
       
   219     """
       
   220     type = 'radio'
   234 
   221 
   235 # javascript widgets ###########################################################
   222 # javascript widgets ###########################################################
   236 
   223 
   237 class DateTimePicker(TextInput):
   224 class DateTimePicker(TextInput):
   238     """<input type='text' + javascript date/time picker for date or datetime
   225     """<input type='text' + javascript date/time picker for date or datetime
   316         name, values, attrs = super(AutoCompletionWidget, self)._render_attrs(form, field)
   303         name, values, attrs = super(AutoCompletionWidget, self)._render_attrs(form, field)
   317         if not values[0]:
   304         if not values[0]:
   318             values = (INTERNAL_FIELD_VALUE,)
   305             values = (INTERNAL_FIELD_VALUE,)
   319         init_ajax_attributes(attrs, self.wdgtype, self.loadtype)
   306         init_ajax_attributes(attrs, self.wdgtype, self.loadtype)
   320         # XXX entity form specific
   307         # XXX entity form specific
   321         attrs['cubicweb:dataurl'] = self._get_url(form.edited_entity)
   308         attrs['cubicweb:dataurl'] = self._get_url(form.edited_entity, field)
   322         return name, values, attrs
   309         return name, values, attrs
   323 
   310 
   324     def _get_url(self, entity):
   311     def _get_url(self, entity, field):
   325         return entity.req.build_url('json', fname=entity.autocomplete_initfuncs[self.rschema],
   312         fname = entity.autocomplete_initfuncs[field.name]
   326                                 pageid=entity.req.pageid, mode='remote')
   313         return entity.req.build_url('json', fname=fname, mode='remote',
       
   314                                     pageid=entity.req.pageid)
   327 
   315 
   328 
   316 
   329 class StaticFileAutoCompletionWidget(AutoCompletionWidget):
   317 class StaticFileAutoCompletionWidget(AutoCompletionWidget):
   330     """XXX describe me"""
   318     """XXX describe me"""
   331     wdgtype = 'StaticFileSuggestField'
   319     wdgtype = 'StaticFileSuggestField'
   332 
   320 
   333     def _get_url(self, entity):
   321     def _get_url(self, entity, field):
   334         return entity.req.datadir_url + entity.autocomplete_initfuncs[self.rschema]
   322         return entity.req.datadir_url + entity.autocomplete_initfuncs[field.name]
   335 
   323 
   336 
   324 
   337 class RestrictedAutoCompletionWidget(AutoCompletionWidget):
   325 class RestrictedAutoCompletionWidget(AutoCompletionWidget):
   338     """XXX describe me"""
   326     """XXX describe me"""
   339     wdgtype = 'RestrictedSuggestField'
   327     wdgtype = 'RestrictedSuggestField'