* code cleanup

This commit is contained in:
Danyi Dávid 2019-10-23 17:18:15 +02:00
parent 0d0ed38966
commit 9bd38ddaf5
17 changed files with 191 additions and 195 deletions

View File

@ -4,7 +4,7 @@ root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true

View File

@ -1,14 +1,14 @@
import {trigger, state, animate, transition, style} from '@angular/animations';
import { trigger, state, animate, transition, style } from '@angular/animations';
export const fadeInAnimation =
trigger('fadeInAnimation', [
// route 'enter' transition
transition(':enter', [
trigger('fadeInAnimation', [
// route 'enter' transition
transition(':enter', [
// styles at start of transition
style({opacity: 0}),
// styles at start of transition
style({opacity: 0}),
// animation and styles at end of transition
animate('3s', style({opacity: 1}))
]),
]);
// animation and styles at end of transition
animate('3s', style({opacity: 1}))
]),
]);

View File

@ -1,51 +1,51 @@
import {trigger, state, animate, transition, style} from '@angular/animations';
import { trigger, state, animate, transition, style } from '@angular/animations';
export const slideInOutAnimation =
trigger('slideInOutAnimation', [
trigger('slideInOutAnimation', [
// end state styles for route container (host)
state('*', style({
// the view covers the whole screen with a semi tranparent background
position: 'fixed',
top: 0,
left: 0,
right: 0,
bottom: 0,
// backgroundColor: 'rgba(0, 0, 0, 0.8)'
})),
// end state styles for route container (host)
state('*', style({
// the view covers the whole screen with a semi tranparent background
position: 'fixed',
top: 0,
left: 0,
right: 0,
bottom: 0,
// backgroundColor: 'rgba(0, 0, 0, 0.8)'
})),
// route 'enter' transition
transition(':enter', [
// route 'enter' transition
transition(':enter', [
// styles at start of transition
style({
// start with the content positioned off the right of the screen,
// -400% is required instead of -100% because the negative position adds to the width of the element
top: '-100%',
// styles at start of transition
style({
// start with the content positioned off the right of the screen,
// -400% is required instead of -100% because the negative position adds to the width of the element
top: '-100%',
// start with background opacity set to 0 (invisible)
// backgroundColor: 'rgba(0, 0, 0, 0)'
}),
// start with background opacity set to 0 (invisible)
// backgroundColor: 'rgba(0, 0, 0, 0)'
}),
// animation and styles at end of transition
animate('.5s ease-in-out', style({
// transition the right position to 0 which slides the content into view
top: 0,
// animation and styles at end of transition
animate('.5s ease-in-out', style({
// transition the right position to 0 which slides the content into view
top: 0,
// transition the background opacity to 0.8 to fade it in
// backgroundColor: 'rgba(0, 0, 0, 0.8)'
}))
]),
// transition the background opacity to 0.8 to fade it in
// backgroundColor: 'rgba(0, 0, 0, 0.8)'
}))
]),
// route 'leave' transition
transition(':leave', [
// animation and styles at end of transition
animate('.5s ease-in-out', style({
// transition the right position to -400% which slides the content out of view
top: '-100%',
// route 'leave' transition
transition(':leave', [
// animation and styles at end of transition
animate('.5s ease-in-out', style({
// transition the right position to -400% which slides the content out of view
top: '-100%',
// transition the background opacity to 0 to fade it out
// backgroundColor: 'rgba(0, 0, 0, 0)'
}))
])
]);
// transition the background opacity to 0 to fade it out
// backgroundColor: 'rgba(0, 0, 0, 0)'
}))
])
]);

View File

@ -6,11 +6,12 @@ import { AppComponent } from './app.component';
import { ModuleMapLoaderModule } from '@nguniversal/module-map-ngfactory-loader';
@NgModule({
imports: [
AppModule,
ServerModule,
ModuleMapLoaderModule,
],
bootstrap: [AppComponent],
imports: [
AppModule,
ServerModule,
ModuleMapLoaderModule,
],
bootstrap: [AppComponent],
})
export class AppServerModule {}
export class AppServerModule {
}

View File

@ -1,7 +1,7 @@
<div class="main container">
<h1>
<a [routerLink]="['']" title="Back to albums list"><i class="fa fa-level-up"></i></a>
{{album.name}}
{{album?.name}}
<a rel="nofollow" [href]="exportUrl" title="Download compressed album"><i class="fa fa-download"></i></a>
</h1>
<div class="row images">

View File

@ -1,5 +1,4 @@
import { Component, EventEmitter, HostListener, OnInit, Output } from '@angular/core';
import { Location } from "@angular/common";
import { environment } from "../../../environments/environment";
import { Title } from "@angular/platform-browser";
@ -45,8 +44,7 @@ export class DisplayImageComponent implements OnInit {
}
public get imageUrl(): string {
let url = environment.apiUrl + `/image/${this.slug}/${this.image}`;
return url;
return environment.apiUrl + `/image/${this.slug}/${this.image}`;
}
public activate(slug = "", image = "", extitle = "") {

View File

@ -2,8 +2,5 @@ import { Injectable } from '@angular/core';
@Injectable()
export class DisplayImageService {
constructor() { }
activate: (message?: string, title?: string, extitle? :string) => Promise<boolean>;
activate: (message?: string, title?: string, extitle?: string) => Promise<boolean>;
}

View File

@ -2,51 +2,52 @@ import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { GalleryComponent } from "./gallery/gallery.component";
import { GalleryService } from "./shared/gallery.service";
import { GalleryService } from "./shared";
import { AlbumComponent } from "./album/album.component";
import { DisplayImageComponent } from "./display-image/display-image.component";
const routes: Routes = [
{
path: '',
children: [],
component: GalleryComponent,
resolve: {
albums: GalleryService,
},
}, {
path: 'galleries',
children: [],
component: GalleryComponent,
resolve: {
albums: GalleryService,
},
}, {
path: 'album/:slug',
children: [],
component: AlbumComponent,
resolve: {
albums: GalleryService,
},
}, {
path: 'album/:slug/:image',
children: [],
component: AlbumComponent,
resolve: {
albums: GalleryService,
},
}, {
path: 'image/:slug/:image',
children: [],
component: DisplayImageComponent,
resolve: {
albums: GalleryService,
},
}
{
path: '',
children: [],
component: GalleryComponent,
resolve: {
albums: GalleryService,
},
}, {
path: 'galleries',
children: [],
component: GalleryComponent,
resolve: {
albums: GalleryService,
},
}, {
path: 'album/:slug',
children: [],
component: AlbumComponent,
resolve: {
albums: GalleryService,
},
}, {
path: 'album/:slug/:image',
children: [],
component: AlbumComponent,
resolve: {
albums: GalleryService,
},
}, {
path: 'image/:slug/:image',
children: [],
component: DisplayImageComponent,
resolve: {
albums: GalleryService,
},
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class GalleryRoutingModule { }
export class GalleryRoutingModule {
}

View File

@ -10,20 +10,21 @@ import { DisplayImageService } from './display-image/display-image.service';
import { ThumbnailComponent } from './thumbnail/thumbnail.component';
@NgModule({
imports: [
CommonModule,
HttpClientModule,
GalleryRoutingModule,
],
exports: [
GalleryComponent,
],
declarations: [
GalleryComponent,
AlbumComponent,
DisplayImageComponent,
ThumbnailComponent,
],
providers: [ GalleryService, DisplayImageService ]
imports: [
CommonModule,
HttpClientModule,
GalleryRoutingModule,
],
exports: [
GalleryComponent,
],
declarations: [
GalleryComponent,
AlbumComponent,
DisplayImageComponent,
ThumbnailComponent,
],
providers: [GalleryService, DisplayImageService]
})
export class GalleryModule { }
export class GalleryModule {
}

View File

@ -30,6 +30,14 @@ export class GalleryComponent implements OnInit {
property: 'og:image',
content: this.imageUrl(this.albums[0])
});
this.metaService.updateTag({
property: 'og:title',
content: "photos.yvan.hu"
});
this.metaService.updateTag({
property: 'og:description',
content: "My public photo gallery"
});
});
}

View File

@ -4,12 +4,12 @@ export const IMAGE_STANDARD = 0;
export const IMAGE_PANORAMA = 1;
export class Album {
public slug: string = "";
public name: string = "";
public date: string = "";
public coverImage: Image;
public type: number = IMAGE_STANDARD;
public isNew: boolean = false;
public isPublic: boolean = true;
public images: Array<Image> = [];
public slug: string = "";
public name: string = "";
public date: string = "";
public coverImage: Image;
public type: number = IMAGE_STANDARD;
public isNew: boolean = false;
public isPublic: boolean = true;
public images: Array<Image> = [];
}

View File

@ -7,33 +7,33 @@ import { environment } from "../../../environments/environment";
import { Album } from "./album.model";
@Injectable()
export class GalleryService implements Resolve<Array<Album>|false> {
export class GalleryService implements Resolve<Array<Album> | false> {
public albums: Array<Album> = [];
public albums: Array<Album> = [];
constructor(
private httpService: HttpClient,
) {}
constructor(
private httpService: HttpClient,
) {}
public listGalleries(): Observable<Array<Album>> {
return this.httpService.get<Array<Album>>(environment.apiUrl + '/api/galleries');
}
/**
* @param {ActivatedRouteSnapshot} route
* @returns {Promise<Array<Album>>}
* @todo add some cache ttl to albums?
*/
public resolve(route: ActivatedRouteSnapshot): Promise<Array<Album>|false> {
if(this.albums.length) {
return Promise.resolve(this.albums);
public listGalleries(): Observable<Array<Album>> {
return this.httpService.get<Array<Album>>(environment.apiUrl + '/api/galleries');
}
/**
* @param {ActivatedRouteSnapshot} route
* @returns {Promise<Array<Album>>}
* @todo add some cache ttl to albums?
*/
public resolve(route: ActivatedRouteSnapshot): Promise<Array<Album> | false> {
if (this.albums.length) {
return Promise.resolve(this.albums);
}
return this.listGalleries().toPromise().then(result => {
if (result) {
this.albums = result;
return result;
}
return false;
});
}
return this.listGalleries().toPromise().then(result => {
if(result) {
this.albums = result;
return result;
}
return false;
});
}
}

View File

@ -1,9 +1,9 @@
export class Image {
public dir: string = "";
public label: string = "";
public path: string = "";
public width: number = 0;
public height: number = 0;
public thumbWidth: number = 0;
public thumbHeight: number = 0;
public dir: string = "";
public label: string = "";
public path: string = "";
public width: number = 0;
public height: number = 0;
public thumbWidth: number = 0;
public thumbHeight: number = 0;
}

View File

@ -1,5 +1,5 @@
export class ThumbLabel {
public title: string = "";
public extraLeft: string = "";
public extraRight: string = "";
public title: string = "";
public extraLeft: string = "";
public extraRight: string = "";
}

View File

@ -1,10 +1,10 @@
import {ThumbLabel} from "./thumb-label.model";
import { ThumbLabel } from "./thumb-label.model";
export class Thumbnail {
public slug: string = '';
public image: string = '';
public path: string = '';
public label: ThumbLabel = new ThumbLabel();
public height: number = 0;
public width: number = 0;
public slug: string = '';
public image: string = '';
public path: string = '';
public label: ThumbLabel = new ThumbLabel();
public height: number = 0;
public width: number = 0;
}

View File

@ -1,22 +1,16 @@
import {Component, Input, OnInit} from '@angular/core';
import { Component, Input } from '@angular/core';
import {ThumbLabel} from "../shared/thumb-label.model";
import { ThumbLabel } from "../shared/thumb-label.model";
@Component({
selector: 'app-thumbnail, [app-thumbnail]',
templateUrl: './thumbnail.component.html',
styleUrls: ['./thumbnail.component.css']
selector: 'app-thumbnail, [app-thumbnail]',
templateUrl: './thumbnail.component.html',
styleUrls: ['./thumbnail.component.css']
})
export class ThumbnailComponent implements OnInit {
@Input() image: string = "";
@Input() label: ThumbLabel = null;
@Input() target: any = {};
@Input() width: number = 0;
@Input() height: number = 0;
constructor() {}
ngOnInit() {}
export class ThumbnailComponent {
@Input() image: string = "";
@Input() label: ThumbLabel = null;
@Input() target: any = {};
@Input() width: number = 0;
@Input() height: number = 0;
}

View File

@ -4,10 +4,6 @@
<meta charset="utf-8">
<title>Gallery</title>
<base href="/">
<meta name="og:title" content="Angullery"/>
<meta name="og:description" content="A really simple photo album"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/css/font-awesome.min.css">
<link rel="icon" type="image/x-icon" href="favicon.ico">