Skip to content

Commit

Permalink
Make UserMenu and LoginMenu extensible to using drivers (#14214)
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeAlhayek authored Aug 31, 2023
1 parent 9f445c4 commit f91748f
Show file tree
Hide file tree
Showing 32 changed files with 340 additions and 190 deletions.
19 changes: 6 additions & 13 deletions src/OrchardCore.Modules/OrchardCore.Contents/Shapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using OrchardCore.DisplayManagement;
using OrchardCore.DisplayManagement.Descriptors;
using OrchardCore.DisplayManagement.ModelBinding;
using OrchardCore.DisplayManagement.Utilities;

namespace OrchardCore.Contents
{
Expand All @@ -25,16 +26,18 @@ public void Discover(ShapeTableBuilder builder)
// BasicShapeTemplateHarvester.Adjust will then adjust the template name

// Content__[DisplayType] e.g. Content-Summary
displaying.Shape.Metadata.Alternates.Add("Content_" + EncodeAlternateElement(displaying.Shape.Metadata.DisplayType));
displaying.Shape.Metadata.Alternates.Add("Content_" + displaying.Shape.Metadata.DisplayType.EncodeAlternateElement());

var encodedContentType = contentItem.ContentType.EncodeAlternateElement();

// Content__[ContentType] e.g. Content-BlogPost,
displaying.Shape.Metadata.Alternates.Add("Content__" + EncodeAlternateElement(contentItem.ContentType));
displaying.Shape.Metadata.Alternates.Add("Content__" + encodedContentType);

// Content__[Id] e.g. Content-42,
displaying.Shape.Metadata.Alternates.Add("Content__" + contentItem.Id);

// Content_[DisplayType]__[ContentType] e.g. Content-BlogPost.Summary
displaying.Shape.Metadata.Alternates.Add("Content_" + displaying.Shape.Metadata.DisplayType + "__" + EncodeAlternateElement(contentItem.ContentType));
displaying.Shape.Metadata.Alternates.Add("Content_" + displaying.Shape.Metadata.DisplayType + "__" + encodedContentType);

// Content_[DisplayType]__[Id] e.g. Content-42.Summary
displaying.Shape.Metadata.Alternates.Add("Content_" + displaying.Shape.Metadata.DisplayType + "__" + contentItem.Id);
Expand Down Expand Up @@ -91,15 +94,5 @@ public void Discover(ShapeTableBuilder builder)
await context.Shape.AddAsync(displayShape, "");
});
}

/// <summary>
/// Encodes dashed and dots so that they don't conflict in filenames
/// </summary>
/// <param name="alternateElement"></param>
/// <returns></returns>
private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}
}
}
15 changes: 3 additions & 12 deletions src/OrchardCore.Modules/OrchardCore.Menu/MenuShapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using OrchardCore.DisplayManagement;
using OrchardCore.DisplayManagement.Descriptors;
using OrchardCore.DisplayManagement.Shapes;
using OrchardCore.DisplayManagement.Utilities;
using OrchardCore.Menu.Models;
using OrchardCore.Mvc.Utilities;

Expand Down Expand Up @@ -118,7 +119,7 @@ public void Discover(ShapeTableBuilder builder)
}
}

var encodedContentType = EncodeAlternateElement(menuContentItem.ContentItem.ContentType);
var encodedContentType = menuContentItem.ContentItem.ContentType.EncodeAlternateElement();

// MenuItem__level__[level] e.g. MenuItem-level-2
menuItem.Metadata.Alternates.Add("MenuItem__level__" + level);
Expand Down Expand Up @@ -151,7 +152,7 @@ public void Discover(ShapeTableBuilder builder)

var menuContentItem = menuItem.GetProperty<ContentItem>("ContentItem");

var encodedContentType = EncodeAlternateElement(menuContentItem.ContentItem.ContentType);
var encodedContentType = menuContentItem.ContentItem.ContentType.EncodeAlternateElement();

menuItem.Metadata.Alternates.Add("MenuItemLink__level__" + level);

Expand All @@ -175,16 +176,6 @@ public void Discover(ShapeTableBuilder builder)
});
}

/// <summary>
/// Encodes dashed and dots so that they don't conflict in filenames
/// </summary>
/// <param name="alternateElement"></param>
/// <returns></returns>
private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}

/// <summary>
/// Converts "foo-ba r" to "FooBaR"
/// </summary>
Expand Down
25 changes: 10 additions & 15 deletions src/OrchardCore.Modules/OrchardCore.Navigation/NavigationShapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using OrchardCore.DisplayManagement;
using OrchardCore.DisplayManagement.Descriptors;
using OrchardCore.DisplayManagement.Shapes;
using OrchardCore.DisplayManagement.Utilities;
using OrchardCore.Mvc.Utilities;

namespace OrchardCore.Navigation
Expand All @@ -20,7 +21,7 @@ public void Discover(ShapeTableBuilder builder)

menu.Classes.Add("menu-" + menuName.HtmlClassify());
menu.Classes.Add("menu");
menu.Metadata.Alternates.Add("Navigation__" + EncodeAlternateElement(menuName));
menu.Metadata.Alternates.Add("Navigation__" + menuName.EncodeAlternateElement());
})
.OnProcessing(async context =>
{
Expand Down Expand Up @@ -79,9 +80,11 @@ public void Discover(ShapeTableBuilder builder)
var menuName = menu.GetProperty<string>("MenuName");
var level = menuItem.GetProperty<int>("Level");

var encodedMenuName = menuName.EncodeAlternateElement();

menuItem.Metadata.Alternates.Add("NavigationItem__level__" + level);
menuItem.Metadata.Alternates.Add("NavigationItem__" + EncodeAlternateElement(menuName));
menuItem.Metadata.Alternates.Add("NavigationItem__" + EncodeAlternateElement(menuName) + "__level__" + level);
menuItem.Metadata.Alternates.Add("NavigationItem__" + encodedMenuName);
menuItem.Metadata.Alternates.Add("NavigationItem__" + encodedMenuName + "__level__" + level);
});

builder.Describe("NavigationItemLink")
Expand All @@ -93,21 +96,13 @@ public void Discover(ShapeTableBuilder builder)

menuItem.Metadata.Alternates.Add("NavigationItemLink__level__" + level);

var encodedMenuName = menuName.EncodeAlternateElement();

// NavigationItemLink__[MenuName] e.g. NavigationItemLink-Main-Menu
// NavigationItemLink__[MenuName]__level__[level] e.g. NavigationItemLink-Main-Menu-level-2
menuItem.Metadata.Alternates.Add("NavigationItemLink__" + EncodeAlternateElement(menuName));
menuItem.Metadata.Alternates.Add("NavigationItemLink__" + EncodeAlternateElement(menuName) + "__level__" + level);
menuItem.Metadata.Alternates.Add("NavigationItemLink__" + encodedMenuName);
menuItem.Metadata.Alternates.Add("NavigationItemLink__" + encodedMenuName + "__level__" + level);
});
}

/// <summary>
/// Encodes dashed and dots so that they don't conflict in filenames
/// </summary>
/// <param name="alternateElement"></param>
/// <returns></returns>
private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using OrchardCore.DisplayManagement.Html;
using OrchardCore.DisplayManagement.Implementation;
using OrchardCore.DisplayManagement.Shapes;
using OrchardCore.DisplayManagement.Utilities;

namespace OrchardCore.Navigation
{
Expand All @@ -32,7 +33,7 @@ public void Discover(ShapeTableBuilder builder)
{
if (displaying.Shape.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager__" + pagerId.EncodeAlternateElement());
};
});

Expand All @@ -48,7 +49,7 @@ public void Discover(ShapeTableBuilder builder)
{
if (displaying.Shape.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager__" + pagerId.EncodeAlternateElement());
};
});

Expand All @@ -59,7 +60,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Gap__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Gap__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -70,7 +71,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_First__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_First__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -81,7 +82,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Previous__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Previous__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -92,7 +93,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Next__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Next__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -103,7 +104,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Last__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Last__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -114,7 +115,7 @@ public void Discover(ShapeTableBuilder builder)

if (shape.TryGetProperty("Pager", out IShape pager) && pager.TryGetProperty("PagerId", out string pagerId) && !String.IsNullOrEmpty(pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_CurrentPage__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_CurrentPage__" + pagerId.EncodeAlternateElement());
}
});

Expand All @@ -123,15 +124,10 @@ public void Discover(ShapeTableBuilder builder)
{
if (displaying.Shape.TryGetProperty("PagerId", out string pagerId))
{
displaying.Shape.Metadata.Alternates.Add("Pager_Links__" + EncodeAlternateElement(pagerId));
displaying.Shape.Metadata.Alternates.Add("Pager_Links__" + pagerId.EncodeAlternateElement());
}
});
}

private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}
}

public class PagerShapes : IShapeAttributeProvider
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@using Microsoft.AspNetCore.Mvc.Localization

@model ShapeViewModel<UserNotificationCollectionViewModel>
<li class="nav-item dropdown">
<li class="nav-item dropdown text-end">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
@if (Model.Value.TotalUnread > 0)
{
Expand Down
17 changes: 4 additions & 13 deletions src/OrchardCore.Modules/OrchardCore.Taxonomies/TermShapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using OrchardCore.ContentManagement;
using OrchardCore.DisplayManagement;
using OrchardCore.DisplayManagement.Descriptors;
using OrchardCore.DisplayManagement.Utilities;
using OrchardCore.Mvc.Utilities;
using OrchardCore.Taxonomies.Models;
using OrchardCore.Taxonomies.ViewModels;
Expand Down Expand Up @@ -122,7 +123,7 @@ public void Discover(ShapeTableBuilder builder)

termShape.Classes.Add(("term-" + taxonomyPart.TermContentType).HtmlClassify());

var encodedContentType = EncodeAlternateElement(taxonomyPart.TermContentType);
var encodedContentType = taxonomyPart.TermContentType.EncodeAlternateElement();
// Term__[ContentType] e.g. Term-Category, Term-Tag.
termShape.Metadata.Alternates.Add("Term__" + encodedContentType);

Expand Down Expand Up @@ -190,7 +191,7 @@ public void Discover(ShapeTableBuilder builder)
}
}

var encodedContentType = EncodeAlternateElement(taxonomyPart.TermContentType);
var encodedContentType = taxonomyPart.TermContentType.EncodeAlternateElement();

// TermItem__level__[level] e.g. TermItem-level-2.
termItem.Metadata.Alternates.Add("TermItem__level__" + level);
Expand Down Expand Up @@ -223,7 +224,7 @@ public void Discover(ShapeTableBuilder builder)

var termContentItem = termItem.GetProperty<ContentItem>("TermContentItem");

var encodedContentType = EncodeAlternateElement(termContentItem.ContentItem.ContentType);
var encodedContentType = termContentItem.ContentItem.ContentType.EncodeAlternateElement();

termItem.Metadata.Alternates.Add("TermContentItem__level__" + level);

Expand Down Expand Up @@ -276,16 +277,6 @@ private int FindTerm(JArray termsArray, string termContentItemId, int level, out
return level;
}

/// <summary>
/// Encodes dashed and dots so that they don't conflict in filenames.
/// </summary>
/// <param name="alternateElement"></param>
/// <returns></returns>
private static string EncodeAlternateElement(string alternateElement)
{
return alternateElement.Replace("-", "__").Replace('.', '_');
}

/// <summary>
/// Converts "foo-ba r" to "FooBaR".
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using OrchardCore.DisplayManagement.Handlers;
using OrchardCore.DisplayManagement.Views;
using OrchardCore.Entities;
using OrchardCore.Settings;
using OrchardCore.Users.Models;

namespace OrchardCore.Users.Drivers;

public class ChangeEmailUserMenuDisplayDriver : DisplayDriver<UserMenu>
{
private readonly ISiteService _siteService;

public ChangeEmailUserMenuDisplayDriver(ISiteService siteService)
{
_siteService = siteService;
}

public override IDisplayResult Display(UserMenu model)
{
return View("UserMenuItems__ChangeEmail", model)
.RenderWhen(async () => (await _siteService.GetSiteSettingsAsync()).As<ChangeEmailSettings>().AllowChangeEmail)
.Location("Detail", "Content:20")
.Location("DetailAdmin", "Content:20");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using OrchardCore.DisplayManagement.Handlers;
using OrchardCore.DisplayManagement.Views;
using OrchardCore.Users.Models;

namespace OrchardCore.Users.Drivers;

public class TwoFactorUserMenuDisplayDriver : DisplayDriver<UserMenu>
{
public override IDisplayResult Display(UserMenu model)
{
return View("UserMenuItems__TwoFactor", model)
.Location("Detail", "Content:15")
.Location("DetailAdmin", "Content:15");
}
}
Loading

0 comments on commit f91748f

Please sign in to comment.