From 4e4091f6c98e3d9e547252a5f94262bec344b952 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 1 Feb 2023 17:13:00 -0300 Subject: [PATCH] feat: limpieza de estilos esto permite guardar los nuevos estilos sin permitir otras cosas sutty/editor!1 --- app/models/metadata_content.rb | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/app/models/metadata_content.rb b/app/models/metadata_content.rb index 06c266a5..1664a18f 100644 --- a/app/models/metadata_content.rb +++ b/app/models/metadata_content.rb @@ -77,9 +77,40 @@ class MetadataContent < MetadataTemplate resource['controls'] = true end + # Elimina los estilos salvo los que asigne el editor + html.css('[style]').each do |element| + if (style = sanitize_style(element['style'])).present? + element['style'] = style + else + element.remove_attribute('style') + end + end + html.to_s.html_safe end + # Limpia estilos en base a una lista de permitidos + # + # @param style [String] + # @return [String] + def sanitize_style(style) + style.split(';').reduce({}) do |style_hash, style_string| + key, value = style_string.split(':', 2) + + style_hash[key] ||= value + style_hash + end.slice(*allowed_styles).map do |style_pair| + style_pair.join(':') + end.join(';') + end + + # Estilos permitidos + # + # @return [Array] + def allowed_styles + @allowed_styles ||= %w[text-align color background-color] + end + # Convierte una ubicación local al sitio en una URL de ActiveStorage # # XXX: Por qué son tan díficiles de encontrar las rutas de AS