-Sanitize::Config::OSM = Sanitize::Config::RELAXED.dup
+Sanitize::Config::OSM = Sanitize::Config.merge(
+ Sanitize::Config::RELAXED,
+ :elements => Sanitize::Config::RELAXED[:elements] - %w[div style],
+ :remove_contents => %w[script style],
+ :transformers => lambda do |env|
+ style = env[:node]["style"] || ""
-Sanitize::Config::OSM[:elements] -= %w(div style)
-Sanitize::Config::OSM[:add_attributes] = { 'a' => { 'rel' => 'nofollow' } }
-Sanitize::Config::OSM[:remove_contents] = %w(script style)
+ env[:node].remove_class
+ env[:node].remove_attribute("style")
+
+ env[:node].add_class("table table-sm w-auto") if env[:node_name] == "table"
+
+ case style
+ when /\btext-align:\s+left\b/
+ env[:node].add_class("text-start")
+ when /\btext-align:\s+center\b/
+ env[:node].add_class("text-center")
+ when /\btext-align:\s+right\b/
+ env[:node].add_class("text-end")
+ end
+
+ if env[:node_name] == "a"
+ rel = env[:node]["rel"] || ""
+
+ env[:node]["rel"] = rel.split.select { |r| r == "me" }.append("nofollow", "noopener", "noreferrer").sort.join(" ")
+ end
+ end
+)