mirror of
https://github.com/discourse/discourse.git
synced 2025-06-03 02:48:28 +08:00
FEATURE: Theme settings (2) (#5611)
Allows theme authors to specify custom theme settings for the theme. Centralizes the theme/site settings into a single construct
This commit is contained in:
@ -24,11 +24,7 @@ class ThemeFieldSerializer < ApplicationSerializer
|
||||
end
|
||||
|
||||
def target
|
||||
case object.target_id
|
||||
when 0 then "common"
|
||||
when 1 then "desktop"
|
||||
when 2 then "mobile"
|
||||
end
|
||||
Theme.lookup_target(object.target_id)&.to_s
|
||||
end
|
||||
|
||||
def include_error?
|
||||
@ -60,7 +56,7 @@ class RemoteThemeSerializer < ApplicationSerializer
|
||||
end
|
||||
|
||||
class ThemeSerializer < ChildThemeSerializer
|
||||
attributes :color_scheme, :color_scheme_id, :user_selectable, :remote_theme_id
|
||||
attributes :color_scheme, :color_scheme_id, :user_selectable, :remote_theme_id, :settings
|
||||
|
||||
has_many :theme_fields, serializer: ThemeFieldSerializer, embed: :objects
|
||||
has_many :child_themes, serializer: ChildThemeSerializer, embed: :objects
|
||||
@ -69,6 +65,10 @@ class ThemeSerializer < ChildThemeSerializer
|
||||
def child_themes
|
||||
object.child_themes.order(:name)
|
||||
end
|
||||
|
||||
def settings
|
||||
object.settings.map { |setting| ThemeSettingsSerializer.new(setting, root: false) }
|
||||
end
|
||||
end
|
||||
|
||||
class ThemeFieldWithEmbeddedUploadsSerializer < ThemeFieldSerializer
|
||||
@ -94,4 +94,8 @@ end
|
||||
|
||||
class ThemeWithEmbeddedUploadsSerializer < ThemeSerializer
|
||||
has_many :theme_fields, serializer: ThemeFieldWithEmbeddedUploadsSerializer, embed: :objects
|
||||
|
||||
def include_settings?
|
||||
false
|
||||
end
|
||||
end
|
||||
|
35
app/serializers/theme_settings_serializer.rb
Normal file
35
app/serializers/theme_settings_serializer.rb
Normal file
@ -0,0 +1,35 @@
|
||||
class ThemeSettingsSerializer < ApplicationSerializer
|
||||
attributes :setting, :type, :default, :value, :description, :valid_values
|
||||
|
||||
def setting
|
||||
object.name
|
||||
end
|
||||
|
||||
def type
|
||||
object.type_name
|
||||
end
|
||||
|
||||
def default
|
||||
object.default
|
||||
end
|
||||
|
||||
def value
|
||||
object.value
|
||||
end
|
||||
|
||||
def description
|
||||
object.description
|
||||
end
|
||||
|
||||
def valid_values
|
||||
object.choices
|
||||
end
|
||||
|
||||
def include_valid_values?
|
||||
object.type == ThemeSetting.types[:enum]
|
||||
end
|
||||
|
||||
def include_description?
|
||||
object.description.present?
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user