otwarchive-symphonyarchive/app/models/work_skin.rb

53 lines
1.8 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
class WorkSkin < Skin
include SkinCacheHelper
has_many :works
after_save :skin_invalidate_cache
# override parent's clean_css to append a prefix
def clean_css
return if self.css.blank?
check = lambda {|ruleset, property, value|
# If it starts with --, assume the user was trying to define a custom property.
if property.match(/\A--/)
errors.add(:base, :work_skin_custom_properties)
return false
end
if value.match(/\bvar\b/i)
errors.add(:base, :work_skin_var)
return false
end
if property == "position" && value == "fixed"
# Do not internationalize the , used as a join in this error -- it's reflective of the comma used in the list of selectors, which does not change based on locale.
errors.add(:base, :work_skin_banned_value_for_property, property: property, selectors: ruleset.selectors.join(", "), value: value)
return false
end
return true
}
options = {prefix: "#workskin", caller_check: check}
self.css = clean_css_code(self.css, options)
end
def self.model_name
# re-use the model_name of the superclass (Skin)
self.superclass.model_name
end
def self.basic_formatting
Skin.find_by(title: "Basic Formatting", official: true) || WorkSkin.import_basic_formatting
end
def self.import_basic_formatting
css = File.read(File.join(Rails.public_path, "/stylesheets/work_skins/basic_formatting.css"))
skin = WorkSkin.find_or_create_by(title: "Basic Formatting", css: css, role: "user", public: true, official: true)
skin.icon.attach(
io: File.open(File.join(Rails.public_path, "/images/skins/previews/basic_formatting.png"), "rb"),
filename: "basic_formatting.png",
content_type: "image/png"
)
skin.official = true
skin.save!
skin
end
end