module Nanoc::Filters::SassCommon
Constants
- REQUIRES
Public Instance Methods
css(filter, rep, content, params)
click to toggle source
# File lib/nanoc/filters/sass.rb, line 7 def css(filter, rep, content, params) css, = render(filter, rep, content, params) css end
sourcemap(filter, rep, content, params)
click to toggle source
# File lib/nanoc/filters/sass.rb, line 12 def sourcemap(filter, rep, content, params) _, sourcemap = render(filter, rep, content, params) sourcemap end
Private Instance Methods
render(filter, rep, content, params = {})
click to toggle source
# File lib/nanoc/filters/sass.rb, line 19 def render(filter, rep, content, params = {}) importer = Nanoc::Filters::SassCommon::Importer.new(filter) options = params.merge( load_paths: [importer, *params[:load_paths]&.reject { |p| p.is_a?(String) && %r{^content/} =~ p }], importer:, filename: rep.item.identifier.to_s, cache: false, ) css_path = options.delete(:css_path) || filter.object_id.to_s sourcemap_path = options.delete(:sourcemap_path) if sourcemap_path == :inline sourcemap_path = Nanoc::Core::TempFilenameFactory.instance.create('sass_sourcemap') inline = true end engine = ::Sass::Engine.new(content, options) css, sourcemap = sourcemap_path ? engine.render_with_sourcemap(sourcemap_path) : engine.render if inline sourcemap = sourcemap&.to_json(css_uri: css_path) encoded = "data:application/json;base64,#{Base64.urlsafe_encode64(sourcemap)}" [css.gsub(%r{^/\*#\s+sourceMappingURL=\s*#{sourcemap_path}\s*\*/$}, "/*# sourceMappingURL=#{encoded} */")] else sourcemap = sourcemap&.to_json(css_path:, sourcemap_path:, type: params[:sources_content] ? :inline : :auto) sourcemap = sourcemap&.split("\n")&.reject { |l| l =~ /^\s*"file":\s*"#{filter.object_id}"\s*$/ }&.join("\n") [css, sourcemap] end end