:) Le mercredi 4 décembre 2013 13:21:43 UTC-5, Massimo Di Pierro a écrit : > > Too late. I patched trunk already. ;-) > > On Wednesday, 4 December 2013 11:13:28 UTC-6, Richard wrote: >> >> >> >> Le lundi 2 décembre 2013 15:46:41 UTC-5, Richard a écrit : >>> >>> Hello, >>> >>> I set a label True/False flag for checkbox widget like so : >>> >>> class CheckboxesWidget(OptionsWidget): >>> >>> @classmethod >>> def widget(cls, field, value, **attributes): >>> """ >>> generates a TABLE tag, including INPUT checkboxes (multiple >>> allowed) >>> >>> see also: :meth:`FormWidget.widget` >>> """ >>> # was values = re.compile('[\w\-:]+').findall(str(value)) >>> if isinstance(value, (list, tuple)): >>> values = [str(v) for v in value] >>> else: >>> values = [str(value)] >>> >>> attr = cls._attributes(field, {}, **attributes) >>> attr['_class'] = attr.get('_class', 'web2py_checkboxeswidget') >>> >>> label = attr.get('label') >>> if not isinstance(label, bool): >>> label = True >>> elif label is True: >>> label = True >>> elif label is False: >>> label = False >>> >>> requires = field.requires >>> if not isinstance(requires, (list, tuple)): >>> requires = [requires] >>> if requires and hasattr(requires[0], 'options'): >>> options = requires[0].options() >>> else: >>> raise SyntaxError('widget cannot determine options of %s' >>> % field) >>> >>> options = [(k, v) for k, v in options if k != ''] >>> opts = [] >>> cols = attributes.get('cols', 1) >>> totals = len(options) >>> mods = totals % cols >>> rows = totals / cols >>> if mods: >>> rows += 1 >>> >>> #widget style >>> wrappers = dict( >>> table=(TABLE, TR, TD), >>> ul=(DIV, UL, LI), >>> divs=(CAT, DIV, DIV) >>> ) >>> parent, child, inner = wrappers[attributes.get('style', 'table')] >>> >>> for r_index in range(rows): >>> tds = [] >>> for k, v in options[r_index * cols:(r_index + 1) * cols]: >>> if k in values: >>> r_value = k >>> else: >>> r_value = [] >>> tds.append(inner(INPUT(_type='checkbox', >>> _id='%s%s' % (field.name, k), >>> _name=field.name, >>> requires=attr.get('requires', >>> None), >>> hideerror=True, _value=k, >>> value=r_value), >>> LABEL(v, _for='%s%s' % (field.name, >>> k)) if label is True else '')) >>> opts.append(child(tds)) >>> >>> if opts: >>> opts.append( >>> INPUT(requires=attr.get('requires', None), >>> _style="display:none;", >>> _disabled="disabled", >>> _name=field.name, >>> hideerror=False)) >>> return parent(*opts, **attr) >>> >>> The purpose of this change is in context where a user need single >>> checkbox for each row of a grid where he don't need to display a label >>> beside the checkbox, since he only want to know which record is checked and >>> need to be updated... >>> >>> I need that in order to create a special form that allow bunch/batch >>> records update, see attach image (sorry I had to hide data of some >>> columns)... You can see, that each row has a checkbox that is generated >>> like this : >>> >>> form_fields = [Field('checkbox_%s' % r['table'].id, 'integer', >>> >>> requires=IS_EMPTY_OR(IS_IN_SET([r['table'].id])), >>> widget=lambda field, value: >>> SQLFORM.widgets.checkboxes.widget(field, value, style='divs', label=False)) >>> for r in rows] >>> >>> The form is then create with .factory() after adding the last fields of >>> the models that appears in the last line of the html table on the attach >>> image... >>> >>> I can, make the change on Git and send a PR, if this change is kind of >>> approved!! >>> >>> Thanks >>> >>> Richard >>> >>>
-- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.