mirror of
https://github.com/discourse/discourse.git
synced 2025-05-23 18:01:09 +08:00
Theming: a UI to choose some base colors that are applied to all the site css. CSS compiled outside of asset pipeline.
This commit is contained in:
55
lib/sass/discourse_sass_compiler.rb
Normal file
55
lib/sass/discourse_sass_compiler.rb
Normal file
@ -0,0 +1,55 @@
|
||||
require_dependency 'sass/discourse_sass_importer'
|
||||
|
||||
class DiscourseSassCompiler
|
||||
|
||||
def self.compile(scss, target, opts={})
|
||||
self.new(scss, target).compile(opts)
|
||||
end
|
||||
|
||||
# Takes a Sass::SyntaxError and generates css that will show the
|
||||
# error at the bottom of the page.
|
||||
def self.error_as_css(sass_error, label)
|
||||
error = sass_error.sass_backtrace_str(label)
|
||||
error.gsub!("\n", '\A ')
|
||||
error.gsub!("'", '\27 ')
|
||||
|
||||
"footer { white-space: pre; }
|
||||
footer:after { content: '#{error}' }"
|
||||
end
|
||||
|
||||
|
||||
def initialize(scss, target)
|
||||
@scss = scss
|
||||
@target = target
|
||||
end
|
||||
|
||||
# Compiles the given scss and output the css as a string.
|
||||
#
|
||||
# Options:
|
||||
# safe: (boolean) if true, theme and plugin stylesheets will not be included. Default is false.
|
||||
def compile(opts={})
|
||||
env = Rails.application.assets
|
||||
|
||||
# In production Rails.application.assets is a Sprockets::Index
|
||||
# instead of Sprockets::Environment, there is no cleaner way
|
||||
# to get the environment from the index.
|
||||
if env.is_a?(Sprockets::Index)
|
||||
env = env.instance_variable_get('@environment')
|
||||
end
|
||||
|
||||
context = env.context_class.new(env, "#{@target}.scss", "app/assets/stylesheets/#{@target}.scss")
|
||||
|
||||
::Sass::Engine.new(@scss, {
|
||||
syntax: :scss,
|
||||
cache: false,
|
||||
read_cache: false,
|
||||
style: Rails.env.production? ? :compressed : :expanded,
|
||||
filesystem_importer: opts[:safe] ? DiscourseSafeSassImporter : DiscourseSassImporter,
|
||||
sprockets: {
|
||||
context: context,
|
||||
environment: context.environment
|
||||
}
|
||||
}).render
|
||||
end
|
||||
|
||||
end
|
Reference in New Issue
Block a user