From 7787c51156124105bd26693226beba9118bf7ea7 Mon Sep 17 00:00:00 2001 From: Jeavon Leopold Date: Mon, 21 Apr 2014 08:38:53 +0100 Subject: [PATCH] Creating the internal GetBaseCropUrl method and moving the logic from the Model GetCropUrl method to ImageCropperBaseExtensions so that it can be used by both the Model method and the template extensions Also added some new tests --- .../PropertyEditors/ImageCropperTest.cs | 21 +++++++++++ src/Umbraco.Web/ImageCropperBaseExtensions.cs | 36 ++++++++++++++++++- .../ImageCropperTemplateExtensions.cs | 26 +++----------- src/Umbraco.Web/Models/ImageCropDataSet.cs | 20 ++--------- 4 files changed, 63 insertions(+), 40 deletions(-) diff --git a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs index 1a2c0bc92b..2d6482b252 100644 --- a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs +++ b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs @@ -41,5 +41,26 @@ namespace Umbraco.Tests.PropertyEditors Assert.AreEqual(mediaPath + "?center=0.80827067669172936,0.96&mode=crop&width=200&height=300&filter=comic&roundedcorners=radius-26|bgcolor-fff", urlString); } + /// + /// Test that if a crop alias has been specified that doesn't exist the method returns null + /// + [Test] + public void GetCropUrlNullTest() + { + var urlString = mediaPath.GetCropUrl(imageCropperValue: cropperJson, cropAlias: "Banner", useCropDimensions: true); + Assert.AreEqual(null, urlString); + } + + /// + /// Test the GetCropUrl method on the ImageCropDataSet Model + /// + [Test] + public void GetBaseCropUrlFromModelTest() + { + var cropDataSet = cropperJson.SerializeToCropDataSet(); + var urlString = cropDataSet.GetCropUrl("thumb"); + Assert.AreEqual("?crop=0.58729977382575338,0.055768992440203169,0,0.32457553600198386&cropmode=percentage&width=100&height=100", urlString); + } + } } \ No newline at end of file diff --git a/src/Umbraco.Web/ImageCropperBaseExtensions.cs b/src/Umbraco.Web/ImageCropperBaseExtensions.cs index ed2e661b33..12ea7b5e04 100644 --- a/src/Umbraco.Web/ImageCropperBaseExtensions.cs +++ b/src/Umbraco.Web/ImageCropperBaseExtensions.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using System.Globalization; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -70,5 +71,38 @@ namespace Umbraco.Web return dataset.FirstOrDefault(x => x.Alias.ToLowerInvariant() == cropAlias.ToLowerInvariant()); } + + internal static string GetCropBaseUrl(this ImageCropDataSet cropDataSet, string cropAlias, bool preferFocalPoint) + { + var cropUrl = new StringBuilder(); + + var crop = cropDataSet.GetCrop(cropAlias); + + // if crop alias has been specified but not found in the Json we should return null + if (string.IsNullOrEmpty(cropAlias) == false && crop == null) + { + return null; + } + if ((preferFocalPoint && cropDataSet.HasFocalPoint()) || (crop != null && crop.Coordinates == null && cropDataSet.HasFocalPoint()) || (string.IsNullOrEmpty(cropAlias) && cropDataSet.HasFocalPoint())) + { + cropUrl.Append("?center=" + cropDataSet.FocalPoint.Top.ToString(CultureInfo.InvariantCulture) + "," + cropDataSet.FocalPoint.Left.ToString(CultureInfo.InvariantCulture)); + cropUrl.Append("&mode=crop"); + } + else if (crop != null && crop.Coordinates != null) + { + cropUrl.Append("?crop="); + cropUrl.Append(crop.Coordinates.X1.ToString(CultureInfo.InvariantCulture)).Append(","); + cropUrl.Append(crop.Coordinates.Y1.ToString(CultureInfo.InvariantCulture)).Append(","); + cropUrl.Append(crop.Coordinates.X2.ToString(CultureInfo.InvariantCulture)).Append(","); + cropUrl.Append(crop.Coordinates.Y2.ToString(CultureInfo.InvariantCulture)); + cropUrl.Append("&cropmode=percentage"); + } + else + { + cropUrl.Append("?anchor=center"); + cropUrl.Append("&mode=crop"); + } + return cropUrl.ToString(); + } } } diff --git a/src/Umbraco.Web/ImageCropperTemplateExtensions.cs b/src/Umbraco.Web/ImageCropperTemplateExtensions.cs index f9cd7052af..4a545d69e8 100644 --- a/src/Umbraco.Web/ImageCropperTemplateExtensions.cs +++ b/src/Umbraco.Web/ImageCropperTemplateExtensions.cs @@ -214,32 +214,16 @@ namespace Umbraco.Web { var crop = cropDataSet.GetCrop(cropAlias); - // if crop alias has been specified but not found in the Json we should return null - if (string.IsNullOrEmpty(cropAlias) == false && crop == null) - { - return null; - } - imageResizerUrl.Append(cropDataSet.Src); - if ((preferFocalPoint && cropDataSet.HasFocalPoint()) || (crop != null && crop.Coordinates == null && cropDataSet.HasFocalPoint()) || (string.IsNullOrEmpty(cropAlias) && cropDataSet.HasFocalPoint())) + var cropBaseUrl = cropDataSet.GetCropBaseUrl(cropAlias, preferFocalPoint); + if (cropBaseUrl != null) { - imageResizerUrl.Append("?center=" + cropDataSet.FocalPoint.Top.ToString(CultureInfo.InvariantCulture) + "," + cropDataSet.FocalPoint.Left.ToString(CultureInfo.InvariantCulture)); - imageResizerUrl.Append("&mode=crop"); - } - else if (crop != null && crop.Coordinates != null) - { - imageResizerUrl.Append("?crop="); - imageResizerUrl.Append(crop.Coordinates.X1.ToString(CultureInfo.InvariantCulture)).Append(","); - imageResizerUrl.Append(crop.Coordinates.Y1.ToString(CultureInfo.InvariantCulture)).Append(","); - imageResizerUrl.Append(crop.Coordinates.X2.ToString(CultureInfo.InvariantCulture)).Append(","); - imageResizerUrl.Append(crop.Coordinates.Y2.ToString(CultureInfo.InvariantCulture)); - imageResizerUrl.Append("&cropmode=percentage"); + imageResizerUrl.Append(cropBaseUrl); } else { - imageResizerUrl.Append("?anchor=center"); - imageResizerUrl.Append("&mode=crop"); + return null; } if (crop!= null & useCropDimensions) @@ -247,12 +231,10 @@ namespace Umbraco.Web width = crop.Width; height = crop.Height; } - } } else { - imageResizerUrl.Append(imageUrl); if (imageCropMode == null) diff --git a/src/Umbraco.Web/Models/ImageCropDataSet.cs b/src/Umbraco.Web/Models/ImageCropDataSet.cs index ebc0cc4251..b3b584682a 100644 --- a/src/Umbraco.Web/Models/ImageCropDataSet.cs +++ b/src/Umbraco.Web/Models/ImageCropDataSet.cs @@ -32,24 +32,10 @@ namespace Umbraco.Web.Models var sb = new StringBuilder(); - if ((useFocalPoint && HasFocalPoint()) || (crop != null && crop.Coordinates == null && HasFocalPoint()) || (string.IsNullOrEmpty(alias) && HasFocalPoint())) + var cropBaseUrl = this.GetCropBaseUrl(alias, useFocalPoint); + if (cropBaseUrl != null) { - sb.Append("?center=" + FocalPoint.Top.ToString(System.Globalization.CultureInfo.InvariantCulture) + "," + FocalPoint.Left.ToString(System.Globalization.CultureInfo.InvariantCulture)); - sb.Append("&mode=crop"); - } - else if (crop != null && crop.Coordinates != null) - { - sb.Append("?crop="); - sb.Append(crop.Coordinates.X1.ToString(System.Globalization.CultureInfo.InvariantCulture)).Append(","); - sb.Append(crop.Coordinates.Y1.ToString(System.Globalization.CultureInfo.InvariantCulture)).Append(","); - sb.Append(crop.Coordinates.X2.ToString(System.Globalization.CultureInfo.InvariantCulture)).Append(","); - sb.Append(crop.Coordinates.Y2.ToString(System.Globalization.CultureInfo.InvariantCulture)); - sb.Append("&cropmode=percentage"); - } - else - { - sb.Append("?anchor=center"); - sb.Append("&mode=crop"); + sb.Append(cropBaseUrl); } if (crop != null && useCropDimensions)