# Like RoR's squish method class String def squish strip.gsub(/\s+/, ' ') end end # Constructs HTML img tag from properties class ImgBuilder def initialize(props) props.compute_dependant_properties @props = props end def to_s @props.compute_dependant_properties generate_wrapper end private def generate_wrapper classes = "imgWrapper #{@props.img_display} #{@props.align} #{@props.attr_size_class} #{@props.wrapper_class}".squish result = <<~END_HTML
#{"
\n" if @props.caption} #{ if @props.url "#{generate_img}" else generate_img end } #{generate_figure_caption} #{"
\n" if @props.caption} #{@props.attribute if @props.attribution}
END_HTML result.strip end def generate_figure_caption return nil unless @props.caption <<~END_CAPTION
#{if @props.url <<~END_URL #{@props.caption} END_URL else @props.caption end }
END_CAPTION end # See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture def generate_img img_classes = @props.classes || 'rounded shadow' <<~END_IMG END_IMG end end