From 313e0e71ba1b4fee322db609edd480c4667e16c9 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 27 Oct 2022 15:26:08 +0300 Subject: [PATCH 1/8] Add Themes/Index --- docs/en/Themes/LeptonXLite/Index.md | 20 ++++++++++++++++++ docs/en/docs-nav.json | 4 ++++ .../leptonxlite-theme-application-layout.jpeg | Bin 0 -> 56976 bytes 3 files changed, 24 insertions(+) create mode 100644 docs/en/Themes/LeptonXLite/Index.md create mode 100644 docs/en/images/leptonxlite-theme-application-layout.jpeg diff --git a/docs/en/Themes/LeptonXLite/Index.md b/docs/en/Themes/LeptonXLite/Index.md new file mode 100644 index 0000000000..c23767362b --- /dev/null +++ b/docs/en/Themes/LeptonXLite/Index.md @@ -0,0 +1,20 @@ +# ABP Framework Official Themes +ABP Framework provides some official themes. You can use them in your projects. + +## Basic Theme +The Basic Theme is a minimalist theme that doesn't add any styling on top of the plain [Bootstrap](https://getbootstrap.com/). You can take the Basic Theme as the base theme and build your own theme or styling on top of it. + +![basic-theme-application-layout](../../images/basic-theme-application-layout.png) + +- [Basic Theme - MVC](../../UI/AspNetCore/Basic-Theme.md) +- [Basic Theme - Blazor](../../UI/Blazor/Basic-Theme.md) +- [Basic Theme - Angular](../../UI/Angular/Basic-Theme.md) + +## LeptonX Lite +[LeptonX Theme](https://x.leptontheme.com/) is a new generation theme of Lepton Theme. **LeptonX Lite** is a simplified variation of the **LeptonX Theme**. It is a free theme and you can use it in your ABP projects. + +![](../../images/leptonxlite-theme-application-layout.jpeg) + +- [LeptonX Lite - MVC](AspNetCore.md) +- [LeptonX Lite - Blazor](Blazor.md) +- [LeptonX Lite - Angular](Angular.md) \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 14c584d376..453a158b0c 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -630,6 +630,10 @@ { "text": "User Interface", "items": [ + { + "text": "Themes", + "path": "Themes/LeptonXLite/Index.md" + }, { "text": "MVC / Razor Pages", "items": [ diff --git a/docs/en/images/leptonxlite-theme-application-layout.jpeg b/docs/en/images/leptonxlite-theme-application-layout.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..12e15ddcb71cb56a7172afb23d98639bece41539 GIT binary patch literal 56976 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 D&)yhT literal 0 HcmV?d00001 From 4d23075cd8761dc863628c8c96f912a85a259946 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 27 Oct 2022 15:28:55 +0300 Subject: [PATCH 2/8] Move Index.md to Themes folder --- docs/en/Themes/{LeptonXLite => }/Index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) rename docs/en/Themes/{LeptonXLite => }/Index.md (56%) diff --git a/docs/en/Themes/LeptonXLite/Index.md b/docs/en/Themes/Index.md similarity index 56% rename from docs/en/Themes/LeptonXLite/Index.md rename to docs/en/Themes/Index.md index c23767362b..d1b5f782a5 100644 --- a/docs/en/Themes/LeptonXLite/Index.md +++ b/docs/en/Themes/Index.md @@ -4,17 +4,17 @@ ABP Framework provides some official themes. You can use them in your projects. ## Basic Theme The Basic Theme is a minimalist theme that doesn't add any styling on top of the plain [Bootstrap](https://getbootstrap.com/). You can take the Basic Theme as the base theme and build your own theme or styling on top of it. -![basic-theme-application-layout](../../images/basic-theme-application-layout.png) +![basic-theme-application-layout](../images/basic-theme-application-layout.png) -- [Basic Theme - MVC](../../UI/AspNetCore/Basic-Theme.md) -- [Basic Theme - Blazor](../../UI/Blazor/Basic-Theme.md) -- [Basic Theme - Angular](../../UI/Angular/Basic-Theme.md) +- [Basic Theme - MVC](../UI/AspNetCore/Basic-Theme.md) +- [Basic Theme - Blazor](../UI/Blazor/Basic-Theme.md) +- [Basic Theme - Angular](../UI/Angular/Basic-Theme.md) ## LeptonX Lite [LeptonX Theme](https://x.leptontheme.com/) is a new generation theme of Lepton Theme. **LeptonX Lite** is a simplified variation of the **LeptonX Theme**. It is a free theme and you can use it in your ABP projects. -![](../../images/leptonxlite-theme-application-layout.jpeg) +![](../images/leptonxlite-theme-application-layout.jpeg) -- [LeptonX Lite - MVC](AspNetCore.md) -- [LeptonX Lite - Blazor](Blazor.md) -- [LeptonX Lite - Angular](Angular.md) \ No newline at end of file +- [LeptonX Lite - MVC](LeptonXLite/AspNetCore.md) +- [LeptonX Lite - Blazor](LeptonXLite/Blazor.md) +- [LeptonX Lite - Angular](LeptonXLite/Angular.md) \ No newline at end of file From 46f96d673154d1e499ba9150198133ce31265bf5 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Fri, 28 Oct 2022 19:31:44 +0300 Subject: [PATCH 3/8] Update docs/en/docs-nav.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Halil İbrahim Kalkan --- docs/en/docs-nav.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 453a158b0c..611ddb351e 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -632,7 +632,7 @@ "items": [ { "text": "Themes", - "path": "Themes/LeptonXLite/Index.md" + "path": "Themes/Index.md" }, { "text": "MVC / Razor Pages", From 88fb380944345f58fcb8053e8a5622432822c7e6 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Thu, 3 Nov 2022 18:08:40 +0300 Subject: [PATCH 4/8] CLI: Make related configurations for theme selection (Angular UI) --- .../Cli/Args/AngularThemeConfigurationArgs.cs | 19 ++++++++++++ .../Volo/Abp/Cli/Commands/NewCommand.cs | 7 +++-- .../Commands/ProjectCreationCommandBase.cs | 18 ++++++++++- .../AngularThemeConfigurer.cs | 30 +++++++++++++++++++ 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/AngularThemeConfigurationArgs.cs create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularThemeConfigurer.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/AngularThemeConfigurationArgs.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/AngularThemeConfigurationArgs.cs new file mode 100644 index 0000000000..3422697dba --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/AngularThemeConfigurationArgs.cs @@ -0,0 +1,19 @@ +using Volo.Abp.Cli.ProjectBuilding.Building; + +namespace Volo.Abp.Cli.Args; + +public class AngularThemeConfigurationArgs +{ + public Theme Theme { get; } + + public string ProjectName { get; } + + public string AngularFolderPath { get; } + + public AngularThemeConfigurationArgs(Theme theme, string projectName, string angularFolderPath) + { + Theme = theme; + ProjectName = projectName; + AngularFolderPath = angularFolderPath; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index d104c313ed..8421eb656b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -40,7 +40,8 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien ILocalEventBus eventBus, IBundlingService bundlingService, ITemplateInfoProvider templateInfoProvider, - TemplateProjectBuilder templateProjectBuilder) : + TemplateProjectBuilder templateProjectBuilder, + AngularThemeConfigurer angularThemeConfigurer) : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, @@ -50,7 +51,8 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien initialMigrationCreator, themePackageAdder, eventBus, - bundlingService) + bundlingService, + angularThemeConfigurer) { TemplateInfoProvider = templateInfoProvider; TemplateProjectBuilder = templateProjectBuilder; @@ -95,6 +97,7 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien Logger.LogInformation($"'{projectName}' has been successfully created to '{projectArgs.OutputFolder}'"); + ConfigureAngularJsonForThemeSelection(projectArgs); ConfigureNpmPackagesForTheme(projectArgs); await RunGraphBuildForMicroserviceServiceTemplate(projectArgs); await CreateInitialMigrationsAsync(projectArgs); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 88e6c7b74f..70ea71cab8 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -38,6 +38,8 @@ public abstract class ProjectCreationCommandBase public ILogger Logger { get; set; } public ThemePackageAdder ThemePackageAdder { get; } + + public AngularThemeConfigurer AngularThemeConfigurer { get; } public ProjectCreationCommandBase( ConnectionStringProvider connectionStringProvider, @@ -49,7 +51,8 @@ public abstract class ProjectCreationCommandBase InitialMigrationCreator initialMigrationCreator, ThemePackageAdder themePackageAdder, ILocalEventBus eventBus, - IBundlingService bundlingService) + IBundlingService bundlingService, + AngularThemeConfigurer angularThemeConfigurer) { _bundlingService = bundlingService; ConnectionStringProvider = connectionStringProvider; @@ -61,6 +64,7 @@ public abstract class ProjectCreationCommandBase InitialMigrationCreator = initialMigrationCreator; EventBus = eventBus; ThemePackageAdder = themePackageAdder; + AngularThemeConfigurer = angularThemeConfigurer; Logger = NullLogger.Instance; } @@ -667,6 +671,18 @@ public abstract class ProjectCreationCommandBase } } + protected void ConfigureAngularJsonForThemeSelection(ProjectBuildArgs projectArgs) + { + //TODO: do not run if the theme is default + if (projectArgs.Theme.HasValue && projectArgs.UiFramework == UiFramework.Angular) + { + AngularThemeConfigurer.Configure(new AngularThemeConfigurationArgs( + theme: projectArgs.Theme.Value, + projectName: projectArgs.SolutionName.FullName, + angularFolderPath: projectArgs.OutputFolder + Path.DirectorySeparatorChar + "angular")); + } + } + public static class Options { public static class Template diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularThemeConfigurer.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularThemeConfigurer.cs new file mode 100644 index 0000000000..4df9e31d47 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularThemeConfigurer.cs @@ -0,0 +1,30 @@ +using System; +using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Utils; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Cli.ProjectModification; + +public class AngularThemeConfigurer : ITransientDependency +{ + private readonly ICmdHelper _cmdHelper; + + public AngularThemeConfigurer(ICmdHelper cmdHelper) + { + _cmdHelper = cmdHelper; + } + + public void Configure(AngularThemeConfigurationArgs args) + { + if (args.ProjectName.IsNullOrEmpty() || args.AngularFolderPath.IsNullOrEmpty()) + { + return; + } + + var command = "npx ng g @abp/ng.schematics:change-theme " + + $"--name {(int)args.Theme} " + + $"--target-project {args.ProjectName}"; + + _cmdHelper.RunCmd(command, workingDirectory: args.AngularFolderPath); + } +} \ No newline at end of file From e2bf648d99ac5d67597fff29261138d03ce95b3e Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Fri, 4 Nov 2022 09:17:33 +0300 Subject: [PATCH 5/8] Update ProjectCreationCommandBase.cs --- .../Cli/Commands/ProjectCreationCommandBase.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 70ea71cab8..b1aab6c7ca 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -19,6 +19,7 @@ using Volo.Abp.Cli.ProjectBuilding.Events; using Volo.Abp.Cli.ProjectBuilding.Templates.App; using Volo.Abp.Cli.ProjectBuilding.Templates.Microservice; using Volo.Abp.Cli.ProjectBuilding.Templates.Module; +using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule; using Volo.Abp.Cli.Utils; using Volo.Abp.EventBus.Local; @@ -673,11 +674,21 @@ public abstract class ProjectCreationCommandBase protected void ConfigureAngularJsonForThemeSelection(ProjectBuildArgs projectArgs) { - //TODO: do not run if the theme is default - if (projectArgs.Theme.HasValue && projectArgs.UiFramework == UiFramework.Angular) + var isProTemplate = !projectArgs.TemplateName.IsNullOrEmpty() && projectArgs.TemplateName.EndsWith("-pro", StringComparison.OrdinalIgnoreCase); + var theme = projectArgs.Theme; + + var isDefaultTheme = (isProTemplate && theme == AppProTemplate.DefaultTheme) || + (!isProTemplate && theme == AppTemplate.DefaultTheme); + + if (isDefaultTheme || projectArgs.TemplateName == ModuleTemplate.TemplateName) + { + return; + } + + if (theme.HasValue && projectArgs.UiFramework == UiFramework.Angular) { AngularThemeConfigurer.Configure(new AngularThemeConfigurationArgs( - theme: projectArgs.Theme.Value, + theme: theme.Value, projectName: projectArgs.SolutionName.FullName, angularFolderPath: projectArgs.OutputFolder + Path.DirectorySeparatorChar + "angular")); } From c44806af63f31a80e650931b153c2abaa966c585 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Fri, 4 Nov 2022 10:59:13 +0300 Subject: [PATCH 6/8] Update ProjectCreationCommandBase.cs --- .../Abp/Cli/Commands/ProjectCreationCommandBase.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index b1aab6c7ca..0b822f9940 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -674,9 +674,8 @@ public abstract class ProjectCreationCommandBase protected void ConfigureAngularJsonForThemeSelection(ProjectBuildArgs projectArgs) { - var isProTemplate = !projectArgs.TemplateName.IsNullOrEmpty() && projectArgs.TemplateName.EndsWith("-pro", StringComparison.OrdinalIgnoreCase); var theme = projectArgs.Theme; - + var isProTemplate = !projectArgs.TemplateName.IsNullOrEmpty() && projectArgs.TemplateName.EndsWith("-pro", StringComparison.OrdinalIgnoreCase); var isDefaultTheme = (isProTemplate && theme == AppProTemplate.DefaultTheme) || (!isProTemplate && theme == AppTemplate.DefaultTheme); @@ -687,10 +686,15 @@ public abstract class ProjectCreationCommandBase if (theme.HasValue && projectArgs.UiFramework == UiFramework.Angular) { + var angularFolderPath = projectArgs.TemplateName == MicroserviceProTemplate.TemplateName + ? projectArgs.OutputFolder.EnsureEndsWith(Path.DirectorySeparatorChar) + "apps" + Path.DirectorySeparatorChar + "angular" + : projectArgs.OutputFolder.EnsureEndsWith(Path.DirectorySeparatorChar) + "angular"; + AngularThemeConfigurer.Configure(new AngularThemeConfigurationArgs( theme: theme.Value, - projectName: projectArgs.SolutionName.FullName, - angularFolderPath: projectArgs.OutputFolder + Path.DirectorySeparatorChar + "angular")); + projectName: projectArgs.SolutionName.FullName, + angularFolderPath: angularFolderPath + )); } } From 04a829162b9717ac378fb59304b35874c2b16e4a Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Fri, 4 Nov 2022 11:18:29 +0300 Subject: [PATCH 7/8] Update Index.md --- docs/en/Themes/Index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Themes/Index.md b/docs/en/Themes/Index.md index d1b5f782a5..771b64187b 100644 --- a/docs/en/Themes/Index.md +++ b/docs/en/Themes/Index.md @@ -13,7 +13,7 @@ The Basic Theme is a minimalist theme that doesn't add any styling on top of the ## LeptonX Lite [LeptonX Theme](https://x.leptontheme.com/) is a new generation theme of Lepton Theme. **LeptonX Lite** is a simplified variation of the **LeptonX Theme**. It is a free theme and you can use it in your ABP projects. -![](../images/leptonxlite-theme-application-layout.jpeg) +![LeptonX Lite application layout](../images/leptonxlite-theme-application-layout.jpeg) - [LeptonX Lite - MVC](LeptonXLite/AspNetCore.md) - [LeptonX Lite - Blazor](LeptonXLite/Blazor.md) From a74426943c444f3f7bca22091f6d7abb761d3a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 7 Nov 2022 14:31:21 +0300 Subject: [PATCH 8/8] Enhance the theming index document --- docs/en/Themes/Index.md | 34 ++++++++++++++++++++++------------ docs/en/docs-nav.json | 8 ++++---- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/docs/en/Themes/Index.md b/docs/en/Themes/Index.md index 771b64187b..a588e37d3a 100644 --- a/docs/en/Themes/Index.md +++ b/docs/en/Themes/Index.md @@ -1,20 +1,30 @@ -# ABP Framework Official Themes -ABP Framework provides some official themes. You can use them in your projects. +# The Official Themes +ABP Framework provides a complete UI theming system. While you can build your own themes, you can use the following pre-built themes freely in your applications. -## Basic Theme -The Basic Theme is a minimalist theme that doesn't add any styling on top of the plain [Bootstrap](https://getbootstrap.com/). You can take the Basic Theme as the base theme and build your own theme or styling on top of it. +## The Basic Theme +The Basic Theme is a minimalist theme that doesn't add any styling on top of the plain [Bootstrap](https://getbootstrap.com/) styles. You can take the Basic Theme as the base theme and build your own theme or styling on top of it. Here, a screenshot from the theme: ![basic-theme-application-layout](../images/basic-theme-application-layout.png) -- [Basic Theme - MVC](../UI/AspNetCore/Basic-Theme.md) -- [Basic Theme - Blazor](../UI/Blazor/Basic-Theme.md) -- [Basic Theme - Angular](../UI/Angular/Basic-Theme.md) +### Documentation -## LeptonX Lite -[LeptonX Theme](https://x.leptontheme.com/) is a new generation theme of Lepton Theme. **LeptonX Lite** is a simplified variation of the **LeptonX Theme**. It is a free theme and you can use it in your ABP projects. +- [Basic Theme - MVC UI](../UI/AspNetCore/Basic-Theme.md) +- [Basic Theme - Blazor UI](../UI/Blazor/Basic-Theme.md) +- [Basic Theme - Angular UI](../UI/Angular/Basic-Theme.md) + +## The LeptonX Lite Theme +**LeptonX Lite** is the free version of the [LeptonX Theme](https://x.leptontheme.com/), which is a part of the ABP Commercial. Here, a screenshot from the theme: ![LeptonX Lite application layout](../images/leptonxlite-theme-application-layout.jpeg) -- [LeptonX Lite - MVC](LeptonXLite/AspNetCore.md) -- [LeptonX Lite - Blazor](LeptonXLite/Blazor.md) -- [LeptonX Lite - Angular](LeptonXLite/Angular.md) \ No newline at end of file +### Documentation + +- [LeptonX Lite - MVC UI](LeptonXLite/AspNetCore.md) +- [LeptonX Lite - Blazor UI](LeptonXLite/Blazor.md) +- [LeptonX Lite - Angular UI](LeptonXLite/Angular.md) + +## See Also + +* [Theming - MVC UI](../UI/AspNetCore/Theming.md) +* [Theming - Blazor UI](../UI/Blazor/Theming.md) +* [Theming - Angular UI](../UI/Angular/Theming.md) \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 611ddb351e..8dac526d96 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -630,10 +630,6 @@ { "text": "User Interface", "items": [ - { - "text": "Themes", - "path": "Themes/Index.md" - }, { "text": "MVC / Razor Pages", "items": [ @@ -1198,6 +1194,10 @@ { "text": "Common", "items": [ + { + "text": "Themes", + "path": "Themes/Index.md" + }, { "text": "Overriding the User Interface", "path": "Customizing-Application-Modules-Overriding-User-Interface.md"