module Compass::Core::SassExtensions::Functions::Urls::FontUrl

Public Class Methods

included(base) click to toggle source
# File lib/compass/core/sass_extensions/functions/urls.rb, line 43
def self.included(base)
  if base.respond_to?(:declare)
    base.declare :font_url,       [:path]
    base.declare :font_url,       [:path, :only_path]
    base.declare :font_url,       [:path, :only_path, :cache_buster]
  end
end

Public Instance Methods

font_url(path, only_path = bool(false), cache_buster = bool(true)) click to toggle source
# File lib/compass/core/sass_extensions/functions/urls.rb, line 50
def font_url(path, only_path = bool(false), cache_buster = bool(true))
  path = path.value # get to the string value of the literal.

  # Short curcuit if they have provided an absolute url.
  if absolute_path?(path)
    return unquoted_string("url(#{path})")
  end

  # Compute the path to the font file, either root relative or stylesheet relative
  # or nil if the http_fonts_path cannot be determined from the configuration.
  http_fonts_path = if relative?
                      compute_relative_path(Compass.configuration.fonts_path)
                    else
                      Compass.configuration.http_fonts_path
                    end

  # Compute the real path to the font on the file system if the fonts_dir is set.
  real_path = if Compass.configuration.fonts_dir
    File.join(Compass.configuration.fonts_path, path.gsub(/[?#].*$/,""))
  end

  # prepend the path to the font if there's one
  if http_fonts_path
    http_fonts_path = "#{http_fonts_path}/" unless http_fonts_path[-1..-1] == "/"
    path = "#{http_fonts_path}#{path}"
  end

  # Compute the asset host unless in relative mode.
  asset_host = if !relative? && Compass.configuration.asset_host
    Compass.configuration.asset_host.call(path)
  end

  # Compute and append the cache buster if there is one.
  if cache_buster.to_bool
    path, anchor = path.split("#", 2)
    if cache_buster.is_a?(Sass::Script::Value::String)
      path += "#{path["?"] ? "&" : "?"}#{cache_buster.value}"
    else
      path = cache_busted_path(path, real_path)
    end
    path = "#{path}#{"#" if anchor}#{anchor}"
  end

  # prepend the asset host if there is one.
  path = "#{asset_host}#{'/' unless path[0..0] == "/"}#{path}" if asset_host

  if only_path.to_bool
    unquoted_string(clean_path(path))
  else
    clean_url(path)
  end
end