Browse Source
Merge branch 'main' into task/harden-endpoint-of-public-access-for-portfolio-sharing
pull/7205/head
Thomas Kaul
2 weeks ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with
19 additions and
3 deletions
-
CHANGELOG.md
-
apps/client/src/app/pages/about/overview/about-overview-page.html
-
apps/client/src/app/pages/landing/landing-page.html
-
apps/client/src/app/pages/open/open-page.html
-
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
-
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html
-
libs/ui/src/lib/accounts-table/accounts-table.component.html
-
libs/ui/src/lib/activities-table/activities-table.component.html
-
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
-
libs/ui/src/lib/holdings-table/holdings-table.component.html
-
libs/ui/src/lib/premium-indicator/premium-indicator.component.html
-
libs/ui/src/lib/top-holdings/top-holdings.component.html
|
|
@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 |
|
|
### Changed |
|
|
### Changed |
|
|
|
|
|
|
|
|
- Hardened the endpoint of the public access for portfolio sharing by restricting it to public accesses |
|
|
- Hardened the endpoint of the public access for portfolio sharing by restricting it to public accesses |
|
|
|
|
|
- Improved the language localization by translating various tooltips across the application |
|
|
|
|
|
|
|
|
## 3.19.1 - 2026-07-03 |
|
|
## 3.19.1 - 2026-07-03 |
|
|
|
|
|
|
|
|
|
|
|
@ -16,6 +16,7 @@ |
|
|
>The source code is fully available as |
|
|
>The source code is fully available as |
|
|
<a |
|
|
<a |
|
|
href="https://github.com/ghostfolio/ghostfolio" |
|
|
href="https://github.com/ghostfolio/ghostfolio" |
|
|
|
|
|
i18n-title |
|
|
title="Find Ghostfolio on GitHub" |
|
|
title="Find Ghostfolio on GitHub" |
|
|
>open source software</a |
|
|
>open source software</a |
|
|
> |
|
|
> |
|
|
@ -49,6 +50,7 @@ |
|
|
>and is driven by the efforts of its |
|
|
>and is driven by the efforts of its |
|
|
<a |
|
|
<a |
|
|
href="https://github.com/ghostfolio/ghostfolio/graphs/contributors" |
|
|
href="https://github.com/ghostfolio/ghostfolio/graphs/contributors" |
|
|
|
|
|
i18n-title |
|
|
title="Contributors to Ghostfolio" |
|
|
title="Contributors to Ghostfolio" |
|
|
>contributors</a |
|
|
>contributors</a |
|
|
></ng-container |
|
|
></ng-container |
|
|
@ -72,12 +74,14 @@ |
|
|
Ghostfolio |
|
|
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" |
|
|
|
|
|
i18n-title |
|
|
title="Join the Ghostfolio Slack community" |
|
|
title="Join the Ghostfolio Slack community" |
|
|
>Slack</a |
|
|
>Slack</a |
|
|
> |
|
|
> |
|
|
community, post to |
|
|
community, post to |
|
|
<a |
|
|
<a |
|
|
href="https://x.com/ghostfolio_" |
|
|
href="https://x.com/ghostfolio_" |
|
|
|
|
|
i18n-title |
|
|
title="Post to Ghostfolio on X (formerly Twitter)" |
|
|
title="Post to Ghostfolio on X (formerly Twitter)" |
|
|
>@ghostfolio_</a |
|
|
>@ghostfolio_</a |
|
|
></ng-container |
|
|
></ng-container |
|
|
|
|
|
@ -14,6 +14,7 @@ |
|
|
<div class="mb-4"> |
|
|
<div class="mb-4"> |
|
|
<a |
|
|
<a |
|
|
href="https://www.youtube.com/watch?v=yY6ObSQVJZk" |
|
|
href="https://www.youtube.com/watch?v=yY6ObSQVJZk" |
|
|
|
|
|
i18n-title |
|
|
target="_blank" |
|
|
target="_blank" |
|
|
title="Watch the Ghostfol.io Trailer on YouTube" |
|
|
title="Watch the Ghostfol.io Trailer on YouTube" |
|
|
> |
|
|
> |
|
|
@ -58,6 +59,7 @@ |
|
|
> |
|
|
> |
|
|
<a |
|
|
<a |
|
|
class="d-block" |
|
|
class="d-block" |
|
|
|
|
|
i18n-title |
|
|
title="Ghostfolio in Numbers: Monthly Active Users (MAU)" |
|
|
title="Ghostfolio in Numbers: Monthly Active Users (MAU)" |
|
|
[routerLink]="routerLinkOpenStartup" |
|
|
[routerLink]="routerLinkOpenStartup" |
|
|
> |
|
|
> |
|
|
@ -76,6 +78,7 @@ |
|
|
> |
|
|
> |
|
|
<a |
|
|
<a |
|
|
class="d-block" |
|
|
class="d-block" |
|
|
|
|
|
i18n-title |
|
|
title="Ghostfolio in Numbers: Stars on GitHub" |
|
|
title="Ghostfolio in Numbers: Stars on GitHub" |
|
|
[routerLink]="routerLinkOpenStartup" |
|
|
[routerLink]="routerLinkOpenStartup" |
|
|
> |
|
|
> |
|
|
@ -94,6 +97,7 @@ |
|
|
> |
|
|
> |
|
|
<a |
|
|
<a |
|
|
class="d-block" |
|
|
class="d-block" |
|
|
|
|
|
i18n-title |
|
|
title="Ghostfolio in Numbers: Pulls on Docker Hub" |
|
|
title="Ghostfolio in Numbers: Pulls on Docker Hub" |
|
|
[routerLink]="routerLinkOpenStartup" |
|
|
[routerLink]="routerLinkOpenStartup" |
|
|
> |
|
|
> |
|
|
|
|
|
@ -8,6 +8,7 @@ |
|
|
the source code as |
|
|
the source code as |
|
|
<a |
|
|
<a |
|
|
href="https://github.com/ghostfolio/ghostfolio" |
|
|
href="https://github.com/ghostfolio/ghostfolio" |
|
|
|
|
|
i18n-title |
|
|
title="Find Ghostfolio on GitHub" |
|
|
title="Find Ghostfolio on GitHub" |
|
|
>open source software</a |
|
|
>open source software</a |
|
|
> |
|
|
> |
|
|
|
|
|
@ -233,6 +233,7 @@ |
|
|
) { |
|
|
) { |
|
|
<button |
|
|
<button |
|
|
class="ml-2 mt-1 no-min-width" |
|
|
class="ml-2 mt-1 no-min-width" |
|
|
|
|
|
i18n-title |
|
|
mat-button |
|
|
mat-button |
|
|
title="Apply current market price" |
|
|
title="Apply current market price" |
|
|
type="button" |
|
|
type="button" |
|
|
|
|
|
@ -28,6 +28,7 @@ |
|
|
<div class="flex-nowrap no-gutters row"> |
|
|
<div class="flex-nowrap no-gutters row"> |
|
|
<a |
|
|
<a |
|
|
class="d-flex overflow-hidden p-3 w-100" |
|
|
class="d-flex overflow-hidden p-3 w-100" |
|
|
|
|
|
i18n-title |
|
|
title="Compare Ghostfolio to {{ |
|
|
title="Compare Ghostfolio to {{ |
|
|
personalFinanceTool.name |
|
|
personalFinanceTool.name |
|
|
}} - {{ personalFinanceTool.slogan }}" |
|
|
}} - {{ personalFinanceTool.slogan }}" |
|
|
|
|
|
@ -281,6 +281,7 @@ |
|
|
@if (element.comment) { |
|
|
@if (element.comment) { |
|
|
<button |
|
|
<button |
|
|
class="mx-1 no-min-width px-2" |
|
|
class="mx-1 no-min-width px-2" |
|
|
|
|
|
i18n-title |
|
|
mat-button |
|
|
mat-button |
|
|
title="Note" |
|
|
title="Note" |
|
|
(click)="onOpenComment(element.comment); $event.stopPropagation()" |
|
|
(click)="onOpenComment(element.comment); $event.stopPropagation()" |
|
|
|
|
|
@ -366,6 +366,7 @@ |
|
|
@if (element.comment) { |
|
|
@if (element.comment) { |
|
|
<button |
|
|
<button |
|
|
class="mx-1 no-min-width px-2" |
|
|
class="mx-1 no-min-width px-2" |
|
|
|
|
|
i18n-title |
|
|
mat-button |
|
|
mat-button |
|
|
title="Note" |
|
|
title="Note" |
|
|
(click)="onOpenComment(element.comment); $event.stopPropagation()" |
|
|
(click)="onOpenComment(element.comment); $event.stopPropagation()" |
|
|
|
|
|
@ -35,6 +35,7 @@ |
|
|
</mat-form-field> |
|
|
</mat-form-field> |
|
|
<button |
|
|
<button |
|
|
class="ml-2 mt-1 no-min-width" |
|
|
class="ml-2 mt-1 no-min-width" |
|
|
|
|
|
i18n-title |
|
|
mat-button |
|
|
mat-button |
|
|
title="Fetch market price" |
|
|
title="Fetch market price" |
|
|
(click)="onFetchSymbolForDate()" |
|
|
(click)="onFetchSymbolForDate()" |
|
|
|
|
|
@ -120,7 +120,7 @@ |
|
|
mat-sort-header |
|
|
mat-sort-header |
|
|
> |
|
|
> |
|
|
<span class="d-none d-sm-block" i18n>Allocation</span> |
|
|
<span class="d-none d-sm-block" i18n>Allocation</span> |
|
|
<span class="d-block d-sm-none" title="Allocation">%</span> |
|
|
<span class="d-block d-sm-none" i18n-title title="Allocation">%</span> |
|
|
</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"> |
|
|
@ -164,7 +164,7 @@ |
|
|
mat-sort-header="netPerformancePercentWithCurrencyEffect" |
|
|
mat-sort-header="netPerformancePercentWithCurrencyEffect" |
|
|
> |
|
|
> |
|
|
<span class="d-none d-sm-block" i18n>Performance</span> |
|
|
<span class="d-none d-sm-block" i18n>Performance</span> |
|
|
<span class="d-block d-sm-none" title="Performance">±</span> |
|
|
<span class="d-block d-sm-none" i18n-title title="Performance">±</span> |
|
|
</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"> |
|
|
|
|
|
@ -1,5 +1,6 @@ |
|
|
<a |
|
|
<a |
|
|
class="align-items-center d-flex" |
|
|
class="align-items-center d-flex" |
|
|
|
|
|
i18n-title |
|
|
title="Upgrade to Ghostfolio Premium" |
|
|
title="Upgrade to Ghostfolio Premium" |
|
|
[routerLink]="routerLinkPricing" |
|
|
[routerLink]="routerLinkPricing" |
|
|
[style.pointer-events]="enableLink ? 'initial' : 'none'" |
|
|
[style.pointer-events]="enableLink ? 'initial' : 'none'" |
|
|
|
|
|
@ -38,7 +38,7 @@ |
|
|
<ng-container matColumnDef="allocationInPercentage" stickyEnd> |
|
|
<ng-container matColumnDef="allocationInPercentage" stickyEnd> |
|
|
<th *matHeaderCellDef class="px-2 text-right" mat-header-cell> |
|
|
<th *matHeaderCellDef class="px-2 text-right" mat-header-cell> |
|
|
<span class="d-none d-sm-block" i18n>Allocation</span> |
|
|
<span class="d-none d-sm-block" i18n>Allocation</span> |
|
|
<span class="d-block d-sm-none" title="Allocation">%</span> |
|
|
<span class="d-block d-sm-none" i18n-title title="Allocation">%</span> |
|
|
</th> |
|
|
</th> |
|
|
<td *matCellDef="let element" class="px-2" mat-cell> |
|
|
<td *matCellDef="let element" class="px-2" mat-cell> |
|
|
<div class="d-flex justify-content-end"> |
|
|
<div class="d-flex justify-content-end"> |
|
|
|