mirror of
https://github.com/redmine/redmine.git
synced 2025-11-12 16:26:03 +01:00
Merged r16574 (#25760).
git-svn-id: http://svn.redmine.org/redmine/branches/3.3-stable@16620 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -96,16 +96,23 @@ module CustomFieldsHelper
|
|||||||
# Return custom field label tag
|
# Return custom field label tag
|
||||||
def custom_field_label_tag(name, custom_value, options={})
|
def custom_field_label_tag(name, custom_value, options={})
|
||||||
required = options[:required] || custom_value.custom_field.is_required?
|
required = options[:required] || custom_value.custom_field.is_required?
|
||||||
|
for_tag_id = options.fetch(:for_tag_id, "#{name}_custom_field_values_#{custom_value.custom_field.id}")
|
||||||
content = custom_field_name_tag custom_value.custom_field
|
content = custom_field_name_tag custom_value.custom_field
|
||||||
|
|
||||||
content_tag "label", content +
|
content_tag "label", content +
|
||||||
(required ? " <span class=\"required\">*</span>".html_safe : ""),
|
(required ? " <span class=\"required\">*</span>".html_safe : ""),
|
||||||
:for => "#{name}_custom_field_values_#{custom_value.custom_field.id}"
|
:for => for_tag_id
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return custom field tag with its label tag
|
# Return custom field tag with its label tag
|
||||||
def custom_field_tag_with_label(name, custom_value, options={})
|
def custom_field_tag_with_label(name, custom_value, options={})
|
||||||
custom_field_label_tag(name, custom_value, options) + custom_field_tag(name, custom_value)
|
tag = custom_field_tag(name, custom_value)
|
||||||
|
tag_id = nil
|
||||||
|
ids = tag.scan(/ id="(.+?)"/)
|
||||||
|
if ids.size == 1
|
||||||
|
tag_id = ids.first.first
|
||||||
|
end
|
||||||
|
custom_field_label_tag(name, custom_value, options.merge(:for_tag_id => tag_id)) + tag
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the custom field tag for when bulk editing objects
|
# Returns the custom field tag for when bulk editing objects
|
||||||
|
|||||||
@@ -558,13 +558,11 @@ module Redmine
|
|||||||
opts.each do |label, value|
|
opts.each do |label, value|
|
||||||
value ||= label
|
value ||= label
|
||||||
checked = (custom_value.value.is_a?(Array) && custom_value.value.include?(value)) || custom_value.value.to_s == value
|
checked = (custom_value.value.is_a?(Array) && custom_value.value.include?(value)) || custom_value.value.to_s == value
|
||||||
tag = view.send(tag_method, tag_name, value, checked, :id => tag_id)
|
tag = view.send(tag_method, tag_name, value, checked, :id => nil)
|
||||||
# set the id on the first tag only
|
|
||||||
tag_id = nil
|
|
||||||
s << view.content_tag('label', tag + ' ' + label)
|
s << view.content_tag('label', tag + ' ' + label)
|
||||||
end
|
end
|
||||||
if custom_value.custom_field.multiple?
|
if custom_value.custom_field.multiple?
|
||||||
s << view.hidden_field_tag(tag_name, '')
|
s << view.hidden_field_tag(tag_name, '', :id => nil)
|
||||||
end
|
end
|
||||||
css = "#{options[:class]} check_box_group"
|
css = "#{options[:class]} check_box_group"
|
||||||
view.content_tag('span', s, options.merge(:class => css))
|
view.content_tag('span', s, options.merge(:class => css))
|
||||||
|
|||||||
@@ -41,6 +41,36 @@ class CustomFieldsHelperTest < ActionView::TestCase
|
|||||||
assert_select_in tag, 'label span[title]', 0
|
assert_select_in tag, 'label span[title]', 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_label_tag_should_include_for_attribute_for_select_tag
|
||||||
|
field = CustomField.new(:name => 'Foo', :field_format => 'list')
|
||||||
|
s = custom_field_tag_with_label('foo', CustomValue.new(:custom_field => field))
|
||||||
|
assert_select_in s, 'label[for]'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_label_tag_should_not_include_for_attribute_for_checkboxes
|
||||||
|
field = CustomField.new(:name => 'Foo', :field_format => 'list', :edit_tag_style => 'check_box')
|
||||||
|
s = custom_field_tag_with_label('foo', CustomValue.new(:custom_field => field))
|
||||||
|
assert_select_in s, 'label:not([for])'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_label_tag_should_include_for_attribute_for_bool_as_select_tag
|
||||||
|
field = CustomField.new(:name => 'Foo', :field_format => 'bool')
|
||||||
|
s = custom_field_tag_with_label('foo', CustomValue.new(:custom_field => field))
|
||||||
|
assert_select_in s, 'label[for]'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_label_tag_should_include_for_attribute_for_bool_as_checkbox
|
||||||
|
field = CustomField.new(:name => 'Foo', :field_format => 'bool', :edit_tag_style => 'check_box')
|
||||||
|
s = custom_field_tag_with_label('foo', CustomValue.new(:custom_field => field))
|
||||||
|
assert_select_in s, 'label[for]'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_label_tag_should_not_include_for_attribute_for_bool_as_radio
|
||||||
|
field = CustomField.new(:name => 'Foo', :field_format => 'bool', :edit_tag_style => 'radio')
|
||||||
|
s = custom_field_tag_with_label('foo', CustomValue.new(:custom_field => field))
|
||||||
|
assert_select_in s, 'label:not([for])'
|
||||||
|
end
|
||||||
|
|
||||||
def test_unknow_field_format_should_be_edited_as_string
|
def test_unknow_field_format_should_be_edited_as_string
|
||||||
field = CustomField.new(:field_format => 'foo')
|
field = CustomField.new(:field_format => 'foo')
|
||||||
value = CustomValue.new(:value => 'bar', :custom_field => field)
|
value = CustomValue.new(:value => 'bar', :custom_field => field)
|
||||||
|
|||||||
Reference in New Issue
Block a user