# 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