mirror of https://github.com/ghostfolio/ghostfolio
				
				
			
							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