lib/sprockets/sass/functions.rb in sprockets-sass-1.3.1 vs lib/sprockets/sass/functions.rb in sprockets-sass-2.0.0.beta1

- old
+ new

@@ -1,163 +1,28 @@ -require 'sass' - -module Sprockets - module Sass +# frozen_string_literal: true +module Sass + module Script + # Original Sass script functions are overidden with this methods module Functions - # Using Sprockets::Context#asset_data_uri return a Base64-encoded `data:` - # URI with the contents of the asset at the specified path. - # - # === Examples - # - # background: asset-data-uri("image.jpg"); // background: url(data:image/jpeg;base64,...); - # - def asset_data_uri(source) - ::Sass::Script::String.new "url(#{sprockets_context.asset_data_uri(source.value)})" - end + include Sprockets::Sass::Utils.get_class_by_version('Functions') - # Using Sprockets::Helpers#asset_path, return the full path - # for the given +source+ as a Sass String. This supports keyword - # arguments that mirror the +options+. - # - # === Examples - # - # background: url(asset-path("image.jpg")); // background: url("/assets/image.jpg"); - # background: url(asset-path("image.jpg", $digest: true)); // background: url("/assets/image-27a8f1f96afd8d4c67a59eb9447f45bd.jpg"); - # - def asset_path(source, options = {}) - # Work with the Sass::Rails #asset_path API - if options.respond_to? :value - kind = options.value - options = {} - end - - if kind && sprockets_context.respond_to?("#{kind}_path") - ::Sass::Script::String.new sprockets_context.send("#{kind}_path", source.value), :string - else - ::Sass::Script::String.new sprockets_context.asset_path(source.value, map_options(options)).to_s, :string - end + # Hack to ensure previous API declarations (by Compass or whatever) + # don't take precedence. + %i(asset_path asset_url image_path image_url font_path font_url asset_data_uri).each do |method| + defined?(@signatures) && @signatures.delete(method) end - # Using Sprockets::Helpers#asset_path, return the url CSS - # for the given +source+ as a Sass String. This supports keyword - # arguments that mirror the +options+. - # - # === Examples - # - # background: asset-url("image.jpg"); // background: url("/assets/image.jpg"); - # background: asset-url("image.jpg", $digest: true); // background: url("/assets/image-27a8f1f96afd8d4c67a59eb9447f45bd.jpg"); - # - def asset_url(source, options = {}) - ::Sass::Script::String.new "url(#{asset_path(source, options)})" - end - - # Using Sprockets::Helpers#image_path, return the full path - # for the given +source+ as a Sass String. This supports keyword - # arguments that mirror the +options+. - # - # === Examples - # - # background: url(image-path("image.jpg")); // background: url("/assets/image.jpg"); - # background: url(image-path("image.jpg", $digest: true)); // background: url("/assets/image-27a8f1f96afd8d4c67a59eb9447f45bd.jpg"); - # - def image_path(source, options = {}) - ::Sass::Script::String.new sprockets_context.image_path(source.value, map_options(options)).to_s, :string - end - - # Using Sprockets::Helpers#image_path, return the url CSS - # for the given +source+ as a Sass String. This supports keyword - # arguments that mirror the +options+. - # - # === Examples - # - # background: image-url("image.jpg"); // background: url("/assets/image.jpg"); - # background: image-url("image.jpg", $digest: true); // background: url("/assets/image-27a8f1f96afd8d4c67a59eb9447f45bd.jpg"); - # - def image_url(source, options = {}, cache_buster = nil) - # Work with the Compass #image_url API - if options.respond_to? :value - case options.value - when true - return image_path source - else - options = {} - end - end - ::Sass::Script::String.new "url(#{image_path(source, options)})" - end - - # Using Sprockets::Helpers#font_path, return the full path - # for the given +source+ as a Sass String. This supports keyword - # arguments that mirror the +options+. - # - # === Examples - # - # src: url(font-path("font.ttf")); // src: url("/assets/font.ttf"); - # src: url(font-path("font.ttf", $digest: true)); // src: url("/assets/font-27a8f1f96afd8d4c67a59eb9447f45bd.ttf"); - # - def font_path(source, options = {}) - ::Sass::Script::String.new sprockets_context.font_path(source.value, map_options(options)).to_s, :string - end - - # Using Sprockets::Helpers#font_path, return the url CSS - # for the given +source+ as a Sass String. This supports keyword - # arguments that mirror the +options+. - # - # === Examples - # - # src: font-url("font.ttf"); // src: url("/assets/font.ttf"); - # src: font-url("image.jpg", $digest: true); // src: url("/assets/font-27a8f1f96afd8d4c67a59eb9447f45bd.ttf"); - # - def font_url(source, options = {}) - # Work with the Compass #font_url API - if options.respond_to? :value - case options.value - when true - return font_path source - else - options = {} - end - end - ::Sass::Script::String.new "url(#{font_path(source, options)})" - end - - protected - - # Returns a reference to the Sprocket's context through - # the importer. - def sprockets_context # :nodoc: - options[:custom][:sprockets_context] - end - - # Returns an options hash where the keys are symbolized - # and the values are unwrapped Sass literals. - def map_options(options = {}) # :nodoc: - ::Sass::Util.map_hash(options) do |key, value| - [key.to_sym, value.respond_to?(:value) ? value.value : value] - end - end + declare :asset_path, [:source], var_kwargs: true + declare :asset_path, %i(source kind) + declare :asset_url, [:source], var_kwargs: true + declare :asset_url, %i(source kind) + declare :image_path, [:source], var_kwargs: true + declare :image_url, [:source], var_kwargs: true + declare :image_url, %i(source only_path) + declare :image_url, %i(source only_path cache_buster) + declare :font_path, [:source], var_kwargs: true + declare :font_url, [:source], var_kwargs: true + declare :font_url, %i(source only_path) + declare :asset_data_uri, [:source] end end -end - -module Sass::Script::Functions - include Sprockets::Sass::Functions - - # Hack to ensure previous API declarations (by Compass or whatever) - # don't take precedence. - [:asset_path, :asset_url, :image_path, :image_url, :font_path, :font_url, :asset_data_uri].each do |method| - defined?(@signatures) && @signatures.delete(method) - end - - declare :asset_path, [:source], :var_kwargs => true - declare :asset_path, [:source, :kind] - declare :asset_url, [:source], :var_kwargs => true - declare :asset_url, [:source, :kind] - declare :image_path, [:source], :var_kwargs => true - declare :image_url, [:source], :var_kwargs => true - declare :image_url, [:source, :only_path] - declare :image_url, [:source, :only_path, :cache_buster] - declare :font_path, [:source], :var_kwargs => true - declare :font_url, [:source], :var_kwargs => true - declare :font_url, [:source, :only_path] - declare :asset_data_uri, [:source] end