Class: Bridgetown::ImagePipeline::Helpers

Inherits:
Object
  • Object
show all
Defined in:
lib/bridgetown/image_pipeline/helpers.rb

Instance Method Summary collapse

Constructor Details

#initialize(manifest:, config:) ⇒ Helpers

Returns a new instance of Helpers.



9
10
11
12
# File 'lib/bridgetown/image_pipeline/helpers.rb', line 9

def initialize(manifest:, config:)
  @manifest = manifest
  @config   = config
end

Instance Method Details

#bg_image_block(src, breakpoint_only: nil, class_suffix: nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/bridgetown/image_pipeline/helpers.rb', line 29

def bg_image_block(src, breakpoint_only: nil, class_suffix: nil)
  class_name = bg_image_class(src, class_suffix: class_suffix)
  variants   = @manifest.variants_by_width(src)

  if variants.empty?
    warn "[bridgetown-image-pipeline] no manifest entry for #{src}; bg_image_block falling back to url(#{src})"
    body = ".#{class_name}{background-image:url(#{src})}"
    body = "@media (min-width:#{breakpoint_only}px){#{body}}" if breakpoint_only
    return "<style>#{body}</style>"
  end

  css = BgImageSet.css(
    class_name: class_name,
    variants: variants,
    breakpoints: @config.breakpoints,
    default_width: @config.default_width,
    breakpoint_only: breakpoint_only
  )
  "<style>#{css}</style>"
end

#bg_image_class(src, class_suffix: nil) ⇒ Object



23
24
25
26
27
# File 'lib/bridgetown/image_pipeline/helpers.rb', line 23

def bg_image_class(src, class_suffix: nil)
  slug = File.basename(src, ".*").downcase.gsub(/[^a-z0-9]+/, "-").gsub(/\A-+|-+\z/, "")
  suffix = class_suffix ? "-#{class_suffix.to_s.downcase.gsub(/[^a-z0-9]+/, "-").gsub(/\A-+|-+\z/, "")}" : ""
  "bg-img-#{slug}#{suffix}"
end

#picture_tag(src, alt: "", sizes: nil, priority: false, **attrs) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/bridgetown/image_pipeline/helpers.rb', line 14

def picture_tag(src, alt: "", sizes: nil, priority: false, **attrs)
  entry = @manifest.find_by_src(src)
  return fallback_img(src, alt: alt, sizes: sizes, priority: priority, attrs: attrs) unless entry

  sources_html = picture_sources(entry, sizes: sizes)
  img_html     = img_for_entry(entry, src: src, alt: alt, sizes: sizes, priority: priority, attrs: attrs)
  "<picture>#{sources_html}#{img_html}</picture>"
end