diff --git a/zero/Metadata/MetadataOptions.cs b/zero/Metadata/MetadataOptions.cs index 7c2305b7..029367aa 100644 --- a/zero/Metadata/MetadataOptions.cs +++ b/zero/Metadata/MetadataOptions.cs @@ -16,6 +16,12 @@ public class MetadataOptions public string Author { get; set; } + public string TitleFragmentsSeparator { get; set; } = " / "; + + public string TitlePageNameToFragmentSeparator { get; set; } = " / "; + + public bool HidePageName { get; set; } + //public Schema Schema { get; set; } public MetadataOptions() { } diff --git a/zero/Metadata/MetadataService.cs b/zero/Metadata/MetadataService.cs index b5249a98..51eef65b 100644 --- a/zero/Metadata/MetadataService.cs +++ b/zero/Metadata/MetadataService.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Logging; using System.Reflection; +using System.Text; namespace zero.Metadata; @@ -18,7 +19,7 @@ public class MetadataService : IMetadataService /// - public Metadata Generate(string pageName, MetadataOptions options) + public virtual Metadata Generate(string pageName, MetadataOptions options) { Metadata model = new() { @@ -37,7 +38,7 @@ public class MetadataService : IMetadataService // title HashSet fragments = options.TitleFragments.Where(x => !x.IsNullOrWhiteSpace()).Reverse().ToHashSet(); - model.Title = !fragments.Any() ? pageName : (String.Join(" / ", fragments.Select(fragment => Localizer.Maybe(fragment))) + " / " + pageName); + model.Title = GenerateTitle(pageName, fragments, options); // add schema //if (options.Schema != null) @@ -47,6 +48,32 @@ public class MetadataService : IMetadataService return model; } + + + /// + /// Generates the page title based on passed fragments + /// + protected virtual string GenerateTitle(string pageName, HashSet fragments, MetadataOptions options) + { + StringBuilder sb = new(); + + if (fragments.Count != 0) + { + sb.Append(string.Join(options.TitleFragmentsSeparator, fragments.Select(fragment => Localizer.Maybe(fragment)))); + + if (!options.HidePageName) + { + sb.Append(options.TitlePageNameToFragmentSeparator); + sb.Append(pageName); + } + } + else + { + sb.Append(pageName); + } + + return sb.ToString(); + } }