diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index 3251f8224f..134d592df9 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -220,6 +220,7 @@
"SuccessfullyReIndexAllPosts": "All posts have been successfully reindexed.",
"Permission:FullSearch": "Full text search",
"Menu:CliAnalytics": "Cli Analytics",
+ "Menu:Reports": "Reports",
"TemplateName": "Template name",
"TemplateVersion": "Template version",
"DatabaseProvider": "Database provider",
@@ -231,8 +232,10 @@
"UiFramework": "Ui framework",
"Options": "Options",
"CliAnalytics": "Cli Analytics",
+ "Reports": "Reports",
"Permission:CliAnalyticses": "Cli Analyticses",
"Permission:CliAnalytics": "Cli Analytics",
+ "Permission:Reports": "Reports",
"Search": "Search",
"ClearFilter": "Clear filter",
"LicensePrivateKey": "License private key",
@@ -346,7 +349,7 @@
"AdditionalDeveloperCount": "Additional developer count",
"LicensePrice": "License price",
"PurchaseDate": "Purchase date",
- "IsAbpBookDownloaded": "ABP book downloaded",
+ "IsAbpBookDownloaded": "Mastering ABP Book downloaded?",
"IsMasteringAbpBookDownloadEnabled": "ABP Book download enabled",
"Permission:Accounting:CustomPaymentLinkGenerator": "Custom Payment Link",
"CustomPaymentLink": "Custom Payment Link",
@@ -381,7 +384,7 @@
"PurchaseItems": "Purchase Items",
"SuccessfullyUpdated": "Successfully updated",
"SuccessfullyAdded": "Successfully added",
- "PurchaseState": "Purchase State",
+ "PurchaseState": "Purchase status",
"ShowBetweenDayCount": "Show Between Days",
"PurchaseOrder": "Purchase Order",
"ShowCreateInvoiceOfOrganization": "Create Invoice",
@@ -400,6 +403,7 @@
"Deleted{0}": "[Deleted {0}]",
"Tags": "Tags",
"SetTagsInfo": "Tags should be comma-separated. Eg: CSharp, Entity Framework",
- "RejectTrialLicenseWarningMessage": "Are you sure you want to reject this trial license request?"
+ "RejectTrialLicenseWarningMessage": "Are you sure you want to reject this trial license request?",
+ "ExportToExcel": "Export to Excel"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
index b32a2f4572..8fb4eeb4e1 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/tr.json
@@ -361,8 +361,8 @@
"ActivateTrialLicenseSuccessMessage": "Deneme lisansı başarıyla etkinleştirildi!",
"PaymentRequestId": "Ödeme talep kimliği",
"PurchaseDate": "Satın alma tarihi",
- "IsAbpBookDownloaded": "Abp kitabı indirildi",
- "IsMasteringAbpBookDownloadEnabled": "Abp kitabı indirme etkinleştirildi",
+ "IsAbpBookDownloaded": "Mastering ABP kitabı indirildi mi?",
+ "IsMasteringAbpBookDownloadEnabled": "Mastering ABP kitabı indirme etkinleştirildi",
"Permission:Accounting:CustomPaymentLinkGenerator": "Özel Ödeme Bağlantısı",
"CustomPaymentLink": "Özel Ödeme Bağlantısı",
"Menu:CustomPaymentLink": "Özel Ödeme Bağlantısı",
@@ -414,4 +414,4 @@
"Deleted{0}": "[{0} silindi]",
"Permission:BookDiscount": "Kitap indirimleri"
}
-}
\ No newline at end of file
+}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
index 39e5084e92..2187665eae 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
@@ -268,7 +268,7 @@
"SeeABPSuiteDocument": "Check out the ABP Suite document to learn the usage of ABP Suite.",
"AskQuestionsOnSupport": "You can ask questions on ABP Commercial Support.",
"Documentation": "Documentation",
- "SeeModulesDocument": "Check out the modules document for a list of all the commercial(pro) modules and their documents.",
+ "SeeModulesDocument": "See the modules page for a list of all the PRO modules.",
"Pricing": "Pricing",
"PricingExplanation": "Choose the features and functionality your business needs today. Easily upgrade as your business grows.",
"Team": "Team",
@@ -745,6 +745,11 @@
"OnlineReviewersOnAbpCommercial": "Online Reviews on ABP Commercial",
"SeeWhatToldAboutAbpCommercial": "See what has been told about ABP Commercial and write your thoughts if you want.",
"BlazoriseLicense": "Do we need to buy Blazorise license?",
- "BlazoriseLicenseExplanation": "We have an agreement between Volosoft and Megabit, with this agreement Blazorise license is bundled with ABP Commercial products therefore our customers do not need to purchase an extra Blazorise license."
+ "BlazoriseLicenseExplanation": "We have an agreement between Volosoft and Megabit, with this agreement Blazorise license is bundled with ABP Commercial products therefore our customers do not need to purchase an extra Blazorise license.",
+ "EFCore": "Entity Framework Core",
+ "All": "All",
+ "Mvc": "MVC",
+ "DataBaseProvider": "Data Provider",
+ "UIFramework": "UI Framework"
}
}
diff --git a/docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md b/docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md
index 2b756f2958..e545681d71 100644
--- a/docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md
+++ b/docs/en/Blog-Posts/2022-07-26 v6_0_Preview/POST.md
@@ -10,16 +10,16 @@ Try this version and provide feedback for the stable ABP v6.0! Thank you to all.
Follow the steps below to try version 6.0.0 RC today:
-1) **Upgrade** the ABP CLI to version `6.0.0-rc.1` using a command line terminal:
+1) **Upgrade** the ABP CLI to version `6.0.0-rc.5` using a command line terminal:
````bash
-dotnet tool update Volo.Abp.Cli -g --version 6.0.0-rc.1
+dotnet tool update Volo.Abp.Cli -g --version 6.0.0-rc.5
````
**or install** it if you haven't before:
````bash
-dotnet tool install Volo.Abp.Cli -g --version 6.0.0-rc.1
+dotnet tool install Volo.Abp.Cli -g --version 6.0.0-rc.5
````
2) Create a **new application** with the `--preview` option:
@@ -199,7 +199,7 @@ The following improvements have been made on [eShopOnAbp project](https://github
* Performance Improvements have been made in the **Settings Module** and tabs on the *Settings* page are lazy loading now.
* Some improvements have been made in the CMS Kit Module. You can see the improvements from [here](https://github.com/abpframework/abp/issues/11965).
-If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/6.0.0-rc.1), which contains a list of all the issues and pull requests closed in this version.
+If you want to see more details, you can check [the release on GitHub](https://github.com/abpframework/abp/releases/tag/6.0.0-rc.5), which contains a list of all the issues and pull requests closed in this version.
diff --git a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md
index 8e46bd6944..178a8f261e 100644
--- a/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md
+++ b/docs/en/Community-Articles/2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md
@@ -1,12 +1,12 @@
# How to Add Custom Properties to the User Entity
-> **Note:** If your application is greater than version 4.3.3, please follow [this article](../2022-07-19-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md).
+> **Note:** If your application is greater than version 4.3.3, please follow [this article](https://community.abp.io/posts/how-to-add-custom-properties-to-the-user-entity-rixchoha).
## Introduction
In this step-by-step article, I will explain how you can customize the user entity class, which is available in every web application you create using the ABP framework, according to your needs. When you read this article, you will learn how to override the services of built-in modules, extend the entities, extend data transfer objects and customize the user interface in the applications you develop using the ABP framework.
-> **Note:** This article is not about customizing the `Login` page. If you have such a need, please follow [this article](../2020-05-09-Customize-the-Login-Page-for-MVC-Razor-Page-Applications/POST.md).
+> **Note:** This article is not about customizing the `Login` page. If you have such a need, please follow [this article](https://community.abp.io/posts/how-to-customize-the-login-page-for-mvc-razor-page-applications-9a40f3cd).
You can see the screenshots below which we will reach at the end of the article.
diff --git a/docs/en/Community-Articles/2022-07-19-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md b/docs/en/Community-Articles/2022-07-19-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md
index 7c119c6e66..df9a8cf41a 100644
--- a/docs/en/Community-Articles/2022-07-19-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md
+++ b/docs/en/Community-Articles/2022-07-19-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md
@@ -1,12 +1,12 @@
# How to Add Custom Properties to the User Entity
-> **Note:** If your application is less than version 4.4.x, please follow [this article](../2020-10-08-How-To-Add-Custom-Property-To-The-User-Entity/How-To-Add-Custom-Property-To-The-User-Entity.md).
+> **Note:** If your application is less than version 4.4.x, please follow [this article](https://community.abp.io/posts/how-to-add-custom-property-to-the-user-entity-6ggxiddr).
## Introduction
In this step-by-step article, I will explain how you can customize the user entity class, which is available in every web application you create using the ABP framework, according to your needs. When you read this article, you will learn how to override the services of built-in modules, extend the entities, extend data transfer objects and customize the user interface in the applications you develop using the ABP framework.
-> **Note:** This article is not about customizing the `Login` page. If you have such a need, please follow [this article](../2020-05-09-Customize-the-Login-Page-for-MVC-Razor-Page-Applications/POST.md).
+> **Note:** This article is not about customizing the `Login` page. If you have such a need, please follow [this article](https://community.abp.io/posts/how-to-customize-the-login-page-for-mvc-razor-page-applications-9a40f3cd).
You can see the screenshots below which we will reach at the end of the article.
diff --git a/docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md b/docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md
index 0611aa6914..b3870ff067 100644
--- a/docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md
+++ b/docs/en/Community-Articles/2022-09-15-Grpc-Demo/POST.md
@@ -8,18 +8,16 @@ In this article, I will show you how to create a gRPC service and consume it fro
## Creating the Application
-> I will use ABP version 6.0 for this article. I am using the 6.0.0-rc.4 version since the stable version hasn't been published at the time I am writing this article. If it is released while you're reading this, do not specify the `--version` and `--preview` parameters in the following commands.
-
Install the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) if you haven't installed it yet:
````bash
-dotnet tool install -g Volo.Abp.Cli --version 6.0.0-rc.4
+dotnet tool install -g Volo.Abp.Cli
````
-or update to version 6.0.0-rc.4 if you've already installed a previous version:
+or update to the latest version if you've already installed an old version:
````bash
-dotnet tool update Volo.Abp.Cli -g --version 6.0.0-rc.4
+dotnet tool update Volo.Abp.Cli -g
````
Create an empty folder, open a command-line terminal and type the following command in the terminal window to create a new ABP solution using the ABP CLI:
diff --git a/docs/en/Migration-Guides/OpenIddict-Angular.md b/docs/en/Migration-Guides/OpenIddict-Angular.md
index e8d34cb5fc..c3ca6a7fbb 100644
--- a/docs/en/Migration-Guides/OpenIddict-Angular.md
+++ b/docs/en/Migration-Guides/OpenIddict-Angular.md
@@ -16,14 +16,14 @@
- In **MyApplication.HttpApi.Host.csproj** replace **project references**:
```csharp
-
-
+
+
```
with
```csharp
-
+
```
- In the **MyApplicationHttpApiHostModule.cs** replace usings and **module dependencies**:
@@ -117,13 +117,13 @@ This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refacto
- In **MyApplication.IdentityServer.csproj** replace **project references**:
```csharp
-
+
```
with
```csharp
-
+
```
- In the **MyApplicationIdentityServerModule.cs** replace usings and **module dependencies**:
diff --git a/docs/en/Migration-Guides/OpenIddict-Blazor-Server.md b/docs/en/Migration-Guides/OpenIddict-Blazor-Server.md
index 4db4556479..65011f6124 100644
--- a/docs/en/Migration-Guides/OpenIddict-Blazor-Server.md
+++ b/docs/en/Migration-Guides/OpenIddict-Blazor-Server.md
@@ -5,14 +5,14 @@
- In the **MyApplication.Blazor.csproj** replace **project references**:
```csharp
-
-
+
+
```
with
```csharp
-
+
```
- In the **MyApplicationBlazorModule.cs** replace usings and **module dependencies**:
@@ -108,13 +108,13 @@ This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refacto
- In **MyApplication.IdentityServer.csproj** replace **project references**:
```csharp
-
+
```
with
```csharp
-
+
```
- In **MyApplicationIdentityServerModule.cs** replace usings and **module dependencies**:
diff --git a/docs/en/Migration-Guides/OpenIddict-Blazor.md b/docs/en/Migration-Guides/OpenIddict-Blazor.md
index 0dc1c0f123..4a3e166cb9 100644
--- a/docs/en/Migration-Guides/OpenIddict-Blazor.md
+++ b/docs/en/Migration-Guides/OpenIddict-Blazor.md
@@ -34,14 +34,14 @@
- In the **MyApplication.HttpApi.Host.csproj** replace **project references**:
```csharp
-
-
+
+
```
with
```csharp
-
+
```
- In the **MyApplicationHttpApiHostModule.cs** replace usings and **module dependencies**:
@@ -136,13 +136,13 @@ This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refacto
- In **MyApplication.IdentityServer.csproj** replace **project references**:
```csharp
-
+
```
with
```csharp
-
+
```
- In the **MyApplicationIdentityServerModule.cs** replace usings and **module dependencies**:
diff --git a/docs/en/Migration-Guides/OpenIddict-Mvc.md b/docs/en/Migration-Guides/OpenIddict-Mvc.md
index e772de272c..ee7cb6b08a 100644
--- a/docs/en/Migration-Guides/OpenIddict-Mvc.md
+++ b/docs/en/Migration-Guides/OpenIddict-Mvc.md
@@ -5,14 +5,14 @@
- In **MyApplication.Web.csproj** replace **project references**:
```csharp
-
-
+
+
```
with
```csharp
-
+
```
- In **MyApplicationWebModule.cs** replace usings and **module dependencies**:
@@ -50,6 +50,23 @@
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
}
```
+
+ - In the **MyApplicationWebModule.cs** add `PreConfigureServices` like below with your application name as the audience:
+
+ ```csharp
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ PreConfigure(builder =>
+ {
+ builder.AddValidation(options =>
+ {
+ options.AddAudiences("MyApplication"); // Replace with your application name
+ options.UseLocalServer();
+ options.UseAspNetCore();
+ });
+ });
+ }
+ ```
- In **MyApplicationWebModule.cs** `OnApplicationInitialization` method **replace IdentityServer and JwtToken midwares**:
@@ -99,13 +116,13 @@ This project is renamed to **AuthServer** after v6.0.0-rc1. You can also refacto
- In **MyApplication.IdentityServer.csproj** replace **project references**:
```csharp
-
+
```
with
```csharp
-
+
```
- In **MyApplicationIdentityServerModule.cs** replace usings and **module dependencies**:
diff --git a/docs/en/Migration-Guides/OpenIddict-Step-by-Step.md b/docs/en/Migration-Guides/OpenIddict-Step-by-Step.md
index 7a36b250c9..ba6b264758 100644
--- a/docs/en/Migration-Guides/OpenIddict-Step-by-Step.md
+++ b/docs/en/Migration-Guides/OpenIddict-Step-by-Step.md
@@ -20,11 +20,11 @@ Use the `abp update` command to update your existing application. See [Upgrading
- In **MyApplication.Domain.Shared.csproj** replace **project reference**:
```csharp
-
+
```
with
```csharp
-
+
```
- In **MyApplicationDomainSharedModule.cs** replace usings and **module dependencies:**
@@ -45,15 +45,15 @@ Use the `abp update` command to update your existing application. See [Upgrading
- In **MyApplication.Domain.csproj** replace **project references**:
```csharp
-
-
+
+
```
with
```csharp
-
-
+
+
```
- In **MyApplicationDomainModule.cs** replace usings and **module dependencies**:
@@ -90,13 +90,13 @@ If you are using MongoDB, skip this step and check the *MongoDB* layer section.
- In **MyApplication.EntityFrameworkCore.csproj** replace **project reference**:
```csharp
-
+
```
with
```csharp
-
+
```
- In **MyApplicationEntityFrameworkCoreModule.cs** replace usings and **module dependencies**:
@@ -154,13 +154,13 @@ If you are using EntityFrameworkCore, skip this step and check the *EntityFramew
- In **MyApplication.MongoDB.csproj** replace **project reference**:
```csharp
-
+
```
with
```csharp
-
+
```
- In **MyApplicationMongoDbModule.cs** replace usings and **module dependencies**:
diff --git a/docs/en/Themes/LeptonXLite/Angular.md b/docs/en/Themes/LeptonXLite/Angular.md
index 506ffaf753..4079281f99 100644
--- a/docs/en/Themes/LeptonXLite/Angular.md
+++ b/docs/en/Themes/LeptonXLite/Angular.md
@@ -82,3 +82,170 @@ To change the logos and brand color of `LeptonX`, simply add the following CSS t
### Server Side
In order to migrate to LeptonX on your server side projects (Host and/or AuthServer projects), please follow the [Server Side Migration](AspNetCore.md) document.
+
+## Customization
+
+
+### Layouts
+
+The Angular version of LeptonX Lite provides **layout components** for your **user interface** on [ABP Framework Theming](https://docs.abp.io/en/abp/latest/UI/Angular/Theming). You can use layouts to **organize your user interface**. You can replace the **layout components** and some parts of the **layout components** with the [ABP replaceable component system](https://docs.abp.io/en/abp/latest/UI/Angular/Component-Replacement).
+
+
+The main responsibility of a theme is to **provide** the layouts. There are **three pre-defined layouts that must be implemented by all the themes:**
+
+* **ApplicationLayoutComponent:** The **default** layout which is used by the **main** application pages.
+
+* **AccountLayoutComponent:** Mostly used by the **account module** for **login**, **register**, **forgot password**... pages.
+
+* **EmptyLayoutComponent:** The **Minimal** layout that **has no layout components** at all.
+
+ The **Layout components** and all the replacable components are predefined in `eThemeLeptonXComponents` as enum.
+
+### How to replace a component
+
+```js
+import { ReplaceableComponentsService } from '@abp/ng.core'; // imported ReplaceableComponentsService
+import { eIdentityComponents } from '@abp/ng.identity'; // imported eIdentityComponents enum
+import { eThemeLeptonXComponents } from '@abp/ng.theme.lepton-x'; // imported eThemeLeptonXComponents enum
+
+//...
+
+@Component(/* component metadata */)
+export class AppComponent {
+ constructor(
+ private replaceableComponents: ReplaceableComponentsService, // injected the service
+ ) {
+ this.replaceableComponents.add({
+ component: YourNewApplicationLayoutComponent,
+ key: eThemeLeptonXComponents.ApplicationLayout,
+ });
+ }
+}
+```
+See the [Component Replacement](https://docs.abp.io/en/abp/latest/UI/Angular/Component-Replacement) documentation for more information on how to replace components.
+
+
+### Brand Component
+
+The **brand component** is a simple component that can be used to display your brand. It contains a **logo** and a **company name**. You can change the logo via css but if you want to change logo component, the key is `eThemeLeptonXComponents.Logo`
+
+```js
+///...
+ this.replaceableComponents.add({
+ component: YourNewLogoComponent,
+ key: eThemeLeptonXComponents.Logo,
+ });
+///...
+```
+
+
+
+
+
+## Breadcrumb Component
+
+On websites that have a lot of pages, **breadcrumb navigation** can greatly **enhance the way users find their way** around. In terms of **usability**, breadcrumbs reduce the number of actions a website **visitor** needs to take in order to get to a **higher-level page**, and they **improve** the **findability** of **website sections** and **pages**.
+
+```js
+///...
+ this.replaceableComponents.add({
+ component: YourNewSidebarComponent,
+ key: eThemeLeptonXComponents.Breadcrumb,
+ });
+///...
+```
+
+
+
+## Sidebar Menu Component
+
+Sidebar menus have been used as a **directory for Related Pages** to a **Service** offering, **Navigation** items to a **specific service** or topic and even just as **Links** the user may be interested in.
+
+```js
+///...
+ this.replaceableComponents.add({
+ component: YourNewSidebarComponent,
+ key: eThemeLeptonXComponents.Sidebar,
+ });
+///...
+```
+
+
+## Page Alerts Component
+
+Provides contextual **feedback messages** for typical user actions with a handful of **available** and **flexible** **alert messages**. Alerts are available for any length of text, as well as an **optional dismiss button**.
+
+
+```js
+///...
+ this.replaceableComponents.add({
+ component: YourNewPageAlertContainerComponent,
+ key: eThemeLeptonXComponents.PageAlertContainer,
+ });
+///...
+```
+## Toolbar Component
+
+
+Toolbar items are used to add **extra functionality to the toolbar**. The toolbar is a **horizontal bar** that **contains** a group of **toolbar items**.
+```js
+///...
+ this.replaceableComponents.add({
+ component: YourNewNavItemsComponent,
+ key: eThemeLeptonXComponents.NavItems,
+ });
+///...
+```
+
+## Toolbar Items
+There are two parts to the toolbar. The first is Language-Switch. The second is the User-Profile element. You can swap out each of these parts individually.
+
+## Language Switch Component
+
+Think about a **multi-lingual** website and the first thing that could **hit your mind** is **the language switch component**. A **navigation bar** is a **great place** to **embed a language switch**. By embedding the language switch in the navigation bar of your website, you would **make it simpler** for users to **find it** and **easily** switch the **language** **without trying to locate it across the website.**
+
+
+```js
+///...
+ this.replaceableComponents.add({
+ component: YourNewLanguagesComponent,
+ key: eThemeLeptonXComponents.Languages,
+ });
+///...
+```
+
+## User Menu Component
+
+The **User Menu** is the **menu** that **drops down** when you **click your name** or **profile picture** in the **upper right corner** of your page (**in the toolbar**). It drops down options such as **Settings**, **Logout**, etc.
+
+
+```js
+///...
+ this.replaceableComponents.add({
+ component: YourNewCurrentUserComponent,
+ key: eThemeLeptonXComponents.CurrentUser,
+ });
+///...
+```
+Note: The language selection component in the Volo app is not replaceable. It is part of the settings menu.
+
+## Mobile Navbar Component
+The **mobile navbar component** is used to display the **navbar menu on mobile devices**. The mobile navbar component is a **dropdown menu** that contains language selection and user menu.
+
+
+```js
+///...
+ this.replaceableComponents.add({
+ component: YourNewMobileNavbarComponent,
+ key: eThemeLeptonXComponents.MobileNavbar,
+ });
+///...
+```
+## Mobile Navbar Items.
+There are two parts of the mobile navbar. The mobile navbar has Language-Switch and User-Profile. You can swap out each of these parts individually.
+
+The Mobile language-Selection component key is `eThemeLeptonXComponents.MobileLanguageSelection`.
+
+The Mobile User-Profile component key is `eThemeLeptonXComponents.MobileUserProfile`.
+
+
diff --git a/docs/en/images/leptonxlite-toolbar-component.png b/docs/en/images/leptonxlite-toolbar-component.png
new file mode 100644
index 0000000000..6076c20ff0
Binary files /dev/null and b/docs/en/images/leptonxlite-toolbar-component.png differ
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en-GB.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en-GB.json
index e93e7ef25e..0e526b3df6 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en-GB.json
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en-GB.json
@@ -1,7 +1,7 @@
{
"culture": "en-GB",
"texts": {
- "GivenTenantIsNotExist": "Given tenant is not exist: {0}",
+ "GivenTenantIsNotExist": "Given tenant does not exist: {0}",
"GivenTenantIsNotAvailable": "Given tenant is not available: {0}",
"Tenant": "Tenant",
"Switch": "switch",
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
index f87b7c27b1..47e89dcaae 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
@@ -36,7 +36,7 @@ var abp = abp || {};
var $a = $('');
if (fieldItem.displayNameHtml) {
- $a.html(fieldItem.text);
+ $a.html(abp.utils.isFunction(fieldItem.text) ? fieldItem.text(record, tableInstance) : fieldItem.text);
} else {
if (fieldItem.icon !== undefined && fieldItem.icon) {
@@ -45,7 +45,7 @@ var abp = abp || {};
$a.append($("").addClass(fieldItem.iconClass + " me-1"));
}
- $a.append(htmlEncode(fieldItem.text));
+ $a.append(htmlEncode(abp.utils.isFunction(fieldItem.text) ? fieldItem.text(record, tableInstance) : fieldItem.text));
}
if (fieldItem.action) {
@@ -81,14 +81,14 @@ var abp = abp || {};
var $button = $('');
if (firstItem.displayNameHtml) {
- $button.html(firstItem.text);
+ $button.html(abp.utils.isFunction(firstItem.text) ? firstItem.text(record, tableInstance) : firstItem.text);
} else {
if (firstItem.icon !== undefined && firstItem.icon) {
$button.append($("").addClass("fa fa-" + firstItem.icon + " me-1"));
} else if (firstItem.iconClass) {
$button.append($("").addClass(firstItem.iconClass + " me-1"));
}
- $button.append(htmlEncode(firstItem.text));
+ $button.append(htmlEncode(abp.utils.isFunction(firstItem.text) ? firstItem.text(record, tableInstance) : firstItem.text));
}
if (firstItem.enabled && !firstItem.enabled({ record: record, table: tableInstance })) {
@@ -132,7 +132,7 @@ var abp = abp || {};
}
if (field.text) {
- $dropdownButton.append(htmlEncode(field.text));
+ $dropdownButton.append(htmlEncode(abp.utils.isFunction(field.text) ? field.text(record, tableInstance) : field.text));
} else {
$dropdownButton.append(htmlEncode(localize("DatatableActionDropdownDefaultText")));
}
@@ -272,7 +272,7 @@ var abp = abp || {};
}
});
- //Delay for processing indicator
+ //Delay for processing indicator
var defaultDelayForProcessingIndicator = 500;
var _existingDefaultFnPreDrawCallback = $.fn.dataTable.defaults.fnPreDrawCallback;
$.extend(true,
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js
index d62dba1809..78e98071ea 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js
@@ -99,7 +99,7 @@
// add unchecked checkboxes because serializeArray ignores them
$(this).find("input[type=checkbox]").each(function () {
if (!$(this).is(':checked')) {
- data.push({name: this.name, value: this.checked});
+ data.push({ name: this.name, value: this.checked });
}
});
@@ -118,26 +118,7 @@
});
//map to object
-
- var getVarName = function (v) {
- return v.toString().replace(/\(\)\s?=\>\s?/, '');
- }
-
- var getNames = function (index, variable) {
- var name = '';
- for (var i = 0; i <= index; i++) {
- if (i == 0) {
- name = variable + '[' + i + ']'
- } else {
- name += '][' + variable + '[' + i + ']'
- }
- }
- return name;
- }
-
var obj = {};
- var objName = getVarName(() => obj);
-
if (camelCase !== undefined ? camelCase : true) {
data.forEach(function (d) {
d.name = toCamelCase(d.name);
@@ -146,18 +127,19 @@
data.map(function (x) {
var names = x.name.split(".");
- var xName = getVarName(() => x);
- var namesName = getVarName(() => names);
+ for (var i = 0; i < names.length; i++) {
+ var o = obj;
+ for (var j = 0; j <= i; j++) {
+ if ($.isEmptyObject(o[names[j]])) {
+ o[names[j]] = {};
+ }
- var i = obj ? 0 : 1;
- for (i = 0; i < names.length; i++) {
- if (eval('!' + objName + '[' + getNames(i, '' + namesName + '') + ']')) {
- eval('' + objName + '[' + getNames(i, '' + namesName + '') + '] = {}');
- }
- }
+ if (i == names.length - 1 && j == i) {
+ o[names[j]] = x.value;
+ }
- if ($.isEmptyObject(eval('' + objName + '[' + getNames(names.length - 1, '' + namesName + '') + ']'))) {
- eval('' + objName + '[' + getNames(names.length - 1, '' + namesName + '') + '] = ' + xName + '.value');
+ o = o[names[j]]
+ }
}
});
diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/AbpSecurityHeadersMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/AbpSecurityHeadersMiddleware.cs
index 7eaa8b55e8..0245cf11bc 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/AbpSecurityHeadersMiddleware.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/AbpSecurityHeadersMiddleware.cs
@@ -1,6 +1,8 @@
+using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using Volo.Abp.DependencyInjection;
@@ -8,6 +10,13 @@ namespace Volo.Abp.AspNetCore.Security;
public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency
{
+ public IOptions Options { get; set; }
+
+ public AbpSecurityHeadersMiddleware(IOptions options)
+ {
+ Options = options;
+ }
+
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
/*X-Content-Type-Options header tells the browser to not try and “guess” what a mimetype of a resource might be, and to just take what mimetype the server has returned as fact.*/
@@ -19,6 +28,17 @@ public class AbpSecurityHeadersMiddleware : IMiddleware, ITransientDependency
/*The X-Frame-Options HTTP response header can be used to indicate whether or not a browser should be allowed to render a page in a ,