web/formwidgets.py
branchtls-sprint
changeset 1337 828bbf500bcc
parent 1336 2e552353c42a
child 1344 930020cb134b
equal deleted inserted replaced
1336:2e552353c42a 1337:828bbf500bcc
   265                    req._('calendar'), helperid) )
   265                    req._('calendar'), helperid) )
   266 
   266 
   267 
   267 
   268 # ajax widgets ################################################################
   268 # ajax widgets ################################################################
   269 
   269 
       
   270 def init_ajax_attributes(attrs, wdgtype, loadtype=u'auto'):
       
   271     try:
       
   272         attrs[u'klass'] += u' widget'
       
   273     except KeyError:
       
   274         attrs[u'klass'] = u'widget'
       
   275     attrs.setdefault(u'cubicweb:wdgtype', wdgtype)
       
   276     attrs.setdefault(u'cubicweb:loadtype', loadtype)
       
   277 
       
   278 
   270 class AjaxWidget(FieldWidget):
   279 class AjaxWidget(FieldWidget):
   271     """simple <div> based ajax widget"""
   280     """simple <div> based ajax widget"""
   272     def __init__(self, wdgtype, inputid=None, **kwargs):
   281     def __init__(self, wdgtype, inputid=None, **kwargs):
   273         super(AjaxWidget, self).__init__(**kwargs)
   282         super(AjaxWidget, self).__init__(**kwargs)
   274         self.attrs.setdefault('class', 'widget')
   283         init_ajax_attributes(self.attrs, wdgtype)
   275         self.attrs.setdefault('cubicweb:loadtype', 'auto')
       
   276         self.attrs['cubicweb:wdgtype'] = wdgtype
       
   277         if inputid is not None:
   284         if inputid is not None:
   278             self.attrs['cubicweb:inputid'] = inputid
   285             self.attrs[u'cubicweb:inputid'] = inputid
   279             
   286             
   280     def render(self, form, field):
   287     def render(self, form, field):
   281         self.add_media(form)
   288         self.add_media(form)
   282         attrs = self._render_attrs(form, field)[-1]
   289         attrs = self._render_attrs(form, field)[-1]
   283         return tags.div(**attrs)
   290         return tags.div(**attrs)
   284 
   291 
   285         
   292     
   286 class AutoCompletionWidget(TextInput):
   293 class AutoCompletionWidget(TextInput):
   287     """ajax widget for StringField, proposing matching existing values as you
   294     """ajax widget for StringField, proposing matching existing values as you
   288     type.
   295     type.
   289     """
   296     """
   290     needs_js = ('cubicweb.widgets.js', 'jquery.autocomplete.js')
   297     needs_js = ('cubicweb.widgets.js', 'jquery.autocomplete.js')
   294     
   301     
   295     def _render_attrs(self, form, field):
   302     def _render_attrs(self, form, field):
   296         name, values, attrs = super(AutoCompletionWidget, self)._render_attrs(form, field)
   303         name, values, attrs = super(AutoCompletionWidget, self)._render_attrs(form, field)
   297         if not values[0]:
   304         if not values[0]:
   298             values = (INTERNAL_FIELD_VALUE,)
   305             values = (INTERNAL_FIELD_VALUE,)
   299         try:
   306         init_ajax_attributes(attrs, self.wdgtype, self.loadtype)
   300             attrs['klass'] += ' widget'
       
   301         except KeyError:
       
   302             attrs['klass'] = 'widget'
       
   303         attrs.setdefault('cubicweb:wdgtype', self.wdgtype)
       
   304         attrs.setdefault('cubicweb:loadtype', self.loadtype)
       
   305         # XXX entity form specific
   307         # XXX entity form specific
   306         attrs['cubicweb:dataurl'] = self._get_url(form.edited_entity)
   308         attrs['cubicweb:dataurl'] = self._get_url(form.edited_entity)
   307         return name, values, attrs
   309         return name, values, attrs
   308     
   310     
   309     def _get_url(self, entity):
   311     def _get_url(self, entity):
   322 class RestrictedAutoCompletionWidget(AutoCompletionWidget):
   324 class RestrictedAutoCompletionWidget(AutoCompletionWidget):
   323     """XXX describe me"""
   325     """XXX describe me"""
   324     wdgtype = 'RestrictedSuggestField'    
   326     wdgtype = 'RestrictedSuggestField'    
   325 
   327 
   326 
   328 
       
   329 class AddComboBoxWidget(Select):
       
   330     def _render_attrs(self, form, field):
       
   331         name, values, attrs = super(AddComboBoxWidget, self)._render_attrs(form, field)
       
   332         init_ajax_attributes(self.attrs, 'AddComboBox')
       
   333         # XXX entity form specific
       
   334         entity = form.edited_entity
       
   335         attrs['cubicweb:etype_to'] = entity.e_schema
       
   336         etype_from = entity.e_schema.subject_relation(self.name).objects(entity.e_schema)[0]
       
   337         attrs['cubicweb:etype_from'] = etype_from
       
   338         
       
   339     def render(self, form, field):
       
   340         return super(AddComboBoxWidget, self).render(form, field) + u'''
       
   341 <div id="newvalue">
       
   342   <input type="text" id="newopt" />
       
   343   <a href="javascript:noop()" id="add_newopt">&nbsp;</a></div>
       
   344 '''
       
   345         
   327 # buttons ######################################################################
   346 # buttons ######################################################################
   328 
   347 
   329 class Button(Input):
   348 class Button(Input):
   330     """<input type='button'>, base class for global form buttons"""
   349     """<input type='button'>, base class for global form buttons"""
   331     type = 'button'
   350     type = 'button'
   383     def render(self, form, field=None):
   402     def render(self, form, field=None):
   384         self.imgsrc = form.req.external_resource(self.imgressource)
   403         self.imgsrc = form.req.external_resource(self.imgressource)
   385         return '<a id="%(domid)s" href="%(href)s"><img src="%(imgsrc)s" alt="%(label)s"/>%(label)s</a>' % self.__dict__
   404         return '<a id="%(domid)s" href="%(href)s"><img src="%(imgsrc)s" alt="%(label)s"/>%(label)s</a>' % self.__dict__
   386 
   405 
   387     
   406     
   388 # XXX EntityLinkComboBoxWidget, AddComboBoxWidget, RawDynamicComboBoxWidget
   407 # XXX EntityLinkComboBoxWidget, [Raw]DynamicComboBoxWidget