primeng
Version:
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/js/primeng) [ • 10.1 kB
JavaScript
import { ElementRef, Renderer2, ChangeDetectorRef, Input, Component, ChangeDetectionStrategy, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DomHandler } from 'primeng/dom';
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
let Lightbox = class Lightbox {
constructor(el, renderer, cd) {
this.el = el;
this.renderer = renderer;
this.cd = cd;
this.type = 'image';
this.effectDuration = '500ms';
this.autoZIndex = true;
this.baseZIndex = 0;
this.closeOnEscape = true;
}
onImageClick(event, image, i, content) {
this.index = i;
this.loading = true;
content.style.width = 32 + 'px';
content.style.height = 32 + 'px';
this.preventDocumentClickListener = true;
this.show();
this.displayImage(image);
event.preventDefault();
}
ngAfterViewInit() {
this.panel = DomHandler.findSingle(this.el.nativeElement, '.ui-lightbox ');
if (this.appendTo) {
if (this.appendTo === 'body')
document.body.appendChild(this.panel);
else
DomHandler.appendChild(this.panel, this.appendTo);
}
}
onLinkClick(event, content) {
this.preventDocumentClickListener = true;
this.show();
event.preventDefault();
}
displayImage(image) {
setTimeout(() => {
this.cd.markForCheck();
this.currentImage = image;
this.captionText = image.title;
this.center();
}, 1000);
}
show() {
this.mask = document.createElement('div');
DomHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-dialog-mask');
document.body.appendChild(this.mask);
if (this.autoZIndex) {
this.zindex = this.baseZIndex + (++DomHandler.zindex);
}
this.mask.style.zIndex = this.zindex - 1;
this.center();
this.visible = true;
this.bindGlobalListeners();
}
hide(event) {
this.captionText = null;
this.index = null;
this.currentImage = null;
this.visible = false;
if (this.mask) {
document.body.removeChild(this.mask);
this.mask = null;
}
this.unbindGlobalListeners();
event.preventDefault();
}
center() {
let elementWidth = DomHandler.getOuterWidth(this.panel);
let elementHeight = DomHandler.getOuterHeight(this.panel);
if (elementWidth == 0 && elementHeight == 0) {
this.panel.style.visibility = 'hidden';
this.panel.style.display = 'block';
elementWidth = DomHandler.getOuterWidth(this.panel);
elementHeight = DomHandler.getOuterHeight(this.panel);
this.panel.style.display = 'none';
this.panel.style.visibility = 'visible';
}
}
onImageLoad(event, content) {
let image = event.target;
image.style.visibility = 'hidden';
image.style.display = 'block';
let imageWidth = DomHandler.getOuterWidth(image);
let imageHeight = DomHandler.getOuterHeight(image);
image.style.display = 'none';
image.style.visibility = 'visible';
content.style.width = imageWidth + 'px';
content.style.height = imageHeight + 'px';
this.panel.style.left = parseInt(this.panel.style.left) + (DomHandler.getOuterWidth(this.panel) - imageWidth) / 2 + 'px';
this.panel.style.top = parseInt(this.panel.style.top) + (DomHandler.getOuterHeight(this.panel) - imageHeight) / 2 + 'px';
setTimeout(() => {
this.cd.markForCheck();
DomHandler.fadeIn(image, 500);
image.style.display = 'block';
//this.captionText = this.currentImage.title;
this.loading = false;
}, parseInt(this.effectDuration));
}
prev(placeholder) {
this.captionText = null;
this.loading = true;
placeholder.style.display = 'none';
if (this.index > 0) {
this.displayImage(this.images[--this.index]);
}
}
next(placeholder) {
this.captionText = null;
this.loading = true;
placeholder.style.display = 'none';
if (this.index <= (this.images.length - 1)) {
this.displayImage(this.images[++this.index]);
}
}
bindGlobalListeners() {
this.documentClickListener = this.renderer.listen('document', 'click', (event) => {
if (!this.preventDocumentClickListener && this.visible) {
this.hide(event);
}
this.preventDocumentClickListener = false;
this.cd.markForCheck();
});
if (this.closeOnEscape && !this.documentEscapeListener) {
this.documentEscapeListener = this.renderer.listen('document', 'keydown', (event) => {
if (event.which == 27) {
if (parseInt(this.panel.style.zIndex) === (DomHandler.zindex + this.baseZIndex)) {
this.hide(event);
}
}
});
}
}
unbindGlobalListeners() {
if (this.documentEscapeListener) {
this.documentEscapeListener();
this.documentEscapeListener = null;
}
if (this.documentClickListener) {
this.documentClickListener();
this.documentClickListener = null;
}
}
get leftVisible() {
return this.images && this.images.length && this.index != 0 && !this.loading;
}
get rightVisible() {
return this.images && this.images.length && this.index < (this.images.length - 1) && !this.loading;
}
ngOnDestroy() {
this.unbindGlobalListeners();
if (this.appendTo) {
this.el.nativeElement.appendChild(this.panel);
}
}
};
Lightbox.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: ChangeDetectorRef }
];
__decorate([
Input()
], Lightbox.prototype, "images", void 0);
__decorate([
Input()
], Lightbox.prototype, "type", void 0);
__decorate([
Input()
], Lightbox.prototype, "style", void 0);
__decorate([
Input()
], Lightbox.prototype, "styleClass", void 0);
__decorate([
Input()
], Lightbox.prototype, "appendTo", void 0);
__decorate([
Input()
], Lightbox.prototype, "easing", void 0);
__decorate([
Input()
], Lightbox.prototype, "effectDuration", void 0);
__decorate([
Input()
], Lightbox.prototype, "autoZIndex", void 0);
__decorate([
Input()
], Lightbox.prototype, "baseZIndex", void 0);
__decorate([
Input()
], Lightbox.prototype, "closeOnEscape", void 0);
Lightbox = __decorate([
Component({
selector: 'p-lightbox',
template: `
<div [ngStyle]="style" [class]="styleClass" *ngIf="(type == 'image')">
<a *ngFor="let image of images; let i = index;" [href]="image.source" (click)="onImageClick($event,image,i,content)">
<img [src]="image.thumbnail" [title]="image.title" [alt]="image.alt">
</a>
</div>
<span [ngStyle]="style" [class]="styleClass" *ngIf="(type == 'content')" (click)="onLinkClick($event,content)">
<ng-content select="a"></ng-content>
</span>
<div class="ui-lightbox ui-widget ui-corner-all ui-shadow" [style.display]="visible ? 'block' : 'none'" [style.zIndex]="zindex"
[ngClass]="{'ui-lightbox-loading': loading}"
[style.transitionProperty]="'all'" [style.transitionDuration]="effectDuration" [style.transitionTimingFunction]="easing" (click)="preventDocumentClickListener=true">
<div class="ui-lightbox-content-wrapper">
<a class="ui-state-default ui-lightbox-nav-left ui-corner-right" [style.zIndex]="zindex + 1" (click)="prev(img)"
[ngClass]="{'ui-helper-hidden':!leftVisible}"><span class="ui-lightbox-nav-icon pi pi-chevron-left"></span></a>
<div #content class="ui-lightbox-content ui-corner-all"
[style.transitionProperty]="'width,height'" [style.transitionDuration]="effectDuration" [style.transitionTimingFunction]="easing">
<img #img [src]="currentImage ? currentImage.source||'' : ''" (load)="onImageLoad($event,content)" style="display:none">
<ng-content></ng-content>
</div>
<a class="ui-state-default ui-lightbox-nav-right ui-corner-left ui-helper-hidden" [style.zIndex]="zindex + 1" (click)="next(img)"
[ngClass]="{'ui-helper-hidden':!rightVisible}"><span class="ui-lightbox-nav-icon pi pi-chevron-right"></span></a>
</div>
<div class="ui-lightbox-caption ui-widget-header" [style.display]="captionText ? 'block' : 'none'">
<span class="ui-lightbox-caption-text">{{captionText}}</span><a class="ui-lightbox-close ui-corner-all" tabindex="0" (click)="hide($event)" (keydown.enter)="hide($event)"><span class="pi pi-times"></span></a>
<div style="clear:both"></div>
</div>
</div>
`,
changeDetection: ChangeDetectionStrategy.Default
})
], Lightbox);
let LightboxModule = class LightboxModule {
};
LightboxModule = __decorate([
NgModule({
imports: [CommonModule],
exports: [Lightbox],
declarations: [Lightbox]
})
], LightboxModule);
/**
* Generated bundle index. Do not edit.
*/
export { Lightbox, LightboxModule };
//# sourceMappingURL=primeng-lightbox.js.map