Skip to content
Snippets Groups Projects
Unverified Commit 400397c0 authored by Eugen Rochko's avatar Eugen Rochko Committed by GitHub
Browse files

Change HTML validator to ignore all errors except unmatched tags (#10534)

parent 46cb36fd
No related branches found
No related tags found
No related merge requests found
......@@ -49,7 +49,8 @@ class Form::AdminSettings
attr_accessor(*KEYS)
validates :site_short_description, :site_description, :site_extended_description, :site_terms, :closed_registrations_message, html: true
validates :site_short_description, :site_description, html: { wrap_with: :p }
validates :site_extended_description, :site_terms, :closed_registrations_message, html: true
validates :registrations_mode, inclusion: { in: %w(open approved none) }
validates :min_invite_role, inclusion: { in: %w(disabled user moderator admin) }
validates :site_contact_email, :site_contact_username, presence: true
......
# frozen_string_literal: true
class HtmlValidator < ActiveModel::EachValidator
ERROR_RE = /Opening and ending tag mismatch|Unexpected end tag/
def validate_each(record, attribute, value)
return if value.blank?
errors = html_errors(value)
unless errors.empty?
record.errors.add(attribute, I18n.t('html_validator.invalid_markup', error: errors.first.to_s))
end
record.errors.add(attribute, I18n.t('html_validator.invalid_markup', error: errors.first.to_s)) unless errors.empty?
end
private
def html_errors(str)
fragment = Nokogiri::HTML.fragment(str)
fragment.errors
fragment = Nokogiri::HTML.fragment(options[:wrap_with] ? "<#{options[:wrap_with]}>#{str}</#{options[:wrap_with]}>" : str)
fragment.errors.select { |error| ERROR_RE =~ error.message }
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment