Files
Toju/website/src/app/pages/gallery/gallery.component.ts
2026-03-12 13:21:33 +01:00

92 lines
2.8 KiB
TypeScript

import {
AfterViewInit,
Component,
OnDestroy,
OnInit,
PLATFORM_ID,
inject
} from '@angular/core';
import { isPlatformBrowser, NgOptimizedImage } from '@angular/common';
import { RouterLink } from '@angular/router';
import { AdSlotComponent } from '../../components/ad-slot/ad-slot.component';
import { ScrollAnimationService } from '../../services/scroll-animation.service';
import { SeoService } from '../../services/seo.service';
interface GalleryItem {
src: string;
title: string;
description: string;
}
@Component({
selector: 'app-gallery',
standalone: true,
imports: [
NgOptimizedImage,
RouterLink,
AdSlotComponent
],
templateUrl: './gallery.component.html'
})
export class GalleryComponent implements OnInit, AfterViewInit, OnDestroy {
readonly galleryItems: GalleryItem[] = [
{
src: '/images/screenshots/screenshot_main.png',
title: 'Main chat view',
description: 'The core Toju experience with channels, messages, and direct communication tools.'
},
{
src: '/images/screenshots/screenshare_gaming.png',
title: 'Gaming screen share',
description: 'Share gameplay, guides, and live moments with smooth full-resolution screen sharing.'
},
{
src: '/images/screenshots/serverViewScreen.png',
title: 'Server overview',
description: 'Navigate servers and rooms with a layout designed for clarity and speed.'
},
{
src: '/images/screenshots/music.png',
title: 'Music and voice',
description: 'Stay in sync with voice and media features in a focused, low-friction interface.'
},
{
src: '/images/screenshots/videos.png',
title: 'Video sharing',
description: 'Preview and share visual content directly with your friends and communities.'
},
{
src: '/images/screenshots/filedownload.png',
title: 'File transfers',
description: 'Move files quickly without artificial size limits or unnecessary hoops.'
},
{
src: '/images/screenshots/gif.png',
title: 'Rich media chat',
description: 'Conversations stay lively with visual media support built right in.'
}
];
private readonly seoService = inject(SeoService);
private readonly scrollAnimation = inject(ScrollAnimationService);
private readonly platformId = inject(PLATFORM_ID);
ngOnInit(): void {
this.seoService.update({
title: 'Toju Image Gallery',
description: 'Browse screenshots of Toju and explore the interface for chat, file sharing, voice, and screen sharing.',
url: 'https://toju.app/gallery'
});
}
ngAfterViewInit(): void {
if (isPlatformBrowser(this.platformId)) {
setTimeout(() => this.scrollAnimation.init(), 100);
}
}
ngOnDestroy(): void {
this.scrollAnimation.destroy();
}
}