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();
+ }
}