mirror of https://github.com/ghostfolio/ghostfolio
Browse Source
* Restructure about page: introduce pages for blog and changelog * Update changelogpull/609/head
Thomas Kaul
3 years ago
committed by
GitHub
16 changed files with 276 additions and 75 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 { ChangelogPageComponent } from './changelog-page.component'; |
||||
|
|
||||
|
const routes: Routes = [ |
||||
|
{ path: '', component: ChangelogPageComponent, canActivate: [AuthGuard] } |
||||
|
]; |
||||
|
|
||||
|
@NgModule({ |
||||
|
imports: [RouterModule.forChild(routes)], |
||||
|
exports: [RouterModule] |
||||
|
}) |
||||
|
export class ChangelogPageRoutingModule {} |
@ -0,0 +1,22 @@ |
|||||
|
import { Component, OnDestroy } from '@angular/core'; |
||||
|
import { Subject } from 'rxjs'; |
||||
|
|
||||
|
@Component({ |
||||
|
host: { class: 'mb-5' }, |
||||
|
selector: 'gf-changelog-page', |
||||
|
styleUrls: ['./changelog-page.scss'], |
||||
|
templateUrl: './changelog-page.html' |
||||
|
}) |
||||
|
export class ChangelogPageComponent implements OnDestroy { |
||||
|
private unsubscribeSubject = new Subject<void>(); |
||||
|
|
||||
|
/** |
||||
|
* @constructor |
||||
|
*/ |
||||
|
public constructor() {} |
||||
|
|
||||
|
public ngOnDestroy() { |
||||
|
this.unsubscribeSubject.next(); |
||||
|
this.unsubscribeSubject.complete(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
<div class="container"> |
||||
|
<div class="mb-5 row"> |
||||
|
<div class="col"> |
||||
|
<h3 class="mb-3 text-center" i18n>Changelog</h3> |
||||
|
<mat-card class="changelog"> |
||||
|
<mat-card-content> |
||||
|
<markdown [src]="'assets/CHANGELOG.md'"></markdown> |
||||
|
</mat-card-content> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="row"> |
||||
|
<div class="col"> |
||||
|
<h3 class="mb-3 text-center" i18n>License</h3> |
||||
|
<mat-card> |
||||
|
<mat-card-content> |
||||
|
<markdown [src]="'assets/LICENSE'"></markdown> |
||||
|
</mat-card-content> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
@ -0,0 +1,19 @@ |
|||||
|
import { CommonModule } from '@angular/common'; |
||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; |
||||
|
import { MatCardModule } from '@angular/material/card'; |
||||
|
import { MarkdownModule } from 'ngx-markdown'; |
||||
|
|
||||
|
import { ChangelogPageRoutingModule } from './changelog-page-routing.module'; |
||||
|
import { ChangelogPageComponent } from './changelog-page.component'; |
||||
|
|
||||
|
@NgModule({ |
||||
|
declarations: [ChangelogPageComponent], |
||||
|
imports: [ |
||||
|
ChangelogPageRoutingModule, |
||||
|
CommonModule, |
||||
|
MarkdownModule.forChild(), |
||||
|
MatCardModule |
||||
|
], |
||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA] |
||||
|
}) |
||||
|
export class ChangelogPageModule {} |
@ -0,0 +1,44 @@ |
|||||
|
:host { |
||||
|
color: rgb(var(--dark-primary-text)); |
||||
|
display: block; |
||||
|
|
||||
|
.mat-card { |
||||
|
&.changelog { |
||||
|
a { |
||||
|
color: rgba(var(--palette-primary-500), 1); |
||||
|
font-weight: 500; |
||||
|
|
||||
|
&:hover { |
||||
|
color: rgba(var(--palette-primary-300), 1); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&.changelog { |
||||
|
::ng-deep { |
||||
|
markdown { |
||||
|
h1, |
||||
|
p { |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
h2 { |
||||
|
font-size: 18px; |
||||
|
|
||||
|
&:not(:first-of-type) { |
||||
|
margin-top: 2rem; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
h3 { |
||||
|
font-size: 15px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
:host-context(.is-dark-theme) { |
||||
|
color: rgb(var(--light-primary-text)); |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
import { NgModule } from '@angular/core'; |
||||
|
import { RouterModule, Routes } from '@angular/router'; |
||||
|
import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; |
||||
|
|
||||
|
import { BlogPageComponent } from './blog-page.component'; |
||||
|
|
||||
|
const routes: Routes = [ |
||||
|
{ path: '', component: BlogPageComponent, canActivate: [AuthGuard] } |
||||
|
]; |
||||
|
|
||||
|
@NgModule({ |
||||
|
imports: [RouterModule.forChild(routes)], |
||||
|
exports: [RouterModule] |
||||
|
}) |
||||
|
export class BlogPageRoutingModule {} |
@ -0,0 +1,22 @@ |
|||||
|
import { Component, OnDestroy } from '@angular/core'; |
||||
|
import { Subject } from 'rxjs'; |
||||
|
|
||||
|
@Component({ |
||||
|
host: { class: 'mb-5' }, |
||||
|
selector: 'gf-blog-page', |
||||
|
styleUrls: ['./blog-page.scss'], |
||||
|
templateUrl: './blog-page.html' |
||||
|
}) |
||||
|
export class BlogPageComponent implements OnDestroy { |
||||
|
private unsubscribeSubject = new Subject<void>(); |
||||
|
|
||||
|
/** |
||||
|
* @constructor |
||||
|
*/ |
||||
|
public constructor() {} |
||||
|
|
||||
|
public ngOnDestroy() { |
||||
|
this.unsubscribeSubject.next(); |
||||
|
this.unsubscribeSubject.complete(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,49 @@ |
|||||
|
<div class="container"> |
||||
|
<div class="mb-5 row"> |
||||
|
<div class="col"> |
||||
|
<h3 class="mb-3 text-center" i18n>Blog</h3> |
||||
|
<mat-card class="blog-container"> |
||||
|
<mat-card-content> |
||||
|
<div class="container p-0"> |
||||
|
<div class="flex-nowrap mb-3 no-gutters row"> |
||||
|
<a |
||||
|
class="d-flex w-100" |
||||
|
[routerLink]="['/en', 'blog', '2021', '07', 'hello-ghostfolio']" |
||||
|
> |
||||
|
<div class="flex-grow-1"> |
||||
|
<div class="h6 m-0 text-truncate">Hello Ghostfolio</div> |
||||
|
<div class="d-flex text-muted">31.07.2021</div> |
||||
|
</div> |
||||
|
<div class="align-items-center d-flex"> |
||||
|
<ion-icon |
||||
|
class="chevron text-muted" |
||||
|
name="chevron-forward-outline" |
||||
|
size="small" |
||||
|
></ion-icon> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="flex-nowrap no-gutters row"> |
||||
|
<a |
||||
|
class="d-flex w-100" |
||||
|
[routerLink]="['/de', 'blog', '2021', '07', 'hallo-ghostfolio']" |
||||
|
> |
||||
|
<div class="flex-grow-1"> |
||||
|
<div class="h6 m-0 text-truncate">Hallo Ghostfolio</div> |
||||
|
<div class="d-flex text-muted">31.07.2021</div> |
||||
|
</div> |
||||
|
<div class="align-items-center d-flex"> |
||||
|
<ion-icon |
||||
|
class="chevron text-muted" |
||||
|
name="chevron-forward-outline" |
||||
|
size="small" |
||||
|
></ion-icon> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</mat-card-content> |
||||
|
</mat-card> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
@ -0,0 +1,13 @@ |
|||||
|
import { CommonModule } from '@angular/common'; |
||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; |
||||
|
import { MatCardModule } from '@angular/material/card'; |
||||
|
|
||||
|
import { BlogPageRoutingModule } from './blog-page-routing.module'; |
||||
|
import { BlogPageComponent } from './blog-page.component'; |
||||
|
|
||||
|
@NgModule({ |
||||
|
declarations: [BlogPageComponent], |
||||
|
imports: [BlogPageRoutingModule, CommonModule, MatCardModule], |
||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA] |
||||
|
}) |
||||
|
export class BlogPageModule {} |
@ -0,0 +1,8 @@ |
|||||
|
:host { |
||||
|
color: rgb(var(--dark-primary-text)); |
||||
|
display: block; |
||||
|
} |
||||
|
|
||||
|
:host-context(.is-dark-theme) { |
||||
|
color: rgb(var(--light-primary-text)); |
||||
|
} |
Loading…
Reference in new issue