From 6cc747bf766df854d94c4dbc554445474016aa72 Mon Sep 17 00:00:00 2001 From: Stephan Date: Fri, 22 Mar 2013 17:38:28 -0100 Subject: [PATCH 1/2] Core.Strings - fix bug in helper freeze --- src/Umbraco.Core/Strings/ShortStringHelperResolver.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs b/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs index 6725078359..8b920f6024 100644 --- a/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs +++ b/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs @@ -15,7 +15,7 @@ namespace Umbraco.Core.Strings internal ShortStringHelperResolver(IShortStringHelper helper) : base(helper) { - Resolution.Frozen += (sender, args) => helper.Freeze(); + Resolution.Frozen += (sender, args) => Value.Freeze(); } /// From 21c635f61a910ed01404505f5d5f3c35a926e67b Mon Sep 17 00:00:00 2001 From: Stephan Date: Fri, 22 Mar 2013 17:39:35 -0100 Subject: [PATCH 2/2] Core.Strings - Add support for UrlReplaceCharacters to DefaultShortStringHelper --- src/Umbraco.Core/CoreBootManager.cs | 9 +++++- .../Strings/DefaultShortStringHelper.cs | 32 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index 11ee5b4eab..877928957a 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -239,8 +239,15 @@ namespace Umbraco.Core PropertyEditorValueConvertersResolver.Current.AddType(); PropertyEditorValueConvertersResolver.Current.AddType(); - ShortStringHelperResolver.Current = new ShortStringHelperResolver( + // this is how we'd switch over to DefaultShortStringHelper _and_ still use + // UmbracoSettings UrlReplaceCharacters... + //ShortStringHelperResolver.Current = new ShortStringHelperResolver( + // new DefaultShortStringHelper().WithConfig(DefaultShortStringHelper.ApplyUrlReplaceCharacters)); + + // use the Legacy one for now + ShortStringHelperResolver.Current = new ShortStringHelperResolver( new LegacyShortStringHelper()); + UrlSegmentProviderResolver.Current = new UrlSegmentProviderResolver( typeof (DefaultUrlSegmentProvider)); } diff --git a/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs b/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs index 511fb2fdd1..f6a8166c9e 100644 --- a/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs +++ b/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs @@ -20,6 +20,11 @@ namespace Umbraco.Core.Strings { #region Ctor and vars + static DefaultShortStringHelper() + { + InitializeLegacyUrlReplaceCharacters(); + } + /// /// Freezes the helper so it can prevents its configuration from being modified. /// @@ -46,6 +51,33 @@ namespace Umbraco.Core.Strings #endregion + #region Legacy UrlReplaceCharacters + + static readonly Dictionary UrlReplaceCharacters = new Dictionary(); + + static void InitializeLegacyUrlReplaceCharacters() + { + var replaceChars = UmbracoSettings.UrlReplaceCharacters; + foreach (var node in replaceChars.SelectNodes("char").Cast()) + { + var org = node.Attributes.GetNamedItem("org"); + if (org != null && org.Value != "") + UrlReplaceCharacters[org.Value] = XmlHelper.GetNodeValue(node); + } + } + + /// + /// Returns a new string in which characters have been replaced according to the Umbraco settings UrlReplaceCharacters. + /// + /// The string to filter. + /// The filtered string. + public static string ApplyUrlReplaceCharacters(string s) + { + return s.ReplaceMany(UrlReplaceCharacters); + } + + #endregion + #region Configuration private void EnsureNotFrozen()