from flask_babel import lazy_gettext as _
from markupsafe import Markup
from wtforms import widgets
from wtforms.widgets import html_params
class DatePickerWidget:
"""
Date Time picker from Eonasdan GitHub
"""
data_template = (
'
'
' '
" "
' '
"
"
)
def __call__(self, field, **kwargs):
kwargs.setdefault("id", field.id)
kwargs.setdefault("name", field.name)
if not field.data:
field.data = ""
template = self.data_template
return Markup(
template % {"text": html_params(type="text", value=field.data, **kwargs)}
)
class DateTimePickerWidget:
"""
Date Time picker from Eonasdan GitHub
"""
data_template = (
''
' '
" "
' '
"
"
)
def __call__(self, field, **kwargs):
kwargs.setdefault("id", field.id)
kwargs.setdefault("name", field.name)
if not field.data:
field.data = ""
template = self.data_template
return Markup(
template % {"text": html_params(type="text", value=field.data, **kwargs)}
)
class BS3TextFieldWidget(widgets.TextInput):
def __call__(self, field, **kwargs):
kwargs["class"] = "form-control"
if field.label:
kwargs["placeholder"] = field.label.text
if "name_" in kwargs:
field.name = kwargs["name_"]
return super(BS3TextFieldWidget, self).__call__(field, **kwargs)
class BS3TextAreaFieldWidget(widgets.TextArea):
def __call__(self, field, **kwargs):
kwargs["class"] = "form-control"
kwargs["rows"] = 3
if field.label:
kwargs["placeholder"] = field.label.text
return super(BS3TextAreaFieldWidget, self).__call__(field, **kwargs)
class BS3PasswordFieldWidget(widgets.PasswordInput):
def __call__(self, field, **kwargs):
kwargs["class"] = "form-control"
if field.label:
kwargs["placeholder"] = field.label.text
return super(BS3PasswordFieldWidget, self).__call__(field, **kwargs)
class Select2AJAXWidget:
data_template = " "
def __init__(self, endpoint, extra_classes=None, style=None):
self.endpoint = endpoint
self.extra_classes = extra_classes
self.style = style or ""
def __call__(self, field, **kwargs):
kwargs.setdefault("id", field.id)
kwargs.setdefault("name", field.name)
kwargs.setdefault("endpoint", self.endpoint)
if self.style:
kwargs.setdefault("style", self.style)
input_classes = "input-group my_select2_ajax"
if self.extra_classes:
input_classes = input_classes + " " + self.extra_classes
kwargs.setdefault("class", input_classes)
if not field.data:
field.data = ""
template = self.data_template
return Markup(
template % {"text": html_params(type="text", value=field.data, **kwargs)}
)
class Select2SlaveAJAXWidget:
data_template = ' '
def __init__(self, master_id, endpoint, extra_classes=None, style=None):
self.endpoint = endpoint
self.master_id = master_id
self.extra_classes = extra_classes
self.style = style or ""
def __call__(self, field, **kwargs):
kwargs.setdefault("id", field.id)
kwargs.setdefault("name", field.name)
kwargs.setdefault("endpoint", self.endpoint)
kwargs.setdefault("master_id", self.master_id)
if self.style:
kwargs.setdefault("style", self.style)
input_classes = "input-group my_select2_ajax"
if self.extra_classes:
input_classes = input_classes + " " + self.extra_classes
kwargs.setdefault("class", input_classes)
if not field.data:
field.data = ""
template = self.data_template
return Markup(
template % {"text": html_params(type="text", value=field.data, **kwargs)}
)
class Select2Widget(widgets.Select):
extra_classes = None
def __init__(self, extra_classes=None, style=None):
self.extra_classes = extra_classes
self.style = style
super(Select2Widget, self).__init__()
def __call__(self, field, **kwargs):
kwargs["class"] = "my_select2 form-control"
if self.extra_classes:
kwargs["class"] = kwargs["class"] + " " + self.extra_classes
if self.style:
kwargs["style"] = self.style
kwargs["data-placeholder"] = _("Select Value")
if "name_" in kwargs:
field.name = kwargs["name_"]
return super(Select2Widget, self).__call__(field, **kwargs)
class Select2ManyWidget(widgets.Select):
extra_classes = None
def __init__(self, extra_classes=None, style=None):
self.extra_classes = extra_classes
self.style = style
super(Select2ManyWidget, self).__init__()
def __call__(self, field, **kwargs):
kwargs["class"] = "my_select2 form-control"
if self.extra_classes:
kwargs["class"] = kwargs["class"] + " " + self.extra_classes
if self.style:
kwargs["style"] = self.style
kwargs["data-placeholder"] = _("Select Value")
kwargs["multiple"] = "true"
if "name_" in kwargs:
field.name = kwargs["name_"]
return super(Select2ManyWidget, self).__call__(field, **kwargs)