diff --git a/Oqtane.Client/Themes/Controls/Login.razor b/Oqtane.Client/Themes/Controls/Login.razor index e23467e9..55d975aa 100644 --- a/Oqtane.Client/Themes/Controls/Login.razor +++ b/Oqtane.Client/Themes/Controls/Login.razor @@ -1,9 +1,5 @@ @namespace Oqtane.Themes.Controls -@inherits ThemeControlBase -@inject NavigationManager NavigationManager -@inject IUserService UserService -@inject IJSRuntime jsRuntime -@inject IServiceProvider ServiceProvider +@inherits LoginBase @@ -16,38 +12,3 @@ - - -@code { - private void LoginUser() - { - var returnurl = PageState.Alias.Path; - if (PageState.Page.Path != "/") - { - returnurl += "/" + PageState.Page.Path; - } - - NavigationManager.NavigateTo(NavigateUrl("login", "returnurl=" + returnurl)); - } - - private async Task LogoutUser() - { - await UserService.LogoutUserAsync(PageState.User); - - if (PageState.Runtime == Runtime.Server) - { - // server-side Blazor - var interop = new Interop(jsRuntime); - string antiforgerytoken = await interop.GetElementByName("__RequestVerificationToken"); - var fields = new { __RequestVerificationToken = antiforgerytoken, returnurl = (PageState.Alias.Path + "/" + PageState.Page.Path) }; - await interop.SubmitForm("/pages/logout/", fields); - } - else - { - // client-side Blazor - var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider)); - authstateprovider.NotifyAuthenticationChanged(); - NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "reload")); - } - } -} diff --git a/Oqtane.Client/Themes/Controls/LoginBase.cs b/Oqtane.Client/Themes/Controls/LoginBase.cs new file mode 100644 index 00000000..a4282c08 --- /dev/null +++ b/Oqtane.Client/Themes/Controls/LoginBase.cs @@ -0,0 +1,49 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; +using Oqtane.Providers; +using Oqtane.Services; +using Oqtane.UI; + +namespace Oqtane.Themes.Controls +{ + public class LoginBase : ThemeControlBase + { + [Inject] public NavigationManager NavigationManager {get;set;} + [Inject]public IUserService UserService {get;set;} + [Inject]public IJSRuntime jsRuntime {get;set;} + [Inject]public IServiceProvider ServiceProvider {get;set;} + + protected void LoginUser() + { + var returnurl = PageState.Alias.Path; + if (PageState.Page.Path != "/") + { + returnurl += "/" + PageState.Page.Path; + } + NavigationManager.NavigateTo(NavigateUrl("login", "returnurl=" + returnurl)); + } + + protected async Task LogoutUser() + { + await UserService.LogoutUserAsync(PageState.User); + + if (PageState.Runtime == Runtime.Server) + { + // server-side Blazor + var interop = new Interop(jsRuntime); + string antiforgerytoken = await interop.GetElementByName("__RequestVerificationToken"); + var fields = new { __RequestVerificationToken = antiforgerytoken, returnurl = (PageState.Alias.Path + "/" + PageState.Page.Path) }; + await interop.SubmitForm("/pages/logout/", fields); + } + else + { + // client-side Blazor + var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider)); + authstateprovider.NotifyAuthenticationChanged(); + NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "reload")); + } + } + } +} diff --git a/Oqtane.Client/Themes/Controls/Menu.razor b/Oqtane.Client/Themes/Controls/Menu.razor index 442729d6..0f2610cc 100644 --- a/Oqtane.Client/Themes/Controls/Menu.razor +++ b/Oqtane.Client/Themes/Controls/Menu.razor @@ -1,133 +1,20 @@ @namespace Oqtane.Themes.Controls -@inherits ThemeControlBase -@if (menu != string.Empty) +@switch (Orientation) { -
- @((MarkupString)menu) -
+ case "Horizontal": + + break; + default: // Vertical + { + + break; + } } -@code { - private string menu = string.Empty; - +@code{ + [Parameter] public string Orientation { get; set; } - protected override void OnParametersSet() - { - switch (Orientation) - { - case "Horizontal": - CreateHorizontalMenu(); - break; - default: // Vertical - CreateVerticalMenu(); - break; - } - } - - private void CreateVerticalMenu() - { - var level = -1; - var securitylevel = int.MaxValue; - - menu = ""; - } - - private void CreateHorizontalMenu() - { - var url = String.Empty; - var target = String.Empty; - - menu = ""; - menu += "
"; - menu += "
    "; - - foreach (Page p in PageState.Pages.Where(item => item.IsNavigation && !item.IsDeleted)) - { - if (UserSecurity.IsAuthorized(PageState.User,PermissionNames.View, p.Permissions) && p.ParentId == PageState.Page.ParentId && p.Level == PageState.Page.Level) - { - if (string.IsNullOrEmpty(p.Url)) - { - url = NavigateUrl(p.Path); - target = String.Empty; - } - else - { - url = p.Url; - if (p.Url.StartsWith("http")) - { - target = " target=\"_new\""; - } - } - - if (p.PageId == PageState.Page.PageId) - { - menu += "
  • " + - "" + - ((p.Icon != string.Empty) ? " " : string.Empty) + - p.Name + " (current)
  • "; - } - else - { - menu += "
  • " + - "" + - ((p.Icon != string.Empty) ? " " : string.Empty) + - p.Name + "
  • "; - } - } - } - - menu += "
"; - menu += "
"; - } } diff --git a/Oqtane.Client/Themes/Controls/MenuBase.cs b/Oqtane.Client/Themes/Controls/MenuBase.cs new file mode 100644 index 00000000..03eecdef --- /dev/null +++ b/Oqtane.Client/Themes/Controls/MenuBase.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; +using System.Linq; +using Oqtane.Models; +using Oqtane.Security; +using Oqtane.Shared; + +namespace Oqtane.Themes.Controls +{ + public class MenuBase : ThemeControlBase + { + private List _menuPages; + + protected IEnumerable MenuPages => _menuPages ?? (_menuPages = GetMenuPages().ToList()); + + protected string GetTarget(Page page) + { + return page.Url.StartsWith("http") ? "_new" : string.Empty; + } + + protected string GetUrl(Page page) + { + return string.IsNullOrEmpty(page.Url) ? NavigateUrl(page.Path) : page.Url; + } + + private IEnumerable GetMenuPages() + { + var securityLevel = int.MaxValue; + foreach (Page p in PageState.Pages.Where(item => item.IsNavigation && !item.IsDeleted)) + { + if (p.Level <= securityLevel && UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.Permissions)) + { + securityLevel = int.MaxValue; + yield return p; + } + else + { + if (securityLevel == int.MaxValue) + { + securityLevel = p.Level; + } + } + } + } + } +} diff --git a/Oqtane.Client/Themes/Controls/MenuHorizontal.Razor b/Oqtane.Client/Themes/Controls/MenuHorizontal.Razor new file mode 100644 index 00000000..708a3059 --- /dev/null +++ b/Oqtane.Client/Themes/Controls/MenuHorizontal.Razor @@ -0,0 +1,42 @@ +@namespace Oqtane.Themes.Controls +@inherits MenuBase +@if (MenuPages.Any()) +{ +
+ + + +
+} diff --git a/Oqtane.Client/Themes/Controls/MenuVertical.razor b/Oqtane.Client/Themes/Controls/MenuVertical.razor new file mode 100644 index 00000000..8991b277 --- /dev/null +++ b/Oqtane.Client/Themes/Controls/MenuVertical.razor @@ -0,0 +1,27 @@ +@namespace Oqtane.Themes.Controls +@inherits MenuBase +@if (MenuPages.Any()) +{ + +}