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
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))
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)
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))))
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)
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))
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))
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))
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))
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)
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))
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))
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))
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)
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))
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))))
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())), ))
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))
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)
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))
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))
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))
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
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 ''
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
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> <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()))))
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))
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))
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))
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)
# 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')