form.html 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. {%- macro field_label(field) -%}
  2. {# don't render labels for buttons and radio fields #}
  3. {% if field.type != "SubmitField" and field.type != "BooleanField" %}
  4. {% set css_class = kwargs['class'] if kwargs['class'] else 'form-label' %}
  5. <label class="{{ css_class }}" for="{{ field.id }}">{{ field.label.text }}</label>
  6. {% endif %}
  7. {% endmacro %}
  8. {%- macro field_description(field) -%}
  9. {% if field.description %}
  10. <div class="form-text">{{ field.description|safe }}</div>
  11. {% endif %}
  12. {%- endmacro -%}
  13. {%- macro field_errors(field) -%}
  14. {% if field.errors %}
  15. {%- for error in field.errors -%}
  16. <div class="invalid-feedback">
  17. {{error}}
  18. </div>
  19. {%- endfor -%}
  20. {% endif %}
  21. {%- endmacro -%}
  22. {%- macro render_input_field(field, div_class='') -%}
  23. {% if div_class %}
  24. <div class="{{ div_class }}">
  25. {% endif %}
  26. {% set placeholder = kwargs['placeholder']|length or field.label.text %}
  27. {% set css_error = ' is-invalid' if field.errors else '' %}
  28. {% set css_class = kwargs['class'] if kwargs['class'] else 'form-control' %}
  29. {% set css_class = css_class + css_error if css_error else css_class %}
  30. {{ field(class=css_class, placeholder=placeholder, **kwargs) }}
  31. {{ field_description(field) }}
  32. {{ field_errors(field) }}
  33. {% if div_class %}
  34. </div>
  35. {% endif %}
  36. {%- endmacro -%}
  37. {%- macro render_boolean_field(field, div_class='') -%}
  38. {% if div_class %}
  39. <div class="{{ div_class }}">
  40. {% endif %}
  41. {% set css_error = ' is-invalid' if field.errors else '' %}
  42. {% set css_class = kwargs['class'] if kwargs['class'] else 'form-check-input' %}
  43. {% set css_class = css_class + css_error if css_error else css_class %}
  44. <div class="form-check">
  45. {{ field(class=css_class, **kwargs) }}
  46. <label class="form-check-label" for="{{ field.id }}">
  47. {{ field.label.text }}
  48. </label>
  49. {{ field_description(field) }}
  50. {{ field_errors(field) }}
  51. </div>
  52. {% if div_class %}
  53. </div>
  54. {% endif %}
  55. {%- endmacro -%}
  56. {%- macro render_select_field(field, div_class='') -%}
  57. {% if div_class %}
  58. <div class="{{ div_class }}">
  59. {% endif %}
  60. {% set css_error = ' is-invalid' if field.errors else '' %}
  61. {% set css_class = kwargs['class'] if kwargs['class'] else 'form-select' %}
  62. {% set css_class = css_class + css_error if css_error else css_class %}
  63. {% if field.type == 'QuerySelectMultipleField' or field.type == 'SelectMultipleField' %}
  64. {{ field(multiple=True, class=css_class) }}
  65. {% else %}
  66. {{ field(class=css_class) }}
  67. {%- endif -%}
  68. {{ field_description(field) }}
  69. {{ field_errors(field) }}
  70. {% if div_class %}
  71. </div>
  72. {% endif %}
  73. {%- endmacro -%}
  74. {%- macro render_submit_field(field, div_class='') -%}
  75. {% if div_class %}
  76. <div class="{{ div_class }}">
  77. {% endif %}
  78. {% set css_class = kwargs['class'] if kwargs['class'] else 'btn btn-success' %}
  79. {{ field(class=css_class) }}
  80. {% if div_class %}
  81. </div>
  82. {% endif %}
  83. {%- endmacro -%}
  84. {%- macro render_field(field, div_class='mb-3 col-12') -%}
  85. {% if div_class %}
  86. <div class="{{ div_class }}">
  87. {% endif %}
  88. {{ field_label(field) }}
  89. {% if field.type == "BooleanField" %}
  90. {{ render_boolean_field(field, **kwargs) }}
  91. {% elif field.type == "SelectField" or field.type == "QuerySelectMultipleField" or field.type == "SelectMultipleField" %}
  92. {{ render_select_field(field, **kwargs) }}
  93. {% elif field.type == "SubmitField" %}
  94. {{ render_submit_field(field, **kwargs) }}
  95. {% else %}
  96. {{ render_input_field(field, **kwargs) }}
  97. {% endif %}
  98. {% if div_class %}
  99. </div>
  100. {% endif %}
  101. {%- endmacro -%}
  102. {%- macro horizontal_field(field, label_class='col-3 form-label text-end', div_class='col-4') -%}
  103. <div class="row mb-3">
  104. {{ field_label(field, class=label_class) }}
  105. <div class="{{ div_class }}">
  106. {% if field.type == "BooleanField" %}
  107. {{ render_boolean_field(field, **kwargs) }}
  108. {% elif field.type == "SelectField" or field.type == "QuerySelectMultipleField" or field.type == "SelectMultipleField" %}
  109. {{ render_select_field(field, **kwargs) }}
  110. {% elif field.type == "SubmitField" %}
  111. {{ render_submit_field(field, **kwargs) }}
  112. {% else %}
  113. {{ render_input_field(field, **kwargs) }}
  114. {% endif %}
  115. </div>
  116. </div>
  117. {%- endmacro -%}