92 lines
2.8 KiB
TypeScript
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();
|
|
}
|
|
}
|