FIX: In components, fall back to default theme color variables (#12423)
Component SCSS compilation should use the current theme's SCSS color variables as a fallback before using the default core colors. This is mostly a backwards-compatibility fix, new themes and components should use CSS custom properties, which offer better support for on-the-fly color scheme changes (dark mode support, etc.).
This commit is contained in:
parent
97623f5351
commit
eb7f0ec766
|
@ -135,8 +135,11 @@ module Stylesheet
|
||||||
rescue
|
rescue
|
||||||
ColorScheme.base_colors
|
ColorScheme.base_colors
|
||||||
end
|
end
|
||||||
|
elsif (@theme_id && theme.color_scheme)
|
||||||
|
colors = theme.color_scheme.resolved_colors
|
||||||
else
|
else
|
||||||
colors = (@theme_id && theme.color_scheme) ? theme.color_scheme.resolved_colors : ColorScheme.base_colors
|
colors = Theme.find_by_id(SiteSetting.default_theme_id)&.color_scheme&.resolved_colors ||
|
||||||
|
ColorScheme.base_colors
|
||||||
end
|
end
|
||||||
|
|
||||||
colors.each do |n, hex|
|
colors.each do |n, hex|
|
||||||
|
|
|
@ -415,6 +415,24 @@ describe Stylesheet::Manager do
|
||||||
|
|
||||||
expect { stylesheet.compile }.not_to raise_error
|
expect { stylesheet.compile }.not_to raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "child theme SCSS includes the default theme's color scheme variables" do
|
||||||
|
SiteSetting.default_theme_id = theme.id
|
||||||
|
custom_scheme = ColorScheme.create_from_base(name: "Neutral", base_scheme_id: "Neutral")
|
||||||
|
ColorSchemeRevisor.revise(custom_scheme, colors: [{ name: "primary", hex: "CC0000" }])
|
||||||
|
theme.color_scheme_id = custom_scheme.id
|
||||||
|
theme.save!
|
||||||
|
|
||||||
|
scss = "body{ border: 2px solid $primary;}"
|
||||||
|
child.set_field(target: :common, name: "scss", value: scss)
|
||||||
|
child.save!
|
||||||
|
|
||||||
|
child_theme_manager = Stylesheet::Manager.new(:desktop_theme, child.id)
|
||||||
|
child_theme_manager.compile(force: true)
|
||||||
|
|
||||||
|
child_css = File.read(child_theme_manager.stylesheet_fullpath)
|
||||||
|
expect(child_css).to include("body{border:2px solid #c00}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'encoded slugs' do
|
context 'encoded slugs' do
|
||||||
|
|
Loading…
Reference in New Issue