/
sass_rails_filter.rb
46 lines (42 loc) · 1.49 KB
/
sass_rails_filter.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# frozen_string_literal: true
module Haml
module Filters
# This is an extension of Sass::Rails's SassTemplate class that allows
# Rails's asset helpers to be used inside Haml Sass filter.
class SassRailsTemplate < ::Sass::Rails::SassTemplate
if Gem::Version.new(Sprockets::VERSION) >= Gem::Version.new('3.0.0')
def render(scope=Object.new, locals={}, &block)
environment = ::Sprockets::Railtie.build_environment(::Rails.application)
scope = environment.context_class.new(
environment: environment,
filename: "/",
metadata: {}
)
super
end
else
def render(scope=Object.new, locals={}, &block)
scope = ::Rails.application.assets.context_class.new(::Rails.application.assets, "/", "/")
super
end
end
def sass_options(scope)
options = super
options[:custom][:resolver] = ::ActionView::Base.new
options
end
end
# This is an extension of Sass::Rails's SassTemplate class that allows
# Rails's asset helpers to be used inside a Haml SCSS filter.
class ScssRailsTemplate < SassRailsTemplate
self.default_mime_type = 'text/css'
def syntax
:scss
end
end
remove_filter :Sass
remove_filter :Scss
register_tilt_filter "Sass", :extend => "Css", :template_class => SassRailsTemplate
register_tilt_filter "Scss", :extend => "Css", :template_class => ScssRailsTemplate
end
end