cocori-ng
Version:
Cocori-ng is an Angular full of great components & utilites based on Material
79 lines • 16.9 kB
JavaScript
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&byline=0&portrait=0&color=ffffff&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&byline=0&portrait=0&color=ffffff&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==