silex_form_div_layout.html.twig 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. {# Widgets #}
  2. {% block form_widget %}
  3. {% spaceless %}
  4. <div {{ block('widget_container_attributes') }}>
  5. {{ block('field_rows') }}
  6. {{ form_rest(form) }}
  7. </div>
  8. {% endspaceless %}
  9. {% endblock form_widget %}
  10. {% block collection_widget %}
  11. {% spaceless %}
  12. {% if prototype is defined %}
  13. {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
  14. {% endif %}
  15. {{ block('form_widget') }}
  16. {% endspaceless %}
  17. {% endblock collection_widget %}
  18. {% block textarea_widget %}
  19. {% spaceless %}
  20. <textarea {{ block('widget_attributes') }}>{{ value }}</textarea>
  21. {% endspaceless %}
  22. {% endblock textarea_widget %}
  23. {% block choice_widget %}
  24. {% spaceless %}
  25. {% if expanded %}
  26. <ul {{ block('widget_container_attributes') }} class="inputs-list">
  27. {% for child in form %}
  28. <li>
  29. {{ form_label(child, null, { 'in_list_checkbox' : true, 'widget' : form_widget(child) } ) }}
  30. </li>
  31. {% endfor %}
  32. </ul>
  33. {% else %}
  34. <select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
  35. {% if empty_value is not none %}
  36. <option value="">{{ empty_value|trans }}</option>
  37. {% endif %}
  38. {% if preferred_choices|length > 0 %}
  39. {% set options = preferred_choices %}
  40. {{ block('widget_choice_options') }}
  41. {% if choices|length > 0 %}
  42. <option disabled="disabled">{{ separator }}</option>
  43. {% endif %}
  44. {% endif %}
  45. {% set options = choices %}
  46. {{ block('widget_choice_options') }}
  47. </select>
  48. {% endif %}
  49. {% endspaceless %}
  50. {% endblock choice_widget %}
  51. {% block checkbox_widget %}
  52. {% spaceless %}
  53. <input type="checkbox" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
  54. {% endspaceless %}
  55. {% endblock checkbox_widget %}
  56. {% block radio_widget %}
  57. {% spaceless %}
  58. <input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
  59. {% endspaceless %}
  60. {% endblock radio_widget %}
  61. {% block datetime_widget %}
  62. {% spaceless %}
  63. {% if widget == 'single_text' %}
  64. {{ block('field_widget') }}
  65. {% else %}
  66. <div {{ block('widget_container_attributes') }}>
  67. {{ form_errors(form.date) }}
  68. {{ form_errors(form.time) }}
  69. {{ form_widget(form.date) }}
  70. {{ form_widget(form.time) }}
  71. </div>
  72. {% endif %}
  73. {% endspaceless %}
  74. {% endblock datetime_widget %}
  75. {% block date_widget %}
  76. {% spaceless %}
  77. {% if widget == 'single_text' %}
  78. {{ block('field_widget') }}
  79. {% else %}
  80. <div {{ block('widget_container_attributes') }}>
  81. {{ date_pattern|replace({
  82. '{{ year }}': form_widget(form.year),
  83. '{{ month }}': form_widget(form.month),
  84. '{{ day }}': form_widget(form.day),
  85. })|raw }}
  86. </div>
  87. {% endif %}
  88. {% endspaceless %}
  89. {% endblock date_widget %}
  90. {% block time_widget %}
  91. {% spaceless %}
  92. {% if widget == 'single_text' %}
  93. {{ block('field_widget') }}
  94. {% else %}
  95. <div {{ block('widget_container_attributes') }}>
  96. {{ form_widget(form.hour, { 'attr': { 'size': '1' } }) }}:{{ form_widget(form.minute, { 'attr': { 'size': '1' } }) }}{% if with_seconds %}:{{ form_widget(form.second, { 'attr': { 'size': '1' } }) }}{% endif %}
  97. </div>
  98. {% endif %}
  99. {% endspaceless %}
  100. {% endblock time_widget %}
  101. {% block number_widget %}
  102. {% spaceless %}
  103. {# type="number" doesn't work with floats #}
  104. {% set type = type|default('text') %}
  105. {{ block('field_widget') }}
  106. {% endspaceless %}
  107. {% endblock number_widget %}
  108. {% block integer_widget %}
  109. {% spaceless %}
  110. {% set type = type|default('number') %}
  111. {{ block('field_widget') }}
  112. {% endspaceless %}
  113. {% endblock integer_widget %}
  114. {% block money_widget %}
  115. {% spaceless %}
  116. {{ money_pattern|replace({ '{{ widget }}': block('field_widget') })|raw }}
  117. {% endspaceless %}
  118. {% endblock money_widget %}
  119. {% block url_widget %}
  120. {% spaceless %}
  121. {% set type = type|default('url') %}
  122. {{ block('field_widget') }}
  123. {% endspaceless %}
  124. {% endblock url_widget %}
  125. {% block search_widget %}
  126. {% spaceless %}
  127. {% set type = type|default('search') %}
  128. {{ block('field_widget') }}
  129. {% endspaceless %}
  130. {% endblock search_widget %}
  131. {% block percent_widget %}
  132. {% spaceless %}
  133. {% set type = type|default('text') %}
  134. {{ block('field_widget') }} %
  135. {% endspaceless %}
  136. {% endblock percent_widget %}
  137. {% block field_widget %}
  138. {% spaceless %}
  139. {% set type = type|default('text') %}
  140. <input type="{{ type }}" {{ block('widget_attributes') }} value="{{ value }}" />
  141. {% endspaceless %}
  142. {% endblock field_widget %}
  143. {% block password_widget %}
  144. {% spaceless %}
  145. {% set type = type|default('password') %}
  146. {{ block('field_widget') }}
  147. {% endspaceless %}
  148. {% endblock password_widget %}
  149. {% block hidden_widget %}
  150. {% set type = type|default('hidden') %}
  151. {{ block('field_widget') }}
  152. {% endblock hidden_widget %}
  153. {% block email_widget %}
  154. {% spaceless %}
  155. {% set type = type|default('email') %}
  156. {{ block('field_widget') }}
  157. {% endspaceless %}
  158. {% endblock email_widget %}
  159. {# Labels #}
  160. {% block generic_label %}
  161. {% spaceless %}
  162. {% if required %}
  163. {% set attr = attr|merge({'class': attr.class|default('') ~ ' required'}) %}
  164. {% endif %}
  165. {% if in_list_checkbox is defined and in_list_checkbox and widget is defined %}
  166. <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>
  167. {{ widget|raw }}
  168. <span>
  169. {{ label|trans }}
  170. </span>
  171. </label>
  172. {% else %}
  173. <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>{{ label|trans }}</label>
  174. {% endif %}
  175. {% endspaceless %}
  176. {% endblock %}
  177. {% block field_label %}
  178. {% spaceless %}
  179. {% set attr = attr|merge({'for': id}) %}
  180. {{ block('generic_label') }}
  181. {% endspaceless %}
  182. {% endblock field_label %}
  183. {% block form_label %}
  184. {% spaceless %}
  185. {{ block('generic_label') }}
  186. {% endspaceless %}
  187. {% endblock form_label %}
  188. {# Rows #}
  189. {% block repeated_row %}
  190. {% spaceless %}
  191. {{ block('field_rows') }}
  192. {% endspaceless %}
  193. {% endblock repeated_row %}
  194. {% block field_row %}
  195. {% spaceless %}
  196. <div class="clearfix {{ (0 < form_errors(form)|length)? 'error':'' }} ">
  197. {{ form_label(form, label|default(null)) }}
  198. <div class="input">
  199. {{ form_widget(form) }}
  200. {{ form_errors(form) }}
  201. </div>
  202. </div>
  203. {% endspaceless %}
  204. {% endblock field_row %}
  205. {% block hidden_row %}
  206. {{ form_widget(form) }}
  207. {% endblock hidden_row %}
  208. {# Misc #}
  209. {% block field_enctype %}
  210. {% spaceless %}
  211. {% if multipart %}enctype="multipart/form-data"{% endif %}
  212. {% endspaceless %}
  213. {% endblock field_enctype %}
  214. {% block field_errors %}
  215. {% spaceless %}
  216. {% if errors|length > 0 %}
  217. {% if not form.hasParent or 'repeated' in form.get('types') %}
  218. <div class="clearfix error">
  219. {% endif %}
  220. <span class="help-inline">
  221. {% for error in errors %}
  222. {% if loop.first %}
  223. {{ error.messageTemplate|trans(error.messageParameters, 'validators') }}
  224. {% endif %}
  225. {% endfor %}
  226. </span>
  227. {% if not form.hasParent or 'repeated' in form.get('types') %}
  228. </div>
  229. {% endif %}
  230. {% endif %}
  231. {% endspaceless %}
  232. {% endblock field_errors %}
  233. {% block field_rest %}
  234. {% spaceless %}
  235. {% for child in form %}
  236. {% if not child.rendered %}
  237. {{ form_row(child) }}
  238. {% endif %}
  239. {% endfor %}
  240. {% endspaceless %}
  241. {% endblock field_rest %}
  242. {# Support #}
  243. {% block field_rows %}
  244. {% spaceless %}
  245. {{ form_errors(form) }}
  246. {% for child in form %}
  247. {{ form_row(child) }}
  248. {% endfor %}
  249. {% endspaceless %}
  250. {% endblock field_rows %}
  251. {% block widget_attributes %}
  252. {% spaceless %}
  253. id="{{ id }}" name="{{ full_name }}"{% if read_only %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
  254. {% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %}
  255. {% endspaceless %}
  256. {% endblock widget_attributes %}
  257. {% block widget_container_attributes %}
  258. {% spaceless %}
  259. id="{{ id }}"
  260. {% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %}
  261. {% endspaceless %}
  262. {% endblock widget_container_attributes %}