From d71de1c21ff24d222a4651e43428b486352e2525 Mon Sep 17 00:00:00 2001 From: oqtane Date: Sat, 4 May 2019 20:32:08 -0400 Subject: [PATCH] Initial commit --- Oqtane.Client/App.razor | 16 + Oqtane.Client/Modules/Admin/Admin/Index.razor | 34 ++ Oqtane.Client/Modules/Admin/Login/Index.razor | 49 ++ .../Admin/ModuleDefinitions/Index.razor | 41 ++ .../Modules/Admin/ModuleSettings/Index.razor | 115 ++++ Oqtane.Client/Modules/Admin/Pages/Add.razor | 187 ++++++ .../Modules/Admin/Pages/Delete.razor | 173 ++++++ Oqtane.Client/Modules/Admin/Pages/Edit.razor | 210 +++++++ Oqtane.Client/Modules/Admin/Pages/Index.razor | 40 ++ .../Modules/Admin/Register/Index.razor | 29 + Oqtane.Client/Modules/Admin/Sites/Add.razor | 46 ++ Oqtane.Client/Modules/Admin/Sites/Index.razor | 42 ++ Oqtane.Client/Modules/Admin/Skins/Index.razor | 41 ++ Oqtane.Client/Modules/Admin/Users/Index.razor | 41 ++ .../Modules/Controls/ActionLink.razor | 67 +++ Oqtane.Client/Modules/Counter/Index.razor | 15 + Oqtane.Client/Modules/Counter/Module.cs | 16 + Oqtane.Client/Modules/HtmlText/Edit.razor | 61 ++ Oqtane.Client/Modules/HtmlText/Index.razor | 26 + Oqtane.Client/Modules/HtmlText/Module.cs | 16 + .../HtmlText/Services/HtmlTextService.cs | 46 ++ .../HtmlText/Services/IHtmlTextService.cs | 17 + Oqtane.Client/Modules/IModule.cs | 14 + Oqtane.Client/Modules/IModuleControl.cs | 9 + Oqtane.Client/Modules/ModuleBase.cs | 65 +++ Oqtane.Client/Modules/SecurityAccessLevel.cs | 11 + Oqtane.Client/Modules/Weather/Index.razor | 42 ++ .../Modules/Weather/Models/WeatherForecast.cs | 12 + Oqtane.Client/Modules/Weather/Module.cs | 16 + .../Services/IWeatherForecastService.cs | 10 + .../Services/WeatherForecastService.cs | 26 + Oqtane.Client/Oqtane.Client.csproj | 38 ++ Oqtane.Client/Program.cs | 24 + Oqtane.Client/Properties/launchSettings.json | 27 + .../Services/IModuleDefinitionService.cs | 11 + Oqtane.Client/Services/IModuleService.cs | 15 + Oqtane.Client/Services/IPageModuleService.cs | 14 + Oqtane.Client/Services/IPageService.cs | 14 + Oqtane.Client/Services/ISiteService.cs | 19 + Oqtane.Client/Services/ISkinService.cs | 11 + Oqtane.Client/Services/ITenantService.cs | 10 + Oqtane.Client/Services/IUserService.cs | 21 + .../Services/ModuleDefinitionService.cs | 60 ++ Oqtane.Client/Services/ModuleService.cs | 51 ++ Oqtane.Client/Services/PageModuleService.cs | 41 ++ Oqtane.Client/Services/PageService.cs | 41 ++ Oqtane.Client/Services/ServiceBase.cs | 25 + Oqtane.Client/Services/SiteService.cs | 56 ++ Oqtane.Client/Services/SkinService.cs | 60 ++ Oqtane.Client/Services/TenantService.cs | 24 + Oqtane.Client/Services/UserService.cs | 122 ++++ Oqtane.Client/Shared/Constants.cs | 17 + Oqtane.Client/Shared/Container.razor | 45 ++ Oqtane.Client/Shared/Interop.cs | 58 ++ Oqtane.Client/Shared/ModuleInstance.razor | 36 ++ Oqtane.Client/Shared/PageState.cs | 21 + Oqtane.Client/Shared/Pane.razor | 127 ++++ Oqtane.Client/Shared/PaneLayout.razor | 28 + Oqtane.Client/Shared/SiteRouter.razor | 312 ++++++++++ Oqtane.Client/Shared/Skin.razor | 26 + Oqtane.Client/Shared/Utilities.cs | 28 + Oqtane.Client/Skins/AdminContainer.razor | 31 + Oqtane.Client/Skins/ContainerBase.cs | 17 + .../Skins/Controls/ControlPanel.razor | 146 +++++ Oqtane.Client/Skins/Controls/Login.razor | 41 ++ Oqtane.Client/Skins/Controls/Logo.razor | 5 + Oqtane.Client/Skins/Controls/Menu.razor | 58 ++ Oqtane.Client/Skins/Controls/Mode.razor | 44 ++ .../Skins/Controls/ModuleActions.razor | 92 +++ .../Skins/Controls/ModuleTitle.razor | 4 + Oqtane.Client/Skins/Controls/Profile.razor | 36 ++ Oqtane.Client/Skins/DefaultContainer.razor | 10 + Oqtane.Client/Skins/IContainerControl.cs | 7 + Oqtane.Client/Skins/ISkin.cs | 15 + Oqtane.Client/Skins/ISkinControl.cs | 8 + Oqtane.Client/Skins/Skin1/Container1.razor | 15 + Oqtane.Client/Skins/Skin1/Skin.cs | 13 + Oqtane.Client/Skins/Skin1/Skin1.razor | 33 ++ Oqtane.Client/Skins/Skin2/Container2.razor | 15 + Oqtane.Client/Skins/Skin2/Skin.cs | 13 + Oqtane.Client/Skins/Skin2/Skin2.razor | 31 + .../Skins/Skin3/HorizontalLayout.razor | 17 + Oqtane.Client/Skins/Skin3/Skin.cs | 13 + Oqtane.Client/Skins/Skin3/Skin3.razor | 26 + .../Skins/Skin3/VerticalLayout.razor | 15 + Oqtane.Client/Skins/SkinBase.cs | 13 + Oqtane.Client/Skins/SkinObjectBase.cs | 11 + Oqtane.Client/Startup.cs | 71 +++ Oqtane.Client/wwwroot/Sites/1/oqtane.png | Bin 0 -> 7963 bytes .../wwwroot/css/bootstrap/bootstrap.min.css | 7 + .../css/bootstrap/bootstrap.min.css.map | 1 + .../wwwroot/css/open-iconic/FONT-LICENSE | 86 +++ .../wwwroot/css/open-iconic/ICON-LICENSE | 21 + .../wwwroot/css/open-iconic/README.md | 114 ++++ .../font/css/open-iconic-bootstrap.min.css | 1 + .../open-iconic/font/fonts/open-iconic.eot | Bin 0 -> 28196 bytes .../open-iconic/font/fonts/open-iconic.otf | Bin 0 -> 20996 bytes .../open-iconic/font/fonts/open-iconic.svg | 543 ++++++++++++++++++ .../open-iconic/font/fonts/open-iconic.ttf | Bin 0 -> 28028 bytes .../open-iconic/font/fonts/open-iconic.woff | Bin 0 -> 14984 bytes Oqtane.Client/wwwroot/css/site.css | 248 ++++++++ Oqtane.Client/wwwroot/index.html | 37 ++ Oqtane.Client/wwwroot/js/interop.js | 33 ++ Oqtane.Client/wwwroot/js/popper.min.js | 5 + Oqtane.Client/wwwroot/js/site.js | 27 + Oqtane.Client/wwwroot/oqtane.png | Bin 0 -> 30049 bytes Oqtane.Server/Controllers/ModuleController.cs | 77 +++ .../Controllers/ModuleDefinitionController.cs | 25 + Oqtane.Server/Controllers/PageController.cs | 62 ++ .../Controllers/PageModuleController.cs | 55 ++ Oqtane.Server/Controllers/SiteController.cs | 55 ++ Oqtane.Server/Controllers/SkinController.cs | 25 + Oqtane.Server/Controllers/TenantController.cs | 24 + Oqtane.Server/Controllers/UserController.cs | 55 ++ Oqtane.Server/Data/db.txt | 1 + Oqtane.Server/Filters/UpgradeFilter.cs | 104 ++++ .../Controllers/HtmlTextController.cs | 55 ++ .../HtmlText/Repository/HtmlTextContext.cs | 18 + .../HtmlText/Repository/HtmlTextRepository.cs | 83 +++ .../Repository/IHtmlTextRepository.cs | 14 + Oqtane.Server/Oqtane.Server.csproj | 45 ++ Oqtane.Server/Oqtane.Server.csproj.user | 21 + Oqtane.Server/Pages/_Host.cshtml | 26 + Oqtane.Server/Program.cs | 40 ++ Oqtane.Server/Properties/launchSettings.json | 27 + Oqtane.Server/Repository/ContextBase.cs | 33 ++ Oqtane.Server/Repository/HostContext.cs | 12 + .../Repository/IModuleDefinitionRepository.cs | 10 + Oqtane.Server/Repository/IModuleRepository.cs | 15 + .../Repository/IPageModuleRepository.cs | 15 + Oqtane.Server/Repository/IPageRepository.cs | 15 + Oqtane.Server/Repository/ISiteRepository.cs | 14 + Oqtane.Server/Repository/ISkinRepository.cs | 10 + Oqtane.Server/Repository/ITenantRepository.cs | 9 + Oqtane.Server/Repository/IUserRepository.cs | 14 + .../Repository/ModuleDefinitionRepository.cs | 123 ++++ Oqtane.Server/Repository/ModuleRepository.cs | 97 ++++ .../Repository/PageModuleRepository.cs | 96 ++++ Oqtane.Server/Repository/PageRepository.cs | 94 +++ Oqtane.Server/Repository/SiteRepository.cs | 82 +++ Oqtane.Server/Repository/SkinRepository.cs | 123 ++++ Oqtane.Server/Repository/TenantContext.cs | 39 ++ Oqtane.Server/Repository/TenantRepository.cs | 56 ++ Oqtane.Server/Repository/UserRepository.cs | 82 +++ Oqtane.Server/Scripts/Initialize.sql | 338 +++++++++++ Oqtane.Server/Startup.cs | 287 +++++++++ Oqtane.Server/appsettings.json | 5 + Oqtane.Server/wwwroot/Sites/1/oqtane.png | Bin 0 -> 7963 bytes .../wwwroot/css/bootstrap/bootstrap.min.css | 7 + .../css/bootstrap/bootstrap.min.css.map | 1 + .../wwwroot/css/open-iconic/FONT-LICENSE | 86 +++ .../wwwroot/css/open-iconic/ICON-LICENSE | 21 + .../wwwroot/css/open-iconic/README.md | 114 ++++ .../font/css/open-iconic-bootstrap.min.css | 1 + .../open-iconic/font/fonts/open-iconic.eot | Bin 0 -> 28196 bytes .../open-iconic/font/fonts/open-iconic.otf | Bin 0 -> 20996 bytes .../open-iconic/font/fonts/open-iconic.svg | 543 ++++++++++++++++++ .../open-iconic/font/fonts/open-iconic.ttf | Bin 0 -> 28028 bytes .../open-iconic/font/fonts/open-iconic.woff | Bin 0 -> 14984 bytes Oqtane.Server/wwwroot/css/site.css | 248 ++++++++ Oqtane.Server/wwwroot/js/interop.js | 33 ++ Oqtane.Server/wwwroot/js/popper.min.js | 5 + Oqtane.Server/wwwroot/js/site.js | 27 + Oqtane.Server/wwwroot/oqtane.png | Bin 0 -> 30049 bytes Oqtane.Shared/Models/HtmlTextInfo.cs | 14 + Oqtane.Shared/Models/Module.cs | 32 ++ Oqtane.Shared/Models/ModuleDefinition.cs | 18 + Oqtane.Shared/Models/Page.cs | 21 + Oqtane.Shared/Models/PageModule.cs | 15 + Oqtane.Shared/Models/Site.cs | 9 + Oqtane.Shared/Models/Skin.cs | 18 + Oqtane.Shared/Models/Tenant.cs | 13 + Oqtane.Shared/Models/User.cs | 13 + Oqtane.Shared/Modules/IService.cs | 7 + Oqtane.Shared/Oqtane.Shared.csproj | 27 + Oqtane.sln | 44 ++ oqtane.png | Bin 0 -> 30049 bytes 177 files changed, 8536 insertions(+) create mode 100644 Oqtane.Client/App.razor create mode 100644 Oqtane.Client/Modules/Admin/Admin/Index.razor create mode 100644 Oqtane.Client/Modules/Admin/Login/Index.razor create mode 100644 Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor create mode 100644 Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor create mode 100644 Oqtane.Client/Modules/Admin/Pages/Add.razor create mode 100644 Oqtane.Client/Modules/Admin/Pages/Delete.razor create mode 100644 Oqtane.Client/Modules/Admin/Pages/Edit.razor create mode 100644 Oqtane.Client/Modules/Admin/Pages/Index.razor create mode 100644 Oqtane.Client/Modules/Admin/Register/Index.razor create mode 100644 Oqtane.Client/Modules/Admin/Sites/Add.razor create mode 100644 Oqtane.Client/Modules/Admin/Sites/Index.razor create mode 100644 Oqtane.Client/Modules/Admin/Skins/Index.razor create mode 100644 Oqtane.Client/Modules/Admin/Users/Index.razor create mode 100644 Oqtane.Client/Modules/Controls/ActionLink.razor create mode 100644 Oqtane.Client/Modules/Counter/Index.razor create mode 100644 Oqtane.Client/Modules/Counter/Module.cs create mode 100644 Oqtane.Client/Modules/HtmlText/Edit.razor create mode 100644 Oqtane.Client/Modules/HtmlText/Index.razor create mode 100644 Oqtane.Client/Modules/HtmlText/Module.cs create mode 100644 Oqtane.Client/Modules/HtmlText/Services/HtmlTextService.cs create mode 100644 Oqtane.Client/Modules/HtmlText/Services/IHtmlTextService.cs create mode 100644 Oqtane.Client/Modules/IModule.cs create mode 100644 Oqtane.Client/Modules/IModuleControl.cs create mode 100644 Oqtane.Client/Modules/ModuleBase.cs create mode 100644 Oqtane.Client/Modules/SecurityAccessLevel.cs create mode 100644 Oqtane.Client/Modules/Weather/Index.razor create mode 100644 Oqtane.Client/Modules/Weather/Models/WeatherForecast.cs create mode 100644 Oqtane.Client/Modules/Weather/Module.cs create mode 100644 Oqtane.Client/Modules/Weather/Services/IWeatherForecastService.cs create mode 100644 Oqtane.Client/Modules/Weather/Services/WeatherForecastService.cs create mode 100644 Oqtane.Client/Oqtane.Client.csproj create mode 100644 Oqtane.Client/Program.cs create mode 100644 Oqtane.Client/Properties/launchSettings.json create mode 100644 Oqtane.Client/Services/IModuleDefinitionService.cs create mode 100644 Oqtane.Client/Services/IModuleService.cs create mode 100644 Oqtane.Client/Services/IPageModuleService.cs create mode 100644 Oqtane.Client/Services/IPageService.cs create mode 100644 Oqtane.Client/Services/ISiteService.cs create mode 100644 Oqtane.Client/Services/ISkinService.cs create mode 100644 Oqtane.Client/Services/ITenantService.cs create mode 100644 Oqtane.Client/Services/IUserService.cs create mode 100644 Oqtane.Client/Services/ModuleDefinitionService.cs create mode 100644 Oqtane.Client/Services/ModuleService.cs create mode 100644 Oqtane.Client/Services/PageModuleService.cs create mode 100644 Oqtane.Client/Services/PageService.cs create mode 100644 Oqtane.Client/Services/ServiceBase.cs create mode 100644 Oqtane.Client/Services/SiteService.cs create mode 100644 Oqtane.Client/Services/SkinService.cs create mode 100644 Oqtane.Client/Services/TenantService.cs create mode 100644 Oqtane.Client/Services/UserService.cs create mode 100644 Oqtane.Client/Shared/Constants.cs create mode 100644 Oqtane.Client/Shared/Container.razor create mode 100644 Oqtane.Client/Shared/Interop.cs create mode 100644 Oqtane.Client/Shared/ModuleInstance.razor create mode 100644 Oqtane.Client/Shared/PageState.cs create mode 100644 Oqtane.Client/Shared/Pane.razor create mode 100644 Oqtane.Client/Shared/PaneLayout.razor create mode 100644 Oqtane.Client/Shared/SiteRouter.razor create mode 100644 Oqtane.Client/Shared/Skin.razor create mode 100644 Oqtane.Client/Shared/Utilities.cs create mode 100644 Oqtane.Client/Skins/AdminContainer.razor create mode 100644 Oqtane.Client/Skins/ContainerBase.cs create mode 100644 Oqtane.Client/Skins/Controls/ControlPanel.razor create mode 100644 Oqtane.Client/Skins/Controls/Login.razor create mode 100644 Oqtane.Client/Skins/Controls/Logo.razor create mode 100644 Oqtane.Client/Skins/Controls/Menu.razor create mode 100644 Oqtane.Client/Skins/Controls/Mode.razor create mode 100644 Oqtane.Client/Skins/Controls/ModuleActions.razor create mode 100644 Oqtane.Client/Skins/Controls/ModuleTitle.razor create mode 100644 Oqtane.Client/Skins/Controls/Profile.razor create mode 100644 Oqtane.Client/Skins/DefaultContainer.razor create mode 100644 Oqtane.Client/Skins/IContainerControl.cs create mode 100644 Oqtane.Client/Skins/ISkin.cs create mode 100644 Oqtane.Client/Skins/ISkinControl.cs create mode 100644 Oqtane.Client/Skins/Skin1/Container1.razor create mode 100644 Oqtane.Client/Skins/Skin1/Skin.cs create mode 100644 Oqtane.Client/Skins/Skin1/Skin1.razor create mode 100644 Oqtane.Client/Skins/Skin2/Container2.razor create mode 100644 Oqtane.Client/Skins/Skin2/Skin.cs create mode 100644 Oqtane.Client/Skins/Skin2/Skin2.razor create mode 100644 Oqtane.Client/Skins/Skin3/HorizontalLayout.razor create mode 100644 Oqtane.Client/Skins/Skin3/Skin.cs create mode 100644 Oqtane.Client/Skins/Skin3/Skin3.razor create mode 100644 Oqtane.Client/Skins/Skin3/VerticalLayout.razor create mode 100644 Oqtane.Client/Skins/SkinBase.cs create mode 100644 Oqtane.Client/Skins/SkinObjectBase.cs create mode 100644 Oqtane.Client/Startup.cs create mode 100644 Oqtane.Client/wwwroot/Sites/1/oqtane.png create mode 100644 Oqtane.Client/wwwroot/css/bootstrap/bootstrap.min.css create mode 100644 Oqtane.Client/wwwroot/css/bootstrap/bootstrap.min.css.map create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/FONT-LICENSE create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/ICON-LICENSE create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/README.md create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/font/fonts/open-iconic.eot create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/font/fonts/open-iconic.otf create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/font/fonts/open-iconic.svg create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf create mode 100644 Oqtane.Client/wwwroot/css/open-iconic/font/fonts/open-iconic.woff create mode 100644 Oqtane.Client/wwwroot/css/site.css create mode 100644 Oqtane.Client/wwwroot/index.html create mode 100644 Oqtane.Client/wwwroot/js/interop.js create mode 100644 Oqtane.Client/wwwroot/js/popper.min.js create mode 100644 Oqtane.Client/wwwroot/js/site.js create mode 100644 Oqtane.Client/wwwroot/oqtane.png create mode 100644 Oqtane.Server/Controllers/ModuleController.cs create mode 100644 Oqtane.Server/Controllers/ModuleDefinitionController.cs create mode 100644 Oqtane.Server/Controllers/PageController.cs create mode 100644 Oqtane.Server/Controllers/PageModuleController.cs create mode 100644 Oqtane.Server/Controllers/SiteController.cs create mode 100644 Oqtane.Server/Controllers/SkinController.cs create mode 100644 Oqtane.Server/Controllers/TenantController.cs create mode 100644 Oqtane.Server/Controllers/UserController.cs create mode 100644 Oqtane.Server/Data/db.txt create mode 100644 Oqtane.Server/Filters/UpgradeFilter.cs create mode 100644 Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs create mode 100644 Oqtane.Server/Modules/HtmlText/Repository/HtmlTextContext.cs create mode 100644 Oqtane.Server/Modules/HtmlText/Repository/HtmlTextRepository.cs create mode 100644 Oqtane.Server/Modules/HtmlText/Repository/IHtmlTextRepository.cs create mode 100644 Oqtane.Server/Oqtane.Server.csproj create mode 100644 Oqtane.Server/Oqtane.Server.csproj.user create mode 100644 Oqtane.Server/Pages/_Host.cshtml create mode 100644 Oqtane.Server/Program.cs create mode 100644 Oqtane.Server/Properties/launchSettings.json create mode 100644 Oqtane.Server/Repository/ContextBase.cs create mode 100644 Oqtane.Server/Repository/HostContext.cs create mode 100644 Oqtane.Server/Repository/IModuleDefinitionRepository.cs create mode 100644 Oqtane.Server/Repository/IModuleRepository.cs create mode 100644 Oqtane.Server/Repository/IPageModuleRepository.cs create mode 100644 Oqtane.Server/Repository/IPageRepository.cs create mode 100644 Oqtane.Server/Repository/ISiteRepository.cs create mode 100644 Oqtane.Server/Repository/ISkinRepository.cs create mode 100644 Oqtane.Server/Repository/ITenantRepository.cs create mode 100644 Oqtane.Server/Repository/IUserRepository.cs create mode 100644 Oqtane.Server/Repository/ModuleDefinitionRepository.cs create mode 100644 Oqtane.Server/Repository/ModuleRepository.cs create mode 100644 Oqtane.Server/Repository/PageModuleRepository.cs create mode 100644 Oqtane.Server/Repository/PageRepository.cs create mode 100644 Oqtane.Server/Repository/SiteRepository.cs create mode 100644 Oqtane.Server/Repository/SkinRepository.cs create mode 100644 Oqtane.Server/Repository/TenantContext.cs create mode 100644 Oqtane.Server/Repository/TenantRepository.cs create mode 100644 Oqtane.Server/Repository/UserRepository.cs create mode 100644 Oqtane.Server/Scripts/Initialize.sql create mode 100644 Oqtane.Server/Startup.cs create mode 100644 Oqtane.Server/appsettings.json create mode 100644 Oqtane.Server/wwwroot/Sites/1/oqtane.png create mode 100644 Oqtane.Server/wwwroot/css/bootstrap/bootstrap.min.css create mode 100644 Oqtane.Server/wwwroot/css/bootstrap/bootstrap.min.css.map create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/FONT-LICENSE create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/ICON-LICENSE create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/README.md create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/font/fonts/open-iconic.eot create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/font/fonts/open-iconic.otf create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/font/fonts/open-iconic.svg create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf create mode 100644 Oqtane.Server/wwwroot/css/open-iconic/font/fonts/open-iconic.woff create mode 100644 Oqtane.Server/wwwroot/css/site.css create mode 100644 Oqtane.Server/wwwroot/js/interop.js create mode 100644 Oqtane.Server/wwwroot/js/popper.min.js create mode 100644 Oqtane.Server/wwwroot/js/site.js create mode 100644 Oqtane.Server/wwwroot/oqtane.png create mode 100644 Oqtane.Shared/Models/HtmlTextInfo.cs create mode 100644 Oqtane.Shared/Models/Module.cs create mode 100644 Oqtane.Shared/Models/ModuleDefinition.cs create mode 100644 Oqtane.Shared/Models/Page.cs create mode 100644 Oqtane.Shared/Models/PageModule.cs create mode 100644 Oqtane.Shared/Models/Site.cs create mode 100644 Oqtane.Shared/Models/Skin.cs create mode 100644 Oqtane.Shared/Models/Tenant.cs create mode 100644 Oqtane.Shared/Models/User.cs create mode 100644 Oqtane.Shared/Modules/IService.cs create mode 100644 Oqtane.Shared/Oqtane.Shared.csproj create mode 100644 Oqtane.sln create mode 100644 oqtane.png diff --git a/Oqtane.Client/App.razor b/Oqtane.Client/App.razor new file mode 100644 index 00000000..90e4917c --- /dev/null +++ b/Oqtane.Client/App.razor @@ -0,0 +1,16 @@ +@using Oqtane.Shared +@using Oqtane.Client.Shared + + + + + +@functions { + private PageState PageState { get; set; } + + private void ChangeState(PageState pagestate) + { + PageState = pagestate; + StateHasChanged(); + } +} diff --git a/Oqtane.Client/Modules/Admin/Admin/Index.razor b/Oqtane.Client/Modules/Admin/Admin/Index.razor new file mode 100644 index 00000000..62d3242f --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Admin/Index.razor @@ -0,0 +1,34 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Modules +@using Oqtane.Services +@using Oqtane.Models; +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IPageService PageService +@inject IUserService UserService + + +

+ +@functions { + List pages; + + protected override void OnInit() + { + // display list of pages which are children of current page + pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).ToList(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor new file mode 100644 index 00000000..e3d1ff74 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -0,0 +1,49 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Shared +@using Oqtane.Modules +@using Microsoft.JSInterop +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IJSRuntime jsRuntime +@inject IUserService UserService + +
+ @((MarkupString)Message) +
+ + +
+
+ + +
+ + Cancel +
+ +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } } + + public string Message { get; set; } = "
Use host/host For Demo Access
"; + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; + + private async Task Login() + { + List users = await UserService.GetUsersAsync(); + User user = users.Where(item => item.Username == Username).FirstOrDefault(); + if (user != null) + { + var interop = new Interop(jsRuntime); + await interop.SetCookie("user", user.UserId.ToString(), 7); + UriHelper.NavigateTo(PageState.Alias, true); + } + else + { + Message = "
User Does Not Exist
"; + } + } +} diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor new file mode 100644 index 00000000..d951481c --- /dev/null +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -0,0 +1,41 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject IModuleDefinitionService ModuleDefinitionService + +@if (moduledefinitions == null) +{ +

Loading...

+} +else +{ + + + + + + + + @foreach (var moduledefinition in moduledefinitions) + { + + + + } + +
Name
@moduledefinition.Name
+} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + List moduledefinitions; + + protected override async Task OnInitAsync() + { + moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor new file mode 100644 index 00000000..94e16974 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor @@ -0,0 +1,115 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject ISkinService SkinService +@inject IModuleService ModuleService +@inject IPageModuleService PageModuleService + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Edit; } } + + Dictionary containers = new Dictionary(); + string title; + string containertype; + string viewpermissions; + string editpermissions; + string pageid; + + protected override async Task OnInitAsync() + { + title = ModuleState.Title; + List Skins = await SkinService.GetSkinsAsync(); + foreach (Skin skin in Skins) + { + foreach (string container in skin.ContainerControls.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + containers.Add(container, skin.Name + " - " + @Utilities.GetTypeNameClass(container)); + } + } + containertype = ModuleState.ContainerType; + viewpermissions = ModuleState.ViewPermissions; + editpermissions = ModuleState.EditPermissions; + pageid = ModuleState.PageId.ToString(); + } + + private async Task SaveModule() + { + Module module = ModuleState; + module.ViewPermissions = viewpermissions; + module.EditPermissions = editpermissions; + await ModuleService.UpdateModuleAsync(module); + + PageModule pagemodule = new PageModule(); + pagemodule.PageModuleId = ModuleState.PageModuleId; + pagemodule.PageId = Int32.Parse(pageid); + pagemodule.ModuleId = ModuleState.ModuleId; + pagemodule.Title = title; + pagemodule.Pane = ModuleState.Pane; + pagemodule.Order = ModuleState.Order; + pagemodule.ContainerType = containertype; + await PageModuleService.UpdatePageModuleAsync(pagemodule); + + UriHelper.NavigateTo(NavigateUrl(true)); + } +} diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor new file mode 100644 index 00000000..4ada70e9 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -0,0 +1,187 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IPageService PageService +@inject ISkinService SkinService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } + + Dictionary skins = new Dictionary(); + Dictionary panelayouts = new Dictionary(); + + string name; + string path; + string parentid; + string order = ""; + string isnavigation = "True"; + string skintype; + string layouttype = ""; + string icon = ""; + string viewpermissions = "All Users"; + string editpermissions = "Administrators"; + + protected override async Task OnInitAsync() + { + List Skins = await SkinService.GetSkinsAsync(); + foreach (Skin skin in Skins) + { + foreach (string skincontrol in skin.SkinControls.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + skins.Add(skincontrol, skin.Name + " - " + @Utilities.GetTypeNameClass(skincontrol)); + } + foreach (string panelayout in skin.PaneLayouts.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + panelayouts.Add(panelayout, skin.Name + " - " + @Utilities.GetTypeNameClass(panelayout)); + } + } + } + + private async Task SavePage() + { + Page p = new Page(); + p.SiteId = PageState.Page.SiteId; + if (string.IsNullOrEmpty(parentid)) + { + p.ParentId = null; + } + else + { + p.ParentId = Int32.Parse(parentid); + } + p.Name = name; + p.Path = path; + p.Order = (order == null ? 1 : Int32.Parse(order)); + p.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); + p.SkinType = skintype; + p.LayoutType = (layouttype == null ? "" : layouttype); + p.Icon = (icon == null ? "" : icon); + Type type; + if (!string.IsNullOrEmpty(layouttype)) + { + type = Type.GetType(layouttype); + } + else + { + type = Type.GetType(skintype); + } + System.Reflection.PropertyInfo property = type.GetProperty("Panes"); + p.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); + p.ViewPermissions = viewpermissions; + p.EditPermissions = editpermissions; + await PageService.AddPageAsync(p); + StateHasChanged(); + UriHelper.NavigateTo(NavigateUrl(path, true)); + } +} diff --git a/Oqtane.Client/Modules/Admin/Pages/Delete.razor b/Oqtane.Client/Modules/Admin/Pages/Delete.razor new file mode 100644 index 00000000..7a76fa3f --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Pages/Delete.razor @@ -0,0 +1,173 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IPageService PageService +@inject ISkinService SkinService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } + + Dictionary skins = new Dictionary(); + Dictionary panelayouts = new Dictionary(); + + int PageId; + string name; + string path; + string parentid; + string order; + string isnavigation; + string skintype; + string layouttype; + string icon; + string viewpermissions; + string editpermissions; + + protected override async Task OnInitAsync() + { + List Skins = await SkinService.GetSkinsAsync(); + foreach (Skin skin in Skins) + { + foreach (string skincontrol in skin.SkinControls.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + skins.Add(skincontrol, skin.Name + " - " + @Utilities.GetTypeNameClass(skincontrol)); + } + foreach (string panelayout in skin.PaneLayouts.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + panelayouts.Add(panelayout, skin.Name + " - " + @Utilities.GetTypeNameClass(panelayout)); + } + } + + PageId = Int32.Parse(PageState.QueryString["id"]); + Page p = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); + if (p != null) + { + name = p.Name; + path = p.Path; + + order = p.Order.ToString(); + isnavigation = p.IsNavigation.ToString(); + skintype = p.SkinType; + layouttype = p.LayoutType; + icon = p.Icon; + viewpermissions = p.ViewPermissions; + editpermissions = p.EditPermissions; + } + } + + private async Task DeletePage() + { + await PageService.DeletePageAsync(Int32.Parse(PageState.QueryString["id"])); + UriHelper.NavigateTo(PageState.Alias); + } +} diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor new file mode 100644 index 00000000..814ff3d7 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -0,0 +1,210 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IPageService PageService +@inject ISkinService SkinService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } + + Dictionary skins = new Dictionary(); + Dictionary panelayouts = new Dictionary(); + + int PageId; + string name; + string path; + string parentid; + string order; + string isnavigation; + string skintype; + string layouttype; + string icon; + string viewpermissions; + string editpermissions; + + protected override async Task OnInitAsync() + { + List Skins = await SkinService.GetSkinsAsync(); + foreach (Skin skin in Skins) + { + foreach (string skincontrol in skin.SkinControls.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + skins.Add(skincontrol, skin.Name + " - " + @Utilities.GetTypeNameClass(skincontrol)); + } + foreach (string panelayout in skin.PaneLayouts.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + panelayouts.Add(panelayout, skin.Name + " - " + @Utilities.GetTypeNameClass(panelayout)); + } + } + + PageId = Int32.Parse(PageState.QueryString["id"]); + Page p = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); + if (p != null) + { + name = p.Name; + path = p.Path; + if (p.ParentId == null) + { + parentid = ""; + } + else + { + parentid = p.ParentId.ToString(); + } + order = p.Order.ToString(); + isnavigation = p.IsNavigation.ToString(); + skintype = p.SkinType; + layouttype = p.LayoutType; + icon = p.Icon; + viewpermissions = p.ViewPermissions; + editpermissions = p.EditPermissions; + } + } + + private async Task SavePage() + { + Page p = PageState.Page; + p.PageId = Int32.Parse(PageState.QueryString["id"]); + if (string.IsNullOrEmpty(parentid)) + { + p.ParentId = null; + } + else + { + p.ParentId = Int32.Parse(parentid); + } + p.Name = name; + p.Path = path; + p.Order = (order == null ? 1 : Int32.Parse(order)); + p.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); + p.SkinType = skintype; + p.LayoutType = (layouttype == null ? "" : layouttype); + p.Icon = (icon == null ? "" : icon); + Type type; + if (!string.IsNullOrEmpty(layouttype)) + { + type = Type.GetType(layouttype); + } + else + { + type = Type.GetType(skintype); + } + System.Reflection.PropertyInfo property = type.GetProperty("Panes"); + p.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); + p.ViewPermissions = viewpermissions; + p.EditPermissions = editpermissions; + await PageService.UpdatePageAsync(p); + UriHelper.NavigateTo(NavigateUrl(path)); + } +} diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor new file mode 100644 index 00000000..b34495ae --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -0,0 +1,40 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject IPageService PageService + +@if (PageState.Pages == null) +{ +

Loading...

+} +else +{ + + + + + + + + + + @foreach (var p in PageState.Pages) + { + + + + + + + } + +
PathName
@p.Path@p.Name
+ +} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Register/Index.razor b/Oqtane.Client/Modules/Admin/Register/Index.razor new file mode 100644 index 00000000..5d4dfbeb --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Register/Index.razor @@ -0,0 +1,29 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Shared +@using Oqtane.Modules +@using Microsoft.JSInterop +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IJSRuntime jsRuntime + + +
+
+ + +
+
+ + +
+ + Cancel +
+ +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } } + + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; +} diff --git a/Oqtane.Client/Modules/Admin/Sites/Add.razor b/Oqtane.Client/Modules/Admin/Sites/Add.razor new file mode 100644 index 00000000..5baa85dd --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor @@ -0,0 +1,46 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject ISiteService SiteService + + + + + + + + + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + string name; + string alias; + + private async Task SaveSite() + { + Site site = new Site(); + site.Name = name; + site.Logo = ""; + await SiteService.AddSiteAsync(site); + StateHasChanged(); + UriHelper.NavigateTo(NavigateUrl()); + } +} diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor new file mode 100644 index 00000000..6d3f665c --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -0,0 +1,42 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject ISiteService SiteService + +@if (sites == null) +{ +

Loading...

+} +else +{ + + + + + + + + @foreach (var site in sites) + { + + + + } + +
Name
@site.Name
+ +} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + List sites; + + protected override async Task OnInitAsync() + { + sites = await SiteService.GetSitesAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Skins/Index.razor b/Oqtane.Client/Modules/Admin/Skins/Index.razor new file mode 100644 index 00000000..c3815cc4 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Skins/Index.razor @@ -0,0 +1,41 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject ISkinService SkinService + +@if (Skins == null) +{ +

Loading...

+} +else +{ + + + + + + + + @foreach (var Skin in Skins) + { + + + + } + +
Name
@Skin.Name
+} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + List Skins; + + protected override async Task OnInitAsync() + { + Skins = await SkinService.GetSkinsAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor new file mode 100644 index 00000000..6be55798 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -0,0 +1,41 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject IUserService UserService + +@if (Users == null) +{ +

Loading...

+} +else +{ + + + + + + + + @foreach (var User in Users) + { + + + + } + +
Name
@User.Username
+} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + List Users; + + protected override async Task OnInitAsync() + { + Users = await UserService.GetUsersAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor new file mode 100644 index 00000000..baf34acc --- /dev/null +++ b/Oqtane.Client/Modules/Controls/ActionLink.razor @@ -0,0 +1,67 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Modules +@using Oqtane.Services +@using Oqtane.Shared +@inherits ModuleBase +@inject IUserService UserService + +@if (authorized) +{ + @text +} + +@functions { + [Parameter] + private string Action { get; set; } + + [Parameter] + private string Text { get; set; } // optional + + [Parameter] + private string Parameters { get; set; } // optional + + string text = ""; + string url = ""; + string parameters = ""; + bool authorized = false; + + protected override void OnInit() + { + text = Action; + if (!String.IsNullOrEmpty(Text)) + { + text = Text; + } + if (!String.IsNullOrEmpty(Parameters)) + { + parameters = Parameters; + } + url = EditUrl(Action, parameters); + + string typename = ModuleState.ModuleType.Replace(Utilities.GetTypeNameClass(ModuleState.ModuleType) + ",", Action + ","); + Type moduleType = Type.GetType(typename); + if (moduleType != null) + { + var moduleobject = Activator.CreateInstance(moduleType); + SecurityAccessLevelEnum SecurityAccessLevel = (SecurityAccessLevelEnum)moduleType.GetProperty("SecurityAccessLevel").GetValue(moduleobject, null); + switch (SecurityAccessLevel) + { + case SecurityAccessLevelEnum.Anonymous: + authorized = true; + break; + case SecurityAccessLevelEnum.View: + authorized = UserService.IsAuthorized(PageState.User, ModuleState.ViewPermissions); + break; + case SecurityAccessLevelEnum.Edit: + authorized = UserService.IsAuthorized(PageState.User, ModuleState.EditPermissions); + break; + case SecurityAccessLevelEnum.Admin: + authorized = UserService.IsAuthorized(PageState.User, Constants.AdminRole); + break; + case SecurityAccessLevelEnum.Host: + authorized = PageState.User.IsSuperUser; + break; + } + } + } +} diff --git a/Oqtane.Client/Modules/Counter/Index.razor b/Oqtane.Client/Modules/Counter/Index.razor new file mode 100644 index 00000000..b95a4406 --- /dev/null +++ b/Oqtane.Client/Modules/Counter/Index.razor @@ -0,0 +1,15 @@ +@using Oqtane.Modules +@inherits ModuleBase +Current count: @currentCount +
+ +

+ +@functions { + int currentCount = 0; + + void IncrementCount() + { + currentCount++; + } +} diff --git a/Oqtane.Client/Modules/Counter/Module.cs b/Oqtane.Client/Modules/Counter/Module.cs new file mode 100644 index 00000000..63973db1 --- /dev/null +++ b/Oqtane.Client/Modules/Counter/Module.cs @@ -0,0 +1,16 @@ +using Oqtane.Modules; + +namespace Oqtane.Client.Modules.Counter +{ + public class Module : IModule + { + public string Name { get { return "Counter"; } } + public string Description { get { return "Increments a counter"; } } + public string Version { get { return "1.0.0"; } } + public string Owner { get { return ""; } } + public string Url { get { return ""; } } + public string Contact { get { return ""; } } + public string License { get { return ""; } } + public string Dependencies { get { return ""; } } + } +} diff --git a/Oqtane.Client/Modules/HtmlText/Edit.razor b/Oqtane.Client/Modules/HtmlText/Edit.razor new file mode 100644 index 00000000..7c216f5a --- /dev/null +++ b/Oqtane.Client/Modules/HtmlText/Edit.razor @@ -0,0 +1,61 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Modules +@using Oqtane.Client.Modules.HtmlText.Services +@using Oqtane.Shared.Modules.HtmlText.Models +@using System.Net.Http; +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject HttpClient http + +
+ + + +
+ + +