From 82b16d28ffe052068da5aed0735f29ab1487d6ab Mon Sep 17 00:00:00 2001 From: Jim Spillane Date: Tue, 10 Nov 2020 21:02:51 -0500 Subject: [PATCH 1/9] Upgrade External Module Template to NET5.0 --- .../External/Client/[Owner].[Module].Client.csproj | 12 ++++++------ .../External/Server/[Owner].[Module].Server.csproj | 14 +++++++------- .../External/Shared/[Owner].[Module].Shared.csproj | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Client/[Owner].[Module].Client.csproj b/Oqtane.Server/wwwroot/Modules/Templates/External/Client/[Owner].[Module].Client.csproj index 341d27b6..61e2f739 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/External/Client/[Owner].[Module].Client.csproj +++ b/Oqtane.Server/wwwroot/Modules/Templates/External/Client/[Owner].[Module].Client.csproj @@ -1,4 +1,4 @@ - + net5.0 @@ -13,11 +13,11 @@ - - - - - + + + + + diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Server/[Owner].[Module].Server.csproj b/Oqtane.Server/wwwroot/Modules/Templates/External/Server/[Owner].[Module].Server.csproj index 64765a75..2a2a8a2f 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/External/Server/[Owner].[Module].Server.csproj +++ b/Oqtane.Server/wwwroot/Modules/Templates/External/Server/[Owner].[Module].Server.csproj @@ -1,4 +1,4 @@ - + net5.0 @@ -20,12 +20,12 @@ - - - - - - + + + + + + diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Shared/[Owner].[Module].Shared.csproj b/Oqtane.Server/wwwroot/Modules/Templates/External/Shared/[Owner].[Module].Shared.csproj index aa9995d0..1e3b4963 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/External/Shared/[Owner].[Module].Shared.csproj +++ b/Oqtane.Server/wwwroot/Modules/Templates/External/Shared/[Owner].[Module].Shared.csproj @@ -1,4 +1,4 @@ - + net5.0 @@ -12,7 +12,7 @@ - + From bcc00a2dbb3ed56523b3c304295a8568c5843afe Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 11 Nov 2020 10:19:04 -0500 Subject: [PATCH 2/9] fixed regression issue which was preventing proper handling of situations where module assembly is missing --- Oqtane.Client/UI/SiteRouter.razor | 42 ++++++++++++++++--------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor index d2854f64..f95f8607 100644 --- a/Oqtane.Client/UI/SiteRouter.razor +++ b/Oqtane.Client/UI/SiteRouter.razor @@ -447,36 +447,35 @@ module.ControlTitle = ""; module.Actions = ""; module.UseAdminContainer = false; + module.PaneModuleIndex = -1; + module.PaneModuleCount = 0; - if ((module.PageId == page.PageId || module.ModuleId == moduleid) && module.ModuleDefinition != null) + if ((module.PageId == page.PageId || module.ModuleId == moduleid)) { - var typename = string.Empty; + var typename = Constants.ErrorModule; if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(GetRuntime().ToString()))) { typename = module.ModuleDefinition.ControlTypeTemplate; - } - else - { - typename = Constants.ErrorModule; - } - // handle default action - if (action == Constants.DefaultAction && !string.IsNullOrEmpty(module.ModuleDefinition.DefaultAction)) - { - action = module.ModuleDefinition.DefaultAction; - } - - // check if the module defines custom action routes - if (module.ModuleDefinition.ControlTypeRoutes != "") - { - foreach (string route in module.ModuleDefinition.ControlTypeRoutes.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + // handle default action + if (action == Constants.DefaultAction && !string.IsNullOrEmpty(module.ModuleDefinition.DefaultAction)) { - if (route.StartsWith(action + "=")) + action = module.ModuleDefinition.DefaultAction; + } + + // check if the module defines custom action routes + if (module.ModuleDefinition.ControlTypeRoutes != "") + { + foreach (string route in module.ModuleDefinition.ControlTypeRoutes.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { - typename = route.Replace(action + "=", ""); + if (route.StartsWith(action + "=")) + { + typename = route.Replace(action + "=", ""); + } } } } + module.ModuleType = typename.Replace(Constants.ActionToken, action); // get additional metadata from IModuleControl interface @@ -536,7 +535,10 @@ foreach (Module module in modules.Where(item => item.PageId == page.PageId)) { - module.PaneModuleCount = paneindex[module.Pane.ToLower()] + 1; + if (paneindex.ContainsKey(module.Pane.ToLower())) + { + module.PaneModuleCount = paneindex[module.Pane.ToLower()] + 1; + } } return (page, modules); From 32e80520791fca8e789e031701cc34290ac56fc1 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 11 Nov 2020 10:24:10 -0500 Subject: [PATCH 3/9] removed unnecessary file --- .../dotnetconf2020.Weather/weather.json | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 Oqtane.Server/wwwroot/Modules/dotnetconf2020.Weather/weather.json diff --git a/Oqtane.Server/wwwroot/Modules/dotnetconf2020.Weather/weather.json b/Oqtane.Server/wwwroot/Modules/dotnetconf2020.Weather/weather.json deleted file mode 100644 index b73afe4f..00000000 --- a/Oqtane.Server/wwwroot/Modules/dotnetconf2020.Weather/weather.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "date": "2018-05-06", - "temperatureC": 1, - "summary": "Freezing" - }, - { - "date": "2018-05-07", - "temperatureC": 14, - "summary": "Bracing" - }, - { - "date": "2018-05-08", - "temperatureC": -13, - "summary": "Freezing" - }, - { - "date": "2018-05-09", - "temperatureC": -16, - "summary": "Balmy" - }, - { - "date": "2018-05-10", - "temperatureC": -2, - "summary": "Chilly" - } -] \ No newline at end of file From 9250a03aea8a07c95ed090e5d1124fe4cb638af2 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 11 Nov 2020 11:32:56 -0500 Subject: [PATCH 4/9] Update README.md --- README.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ee2caa2d..9d48999a 100644 --- a/README.md +++ b/README.md @@ -12,21 +12,21 @@ Please note that this project is owned by the .NET Foundation and is governed by # Getting Started -**Using the latest repository source code ( ie. version 2.0.0 ):** +**Using Version 2+:** - Install **[.NET 5 SDK (v5.0.100)](https://dotnet.microsoft.com/download/dotnet/5.0)**. -- Install the latest Preview edition (v16.8, Preview 4 or higher) of [Visual Studio 2019](https://visualstudio.microsoft.com/vs/preview/) (Community, Professional, and Enterprise Editions are all supported) with the **ASP.NET and web development** workload enabled. Oqtane works with all editions of Visual Studio from Community to Enterprise. If you do not have a SQL Server installation available already and you wish to use LocalDB for development, you must also install the **.NET desktop development workload**. +- Install the latest edition (v16.8 or higher) of [Visual Studio 2019](https://visualstudio.microsoft.com/vs/) (Community, Professional, or Enterprise Editions) with the **ASP.NET and web development** workload enabled. Oqtane works with ALL editions of Visual Studio from Community to Enterprise. If you do not have a SQL Server installation available already and you wish to use LocalDB for development, you must also install the **.NET desktop development workload**. -- Download or Clone the Oqtane source code to your local system. Open the **Oqtane.sln** solution file and Build the solution. +- Download a release or Clone the Oqtane source code to your local system. Open the **Oqtane.sln** solution file and Build the solution. -**Using the latest release code ( ie. release versions 1.0.0-1.0.4 ):** +**Using Version 1:** - Install **[.NET Core 3.1 SDK (v3.1.300)](https://dotnet.microsoft.com/download/dotnet-core/thank-you/sdk-3.1.300-windows-x64-installer)**. -- Install [Visual Studio 2019](https://visualstudio.microsoft.com/vs) (Community, Professional, and Enterprise Editions are all supported) with the **ASP.NET and web development** workload enabled. Oqtane works with all editions of Visual Studio from Community to Enterprise. If you do not have a SQL Server installation available already and you wish to use LocalDB for development, you must also install the **.NET desktop development workload**. +- Install [Visual Studio 2019](https://visualstudio.microsoft.com/vs) (Community, Professional, or Enterprise Editions) with the **ASP.NET and web development** workload enabled. Oqtane works with ALL editions of Visual Studio from Community to Enterprise. If you do not have a SQL Server installation available already and you wish to use LocalDB for development, you must also install the **.NET desktop development workload**. -- Download or Clone the Oqtane source code to your local system. Open the **Oqtane.sln** solution file and Build the solution. +- Download a release or Clone the Oqtane source code to your local system. Open the **Oqtane.sln** solution file and Build the solution. **Installing an official release:** @@ -49,9 +49,12 @@ There is a separate [Documentation repository](https://github.com/oqtane/oqtane. # Roadmap This project is a work in progress and the schedule for implementing enhancements is dependent upon the availability of community members who are willing/able to assist. -V.2.0.0 ( estimated release date Nov 11, 2020 ) +V.2.0.0 ( released Nov 11, 2020 ) - [x] Migration to .NET 5 - [x] Static Localization ( ie. labels, help text, etc.. ) +- [x] Improved JavaScript reference support +- [x] Performance optimizations +- [x] Developer productivity enhancements V.1.x - Initial version released in conjunction with .NET Core 3.2 ( May 2020 ) - [x] Multi-Tenant ( Shared Database & Isolated Database ) From 080c9ff38b8763cc4ba1afa2069fb131f6262ce0 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 11 Nov 2020 11:33:38 -0500 Subject: [PATCH 5/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d48999a..a1c3d171 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Please note that this project is owned by the .NET Foundation and is governed by - Install [Visual Studio 2019](https://visualstudio.microsoft.com/vs) (Community, Professional, or Enterprise Editions) with the **ASP.NET and web development** workload enabled. Oqtane works with ALL editions of Visual Studio from Community to Enterprise. If you do not have a SQL Server installation available already and you wish to use LocalDB for development, you must also install the **.NET desktop development workload**. -- Download a release or Clone the Oqtane source code to your local system. Open the **Oqtane.sln** solution file and Build the solution. +- Download a release or Clone the Oqtane source code from a v1.x Tag to your local system. Open the **Oqtane.sln** solution file and Build the solution. **Installing an official release:** From 232cf77e84ba11996111c058a86ce7e3bde167bb Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 11 Nov 2020 11:35:21 -0500 Subject: [PATCH 6/9] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a1c3d171..7b4d0e43 100644 --- a/README.md +++ b/README.md @@ -49,14 +49,14 @@ There is a separate [Documentation repository](https://github.com/oqtane/oqtane. # Roadmap This project is a work in progress and the schedule for implementing enhancements is dependent upon the availability of community members who are willing/able to assist. -V.2.0.0 ( released Nov 11, 2020 ) +V.2.0.0 ( released in conjuntion with .NET 5 on Nov 11, 2020 ) - [x] Migration to .NET 5 - [x] Static Localization ( ie. labels, help text, etc.. ) - [x] Improved JavaScript reference support - [x] Performance optimizations - [x] Developer productivity enhancements -V.1.x - Initial version released in conjunction with .NET Core 3.2 ( May 2020 ) +V.1.0.0 ( released in conjunction with .NET Core 3.2 on May 20, 2020 ) - [x] Multi-Tenant ( Shared Database & Isolated Database ) - [x] Modular Architecture - [x] Headless API with Swagger Support From 2b371b2a9fe015106c6cdd697806ca3aa85da0f2 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 11 Nov 2020 11:35:57 -0500 Subject: [PATCH 7/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b4d0e43..04b9d40e 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ V.2.0.0 ( released in conjuntion with .NET 5 on Nov 11, 2020 ) - [x] Performance optimizations - [x] Developer productivity enhancements -V.1.0.0 ( released in conjunction with .NET Core 3.2 on May 20, 2020 ) +V.1.0.0 ( released in conjunction with .NET Core 3.2 on May 19, 2020 ) - [x] Multi-Tenant ( Shared Database & Isolated Database ) - [x] Modular Architecture - [x] Headless API with Swagger Support From d9f9e734809b2d102fd3807af329b97d511bec25 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 13 Nov 2020 10:00:31 -0500 Subject: [PATCH 8/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 04b9d40e..882e0c5b 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ Oqtane was created by [Shaun Walker](https://www.linkedin.com/in/shaunbrucewalke # Release Announcements -[Oqtane 1.0.1](https://www.oqtane.org/Resources/Blog/PostId/541/oqtane-builds-momentum-with-101-release) +[Oqtane 2.0](https://www.oqtane.org/Resources/Blog/PostId/544/announcing-oqtane-20-for-net-5) [Oqtane 1.0](https://www.oqtane.org/Resources/Blog/PostId/540/announcing-oqtane-10-a-modular-application-framework-for-blazor) From c44bc8709d09aefe80b6245fdf14b72e8b42c264 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Mon, 16 Nov 2020 08:30:02 -0500 Subject: [PATCH 9/9] Update README.md --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 882e0c5b..728641cf 100644 --- a/README.md +++ b/README.md @@ -77,10 +77,12 @@ V.1.0.0 ( released in conjunction with .NET Core 3.2 on May 19, 2020 ) - [x] Dynamic CSS/Lazy Loading Future Consideration -- [ ] Admin UI markup optimization ( ie. replace tables with divs in forms ) -- [ ] DB Migrations for framework installation/upgrade -- [ ] Support for SQLite +- [ ] DB Migrations for Database Installation/Upgrade +- [ ] Support for other Databases ( ie. SQLite ) - [ ] OAuth Support +- [ ] Site Configuration Migrations +- [ ] Pub/Sub Event Framework +- [ ] Admin UI Markup Optimization ( ie. replace tables with divs in forms ) # Background Oqtane was created by [Shaun Walker](https://www.linkedin.com/in/shaunbrucewalker/) and is inspired by the DotNetNuke web application framework. Initially created as a proof of concept, Oqtane is a native Blazor application written from the ground up using modern .NET Core technology. It is a modular application framework offering a fully dynamic page compositing model, multi-site support, designer friendly templates (skins), and extensibility via third party modules.