@@ -367,10 +367,14 @@ defmodule Phoenix.HTML.Form do
367367 """
368368 @ spec input_id ( t | atom , field ) :: String . t ( )
369369 def input_id ( % { id: nil } , _field ) , do: nil
370- def input_id ( % { id: id } , field ) when is_atom ( field ) or is_binary ( field ) , do: "#{ id } _#{ field } "
371370
372- def input_id ( name , field ) when ( is_atom ( name ) and is_atom ( field ) ) or is_binary ( field ) ,
373- do: "#{ name } _#{ field } "
371+ def input_id ( % { id: id } , field ) when is_atom ( field ) or is_binary ( field ) do
372+ "#{ id } _#{ field } "
373+ end
374+
375+ def input_id ( name , field ) when ( is_atom ( name ) and is_atom ( field ) ) or is_binary ( field ) do
376+ "#{ name } _#{ field } "
377+ end
374378
375379 @ doc """
376380 Returns an id of a corresponding form field and value attached to it.
@@ -1263,7 +1267,7 @@ defmodule Phoenix.HTML.Form do
12631267 """
12641268 def date_select ( form , field , opts \\ [ ] ) do
12651269 value = Keyword . get ( opts , :value , input_value ( form , field ) || Keyword . get ( opts , :default ) )
1266- builder = Keyword . get ( opts , :builder ) || & date_builder ( & 1 , opts )
1270+ builder = Keyword . get ( opts , :builder ) || ( & date_builder ( & 1 , opts ) )
12671271 builder . ( datetime_builder ( form , field , date_value ( value ) , nil , opts ) )
12681272 end
12691273
@@ -1290,7 +1294,7 @@ defmodule Phoenix.HTML.Form do
12901294 """
12911295 def time_select ( form , field , opts \\ [ ] ) do
12921296 value = Keyword . get ( opts , :value , input_value ( form , field ) || Keyword . get ( opts , :default ) )
1293- builder = Keyword . get ( opts , :builder ) || & time_builder ( & 1 , opts )
1297+ builder = Keyword . get ( opts , :builder ) || ( & time_builder ( & 1 , opts ) )
12941298 builder . ( datetime_builder ( form , field , nil , time_value ( value ) , opts ) )
12951299 end
12961300
@@ -1401,6 +1405,34 @@ defmodule Phoenix.HTML.Form do
14011405 @ doc """
14021406 Generates a label tag.
14031407
1408+ Useful when wrapping another input inside a label.
1409+
1410+ ## Examples
1411+
1412+ label do
1413+ radio_button :user, :choice, "Choice"
1414+ end
1415+ #=> <label class="control-label">...</label>
1416+
1417+ label class: "control-label" do
1418+ radio_button :user, :choice, "Choice"
1419+ end
1420+ #=> <label class="control-label">...</label>
1421+
1422+ """
1423+ def label ( do_block )
1424+
1425+ def label ( do: block ) do
1426+ content_tag ( :label , block , [ ] )
1427+ end
1428+
1429+ def label ( opts , do: block ) when is_list ( opts ) do
1430+ content_tag ( :label , block , opts )
1431+ end
1432+
1433+ @ doc """
1434+ Generates a label tag for the given field.
1435+
14041436 The form should either be a `Phoenix.HTML.Form` emitted
14051437 by `form_for` or an atom.
14061438
@@ -1409,6 +1441,8 @@ defmodule Phoenix.HTML.Form do
14091441 be overriden if you pass a value to the `for` option.
14101442 Text content would be inferred from `field` if not specified.
14111443
1444+ To wrap a label around an input, see `label/1`.
1445+
14121446 ## Examples
14131447
14141448 # Assuming form contains a User schema
@@ -1433,14 +1467,17 @@ defmodule Phoenix.HTML.Form do
14331467 "E-mail Address"
14341468 end
14351469 #=> <label class="control-label" for="user_email">E-mail Address</label>
1470+
14361471 """
1437- def label ( form , field ) do
1472+ def label ( form , field ) when is_atom ( field ) or is_binary ( field ) do
14381473 label ( form , field , humanize ( field ) , [ ] )
14391474 end
14401475
14411476 @ doc """
14421477 See `label/2`.
14431478 """
1479+ def label ( form , field , text_or_do_block_or_attributes )
1480+
14441481 def label ( form , field , text ) when is_binary ( text ) do
14451482 label ( form , field , text , [ ] )
14461483 end
@@ -1456,14 +1493,16 @@ defmodule Phoenix.HTML.Form do
14561493 @ doc """
14571494 See `label/2`.
14581495 """
1496+ def label ( form , field , text , do_block_or_attributes )
1497+
14591498 def label ( form , field , text , opts ) when is_binary ( text ) and is_list ( opts ) do
14601499 opts = Keyword . put_new ( opts , :for , input_id ( form , field ) )
14611500 content_tag ( :label , text , opts )
14621501 end
14631502
1464- def label ( form , field , opts , do: block ) do
1503+ def label ( form , field , opts , do: block ) when is_list ( opts ) do
14651504 opts = Keyword . put_new ( opts , :for , input_id ( form , field ) )
1466- content_tag ( :label , opts , do: block )
1505+ content_tag ( :label , block , opts )
14671506 end
14681507
14691508 # Normalize field name to string version
0 commit comments