ngbox
Version:
ngBox is the first angular 2 module used to overlay images, videos and iframes on the current page.
116 lines (104 loc) • 4.11 kB
text/typescript
import { Directive, AfterViewInit, HostListener, Input, OnDestroy } from '@angular/core';
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
import { NgBoxService } from './ngbox.service';
export class NgBoxDirective implements AfterViewInit, OnDestroy {
id: number;
data: {};
src: any;
href: any;
title: string;
width: string;
height: string;
group: string;
cache: boolean;
image: boolean;
constructor(
public ngBox: NgBoxService,
public sanitizer: DomSanitizer
) {
}
ngOnDestroy() {
let pos = this.ngBox.images.map(function(e) { return e.id; }).indexOf(this.id);
this.ngBox.images.splice(pos, 1);
}
ngAfterViewInit() {
this.ngBox.id = this.id = this.ngBox.id + 1;
this.src = this.src ? this.src : this.href;
this.data = this.getData(this.src);
this.ngBox.images.push( this.data );
}
onClick($event) {
$event.preventDefault();
this.ngBox.loading = true;
this.ngBox.current = this.data;
this.ngBox.open = true;
}
getData(url: string): SafeResourceUrl | boolean {
if (url !== undefined || url !== '') {
// Youtube
let regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/;
let match = url.match(regExp);
if (match && match[2].length === 11) {
return {
id: this.id,
url: this.sanitizer.bypassSecurityTrustResourceUrl('https://www.youtube.com/embed/' + match[2] + '?autoplay=0'),
type: 2,
title: this.title,
width: this.width ? this.width : 640,
height: this.height ? this.height : 380,
group: this.group
};
}
// Vimeo
regExp = /^.*(vimeo\.com\/)((channels\/[A-z]+\/)|(groups\/[A-z]+\/videos\/))?([0-9]+)/;
match = url.match(regExp);
if (match && match[5].length === 8) {
return {
id: this.id,
url: this.sanitizer.bypassSecurityTrustResourceUrl('https://player.vimeo.com/video/' + match[5]),
type: 3,
title: this.title,
width: this.width ? this.width : 640,
height: this.height ? this.height : 380,
group: this.group
};
}
if (!url.match(/\.(png|jpg|jpeg|gif|JPG|PNG|JPEG|GIF)$/) && this.image !== true) {
return {
id: this.id,
url: this.sanitizer.bypassSecurityTrustResourceUrl(url),
type: 4,
title: this.title,
width: this.width ? this.width : 1000,
height: this.height ? this.height : 480,
group: this.group
};
}
/* if (url.search('photoshooter') >= 0 || url.search('news247') >= 0) {
return {
id: this.id,
url: this.sanitizer.bypassSecurityTrustResourceUrl(url),
type: 4,
title: this.title,
width: this.width ? this.width : 1000,
height: this.height ? this.height : 480,
group: this.group
};
}*/
if (this.cache) { (new Image()).src = url; }
return {
id: this.id,
url: url,
type: 1,
title: this.title,
width: this.width,
height: this.height,
group: this.group
};
}
}
}