mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-06-16 01:42:38 +08:00
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.
51 lines
1.5 KiB
Ruby
Vendored
51 lines
1.5 KiB
Ruby
Vendored
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
|