Browse Source

Fix pixel width.

pull/1071/head
Sebastian Stehle 2 years ago
parent
commit
2483cc66a2
  1. 4
      backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs
  2. 18
      backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs
  3. 33
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs
  4. 6
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg
  5. 3
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj

4
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";
}

18
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}";
}

33
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"
};

6
backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="2rem" height="3rem">
<path d="M30,1h40l29,29v40l-29,29h-40l-29-29v-40z" stroke="#000" fill="none"/>
<path d="M31,3h38l28,28v38l-28,28h-38l-28-28v-38z" fill="#a23"/>
<text x="50" y="68" font-size="48" fill="#FFF" text-anchor="middle"><![CDATA[410]]></text>
<use id="#other"/>
</svg>

3
backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj

@ -67,6 +67,9 @@
<None Update="Assets\TestFiles\SvgInvalid.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Assets\TestFiles\SvgNonPixelDimensions.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Assets\TestFiles\SvgValid.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>

Loading…
Cancel
Save