From 0cbdb692ae98d1a061d09a25be064a0188bbe70c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 29 Oct 2020 14:45:53 +0300 Subject: [PATCH] Documented The Basic Theme --- docs/en/Themes/Basic.md | 3 +- docs/en/UI/AspNetCore/Basic-Theme.md | 89 +++++++++++++++++- .../Customization-User-Interface.md | 2 +- docs/en/docs-nav.json | 8 +- docs/en/images/example-global-styles.png | Bin 0 -> 14635 bytes 5 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 docs/en/images/example-global-styles.png diff --git a/docs/en/Themes/Basic.md b/docs/en/Themes/Basic.md index a0165c803a..819138de5f 100644 --- a/docs/en/Themes/Basic.md +++ b/docs/en/Themes/Basic.md @@ -1,3 +1,2 @@ -## Basic Theme +This document has been moved to [here](../UI/AspNetCore/Basic-Theme.md). -TODO \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Basic-Theme.md b/docs/en/UI/AspNetCore/Basic-Theme.md index 3435e94a8b..5f28475f43 100644 --- a/docs/en/UI/AspNetCore/Basic-Theme.md +++ b/docs/en/UI/AspNetCore/Basic-Theme.md @@ -1,3 +1,90 @@ # ASP.NET Core MVC / Razor Pages: The Basic Theme -This document is in progress. See the [Theming](Theming.md) document. \ No newline at end of file +The Basic Theme is a theme implementation for the ASP.NET Core MVC / Razor Pages UI. It 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. See the *Customization* section. + +The Basic Theme has RTL (Right-to-Left language) support. + +> If you are looking for a professional, enterprise ready theme, you can check the [Lepton Theme](https://commercial.abp.io/themes), which is a part of the [ABP Commercial](https://commercial.abp.io/). + +> See the [Theming document](Theming.md) to learn about themes. + +## Installation + +**This theme is already installed** when you create a new solution using the [startup templates](../../Startup-Templates/Index.md). If you need to manually install it, follow the steps below: + +* Install the [Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic) NuGet package to your web project. +* Add `AbpAspNetCoreMvcUiBasicThemeModule` into the `[DependsOn(...)]` attribute for your [module class](../../Module-Development-Basics.md) in the web project. +* Install the [@abp/aspnetcore.mvc.ui.theme.basic](https://www.npmjs.com/package/@abp/aspnetcore.mvc.ui.theme.basic) NPM package to your web project (e.g. `npm install @abp/aspnetcore.mvc.ui.theme.basic` or `yarn add @abp/aspnetcore.mvc.ui.theme.basic`). +* Run `gulp` command in a command line terminal in the web project's folder. + +## Layouts + +The Basic Theme implements the standard layouts. All the layouts implement the following parts; + +* Global [Bundles](Bundling-Minification.md) +* [Page Alerts](Page-Alerts.md) +* [Layout Hooks](Layout-Hooks.md) +* [Widget](Widgets.md) Resources + +### The Application Layout + +![basic-theme-application-layout](../../images/basic-theme-application-layout.png) + +Application Layout implements the following parts, in addition to the common parts mentioned above; + +* Branding +* Main [Menu](Navigation-Menu.md) +* Main [Toolbar](Toolbars.md) with Language Selection & User Menu + +### The Account Layout + +![basic-theme-account-layout](D:\Github\abp\docs\en\images\basic-theme-account-layout.png) + +Application Layout implements the following parts, in addition to the common parts mentioned above; + +* Branding +* Main [Menu](Navigation-Menu.md) +* Main [Toolbar](Toolbars.md) with Language Selection & User Menu +* Tenant Switch Area + +### Empty Layout + +Empty layout is empty, as its name stands for. However, it implements the common parts mentioned above. + +## Customization + +You have two options two customize this theme: + +### Overriding Styles/Components + +In this approach, you continue to use the the theme as NuGet and NPM packages and customize the parts you need to. There are several ways to customize it; + +#### Override the Styles + +1. Create a CSS file in the `wwwroot` folder of your project: + +![example-global-styles](../../images/example-global-styles.png) + +2. Add the style file to the global bundle, in the `ConfigureServices` method of your [module](../../Module-Development-Basics.md): + +````csharp +Configure(options => +{ + options.StyleBundles.Configure(BasicThemeBundles.Styles.Global, bundle => + { + bundle.AddFiles("/styles/global-styles.css"); + }); +}); +```` + +#### Override the Components + +See the [User Interface Customization Guide](Customization-User-Interface.md) to learn how you can replace components, customize and extend the user interface. + +### Copy & Customize + +You can download the [source code](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic) of the Basic Theme, copy the project content into your solution, re-arrange the package/module dependencies (see the Installation section above to understand how it was installed to the project) and freely customize the theme based on your application requirements. + +## See Also + +* [Theming](Theming.md) \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Customization-User-Interface.md b/docs/en/UI/AspNetCore/Customization-User-Interface.md index c4e196fbb9..d2a1193a53 100644 --- a/docs/en/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/en/UI/AspNetCore/Customization-User-Interface.md @@ -132,7 +132,7 @@ The screenshot below was taken from the **basic theme** comes with the applicati ![bookstore-brand-area-highlighted](../../images/bookstore-brand-area-highlighted.png) -[The basic theme](../../Themes/Basic.md) defines some view components for the layout. For example, the highlighted area with the red rectangle above is called **Brand component**. You probably want to customize this component by adding your **own application logo**. Let's see how to do it. +[The basic theme](Basic-Theme.md) defines some view components for the layout. For example, the highlighted area with the red rectangle above is called **Brand component**. You probably want to customize this component by adding your **own application logo**. Let's see how to do it. First, create your logo and place under a folder in your web application. We used `wwwroot/logos/bookstore-logo.png` path. Then copy the Brand component's view ([from here](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/Default.cshtml)) from the basic theme files under the `Themes/Basic/Components/Brand` folder. The result should be similar the picture below: diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 9510da38eb..c5bc0eeb3a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -450,7 +450,13 @@ }, { "text": "Theming", - "path": "UI/AspNetCore/Theming.md" + "path": "UI/AspNetCore/Theming.md", + "items": [ + { + "text": "The Basic Theme", + "path": "UI/AspNetCore/Basic-Theme.md" + } + ] }, { "text": "JavaScript API", diff --git a/docs/en/images/example-global-styles.png b/docs/en/images/example-global-styles.png new file mode 100644 index 0000000000000000000000000000000000000000..04232aa62d43d513a516ae85ae459461237ae6f7 GIT binary patch literal 14635 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 ajGy4TMK-bK>)YLrfRvcLXqB*`|NjT#7Dy8S literal 0 HcmV?d00001