Fix HTML validation (#10354)
* Fix HTML validation * Report first HTML error instead on validation error
This commit is contained in:
		| @@ -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 New Issue
	
	Block a user