Required fields adds default text mark to labels, allowing i18n for translations

This commit is contained in:
Carlos Antonio da Silva 2009-12-08 15:07:30 -02:00
parent 3f2e21533f
commit 43c710c2f6
2 changed files with 78 additions and 9 deletions

View File

@ -5,13 +5,39 @@ module SimpleForm
def generate_label
return '' if @options[:label] == false
html_options = { :class => "#{@input_type} #{required_class}" }
label(@attribute, @options[:label] || translate_label, html_options)
html_options = { :class => "#{@input_type} #{required_class}".strip }
label(@attribute, label_text, html_options)
end
def label_text
required_text << (@options[:label] || translate_label)
end
def required_text
attribute_required? ? translate_required_string : ''
end
def translate_label
default = @object.try(:human_attribute_name, @attribute.to_s) || @attribute.to_s.humanize
I18n.t("views.labels.#{@object_name}.#{@attribute}", :default => default)
I18n.t(:"#{@object_name}.#{@attribute}", :scope => :"views.labels", :default => default)
end
def translate_required_string
translate_string(:required_string, :default =>
%[<abbr title="#{translate_required_text}">#{translate_required_mark}</abbr> ]
)
end
def translate_required_text
translate_string(:required_text, :default => 'required')
end
def translate_required_mark
translate_string(:required_mark, :default => '*')
end
def translate_string(key, params={})
I18n.t(key, {:scope => :simple_form}.merge!(params))
end
end
end

View File

@ -6,7 +6,7 @@ class LabelTest < ActionView::TestCase
simple_form_for @user do |f|
concat f.input :name
end
assert_select 'form label[for=user_name]', 'Name'
assert_select 'form label[for=user_name]', /Name/
end
test 'input should allow not using a label' do
@ -20,7 +20,7 @@ class LabelTest < ActionView::TestCase
simple_form_for @user do |f|
concat f.input :name, :label => 'My label!'
end
assert_select 'form label[for=user_name]', 'My label!'
assert_select 'form label[for=user_name]', /My label!/
end
test 'input should use label with human attribute name if it responds to it' do
@ -28,7 +28,7 @@ class LabelTest < ActionView::TestCase
simple_form_for @super_user do |f|
concat f.input :name
end
assert_select 'form label[for=super_user_name]', 'Super User Name!'
assert_select 'form label[for=super_user_name]', /Super User Name!/
end
test 'input should use i18n to pick up label translation' do
@ -40,12 +40,12 @@ class LabelTest < ActionView::TestCase
concat f.input :description
concat f.input :age
end
assert_select 'form label[for=super_user_description]', 'Descrição'
assert_select 'form label[for=super_user_age]', 'Idade'
assert_select 'form label[for=super_user_description]', /Descrição/
assert_select 'form label[for=super_user_age]', /Idade/
end
end
test 'label should use the same input type class as input' do
test 'label should use the same css class as input' do
simple_form_for @user do |f|
concat f.input :name
concat f.input :description
@ -77,4 +77,47 @@ class LabelTest < ActionView::TestCase
end
assert_no_select 'form label.required'
end
test 'label should add required text when input is required' do
simple_form_for @user do |f|
concat f.input :name
end
assert_select 'form label.required', '* Name'
assert_select 'form label abbr[title=required]', '*'
end
test 'label should not have required text in no required inputs' do
simple_form_for @user do |f|
concat f.input :name, :required => false
end
assert_no_select 'form label abbr'
end
test 'label should use i18n to find required text' do
store_translations(:en, :simple_form => { :required_text => 'campo requerido' }) do
simple_form_for @user do |f|
concat f.input :name
end
assert_select 'form label abbr[title=campo requerido]', '*'
end
end
test 'label should use i18n to find required mark' do
store_translations(:en, :simple_form => { :required_mark => '*-*' }) do
simple_form_for @user do |f|
concat f.input :name
end
assert_select 'form label abbr', '*-*'
end
end
test 'label should use i18n to find required string tag' do
store_translations(:en, :simple_form => { :required_string => '<span class="required" title="requerido">*</span>' }) do
simple_form_for @user do |f|
concat f.input :name
end
assert_no_select 'form label abbr'
assert_select 'form label span.required[title=requerido]', '*'
end
end
end