diff --git a/Mediatheke-Client/src/app/app.component.html b/Mediatheke-Client/src/app/app.component.html index 5749b21..998be04 100644 --- a/Mediatheke-Client/src/app/app.component.html +++ b/Mediatheke-Client/src/app/app.component.html @@ -1,5 +1,6 @@ -
+ +
\ No newline at end of file diff --git a/Mediatheke-Client/src/app/app.component.scss b/Mediatheke-Client/src/app/app.component.scss index f39f935..fc1fd07 100644 --- a/Mediatheke-Client/src/app/app.component.scss +++ b/Mediatheke-Client/src/app/app.component.scss @@ -1,7 +1,6 @@ .wrapper { padding: 30px; padding-top: 150px; - max-width: 1600px; margin: auto; @media screen and (max-width: 768px) { @@ -9,6 +8,11 @@ } } +.unset-padding { + padding: unset; + padding-top: 30px; +} + /* make input big poppy flat and rounded corners */ input { border: none; diff --git a/Mediatheke-Client/src/app/app.component.ts b/Mediatheke-Client/src/app/app.component.ts index ba7d12d..5f6ca3f 100644 --- a/Mediatheke-Client/src/app/app.component.ts +++ b/Mediatheke-Client/src/app/app.component.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core'; -import { BackendService } from './services/backend'; +import { Router } from '@angular/router'; @Component({ selector: 'app-root', @@ -8,7 +8,9 @@ import { BackendService } from './services/backend'; }) export class AppComponent { - constructor(private backendService: BackendService) { } + constructor( + public router: Router + ) { } ngOnInit() { } } diff --git a/Mediatheke-Client/src/app/app.module.ts b/Mediatheke-Client/src/app/app.module.ts index 2ae7536..10b5141 100644 --- a/Mediatheke-Client/src/app/app.module.ts +++ b/Mediatheke-Client/src/app/app.module.ts @@ -32,6 +32,9 @@ import { SincePipe } from './shared/since.pipe'; import { ServiceWorkerModule } from '@angular/service-worker'; import { VideoSeriesNavComponent } from './video-series-nav/video-series-nav.component'; import { TabsModule } from 'ngx-bootstrap/tabs'; +import { HeroComponent } from './hero/hero.component'; +import { VideoSmallListComponent } from './video-small-list/video-small-list.component'; +import { VideoTopicRowComponent } from './video-topic-row/video-topic-row.component'; @NgModule({ declarations: [ @@ -55,6 +58,9 @@ import { TabsModule } from 'ngx-bootstrap/tabs'; VideoResultListComponent, SincePipe, VideoSeriesNavComponent, + HeroComponent, + VideoSmallListComponent, + VideoTopicRowComponent, ], imports: [ BrowserModule, diff --git a/Mediatheke-Client/src/app/footer/footer.component.html b/Mediatheke-Client/src/app/footer/footer.component.html index fd659f4..0deafd6 100644 --- a/Mediatheke-Client/src/app/footer/footer.component.html +++ b/Mediatheke-Client/src/app/footer/footer.component.html @@ -1,39 +1,27 @@ - \ No newline at end of file + +
+ + + + + \ No newline at end of file diff --git a/Mediatheke-Client/src/app/footer/footer.component.scss b/Mediatheke-Client/src/app/footer/footer.component.scss index 062f1c1..14002db 100644 --- a/Mediatheke-Client/src/app/footer/footer.component.scss +++ b/Mediatheke-Client/src/app/footer/footer.component.scss @@ -1,25 +1,72 @@ -.footer { - margin-top: 100px; +.container-fluid { + /* Other styles remain unchanged */ + background: url("/assets/footer/bg.svg") no-repeat bottom left; + background-color: black; + padding: 20px; + position: relative; bottom: 0; - width: 100%; - background-color: var(--color-contrast-background); - color: var(--color-highlight); + display: flex; + justify-content: flex-start; // Ensures content starts from the left + align-items: center; + height: 300px; a { - color: var(--color-primary); + color: grey; + font-size: 0.9rem; + + &:hover { + color: white; + } + } + + /* unset url when smaller than 768px */ + @media (max-width: 768px) { + background: unset; + background-color: black; + } +} + +h1 { + color: white; + font-size: 2.5em; + margin-right: auto; // Pushes the rest of the content to the right + margin-left: 180px; + + @media (max-width: 768px) { + display: none; + } +} + +.link-item { + text-decoration: none; + color: white; + + &:hover { + text-decoration: underline; } } -img { - /*invert the logo */ - height: 50px; +.logo { + height: 100px; + position: absolute; + right: 20px; + bottom: 20px; } -.container { - max-width: 1600px; - margin: auto; - padding-left: 30px; - padding-right: 30px; - padding-top: 30px; - padding-bottom: 30px; -} \ No newline at end of file +.links { + align-self: end; + width: fit-content; + display: flex; + + @media (max-width: 768px) { + align-self: start; + } +} + +ul.list-unstyled.left { + margin-right: 30px; // Space between the two lists +} + +ul.list-unstyled.right { + margin-right: 333px; // Adjust based on the logo's size and desired spacing +} diff --git a/Mediatheke-Client/src/app/header/header.component.scss b/Mediatheke-Client/src/app/header/header.component.scss index da3ef4a..e3df2a5 100644 --- a/Mediatheke-Client/src/app/header/header.component.scss +++ b/Mediatheke-Client/src/app/header/header.component.scss @@ -47,9 +47,10 @@ nav { } .grid-nav { + height: 90px; display: grid; grid-template-columns: min-content 2fr 1fr; - align-items: center; + align-items: initial; @media screen and (max-width: 768px) { grid-template-columns: 1fr; @@ -79,25 +80,3 @@ nav { align-items: flex-end; } - -/*************************************************** - * Generated by SVG Artista on 9/7/2023, 10:19:58 AM - * MIT license (https://opensource.org/licenses/MIT) - * W. https://svgartista.net - **************************************************/ - - -svg .svg-elem-4 { - stroke-dashoffset: 341.7839660644531px; - stroke-dasharray: 341.7839660644531px; - fill: transparent; - -webkit-transition: stroke-dashoffset 1s cubic-bezier(0.47, 0, 0.745, 0.715) 0.36s, - fill 0.7s cubic-bezier(0.47, 0, 0.745, 0.715) 1.1s; - transition: stroke-dashoffset 1s cubic-bezier(0.47, 0, 0.745, 0.715) 0.36s, - fill 0.7s cubic-bezier(0.47, 0, 0.745, 0.715) 1.1s; -} - -svg.active .svg-elem-4 { - stroke-dashoffset: 0; - fill: rgb(255, 198, 235); -} \ No newline at end of file diff --git a/Mediatheke-Client/src/app/hero/hero.component.html b/Mediatheke-Client/src/app/hero/hero.component.html new file mode 100644 index 0000000..8585609 --- /dev/null +++ b/Mediatheke-Client/src/app/hero/hero.component.html @@ -0,0 +1,10 @@ +
+
+ Alle Medias + +
+
+ in einer   Theke. + +
+
\ No newline at end of file diff --git a/Mediatheke-Client/src/app/hero/hero.component.scss b/Mediatheke-Client/src/app/hero/hero.component.scss new file mode 100644 index 0000000..832be3f --- /dev/null +++ b/Mediatheke-Client/src/app/hero/hero.component.scss @@ -0,0 +1,88 @@ +/* tiled background repeat */ +.hero { + --max-amplitude: 5px; // Maximum distance element will move during wobble + --degree: 5deg; // Maximum rotation element will move during wobble + width: 100%; + height: 400px; + margin-top: 40px; + padding-top: 50px; + background-image: url('/assets/hero/tile.svg'); + background-repeat: repeat; + border-bottom: 3px solid var(--color-key-black); + font-size: 2rem; + text-transform: lowercase; + + overflow: hidden; + display: flex; // To arrange child divs horizontally + + // Nested styles for the child divs + .float { + display: flex; // Use flex for inner positioning + font-size: 2em; // Larger font size for better visibility + position: relative; + + // Adjust the spacing between the text and the SVG image + span { + margin-right: 0.5em; // Space between text and image + z-index: 100; + } + + img { + height: auto; // Keep aspect ratio of the images# + position: absolute; + } + } + + .media { + left: 9%; + top: 16%; + + img { + width: 330px; + left: 100px; + top: -110px; + } + } + + .theke { + left: 33%; + top: 41%; + + img { + width: 513px; + left: -190px; + top: -153px; + } + } +} + + +.media img, +.theke img { + animation: wobble 30s infinite ease-in-out; + /* Using 'infinite' to make the animation loop forever. + 2s duration for a slow, subtle effect, and 'ease-in-out' for smooth timing. */ +} + +/* Define a wobble animation to simulate the hovering effect */ +@keyframes wobble { + 0% { + transform: translate(0, 0) rotate(0); + } + + 25% { + transform: translate(calc(var(--max-amplitude) * -1), var(--max-amplitude)) rotate(var(--degree)); + } + + 50% { + transform: translate(var(--max-amplitude), calc(var(--max-amplitude) * -1)) rotate(calc(var(--degree) * -1)); + } + + 75% { + transform: translate(calc(var(--max-amplitude) * -0.5), calc(var(--max-amplitude) * 0.5)) rotate(0); + } + + 100% { + transform: translate(calc(var(--max-amplitude) * 0.5), calc(var(--max-amplitude) * -0.5)) rotate(0); + } +} \ No newline at end of file diff --git a/Mediatheke-Client/src/app/hero/hero.component.spec.ts b/Mediatheke-Client/src/app/hero/hero.component.spec.ts new file mode 100644 index 0000000..ec474d6 --- /dev/null +++ b/Mediatheke-Client/src/app/hero/hero.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HeroComponent } from './HeroComponent'; + +describe('HeroComponent', () => { + let component: HeroComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [HeroComponent] + }); + fixture = TestBed.createComponent(HeroComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/Mediatheke-Client/src/app/hero/hero.component.ts b/Mediatheke-Client/src/app/hero/hero.component.ts new file mode 100644 index 0000000..5ef9afe --- /dev/null +++ b/Mediatheke-Client/src/app/hero/hero.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-hero', + templateUrl: './hero.component.html', + styleUrls: ['./hero.component.scss'] +}) +export class HeroComponent { + constructor(public router: Router) { } +} + diff --git a/Mediatheke-Client/src/app/home/home.component.html b/Mediatheke-Client/src/app/home/home.component.html index ba35b54..e4cc9e1 100644 --- a/Mediatheke-Client/src/app/home/home.component.html +++ b/Mediatheke-Client/src/app/home/home.component.html @@ -1,4 +1,6 @@ - - - \ No newline at end of file + +
+ +
\ No newline at end of file diff --git a/Mediatheke-Client/src/app/home/home.component.scss b/Mediatheke-Client/src/app/home/home.component.scss index e69de29..98add96 100644 --- a/Mediatheke-Client/src/app/home/home.component.scss +++ b/Mediatheke-Client/src/app/home/home.component.scss @@ -0,0 +1,3 @@ +.video-row { + margin-bottom: 50px; +} \ No newline at end of file diff --git a/Mediatheke-Client/src/app/services/search.service.ts b/Mediatheke-Client/src/app/services/search.service.ts index d042f01..e7a3a1c 100644 --- a/Mediatheke-Client/src/app/services/search.service.ts +++ b/Mediatheke-Client/src/app/services/search.service.ts @@ -8,7 +8,6 @@ import { BackendService } from './backend'; providedIn: 'root' }) export class SearchService { - search?: string; suggestions$!: Observable; errorMessage?: string; inputFocused: boolean = false; diff --git a/Mediatheke-Client/src/app/video-card/video-card.component.scss b/Mediatheke-Client/src/app/video-card/video-card.component.scss index d32ef37..e49d31f 100644 --- a/Mediatheke-Client/src/app/video-card/video-card.component.scss +++ b/Mediatheke-Client/src/app/video-card/video-card.component.scss @@ -15,7 +15,7 @@ right: 0; bottom: 0; left: 0; - background: linear-gradient(to bottom, transparent, #00ffea31); + /* background: linear-gradient(to bottom, transparent, #00ffea31); */ z-index: 1; /* Ensure the gradient is below the title and duration */ } diff --git a/Mediatheke-Client/src/app/video-detail/video-detail.component.html b/Mediatheke-Client/src/app/video-detail/video-detail.component.html index 3324e05..f334582 100644 --- a/Mediatheke-Client/src/app/video-detail/video-detail.component.html +++ b/Mediatheke-Client/src/app/video-detail/video-detail.component.html @@ -1,73 +1,76 @@ -
-
- Loading... -
-
-

Loading video...

+
+
+
+ Loading... +
+
+

Loading video...

+
-
-
-
-
- -
+
+
+
+ +
-
- - - - - -
- + +
+ Debug +
{{video | json}}
+
- -
- - -
+ + - -
-
-
- {{ video.topic }} + +
+
+ +

{{ video.title }}

+
+

{{ video.description ? video.description : 'Keine Beschreibung vorhanden' }}

+
+
+
Erschienen auf {{ video.channel }} + + am {{ video.date | date}} um {{ video.date | date:'shortTime' }} Uhr +   (Link zur + {{video.channel}}-Website)
-

{{ video.title }}

-
-
Erschienen auf {{ video.channel }} - am {{ video.date | date }}
-

{{ video.description }}

-
-
-
-
-
-