diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs index 1fa3384d08..fec852f97a 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs @@ -43,7 +43,7 @@ namespace Umbraco.Tests.PublishedContent var logger = Mock.Of(); var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new RichTextPropertyEditor(logger, umbracoCtxAccessor, new MediaParser(umbracoCtxAccessor, logger, Mock.Of(), Mock.Of()))) { Id = 1 }); + new DataType(new RichTextPropertyEditor(logger, umbracoCtxAccessor, new ImageSourceParser(umbracoCtxAccessor, logger, Mock.Of(), Mock.Of()))) { Id = 1 }); var publishedContentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeService); diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs index d2f7283ee5..95d00998a1 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs @@ -46,7 +46,7 @@ namespace Umbraco.Tests.PublishedContent var mediaService = Mock.Of(); var contentTypeBaseServiceProvider = Mock.Of(); var umbracoContextAccessor = Mock.Of(); - var mediaParser = new MediaParser(umbracoContextAccessor, logger, mediaService, contentTypeBaseServiceProvider); + var mediaParser = new ImageSourceParser(umbracoContextAccessor, logger, mediaService, contentTypeBaseServiceProvider); var dataTypeService = new TestObjects.TestDataTypeService( new DataType(new VoidEditor(logger)) { Id = 1 }, diff --git a/src/Umbraco.Tests/Templates/MediaParserTests.cs b/src/Umbraco.Tests/Templates/ImageSourceParserTests.cs similarity index 69% rename from src/Umbraco.Tests/Templates/MediaParserTests.cs rename to src/Umbraco.Tests/Templates/ImageSourceParserTests.cs index f7b5933a52..d383ab02df 100644 --- a/src/Umbraco.Tests/Templates/MediaParserTests.cs +++ b/src/Umbraco.Tests/Templates/ImageSourceParserTests.cs @@ -12,19 +12,40 @@ using System.Web; using System; using System.Linq; using Umbraco.Core.Models; +using Umbraco.Core; namespace Umbraco.Tests.Templates { + [TestFixture] - public class MediaParserTests + public class ImageSourceParserTests { + [Test] + public void Returns_Udis_From_Data_Udi_Html_Attributes() + { + var input = @"

+

+ +
+

"; + + var logger = Mock.Of(); + var umbracoContextAccessor = new TestUmbracoContextAccessor(); + var mediaParser = new ImageSourceParser(umbracoContextAccessor, logger, Mock.Of(), Mock.Of()); + + var result = mediaParser.FindUdisFromDataAttributes(input).ToList(); + Assert.AreEqual(2, result.Count); + Assert.AreEqual(Udi.Parse("umb://media/D4B18427A1544721B09AC7692F35C264"), result[0]); + Assert.AreEqual(Udi.Parse("umb://media-type/B726D735E4C446D58F703F3FBCFC97A5"), result[1]); + } + [Test] public void Remove_Image_Sources() { var logger = Mock.Of(); var umbracoContextAccessor = new TestUmbracoContextAccessor(); - var mediaParser = new MediaParser(umbracoContextAccessor, logger, Mock.Of(), Mock.Of()); + var mediaParser = new ImageSourceParser(umbracoContextAccessor, logger, Mock.Of(), Mock.Of()); var result = mediaParser.RemoveImageSources(@"

@@ -66,7 +87,7 @@ namespace Umbraco.Tests.Templates var mediaCache = Mock.Get(reference.UmbracoContext.Media); mediaCache.Setup(x => x.GetById(It.IsAny())).Returns(media.Object); - var mediaParser = new MediaParser(umbracoContextAccessor, Mock.Of(), Mock.Of(), Mock.Of()); + var mediaParser = new ImageSourceParser(umbracoContextAccessor, Mock.Of(), Mock.Of(), Mock.Of()); var result = mediaParser.EnsureImageSources(@"

diff --git a/src/Umbraco.Tests/Templates/LocalLinkParserTests.cs b/src/Umbraco.Tests/Templates/LocalLinkParserTests.cs new file mode 100644 index 0000000000..30c79b3115 --- /dev/null +++ b/src/Umbraco.Tests/Templates/LocalLinkParserTests.cs @@ -0,0 +1,34 @@ +using NUnit.Framework; +using System.Linq; +using Umbraco.Core; +using Umbraco.Tests.Testing.Objects.Accessors; +using Umbraco.Web.Templates; + +namespace Umbraco.Tests.Templates +{ + [TestFixture] + public class LocalLinkParserTests + { + [Test] + public void Returns_Udis_From_LocalLinks() + { + var input = @"

+

+ + hello +
+

+hello +

"; + + var umbracoContextAccessor = new TestUmbracoContextAccessor(); + var parser = new LocalLinkParser(umbracoContextAccessor); + + var result = parser.FindUdisFromLocalLinks(input).ToList(); + + Assert.AreEqual(2, result.Count); + Assert.AreEqual(Udi.Parse("umb://document/C093961595094900AAF9170DDE6AD442"), result[0]); + Assert.AreEqual(Udi.Parse("umb://document-type/2D692FCB070B4CDA92FB6883FDBFD6E2"), result[1]); + } + } +} diff --git a/src/Umbraco.Tests/Templates/UdiParserTests.cs b/src/Umbraco.Tests/Templates/UdiParserTests.cs deleted file mode 100644 index eca7f6c4f0..0000000000 --- a/src/Umbraco.Tests/Templates/UdiParserTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -using NUnit.Framework; -using Umbraco.Web.Templates; -using System.Linq; -using Umbraco.Core; - -namespace Umbraco.Tests.Templates -{ - [TestFixture] - public class UdiParserTests - { - [Test] - public void Returns_Udi_From_Data_Udi_Html_Attributes() - { - var input = @"

-

- -
-

"; - - var parser = new UdiParser(); - var result = parser.ParseUdisFromDataAttributes(input).ToList(); - Assert.AreEqual(2, result.Count); - Assert.AreEqual(Udi.Parse("umb://media/D4B18427A1544721B09AC7692F35C264"), result[0]); - Assert.AreEqual(Udi.Parse("umb://media-type/B726D735E4C446D58F703F3FBCFC97A5"), result[1]); - } - - } -} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 519f36012c..d9583b9393 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -159,7 +159,7 @@ - + @@ -256,7 +256,7 @@ - + diff --git a/src/Umbraco.Tests/Web/InternalLinkParserTests.cs b/src/Umbraco.Tests/Web/InternalLinkParserTests.cs index 0a948a8617..49da8d6566 100644 --- a/src/Umbraco.Tests/Web/InternalLinkParserTests.cs +++ b/src/Umbraco.Tests/Web/InternalLinkParserTests.cs @@ -65,7 +65,7 @@ namespace Umbraco.Tests.Web mediaCache.Setup(x => x.GetById(It.IsAny())).Returns(media.Object); mediaCache.Setup(x => x.GetById(It.IsAny())).Returns(media.Object); - var linkParser = new InternalLinkParser(umbracoContextAccessor); + var linkParser = new LocalLinkParser(umbracoContextAccessor); var output = linkParser.EnsureInternalLinks(input); diff --git a/src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs index bec28e33fd..fa6346fdd8 100644 --- a/src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs @@ -28,10 +28,10 @@ namespace Umbraco.Web.PropertyEditors private IMediaService _mediaService; private IContentTypeBaseServiceProvider _contentTypeBaseServiceProvider; private IUmbracoContextAccessor _umbracoContextAccessor; - private readonly MediaParser _mediaParser; + private readonly ImageSourceParser _mediaParser; private ILogger _logger; - public GridPropertyEditor(ILogger logger, IMediaService mediaService, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IUmbracoContextAccessor umbracoContextAccessor, MediaParser mediaParser) + public GridPropertyEditor(ILogger logger, IMediaService mediaService, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IUmbracoContextAccessor umbracoContextAccessor, ImageSourceParser mediaParser) : base(logger) { _mediaService = mediaService; @@ -57,9 +57,9 @@ namespace Umbraco.Web.PropertyEditors private IContentTypeBaseServiceProvider _contentTypeBaseServiceProvider; private IUmbracoContextAccessor _umbracoContextAccessor; private ILogger _logger; - private readonly MediaParser _mediaParser; + private readonly ImageSourceParser _mediaParser; - public GridPropertyValueEditor(DataEditorAttribute attribute, IMediaService mediaService, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IUmbracoContextAccessor umbracoContextAccessor, ILogger logger, MediaParser _mediaParser) + public GridPropertyValueEditor(DataEditorAttribute attribute, IMediaService mediaService, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IUmbracoContextAccessor umbracoContextAccessor, ILogger logger, ImageSourceParser _mediaParser) : base(attribute) { _mediaService = mediaService; diff --git a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs index 03dc7b6694..4c7df4163c 100644 --- a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Umbraco.Core; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -25,12 +26,13 @@ namespace Umbraco.Web.PropertyEditors public class RichTextPropertyEditor : DataEditor { private IUmbracoContextAccessor _umbracoContextAccessor; - private readonly MediaParser _mediaParser; + private readonly ImageSourceParser _mediaParser; + /// /// The constructor will setup the property editor based on the attribute if one is found /// - public RichTextPropertyEditor(ILogger logger, IUmbracoContextAccessor umbracoContextAccessor, MediaParser mediaParser) + public RichTextPropertyEditor(ILogger logger, IUmbracoContextAccessor umbracoContextAccessor, ImageSourceParser mediaParser) : base(logger) { _umbracoContextAccessor = umbracoContextAccessor; @@ -53,9 +55,9 @@ namespace Umbraco.Web.PropertyEditors internal class RichTextPropertyValueEditor : DataValueEditor, IDataValueReference { private IUmbracoContextAccessor _umbracoContextAccessor; - private readonly MediaParser _mediaParser; + private readonly ImageSourceParser _mediaParser; - public RichTextPropertyValueEditor(DataEditorAttribute attribute, IUmbracoContextAccessor umbracoContextAccessor, MediaParser _mediaParser) + public RichTextPropertyValueEditor(DataEditorAttribute attribute, IUmbracoContextAccessor umbracoContextAccessor, ImageSourceParser _mediaParser) : base(attribute) { _umbracoContextAccessor = umbracoContextAccessor; @@ -127,7 +129,7 @@ namespace Umbraco.Web.PropertyEditors /// public IEnumerable GetReferences(object value) { - throw new NotImplementedException(); + return _mediaParser.FindUdisFromDataAttributes(value == null ? string.Empty : value is string str ? str : value.ToString()).ToList(); } } diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs index 578a4cad06..e8a2ac11a6 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs @@ -12,10 +12,10 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters [DefaultPropertyValueConverter] public class MarkdownEditorValueConverter : PropertyValueConverterBase { - private readonly InternalLinkParser _localLinkParser; + private readonly LocalLinkParser _localLinkParser; private readonly UrlParser _urlResolver; - public MarkdownEditorValueConverter(InternalLinkParser localLinkParser, UrlParser urlResolver) + public MarkdownEditorValueConverter(LocalLinkParser localLinkParser, UrlParser urlResolver) { _localLinkParser = localLinkParser; _urlResolver = urlResolver; diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs index 88c1429b16..2caac9e1f4 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs @@ -24,9 +24,9 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters { private readonly IUmbracoContextAccessor _umbracoContextAccessor; private readonly IMacroRenderer _macroRenderer; - private readonly InternalLinkParser _internalLinkParser; + private readonly LocalLinkParser _internalLinkParser; private readonly UrlParser _urlResolver; - private readonly MediaParser _mediaParser; + private readonly ImageSourceParser _mediaParser; public override PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType propertyType) { @@ -36,7 +36,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters } public RteMacroRenderingValueConverter(IUmbracoContextAccessor umbracoContextAccessor, IMacroRenderer macroRenderer, - InternalLinkParser internalLinkParser, UrlParser urlResolver, MediaParser mediaParser) + LocalLinkParser internalLinkParser, UrlParser urlResolver, ImageSourceParser mediaParser) { _umbracoContextAccessor = umbracoContextAccessor; _macroRenderer = macroRenderer; diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/TextStringValueConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/TextStringValueConverter.cs index 1b85d6e608..5efc2ee2db 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/TextStringValueConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/TextStringValueConverter.cs @@ -11,7 +11,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters [DefaultPropertyValueConverter] public class TextStringValueConverter : PropertyValueConverterBase { - public TextStringValueConverter(InternalLinkParser internalLinkParser, UrlParser urlParser) + public TextStringValueConverter(LocalLinkParser internalLinkParser, UrlParser urlParser) { _internalLinkParser = internalLinkParser; _urlParser = urlParser; @@ -22,7 +22,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters Constants.PropertyEditors.Aliases.TextBox, Constants.PropertyEditors.Aliases.TextArea }; - private readonly InternalLinkParser _internalLinkParser; + private readonly LocalLinkParser _internalLinkParser; private readonly UrlParser _urlParser; public override bool IsConverter(IPublishedPropertyType propertyType) diff --git a/src/Umbraco.Web/Runtime/WebInitialComposer.cs b/src/Umbraco.Web/Runtime/WebInitialComposer.cs index 1b3128388d..2f78ac9732 100644 --- a/src/Umbraco.Web/Runtime/WebInitialComposer.cs +++ b/src/Umbraco.Web/Runtime/WebInitialComposer.cs @@ -107,9 +107,9 @@ namespace Umbraco.Web.Runtime composition.RegisterUnique(); composition.RegisterUnique(); - composition.RegisterUnique(); + composition.RegisterUnique(); composition.RegisterUnique(); - composition.RegisterUnique(); + composition.RegisterUnique(); // register the umbraco helper - this is Transient! very important! // also, if not level.Run, we cannot really use the helper (during upgrade...) diff --git a/src/Umbraco.Web/Templates/MediaParser.cs b/src/Umbraco.Web/Templates/ImageSourceParser.cs similarity index 86% rename from src/Umbraco.Web/Templates/MediaParser.cs rename to src/Umbraco.Web/Templates/ImageSourceParser.cs index 071c6a5696..6a0bba4998 100644 --- a/src/Umbraco.Web/Templates/MediaParser.cs +++ b/src/Umbraco.Web/Templates/ImageSourceParser.cs @@ -14,9 +14,9 @@ using Umbraco.Web.Routing; namespace Umbraco.Web.Templates { - public sealed class MediaParser + public sealed class ImageSourceParser { - public MediaParser(IUmbracoContextAccessor umbracoContextAccessor, ILogger logger, IMediaService mediaService, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider) + public ImageSourceParser(IUmbracoContextAccessor umbracoContextAccessor, ILogger logger, IMediaService mediaService, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider) { _umbracoContextAccessor = umbracoContextAccessor; _logger = logger; @@ -32,6 +32,27 @@ namespace Umbraco.Web.Templates private readonly IContentTypeBaseServiceProvider _contentTypeBaseServiceProvider; const string TemporaryImageDataAttribute = "data-tmpimg"; + private static readonly Regex DataUdiAttributeRegex = new Regex(@"data-udi=\\?(?:""|')(?umb://[A-z0-9\-]+/[A-z0-9]+)\\?(?:""|')", + RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); + + /// + /// Parses out UDIs from an html string based on 'data-udi' html attributes + /// + /// + /// + public IEnumerable FindUdisFromDataAttributes(string text) + { + var matches = DataUdiAttributeRegex.Matches(text); + if (matches.Count == 0) + yield break; + + foreach (Match match in matches) + { + if (match.Groups.Count == 2 && Udi.TryParse(match.Groups[1].Value, out var udi)) + yield return udi; + } + } + /// /// Parses the string looking for Umbraco image tags and updates them to their up-to-date image sources. /// @@ -178,7 +199,7 @@ namespace Umbraco.Web.Templates } catch (Exception ex) { - _logger.Error(typeof(MediaParser), ex, "Could not delete temp file or folder {FileName}", absoluteTempImagePath); + _logger.Error(typeof(ImageSourceParser), ex, "Could not delete temp file or folder {FileName}", absoluteTempImagePath); } } } diff --git a/src/Umbraco.Web/Templates/InternalLinkParser.cs b/src/Umbraco.Web/Templates/LocalLinkParser.cs similarity index 63% rename from src/Umbraco.Web/Templates/InternalLinkParser.cs rename to src/Umbraco.Web/Templates/LocalLinkParser.cs index 32d7d42eac..f394f56d85 100644 --- a/src/Umbraco.Web/Templates/InternalLinkParser.cs +++ b/src/Umbraco.Web/Templates/LocalLinkParser.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Text.RegularExpressions; using Umbraco.Core; using Umbraco.Core.Logging; @@ -10,7 +11,7 @@ namespace Umbraco.Web.Templates /// /// Utility class used to parse internal links /// - public sealed class InternalLinkParser + public sealed class LocalLinkParser { private static readonly Regex LocalLinkPattern = new Regex(@"href=""[/]?(?:\{|\%7B)localLink:([a-zA-Z0-9-://]+)(?:\}|\%7D)", @@ -18,11 +19,20 @@ namespace Umbraco.Web.Templates private readonly IUmbracoContextAccessor _umbracoContextAccessor; - public InternalLinkParser(IUmbracoContextAccessor umbracoContextAccessor) + public LocalLinkParser(IUmbracoContextAccessor umbracoContextAccessor) { _umbracoContextAccessor = umbracoContextAccessor; } + internal IEnumerable FindUdisFromLocalLinks(string text) + { + foreach ((int? intId, GuidUdi udi, string tagValue) in FindLocalLinkIds(text)) + { + if (udi != null) + yield return udi; // In v8, we only care abuot UDIs + } + } + /// /// Parses the string looking for the {localLink} syntax and updates them to their correct links. /// @@ -56,6 +66,33 @@ namespace Umbraco.Web.Templates var urlProvider = _umbracoContextAccessor.UmbracoContext.UrlProvider; + foreach((int? intId, GuidUdi udi, string tagValue) in FindLocalLinkIds(text)) + { + if (udi != null) + { + var newLink = "#"; + if (udi.EntityType == Constants.UdiEntityType.Document) + newLink = urlProvider.GetUrl(udi.Guid); + else if (udi.EntityType == Constants.UdiEntityType.Media) + newLink = urlProvider.GetMediaUrl(udi.Guid); + + if (newLink == null) + newLink = "#"; + + text = text.Replace(tagValue, "href=\"" + newLink); + } + else if (intId.HasValue) + { + var newLink = urlProvider.GetUrl(intId.Value); + text = text.Replace(tagValue, "href=\"" + newLink); + } + } + + return text; + } + + private IEnumerable<(int? intId, GuidUdi udi, string tagValue)> FindLocalLinkIds(string text) + { // Parse internal links var tags = LocalLinkPattern.Matches(text); foreach (Match tag in tags) @@ -69,29 +106,16 @@ namespace Umbraco.Web.Templates { var guidUdi = udi as GuidUdi; if (guidUdi != null) - { - var newLink = "#"; - if (guidUdi.EntityType == Constants.UdiEntityType.Document) - newLink = urlProvider.GetUrl(guidUdi.Guid); - else if (guidUdi.EntityType == Constants.UdiEntityType.Media) - newLink = urlProvider.GetMediaUrl(guidUdi.Guid); - - if (newLink == null) - newLink = "#"; - - text = text.Replace(tag.Value, "href=\"" + newLink); - } + yield return (null, guidUdi, tag.Value); } if (int.TryParse(id, out var intId)) { - var newLink = urlProvider.GetUrl(intId); - text = text.Replace(tag.Value, "href=\"" + newLink); + yield return (intId, null, tag.Value); } } } - return text; } } } diff --git a/src/Umbraco.Web/Templates/TemplateUtilities.cs b/src/Umbraco.Web/Templates/TemplateUtilities.cs index d4bae38147..db0366dbf3 100644 --- a/src/Umbraco.Web/Templates/TemplateUtilities.cs +++ b/src/Umbraco.Web/Templates/TemplateUtilities.cs @@ -31,7 +31,7 @@ namespace Umbraco.Web.Templates [Obsolete("Inject and use an instance of InternalLinkParser instead")] public static string ParseInternalLinks(string text, UrlProvider urlProvider) - => Current.Factory.GetInstance().EnsureInternalLinks(text); + => Current.Factory.GetInstance().EnsureInternalLinks(text); [Obsolete("Inject and use an instance of UrlResolver")] public static string ResolveUrlsFromTextString(string text) @@ -43,14 +43,14 @@ namespace Umbraco.Web.Templates [Obsolete("Use MediaParser.EnsureImageSources instead")] public static string ResolveMediaFromTextString(string text) - => Current.Factory.GetInstance().EnsureImageSources(text); + => Current.Factory.GetInstance().EnsureImageSources(text); [Obsolete("Use MediaParser.RemoveImageSources instead")] internal static string RemoveMediaUrlsFromTextString(string text) - => Current.Factory.GetInstance().RemoveImageSources(text); + => Current.Factory.GetInstance().RemoveImageSources(text); [Obsolete("Use MediaParser.RemoveImageSources instead")] internal static string FindAndPersistPastedTempImages(string html, Guid mediaParentFolder, int userId, IMediaService mediaService, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, ILogger logger) - => Current.Factory.GetInstance().FindAndPersistPastedTempImages(html, mediaParentFolder, userId); + => Current.Factory.GetInstance().FindAndPersistPastedTempImages(html, mediaParentFolder, userId); } } diff --git a/src/Umbraco.Web/Templates/UdiParser.cs b/src/Umbraco.Web/Templates/UdiParser.cs deleted file mode 100644 index 8bb5f8c579..0000000000 --- a/src/Umbraco.Web/Templates/UdiParser.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using Umbraco.Core; - -namespace Umbraco.Web.Templates -{ - /// - /// Parses out UDIs in strings - /// - public sealed class UdiParser - { - private static readonly Regex DataUdiAttributeRegex = new Regex(@"data-udi=\\?(?:""|')(?umb://[A-z0-9\-]+/[A-z0-9]+)\\?(?:""|')", - RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); - - /// - /// Parses out UDIs from an html string based on 'data-udi' html attributes - /// - /// - /// - public IEnumerable ParseUdisFromDataAttributes(string text) - { - var matches = DataUdiAttributeRegex.Matches(text); - if (matches.Count == 0) - yield break; - - foreach (Match match in matches) - { - if (match.Groups.Count == 2 && Udi.TryParse(match.Groups[1].Value, out var udi)) - yield return udi; - } - } - } -} diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 276cdf9ebc..8fc06c75c2 100755 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -247,9 +247,8 @@ - - - + + diff --git a/src/Umbraco.Web/UmbracoComponentRenderer.cs b/src/Umbraco.Web/UmbracoComponentRenderer.cs index c0f83fd1af..83c8a7f0fa 100644 --- a/src/Umbraco.Web/UmbracoComponentRenderer.cs +++ b/src/Umbraco.Web/UmbracoComponentRenderer.cs @@ -27,9 +27,9 @@ namespace Umbraco.Web private readonly IUmbracoContextAccessor _umbracoContextAccessor; private readonly IMacroRenderer _macroRenderer; private readonly ITemplateRenderer _templateRenderer; - private readonly InternalLinkParser _internalLinkParser; + private readonly LocalLinkParser _internalLinkParser; - public UmbracoComponentRenderer(IUmbracoContextAccessor umbracoContextAccessor, IMacroRenderer macroRenderer, ITemplateRenderer templateRenderer, InternalLinkParser internalLinkParser) + public UmbracoComponentRenderer(IUmbracoContextAccessor umbracoContextAccessor, IMacroRenderer macroRenderer, ITemplateRenderer templateRenderer, LocalLinkParser internalLinkParser) { _umbracoContextAccessor = umbracoContextAccessor; _macroRenderer = macroRenderer;