Beispiel #1
0
	def __call__(self, field, **kwargs):
		kwargs.setdefault('id', field.id)
		html = ['<%s %s>' % (self.html_tag, html_params(**kwargs))]
		delete_btn = HTMLString('<a href="#" onclick="remove_task(this)" class="btn btn-danger"><i class="icon-trash"></i> Remove</a>')
		for subfield in field:
			html.append(
				'<li>%(field)s %(delete_btn)s</li>' %
					{ 'field': subfield()
					, 'delete_btn': delete_btn
					}
				)
		html.append('</%s>' % self.html_tag)
		lst = HTMLString(''.join(html))
		button = HTMLString('<input class="btn" type="button" onclick="new_task(); return true;" value="Add" />')
		return lst + button
Beispiel #2
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))
Beispiel #3
0
 def wrapped(self, field, *args, **kwargs):
     html = "{label}{errors}{original}<small>{description}</small>".format(
         label=field.label(class_='control-label'),
         original=f(self, field, *args, **kwargs),
         errors=render_field_errors(field) or '',
         description=render_field_description(field))
     return HTMLString(html)
Beispiel #4
0
 def render_option(cls, value, label, selected, **kwargs):
     value, tracker_id = value
     options = dict(kwargs, value=value)
     if selected:
         options['selected'] = True
     options['data-tracker_id'] = tracker_id
     return HTMLString('<option %s>%s</option>' % (html_params(**options), escape(text_type(label))))
Beispiel #5
0
 def __call__(self, field, **kwargs):
     # Allow passing title= or alternately use field.description
     title = kwargs.pop('title', field.label.text or '')
     params = html_params(title=title, id=field.name, **kwargs)
     html = (('<textarea %s class="example"\n'
              '     rows="1" cols="80" name="%s"\n'
              '     placeholder="%s"></textarea>\n') %
             (params, field.name, field.description or '...'))
     if self.choices == '[]':
         script_params = ('      plugins : "tags",\n'
                          '      tagsItems: %s,\n') % json.dumps(field.data)
     else:
         script_params = (
             '      tagsItems: %s,\n'
             '      plugins : "autocomplete suggestions filter tags",\n'
             '      filterItems: %s,\n'
             '      suggestions: %s,\n') % (json.dumps(
                 field.data), self.choices, self.choices)
     script = ('     <script type="text/javascript">\n'
               '       $("#%s")\n'
               '       .textext({\n'
               '%s'
               '       });\n'
               '     </script>') % (field.name, script_params)
     return HTMLString(html + script)
Beispiel #6
0
 def render_basic(self, field, **kwargs):
     html = [field.label(), '<br/>', self.widget(field, **kwargs)]
     help_block = Markup(u'<span class="help-block">{0}</span>')
     if field.description:
         html.append(help_block.format(field.description))
     html.extend(help_block.format(e) for e in field.errors)
     return HTMLString(u''.join(html))
Beispiel #7
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))
Beispiel #8
0
    def __call__(self, field, **kwargs):
        field_id = kwargs.pop('id', field.id)
        html = []

        html.append(
            '<div class="btn-group btn-group-md" style="border: none;" data-toggle="buttons">'
        )

        if field.data:
            current_value = field.data
        else:
            current_value = None

        for value, label in field.choices:
            active = ''
            checked = ''
            if (current_value and str(value) in ['1', 'Yes', 'True']) or \
               (not current_value and str(value) in ['0', 'No', 'False', 'None']):
                active = ' active'
                checked = ' checked'


#        html.append('%r == %r' % (str(value), current_value))
            html.append('<label class="btn btn-default%s">' % active)
            html.append('<input type="radio" name="%s" value="%s" %s /> %s' %
                        (field_id, value, checked, label))
            html.append("</label>\n")

        html.append('</div>')

        return HTMLString(''.join(html))
Beispiel #9
0
 def __call__(self, field, **kwargs):
     kwargs.setdefault('id', field.id)
     kwargs.setdefault('type', self.input_type)
     if 'value' not in kwargs:
         kwargs['value'] = field._value()
     return HTMLString(u'<input %s disabled>' %
                       self.html_params(name=field.name, **kwargs))
Beispiel #10
0
    def render_option(cls, value, label, mixed):
        """
        Render option as HTML tag, but not forget to wrap options into
        ``optgroup`` tag if ``label`` var is ``list`` or ``tuple``.
        """
        if isinstance(label, (list, tuple)):
            children = []

            for item_value, item_label in label:
                item_html = cls.render_option(item_value, item_label, mixed)
                children.append(item_html)

            html = u'<optgroup label="%s">%s</optgroup>'
            data = (escape(unicode(value)), u'\n'.join(children))
        else:
            coerce_func, data = mixed
            selected = coerce_func(value) == data

            options = {'value': value}

            if selected:
                options['selected'] = u'selected'

            html = u'<option %s>%s</option>'
            data = (html_params(**options), escape(unicode(label)))

        return HTMLString(html % data)
Beispiel #11
0
 def __call__(self, field, **kwargs):
     kwargs.setdefault('id', field.id)
     kwargs.setdefault('type', self.input_type)
     icon_class = kwargs.pop('icon_class', None)
     icon_string = '<i class="fa %s"></i> ' % icon_class if icon_class else ''
     return HTMLString('<button %s>%s%s</button>' % (self.html_params(
         name=field.name, **kwargs), icon_string, field.label.text))
Beispiel #12
0
    def __call__(self, field, **kwargs):
        #if dict kwargs doesn't have id key then initialize it
        kwargs.setdefault('id', field.id)
        #create column tag string of class property html_tag
        column_tag = '<%s class="eight wide column">' % (self.html_tag)
        #create list tag string of class property html_tag with arguments provided
        list_tag = '<%s %s>' % (self.html_tag, html_params(**kwargs))
        html = []
        #loop through fields list by creating idx value and corresponding subfield
        for idx, subfield in enumerate(field):
            #if module remainder of idx by num_items_per_column is equal to 0 then
            if idx % (self.num_items_per_column) == 0:
                #if idx is more than 0
                if idx > 0:
                    #add html tag string to html list
                    html.append('</%s>' % self.html_tag)
                    html.append('</%s>' % self.html_tag)
#add column tag string to html list
                html.append(column_tag)
                #add list tag string to html list
                html.append(list_tag)
#if prefix label is present
            if self.prefix_label:
                #add to html list div class definition
                html.append('<div class="item">%s %s</div>' %
                            (subfield.label, subfield()))
            else:
                html.append('<div class="item">%s %s</div>' %
                            (subfield(), subfield.label))

        html.append('</%s>' % self.html_tag)
        html.append('</%s>' % self.html_tag)
        #return all as one html string created out of html list
        return HTMLString(''.join(html))
Beispiel #13
0
    def __call__(self, field, **kwargs):
        kwargs.setdefault('id', field.id)
        if self.multiple:
            kwargs['multiple'] = True

        # addition_fields = kwargs.pop('addition_fields', None)
        val, label = None, None
        for val, label, selected in field.iter_choices():
            # html.append(self.render_option(val, label, selected))
            if selected:
                break
        # print val, label, selected, type(val), type(label), type(selected)
        kwargs['value'] = val
        html = [
            u'<input type="hidden" %s>' %
            html_params(name=field.name, **kwargs)
        ]
        # try:
        #     if label.__class__.__name__ == 'Project':
        #         html.append(u'<input type="hidden" %s>' % html_params(name='project_type', id='project_type', value=label.type))
        # except Exception:
        #     pass

        # html.append(u'<label class="control-label">%s</label>' % label)
        # html.append(u'<label class="control-label">%s</label>' % label)
        html.append(u'<p class="form-control-static">%s</p>' % label)
        return HTMLString(u''.join(html))
Beispiel #14
0
    def __call__(self, field, **kwargs):

        kwargs.setdefault('id', field.id)
        value = field._value()
        c = kwargs.pop('class', '') or kwargs.pop('class_', '')
        kwargs['class'] = u'%s %s' % (self.upload_class, c)

        html = ''
        hidden_field = ''

        if value:
            upload = field.data
            file_url = upload.file_url()
            thumb_url = upload.thumbnail_url()

            kwargs.setdefault('value', value)

            if upload.temp:
                hidden_field = '<input id="%s-plupload-aux" type="text" style="display: none;" name="%s-plupload-aux" value="%s">' % (
                    field.name, field.name, upload.uuid)

            html = """
            <ul class="thumbnails aprovapp-form-thumb">
                <li id="gallery" data-toggle="modal-gallery" data-target="#modal-gallery">
                    <a href="%s" class="thumbnail" data-gallery="gallery"><img src="%s" alt="%s"/></a>
                </li>
            </ul>""" % (file_url, thumb_url, upload.original_filename)

        return HTMLString('<input %s>' %
                          html_params(name=field.name, type='file', **kwargs) +
                          hidden_field + html)
Beispiel #15
0
    def __call__(self, field, **kwargs):
        kwargs["class"] = u"my_select2 form-control"
        if self.extra_classes:
            kwargs["class"] = kwargs["class"] + " " + self.extra_classes
        kwargs["style"] = self.style
        kwargs["data-placeholder"] = _("Select Value")
        if "name_" in kwargs:
            field.name = kwargs["name_"]

        kwargs.setdefault('id', field.id)
        if self.multiple:
            kwargs['multiple'] = True
        if 'required' not in kwargs and 'required' in getattr(
                field, 'flags', []):
            kwargs['required'] = True
        if self.new_web:
            fun = "set_change('%s')" % field.name
        else:
            fun = ''

        html = [
            '''<select %s  id=%s onchange="%s">''' %
            (html_params(name=field.name, **kwargs), field.name, fun)
        ]
        for val, label, selected in field.iter_choices():
            if self.value:
                if str(val) == str(self.value):
                    html.append(self.render_option(val, label, selected=True))
                else:
                    html.append(self.render_option(val, label, selected=False))
            else:
                html.append(self.render_option(val, label, selected))
        html.append('</select>')
        return HTMLString(''.join(html))
Beispiel #16
0
 def render_option(cls, value, label, selected, **kwargs):
     options = dict(kwargs, value=value)
     options['type'] = 'checkbox'
     if selected:
         options['checked'] = True
     return HTMLString(
         '<div class="checkbox"><label><input %s> %s</label></div>' %
         (html_params(**options), escape(text_type(label))))
Beispiel #17
0
 def __call__(self, field, **kwargs):
     kwargs.setdefault("id", field.id)
     kwargs.setdefault("data-dojo-type", self.dojo_type)
     return HTMLString("<textarea %s %s>%s</textarea>" % (
         html_params(name=field.name, **kwargs),
         get_validation_str(field),
         escape(text_type(field._value())),
     ))
Beispiel #18
0
 def __call__(self, field, **kwargs):
     kwargs.setdefault('type', 'text')
     kwargs['type'] = 'password' if field.is_password else 'text'
     params = html_params(placeholder=field.placeholder,
                          id=field.label_text,
                          **kwargs)
     html = '<div class=\"form_group\"><label for=\"%s\">%s</label><input class=\"form-control\" %s></div>'
     return HTMLString(html % (field.label_text, field.label_text, params))
Beispiel #19
0
 def wrapped(self, field, *args, **kwargs):
     """Closure, die bootstrap-gemässes HTML um ein Feld baut."""
     html = '{label}{errors}{original}{description}'.format(
         label=field.label(),
         errors=render_field_errors(field) or '',
         original=f(self, field, *args, **kwargs),
         description=render_field_description(field))
     return HTMLString(html)
Beispiel #20
0
 def __call__(self, field, label_args=None, field_args=None, **kwargs):
     label_args = label_args or {}
     field_args = field_args or {}
     html = []
     for subfield in field:
         fmt = '{0} {1}' if self.prefix_label else '{1} {0}'
         html.append(fmt.format(subfield.label(**label_args), subfield(**field_args)))
     return HTMLString(self.separator.join(html))
Beispiel #21
0
 def __call__(self, field, **kwargs):
     default_widget = widgets.FileInput()
     kwargs.pop('class_', None)
     return HTMLString(
         render_template('meetings/registration/_image_widget.html',
                         field=field,
                         default_widget=default_widget,
                         field_kwargs=kwargs))
Beispiel #22
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))
Beispiel #23
0
def render_field_errors(field):
    """Render field errors as html."""
    if field.errors:
        html = """<p class="help-block">Error: {errors}</p>""".format(
            errors='. '.join(field.errors)
        )
        return HTMLString(html)

    return None
Beispiel #24
0
def render_field_description(field):
    """Render a field description as HTML."""
    # https://getbootstrap.com/docs/4.0/components/forms/#help-text
    if hasattr(field, 'description') and field.description != '':
        html = '<small class="form-text text-muted">field.description}</p>'
        html = html.format(field=field)
        return HTMLString(html)

    return ''
Beispiel #25
0
def render_field_errors(field):
    """Render field errors as html."""
    # https://getbootstrap.com/docs/4.0/components/forms/#server-side
    if field.errors:
        html = '<div class="invalid-feedback">{errors}</div>'.format(
            errors='. '.join(field.errors))
        return HTMLString(html)

    return None
Beispiel #26
0
 def __call__(self, field, **kwargs):
     kwargs.setdefault('id', field.id)
     html=''
     html+='<div class=\"btn-toolbar m-b-sm btn-editor\" data-role=\"editor-toolbar\"data-target=\"#editor\"><div class=\"btn-group\"><a class=\"btn btn-default btn-sm dropdown-toggle\" data-toggle=\"dropdown\"        title=\"Font\"><i class=\"fa fa-font\"></i><b class=\"caret\"></b></a><ul class=\"dropdown-menu\"></ul></div><div class=\"btn-group\"><a class=\"btn btn-default btn-sm dropdown-toggle\" data-toggle=\"dropdown\"        title=\"Font Size\"><i class=\"fa fa-text-height\"></i>            &nbsp;<b class=\"caret\"></b></a><ul class=\"dropdown-menu\"><li><a data-edit=\"fontSize 5\"><font size=\"5\">                        Huge</font></a></li><li><a data-edit=\"fontSize 3\"><font size=\"3\">                        Normal</font></a></li><li><a data-edit=\"fontSize 1\"><font size=\"1\">                        Small</font></a></li></ul></div><div class=\"btn-group\"><a class=\"btn btn-default btn-sm\" data-edit=\"bold\" title=\"Bold (Ctrl/Cmd+B)\"><i class=\"fa fa-bold\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"italic\" title=\"Italic (Ctrl/Cmd+I)\"><i class=\"fa fa-italic\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"strikethrough\" title=\"Strikethrough\"><i class=\"fa fa-strikethrough\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"underline\" title=\"Underline (Ctrl/Cmd+U)\"><i class=\"fa fa-underline\"></i></a></div><div class=\"btn-group\"><a class=\"btn btn-default btn-sm\" data-edit=\"insertunorderedlist\" title=\"Bullet list\"><i class=\"fa fa-list-ul\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"insertorderedlist\" title=\"Number list\"><i class=\"fa fa-list-ol\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"outdent\" title=\"Reduce indent (Shift+Tab)\"><i class=\"fa fa-dedent\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"indent\" title=\"Indent (Tab)\"><i class=\"fa fa-indent\"></i></a></div><div class=\"btn-group\"><a class=\"btn btn-default btn-sm\" data-edit=\"justifyleft\" title=\"Align Left (Ctrl/Cmd+L)\"><i class=\"fa fa-align-left\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"justifycenter\" title=\"Center (Ctrl/Cmd+E)\"><i class=\"fa fa-align-center\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"justifyright\" title=\"Align Right (Ctrl/Cmd+R)\"><i class=\"fa fa-align-right\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"justifyfull\" title=\"Justify (Ctrl/Cmd+J)\"><i class=\"fa fa-align-justify\"></i></a></div><div class=\"btn-group\"><a class=\"btn btn-default btn-sm dropdown-toggle\" data-toggle=\"dropdown\"        title=\"Hyperlink\"><i class=\"fa fa-link\"></i></a><div class=\"dropdown-menu\"><div class=\"input-group m-l-xs m-r-xs\"><input class=\"form-control input-sm\" placeholder=\"URL\" type=\"text\" data-edit=\"createLink\"                /><div class=\"input-group-btn\"><button class=\"btn btn-default btn-sm\" type=\"button\">                        Add</button></div></div></div><a class=\"btn btn-default btn-sm\" data-edit=\"unlink\" title=\"Remove Hyperlink\"><i class=\"fa fa-cut\"></i></a></div><div class=\"btn-group hide\"><a class=\"btn btn-default btn-sm\" title=\"Insert picture (or just drag & drop)\"        id=\"pictureBtn\"><i class=\"fa fa-picture-o\"></i></a><input type=\"file\" data-role=\"magic-overlay\" data-target=\"#pictureBtn\"        data-edit=\"insertImage\" /></div><div class=\"btn-group\"><a class=\"btn btn-default btn-sm\" data-edit=\"undo\" title=\"Undo (Ctrl/Cmd+Z)\"><i class=\"fa fa-undo\"></i></a><a class=\"btn btn-default btn-sm\" data-edit=\"redo\" title=\"Redo (Ctrl/Cmd+Y)\"><i class=\"fa fa-repeat\"></i></a></div></div>'
     html+='<textarea class=\"hide flask-wysiwyg\"   data-editor=\"editor\" %s>%s</textarea>'
     html+='<div id=\"editor\"   style=\"overflow:scroll;height:150px;max-height:150px\"  class="bootstrap-wysiwyg form-control" >%s</div>'
     
     
     return HTMLString(html % (html_params(name=field.name, **kwargs), escape(text_type(field._value())),escape(text_type(field._value()))))
Beispiel #27
0
    def __call__(self, field, **kwargs):
        kwargs.setdefault("id", field.id)
        kwargs.setdefault("data-dojo-type", self.dojo_type)

        html = ["<select %s>" % html_params(name=field.name, **kwargs)]
        for val, label, selected in field.iter_choices():
            html.append(self.render_option(val, label, selected))
        html.append("</select>")
        return HTMLString("".join(html))
Beispiel #28
0
 def __call__(self, field, **kwargs):
     default_widget = widgets.FileInput()
     kwargs.pop('class_', None)
     return HTMLString(
         render_template('meetings/registration/_document_widget.html',
                         field=field,
                         default_widget=default_widget,
                         participant=getattr(field, '_participant', None),
                         field_kwargs=kwargs))
Beispiel #29
0
    def __call__(self, field, **kwargs):
        kwargs.setdefault("id", field.id)
        kwargs.setdefault("type", self.input_type)
        kwargs.setdefault("data-dojo-type", self.dojo_type)

        if "value" not in kwargs:
            kwargs["value"] = field._value()
        return HTMLString("<input %s>" %
                          self.html_params(name=field.name, **kwargs))
Beispiel #30
0
    def wrapped(self, field, *args, **kwargs):
        classes = ['form-group']
        if field.errors:
            classes.append('has-error')

        html = """<div class="{classes}">{rendered_field}</div>""".format(
            classes=' '.join(classes),
            rendered_field=f(self, field, *args, **kwargs))
        return HTMLString(html)
Beispiel #31
0
# web2py works internally with bytestring, and WTForms uses unicode.
# So here we are trying to monkeypatch WTForms to convert to/from unicode.
# Another option is to ``sys.setdefaultencoding('utf-8')``.

# HACK! In local copy of wtforms.compat text_type redefined to be a subclass of
#       unicode which tries hard not to raise Unicode(En|De)code errors.
import sys
from wtforms_web2py import compat
sys.modules['wtforms.compat'] = compat

# HACK! Monkeypatching to ensure web2py that WTForms' widgets are safe;
#       Also web2py's templates need `str` instead of `unicode`.
from wtforms.fields.core import Field
from wtforms.widgets.core import HTMLString
Field.xml = lambda self: Field.__html__(self).encode('utf-8')
HTMLString.xml = lambda self: HTMLString.__html__(self).encode('utf-8')