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:
OsamaSayegh
2018-03-05 03:04:23 +03:00
committed by Sam
parent 322618fc34
commit 282f53f0cd
42 changed files with 1202 additions and 217 deletions

View File

@ -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

View 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