lib/rich/cms/content/item.rb in rich_cms-1.0.0 vs lib/rich/cms/content/item.rb in rich_cms-2.0.0

- old
+ new

@@ -42,26 +42,30 @@ identifier = @group.identifiers.inject({}){|h, k| h[k] = @object.send(k); h} hash.merge({:__selector__ => selector, :__identifier__ => identifier}) end - def to_tag - default = @object.attributes.values_at(*@group.identifiers) if @object.new_record? + def to_tag(options = {}) + tag = options[:tag] || @group.tag || :span + attrs = [] - return @object.send(@group.value) unless Engine.can_render_metadata? + default = @group.identifiers.size == 1 ? @object.send(@group.identifiers.first) : @object.attributes.values_at(*@group.identifiers).inspect + value = @object.send(@group.value) - keys = @group.keys << @group.value.to_s - data = @object.attributes.reject{|k, v| !keys.include?(k.to_s)} - - tag = @group.tag || :span - attrs = data.collect{|k, v| "data-#{k}=\"#{::ERB::Util.html_escape v}\""}.join " " - value = @object.new_record? ? "< #{default.size == 1 ? default.first : default.inspect} >" : @object.send(@group.value) + if Engine.can_render_metadata? + default = "< #{default} >" + keys = @group.keys << @group.value.to_s + data = @object.attributes.reject{|k, v| !keys.include?(k.to_s)} - if class_name = @group.selector.match(/^\.\w+$/) - attrs = "class=\"#{class_name.to_s.gsub(/^\./, "")}\" #{attrs}" + if class_name = @group.selector.match(/^\.\w+$/) + (options[:html] ||= {}).store :class, [class_name.to_s.gsub(/^\./, ""), options[:html].try(:fetch, :class, nil)].compact.join(" ") + end + + attrs << options[:html].collect{|k, v| "#{k}=\"#{::ERB::Util.html_escape v}\""}.join(" ") if options[:html] + attrs << data .collect{|k, v| "data-#{k}=\"#{::ERB::Util.html_escape v}\""}.join(" ") end - "<#{tag} #{attrs}>#{value}</#{tag}>" + "<#{tag} #{attrs.join(" ")}>#{value.blank? ? default : value}</#{tag}>" end end end