Renames some stuff, updates RTE editor to return media/content refs and adds tests for locallink parsing
This commit is contained in:
@@ -43,7 +43,7 @@ namespace Umbraco.Tests.PublishedContent
|
||||
var logger = Mock.Of<ILogger>();
|
||||
|
||||
var dataTypeService = new TestObjects.TestDataTypeService(
|
||||
new DataType(new RichTextPropertyEditor(logger, umbracoCtxAccessor, new MediaParser(umbracoCtxAccessor, logger, Mock.Of<IMediaService>(), Mock.Of<IContentTypeBaseServiceProvider>()))) { Id = 1 });
|
||||
new DataType(new RichTextPropertyEditor(logger, umbracoCtxAccessor, new ImageSourceParser(umbracoCtxAccessor, logger, Mock.Of<IMediaService>(), Mock.Of<IContentTypeBaseServiceProvider>()))) { Id = 1 });
|
||||
|
||||
var publishedContentTypeFactory = new PublishedContentTypeFactory(Mock.Of<IPublishedModelFactory>(), converters, dataTypeService);
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Umbraco.Tests.PublishedContent
|
||||
var mediaService = Mock.Of<IMediaService>();
|
||||
var contentTypeBaseServiceProvider = Mock.Of<IContentTypeBaseServiceProvider>();
|
||||
var umbracoContextAccessor = Mock.Of<IUmbracoContextAccessor>();
|
||||
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 },
|
||||
|
||||
@@ -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 = @"<p>
|
||||
<div>
|
||||
<img src='/media/12312.jpg' data-udi='umb://media/D4B18427A1544721B09AC7692F35C264' />
|
||||
</div>
|
||||
</p><p><img src='/media/234234.jpg' data-udi=""umb://media-type/B726D735E4C446D58F703F3FBCFC97A5"" /></p>";
|
||||
|
||||
var logger = Mock.Of<ILogger>();
|
||||
var umbracoContextAccessor = new TestUmbracoContextAccessor();
|
||||
var mediaParser = new ImageSourceParser(umbracoContextAccessor, logger, Mock.Of<IMediaService>(), Mock.Of<IContentTypeBaseServiceProvider>());
|
||||
|
||||
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<ILogger>();
|
||||
var umbracoContextAccessor = new TestUmbracoContextAccessor();
|
||||
var mediaParser = new MediaParser(umbracoContextAccessor, logger, Mock.Of<IMediaService>(), Mock.Of<IContentTypeBaseServiceProvider>());
|
||||
var mediaParser = new ImageSourceParser(umbracoContextAccessor, logger, Mock.Of<IMediaService>(), Mock.Of<IContentTypeBaseServiceProvider>());
|
||||
|
||||
var result = mediaParser.RemoveImageSources(@"<p>
|
||||
<div>
|
||||
@@ -66,7 +87,7 @@ namespace Umbraco.Tests.Templates
|
||||
var mediaCache = Mock.Get(reference.UmbracoContext.Media);
|
||||
mediaCache.Setup(x => x.GetById(It.IsAny<Guid>())).Returns(media.Object);
|
||||
|
||||
var mediaParser = new MediaParser(umbracoContextAccessor, Mock.Of<ILogger>(), Mock.Of<IMediaService>(), Mock.Of<IContentTypeBaseServiceProvider>());
|
||||
var mediaParser = new ImageSourceParser(umbracoContextAccessor, Mock.Of<ILogger>(), Mock.Of<IMediaService>(), Mock.Of<IContentTypeBaseServiceProvider>());
|
||||
|
||||
var result = mediaParser.EnsureImageSources(@"<p>
|
||||
<div>
|
||||
34
src/Umbraco.Tests/Templates/LocalLinkParserTests.cs
Normal file
34
src/Umbraco.Tests/Templates/LocalLinkParserTests.cs
Normal file
@@ -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 = @"<p>
|
||||
<div>
|
||||
<img src='/media/12312.jpg' data-udi='umb://media/D4B18427A1544721B09AC7692F35C264' />
|
||||
<a href=""{locallink:umb://document/C093961595094900AAF9170DDE6AD442}"">hello</a>
|
||||
</div>
|
||||
</p><p><img src='/media/234234.jpg' data-udi=""umb://media-type/B726D735E4C446D58F703F3FBCFC97A5"" />
|
||||
<a href=""{locallink:umb://document-type/2D692FCB070B4CDA92FB6883FDBFD6E2}"">hello</a>
|
||||
</p>";
|
||||
|
||||
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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 = @"<p>
|
||||
<div>
|
||||
<img src='/media/12312.jpg' data-udi='umb://media/D4B18427A1544721B09AC7692F35C264' />
|
||||
</div>
|
||||
</p><p><img src='/media/234234.jpg' data-udi=""umb://media-type/B726D735E4C446D58F703F3FBCFC97A5"" /></p>";
|
||||
|
||||
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]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -159,7 +159,7 @@
|
||||
<Compile Include="Services\MemberGroupServiceTests.cs" />
|
||||
<Compile Include="Services\MediaTypeServiceTests.cs" />
|
||||
<Compile Include="Services\PropertyValidationServiceTests.cs" />
|
||||
<Compile Include="Templates\UdiParserTests.cs" />
|
||||
<Compile Include="Templates\LocalLinkParserTests.cs" />
|
||||
<Compile Include="TestHelpers\RandomIdRamDirectory.cs" />
|
||||
<Compile Include="Testing\Objects\TestDataSource.cs" />
|
||||
<Compile Include="Published\PublishedSnapshotTestObjects.cs" />
|
||||
@@ -256,7 +256,7 @@
|
||||
<Compile Include="Web\HealthChecks\HealthCheckResultsTests.cs" />
|
||||
<Compile Include="Web\HttpCookieExtensionsTests.cs" />
|
||||
<Compile Include="Web\InternalLinkParserTests.cs" />
|
||||
<Compile Include="Templates\MediaParserTests.cs" />
|
||||
<Compile Include="Templates\ImageSourceParserTests.cs" />
|
||||
<Compile Include="Web\Mvc\HtmlStringUtilitiesTests.cs" />
|
||||
<Compile Include="Web\ModelStateExtensionsTests.cs" />
|
||||
<Compile Include="Web\Mvc\RenderIndexActionSelectorAttributeTests.cs" />
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace Umbraco.Tests.Web
|
||||
mediaCache.Setup(x => x.GetById(It.IsAny<int>())).Returns(media.Object);
|
||||
mediaCache.Setup(x => x.GetById(It.IsAny<Guid>())).Returns(media.Object);
|
||||
|
||||
var linkParser = new InternalLinkParser(umbracoContextAccessor);
|
||||
var linkParser = new LocalLinkParser(umbracoContextAccessor);
|
||||
|
||||
var output = linkParser.EnsureInternalLinks(input);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// The constructor will setup the property editor based on the attribute if one is found
|
||||
/// </summary>
|
||||
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
|
||||
/// <returns></returns>
|
||||
public IEnumerable<Udi> GetReferences(object value)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return _mediaParser.FindUdisFromDataAttributes(value == null ? string.Empty : value is string str ? str : value.ToString()).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -107,9 +107,9 @@ namespace Umbraco.Web.Runtime
|
||||
composition.RegisterUnique<IMacroRenderer, MacroRenderer>();
|
||||
composition.RegisterUnique<IUmbracoComponentRenderer, UmbracoComponentRenderer>();
|
||||
|
||||
composition.RegisterUnique<InternalLinkParser>();
|
||||
composition.RegisterUnique<LocalLinkParser>();
|
||||
composition.RegisterUnique<UrlParser>();
|
||||
composition.RegisterUnique<MediaParser>();
|
||||
composition.RegisterUnique<ImageSourceParser>();
|
||||
|
||||
// register the umbraco helper - this is Transient! very important!
|
||||
// also, if not level.Run, we cannot really use the helper (during upgrade...)
|
||||
|
||||
@@ -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=\\?(?:""|')(?<udi>umb://[A-z0-9\-]+/[A-z0-9]+)\\?(?:""|')",
|
||||
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
|
||||
|
||||
/// <summary>
|
||||
/// Parses out UDIs from an html string based on 'data-udi' html attributes
|
||||
/// </summary>
|
||||
/// <param name="text"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<Udi> 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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses the string looking for Umbraco image tags and updates them to their up-to-date image sources.
|
||||
/// </summary>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
/// <summary>
|
||||
/// Utility class used to parse internal links
|
||||
/// </summary>
|
||||
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<Udi> 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
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses the string looking for the {localLink} syntax and updates them to their correct links.
|
||||
/// </summary>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<InternalLinkParser>().EnsureInternalLinks(text);
|
||||
=> Current.Factory.GetInstance<LocalLinkParser>().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<MediaParser>().EnsureImageSources(text);
|
||||
=> Current.Factory.GetInstance<ImageSourceParser>().EnsureImageSources(text);
|
||||
|
||||
[Obsolete("Use MediaParser.RemoveImageSources instead")]
|
||||
internal static string RemoveMediaUrlsFromTextString(string text)
|
||||
=> Current.Factory.GetInstance<MediaParser>().RemoveImageSources(text);
|
||||
=> Current.Factory.GetInstance<ImageSourceParser>().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<MediaParser>().FindAndPersistPastedTempImages(html, mediaParentFolder, userId);
|
||||
=> Current.Factory.GetInstance<ImageSourceParser>().FindAndPersistPastedTempImages(html, mediaParentFolder, userId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using Umbraco.Core;
|
||||
|
||||
namespace Umbraco.Web.Templates
|
||||
{
|
||||
/// <summary>
|
||||
/// Parses out UDIs in strings
|
||||
/// </summary>
|
||||
public sealed class UdiParser
|
||||
{
|
||||
private static readonly Regex DataUdiAttributeRegex = new Regex(@"data-udi=\\?(?:""|')(?<udi>umb://[A-z0-9\-]+/[A-z0-9]+)\\?(?:""|')",
|
||||
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
|
||||
|
||||
/// <summary>
|
||||
/// Parses out UDIs from an html string based on 'data-udi' html attributes
|
||||
/// </summary>
|
||||
/// <param name="text"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<Udi> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -247,9 +247,8 @@
|
||||
<Compile Include="Models\Link.cs" />
|
||||
<Compile Include="Models\LinkType.cs" />
|
||||
<Compile Include="Models\TemplateQuery\OperatorFactory.cs" />
|
||||
<Compile Include="Templates\InternalLinkParser.cs" />
|
||||
<Compile Include="Templates\MediaParser.cs" />
|
||||
<Compile Include="Templates\UdiParser.cs" />
|
||||
<Compile Include="Templates\LocalLinkParser.cs" />
|
||||
<Compile Include="Templates\ImageSourceParser.cs" />
|
||||
<Compile Include="Templates\UrlParser.cs" />
|
||||
<Compile Include="UmbracoContextFactory.cs" />
|
||||
<Compile Include="UmbracoContextReference.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;
|
||||
|
||||
Reference in New Issue
Block a user