diff --git a/src/Umbraco.Web/ImageCropperBaseExtensions.cs b/src/Umbraco.Web/ImageCropperBaseExtensions.cs index e74263afc6..f589deabee 100644 --- a/src/Umbraco.Web/ImageCropperBaseExtensions.cs +++ b/src/Umbraco.Web/ImageCropperBaseExtensions.cs @@ -4,6 +4,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; + +using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -13,16 +15,11 @@ namespace Umbraco.Web { internal static class ImageCropperBaseExtensions { - internal static bool IsJson(this string input) - { - input = input.Trim(); - return input.StartsWith("{") && input.EndsWith("}") || input.StartsWith("[") && input.EndsWith("]"); - } - + internal static ImageCropData GetImageCrop(this string json, string id) { var ic = new ImageCropData(); - if (IsJson(json)) + if (json.DetectIsJson()) { try { @@ -37,7 +34,7 @@ namespace Umbraco.Web internal static ImageCropDataSet SerializeToCropDataSet(this string json) { var imageCrops = new ImageCropDataSet(); - if (IsJson(json)) + if (json.DetectIsJson()) { try { @@ -58,11 +55,12 @@ namespace Umbraco.Web { try { + if (propertyAlias != null && publishedContent.HasProperty(propertyAlias) && publishedContent.HasValue(propertyAlias)) { var propertyAliasValue = publishedContent.GetPropertyValue(propertyAlias); - if (propertyAliasValue.IsJson() && propertyAliasValue.Length <= 2) + if (propertyAliasValue.DetectIsJson() && propertyAliasValue.Length <= 2) { return false; } @@ -78,7 +76,7 @@ namespace Umbraco.Web if (cropsProperty != null && !string.IsNullOrEmpty(cropsProperty.Value.ToString())) { var propertyAliasValue = cropsProperty.Value.ToString(); - if (propertyAliasValue.IsJson() && propertyAliasValue.Length <= 2) + if (propertyAliasValue.DetectIsJson() && propertyAliasValue.Length <= 2) { return false; } @@ -96,7 +94,7 @@ namespace Umbraco.Web && publishedContent.HasValue(propertyAlias)) { var propertyAliasValue = publishedContent.GetPropertyValue(propertyAlias); - if (propertyAliasValue.IsJson() && propertyAliasValue.Length <= 2) + if (propertyAliasValue.DetectIsJson() && propertyAliasValue.Length <= 2) { return false; } @@ -122,7 +120,7 @@ namespace Umbraco.Web if (cropsProperty != null && !string.IsNullOrEmpty(cropsProperty.Value.ToString())) { var propertyAliasValue = cropsProperty.Value.ToString(); - if (propertyAliasValue.IsJson() && propertyAliasValue.Length <= 2) + if (propertyAliasValue.DetectIsJson() && propertyAliasValue.Length <= 2) { return false; } diff --git a/src/Umbraco.Web/ImageCropperTemplateExtensions.cs b/src/Umbraco.Web/ImageCropperTemplateExtensions.cs index 27943154ea..29d3b07a86 100644 --- a/src/Umbraco.Web/ImageCropperTemplateExtensions.cs +++ b/src/Umbraco.Web/ImageCropperTemplateExtensions.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Web.PropertyEditors; @@ -20,17 +21,14 @@ namespace Umbraco.Web if (string.IsNullOrEmpty(property)) return string.Empty; - if (property.IsJson()) + if (property.DetectIsJson()) { var cropDataSet = property.SerializeToCropDataSet(); - var currentCrop = cropDataSet.Crops.First(x => x.Alias ==cropAlias); - return cropDataSet.Src + currentCrop.ToUrl(); + return cropDataSet.Src + cropDataSet.GetCropUrl(cropAlias); } else { - //must be a string - var cropData = ImageCropperPropertyEditorHelper.GetCrop(mediaItem.ContentType.Alias, cropAlias); - return property + cropData.ToUrl(); + return property; } } @@ -75,18 +73,14 @@ namespace Umbraco.Web var imageResizerUrl = new StringBuilder(); imageResizerUrl.Append(imageUrl); - if (!string.IsNullOrEmpty(imageCropperValue) && imageCropperValue.IsJson()) + if (!string.IsNullOrEmpty(imageCropperValue) && imageCropperValue.DetectIsJson()) { var allTheCrops = imageCropperValue.SerializeToCropDataSet(); if (allTheCrops != null && allTheCrops.Crops.Any()) { - var crop = cropAlias != null - ? allTheCrops.Crops.First(x => x.Alias ==cropAlias) - : allTheCrops.Crops.First(); - if (crop != null) - { - imageResizerUrl.Append(crop.ToUrl()); - } + + if(allTheCrops.HasCrop(cropAlias)) + imageResizerUrl.Append(allTheCrops.GetCropUrl(cropAlias)); } } else diff --git a/src/Umbraco.Web/Models/ImageCropData.cs b/src/Umbraco.Web/Models/ImageCropData.cs index fdee53fbac..392529de4b 100644 --- a/src/Umbraco.Web/Models/ImageCropData.cs +++ b/src/Umbraco.Web/Models/ImageCropData.cs @@ -18,6 +18,63 @@ namespace Umbraco.Web.Models [DataMember(Name = "crops")] public IEnumerable Crops { get; set; } + + + public string GetCropUrl(string alias) + { + + var crop = Crops.FirstOrDefault(x => x.Alias == alias); + if(crop == null) + return null; + + + + StringBuilder sb = new StringBuilder(); + if (crop.Coordinates != null) + { + sb.Append("?crop="); + sb.Append(crop.Coordinates.X1).Append(","); + sb.Append(crop.Coordinates.Y1).Append(","); + sb.Append(crop.Coordinates.X2).Append(","); + sb.Append(crop.Coordinates.Y2); + sb.Append("&cropmode=percentage"); + } + else + { + if (HasFocalPoint()) + { + + } + else + { + sb.Append("?anchor=center"); + sb.Append("&mode=crop"); + } + + + } + + sb.Append("&width=").Append(crop.Width); + sb.Append("&height=").Append(crop.Height); + sb.Append("&rnd=").Append(DateTime.Now.Ticks); + return sb.ToString(); + + } + + public bool HasFocalPoint() + { + return (FocalPoint != null && FocalPoint.Top != 0.5m && FocalPoint.Top != 0.5m); + } + + public bool HasCrop(string alias) + { + return Crops.Any(x => x.Alias == alias); + } + + public bool HasImage() + { + return string.IsNullOrEmpty(Src); + } } [DataContract(Name = "imageCropFocalPoint")] @@ -64,31 +121,6 @@ namespace Umbraco.Web.Models [DataMember(Name = "coordinates")] public ImageCropCoordinates Coordinates { get; set; } - - public string ToUrl() - { - StringBuilder sb = new StringBuilder(); - if (Coordinates != null) - { - sb.Append("?crop="); - sb.Append(Coordinates.X1).Append(","); - sb.Append(Coordinates.Y1).Append(","); - sb.Append(Coordinates.X2).Append(","); - sb.Append(Coordinates.Y2); - sb.Append("&cropmode=percentage"); - } - else - { - sb.Append("?anchor=center"); - sb.Append("&mode=crop"); - } - - sb.Append("&width=").Append(Width); - sb.Append("&height=").Append(Height); - sb.Append("&rnd=").Append(DateTime.Now.Ticks); - return sb.ToString(); - - } } } diff --git a/src/Umbraco.Web/PropertyEditors/FileUploadPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/FileUploadPropertyEditor.cs index 26e59e263a..1ff9637954 100644 --- a/src/Umbraco.Web/PropertyEditors/FileUploadPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/FileUploadPropertyEditor.cs @@ -78,7 +78,7 @@ namespace Umbraco.Web.PropertyEditors //now we need to check if there is a value if (p.Value is string && ((string) p.Value).IsNullOrWhiteSpace() == false) { - if (!p.Value.ToString().IsJson()) + if (!p.Value.ToString().DetectIsJson()) { //there might be multiple, we can only process the first one! var split = ((string)p.Value).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); diff --git a/src/Umbraco.Web/PropertyEditors/ImageCropperPropertyEditorHelper.cs b/src/Umbraco.Web/PropertyEditors/ImageCropperPropertyEditorHelper.cs deleted file mode 100644 index f82e08da71..0000000000 --- a/src/Umbraco.Web/PropertyEditors/ImageCropperPropertyEditorHelper.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Umbraco.Core.Configuration; - -namespace Umbraco.Web.PropertyEditors -{ - internal class ImageCropperPropertyEditorHelper - { - - internal static Umbraco.Web.Models.ImageCropData GetCrop(string mediaTypeAlias, string cropAlias){ - - return null; - - /*var _crops = GetConfigurationForType(mediaTypeAlias); - - if (_crops == null || _crops.Crops == null) - return null; - - return _crops.Crops[cropAlias];*/ - } - - //this queries all crops configured - internal static Umbraco.Web.Models.ImageCropData GetCrop(string cropAlias) - { - /* - foreach (var typeCrops in UmbracoConfig.For.UmbracoSettings().Content.ImageCrops.Crops) - { - var cropSize = typeCrops.CropSizes.FirstOrDefault(x => x.Alias == cropAlias); - if(cropSize != null) - return new Models.ImageCropData() { Alias = cropSize.Alias, Height = cropSize.Height, Width = cropSize.Width }; - }*/ - - return null; - } - } -} diff --git a/src/Umbraco.Web/PropertyEditors/ImageCropperPropertyValueEditor.cs b/src/Umbraco.Web/PropertyEditors/ImageCropperPropertyValueEditor.cs index 6568138518..6fa309f2f9 100644 --- a/src/Umbraco.Web/PropertyEditors/ImageCropperPropertyValueEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/ImageCropperPropertyValueEditor.cs @@ -6,6 +6,8 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; + +using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Media; @@ -118,6 +120,24 @@ namespace Umbraco.Web.PropertyEditors return editorValue.Value.ToString(); } + + + + public override string ConvertDbToString(Property property, PropertyType propertyType, Core.Services.IDataTypeService dataTypeService) + { + if(property.Value == null || string.IsNullOrEmpty(property.Value.ToString())) + return null; + + //if we dont have a json structure, we will get it from the property type + var val = property.Value.ToString(); + if (val.DetectIsJson()) + return val; + + var config = dataTypeService.GetPreValuesByDataTypeId(propertyType.DataTypeDefinitionId).FirstOrDefault(); + var crops = !string.IsNullOrEmpty(config) ? config : "[]"; + var newVal = "{src: '" + val + "', crops: " + crops + "}"; + return newVal; + } } diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 7ebbe0bef4..0b89f414ef 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -347,7 +347,6 @@ -