silex_form_div_layout.html.twig 9.3 KB

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