lightbox draft implemented
This commit is contained in:
parent
4fda33778c
commit
542d0416fd
@ -1,4 +1,13 @@
|
|||||||
|
import {Utils} from "../Utils";
|
||||||
|
import {Directory} from "./Directory";
|
||||||
export class Photo {
|
export class Photo {
|
||||||
constructor(public id:number, public name:string, public width:number, public height:number) {
|
constructor(public id:number, public name:string, public width:number, public height:number) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static getThumbnailPath(directory:Directory,photo:Photo){
|
||||||
|
return Utils.concatUrls("/api/gallery",directory.path,directory.name,photo.name,"thumbnail");
|
||||||
|
}
|
||||||
|
public static getPhotoPath(directory:Directory,photo:Photo){
|
||||||
|
return Utils.concatUrls("/api/gallery",directory.path,directory.name,photo.name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -1,17 +1,16 @@
|
|||||||
|
|
||||||
import {Component} from 'angular2/core';
|
import {Component} from 'angular2/core';
|
||||||
import {MATERIAL_DIRECTIVES} from "ng2-material/all";
|
import {MATERIAL_DIRECTIVES} from "ng2-material/all";
|
||||||
import {MATERIAL_BROWSER_PROVIDERS} from "ng2-material/all";
|
import {MdDialogRef} from "ng2-material/components/dialog/dialog_ref";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'admin-new-user',
|
selector: 'admin-new-user',
|
||||||
templateUrl: 'app/admin/newuser/new.user.admin.component.html',
|
templateUrl: 'app/admin/newuser/new.user.admin.component.html',
|
||||||
styleUrls:['app/admin/newuser/new.user.admin.component.css'],
|
styleUrls:['app/admin/newuser/new.user.admin.component.css'],
|
||||||
directives:[MATERIAL_DIRECTIVES],
|
directives:[MATERIAL_DIRECTIVES]
|
||||||
providers:[MATERIAL_BROWSER_PROVIDERS]
|
|
||||||
})
|
})
|
||||||
export class NewUserComponent{
|
export class NewUserComponent{
|
||||||
constructor() {
|
constructor(private dialog: MdDialogRef) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,4 +4,14 @@ div {
|
|||||||
gallery-photo {
|
gallery-photo {
|
||||||
/* display: inline-block;
|
/* display: inline-block;
|
||||||
overflow: hidden;*/
|
overflow: hidden;*/
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.lightboxCss{
|
||||||
|
position: fixed; /* Stay in place */
|
||||||
|
z-index: 1; /* Sit on top */
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 0px; /* Full width */
|
||||||
|
height: 0px; /* Full height */
|
||||||
|
background-color: #000066;
|
||||||
}
|
}
|
||||||
@ -1,13 +1,25 @@
|
|||||||
<div *ngIf="directory" (window:resize)="onResize()" >
|
<div class="lightboxCss"
|
||||||
|
#lightbox
|
||||||
|
|
||||||
|
(click)="hideLightBox($event)"
|
||||||
|
[style.top.px]="lightboxModel.top"
|
||||||
|
[style.left.px]="lightboxModel.left"
|
||||||
|
[style.width.px]="lightboxModel.image.width"
|
||||||
|
[style.height.px]="lightboxModel.image.height">
|
||||||
|
<img [src]="lightboxModel.image.src" width="100%" height="100%"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div #gridContainer *ngIf="directory" (window:resize)="onResize()" >
|
||||||
<gallery-photo
|
<gallery-photo
|
||||||
*ngFor="#gridPhoto of photosToRender"
|
*ngFor="#gridPhoto of photosToRender"
|
||||||
*ngIf="gridPhoto"
|
*ngIf="gridPhoto"
|
||||||
|
(click)="showLightBox($event,gridPhoto)"
|
||||||
[photo]="gridPhoto.photo"
|
[photo]="gridPhoto.photo"
|
||||||
[directory]="directory"
|
[directory]="directory"
|
||||||
[style.width.px]="gridPhoto.renderWidth"
|
[style.width.px]="gridPhoto.renderWidth"
|
||||||
[style.height.px]="gridPhoto.renderHeight"
|
[style.height.px]="gridPhoto.renderHeight"
|
||||||
[style.marginLeft.px]="IMAGE_MARGIN"
|
[style.marginLeft.px]="IMAGE_MARGIN"
|
||||||
[style.marginRight.px]="IMAGE_MARGIN">
|
[style.marginRight.px]="IMAGE_MARGIN">
|
||||||
|
|
||||||
</gallery-photo>
|
</gallery-photo>
|
||||||
</div>
|
</div>
|
||||||
@ -1,10 +1,12 @@
|
|||||||
///<reference path="../../../browser.d.ts"/>
|
///<reference path="../../../browser.d.ts"/>
|
||||||
|
|
||||||
import {Component, Input, ElementRef, OnChanges} from 'angular2/core';
|
import {Component, Input, ElementRef, OnChanges, ViewChild, ContentChild} from 'angular2/core';
|
||||||
import {Directory} from "../../../../common/entities/Directory";
|
import {Directory} from "../../../../common/entities/Directory";
|
||||||
import {Photo} from "../../../../common/entities/Photo";
|
import {Photo} from "../../../../common/entities/Photo";
|
||||||
import {GalleryPhotoComponent} from "../photo/photo.gallery.component";
|
import {GalleryPhotoComponent} from "../photo/photo.gallery.component";
|
||||||
import {GridRowBuilder} from "./GridRowBuilder";
|
import {GridRowBuilder} from "./GridRowBuilder";
|
||||||
|
import {AnimationBuilder} from "angular2/animate";
|
||||||
|
import {Utils} from "../../../../common/Utils";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'gallery-grid',
|
selector: 'gallery-grid',
|
||||||
@ -13,7 +15,9 @@ import {GridRowBuilder} from "./GridRowBuilder";
|
|||||||
directives:[GalleryPhotoComponent]
|
directives:[GalleryPhotoComponent]
|
||||||
})
|
})
|
||||||
export class GalleryGridComponent implements OnChanges{
|
export class GalleryGridComponent implements OnChanges{
|
||||||
|
|
||||||
|
@ViewChild('lightbox') lightBoxDiv:ElementRef;
|
||||||
|
@ViewChild('gridContainer') gridContainer:ElementRef;
|
||||||
@Input() directory:Directory;
|
@Input() directory:Directory;
|
||||||
photosToRender:Array<GridPhoto> = [];
|
photosToRender:Array<GridPhoto> = [];
|
||||||
private IMAGE_MARGIN = 2;
|
private IMAGE_MARGIN = 2;
|
||||||
@ -21,7 +25,7 @@ export class GalleryGridComponent implements OnChanges{
|
|||||||
private MIN_ROW_COUNT = 2;
|
private MIN_ROW_COUNT = 2;
|
||||||
private MAX_ROW_COUNT = 5;
|
private MAX_ROW_COUNT = 5;
|
||||||
|
|
||||||
constructor(private elementRef: ElementRef) {
|
constructor(private elementRef: ElementRef,private animBuilder: AnimationBuilder) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnChanges(){
|
ngOnChanges(){
|
||||||
@ -45,7 +49,7 @@ export class GalleryGridComponent implements OnChanges{
|
|||||||
let imageHeight = rowHeight - (this.IMAGE_MARGIN * 2);
|
let imageHeight = rowHeight - (this.IMAGE_MARGIN * 2);
|
||||||
|
|
||||||
photoRowBuilder.getPhotoRow().forEach((photo) => {
|
photoRowBuilder.getPhotoRow().forEach((photo) => {
|
||||||
let imageWidth = imageHeight * (photo.width / photo.height);
|
let imageWidth = imageHeight * (photo.width / photo.height);
|
||||||
this.photosToRender.push(new GridPhoto(photo,imageWidth,imageHeight));
|
this.photosToRender.push(new GridPhoto(photo,imageWidth,imageHeight));
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -58,11 +62,39 @@ export class GalleryGridComponent implements OnChanges{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private getContainerWidth(): number{
|
private getContainerWidth(): number{
|
||||||
if(typeof this.elementRef.nativeElement.firstElementChild === 'undefined' ||
|
return this.gridContainer.nativeElement.clientWidth;
|
||||||
this.elementRef.nativeElement.firstElementChild === null){
|
}
|
||||||
return 0;
|
|
||||||
}
|
public lightboxModel = {top:0,left:0, image:{width:0, height:0,src:""}, visible: false};
|
||||||
return this.elementRef.nativeElement.firstElementChild.clientWidth;
|
|
||||||
|
public showLightBox(event,gridPhoto:GridPhoto){
|
||||||
|
gridPhoto = Utils.clone(gridPhoto);
|
||||||
|
|
||||||
|
this.lightboxModel.visible = true;
|
||||||
|
|
||||||
|
this.lightboxModel.image.src = Photo.getThumbnailPath(this.directory,gridPhoto.photo);
|
||||||
|
console.log( this.gridContainer);
|
||||||
|
|
||||||
|
let animation0 = this.animBuilder.css();
|
||||||
|
animation0.setDuration(0);
|
||||||
|
animation0.setToStyles({height: gridPhoto.renderHeight+"px", width:gridPhoto.renderWidth+"px",
|
||||||
|
"top":event.target.offsetTop+"px", "left":event.target.offsetLeft+"px"});
|
||||||
|
animation0.start(this.lightBoxDiv.nativeElement).onComplete(()=>{
|
||||||
|
|
||||||
|
let animation = this.animBuilder.css();
|
||||||
|
animation.setDuration(1000);
|
||||||
|
animation.setFromStyles({height: gridPhoto.renderHeight+"px", width:gridPhoto.renderWidth+"px",
|
||||||
|
"top":event.target.offsetTop+"px", "left":event.target.offsetLeft+"px"});
|
||||||
|
animation.setToStyles({height: "100%", width: "100%",
|
||||||
|
"top":"0px","left": "0px"});
|
||||||
|
animation.start(this.lightBoxDiv.nativeElement);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public hideLightBox(event) {
|
||||||
|
this.lightBoxDiv.nativeElement.style.width = 0;
|
||||||
|
|
||||||
|
this.lightBoxDiv.nativeElement.style.height = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,8 @@ export class GalleryPhotoComponent{
|
|||||||
getPhotoPath(){
|
getPhotoPath(){
|
||||||
return Utils.concatUrls("/api/gallery",this.directory.path,this.directory.name,this.photo.name,"thumbnail");
|
return Utils.concatUrls("/api/gallery",this.directory.path,this.directory.name,this.photo.name,"thumbnail");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
import {Http, Headers, RequestOptions, Response} from "angular2/http";
|
import {Http, Headers, RequestOptions, Response} from "angular2/http";
|
||||||
import {Message} from "../../../common/entities/Message";
|
import {Message} from "../../../common/entities/Message";
|
||||||
import "rxjs/Rx";
|
import "rxjs/Rx";
|
||||||
|
import {Utils} from "../../../common/Utils";
|
||||||
|
|
||||||
export class NetworkService{
|
export class NetworkService{
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@ module.exports = {
|
|||||||
library: ['peer']
|
library: ['peer']
|
||||||
},
|
},
|
||||||
// Turn on sourcemaps
|
// Turn on sourcemaps
|
||||||
devtool: 'source-map',
|
//devtool: 'source-map',
|
||||||
resolve: {
|
resolve: {
|
||||||
extensions: ['', '.webpack.js', '.web.js', '.ts', '.js'],
|
extensions: ['', '.webpack.js', '.web.js', '.ts', '.js'],
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user