diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs b/backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs
index 03a731650..eab5e9dce 100644
--- a/backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs
+++ b/backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs
@@ -23,7 +23,9 @@ public static class KnownMetadataKeys
public const string Longitude = "longitude";
public const string PixelHeight = "pixelHeight";
public const string PixelWidth = "pixelWidth";
+ public const string SvgHeight = "svgHeight";
+ public const string SvgViewBox = "viewBox";
+ public const string SvgWidth = "svgWidth";
public const string VideoHeight = "videoHeight";
public const string VideoWidth = "videoWidth";
- public const string ViewBox = "viewBox";
}
diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs
index 556e6fc34..eb1237126 100644
--- a/backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs
+++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs
@@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
+using System.Globalization;
using Squidex.Domain.Apps.Core.Assets;
using Squidex.Domain.Apps.Entities.Assets.Commands;
using Squidex.Infrastructure.Translations;
@@ -51,13 +52,20 @@ public sealed class SvgAssetMetadataSource : IAssetMetadataSource
if (!string.IsNullOrWhiteSpace(width) && !string.IsNullOrWhiteSpace(height))
{
- command.Metadata[KnownMetadataKeys.PixelWidth] = width;
- command.Metadata[KnownMetadataKeys.PixelHeight] = height;
+ command.Metadata[KnownMetadataKeys.SvgWidth] = width;
+ command.Metadata[KnownMetadataKeys.SvgHeight] = height;
+
+ if (int.TryParse(width, NumberStyles.Integer, CultureInfo.InvariantCulture, out var w) &&
+ int.TryParse(height, NumberStyles.Integer, CultureInfo.InvariantCulture, out var h))
+ {
+ command.Metadata[KnownMetadataKeys.PixelWidth] = w;
+ command.Metadata[KnownMetadataKeys.PixelHeight] = h;
+ }
}
if (!string.IsNullOrWhiteSpace(viewBox))
{
- command.Metadata[KnownMetadataKeys.ViewBox] = viewBox;
+ command.Metadata[KnownMetadataKeys.SvgViewBox] = viewBox;
}
}
}
@@ -82,8 +90,8 @@ public sealed class SvgAssetMetadataSource : IAssetMetadataSource
yield break;
}
- if (asset.Metadata.TryGetString(KnownMetadataKeys.PixelWidth, out var w) &&
- asset.Metadata.TryGetString(KnownMetadataKeys.PixelHeight, out var h))
+ if (asset.Metadata.TryGetString(KnownMetadataKeys.SvgWidth, out var w) &&
+ asset.Metadata.TryGetString(KnownMetadataKeys.SvgHeight, out var h))
{
yield return $"{w}x{h}";
}
diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs
index 60c58cde4..bd0ab7074 100644
--- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs
+++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs
@@ -51,7 +51,9 @@ public class SvgAssetMetadataSourceTests : GivenContext
Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.PixelWidth));
Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.PixelHeight));
- Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.ViewBox));
+ Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.SvgWidth));
+ Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.SvgHeight));
+ Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.SvgViewBox));
}
[Fact]
@@ -61,10 +63,29 @@ public class SvgAssetMetadataSourceTests : GivenContext
await sut.EnhanceAsync(command, default);
- Assert.Equal("20", command.Metadata[KnownMetadataKeys.PixelWidth].AsString);
- Assert.Equal("30", command.Metadata[KnownMetadataKeys.PixelHeight].AsString);
+ Assert.Equal(20, command.Metadata[KnownMetadataKeys.PixelWidth].AsNumber);
+ Assert.Equal(30, command.Metadata[KnownMetadataKeys.PixelHeight].AsNumber);
- Assert.Equal("0 0 100 100", command.Metadata[KnownMetadataKeys.ViewBox].AsString);
+ Assert.Equal("20", command.Metadata[KnownMetadataKeys.SvgWidth].AsString);
+ Assert.Equal("30", command.Metadata[KnownMetadataKeys.SvgHeight].AsString);
+
+ Assert.Equal("0 0 100 100", command.Metadata[KnownMetadataKeys.SvgViewBox].AsString);
+ }
+
+ [Fact]
+ public async Task Should_extract_metadata_if_not_pixel_dimensions()
+ {
+ var command = Command("SvgNonPixelDimensions.svg");
+
+ await sut.EnhanceAsync(command, default);
+
+ Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.PixelWidth));
+ Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.PixelHeight));
+
+ Assert.Equal("2rem", command.Metadata[KnownMetadataKeys.SvgWidth].AsString);
+ Assert.Equal("3rem", command.Metadata[KnownMetadataKeys.SvgHeight].AsString);
+
+ Assert.Equal("0 0 100 100", command.Metadata[KnownMetadataKeys.SvgViewBox].AsString);
}
[Fact]
@@ -74,8 +95,8 @@ public class SvgAssetMetadataSourceTests : GivenContext
{
Metadata = new AssetMetadata
{
- [KnownMetadataKeys.PixelWidth] = "128",
- [KnownMetadataKeys.PixelHeight] = "55"
+ [KnownMetadataKeys.SvgWidth] = "128",
+ [KnownMetadataKeys.SvgHeight] = "55"
},
MimeType = "image/svg+xml"
};
diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg
new file mode 100644
index 000000000..ad38c9633
--- /dev/null
+++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj
index 7f8207324..607773f04 100644
--- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj
+++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj
@@ -67,6 +67,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest