mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-05 19:03:30 -05:00
Don’t allow <text> elements in letter logos
To render text in an SVG consistently the system rendering the SVG must have the fonts specified by the SVG installed. If the fonts are not installed then the renderer will fall back to a system font and the text will look different. This is especially bad news for branding where the right font is an integral part of any brand. To fix this, the text should instead be converted to `<path>` elements. This process is sometimes called ‘outlining’. A few of our logos had this problem, and I’ve fixed most of them by hand. Adding this validation will stop the problem, coming up again.
This commit is contained in:
@@ -53,6 +53,7 @@ from app.main.validators import (
|
||||
NoCommasInPlaceHolders,
|
||||
NoEmbeddedImagesInSVG,
|
||||
NoPlaceholders,
|
||||
NoTextInSVG,
|
||||
OnlySMSCharacters,
|
||||
ValidEmail,
|
||||
ValidGovEmail,
|
||||
@@ -1884,7 +1885,8 @@ class SVGFileUpload(StripWhitespaceForm):
|
||||
validators=[
|
||||
FileAllowed(['svg'], 'SVG Images only!'),
|
||||
DataRequired(message="You need to upload a file to submit"),
|
||||
NoEmbeddedImagesInSVG()
|
||||
NoEmbeddedImagesInSVG(),
|
||||
NoTextInSVG(),
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@@ -102,6 +102,11 @@ class NoEmbeddedImagesInSVG(NoElementInSVG):
|
||||
message = 'This SVG has an embedded raster image in it and will not render well'
|
||||
|
||||
|
||||
class NoTextInSVG(NoElementInSVG):
|
||||
element = 'text'
|
||||
message = 'This SVG has text which has not been converted to paths and may not render well'
|
||||
|
||||
|
||||
class OnlySMSCharacters:
|
||||
|
||||
def __init__(self, *args, template_type, **kwargs):
|
||||
|
||||
@@ -357,6 +357,14 @@ def test_create_letter_branding_when_uploading_valid_file(
|
||||
''',
|
||||
'This SVG has an embedded raster image in it and will not render well',
|
||||
),
|
||||
(
|
||||
'''
|
||||
<svg height="100" width="100">
|
||||
<text>Will render differently depending on fonts installed</text>
|
||||
</svg>
|
||||
''',
|
||||
'This SVG has text which has not been converted to paths and may not render well',
|
||||
),
|
||||
))
|
||||
def test_create_letter_branding_fails_validation_when_uploading_SVG_with_bad_element(
|
||||
mocker,
|
||||
|
||||
Reference in New Issue
Block a user