web/formwidgets.py
branchstable
changeset 6890 1b2fcb9356a3
parent 6880 4be32427b2b9
child 6931 0af44a38fe41
equal deleted inserted replaced
6889:37668bf302f5 6890:1b2fcb9356a3
    61 '''''''''''''''''''''''''
    61 '''''''''''''''''''''''''
    62 
    62 
    63 .. autoclass:: cubicweb.web.formwidgets.FCKEditor
    63 .. autoclass:: cubicweb.web.formwidgets.FCKEditor
    64 .. autoclass:: cubicweb.web.formwidgets.AjaxWidget
    64 .. autoclass:: cubicweb.web.formwidgets.AjaxWidget
    65 .. autoclass:: cubicweb.web.formwidgets.AutoCompletionWidget
    65 .. autoclass:: cubicweb.web.formwidgets.AutoCompletionWidget
       
    66 .. autoclass:: cubicweb.web.formwidgets.InOutWidget
    66 
    67 
    67 .. kill or document StaticFileAutoCompletionWidget
    68 .. kill or document StaticFileAutoCompletionWidget
    68 .. kill or document LazyRestrictedAutoCompletionWidget
    69 .. kill or document LazyRestrictedAutoCompletionWidget
    69 .. kill or document RestrictedAutoCompletionWidget
    70 .. kill or document RestrictedAutoCompletionWidget
    70 
    71 
   997         return '<a id="%(domid)s" href="%(href)s">'\
   998         return '<a id="%(domid)s" href="%(href)s">'\
   998                '<img src="%(imgsrc)s" alt="%(label)s"/>%(label)s</a>' % {
   999                '<img src="%(imgsrc)s" alt="%(label)s"/>%(label)s</a>' % {
   999             'label': label, 'imgsrc': imgsrc,
  1000             'label': label, 'imgsrc': imgsrc,
  1000             'domid': self.domid, 'href': self.href}
  1001             'domid': self.domid, 'href': self.href}
  1001 
  1002 
       
  1003 class InOutWidget(Select):
       
  1004     needs_js = ('cubicweb.widgets.js', )
       
  1005     template = """
       
  1006 <table id="%(widgetid)s">
       
  1007 <tr><td>%(inoutinput)s</td>
       
  1008     <td><div style="margin-bottom:3px">%(addinput)s</div> <div>%(removeinput)s</div></td>
       
  1009     <td>%(resinput)s</td></tr>
       
  1010 </table>
       
  1011 """
       
  1012     add_button = """<input type="button" id="cwinoutadd"  class="wdgButton cwinoutadd" value="&gt;&gt;" size="10" />"""
       
  1013     remove_button ="""<input type="button" class="wdgButton cwinoutremove" value="&lt;&lt;" size="10" />"""
       
  1014 
       
  1015     def __init__(self, attrs=None):
       
  1016         super(InOutWidget, self).__init__(attrs, multiple=True)
       
  1017 
       
  1018     def render_select(self, form, field, name, selected=False):
       
  1019         values, attrs = self.values_and_attributes(form, field)
       
  1020         options = []
       
  1021         inputs = []
       
  1022         for _option in field.vocabulary(form):
       
  1023             try:
       
  1024                 label, value, oattrs = _option
       
  1025             except ValueError:
       
  1026                 label, value = _option
       
  1027             if selected:
       
  1028                 # add values
       
  1029                 if value in values:
       
  1030                     options.append(tags.option(label, value=value))
       
  1031                     # add hidden inputs
       
  1032                     inputs.append(tags.input(value=value, name=field.dom_id(form), type="hidden"))
       
  1033             else:
       
  1034                 options.append(tags.option(label, value=value))
       
  1035         if 'size' not in attrs:
       
  1036             attrs['size'] = 5
       
  1037         if 'id' in attrs :
       
  1038             attrs.pop('id')
       
  1039         return tags.select(name=name, multiple=self._multiple, id=name,
       
  1040                            options=options, **attrs) + '\n'.join(inputs)
       
  1041 
       
  1042 
       
  1043     def _render(self, form, field, renderer):
       
  1044         domid = field.dom_id(form)
       
  1045         jsnodes = {'widgetid': domid, 'from': 'from_' + domid, 'to': 'to_' + domid}
       
  1046         form._cw.add_onload(u'$(cw.jqNode("%s")).cwinoutwidget("%s", "%s");'
       
  1047                             % (jsnodes['widgetid'], jsnodes['from'], jsnodes['to']))
       
  1048         field.required=True
       
  1049         return self.template % {'widgetid': jsnodes['widgetid'],
       
  1050                                 'inoutinput' : self.render_select(form, field, jsnodes['from']), # helpinfo select tag
       
  1051                                 'resinput' : self.render_select(form, field, jsnodes['to'], selected=True), # select tag with resultats
       
  1052                                 'addinput' : self.add_button % jsnodes,
       
  1053                                 'removeinput': self.remove_button % jsnodes
       
  1054                                 }