UNPKG

cocori-ng

Version:

Cocori-ng is an Angular full of great components & utilites based on Material

79 lines 16.9 kB
import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "../../../core/service/image-fullscreen-view.service"; import * as i2 from "@angular/platform-browser"; import * as i3 from "@angular/common"; const youtubeRegExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/, validFileExtensions = ['jpeg', 'jpg', 'gif', 'png'], validVideoExtensions = ['mp4']; export class SliderCustomImageComponent { constructor(imageFullscreenViewService, sanitizer) { this.imageFullscreenViewService = imageFullscreenViewService; this.sanitizer = sanitizer; this.YOUTUBE = 'youtube'; this.IMAGE = 'image'; this.VIDEO = 'video'; this.fileUrl = ''; this.fileExtension = ''; this.type = this.IMAGE; // @inputs this.videoAutoPlay = false; this.showVideoControls = 1; this.isVideo = false; this.alt = ''; this.title = ''; this.direction = 'ltr'; } set imageUrl(url) { if (url && typeof (url) === 'string') { this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url); this.fileExtension = url.replace(/^.*\./, ''); if (this.imageFullscreenViewService.base64FileExtension(url) && (validFileExtensions.indexOf(this.imageFullscreenViewService.base64FileExtension(url).toLowerCase()) > -1 || validVideoExtensions.indexOf(this.imageFullscreenViewService.base64FileExtension(url).toLowerCase()) > -1)) { this.fileExtension = this.imageFullscreenViewService.base64FileExtension(url); } // verify for youtube url const match = url.match(youtubeRegExp); if (match && match[2].length === 11) { this.type = this.YOUTUBE; this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(`${'//www.youtube.com/embed/'}${match[2]}${this.videoAutoPlay ? '?wmode=transparent&autoplay=1&enablejsapi=1' : '?wmode=transparent&autoplay=0&enablejsapi=1'}${'&controls='}${this.showVideoControls}`); } else if (this.fileExtension && validFileExtensions.indexOf(this.fileExtension.toLowerCase()) > -1) { this.type = this.IMAGE; } else if (this.fileExtension && validVideoExtensions.indexOf(this.fileExtension.toLowerCase()) > -1) { this.type = this.VIDEO; } } } videoClickHandler(event) { if (event && event.srcElement && !this.showVideoControls) { if (event.srcElement.paused) { event.srcElement.play(); } else { event.srcElement.pause(); } } } } SliderCustomImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: SliderCustomImageComponent, deps: [{ token: i1.ImageFullscreenViewService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); SliderCustomImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: SliderCustomImageComponent, selector: "custom-img", inputs: { videoAutoPlay: "videoAutoPlay", showVideoControls: "showVideoControls", imageUrl: "imageUrl", isVideo: "isVideo", alt: "alt", title: "title", direction: "direction" }, ngImport: i0, template: "<div *ngIf=\"fileUrl\" class=\"custom-image-main\">\r\n <img class=\"image\"\r\n *ngIf=\"type === IMAGE && fileUrl\"\r\n [src]=\"fileUrl\"\r\n [alt]=\"alt\"\r\n [title]=\"title\">\r\n \r\n <!-- <iframe\r\n *ngIf=\"type === YOUTUBE && fileUrl\"\r\n src=\"http://player.vimeo.com/video/67124108?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff&amp;wmode=transparent\">\r\n </iframe> -->\r\n \r\n <iframe class=\"youtube\"\r\n *ngIf=\"type === YOUTUBE && fileUrl\"\r\n [src]=\"fileUrl\"\r\n frameborder=\"0\"\r\n wmode=\"opaque\"\r\n allowfullscreen></iframe>\r\n <video class=\"video\"\r\n (click)=\"videoClickHandler($event)\"\r\n [autoplay]=\"videoAutoPlay\"\r\n *ngIf=\"type === VIDEO\"\r\n type=\"video/mp4\"\r\n [attr.controls]=\"showVideoControls ? showVideoControls : null\"\r\n controlsList=\"nodownload\">\r\n <source [src]=\"fileUrl\" type=\"video/mp4\">\r\n Your browser does not support the video tag.\r\n </video>\r\n <div [dir]=\"direction\" *ngIf=\"!fileUrl\" class=\"invalid-msg\">Invalid file format</div>\r\n <span *ngIf=\"type === YOUTUBE || type === VIDEO || isVideo\" class=\"youtube-icon\"></span>\r\n</div>", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: SliderCustomImageComponent, decorators: [{ type: Component, args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'custom-img', template: "<div *ngIf=\"fileUrl\" class=\"custom-image-main\">\r\n <img class=\"image\"\r\n *ngIf=\"type === IMAGE && fileUrl\"\r\n [src]=\"fileUrl\"\r\n [alt]=\"alt\"\r\n [title]=\"title\">\r\n \r\n <!-- <iframe\r\n *ngIf=\"type === YOUTUBE && fileUrl\"\r\n src=\"http://player.vimeo.com/video/67124108?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff&amp;wmode=transparent\">\r\n </iframe> -->\r\n \r\n <iframe class=\"youtube\"\r\n *ngIf=\"type === YOUTUBE && fileUrl\"\r\n [src]=\"fileUrl\"\r\n frameborder=\"0\"\r\n wmode=\"opaque\"\r\n allowfullscreen></iframe>\r\n <video class=\"video\"\r\n (click)=\"videoClickHandler($event)\"\r\n [autoplay]=\"videoAutoPlay\"\r\n *ngIf=\"type === VIDEO\"\r\n type=\"video/mp4\"\r\n [attr.controls]=\"showVideoControls ? showVideoControls : null\"\r\n controlsList=\"nodownload\">\r\n <source [src]=\"fileUrl\" type=\"video/mp4\">\r\n Your browser does not support the video tag.\r\n </video>\r\n <div [dir]=\"direction\" *ngIf=\"!fileUrl\" class=\"invalid-msg\">Invalid file format</div>\r\n <span *ngIf=\"type === YOUTUBE || type === VIDEO || isVideo\" class=\"youtube-icon\"></span>\r\n</div>" }] }], ctorParameters: function () { return [{ type: i1.ImageFullscreenViewService }, { type: i2.DomSanitizer }]; }, propDecorators: { videoAutoPlay: [{ type: Input }], showVideoControls: [{ type: Input }], imageUrl: [{ type: Input }], isVideo: [{ type: Input }], alt: [{ type: Input }], title: [{ type: Input }], direction: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWN1c3RvbS1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Nvcmktbmcvc3JjL2ZlYXR1cmUtZ2FsbGVyeS9zaGFyZWQvZnVsbHNjcmVlbi12aWV3ZXIvc2xpZGVyLWN1c3RvbS1pbWFnZS9zbGlkZXItY3VzdG9tLWltYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvY29yaS1uZy9zcmMvZmVhdHVyZS1nYWxsZXJ5L3NoYXJlZC9mdWxsc2NyZWVuLXZpZXdlci9zbGlkZXItY3VzdG9tLWltYWdlL3NsaWRlci1jdXN0b20taW1hZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBSzFFLE1BQU0sYUFBYSxHQUFHLHNFQUFzRSxFQUN4RixtQkFBbUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUNuRCxvQkFBb0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBT25DLE1BQU0sT0FBTywwQkFBMEI7SUFzQ25DLFlBQW1CLDBCQUFzRCxFQUFVLFNBQXVCO1FBQXZGLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBckMxRyxZQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3BCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsVUFBSyxHQUFHLE9BQU8sQ0FBQztRQUNoQixZQUFPLEdBQW9CLEVBQUUsQ0FBQztRQUM5QixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixTQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVsQixVQUFVO1FBQ0Qsa0JBQWEsR0FBWSxLQUFL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QXVCLENBQUMsTUFBTSxZQUNyQyxZQUFZOzRJQVliLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVGLFFBQVE7c0JBRFgsS0FBSztnQkFzQkcsT0FBTztzQkFBZixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5pbXBvcnQgeyBJbWFnZUZ1bGxzY3JlZW5WaWV3U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9pbWFnZS1mdWxsc2NyZWVuLXZpZXcuc2VydmljZSc7XHJcblxyXG5jb25zdCB5b3V0dWJlUmVnRXhwID0gL14uKih5b3V0dS5iZVxcL3x2XFwvfHVcXC9cXHdcXC98ZW1iZWRcXC98d2F0Y2hcXD92PXxcXCZ2PXxcXD92PSkoW14jXFwmXFw/XSopLiovLFxyXG4gICAgdmFsaWRGaWxlRXh0ZW5zaW9ucyA9IFsnanBlZycsICdqcGcnLCAnZ2lmJywgJ3BuZyddLFxyXG4gICAgdmFsaWRWaWRlb0V4dGVuc2lvbnMgPSBbJ21wNCddO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHNlbGVjdG9yOiAnY3VzdG9tLWltZycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLWN1c3RvbS1pbWFnZS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNsaWRlckN1c3RvbUltYWdlQ29tcG9uZW50IHtcclxuICAgIFlPVVRVQkUgPSAneW91dHViZSc7XHJcbiAgICBJTUFHRSA9ICdpbWFnZSc7XHJcbiAgICBWSURFTyA9ICd2aWRlbyc7XHJcbiAgICBmaWxlVXJsOiBTYWZlUmVzb3VyY2VVcmwgPSAnJztcclxuICAgIGZpbGVFeHRlbnNpb24gPSAnJztcclxuICAgIHR5cGUgPSB0aGlzLklNQUdFO1xyXG5cclxuICAgIC8vIEBpbnB1dHNcclxuICAgIEBJbnB1dCgpIHZpZGVvQXV0b1BsYXk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNob3dWaWRlb0NvbnRyb2xzOiBudW1iZXIgPSAxO1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCBpbWFnZVVybCh1cmwpIHtcclxuICAgICAgICBpZiAodXJsICYmIHR5cGVvZiAodXJsKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUV4dGVuc2lvbiA9IHVybC5yZXBsYWNlKC9eLipcXC4vLCAnJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRnVsbHNjcmVlblZpZXdTZXJ2aWNlLmJhc2U2NEZpbGVFeHRlbnNpb24odXJsKVxyXG4gICAgICAgICAgICAmJiAodmFsaWRGaWxlRXh0ZW5zaW9ucy5pbmRleE9mKHRoaXMuaW1hZ2VGdWxsc2NyZWVuVmlld1NlcnZpY2UuYmFzZTY0RmlsZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCkpID4gLTEgXHJcbiAgICAgICAgICAgIHx8IHZhbGlkVmlkZW9FeHRlbnNpb25zLmluZGV4T2YodGhpcy5pbWFnZUZ1bGxzY3JlZW5WaWV3U2VydmljZS5iYXNlNjRGaWxlRXh0ZW5zaW9uKHVybCkudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUV4dGVuc2lvbiA9IHRoaXMuaW1hZ2VGdWxsc2NyZWVuVmlld1NlcnZpY2UuYmFzZTY0RmlsZUV4dGVuc2lvbih1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHZlcmlmeSBmb3IgeW91dHViZSB1cmxcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2goeW91dHViZVJlZ0V4cCk7XHJcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsyXS5sZW5ndGggPT09IDExKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSB0aGlzLllPVVRVQkU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoYCR7Jy8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyd9JHttYXRjaFsyXX0ke3RoaXMudmlkZW9BdXRvUGxheSA/ICc/d21vZGU9dHJhbnNwYXJlbnQmYXV0b3BsYXk9MSZlbmFibGVqc2FwaT0xJyA6ICc/d21vZGU9dHJhbnNwYXJlbnQmYXV0b3BsYXk9MCZlbmFibGVqc2FwaT0xJ30keycmY29udHJvbHM9J30ke3RoaXMuc2hvd1ZpZGVvQ29udHJvbHN9YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWxlRXh0ZW5zaW9uICYmIHZhbGlkRmlsZUV4dGVuc2lvbnMuaW5kZXhPZih0aGlzLmZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlID0gdGhpcy5JTUFHRTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbGVFeHRlbnNpb24gJiYgdmFsaWRWaWRlb0V4dGVuc2lvbnMuaW5kZXhPZih0aGlzLmZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlID0gdGhpcy5WSURFTztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIGlzVmlkZW8gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGFsdDogU3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSB0aXRsZTogU3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBkaXJlY3Rpb246IHN0cmluZyA9ICdsdHInO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpbWFnZUZ1bGxzY3JlZW5WaWV3U2VydmljZTogSW1hZ2VGdWxsc2NyZWVuVmlld1NlcnZpY2UsIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICB2aWRlb0NsaWNrSGFuZGxlcihldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC5zcmNFbGVtZW50ICYmICF0aGlzLnNob3dWaWRlb0NvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5zcmNFbGVtZW50LnBhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3JjRWxlbWVudC5wbGF5KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zcmNFbGVtZW50LnBhdXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImZpbGVVcmxcIiBjbGFzcz1cImN1c3RvbS1pbWFnZS1tYWluXCI+XHJcbiAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIlxyXG4gICAgICAgICpuZ0lmPVwidHlwZSA9PT0gSU1BR0UgJiYgZmlsZVVybFwiXHJcbiAgICAgICAgW3NyY109XCJmaWxlVXJsXCJcclxuICAgICAgICBbYWx0XT1cImFsdFwiXHJcbiAgICAgICAgW3RpdGxlXT1cInRpdGxlXCI+XHJcbiAgICBcclxuICAgIDwhLS0gPGlmcmFtZVxyXG4gICAgICAgICpuZ0lmPVwidHlwZSA9PT0gWU9VVFVCRSAmJiBmaWxlVXJsXCJcclxuICAgICAgICBzcmM9XCJodHRwOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby82NzEyNDEwOD90aXRsZT0wJmFtcDtieWxpbmU9MCZhbXA7cG9ydHJhaXQ9MCZhbXA7Y29sb3I9ZmZmZmZmJmFtcDt3bW9kZT10cmFuc3BhcmVudFwiPlxyXG4gICAgPC9pZnJhbWU+IC0tPlxyXG4gICAgXHJcbiAgICA8aWZyYW1lIGNsYXNzPVwieW91dHViZVwiXHJcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSBZT1VUVUJFICYmIGZpbGVVcmxcIlxyXG4gICAgICAgIFtzcmNdPVwiZmlsZVVybFwiXHJcbiAgICAgICAgZnJhbWVib3JkZXI9XCIwXCJcclxuICAgICAgICB3bW9kZT1cIm9wYXF1ZVwiXHJcbiAgICAgICAgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPlxyXG4gICAgPHZpZGVvIGNsYXNzPVwidmlkZW9cIlxyXG4gICAgICAgIChjbGljayk9XCJ2aWRlb0NsaWNrSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICBbYXV0b3BsYXldPVwidmlkZW9BdXRvUGxheVwiXHJcbiAgICAgICAgKm5nSWY9XCJ0eXBlID09PSBWSURFT1wiXHJcbiAgICAgICAgdHlwZT1cInZpZGVvL21wNFwiXHJcbiAgICAgICAgW2F0dHIuY29udHJvbHNdPVwic2hvd1ZpZGVvQ29udHJvbHMgPyBzaG93VmlkZW9Db250cm9scyA6IG51bGxcIlxyXG4gICAgICAgIGNvbnRyb2xzTGlzdD1cIm5vZG93bmxvYWRcIj5cclxuICAgICAgICA8c291cmNlIFtzcmNdPVwiZmlsZVVybFwiIHR5cGU9XCJ2aWRlby9tcDRcIj5cclxuICAgICAgICBZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFnLlxyXG4gICAgPC92aWRlbz5cclxuICAgIDxkaXYgW2Rpcl09XCJkaXJlY3Rpb25cIiAqbmdJZj1cIiFmaWxlVXJsXCIgY2xhc3M9XCJpbnZhbGlkLW1zZ1wiPkludmFsaWQgZmlsZSBmb3JtYXQ8L2Rpdj5cclxuICAgIDxzcGFuICpuZ0lmPVwidHlwZSA9PT0gWU9VVFVCRSB8fCB0eXBlID09PSBWSURFTyB8fCBpc1ZpZGVvXCIgY2xhc3M9XCJ5b3V0dWJlLWljb25cIj48L3NwYW4+XHJcbjwvZGl2PiJdfQ==