Skip to content

Commit 8847799

Browse files
stlgaitsKocal
authored andcommitted
[Icons] fix set default viewBox when not defined in Iconify icon set
1 parent 06a5d89 commit 8847799

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

src/Icons/src/Iconify.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ final class Iconify
3434
// -safe margin
3535
private const MAX_ICONS_QUERY_LENGTH = 400;
3636

37+
private const DEFAULT_ICON_WIDTH = 16;
38+
private const DEFAULT_ICON_HEIGHT = 16;
39+
3740
private HttpClientInterface $http;
3841
private \ArrayObject $sets;
3942
private int $maxIconsQueryLength;
@@ -81,13 +84,10 @@ public function fetchIcon(string $prefix, string $name): Icon
8184

8285
$height = $data['icons'][$name]['height'] ?? $data['height'] ?? $this->sets()[$prefix]['height'] ?? null;
8386
$width = $data['icons'][$name]['width'] ?? $data['width'] ?? $this->sets()[$prefix]['width'] ?? null;
84-
if (null === $width && null === $height) {
85-
throw new \RuntimeException(\sprintf('The icon "%s:%s" does not have a width or height.', $prefix, $nameArg));
86-
}
8787

8888
return new Icon($data['icons'][$name]['body'], [
8989
'xmlns' => self::ATTR_XMLNS_URL,
90-
'viewBox' => \sprintf('0 0 %s %s', $width ?? $height, $height ?? $width),
90+
'viewBox' => \sprintf('0 0 %s %s', $width ?? $height ?? self::DEFAULT_ICON_WIDTH, $height ?? $width ?? self::DEFAULT_ICON_HEIGHT),
9191
]);
9292
}
9393

@@ -133,9 +133,10 @@ public function fetchIcons(string $prefix, array $names): array
133133
$height = $iconData['height'] ?? $data['height'] ??= $this->sets()[$prefix]['height'] ?? null;
134134
$width = $iconData['width'] ?? $data['width'] ??= $this->sets()[$prefix]['width'] ?? null;
135135

136+
136137
$icons[$iconName] = new Icon($iconData['body'], [
137138
'xmlns' => self::ATTR_XMLNS_URL,
138-
'viewBox' => \sprintf('0 0 %d %d', $width ?? $height, $height ?? $width),
139+
'viewBox' => \sprintf('0 0 %d %d', $width ?? $height ?? self::DEFAULT_ICON_WIDTH, $height ?? $width ?? self::DEFAULT_ICON_HEIGHT),
139140
]);
140141
}
141142

src/Icons/tests/Unit/IconifyTest.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public function testFetchIconUsesIconsetViewBoxHeight()
119119
$this->assertEquals('0 0 17 17', $icon->getAttributes()['viewBox']);
120120
}
121121

122-
public function testFetchIconThrowsWhenViewBoxCannotBeComputed()
122+
public function testFetchIconSetsDefaultViewBoxTo16()
123123
{
124124
$iconify = new Iconify(
125125
cache: new NullAdapter(),
@@ -138,10 +138,11 @@ public function testFetchIconThrowsWhenViewBoxCannotBeComputed()
138138
]),
139139
);
140140

141-
$this->expectException(\RuntimeException::class);
142-
$this->expectExceptionMessage('The icon "bi:heart" does not have a width or height.');
141+
$icon = $iconify->fetchIcon('bi', 'heart');
143142

144-
$iconify->fetchIcon('bi', 'heart');
143+
$this->assertIsArray($icon->getAttributes());
144+
$this->assertArrayHasKey('viewBox', $icon->getAttributes());
145+
$this->assertEquals('0 0 16 16', $icon->getAttributes()['viewBox']);
145146
}
146147

147148
public function testFetchIconThrowsWhenStatusCodeNot200()

0 commit comments

Comments
 (0)