Remove ugly CharCollection hack

By adding a new configuration and mapping the old CharCollection to that, we can get around having to return null the first time, by obsoleting the old one and redirecting to the new GetCharReplacements method
This commit is contained in:
Mole
2021-12-22 11:29:04 +01:00
parent c6d28f01a8
commit 53e5a25df8
5 changed files with 81 additions and 74 deletions

View File

@@ -0,0 +1,44 @@
using System.Collections.Generic;
using System.Linq;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Configuration.UmbracoSettings;
namespace Umbraco.Extensions
{
/// <summary>
/// Get concatenated user and default character replacements
/// taking into account <see cref="RequestHandlerSettings.EnableDefaultCharReplacements"/>
/// </summary>
public static class RequestHandlerSettingsExtension
{
public static IEnumerable<CharItem> GetCharReplacements(this RequestHandlerSettings requestHandlerSettings)
{
if (!requestHandlerSettings.EnableDefaultCharReplacements)
{
return requestHandlerSettings.UserDefinedCharCollection ?? Enumerable.Empty<CharItem>();
}
if (requestHandlerSettings.UserDefinedCharCollection == null || !requestHandlerSettings.UserDefinedCharCollection.Any())
{
return RequestHandlerSettings.DefaultCharCollection;
}
foreach (CharItem defaultReplacement in RequestHandlerSettings.DefaultCharCollection)
{
foreach (CharItem userReplacement in requestHandlerSettings.UserDefinedCharCollection)
{
if (userReplacement.Char == defaultReplacement.Char)
{
defaultReplacement.Replacement = userReplacement.Replacement;
}
}
}
IEnumerable<CharItem> mergedCollections =
RequestHandlerSettings.DefaultCharCollection.Union<CharItem>(
requestHandlerSettings.UserDefinedCharCollection, new CharacterReplacementEqualityComparer());
return mergedCollections;
}
}
}