module Picturefill::ViewHelper

Public Class Methods

extract(media) click to toggle source
# File lib/picturefill/view_helper.rb, line 86
def extract media
  return if media.blank?
  case media 
  when /^(\d+)$/
    "(min-width: #{media}px)"
  when /^(\d+)px$/
    "(min-width: #{media})"
  when /min-width: (\d+)$/
    "(#{media}px)"
  when /min-width: (\d+)px$/
    "(#{media})"
  else 
    raise ArgumentError, "Picturefill :media attribute could not be parsed, was: #{media}"
  end
end
filename(src) click to toggle source
# File lib/picturefill/view_helper.rb, line 74
def filename src
  src_parts = src.split('.')
  ext = src_parts[1..-1].join('.')
  [src_parts.first, ext]
end
ratio_attrib(ratio) click to toggle source
# File lib/picturefill/view_helper.rb, line 102
def ratio_attrib ratio
  ratio = ratio.to_s.delete('x')
  minor = 0
  case ratio.to_s
  when /^\d/
    major = ratio
  when /^\d.\d/
    major, minor = ratio.split '.'        
  else
    raise ArgumentError, "Invalid ratio: #{ratio}, must be a number, fx '2.5' or '2' (even 'x2' or 'x2.5')"
  end
  ratio_attribute major, minor
end
ratio_file_name(src, ratio_opt) click to toggle source
# File lib/picturefill/view_helper.rb, line 80
def ratio_file_name src, ratio_opt
  fn_parts = filename(src)
  ratio_opt = ratio_opt.delete('x')
  "#{fn_parts.first}_x2.#{fn_parts.last}"
end

Protected Class Methods

ratio_attribute(major, minor) click to toggle source
# File lib/picturefill/view_helper.rb, line 118
def ratio_attribute major, minor
  "(min-device-pixel-ratio: #{major}.#{minor})"
end

Public Instance Methods

imageset_tag(src, srcset = nil, options = {})
Alias for: imgset_tag
imgset_tag(src, srcset = nil, options = {}) click to toggle source
# File lib/picturefill/view_helper.rb, line 3
def imgset_tag src, srcset = nil, options = {}
  options.merge!(:src => src)
  options.merge!(:srcset => srcset) if srcset
  content_tag :img, nil, options
end
Also aliased as: imageset_tag
picture_fallback(src, options = {}) click to toggle source
# File lib/picturefill/view_helper.rb, line 69
def picture_fallback src, options = {}
  content_tag :noscript, content_tag(:img, nil, options.merge(src: src))
end
picture_src(src, *args) click to toggle source

UGLY AS HELL!!! Needs refactor :P

# File lib/picturefill/view_helper.rb, line 35
def picture_src src, *args
  options = args.extract_options!
  media = args.first.to_s if args.first.kind_of?(String) || args.first.kind_of?(Fixnum)

  tag = options[:tag] || :div
  ratio_opt = options.delete(:ratio)
  media_opt = Picturefill::ViewHelper.extract media unless media.blank? 

  unless media_opt && media_opt =~ /min-device-pixel-ratio/
    # use filename to provide ratio_opt
    filename = Picturefill::ViewHelper.filename(src).first
    fn = filename =~ /_x\d(\d)?/
    if fn && !ratio_opt
      ratio_opt = filename.match(/x\d(\d)?$/).to_s
    else
      auto_ratio_tag = ratio_opt[0] == 'x' unless ratio_opt.blank?
    end
    ratio = Picturefill::ViewHelper.ratio_attrib(ratio_opt) unless ratio_opt.blank?
    media_opt = [media_opt, ratio].compact.join(' and ')
  end
  
  next_content = if auto_ratio_tag
    opts = options.dup
    filename = Picturefill::ViewHelper.ratio_file_name src, ratio_opt
    opts.merge!(:ratio => ratio_opt.delete('x'))
    picture_src filename, media, opts
  end

  options.merge! :"data-media" => media_opt unless auto_ratio_tag || media_opt.blank?
  options.merge! :"data-src" => src      

  content_tag(tag, nil, options) + next_content
end
picture_tag(alt = nil) click to toggle source
# File lib/picturefill/view_helper.rb, line 10
def picture_tag alt = nil
  options = {}
  options.merge alt: alt if alt
  content_tag :picture, nil, options
end
picturefill(options = {}) click to toggle source
# File lib/picturefill/view_helper.rb, line 22
def picturefill options = {}, &block
  opts = {}
  alt = options.delete :alt
  clazz = options.delete :class
  opts.merge! :"data-alt" => alt unless alt.blank?
  opts.merge! "class" => clazz unless clazz.blank?
  opts.merge! :"data-picture" => true

  content = block_given? ? capture(&block) : ''
  content_tag :div, content, opts
end
source_tag(src, *args) click to toggle source
# File lib/picturefill/view_helper.rb, line 16
def source_tag src, *args
  options = args.extract_options!
  media = args.first.to_s if args.first.kind_of?(String) || args.first.kind_of?(Fixnum)      
  picture_src src, media, options.merge(tag: :source)
end