module Gtn::Images

Module to handle pre-calculating image dimensions We can then use those dimensions in the HTML to avoid reflow

Public Class Methods

_get_image_dimensions(path) click to toggle source
# File _plugins/gtn/images.rb, line 44
def self._get_image_dimensions(path)
  cache.getset(path) do
    [FastImage.size(path), path]
  rescue StandardError
    Jekyll.logger.info "[GTN/Images] Could not resolve size of #{path}"
  end
end
cache() click to toggle source
# File _plugins/gtn/images.rb, line 17
def self.cache
  @@cache ||= Jekyll::Cache.new('ImageDimensions')
end
get_image_dimensions(tuto_dir, url) click to toggle source
# File _plugins/gtn/images.rb, line 33
def self.get_image_dimensions(tuto_dir, url)
  if (match = url.match(%r{^{{\s*site.baseurl\s*}}/(.*)})) || (match = url.match(/{%\s*link\s*(.*)\s*%}/))
    _get_image_dimensions(match[1].strip)
  elsif !url.match(%r{https?://})
    img_path = File.absolute_path(File.join(tuto_dir, url))
    _get_image_dimensions(img_path) if File.exist?(img_path)
  else
    _get_image_dimensions(img_path)
  end
end
html_image_dimensions(tuto_dir, url) click to toggle source
# File _plugins/gtn/images.rb, line 21
def self.html_image_dimensions(tuto_dir, url)
  return '' if !FASTIMAGE_AVAILABLE || (Jekyll.env == 'development')

  (width, height), path = get_image_dimensions(tuto_dir, url)
  return unless width && height

  [
    %(width="#{width}" height=#{height}),
    path
  ]
end