DEV: Remove child theme settings/variables from parent compilation (#16001)

aa1442fdc3 split theme stylesheets so that every component gets its own stylesheet. Therefore, there is now no need for parent themes to collate the settings/variables of its children during scss compilation.

Technically this is a breaking change for any themes which depend on the settings/variables of their child components. That was never a supported/recommended arrangement, so we don't expect this to cause issues.
This commit is contained in:
David Taylor 2022-02-21 11:15:35 +00:00 committed by GitHub
parent c8d956374d
commit 5d6d3fb244
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 56 deletions

View File

@ -470,16 +470,6 @@ class Theme < ActiveRecord::Base
end
end
def all_theme_variables
fields = {}
ids = Theme.transform_ids(id)
ThemeField.find_by_theme_ids(ids).where(type_id: ThemeField.theme_var_type_ids).each do |field|
next if fields.key?(field.name)
fields[field.name] = field
end
fields.values
end
def add_relative_theme!(kind, theme)
new_relation = if kind == :child
child_theme_relation.new(child_theme_id: theme.id)
@ -559,17 +549,6 @@ class Theme < ActiveRecord::Base
hash
end
def included_settings
hash = {}
Theme.where(id: Theme.transform_ids(id)).each do |theme|
hash.merge!(theme.build_settings_hash)
end
hash.merge!(self.build_settings_hash)
hash
end
def update_setting(setting_name, new_value)
target_setting = settings.find { |setting| setting.name == setting_name }
raise Discourse::NotFound unless target_setting
@ -654,11 +633,14 @@ class Theme < ActiveRecord::Base
end
def scss_variables
return if all_theme_variables.empty? && included_settings.empty?
settings_hash = build_settings_hash
theme_variable_fields = var_theme_fields
return if theme_variable_fields.empty? && settings_hash.empty?
contents = +""
all_theme_variables&.each do |field|
theme_variable_fields&.each do |field|
if field.type_id == ThemeField.types[:theme_upload_var]
if upload = field.upload
url = upload_cdn_path(upload.url)
@ -669,7 +651,7 @@ class Theme < ActiveRecord::Base
end
end
included_settings&.each do |name, value|
settings_hash&.each do |name, value|
next if name == "theme_uploads"
contents << to_scss_variable(name, value)
end

View File

@ -565,36 +565,6 @@ HTML
expect(json["my_upload"]).to eq("http://cdn.localhost#{upload.url}")
end
it 'handles child settings correctly' do
Theme.destroy_all
expect(included_settings(theme.id)).to eq("{}")
theme.set_field(target: :settings, name: "yaml", value: "boolean_setting: true")
theme.save!
expect(included_settings(theme.id)).to match(/\"boolean_setting\":true/)
theme.settings.first.value = "false"
theme.save!
expect(included_settings(theme.id)).to match(/\"boolean_setting\":false/)
child.set_field(target: :settings, name: "yaml", value: "integer_setting: 54")
child.save!
theme.add_relative_theme!(:child, child)
json = included_settings(theme.id)
expect(json).to match(/\"boolean_setting\":false/)
expect(json).to match(/\"integer_setting\":54/)
expect(included_settings(child.id)).to eq("{\"integer_setting\":54}")
child.destroy!
json = included_settings(theme.id)
expect(json).not_to match(/\"integer_setting\":54/)
expect(json).to match(/\"boolean_setting\":false/)
end
describe "convert_settings" do
it 'can migrate a list field to a string field with json schema' do

View File

@ -650,7 +650,7 @@ describe Admin::ThemesController do
expect(response.parsed_body["bg"]).to eq("green")
theme.reload
expect(theme.included_settings[:bg]).to eq("green")
expect(theme.cached_settings[:bg]).to eq("green")
user_history = UserHistory.last
expect(user_history.action).to eq(
@ -663,7 +663,7 @@ describe Admin::ThemesController do
theme.reload
expect(response.status).to eq(200)
expect(theme.included_settings[:bg]).to eq("")
expect(theme.cached_settings[:bg]).to eq("")
end
end
end