Sha256: eda30b16a9803c0d23eaaf52776cb53aeef9702895329a500d7833983f12a84a

Contents?: true

Size: 1.5 KB

Versions: 4

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module Nanoc::Filters
  module SassCommon
    REQUIRES = %w[sass nanoc/filters/sass/importer nanoc/filters/sass/functions].freeze

    def css(filter, rep, content, params)
      css, = render(filter, rep, content, params)
      css
    end

    def sourcemap(filter, rep, content, params)
      _, sourcemap = render(filter, rep, content, params)
      sourcemap
    end

    private

    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: importer,
        filename: rep.item.identifier.to_s,
        cache: false,
      )
      sourcemap_path = options.delete(:sourcemap_path)

      engine = ::Sass::Engine.new(content, options)
      css, sourcemap = sourcemap_path ? engine.render_with_sourcemap(sourcemap_path) : engine.render
      [css, sourcemap&.to_json(css_uri: rep.path, type: rep.path.nil? ? :inline : :auto)]
    end
  end

  class SassFilter < Nanoc::Filter
    identifier :sass

    include SassCommon
    requires(*SassCommon::REQUIRES)

    def run(content, params = {})
      css(self, @item_rep, content, params)
    end
  end

  class SassSourcemapFilter < Nanoc::Filter
    identifier :sass_sourcemap

    include SassCommon
    requires(*SassCommon::REQUIRES)

    def run(content, params = {})
      sourcemap(self, @item_rep, content, params)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
nanoc-4.10.4 lib/nanoc/filters/sass.rb
nanoc-4.10.3 lib/nanoc/filters/sass.rb
nanoc-4.10.2 lib/nanoc/filters/sass.rb
nanoc-4.10.1 lib/nanoc/filters/sass.rb