Beispiel #1
0
    def __call__(self):
        """Render the current value
        """

        if self._renderedValueSet():
            value = self._data
        else:
            value = self.context.default

        if value == self.context.missing_value:
            value = self._translate(
                _("SourceDisplayWidget-missing", default="Nothing"))
        else:
            terms = getMultiAdapter((self.source, self.request),
                                    zope.browser.interfaces.ITerms)

            try:
                term = terms.getTerm(value)
            except LookupError:
                value = self._translate(
                    _("SourceDisplayWidget-invalid", default="Invalid value"))
            else:
                value = self.renderTermForDisplay(term)

        return value
Beispiel #2
0
    def __call__(self):
        """Render the current value
        """

        if self._renderedValueSet():
            value = self._data
        else:
            value = self.context.default

        if value == self.context.missing_value:
            value = self._translate(_("SourceDisplayWidget-missing",
                                      default="Nothing"))
        else:
            terms = getMultiAdapter((self.source, self.request),
                zope.browser.interfaces.ITerms)

            try:
                term = terms.getTerm(value)
            except LookupError:
                value = self._translate(_("SourceDisplayWidget-invalid",
                                          default="Invalid value"))
            else:
                value = self.renderTermForDisplay(term)

        return value
Beispiel #3
0
    def __call__(self):
        result = ['<div class="value">']
        value = self._value()
        field = self.context

        term = None
        if value == field.missing_value:
            result.append('  <div class="row">')
            result.append('    <div class="label">')
            result.append(u'     ' + self._translate(
                _("SourceDisplayWidget-label", default="Selected")))
            result.append('    </div>')
            result.append('    <div class="field">')
            result.append(u'     ' + self._translate(
                _("SourceDisplayWidget-missing", default="Nothing")))
            result.append('    </div>')
            result.append('  </div>')
        else:
            try:
                term = self.terms.getTerm(value)
            except LookupError:
                result.append(u'  ' + self._translate(
                    _("SourceDisplayWidget-missing", default="Nothing Valid")))
            else:
                result.append('  <div class="row">')
                result.append('    <div class="label">')
                result.append(u'     ' + self._translate(
                    _("SourceDisplayWidget-label", default="Selected")))
                result.append('    </div>')
                result.append('    <div class="field">')
                result.append(u'     ' + self.renderTermForDisplay(term))
                result.append('    </div>')
                result.append('  </div>')
                result.append(
                    '  <input type="hidden" name="%s" value=%s />' %
                    (self.name, xml.sax.saxutils.quoteattr(term.token)))

        result.append(
            '  <input type="hidden" name="%s.displayed" value="y" />' %
            self.name)

        result.append('  <div class="queries">')
        for name, queryview in self.queryviews:
            result.append('    <div class="query">')
            result.append('      <div class="queryinput">')
            result.append(queryview.render(name))
            result.append('      </div> <!-- queryinput -->')

            qresults = queryview.results(name)
            if qresults:
                result.append('      <div class="queryresults">\n%s' %
                              self._renderResults(qresults, name))
                result.append('      </div> <!-- queryresults -->')
            result.append('    </div> <!-- query -->')
        result.append('  </div> <!-- queries -->')
        result.append('</div> <!-- value -->')
        return '\n'.join(result)
Beispiel #4
0
class SequenceDisplayWidget(DisplayWidget):

    _missingValueMessage = _("sequence-value-not-provided",
                             u"(no value available)")

    _emptySequenceMessage = _("sequence-value-is-empty",
                              u"(no values)")

    tag = "ol"
    itemTag = "li"
    cssClass = "sequenceWidget"
    extra = ""

    def __init__(self, context, field, request, subwidget=None):
        super(SequenceDisplayWidget, self).__init__(context, request)
        self.subwidget = subwidget

    def __call__(self):
        # get the data to display:
        if self._renderedValueSet():
            data = self._data
        else:
            data = self.context.get(self.context.context)

        # deal with special cases:
        if data == self.context.missing_value:
            return translate(self._missingValueMessage, self.request)
        data = list(data)
        if not data:
            return translate(self._emptySequenceMessage, self.request)

        parts = []
        for i, item in enumerate(data):
            widget = self._getWidget(i)
            widget.setRenderedValue(item)
            s = widget()
            if self.itemTag:
                s = "<%s>%s</%s>" % (self.itemTag, s, self.itemTag)
            parts.append(s)
        contents = "\n".join(parts)
        if self.tag:
            contents = "\n%s\n" % contents
            contents = renderElement(self.tag,
                                     cssClass=self.cssClass,
                                     extra=self.extra,
                                     contents=contents)
        return contents

    def _getWidget(self, i):
        field = self.context.value_type
        if self.subwidget is not None:
            widget = self.subwidget(field, self.request)
        else:
            widget = component.getMultiAdapter(
                (field, self.request), IDisplayWidget)
        widget.setPrefix('%s.%d.' % (self.name, i))
        return widget
Beispiel #5
0
    def handle_edit_action(self, action, data):
        if form.applyChanges(self.context, self.form_fields, data,
                             self.adapters):

            zope.event.notify(
                zope.lifecycleevent.ObjectModifiedEvent(self.context))
            # TODO: Needs locale support. See also Five.form.EditView.
            self.status = _("Updated on ${date_time}",
                            mapping={'date_time': str(datetime.utcnow())})
        else:
            self.status = _('No changes')
Beispiel #6
0
class BooleanDisplayWidget(DisplayWidget):

    _msg_true = _("True")
    _msg_false = _("False")

    def __call__(self):
        if self._renderedValueSet():
            value = self._data
        else:
            value = self.context.default
        if value:
            return self._msg_true
        else:
            return self._msg_false
Beispiel #7
0
 def addButtonLabel(self):
     button_label = _('Add %s')
     button_label = translate(button_label, context=self.request,
                              default=button_label)
     title = self.context.title or self.context.__name__
     title = translate(title, context=self.request, default=title)
     return button_label % title
Beispiel #8
0
 def _toFieldValue(self, input):
     value = super(Bytes, self)._toFieldValue(input)
     if type(value) is unicode:
         try:
             value = value.encode('ascii')
         except UnicodeError, v:
             raise ConversionError(_("Invalid textual data"), v)
Beispiel #9
0
 def _toFieldValue(self, input):
     value = super(Bytes, self)._toFieldValue(input)
     if type(value) is unicode:
         try:
             value = value.encode('ascii')
         except UnicodeError, v:
             raise ConversionError(_("Invalid textual data"), v)
Beispiel #10
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             return int(input)
         except ValueError as v:
             raise ConversionError(_("Invalid integer data"), v)
Beispiel #11
0
 def _toFieldValue(self, input):
     value = super(Bytes, self)._toFieldValue(input)
     if isinstance(value, unicode):
         try:
             value = value.encode('ascii')
         except UnicodeError as v:
             raise ConversionError(_("Invalid textual data"), v)
     return value
Beispiel #12
0
 def _toFieldValue(self, input):
     if input is None or input == '':
         return self.context.missing_value
     try:
         seek = input.seek
         read = input.read
     except AttributeError, e:
         raise ConversionError(_('Form input is not a file object'), e)
Beispiel #13
0
 def _toFieldValue(self, input):
     if input:
         try:
             return self.convertTokensToValues([input])[0]
         except (InvalidValue, TypeError) as e:
             raise ConversionError(_("Invalid value"), e)
     else:
         return self.context.missing_value
Beispiel #14
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             return int(input)
         except ValueError, v:
             raise ConversionError(_("Invalid integer data"), v)
Beispiel #15
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             return decimal.Decimal(input)
         except decimal.InvalidOperation, v:
             raise ConversionError(_("Invalid decimal data"), v)
Beispiel #16
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             return decimal.Decimal(input)
         except decimal.InvalidOperation as v:
             raise ConversionError(_("Invalid decimal data"), v)
Beispiel #17
0
 def _toFieldValue(self, input):
     value = super(Bytes, self)._toFieldValue(input)
     if isinstance(value, unicode):
         try:
             value = value.encode('ascii')
         except UnicodeError as v:
             raise ConversionError(_("Invalid textual data"), v)
     return value
Beispiel #18
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             return float(input)
         except ValueError as v:
             raise ConversionError(_("Invalid floating point data"), v)
Beispiel #19
0
 def _toFieldValue(self, input):
     if input is None or input == '':
         return self.context.missing_value
     try:
         seek = input.seek
         read = input.read
     except AttributeError, e:
         raise ConversionError(_('Form input is not a file object'), e)
Beispiel #20
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             return float(input)
         except ValueError, v:
             raise ConversionError(_("Invalid floating point data"), v)
Beispiel #21
0
 def _toFieldValue(self, value):
     value = super(TextAreaWidget, self)._toFieldValue(value)
     if value:
         try:
             value = unicode(value)
         except ValueError, v:
             raise ConversionError(_("Invalid unicode data"), v)
         else:
             value = value.replace("\r\n", "\n")
Beispiel #22
0
 def _toFieldValue(self, value):
     value = super(TextAreaWidget, self)._toFieldValue(value)
     if value:
         try:
             value = unicode(value)
         except ValueError, v:
             raise ConversionError(_("Invalid unicode data"), v)
         else:
             value = value.replace("\r\n", "\n")
Beispiel #23
0
 def _toFieldValue(self, input):
     """See SimpleInputWidget"""
     if input is None:
         input = []
     elif not isinstance(input, list):
         input = [input]
     try:
         values = self.convertTokensToValues(input)
     except InvalidValue, e:
         raise ConversionError(_("Invalid value"), e)
Beispiel #24
0
 def _toFieldValue(self, input):
     """See SimpleInputWidget"""
     if input is None:
         input = []
     elif not isinstance(input, list):
         input = [input]
     try:
         values = self.convertTokensToValues(input)
     except InvalidValue, e:
         raise ConversionError(_("Invalid value"), e)
    def handle_edit_action(self, action, data):
        if applyChanges(self.context, self.form_fields, data, self.adapters):
            zope.event.notify(
                zope.app.event.objectevent.ObjectModifiedEvent(self.context))
            formatter = self.request.locale.dates.getFormatter(
                'dateTime', 'medium')

            try:
                time_zone = idatetime.ITZInfo(self.request)
            except TypeError:
                time_zone = pytz.UTC

            status = _("Updated on ${date_time}",
                       mapping={
                           'date_time':
                           formatter.format(datetime.datetime.now(time_zone))
                       })
            self.status = status
        else:
            self.status = _('No changes')
Beispiel #26
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             formatter = self.request.locale.dates.getFormatter(
                 self._category, (self.displayStyle or None))
             return formatter.parse(input)
         except (DateTimeParseError, ValueError) as v:
             raise ConversionError(_("Invalid datetime data"),
                                   "%s (%r)" % (v, input))
Beispiel #27
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             formatter = self.request.locale.dates.getFormatter(
                 self._category, (self.displayStyle or None))
             return formatter.parse(input)
         except (DateTimeParseError, ValueError), v:
             raise ConversionError(_("Invalid datetime data"),
                 "%s (%r)" % (v, input))
Beispiel #28
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             # TODO: Currently datetimes return in local (server)
             # time zone if no time zone information was given.
             # Maybe offset-naive datetimes should be returned in
             # this case? (DV)
             return parseDatetimetz(input)
         except (DateTimeError, ValueError, IndexError), v:
             raise ConversionError(_("Invalid datetime data"), v)
Beispiel #29
0
 def _toFieldValue(self, input):
     if input == self._missing:
         return self.context.missing_value
     else:
         try:
             # TODO: Currently datetimes return in local (server)
             # time zone if no time zone information was given.
             # Maybe offset-naive datetimes should be returned in
             # this case? (DV)
             return parseDatetimetz(input)
         except (DateTimeError, ValueError, IndexError) as v:
             raise ConversionError(_("Invalid datetime data"), v)
Beispiel #30
0
 def _toFieldValue(self, input):
     if self.convert_missing_value and input == self._missing:
         value = self.context.missing_value
     else:
         # We convert everything to unicode. This might seem a bit crude,
         # but anything contained in a TextWidget should be representable
         # as a string. Note that you always have the choice of overriding
         # the method.
         try:
             value = unicode(input)
         except ValueError, v:
             raise ConversionError(_("Invalid text data"), v)
Beispiel #31
0
 def _toFieldValue(self, input):
     if self.convert_missing_value and input == self._missing:
         value = self.context.missing_value
     else:
         # We convert everything to unicode. This might seem a bit crude,
         # but anything contained in a TextWidget should be representable
         # as a string. Note that you always have the choice of overriding
         # the method.
         try:
             value = unicode(input)
         except ValueError, v:
             raise ConversionError(_("Invalid text data"), v)
Beispiel #32
0
    def handle_edit_action(self, action, data):
        if applyChanges(self.context, self.form_fields, data, self.adapters):
            zope.event.notify(
                zope.app.event.objectevent.ObjectModifiedEvent(self.context))
            formatter = self.request.locale.dates.getFormatter(
                'dateTime', 'medium')

            try:
                time_zone = idatetime.ITZInfo(self.request)
            except TypeError:
                time_zone = pytz.UTC

            status = _("Updated on ${date_time}",
                       mapping={'date_time':
                                formatter.format(
                                   datetime.datetime.now(time_zone)
                                   )
                        }
                       )
            self.status = status
        else:
            self.status = _('No changes')
Beispiel #33
0
    def __call__(self):
        result = ['<div class="value">']
        value = self._value()

        if value:
            for v in value:
                try:
                    term = self.terms.getTerm(v)
                except LookupError:
                    continue # skip
                else:
                    result.append(
                        '  <input type="checkbox" name="%s.checked:list"'
                        ' value=%s />'
                        % (self.name, xml.sax.saxutils.quoteattr(term.token))
                        )
                    result.append('  ' + self.renderTermForDisplay(term))
                    result.append(
                        '  <input type="hidden" name="%s:list" value=%s />'
                        % (self.name, xml.sax.saxutils.quoteattr(term.token)))
                    result.append('  <br />')

            result.append(
                '  <input type="submit" name="%s.remove" value="%s" />'
                % (self.name,
                   self._translate(_("MultipleSourceInputWidget-remove",
                                     default="Remove")))
                )
            result.append('  <br />')

        result.append('  <input type="hidden" name="%s.displayed" value="y" />'
                      % self.name)

        result.append('  <div class="queries">')

        for name, queryview in self.queryviews:
            result.append('    <div class="query">')
            result.append('      <div class="queryinput">')
            result.append(queryview.render(name))
            result.append('      </div> <!-- queryinput -->')

            qresults = queryview.results(name)
            if qresults:
                result.append('      <div class="queryresults">\n%s' %
                              self._renderResults(qresults, name))
                result.append('      </div> <!-- queryresults -->')
            result.append('    </div> <!-- query -->')

        result.append('  </div> <!-- queries -->')
        result.append('</div> <!-- value -->')
        return '\n'.join(result)
Beispiel #34
0
    def __call__(self):
        result = ['<div class="value">']
        value = self._value()

        if value:
            for v in value:
                try:
                    term = self.terms.getTerm(v)
                except LookupError:
                    continue  # skip
                else:
                    result.append(
                        '  <input type="checkbox" name="%s.checked:list"'
                        ' value=%s />' %
                        (self.name, xml.sax.saxutils.quoteattr(term.token)))
                    result.append('  ' + self.renderTermForDisplay(term))
                    result.append(
                        '  <input type="hidden" name="%s:list" value=%s />' %
                        (self.name, xml.sax.saxutils.quoteattr(term.token)))
                    result.append('  <br />')

            result.append(
                '  <input type="submit" name="%s.remove" value="%s" />' %
                (self.name,
                 self._translate(
                     _("MultipleSourceInputWidget-remove", default="Remove"))))
            result.append('  <br />')

        result.append(
            '  <input type="hidden" name="%s.displayed" value="y" />' %
            self.name)

        result.append('  <div class="queries">')

        for name, queryview in self.queryviews:
            result.append('    <div class="query">')
            result.append('      <div class="queryinput">')
            result.append(queryview.render(name))
            result.append('      </div> <!-- queryinput -->')

            qresults = queryview.results(name)
            if qresults:
                result.append('      <div class="queryresults">\n%s' %
                              self._renderResults(qresults, name))
                result.append('      </div> <!-- queryresults -->')
            result.append('    </div> <!-- query -->')

        result.append('  </div> <!-- queries -->')
        result.append('</div> <!-- value -->')
        return '\n'.join(result)
Beispiel #35
0
 def _renderResults(self, results, name):
     terms = []
     apply = self._translate(
         _("SourceListInputWidget-apply", default="Apply"))
     for value in results:
         term = self.terms.getTerm(value)
         terms.append((self._translate(term.title), term.token))
     terms.sort()
     return ('<select name="%s.selection:list" multiple>\n'
             '%s\n'
             '</select>\n'
             '<input type="submit" name="%s.apply" value="%s" />' %
             (name, '\n'.join([('<option value="%s">%s</option>' %
                                (token, title))
                               for (title, token) in terms]), name, apply))
Beispiel #36
0
 def _toFieldValue(self, input):
     if input is None or input == '':
         return self.context.missing_value
     try:
         seek = input.seek
         read = input.read
     except AttributeError as e:
         raise ConversionError(_('Form input is not a file object'), e)
     else:
         seek(0)
         data = read()
         if data or getattr(input, 'filename', ''):
             return data
         else:
             return self.context.missing_value
Beispiel #37
0
 def _toFieldValue(self, input):
     if input is None or input == '':
         return self.context.missing_value
     try:
         seek = input.seek
         read = input.read
     except AttributeError as e:
         raise ConversionError(_('Form input is not a file object'), e)
     else:
         seek(0)
         data = read()
         if data or getattr(input, 'filename', ''):
             return data
         else:
             return self.context.missing_value
Beispiel #38
0
class ItemDisplayWidget(SingleDataHelper, ItemsWidgetBase):
    """Simple single-selection display that can be used in many cases."""

    def __init__(self, *args, **kw):
        ItemsWidgetBase.__init__(self, *args, **kw)
        self.required = False

    _messageNoValue = _("item-missing-single-value-for-display", "")

    def __call__(self):
        """See IBrowserWidget."""
        value = self._getFormValue()
        if value is None or value == u'':
            return self.translate(self._messageNoValue)
        else:
            term = self.vocabulary.getTerm(value)
            return self.textForValue(term)
Beispiel #39
0
class EditFormBase(FiveFormlibMixin, form.EditFormBase):

    # Overrides formlib.form.EditFormBase.handle_edit_action, to remove
    # dependecy on request.locale

    @form.action(_("Apply"), condition=form.haveInputWidgets)
    def handle_edit_action(self, action, data):
        if form.applyChanges(self.context, self.form_fields, data,
                             self.adapters):

            zope.event.notify(
                zope.lifecycleevent.ObjectModifiedEvent(self.context))
            # TODO: Needs locale support. See also Five.form.EditView.
            self.status = _("Updated on ${date_time}",
                            mapping={'date_time': str(datetime.utcnow())})
        else:
            self.status = _('No changes')
Beispiel #40
0
class SelectWidget(ItemsEditWidgetBase):
    """Provide a selection list for the item."""

    _messageNoValue = _("vocabulary-missing-single-value-for-edit",
                        "(nothing selected)")

    def renderValue(self, value):
        rendered_items = self.renderItems(value)
        contents = "\n%s\n" %"\n".join(rendered_items)
        return renderElement('select',
                             name=self.name,
                             id=self.name,
                             contents=contents,
                             size=self.size,
                             extra=self.extra)

    def renderItems(self, value):
        return self.renderItemsWithValues([value])
Beispiel #41
0
 def _renderResults(self, results, name):
     terms = []
     apply = self._translate(_("SourceListInputWidget-apply",
                               default="Apply"))
     for value in results:
         term = self.terms.getTerm(value)
         terms.append((self._translate(term.title), term.token))
     terms.sort()
     return (
         '<select name="%s.selection:list" multiple>\n'
         '%s\n'
         '</select>\n'
         '<input type="submit" name="%s.apply" value="%s" />'
         % (name,
            '\n'.join([('<option value="%s">%s</option>' % (token, title))
                       for (title, token) in terms]),
            name,
            apply)
         )
Beispiel #42
0
class RadioWidget(SelectWidget):
    """Radio widget for single item choices.

    This widget can be used when the number of selections is going
    to be small.
    """
    orientation = "vertical"

    _messageNoValue = _("vocabulary-missing-single-value-for-edit",
                        "(nothing selected)")

    def renderItem(self, index, text, value, name, cssClass):
        """Render an item of the list."""
        return self._renderItem(index, text, value, name, cssClass)

    def renderSelectedItem(self, index, text, value, name, cssClass):
        """Render a selected item of the list."""
        return self._renderItem(index, text, value, name, cssClass,
                                checked=True)

    def _renderItem(self, index, text, value, name, cssClass, checked=False):
        kw = {}
        if checked:
            kw['checked'] = 'checked'
        id = '%s.%s' % (name, index)
        elem = renderElement(u'input',
                             value=value,
                             name=name,
                             id=id,
                             cssClass=cssClass,
                             type='radio',
                             **kw)
        return renderElement(u'label',
                             contents='%s&nbsp;%s' % (elem, text),
                             **{'for': id})

    def renderValue(self, value):
        rendered_items = self.renderItems(value)
        if self.orientation == 'horizontal':
            return "&nbsp;&nbsp;".join(rendered_items)
        else:
            return "<br />".join(rendered_items)
Beispiel #43
0
    def _toFieldValue(self, input):
        """See SimpleInputWidget"""
        if input is None:
            input = []
        elif not isinstance(input, list):
            input = [input]
        try:
            values = self.convertTokensToValues(input)
        except InvalidValue as e:
            raise ConversionError(_("Invalid value"), e)

        # All AbstractCollection fields have a `_type` attribute specifying
        # the type of collection. Use it to generate the correct type,
        # otherwise return a list.  TODO: this breaks encapsulation.
        if hasattr(self.context, '_type'):
            _type = self.context._type
            if isinstance(_type, tuple):
                _type = _type[0]
            return _type(values)
        else:
            return values
Beispiel #44
0
    def __call__(self):

        if self._renderedValueSet():
            seq = self._data
        else:
            seq = self.context.default

        terms = getMultiAdapter((self.source, self.request),
                                zope.browser.interfaces.ITerms)
        result = []
        for value in seq:
            try:
                term = terms.getTerm(value)
            except LookupError:
                value = self._translate(
                    _("SourceDisplayWidget-invalid", default="Invalid value"))
            else:
                value = self.renderTermForDisplay(term)

            result.append(value)

        return '<br />\n'.join(result)
Beispiel #45
0
    def __call__(self):

        if self._renderedValueSet():
            seq = self._data
        else:
            seq = self.context.default

        terms = getMultiAdapter((self.source, self.request),
            zope.browser.interfaces.ITerms)
        result = []
        for value in seq:
            try:
                term = terms.getTerm(value)
            except LookupError:
                value = self._translate(_("SourceDisplayWidget-invalid",
                                          default="Invalid value"))
            else:
                value = self.renderTermForDisplay(term)

            result.append(value)

        return '<br />\n'.join(result)
Beispiel #46
0
class ItemsMultiDisplayWidget(MultiDataHelper, ItemsWidgetBase):
    """Displays a sequence of items."""

    def __init__(self, *args, **kw):
        ItemsWidgetBase.__init__(self, *args, **kw)
        self.required = False

    _messageNoValue = _("vocabulary-missing-multiple-value-for-display", "")

    itemTag = 'li'
    tag = 'ol'

    def __call__(self):
        """See IBrowserWidget."""
        value = self._getFormValue()
        if value:
            rendered_items = self.renderItems(value)
            return renderElement(self.tag,
                                 id=self.name,
                                 cssClass=self.cssClass,
                                 contents="\n".join(rendered_items),
                                 extra=self.extra)
        else:
            return self.translate(self._messageNoValue)

    def renderItems(self, value):
        """Render items of sequence."""
        items = []
        cssClass = self.cssClass or ''
        if cssClass:
            cssClass += "-item"
        tag = self.itemTag
        for item in value:
            term = self.vocabulary.getTerm(item)
            items.append(renderElement(
                tag,
                cssClass=cssClass,
                contents=escape(self.textForValue(term))))
        return items
Beispiel #47
0
class ItemsMultiEditWidgetBase(MultiDataHelper, ItemsEditWidgetBase):
    """Items widget supporting multiple selections."""

    _messageNoValue = _("vocabulary-missing-multiple-value-for-edit",
                        "(nothing selected)")
    _displayItemForMissingValue = False

    def renderItems(self, value):
        if value == self.context.missing_value:
            values = []
        else:
            values = list(value)
        return self.renderItemsWithValues(values)

    def renderValue(self, value):
        # All we really add here is the ':list' in the name argument
        # and mutliple='multiple' to renderElement().
        rendered_items = self.renderItems(value)
        return renderElement(self.tag,
                             name=self.name + ':list',
                             id=self.name,
                             multiple='multiple',
                             size=self.size,
                             contents="\n".join(rendered_items),
                             extra=self.extra)

    def hidden(self):
        items = []
        for item in self._getFormValue():
            items.append(
                renderElement(u'input',
                              type='hidden',
                              name=self.name+':list',
                              id=self.name,
                              value=self.vocabulary.getTerm(item).token,
                              cssClass=self.cssClass,
                              extra=self.extra))
        return '\n'.join(items)
Beispiel #48
0
    def update(self):
        self.setUpWidgets()
        self.form_reset = False

        data = {}
        errors, action = handleSubmit(self.actions, data, self.validate)
        # the following part will make sure that previous error not
        # get overriden by new errors. This is usefull for subforms. (ri)
        if self.errors is None:
            self.errors = errors
        else:
            if errors is not None:
                self.errors += tuple(errors)

        if errors:
            self.status = _('There were errors')
            result = action.failure(data, errors)
        elif errors is not None:
            self.form_reset = True
            result = action.success(data)
        else:
            result = None

        self.form_result = result
Beispiel #49
0
def BooleanSelectWidget(field, request, true=_('on'), false=_('off')):
    vocabulary = SimpleVocabulary.fromItems( ((true, True), (false, False)) )
    widget = SelectWidget(field, vocabulary, request)
    widget.size = 2
    widget.required = False
    return widget


def BooleanDropdownWidget(field, request, true=_('on'), false=_('off')):
    vocabulary = SimpleVocabulary.fromItems( ((true, True), (false, False)) )
    widget = DropdownWidget(field, vocabulary, request)
    widget.required = False
    return widget


_msg_true = _("True")
_msg_false = _("False")

class BooleanDisplayWidget(DisplayWidget):

    def __call__(self):
        if self._renderedValueSet():
            value = self._data
        else:
            value = self.context.default
        if value:
            return _msg_true
        else:
            return _msg_false
Beispiel #50
0
    def __call__(self):
        result = ['<div class="value">']
        value = self._value()
        field = self.context

        term = None
        if value == field.missing_value:
            result.append('  <div class="row">')
            result.append('    <div class="label">')
            result.append(u'     ' +
                          self._translate(_("SourceDisplayWidget-label",
                                            default="Selected"))
                          )
            result.append('    </div>')
            result.append('    <div class="field">')
            result.append(u'     ' +
                          self._translate(_("SourceDisplayWidget-missing",
                                            default="Nothing"))
                          )
            result.append('    </div>')
            result.append('  </div>')
        else:
            try:
                term = self.terms.getTerm(value)
            except LookupError:
                result.append(u'  ' +
                              self._translate(_("SourceDisplayWidget-missing",
                                                default="Nothing Valid"))
                              )
            else:
                result.append('  <div class="row">')
                result.append('    <div class="label">')
                result.append(u'     ' +
                              self._translate(_("SourceDisplayWidget-label",
                                                default="Selected"))
                              )
                result.append('    </div>')
                result.append('    <div class="field">')
                result.append(u'     ' + self.renderTermForDisplay(term))
                result.append('    </div>')
                result.append('  </div>')
                result.append(
                    '  <input type="hidden" name="%s" value=%s />'
                    % (self.name, xml.sax.saxutils.quoteattr(term.token)))

        result.append('  <input type="hidden" name="%s.displayed" value="y" />'
                      % self.name)

        result.append('  <div class="queries">')
        for name, queryview in self.queryviews:
            result.append('    <div class="query">')
            result.append('      <div class="queryinput">')
            result.append(queryview.render(name))
            result.append('      </div> <!-- queryinput -->')

            qresults = queryview.results(name)
            if qresults:
                result.append('      <div class="queryresults">\n%s' %
                              self._renderResults(qresults, name))
                result.append('      </div> <!-- queryresults -->')
            result.append('    </div> <!-- query -->')
        result.append('  </div> <!-- queries -->')
        result.append('</div> <!-- value -->')
        return '\n'.join(result)
Beispiel #51
0
def BooleanRadioWidget(field, request, true=_('on'), false=_('off')):
    vocabulary = SimpleVocabulary.fromItems( ((true, True), (false, False)) ) 
    widget = RadioWidget(field, vocabulary, request)
    widget.required = False
    return widget
Beispiel #52
0
 def _toFieldValue(self, input):
     if input:
         try:
             return self.convertTokensToValues([input])[0]
         except InvalidValue, e:
             raise ConversionError(_("Invalid value"), e)