require 'hanami/helpers/html_helper/empty_html_node' require 'hanami/utils/escape' module Hanami module Helpers module HtmlHelper # HTML node # # @since 0.1.0 # @api private # # @see Hanami::Helpers::HtmlHelper::EmptyHtmlNode class HtmlNode < EmptyHtmlNode # Initialize a new HTML node # # @param name [Symbol,String] the name of the tag # @param content [String,Proc,Hanami::Helpers::HtmlHelper::HtmlBuilder,NilClass] the optional content # @param attributes [Hash,NilClass] the optional tag attributes # @param _options [Hash] a optional set of data # # @return [Hanami::Helpers::HtmlHelper::HtmlNode] def initialize(name, content, attributes, _options = {}) @builder = HtmlBuilder.new @name = name @content = if content.is_a?(Hash) @attributes = content nil else attributes_hash = attributes.to_h if attributes.respond_to?(:to_h) @attributes = prepare_html_attributes(attributes_hash) content end end # Resolve and return the output # # @return [String] the output # # @since 0.1.0 # @api private # # @see Hanami::Helpers::HtmlHelper::EmptyHtmlNode#to_s def to_s %(#{super}#{content}) end private # Resolve the (nested) content # # @return [String] the content # # @since 0.1.0 # @api private def content # rubocop:disable Metrics/MethodLength case @content when Proc result = @builder.resolve(&@content) if @builder.nested? "\n#{@builder}\n" else "\n#{Utils::Escape.html(result)}\n" end else Utils::Escape.html(@content) end end end end end end