diff --git a/src/Umbraco.Core/PublishedElementExtensions.cs b/src/Umbraco.Core/PublishedElementExtensions.cs index 4b529147e3..a5eaef2df9 100644 --- a/src/Umbraco.Core/PublishedElementExtensions.cs +++ b/src/Umbraco.Core/PublishedElementExtensions.cs @@ -1,6 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using Umbraco.Core.Models.PublishedContent; +using Umbraco.Web.Routing; namespace Umbraco.Core { @@ -175,5 +177,30 @@ namespace Umbraco.Core } #endregion + + #region MediaUrl + + /// + /// Gets the url for a media. + /// + /// The content item. + /// The published url provider. + /// The culture (use current culture by default). + /// The url mode (use site configuration by default). + /// The alias of the property (use 'umbracoFile' by default). + /// The url for the media. + /// + /// The value of this property is contextual. It depends on the 'current' request uri, + /// if any. In addition, when the content type is multi-lingual, this is the url for the + /// specified culture. Otherwise, it is the invariant url. + /// + public static string MediaUrl(this IPublishedContent content, IPublishedUrlProvider publishedUrlProvider, string culture = null, UrlMode mode = UrlMode.Default, string propertyAlias = Constants.Conventions.Media.File) + { + if (publishedUrlProvider == null) throw new ArgumentNullException(nameof(publishedUrlProvider)); + + return publishedUrlProvider.GetMediaUrl(content, mode, culture, propertyAlias); + } + + #endregion } } diff --git a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageCropperTest.cs similarity index 86% rename from src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageCropperTest.cs index 788b5dce10..77d7aead5e 100644 --- a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageCropperTest.cs @@ -1,29 +1,14 @@ -using System; -using System.Globalization; -using Moq; +using System.Globalization; using Newtonsoft.Json; using NUnit.Framework; using Newtonsoft.Json.Linq; using Umbraco.Core; -using Umbraco.Core.Composing; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.IO; -using Umbraco.Core.Logging; using Umbraco.Core.Models; -using Umbraco.Core.Models.PublishedContent; -using Umbraco.Core.PropertyEditors; using Umbraco.Core.PropertyEditors.ValueConverters; -using Umbraco.Core.Services; -using Umbraco.Core.Strings; -using Umbraco.Tests.Components; -using Umbraco.Tests.TestHelpers; using Umbraco.Web.Models; -using Umbraco.Web; -using Umbraco.Web.PropertyEditors; using System.Text; -using Current = Umbraco.Web.Composing.Current; -using Umbraco.Core.Cache; using Umbraco.Core.Media; +using Umbraco.Extensions; namespace Umbraco.Tests.PropertyEditors { @@ -67,48 +52,48 @@ namespace Umbraco.Tests.PropertyEditors Assert.AreEqual(cropperValue, obj); } - [TestCase(CropperJson1, CropperJson1, true)] - [TestCase(CropperJson1, CropperJson2, false)] - public void CanConvertImageCropperPropertyEditor(string val1, string val2, bool expected) - { - try - { - var container = TestHelper.GetRegister(); - var composition = new Composition(container, TestHelper.GetMockedTypeLoader(), Mock.Of(), ComponentTests.MockRuntimeState(RuntimeLevel.Run), TestHelper.GetConfigs(), TestHelper.IOHelper, AppCaches.NoCache); - - composition.WithCollectionBuilder(); - - Current.Factory = composition.CreateFactory(); - - var logger = Mock.Of(); - var scheme = Mock.Of(); - var shortStringHelper = Mock.Of(); - - var mediaFileSystem = new MediaFileSystem(Mock.Of(), scheme, logger, shortStringHelper); - - var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new ImageCropperPropertyEditor(Mock.Of(), mediaFileSystem, Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())) { Id = 1 }); - - var factory = new PublishedContentTypeFactory(Mock.Of(), new PropertyValueConverterCollection(Array.Empty()), dataTypeService); - - var converter = new ImageCropperValueConverter(); - var result = converter.ConvertSourceToIntermediate(null, factory.CreatePropertyType("test", 1), val1, false); // does not use type for conversion - - var resultShouldMatch = val2.DeserializeImageCropperValue(); - if (expected) - { - Assert.AreEqual(resultShouldMatch, result); - } - else - { - Assert.AreNotEqual(resultShouldMatch, result); - } - } - finally - { - Current.Reset(); - } - } + // [TestCase(CropperJson1, CropperJson1, true)] + // [TestCase(CropperJson1, CropperJson2, false)] + // public void CanConvertImageCropperPropertyEditor(string val1, string val2, bool expected) + // { + // try + // { + // var container = TestHelper.GetRegister(); + // var composition = new Composition(container, TestHelper.GetMockedTypeLoader(), Mock.Of(), ComponentTests.MockRuntimeState(RuntimeLevel.Run), TestHelper.GetConfigs(), TestHelper.IOHelper, AppCaches.NoCache); + // + // composition.WithCollectionBuilder(); + // + // Current.Factory = composition.CreateFactory(); + // + // var logger = Mock.Of(); + // var scheme = Mock.Of(); + // var shortStringHelper = Mock.Of(); + // + // var mediaFileSystem = new MediaFileSystem(Mock.Of(), scheme, logger, shortStringHelper); + // + // var dataTypeService = new TestObjects.TestDataTypeService( + // new DataType(new ImageCropperPropertyEditor(Mock.Of(), mediaFileSystem, Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())) { Id = 1 }); + // + // var factory = new PublishedContentTypeFactory(Mock.Of(), new PropertyValueConverterCollection(Array.Empty()), dataTypeService); + // + // var converter = new ImageCropperValueConverter(); + // var result = converter.ConvertSourceToIntermediate(null, factory.CreatePropertyType("test", 1), val1, false); // does not use type for conversion + // + // var resultShouldMatch = val2.DeserializeImageCropperValue(); + // if (expected) + // { + // Assert.AreEqual(resultShouldMatch, result); + // } + // else + // { + // Assert.AreNotEqual(resultShouldMatch, result); + // } + // } + // finally + // { + // Current.Reset(); + // } + // } [Test] public void GetCropUrl_CropAliasTest() diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index f66405b48f..a93652ffd8 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -303,7 +303,6 @@ - diff --git a/src/Umbraco.Web/ImageCropperTemplateCoreExtensions.cs b/src/Umbraco.Web.Common/Extensions/ImageCropperTemplateCoreExtensions.cs similarity index 88% rename from src/Umbraco.Web/ImageCropperTemplateCoreExtensions.cs rename to src/Umbraco.Web.Common/Extensions/ImageCropperTemplateCoreExtensions.cs index 0b7e065c59..45c6c15000 100644 --- a/src/Umbraco.Web/ImageCropperTemplateCoreExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/ImageCropperTemplateCoreExtensions.cs @@ -7,8 +7,9 @@ using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors.ValueConverters; using Umbraco.Web.Models; using Umbraco.Core.Media; +using Umbraco.Web.Routing; -namespace Umbraco.Web +namespace Umbraco.Extensions { public static class ImageCropperTemplateCoreExtensions { @@ -21,12 +22,20 @@ namespace Umbraco.Web /// /// The crop alias e.g. thumbnail /// + /// The image url generator. + /// The published value fallback. + /// The published url provider. /// /// The ImageProcessor.Web Url. /// - public static string GetCropUrl(this IPublishedContent mediaItem, string cropAlias, IImageUrlGenerator imageUrlGenerator) + public static string GetCropUrl( + this IPublishedContent mediaItem, + string cropAlias, + IImageUrlGenerator imageUrlGenerator, + IPublishedValueFallback publishedValueFallback, + IPublishedUrlProvider publishedUrlProvider) { - return mediaItem.GetCropUrl(imageUrlGenerator, cropAlias: cropAlias, useCropDimensions: true); + return mediaItem.GetCropUrl(imageUrlGenerator, publishedValueFallback, publishedUrlProvider, cropAlias: cropAlias, useCropDimensions: true); } /// @@ -41,12 +50,21 @@ namespace Umbraco.Web /// /// The crop alias e.g. thumbnail /// + /// The image url generator. + /// The published value fallback. + /// The published url provider. /// /// The ImageProcessor.Web Url. /// - public static string GetCropUrl(this IPublishedContent mediaItem, string propertyAlias, string cropAlias, IImageUrlGenerator imageUrlGenerator) + public static string GetCropUrl( + this IPublishedContent mediaItem, + string propertyAlias, + string cropAlias, + IImageUrlGenerator imageUrlGenerator, + IPublishedValueFallback publishedValueFallback, + IPublishedUrlProvider publishedUrlProvider) { - return mediaItem.GetCropUrl(imageUrlGenerator, propertyAlias: propertyAlias, cropAlias: cropAlias, useCropDimensions: true); + return mediaItem.GetCropUrl( imageUrlGenerator, publishedValueFallback, publishedUrlProvider, propertyAlias: propertyAlias, cropAlias: cropAlias, useCropDimensions: true); } /// @@ -55,6 +73,9 @@ namespace Umbraco.Web /// /// The IPublishedContent item. /// + /// The image url generator. + /// The published value fallback. + /// The published url provider. /// /// The width of the output image. /// @@ -99,12 +120,15 @@ namespace Umbraco.Web /// /// If the image should be upscaled to requested dimensions /// + /// /// The . /// public static string GetCropUrl( this IPublishedContent mediaItem, IImageUrlGenerator imageUrlGenerator, + IPublishedValueFallback publishedValueFallback, + IPublishedUrlProvider publishedUrlProvider, int? width = null, int? height = null, string propertyAlias = Constants.Conventions.Media.File, @@ -126,10 +150,10 @@ namespace Umbraco.Web if (mediaItem.HasProperty(propertyAlias) == false || mediaItem.HasValue(propertyAlias) == false) return string.Empty; - var mediaItemUrl = mediaItem.MediaUrl(propertyAlias: propertyAlias); + var mediaItemUrl = mediaItem.MediaUrl(publishedUrlProvider, propertyAlias: propertyAlias); //get the default obj from the value converter - var cropperValue = mediaItem.Value(propertyAlias); + var cropperValue = mediaItem.Value(publishedValueFallback, propertyAlias); //is it strongly typed? var stronglyTyped = cropperValue as ImageCropperValue; diff --git a/src/Umbraco.Web/ImageCropperTemplateExtensions.cs b/src/Umbraco.Web.Common/Extensions/ImageCropperTemplateExtensions.cs similarity index 95% rename from src/Umbraco.Web/ImageCropperTemplateExtensions.cs rename to src/Umbraco.Web.Common/Extensions/ImageCropperTemplateExtensions.cs index 3c10aba227..ddcd8e7abe 100644 --- a/src/Umbraco.Web/ImageCropperTemplateExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/ImageCropperTemplateExtensions.cs @@ -1,11 +1,11 @@ using System; using System.Globalization; using Newtonsoft.Json; +using Umbraco.Composing; using Umbraco.Core; -using Umbraco.Web.Composing; using Umbraco.Core.PropertyEditors.ValueConverters; -namespace Umbraco.Web +namespace Umbraco.Extensions { /// /// Provides extension methods for getting ImageProcessor Url from the core Image Cropper property editor diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Gallery.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/Gallery.cshtml similarity index 50% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Gallery.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/Gallery.cshtml index 8388c7a90d..8e5ab9fd7d 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Gallery.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/Gallery.cshtml @@ -2,8 +2,14 @@ @using Umbraco.Web @using Umbraco.Core @using Umbraco.Core.Media -@using Umbraco.Web.Composing -@inherits Umbraco.Web.Macros.PartialViewMacroPage +@using Umbraco.Extensions +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedContentQuery PublishedContentQuery +@inject IVariationContextAccessor VariationContextAccessor +@inject IPublishedUrlProvider PublishedUrlProvider +@inject IImageUrlGenerator ImageUrlGenerator @* Macro to display a gallery of images from the Media section. @@ -26,28 +32,27 @@
@foreach (var mediaId in mediaIds.Split(',')) { - var media = Current.PublishedContentQuery.Media(mediaId); + var media = PublishedContentQuery.Media(mediaId); @* a single image *@ if (media.IsDocumentType("Image")) { - @Render(media) +
+ + @media.Name + +
} @* a folder with images under it *@ - foreach (var image in media.Children(Current.VariationContextAccessor)) + foreach (var image in media.Children(VariationContextAccessor)) { - @Render(image) +
+ + @image.Name + +
} }
} - -@helper Render(IPublishedContent item) -{ -
- - @item.Name - -
-} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml similarity index 77% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml index 070f67ff23..2b2e04064b 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml @@ -1,7 +1,7 @@ @using Umbraco.Core -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedUrlProvider PublishedUrlProvider @* This snippet makes a list of links to the of parents of the current page using an unordered HTML list. @@ -18,7 +18,7 @@ @* For each page in the ancestors collection which have been ordered by Level (so we start with the highest top node first) *@ @foreach (var item in selection.OrderBy(x => x.Level)) { -
  • @item.Name »
  • +
  • @item.Name »
  • } @* Display the current page as the last item in the list *@ diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml similarity index 57% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml index ec41d45c0c..0cc090fd9e 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml @@ -1,7 +1,11 @@ +@using Umbraco.Core +@using Umbraco.Core.Models.PublishedContent @using Umbraco.Web -@using Umbraco.Web.Composing -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedContentQuery PublishedContentQuery +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider @* Macro to list all child pages under a specific page in the content tree. @@ -19,15 +23,15 @@ @if (startNodeId != null) { @* Get the starting page *@ - var startNode = Current.PublishedContentQuery.Content(startNodeId); - var selection = startNode.Children.Where(x => x.IsVisible()).ToArray(); + var startNode = PublishedContentQuery.Content(startNodeId); + var selection = startNode.Children.Where(x => x.IsVisible(PublishedValueFallback)).ToArray(); if (selection.Length > 0) { } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml similarity index 56% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml index e6606d6204..1b3c04beb1 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml @@ -1,6 +1,9 @@ -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Core +@using Umbraco.Core.Models.PublishedContent +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider @* This snippet makes a list of links to the of children of the current page using an unordered HTML list. @@ -9,7 +12,7 @@ - It then generates links so the visitor can go to each page *@ -@{ var selection = Model.Content.Children.Where(x => x.IsVisible()).ToArray(); } +@{ var selection = Model.Content.Children.Where(x => x.IsVisible(PublishedValueFallback)).ToArray(); } @if (selection.Length > 0) { @@ -17,7 +20,7 @@ @foreach (var item in selection) {
  • - @item.Name + @item.Name
  • } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml similarity index 57% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml index 2c2cc4422b..896fdda614 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml @@ -1,6 +1,9 @@ -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Core +@using Umbraco.Core.Models.PublishedContent +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider @* This snippet makes a list of links to the of children of the current page using an unordered HTML list. @@ -10,14 +13,14 @@ - It then generates links so the visitor can go to each page *@ -@{ var selection = Model.Content.Children.Where(x => x.IsVisible()).OrderByDescending(x => x.CreateDate).ToArray(); } +@{ var selection = Model.Content.Children.Where(x => x.IsVisible(PublishedValueFallback)).OrderByDescending(x => x.CreateDate).ToArray(); } @if (selection.Length > 0) { } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml similarity index 57% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml index d0398e7272..b80ff6ead7 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml @@ -1,6 +1,9 @@ -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Core +@using Umbraco.Core.Models.PublishedContent +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider @* This snippet makes a list of links to the of children of the current page using an unordered HTML list. @@ -10,14 +13,14 @@ - It then generates links so the visitor can go to each page *@ -@{ var selection = Model.Content.Children.Where(x => x.IsVisible()).OrderBy(x => x.Name).ToArray(); } +@{ var selection = Model.Content.Children.Where(x => x.IsVisible(PublishedValueFallback)).OrderBy(x => x.Name).ToArray(); } @if (selection.Length > 0) { } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml similarity index 63% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml index 1bffae04c4..e2c7ae19df 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml @@ -1,6 +1,9 @@ -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Core +@using Umbraco.Core.Models.PublishedContent +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider @* Macro to list all child pages with a specific property, sorted by the value of that property. @@ -17,14 +20,14 @@ @if (propertyAlias != null) { - var selection = Model.Content.Children.Where(x => x.IsVisible()).OrderBy(x => x.Value(propertyAlias.ToString())).ToArray(); + var selection = Model.Content.Children.Where(x => x.IsVisible(PublishedValueFallback)).OrderBy(x => x.Value(PublishedValueFallback, propertyAlias.ToString())).ToArray(); if (selection.Length > 0) { } diff --git a/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml new file mode 100644 index 0000000000..6aa3771fd3 --- /dev/null +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml @@ -0,0 +1,25 @@ +@using Umbraco.Core +@using Umbraco.Core.Models.PublishedContent +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IVariationContextAccessor VariationContextAccessor +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider +@* + This snippet shows how simple it is to fetch only children of a certain Document Type. + + Be sure to change "IPublishedContent" below to match your needs, such as "TextPage" or "NewsItem". + (You can find the alias of your Document Type by editing it in the Settings section) +*@ + +@{ var selection = Model.Content.Children(VariationContextAccessor).Where(x => x.IsVisible(PublishedValueFallback)).ToArray(); } + +@if (selection.Length > 0) +{ +
      + @foreach (var item in selection) + { +
    • @item.Name
    • + } +
    +} diff --git a/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml new file mode 100644 index 0000000000..a891839cec --- /dev/null +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml @@ -0,0 +1,72 @@ +@using Umbraco.Core +@using Umbraco.Core.Models.PublishedContent +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider +@* + This snippet creates links for every single page (no matter how deep) below + the page currently being viewed by the website visitor, displayed as nested unordered HTML lists. +*@ + +@{ var selection = Model.Content.Children.Where(x => x.IsVisible(PublishedValueFallback)).ToArray(); } + +@* Ensure that the Current Page has children *@ +@if (selection.Length > 0) +{ + @* Get the first page in the children, where the property umbracoNaviHide is not True *@ + var naviLevel = selection[0].Level; + + @* Add in level for a CSS hook *@ +
      + @* Loop through the selection *@ + @foreach (var item in selection) + { +
    • + @item.Name + + @* if this child page has any children, where the property umbracoNaviHide is not True *@ + @{ + var children = item.Children.Where(x => x.IsVisible(PublishedValueFallback)).ToArray(); + if (children.Length > 0) + { + @* Call a local method to display the children *@ + ChildPages(children); + } + } +
    • + } +
    +} + +@{ + void ChildPages(IPublishedContent[] selection) + { + //Ensure that we have a collection of pages + if (selection.Length > 0) + { + // Get the first page in pages and get the level + var naviLevel = selection[0].Level; + + // Add in level for a CSS hook +
      + @foreach (var item in selection) + { +
    • + @item.Name + + @* if the page has any children, where the property umbracoNaviHide is not True *@ + @{ + var children = item.Children.Where(x => x.IsVisible(PublishedValueFallback)).ToArray(); + if (children.Length > 0) + { + @* Recurse and call the ChildPages method to display the children *@ + ChildPages(children); + } + } +
    • + } +
    + } + } +} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml similarity index 71% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml index 386bc824df..93bde0a1c4 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml @@ -1,7 +1,9 @@ +@using Umbraco.Core @using Umbraco.Web -@using Umbraco.Web.Composing -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedContentQuery PublishedContentQuery +@inject IPublishedUrlProvider PublishedUrlProvider @* Macro to display a series of images from a media folder. @@ -19,7 +21,7 @@ @if (mediaId != null) { @* Get the media item associated with the id passed in *@ - var media = Current.PublishedContentQuery.Media(mediaId); + var media = PublishedContentQuery.Media(mediaId); var selection = media.Children.ToArray(); if (selection.Length > 0) @@ -28,7 +30,7 @@ @foreach (var item in selection) {
  • - @item.Name + @item.Name
  • } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml similarity index 63% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml index d845e699e0..c8f0d9c52f 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml @@ -1,7 +1,9 @@ +@using Umbraco.Core @using Umbraco.Core.Models.PublishedContent -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider @* This snippet lists the items from a Multinode tree picker, using the picker's default settings. Content Values stored as XML. @@ -10,7 +12,7 @@ multinode treepicker (so: replace "PropertyWithPicker" with the alias of your property). *@ -@{ var selection = Model.Content.Value>("PropertyWithPicker").ToArray(); } +@{ var selection = Model.Content.Value>(PublishedValueFallback, "PropertyWithPicker").ToArray(); } @if (selection.Length > 0) { @@ -18,7 +20,7 @@ @foreach (var item in selection) {
  • - @item.Name + @item.Name
  • } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Navigation.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/Navigation.cshtml similarity index 61% rename from src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Navigation.cshtml rename to src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/Navigation.cshtml index 15427f4b3c..5476a3af61 100644 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Navigation.cshtml +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/Navigation.cshtml @@ -1,14 +1,16 @@ @using Umbraco.Core -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - +@using Umbraco.Core.Models.PublishedContent +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider @* This snippet displays a list of links of the pages immediately under the top-most page in the content tree. This is the home page for a standard website. It also highlights the current active page/section in the navigation with the CSS class "current". *@ -@{ var selection = Model.Content.Root().Children.Where(x => x.IsVisible()).ToArray(); } +@{ var selection = Model.Content.Root().Children.Where(x => x.IsVisible(PublishedValueFallback)).ToArray(); } @if (selection.Length > 0) { @@ -16,7 +18,7 @@ @foreach (var item in selection) {
  • - @item.Name + @item.Name
  • } diff --git a/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml new file mode 100644 index 0000000000..e6ad50d200 --- /dev/null +++ b/src/Umbraco.Web.UI.NetCore/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml @@ -0,0 +1,47 @@ +@using Umbraco.Core +@using Umbraco.Core.Models.PublishedContent +@using Umbraco.Web.Routing +@inherits Umbraco.Web.Common.Macros.PartialViewMacroPage +@inject IPublishedValueFallback PublishedValueFallback +@inject IPublishedUrlProvider PublishedUrlProvider +@* + This snippet makes a list of links of all visible pages of the site, as nested unordered HTML lists. + + How it works: + - It uses a local method called Traverse() to select and display the markup and links. +*@ + +@{ var selection = Model.Content.Root(); } + +
    + @* Render the sitemap by passing the root node to the traverse method, below *@ + @{ Traverse(selection); } +
    + +@* Helper method to traverse through all descendants *@ +@{ + void Traverse(IPublishedContent node) + { + //Update the level to reflect how deep you want the sitemap to go + const int maxLevelForSitemap = 4; + + @* Select visible children *@ + var selection = node.Children.Where(x => x.IsVisible(PublishedValueFallback) && x.Level <= maxLevelForSitemap).ToArray(); + + @* If any items are returned, render a list *@ + if (selection.Length > 0) + { +
      + @foreach (var item in selection) + { +
    • + @item.Name + + @* Run the traverse method again for any child pages *@ + @{ Traverse(item); } +
    • + } +
    + } + } +} diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 88ba56b9a4..8e0d7177cf 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -190,46 +190,6 @@ true PreserveNewest - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - true PreserveNewest @@ -238,22 +198,10 @@ true PreserveNewest - - true - PreserveNewest - - - true - PreserveNewest - true PreserveNewest - - true - PreserveNewest - @@ -409,4 +357,4 @@ - + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml deleted file mode 100644 index c90e419903..0000000000 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml +++ /dev/null @@ -1,22 +0,0 @@ -@using Umbraco.Core.Models.PublishedContent -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - -@* - This snippet shows how simple it is to fetch only children of a certain Document Type. - - Be sure to change "IPublishedContent" below to match your needs, such as "TextPage" or "NewsItem". - (You can find the alias of your Document Type by editing it in the Settings section) -*@ - -@{ var selection = Model.Content.Children().Where(x => x.IsVisible()).ToArray(); } - -@if (selection.Length > 0) -{ -
      - @foreach (var item in selection) - { -
    • @item.Name
    • - } -
    -} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml deleted file mode 100644 index 7ae917b41d..0000000000 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@using Umbraco.Core.Models.PublishedContent -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - -@* - This snippet creates links for every single page (no matter how deep) below - the page currently being viewed by the website visitor, displayed as nested unordered HTML lists. -*@ - -@{ var selection = Model.Content.Children.Where(x => x.IsVisible()).ToArray(); } - -@* Ensure that the Current Page has children *@ -@if (selection.Length > 0) -{ - @* Get the first page in the children, where the property umbracoNaviHide is not True *@ - var naviLevel = selection[0].Level; - - @* Add in level for a CSS hook *@ -
      - @* Loop through the selection *@ - @foreach (var item in selection) - { -
    • - @item.Name - - @* if this child page has any children, where the property umbracoNaviHide is not True *@ - @{ - var children = item.Children.Where(x => x.IsVisible()).ToArray(); - if (children.Length > 0) - { - @* Call our helper to display the children *@ - @ChildPages(children) - } - } -
    • - } -
    -} - -@helper ChildPages(IPublishedContent[] selection) -{ - @* Ensure that we have a collection of pages *@ - if (selection.Length > 0) - { - @* Get the first page in pages and get the level *@ - var naviLevel = selection[0].Level; - - @* Add in level for a CSS hook *@ -
      - @foreach (var item in selection) - { -
    • - @item.Name - - @* if the page has any children, where the property umbracoNaviHide is not True *@ - @{ - var children = item.Children.Where(x => x.IsVisible()).ToArray(); - if (children.Length > 0) - { - @* Recurse and call our helper to display the children *@ - @ChildPages(children) - } - } -
    • - } -
    - } -} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml deleted file mode 100644 index a4127a9636..0000000000 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml +++ /dev/null @@ -1,44 +0,0 @@ -@using Umbraco.Core -@using Umbraco.Core.Models.PublishedContent -@using Umbraco.Web -@inherits Umbraco.Web.Macros.PartialViewMacroPage - -@* - This snippet makes a list of links of all visible pages of the site, as nested unordered HTML lists. - - How it works: - - It uses a custom Razor helper called Traverse() to select and display the markup and links. -*@ - -@{ var selection = Model.Content.Root(); } - -
    - @* Render the sitemap by passing the root node to the traverse helper, below *@ - @Traverse(selection) -
    - -@* Helper method to traverse through all descendants *@ -@helper Traverse(IPublishedContent node) -{ - @* Update the level to reflect how deep you want the sitemap to go *@ - const int maxLevelForSitemap = 4; - - @* Select visible children *@ - var selection = node.Children.Where(x => x.IsVisible() && x.Level <= maxLevelForSitemap).ToArray(); - - @* If any items are returned, render a list *@ - if (selection.Length > 0) - { -
      - @foreach (var item in selection) - { -
    • - @item.Name - - @* Run the traverse helper again for any child pages *@ - @Traverse(item) -
    • - } -
    - } -} diff --git a/src/Umbraco.Web/PublishedElementExtensions.cs b/src/Umbraco.Web/PublishedElementExtensions.cs index 9d13af2fb6..637d22902c 100644 --- a/src/Umbraco.Web/PublishedElementExtensions.cs +++ b/src/Umbraco.Web/PublishedElementExtensions.cs @@ -97,31 +97,6 @@ namespace Umbraco.Web #endregion - #region MediaUrl - /// - /// Gets the url for a media. - /// - /// The content item. - /// The culture (use current culture by default). - /// The url mode (use site configuration by default). - /// The alias of the property (use 'umbracoFile' by default). - /// The url for the media. - /// - /// The value of this property is contextual. It depends on the 'current' request uri, - /// if any. In addition, when the content type is multi-lingual, this is the url for the - /// specified culture. Otherwise, it is the invariant url. - /// - public static string MediaUrl(this IPublishedContent content, string culture = null, UrlMode mode = UrlMode.Default, string propertyAlias = Constants.Conventions.Media.File) - { - var publishedUrlProvider = Current.PublishedUrlProvider; - - if (publishedUrlProvider== null) - throw new InvalidOperationException("Cannot resolve a Url when Current.PublishedUrlProvider is null."); - - return publishedUrlProvider.GetMediaUrl(content, mode, culture, propertyAlias); - } - - #endregion } } diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index afa9f9f147..08a6de41d7 100755 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -162,7 +162,6 @@ - @@ -284,7 +283,6 @@ - diff --git a/src/Umbraco.Web/UrlHelperRenderExtensions.cs b/src/Umbraco.Web/UrlHelperRenderExtensions.cs index 156a3dfba1..3a836f5d8b 100644 --- a/src/Umbraco.Web/UrlHelperRenderExtensions.cs +++ b/src/Umbraco.Web/UrlHelperRenderExtensions.cs @@ -21,252 +21,252 @@ namespace Umbraco.Web private static readonly IHtmlString EmptyHtmlString = new HtmlString(string.Empty); - #region GetCropUrl - - /// - /// Gets the ImageProcessor Url of a media item by the crop alias (using default media item property alias of "umbracoFile") - /// - /// - /// - /// The IPublishedContent item. - /// - /// - /// The crop alias e.g. thumbnail - /// - /// - /// Whether to HTML encode this URL - default is true - w3c standards require HTML attributes to be HTML encoded but this can be - /// set to false if using the result of this method for CSS. - /// - /// - public static IHtmlString GetCropUrl(this UrlHelper urlHelper, IPublishedContent mediaItem, IImageUrlGenerator imageUrlGenerator, string cropAlias, bool htmlEncode = true) - { - if (mediaItem == null) return EmptyHtmlString; - - var url = mediaItem.GetCropUrl(imageUrlGenerator, cropAlias: cropAlias, useCropDimensions: true); - return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); - } - - /// - /// Gets the ImageProcessor Url by the crop alias using the specified property containing the image cropper Json data on the IPublishedContent item. - /// - /// - /// - /// The IPublishedContent item. - /// - /// - /// The property alias of the property containing the Json data e.g. umbracoFile - /// - /// - /// The crop alias e.g. thumbnail - /// - /// - /// Whether to HTML encode this URL - default is true - w3c standards require HTML attributes to be HTML encoded but this can be - /// set to false if using the result of this method for CSS. - /// - /// - /// The ImageProcessor.Web Url. - /// - public static IHtmlString GetCropUrl(this UrlHelper urlHelper, IPublishedContent mediaItem, string propertyAlias, string cropAlias, IImageUrlGenerator imageUrlGenerator, bool htmlEncode = true) - { - if (mediaItem == null) return EmptyHtmlString; - - var url = mediaItem.GetCropUrl(imageUrlGenerator, propertyAlias: propertyAlias, cropAlias: cropAlias, useCropDimensions: true); - return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); - } - - /// - /// Gets the ImageProcessor Url from the image path. - /// - /// - /// The IPublishedContent item. - /// - /// - /// The width of the output image. - /// - /// - /// The height of the output image. - /// - /// - /// Property alias of the property containing the Json data. - /// - /// - /// The crop alias. - /// - /// - /// Quality percentage of the output image. - /// - /// - /// The image crop mode. - /// - /// - /// The image crop anchor. - /// - /// - /// Use focal point to generate an output image using the focal point instead of the predefined crop if there is one - /// - /// - /// Use crop dimensions to have the output image sized according to the predefined crop sizes, this will override the width and height parameters - /// - /// - /// Add a serialized date of the last edit of the item to ensure client cache refresh when updated - /// - /// - /// These are any query string parameters (formatted as query strings) that ImageProcessor supports. For example: - /// - /// - /// - /// - /// - /// Use a dimension as a ratio - /// - /// - /// If the image should be upscaled to requested dimensions - /// - /// - /// - /// Whether to HTML encode this URL - default is true - w3c standards require HTML attributes to be HTML encoded but this can be - /// set to false if using the result of this method for CSS. - /// - /// - /// The . - /// - public static IHtmlString GetCropUrl(this UrlHelper urlHelper, - IPublishedContent mediaItem, - IImageUrlGenerator imageUrlGenerator, - int? width = null, - int? height = null, - string propertyAlias = Umbraco.Core.Constants.Conventions.Media.File, - string cropAlias = null, - int? quality = null, - ImageCropMode? imageCropMode = null, - ImageCropAnchor? imageCropAnchor = null, - bool preferFocalPoint = false, - bool useCropDimensions = false, - bool cacheBuster = true, - string furtherOptions = null, - ImageCropRatioMode? ratioMode = null, - bool upScale = true, - bool htmlEncode = true) - { - if (mediaItem == null) return EmptyHtmlString; - - var url = mediaItem.GetCropUrl(imageUrlGenerator, width, height, propertyAlias, cropAlias, quality, imageCropMode, - imageCropAnchor, preferFocalPoint, useCropDimensions, cacheBuster, furtherOptions, ratioMode, - upScale); - return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); - } - - /// - /// Gets the ImageProcessor Url from the image path. - /// - /// - /// The image url. - /// - /// - /// The width of the output image. - /// - /// - /// The height of the output image. - /// - /// - /// The Json data from the Umbraco Core Image Cropper property editor - /// - /// - /// The crop alias. - /// - /// - /// Quality percentage of the output image. - /// - /// - /// The image crop mode. - /// - /// - /// The image crop anchor. - /// - /// - /// Use focal point to generate an output image using the focal point instead of the predefined crop if there is one - /// - /// - /// Use crop dimensions to have the output image sized according to the predefined crop sizes, this will override the width and height parameters - /// - /// - /// Add a serialized date of the last edit of the item to ensure client cache refresh when updated - /// - /// - /// These are any query string parameters (formatted as query strings) that ImageProcessor supports. For example: - /// - /// - /// - /// - /// - /// Use a dimension as a ratio - /// - /// - /// If the image should be upscaled to requested dimensions - /// - /// - /// - /// Whether to HTML encode this URL - default is true - w3c standards require HTML attributes to be HTML encoded but this can be - /// set to false if using the result of this method for CSS. - /// - /// - /// The . - /// - public static IHtmlString GetCropUrl(this UrlHelper urlHelper, - string imageUrl, - IImageUrlGenerator imageUrlGenerator, - int? width = null, - int? height = null, - string imageCropperValue = null, - string cropAlias = null, - int? quality = null, - ImageCropMode? imageCropMode = null, - ImageCropAnchor? imageCropAnchor = null, - bool preferFocalPoint = false, - bool useCropDimensions = false, - string cacheBusterValue = null, - string furtherOptions = null, - ImageCropRatioMode? ratioMode = null, - bool upScale = true, - bool htmlEncode = true) - { - var url = imageUrl.GetCropUrl(imageUrlGenerator, width, height, imageCropperValue, cropAlias, quality, imageCropMode, - imageCropAnchor, preferFocalPoint, useCropDimensions, cacheBusterValue, furtherOptions, ratioMode, - upScale); - return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); - } - - public static IHtmlString GetCropUrl(this UrlHelper urlHelper, - ImageCropperValue imageCropperValue, - IImageUrlGenerator imageUrlGenerator, - int? width = null, - int? height = null, - string cropAlias = null, - int? quality = null, - ImageCropMode? imageCropMode = null, - ImageCropAnchor? imageCropAnchor = null, - bool preferFocalPoint = false, - bool useCropDimensions = false, - string cacheBusterValue = null, - string furtherOptions = null, - ImageCropRatioMode? ratioMode = null, - bool upScale = true, - bool htmlEncode = true) - { - if (imageCropperValue == null) return EmptyHtmlString; - - var imageUrl = imageCropperValue.Src; - var url = imageUrl.GetCropUrl(imageUrlGenerator, imageCropperValue, width, height, cropAlias, quality, imageCropMode, - imageCropAnchor, preferFocalPoint, useCropDimensions, cacheBusterValue, furtherOptions, ratioMode, - upScale); - return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); - } - - #endregion + // #region GetCropUrl + // + // /// + // /// Gets the ImageProcessor Url of a media item by the crop alias (using default media item property alias of "umbracoFile") + // /// + // /// + // /// + // /// The IPublishedContent item. + // /// + // /// + // /// The crop alias e.g. thumbnail + // /// + // /// + // /// Whether to HTML encode this URL - default is true - w3c standards require HTML attributes to be HTML encoded but this can be + // /// set to false if using the result of this method for CSS. + // /// + // /// + // public static IHtmlString GetCropUrl(this UrlHelper urlHelper, IPublishedContent mediaItem, IImageUrlGenerator imageUrlGenerator, string cropAlias, bool htmlEncode = true) + // { + // if (mediaItem == null) return EmptyHtmlString; + // + // var url = mediaItem.GetCropUrl(imageUrlGenerator, cropAlias: cropAlias, useCropDimensions: true); + // return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); + // } + // + // /// + // /// Gets the ImageProcessor Url by the crop alias using the specified property containing the image cropper Json data on the IPublishedContent item. + // /// + // /// + // /// + // /// The IPublishedContent item. + // /// + // /// + // /// The property alias of the property containing the Json data e.g. umbracoFile + // /// + // /// + // /// The crop alias e.g. thumbnail + // /// + // /// + // /// Whether to HTML encode this URL - default is true - w3c standards require HTML attributes to be HTML encoded but this can be + // /// set to false if using the result of this method for CSS. + // /// + // /// + // /// The ImageProcessor.Web Url. + // /// + // public static IHtmlString GetCropUrl(this UrlHelper urlHelper, IPublishedContent mediaItem, string propertyAlias, string cropAlias, IImageUrlGenerator imageUrlGenerator, bool htmlEncode = true) + // { + // if (mediaItem == null) return EmptyHtmlString; + // + // var url = mediaItem.GetCropUrl(imageUrlGenerator, propertyAlias: propertyAlias, cropAlias: cropAlias, useCropDimensions: true); + // return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); + // } + // + // /// + // /// Gets the ImageProcessor Url from the image path. + // /// + // /// + // /// The IPublishedContent item. + // /// + // /// + // /// The width of the output image. + // /// + // /// + // /// The height of the output image. + // /// + // /// + // /// Property alias of the property containing the Json data. + // /// + // /// + // /// The crop alias. + // /// + // /// + // /// Quality percentage of the output image. + // /// + // /// + // /// The image crop mode. + // /// + // /// + // /// The image crop anchor. + // /// + // /// + // /// Use focal point to generate an output image using the focal point instead of the predefined crop if there is one + // /// + // /// + // /// Use crop dimensions to have the output image sized according to the predefined crop sizes, this will override the width and height parameters + // /// + // /// + // /// Add a serialized date of the last edit of the item to ensure client cache refresh when updated + // /// + // /// + // /// These are any query string parameters (formatted as query strings) that ImageProcessor supports. For example: + // /// + // /// + // /// + // /// + // /// + // /// Use a dimension as a ratio + // /// + // /// + // /// If the image should be upscaled to requested dimensions + // /// + // /// + // /// + // /// Whether to HTML encode this URL - default is true - w3c standards require HTML attributes to be HTML encoded but this can be + // /// set to false if using the result of this method for CSS. + // /// + // /// + // /// The . + // /// + // public static IHtmlString GetCropUrl(this UrlHelper urlHelper, + // IPublishedContent mediaItem, + // IImageUrlGenerator imageUrlGenerator, + // int? width = null, + // int? height = null, + // string propertyAlias = Umbraco.Core.Constants.Conventions.Media.File, + // string cropAlias = null, + // int? quality = null, + // ImageCropMode? imageCropMode = null, + // ImageCropAnchor? imageCropAnchor = null, + // bool preferFocalPoint = false, + // bool useCropDimensions = false, + // bool cacheBuster = true, + // string furtherOptions = null, + // ImageCropRatioMode? ratioMode = null, + // bool upScale = true, + // bool htmlEncode = true) + // { + // if (mediaItem == null) return EmptyHtmlString; + // + // var url = mediaItem.GetCropUrl(imageUrlGenerator, width, height, propertyAlias, cropAlias, quality, imageCropMode, + // imageCropAnchor, preferFocalPoint, useCropDimensions, cacheBuster, furtherOptions, ratioMode, + // upScale); + // return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); + // } + // + // /// + // /// Gets the ImageProcessor Url from the image path. + // /// + // /// + // /// The image url. + // /// + // /// + // /// The width of the output image. + // /// + // /// + // /// The height of the output image. + // /// + // /// + // /// The Json data from the Umbraco Core Image Cropper property editor + // /// + // /// + // /// The crop alias. + // /// + // /// + // /// Quality percentage of the output image. + // /// + // /// + // /// The image crop mode. + // /// + // /// + // /// The image crop anchor. + // /// + // /// + // /// Use focal point to generate an output image using the focal point instead of the predefined crop if there is one + // /// + // /// + // /// Use crop dimensions to have the output image sized according to the predefined crop sizes, this will override the width and height parameters + // /// + // /// + // /// Add a serialized date of the last edit of the item to ensure client cache refresh when updated + // /// + // /// + // /// These are any query string parameters (formatted as query strings) that ImageProcessor supports. For example: + // /// + // /// + // /// + // /// + // /// + // /// Use a dimension as a ratio + // /// + // /// + // /// If the image should be upscaled to requested dimensions + // /// + // /// + // /// + // /// Whether to HTML encode this URL - default is true - w3c standards require HTML attributes to be HTML encoded but this can be + // /// set to false if using the result of this method for CSS. + // /// + // /// + // /// The . + // /// + // public static IHtmlString GetCropUrl(this UrlHelper urlHelper, + // string imageUrl, + // IImageUrlGenerator imageUrlGenerator, + // int? width = null, + // int? height = null, + // string imageCropperValue = null, + // string cropAlias = null, + // int? quality = null, + // ImageCropMode? imageCropMode = null, + // ImageCropAnchor? imageCropAnchor = null, + // bool preferFocalPoint = false, + // bool useCropDimensions = false, + // string cacheBusterValue = null, + // string furtherOptions = null, + // ImageCropRatioMode? ratioMode = null, + // bool upScale = true, + // bool htmlEncode = true) + // { + // var url = imageUrl.GetCropUrl(imageUrlGenerator, width, height, imageCropperValue, cropAlias, quality, imageCropMode, + // imageCropAnchor, preferFocalPoint, useCropDimensions, cacheBusterValue, furtherOptions, ratioMode, + // upScale); + // return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); + // } + // + // public static IHtmlString GetCropUrl(this UrlHelper urlHelper, + // ImageCropperValue imageCropperValue, + // IImageUrlGenerator imageUrlGenerator, + // int? width = null, + // int? height = null, + // string cropAlias = null, + // int? quality = null, + // ImageCropMode? imageCropMode = null, + // ImageCropAnchor? imageCropAnchor = null, + // bool preferFocalPoint = false, + // bool useCropDimensions = false, + // string cacheBusterValue = null, + // string furtherOptions = null, + // ImageCropRatioMode? ratioMode = null, + // bool upScale = true, + // bool htmlEncode = true) + // { + // if (imageCropperValue == null) return EmptyHtmlString; + // + // var imageUrl = imageCropperValue.Src; + // var url = imageUrl.GetCropUrl(imageUrlGenerator, imageCropperValue, width, height, cropAlias, quality, imageCropMode, + // imageCropAnchor, preferFocalPoint, useCropDimensions, cacheBusterValue, furtherOptions, ratioMode, + // upScale); + // return htmlEncode ? new HtmlString(HttpUtility.HtmlEncode(url)) : new HtmlString(url); + // } + // + // #endregion /// /// Generates a URL based on the current Umbraco URL with a custom query string that will route to the specified SurfaceController