Sha256: 27e784344e2111f6a03c9e4038a8fa8e644b3fe2fc77a98ba3739366b8a09e3e

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

require 'cgi'

module HS
  module ElementPreview
    def text_preview(text)
      return unless text
      CGI.escapeHTML(text)
    end

    def element_preview(tag_name, params, children)
      [
        element_start(tag_name, params, children),
        element_content(children),
        element_end(tag_name, children)
      ].join
    end

    def wrap_into_tag(tag_name, params)
      children = yield
      [
        element_start(tag_name, params, children),
        children.join(''),
        element_end(tag_name, children)
      ].join
    end

    private

    def element_start(tag, params, children)
      start = "<#{tag}"

      unless params.empty?
        params_str = params.map { |k, v| "#{k}=\"#{v}\"" }.join(' ')
        start = "#{start} #{params_str}"
      end

      return "#{start} />" if children.empty?
      "#{start}>"
    end

    def element_content(children)
      return if children.empty?
      children.map(&:preview).compact.join
    end

    def element_end(tag, children)
      return if children.empty?

      "</#{tag}>"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hs-cli-0.3.3 lib/hs/preview/element_preview.rb
hs-cli-0.3.2 lib/hs/preview/element_preview.rb