Eliminate duplicate locales (#1176)
This commit is contained in:
parent
2e6a7d5a91
commit
11136ae4f8
@ -43,8 +43,8 @@
|
|||||||
<ion-icon name="ellipsis-vertical"></ion-icon>
|
<ion-icon name="ellipsis-vertical"></ion-icon>
|
||||||
</button>
|
</button>
|
||||||
<mat-menu #transactionMenu="matMenu" xPosition="before">
|
<mat-menu #transactionMenu="matMenu" xPosition="before">
|
||||||
<button i18n mat-menu-item (click)="onDeleteAccess(element.id)">
|
<button mat-menu-item (click)="onDeleteAccess(element.id)">
|
||||||
Revoke
|
<ng-container i18n>Revoke</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
</td>
|
</td>
|
||||||
|
@ -19,13 +19,8 @@
|
|||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container matColumnDef="currency">
|
<ng-container matColumnDef="currency">
|
||||||
<th
|
<th *matHeaderCellDef class="d-none d-lg-table-cell px-1" mat-header-cell>
|
||||||
*matHeaderCellDef
|
<ng-container i18n>Currency</ng-container>
|
||||||
class="d-none d-lg-table-cell px-1"
|
|
||||||
i18n
|
|
||||||
mat-header-cell
|
|
||||||
>
|
|
||||||
Currency
|
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
||||||
{{ element.currency }}
|
{{ element.currency }}
|
||||||
@ -36,13 +31,8 @@
|
|||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container matColumnDef="platform">
|
<ng-container matColumnDef="platform">
|
||||||
<th
|
<th *matHeaderCellDef class="d-none d-lg-table-cell px-1" mat-header-cell>
|
||||||
*matHeaderCellDef
|
<ng-container i18n>Platform</ng-container>
|
||||||
class="d-none d-lg-table-cell px-1"
|
|
||||||
i18n
|
|
||||||
mat-header-cell
|
|
||||||
>
|
|
||||||
Platform
|
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
@ -81,10 +71,9 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell px-1 text-right"
|
class="d-none d-lg-table-cell px-1 text-right"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
>
|
>
|
||||||
Cash Balance
|
<ng-container i18n>Cash Balance</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td
|
<td
|
||||||
*matCellDef="let element"
|
*matCellDef="let element"
|
||||||
@ -116,10 +105,9 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell px-1 text-right"
|
class="d-none d-lg-table-cell px-1 text-right"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
>
|
>
|
||||||
Value
|
<ng-container i18n>Value</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td
|
<td
|
||||||
*matCellDef="let element"
|
*matCellDef="let element"
|
||||||
@ -151,10 +139,9 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-lg-none d-xl-none px-1 text-right"
|
class="d-lg-none d-xl-none px-1 text-right"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
>
|
>
|
||||||
Value
|
<ng-container i18n>Value</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td
|
<td
|
||||||
*matCellDef="let element"
|
*matCellDef="let element"
|
||||||
|
@ -105,19 +105,18 @@
|
|||||||
<ion-icon name="ellipsis-vertical"></ion-icon>
|
<ion-icon name="ellipsis-vertical"></ion-icon>
|
||||||
</button>
|
</button>
|
||||||
<mat-menu #accountMenu="matMenu" xPosition="before">
|
<mat-menu #accountMenu="matMenu" xPosition="before">
|
||||||
<button i18n mat-menu-item (click)="onViewData(job.data)">
|
<button mat-menu-item (click)="onViewData(job.data)">
|
||||||
View Data
|
<ng-container i18n>View Data</ng-container>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
i18n
|
|
||||||
mat-menu-item
|
mat-menu-item
|
||||||
[disabled]="job.stacktrace?.length <= 0"
|
[disabled]="job.stacktrace?.length <= 0"
|
||||||
(click)="onViewStacktrace(job.stacktrace)"
|
(click)="onViewStacktrace(job.stacktrace)"
|
||||||
>
|
>
|
||||||
View Stacktrace
|
<ng-container i18n>View Stacktrace</ng-container>
|
||||||
</button>
|
</button>
|
||||||
<button i18n mat-menu-item (click)="onDeleteJob(job.id)">
|
<button mat-menu-item (click)="onDeleteJob(job.id)">
|
||||||
Delete Job
|
<ng-container i18n>Delete Job</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
</td>
|
</td>
|
||||||
|
@ -43,8 +43,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="justify-content-end" mat-dialog-actions>
|
<div class="justify-content-end" mat-dialog-actions>
|
||||||
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
||||||
<button color="primary" i18n mat-flat-button (click)="onUpdate()">
|
<button color="primary" mat-flat-button (click)="onUpdate()">
|
||||||
Save
|
<ng-container i18n>Save</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -36,26 +36,23 @@
|
|||||||
</button>
|
</button>
|
||||||
<mat-menu #accountMenu="matMenu" xPosition="before">
|
<mat-menu #accountMenu="matMenu" xPosition="before">
|
||||||
<button
|
<button
|
||||||
i18n
|
|
||||||
mat-menu-item
|
mat-menu-item
|
||||||
(click)="onGatherSymbol({dataSource: item.dataSource, symbol: item.symbol})"
|
(click)="onGatherSymbol({dataSource: item.dataSource, symbol: item.symbol})"
|
||||||
>
|
>
|
||||||
Gather Data
|
<ng-container i18n>Gather Data</ng-container>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
i18n
|
|
||||||
mat-menu-item
|
mat-menu-item
|
||||||
(click)="onGatherProfileDataBySymbol({dataSource: item.dataSource, symbol: item.symbol})"
|
(click)="onGatherProfileDataBySymbol({dataSource: item.dataSource, symbol: item.symbol})"
|
||||||
>
|
>
|
||||||
Gather Profile Data
|
<ng-container i18n>Gather Profile Data</ng-container>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
i18n
|
|
||||||
mat-menu-item
|
mat-menu-item
|
||||||
[disabled]="item.activityCount !== 0"
|
[disabled]="item.activityCount !== 0"
|
||||||
(click)="onDeleteProfileData({dataSource: item.dataSource, symbol: item.symbol})"
|
(click)="onDeleteProfileData({dataSource: item.dataSource, symbol: item.symbol})"
|
||||||
>
|
>
|
||||||
Delete Profile Data
|
<ng-container i18n>Delete Profile Data</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
</td>
|
</td>
|
||||||
|
@ -7,17 +7,17 @@
|
|||||||
<tr class="mat-header-row">
|
<tr class="mat-header-row">
|
||||||
<th class="mat-header-cell px-1 py-2 text-right">#</th>
|
<th class="mat-header-cell px-1 py-2 text-right">#</th>
|
||||||
<th class="mat-header-cell px-1 py-2" i18n>User</th>
|
<th class="mat-header-cell px-1 py-2" i18n>User</th>
|
||||||
<th class="mat-header-cell px-1 py-2 text-right" i18n>
|
<th class="mat-header-cell px-1 py-2 text-right">
|
||||||
Registration
|
<ng-container i18n>Registration</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<th class="mat-header-cell px-1 py-2 text-right" i18n>
|
<th class="mat-header-cell px-1 py-2 text-right">
|
||||||
Accounts
|
<ng-container i18n>Accounts</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<th class="mat-header-cell px-1 py-2 text-right" i18n>
|
<th class="mat-header-cell px-1 py-2 text-right">
|
||||||
Activities
|
<ng-container i18n>Activities</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<th class="mat-header-cell px-1 py-2 text-right" i18n>
|
<th class="mat-header-cell px-1 py-2 text-right">
|
||||||
Engagement per Day
|
<ng-container i18n>Engagement per Day</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<th class="mat-header-cell px-1 py-2" i18n>Last Request</th>
|
<th class="mat-header-cell px-1 py-2" i18n>Last Request</th>
|
||||||
<th class="mat-header-cell px-1 py-2"></th>
|
<th class="mat-header-cell px-1 py-2"></th>
|
||||||
|
@ -285,17 +285,16 @@
|
|||||||
mat-flat-button
|
mat-flat-button
|
||||||
><ion-icon name="logo-github"></ion-icon
|
><ion-icon name="logo-github"></ion-icon
|
||||||
></a>
|
></a>
|
||||||
<button class="mx-1" i18n mat-flat-button (click)="openLoginDialog()">
|
<button class="mx-1" mat-flat-button (click)="openLoginDialog()">
|
||||||
Sign In
|
<ng-container i18n>Sign In</ng-container>
|
||||||
</button>
|
</button>
|
||||||
<a
|
<a
|
||||||
*ngIf="currentRoute !== 'register' && !info?.isReadOnlyMode"
|
*ngIf="currentRoute !== 'register' && !info?.isReadOnlyMode"
|
||||||
class="d-none d-sm-block"
|
class="d-none d-sm-block"
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
[routerLink]="['/register']"
|
[routerLink]="['/register']"
|
||||||
>Get Started
|
><ng-container i18n>Get Started</ng-container>
|
||||||
</a>
|
</a>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</mat-toolbar>
|
</mat-toolbar>
|
||||||
|
@ -49,12 +49,11 @@
|
|||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
[disabled]="!data.accessToken"
|
[disabled]="!data.accessToken"
|
||||||
[mat-dialog-close]="data"
|
[mat-dialog-close]="data"
|
||||||
>
|
>
|
||||||
Sign in
|
<ng-container i18n>Sign in</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -18,8 +18,8 @@
|
|||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container matColumnDef="symbol">
|
<ng-container matColumnDef="symbol">
|
||||||
<th *matHeaderCellDef class="px-1" i18n mat-header-cell mat-sort-header>
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
||||||
Symbol
|
<ng-container i18n>Symbol</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="px-1" mat-cell>
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
||||||
<span [title]="element.name">{{ element.symbol | gfSymbol }}</span>
|
<span [title]="element.name">{{ element.symbol | gfSymbol }}</span>
|
||||||
@ -30,11 +30,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell px-1"
|
class="d-none d-lg-table-cell px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Name
|
<ng-container i18n>Name</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
||||||
<ng-container *ngIf="element.name !== element.symbol">{{
|
<ng-container *ngIf="element.name !== element.symbol">{{
|
||||||
@ -47,11 +46,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Value
|
<ng-container i18n>Value</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td class="d-none d-lg-table-cell px-1" mat-cell *matCellDef="let element">
|
<td class="d-none d-lg-table-cell px-1" mat-cell *matCellDef="let element">
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
@ -68,11 +66,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="justify-content-end px-1"
|
class="justify-content-end px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Allocation
|
<ng-container i18n>Allocation</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="px-1" mat-cell>
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
@ -89,10 +86,9 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell px-1 text-right"
|
class="d-none d-lg-table-cell px-1 text-right"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
>
|
>
|
||||||
Performance
|
<ng-container i18n>Performance</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
<td *matCellDef="let element" class="d-none d-lg-table-cell px-1" mat-cell>
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
@ -137,8 +133,8 @@
|
|||||||
*ngIf="dataSource.data.length > pageSize && !isLoading"
|
*ngIf="dataSource.data.length > pageSize && !isLoading"
|
||||||
class="my-3 text-center"
|
class="my-3 text-center"
|
||||||
>
|
>
|
||||||
<button i18n mat-stroked-button (click)="onShowAllPositions()">
|
<button mat-stroked-button (click)="onShowAllPositions()">
|
||||||
Show all
|
<ng-container i18n>Show all</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="mb-5 row">
|
<div class="mb-5 row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h3 class="d-flex justify-content-center mb-3" i18n>About Ghostfolio</h3>
|
<h3 class="d-flex justify-content-center mb-3">About Ghostfolio</h3>
|
||||||
<div class="about-container">
|
<div class="about-container">
|
||||||
<p>
|
<p>
|
||||||
Ghostfolio is a lightweight wealth management application for
|
Ghostfolio is a lightweight wealth management application for
|
||||||
@ -21,7 +21,7 @@
|
|||||||
<ng-container *ngIf="version">
|
<ng-container *ngIf="version">
|
||||||
This instance is running Ghostfolio {{ version }}.
|
This instance is running Ghostfolio {{ version }}.
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container *ngIf="hasPermissionForStatistics" i18n
|
<ng-container *ngIf="hasPermissionForStatistics"
|
||||||
>Check the system status at
|
>Check the system status at
|
||||||
<a href="https://status.ghostfol.io" title="Ghostfolio status"
|
<a href="https://status.ghostfol.io" title="Ghostfolio status"
|
||||||
>status.ghostfol.io</a
|
>status.ghostfol.io</a
|
||||||
@ -102,7 +102,7 @@
|
|||||||
|
|
||||||
<div *ngIf="hasPermissionForStatistics" class="mb-5 row">
|
<div *ngIf="hasPermissionForStatistics" class="mb-5 row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h3 class="mb-3 text-center" i18n>Ghostfolio in Numbers</h3>
|
<h3 class="mb-3 text-center">Ghostfolio in Numbers</h3>
|
||||||
<mat-card>
|
<mat-card>
|
||||||
<mat-card-content>
|
<mat-card-content>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -177,7 +177,6 @@
|
|||||||
<a
|
<a
|
||||||
class="py-2 w-100"
|
class="py-2 w-100"
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-stroked-button
|
mat-stroked-button
|
||||||
[routerLink]="['/faq']"
|
[routerLink]="['/faq']"
|
||||||
>FAQ</a
|
>FAQ</a
|
||||||
@ -190,7 +189,6 @@
|
|||||||
<a
|
<a
|
||||||
class="py-2 w-100"
|
class="py-2 w-100"
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-stroked-button
|
mat-stroked-button
|
||||||
[routerLink]="['/about', 'changelog']"
|
[routerLink]="['/about', 'changelog']"
|
||||||
>Changelog & License</a
|
>Changelog & License</a
|
||||||
@ -200,7 +198,6 @@
|
|||||||
<a
|
<a
|
||||||
class="py-2 w-100"
|
class="py-2 w-100"
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-stroked-button
|
mat-stroked-button
|
||||||
[routerLink]="['/about', 'privacy-policy']"
|
[routerLink]="['/about', 'privacy-policy']"
|
||||||
>Privacy Policy</a
|
>Privacy Policy</a
|
||||||
@ -210,7 +207,6 @@
|
|||||||
<a
|
<a
|
||||||
class="py-2 w-100"
|
class="py-2 w-100"
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
[routerLink]="['/blog']"
|
[routerLink]="['/blog']"
|
||||||
>Blog</a
|
>Blog</a
|
||||||
|
@ -31,11 +31,10 @@
|
|||||||
<ng-container *ngIf="hasPermissionForSubscription">
|
<ng-container *ngIf="hasPermissionForSubscription">
|
||||||
<button
|
<button
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
(click)="onCheckout(priceId)"
|
(click)="onCheckout(priceId)"
|
||||||
>
|
>
|
||||||
Upgrade
|
<ng-container i18n>Upgrade</ng-container>
|
||||||
</button>
|
</button>
|
||||||
<div *ngIf="price" class="mt-1">
|
<div *ngIf="price" class="mt-1">
|
||||||
<ng-container *ngIf="coupon"
|
<ng-container *ngIf="coupon"
|
||||||
@ -91,8 +90,8 @@
|
|||||||
<div class="d-flex mt-4 py-1">
|
<div class="d-flex mt-4 py-1">
|
||||||
<form #changeUserSettingsForm="ngForm" class="w-100">
|
<form #changeUserSettingsForm="ngForm" class="w-100">
|
||||||
<div class="d-flex mb-2">
|
<div class="d-flex mb-2">
|
||||||
<div class="align-items-center d-flex pt-1 pt-1 w-50" i18n>
|
<div class="align-items-center d-flex pt-1 pt-1 w-50">
|
||||||
Base Currency
|
<ng-container i18n>Base Currency</ng-container>
|
||||||
</div>
|
</div>
|
||||||
<div class="pl-1 w-50">
|
<div class="pl-1 w-50">
|
||||||
<mat-form-field appearance="outline" class="w-100">
|
<mat-form-field appearance="outline" class="w-100">
|
||||||
@ -132,8 +131,8 @@
|
|||||||
<div class="align-items-center d-flex mb-2">
|
<div class="align-items-center d-flex mb-2">
|
||||||
<div class="pr-1 w-50">
|
<div class="pr-1 w-50">
|
||||||
<div i18n>Locale</div>
|
<div i18n>Locale</div>
|
||||||
<div class="hint-text text-muted" i18n>
|
<div class="hint-text text-muted">
|
||||||
Date and number format
|
<ng-container i18n>Date and number format</ng-container>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pl-1 w-50">
|
<div class="pl-1 w-50">
|
||||||
@ -155,8 +154,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<div class="align-items-center d-flex pr-1 pt-1 w-50" i18n>
|
<div class="align-items-center d-flex pr-1 pt-1 w-50">
|
||||||
View Mode
|
<ng-container i18n>View Mode</ng-container>
|
||||||
</div>
|
</div>
|
||||||
<div class="pl-1 w-50">
|
<div class="pl-1 w-50">
|
||||||
<div class="align-items-center d-flex overflow-hidden">
|
<div class="align-items-center d-flex overflow-hidden">
|
||||||
|
@ -14,12 +14,11 @@
|
|||||||
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
||||||
<button
|
<button
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
[disabled]="!addAccessForm.form.valid"
|
[disabled]="!addAccessForm.form.valid"
|
||||||
[mat-dialog-close]="data"
|
[mat-dialog-close]="data"
|
||||||
>
|
>
|
||||||
Save
|
<ng-container i18n>Save</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -66,12 +66,11 @@
|
|||||||
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
<button i18n mat-button (click)="onCancel()">Cancel</button>
|
||||||
<button
|
<button
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
[disabled]="!addAccountForm.form.valid"
|
[disabled]="!addAccountForm.form.valid"
|
||||||
[mat-dialog-close]="data"
|
[mat-dialog-close]="data"
|
||||||
>
|
>
|
||||||
Save
|
<ng-container i18n>Save</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -1,36 +1,34 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="mb-5 row">
|
<div class="mb-5 row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h3 class="mb-3 text-center" i18n>Frequently Asked Questions (FAQ)</h3>
|
<h3 class="mb-3 text-center">Frequently Asked Questions (FAQ)</h3>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>What is Ghostfolio?</mat-card-title>
|
<mat-card-title>What is Ghostfolio?</mat-card-title>
|
||||||
<mat-card-content i18n>
|
<mat-card-content>
|
||||||
Ghostfolio is a lightweight, open source wealth management application
|
Ghostfolio is a lightweight, open source wealth management application
|
||||||
for individuals to keep track of their net worth. The software
|
for individuals to keep track of their net worth. The software
|
||||||
empowers you to make solid, data-driven investment decisions.
|
empowers you to make solid, data-driven investment decisions.
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n
|
<mat-card-title
|
||||||
>What assets can I track with Ghostfolio?</mat-card-title
|
>What assets can I track with Ghostfolio?</mat-card-title
|
||||||
>
|
>
|
||||||
<mat-card-content i18n>
|
<mat-card-content>
|
||||||
With Ghostfolio, you can keep track of various assets like stocks,
|
With Ghostfolio, you can keep track of various assets like stocks,
|
||||||
ETFs or cryptocurrencies.
|
ETFs or cryptocurrencies.
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n
|
<mat-card-title>What else is included in Ghostfolio?</mat-card-title>
|
||||||
>What else is included in Ghostfolio?</mat-card-title
|
<mat-card-content>
|
||||||
>
|
|
||||||
<mat-card-content i18n>
|
|
||||||
Please find a feature overview to manage your wealth
|
Please find a feature overview to manage your wealth
|
||||||
<a [routerLink]="['/features']">here</a>.
|
<a [routerLink]="['/features']">here</a>.
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>How do I start?</mat-card-title>
|
<mat-card-title>How do I start?</mat-card-title>
|
||||||
<mat-card-content i18n>
|
<mat-card-content>
|
||||||
You can sign up via the “<a [routerLink]="['/register']"
|
You can sign up via the “<a [routerLink]="['/register']"
|
||||||
>Get Started</a
|
>Get Started</a
|
||||||
>” button at the top of the page. You have multiple options to join
|
>” button at the top of the page. You have multiple options to join
|
||||||
@ -42,8 +40,8 @@
|
|||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>Can I use Ghostfolio anonymously?</mat-card-title>
|
<mat-card-title>Can I use Ghostfolio anonymously?</mat-card-title>
|
||||||
<mat-card-content i18n>
|
<mat-card-content>
|
||||||
Yes, the authentication systems (via security token or
|
Yes, the authentication systems (via security token or
|
||||||
<a href="../en/blog/2022/07/ghostfolio-meets-internet-identity"
|
<a href="../en/blog/2022/07/ghostfolio-meets-internet-identity"
|
||||||
>Internet Identity</a
|
>Internet Identity</a
|
||||||
@ -52,8 +50,8 @@
|
|||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>How can Ghostfolio be free?</mat-card-title>
|
<mat-card-title>How can Ghostfolio be free?</mat-card-title>
|
||||||
<mat-card-content i18n
|
<mat-card-content
|
||||||
>This project is driven by the efforts of contributors from around the
|
>This project is driven by the efforts of contributors from around the
|
||||||
world. The
|
world. The
|
||||||
<a href="https://github.com/ghostfolio/ghostfolio">source code</a> is
|
<a href="https://github.com/ghostfolio/ghostfolio">source code</a> is
|
||||||
@ -64,16 +62,16 @@
|
|||||||
>
|
>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>Is it really free?</mat-card-title>
|
<mat-card-title>Is it really free?</mat-card-title>
|
||||||
<mat-card-content i18n
|
<mat-card-content
|
||||||
>Yes, it is! Our
|
>Yes, it is! Our
|
||||||
<a [routerLink]="['/pricing']">pricing page</a> details everything you
|
<a [routerLink]="['/pricing']">pricing page</a> details everything you
|
||||||
get for free.</mat-card-content
|
get for free.</mat-card-content
|
||||||
>
|
>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>What is Ghostfolio Premium?</mat-card-title>
|
<mat-card-title>What is Ghostfolio Premium?</mat-card-title>
|
||||||
<mat-card-content i18n
|
<mat-card-content
|
||||||
><a [routerLink]="['/pricing']">Ghostfolio Premium</a> is a fully
|
><a [routerLink]="['/pricing']">Ghostfolio Premium</a> is a fully
|
||||||
managed Ghostfolio cloud offering for ambitious investors. The revenue
|
managed Ghostfolio cloud offering for ambitious investors. The revenue
|
||||||
is used to cover the hosting infrastructure. It is the Open Source
|
is used to cover the hosting infrastructure. It is the Open Source
|
||||||
@ -81,8 +79,8 @@
|
|||||||
>
|
>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>Can I start with a trial version?</mat-card-title>
|
<mat-card-title>Can I start with a trial version?</mat-card-title>
|
||||||
<mat-card-content i18n
|
<mat-card-content
|
||||||
>Yes, you can try
|
>Yes, you can try
|
||||||
<a [routerLink]="['/pricing']">Ghostfolio Premium</a> by signing up
|
<a [routerLink]="['/pricing']">Ghostfolio Premium</a> by signing up
|
||||||
for Ghostfolio and applying for a trial (see “My Ghostfolio”). It’s
|
for Ghostfolio and applying for a trial (see “My Ghostfolio”). It’s
|
||||||
@ -91,8 +89,8 @@
|
|||||||
>
|
>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>Which devices are supported?</mat-card-title>
|
<mat-card-title>Which devices are supported?</mat-card-title>
|
||||||
<mat-card-content i18n
|
<mat-card-content
|
||||||
>Ghostfolio works in every modern web browser on smartphones, tablets
|
>Ghostfolio works in every modern web browser on smartphones, tablets
|
||||||
and desktop computers (where you have even more analysis options and
|
and desktop computers (where you have even more analysis options and
|
||||||
statistics). For Android users, there is a dedicated Ghostfolio app
|
statistics). For Android users, there is a dedicated Ghostfolio app
|
||||||
@ -104,10 +102,10 @@
|
|||||||
>
|
>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n
|
<mat-card-title
|
||||||
>Ghostfolio sounds cool, how can I get involved?</mat-card-title
|
>Ghostfolio sounds cool, how can I get involved?</mat-card-title
|
||||||
>
|
>
|
||||||
<mat-card-content i18n
|
<mat-card-content
|
||||||
>Any support for Ghostfolio is welcome. Be it with a
|
>Any support for Ghostfolio is welcome. Be it with a
|
||||||
<a [routerLink]="['/pricing']">Ghostfolio Premium</a> subscription to
|
<a [routerLink]="['/pricing']">Ghostfolio Premium</a> subscription to
|
||||||
finance the hosting, a positive rating in the
|
finance the hosting, a positive rating in the
|
||||||
@ -124,8 +122,8 @@
|
|||||||
>
|
>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-title i18n>Got any other questions?</mat-card-title>
|
<mat-card-title>Got any other questions?</mat-card-title>
|
||||||
<mat-card-content i18n
|
<mat-card-content
|
||||||
>Join the Ghostfolio
|
>Join the Ghostfolio
|
||||||
<a
|
<a
|
||||||
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg"
|
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg"
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h3 class="d-flex justify-content-center mb-3 text-center" i18n>
|
<h3 class="d-flex justify-content-center mb-3 text-center">Features</h3>
|
||||||
Features
|
|
||||||
</h3>
|
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<p>
|
<p>
|
||||||
Check out the numerous features of <strong>Ghostfolio</strong> to
|
Check out the numerous features of <strong>Ghostfolio</strong> to
|
||||||
@ -14,7 +12,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>Stocks</h4>
|
<h4>Stocks</h4>
|
||||||
<p class="m-0">Keep track of your stock purchases and sales.</p>
|
<p class="m-0">Keep track of your stock purchases and sales.</p>
|
||||||
</div>
|
</div>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
@ -22,7 +20,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>ETFs</h4>
|
<h4>ETFs</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Are you into ETFs (Exchange Traded Funds)? Track your ETF
|
Are you into ETFs (Exchange Traded Funds)? Track your ETF
|
||||||
investments.
|
investments.
|
||||||
@ -33,7 +31,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>Bonds</h4>
|
<h4>Bonds</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Manage your investment in bonds and other assets with fixed
|
Manage your investment in bonds and other assets with fixed
|
||||||
income.
|
income.
|
||||||
@ -44,7 +42,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>Cryptocurrencies</h4>
|
<h4>Cryptocurrencies</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Keep track of your Bitcoin and Altcoin holdings.
|
Keep track of your Bitcoin and Altcoin holdings.
|
||||||
</p>
|
</p>
|
||||||
@ -54,7 +52,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>Dividend</h4>
|
<h4>Dividend</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Are you building a dividend portfolio? Track your dividend in
|
Are you building a dividend portfolio? Track your dividend in
|
||||||
Ghostfolio.
|
Ghostfolio.
|
||||||
@ -65,7 +63,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex" i18n>Wealth Items</h4>
|
<h4 class="align-items-center d-flex">Wealth Items</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Track all your treasuries, be it your luxury watch or rare
|
Track all your treasuries, be it your luxury watch or rare
|
||||||
trading cards.
|
trading cards.
|
||||||
@ -76,7 +74,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex" i18n>Emergency Fund</h4>
|
<h4 class="align-items-center d-flex">Emergency Fund</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Define your emergency fund you are comfortable with for
|
Define your emergency fund you are comfortable with for
|
||||||
difficult times.
|
difficult times.
|
||||||
@ -87,7 +85,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex" i18n>Import and Export</h4>
|
<h4 class="align-items-center d-flex">Import and Export</h4>
|
||||||
<p class="m-0">Import and export your investment activities.</p>
|
<p class="m-0">Import and export your investment activities.</p>
|
||||||
</div>
|
</div>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
@ -95,7 +93,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>Multi-Accounts</h4>
|
<h4>Multi-Accounts</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Keep an eye on all your accounts across multiple platforms
|
Keep an eye on all your accounts across multiple platforms
|
||||||
(multi-banking).
|
(multi-banking).
|
||||||
@ -107,7 +105,7 @@
|
|||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex">
|
<h4 class="align-items-center d-flex">
|
||||||
<span i18n>Portfolio Calculations</span>
|
<span>Portfolio Calculations</span>
|
||||||
<gf-premium-indicator
|
<gf-premium-indicator
|
||||||
*ngIf="hasPermissionForSubscription"
|
*ngIf="hasPermissionForSubscription"
|
||||||
class="ml-1"
|
class="ml-1"
|
||||||
@ -125,7 +123,7 @@
|
|||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex">
|
<h4 class="align-items-center d-flex">
|
||||||
<span i18n>Portfolio Allocations</span>
|
<span>Portfolio Allocations</span>
|
||||||
<gf-premium-indicator
|
<gf-premium-indicator
|
||||||
*ngIf="hasPermissionForSubscription"
|
*ngIf="hasPermissionForSubscription"
|
||||||
class="ml-1"
|
class="ml-1"
|
||||||
@ -141,7 +139,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex" i18n>Dark Mode</h4>
|
<h4 class="align-items-center d-flex">Dark Mode</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Ghostfolio automatically switches to a dark color theme based on
|
Ghostfolio automatically switches to a dark color theme based on
|
||||||
your operating system's preferences.
|
your operating system's preferences.
|
||||||
@ -152,7 +150,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex" i18n>Zen Mode</h4>
|
<h4 class="align-items-center d-flex">Zen Mode</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Keep calm and activate Zen Mode if the markets are going crazy.
|
Keep calm and activate Zen Mode if the markets are going crazy.
|
||||||
</p>
|
</p>
|
||||||
@ -166,7 +164,7 @@
|
|||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex">
|
<h4 class="align-items-center d-flex">
|
||||||
<span i18n>Market Mood</span>
|
<span>Market Mood</span>
|
||||||
<gf-premium-indicator class="ml-1"></gf-premium-indicator>
|
<gf-premium-indicator class="ml-1"></gf-premium-indicator>
|
||||||
</h4>
|
</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
@ -181,7 +179,7 @@
|
|||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex">
|
<h4 class="align-items-center d-flex">
|
||||||
<span i18n>Static Analysis</span>
|
<span>Static Analysis</span>
|
||||||
<gf-premium-indicator
|
<gf-premium-indicator
|
||||||
*ngIf="hasPermissionForSubscription"
|
*ngIf="hasPermissionForSubscription"
|
||||||
class="ml-1"
|
class="ml-1"
|
||||||
@ -197,7 +195,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>Community</h4>
|
<h4>Community</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
Join the Ghostfolio
|
Join the Ghostfolio
|
||||||
<a
|
<a
|
||||||
@ -214,7 +212,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>Open Source Software</h4>
|
<h4>Open Source Software</h4>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
The source code is fully available as
|
The source code is fully available as
|
||||||
<a
|
<a
|
||||||
@ -232,7 +230,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div *ngIf="!user" class="row">
|
<div *ngIf="!user" class="row">
|
||||||
<div class="col mt-3 text-center">
|
<div class="col mt-3 text-center">
|
||||||
<a color="primary" i18n mat-flat-button [routerLink]="['/register']">
|
<a color="primary" mat-flat-button [routerLink]="['/register']">
|
||||||
Get Started
|
Get Started
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col text-center">
|
<div class="col text-center">
|
||||||
<h1 class="font-weight-bold intro my-5" i18n>
|
<h1 class="font-weight-bold intro my-5">
|
||||||
Manage your wealth like a boss
|
Manage your wealth like a boss
|
||||||
</h1>
|
</h1>
|
||||||
<div>
|
<div>
|
||||||
@ -29,19 +29,13 @@
|
|||||||
<a
|
<a
|
||||||
class="d-inline-block"
|
class="d-inline-block"
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
[routerLink]="['/register']"
|
[routerLink]="['/register']"
|
||||||
>
|
>
|
||||||
Get Started
|
Get Started
|
||||||
</a>
|
</a>
|
||||||
<div class="d-inline-block mx-3 text-muted" i18n>or</div>
|
<div class="d-inline-block mx-3 text-muted">or</div>
|
||||||
<a
|
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||||
class="d-inline-block"
|
|
||||||
i18n
|
|
||||||
mat-stroked-button
|
|
||||||
[routerLink]="['/demo']"
|
|
||||||
>
|
|
||||||
Live Demo
|
Live Demo
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -107,7 +101,7 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="mt-4 text-center">
|
<div class="mt-4 text-center">
|
||||||
<a [routerLink]="['/about']" i18n mat-stroked-button
|
<a [routerLink]="['/about']" mat-stroked-button
|
||||||
>Learn more about Ghostfolio</a
|
>Learn more about Ghostfolio</a
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@ -162,16 +156,11 @@
|
|||||||
Join now or check out the example account
|
Join now or check out the example account
|
||||||
</p>
|
</p>
|
||||||
<div class="py-2 text-center">
|
<div class="py-2 text-center">
|
||||||
<a color="primary" i18n mat-flat-button [routerLink]="['/register']">
|
<a color="primary" mat-flat-button [routerLink]="['/register']">
|
||||||
Get Started
|
Get Started
|
||||||
</a>
|
</a>
|
||||||
<div class="d-inline-block mx-3 text-muted" i18n>or</div>
|
<div class="d-inline-block mx-3 text-muted">or</div>
|
||||||
<a
|
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||||
class="d-inline-block"
|
|
||||||
i18n
|
|
||||||
mat-stroked-button
|
|
||||||
[routerLink]="['/demo']"
|
|
||||||
>
|
|
||||||
Live Demo
|
Live Demo
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -94,8 +94,8 @@
|
|||||||
<div class="col-md-12 allocations-by-symbol">
|
<div class="col-md-12 allocations-by-symbol">
|
||||||
<mat-card class="mb-3">
|
<mat-card class="mb-3">
|
||||||
<mat-card-header class="overflow-hidden w-100">
|
<mat-card-header class="overflow-hidden w-100">
|
||||||
<mat-card-title class="align-items-center d-flex text-truncate" i18n>
|
<mat-card-title class="align-items-center d-flex text-truncate">
|
||||||
By Holding</mat-card-title
|
<ng-container i18n>By Holding</ng-container></mat-card-title
|
||||||
>
|
>
|
||||||
<gf-toggle
|
<gf-toggle
|
||||||
[defaultValue]="period"
|
[defaultValue]="period"
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h3 class="align-items-center d-flex justify-content-center mb-3" i18n>
|
<h3 class="align-items-center d-flex justify-content-center mb-3">
|
||||||
X-ray
|
X-ray
|
||||||
</h3>
|
</h3>
|
||||||
<p class="mb-4" i18n>
|
<p class="mb-4">
|
||||||
Ghostfolio X-ray uses static analysis to identify potential issues and
|
Ghostfolio X-ray uses static analysis to identify potential issues and
|
||||||
risks in your portfolio.
|
risks in your portfolio.
|
||||||
<span class="d-none"
|
<span class="d-none"
|
||||||
@ -14,21 +14,21 @@
|
|||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<h4 class="m-0" i18n>Currency Cluster Risks</h4>
|
<h4 class="m-0">Currency Cluster Risks</h4>
|
||||||
<gf-rules
|
<gf-rules
|
||||||
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
||||||
[rules]="currencyClusterRiskRules"
|
[rules]="currencyClusterRiskRules"
|
||||||
></gf-rules>
|
></gf-rules>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<h4 class="m-0" i18n>Account Cluster Risks</h4>
|
<h4 class="m-0">Account Cluster Risks</h4>
|
||||||
<gf-rules
|
<gf-rules
|
||||||
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
||||||
[rules]="accountClusterRiskRules"
|
[rules]="accountClusterRiskRules"
|
||||||
></gf-rules>
|
></gf-rules>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 class="m-0" i18n>Fees</h4>
|
<h4 class="m-0">Fees</h4>
|
||||||
<gf-rules
|
<gf-rules
|
||||||
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
[hasPermissionToCreateOrder]="hasPermissionToCreateOrder"
|
||||||
[rules]="feeRules"
|
[rules]="feeRules"
|
||||||
|
@ -201,12 +201,11 @@
|
|||||||
<button i18n mat-button type="button" (click)="onCancel()">Cancel</button>
|
<button i18n mat-button type="button" (click)="onCancel()">Cancel</button>
|
||||||
<button
|
<button
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
type="submit"
|
type="submit"
|
||||||
[disabled]="!activityForm.valid"
|
[disabled]="!activityForm.valid"
|
||||||
>
|
>
|
||||||
Save
|
<ng-container i18n>Save</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h3 class="d-flex justify-content-center mb-3 text-center" i18n>
|
<h3 class="d-flex justify-content-center mb-3 text-center">
|
||||||
Pricing Plans
|
Pricing Plans
|
||||||
</h3>
|
</h3>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
@ -20,7 +20,7 @@
|
|||||||
<div class="col-xs-12 col-md-4 mb-3">
|
<div class="col-xs-12 col-md-4 mb-3">
|
||||||
<mat-card class="d-flex flex-column h-100">
|
<mat-card class="d-flex flex-column h-100">
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 i18n>Open Source</h4>
|
<h4>Open Source</h4>
|
||||||
<p>
|
<p>
|
||||||
For tech-savvy investors who prefer to run
|
For tech-savvy investors who prefer to run
|
||||||
<strong>Ghostfolio</strong> on their own infrastructure.
|
<strong>Ghostfolio</strong> on their own infrastructure.
|
||||||
@ -73,7 +73,7 @@
|
|||||||
[ngClass]="{ 'active': user?.subscription?.type === 'Basic' }"
|
[ngClass]="{ 'active': user?.subscription?.type === 'Basic' }"
|
||||||
>
|
>
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex" i18n>Basic</h4>
|
<h4 class="align-items-center d-flex">Basic</h4>
|
||||||
<p>
|
<p>
|
||||||
For new investors who are just getting started with trading.
|
For new investors who are just getting started with trading.
|
||||||
</p>
|
</p>
|
||||||
@ -124,7 +124,7 @@
|
|||||||
>
|
>
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<h4 class="align-items-center d-flex">
|
<h4 class="align-items-center d-flex">
|
||||||
<span i18n>Premium</span>
|
<span>Premium</span>
|
||||||
<gf-premium-indicator
|
<gf-premium-indicator
|
||||||
class="ml-1"
|
class="ml-1"
|
||||||
[enableLink]="false"
|
[enableLink]="false"
|
||||||
@ -186,7 +186,7 @@
|
|||||||
>{{ baseCurrency }} <strong
|
>{{ baseCurrency }} <strong
|
||||||
>{{ price }}</strong
|
>{{ price }}</strong
|
||||||
></ng-container
|
></ng-container
|
||||||
> <span i18n>per year</span></span
|
> <span>per year</span></span
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
@ -196,14 +196,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<div *ngIf="user?.subscription?.type === 'Basic'" class="row">
|
<div *ngIf="user?.subscription?.type === 'Basic'" class="row">
|
||||||
<div class="col mt-3 text-center">
|
<div class="col mt-3 text-center">
|
||||||
<a color="primary" i18n mat-flat-button [routerLink]="['/account']">
|
<a color="primary" mat-flat-button [routerLink]="['/account']">
|
||||||
Upgrade Plan
|
Upgrade Plan
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!user" class="row">
|
<div *ngIf="!user" class="row">
|
||||||
<div class="col mt-3 text-center">
|
<div class="col mt-3 text-center">
|
||||||
<a color="primary" i18n mat-flat-button [routerLink]="['/register']">
|
<a color="primary" mat-flat-button [routerLink]="['/register']">
|
||||||
Get Started
|
Get Started
|
||||||
</a>
|
</a>
|
||||||
<p class="text-muted"><small>It's free</small></p>
|
<p class="text-muted"><small>It's free</small></p>
|
||||||
|
@ -129,8 +129,8 @@
|
|||||||
Ghostfolio empowers you to keep track of your wealth.
|
Ghostfolio empowers you to keep track of your wealth.
|
||||||
</p>
|
</p>
|
||||||
<div class="py-2 text-center">
|
<div class="py-2 text-center">
|
||||||
<a color="primary" href="https://ghostfol.io" i18n mat-flat-button>
|
<a color="primary" href="https://ghostfol.io" mat-flat-button>
|
||||||
Get Started
|
<ng-container i18n>Get Started</ng-container>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -20,12 +20,11 @@
|
|||||||
<button
|
<button
|
||||||
class="d-inline-block"
|
class="d-inline-block"
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
[disabled]="!demoAuthToken || info?.isReadOnlyMode"
|
[disabled]="!demoAuthToken || info?.isReadOnlyMode"
|
||||||
(click)="createAccount()"
|
(click)="createAccount()"
|
||||||
>
|
>
|
||||||
Create Account
|
<ng-container i18n>Create Account</ng-container>
|
||||||
</button>
|
</button>
|
||||||
<ng-container *ngIf="hasPermissionForSocialLogin">
|
<ng-container *ngIf="hasPermissionForSocialLogin">
|
||||||
<div class="my-3 text-muted" i18n>or</div>
|
<div class="my-3 text-muted" i18n>or</div>
|
||||||
|
@ -14,21 +14,20 @@
|
|||||||
*ngIf="hasError"
|
*ngIf="hasError"
|
||||||
class="align-items-center col d-flex flex-column justify-content-center"
|
class="align-items-center col d-flex flex-column justify-content-center"
|
||||||
>
|
>
|
||||||
<h1 class="d-flex h5 justify-content-center mb-0 text-center" i18n>
|
<h1 class="d-flex h5 justify-content-center mb-0 text-center">
|
||||||
Oops, authentication has failed.
|
<ng-container i18n>Oops, authentication has failed.</ng-container>
|
||||||
</h1>
|
</h1>
|
||||||
<button
|
<button
|
||||||
class="mb-3 mt-4"
|
class="mb-3 mt-4"
|
||||||
color="primary"
|
color="primary"
|
||||||
i18n
|
|
||||||
mat-flat-button
|
mat-flat-button
|
||||||
(click)="signIn()"
|
(click)="signIn()"
|
||||||
>
|
>
|
||||||
Try again
|
<ng-container i18n>Try again</ng-container>
|
||||||
</button>
|
</button>
|
||||||
<div class="text-muted" i18n>or</div>
|
<div class="text-muted"><ng-container i18n>or</ng-container></div>
|
||||||
<button class="mt-1" i18n mat-flat-button (click)="deregisterDevice()">
|
<button class="mt-1" mat-flat-button (click)="deregisterDevice()">
|
||||||
Go back to Home Page
|
<ng-container i18n>Go back to Home Page</ng-container>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -36,8 +36,8 @@
|
|||||||
></td>
|
></td>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container matColumnDef="date">
|
<ng-container matColumnDef="date">
|
||||||
<th *matHeaderCellDef class="px-1" i18n mat-header-cell mat-sort-header>
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
||||||
Date
|
<ng-container i18n>Date</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="px-1" mat-cell>
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
@ -48,8 +48,8 @@
|
|||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container matColumnDef="type">
|
<ng-container matColumnDef="type">
|
||||||
<th *matHeaderCellDef class="px-1" i18n mat-header-cell mat-sort-header>
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
||||||
Type
|
<ng-container i18n>Type</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" mat-cell class="px-1">
|
<td *matCellDef="let element" mat-cell class="px-1">
|
||||||
<div
|
<div
|
||||||
@ -80,8 +80,8 @@
|
|||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container matColumnDef="symbol">
|
<ng-container matColumnDef="symbol">
|
||||||
<th *matHeaderCellDef class="px-1" i18n mat-header-cell mat-sort-header>
|
<th *matHeaderCellDef class="px-1" mat-header-cell mat-sort-header>
|
||||||
Symbol
|
<ng-container i18n>Symbol</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="px-1" mat-cell>
|
<td *matCellDef="let element" class="px-1" mat-cell>
|
||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
@ -103,11 +103,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell px-1"
|
class="d-none d-lg-table-cell px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Currency
|
<ng-container i18n>Currency</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td
|
<td
|
||||||
*matCellDef="let element"
|
*matCellDef="let element"
|
||||||
@ -125,11 +124,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Quantity
|
<ng-container i18n>Quantity</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td
|
<td
|
||||||
*matCellDef="let element"
|
*matCellDef="let element"
|
||||||
@ -155,11 +153,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Unit Price
|
<ng-container i18n>Unit Price</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td
|
<td
|
||||||
*matCellDef="let element"
|
*matCellDef="let element"
|
||||||
@ -185,11 +182,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Fee
|
<ng-container i18n>Fee</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td
|
<td
|
||||||
*matCellDef="let element"
|
*matCellDef="let element"
|
||||||
@ -219,11 +215,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-none d-lg-table-cell justify-content-end px-1"
|
class="d-none d-lg-table-cell justify-content-end px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Value
|
<ng-container i18n>Value</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td
|
<td
|
||||||
*matCellDef="let element"
|
*matCellDef="let element"
|
||||||
@ -255,11 +250,10 @@
|
|||||||
<th
|
<th
|
||||||
*matHeaderCellDef
|
*matHeaderCellDef
|
||||||
class="d-lg-none d-xl-none justify-content-end px-1"
|
class="d-lg-none d-xl-none justify-content-end px-1"
|
||||||
i18n
|
|
||||||
mat-header-cell
|
mat-header-cell
|
||||||
mat-sort-header
|
mat-sort-header
|
||||||
>
|
>
|
||||||
Value
|
<ng-container i18n>Value</ng-container>
|
||||||
</th>
|
</th>
|
||||||
<td *matCellDef="let element" class="d-lg-none d-xl-none px-1" mat-cell>
|
<td *matCellDef="let element" class="d-lg-none d-xl-none px-1" mat-cell>
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user