diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index dff5871a9..2500a3789 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -33,6 +33,13 @@ const routes: Routes = [ loadChildren: () => import('./pages/auth/auth-page.module').then((m) => m.AuthPageModule) }, + { + path: 'en/blog/2021/07/hello-ghostfolio', + loadChildren: () => + import( + './pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.module' + ).then((m) => m.HelloGhostfolioPageModule) + }, { path: 'home', loadChildren: () => diff --git a/apps/client/src/app/core/auth.guard.ts b/apps/client/src/app/core/auth.guard.ts index b2e70e446..6fb410dfa 100644 --- a/apps/client/src/app/core/auth.guard.ts +++ b/apps/client/src/app/core/auth.guard.ts @@ -16,6 +16,7 @@ import { UserService } from '../services/user/user.service'; export class AuthGuard implements CanActivate { private static PUBLIC_PAGE_ROUTES = [ '/about', + '/en/blog', '/pricing', '/register', '/resources' @@ -43,7 +44,11 @@ export class AuthGuard implements CanActivate { if (route.queryParams?.utm_source) { this.router.navigate(['/register']); resolve(false); - } else if (AuthGuard.PUBLIC_PAGE_ROUTES.includes(state.url)) { + } else if ( + AuthGuard.PUBLIC_PAGE_ROUTES.filter((publicPageRoute) => + state.url.startsWith(publicPageRoute) + )?.length > 0 + ) { resolve(true); return EMPTY; } else if (state.url !== '/start') { diff --git a/apps/client/src/app/pages/about/about-page.component.ts b/apps/client/src/app/pages/about/about-page.component.ts index 75d143a81..5d8aa52aa 100644 --- a/apps/client/src/app/pages/about/about-page.component.ts +++ b/apps/client/src/app/pages/about/about-page.component.ts @@ -18,6 +18,7 @@ import { environment } from '../../../environments/environment'; export class AboutPageComponent implements OnDestroy, OnInit { public baseCurrency = baseCurrency; public hasPermissionForStatistics: boolean; + public hasPermissionForSubscription: boolean; public isLoggedIn: boolean; public lastPublish = environment.lastPublish; public statistics: Statistics; @@ -45,6 +46,11 @@ export class AboutPageComponent implements OnDestroy, OnInit { permissions.enableStatistics ); + this.hasPermissionForSubscription = hasPermission( + globalPermissions, + permissions.enableSubscription + ); + this.statistics = statistics; this.userService.stateChanged diff --git a/apps/client/src/app/pages/about/about-page.html b/apps/client/src/app/pages/about/about-page.html index 56cda5e46..6c7d991f2 100644 --- a/apps/client/src/app/pages/about/about-page.html +++ b/apps/client/src/app/pages/about/about-page.html @@ -2,7 +2,7 @@

About Ghostfolio

- +

Ghostfolio is a lightweight wealth management @@ -56,7 +56,10 @@

-
+
+ +

Changelog

diff --git a/apps/client/src/app/pages/about/about-page.scss b/apps/client/src/app/pages/about/about-page.scss index fe52dfce1..c72563944 100644 --- a/apps/client/src/app/pages/about/about-page.scss +++ b/apps/client/src/app/pages/about/about-page.scss @@ -7,6 +7,18 @@ } .mat-card { + &.about-container, + &.changelog { + a { + color: rgba(var(--palette-primary-500), 1); + font-weight: bold; + + &:hover { + color: rgba(var(--palette-primary-300), 1); + } + } + } + &.changelog { ::ng-deep { markdown { @@ -30,15 +42,6 @@ } } - a { - color: rgba(var(--palette-primary-500), 1); - font-weight: bold; - - &:hover { - color: rgba(var(--palette-primary-300), 1); - } - } - .independent-and-bootstrapped-logo { background-image: url('/assets/bootstrapped-dark.svg'); background-position: center; diff --git a/apps/client/src/app/pages/account/account-page.component.ts b/apps/client/src/app/pages/account/account-page.component.ts index 44bb0611c..e8ba412d6 100644 --- a/apps/client/src/app/pages/account/account-page.component.ts +++ b/apps/client/src/app/pages/account/account-page.component.ts @@ -35,7 +35,7 @@ export class AccountPageComponent implements OnDestroy, OnInit { public couponId: string; public currencies: Currency[] = []; public defaultDateFormat = DEFAULT_DATE_FORMAT; - public hasPermissionForSubscription; + public hasPermissionForSubscription: boolean; public hasPermissionToUpdateViewMode: boolean; public hasPermissionToUpdateUserSettings: boolean; public price: number; diff --git a/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page-routing.module.ts b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page-routing.module.ts new file mode 100644 index 000000000..5165ad5bb --- /dev/null +++ b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; + +import { HelloGhostfolioPageComponent } from './hello-ghostfolio-page.component'; + +const routes: Routes = [ + { + path: '', + component: HelloGhostfolioPageComponent, + canActivate: [AuthGuard] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class HelloGhostfolioPageRoutingModule {} diff --git a/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts new file mode 100644 index 000000000..8d5240fd3 --- /dev/null +++ b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'gf-hello-ghostfolio-page', + templateUrl: './hello-ghostfolio-page.html' +}) +export class HelloGhostfolioPageComponent {} diff --git a/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.html b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.html new file mode 100644 index 000000000..703fad8a7 --- /dev/null +++ b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.html @@ -0,0 +1,110 @@ +
+
+
+
+
+

Hello Ghostfolio

+
17.07.2021
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus + ante elit, viverra at dui eget, faucibus vulputate lorem. Mauris sed + neque eu enim malesuada pretium. Phasellus eu interdum nisl. Nulla + sollicitudin est nec hendrerit blandit. Maecenas at porttitor purus, + ac eleifend tellus. In non urna quis arcu congue fermentum sit amet + eu odio. Duis vitae turpis mi. Donec porta a velit non laoreet. Ut + auctor viverra magna, eu ultrices lacus lobortis sit amet. +

+
+
+

Praesent consequat dolor a commodo euismod

+

+ Nunc tempor porttitor euismod. Nam auctor elit vel leo gravida, eu + lobortis diam pharetra. Nam vulputate dui sit amet eros tristique + fringilla. Donec consequat turpis non ultrices sollicitudin. In quis + arcu eget ante dictum pharetra a et ex. Morbi et mauris ipsum. In ut + cursus lectus. Sed rhoncus, nibh nec blandit vehicula, dui justo + venenatis velit, non maximus nisl dui a sem. Aenean facilisis + eleifend metus, in luctus risus finibus eget. Phasellus cursus + efficitur felis, in mattis urna. Integer ut ipsum sit amet nisi + vulputate vehicula. Mauris ut quam ut augue consequat auctor + sagittis faucibus eros. Duis feugiat ligula eget nisi maximus, quis + dapibus dolor molestie. Curabitur a enim ut ex ullamcorper consequat + sed eget justo. Suspendisse id lorem est. Nam pretium metus at arcu + venenatis rutrum. +

+
+
+

Curabitur eget urna scelerisque

+

+ Quisque lobortis mauris velit, vitae faucibus lorem placerat vitae. + Nam finibus turpis eu nunc rutrum, ac mollis enim blandit. Phasellus + eu nunc nulla. Vivamus gravida magna a odio efficitur eleifend. + Integer mauris nisi, efficitur sit amet euismod ac, varius at dui. + Aenean quis neque vitae diam dignissim vestibulum. Donec ut + tincidunt nibh. Donec ut magna at leo laoreet dictum. Praesent + porttitor orci et lacinia fermentum. Quisque viverra elit eu metus + elementum egestas. Curabitur sollicitudin neque at sapien suscipit + bibendum. Pellentesque quam purus, lacinia commodo lorem et, + elementum pretium orci. +

+
+
+

Vestibulum vulputate blandit lacinia

+

+ Nullam feugiat, est non posuere imperdiet, nibh velit volutpat nisi, + sit amet pellentesque purus massa id quam. Aliquam gravida vel + tortor ut tincidunt. Vestibulum nisl leo, fringilla nec tempor eu, + commodo nec felis. Etiam eros augue, consectetur vitae imperdiet + vel, commodo non augue. Donec scelerisque mauris eu neque pulvinar, + nec interdum ligula ornare. Proin sodales pretium imperdiet. Vivamus + luctus leo sed diam accumsan rhoncus. Suspendisse dictum quam eu + nibh feugiat euismod. Suspendisse ornare ac nulla non imperdiet. +

+
+
+
    +
  • + Cryptocurrency + ETF + Fintech + Ghostfolio + Investment + Open Source + OSS + Portfolio + Software + Stock + Strategy + Wealth + Wealth Management +
  • +
+
+
+
+
+
diff --git a/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.module.ts b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.module.ts new file mode 100644 index 000000000..c6f0cb593 --- /dev/null +++ b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; + +import { HelloGhostfolioPageRoutingModule } from './hello-ghostfolio-page-routing.module'; +import { HelloGhostfolioPageComponent } from './hello-ghostfolio-page.component'; + +@NgModule({ + declarations: [HelloGhostfolioPageComponent], + exports: [], + imports: [CommonModule, HelloGhostfolioPageRoutingModule], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class HelloGhostfolioPageModule {} diff --git a/apps/client/src/assets/sitemap.xml b/apps/client/src/assets/sitemap.xml index c41c22c2d..850e5c25b 100644 --- a/apps/client/src/assets/sitemap.xml +++ b/apps/client/src/assets/sitemap.xml @@ -6,22 +6,26 @@ http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> https://ghostfol.io - 2021-06-03T00:00:00+00:00 + 2021-07-17T00:00:00+00:00 https://ghostfol.io/about - 2021-06-03T00:00:00+00:00 + 2021-07-17T00:00:00+00:00 - + + https://ghostfol.io/en/blog/2021/07/hello-ghostfolio + 2021-07-17T00:00:00+00:00 + + https://ghostfol.io/pricing - 2021-06-03T00:00:00+00:00 + 2021-07-17T00:00:00+00:00 https://ghostfol.io/register - 2021-06-03T00:00:00+00:00 + 2021-07-17T00:00:00+00:00 https://ghostfol.io/resources - 2021-06-03T00:00:00+00:00 + 2021-07-17T00:00:00+00:00