diff options
author | Xavier Noria <fxn@hashref.com> | 2012-01-17 14:08:09 -0800 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2012-01-17 14:08:09 -0800 |
commit | 57aaaa61977e82b9de2c43c26b00e636030685c4 (patch) | |
tree | 493351f06c1e8bc9fe5131015e72a963f9f2806d /actionpack/lib/action_view/helpers/tags/label.rb | |
parent | ba154bd76fb481d9faca123e988924bd864c0318 (diff) | |
parent | 6f1bf526d7f1869b47f6047c4285c673bb06d0ec (diff) | |
download | rails-57aaaa61977e82b9de2c43c26b00e636030685c4.tar.gz rails-57aaaa61977e82b9de2c43c26b00e636030685c4.tar.bz2 rails-57aaaa61977e82b9de2c43c26b00e636030685c4.zip |
Merge pull request #4488 from rafaelfranca/av-refactor
ActionView::Helpers::FormHelper refactoring
Diffstat (limited to 'actionpack/lib/action_view/helpers/tags/label.rb')
-rw-r--r-- | actionpack/lib/action_view/helpers/tags/label.rb | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/helpers/tags/label.rb b/actionpack/lib/action_view/helpers/tags/label.rb new file mode 100644 index 0000000000..74ac92ee18 --- /dev/null +++ b/actionpack/lib/action_view/helpers/tags/label.rb @@ -0,0 +1,65 @@ +module ActionView + module Helpers + module Tags + class Label < Base #:nodoc: + def initialize(object_name, method_name, template_object, content_or_options = nil, options = nil) + content_is_options = content_or_options.is_a?(Hash) + if content_is_options + options = content_or_options + @content = nil + else + @content = content_or_options + end + + options ||= {} + + super(object_name, method_name, template_object, options) + end + + def render(&block) + options = @options.stringify_keys + tag_value = options.delete("value") + name_and_id = options.dup + + if name_and_id["for"] + name_and_id["id"] = name_and_id["for"] + else + name_and_id.delete("id") + end + + add_default_name_and_id_for_value(tag_value, name_and_id) + options.delete("index") + options.delete("namespace") + options["for"] ||= name_and_id["id"] + + if block_given? + @template_object.label_tag(name_and_id["id"], options, &block) + else + content = if @content.blank? + @object_name.gsub!(/\[(.*)_attributes\]\[\d\]/, '.\1') + method_and_value = tag_value.present? ? "#{@method_name}.#{tag_value}" : @method_name + + if object.respond_to?(:to_model) + key = object.class.model_name.i18n_key + i18n_default = ["#{key}.#{method_and_value}".to_sym, ""] + end + + i18n_default ||= "" + I18n.t("#{@object_name}.#{method_and_value}", :default => i18n_default, :scope => "helpers.label").presence + else + @content.to_s + end + + content ||= if object && object.class.respond_to?(:human_attribute_name) + object.class.human_attribute_name(@method_name) + end + + content ||= @method_name.humanize + + label_tag(name_and_id["id"], content, options) + end + end + end + end + end +end |