fieldwidgets.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. from flask_babel import lazy_gettext as _
  2. from markupsafe import Markup
  3. from wtforms import widgets
  4. from wtforms.widgets import html_params
  5. class DatePickerWidget:
  6. """
  7. Date Time picker from Eonasdan GitHub
  8. """
  9. data_template = (
  10. '<div class="input-group date appbuilder_date"'
  11. ' data-provide="datepicker" id="datepicker">'
  12. '<span class="input-group-addon"><i class="fa fa-calendar cursor-hand"></i>'
  13. "</span>"
  14. '<input class="form-control" data-format="yyyy-MM-dd" %(text)s />'
  15. "</div>"
  16. )
  17. def __call__(self, field, **kwargs):
  18. kwargs.setdefault("id", field.id)
  19. kwargs.setdefault("name", field.name)
  20. if not field.data:
  21. field.data = ""
  22. template = self.data_template
  23. return Markup(
  24. template % {"text": html_params(type="text", value=field.data, **kwargs)}
  25. )
  26. class DateTimePickerWidget:
  27. """
  28. Date Time picker from Eonasdan GitHub
  29. """
  30. data_template = (
  31. '<div class="input-group date appbuilder_datetime" '
  32. 'data-provide="datepicker" id="datetimepicker">'
  33. '<span class="input-group-addon"><i class="fa fa-calendar cursor-hand"></i>'
  34. "</span>"
  35. '<input class="form-control" data-format="yyyy-MM-dd hh:mm:ss" %(text)s />'
  36. "</div>"
  37. )
  38. def __call__(self, field, **kwargs):
  39. kwargs.setdefault("id", field.id)
  40. kwargs.setdefault("name", field.name)
  41. if not field.data:
  42. field.data = ""
  43. template = self.data_template
  44. return Markup(
  45. template % {"text": html_params(type="text", value=field.data, **kwargs)}
  46. )
  47. class BS3TextFieldWidget(widgets.TextInput):
  48. def __call__(self, field, **kwargs):
  49. kwargs["class"] = "form-control"
  50. if field.label:
  51. kwargs["placeholder"] = field.label.text
  52. if "name_" in kwargs:
  53. field.name = kwargs["name_"]
  54. return super(BS3TextFieldWidget, self).__call__(field, **kwargs)
  55. class BS3TextAreaFieldWidget(widgets.TextArea):
  56. def __call__(self, field, **kwargs):
  57. kwargs["class"] = "form-control"
  58. kwargs["rows"] = 3
  59. if field.label:
  60. kwargs["placeholder"] = field.label.text
  61. return super(BS3TextAreaFieldWidget, self).__call__(field, **kwargs)
  62. class BS3PasswordFieldWidget(widgets.PasswordInput):
  63. def __call__(self, field, **kwargs):
  64. kwargs["class"] = "form-control"
  65. if field.label:
  66. kwargs["placeholder"] = field.label.text
  67. return super(BS3PasswordFieldWidget, self).__call__(field, **kwargs)
  68. class Select2AJAXWidget:
  69. data_template = "<input %(text)s />"
  70. def __init__(self, endpoint, extra_classes=None, style=None):
  71. self.endpoint = endpoint
  72. self.extra_classes = extra_classes
  73. self.style = style or ""
  74. def __call__(self, field, **kwargs):
  75. kwargs.setdefault("id", field.id)
  76. kwargs.setdefault("name", field.name)
  77. kwargs.setdefault("endpoint", self.endpoint)
  78. if self.style:
  79. kwargs.setdefault("style", self.style)
  80. input_classes = "input-group my_select2_ajax"
  81. if self.extra_classes:
  82. input_classes = input_classes + " " + self.extra_classes
  83. kwargs.setdefault("class", input_classes)
  84. if not field.data:
  85. field.data = ""
  86. template = self.data_template
  87. return Markup(
  88. template % {"text": html_params(type="text", value=field.data, **kwargs)}
  89. )
  90. class Select2SlaveAJAXWidget:
  91. data_template = '<input class="input-group my_select2_ajax_slave" %(text)s />'
  92. def __init__(self, master_id, endpoint, extra_classes=None, style=None):
  93. self.endpoint = endpoint
  94. self.master_id = master_id
  95. self.extra_classes = extra_classes
  96. self.style = style or ""
  97. def __call__(self, field, **kwargs):
  98. kwargs.setdefault("id", field.id)
  99. kwargs.setdefault("name", field.name)
  100. kwargs.setdefault("endpoint", self.endpoint)
  101. kwargs.setdefault("master_id", self.master_id)
  102. if self.style:
  103. kwargs.setdefault("style", self.style)
  104. input_classes = "input-group my_select2_ajax"
  105. if self.extra_classes:
  106. input_classes = input_classes + " " + self.extra_classes
  107. kwargs.setdefault("class", input_classes)
  108. if not field.data:
  109. field.data = ""
  110. template = self.data_template
  111. return Markup(
  112. template % {"text": html_params(type="text", value=field.data, **kwargs)}
  113. )
  114. class Select2Widget(widgets.Select):
  115. extra_classes = None
  116. def __init__(self, extra_classes=None, style=None):
  117. self.extra_classes = extra_classes
  118. self.style = style
  119. super(Select2Widget, self).__init__()
  120. def __call__(self, field, **kwargs):
  121. kwargs["class"] = "my_select2 form-control"
  122. if self.extra_classes:
  123. kwargs["class"] = kwargs["class"] + " " + self.extra_classes
  124. if self.style:
  125. kwargs["style"] = self.style
  126. kwargs["data-placeholder"] = _("Select Value")
  127. if "name_" in kwargs:
  128. field.name = kwargs["name_"]
  129. return super(Select2Widget, self).__call__(field, **kwargs)
  130. class Select2ManyWidget(widgets.Select):
  131. extra_classes = None
  132. def __init__(self, extra_classes=None, style=None):
  133. self.extra_classes = extra_classes
  134. self.style = style
  135. super(Select2ManyWidget, self).__init__()
  136. def __call__(self, field, **kwargs):
  137. kwargs["class"] = "my_select2 form-control"
  138. if self.extra_classes:
  139. kwargs["class"] = kwargs["class"] + " " + self.extra_classes
  140. if self.style:
  141. kwargs["style"] = self.style
  142. kwargs["data-placeholder"] = _("Select Value")
  143. kwargs["multiple"] = "true"
  144. if "name_" in kwargs:
  145. field.name = kwargs["name_"]
  146. return super(Select2ManyWidget, self).__call__(field, **kwargs)