UNPKG

@ngx-gallery/core

Version:

Angular gallery directive that hooks the lightbox with the images automatically.

121 lines 8.61 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, Input, Output, EventEmitter, Inject } from '@angular/core'; import { Subject, Subscription, zip, fromEvent } from 'rxjs'; import { tap, switchMap } from 'rxjs/operators'; import { DOCUMENT } from '@angular/common'; var LazyImage = /** @class */ (function () { function LazyImage(document) { var _this = this; this.document = document; this._imageLoader$ = new Subject(); this._loaderSub$ = Subscription.EMPTY; this.loaded = new EventEmitter(); this.error = new EventEmitter(); this._loaderSub$ = this._imageLoader$.pipe(switchMap(function (imageSrc) { return _this.nativeLoader(imageSrc); })).subscribe(); } /** * @param {?} changes * @return {?} */ LazyImage.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes['src'] && changes['src'].previousValue !== changes['src'].currentValue) { this.loadImage(this.src); } }; /** * @return {?} */ LazyImage.prototype.ngOnDestroy = /** * @return {?} */ function () { this._loaderSub$.unsubscribe(); this._imageLoader$.complete(); }; /** * @param {?} imagePath * @return {?} */ LazyImage.prototype.loadImage = /** * @param {?} imagePath * @return {?} */ function (imagePath) { this._imageLoader$.next(imagePath); }; /** * Native image loader, does not emit progress * @param url */ /** * Native image loader, does not emit progress * @param {?} url * @return {?} */ LazyImage.prototype.nativeLoader = /** * Native image loader, does not emit progress * @param {?} url * @return {?} */ function (url) { var _this = this; /** @type {?} */ var img = this.document.createElement('img'); // Stop previously loading img.src = url; // Image load success /** @type {?} */ var loadSuccess = fromEvent(img, 'load').pipe(tap(function () { return _this.loaded.emit(url); })); // Image load failed /** @type {?} */ var loadError = fromEvent(img, 'error').pipe(tap(function () { return _this.error.emit(new Error("[lazyImage]: The image " + url + " did not load")); })); return zip(loadSuccess, loadError); }; LazyImage.decorators = [ { type: Directive, args: [{ selector: '[lazyImage]' },] } ]; /** @nocollapse */ LazyImage.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } ]; }; LazyImage.propDecorators = { src: [{ type: Input, args: ['lazyImage',] }], loaded: [{ type: Output }], error: [{ type: Output }] }; return LazyImage; }()); export { LazyImage }; if (false) { /** * @type {?} * @private */ LazyImage.prototype._imageLoader$; /** * @type {?} * @private */ LazyImage.prototype._loaderSub$; /** @type {?} */ LazyImage.prototype.src; /** @type {?} */ LazyImage.prototype.loaded; /** @type {?} */ LazyImage.prototype.error; /** * @type {?} * @private */ LazyImage.prototype.document; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3gtZ2FsbGVyeS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvbGF6eS1pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUF1QyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxPQUFPLEVBQWMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0M7SUFhRSxtQkFBc0MsUUFBYTtRQUFuRCxpQkFJQztRQUpxQyxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBUjNDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUN0QyxnQkFBVyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFJL0IsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDcEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFHMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDeEMsU0FBUyxDQUFDLFVBQUMsUUFBZ0IsSUFBSyxPQUFBLEtBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQTNCLENBQTJCLENBQUMsQ0FDN0QsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQixDQUFDOzs7OztJQUVELCtCQUFXOzs7O0lBQVgsVUFBWSxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs7O0lBRUQsK0JBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Ozs7O0lBRUQsNkJBQVM7Ozs7SUFBVCxVQUFVLFNBQWlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNILGdDQUFZOzs7OztJQUFaLFVBQWEsR0FBVztRQUF4QixpQkFhQzs7WUFaTyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQzlDLDBCQUEwQjtRQUMxQixHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7O1lBRVIsV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUM3QyxHQUFHLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFyQixDQUFxQixDQUFDLENBQ2pDOzs7WUFFSyxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzVDLEdBQUcsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsNEJBQTBCLEdBQUcsa0JBQWUsQ0FBQyxDQUFDLEVBQXhFLENBQXdFLENBQUMsQ0FDcEY7UUFDRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQzs7Z0JBbkRGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtpQkFDeEI7Ozs7Z0RBV2MsTUFBTSxTQUFDLFFBQVE7OztzQkFMM0IsS0FBSyxTQUFDLFdBQVc7eUJBRWpCLE1BQU07d0JBQ04sTUFBTTs7SUEwQ1QsZ0JBQUM7Q0FBQSxBQXJERCxJQXFEQztTQWxEWSxTQUFTOzs7Ozs7SUFFcEIsa0NBQThDOzs7OztJQUM5QyxnQ0FBeUM7O0lBRXpDLHdCQUFnQzs7SUFFaEMsMkJBQThDOztJQUM5QywwQkFBNEM7Ozs7O0lBRWhDLDZCQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE91dHB1dCwgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIEV2ZW50RW1pdHRlciwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHppcCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2xhenlJbWFnZV0nXG59KVxuZXhwb3J0IGNsYXNzIExhenlJbWFnZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9pbWFnZUxvYWRlciQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2xvYWRlclN1YiQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgQElucHV0KCdsYXp5SW1hZ2UnKSBzcmM6IHN0cmluZztcblxuICBAT3V0cHV0KCkgbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55KSB7XG4gICAgdGhpcy5fbG9hZGVyU3ViJCA9IHRoaXMuX2ltYWdlTG9hZGVyJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChpbWFnZVNyYzogc3RyaW5nKSA9PiB0aGlzLm5hdGl2ZUxvYWRlcihpbWFnZVNyYykpXG4gICAgKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snc3JjJ10gJiYgY2hhbmdlc1snc3JjJ10ucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlc1snc3JjJ10uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmxvYWRJbWFnZSh0aGlzLnNyYyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fbG9hZGVyU3ViJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2ltYWdlTG9hZGVyJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbG9hZEltYWdlKGltYWdlUGF0aDogc3RyaW5nKSB7XG4gICAgdGhpcy5faW1hZ2VMb2FkZXIkLm5leHQoaW1hZ2VQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXRpdmUgaW1hZ2UgbG9hZGVyLCBkb2VzIG5vdCBlbWl0IHByb2dyZXNzXG4gICAqIEBwYXJhbSB1cmxcbiAgICovXG4gIG5hdGl2ZUxvYWRlcih1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaW1nID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAvLyBTdG9wIHByZXZpb3VzbHkgbG9hZGluZ1xuICAgIGltZy5zcmMgPSB1cmw7XG4gICAgLy8gSW1hZ2UgbG9hZCBzdWNjZXNzXG4gICAgY29uc3QgbG9hZFN1Y2Nlc3MgPSBmcm9tRXZlbnQoaW1nLCAnbG9hZCcpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkZWQuZW1pdCh1cmwpKVxuICAgICk7XG4gICAgLy8gSW1hZ2UgbG9hZCBmYWlsZWRcbiAgICBjb25zdCBsb2FkRXJyb3IgPSBmcm9tRXZlbnQoaW1nLCAnZXJyb3InKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMuZXJyb3IuZW1pdChuZXcgRXJyb3IoYFtsYXp5SW1hZ2VdOiBUaGUgaW1hZ2UgJHt1cmx9IGRpZCBub3QgbG9hZGApKSlcbiAgICApO1xuICAgIHJldHVybiB6aXAobG9hZFN1Y2Nlc3MsIGxvYWRFcnJvcik7XG4gIH1cblxufVxuIl19