mirror of https://github.com/ghostfolio/ghostfolio
Thomas Kaul
3 years ago
committed by
GitHub
13 changed files with 353 additions and 13 deletions
@ -0,0 +1,15 @@ |
|||||
|
import { NgModule } from '@angular/core'; |
||||
|
import { RouterModule, Routes } from '@angular/router'; |
||||
|
import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; |
||||
|
|
||||
|
import { FeaturesPageComponent } from './features-page.component'; |
||||
|
|
||||
|
const routes: Routes = [ |
||||
|
{ path: '', component: FeaturesPageComponent, canActivate: [AuthGuard] } |
||||
|
]; |
||||
|
|
||||
|
@NgModule({ |
||||
|
imports: [RouterModule.forChild(routes)], |
||||
|
exports: [RouterModule] |
||||
|
}) |
||||
|
export class FeaturesPageRoutingModule {} |
@ -0,0 +1,44 @@ |
|||||
|
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; |
||||
|
import { UserService } from '@ghostfolio/client/services/user/user.service'; |
||||
|
import { User } from '@ghostfolio/common/interfaces'; |
||||
|
import { Subject, takeUntil } from 'rxjs'; |
||||
|
|
||||
|
@Component({ |
||||
|
host: { class: 'page' }, |
||||
|
selector: 'gf-features-page', |
||||
|
styleUrls: ['./features-page.scss'], |
||||
|
templateUrl: './features-page.html' |
||||
|
}) |
||||
|
export class FeaturesPageComponent implements OnDestroy { |
||||
|
public user: User; |
||||
|
|
||||
|
private unsubscribeSubject = new Subject<void>(); |
||||
|
|
||||
|
/** |
||||
|
* @constructor |
||||
|
*/ |
||||
|
public constructor( |
||||
|
private changeDetectorRef: ChangeDetectorRef, |
||||
|
private userService: UserService |
||||
|
) {} |
||||
|
|
||||
|
/** |
||||
|
* Initializes the controller |
||||
|
*/ |
||||
|
public ngOnInit() { |
||||
|
this.userService.stateChanged |
||||
|
.pipe(takeUntil(this.unsubscribeSubject)) |
||||
|
.subscribe((state) => { |
||||
|
if (state?.user) { |
||||
|
this.user = state.user; |
||||
|
|
||||
|
this.changeDetectorRef.markForCheck(); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public ngOnDestroy() { |
||||
|
this.unsubscribeSubject.next(); |
||||
|
this.unsubscribeSubject.complete(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,220 @@ |
|||||
|
<div class="container"> |
||||
|
<div class="row"> |
||||
|
<div class="col"> |
||||
|
<h3 class="d-flex justify-content-center mb-3 text-center" i18n> |
||||
|
Features |
||||
|
</h3> |
||||
|
<mat-card class="mb-4"> |
||||
|
<mat-card-content> |
||||
|
<p> |
||||
|
Check out the numerous features of <strong>Ghostfolio</strong> to |
||||
|
manage your wealth. |
||||
|
</p> |
||||
|
</mat-card-content> |
||||
|
</mat-card> |
||||
|
<div class="row"> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 i18n>Stocks</h4> |
||||
|
<p class="m-0">Keep track of your stock purchases and sales.</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 i18n>ETFs</h4> |
||||
|
<p class="m-0"> |
||||
|
Are you into ETFs (Exchange Traded Funds)? Track your ETF |
||||
|
investments. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 i18n>Cryptocurrencies</h4> |
||||
|
<p class="m-0"> |
||||
|
Keep track of your Bitcoin and Altcoin holdings. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 i18n>Dividend</h4> |
||||
|
<p class="m-0"> |
||||
|
Are you building a dividend portfolio? Track your dividend in |
||||
|
Ghostfolio. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 class="align-items-center d-flex" i18n>Wealth Items</h4> |
||||
|
<p class="m-0"> |
||||
|
Track all your treasuries, be it your luxury watch or rare |
||||
|
trading cards. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 class="align-items-center d-flex" i18n>Import and Export</h4> |
||||
|
<p class="m-0">Import and export your investment activities.</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 i18n>Multi-Accounts</h4> |
||||
|
<p class="m-0"> |
||||
|
Keep an eye on all your accounts across multiple platforms |
||||
|
(multi-banking). |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 class="align-items-center d-flex"> |
||||
|
<span i18n>Portfolio Calculations</span> |
||||
|
<ion-icon |
||||
|
class="ml-1 text-muted" |
||||
|
name="diamond-outline" |
||||
|
></ion-icon> |
||||
|
</h4> |
||||
|
<p class="m-0"> |
||||
|
Check the rate of return of your portfolio for |
||||
|
<code>Today</code>, <code>YTD</code>, <code>1Y</code>, |
||||
|
<code>5Y</code>, and <code>Max</code>. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 class="align-items-center d-flex"> |
||||
|
<span i18n>Portfolio Allocations</span> |
||||
|
<ion-icon |
||||
|
class="ml-1 text-muted" |
||||
|
name="diamond-outline" |
||||
|
></ion-icon> |
||||
|
</h4> |
||||
|
<p class="m-0"> |
||||
|
Check the allocations of your portfolio by account, asset class, |
||||
|
currency, region, and sector. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 class="align-items-center d-flex" i18n>Dark Mode</h4> |
||||
|
<p class="m-0"> |
||||
|
Ghostfolio automatically switches to a dark color theme based on |
||||
|
your operating system's preferences. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 class="align-items-center d-flex" i18n>Zen Mode</h4> |
||||
|
<p class="m-0"> |
||||
|
Keep calm and activate Zen Mode if the markets are going crazy. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 class="align-items-center d-flex"> |
||||
|
<span i18n>Market Mood</span> |
||||
|
<ion-icon |
||||
|
class="ml-1 text-muted" |
||||
|
name="diamond-outline" |
||||
|
></ion-icon> |
||||
|
</h4> |
||||
|
<p class="m-0"> |
||||
|
Check the current market mood (<a [routerLink]="['/resources']" |
||||
|
>Fear & Greed Index</a |
||||
|
>) within the app. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 class="align-items-center d-flex"> |
||||
|
<span i18n>Static Analysis</span> |
||||
|
<ion-icon |
||||
|
class="ml-1 text-muted" |
||||
|
name="diamond-outline" |
||||
|
></ion-icon> |
||||
|
</h4> |
||||
|
<p class="m-0"> |
||||
|
Identify potential risks in your portfolio with Ghostfolio |
||||
|
X-ray, the static portfolio analysis. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 i18n>Community</h4> |
||||
|
<p class="m-0"> |
||||
|
Join the Ghostfolio |
||||
|
<a |
||||
|
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg" |
||||
|
title="Join the Ghostfolio Slack community" |
||||
|
>Slack channel</a |
||||
|
> |
||||
|
full of enthusiastic investors and discuss the latest market |
||||
|
trends. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
<div class="col-xs-12 col-md-4 mb-3"> |
||||
|
<mat-card class="d-flex flex-column h-100"> |
||||
|
<div class="flex-grow-1"> |
||||
|
<h4 i18n>Open Source Software</h4> |
||||
|
<p class="m-0"> |
||||
|
The source code is fully available as |
||||
|
<a |
||||
|
href="https://github.com/ghostfolio/ghostfolio" |
||||
|
title="Find Ghostfolio on GitHub" |
||||
|
>open source software</a |
||||
|
> |
||||
|
(OSS) and licensed under the <i>AGPLv3 License</i>. |
||||
|
</p> |
||||
|
</div> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div *ngIf="!user" class="row"> |
||||
|
<div class="col mt-3 text-center"> |
||||
|
<a color="primary" i18n mat-flat-button [routerLink]="['/register']"> |
||||
|
Get Started |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
@ -0,0 +1,19 @@ |
|||||
|
import { CommonModule } from '@angular/common'; |
||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; |
||||
|
import { MatButtonModule } from '@angular/material/button'; |
||||
|
import { MatCardModule } from '@angular/material/card'; |
||||
|
|
||||
|
import { FeaturesPageRoutingModule } from './features-page-routing.module'; |
||||
|
import { FeaturesPageComponent } from './features-page.component'; |
||||
|
|
||||
|
@NgModule({ |
||||
|
declarations: [FeaturesPageComponent], |
||||
|
imports: [ |
||||
|
FeaturesPageRoutingModule, |
||||
|
CommonModule, |
||||
|
MatButtonModule, |
||||
|
MatCardModule |
||||
|
], |
||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA] |
||||
|
}) |
||||
|
export class FeaturesPageModule {} |
@ -0,0 +1,17 @@ |
|||||
|
:host { |
||||
|
color: rgb(var(--dark-primary-text)); |
||||
|
display: block; |
||||
|
|
||||
|
a { |
||||
|
color: rgba(var(--palette-primary-500), 1); |
||||
|
font-weight: 500; |
||||
|
|
||||
|
&:hover { |
||||
|
color: rgba(var(--palette-primary-300), 1); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
:host-context(.is-dark-theme) { |
||||
|
color: rgb(var(--light-primary-text)); |
||||
|
} |
Loading…
Reference in new issue