diff --git a/app/controllers/metadata_controller.rb b/app/controllers/metadata_controller.rb
index 2305936dc68..1374eb57e24 100644
--- a/app/controllers/metadata_controller.rb
+++ b/app/controllers/metadata_controller.rb
@@ -27,8 +27,8 @@ class MetadataController < ApplicationController
display: display,
orientation: 'any',
start_url: Discourse.base_uri.present? ? "#{Discourse.base_uri}/" : '.',
- background_color: "##{ColorScheme.hex_for_name('secondary')}",
- theme_color: "##{ColorScheme.hex_for_name('header_background')}",
+ background_color: "##{ColorScheme.hex_for_name('secondary', view_context.scheme_id)}",
+ theme_color: "##{ColorScheme.hex_for_name('header_background', view_context.scheme_id)}",
icons: [
{
src: logo,
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 6ad17dfbce5..2f6a1456c3a 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -362,6 +362,12 @@ module ApplicationHelper
end
end
+ def scheme_id
+ return if theme_ids.blank?
+ theme = Theme.find_by(id: theme_ids.first)
+ theme&.color_scheme_id
+ end
+
def current_homepage
current_user&.user_option&.homepage || SiteSetting.anonymous_homepage
end
diff --git a/app/models/color_scheme.rb b/app/models/color_scheme.rb
index 9a47a14952d..434765bef00 100644
--- a/app/models/color_scheme.rb
+++ b/app/models/color_scheme.rb
@@ -186,14 +186,16 @@ class ColorScheme < ActiveRecord::Base
new_color_scheme
end
- def self.lookup_hex_for_name(name)
- enabled_color_scheme = Theme.where(id: SiteSetting.default_theme_id).first&.color_scheme
+ def self.lookup_hex_for_name(name, scheme_id = nil)
+ enabled_color_scheme = find_by(id: scheme_id) if scheme_id
+ enabled_color_scheme ||= Theme.where(id: SiteSetting.default_theme_id).first&.color_scheme
(enabled_color_scheme || base).colors.find { |c| c.name == name }.try(:hex) || "nil"
end
- def self.hex_for_name(name)
- hex_cache[name] ||= lookup_hex_for_name(name)
- hex_cache[name] == "nil" ? nil : hex_cache[name]
+ def self.hex_for_name(name, scheme_id = nil)
+ cache_key = scheme_id ? name + "_#{scheme_id}" : name
+ hex_cache[cache_key] ||= lookup_hex_for_name(name, scheme_id)
+ hex_cache[cache_key] == "nil" ? nil : hex_cache[cache_key]
end
def colors=(arr)
diff --git a/app/models/theme.rb b/app/models/theme.rb
index 71a4f793d5a..467cc060fe3 100644
--- a/app/models/theme.rb
+++ b/app/models/theme.rb
@@ -51,6 +51,7 @@ class Theme < ActiveRecord::Base
remove_from_cache!
clear_cached_settings!
+ ColorScheme.hex_cache.clear
end
after_destroy do
@@ -72,6 +73,7 @@ class Theme < ActiveRecord::Base
end
Theme.expire_site_cache!
+ ColorScheme.hex_cache.clear
end
after_commit ->(theme) do
diff --git a/app/views/layouts/_head.html.erb b/app/views/layouts/_head.html.erb
index ee36992e6c0..8edde92a2b0 100644
--- a/app/views/layouts/_head.html.erb
+++ b/app/views/layouts/_head.html.erb
@@ -9,7 +9,7 @@
<%- if (SiteSetting.apple_touch_icon_url != "/images/default-apple-touch-icon.png") && SiteSetting.apple_touch_icon_url.present? %>
<%- end %>
-
+
<% if mobile_view? %>
<% else %>
diff --git a/spec/models/color_scheme_spec.rb b/spec/models/color_scheme_spec.rb
index d1ea51532f7..974f9aae1f2 100644
--- a/spec/models/color_scheme_spec.rb
+++ b/spec/models/color_scheme_spec.rb
@@ -65,6 +65,13 @@ describe ColorScheme do
expect(ColorScheme.hex_for_name('undefined')).to eq nil
end
+ it "returns the base color for an attribute of a specified scheme" do
+ scheme = ColorScheme.create_from_base(name: "test scheme")
+ ColorSchemeRevisor.revise(scheme, colors: [{ name: "header_background", hex: "9dc927", default_hex: "949493" }])
+ scheme.reload
+ expect(ColorScheme.hex_for_name("header_background", scheme.id)).to eq("9dc927")
+ end
+
it "returns the base color for an attribute" do
expect(ColorScheme.hex_for_name('second_one')).to eq base_colors[:second_one]
end