FIX Add 'legal empty attributes' to allow empty alt values on imgs

In some situations, a caption is used in place of a value in the alt
attribute, and in others an image may be cosmetic and not in need of an
alt attribute value (though the alt attribute must still be rendered in
this case).
This commit is contained in:
Garion Herman 2019-09-24 10:36:27 +12:00
parent 3cfc21c405
commit 0d27f32cc9
2 changed files with 24 additions and 1 deletions

View File

@ -39,6 +39,16 @@ class HTML
'wbr' 'wbr'
]; ];
/**
* List of attributes that should be rendered even if they contain no value
*
* @config
* @var array
*/
private static $legal_empty_attributes = [
'alt',
];
/** /**
* Construct and return HTML tag. * Construct and return HTML tag.
* *
@ -52,10 +62,13 @@ class HTML
$tag = strtolower($tag); $tag = strtolower($tag);
// Build list of arguments // Build list of arguments
$legalEmptyAttributes = static::config()->get('legal_empty_attributes');
$preparedAttributes = ''; $preparedAttributes = '';
foreach ($attributes as $attributeKey => $attributeValue) { foreach ($attributes as $attributeKey => $attributeValue) {
$whitelisted = in_array($attributeKey, $legalEmptyAttributes);
// Only set non-empty strings (ensures strlen(0) > 0) // Only set non-empty strings (ensures strlen(0) > 0)
if (strlen($attributeValue) > 0) { if (strlen($attributeValue) > 0 || $whitelisted) {
$preparedAttributes .= sprintf( $preparedAttributes .= sprintf(
' %s="%s"', ' %s="%s"',
$attributeKey, $attributeKey,

View File

@ -45,6 +45,16 @@ class HTMLTest extends SapphireTest
$this->assertEquals('<a title="HTML &amp; Text">Some <strong>content!</strong></a>', $tag); $this->assertEquals('<a title="HTML &amp; Text">Some <strong>content!</strong></a>', $tag);
} }
public function testImgTag()
{
$tag = HTML::createTag('img', [
'src' => 'example.png',
'alt' => '',
]);
$this->assertEquals('<img src="example.png" alt="" />', $tag);
}
public function testVoidContentError() public function testVoidContentError()
{ {
$this->expectException(InvalidArgumentException::class); $this->expectException(InvalidArgumentException::class);