Test size

This commit is contained in:
Brabli
2022-08-06 20:00:00 +01:00
parent d833ae95de
commit 03b705cf5f
3 changed files with 114 additions and 5 deletions

View File

@@ -9,13 +9,16 @@ use Twig\TwigFunction;
final class IconExtension extends AbstractExtension
{
public function __construct(private array $directories) {}
public const DEFAULT_SIZE = 32;
private const DEFAULT_OPTIONS = [
'icon' => null,
'title' => null,
'size' => self::DEFAULT_SIZE
];
public function __construct(private array $directories) {}
/**
* @inheritDoc
*/
@@ -30,6 +33,7 @@ final class IconExtension extends AbstractExtension
/**
* @param array $options
* [ options here ]
*/
public function renderIcon(array $userOptions): string
{
@@ -43,6 +47,16 @@ final class IconExtension extends AbstractExtension
$markup = $this->addTitleToMarkup($cleanSvgMarkup, $options['title']);
}
if ($options['size'] < 0)
throw new \InvalidArgumentException('Size must not be negative');
if (!is_int($options['size']))
throw new \TypeError('Size value must be an integer');
$markup = $this->setSize($markup, $options['size']);
return $markup;
}
@@ -87,12 +101,35 @@ final class IconExtension extends AbstractExtension
private function addTitleToMarkup(string $markup, ?string $title): string
{
if (null === $title) {
if (null === $title)
return $markup;
}
return preg_replace('/(<svg(.|\n)*?>\n?)/', "$1<title>$title</title>", $markup);
}
private function setSize(string $content, int $size): string
{
$svgAsXmlElement = new \SimpleXMLElement($content);
$svgAsXmlElement = $this->addAttributeToXmlElement($svgAsXmlElement, 'width', $size);
$svgAsXmlElement = $this->addAttributeToXmlElement($svgAsXmlElement, 'height', $size);
return $this->removeXMLDeclaration($svgAsXmlElement->saveXML());
}
private function removeXMLDeclaration(string $content): string
{
return trim(preg_replace('/<\?xml.*\?>/', '', $content));
}
private function addAttributeToXmlElement(\SimpleXMLElement $xml, string $attrName, mixed $attrValue): \SimpleXMLElement
{
if (isset($xml->attributes()->$attrName)) {
$xml->attributes()->$attrName = strval($attrValue);
} else {
$xml->addAttribute($attrName, strval($attrValue));
}
return $xml;
}
}
class IconNotFound extends \Exception {};