mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 21:35:48 +08:00
7878e5007a
If a theme setting contained invalid SCSS, it would cause an error 500 on the site, with no way to recover. This commit stops loading theme settings in the core stylesheets, and instead only loads the color scheme variables. This change also makes `common/foundation/variables.scss` available to themes without an explicit import.
52 lines
1.5 KiB
Ruby
52 lines
1.5 KiB
Ruby
require_dependency 'stylesheet/common'
|
|
require_dependency 'stylesheet/importer'
|
|
require_dependency 'stylesheet/functions'
|
|
|
|
module Stylesheet
|
|
|
|
class Compiler
|
|
|
|
def self.compile_asset(asset, options = {})
|
|
|
|
if Importer.special_imports[asset.to_s]
|
|
filename = "theme.scss"
|
|
file = "@import \"common/foundation/variables\"; @import \"theme_variables\"; @import \"#{asset}\";"
|
|
else
|
|
filename = "#{asset}.scss"
|
|
path = "#{ASSET_ROOT}/#{filename}"
|
|
file = File.read path
|
|
end
|
|
|
|
compile(file, filename, options)
|
|
|
|
end
|
|
|
|
def self.compile(stylesheet, filename, options = {})
|
|
source_map_file = options[:source_map_file] || "#{filename.sub(".scss", "")}.css.map"
|
|
|
|
engine = SassC::Engine.new(stylesheet,
|
|
importer: Importer,
|
|
filename: filename,
|
|
style: :compressed,
|
|
source_map_file: source_map_file,
|
|
source_map_contents: true,
|
|
theme_id: options[:theme_id],
|
|
theme: options[:theme],
|
|
theme_field: options[:theme_field],
|
|
load_paths: [ASSET_ROOT])
|
|
|
|
result = engine.render
|
|
|
|
if options[:rtl]
|
|
require 'r2'
|
|
[R2.r2(result), nil]
|
|
else
|
|
source_map = engine.source_map
|
|
source_map.force_encoding("UTF-8")
|
|
|
|
[result, source_map]
|
|
end
|
|
end
|
|
end
|
|
end
|