Fix HTML validation (#10354)
* Fix HTML validation * Report first HTML error instead on validation error
This commit is contained in:
		
							parent
							
								
									6f6abc369f
								
							
						
					
					
						commit
						0c46bd11aa
					
				
					 2 changed files with 8 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -3,12 +3,16 @@
 | 
			
		|||
class HtmlValidator < ActiveModel::EachValidator
 | 
			
		||||
  def validate_each(record, attribute, value)
 | 
			
		||||
    return if value.blank?
 | 
			
		||||
    record.errors.add(attribute, I18n.t('html_validator.invalid_markup')) unless valid_html?(value)
 | 
			
		||||
    errors = html_errors(value)
 | 
			
		||||
    unless errors.empty?
 | 
			
		||||
      record.errors.add(attribute, I18n.t('html_validator.invalid_markup', error: errors.first.to_s))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def valid_html?(str)
 | 
			
		||||
    Nokogiri::HTML.fragment(str).to_s == str
 | 
			
		||||
  def html_errors(str)
 | 
			
		||||
    fragment = Nokogiri::HTML.fragment(str)
 | 
			
		||||
    fragment.errors
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -638,7 +638,7 @@ en:
 | 
			
		|||
      one: Something isn't quite right yet! Please review the error below
 | 
			
		||||
      other: Something isn't quite right yet! Please review %{count} errors below
 | 
			
		||||
  html_validator:
 | 
			
		||||
    invalid_markup: contains invalid HTML markup
 | 
			
		||||
    invalid_markup: 'contains invalid HTML markup: %{error}'
 | 
			
		||||
  identity_proofs:
 | 
			
		||||
    active: Active
 | 
			
		||||
    authorize: Yes, authorize
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue