optimized ui a little bit and added impressum
This commit is contained in:
1 parent
436a7a151d
commit
8f888851e8
16 files changed
+149
-818
No files matched your search
Generated
+6
-808
File diff suppressed because it is too large.
Load diff
+17
-1
@@ -1,4 +1,4 @@
|
|||||||
import {ApplicationConfig, provideBrowserGlobalErrorListeners, provideZonelessChangeDetection} from '@angular/core';
|
import {ApplicationConfig, inject, provideAppInitializer, provideBrowserGlobalErrorListeners, provideZonelessChangeDetection} from '@angular/core';
|
||||||
import { provideRouter } from '@angular/router';
|
import { provideRouter } from '@angular/router';
|
||||||
|
|
||||||
import { routes } from './app.routes';
|
import { routes } from './app.routes';
|
||||||
@@ -7,6 +7,8 @@ import {provideHttpClient} from '@angular/common/http';
|
|||||||
import {provideTranslateService} from '@ngx-translate/core';
|
import {provideTranslateService} from '@ngx-translate/core';
|
||||||
import {provideTranslateHttpLoader} from '@ngx-translate/http-loader';
|
import {provideTranslateHttpLoader} from '@ngx-translate/http-loader';
|
||||||
import {LocalStoreConstants} from './constants/LocalStoreConstants';
|
import {LocalStoreConstants} from './constants/LocalStoreConstants';
|
||||||
|
import {MatIconRegistry} from '@angular/material/icon';
|
||||||
|
import {DomSanitizer} from '@angular/platform-browser';
|
||||||
|
|
||||||
|
|
||||||
const INITIAL_LANG = getInitialLang();
|
const INITIAL_LANG = getInitialLang();
|
||||||
@@ -26,6 +28,20 @@ export const appConfig: ApplicationConfig = {
|
|||||||
suffix: '.json'
|
suffix: '.json'
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
|
provideAppInitializer(() => {
|
||||||
|
const iconRegistry = inject(MatIconRegistry);
|
||||||
|
const sanitizer = inject(DomSanitizer);
|
||||||
|
|
||||||
|
iconRegistry.addSvgIcon(
|
||||||
|
'github',
|
||||||
|
sanitizer.bypassSecurityTrustResourceUrl('assets/logos/github.svg')
|
||||||
|
);
|
||||||
|
|
||||||
|
iconRegistry.addSvgIcon(
|
||||||
|
'linkedin',
|
||||||
|
sanitizer.bypassSecurityTrustResourceUrl('assets/logos/linkedIn.svg')
|
||||||
|
);
|
||||||
|
}),
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,13 @@ import { Routes } from '@angular/router';
|
|||||||
import {AboutComponent} from './pages/about/about.component';
|
import {AboutComponent} from './pages/about/about.component';
|
||||||
import {ProjectsComponent} from './pages/projects/projects.component';
|
import {ProjectsComponent} from './pages/projects/projects.component';
|
||||||
import {HobbiesComponent} from './pages/hobbies/hobbies.component';
|
import {HobbiesComponent} from './pages/hobbies/hobbies.component';
|
||||||
|
import {ImprintComponent} from './pages/imprint/imprint.component';
|
||||||
|
|
||||||
export const routes: Routes = [
|
export const routes: Routes = [
|
||||||
{ path: '', component: AboutComponent },
|
{ path: '', component: AboutComponent },
|
||||||
{ path: 'about', component: AboutComponent},
|
{ path: 'about', component: AboutComponent},
|
||||||
{ path: 'projects', component: ProjectsComponent},
|
{ path: 'projects', component: ProjectsComponent},
|
||||||
{ path: 'hobbies', component: HobbiesComponent},
|
{ path: 'hobbies', component: HobbiesComponent},
|
||||||
|
{ path: 'imprint', component: ImprintComponent},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<a routerLink="/about" mat-button>{{ 'TOPBAR.ABOUT' | translate }}</a>
|
<a routerLink="/about" mat-button>{{ 'TOPBAR.ABOUT' | translate }}</a>
|
||||||
<a routerLink="/projects" mat-button>{{ 'TOPBAR.PROJECTS' | translate }}</a>
|
<a routerLink="/projects" mat-button>{{ 'TOPBAR.PROJECTS' | translate }}</a>
|
||||||
<a routerLink="/hobbies" mat-button>{{ 'TOPBAR.HOBBY' | translate }}</a>
|
<a routerLink="/hobbies" mat-button>{{ 'TOPBAR.HOBBY' | translate }}</a>
|
||||||
<a routerLink="/projects" mat-button>{{ 'TOPBAR.CONTACT' | translate }}</a>
|
<a routerLink="/imprint" mat-button>{{ 'TOPBAR.IMPRINT' | translate }}</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Mobile nav menu button -->
|
<!-- Mobile nav menu button -->
|
||||||
@@ -38,8 +38,8 @@
|
|||||||
<button mat-menu-item routerLink="/hobbys">
|
<button mat-menu-item routerLink="/hobbys">
|
||||||
{{ 'TOPBAR.HOBBY' | translate }}
|
{{ 'TOPBAR.HOBBY' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<button mat-menu-item routerLink="/contact">
|
<button mat-menu-item routerLink="/imprint">
|
||||||
{{ 'TOPBAR.CONTACT' | translate }}
|
{{ 'TOPBAR.IMPRINT' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
position: sticky; top: 0; z-index: 100;
|
position: sticky; top: 0; z-index: 100;
|
||||||
backdrop-filter: saturate(1.1) blur(8px);
|
backdrop-filter: saturate(1.1) blur(8px);
|
||||||
background:
|
background:
|
||||||
color-mix(in oklab, var(--app-bg) 80%, transparent);
|
color-mix(in oklab, var(--app-topbar-bg) 80%, transparent);
|
||||||
border-bottom: 1px solid rgba(0,0,0,.08);
|
border-bottom: 1px solid rgba(0,0,0,.08);
|
||||||
|
|
||||||
.brand {
|
.brand {
|
||||||
|
|||||||
@@ -27,14 +27,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<mat-icon aria-hidden="true">email</mat-icon>
|
<mat-icon aria-hidden="true">email</mat-icon>
|
||||||
<a href="" (click)="openMail($event)">
|
<a href="" (click)="SharedFunctions.openMail($event)">
|
||||||
{{ 'ABOUT.CONTACT_ME' | translate }}
|
{{ 'ABOUT.CONTACT_ME' | translate }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<mat-icon aria-hidden="true">link</mat-icon>
|
<mat-icon svgIcon="github"></mat-icon>
|
||||||
<a href="{{UrlConstants.GIT_HUB}}" target="_blank" rel="noopener">GitHub</a>
|
<a href="{{UrlConstants.GIT_HUB}}" target="_blank" rel="noopener">GitHub</a>
|
||||||
<span>·</span>
|
<span>·</span>
|
||||||
|
<mat-icon svgIcon="linkedin"></mat-icon>
|
||||||
<a href="{{UrlConstants.LINKED_IN}}" target="_blank" rel="noopener">LinkedIn</a>
|
<a href="{{UrlConstants.LINKED_IN}}" target="_blank" rel="noopener">LinkedIn</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
|||||||
import {UrlConstants} from '../../constants/UrlConstants';
|
import {UrlConstants} from '../../constants/UrlConstants';
|
||||||
import {AssetsConstants} from '../../constants/AssetsConstants';
|
import {AssetsConstants} from '../../constants/AssetsConstants';
|
||||||
import {RouterLink} from '@angular/router';
|
import {RouterLink} from '@angular/router';
|
||||||
|
import {SharedFunctions} from '../../shared/SharedFunctions';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -151,4 +152,5 @@ export class AboutComponent {
|
|||||||
|
|
||||||
protected readonly UrlConstants = UrlConstants;
|
protected readonly UrlConstants = UrlConstants;
|
||||||
protected readonly AssetsConstants = AssetsConstants;
|
protected readonly AssetsConstants = AssetsConstants;
|
||||||
|
protected readonly SharedFunctions = SharedFunctions;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<section class="imprint">
|
||||||
|
<mat-card class="imprint-card">
|
||||||
|
<h2 class="imprint-title">{{ 'IMPRINT.TITLE' | translate }}</h2>
|
||||||
|
|
||||||
|
<div class="imprint-section">
|
||||||
|
<p class="imprint-label">{{ 'IMPRINT.PARAGRAPH' | translate }}</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Andreas Dahm<br />
|
||||||
|
Bgm.-Germeier-Str. 2<br />
|
||||||
|
85586 Poing<br />
|
||||||
|
{{ 'IMPRINT.COUNTRY' | translate }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="imprint-section">
|
||||||
|
<p class="imprint-label">{{ 'IMPRINT.CONTACT' | translate }}</p>
|
||||||
|
<p>
|
||||||
|
E-Mail:
|
||||||
|
<a href="mailto:andreas.dahm@gmail.com">
|
||||||
|
andreas.dahm@gmail.com
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</mat-card>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
.imprint {
|
||||||
|
display: grid;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.imprint-card {
|
||||||
|
padding: 1.25rem 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.imprint-title {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.imprint-section {
|
||||||
|
display: grid;
|
||||||
|
gap: 0.25rem;
|
||||||
|
|
||||||
|
&:not(:last-child) {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.imprint-label {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
opacity: 0.7;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--mat-primary);
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
import {MatCard} from '@angular/material/card';
|
||||||
|
import {TranslatePipe} from '@ngx-translate/core';
|
||||||
|
import {MatIcon} from '@angular/material/icon';
|
||||||
|
import {SharedFunctions} from '../../shared/SharedFunctions';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-imprint',
|
||||||
|
imports: [
|
||||||
|
MatCard,
|
||||||
|
TranslatePipe,
|
||||||
|
MatIcon
|
||||||
|
],
|
||||||
|
templateUrl: './imprint.component.html',
|
||||||
|
styleUrl: './imprint.component.scss',
|
||||||
|
})
|
||||||
|
export class ImprintComponent {
|
||||||
|
|
||||||
|
protected readonly SharedFunctions = SharedFunctions;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
export class SharedFunctions {
|
||||||
|
static openMail(event?: Event) {
|
||||||
|
event?.preventDefault();
|
||||||
|
const user = 'andreas.dahm';
|
||||||
|
const domain = 'gmail.com';
|
||||||
|
globalThis.location.href = `mailto:${user}@${domain}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
},
|
},
|
||||||
"TOPBAR": {
|
"TOPBAR": {
|
||||||
"ABOUT": "Über mich",
|
"ABOUT": "Über mich",
|
||||||
"CONTACT": "Kontakt",
|
"IMPRINT": "Impressum",
|
||||||
"PROJECTS": "Projekte",
|
"PROJECTS": "Projekte",
|
||||||
"HOBBY": "Hobbies",
|
"HOBBY": "Hobbies",
|
||||||
"SETTINGS": "Einstellungen",
|
"SETTINGS": "Einstellungen",
|
||||||
@@ -247,5 +247,11 @@
|
|||||||
"SHORT_DESCRIPTION": "Kollisionserkennung und Behandlung von komplexen Kleidungsstücken.",
|
"SHORT_DESCRIPTION": "Kollisionserkennung und Behandlung von komplexen Kleidungsstücken.",
|
||||||
"INTRODUCTION": "Die Diplomarbeit handelt von der Erkennung und der Behandlung von Kollisionen zwischen, sowie innerhalb, einzelnen Kleidungsstücken in Echtzeit. Das ist gerade aufgrund der Flexibilität von Stoffen und deren unterschiedlichen Eigenschaften besonders herausfordernd."
|
"INTRODUCTION": "Die Diplomarbeit handelt von der Erkennung und der Behandlung von Kollisionen zwischen, sowie innerhalb, einzelnen Kleidungsstücken in Echtzeit. Das ist gerade aufgrund der Flexibilität von Stoffen und deren unterschiedlichen Eigenschaften besonders herausfordernd."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"IMPRINT": {
|
||||||
|
"TITLE" : "Impressum",
|
||||||
|
"PARAGRAPH": "Angaben gemäß § 5 DDG",
|
||||||
|
"COUNTRY": "Deutschland",
|
||||||
|
"CONTACT": "Kontakt"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
},
|
},
|
||||||
"TOPBAR": {
|
"TOPBAR": {
|
||||||
"ABOUT": "About me",
|
"ABOUT": "About me",
|
||||||
"CONTACT": "Contact",
|
"IMPRINT": "Impressum",
|
||||||
"PROJECTS": "Projects",
|
"PROJECTS": "Projects",
|
||||||
"HOBBY": "Hobby's",
|
"HOBBY": "Hobby's",
|
||||||
"SETTINGS": "Settings",
|
"SETTINGS": "Settings",
|
||||||
@@ -247,5 +247,11 @@
|
|||||||
"SHORT_DESCRIPTION": "Collision detection and handling of complex garments.",
|
"SHORT_DESCRIPTION": "Collision detection and handling of complex garments.",
|
||||||
"INTRODUCTION": "The thesis deals with the detection and handling of collisions between and within individual items of clothing in real time. This is particularly challenging due to the flexibility of fabrics and their varying properties."
|
"INTRODUCTION": "The thesis deals with the detection and handling of collisions between and within individual items of clothing in real time. This is particularly challenging due to the flexibility of fabrics and their varying properties."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"IMPRINT": {
|
||||||
|
"TITLE" : "Imprint",
|
||||||
|
"PARAGRAPH": "Information pursuant to Section 5 DDG",
|
||||||
|
"COUNTRY": "Germany",
|
||||||
|
"CONTACT": "Contact"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
|
||||||
|
After Width: | Height: | Size: 822 B |
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"> <path d="M41,4H9C6.24,4,4,6.24,4,9v32c0,2.76,2.24,5,5,5h32c2.76,0,5-2.24,5-5V9C46,6.24,43.76,4,41,4z M17,20v19h-6V20H17z M11,14.47c0-1.4,1.2-2.47,3-2.47s2.93,1.07,3,2.47c0,1.4-1.12,2.53-3,2.53C12.2,17,11,15.87,11,14.47z M39,39h-6c0,0,0-9.26,0-10 c0-2-1-4-3.5-4.04h-0.08C27,24.96,26,27.02,26,29c0,0.91,0,10,0,10h-6V20h6v2.56c0,0,1.93-2.56,5.81-2.56 c3.97,0,7.19,2.73,7.19,8.26V39z"/></svg>
|
||||||
|
After Width: | Height: | Size: 501 B |
+3
-1
@@ -23,6 +23,7 @@ $dark-theme: mat.define-theme((
|
|||||||
|
|
||||||
/* ---- Custom variables ---- */
|
/* ---- Custom variables ---- */
|
||||||
:root {
|
:root {
|
||||||
|
--app-topbar-bg: #{mat.get-theme-color($light-theme, surface)};
|
||||||
--app-bg: #{mat.get-theme-color($light-theme, surface-container-low)};
|
--app-bg: #{mat.get-theme-color($light-theme, surface-container-low)};
|
||||||
--app-fg: #{mat.get-theme-color($light-theme, on-surface)};
|
--app-fg: #{mat.get-theme-color($light-theme, on-surface)};
|
||||||
--app-logo-bg: #313131;
|
--app-logo-bg: #313131;
|
||||||
@@ -43,7 +44,8 @@ $dark-theme: mat.define-theme((
|
|||||||
--link-color-hover: #66bfff;
|
--link-color-hover: #66bfff;
|
||||||
}
|
}
|
||||||
.dark {
|
.dark {
|
||||||
--app-bg: #{mat.get-theme-color($dark-theme, surface-container-low)};
|
--app-topbar-bg: #{mat.get-theme-color($dark-theme, surface-container-highest)};
|
||||||
|
--app-bg: #{mat.get-theme-color($dark-theme,surface-variant)};
|
||||||
--app-fg: #{mat.get-theme-color($dark-theme, on-surface)};
|
--app-fg: #{mat.get-theme-color($dark-theme, on-surface)};
|
||||||
--app-card-background: #313131;
|
--app-card-background: #313131;
|
||||||
--app-logo-bg: #313131;
|
--app-logo-bg: #313131;
|
||||||
|
|||||||
Reference in new issue
Block a user