Browse Source

Merge remote-tracking branch 'abpframework/dev' into dev

pull/2974/head
liangshiwei 7 years ago
parent
commit
7b1c513d3f
  1. 2
      docs/en/Getting-Started-Angular-Template.md
  2. 2
      docs/en/Getting-Started-AspNetCore-MVC-Template.md
  3. 21
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/ButtonsDemo/Default.cshtml
  4. 153
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/CardsDemo/Default.cshtml
  5. 25
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DropdownsDemo/Default.cshtml
  6. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DynamicFormsDemo/DynamicFormsDemoViewComponent.cs
  7. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/FormElementsDemo/FormElementsDemoViewComponent.cs
  8. 14
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/ListGroupsDemo/Default.cshtml
  9. 71
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/NavbarsDemo/Default.cshtml
  10. 16
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/NavbarsDemo/NavbarsDemoViewComponent.cs
  11. 143
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/NavsDemo/Default.cshtml
  12. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/PopoversDemo/Default.cshtml
  13. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
  14. 44
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchNightlyPreviewCommand.cs
  15. 44
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchStableCommand.cs
  16. 8
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs
  17. 11
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetApiResponse.cs
  18. 15
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackage.cs
  19. 51
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs
  20. 58
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
  21. 76
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceAdder.cs
  22. 86
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceSwitcher.cs
  23. 56
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
  24. 8
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/BasicThemeDemoMenuContributor.cs
  25. 1
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Alerts/Index.cshtml
  26. 1
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Badges/Index.cshtml
  27. 1
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Buttons/Index.cshtml
  28. 7
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Navbars/Index.cshtml
  29. 17
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Navbars/Index.cshtml.cs
  30. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Navs/Index.cshtml
  31. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Tables/Index.cshtml
  32. 45
      modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sl.json
  33. 14
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/sl.json
  34. 47
      modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sl.json
  35. 10
      modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sl.json
  36. 37
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json
  37. 0
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json
  38. 26
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sl.json
  39. 7
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sl.json
  40. 102
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json
  41. 12
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sl.json
  42. 10
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sl.json
  43. 7
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sl.json
  44. 20
      modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sl.json
  45. 6
      npm/ng-packs/packages/core/src/lib/plugins/config.plugin.ts
  46. 14
      npm/ng-packs/packages/core/src/lib/services/auth.service.ts

2
docs/en/Getting-Started-Angular-Template.md

@ -123,4 +123,4 @@ The startup template includes the **identity management** and **tenant managemen
### What's Next?
* [Application development tutorial](Tutorials/Part-1.md?UI=NG)
* [Application development tutorial](Tutorials/Part-1)

2
docs/en/Getting-Started-AspNetCore-MVC-Template.md

@ -101,4 +101,4 @@ The startup template includes the **identity management** and **tenant managemen
### What's Next?
* [Application development tutorial](Tutorials/Part-1.md?UI=MVC)
* [Application development tutorial](Tutorials/Part-1.md)

21
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/ButtonsDemo/Default.cshtml

@ -26,15 +26,30 @@
<abp-component-demo-section title="Sizes" view-path="@ButtonsDemoViewComponent.ViewPath">
<abp-button size="Large" button-type="Primary" text="Large button" />
<abp-button size="Small" button-type="Primary" text="Small button" />
<abp-button size="Large" button-type="Secondary" text="Large button" />
</abp-component-demo-section>
<abp-component-demo-section title="Sizes" view-path="@ButtonsDemoViewComponent.ViewPath">
<abp-button size="Small" button-type="Primary" text="Small button" />
<abp-button size="Small" button-type="Secondary" text="Small button" />
<hr />
</abp-component-demo-section>
<abp-component-demo-section title="Sizes" view-path="@ButtonsDemoViewComponent.ViewPath">
<abp-button size="Block" button-type="Primary" text="Block level button" />
<abp-button size="Block" button-type="Secondary" text="Block level button" />
</abp-component-demo-section>
<abp-component-demo-section title="Active State" view-path="@ButtonsDemoViewComponent.ViewPath">
<abp-button size="Large" button-type="Primary" class="active" text="Primary button" />
<abp-button size="Large" button-type="Secondary" class="active" text="Button" />
</abp-component-demo-section>
<abp-component-demo-section title="Disabled State" view-path="@ButtonsDemoViewComponent.ViewPath">
<abp-button size="Large" button-type="Primary" disabled="true" text="Primary button" />
<abp-button size="Large" button-type="Secondary" disabled="true" text="Button" />
</abp-component-demo-section>
<abp-component-demo-section title="Icons" view-path="@ButtonsDemoViewComponent.ViewPath">
<abp-button button-type="Warning" icon="pencil" text="Edit" />
<abp-button button-type="Info" icon-type="FontAwesome" icon="info" text="Information" />
</abp-component-demo-section>
</abp-component-demo-section>

153
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/CardsDemo/Default.cshtml

@ -2,7 +2,7 @@
<abp-component-demo-section title="Example" view-path="@CardsDemoViewComponent.ViewPath">
<abp-card style="width: 18rem;">
<img abp-card-image="Top" src="~/imgs/demo/300x200.png" />
<img abp-card-image="Top" src="https://via.placeholder.com/300x200.png?text=Image+cap" />
<abp-card-body>
<abp-card-title>Card Title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
@ -46,7 +46,7 @@
<abp-component-demo-section title="Kitchen sink" view-path="@CardsDemoViewComponent.ViewPath">
<abp-card style="width: 18rem;">
<img abp-card-image="Top" src="~/imgs/demo/300x200.png" />
<img abp-card-image="Top" src="https://via.placeholder.com/300x200.png?text=Image+cap" />
<abp-card-body>
<abp-card-title>Card Title</abp-card-title><abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
@ -97,6 +97,155 @@
</abp-card>
</abp-component-demo-section>
<abp-component-demo-section title="Sizing with grid markup" view-path="@CardsDemoViewComponent.ViewPath">
<div class="row">
<div class="col-md-6">
<abp-card>
<abp-card-header>Quote</abp-card-header>
<abp-card-body>
<abp-blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
<footer>Someone famous in Source Title</footer>
</abp-blockquote>
</abp-card-body>
</abp-card>
</div>
<div class="col-md-6">
<abp-card class="text-center">
<abp-card-header>Featured</abp-card-header>
<abp-card-body>
<abp-card-title> Special title treatment</abp-card-title>
<abp-card-text>With supporting text below as a natural lead-in to additional content.</abp-card-text>
<a abp-button="Primary" href="#"> Go somewhere</a>
</abp-card-body>
<abp-card-footer class="text-muted"> 2 days ago</abp-card-footer>
</abp-card>
</div>
</div>
</abp-component-demo-section>
<abp-component-demo-section title="Sizing with utilities" view-path="@CardsDemoViewComponent.ViewPath">
<abp-card class="w-75">
<abp-card-header>Quote</abp-card-header>
<abp-card-body>
<abp-blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
<footer>Someone famous in Source Title</footer>
</abp-blockquote>
</abp-card-body>
</abp-card>
<abp-card class="text-center w-50">
<abp-card-header>Featured</abp-card-header>
<abp-card-body>
<abp-card-title> Special title treatment</abp-card-title>
<abp-card-text>With supporting text below as a natural lead-in to additional content.</abp-card-text>
<a abp-button="Primary" href="#"> Go somewhere</a>
</abp-card-body>
<abp-card-footer class="text-muted"> 2 days ago</abp-card-footer>
</abp-card>
</abp-component-demo-section>
<abp-component-demo-section title="Text alignment" view-path="@CardsDemoViewComponent.ViewPath">
<abp-card class="text-left" style="width: 18rem;">
<abp-card-body>
<abp-card-title> Special title treatment</abp-card-title>
<abp-card-text>With supporting text below as a natural lead-in to additional content.</abp-card-text>
<a abp-button="Primary" href="#"> Go somewhere</a>
</abp-card-body>
</abp-card>
<abp-card class="text-center" style="width: 18rem;">
<abp-card-body>
<abp-card-title> Special title treatment</abp-card-title>
<abp-card-text>With supporting text below as a natural lead-in to additional content.</abp-card-text>
<a abp-button="Primary" href="#"> Go somewhere</a>
</abp-card-body>
</abp-card>
<abp-card class="text-right" style="width: 18rem;">
<abp-card-body>
<abp-card-title> Special title treatment</abp-card-title>
<abp-card-text>With supporting text below as a natural lead-in to additional content.</abp-card-text>
<a abp-button="Primary" href="#"> Go somewhere</a>
</abp-card-body>
</abp-card>
</abp-component-demo-section>
<abp-component-demo-section title="Image overlays" view-path="@CardsDemoViewComponent.ViewPath">
<abp-card>
<img abp-card-image="Top" src="https://via.placeholder.com/1150x270.png?text=Image+cap" />
<div class="card-img-overlay">
<abp-card-title>Card Title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
<a abp-button="Primary" href="#"> Go somewhere</a>
</div>
</abp-card>
</abp-component-demo-section>
<abp-component-demo-section title="Border" view-path="@CardsDemoViewComponent.ViewPath">
<abp-card class="border-primary mb-3" style="width: 18rem;">
<abp-card-header>Header</abp-card-header>
<abp-card-body class="text-primary">
<abp-card-title>Primary card title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
</abp-card>
<abp-card class="border-secondary mb-3" style="width: 18rem;">
<abp-card-header>Header</abp-card-header>
<abp-card-body class="text-secondary">
<abp-card-title>Secondary card title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
</abp-card>
<abp-card class="border-success mb-3" style="width: 18rem;">
<abp-card-header>Header</abp-card-header>
<abp-card-body class="text-success">
<abp-card-title>Success card title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
</abp-card>
<abp-card class="border-danger mb-3" style="width: 18rem;">
<abp-card-header>Header</abp-card-header>
<abp-card-body class="text-danger">
<abp-card-title>Danger card title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
</abp-card>
<abp-card class="border-warning mb-3" style="width: 18rem;">
<abp-card-header>Header</abp-card-header>
<abp-card-body class="text-warning">
<abp-card-title>Warning card title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
</abp-card>
<abp-card class="border-info mb-3" style="width: 18rem;">
<abp-card-header>Header</abp-card-header>
<abp-card-body class="text-info">
<abp-card-title>Info card title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
</abp-card>
<abp-card class="border-light mb-3" style="width: 18rem;">
<abp-card-header>Header</abp-card-header>
<abp-card-body>
<abp-card-title>Light card title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
</abp-card>
<abp-card class="border-dark mb-3" style="width: 18rem;">
<abp-card-header>Header</abp-card-header>
<abp-card-body class="text-dark">
<abp-card-title>Dark card title</abp-card-title>
<abp-card-text>Some quick example text to build on the card title and make up the bulk of the card's content.</abp-card-text>
</abp-card-body>
</abp-card>
</abp-component-demo-section>
<abp-component-demo-section title="Card Styles" view-path="@CardsDemoViewComponent.ViewPath">
<abp-card background="Primary" class="mb-3" style="max-width: 18rem;">
<abp-card-header>Featured</abp-card-header>

25
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DropdownsDemo/Default.cshtml

@ -10,9 +10,6 @@
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-component-demo-section>
<abp-component-demo-section title="Single button 2" view-path="@DropdownsDemoViewComponent.ViewPath">
<abp-dropdown>
<abp-dropdown-button button-type="Secondary" link="true" text="Dropdown button" />
<abp-dropdown-menu>
@ -21,9 +18,6 @@
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-component-demo-section>
<abp-component-demo-section title="Single button 3" view-path="@DropdownsDemoViewComponent.ViewPath">
<abp-dropdown>
<abp-dropdown-button button-type="Danger" text="Dropdown button" />
<abp-dropdown-menu>
@ -47,9 +41,6 @@
<abp-dropdown-item href="#">Separated link</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-component-demo-section>
<abp-component-demo-section title="Split button 2" view-path="@DropdownsDemoViewComponent.ViewPath">
<abp-dropdown>
<abp-dropdown-button size="Large" button-type="Secondary" text="Large button" />
<abp-dropdown-menu>
@ -59,7 +50,8 @@
<abp-dropdown-divider />
<abp-dropdown-item href="#">Separated link</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown><abp-dropdown>
</abp-dropdown>
<abp-dropdown>
<abp-dropdown-button size="Large" button-type="Secondary" dropdown-style="Split" text="Large split button" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
@ -68,7 +60,8 @@
<abp-dropdown-divider />
<abp-dropdown-item href="#">Separated link</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown><abp-dropdown>
</abp-dropdown>
<abp-dropdown>
<abp-dropdown-button size="Small" button-type="Secondary" text="Small button" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
@ -77,7 +70,8 @@
<abp-dropdown-divider />
<abp-dropdown-item href="#">Separated link</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown><abp-dropdown>
</abp-dropdown>
<abp-dropdown>
<abp-dropdown-button size="Small" button-type="Secondary" dropdown-style="Split" text="Small split button" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
@ -89,6 +83,7 @@
</abp-dropdown>
</abp-component-demo-section>
<abp-component-demo-section title="Directions" view-path="@DropdownsDemoViewComponent.ViewPath">
<abp-dropdown direction="Up">
<abp-dropdown-button button-type="Secondary" text="Dropup" />
@ -97,14 +92,16 @@
<abp-dropdown-item href="#">Another action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown><abp-dropdown direction="Right">
</abp-dropdown>
<abp-dropdown direction="Right">
<abp-dropdown-button button-type="Secondary" text="dropright" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
<abp-dropdown-item href="#">Another action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown><abp-dropdown direction="Right">
</abp-dropdown>
<abp-dropdown direction="Right">
<abp-dropdown-button button-type="Secondary" dropdown-style="Split" text="Split right" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/DynamicFormsDemo/DynamicFormsDemoViewComponent.cs

@ -6,7 +6,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
[Widget]
public class DynamicFormsDemoViewComponent : AbpViewComponent
{
public const string ViewPath = "/Views/Components/Themes/Shared/Demos/DynamicForms/Default.cshtml";
public const string ViewPath = "/Views/Components/Themes/Shared/Demos/DynamicFormsDemo/Default.cshtml";
public IViewComponentResult Invoke()
{

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/FormElementsDemo/FormElementsDemoViewComponent.cs

@ -6,7 +6,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.S
[Widget]
public class FormElementsDemoViewComponent : AbpViewComponent
{
public const string ViewPath = "/Views/Components/Themes/Shared/Demos/FormElements/Default.cshtml";
public const string ViewPath = "/Views/Components/Themes/Shared/Demos/FormElementsDemo/Default.cshtml";
public IViewComponentResult Invoke()
{

14
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/ListGroupsDemo/Default.cshtml

@ -18,7 +18,7 @@
</abp-list-group>
</abp-component-demo-section>
<abp-component-demo-section title="Links and buttons" view-path="@ListGroupsDemoViewComponent.ViewPath">
<abp-component-demo-section title="Links" view-path="@ListGroupsDemoViewComponent.ViewPath">
<abp-list-group>
<abp-list-group-item href="#" active="true">Cras justo odio</abp-list-group-item>
<abp-list-group-item href="#">Dapibus ac facilisis in</abp-list-group-item>
@ -27,12 +27,12 @@
</abp-list-group>
</abp-component-demo-section>
<abp-component-demo-section title="Links and buttons 2" view-path="@ListGroupsDemoViewComponent.ViewPath">
<abp-component-demo-section title="Buttons" view-path="@ListGroupsDemoViewComponent.ViewPath">
<abp-list-group>
<abp-list-group-item href="#" active="true">Cras justo odio</abp-list-group-item>
<abp-list-group-item href="#">Dapibus ac facilisis in</abp-list-group-item>
<abp-list-group-item href="#">Morbi leo risus</abp-list-group-item>
<abp-list-group-item href="#" disabled="true">Vestibulum at eros</abp-list-group-item>
<abp-list-group-item tag-type="Button" active="true">Cras justo odio</abp-list-group-item>
<abp-list-group-item tag-type="Button">Dapibus ac facilisis in</abp-list-group-item>
<abp-list-group-item tag-type="Button">Morbi leo risus</abp-list-group-item>
<abp-list-group-item tag-type="Button" disabled="true">Vestibulum at eros</abp-list-group-item>
</abp-list-group>
</abp-component-demo-section>
@ -59,7 +59,7 @@
</abp-list-group>
</abp-component-demo-section>
<abp-component-demo-section title="Contextual classes 2" view-path="@ListGroupsDemoViewComponent.ViewPath">
<abp-component-demo-section title="Contextual classes with link" view-path="@ListGroupsDemoViewComponent.ViewPath">
<abp-list-group>
<abp-list-group-item href="#">Cras justo odio</abp-list-group-item>
<abp-list-group-item href="#" type="Primary">A simple Primary list group item</abp-list-group-item>

71
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/NavbarsDemo/Default.cshtml

@ -0,0 +1,71 @@
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.NavbarsDemo
<abp-component-demo-section title="Example" view-path="@NavbarsDemoViewComponent.ViewPath">
<abp-nav-bar size="Lg" navbar-style="Dark_Dark">
<a abp-navbar-brand href="#">Navbar</a>
<abp-navbar-toggle>
<abp-navbar-nav>
<abp-nav-item active="true">
<a abp-nav-link href="#">Home <span class="sr-only">(current)</span></a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">Link</a>
</abp-nav-item>
<abp-nav-item dropdown="true">
<abp-dropdown>
<abp-dropdown-button nav-link="true" text="Dropdown" />
<abp-dropdown-menu>
<abp-dropdown-header>Dropdown header</abp-dropdown-header>
<abp-dropdown-item href="#" active="true">Action</abp-dropdown-item>
<abp-dropdown-item href="#" disabled="true">Another disabled action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
<abp-dropdown-divider />
<abp-dropdown-item href="#">Separated link</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link disabled="true" href="#">Disabled</a>
</abp-nav-item>
</abp-navbar-nav>
<span abp-navbar-text>
Sample Text
</span>
</abp-navbar-toggle>
</abp-nav-bar>
</abp-component-demo-section>
<abp-component-demo-section title="Example" view-path="@NavbarsDemoViewComponent.ViewPath">
<abp-nav-bar size="Lg" navbar-style="Dark_Primary">
<a abp-navbar-brand href="#">Navbar</a>
<abp-navbar-toggle>
<abp-navbar-nav>
<abp-nav-item active="true">
<a abp-nav-link href="#">Home <span class="sr-only">(current)</span></a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">Link</a>
</abp-nav-item>
<abp-nav-item dropdown="true">
<abp-dropdown>
<abp-dropdown-button nav-link="true" text="Dropdown" />
<abp-dropdown-menu>
<abp-dropdown-header>Dropdown header</abp-dropdown-header>
<abp-dropdown-item href="#" active="true">Action</abp-dropdown-item>
<abp-dropdown-item href="#" disabled="true">Another disabled action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
<abp-dropdown-divider />
<abp-dropdown-item href="#">Separated link</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link disabled="true" href="#">Disabled</a>
</abp-nav-item>
</abp-navbar-nav>
<span abp-navbar-text>
Sample Text
</span>
</abp-navbar-toggle>
</abp-nav-bar>
</abp-component-demo-section>

16
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/NavbarsDemo/NavbarsDemoViewComponent.cs

@ -0,0 +1,16 @@
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.Widgets;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.NavbarsDemo
{
[Widget]
public class NavbarsDemoViewComponent : AbpViewComponent
{
public const string ViewPath = "/Views/Components/Themes/Shared/Demos/NavbarsDemo/Default.cshtml";
public IViewComponentResult Invoke()
{
return View(ViewPath);
}
}
}

143
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/NavsDemo/Default.cshtml

@ -8,6 +8,16 @@
<abp-nav-item>
<a abp-nav-link href="#">Longer nav link</a>
</abp-nav-item>
<abp-nav-item class="dropdown">
<abp-dropdown>
<abp-dropdown-button class="text-primary" text="Dropdown button" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
<abp-dropdown-item href="#">Another action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">link</a>
</abp-nav-item>
@ -17,37 +27,104 @@
</abp-nav>
</abp-component-demo-section>
<abp-component-demo-section title="Base nav 2" view-path="@NavsDemoViewComponent.ViewPath">
<abp-nav-bar size="Lg" navbar-style="Dark_Warning">
<a abp-navbar-brand href="#">Navbar</a>
<abp-navbar-toggle>
<abp-navbar-nav>
<abp-nav-item active="true">
<a abp-nav-link href="#">Home <span class="sr-only">(current)</span></a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">Link</a>
</abp-nav-item>
<abp-nav-item dropdown="true">
<abp-dropdown>
<abp-dropdown-button nav-link="true" text="Dropdown" />
<abp-dropdown-menu>
<abp-dropdown-header>Dropdown header</abp-dropdown-header>
<abp-dropdown-item href="#" active="true">Action</abp-dropdown-item>
<abp-dropdown-item href="#" disabled="true">Another disabled action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
<abp-dropdown-divider />
<abp-dropdown-item href="#">Separated link</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link disabled="true" href="#">Disabled</a>
</abp-nav-item>
</abp-navbar-nav>
<span abp-navbar-text>
Sample Text
</span>
</abp-navbar-toggle>
</abp-nav-bar>
<abp-component-demo-section title="Alignment" view-path="@NavsDemoViewComponent.ViewPath">
<abp-nav nav-style="Pill" align="Start">
<abp-nav-item>
<a abp-nav-link active="true" href="#">Active</a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">Longer nav link</a>
</abp-nav-item>
<abp-nav-item class="dropdown">
<abp-dropdown>
<abp-dropdown-button class="text-primary" text="Dropdown button" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
<abp-dropdown-item href="#">Another action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">link</a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link disabled="true" href="#">disabled</a>
</abp-nav-item>
</abp-nav>
<abp-nav nav-style="Pill" align="Center">
<abp-nav-item>
<a abp-nav-link active="true" href="#">Active</a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">Longer nav link</a>
</abp-nav-item>
<abp-nav-item class="dropdown">
<abp-dropdown>
<abp-dropdown-button class="text-primary" text="Dropdown button" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
<abp-dropdown-item href="#">Another action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">link</a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link disabled="true" href="#">disabled</a>
</abp-nav-item>
</abp-nav>
<abp-nav nav-style="Pill" align="End">
<abp-nav-item>
<a abp-nav-link active="true" href="#">Active</a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">Longer nav link</a>
</abp-nav-item>
<abp-nav-item class="dropdown">
<abp-dropdown>
<abp-dropdown-button class="text-primary" text="Dropdown button" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
<abp-dropdown-item href="#">Another action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">link</a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link disabled="true" href="#">disabled</a>
</abp-nav-item>
</abp-nav>
</abp-component-demo-section>
<abp-component-demo-section title="Vertical" view-path="@NavsDemoViewComponent.ViewPath">
<abp-nav nav-style="PillVertical" align="Start">
<abp-nav-item>
<a abp-nav-link active="true" href="#">Active</a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">Longer nav link</a>
</abp-nav-item>
<abp-nav-item class="dropdown">
<abp-dropdown>
<abp-dropdown-button class="text-primary" text="Dropdown button" />
<abp-dropdown-menu>
<abp-dropdown-item href="#">Action</abp-dropdown-item>
<abp-dropdown-item href="#">Another action</abp-dropdown-item>
<abp-dropdown-item href="#">Something else here</abp-dropdown-item>
</abp-dropdown-menu>
</abp-dropdown>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link href="#">link</a>
</abp-nav-item>
<abp-nav-item>
<a abp-nav-link disabled="true" href="#">disabled</a>
</abp-nav-item>
</abp-nav>
</abp-component-demo-section>

8
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Views/Components/Themes/Shared/Demos/PopoversDemo/Default.cshtml

@ -1,16 +1,16 @@
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.PopoversDemo
<abp-component-demo-section title="Example" view-path="@PopoversDemoViewComponent.ViewPath">
<abp-button abp-popover="Hi, i'm popover content!">
<abp-button button-type="Outline_Secondary" abp-popover="Hi, i'm popover content!">
Popover Default
</abp-button>
<abp-button abp-popover-top="Hi, i'm popover content!" title="Popover Title">
<abp-button button-type="Outline_Secondary" abp-popover-top="Hi, i'm popover content!" title="Popover Title">
Popover With Title
</abp-button>
<abp-button abp-popover-right="Hi, i'm popover content!" title="Popover Title" dismissible="true">
<abp-button button-type="Outline_Secondary" abp-popover-right="Hi, i'm popover content!" title="Popover Title" dismissible="true">
Dismissible Popover
</abp-button>
<abp-button abp-popover-left="Hi, i'm popover content!" title="Popover Title" disabled="true">
<abp-button button-type="Outline_Danger" abp-popover-left="Hi, i'm popover content!" title="Popover Title" disabled="true">
Disabled Popover
</abp-button>
</abp-component-demo-section>

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs

@ -30,6 +30,8 @@ namespace Volo.Abp.Cli
options.Commands["login"] = typeof(LoginCommand);
options.Commands["logout"] = typeof(LogoutCommand);
options.Commands["suite"] = typeof(SuiteCommand);
options.Commands["switch-to-preview"] = typeof(SwitchNightlyPreviewCommand);
options.Commands["switch-to-stable"] = typeof(SwitchStableCommand);
});
}
}

44
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchNightlyPreviewCommand.cs

@ -0,0 +1,44 @@
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.Commands
{
public class SwitchNightlyPreviewCommand : IConsoleCommand, ITransientDependency
{
private readonly PackageSourceSwitcher _packageSourceSwitcher;
public SwitchNightlyPreviewCommand(PackageSourceSwitcher packageSourceSwitcher)
{
_packageSourceSwitcher = packageSourceSwitcher;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
await _packageSourceSwitcher.SwitchToPreview(commandLineArgs);
}
public string GetUsageInfo()
{
var sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("Usage:");
sb.AppendLine(" abp switch-to-preview [options]");
sb.AppendLine("");
sb.AppendLine("Options:");
sb.AppendLine("-sp|--solution-path");
sb.AppendLine("");
sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI");
return sb.ToString();
}
public string GetShortDescription()
{
return "Switches packages to nightly preview ABP version.";
}
}
}

44
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchStableCommand.cs

@ -0,0 +1,44 @@
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.Commands
{
public class SwitchStableCommand : IConsoleCommand, ITransientDependency
{
private readonly PackageSourceSwitcher _packageSourceSwitcher;
public SwitchStableCommand(PackageSourceSwitcher packageSourceSwitcher)
{
_packageSourceSwitcher = packageSourceSwitcher;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
await _packageSourceSwitcher.SwitchToStable(commandLineArgs);
}
public string GetUsageInfo()
{
var sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("Usage:");
sb.AppendLine(" abp switch-to-stable [options]");
sb.AppendLine("");
sb.AppendLine("Options:");
sb.AppendLine("-sp|--solution-path");
sb.AppendLine("");
sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI");
return sb.ToString();
}
public string GetShortDescription()
{
return "Switches packages to stable ABP version from preview version.";
}
}
}

8
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs

@ -42,13 +42,13 @@ namespace Volo.Abp.Cli.Commands
if (updateNpm || !updateNuget)
{
UpdateNpmPackages(directory);
await UpdateNpmPackages(directory);
}
}
private void UpdateNpmPackages(string directory)
private async Task UpdateNpmPackages(string directory)
{
_npmPackagesUpdater.Update(directory);
await _npmPackagesUpdater.Update(directory);
}
private async Task UpdateNugetPackages(CommandLineArgs commandLineArgs, string directory)
@ -94,7 +94,7 @@ namespace Volo.Abp.Cli.Commands
sb.AppendLine("");
sb.AppendLine("Usage:");
sb.AppendLine("");
sb.AppendLine(" abp update [options]");
sb.AppendLine(" abp update [options]");
sb.AppendLine("");
sb.AppendLine("Options:");
sb.AppendLine("-p|--include-previews (if supported by the template)");

11
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetApiResponse.cs

@ -0,0 +1,11 @@
using System.Collections.Generic;
namespace Volo.Abp.Cli.ProjectModification
{
public class MyGetApiResponse
{
public string _date { get; set; }
public List<MyGetPackage> Packages { get; set; }
}
}

15
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackage.cs

@ -0,0 +1,15 @@
using System.Collections.Generic;
namespace Volo.Abp.Cli.ProjectModification
{
public class MyGetPackage
{
public string PackageType { get; set; }
public string Id { get; set; }
public List<string> Versions { get; set; }
public List<string> Dates { get; set; }
}
}

51
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs

@ -0,0 +1,51 @@
using System;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Newtonsoft.Json;
using Volo.Abp.Cli.Http;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.ProjectModification
{
public class MyGetPackageListFinder : ISingletonDependency
{
private MyGetApiResponse _response;
public ILogger<MyGetPackageListFinder> Logger { get; set; }
public MyGetPackageListFinder()
{
Logger = NullLogger<MyGetPackageListFinder>.Instance;
}
public async Task<MyGetApiResponse> GetPackages()
{
if (_response != null)
{
return _response;
}
try
{
using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
{
var responseMessage = await client.GetAsync(
$"{CliUrls.WwwAbpIo}api/myget/packages/"
);
_response = JsonConvert.DeserializeObject<MyGetApiResponse>(Encoding.Default.GetString(await responseMessage.Content.ReadAsByteArrayAsync()));
}
}
catch (Exception)
{
Logger.LogError("Unable to get latest preview version.");
throw;
}
return _response;
}
}
}

58
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Newtonsoft.Json;
@ -18,18 +19,20 @@ namespace Volo.Abp.Cli.ProjectModification
private readonly PackageJsonFileFinder _packageJsonFileFinder;
private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker;
private readonly MyGetPackageListFinder _myGetPackageListFinder;
private readonly Dictionary<string, string> _fileVersionStorage = new Dictionary<string, string>();
public NpmPackagesUpdater(PackageJsonFileFinder packageJsonFileFinder, NpmGlobalPackagesChecker npmGlobalPackagesChecker)
public NpmPackagesUpdater(PackageJsonFileFinder packageJsonFileFinder, NpmGlobalPackagesChecker npmGlobalPackagesChecker, MyGetPackageListFinder myGetPackageListFinder)
{
_packageJsonFileFinder = packageJsonFileFinder;
_npmGlobalPackagesChecker = npmGlobalPackagesChecker;
_myGetPackageListFinder = myGetPackageListFinder;
Logger = NullLogger<NpmPackagesUpdater>.Instance;
}
public void Update(string rootDirectory)
public async Task Update(string rootDirectory, bool includePreviews = false, bool switchToStable = false)
{
var fileList = _packageJsonFileFinder.Find(rootDirectory);
@ -42,7 +45,7 @@ namespace Volo.Abp.Cli.ProjectModification
foreach (var file in fileList)
{
UpdatePackagesInFile(file, out var packagesUpdated);
var packagesUpdated = await UpdatePackagesInFile(file, includePreviews, switchToStable);
if (packagesUpdated)
{
@ -64,21 +67,21 @@ namespace Volo.Abp.Cli.ProjectModification
return File.Exists(Path.Combine(fileDirectory, "angular.json"));
}
protected virtual void UpdatePackagesInFile(string file, out bool packagesUpdated)
protected virtual async Task<bool> UpdatePackagesInFile(string file, bool includePreviews = false, bool switchToStable = false)
{
packagesUpdated = false;
var packagesUpdated = false;
var fileContent = File.ReadAllText(file);
var packageJson = JObject.Parse(fileContent);
var abpPackages = GetAbpPackagesFromPackageJson(packageJson);
if (!abpPackages.Any())
{
return;
return packagesUpdated;
}
foreach (var abpPackage in abpPackages)
{
TryUpdatePackage(file, abpPackage, out var updated);
var updated = await TryUpdatePackage(file, abpPackage, includePreviews, switchToStable);
if (updated)
{
@ -89,18 +92,23 @@ namespace Volo.Abp.Cli.ProjectModification
var modifiedFileContent = packageJson.ToString(Formatting.Indented);
File.WriteAllText(file, modifiedFileContent);
return packagesUpdated;
}
protected virtual void TryUpdatePackage(string file, JProperty package, out bool updated)
protected virtual async Task<bool> TryUpdatePackage(string file, JProperty package,
bool includePreviews = false, bool switchToStable = false)
{
var version = GetLatestVersion(package);
var updated = false;
var currentVersion = (string)package.Value;
var version = await GetLatestVersion(package, currentVersion, includePreviews, switchToStable);
var versionWithPrefix = $"^{version}";
if (versionWithPrefix == (string)package.Value)
if (versionWithPrefix == currentVersion)
{
updated = false;
return;
return false;
}
else
{
@ -110,25 +118,41 @@ namespace Volo.Abp.Cli.ProjectModification
package.Value.Replace(versionWithPrefix);
Logger.LogInformation($"Updated {package.Name} to {version} in {file.Replace(Directory.GetCurrentDirectory(), "")}.");
return updated;
}
protected virtual string GetLatestVersion(JProperty package)
protected virtual async Task<string> GetLatestVersion(JProperty package, string currentVersion,
bool includePreviews = false, bool switchToStable = false)
{
if (_fileVersionStorage.ContainsKey(package.Name))
{
return _fileVersionStorage[package.Name];
}
var version = CmdHelper.RunCmdAndGetOutput($"npm show {package.Name} version");
string newVersion = currentVersion;
if (includePreviews || (!switchToStable && currentVersion.Contains("-preview")))
{
var mygetPackage = (await _myGetPackageListFinder.GetPackages()).Packages.FirstOrDefault(p => p.Id == package.Name);
if (mygetPackage != null)
{
newVersion = mygetPackage.Versions.Last();
}
}
else
{
newVersion = CmdHelper.RunCmdAndGetOutput($"npm show {package.Name} version");
}
_fileVersionStorage[package.Name] = version;
_fileVersionStorage[package.Name] = newVersion;
return version;
return newVersion;
}
protected virtual List<JProperty> GetAbpPackagesFromPackageJson(JObject fileObject)
{
var dependencyList = new [] { "dependencies", "devDependencies", "peerDependencies" };
var dependencyList = new[] { "dependencies", "devDependencies", "peerDependencies" };
var abpPackages = new List<JProperty>();
foreach (var dependencyListName in dependencyList)

76
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceAdder.cs

@ -0,0 +1,76 @@
using System;
using System.IO;
using System.Xml;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.ProjectModification
{
public class PackageSourceAdder: ITransientDependency
{
public ILogger<PackageSourceAdder> Logger { get; set; }
public PackageSourceAdder()
{
Logger = NullLogger<PackageSourceAdder>.Instance;
}
public void Add(string sourceKey, string sourceValue)
{
var nugetConfigPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"NuGet", "NuGet.Config");
if (!File.Exists(nugetConfigPath))
{
return;
}
var fileContent = File.ReadAllText(nugetConfigPath);
if (fileContent.Contains($"\"{sourceValue}\""))
{
return;
}
Logger.LogInformation($"Adding \"{sourceValue}\" ({sourceKey}) to nuget sources...");
try
{
var doc = new XmlDocument() { PreserveWhitespace = true };
doc.Load(GenerateStreamFromString(fileContent));
var sourceNodes = doc.SelectNodes("/configuration/packageSources");
var newNode = doc.CreateElement("add");
var includeAttr = doc.CreateAttribute("key");
includeAttr.Value = sourceKey;
newNode.Attributes.Append(includeAttr);
var versionAttr = doc.CreateAttribute("value");
versionAttr.Value = sourceValue;
newNode.Attributes.Append(versionAttr);
sourceNodes?[0]?.AppendChild(newNode);
File.WriteAllText(nugetConfigPath, doc.OuterXml);
}
catch
{
Logger.LogWarning($"Adding \"{sourceValue}\" ({sourceKey}) to nuget sources FAILED.");
}
}
private static Stream GenerateStreamFromString(string s)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
}
}

86
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceSwitcher.cs

@ -0,0 +1,86 @@
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli.Args;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.ProjectModification
{
public class PackageSourceSwitcher : ITransientDependency
{
private readonly PackageSourceAdder _packageSourceAdder;
private readonly NpmPackagesUpdater _npmPackagesUpdater;
private readonly VoloNugetPackagesVersionUpdater _nugetPackagesVersionUpdater;
public ILogger<PackageSourceSwitcher> Logger { get; set; }
public PackageSourceSwitcher(PackageSourceAdder packageSourceAdder,
NpmPackagesUpdater npmPackagesUpdater,
VoloNugetPackagesVersionUpdater nugetPackagesVersionUpdater)
{
_packageSourceAdder = packageSourceAdder;
_npmPackagesUpdater = npmPackagesUpdater;
_nugetPackagesVersionUpdater = nugetPackagesVersionUpdater;
Logger = NullLogger<PackageSourceSwitcher>.Instance;
}
public async Task SwitchToPreview(CommandLineArgs commandLineArgs)
{
_packageSourceAdder.Add("ABP Nightly", "https://www.myget.org/F/abp-nightly/api/v3/index.json");
await _nugetPackagesVersionUpdater.UpdateSolutionAsync(
GetSolutionPath(commandLineArgs),
true);
await _npmPackagesUpdater.Update(
Path.GetFileName(GetSolutionPath(commandLineArgs)),
true);
}
public async Task SwitchToStable(CommandLineArgs commandLineArgs)
{
await _nugetPackagesVersionUpdater.UpdateSolutionAsync(
GetSolutionPath(commandLineArgs),
false,
true);
await _npmPackagesUpdater.Update(
Path.GetFileName(GetSolutionPath(commandLineArgs)),
false,
true);
}
private string GetSolutionPath(CommandLineArgs commandLineArgs)
{
var solutionPath = commandLineArgs.Options.GetOrNull(Options.SolutionPath.Short, Options.SolutionPath.Long);
if (solutionPath == null)
{
try
{
solutionPath = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.sln").Single();
}
catch (Exception)
{
Logger.LogError("There is no solution or more that one solution in current directory.");
throw;
}
}
return solutionPath;
}
public static class Options
{
public static class SolutionPath
{
public const string Short = "sp";
public const string Long = "solution-path";
}
}
}
}

56
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs

@ -1,6 +1,7 @@
using System;
using NuGet.Versioning;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml;
using Volo.Abp.Cli.NuGet;
@ -13,37 +14,39 @@ namespace Volo.Abp.Cli.ProjectModification
public class VoloNugetPackagesVersionUpdater : ITransientDependency
{
private readonly NuGetService _nuGetService;
private readonly MyGetPackageListFinder _myGetPackageListFinder;
public ILogger<VoloNugetPackagesVersionUpdater> Logger { get; set; }
public VoloNugetPackagesVersionUpdater(NuGetService nuGetService)
public VoloNugetPackagesVersionUpdater(NuGetService nuGetService, MyGetPackageListFinder myGetPackageListFinder)
{
_nuGetService = nuGetService;
_myGetPackageListFinder = myGetPackageListFinder;
Logger = NullLogger<VoloNugetPackagesVersionUpdater>.Instance;
}
public async Task UpdateSolutionAsync(string solutionPath, bool includePreviews)
public async Task UpdateSolutionAsync(string solutionPath, bool includePreviews = false, bool switchToStable = false)
{
var projectPaths = ProjectFinder.GetProjectFiles(solutionPath);
foreach (var filePath in projectPaths)
{
await UpdateInternalAsync(filePath, includePreviews);
await UpdateInternalAsync(filePath, includePreviews, switchToStable);
}
}
public async Task UpdateProjectAsync(string projectPath, bool includePreviews)
public async Task UpdateProjectAsync(string projectPath, bool includePreviews = false, bool switchToStable = false)
{
await UpdateInternalAsync(projectPath, includePreviews);
await UpdateInternalAsync(projectPath, includePreviews, switchToStable);
}
protected virtual async Task UpdateInternalAsync(string projectPath, bool includePreviews)
protected virtual async Task UpdateInternalAsync(string projectPath, bool includePreviews = false, bool switchToStable = false)
{
var fileContent = File.ReadAllText(projectPath);
File.WriteAllText(projectPath, await UpdateVoloPackagesAsync(fileContent, includePreviews));
File.WriteAllText(projectPath, await UpdateVoloPackagesAsync(fileContent, includePreviews, switchToStable));
}
private async Task<string> UpdateVoloPackagesAsync(string content, bool includePreviews)
private async Task<string> UpdateVoloPackagesAsync(string content, bool includePreviews = false, bool switchToStable = false)
{
string packageId = null;
@ -67,23 +70,44 @@ namespace Volo.Abp.Cli.ProjectModification
continue;
}
var versionAttribute = package.Attributes["Version"];
packageId = package.Attributes["Include"].Value;
var packageVersion = SemanticVersion.Parse(versionAttribute.Value);
var versionAttribute = package.Attributes["Version"];
var currentVersion = versionAttribute.Value;
var packageVersion = SemanticVersion.Parse(currentVersion);
Logger.LogDebug("Checking package: \"{0}\" - Current version: {1}", packageId, packageVersion);
var latestVersion = await _nuGetService.GetLatestVersionOrNullAsync(packageId, includePreviews);
if (latestVersion != null && packageVersion < latestVersion)
if (includePreviews || (currentVersion.Contains("-preview") && !switchToStable))
{
Logger.LogInformation("Updating package \"{0}\" from v{1} to v{2}.", packageId, packageVersion.ToString(), latestVersion.ToString());
versionAttribute.Value = latestVersion.ToString();
var latestVersion = (await _myGetPackageListFinder.GetPackages()).Packages
.FirstOrDefault(p => p.Id == packageId)
?.Versions.LastOrDefault();
if (currentVersion != latestVersion)
{
Logger.LogInformation("Updating package \"{0}\" from v{1} to v{2}.", packageId, currentVersion, latestVersion);
versionAttribute.Value = latestVersion;
}
else
{
Logger.LogDebug("Package: \"{0}-v{1}\" is up to date.", packageId, currentVersion);
}
}
else
{
Logger.LogDebug("Package: \"{0}-v{1}\" is up to date.", packageId, packageVersion);
var latestVersion = await _nuGetService.GetLatestVersionOrNullAsync(packageId);
if (latestVersion != null && (currentVersion.Contains("-preview") || packageVersion < latestVersion))
{
Logger.LogInformation("Updating package \"{0}\" from v{1} to v{2}.", packageId, packageVersion.ToString(), latestVersion.ToString());
versionAttribute.Value = latestVersion.ToString();
}
else
{
Logger.LogDebug("Package: \"{0}-v{1}\" is up to date.", packageId, packageVersion);
}
}
}

8
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/BasicThemeDemoMenuContributor.cs

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.UI.Navigation;
@ -38,6 +39,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo
new ApplicationMenuItem("BasicThemeDemo.Components.ListGroups", "List Groups", url: "/Components/ListGroups"),
new ApplicationMenuItem("BasicThemeDemo.Components.Modals", "Modals", url: "/Components/Modals"),
new ApplicationMenuItem("BasicThemeDemo.Components.Navs", "Navs", url: "/Components/Navs"),
new ApplicationMenuItem("BasicThemeDemo.Components.Navbars", "Navbars", url: "/Components/Navbars"),
new ApplicationMenuItem("BasicThemeDemo.Components.Paginator", "Paginator", url: "/Components/Paginator"),
new ApplicationMenuItem("BasicThemeDemo.Components.Popovers", "Popovers", url: "/Components/Popovers"),
new ApplicationMenuItem("BasicThemeDemo.Components.ProgressBars", "Progress Bars", url: "/Components/ProgressBars"),
@ -45,8 +47,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo
new ApplicationMenuItem("BasicThemeDemo.Components.Tabs", "Tabs", url: "/Components/Tabs"),
new ApplicationMenuItem("BasicThemeDemo.Components.Tooltips", "Tooltips", url: "/Components/Tooltips")
};
items.ForEach(x => menuItem.AddItem(x));
items.OrderBy(x => x.Name)
.ToList()
.ForEach(x => menuItem.AddItem(x));
context.Menu.AddItem(menuItem);
}

1
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Alerts/Index.cshtml

@ -1,7 +1,6 @@
@page
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.AlertsDemo
@model Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.Pages.Components.Alerts.IndexModel
<h2>Alerts</h2>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/components/alerts/" target="_blank"> Bootstrap Alert</a>.</p>

1
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Badges/Index.cshtml

@ -1,7 +1,6 @@
@page
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.BadgesDemo
@model Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.Pages.Components.Badges.IndexModel
<h2>Badges</h2>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/components/badge/" target="_blank"> Bootstrap Badge</a>.</p>

1
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Buttons/Index.cshtml

@ -2,5 +2,6 @@
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.ButtonsDemo
@model Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.Pages.Components.Buttons.IndexModel
<h1>Buttons</h1>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/components/buttons/" target="_blank"> Bootstrap Buttons</a>.</p>
@await Component.InvokeAsync(typeof(ButtonsDemoViewComponent))

7
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Navbars/Index.cshtml

@ -0,0 +1,7 @@
@page
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.NavbarsDemo
@model Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.Pages.Components.Modals.IndexModel
<h2>Navbars</h2>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/components/navbar/" target="_blank"> Bootstrap Navbar</a>.</p>
@await Component.InvokeAsync(typeof(NavbarsDemoViewComponent))

17
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Navbars/Index.cshtml.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo
{
public class IndexModel : PageModel
{
public void OnGet()
{
}
}
}

2
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Navs/Index.cshtml

@ -2,6 +2,6 @@
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.NavsDemo
@model Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.Pages.Components.Navs.IndexModel
<h2>Navs</h2>
<p><p>Based on <a href="https://getbootstrap.com/docs/4.1/components/navs/" target="_blank"> Bootstrap Navs</a>.</p>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/components/navs/" target="_blank"> Bootstrap Navs</a>.</p>
@await Component.InvokeAsync(typeof(NavsDemoViewComponent))

2
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Tables/Index.cshtml

@ -2,6 +2,6 @@
@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.Views.Components.Themes.Shared.Demos.TablesDemo
@model Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.Pages.Components.Tables.IndexModel
<h2>Tables</h2>
<p><p>Based on <a href="https://getbootstrap.com/docs/4.1/content/Tables/" target="_blank"> Bootstrap Tables</a>.</p>
<p>Based on <a href="https://getbootstrap.com/docs/4.1/content/Tables/" target="_blank"> Bootstrap Tables</a>.</p>
@await Component.InvokeAsync(typeof(TablesDemoViewComponent))

45
modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sl.json

@ -0,0 +1,45 @@
{
"culture": "sl",
"texts": {
"UserName": "Uporabniško ime",
"EmailAddress": "E-poštni naslov",
"UserNameOrEmailAddress": "Uporabniško ime ali e-poštni naslov",
"Password": "Geslo",
"RememberMe": "Zapomni si me",
"UseAnotherServiceToLogin": "Uporabi drugo storitev za prijavo",
"UserLockedOutMessage": "Uporabniški račun je bil zaklenjen zaradi neveljavnih poskusov prijave. Počakajte nekaj časa in poskusite znova.",
"InvalidUserNameOrPassword": "Napačno uporabniško ime ali geslo!",
"LoginIsNotAllowed": "Nimate dovoljenja za prijavo! Potrditi morate e-poštni naslov/telefonsko številko.",
"SelfRegistrationDisabledMessage": "Možnost lastne registracije uporabnika je onemogočena za to aplikacijo. Kontaktirajte skrbnika aplikacije, da registrirate novega uporabnika.",
"LocalLoginDisabledMessage": "Lokalna prijava za to aplikacijo je onemogočena.",
"Login": "Prijava",
"Cancel": "Prekliči",
"Register": "Registracija",
"AreYouANewUser": "Ste nov uporabnik?",
"AlreadyRegistered": "Ste že registrirani?",
"InvalidLoginRequest": "Nepravilna zahteva za prijavo",
"ThereAreNoLoginSchemesConfiguredForThisClient": "Za to stranko ni konfiguriranih prijavnih shem.",
"LogInUsingYourProviderAccount": "Prijavite se z uporabo vašega {0} računa",
"DisplayName:CurrentPassword": "Trenutno geslo",
"DisplayName:NewPassword": "Novo geslo",
"DisplayName:NewPasswordConfirm": "Potrdite novo geslo",
"PasswordChangedMessage": "Vaše geslo je bilo uspešno spremenjeno.",
"DisplayName:UserName": "Uporabniško ime",
"DisplayName:Email": "E-poštni naslov",
"DisplayName:Name": "Ime",
"DisplayName:Surname": "Priimek",
"DisplayName:Password": "Password",
"DisplayName:EmailAddress": "E-poštni naslov",
"DisplayName:PhoneNumber": "Telefonska številka",
"PersonalSettings": "Osebne nastavitve",
"PersonalSettingsSaved": "Osebne nastavitve so shranjene",
"PasswordChanged": "Geslo je spremenjeno",
"NewPasswordConfirmFailed": "Prosimo potrdite novo geslo.",
"Manage": "Upravljaj",
"ManageYourProfile": "Upravljaj svoj profil",
"DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Je lastna registracija uporabnika omogočena",
"Description:Abp.Account.IsSelfRegistrationEnabled": "Ali lahko uporabnik sam registrira račun.",
"DisplayName:Abp.Account.EnableLocalLogin": "Avtenticirajte se z lokalnim računom",
"Description:Abp.Account.EnableLocalLogin": "Označuje, ali bo strežnik uporabnikom omogočil avtentikacijo z lokalnim računom."
}
}

14
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/sl.json

@ -0,0 +1,14 @@
{
"culture": "sl",
"texts": {
"Permission:Blogging": "Blog",
"Permission:Blogs": "Blogi",
"Permission:Posts": "Objave",
"Permission:Tags": "Oznake",
"Permission:Comments": "Komentarji",
"Permission:Management": "Upravljanje",
"Permission:Edit": "Urejanje",
"Permission:Create": "Ustvarjanje",
"Permission:Delete": "Brisanje"
}
}

47
modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sl.json

@ -0,0 +1,47 @@
{
"culture": "sl",
"texts": {
"Menu:Blogs": "Blogi",
"Menu:BlogManagement": "Upravljanje bloga",
"Title": "Naslov",
"Delete": "Izbriši",
"Reply": "Odgovori",
"ReplyTo": "Odgovori {0}",
"ContinueReading": "Nadaljuj z branjem",
"DaysAgo": "{0} dni nazaj",
"YearsAgo": "{0} let nazaj",
"MonthsAgo": "{0} mesecev nazaj",
"WeeksAgo": "{0} tednov nazaj",
"MinutesAgo": "{0} minut nazaj",
"SecondsAgo": "{0} sekund nazaj",
"HoursAgo": "{0} ur nazaj",
"Now": "zdaj",
"Content": "Vsebina",
"SeeAll": "Poglej vse",
"PopularTags": "Priljubljene oznake",
"WiewsWithCount": "{0} ogledov",
"LastPosts": "Zadnje objave",
"LeaveComment": "Pusti komentar",
"TagsInThisArticle": "Oznake v tem članku",
"Posts": "Objave",
"Edit": "Uredi",
"BLOG": "BLOG",
"CommentDeletionWarningMessage": "Komentar bo izbrisan.",
"PostDeletionWarningMessage": "Objava bo izbrisana.",
"BlogDeletionWarningMessage": "Blog bo izbrisan.",
"AreYouSure": "Ali ste prepričani?",
"CommentWithCount": "{0} komentarjev",
"Comment": "Komentiraj",
"ShareOnTwitter": "Deli na Twitterju",
"CoverImage": "Naslovna slika",
"CreateANewPost": "Ustvari novo objavo",
"CreateANewBlog": "Ustvari nov blog",
"WhatIsNew": "Kaj je novega?",
"Name": "Naziv",
"ShortName": "Kratek naziv",
"CreationTime": "Čas nastanka",
"Description": "Opis",
"Blogs": "Blogi",
"Tags": "Oznake"
}
}

10
modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sl.json

@ -0,0 +1,10 @@
{
"culture": "sl",
"texts": {
"DocsTitle": "VoloDocs",
"WelcomeVoloDocs": "Dobrodošli na VoloDocs!",
"NoProjectWarning": "Ni še definiranega nobenega projekta!",
"CreateYourFirstProject": "Kliknite tukaj, da začnete svoj prvi projekt",
"NoProject": "Ni projekta!"
}
}

37
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json

@ -0,0 +1,37 @@
{
"culture": "sl",
"texts": {
"Permission:DocumentManagement": "Upravljanje dokumentov",
"Permission:Projects": "Projekti",
"Permission:Edit": "Urejanje",
"Permission:Delete": "Brisanje",
"Permission:Create": "Ustvarjanje",
"Permission:Documents": "Dokumenti",
"Menu:DocumentManagement": "Dokumenti",
"Menu:ProjectManagement": "Projekti",
"CreateANewProject": "Ustvari nov projekt",
"Edit": "Uredi",
"Create": "Ustvari",
"Pull": "Prenesi",
"Projects": "Projekti",
"Name": "Name",
"ShortName": "ShortName",
"DocumentStoreType": "DocumentStoreType",
"Format": "Format",
"ShortNameInfoText": "Bo uporabljen za unikaten URL.",
"DisplayName:Name": "Naziv",
"DisplayName:ShortName": "Kratek naziv",
"DisplayName:Format": "Format",
"DisplayName:DefaultDocumentName": "Privzeti naziv dokumenta",
"DisplayName:NavigationDocumentName": "Naziv dokumenta za navigacijo",
"DisplayName:MinimumVersion": "Najnižja verzija",
"DisplayName:MainWebsiteUrl": "URL glavne strani",
"DisplayName:LatestVersionBranchName": "Naziv veje zadnje verzije",
"DisplayName:GitHubRootUrl": "Korenski URL na GitHub",
"DisplayName:GitHubAccessToken": "GitHub access token",
"DisplayName:GitHubUserAgent": "GitHub user agent",
"DisplayName:All": "Prenesi vse",
"DisplayName:LanguageCode": "Koda jezika",
"DisplayName:Version": "Verzija"
}
}

0
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.sjon → modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json

26
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sl.json

@ -0,0 +1,26 @@
{
"culture": "sl",
"texts": {
"Documents": "Dokumenti",
"BackToWebsite": "Nazaj na spletno stran",
"Contributors": "Sodelujoči",
"ShareOn": "Deli na",
"Version": "Verzija",
"Edit": "Uredi",
"LastEditTime": "Zadnje urejanje",
"Delete": "Izbriši",
"InThisDocument": "V tem dokumentu",
"GoToTop": "Pojdi na vrh",
"Projects": "Projekt(i)",
"NoProjectWarning": "Ni še nobenega projekta!",
"DocumentNotFound": "Ups, zahtevanega dokumenta ni bilo mogoče najti!",
"NavigationDocumentNotFound": "Ta verzija nima navigacijskega dokumenta!",
"DocumentNotFoundInSelectedLanguage": "Dokumenta v želenem jeziku ni mogoče najti. Prikazan je dokument v privzetem jeziku.",
"FilterTopics": "Filtriraj teme",
"MultipleVersionDocumentInfo": "Ta dokument ima več verzij. Izberite možnosti, ki so najprimernejše.",
"New": "Nov",
"Upd": "Posod.",
"NewExplanation": "Ustvarjeno v zadnjih dveh tednih.",
"UpdatedExplanation": "Posodobljeno v zadnjih dveh tednih."
}
}

7
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sl.json

@ -0,0 +1,7 @@
{
"culture": "sl",
"texts": {
"Features": "Funkcionalnosti",
"NoFeatureFoundMessage": "Na voljo ni nobene funkcionalnosti."
}
}

102
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json

@ -0,0 +1,102 @@
{
"culture": "sl",
"texts": {
"Menu:IdentityManagement": "Upravljanje identitet",
"Users": "Uporabniki",
"NewUser": "Nov uporabnik",
"UserName": "Uporabniško ime",
"EmailAddress": "E-poštni naslov",
"PhoneNumber": "Telefonska številka",
"UserInformations": "Informacije o uporabniku",
"DisplayName:IsDefault": "Privzeto",
"DisplayName:IsStatic": "Statično",
"DisplayName:IsPublic": "Javno",
"Roles": "Vloge",
"Password": "Geslo",
"PersonalInfo": "Moj profil",
"PersonalSettings": "Osebne nastavitve",
"UserDeletionConfirmationMessage": "Uporabnik '{0}' bo izbrisan. Ali to potrjujete?",
"RoleDeletionConfirmationMessage": "Vloga '{0}' bo izbrisana. Ali to potrjujete?",
"DisplayName:RoleName": "Naziv vloge",
"DisplayName:UserName": "Uporabniško ime",
"DisplayName:Name": "Ime",
"DisplayName:Surname": "Priimek",
"DisplayName:Password": "Geslo",
"DisplayName:Email": "E-poštni naslov",
"DisplayName:PhoneNumber": "Telefonska številka",
"DisplayName:TwoFactorEnabled": "Dvostopenjsko preverjanje",
"DisplayName:LockoutEnabled": "Zaklepanje računa po neuspelih poskusih prijave",
"NewRole": "Nova vloga",
"RoleName": "Naziv vloge",
"CreationTime": "Čas nastanka",
"Permissions": "Dovoljenja",
"DisplayName:CurrentPassword": "Trenutno geslo",
"DisplayName:NewPassword": "Novo geslo",
"DisplayName:NewPasswordConfirm": "Potrdite novo geslo",
"PasswordChangedMessage": "Vaše geslo je bilo uspešno spremenjeno.",
"PersonalSettingsSavedMessage": "Vaše osebne nastavitve so bile uspešno shranjene.",
"Identity.DefaultError": "Zgodila se je neznana napaka.",
"Identity.ConcurrencyFailure": "Napaka pri optimistični sočasnosti, objekt je bil spremenjen.",
"Identity.DuplicateEmail": "E-poštni naslov '{0}' je že zaseden.",
"Identity.DuplicateRoleName": "Naziv vloge '{0}' je že zasedeno.",
"Identity.DuplicateUserName": "Uporabniško ime '{0}' je že zasedeno.",
"Identity.InvalidEmail": "E-poštni naslov '{0}' ni veljaven.",
"Identity.InvalidPasswordHasherCompatibilityMode": "Navedeni PasswordHasherCompatibilityMode ni veljaven.",
"Identity.InvalidPasswordHasherIterationCount": "Število iteracij mora biti pozitivno celo število.",
"Identity.InvalidRoleName": "Naziv vloge '{0}' ni veljaven.",
"Identity.InvalidToken": "Neveljaven žeton.",
"Identity.InvalidUserName": "Uporabniško ime '{0}' ni veljavno, vsebuje lahko le črke in številke.",
"Identity.LoginAlreadyAssociated": "Uporabnik s to prijavo že obstaja.",
"Identity.PasswordMismatch": "Nepravilno geslo.",
"Identity.PasswordRequiresDigit": "Gesla morajo imeti vsaj eno številko ('0'-'9').",
"Identity.PasswordRequiresLower": "Gesla morajo imeti vsaj eno malo črko ('a'-'z').",
"Identity.PasswordRequiresNonAlphanumeric": "Gesla morajo imeti vsaj en ne-alfanumerični znak.",
"Identity.PasswordRequiresUpper": "Gesla morajo imeti vsaj eno veliko črko ('A'-'Z').",
"Identity.PasswordTooShort": "Gesla morajo biti dolga vsaj {0} znakov.",
"Identity.RoleNotFound": "Vloga {0} ne obstaja.",
"Identity.UserAlreadyHasPassword": "Uporabnik že ima nastavljeno geslo.",
"Identity.UserAlreadyInRole": "Uporabnik že ima dodeljeno vlogo '{0}'.",
"Identity.UserLockedOut": "Uporabnik je zaklenjen.",
"Identity.UserLockoutNotEnabled": "Zaklepanje za tega uporabnika ni omogočeno.",
"Identity.UserNameNotFound": "Uporabnik {0} ne obstaja.",
"Identity.UserNotInRole": "Uporabnik nima dodeljene vloge '{0}'.",
"Identity.PasswordConfirmationFailed": "Geslo se ne ujema s potrditvenim geslom.",
"Identity.StaticRoleRenamingErrorMessage": "Statičnih vlog ni mogoče preimenovati.",
"Identity.StaticRoleDeletionErrorMessage": "Statičnih vlog ni mogoče izbrisati.",
"Volo.Abp.Identity:010001": "Ne morete izbrisati svojega lastnega računa!",
"Permission:IdentityManagement": "Upravljanje identitet",
"Permission:RoleManagement": "Upravljanje vlog",
"Permission:Create": "Ustvarjanje",
"Permission:Edit": "Urejanje",
"Permission:Delete": "Brisanje",
"Permission:ChangePermissions": "Spreminjanje dovoljenj",
"Permission:UserManagement": "Upravljanje uporabnikov",
"Permission:UserLookup": "Iskanje uporabnikov",
"DisplayName:Abp.Identity.Password.RequiredLength": "Zahtevana dolžina",
"DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Zahtevano število unikatnih znakov",
"DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Zahtevan ne-alfanumeričen znak",
"DisplayName:Abp.Identity.Password.RequireLowercase": "Zahtevana mala črka",
"DisplayName:Abp.Identity.Password.RequireUppercase": "Zahtevana velika črka",
"DisplayName:Abp.Identity.Password.RequireDigit": "Zahtevana številka",
"DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Omogočeno za nove uporabnike",
"DisplayName:Abp.Identity.Lockout.LockoutDuration": "Trajanje zaklepa(sekund)",
"DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Največje število neuspešnih poskusov dostopa",
"DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Zahtevan potrjen e-poštni naslov",
"DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Zahtevana potrjena telefonska številka",
"DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Omogočena posodobitev uporabniškega imena",
"DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Omogočena posodobitev e-poštnega naslova",
"Description:Abp.Identity.Password.RequiredLength": "Najkrajša dolžina gesla mora biti.",
"Description:Abp.Identity.Password.RequiredUniqueChars": "Najmanjše število unikatnih znakov, ki jih mora vsebovati geslo.",
"Description:Abp.Identity.Password.RequireNonAlphanumeric": "Ali morajo gesla vsebovati ne-alfanumerični znak.",
"Description:Abp.Identity.Password.RequireLowercase": "Ali morajo gesla vsebovati mali ASCII znak.",
"Description:Abp.Identity.Password.RequireUppercase": "Ali morajo gesla vsebovati veliki ASCII znak.",
"Description:Abp.Identity.Password.RequireDigit": "Ali morajo gesla vsebovati številko.",
"Description:Abp.Identity.Lockout.AllowedForNewUsers": "Ali se nov uporabnik lahko zaklene.",
"Description:Abp.Identity.Lockout.LockoutDuration": "Trajanje zaklepa uporabnika, ko pride do zaklepa.",
"Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Število neuspelih poskusov dostopa ki so dovoljeni, preden se uporabnik zaklene, ob predpostavki, da je zaklepanje omogočeno.",
"Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Ali je za prijavo potreben potrjeni e-poštni naslov.",
"Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Ali je za prijavo potrebna potrjena telefonska številka.",
"Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Ali lahko uporabnik posodobi uporabniško ime.",
"Description:Abp.Identity.User.IsEmailUpdateEnabled": "Ali lahko uporabnik posodobi e-poštni naslov."
}
}

12
modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sl.json

@ -0,0 +1,12 @@
{
"culture": "sl",
"texts": {
"Volo.IdentityServer:DuplicateIdentityResourceName": "Naziv vira identitete že obstaja: {Name}",
"Volo.IdentityServer:DuplicateApiResourceName": "Naziv vira Api že obstaja: {Name}",
"Volo.IdentityServer:DuplicateClientId": "ClientId že obstaja: {ClientId}",
"UserLockedOut": "Uporabniški račun je bil blokiran zaradi neveljavnih poskusov prijave. Počakajte nekaj časa in poskusite znova.",
"InvalidUserNameOrPassword": "Napačno uporabniško ime ali geslo!",
"LoginIsNotAllowed": "Nimate dovoljenja za prijavo! Potrditi morate svojo e-pošto / telefonsko številko.",
"InvalidUsername": "Napačno uporabniško ime ali geslo!"
}
}

10
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sl.json

@ -0,0 +1,10 @@
{
"culture": "sl",
"texts": {
"Permissions": "Dovoljenja",
"OnlyProviderPermissons": "Samo ta ponudnik",
"All": "Vse",
"SelectAllInAllTabs": "Dodeli vsa dovoljenja",
"SelectAllInThisTab": "Izberi vse"
}
}

7
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sl.json

@ -0,0 +1,7 @@
{
"culture": "sl",
"texts": {
"Settings": "Nastavitve",
"SuccessfullySaved": "Uspešno shranjeno"
}
}

20
modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sl.json

@ -0,0 +1,20 @@
{
"culture": "sl",
"texts": {
"Menu:TenantManagement": "Upravljanje najemnikov",
"Tenants": "Najemniki",
"NewTenant": "Nov najemnik",
"TenantName": "Naziv najemnika",
"DisplayName:TenantName": "Naziv najemnika",
"TenantDeletionConfirmationMessage": "Najemnik '{0}' bo izbrisan. Ali to potrjujete?",
"ConnectionStrings": "Connection Strings",
"DisplayName:DefaultConnectionString": "Privzeti Connection String",
"DisplayName:UseSharedDatabase": "Uporabi skupno bazo",
"Permission:TenantManagement": "Upravljanje najemnikov",
"Permission:Create": "Ustvarjanje",
"Permission:Edit": "Urejanje",
"Permission:Delete": "Brisanje",
"Permission:ManageConnectionStrings": "Upravljanje connection string-ov",
"Permission:ManageFeatures": "Upravljanje funkcionalnosti"
}
}

6
npm/ng-packs/packages/core/src/lib/plugins/config.plugin.ts

@ -8,10 +8,10 @@ import {
setValue,
UpdateState,
} from '@ngxs/store';
import clone from 'just-clone';
import snq from 'snq';
import { ABP } from '../models';
import { organizeRoutes, getAbpRoutes } from '../utils/route-utils';
import clone from 'just-clone';
import { getAbpRoutes, organizeRoutes } from '../utils/route-utils';
export const NGXS_CONFIG_PLUGIN_OPTIONS = new InjectionToken('NGXS_CONFIG_PLUGIN_OPTIONS');
@ -28,7 +28,7 @@ export class ConfigPlugin implements NgxsPlugin {
const matches = actionMatcher(event);
const isInitAction = matches(InitState) || matches(UpdateState);
if (isInitAction && !this.initialized) {
if (isInitAction && !this.initialized && getAbpRoutes().length) {
const transformedRoutes = transformRoutes(this.router.config);
let { routes } = transformedRoutes;
const { wrappers } = transformedRoutes;

14
npm/ng-packs/packages/core/src/lib/services/auth.service.ts

@ -50,11 +50,17 @@ export class AuthService {
}
logout(): Observable<void> {
const issuer = this.store.selectSnapshot(ConfigState.getDeep('environment.oAuthConfig.issuer'));
return this.rest
.request({
method: 'GET',
url: '/api/account/logout',
})
.request(
{
method: 'GET',
url: '/api/account/logout',
},
null,
issuer,
)
.pipe(
switchMap(() => {
this.oAuthService.logOut();

Loading…
Cancel
Save