From 2aaaf5c14d88296c8b1e3b7027965e9f964bd617 Mon Sep 17 00:00:00 2001 From: Justin Hubert <135236159+Jstn2004@users.noreply.github.com> Date: Sat, 27 Apr 2024 17:02:28 +0200 Subject: [PATCH] created all components for the main page (#143) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Header und Roadmap erstellt * feat: tab text verändert * fix: add baseUrl to tsconfig * feat: challengedialog implemented * feat: add angular animations for challengerdialog * fix: update animation speed * fix: update animation duration * feat: function to start the training * feat: implemented Timer and snackbar * feat: loginpage hinzugefügt --- frontend/angular.json | 2 +- frontend/src/Logo_1_black.ico | Bin 0 -> 7404 bytes frontend/src/app/app-routing.module.ts | 7 +- frontend/src/app/app.component.html | 337 +----------------- frontend/src/app/app.module.ts | 39 +- .../challenge-button.component.html | 17 + .../challenge-button.component.scss | 134 +++++++ .../challenge-button.component.spec.ts | 23 ++ .../challenge-button.component.ts | 33 ++ .../inputfield/inputfield.component.html | 4 + .../inputfield/inputfield.component.scss | 20 ++ .../inputfield/inputfield.component.spec.ts | 23 ++ .../atoms/inputfield/inputfield.component.ts | 14 + .../stopbutton/stopbutton.component.html | 1 + .../stopbutton/stopbutton.component.scss | 75 ++++ .../stopbutton/stopbutton.component.spec.ts | 23 ++ .../atoms/stopbutton/stopbutton.component.ts | 25 ++ .../atoms/timer/timer.component.html | 1 + .../atoms/timer/timer.component.scss | 5 + .../atoms/timer/timer.component.spec.ts | 23 ++ .../components/atoms/timer/timer.component.ts | 18 + .../atoms/toast/toast.component.html | 2 + .../atoms/toast/toast.component.scss | 47 +++ .../atoms/toast/toast.component.spec.ts | 23 ++ .../components/atoms/toast/toast.component.ts | 15 + .../challenge-dialog.component.html | 26 ++ .../challenge-dialog.component.scss | 98 +++++ .../challenge-dialog.component.spec.ts | 22 ++ .../challenge-dialog.component.ts | 76 ++++ .../loginform/loginform.component.html | 7 + .../loginform/loginform.component.scss | 58 +++ .../loginform/loginform.component.spec.ts | 23 ++ .../loginform/loginform.component.ts | 20 ++ .../organisms/roadmap/roadmap.component.html | 11 + .../organisms/roadmap/roadmap.component.scss | 17 + .../roadmap/roadmap.component.spec.ts | 23 ++ .../organisms/roadmap/roadmap.component.ts | 36 ++ .../statistic-header.component.html | 26 ++ .../statistic-header.component.scss | 82 +++++ .../statistic-header.component.spec.ts | 23 ++ .../statistic-header.component.ts | 16 + .../authenticationpage.component.html | 6 + .../authenticationpage.component.scss | 31 ++ .../authenticationpage.component.spec.ts | 23 ++ .../authenticationpage.component.ts | 10 + .../pages/mainpage/mainpage.component.html | 5 + .../pages/mainpage/mainpage.component.scss | 13 + .../pages/mainpage/mainpage.component.spec.ts | 23 ++ .../pages/mainpage/mainpage.component.ts | 10 + frontend/src/app/pipes/timer.pipe.spec.ts | 8 + frontend/src/app/pipes/timer.pipe.ts | 23 ++ .../src/app/services/event.service.spec.ts | 16 + frontend/src/app/services/event.service.ts | 39 ++ frontend/src/app/styles/color.scss | 16 +- frontend/src/assets/Logo_3.svg | 1 + frontend/src/assets/ausblenden.png | Bin 0 -> 390 bytes frontend/src/assets/aussicht.png | Bin 0 -> 353 bytes frontend/src/assets/f7--flame.svg | 3 + frontend/src/assets/icons/points.svg | 1 + frontend/src/assets/icons/shoe.svg | 1 + frontend/src/assets/icons/time.svg | 1 + frontend/src/assets/logo/Logo 1.svg | 1 + frontend/src/assets/logo/logo_1_white.svg | 1 + frontend/src/favicon.ico | Bin 15086 -> 0 bytes frontend/src/index.html | 4 +- frontend/tsconfig.json | 7 +- 66 files changed, 1358 insertions(+), 360 deletions(-) create mode 100644 frontend/src/Logo_1_black.ico create mode 100644 frontend/src/app/components/atoms/challenge-button/challenge-button.component.html create mode 100644 frontend/src/app/components/atoms/challenge-button/challenge-button.component.scss create mode 100644 frontend/src/app/components/atoms/challenge-button/challenge-button.component.spec.ts create mode 100644 frontend/src/app/components/atoms/challenge-button/challenge-button.component.ts create mode 100644 frontend/src/app/components/atoms/inputfield/inputfield.component.html create mode 100644 frontend/src/app/components/atoms/inputfield/inputfield.component.scss create mode 100644 frontend/src/app/components/atoms/inputfield/inputfield.component.spec.ts create mode 100644 frontend/src/app/components/atoms/inputfield/inputfield.component.ts create mode 100644 frontend/src/app/components/atoms/stopbutton/stopbutton.component.html create mode 100644 frontend/src/app/components/atoms/stopbutton/stopbutton.component.scss create mode 100644 frontend/src/app/components/atoms/stopbutton/stopbutton.component.spec.ts create mode 100644 frontend/src/app/components/atoms/stopbutton/stopbutton.component.ts create mode 100644 frontend/src/app/components/atoms/timer/timer.component.html create mode 100644 frontend/src/app/components/atoms/timer/timer.component.scss create mode 100644 frontend/src/app/components/atoms/timer/timer.component.spec.ts create mode 100644 frontend/src/app/components/atoms/timer/timer.component.ts create mode 100644 frontend/src/app/components/atoms/toast/toast.component.html create mode 100644 frontend/src/app/components/atoms/toast/toast.component.scss create mode 100644 frontend/src/app/components/atoms/toast/toast.component.spec.ts create mode 100644 frontend/src/app/components/atoms/toast/toast.component.ts create mode 100644 frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.html create mode 100644 frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.scss create mode 100644 frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.spec.ts create mode 100644 frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.ts create mode 100644 frontend/src/app/components/organisms/loginform/loginform.component.html create mode 100644 frontend/src/app/components/organisms/loginform/loginform.component.scss create mode 100644 frontend/src/app/components/organisms/loginform/loginform.component.spec.ts create mode 100644 frontend/src/app/components/organisms/loginform/loginform.component.ts create mode 100644 frontend/src/app/components/organisms/roadmap/roadmap.component.html create mode 100644 frontend/src/app/components/organisms/roadmap/roadmap.component.scss create mode 100644 frontend/src/app/components/organisms/roadmap/roadmap.component.spec.ts create mode 100644 frontend/src/app/components/organisms/roadmap/roadmap.component.ts create mode 100644 frontend/src/app/components/organisms/statistic-header/statistic-header.component.html create mode 100644 frontend/src/app/components/organisms/statistic-header/statistic-header.component.scss create mode 100644 frontend/src/app/components/organisms/statistic-header/statistic-header.component.spec.ts create mode 100644 frontend/src/app/components/organisms/statistic-header/statistic-header.component.ts create mode 100644 frontend/src/app/components/pages/authenticationpage/authenticationpage.component.html create mode 100644 frontend/src/app/components/pages/authenticationpage/authenticationpage.component.scss create mode 100644 frontend/src/app/components/pages/authenticationpage/authenticationpage.component.spec.ts create mode 100644 frontend/src/app/components/pages/authenticationpage/authenticationpage.component.ts create mode 100644 frontend/src/app/components/pages/mainpage/mainpage.component.html create mode 100644 frontend/src/app/components/pages/mainpage/mainpage.component.scss create mode 100644 frontend/src/app/components/pages/mainpage/mainpage.component.spec.ts create mode 100644 frontend/src/app/components/pages/mainpage/mainpage.component.ts create mode 100644 frontend/src/app/pipes/timer.pipe.spec.ts create mode 100644 frontend/src/app/pipes/timer.pipe.ts create mode 100644 frontend/src/app/services/event.service.spec.ts create mode 100644 frontend/src/app/services/event.service.ts create mode 100644 frontend/src/assets/Logo_3.svg create mode 100644 frontend/src/assets/ausblenden.png create mode 100644 frontend/src/assets/aussicht.png create mode 100644 frontend/src/assets/f7--flame.svg create mode 100644 frontend/src/assets/icons/points.svg create mode 100644 frontend/src/assets/icons/shoe.svg create mode 100644 frontend/src/assets/icons/time.svg create mode 100644 frontend/src/assets/logo/Logo 1.svg create mode 100644 frontend/src/assets/logo/logo_1_white.svg delete mode 100644 frontend/src/favicon.ico diff --git a/frontend/angular.json b/frontend/angular.json index d2136c5..ccb97d5 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -33,7 +33,7 @@ "tsConfig": "tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ - "src/favicon.ico", + "src/Logo_1_black.ico", "src/assets" ], "styles": [ diff --git a/frontend/src/Logo_1_black.ico b/frontend/src/Logo_1_black.ico new file mode 100644 index 0000000000000000000000000000000000000000..d4288d773ce4b7b3f32fecde81383a074ae45c76 GIT binary patch literal 7404 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 - - - - - - - - - - -
-
-
- -

Hello, {{ title }}

-

Congratulations! Your app is running. 🎉

-
- -
-
- @for (item of [ - { title: 'Explore the Docs', link: 'https://angular.dev' }, - { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' }, - { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' }, - { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' }, - { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' }, - ]; track item.title) { - - {{ item.title }} - - - - - } -
- -
-
-
- - - - - - - - - - + + diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index b1c6c96..4595522 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -1,18 +1,41 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import {provideAnimations} from '@angular/platform-browser/animations' import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { MainpageComponent } from './components/pages/mainpage/mainpage.component'; +import { StatisticHeaderComponent } from './components/organisms/statistic-header/statistic-header.component'; +import { RoadmapComponent } from './components/organisms/roadmap/roadmap.component'; +import { ChallengeButtonComponent } from './components/atoms/challenge-button/challenge-button.component'; +import { ChallengeDialogComponent } from './components/organisms/challenge-dialog/challenge-dialog.component'; +import { TimerComponent } from './components/atoms/timer/timer.component'; +import { TimerPipe } from './pipes/timer.pipe'; +import { StopbuttonComponent } from './components/atoms/stopbutton/stopbutton.component'; +import { ToastComponent } from './components/atoms/toast/toast.component'; +import { AuthenticationpageComponent } from './components/pages/authenticationpage/authenticationpage.component'; +import { LoginformComponent } from './components/organisms/loginform/loginform.component'; +import { InputfieldComponent } from './components/atoms/inputfield/inputfield.component'; @NgModule({ declarations: [ - AppComponent + AppComponent, + MainpageComponent, + StatisticHeaderComponent, + RoadmapComponent, + ChallengeButtonComponent, + ChallengeDialogComponent, + TimerComponent, + TimerPipe, + StopbuttonComponent, + ToastComponent, + AuthenticationpageComponent, + LoginformComponent, + InputfieldComponent, ], - imports: [ - BrowserModule, - AppRoutingModule - ], - providers: [], - bootstrap: [AppComponent] + imports: [BrowserModule, AppRoutingModule, BrowserAnimationsModule], + providers: [provideAnimations()], + bootstrap: [AppComponent], }) -export class AppModule { } +export class AppModule {} diff --git a/frontend/src/app/components/atoms/challenge-button/challenge-button.component.html b/frontend/src/app/components/atoms/challenge-button/challenge-button.component.html new file mode 100644 index 0000000..d6cbbdf --- /dev/null +++ b/frontend/src/app/components/atoms/challenge-button/challenge-button.component.html @@ -0,0 +1,17 @@ + + + diff --git a/frontend/src/app/components/atoms/challenge-button/challenge-button.component.scss b/frontend/src/app/components/atoms/challenge-button/challenge-button.component.scss new file mode 100644 index 0000000..f92e327 --- /dev/null +++ b/frontend/src/app/components/atoms/challenge-button/challenge-button.component.scss @@ -0,0 +1,134 @@ +.button-19 { + appearance: button; + background-color: #a0a0a0ef; + border: solid transparent; + border-radius: 50%; + border-width: 0 0 5px; + box-sizing: border-box; + color: var(--font); + cursor: pointer; + display: inline-block; + font-size: 25px; + font-weight: 700; + letter-spacing: 0.8px; + line-height: 20px; + margin: 0; + outline: none; + padding: 13px 16px; + text-align: center; + text-transform: uppercase; + touch-action: manipulation; + transform: translateZ(0); + transition: filter 0.2s; + user-select: none; + -webkit-user-select: none; + vertical-align: middle; + white-space: nowrap; + width: 80px; + height: 80px; + margin-top: 15px; +} + +.button-19:after { + background-clip: padding-box; + background-color: var(--white); + border: solid transparent; + border-radius: 50%; + border-width: 0 0 4px; + bottom: -4px; + content: ""; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: -1; +} + +.button-19:main, +.button-19:focus { + user-select: auto; +} + +.button-19:hover:not(:disabled) { + filter: brightness(1.1); + -webkit-filter: brightness(1.1); +} + +.button-19:disabled { + cursor: auto; +} + +.button-19:active { + border-width: 4px 0 0; + background: none; +} + +#button-top { + font-weight: 100; + font-size: 10px; +} + +.button-19-false { + appearance: button; + background-color: #a0a0a0; + border: solid transparent; + border-radius: 50%; + border-width: 0 0 5px; + box-sizing: border-box; + color: var(--font); + cursor: pointer; + display: inline-block; + font-size: 25px; + font-weight: 700; + letter-spacing: 0.8px; + line-height: 20px; + margin: 0; + outline: none; + padding: 13px 16px; + text-align: center; + text-transform: uppercase; + touch-action: manipulation; + transform: translateZ(0); + transition: filter 0.2s; + user-select: none; + -webkit-user-select: none; + vertical-align: middle; + white-space: nowrap; + width: 80px; + height: 80px; + margin-top: 15px; +} + +.button-19-false:after { + background-clip: padding-box; + background-color: #a0a0a0; + border: solid transparent; + border-radius: 50%; + border-width: 0 0 4px; + bottom: -4px; + content: ""; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: -1; +} + +.button-19-false:main, +.button-19-false:focus { + user-select: auto; +} + +.button-19-false:hover:not(:disabled) { + filter: brightness(1.1); + -webkit-filter: brightness(1.1); +} + +.button-19-false:disabled { + cursor: auto; +} + +.button-19-false:active { + border-width: 4px 0 0; + background: none; +} diff --git a/frontend/src/app/components/atoms/challenge-button/challenge-button.component.spec.ts b/frontend/src/app/components/atoms/challenge-button/challenge-button.component.spec.ts new file mode 100644 index 0000000..7b7b582 --- /dev/null +++ b/frontend/src/app/components/atoms/challenge-button/challenge-button.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ChallengeButtonComponent } from './challenge-button.component'; + +describe('ChallengeButtonComponent', () => { + let component: ChallengeButtonComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ChallengeButtonComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ChallengeButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/atoms/challenge-button/challenge-button.component.ts b/frontend/src/app/components/atoms/challenge-button/challenge-button.component.ts new file mode 100644 index 0000000..f98e05c --- /dev/null +++ b/frontend/src/app/components/atoms/challenge-button/challenge-button.component.ts @@ -0,0 +1,33 @@ +import { Component, Input, Output, EventEmitter} from '@angular/core'; +import { EventService } from 'app/services/event.service'; + + +@Component({ + selector: 'app-challenge-button', + templateUrl: './challenge-button.component.html', + styleUrl: './challenge-button.component.scss', + +}) +export class ChallengeButtonComponent { + @Input() num: number = 1; + @Input() steps: number = 0; + @Input() time: number = 0; + @Output() toggleStopButton = new EventEmitter(); + buttonIsclicked: boolean = false; + + + constructor(public eventService:EventService) + { + this.eventService = eventService; + } + + challengeButtonIsClicked() { + this.buttonIsclicked = true; + this.eventService.disabled = true; + } + + closeDialog() { + this.buttonIsclicked = false; + this.eventService.disabled = false; + } +} diff --git a/frontend/src/app/components/atoms/inputfield/inputfield.component.html b/frontend/src/app/components/atoms/inputfield/inputfield.component.html new file mode 100644 index 0000000..03123b7 --- /dev/null +++ b/frontend/src/app/components/atoms/inputfield/inputfield.component.html @@ -0,0 +1,4 @@ +
+ + +
\ No newline at end of file diff --git a/frontend/src/app/components/atoms/inputfield/inputfield.component.scss b/frontend/src/app/components/atoms/inputfield/inputfield.component.scss new file mode 100644 index 0000000..083cbf6 --- /dev/null +++ b/frontend/src/app/components/atoms/inputfield/inputfield.component.scss @@ -0,0 +1,20 @@ +.textfield +{ + display: flex; + flex-direction: column; + + .label + { + + font-weight: bold; + } + + .input + { + margin-top: 12px; + margin-bottom: 12px; + height: 40px; + border-radius: 8px; + text-indent: 10px; + } +} \ No newline at end of file diff --git a/frontend/src/app/components/atoms/inputfield/inputfield.component.spec.ts b/frontend/src/app/components/atoms/inputfield/inputfield.component.spec.ts new file mode 100644 index 0000000..511e088 --- /dev/null +++ b/frontend/src/app/components/atoms/inputfield/inputfield.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { InputfieldComponent } from './inputfield.component'; + +describe('InputfieldComponent', () => { + let component: InputfieldComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [InputfieldComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(InputfieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/atoms/inputfield/inputfield.component.ts b/frontend/src/app/components/atoms/inputfield/inputfield.component.ts new file mode 100644 index 0000000..5246b24 --- /dev/null +++ b/frontend/src/app/components/atoms/inputfield/inputfield.component.ts @@ -0,0 +1,14 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'app-inputfield', + templateUrl: './inputfield.component.html', + styleUrl: './inputfield.component.scss' +}) +export class InputfieldComponent { + @Input() typetext: string = "Hallo"; + @Input() placeholder: string = ""; + @Input() labeltext: string = ""; + + +} diff --git a/frontend/src/app/components/atoms/stopbutton/stopbutton.component.html b/frontend/src/app/components/atoms/stopbutton/stopbutton.component.html new file mode 100644 index 0000000..05fd55c --- /dev/null +++ b/frontend/src/app/components/atoms/stopbutton/stopbutton.component.html @@ -0,0 +1 @@ + diff --git a/frontend/src/app/components/atoms/stopbutton/stopbutton.component.scss b/frontend/src/app/components/atoms/stopbutton/stopbutton.component.scss new file mode 100644 index 0000000..c31b3d9 --- /dev/null +++ b/frontend/src/app/components/atoms/stopbutton/stopbutton.component.scss @@ -0,0 +1,75 @@ + +.stopbutton { + appearance: button; + background-color: #f55959e5; + border: solid transparent; + border-radius: 16px; + border-width: 0 0 5px; + box-sizing: border-box; + color: var(--white); + cursor: pointer; + display: inline-block; + font-size: 12px; + font-weight: 700; + letter-spacing: 0.8px; + line-height: 20px; + margin: 0; + outline: none; + padding: 13px 13px; + text-align: center; + text-transform: uppercase; + touch-action: manipulation; + transform: translateZ(0); + transition: filter 0.2s; + user-select: none; + -webkit-user-select: none; + vertical-align: middle; + white-space: nowrap; + width: 20vw; + height: 5vh; + margin-top: 15px; + position: fixed; + top: 20vh; + right: 0; + margin-right: 3vw; + padding: 2vw; + } + + .stopbutton:after { + background-clip: padding-box; + background-color: #ff4646; + border: solid transparent; + border-radius: 16px; + border-width: 0 0 4px; + bottom: -4px; + content: ""; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: -1; + } + + .stopbutton:main, + .stopbutton:focus { + user-select: auto; + } + + .stopbutton:hover:not(:disabled) { + filter: brightness(1.1); + -webkit-filter: brightness(1.1); + } + + .stopbutton:disabled { + cursor: auto; + } + + .stopbutton:active { + border-width: 4px 0 0; + background: none; + } + + #button-top { + font-weight: 100; + font-size: 10px; + } \ No newline at end of file diff --git a/frontend/src/app/components/atoms/stopbutton/stopbutton.component.spec.ts b/frontend/src/app/components/atoms/stopbutton/stopbutton.component.spec.ts new file mode 100644 index 0000000..41eac24 --- /dev/null +++ b/frontend/src/app/components/atoms/stopbutton/stopbutton.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { StopbuttonComponent } from './stopbutton.component'; + +describe('StopbuttonComponent', () => { + let component: StopbuttonComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [StopbuttonComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(StopbuttonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/atoms/stopbutton/stopbutton.component.ts b/frontend/src/app/components/atoms/stopbutton/stopbutton.component.ts new file mode 100644 index 0000000..8f6e09c --- /dev/null +++ b/frontend/src/app/components/atoms/stopbutton/stopbutton.component.ts @@ -0,0 +1,25 @@ +import { Component } from '@angular/core'; +import { EventService } from 'app/services/event.service'; + +@Component({ + selector: 'app-stopbutton', + templateUrl: './stopbutton.component.html', + styleUrl: './stopbutton.component.scss', +}) +export class StopbuttonComponent { + constructor(public eventservice: EventService) { + this.eventservice = eventservice; + } + + toggleStopButton() { + this.eventservice.toggleStopButton = false; + this.eventservice.disabled = false; + this.eventservice.stopTraining(); + this.eventservice.snackbarBackgroundColor = "#f72525" + this.eventservice.snackbarText = "Training has stoped" + this.eventservice.classNameToast = 'show'; + setTimeout(() => { + this.eventservice.classNameToast = ''; + }, 2800); + } +} diff --git a/frontend/src/app/components/atoms/timer/timer.component.html b/frontend/src/app/components/atoms/timer/timer.component.html new file mode 100644 index 0000000..105d6e3 --- /dev/null +++ b/frontend/src/app/components/atoms/timer/timer.component.html @@ -0,0 +1 @@ +

{{ eventService.time |timer}}

\ No newline at end of file diff --git a/frontend/src/app/components/atoms/timer/timer.component.scss b/frontend/src/app/components/atoms/timer/timer.component.scss new file mode 100644 index 0000000..2502705 --- /dev/null +++ b/frontend/src/app/components/atoms/timer/timer.component.scss @@ -0,0 +1,5 @@ +h2{ + margin: 0; + margin-top: 10px; + font-size: 5vw; +} \ No newline at end of file diff --git a/frontend/src/app/components/atoms/timer/timer.component.spec.ts b/frontend/src/app/components/atoms/timer/timer.component.spec.ts new file mode 100644 index 0000000..590f05b --- /dev/null +++ b/frontend/src/app/components/atoms/timer/timer.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TimerComponent } from './timer.component'; + +describe('TimerComponent', () => { + let component: TimerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TimerComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TimerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/atoms/timer/timer.component.ts b/frontend/src/app/components/atoms/timer/timer.component.ts new file mode 100644 index 0000000..8269f0a --- /dev/null +++ b/frontend/src/app/components/atoms/timer/timer.component.ts @@ -0,0 +1,18 @@ +import { Component } from '@angular/core'; +import { EventService } from 'app/services/event.service'; + +@Component({ + selector: 'app-timer', + templateUrl: './timer.component.html', + styleUrl: './timer.component.scss' +}) +export class TimerComponent { + + constructor(public eventService:EventService) + { + this.eventService = eventService; + } + + + +} diff --git a/frontend/src/app/components/atoms/toast/toast.component.html b/frontend/src/app/components/atoms/toast/toast.component.html new file mode 100644 index 0000000..b3f9654 --- /dev/null +++ b/frontend/src/app/components/atoms/toast/toast.component.html @@ -0,0 +1,2 @@ + +
{{eventservice.snackbarText}}
\ No newline at end of file diff --git a/frontend/src/app/components/atoms/toast/toast.component.scss b/frontend/src/app/components/atoms/toast/toast.component.scss new file mode 100644 index 0000000..a7c506c --- /dev/null +++ b/frontend/src/app/components/atoms/toast/toast.component.scss @@ -0,0 +1,47 @@ + + +#snackbar { + visibility: hidden; /* Hidden by default. Visible on click */ + min-width: 250px; /* Set a default minimum width */ + margin-left: -140px; /* Divide value of min-width by 2 */ + background-color: #67b402; /* Black background color */ + color: #fff; /* White text color */ + text-align: center; /* Centered text */ + border-radius: 2px; /* Rounded borders */ + padding: 16px; /* Padding */ + position: fixed; /* Sit on top of the screen */ + z-index: 1; /* Add a z-index if needed */ + left: 50%; /* Center the snackbar */ + bottom: 30px; /* 30px from the bottom */ +} + +/* Show the snackbar when clicking on a button (class added with JavaScript) */ +.show { + visibility: visible !important; /* Show the snackbar */ + +/* Add animation: Take 0.5 seconds to fade in and out the snackbar. +However, delay the fade out process for 2.5 seconds */ + -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s; + animation: fadein 0.5s, fadeout 0.5s 2.5s; +} + +/* Animations to fade the snackbar in and out */ +@-webkit-keyframes fadein { + from {bottom: 0; opacity: 0;} + to {bottom: 30px; opacity: 1;} +} + +@keyframes fadein { + from {bottom: 0; opacity: 0;} + to {bottom: 30px; opacity: 1;} +} + +@-webkit-keyframes fadeout { + from {bottom: 30px; opacity: 1;} + to {bottom: 0; opacity: 0;} +} + +@keyframes fadeout { + from {bottom: 30px; opacity: 1;} + to {bottom: 0; opacity: 0;} +} \ No newline at end of file diff --git a/frontend/src/app/components/atoms/toast/toast.component.spec.ts b/frontend/src/app/components/atoms/toast/toast.component.spec.ts new file mode 100644 index 0000000..3c74873 --- /dev/null +++ b/frontend/src/app/components/atoms/toast/toast.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ToastComponent } from './toast.component'; + +describe('ToastComponent', () => { + let component: ToastComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ToastComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ToastComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/atoms/toast/toast.component.ts b/frontend/src/app/components/atoms/toast/toast.component.ts new file mode 100644 index 0000000..03a21dc --- /dev/null +++ b/frontend/src/app/components/atoms/toast/toast.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { EventService } from 'app/services/event.service'; + +@Component({ + selector: 'app-toast', + templateUrl: './toast.component.html', + styleUrl: './toast.component.scss' +}) +export class ToastComponent { + + constructor(public eventservice:EventService) + { + this.eventservice = eventservice; + } +} diff --git a/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.html b/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.html new file mode 100644 index 0000000..fe7eb7d --- /dev/null +++ b/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.html @@ -0,0 +1,26 @@ +
+
+
 
+
+

Training {{ num }}

+ +
+
+
    +
  • Steps:
  • +
  • Time:
  • +
  • Points:
  • +
+
    +
  • {{ steps }}
  • +
  • {{ time }}
  • +
  • {{ points }}
  • +
+
+ +
+
+ + diff --git a/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.scss b/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.scss new file mode 100644 index 0000000..090dbea --- /dev/null +++ b/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.scss @@ -0,0 +1,98 @@ +.main { + position: fixed; + bottom: 0; + width: 100%; + background-color: inherit; + z-index: 2; + left: 0; + height: auto; + display: flex; + flex-direction: column; + align-items: center; + justify-content: end; + + .window { + height: 100vh; + width: 100%; + border-radius: 24px 24px 0 0; + background-color: var(--black-2); + display: flex; + flex-direction: column; + align-items: center; + + .dialog-header { + display: flex; + flex-direction: row; + width: 90%; + justify-content: space-between; + border-bottom: 1px white solid; + + .done-button { + background-color: inherit; + border: none; + color: var(--green); + font-weight: bolder; + margin-top: 13px; + padding: 2px; + } + + .done-button:active { + color: white; /* Schriftfarbe beim Klicken */ + } + + h3 { + margin-bottom: 5px; + } + } + } + + .square { + width: 50px; + height: 5px; + border-radius: 16px; + background-color: var(--white); + margin-top: 10px; + } + + .training-infos { + display: flex; + justify-content: start; + width: 100%; + margin-left: 130px; + ul { + margin-top: 30px; + font-size: 12px; + list-style-type: none; + padding-left: 0; + margin-right: 0; + + li { + font-size: 18px; + margin-bottom: 10px; + background-repeat: no-repeat; + padding-left: 35px; + margin: 20px; + } + li.steps { + background-image: url(../../../../assets/icons/shoe.svg); + } + li.time { + background-image: url(../../../../assets/icons/time.svg); + } + li.points { + background-image: url(../../../../assets/icons/points.svg); + } + } + } + + .start-button { + width: 60%; + height: 15%; + border-radius: 18px; + color: var(--font); + font-weight: bold; + } + .start-button:hover { + background-color: var(--grey); + } +} diff --git a/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.spec.ts b/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.spec.ts new file mode 100644 index 0000000..04d747a --- /dev/null +++ b/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ChallengeDialogComponent } from './challenge-dialog.component'; + +describe('ChallengeDialogComponent', () => { + let component: ChallengeDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ChallengeDialogComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ChallengeDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.ts b/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.ts new file mode 100644 index 0000000..c7ae88a --- /dev/null +++ b/frontend/src/app/components/organisms/challenge-dialog/challenge-dialog.component.ts @@ -0,0 +1,76 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { + trigger, + state, + style, + animate, + transition, +} from '@angular/animations'; +import { ChallengeButtonComponent } from 'app/components/atoms/challenge-button/challenge-button.component'; +import { EventService } from 'app/services/event.service'; +import { timeout } from 'rxjs'; + +@Component({ + selector: 'app-challenge-dialog', + templateUrl: './challenge-dialog.component.html', + styleUrl: './challenge-dialog.component.scss', + animations: [ + trigger('openClose', [ + state('open', style({ + height: '45vh', + + })), + state('closed', style({ + height: '0', + + })), + transition('open <=> closed', [ + animate('0.1s') + ]) + ]) + ] +}) +export class ChallengeDialogComponent { + @Input() num: number = 1; + @Input() steps: number = 0; + @Input() time: number = 0; + @Input() points: number = 0; + @Output() closeDialog = new EventEmitter(); + @Input() trigger: boolean = false; + + + constructor(public eventservice:EventService) + { + this.eventservice = eventservice; + } + + triggerEvent() { + this.closeDialog.emit(); + } + + startEvent() + { + this.closeDialog.emit(); + this.eventservice.steps = this.steps; + this.eventservice.time = this.time; + this.eventservice.disabled = true; + this.eventservice.reduceTimer(); + this.eventservice.toggleStopButton = true; + this.eventservice.snackbarText = "Training has started" + this.eventservice.snackbarBackgroundColor = "#04b02f" + this.eventservice.classNameToast = "show" + setTimeout( + () => + { + this.eventservice.classNameToast = ""; + } + , 2900); + + } + + + + + + +} diff --git a/frontend/src/app/components/organisms/loginform/loginform.component.html b/frontend/src/app/components/organisms/loginform/loginform.component.html new file mode 100644 index 0000000..53d3dcb --- /dev/null +++ b/frontend/src/app/components/organisms/loginform/loginform.component.html @@ -0,0 +1,7 @@ + diff --git a/frontend/src/app/components/organisms/loginform/loginform.component.scss b/frontend/src/app/components/organisms/loginform/loginform.component.scss new file mode 100644 index 0000000..ebdad5d --- /dev/null +++ b/frontend/src/app/components/organisms/loginform/loginform.component.scss @@ -0,0 +1,58 @@ +.login-container +{ + display: flex; + flex-direction: column; + width: 300px; + background-color: var(--black-2); + padding: 30px; + border-radius: 12px; + + .button + { + width: 200px; + align-self: center; + margin-top: 20px; + height: 40px; + background-color: var(--green); + border: none; + border-radius: 12px; + font-weight: bold; + + } + + p.create-account{ + font-size: 12px; + text-align: center; + margin-top: 50px; + + a{ + font-weight: bold; + color: var(--white); + text-decoration: none; + margin-top: 20px; + } + a:hover{ + text-decoration: underline; + } + } + + p.toggle-password{ + margin-left: 10px; + margin-bottom: 0; + font-size: 12px; + display: flex; + justify-content: space-between; + + img{ + filter: invert(100%); + width: 16px; + height: auto; + } + + .eyeimg:hover { + transform: scale(1.1); /* Vergrößere das Bild um 10% */ + transition: transform 0.3s ease; /* Füge eine Transition hinzu */ + } + } + +} \ No newline at end of file diff --git a/frontend/src/app/components/organisms/loginform/loginform.component.spec.ts b/frontend/src/app/components/organisms/loginform/loginform.component.spec.ts new file mode 100644 index 0000000..0d7bc9d --- /dev/null +++ b/frontend/src/app/components/organisms/loginform/loginform.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginformComponent } from './loginform.component'; + +describe('LoginformComponent', () => { + let component: LoginformComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LoginformComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LoginformComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/organisms/loginform/loginform.component.ts b/frontend/src/app/components/organisms/loginform/loginform.component.ts new file mode 100644 index 0000000..05631bf --- /dev/null +++ b/frontend/src/app/components/organisms/loginform/loginform.component.ts @@ -0,0 +1,20 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'app-loginform', + templateUrl: './loginform.component.html', + styleUrl: './loginform.component.scss', +}) +export class LoginformComponent { + passwordFieldType: string = 'password'; + img: string = '../../../assets/ausblenden.png'; + showPassword: boolean = false; + + toggleType() { + this.showPassword = !this.showPassword; + this.passwordFieldType = this.showPassword ? 'text' : 'password'; + this.img = this.showPassword + ? '../../../assets/ausblenden.png' + : '../../../assets/aussicht.png'; + } +} diff --git a/frontend/src/app/components/organisms/roadmap/roadmap.component.html b/frontend/src/app/components/organisms/roadmap/roadmap.component.html new file mode 100644 index 0000000..4eb9d73 --- /dev/null +++ b/frontend/src/app/components/organisms/roadmap/roadmap.component.html @@ -0,0 +1,11 @@ +
+ + + + +
diff --git a/frontend/src/app/components/organisms/roadmap/roadmap.component.scss b/frontend/src/app/components/organisms/roadmap/roadmap.component.scss new file mode 100644 index 0000000..7949a71 --- /dev/null +++ b/frontend/src/app/components/organisms/roadmap/roadmap.component.scss @@ -0,0 +1,17 @@ +.map { + height: 100%; + padding-top: 20vh; + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; +} + +/* Nur jeder zweite Button */ +.button { + margin-right: 50px; +} + +.button:nth-child(odd) { + margin-left: 100px; +} diff --git a/frontend/src/app/components/organisms/roadmap/roadmap.component.spec.ts b/frontend/src/app/components/organisms/roadmap/roadmap.component.spec.ts new file mode 100644 index 0000000..eff947d --- /dev/null +++ b/frontend/src/app/components/organisms/roadmap/roadmap.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RoadmapComponent } from './roadmap.component'; + +describe('RoadmapComponent', () => { + let component: RoadmapComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [RoadmapComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(RoadmapComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/organisms/roadmap/roadmap.component.ts b/frontend/src/app/components/organisms/roadmap/roadmap.component.ts new file mode 100644 index 0000000..19d5e6f --- /dev/null +++ b/frontend/src/app/components/organisms/roadmap/roadmap.component.ts @@ -0,0 +1,36 @@ +import { Component } from '@angular/core'; +import { EventService } from 'app/services/event.service'; + +@Component({ + selector: 'app-roadmap', + templateUrl: './roadmap.component.html', + styleUrl: './roadmap.component.scss', +}) +export class RoadmapComponent { + + constructor(public eventservice:EventService) + { + this.eventservice = eventservice; + } + + + + activityList = [ + { steps: 500, time: 10 }, + { steps: 1000, time: 2000 }, + { steps: 1500, time: 3000 }, + { steps: 2000, time: 4000 }, + { steps: 2500, time: 5000 }, + { steps: 3000, time: 6000 }, + { steps: 3500, time: 7000 }, + { steps: 4000, time: 8000 }, + { steps: 4500, time: 9000 }, + { steps: 5000, time: 10000 }, + { steps: 5500, time: 11000 }, + { steps: 6000, time: 12000 }, + { steps: 6500, time: 13000 }, + { steps: 7000, time: 14000 }, + { steps: 7500, time: 15000 }, + { steps: 8000, time: 16000 }, + ]; +} diff --git a/frontend/src/app/components/organisms/statistic-header/statistic-header.component.html b/frontend/src/app/components/organisms/statistic-header/statistic-header.component.html new file mode 100644 index 0000000..8041eee --- /dev/null +++ b/frontend/src/app/components/organisms/statistic-header/statistic-header.component.html @@ -0,0 +1,26 @@ +
+ +
+
+

+ Verbleibende
+ Zeit +

+ +
+ +
+

+ Verbleibende
+ Schritte +

+

{{ eventservice.steps}}

+
+ +
+ Icon Streak +

0000

+
+
+
+ diff --git a/frontend/src/app/components/organisms/statistic-header/statistic-header.component.scss b/frontend/src/app/components/organisms/statistic-header/statistic-header.component.scss new file mode 100644 index 0000000..1523562 --- /dev/null +++ b/frontend/src/app/components/organisms/statistic-header/statistic-header.component.scss @@ -0,0 +1,82 @@ +.header { + margin: 0; + padding: 0; + background-color: var(--black-2); + width: 100%; + height: 20vh; + position: fixed; + top: 0; + z-index: 1; + + box-shadow: 0 0 2px var(--black-2) 2px var(--black-2); + p { + margin: 0; + padding: 0; + } + + img { + width: 50vw; + height: 10vh; + margin: 0; + padding: 0; + background: none; + border: none; + margin-left: 18px; + } + + .statistic-container { + width: calc(100% - 20px); /* 20px für den Rand */ + margin: 0 auto; /* Zentriert den Container horizontal */ + padding: 0; + display: flex; + justify-content: space-between; + + .time { + width: 30vw; + margin-left: 10px; + + span { + color: var(--green); + } + + h2 { + margin: 0; + margin-top: 10px; + font-size: 5vw; + } + } + + .steps { + width: 30vw; + margin-left: 35px; + + span { + color: var(--green); + } + + h2 { + margin: 0; + margin-top: 10px; + font-size: 5vw; + } + } + + .streak { + width: 30vw; + display: flex; + justify-content: center; + align-items: start; + img { + width: 25px; + height: 25px; + margin-right: 8px; + } + + h2 { + margin: 0; + margin-top: 7px; + font-size: 5vw; + } + } + } +} diff --git a/frontend/src/app/components/organisms/statistic-header/statistic-header.component.spec.ts b/frontend/src/app/components/organisms/statistic-header/statistic-header.component.spec.ts new file mode 100644 index 0000000..6d8f384 --- /dev/null +++ b/frontend/src/app/components/organisms/statistic-header/statistic-header.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { StatisticHeaderComponent } from './statistic-header.component'; + +describe('StatisticHeaderComponent', () => { + let component: StatisticHeaderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [StatisticHeaderComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(StatisticHeaderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/organisms/statistic-header/statistic-header.component.ts b/frontend/src/app/components/organisms/statistic-header/statistic-header.component.ts new file mode 100644 index 0000000..dfcba26 --- /dev/null +++ b/frontend/src/app/components/organisms/statistic-header/statistic-header.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { EventService } from 'app/services/event.service'; + +@Component({ + selector: 'app-statistic-header', + templateUrl: './statistic-header.component.html', + styleUrl: './statistic-header.component.scss' +}) +export class StatisticHeaderComponent { + + constructor(public eventservice:EventService ) + { + this.eventservice = eventservice; + } + +} diff --git a/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.html b/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.html new file mode 100644 index 0000000..dafb45d --- /dev/null +++ b/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.html @@ -0,0 +1,6 @@ +
+
+ +
+ +
\ No newline at end of file diff --git a/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.scss b/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.scss new file mode 100644 index 0000000..174d437 --- /dev/null +++ b/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.scss @@ -0,0 +1,31 @@ +.main{ + width: 100%; + height: 100vh; + background-color: var(--background-black); + margin: 0; + padding: 0; + top: 0; + display: flex; + align-items: center; + flex-direction: column; + + .logo-contaier + { + width: 100%; + } + + p.welcome { + color: var(--primary-color); + font-size: 16px; + text-align: center; + height: 20px; + width: 100%; + margin-top: 20px; + font-weight: bold; + font-style: normal; + font-size: 20px; + padding: 0; + margin-bottom: 0; + } + +} \ No newline at end of file diff --git a/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.spec.ts b/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.spec.ts new file mode 100644 index 0000000..bb2932b --- /dev/null +++ b/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AuthenticationpageComponent } from './authenticationpage.component'; + +describe('AuthenticationpageComponent', () => { + let component: AuthenticationpageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AuthenticationpageComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AuthenticationpageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.ts b/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.ts new file mode 100644 index 0000000..571b007 --- /dev/null +++ b/frontend/src/app/components/pages/authenticationpage/authenticationpage.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-authenticationpage', + templateUrl: './authenticationpage.component.html', + styleUrl: './authenticationpage.component.scss' +}) +export class AuthenticationpageComponent { + +} diff --git a/frontend/src/app/components/pages/mainpage/mainpage.component.html b/frontend/src/app/components/pages/mainpage/mainpage.component.html new file mode 100644 index 0000000..6e48ba3 --- /dev/null +++ b/frontend/src/app/components/pages/mainpage/mainpage.component.html @@ -0,0 +1,5 @@ +
+ + +
+ diff --git a/frontend/src/app/components/pages/mainpage/mainpage.component.scss b/frontend/src/app/components/pages/mainpage/mainpage.component.scss new file mode 100644 index 0000000..e4ccdde --- /dev/null +++ b/frontend/src/app/components/pages/mainpage/mainpage.component.scss @@ -0,0 +1,13 @@ +.main{ + width: 100%; + height: 100%; + background-color: var(--background-black); + margin: 0; + padding: 0; + top: 0; + + p{ + margin: 0; + padding: 0; + } +} \ No newline at end of file diff --git a/frontend/src/app/components/pages/mainpage/mainpage.component.spec.ts b/frontend/src/app/components/pages/mainpage/mainpage.component.spec.ts new file mode 100644 index 0000000..2b464ae --- /dev/null +++ b/frontend/src/app/components/pages/mainpage/mainpage.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MainpageComponent } from './mainpage.component'; + +describe('MainpageComponent', () => { + let component: MainpageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MainpageComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(MainpageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/pages/mainpage/mainpage.component.ts b/frontend/src/app/components/pages/mainpage/mainpage.component.ts new file mode 100644 index 0000000..4684921 --- /dev/null +++ b/frontend/src/app/components/pages/mainpage/mainpage.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-mainpage', + templateUrl: './mainpage.component.html', + styleUrl: './mainpage.component.scss' +}) +export class MainpageComponent { + +} diff --git a/frontend/src/app/pipes/timer.pipe.spec.ts b/frontend/src/app/pipes/timer.pipe.spec.ts new file mode 100644 index 0000000..babe2d2 --- /dev/null +++ b/frontend/src/app/pipes/timer.pipe.spec.ts @@ -0,0 +1,8 @@ +import { TimerPipe } from './timer.pipe'; + +describe('TimerPipe', () => { + it('create an instance', () => { + const pipe = new TimerPipe(); + expect(pipe).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/pipes/timer.pipe.ts b/frontend/src/app/pipes/timer.pipe.ts new file mode 100644 index 0000000..8e0e433 --- /dev/null +++ b/frontend/src/app/pipes/timer.pipe.ts @@ -0,0 +1,23 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'timer' +}) +export class TimerPipe implements PipeTransform { + transform(value: number): string { + if (!value || isNaN(value)) { + return '00:00:00'; + } + + const hours: number = Math.floor(value / 3600); + const minutes: number = Math.floor((value % 3600) / 60); + const seconds: number = Math.floor(value % 60); + + const hoursString: string = hours < 10 ? `0${hours}` : `${hours}`; + const minutesString: string = minutes < 10 ? `0${minutes}` : `${minutes}`; + const secondsString: string = seconds < 10 ? `0${seconds}` : `${seconds}`; + + return hoursString + ':' + minutesString + ':' + secondsString; + } +} + diff --git a/frontend/src/app/services/event.service.spec.ts b/frontend/src/app/services/event.service.spec.ts new file mode 100644 index 0000000..df6b168 --- /dev/null +++ b/frontend/src/app/services/event.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { EventService } from './event.service'; + +describe('EventService', () => { + let service: EventService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(EventService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/services/event.service.ts b/frontend/src/app/services/event.service.ts new file mode 100644 index 0000000..105591a --- /dev/null +++ b/frontend/src/app/services/event.service.ts @@ -0,0 +1,39 @@ +import { Injectable } from '@angular/core'; + + +@Injectable({ + providedIn: 'root', +}) +export class EventService { + disabled: boolean = false; + toggleStopButton: boolean = false; + time: number = 0; + steps: number = 0; + interval: any; + classNameToast: string = ""; + snackbarBackgroundColor: string = ""; + snackbarText: string = "" + + reduceTimer() + { + this.interval = setInterval(() => { + this.time--; + if (this.time == 0) { + clearInterval(this.interval); + console.log("Zeit abgelaufen!"); + } + }, 1000); + } + + stopTraining() + { + clearInterval(this.interval); + this.steps = 0; + this.time = 0; + } + + + + + +} diff --git a/frontend/src/app/styles/color.scss b/frontend/src/app/styles/color.scss index abe0b6a..7774620 100644 --- a/frontend/src/app/styles/color.scss +++ b/frontend/src/app/styles/color.scss @@ -1,8 +1,8 @@ -:root{ - --background-black:#313338; - --font: #1E1F22; - --black-2:#2B2D31; - --white: #FFFFFF; - --green: #00FF7F; - -} \ No newline at end of file +:root { + --background-black: #0f0f0f; + --font: #282829; + --black-2: #181818; + --white: #ffffff; + --green: #00ff7f; + --grey: #d6d5d5; +} diff --git a/frontend/src/assets/Logo_3.svg b/frontend/src/assets/Logo_3.svg new file mode 100644 index 0000000..25156e4 --- /dev/null +++ b/frontend/src/assets/Logo_3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/ausblenden.png b/frontend/src/assets/ausblenden.png new file mode 100644 index 0000000000000000000000000000000000000000..5be626d74dc04308a8cdabae6ea6ff04009bfcfb GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- zG7x6;t5)LxG9*h}BT9nv(@M${i&7cN%ggmL^RkPR6AM!H@{7`Ezq65IU|?kSba4!^ z=)HPrzxL5Y5w;KfPrW5|yo%l@>{PK&)6DtDoU(K24|b7AUh|Zxt@aLV%~M?6q`9|g z+rJCl)Oj}HL*47IzYITLS-HLVT=Bf;U*!HNA1nA4eVAigLFaP;@f$~EGz ecJAM|E7%>+TZTSfG`kQOW(=OLelF{r5}E*RP?p*N literal 0 HcmV?d00001 diff --git a/frontend/src/assets/aussicht.png b/frontend/src/assets/aussicht.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6b4b202ba5f96a8bb613abaa5f458b489e4066 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- zd=O^*xaf{EkRe&(8c`CQpH@mmtT}V`<;yxP|-b47sn8b z-lLcIdNDhSus(Rd%bO{4+kLOyBHzrmRr1eIoUgRBKOtFCXL`a!Hc~(^Iv^)|ZO54?^=rVaQ-5@ z=Z{l1=Vm?IaF998^F`71eN&2jZm3^-S~YE!?^n}n+XHGlCfiB#SUeEZo|C>-$XaE& t<*QZlm&BWeH;Z{`zPB&>_t(6RfxDt&;bmc!6rfKTJYD@<);T3K0RZOfjP3vc literal 0 HcmV?d00001 diff --git a/frontend/src/assets/f7--flame.svg b/frontend/src/assets/f7--flame.svg new file mode 100644 index 0000000..b22a2be --- /dev/null +++ b/frontend/src/assets/f7--flame.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/icons/points.svg b/frontend/src/assets/icons/points.svg new file mode 100644 index 0000000..2b841dd --- /dev/null +++ b/frontend/src/assets/icons/points.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icons/shoe.svg b/frontend/src/assets/icons/shoe.svg new file mode 100644 index 0000000..9a26fc3 --- /dev/null +++ b/frontend/src/assets/icons/shoe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icons/time.svg b/frontend/src/assets/icons/time.svg new file mode 100644 index 0000000..ea9c667 --- /dev/null +++ b/frontend/src/assets/icons/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/logo/Logo 1.svg b/frontend/src/assets/logo/Logo 1.svg new file mode 100644 index 0000000..4bdcf6d --- /dev/null +++ b/frontend/src/assets/logo/Logo 1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/logo/logo_1_white.svg b/frontend/src/assets/logo/logo_1_white.svg new file mode 100644 index 0000000..7144aa1 --- /dev/null +++ b/frontend/src/assets/logo/logo_1_white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/favicon.ico b/frontend/src/favicon.ico deleted file mode 100644 index 57614f9c967596fad0a3989bec2b1deff33034f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 Nr__JTFzvMr^FKp4S3v*( diff --git a/frontend/src/index.html b/frontend/src/index.html index 3af61ec..6bb0d2c 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -2,10 +2,10 @@ - Frontend + duogradus. - Sammle Schritte, Tritt gegen Freunde an und steig in der Liga auf - + diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index f37b67f..feec11a 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -1,10 +1,10 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "compileOnSave": false, "compilerOptions": { "outDir": "./dist/out-tsc", "forceConsistentCasingInFileNames": true, "strict": true, + "baseUrl": "src", "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, @@ -19,10 +19,7 @@ "target": "ES2022", "module": "ES2022", "useDefineForClassFields": false, - "lib": [ - "ES2022", - "dom" - ] + "lib": ["ES2022", "dom"] }, "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false,