UNPKG

ngx-crystal-gallery

Version:

Responsive gallery with support for masonry layout and lightbox.

214 lines (213 loc) 16.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Directive, ElementRef, HostListener, Input, Output, EventEmitter } from '@angular/core'; var PinchDirective = /** @class */ (function () { function PinchDirective(elementRef) { this.elementRef = elementRef; this.scale = 1; this.initialScale = 1; this.moveX = 0; this.moveY = 0; this.initialMoveX = 0; this.initialMoveY = 0; this.isNextImageLoaded = true; this.events = new EventEmitter(); this.elem = this.elementRef.nativeElement; } /** * @param {?} event * @return {?} */ PinchDirective.prototype.touchstartHandler = /** * @param {?} event * @return {?} */ function (event) { this.elem.style.transformOrigin = '0 0'; }; /** * @param {?} event * @return {?} */ PinchDirective.prototype.touchmoveHandler = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var touches = event.touches; if (touches.length === 1 && this.scale === 1 && !this.eventType || this.eventType == 'swipe') { event.preventDefault(); if (!this.isNextImageLoaded) { return; } if (!this.eventType) { this.startX = event.touches[0].pageX; this.startY = event.touches[0].pageY; } this.eventType = 'swipe'; this.moveX = this.initialMoveX + (event.touches[0].pageX - this.startX); this.moveY = 0; this.transformElem(0); } }; /** * @param {?} event * @return {?} */ PinchDirective.prototype.touchendHandler = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var touches = event.touches; /** @type {?} */ var img = this.elem.getElementsByTagName("img")[0]; if (!this.isNextImageLoaded) { return; } if (this.scale < 1) { this.scale = 1; } if (this.moveY > 0) { this.moveY = 0; } if (this.moveX > 100) { this.slide('prev'); } else if (this.moveX < -100) { this.slide('next'); } else { this.moveX = 0; } this.initialScale = this.scale; this.initialMoveX = this.moveX; this.initialMoveY = this.moveY; this.transformElem(200); this.eventType = 'touchend'; if (touches.length == 0) { this.eventType = ''; } }; /** * @param {?} event * @return {?} */ PinchDirective.prototype.slide = /** * @param {?} event * @return {?} */ function (event) { var _this = this; this.onSlide(event); if (event === 'prev') { this.moveX = window.innerWidth + 8; if (this.isFirst) { this.moveX = 0; } } if (event === 'next') { this.moveX = -window.innerWidth - 8; if (this.isLast) { this.moveX = 0; } } this.isNextImageLoaded = false; setTimeout(function () { _this.moveX = 0; _this.initialMoveX = 0; _this.isNextImageLoaded = true; }, 200); }; /** * @param {?} evenType * @return {?} */ PinchDirective.prototype.onSlide = /** * @param {?} evenType * @return {?} */ function (evenType) { this.events.emit(evenType); }; /** * @param {?=} duration * @return {?} */ PinchDirective.prototype.transformElem = /** * @param {?=} duration * @return {?} */ function (duration) { if (duration === void 0) { duration = 50; } /** @type {?} */ var matrixVal = 'matrix(' + Number(this.scale) + ',' + 0 + ',' + 0 + ',' + Number(this.scale) + ',' + Number(this.moveX) + ',' + Number(this.moveY) + ')'; this.elem.style.transition = 'all ' + duration + 'ms'; this.elem.style.transform = matrixVal; this.elem.style.webkitTransform = matrixVal; }; PinchDirective.decorators = [ { type: Directive, args: [{ selector: '[pinch]' },] }, ]; /** @nocollapse */ PinchDirective.ctorParameters = function () { return [ { type: ElementRef } ]; }; PinchDirective.propDecorators = { isLast: [{ type: Input }], isFirst: [{ type: Input }], events: [{ type: Output }], touchstartHandler: [{ type: HostListener, args: ['touchstart', ['$event'],] }], touchmoveHandler: [{ type: HostListener, args: ['touchmove', ['$event'],] }], touchendHandler: [{ type: HostListener, args: ['touchend', ['$event'],] }] }; return PinchDirective; }()); export { PinchDirective }; if (false) { /** @type {?} */ PinchDirective.prototype.elem; /** @type {?} */ PinchDirective.prototype.eventType; /** @type {?} */ PinchDirective.prototype.scale; /** @type {?} */ PinchDirective.prototype.initialScale; /** @type {?} */ PinchDirective.prototype.startX; /** @type {?} */ PinchDirective.prototype.startY; /** @type {?} */ PinchDirective.prototype.moveX; /** @type {?} */ PinchDirective.prototype.moveY; /** @type {?} */ PinchDirective.prototype.initialMoveX; /** @type {?} */ PinchDirective.prototype.initialMoveY; /** @type {?} */ PinchDirective.prototype.moveXC; /** @type {?} */ PinchDirective.prototype.moveYC; /** @type {?} */ PinchDirective.prototype.distance; /** @type {?} */ PinchDirective.prototype.initialDistance; /** @type {?} */ PinchDirective.prototype.isNextImageLoaded; /** @type {?} */ PinchDirective.prototype.isLast; /** @type {?} */ PinchDirective.prototype.isFirst; /** @type {?} */ PinchDirective.prototype.events; /** @type {?} */ PinchDirective.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluY2guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNyeXN0YWwtZ2FsbGVyeS8iLCJzb3VyY2VzIjpbImxpYi9waW5jaC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7SUFtQzdGLHdCQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO3FCQXhCN0IsQ0FBQzs0QkFDTSxDQUFDO3FCQUtSLENBQUM7cUJBQ0QsQ0FBQzs0QkFDTSxDQUFDOzRCQUNELENBQUM7aUNBUUksSUFBSTtzQkFLVixJQUFJLFlBQVksRUFBVztRQUcxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0tBQzdDOzs7OztJQUdELDBDQUFpQjs7OztJQURqQixVQUNrQixLQUFLO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7S0FDM0M7Ozs7O0lBR0QseUNBQWdCOzs7O0lBRGhCLFVBQ2lCLEtBQUs7O1FBQ2xCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUEsQ0FBQztZQUMxRixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLENBQUM7YUFDVjtZQUVELEVBQUUsQ0FBQyxDQUFDLENB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Q0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0tBQy9DOztnQkExSUosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxTQUFTO2lCQUN0Qjs7OztnQkFKbUIsVUFBVTs7O3lCQThCekIsS0FBSzswQkFDTCxLQUFLO3lCQUVMLE1BQU07b0NBTU4sWUFBWSxTQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQzttQ0FLckMsWUFBWSxTQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztrQ0F5QnBDLFlBQVksU0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3lCQXJFeEM7O1NBTWEsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcGluY2hdJ1xufSlcblxuZXhwb3J0IGNsYXNzIFBpbmNoRGlyZWN0aXZle1xuXG4gICAgZWxlbTogYW55O1xuICAgIGV2ZW50VHlwZTogYW55O1xuXG4gICAgc2NhbGU6IGFueSA9IDE7XG4gICAgaW5pdGlhbFNjYWxlOiBhbnkgPSAxO1xuXG4gICAgc3RhcnRYOiBhbnk7XG4gICAgc3RhcnRZOiBhbnk7XG5cbiAgICBtb3ZlWDogYW55ID0gMDtcbiAgICBtb3ZlWTogYW55ID0gMDtcbiAgICBpbml0aWFsTW92ZVg6IGFueSA9IDA7XG4gICAgaW5pdGlhbE1vdmVZOiBhbnkgPSAwO1xuXG4gICAgbW92ZVhDOiBhbnk7XG4gICAgbW92ZVlDOiBhbnk7XG5cbiAgICBkaXN0YW5jZTogYW55O1xuICAgIGluaXRpYWxEaXN0YW5jZTogYW55O1xuXG4gICAgaXNOZXh0SW1hZ2VMb2FkZWQ6IGFueSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBpc0xhc3Q6IGFueTtcbiAgICBASW5wdXQoKSBpc0ZpcnN0OiBhbnk7XG5cbiAgICBAT3V0cHV0KCkgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgICBcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpe1xuICAgICAgICB0aGlzLmVsZW0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgICB0b3VjaHN0YXJ0SGFuZGxlcihldmVudCkge1xuICAgICAgICB0aGlzLmVsZW0uc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJzAgMCc7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigndG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgICB0b3VjaG1vdmVIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIGxldCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcblxuICAgICAgICBpZiAodG91Y2hlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5zY2FsZSA9PT0gMSAmJiAhdGhpcy5ldmVudFR5cGUgfHwgdGhpcy5ldmVudFR5cGUgPT0gJ3N3aXBlJyl7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNOZXh0SW1hZ2VMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudFR5cGUpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQudG91Y2hlc1swXS5wYWdlWDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXZlbnRUeXBlID0gJ3N3aXBlJztcblxuICAgICAgICAgICAgdGhpcy5tb3ZlWCA9IHRoaXMuaW5pdGlhbE1vdmVYICsgKGV2ZW50LnRvdWNoZXNbMF0ucGFnZVggLSB0aGlzLnN0YXJ0WCk7XG4gICAgICAgICAgICB0aGlzLm1vdmVZID0gMDtcblxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1FbGVtKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICAgIHRvdWNoZW5kSGFuZGxlcihldmVudCkge1xuICAgICAgICBsZXQgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG4gICAgICAgIGxldCBpbWcgPSB0aGlzLmVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbWdcIilbMF07XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTmV4dEltYWdlTG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLnNjYWxlIDwgMSl7XG4gICAgICAgICAgICB0aGlzLnNjYWxlID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlWSA+IDApe1xuICAgICAgICAgICAgdGhpcy5tb3ZlWSA9IDA7XG4gICAgICAgIH0gXG5cbiAgICAgICAgaWYgKHRoaXMubW92ZVggPiAxMDApe1xuICAgICAgICAgICAgdGhpcy5zbGlkZSgncHJldicpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW92ZVggPCAtMTAwKXtcbiAgICAgICAgICAgIHRoaXMuc2xpZGUoJ25leHQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0aWFsU2NhbGUgPSB0aGlzLnNjYWxlO1xuICAgICAgICB0aGlzLmluaXRpYWxNb3ZlWCA9IHRoaXMubW92ZVg7XG4gICAgICAgIHRoaXMuaW5pdGlhbE1vdmVZID0gdGhpcy5tb3ZlWTtcblxuICAgICAgICB0aGlzLnRyYW5zZm9ybUVsZW0oMjAwKTsgXG5cbiAgICAgICAgdGhpcy5ldmVudFR5cGUgPSAndG91Y2hlbmQnOyAgICAgICAgXG4gICAgICAgIGlmICh0b3VjaGVzLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRUeXBlID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzbGlkZShldmVudDogYW55KXtcbiAgICAgICAgdGhpcy5vblNsaWRlKGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQgPT09ICdwcmV2Jyl7XG4gICAgICAgICAgICB0aGlzLm1vdmVYID0gd2luZG93LmlubmVyV2lkdGggKyA4OyBcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3Qpe1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudCA9PT0gJ25leHQnKXtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAtd2luZG93LmlubmVyV2lkdGggLSA4O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMYXN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVYID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNOZXh0SW1hZ2VMb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsTW92ZVggPSAwO1xuICAgICAgICAgICAgdGhpcy5pc05leHRJbWFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgfVxuXG4gICAgb25TbGlkZShldmVuVHlwZTphbnkpIHtcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChldmVuVHlwZSk7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtRWxlbShkdXJhdGlvbjogYW55ID0gNTApe1xuICAgICAgICBsZXQgbWF0cml4VmFsID0gJ21hdHJpeCgnKyBOdW1iZXIodGhpcy5zY2FsZSkgKycsJysgMCArJywnKyAwICsnLCcrIE51bWJlcih0aGlzLnNjYWxlKSArJywnKyBOdW1iZXIodGhpcy5tb3ZlWCkgKycsJysgTnVtYmVyKHRoaXMubW92ZVkpICsnKSc7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmVsZW0uc3R5bGUudHJhbnNpdGlvbiA9ICdhbGwgJysgZHVyYXRpb24gKydtcyc7XG4gICAgICAgIHRoaXMuZWxlbS5zdHlsZS50cmFuc2Zvcm0gPSBtYXRyaXhWYWw7XG4gICAgICAgIHRoaXMuZWxlbS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBtYXRyaXhWYWw7XG4gICAgfVxufSJdfQ==