From 05a405e036381e9f321c5ea341631e1526e17245 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 16 Oct 2019 14:28:49 -0400 Subject: [PATCH] Improvements to themes, layouts, and CSS styling --- .../Modules/Admin/ModuleDefinitions/Add.razor | 2 +- Oqtane.Client/Modules/Admin/Pages/Add.razor | 148 +- .../Modules/Admin/Pages/Delete.razor | 11 +- Oqtane.Client/Modules/Admin/Pages/Edit.razor | 199 +- Oqtane.Client/Modules/Admin/Sites/Add.razor | 46 +- .../Modules/Admin/Sites/Delete.razor | 152 +- Oqtane.Client/Modules/Admin/Sites/Edit.razor | 179 +- Oqtane.Client/Modules/Admin/Tenants/Add.razor | 14 + .../Modules/Admin/Tenants/Edit.razor | 1 + Oqtane.Client/Modules/Admin/Themes/Add.razor | 2 +- .../Modules/Admin/Upgrade/Index.razor | 2 +- Oqtane.Client/Modules/Admin/Users/Roles.razor | 2 +- Oqtane.Client/Modules/ModuleBase.cs | 2 +- .../Services/Interfaces/IThemeService.cs | 2 +- Oqtane.Client/Services/ThemeService.cs | 11 +- Oqtane.Client/Shared/Installer.razor | 7 +- Oqtane.Client/Shared/Interop.cs | 1 + Oqtane.Client/Shared/SiteRouter.razor | 39 +- Oqtane.Client/Themes/AdminContainer.razor | 29 +- .../Themes/BlazorTheme/Container.razor | 13 + .../Themes/BlazorTheme/Default.razor | 11 +- .../Themes/Controls/Breadcrumbs.razor | 31 + .../Themes/Controls/ControlPanel.razor | 246 +- Oqtane.Client/Themes/Controls/Menu.razor | 50 +- .../Themes/Controls/ModuleActions.razor | 36 +- .../Themes/Controls/ModuleTitle.razor | 2 +- Oqtane.Client/Themes/ILayoutControl.cs | 1 + .../Themes/OqtaneTheme/Container.razor | 2 +- .../Themes/OqtaneTheme/Default.razor | 26 +- .../Themes/OqtaneTheme/Horizontal.razor | 15 - .../Themes/OqtaneTheme/Layouts.razor | 26 - .../Themes/OqtaneTheme/MultiPane.razor | 18 + .../Themes/OqtaneTheme/SinglePane.razor | 10 + .../Themes/OqtaneTheme/Vertical.razor | 13 - Oqtane.Client/wwwroot/css/app.css | 91 +- Oqtane.Client/wwwroot/js/interop.js | 2 +- Oqtane.Client/wwwroot/js/site.js | 8 - Oqtane.Client/wwwroot/oqtane.png | Bin 30049 -> 14299 bytes Oqtane.Server/Controllers/ModuleController.cs | 11 +- Oqtane.Server/Repository/SiteRepository.cs | 39 +- Oqtane.Server/Scripts/00.00.00.sql | 2 +- .../Oqtane.Themes.BlazorTheme/Theme.css | 46 +- .../Oqtane.Themes.OqtaneTheme/Theme.css | 10954 +++++++++++++++- Oqtane.Server/wwwroot/css/app.css | 95 +- Oqtane.Server/wwwroot/js/interop.js | 2 +- Oqtane.Server/wwwroot/js/site.js | 9 - Oqtane.Server/wwwroot/oqtane.png | Bin 30049 -> 14299 bytes Oqtane.Shared/Models/Page.cs | 3 +- Oqtane.Shared/Models/PageTemplate.cs | 3 +- Oqtane.Shared/Models/Site.cs | 1 + Oqtane.Shared/Shared/Constants.cs | 5 +- 51 files changed, 11843 insertions(+), 777 deletions(-) create mode 100644 Oqtane.Client/Themes/BlazorTheme/Container.razor create mode 100644 Oqtane.Client/Themes/Controls/Breadcrumbs.razor delete mode 100644 Oqtane.Client/Themes/OqtaneTheme/Horizontal.razor delete mode 100644 Oqtane.Client/Themes/OqtaneTheme/Layouts.razor create mode 100644 Oqtane.Client/Themes/OqtaneTheme/MultiPane.razor create mode 100644 Oqtane.Client/Themes/OqtaneTheme/SinglePane.razor delete mode 100644 Oqtane.Client/Themes/OqtaneTheme/Vertical.razor diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index 4235eb10..cf7fd55e 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -19,7 +19,7 @@ @if (packages != null) { -
+

Available Modules

diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index da1c9069..a7caf311 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -88,7 +88,7 @@ - @foreach (KeyValuePair item in themes) { @@ -161,9 +161,9 @@ children = PageState.Pages.Where(item => item.ParentId == null).ToList(); themes = ThemeService.GetThemeTypes(PageState.Themes); - panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes); - themetype = PageState.Site.DefaultThemeType; + + panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes, themetype); layouttype = PageState.Site.DefaultLayoutType; List permissionstrings = new List(); @@ -198,78 +198,106 @@ } } + private void ThemeChanged(ChangeEventArgs e) + { + try + { + themetype = (string)e.Value; + if (themetype != "") + { + panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes, themetype); + } + else + { + panelayouts = new Dictionary(); + } + StateHasChanged(); + } + catch (Exception ex) + { + AddModuleMessage(ex.Message, MessageType.Error); + } + } + private async Task SavePage() { try { - Page page = new Page(); - page.SiteId = PageState.Page.SiteId; - page.Name = name; - if (path == "") + if (name != "" && !string.IsNullOrEmpty(themetype) && (panelayouts.Count == 0 || !string.IsNullOrEmpty(layouttype))) { - path = name; - } - if (path.Contains("/")) - { - path = path.Substring(path.LastIndexOf("/") + 1); - } - if (string.IsNullOrEmpty(parentid)) - { - page.ParentId = null; - page.Path = Utilities.GetFriendlyUrl(path); - } - else - { - page.ParentId = Int32.Parse(parentid); - Page parent = PageState.Pages.Where(item => item.PageId == page.ParentId).FirstOrDefault(); - if (parent.Path == "") + Page page = new Page(); + page.SiteId = PageState.Page.SiteId; + page.Name = name; + if (path == "") { - page.Path = Utilities.GetFriendlyUrl(parent.Name) + "/" + Utilities.GetFriendlyUrl(path); + path = name; + } + if (path.Contains("/")) + { + path = path.Substring(path.LastIndexOf("/") + 1); + } + if (string.IsNullOrEmpty(parentid)) + { + page.ParentId = null; + page.Path = Utilities.GetFriendlyUrl(path); } else { - page.Path = parent.Path + "/" + Utilities.GetFriendlyUrl(path); + page.ParentId = Int32.Parse(parentid); + Page parent = PageState.Pages.Where(item => item.PageId == page.ParentId).FirstOrDefault(); + if (parent.Path == "") + { + page.Path = Utilities.GetFriendlyUrl(parent.Name) + "/" + Utilities.GetFriendlyUrl(path); + } + else + { + page.Path = parent.Path + "/" + Utilities.GetFriendlyUrl(path); + } } - } - Page child; - switch (insert) - { - case "<<": - page.Order = 0; - break; - case "<": - child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); - page.Order = child.Order - 1; - break; - case ">": - child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); - page.Order = child.Order + 1; - break; - case ">>": - page.Order = int.MaxValue; - break; - } - page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); - page.EditMode = (mode == "edit" ? true : false); - page.ThemeType = themetype; - page.LayoutType = (layouttype == null ? "" : layouttype); - page.Icon = (icon == null ? "" : icon); - Type type; - if (!string.IsNullOrEmpty(layouttype)) - { - type = Type.GetType(layouttype); + Page child; + switch (insert) + { + case "<<": + page.Order = 0; + break; + case "<": + child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); + page.Order = child.Order - 1; + break; + case ">": + child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); + page.Order = child.Order + 1; + break; + case ">>": + page.Order = int.MaxValue; + break; + } + page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); + page.EditMode = (mode == "edit" ? true : false); + page.ThemeType = themetype; + page.LayoutType = (layouttype == null ? "" : layouttype); + page.Icon = (icon == null ? "" : icon); + page.Permissions = permissiongrid.GetPermissions(); + + if (page.ThemeType == PageState.Site.DefaultThemeType) + { + page.ThemeType = ""; + } + if (page.LayoutType == PageState.Site.DefaultLayoutType) + { + page.LayoutType = ""; + } + + await PageService.AddPageAsync(page); + await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId); + + NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site)); } else { - type = Type.GetType(themetype); + AddModuleMessage("You Must Provide Page Name And Theme", MessageType.Warning); } - System.Reflection.PropertyInfo property = type.GetProperty("Panes"); - page.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); - page.Permissions = permissiongrid.GetPermissions(); - await PageService.AddPageAsync(page); - await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId); - NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site)); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Pages/Delete.razor b/Oqtane.Client/Modules/Admin/Pages/Delete.razor index d5db21d3..85af59df 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Delete.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Delete.razor @@ -66,7 +66,14 @@ @foreach (KeyValuePair item in themes) { - + if (item.Key == themetype) + { + + } + else + { + + } } @@ -140,7 +147,6 @@ try { themes = ThemeService.GetThemeTypes(PageState.Themes); - panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes); PageId = Int32.Parse(PageState.QueryString["id"]); Page page = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); @@ -151,6 +157,7 @@ isnavigation = page.IsNavigation.ToString(); mode = (page.EditMode) ? "edit" : "view"; themetype = page.ThemeType; + panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes, themetype); layouttype = page.LayoutType; icon = page.Icon; permissions = page.Permissions; diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index 498417dc..fdf05187 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -99,11 +99,18 @@ - @foreach (KeyValuePair item in themes) { - + if (item.Key == themetype) + { + + } + else + { + + } } @@ -195,7 +202,6 @@ children = PageState.Pages.Where(item => item.ParentId == null).ToList(); themes = ThemeService.GetThemeTypes(PageState.Themes); - panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes); PageId = Int32.Parse(PageState.QueryString["id"]); Page page = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); @@ -219,6 +225,7 @@ isnavigation = page.IsNavigation.ToString(); mode = (page.EditMode) ? "edit" : "view"; themetype = page.ThemeType; + panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes, themetype); layouttype = page.LayoutType; icon = page.Icon; permissions = page.Permissions; @@ -266,102 +273,128 @@ } } + private void ThemeChanged(ChangeEventArgs e) + { + try + { + themetype = (string)e.Value; + if (themetype != "") + { + panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes, themetype); + } + else + { + panelayouts = new Dictionary(); + } + StateHasChanged(); + } + catch (Exception ex) + { + AddModuleMessage(ex.Message, MessageType.Error); + } + } + private async Task SavePage() { try { - Page page = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); - string currentpath = page.Path; + if (name != "" && !string.IsNullOrEmpty(themetype) && (panelayouts.Count == 0 || !string.IsNullOrEmpty(layouttype))) + { + Page page = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); + string currentpath = page.Path; - page.Name = name; - if (path == "") - { - path = name; - } - if (path.Contains("/")) - { - path = path.Substring(path.LastIndexOf("/") + 1); - } - if (string.IsNullOrEmpty(parentid)) - { - page.ParentId = null; - page.Path = Utilities.GetFriendlyUrl(path); - } - else - { - page.ParentId = Int32.Parse(parentid); - Page parent = PageState.Pages.Where(item => item.PageId == page.ParentId).FirstOrDefault(); - if (parent.Path == "") + page.Name = name; + if (path == "" && name.ToLower() != "home") { - page.Path = Utilities.GetFriendlyUrl(parent.Name) + "/" + Utilities.GetFriendlyUrl(path); + path = name; + } + if (path.Contains("/")) + { + path = path.Substring(path.LastIndexOf("/") + 1); + } + if (string.IsNullOrEmpty(parentid)) + { + page.ParentId = null; + page.Path = Utilities.GetFriendlyUrl(path); } else { - page.Path = parent.Path + "/" + Utilities.GetFriendlyUrl(path); + page.ParentId = Int32.Parse(parentid); + Page parent = PageState.Pages.Where(item => item.PageId == page.ParentId).FirstOrDefault(); + if (parent.Path == "") + { + page.Path = Utilities.GetFriendlyUrl(parent.Name) + "/" + Utilities.GetFriendlyUrl(path); + } + else + { + page.Path = parent.Path + "/" + Utilities.GetFriendlyUrl(path); + } } - } - if (insert != "=") - { - Page child; - switch (insert) + if (insert != "=") { - case "<<": - page.Order = 0; - break; - case "<": - child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); - page.Order = child.Order - 1; - break; - case ">": - child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); - page.Order = child.Order + 1; - break; - case ">>": - page.Order = int.MaxValue; - break; + Page child; + switch (insert) + { + case "<<": + page.Order = 0; + break; + case "<": + child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); + page.Order = child.Order - 1; + break; + case ">": + child = PageState.Pages.Where(item => item.PageId == childid).FirstOrDefault(); + page.Order = child.Order + 1; + break; + case ">>": + page.Order = int.MaxValue; + break; + } } - } - page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); - page.EditMode = (mode == "edit" ? true : false); - page.ThemeType = themetype; - page.LayoutType = (layouttype == null ? "" : layouttype); - page.Icon = (icon == null ? "" : icon); - Type type; - if (!string.IsNullOrEmpty(layouttype)) - { - type = Type.GetType(layouttype); + page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); + page.EditMode = (mode == "edit" ? true : false); + page.ThemeType = themetype; + page.LayoutType = (layouttype == null ? "" : layouttype); + page.Icon = (icon == null ? "" : icon); + page.Permissions = permissiongrid.GetPermissions(); + page.IsDeleted = (isdeleted == null ? true : Boolean.Parse(isdeleted)); + + if (page.ThemeType == PageState.Site.DefaultThemeType) + { + page.ThemeType = ""; + } + if (page.LayoutType == PageState.Site.DefaultLayoutType) + { + page.LayoutType = ""; + } + + await PageService.UpdatePageAsync(page); + await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId); + if (currentparentid == "") + { + await PageService.UpdatePageOrderAsync(page.SiteId, null); + } + else + { + await PageService.UpdatePageOrderAsync(page.SiteId, int.Parse(currentparentid)); + } + + // update child paths + if (parentid != currentparentid) + { + foreach (Page p in PageState.Pages.Where(item => item.Path.StartsWith(currentpath))) + { + p.Path = p.Path.Replace(currentpath, page.Path); + await PageService.UpdatePageAsync(p); + } + } + + NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site)); } else { - type = Type.GetType(themetype); + AddModuleMessage("You Must Provide Page Name And Theme", MessageType.Warning); } - System.Reflection.PropertyInfo property = type.GetProperty("Panes"); - page.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); - page.Permissions = permissiongrid.GetPermissions(); - page.IsDeleted = (isdeleted == null ? true : Boolean.Parse(isdeleted)); - - await PageService.UpdatePageAsync(page); - await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId); - if (currentparentid == "") - { - await PageService.UpdatePageOrderAsync(page.SiteId, null); - } - else - { - await PageService.UpdatePageOrderAsync(page.SiteId, int.Parse(currentparentid)); - } - - // update child paths - if (parentid != currentparentid) - { - foreach (Page p in PageState.Pages.Where(item => item.Path.StartsWith(currentpath))) - { - p.Path = p.Path.Replace(currentpath, page.Path); - await PageService.UpdatePageAsync(p); - } - } - - NavigationManager.NavigateTo(NavigateUrl(page.Path, Reload.Site)); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Sites/Add.razor b/Oqtane.Client/Modules/Admin/Sites/Add.razor index e6914987..56afd460 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Add.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor @@ -57,7 +57,7 @@ else - @foreach (KeyValuePair item in themes) { @@ -80,6 +80,20 @@ else + + + + + + + + @if (!isinitialized) { @@ -109,6 +123,7 @@ else Dictionary themes = new Dictionary(); Dictionary panelayouts = new Dictionary(); + Dictionary containers = new Dictionary(); List tenants; string tenantid = "-1"; @@ -117,6 +132,7 @@ else string logo = ""; string themetype = ""; string layouttype = ""; + string containertype = ""; bool isinitialized = true; string username = ""; string password = ""; @@ -126,7 +142,7 @@ else tenants = await TenantService.GetTenantsAsync(); urls = PageState.Alias.Name; themes = ThemeService.GetThemeTypes(PageState.Themes); - panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes); + containers = ThemeService.GetContainerTypes(PageState.Themes); username = PageState.User.Username; } @@ -151,9 +167,30 @@ else } } + private void ThemeChanged(ChangeEventArgs e) + { + try + { + themetype = (string)e.Value; + if (themetype != "") + { + panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes, themetype); + } + else + { + panelayouts = new Dictionary(); + } + StateHasChanged(); + } + catch (Exception ex) + { + AddModuleMessage(ex.Message, MessageType.Error); + } + } + private async Task SaveSite() { - if (tenantid != "-1" && name != "" && urls != "" && themetype != "") + if (tenantid != "-1" && name != "" && urls != "" && !string.IsNullOrEmpty(themetype) && (panelayouts.Count == 0 || !string.IsNullOrEmpty(layouttype)) && !string.IsNullOrEmpty(containertype)) { bool isvalid = true; @@ -187,6 +224,7 @@ else site.Logo = (logo == null ? "" : logo); site.DefaultThemeType = themetype; site.DefaultLayoutType = (layouttype == null ? "" : layouttype); + site.DefaultContainerType = containertype; site = await SiteService.AddSiteAsync(site, aliases[0]); foreach(Alias alias in aliases) @@ -223,7 +261,7 @@ else } else { - AddModuleMessage("You Must Provide A Tenant, Site Name, Alias, And Default Theme", MessageType.Warning); + AddModuleMessage("You Must Provide A Tenant, Site Name, Alias, And Default Theme/Container", MessageType.Warning); } } diff --git a/Oqtane.Client/Modules/Admin/Sites/Delete.razor b/Oqtane.Client/Modules/Admin/Sites/Delete.razor index 8338bb0e..ac695c65 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Delete.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Delete.razor @@ -10,71 +10,92 @@ } else { - - - - - - - -
- - - -
- - -