From 313e0e71ba1b4fee322db609edd480c4667e16c9 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 27 Oct 2022 15:26:08 +0300 Subject: [PATCH 01/12] 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 02/12] 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 03/12] 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 04/12] 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 05/12] 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 06/12] 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 07/12] 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 08/12] 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" From 62b46606172cac43fca902dab532616562d81454 Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 7 Nov 2022 16:58:41 +0300 Subject: [PATCH 09/12] Update en.json --- .../Commercial/Localization/Resources/en.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 3af0308564..5c6e654770 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -796,6 +796,12 @@ "LeptonThemeForAdmin": "Lepton Theme for your admin dashboard by", "LeptonThemeForAdminDescription": "Lepton Theme is still available and will be maintained. If you want to switch to LeptonX Theme as a Lepton Theme user, you can see the documentation to learn how-to.", "LeptonCompatibleWith": "Lepton Theme is compatible with", - "BlackFridayDiscount": "Black Friday Discount" + "BlackFridayDiscount": "Black Friday Discount", + "UpgradePaymentInfoSection_DeveloperPrice": "{0} for {1} additional x developer(s)", + "Upgrade": "Upgrade", + "Renewal": "Renewal", + "UpgradePaymentInfoSection_LicensePrice": "{0} license", + "UpgradePaymentInfoSection_LicenseRenewalPrice": "License renewal", + "Total": "Total" } } From 30713dfd001af34ae71059d4a53cdd5553280b3d Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 7 Nov 2022 17:15:08 +0300 Subject: [PATCH 10/12] Update en.json --- .../AbpIoLocalization/Commercial/Localization/Resources/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 5c6e654770..a89b38a15a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -797,7 +797,7 @@ "LeptonThemeForAdminDescription": "Lepton Theme is still available and will be maintained. If you want to switch to LeptonX Theme as a Lepton Theme user, you can see the documentation to learn how-to.", "LeptonCompatibleWith": "Lepton Theme is compatible with", "BlackFridayDiscount": "Black Friday Discount", - "UpgradePaymentInfoSection_DeveloperPrice": "{0} for {1} additional x developer(s)", + "UpgradePaymentInfoSection_DeveloperPrice": "{0} for {1} additional developer(s)", "Upgrade": "Upgrade", "Renewal": "Renewal", "UpgradePaymentInfoSection_LicensePrice": "{0} license", From 30f9c28752dd292972fc5cad51445b668b088386 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 8 Nov 2022 09:46:26 +0800 Subject: [PATCH 11/12] Upgrade `OpenIddict` to preview 5. --- .../Volo.Abp.OpenIddict.AspNetCore.csproj | 6 +++--- .../Volo.Abp.OpenIddict.Domain.Shared.csproj | 2 +- .../Volo.Abp.OpenIddict.Domain.csproj | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo.Abp.OpenIddict.AspNetCore.csproj b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo.Abp.OpenIddict.AspNetCore.csproj index 2145f0b08b..ea725aa21f 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo.Abp.OpenIddict.AspNetCore.csproj +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo.Abp.OpenIddict.AspNetCore.csproj @@ -20,8 +20,8 @@ - - - + + + diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.csproj b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.csproj index cc6d461740..040d7a986f 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.csproj +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.csproj @@ -14,7 +14,7 @@ - + diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.csproj b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.csproj index d9edb84fcc..3da97bf272 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.csproj +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.csproj @@ -17,7 +17,7 @@ - + From 8ee3a1ddf62d8dae777c7d762b2cc5da70564b91 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Tue, 8 Nov 2022 20:01:52 +0300 Subject: [PATCH 12/12] add support policy. issue volosoft/vs-internal#1204 --- .../Commercial/Localization/Resources/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index a89b38a15a..4f017817dd 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -802,6 +802,8 @@ "Renewal": "Renewal", "UpgradePaymentInfoSection_LicensePrice": "{0} license", "UpgradePaymentInfoSection_LicenseRenewalPrice": "License renewal", - "Total": "Total" + "Total": "Total", + "SupportPolicyFaqTitle": "What is your support policy?", + "SupportPolicyFaqExplanation": "We do support only the active and the previous major version. We do not guarantee a patch release for the 3rd and older major versions. For example, if the active version is 7.0.0, we will release patch releases for both 6.x.x and 7.x.x. Besides, we provide support only for ABP Framework and ABP Commercial related issues. That means no support is given for the 3rd party applications, cloud services and other peripheral libraries used by ABP products. We will use commercially reasonable efforts to provide our customers with technical support during \"Volosoft Bilisim A.S\"s official business hours. On the other hand, we do not commit to a service-level agreement (SLA) response time, but we will try to respond to the technical issues as quickly as possible within our official working hours. Unless a special agreement is made with the customer, we only provide support at https://support.abp.io. We also have private email support, which is only available to Enterprise License holders." } }