From 16bd3f2cf26c8919766eac8af87b774f7c8ff60c Mon Sep 17 00:00:00 2001 From: Osama Sayegh Date: Wed, 12 Sep 2018 04:04:58 +0300 Subject: [PATCH] FIX: use current user color scheme when filling `theme-color` attribute (#6384) * FIX: use current user color scheme when filling `meta` attribute `theme-color` * update manifest.webmanifest colors --- app/controllers/metadata_controller.rb | 4 ++-- app/helpers/application_helper.rb | 6 ++++++ app/models/color_scheme.rb | 12 +++++++----- app/models/theme.rb | 2 ++ app/views/layouts/_head.html.erb | 2 +- spec/models/color_scheme_spec.rb | 7 +++++++ 6 files changed, 25 insertions(+), 8 deletions(-) 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