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 { routes } from './app.routes';
|
||||
@@ -7,6 +7,8 @@ import {provideHttpClient} from '@angular/common/http';
|
||||
import {provideTranslateService} from '@ngx-translate/core';
|
||||
import {provideTranslateHttpLoader} from '@ngx-translate/http-loader';
|
||||
import {LocalStoreConstants} from './constants/LocalStoreConstants';
|
||||
import {MatIconRegistry} from '@angular/material/icon';
|
||||
import {DomSanitizer} from '@angular/platform-browser';
|
||||
|
||||
|
||||
const INITIAL_LANG = getInitialLang();
|
||||
@@ -26,6 +28,20 @@ export const appConfig: ApplicationConfig = {
|
||||
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 {ProjectsComponent} from './pages/projects/projects.component';
|
||||
import {HobbiesComponent} from './pages/hobbies/hobbies.component';
|
||||
import {ImprintComponent} from './pages/imprint/imprint.component';
|
||||
|
||||
export const routes: Routes = [
|
||||
{ path: '', component: AboutComponent },
|
||||
{ path: 'about', component: AboutComponent},
|
||||
{ path: 'projects', component: ProjectsComponent},
|
||||
{ path: 'hobbies', component: HobbiesComponent},
|
||||
{ path: 'imprint', component: ImprintComponent},
|
||||
];
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<a routerLink="/about" mat-button>{{ 'TOPBAR.ABOUT' | translate }}</a>
|
||||
<a routerLink="/projects" mat-button>{{ 'TOPBAR.PROJECTS' | 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>
|
||||
|
||||
<!-- Mobile nav menu button -->
|
||||
@@ -38,8 +38,8 @@
|
||||
<button mat-menu-item routerLink="/hobbys">
|
||||
{{ 'TOPBAR.HOBBY' | translate }}
|
||||
</button>
|
||||
<button mat-menu-item routerLink="/contact">
|
||||
{{ 'TOPBAR.CONTACT' | translate }}
|
||||
<button mat-menu-item routerLink="/imprint">
|
||||
{{ 'TOPBAR.IMPRINT' | translate }}
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
position: sticky; top: 0; z-index: 100;
|
||||
backdrop-filter: saturate(1.1) blur(8px);
|
||||
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);
|
||||
|
||||
.brand {
|
||||
|
||||
@@ -27,14 +27,15 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<mat-icon aria-hidden="true">email</mat-icon>
|
||||
<a href="" (click)="openMail($event)">
|
||||
<a href="" (click)="SharedFunctions.openMail($event)">
|
||||
{{ 'ABOUT.CONTACT_ME' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
<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>
|
||||
<span>·</span>
|
||||
<mat-icon svgIcon="linkedin"></mat-icon>
|
||||
<a href="{{UrlConstants.LINKED_IN}}" target="_blank" rel="noopener">LinkedIn</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -9,6 +9,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
||||
import {UrlConstants} from '../../constants/UrlConstants';
|
||||
import {AssetsConstants} from '../../constants/AssetsConstants';
|
||||
import {RouterLink} from '@angular/router';
|
||||
import {SharedFunctions} from '../../shared/SharedFunctions';
|
||||
|
||||
|
||||
@Component({
|
||||
@@ -151,4 +152,5 @@ export class AboutComponent {
|
||||
|
||||
protected readonly UrlConstants = UrlConstants;
|
||||
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": {
|
||||
"ABOUT": "Über mich",
|
||||
"CONTACT": "Kontakt",
|
||||
"IMPRINT": "Impressum",
|
||||
"PROJECTS": "Projekte",
|
||||
"HOBBY": "Hobbies",
|
||||
"SETTINGS": "Einstellungen",
|
||||
@@ -247,5 +247,11 @@
|
||||
"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."
|
||||
}
|
||||
},
|
||||
"IMPRINT": {
|
||||
"TITLE" : "Impressum",
|
||||
"PARAGRAPH": "Angaben gemäß § 5 DDG",
|
||||
"COUNTRY": "Deutschland",
|
||||
"CONTACT": "Kontakt"
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
},
|
||||
"TOPBAR": {
|
||||
"ABOUT": "About me",
|
||||
"CONTACT": "Contact",
|
||||
"IMPRINT": "Impressum",
|
||||
"PROJECTS": "Projects",
|
||||
"HOBBY": "Hobby's",
|
||||
"SETTINGS": "Settings",
|
||||
@@ -247,5 +247,11 @@
|
||||
"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."
|
||||
}
|
||||
},
|
||||
"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 ---- */
|
||||
:root {
|
||||
--app-topbar-bg: #{mat.get-theme-color($light-theme, surface)};
|
||||
--app-bg: #{mat.get-theme-color($light-theme, surface-container-low)};
|
||||
--app-fg: #{mat.get-theme-color($light-theme, on-surface)};
|
||||
--app-logo-bg: #313131;
|
||||
@@ -43,7 +44,8 @@ $dark-theme: mat.define-theme((
|
||||
--link-color-hover: #66bfff;
|
||||
}
|
||||
.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-card-background: #313131;
|
||||
--app-logo-bg: #313131;
|
||||
|
||||
Reference in new issue
Block a user