コード例 #1
0
    def __call__(self, field, **kwargs):
        field_id = kwargs.pop('id', field.id)
        html = []
        allowed_format = ['%d', '%m', '%Y']
        surrounded_div = kwargs.pop('surrounded_div', None)
        css_class = kwargs.get('class', None)

        for date_format in field.format.split():
            if date_format in allowed_format:
                choices = self.FORMAT_CHOICES[date_format]
                id_suffix = date_format.replace('%', '-')
                id_current = field_id + id_suffix

                if css_class is not None:  # pragma: no cover
                    select_class = "{} {}".format(
                        css_class, self.FORMAT_CLASSES[date_format]
                    )
                else:
                    select_class = self.FORMAT_CLASSES[date_format]

                kwargs['class'] = select_class

                try:
                    del kwargs['placeholder']
                except KeyError:
                    pass

                if surrounded_div is not None:
                    html.append('<div class="%s">' % surrounded_div)

                html.append('<select %s>' % html_params(name=field.name,
                                                        id=id_current,
                                                        **kwargs))

                if field.data:
                    current_value = int(field.data.strftime(date_format))
                else:
                    current_value = None

                for value, label in choices:
                    selected = (value == current_value)

                    # Defaults to blank
                    if value == 1 or value == 1930:
                        html.append(
                            Select.render_option("None", " ", selected)
                        )

                    html.append(Select.render_option(value, label, selected))

                html.append('</select>')

                if surrounded_div is not None:
                    html.append("</div>")

            html.append(' ')

        return HTMLString(''.join(html))
コード例 #2
0
ファイル: fields.py プロジェクト: eirnym/flaskbb
    def __call__(self, field, **kwargs):  # noqa: C901
        field_id = kwargs.pop('id', field.id)
        html = []
        allowed_format = ['%d', '%m', '%Y']
        surrounded_div = kwargs.pop('surrounded_div', None)
        css_class = kwargs.get('class', None)

        for date_format in field.format.split():
            if date_format in allowed_format:
                choices = self.FORMAT_CHOICES[date_format]
                id_suffix = date_format.replace('%', '-')
                id_current = field_id + id_suffix

                if css_class is not None:  # pragma: no cover
                    select_class = "{} {}".format(
                        css_class, self.FORMAT_CLASSES[date_format]
                    )
                else:
                    select_class = self.FORMAT_CLASSES[date_format]

                kwargs['class'] = select_class

                try:
                    del kwargs['placeholder']
                except KeyError:
                    pass

                if surrounded_div is not None:
                    html.append('<div class="%s">' % surrounded_div)

                html.append('<select %s>' % html_params(name=field.name,
                                                        id=id_current,
                                                        **kwargs))

                if field.data:
                    current_value = int(field.data.strftime(date_format))
                else:
                    current_value = None

                for value, label in choices:
                    selected = (value == current_value)

                    # Defaults to blank
                    if value == 1 or value == 1930:
                        html.append(
                            Select.render_option("None", " ", selected)
                        )

                    html.append(Select.render_option(value, label, selected))

                html.append('</select>')

                if surrounded_div is not None:
                    html.append("</div>")

            html.append(' ')

        return HTMLString(''.join(html))
コード例 #3
0
ファイル: test_widgets.py プロジェクト: zengqiu/wtforms
    def test_select(self, select_dummy_field):
        setattr(select_dummy_field, "name", "f")

        assert (
            Select()(select_dummy_field) ==
            '<select id="" name="f"><option selected value="foo">lfoo</option>'
            '<option value="bar">lbar</option></select>')

        assert (Select(multiple=True)(select_dummy_field) ==
                '<select id="" multiple name="f"><option selected value="foo">'
                'lfoo</option><option value="bar">lbar</option></select>')
コード例 #4
0
    def __call__(self, field, **kwargs):
        field_id = kwargs.pop('id', field.id)
        html = []
        allowed_formats = ['%d', '%m', '%Y', '%H', '%M', '%S']
        for format in field.format.split():
            if format in allowed_formats:
                choices = self.FORMAT_CHOICES[format]
                id_suffix = format.replace('%', '-')
                id_current = field_id + id_suffix
                kwargs['class'] = self.FORMAT_CLASSES[format]
                try:
                    del kwargs['placeholder']
                except:
                    pass
                html.append(
                    '<select %s>' %
                    html_params(name=field.name, id=id_current, **kwargs))
                if field.data:
                    current_value = int(field.data.strftime(format))
                else:
                    current_value = int(datetime.now().strftime(format))
                for value, label in choices:
                    selected = (value == current_value)
                    html.append(Select.render_option(value, label, selected))
                html.append('</select>')
            else:
                html.append(format)
                html.append(
                    '<input type="hidden" value="{0}" {1}></input>'.format(
                        format,
                        html_params(name=field.name, id=id_current, **kwargs)))
            html.append(' ')

        return HTMLString(''.join(html))
コード例 #5
0
ファイル: test_widgets.py プロジェクト: zengqiu/wtforms
    def test_render_option(self):
        # value, label, selected
        assert (Select.render_option(
            "bar", "foo", False) == '<option value="bar">foo</option>')

        assert (Select.render_option(
            True, "foo", True) == '<option selected value="True">foo</option>')

        assert (
            Select.render_option("bar", '<i class="bar"></i>foo', False) ==
            '<option value="bar">&lt;i class=&#34;bar&#34;&gt;&lt;/i&gt;foo</option>'
        )

        assert (Select.render_option(
            "bar", Markup('<i class="bar"></i>foo'),
            False) == '<option value="bar"><i class="bar"></i>foo</option>')
コード例 #6
0
	def __call__(self, field, **kwargs):
		field_id = kwargs.pop('id', field.id)
		html = []
		allowed_formats = ['%d', '%m', '%Y', '%H', '%M', '%S']
		for format in field.format.split():
			if format in allowed_formats:	
				choices = self.FORMAT_CHOICES[format]
				id_suffix = format.replace('%', '-')
				id_current = field_id + id_suffix
				kwargs['class'] = self.FORMAT_CLASSES[format]
				try:
					del kwargs['placeholder']
				except:
					pass
				html.append('<select %s>' % html_params(name=field.name, id=id_current, **kwargs))
				if field.data:
					current_value = int(field.data.strftime(format))
				else:
					current_value = int(datetime.now().strftime(format))
				for value, label in choices:
					selected = (value == current_value)
					html.append(Select.render_option(value, label, selected))
				html.append('</select>')
			else:
				html.append(format)
				html.append('<input type="hidden" value="{0}" {1}></input>'.format(format, html_params(name=field.name, id=id_current, **kwargs)))
			html.append(' ')
			
		return HTMLString(''.join(html))
コード例 #7
0
class IndicoEnumSelectField(SelectFieldBase):
    """Select field backed by a :class:`TitledEnum`"""

    widget = Select()

    def __init__(self, label=None, validators=None, enum=None, sorted=False, only=None, skip=None, none=None,
                 titles=None, **kwargs):
        super(IndicoEnumSelectField, self).__init__(label, validators, **kwargs)
        self.enum = enum
        self.sorted = sorted
        self.only = only
        self.skip = skip or set()
        self.none = none
        self.titles = titles

    def iter_choices(self):
        items = (x for x in self.enum if x not in self.skip and (self.only is None or x in self.only))
        if self.sorted:
            items = sorted(items, key=attrgetter('title'))
        if self.none is not None:
            yield ('', self.none, self.data is None)
        for item in items:
            title = item.title if self.titles is None else self.titles[item]
            yield (item.name, title, item == self.data)

    def process_formdata(self, valuelist):
        if valuelist:
            if not valuelist[0] and self.none is not None:
                self.data = None
            else:
                try:
                    self.data = self.enum[valuelist[0]]
                except KeyError:
                    raise ValueError(self.gettext('Not a valid choice'))
コード例 #8
0
    def __call__(self, field, **kwargs):
        field_id = kwargs.pop('id', field.id)
        html = []
        allowed_format = ['%d', '%m', '%Y', '%H', '%I', '%M', '%p']

        # Handle custom year ranges
        startyear = 2010
        endyear = 2020
        if 'startyear' in field.description:
            startyear = int(field.description['startyear'])
        if 'endyear' in field.description:
            endyear = int(field.description['endyear'])

        self.FORMAT_CHOICES['%Y'] = [(x, str(x))
                                     for x in range(endyear, startyear, -1)]

        html.append('<div class="form-inline">')
        for format in field.format.split():
            if (format in allowed_format):
                choices = self.FORMAT_CHOICES.get(format,
                                                  [(None, 'Invalid Format')])
                id_suffix = format.replace('%', '-')
                id_current = field_id + id_suffix

                kwargs['class'] = self.FORMAT_CLASSES.get(
                    'format', 'form-control')
                #        kwargs['class'] = 'form-control'
                kwargs['style'] = self.FORMAT_STYLES.get(format, '')
                try:
                    del kwargs['placeholder']
                except:
                    pass

                html.append(
                    '<select %s>' %
                    html_params(name=field.name, id=id_current, **kwargs))

                if field.data:
                    try:
                        current_value = int(field.data.strftime(format))
                    except:
                        current_value = field.data.strftime(format)
                else:
                    current_value = None

                for value, label in choices:
                    selected = (value == current_value)
                    html.append(Select.render_option(value, label, selected))
                html.append('</select>')
            else:
                html.append(format)
                html.append(
                    '<input type="hidden" value="' + format + '" %s></input>' %
                    html_params(name=field.name, id=id_current, **kwargs))

            html.append(' ')

        html.append('</div>')

        return HTMLString(''.join(html))
コード例 #9
0
ファイル: test_widgets.py プロジェクト: wtforms/wtforms
    def test_render_option(self):
        # value, label, selected
        assert (
            Select.render_option("bar", "foo", False)
            == '<option value="bar">foo</option>'
        )

        assert (
            Select.render_option(True, "foo", True)
            == '<option selected value="True">foo</option>'
        )

        assert (
            Select.render_option("bar", '<i class="bar"></i>foo', False)
            == '<option value="bar">&lt;i class=&#34;bar&#34;&gt;&lt;/i&gt;foo</option>'
        )

        assert (
            Select.render_option("bar", Markup('<i class="bar"></i>foo'), False)
            == '<option value="bar"><i class="bar"></i>foo</option>'
        )
コード例 #10
0
ファイル: widgets.py プロジェクト: ketaro/disboard
  def __call__(self, field, **kwargs):
    field_id        = kwargs.pop('id', field.id)
    html            = []
    allowed_format  = ['%d', '%m', '%Y', '%H', '%I', '%M', '%p']

    # Handle custom year ranges
    startyear = 2010
    endyear = 2020
    if 'startyear' in field.description:
        startyear = int(field.description['startyear'])
    if 'endyear' in field.description:
        endyear = int(field.description['endyear'])

    self.FORMAT_CHOICES['%Y'] = [(x, str(x)) for x in range(endyear, startyear, -1)]


    html.append('<div class="form-inline">')
    for format in field.format.split():
      if (format in allowed_format):
        choices     = self.FORMAT_CHOICES.get(format, [(None, 'Invalid Format')])
        id_suffix   = format.replace('%', '-')
        id_current  = field_id + id_suffix

        kwargs['class'] = self.FORMAT_CLASSES.get('format', 'form-control')
#        kwargs['class'] = 'form-control'
        kwargs['style'] = self.FORMAT_STYLES.get(format, '')
        try: del kwargs['placeholder']
        except: pass

        html.append('<select %s>' % html_params(name=field.name, id=id_current, **kwargs))

        if field.data:
            try: current_value = int(field.data.strftime(format))
            except: current_value = field.data.strftime(format)
        else:
            current_value = None

        for value, label in choices:
          selected = (value == current_value)
          html.append(Select.render_option(value, label, selected))
        html.append('</select>')
      else:
        html.append(format)
        html.append('<input type="hidden" value="'+format+'" %s></input>' % html_params(name=field.name, id=id_current, **kwargs))

      html.append(' ')

    html.append('</div>')

    return HTMLString(''.join(html))
コード例 #11
0
    def __call__(self, field, **kwargs):
        field_id = kwargs.pop('id', field.id)
        html = []
        for format in field.format.split():
            choices = self.FORMAT_CHOICES[format]
            id_suffix = format.replace('%', '-')
            params = dict(kwargs, name=field.name, id=field_id + id_suffix)
            html.append('<select %s>' % html_params())
            if field.data:
                current_value = int(field.data.strftime(format))
            else:
                current_value = None
            for value, label in choices:
                selected = (value == current_value)
                html.append(Select.render_option(value, label, selected))
            html.append('</select>')

        return HTMLString(''.join(html))
コード例 #12
0
ファイル: Forms.py プロジェクト: MuShMe/MuShMe
    def __call__(self, field, **kwargs):
        field_id = kwargs.pop('id', field.id)
        html = []
        for format in field.format.split():
            choices = self.FORMAT_CHOICES[format]
            id_suffix = format.replace('%', '-')
            params = dict(kwargs, name=field.name, id=field_id + id_suffix)
            html.append('<select %s>' % html_params())
            if field.data:
                current_value = int(field.data.strftime(format))
            else:
                current_value = None
            for value, label in choices:
                selected = (value == current_value)
                html.append(Select.render_option(value, label, selected))
            html.append('</select>')

        return HTMLString(''.join(html))