ng-cloudimage-responsive
Advanced tools
Comparing version 0.0.4 to 1.0.0
@@ -7,2 +7,58 @@ (function (global, factory) { | ||
/*! ***************************************************************************** | ||
Copyright (c) Microsoft Corporation. All rights reserved. | ||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use | ||
this file except in compliance with the License. You may obtain a copy of the | ||
License at http://www.apache.org/licenses/LICENSE-2.0 | ||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED | ||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, | ||
MERCHANTABLITY OR NON-INFRINGEMENT. | ||
See the Apache Version 2.0 License for specific language governing permissions | ||
and limitations under the License. | ||
***************************************************************************** */ | ||
var __assign = function () { | ||
__assign = Object.assign || function __assign(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) | ||
if (Object.prototype.hasOwnProperty.call(s, p)) | ||
t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
function __read(o, n) { | ||
var m = typeof Symbol === "function" && o[Symbol.iterator]; | ||
if (!m) | ||
return o; | ||
var i = m.call(o), r, ar = [], e; | ||
try { | ||
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) | ||
ar.push(r.value); | ||
} | ||
catch (error) { | ||
e = { error: error }; | ||
} | ||
finally { | ||
try { | ||
if (r && !r.done && (m = i["return"])) | ||
m.call(i); | ||
} | ||
finally { | ||
if (e) | ||
throw e.error; | ||
} | ||
} | ||
return ar; | ||
} | ||
function __spread() { | ||
for (var ar = [], i = 0; i < arguments.length; i++) | ||
ar = ar.concat(__read(arguments[i])); | ||
return ar; | ||
} | ||
/** | ||
@@ -39,15 +95,14 @@ * @fileoverview added by tsickle | ||
baseUrl: baseUrl, | ||
presets: presets ? this.getPresets(presets, 'presets') : | ||
presets: presets ? presets : | ||
{ | ||
xs: 575, | ||
// up to 576 PHONE | ||
sm: 767, | ||
// 577 - 768 PHABLET | ||
md: 991, | ||
// 769 - 992 TABLET | ||
lg: 1199, | ||
// 993 - 1200 SMALL_LAPTOP_SCREEN | ||
xl: 3000 // from 1200 USUALSCREEN | ||
xs: '(max-width: 575px)', | ||
// to 575 PHONE | ||
sm: '(min-width: 576px)', | ||
// 576 - 767 PHABLET | ||
md: '(min-width: 768px)', | ||
// 768 - 991 TABLET | ||
lg: '(min-width: 992px)', | ||
// 992 - 1199 SMALL_LAPTOP_SCREEN | ||
xl: '(min-width: 1200px)' // from 1200 USUALSCREEN | ||
}, | ||
order: presets ? this.getPresets(presets, 'order') : ['xl', 'lg', 'md', 'sm', 'xs'], | ||
queryString: queryString, | ||
@@ -58,34 +113,2 @@ innerWidth: window.innerWidth, | ||
/** | ||
* @param {?=} value | ||
* @param {?=} type | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getPresets = /** | ||
* @param {?=} value | ||
* @param {?=} type | ||
* @return {?} | ||
*/ | ||
function (value, type) { | ||
if (value === void 0) { | ||
value = ''; | ||
} | ||
/** @type {?} */ | ||
var splittedValues = value.split('|'); | ||
/** @type {?} */ | ||
var result = { presets: {}, order: [] }; | ||
for (var i = 0; i < splittedValues.length; i++) { | ||
/** @type {?} */ | ||
var splittedParam = splittedValues[i] && splittedValues[i].split(':'); | ||
/** @type {?} */ | ||
var prop = splittedParam[0] && splittedParam[0].trim(); | ||
/** @type {?} */ | ||
var val = splittedParam[1] && splittedParam[1].trim(); | ||
if (prop && val) { | ||
result.presets[prop] = val; | ||
result.order.unshift(prop); | ||
} | ||
} | ||
return result[type]; | ||
}; | ||
/** | ||
* @param {?} img | ||
@@ -137,3 +160,7 @@ * @param {?} config | ||
} while (parentNode && !width); | ||
return width; | ||
/** @type {?} */ | ||
var letPadding = width && parentNode && parseInt(window.getComputedStyle(parentNode).paddingLeft, 10); | ||
/** @type {?} */ | ||
var rightPadding = parseInt(window.getComputedStyle(parentNode).paddingRight, 10); | ||
return width + (width ? (-letPadding - rightPadding) : 0); | ||
}; | ||
@@ -149,26 +176,9 @@ /** | ||
function (currentSize) { | ||
return currentSize <= 25 ? '25' : | ||
currentSize <= 50 ? '50' : | ||
currentSize <= 100 ? '100' | ||
: currentSize <= 200 ? '200' | ||
: currentSize <= 300 ? '300' | ||
: currentSize <= 400 ? '400' | ||
: currentSize <= 500 ? '500' | ||
: currentSize <= 600 ? '600' | ||
: currentSize <= 700 ? '700' | ||
: currentSize <= 800 ? '800' | ||
: currentSize <= 900 ? '900' | ||
: currentSize <= 1000 ? '1000' | ||
: currentSize <= 1100 ? '1100' | ||
: currentSize <= 1200 ? '1200' | ||
: currentSize <= 1300 ? '1300' | ||
: currentSize <= 1400 ? '1400' | ||
: currentSize <= 1500 ? '1500' | ||
: currentSize <= 1600 ? '1600' | ||
: currentSize <= 1700 ? '1700' | ||
: currentSize <= 1800 ? '1800' | ||
: currentSize <= 1900 ? '1900' | ||
: currentSize <= 2400 ? '2400' | ||
: currentSize <= 2800 ? '2800' | ||
: '3600'; | ||
if (currentSize <= 25) { | ||
return '25'; | ||
} | ||
if (currentSize <= 50) { | ||
return '50'; | ||
} | ||
return (Math.ceil(currentSize / 100) * 100).toString(); | ||
}; | ||
@@ -184,3 +194,10 @@ /** | ||
function (size) { | ||
return size && typeof size === 'object'; | ||
try { | ||
/** @type {?} */ | ||
var array = size.split(','); | ||
return array.length > 1; | ||
} | ||
catch (e) { | ||
return false; | ||
} | ||
}; | ||
@@ -288,34 +305,22 @@ /** | ||
function (operation, size, filters, imgSrc, isAdaptive, config, isPreview) { | ||
var _this = this; | ||
/** @type {?} */ | ||
var sources = []; | ||
if (isAdaptive) { | ||
/** @type {?} */ | ||
var orderFiltered = []; | ||
for (var i = 0; i < config.order.length; i++) { | ||
/** @type {?} */ | ||
var nextSize = size[config.order[i]]; | ||
if (nextSize) { | ||
orderFiltered.unshift(config.order[i]); | ||
} | ||
} | ||
for (var i = 0; i < orderFiltered.length; i++) { | ||
/** @type {?} */ | ||
var isLast = !(i < orderFiltered.length - 1); | ||
/** @type {?} */ | ||
var nextSizeType = isLast ? orderFiltered[i - 1] : orderFiltered[i]; | ||
/** @type {?} */ | ||
var nextSize = size[orderFiltered[i]]; | ||
size.forEach(function (_a) { | ||
var nextSize = _a.size, mediaQuery = _a.media; | ||
if (isPreview) { | ||
nextSize = nextSize.split('x').map(function (item) { return item / 5; }).join('x'); | ||
nextSize = nextSize.split('x').map(function (sizeNext) { return sizeNext / 5; }).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
/** @type {?} */ | ||
var srcSet = this.generateSrcset(operation, nextSize, filters, imgSrc, config); | ||
/** @type {?} */ | ||
var mediaQuery = '(' + (isLast ? 'min' : 'max') + '-width: ' + (config.presets[nextSizeType] + (isLast ? 1 : 0)) + 'px)'; | ||
sources.push({ mediaQuery: mediaQuery, srcSet: srcSet }); | ||
} | ||
sources.push({ mediaQuery: mediaQuery, srcSet: _this.generateSrcset(operation, nextSize, filters, imgSrc, config) }); | ||
}); | ||
} | ||
else { | ||
if (isPreview) { | ||
size = size.split('x').map(function (sizeNext) { return sizeNext / 5; }).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
sources.push({ | ||
srcSet: this.generateSrcset(operation, size.split('x').map(function (item) { return item / 5; }).join('x'), 'q10.foil1', imgSrc, config) | ||
srcSet: this.generateSrcset(operation, size, filters, imgSrc, config) | ||
}); | ||
@@ -326,2 +331,26 @@ } | ||
/** | ||
* @param {?} size | ||
* @param {?} config | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getAdaptiveSize = /** | ||
* @param {?} size | ||
* @param {?} config | ||
* @return {?} | ||
*/ | ||
function (size, config) { | ||
/** @type {?} */ | ||
var arrayOfSizes = size.split(','); | ||
/** @type {?} */ | ||
var sizes = []; | ||
arrayOfSizes.forEach(function (string) { | ||
/** @type {?} */ | ||
var groups = string.match(/((?<variable>[a-z_][a-z_]*)|(?<media>\([\S\s]*\)))\s*(?<size>[0-9xp]*)/).groups; | ||
/** @type {?} */ | ||
var media = groups.media ? groups.media : config.presets[groups.variable]; | ||
sizes.push({ media: media, size: groups.size }); | ||
}); | ||
return sizes; | ||
}; | ||
/** | ||
* @param {?} operation | ||
@@ -343,6 +372,3 @@ * @param {?} size | ||
function (operation, size, filters, imgSrc, config) { | ||
/** @type {?} */ | ||
var imgWidth = size.toString().split('x')[0]; | ||
/** @type {?} */ | ||
var imgHeight = size.toString().split('x')[1]; | ||
var _a = __read(size.toString().split('x'), 2), imgWidth = _a[0], imgHeight = _a[1]; | ||
return this.generateImgSrc(operation, filters, imgSrc, imgWidth, imgHeight, 1, config); | ||
@@ -393,2 +419,3 @@ }; | ||
function (size, config) { | ||
var _a, _b; | ||
/** @type {?} */ | ||
@@ -400,29 +427,9 @@ var width; | ||
/** @type {?} */ | ||
var breakPoint = this.getBreakPoint(config); | ||
var breakPointSource = this.getBreakPoint(size); | ||
/** @type {?} */ | ||
var orderIndex = config.order.indexOf(breakPoint); | ||
/** @type {?} */ | ||
var breakPointSize = null; | ||
do { | ||
/** @type {?} */ | ||
var nextBreakpoint = config.order[orderIndex]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndex--; | ||
} while (!breakPointSize && orderIndex >= 0); | ||
if (!breakPointSize) { | ||
/** @type {?} */ | ||
var orderIndexStepTwo = config.order.indexOf(breakPoint); | ||
do { | ||
/** @type {?} */ | ||
var nextBreakpoint = config.order[orderIndexStepTwo]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndexStepTwo++; | ||
} while (!breakPointSize && orderIndexStepTwo <= config.order.length); | ||
} | ||
width = breakPointSize.toString().split('x')[0]; | ||
height = breakPointSize.toString().split('x')[1]; | ||
var breakPointSize = breakPointSource ? breakPointSource.size : size[0].size; | ||
_a = __read(breakPointSize.toString().split('x'), 2), width = _a[0], height = _a[1]; | ||
} | ||
else { | ||
width = size.toString().split('x')[0]; | ||
height = size.toString().split('x')[1]; | ||
_b = __read(size.toString().split('x'), 2), width = _b[0], height = _b[1]; | ||
} | ||
@@ -435,16 +442,11 @@ if (width && height) { | ||
/** | ||
* @param {?} config | ||
* @param {?} size | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getBreakPoint = /** | ||
* @param {?} config | ||
* @param {?} size | ||
* @return {?} | ||
*/ | ||
function (config) { | ||
var presets = config.presets, order = config.order; | ||
/** @type {?} */ | ||
var innerWidth = window.innerWidth; | ||
/** @type {?} */ | ||
var prevBreakPointLimit = order.findIndex(function (item) { return presets[item] < innerWidth; }); | ||
return order[prevBreakPointLimit - 1] || order[prevBreakPointLimit] || order[order.length - 1]; | ||
function (size) { | ||
return __spread(size).reverse().find(function (item) { return matchMedia(item.media).matches; }); | ||
}; | ||
@@ -466,29 +468,2 @@ CIService.decorators = [ | ||
/*! ***************************************************************************** | ||
Copyright (c) Microsoft Corporation. All rights reserved. | ||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use | ||
this file except in compliance with the License. You may obtain a copy of the | ||
License at http://www.apache.org/licenses/LICENSE-2.0 | ||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED | ||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, | ||
MERCHANTABLITY OR NON-INFRINGEMENT. | ||
See the Apache Version 2.0 License for specific language governing permissions | ||
and limitations under the License. | ||
***************************************************************************** */ | ||
var __assign = function () { | ||
__assign = Object.assign || function __assign(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) | ||
if (Object.prototype.hasOwnProperty.call(s, p)) | ||
t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
/** | ||
@@ -502,5 +477,8 @@ * @fileoverview added by tsickle | ||
this._sanitizer = _sanitizer; | ||
this.class = ''; | ||
this.offset = 100; | ||
this.cloudimageUrl = ''; | ||
this.sources = []; | ||
this.firstSource = null; | ||
this.restSources = []; | ||
this.isLoaded = false; | ||
@@ -530,8 +508,5 @@ this.isProcessed = false; | ||
this.resizeSubscription$ = this.resizeObservable$.subscribe(function () { | ||
if (_this.isAdaptive) { | ||
if (_this.isAdaptive || _this.windowInnerWidth < window.innerWidth) { | ||
_this.processImage(); | ||
} | ||
else if (_this.windowInnerWidth < window.innerWidth) { | ||
_this.processImage(); | ||
} | ||
_this.windowInnerWidth = window.innerWidth; | ||
@@ -570,2 +545,3 @@ }); | ||
var isAdaptive = this.ciService.checkOnMedia(size); | ||
size = isAdaptive ? this.ciService.getAdaptiveSize(size, config) : size; | ||
/** @type {?} */ | ||
@@ -579,3 +555,3 @@ var isRelativeUrlPath = this.ciService.checkIfRelativeUrlPath(this.src); | ||
this.cloudimageUrl = isAdaptive ? | ||
this.ciService.generateUrl('width', parentContainerWidth, filters, imgSrc, config) : | ||
this.ciService.generateUrl('width', this.ciService.getSizeAccordingToPixelRatio(parentContainerWidth), filters, imgSrc, config) : | ||
this.ciService.generateUrl(operation, resultSize, filters, imgSrc, config); | ||
@@ -632,2 +608,25 @@ this.sources = isAdaptive ? | ||
*/ | ||
ImgComponent.prototype.getRestSources = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
/** @type {?} */ | ||
var resultSources = __spread((!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))); | ||
return resultSources.slice(1).reverse(); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
ImgComponent.prototype.getFirstSource = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
/** @type {?} */ | ||
var resultSources = __spread((!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))); | ||
this.firstSource = resultSources[0]; | ||
return resultSources[0]; | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
ImgComponent.prototype.getPositionStyle = /** | ||
@@ -646,3 +645,5 @@ * @return {?} | ||
function () { | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
// todo check if we need 100% height | ||
// return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? 'auto' : 'auto'); | ||
}; | ||
@@ -724,3 +725,3 @@ /** | ||
var result = 'transparent'; | ||
if (this.isRatio) { | ||
if (this.isRatio && !this.isPreviewLoaded && !this.isLoaded) { | ||
result = config.placeholderBackground; | ||
@@ -733,3 +734,3 @@ } | ||
selector: 'ci-img', | ||
template: "\n <picture #pictureElem *ngIf=\"!isProcessed\"></picture>\n\n <ng-container [ngSwitch]=\"lazyLoading\">\n <ng-container *ngSwitchCase=\"true\">\n <picture\n class=\"{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [lazyLoad]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [offset]=\"offset\"\n [alt]=\"\">\n </picture>\n </ng-container>\n <div *ngSwitchCase=\"false\">\n <picture\n class=\"{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))\"\n [media]=\"source.mediaQuery || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [src]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [alt]=\"\">\n </picture>\n </div>\n </ng-container>\n " | ||
template: "\n <picture #pictureElem *ngIf=\"!isProcessed\"></picture>\n\n <ng-container [ngSwitch]=\"lazyLoading\">\n <ng-container *ngSwitchCase=\"true\">\n <picture\n [class]=\"class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of getRestSources()\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <source\n *ngIf=\"getFirstSource()\"\n [attr.lazyLoad]=\"firstSource.srcSet || ''\"\n [srcset]=\"firstSource.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [lazyLoad]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [offset]=\"offset\"\n [alt]=\"\">\n </picture>\n </ng-container>\n <div *ngSwitchCase=\"false\">\n <picture\n [class]=\"class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of restSources\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <source\n *ngIf=\"firstSource\"\n [attr.lazyLoad]=\"firstSource.srcSet || ''\"\n [srcset]=\"firstSource.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [src]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [alt]=\"\">\n </picture>\n </div>\n </ng-container>\n " | ||
}] } | ||
@@ -736,0 +737,0 @@ ]; |
@@ -1,2 +0,2 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/common"),require("@angular/core"),require("@angular/platform-browser"),require("rxjs"),require("rxjs/operators"),require("ng-lazyload-image")):"function"==typeof define&&define.amd?define("ng-cloudimage-responsive",["exports","@angular/common","@angular/core","@angular/platform-browser","rxjs","rxjs/operators","ng-lazyload-image"],t):t(e["ng-cloudimage-responsive"]={},e.ng.common,e.ng.core,e.ng.platformBrowser,e.rxjs,e.rxjs.operators,e.ngLazyloadImage)}(this,function(e,t,i,r,n,o,s){"use strict";var a=function u(){},c=function(){function e(e){this.config={};var t=e.token,i=void 0===t?"":t,r=e.container,n=void 0===r?"cloudimg.io":r,o=e.ultraFast,s=void 0!==o&&o,a=e.lazyLoading,c=void 0===a||a,l=e.imgLoadingAnimation,d=void 0===l||l,u=e.lazyLoadOffset,g=void 0===u?100:u,p=e.width,h=void 0===p?"400":p,f=e.height,y=void 0===f?"300":f,m=e.operation,v=void 0===m?"width":m,S=e.filters,w=void 0===S?"n":S,I=e.placeholderBackground,P=void 0===I?"#f4f4f4":I,x=e.baseUrl,L=void 0===x?"/":x,b=e.presets,z=e.queryString,k=void 0===z?"":z;this.config={token:i,container:n,ultraFast:s,lazyLoading:c,imgLoadingAnimation:d,lazyLoadOffset:g,width:h,height:y,operation:v,filters:w,placeholderBackground:P,baseUrl:L,presets:b?this.getPresets(b,"presets"):{xs:575,sm:767,md:991,lg:1199,xl:3e3},order:b?this.getPresets(b,"order"):["xl","lg","md","sm","xs"],queryString:k,innerWidth:window.innerWidth}}return e.prototype.getPresets=function(e,t){void 0===e&&(e="");for(var i=e.split("|"),r={presets:{},order:[]},n=0;n<i.length;n++){var o=i[n]&&i[n].split(":"),s=o[0]&&o[0].trim(),a=o[1]&&o[1].trim();s&&a&&(r.presets[s]=a,r.order.unshift(s))}return r[t]},e.prototype.getParentWidth=function(e,t){if(!(e&&e.parentElement&&e.parentElement.getBoundingClientRect||e&&e.width))return t.width;var i=this.getParentContainerWithWidth(e),r=parseInt(""+i,10),n=Number(window.getComputedStyle(e).width);return n&&n<r&&15<n||!r?this.getSizeLimit(n):r?this.getSizeLimit(r):e.width||t.width},e.prototype.getParentContainerWithWidth=function(e){for(var t=null,i=0;i=(t=t&&t.parentNode||e.parentNode).getBoundingClientRect().width,t&&!i;);return i},e.prototype.getSizeLimit=function(e){return e<=25?"25":e<=50?"50":e<=100?"100":e<=200?"200":e<=300?"300":e<=400?"400":e<=500?"500":e<=600?"600":e<=700?"700":e<=800?"800":e<=900?"900":e<=1e3?"1000":e<=1100?"1100":e<=1200?"1200":e<=1300?"1300":e<=1400?"1400":e<=1500?"1500":e<=1600?"1600":e<=1700?"1700":e<=1800?"1800":e<=1900?"1900":e<=2400?"2400":e<=2800?"2800":"3600"},e.prototype.checkOnMedia=function(e){return e&&"object"==typeof e},e.prototype.checkIfRelativeUrlPath=function(e){return 0===e.indexOf("//")&&(e=window.location.protocol+e),0!==e.indexOf("http://")&&0!==e.indexOf("https://")&&0!==e.indexOf("//")},e.prototype.getImgSrc=function(e,t,i){return void 0===t&&(t=!1),void 0===i&&(i=""),t?i+e:e},e.prototype.getSizeAccordingToPixelRatio=function(e){var t=e.toString().split("x"),i=[];return[].forEach.call(t,function(e){i.push(e*Math.round(window.devicePixelRatio||1))}),i.join("x")},e.prototype.generateUrl=function(e,t,i,r,n){return(n.ultraFast?"https://scaleflex.ultrafast.io/":"https://")+n.token+"."+n.container+"/"+e+"/"+t+"/"+i+"/"+r+n.queryString},e.prototype.generateSources=function(e,t,i,r,n,o,s){var a=[];if(n){for(var c=[],l=0;l<o.order.length;l++){(g=t[o.order[l]])&&c.unshift(o.order[l])}for(l=0;l<c.length;l++){var d=!(l<c.length-1),u=d?c[l-1]:c[l],g=t[c[l]];s&&(g=g.split("x").map(function(e){return e/5}).join("x"));var p=this.generateSrcset(e,g,i,r,o),h="("+(d?"min":"max")+"-width: "+(o.presets[u]+(d?1:0))+"px)";a.push({mediaQuery:h,srcSet:p})}}else a.push({srcSet:this.generateSrcset(e,t.split("x").map(function(e){return e/5}).join("x"),"q10.foil1",r,o)});return a},e.prototype.generateSrcset=function(e,t,i,r,n){var o=t.toString().split("x")[0],s=t.toString().split("x")[1];return this.generateImgSrc(e,i,r,o,s,1,n)},e.prototype.generateImgSrc=function(e,t,i,r,n,o,s){var a=""+Math.trunc(r*o);return n&&(a+="x"+Math.trunc(n*o)),this.generateUrl(e,this.getSizeAccordingToPixelRatio(a),t,i,s).replace("http://scaleflex.ultrafast.io/","").replace("https://scaleflex.ultrafast.io/","").replace("//scaleflex.ultrafast.io/","").replace("///","/")},e.prototype.getRatioBySize=function(e,t){var i,r;if("object"==typeof e){var n=this.getBreakPoint(t),o=t.order.indexOf(n),s=null;do{s=e[t.order[o]],o--}while(!s&&0<=o);if(!s){var a=t.order.indexOf(n);do{s=e[t.order[a]],a++}while(!s&&a<=t.order.length)}i=s.toString().split("x")[0],r=s.toString().split("x")[1]}else i=e.toString().split("x")[0],r=e.toString().split("x")[1];return i&&r?i/r:null},e.prototype.getBreakPoint=function(e){var t=e.presets,i=e.order,r=window.innerWidth,n=i.findIndex(function(e){return t[e]<r});return i[n-1]||i[n]||i[i.length-1]},e.decorators=[{type:i.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:a}]},e.ngInjectableDef=i.defineInjectable({factory:function(){return new e(i.inject(a))},token:e,providedIn:"root"}),e}(),f=function(){return(f=Object.assign||function(e){for(var t,i=1,r=arguments.length;i<r;i++)for(var n in t=arguments[i])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},l=function(){function e(e,t){this.ciService=e,this._sanitizer=t,this.offset=100,this.cloudimageUrl="",this.sources=[],this.isLoaded=!1,this.isProcessed=!1,this.windowInnerWidth=window.innerWidth,this.lazyLoading=e.config.lazyLoading}return e.prototype.ngOnDestroy=function(){this.resizeSubscription$.unsubscribe()},e.prototype.ngOnInit=function(){var e=this;this.resizeObservable$=n.fromEvent(window,"resize").pipe(o.debounceTime(500)),this.resizeSubscription$=this.resizeObservable$.subscribe(function(){e.isAdaptive?e.processImage():e.windowInnerWidth<window.innerWidth&&e.processImage(),e.windowInnerWidth=window.innerWidth})},e.prototype.ngAfterViewInit=function(){this.processImage()},e.prototype.processImage=function(){var e,t,i=this,r=(this.imgElem||this.pictureElem).nativeElement,n=this.ciService.config,o=this.operation||this.o||n.operation,s=this.ciService.getParentWidth(r,n),a=this.size||this.s||n.size||s,c=this.filters||this.f||n.filters,l=this.ciService.checkOnMedia(a),d=this.ciService.checkIfRelativeUrlPath(this.src),u=this.ciService.getImgSrc(this.src,d,n.baseUrl),g=l?a:this.ciService.getSizeAccordingToPixelRatio(a);if(this.isPreview=!n.isChrome&&400<s&&n.lazyLoading,this.cloudimageUrl=l?this.ciService.generateUrl("width",s,c,u,n):this.ciService.generateUrl(o,g,c,u,n),this.sources=l?this.ciService.generateSources(o,g,c,u,l,n,!1):[],this.isPreview){var p=f({},n,{queryString:""});e=l?this.ciService.generateUrl("width",s/5,"q10.foil1",u,p):this.ciService.generateUrl(o,g.split("x").map(function(e){return e/5}).join("x"),"q10.foil1",u,p),t=l?this.ciService.generateSources(o,g,"q10.foil1",u,l,p,!0):[]}this.previewCloudimageUrl=e,this.previewSources=t,this.isAdaptive=l,this.actualSize=a,this.parentContainerWidth=s;var h=this.ciService.getRatioBySize(a,n);this.imageHeight=Math.floor(s/(h||this.ratio||1.5)),this.isRatio=!(!h&&!this.ratio),this.ratioBySize=h,setTimeout(function(){i.isProcessed=!0})},e.prototype.onImageLoad=function(){this.isPreview?this.isPreviewLoaded?this.isLoaded=!0:this.isPreviewLoaded=!0:(this.isPreviewLoaded=!0,this.isLoaded=!0)},e.prototype.getPositionStyle=function(){return this._sanitizer.bypassSecurityTrustStyle(this.isRatio?"absolute":"relative")},e.prototype.getImgHeight=function(){return this._sanitizer.bypassSecurityTrustStyle(this.isRatio?"100%":"auto")},e.prototype.getTransformStyle=function(){var e=this.ciService.config,t="none";return e.imgLoadingAnimation&&(t="scale3d(1.1, 1.1, 1)"),this.isLoaded&&e.imgLoadingAnimation&&(t="translateZ(0) scale3d(1, 1, 1)"),this._sanitizer.bypassSecurityTrustStyle(t)},e.prototype.getTransitionStyle=function(){var e=this.ciService.config,t="none";return this.isLoaded&&e.imgLoadingAnimation&&(t="all 0.3s ease-in-out"),this._sanitizer.bypassSecurityTrustStyle(t)},e.prototype.getFilterStyle=function(){var e=this.ciService.config,t="none";return e.imgLoadingAnimation&&(t="blur("+Math.floor(parseInt(this.parentContainerWidth,10)/100)+"px)"),this.isLoaded&&e.imgLoadingAnimation&&(t="blur(0px)"),this._sanitizer.bypassSecurityTrustStyle(t)},e.prototype.getPicturePaddingBottom=function(){var e="";return this.isRatio&&(e=100/(this.ratioBySize||this.ratio)+"%"),this._sanitizer.bypassSecurityTrustStyle(e)},e.prototype.getPictureBackground=function(){var e=this.ciService.config,t="transparent";return this.isRatio&&(t=e.placeholderBackground),this._sanitizer.bypassSecurityTrustStyle(t)},e.decorators=[{type:i.Component,args:[{selector:"ci-img",template:'\n <picture #pictureElem *ngIf="!isProcessed"></picture>\n\n <ng-container [ngSwitch]="lazyLoading">\n <ng-container *ngSwitchCase="true">\n <picture\n class="{{class + \' cloudimage-image-picture cloudimage-image-\' + (isLoaded ? \'loaded\' : \'loading\')}}"\n style="display:block;width:100%;overflow:hidden;position:relative;"\n [style.paddingBottom]="getPicturePaddingBottom()"\n [style.background]="getPictureBackground()"\n #imgElem\n *ngIf="isProcessed">\n <source\n *ngFor="let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))"\n [media]="source.mediaQuery || \'\'"\n [attr.lazyLoad]="source.srcSet || \'\'"\n [srcset]="source.srcSet || \'\'"\n (load)="onImageLoad()"\n />\n <img\n style="display:block;width:100%;opacity:1;top:0;left:0;"\n [style.position]="getPositionStyle()"\n [style.height]="getImgHeight()"\n [style.transform]="getTransformStyle()"\n [style.transition]="getTransitionStyle()"\n [style.filter]="getFilterStyle()"\n (load)="onImageLoad()"\n [lazyLoad]="!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)"\n [offset]="offset"\n [alt]="">\n </picture>\n </ng-container>\n <div *ngSwitchCase="false">\n <picture\n class="{{class + \' cloudimage-image-picture cloudimage-image-\' + (isLoaded ? \'loaded\' : \'loading\')}}"\n style="display:block;width:100%;overflow:hidden;position:relative;"\n [style.paddingBottom]="getPicturePaddingBottom()"\n [style.background]="getPictureBackground()"\n #imgElem\n *ngIf="isProcessed">\n <source\n *ngFor="let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))"\n [media]="source.mediaQuery || \'\'"\n [srcset]="source.srcSet || \'\'"\n (load)="onImageLoad()"\n />\n <img\n style="display:block;width:100%;opacity:1;top:0;left:0;"\n [style.position]="getPositionStyle()"\n [style.height]="getImgHeight()"\n [style.transform]="getTransformStyle()"\n [style.transition]="getTransitionStyle()"\n [style.filter]="getFilterStyle()"\n (load)="onImageLoad()"\n [src]="!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)"\n [alt]="">\n </picture>\n </div>\n </ng-container>\n '}]}],e.ctorParameters=function(){return[{type:c},{type:r.DomSanitizer}]},e.propDecorators={imgElem:[{type:i.ViewChild,args:["imgElem"]}],pictureElem:[{type:i.ViewChild,args:["pictureElem"]}],src:[{type:i.Input}],"class":[{type:i.Input}],alt:[{type:i.Input}],operation:[{type:i.Input}],o:[{type:i.Input}],size:[{type:i.Input}],s:[{type:i.Input}],filters:[{type:i.Input}],f:[{type:i.Input}],ratio:[{type:i.Input}],offset:[{type:i.Input}],ngSwitch:[{type:i.Input}]},e}(),d=function(){function e(){}return e.decorators=[{type:i.NgModule,args:[{declarations:[l],imports:[t.CommonModule,s.LazyLoadImageModule],exports:[l],providers:[]}]}],e}();e.CIService=c,e.CIConfig=a,e.CIModule=d,e.ImgComponent=l,Object.defineProperty(e,"__esModule",{value:!0})}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/common"),require("@angular/core"),require("@angular/platform-browser"),require("rxjs"),require("rxjs/operators"),require("ng-lazyload-image")):"function"==typeof define&&define.amd?define("ng-cloudimage-responsive",["exports","@angular/common","@angular/core","@angular/platform-browser","rxjs","rxjs/operators","ng-lazyload-image"],t):t(e["ng-cloudimage-responsive"]={},e.ng.common,e.ng.core,e.ng.platformBrowser,e.rxjs,e.rxjs.operators,e.ngLazyloadImage)}(this,function(e,t,i,r,n,o,s){"use strict";var f=function(){return(f=Object.assign||function(e){for(var t,i=1,r=arguments.length;i<r;i++)for(var n in t=arguments[i])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)};function c(e,t){var i="function"==typeof Symbol&&e[Symbol.iterator];if(!i)return e;var r,n,o=i.call(e),s=[];try{for(;(void 0===t||0<t--)&&!(r=o.next()).done;)s.push(r.value)}catch(a){n={error:a}}finally{try{r&&!r.done&&(i=o["return"])&&i.call(o)}finally{if(n)throw n.error}}return s}function a(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(c(arguments[t]));return e}var l=function g(){},u=function(){function e(e){this.config={};var t=e.token,i=void 0===t?"":t,r=e.container,n=void 0===r?"cloudimg.io":r,o=e.ultraFast,s=void 0!==o&&o,a=e.lazyLoading,c=void 0===a||a,l=e.imgLoadingAnimation,u=void 0===l||l,d=e.lazyLoadOffset,p=void 0===d?100:d,g=e.width,h=void 0===g?"400":g,f=e.height,y=void 0===f?"300":f,m=e.operation,S=void 0===m?"width":m,v=e.filters,w=void 0===v?"n":v,z=e.placeholderBackground,I=void 0===z?"#f4f4f4":z,L=e.baseUrl,P=void 0===L?"/":L,x=e.presets,b=e.queryString,C=void 0===b?"":b;this.config={token:i,container:n,ultraFast:s,lazyLoading:c,imgLoadingAnimation:u,lazyLoadOffset:p,width:h,height:y,operation:S,filters:w,placeholderBackground:I,baseUrl:P,presets:x||{xs:"(max-width: 575px)",sm:"(min-width: 576px)",md:"(min-width: 768px)",lg:"(min-width: 992px)",xl:"(min-width: 1200px)"},queryString:C,innerWidth:window.innerWidth}}return e.prototype.getParentWidth=function(e,t){if(!(e&&e.parentElement&&e.parentElement.getBoundingClientRect||e&&e.width))return t.width;var i=this.getParentContainerWithWidth(e),r=parseInt(""+i,10),n=Number(window.getComputedStyle(e).width);return n&&n<r&&15<n||!r?this.getSizeLimit(n):r?this.getSizeLimit(r):e.width||t.width},e.prototype.getParentContainerWithWidth=function(e){for(var t=null,i=0;i=(t=t&&t.parentNode||e.parentNode).getBoundingClientRect().width,t&&!i;);var r=i&&t&&parseInt(window.getComputedStyle(t).paddingLeft,10),n=parseInt(window.getComputedStyle(t).paddingRight,10);return i+(i?-r-n:0)},e.prototype.getSizeLimit=function(e){return e<=25?"25":e<=50?"50":(100*Math.ceil(e/100)).toString()},e.prototype.checkOnMedia=function(e){try{return 1<e.split(",").length}catch(t){return!1}},e.prototype.checkIfRelativeUrlPath=function(e){return 0===e.indexOf("//")&&(e=window.location.protocol+e),0!==e.indexOf("http://")&&0!==e.indexOf("https://")&&0!==e.indexOf("//")},e.prototype.getImgSrc=function(e,t,i){return void 0===t&&(t=!1),void 0===i&&(i=""),t?i+e:e},e.prototype.getSizeAccordingToPixelRatio=function(e){var t=e.toString().split("x"),i=[];return[].forEach.call(t,function(e){i.push(e*Math.round(window.devicePixelRatio||1))}),i.join("x")},e.prototype.generateUrl=function(e,t,i,r,n){return(n.ultraFast?"https://scaleflex.ultrafast.io/":"https://")+n.token+"."+n.container+"/"+e+"/"+t+"/"+i+"/"+r+n.queryString},e.prototype.generateSources=function(r,e,n,o,t,s,a){var c=this,l=[];return t?e.forEach(function(e){var t=e.size,i=e.media;a&&(t=t.split("x").map(function(e){return e/5}).join("x"),n="q10.foil1"),l.push({mediaQuery:i,srcSet:c.generateSrcset(r,t,n,o,s)})}):(a&&(e=e.split("x").map(function(e){return e/5}).join("x"),n="q10.foil1"),l.push({srcSet:this.generateSrcset(r,e,n,o,s)})),l},e.prototype.getAdaptiveSize=function(e,r){var t=e.split(","),n=[];return t.forEach(function(e){var t=e.match(/((?<variable>[a-z_][a-z_]*)|(?<media>\([\S\s]*\)))\s*(?<size>[0-9xp]*)/).groups,i=t.media?t.media:r.presets[t.variable];n.push({media:i,size:t.size})}),n},e.prototype.generateSrcset=function(e,t,i,r,n){var o=c(t.toString().split("x"),2),s=o[0],a=o[1];return this.generateImgSrc(e,i,r,s,a,1,n)},e.prototype.generateImgSrc=function(e,t,i,r,n,o,s){var a=""+Math.trunc(r*o);return n&&(a+="x"+Math.trunc(n*o)),this.generateUrl(e,this.getSizeAccordingToPixelRatio(a),t,i,s).replace("http://scaleflex.ultrafast.io/","").replace("https://scaleflex.ultrafast.io/","").replace("//scaleflex.ultrafast.io/","").replace("///","/")},e.prototype.getRatioBySize=function(e,t){var i,r,n,o;if("object"==typeof e){var s=this.getBreakPoint(e);n=(i=c((s?s.size:e[0].size).toString().split("x"),2))[0],o=i[1]}else n=(r=c(e.toString().split("x"),2))[0],o=r[1];return n&&o?n/o:null},e.prototype.getBreakPoint=function(e){return a(e).reverse().find(function(e){return matchMedia(e.media).matches})},e.decorators=[{type:i.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:l}]},e.ngInjectableDef=i.defineInjectable({factory:function(){return new e(i.inject(l))},token:e,providedIn:"root"}),e}(),d=function(){function e(e,t){this.ciService=e,this._sanitizer=t,this["class"]="",this.offset=100,this.cloudimageUrl="",this.sources=[],this.firstSource=null,this.restSources=[],this.isLoaded=!1,this.isProcessed=!1,this.windowInnerWidth=window.innerWidth,this.lazyLoading=e.config.lazyLoading}return e.prototype.ngOnDestroy=function(){this.resizeSubscription$.unsubscribe()},e.prototype.ngOnInit=function(){var e=this;this.resizeObservable$=n.fromEvent(window,"resize").pipe(o.debounceTime(500)),this.resizeSubscription$=this.resizeObservable$.subscribe(function(){(e.isAdaptive||e.windowInnerWidth<window.innerWidth)&&e.processImage(),e.windowInnerWidth=window.innerWidth})},e.prototype.ngAfterViewInit=function(){this.processImage()},e.prototype.processImage=function(){var e=this,t=(this.imgElem||this.pictureElem).nativeElement,i=this.ciService.config,r=this.operation||this.o||i.operation,n=this.ciService.getParentWidth(t,i),o=this.size||this.s||i.size||n,s=this.filters||this.f||i.filters,a=this.ciService.checkOnMedia(o);o=a?this.ciService.getAdaptiveSize(o,i):o;var c,l,u=this.ciService.checkIfRelativeUrlPath(this.src),d=this.ciService.getImgSrc(this.src,u,i.baseUrl),p=a?o:this.ciService.getSizeAccordingToPixelRatio(o);if(this.isPreview=!i.isChrome&&400<n&&i.lazyLoading,this.cloudimageUrl=a?this.ciService.generateUrl("width",this.ciService.getSizeAccordingToPixelRatio(n),s,d,i):this.ciService.generateUrl(r,p,s,d,i),this.sources=a?this.ciService.generateSources(r,p,s,d,a,i,!1):[],this.isPreview){var g=f({},i,{queryString:""});c=a?this.ciService.generateUrl("width",n/5,"q10.foil1",d,g):this.ciService.generateUrl(r,p.split("x").map(function(e){return e/5}).join("x"),"q10.foil1",d,g),l=a?this.ciService.generateSources(r,p,"q10.foil1",d,a,g,!0):[]}this.previewCloudimageUrl=c,this.previewSources=l,this.isAdaptive=a,this.actualSize=o,this.parentContainerWidth=n;var h=this.ciService.getRatioBySize(o,i);this.imageHeight=Math.floor(n/(h||this.ratio||1.5)),this.isRatio=!(!h&&!this.ratio),this.ratioBySize=h,setTimeout(function(){e.isProcessed=!0})},e.prototype.onImageLoad=function(){this.isPreview?this.isPreviewLoaded?this.isLoaded=!0:this.isPreviewLoaded=!0:(this.isPreviewLoaded=!0,this.isLoaded=!0)},e.prototype.getRestSources=function(){return a(this.isPreview?this.isPreviewLoaded?this.sources:this.previewSources:this.sources).slice(1).reverse()},e.prototype.getFirstSource=function(){var e=a(this.isPreview?this.isPreviewLoaded?this.sources:this.previewSources:this.sources);return this.firstSource=e[0],e[0]},e.prototype.getPositionStyle=function(){return this._sanitizer.bypassSecurityTrustStyle(this.isRatio?"absolute":"relative")},e.prototype.getImgHeight=function(){return this._sanitizer.bypassSecurityTrustStyle((this.isRatio,"auto"))},e.prototype.getTransformStyle=function(){var e=this.ciService.config,t="none";return e.imgLoadingAnimation&&(t="scale3d(1.1, 1.1, 1)"),this.isLoaded&&e.imgLoadingAnimation&&(t="translateZ(0) scale3d(1, 1, 1)"),this._sanitizer.bypassSecurityTrustStyle(t)},e.prototype.getTransitionStyle=function(){var e=this.ciService.config,t="none";return this.isLoaded&&e.imgLoadingAnimation&&(t="all 0.3s ease-in-out"),this._sanitizer.bypassSecurityTrustStyle(t)},e.prototype.getFilterStyle=function(){var e=this.ciService.config,t="none";return e.imgLoadingAnimation&&(t="blur("+Math.floor(parseInt(this.parentContainerWidth,10)/100)+"px)"),this.isLoaded&&e.imgLoadingAnimation&&(t="blur(0px)"),this._sanitizer.bypassSecurityTrustStyle(t)},e.prototype.getPicturePaddingBottom=function(){var e="";return this.isRatio&&(e=100/(this.ratioBySize||this.ratio)+"%"),this._sanitizer.bypassSecurityTrustStyle(e)},e.prototype.getPictureBackground=function(){var e=this.ciService.config,t="transparent";return!this.isRatio||this.isPreviewLoaded||this.isLoaded||(t=e.placeholderBackground),this._sanitizer.bypassSecurityTrustStyle(t)},e.decorators=[{type:i.Component,args:[{selector:"ci-img",template:'\n <picture #pictureElem *ngIf="!isProcessed"></picture>\n\n <ng-container [ngSwitch]="lazyLoading">\n <ng-container *ngSwitchCase="true">\n <picture\n [class]="class + \' cloudimage-image-picture cloudimage-image-\' + (isLoaded ? \'loaded\' : \'loading\')"\n style="display:block;width:100%;overflow:hidden;position:relative;"\n [style.paddingBottom]="getPicturePaddingBottom()"\n [style.background]="getPictureBackground()"\n #imgElem\n *ngIf="isProcessed">\n <source\n *ngFor="let source of getRestSources()"\n [media]="source.mediaQuery || \'\'"\n [attr.lazyLoad]="source.srcSet || \'\'"\n [srcset]="source.srcSet || \'\'"\n (load)="onImageLoad()"\n />\n <source\n *ngIf="getFirstSource()"\n [attr.lazyLoad]="firstSource.srcSet || \'\'"\n [srcset]="firstSource.srcSet || \'\'"\n (load)="onImageLoad()"\n />\n <img\n style="display:block;width:100%;opacity:1;top:0;left:0;"\n [style.position]="getPositionStyle()"\n [style.height]="getImgHeight()"\n [style.transform]="getTransformStyle()"\n [style.transition]="getTransitionStyle()"\n [style.filter]="getFilterStyle()"\n (load)="onImageLoad()"\n [lazyLoad]="!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)"\n [offset]="offset"\n [alt]="">\n </picture>\n </ng-container>\n <div *ngSwitchCase="false">\n <picture\n [class]="class + \' cloudimage-image-picture cloudimage-image-\' + (isLoaded ? \'loaded\' : \'loading\')"\n style="display:block;width:100%;overflow:hidden;position:relative;"\n [style.paddingBottom]="getPicturePaddingBottom()"\n [style.background]="getPictureBackground()"\n #imgElem\n *ngIf="isProcessed">\n <source\n *ngFor="let source of restSources"\n [media]="source.mediaQuery || \'\'"\n [attr.lazyLoad]="source.srcSet || \'\'"\n [srcset]="source.srcSet || \'\'"\n (load)="onImageLoad()"\n />\n <source\n *ngIf="firstSource"\n [attr.lazyLoad]="firstSource.srcSet || \'\'"\n [srcset]="firstSource.srcSet || \'\'"\n (load)="onImageLoad()"\n />\n <img\n style="display:block;width:100%;opacity:1;top:0;left:0;"\n [style.position]="getPositionStyle()"\n [style.height]="getImgHeight()"\n [style.transform]="getTransformStyle()"\n [style.transition]="getTransitionStyle()"\n [style.filter]="getFilterStyle()"\n (load)="onImageLoad()"\n [src]="!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)"\n [alt]="">\n </picture>\n </div>\n </ng-container>\n '}]}],e.ctorParameters=function(){return[{type:u},{type:r.DomSanitizer}]},e.propDecorators={imgElem:[{type:i.ViewChild,args:["imgElem"]}],pictureElem:[{type:i.ViewChild,args:["pictureElem"]}],src:[{type:i.Input}],"class":[{type:i.Input}],alt:[{type:i.Input}],operation:[{type:i.Input}],o:[{type:i.Input}],size:[{type:i.Input}],s:[{type:i.Input}],filters:[{type:i.Input}],f:[{type:i.Input}],ratio:[{type:i.Input}],offset:[{type:i.Input}],ngSwitch:[{type:i.Input}]},e}(),p=function(){function e(){}return e.decorators=[{type:i.NgModule,args:[{declarations:[d],imports:[t.CommonModule,s.LazyLoadImageModule],exports:[d],providers:[]}]}],e}();e.CIService=u,e.CIConfig=l,e.CIModule=p,e.ImgComponent=d,Object.defineProperty(e,"__esModule",{value:!0})}); | ||
//# sourceMappingURL=ng-cloudimage-responsive.umd.min.js.map |
@@ -18,5 +18,8 @@ /** | ||
this._sanitizer = _sanitizer; | ||
this.class = ''; | ||
this.offset = 100; | ||
this.cloudimageUrl = ''; | ||
this.sources = []; | ||
this.firstSource = null; | ||
this.restSources = []; | ||
this.isLoaded = false; | ||
@@ -39,8 +42,5 @@ this.isProcessed = false; | ||
this.resizeSubscription$ = this.resizeObservable$.subscribe(() => { | ||
if (this.isAdaptive) { | ||
if (this.isAdaptive || this.windowInnerWidth < window.innerWidth) { | ||
this.processImage(); | ||
} | ||
else if (this.windowInnerWidth < window.innerWidth) { | ||
this.processImage(); | ||
} | ||
this.windowInnerWidth = window.innerWidth; | ||
@@ -67,3 +67,3 @@ }); | ||
/** @type {?} */ | ||
const size = this.size || this.s || config.size || parentContainerWidth; | ||
let size = this.size || this.s || config.size || parentContainerWidth; | ||
/** @type {?} */ | ||
@@ -73,2 +73,3 @@ const filters = this.filters || this.f || config.filters; | ||
const isAdaptive = this.ciService.checkOnMedia(size); | ||
size = isAdaptive ? this.ciService.getAdaptiveSize(size, config) : size; | ||
/** @type {?} */ | ||
@@ -82,3 +83,3 @@ const isRelativeUrlPath = this.ciService.checkIfRelativeUrlPath(this.src); | ||
this.cloudimageUrl = isAdaptive ? | ||
this.ciService.generateUrl('width', parentContainerWidth, filters, imgSrc, config) : | ||
this.ciService.generateUrl('width', this.ciService.getSizeAccordingToPixelRatio(parentContainerWidth), filters, imgSrc, config) : | ||
this.ciService.generateUrl(operation, resultSize, filters, imgSrc, config); | ||
@@ -132,2 +133,19 @@ this.sources = isAdaptive ? | ||
*/ | ||
getRestSources() { | ||
/** @type {?} */ | ||
const resultSources = [...(!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))]; | ||
return resultSources.slice(1).reverse(); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
getFirstSource() { | ||
/** @type {?} */ | ||
const resultSources = [...(!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))]; | ||
this.firstSource = resultSources[0]; | ||
return resultSources[0]; | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
getPositionStyle() { | ||
@@ -140,3 +158,5 @@ return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? 'absolute' : 'relative'); | ||
getImgHeight() { | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
// todo check if we need 100% height | ||
// return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? 'auto' : 'auto'); | ||
} | ||
@@ -203,3 +223,3 @@ /** | ||
let result = 'transparent'; | ||
if (this.isRatio) { | ||
if (this.isRatio && !this.isPreviewLoaded && !this.isLoaded) { | ||
result = config.placeholderBackground; | ||
@@ -219,3 +239,3 @@ } | ||
<picture | ||
class="{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}" | ||
[class]="class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')" | ||
style="display:block;width:100%;overflow:hidden;position:relative;" | ||
@@ -227,3 +247,3 @@ [style.paddingBottom]="getPicturePaddingBottom()" | ||
<source | ||
*ngFor="let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))" | ||
*ngFor="let source of getRestSources()" | ||
[media]="source.mediaQuery || ''" | ||
@@ -234,2 +254,8 @@ [attr.lazyLoad]="source.srcSet || ''" | ||
/> | ||
<source | ||
*ngIf="getFirstSource()" | ||
[attr.lazyLoad]="firstSource.srcSet || ''" | ||
[srcset]="firstSource.srcSet || ''" | ||
(load)="onImageLoad()" | ||
/> | ||
<img | ||
@@ -250,3 +276,3 @@ style="display:block;width:100%;opacity:1;top:0;left:0;" | ||
<picture | ||
class="{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}" | ||
[class]="class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')" | ||
style="display:block;width:100%;overflow:hidden;position:relative;" | ||
@@ -258,7 +284,14 @@ [style.paddingBottom]="getPicturePaddingBottom()" | ||
<source | ||
*ngFor="let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))" | ||
*ngFor="let source of restSources" | ||
[media]="source.mediaQuery || ''" | ||
[attr.lazyLoad]="source.srcSet || ''" | ||
[srcset]="source.srcSet || ''" | ||
(load)="onImageLoad()" | ||
/> | ||
<source | ||
*ngIf="firstSource" | ||
[attr.lazyLoad]="firstSource.srcSet || ''" | ||
[srcset]="firstSource.srcSet || ''" | ||
(load)="onImageLoad()" | ||
/> | ||
<img | ||
@@ -339,2 +372,6 @@ style="display:block;width:100%;opacity:1;top:0;left:0;" | ||
/** @type {?} */ | ||
ImgComponent.prototype.firstSource; | ||
/** @type {?} */ | ||
ImgComponent.prototype.restSources; | ||
/** @type {?} */ | ||
ImgComponent.prototype.isLoaded; | ||
@@ -378,2 +415,2 @@ /** @type {?} */ | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWNsb3VkaW1hZ2UtcmVzcG9uc2l2ZS8iLCJzb3VyY2VzIjpbImxpYi9pbWcvaW1nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBeUIsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxFQUEyQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFpRTVDLE1BQU0sT0FBTyxZQUFZOzs7OztJQW1DdkIsWUFBb0IsU0FBb0IsRUFBVSxVQUF3QjtRQUF0RCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQXRCakUsV0FBTSxHQUFHLEdBQUcsQ0FBQztRQUt0QixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQVlwQixxQkFBZ0IsR0FBVyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBRzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDbEQsQ0FBQzs7OztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7OztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdB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QzdCLHVDQUF5Qjs7SUFDekIsK0JBQWlCOztJQUNqQixtQ0FBb0I7O0lBQ3BCLG1DQUFxQjs7SUFDckIsbUNBQW9COztJQUNwQix3Q0FBNkM7Ozs7O0lBRWpDLGlDQUE0Qjs7Ozs7SUFBRSxrQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDSVNlcnZpY2V9IGZyb20gJy4uL2xpYi5zZXJ2aWNlJztcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7ZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2ktaW1nJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8cGljdHVyZSAjcGljdHVyZUVsZW0gKm5nSWY9XCIhaXNQcm9jZXNzZWRcIj48L3BpY3R1cmU+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJsYXp5TG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiPlxuICAgICAgICA8cGljdHVyZVxuICAgICAgICAgIGNsYXNzPVwie3tjbGFzcyArICcgY2xvdWRpbWFnZS1pbWFnZS1waWN0dXJlIGNsb3VkaW1hZ2UtaW1hZ2UtJyArIChpc0xvYWRlZCA/ICdsb2FkZWQnIDogJ2xvYWRpbmcnKX19XCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7XCJcbiAgICAgICAgICBbc3R5bGUucGFkZGluZ0JvdHRvbV09XCJnZXRQaWN0dXJlUGFkZGluZ0JvdHRvbSgpXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRQaWN0dXJlQmFja2dyb3VuZCgpXCJcbiAgICAgICAgICAjaW1nRWxlbVxuICAgICAgICAgICpuZ0lmPVwiaXNQcm9jZXNzZWRcIj5cbiAgICAgICAgICA8c291cmNlXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc291cmNlIG9mICghaXNQcmV2aWV3ID8gc291cmNlcyA6IChpc1ByZXZpZXdMb2FkZWQgPyBzb3VyY2VzIDogcHJldmlld1NvdXJjZXMpKVwiXG4gICAgICAgICAgICBbbWVkaWFdPVwic291cmNlLm1lZGlhUXVlcnkgfHwgJydcIlxuICAgICAgICAgICAgW2F0dHIubGF6eUxvYWRdPVwic291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICBbc3Jjc2V0XT1cInNvdXJjZS5zcmNTZXQgfHwgJydcIlxuICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQoKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtvcGFjaXR5OjE7dG9wOjA7bGVmdDowO1wiXG4gICAgICAgICAgICBbc3R5bGUucG9zaXRpb25dPVwiZ2V0UG9zaXRpb25TdHlsZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SW1nSGVpZ2h0KClcIlxuICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJnZXRUcmFuc2Zvcm1TdHlsZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2l0aW9uXT1cImdldFRyYW5zaXRpb25TdHlsZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS5maWx0ZXJdPVwiZ2V0RmlsdGVyU3R5bGUoKVwiXG4gICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZCgpXCJcbiAgICAgICAgICAgIFtsYXp5TG9hZF09XCIhaXNQcmV2aWV3ID8gY2xvdWRpbWFnZVVybCA6IChpc1ByZXZpZXdMb2FkZWQgPyBjbG91ZGltYWdlVXJsIDogcHJldmlld0Nsb3VkaW1hZ2VVcmwpXCJcbiAgICAgICAgICAgIFtvZmZzZXRdPVwib2Zmc2V0XCJcbiAgICAgICAgICAgIFthbHRdPVwiXCI+XG4gICAgICAgIDwvcGljdHVyZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgICAgPHBpY3R1cmVcbiAgICAgICAgICBjbGFzcz1cInt7Y2xhc3MgKyAnIGNsb3VkaW1hZ2UtaW1hZ2UtcGljdHVyZSBjbG91ZGltYWdlLWltYWdlLScgKyAoaXNMb2FkZWQgPyAnbG9hZGVkJyA6ICdsb2FkaW5nJyl9fVwiXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO1wiXG4gICAgICAgICAgW3N0eWxlLnBhZGRpbmdCb3R0b21dPVwiZ2V0UGljdHVyZVBhZGRpbmdCb3R0b20oKVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZ2V0UGljdHVyZUJhY2tncm91bmQoKVwiXG4gICAgICAgICAgI2ltZ0VsZW1cbiAgICAgICAgICAqbmdJZj1cImlzUHJvY2Vzc2VkXCI+XG4gICAgICAgICAgPHNvdXJjZVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNvdXJjZSBvZiAoIWlzUHJldmlldyA/IHNvdXJjZXMgOiAoaXNQcmV2aWV3TG9hZGVkID8gc291cmNlcyA6IHByZXZpZXdTb3VyY2VzKSlcIlxuICAgICAgICAgICAgW21lZGlhXT1cInNvdXJjZS5tZWRpYVF1ZXJ5IHx8ICcnXCJcbiAgICAgICAgICAgIFtzcmNzZXRdPVwic291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO29wYWNpdHk6MTt0b3A6MDtsZWZ0OjA7XCJcbiAgICAgICAgICAgIFtzdHlsZS5wb3NpdGlvbl09XCJnZXRQb3NpdGlvblN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRJbWdIZWlnaHQoKVwiXG4gICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cImdldFRyYW5zZm9ybVN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLnRyYW5zaXRpb25dPVwiZ2V0VHJhbnNpdGlvblN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLmZpbHRlcl09XCJnZXRGaWx0ZXJTdHlsZSgpXCJcbiAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKClcIlxuICAgICAgICAgICAgW3NyY109XCIhaXNQcmV2aWV3ID8gY2xvdWRpbWFnZVVybCA6IChpc1ByZXZpZXdMb2FkZWQgPyBjbG91ZGltYWdlVXJsIDogcHJldmlld0Nsb3VkaW1hZ2VVcmwpXCJcbiAgICAgICAgICAgIFthbHRdPVwiXCI+XG4gICAgICAgIDwvcGljdHVyZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEltZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnaW1nRWxlbScpIGltZ0VsZW06IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BpY3R1cmVFbGVtJykgcGljdHVyZUVsZW06IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIHNyYzogc3RyaW5nO1xuICBASW5wdXQoKSBjbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBhbHQ6IHN0cmluZztcbiAgQElucHV0KCkgb3BlcmF0aW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG86IHN0cmluZztcbiAgQElucHV0KCkgc2l6ZTogc3RyaW5nIHwge307XG4gIEBJbnB1dCgpIHM6IHN0cmluZyB8IHt9O1xuICBASW5wdXQoKSBmaWx0ZXJzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGY6IHN0cmluZztcbiAgQElucHV0KCkgcmF0aW86IG51bWJlcjtcbiAgQElucHV0KCkgb2Zmc2V0ID0gMTAwO1xuICBASW5wdXQoKSBuZ1N3aXRjaDogYW55O1xuXG4gIHJlc2l6ZU9ic2VydmFibGUkOiBPYnNlcnZhYmxlPEV2ZW50PjtcbiAgcmVzaXplU3Vic2NyaXB0aW9uJDogU3Vic2NyaXB0aW9uO1xuICBjbG91ZGltYWdlVXJsID0gJyc7XG4gIHNvdXJjZXMgPSBbXTtcbiAgaXNMb2FkZWQgPSBmYWxzZTtcbiAgaXNQcm9jZXNzZWQgPSBmYWxzZTtcbiAgaXNQcmV2aWV3OiBib29sZWFuO1xuICBwcmV2aWV3Q2xvdWRpbWFnZVVybDogc3RyaW5nO1xuICBwcmV2aWV3U291cmNlczogc3RyaW5nO1xuICBpc0FkYXB0aXZlOiBib29sZWFuO1xuICBhY3R1YWxTaXplOiBzdHJpbmc7XG4gIHBhcmVudENvbnRhaW5lcldpZHRoOiBzdHJpbmc7XG4gIGlzUHJldmlld0xvYWRlZDogYm9vbGVhbjtcbiAgaXNSYXRpbzogYm9vbGVhbjtcbiAgcmF0aW9CeVNpemU6IG51bWJlcjtcbiAgbGF6eUxvYWRpbmc6IGJvb2xlYW47XG4gIGltYWdlSGVpZ2h0OiBudW1iZXI7XG4gIHdpbmRvd0lubmVyV2lkdGg6IG51bWJlciA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2lTZXJ2aWNlOiBDSVNlcnZpY2UsIHByaXZhdGUgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XG4gICAgdGhpcy5sYXp5TG9hZGluZyA9IGNpU2VydmljZS5jb25maWcubGF6eUxvYWRpbmc7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2YWJsZSQgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShkZWJvdW5jZVRpbWUoNTAwKSk7XG4gICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24kID0gdGhpcy5yZXNpemVPYnNlcnZhYmxlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNBZGFwdGl2ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NJbWFnZSgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLndpbmRvd0lubmVyV2lkdGggPCB3aW5kb3cuaW5uZXJXaWR0aCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NJbWFnZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy53aW5kb3dJbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5wcm9jZXNzSW1hZ2UoKTtcbiAgfVxuXG4gIHByb2Nlc3NJbWFnZSgpIHtcbiAgICBjb25zdCBpbWdOb2RlID0gKHRoaXMuaW1nRWxlbSB8fCB0aGlzLnBpY3R1cmVFbGVtKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHtjb25maWd9ID0gdGhpcy5jaVNlcnZpY2U7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5vcGVyYXRpb24gfHwgdGhpcy5vIHx8IGNvbmZpZy5vcGVyYXRpb247XG4gICAgY29uc3QgcGFyZW50Q29udGFpbmVyV2lkdGggPSB0aGlzLmNpU2VydmljZS5nZXRQYXJlbnRXaWR0aChpbWdOb2RlLCBjb25maWcpO1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUgfHwgdGhpcy5zIHx8IGNvbmZpZy5zaXplIHx8IHBhcmVudENvbnRhaW5lcldpZHRoO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZpbHRlcnMgfHwgdGhpcy5mIHx8IGNvbmZpZy5maWx0ZXJzO1xuICAgIGNvbnN0IGlzQWRhcHRpdmUgPSB0aGlzLmNpU2VydmljZS5jaGVja09uTWVkaWEoc2l6ZSk7XG4gICAgY29uc3QgaXNSZWxhdGl2ZVVybFBhdGggPSB0aGlzLmNpU2VydmljZS5jaGVja0lmUmVsYXRpdmVVcmxQYXRoKHRoaXMuc3JjKTtcbiAgICBjb25zdCBpbWdTcmMgPSB0aGlzLmNpU2VydmljZS5nZXRJbWdTcmModGhpcy5zcmMsIGlzUmVsYXRpdmVVcmxQYXRoLCBjb25maWcuYmFzZVVybCk7XG4gICAgY29uc3QgcmVzdWx0U2l6ZSA9IGlzQWRhcHRpdmUgPyBzaXplIDogdGhpcy5jaVNlcnZpY2UuZ2V0U2l6ZUFjY29yZGluZ1RvUGl4ZWxSYXRpbyhzaXplKTtcbiAgICB0aGlzLmlzUHJldmlldyA9ICFjb25maWcuaXNDaHJvbWUgJiYgKHBhcmVudENvbnRhaW5lcldpZHRoID4gNDAwKSAmJiBjb25maWcubGF6eUxvYWRpbmc7XG4gICAgdGhpcy5jbG91ZGltYWdlVXJsID0gaXNBZGFwdGl2ZSA/XG4gICAgICB0aGlzLmNpU2VydmljZS5nZW5lcmF0ZVVybCgnd2lkdGgnLCBwYXJlbnRDb250YWluZXJXaWR0aCwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpIDpcbiAgICAgIHRoaXMuY2lTZXJ2aWNlLmdlbmVyYXRlVXJsKG9wZXJhdGlvbiwgcmVzdWx0U2l6ZSwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpO1xuICAgIHRoaXMuc291cmNlcyA9IGlzQWRhcHRpdmUgP1xuICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVTb3VyY2VzKG9wZXJhdGlvbiwgcmVzdWx0U2l6ZSwgZmlsdGVycywgaW1nU3JjLCBpc0FkYXB0aXZlLCBjb25maWcsIGZhbHNlKSA6IFtdO1xuICAgIGxldCBwcmV2aWV3Q2xvdWRpbWFnZVVybCwgcHJldmlld1NvdXJjZXM7XG5cbiAgICBpZiAodGhpcy5pc1ByZXZpZXcpIHtcbiAgICAgIGNvbnN0IHByZXZpZXdDb25maWcgPSB7Li4uY29uZmlnLCBxdWVyeVN0cmluZzogJyd9O1xuICAgICAgcHJldmlld0Nsb3VkaW1hZ2VVcmwgPSBpc0FkYXB0aXZlID9cbiAgICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVVcmwoJ3dpZHRoJywgKHBhcmVudENvbnRhaW5lcldpZHRoIC8gNSksICdxMTAuZm9pbDEnLCBpbWdTcmMsIHByZXZpZXdDb25maWcpIDpcbiAgICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVVcmwob3BlcmF0aW9uLCByZXN1bHRTaXplLnNwbGl0KCd4JykubWFwKGl0ZW0gPT4gaXRlbSAvIDUpLmpvaW4oJ3gnKSwgJ3ExMC5mb2lsMScsIGltZ1NyYywgcHJldmlld0NvbmZpZyk7XG4gICAgICBwcmV2aWV3U291cmNlcyA9IGlzQWRhcHRpdmUgP1xuICAgICAgICB0aGlzLmNpU2VydmljZS5nZW5lcmF0ZVNvdXJjZXMob3BlcmF0aW9uLCByZXN1bHRTaXplLCAncTEwLmZvaWwxJywgaW1nU3JjLCBpc0FkYXB0aXZlLCBwcmV2aWV3Q29uZmlnLCB0cnVlKSA6IFtdO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlld0Nsb3VkaW1hZ2VVcmwgPSBwcmV2aWV3Q2xvdWRpbWFnZVVybDtcbiAgICB0aGlzLnByZXZpZXdTb3VyY2VzID0gcHJldmlld1NvdXJjZXM7XG4gICAgdGhpcy5pc0FkYXB0aXZlID0gaXNBZGFwdGl2ZTtcbiAgICB0aGlzLmFjdHVhbFNpemUgPSBzaXplO1xuICAgIHRoaXMucGFyZW50Q29udGFpbmVyV2lkdGggPSBwYXJlbnRDb250YWluZXJXaWR0aDtcbiAgICBjb25zdCByYXRpb0J5U2l6ZSA9IHRoaXMuY2lTZXJ2aWNlLmdldFJhdGlvQnlTaXplKHNpemUsIGNvbmZpZyk7XG4gICAgdGhpcy5pbWFnZUhlaWdodCA9IE1hdGguZmxvb3IocGFyZW50Q29udGFpbmVyV2lkdGggLyAocmF0aW9CeVNpemUgfHwgdGhpcy5yYXRpbyB8fCAxLjUpKTtcbiAgICB0aGlzLmlzUmF0aW8gPSAhIShyYXRpb0J5U2l6ZSB8fCB0aGlzLnJhdGlvKTtcbiAgICB0aGlzLnJhdGlvQnlTaXplID0gcmF0aW9CeVNpemU7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNQcm9jZXNzZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgb25JbWFnZUxvYWQoKSB7XG4gICAgaWYgKCF0aGlzLmlzUHJldmlldykge1xuICAgICAgdGhpcy5pc1ByZXZpZXdMb2FkZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUHJldmlld0xvYWRlZCkge1xuICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNQcmV2aWV3TG9hZGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRQb3NpdGlvblN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHRoaXMuaXNSYXRpbyA/ICdhYnNvbHV0ZScgOiAncmVsYXRpdmUnKTtcbiAgfVxuXG4gIGdldEltZ0hlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZSh0aGlzLmlzUmF0aW8gPyAnMTAwJScgOiAnYXV0bycpO1xuICB9XG5cbiAgZ2V0VHJhbnNmb3JtU3R5bGUoKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0aGlzLmNpU2VydmljZTtcbiAgICBsZXQgcmVzdWx0ID0gJ25vbmUnO1xuXG4gICAgaWYgKGNvbmZpZy5pbWdMb2FkaW5nQW5pbWF0aW9uKSB7XG4gICAgICByZXN1bHQgPSAnc2NhbGUzZCgxLjEsIDEuMSwgMSknO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTG9hZGVkICYmIGNvbmZpZy5pbWdMb2FkaW5nQW5pbWF0aW9uKSB7XG4gICAgICByZXN1bHQgPSAndHJhbnNsYXRlWigwKSBzY2FsZTNkKDEsIDEsIDEpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShyZXN1bHQpO1xuICB9XG5cbiAgZ2V0VHJhbnNpdGlvblN0eWxlKCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdGhpcy5jaVNlcnZpY2U7XG4gICAgbGV0IHJlc3VsdCA9ICdub25lJztcblxuICAgIGlmICh0aGlzLmlzTG9hZGVkICYmIGNvbmZpZy5pbWdMb2FkaW5nQW5pbWF0aW9uKSB7XG4gICAgICByZXN1bHQgPSAnYWxsIDAuM3MgZWFzZS1pbi1vdXQnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHJlc3VsdCk7XG4gIH1cblxuICBnZXRGaWx0ZXJTdHlsZSgpIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuY2lTZXJ2aWNlO1xuICAgIGxldCByZXN1bHQgPSAnbm9uZSc7XG5cbiAgICBpZiAoY29uZmlnLmltZ0xvYWRpbmdBbmltYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9IGBibHVyKCR7TWF0aC5mbG9vcihwYXJzZUludCh0aGlzLnBhcmVudENvbnRhaW5lcldpZHRoLCAxMCkgLyAxMDApfXB4KWA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNMb2FkZWQgJiYgY29uZmlnLmltZ0xvYWRpbmdBbmltYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9ICdibHVyKDBweCknO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHJlc3VsdCk7XG4gIH1cblxuICBnZXRQaWN0dXJlUGFkZGluZ0JvdHRvbSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgICBpZiAodGhpcy5pc1JhdGlvKSB7XG4gICAgICByZXN1bHQgPSAoMTAwIC8gKHRoaXMucmF0aW9CeVNpemUgfHwgdGhpcy5yYXRpbykpICsgJyUnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHJlc3VsdCk7XG4gIH1cblxuICBnZXRQaWN0dXJlQmFja2dyb3VuZCgpIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuY2lTZXJ2aWNlO1xuICAgIGxldCByZXN1bHQgPSAndHJhbnNwYXJlbnQnO1xuXG4gICAgaWYgKHRoaXMuaXNSYXRpbykge1xuICAgICAgcmVzdWx0ID0gY29uZmlnLnBsYWNlaG9sZGVyQmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShyZXN1bHQpO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWNsb3VkaW1hZ2UtcmVzcG9uc2l2ZS8iLCJzb3VyY2VzIjpbImxpYi9pbWcvaW1nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBeUIsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxFQUEyQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUE4RTVDLE1BQU0sT0FBTyxZQUFZOzs7OztJQXFDdkIsWUFBb0IsU0FBb0IsRUFBVSxVQUF3QjtRQUF0RCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQWpDakUsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQVNuQixXQUFNLEdBQUcsR0FBRyxDQUFDO1FBS3RCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBWXBCLHFCQUFnQixHQUFXLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFHM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUNsRCxDQUFDOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDOzs7O0lBRUQsUUFBUTtRQUNO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SUFDakIsbUNBQW9COztJQUNwQixtQ0FBcUI7O0lBQ3JCLG1DQUFvQjs7SUFDcEIsd0NBQTZDOzs7OztJQUVqQyxpQ0FBNEI7Ozs7O0lBQUUsa0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q0lTZXJ2aWNlfSBmcm9tICcuLi9saWIuc2VydmljZSc7XG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge2Zyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NpLWltZycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHBpY3R1cmUgI3BpY3R1cmVFbGVtICpuZ0lmPVwiIWlzUHJvY2Vzc2VkXCI+PC9waWN0dXJlPlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibGF6eUxvYWRpbmdcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgPHBpY3R1cmVcbiAgICAgICAgICBbY2xhc3NdPVwiY2xhc3MgKyAnIGNsb3VkaW1hZ2UtaW1hZ2UtcGljdHVyZSBjbG91ZGltYWdlLWltYWdlLScgKyAoaXNMb2FkZWQgPyAnbG9hZGVkJyA6ICdsb2FkaW5nJylcIlxuICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtcIlxuICAgICAgICAgIFtzdHlsZS5wYWRkaW5nQm90dG9tXT1cImdldFBpY3R1cmVQYWRkaW5nQm90dG9tKClcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImdldFBpY3R1cmVCYWNrZ3JvdW5kKClcIlxuICAgICAgICAgICNpbWdFbGVtXG4gICAgICAgICAgKm5nSWY9XCJpc1Byb2Nlc3NlZFwiPlxuICAgICAgICAgIDxzb3VyY2VcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzb3VyY2Ugb2YgZ2V0UmVzdFNvdXJjZXMoKVwiXG4gICAgICAgICAgICBbbWVkaWFdPVwic291cmNlLm1lZGlhUXVlcnkgfHwgJydcIlxuICAgICAgICAgICAgW2F0dHIubGF6eUxvYWRdPVwic291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICBbc3Jjc2V0XT1cInNvdXJjZS5zcmNTZXQgfHwgJydcIlxuICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQoKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c291cmNlXG4gICAgICAgICAgICAqbmdJZj1cImdldEZpcnN0U291cmNlKClcIlxuICAgICAgICAgICAgW2F0dHIubGF6eUxvYWRdPVwiZmlyc3RTb3VyY2Uuc3JjU2V0IHx8ICcnXCJcbiAgICAgICAgICAgIFtzcmNzZXRdPVwiZmlyc3RTb3VyY2Uuc3JjU2V0IHx8ICcnXCJcbiAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7b3BhY2l0eToxO3RvcDowO2xlZnQ6MDtcIlxuICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cImdldFBvc2l0aW9uU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImdldEltZ0hlaWdodCgpXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNmb3JtU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUudHJhbnNpdGlvbl09XCJnZXRUcmFuc2l0aW9uU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuZmlsdGVyXT1cImdldEZpbHRlclN0eWxlKClcIlxuICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQoKVwiXG4gICAgICAgICAgICBbbGF6eUxvYWRdPVwiIWlzUHJldmlldyA/IGNsb3VkaW1hZ2VVcmwgOiAoaXNQcmV2aWV3TG9hZGVkID8gY2xvdWRpbWFnZVVybCA6IHByZXZpZXdDbG91ZGltYWdlVXJsKVwiXG4gICAgICAgICAgICBbb2Zmc2V0XT1cIm9mZnNldFwiXG4gICAgICAgICAgICBbYWx0XT1cIlwiPlxuICAgICAgICA8L3BpY3R1cmU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCI+XG4gICAgICAgIDxwaWN0dXJlXG4gICAgICAgICAgW2NsYXNzXT1cImNsYXNzICsgJyBjbG91ZGltYWdlLWltYWdlLXBpY3R1cmUgY2xvdWRpbWFnZS1pbWFnZS0nICsgKGlzTG9hZGVkID8gJ2xvYWRlZCcgOiAnbG9hZGluZycpXCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7XCJcbiAgICAgICAgICBbc3R5bGUucGFkZGluZ0JvdHRvbV09XCJnZXRQaWN0dXJlUGFkZGluZ0JvdHRvbSgpXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRQaWN0dXJlQmFja2dyb3VuZCgpXCJcbiAgICAgICAgICAjaW1nRWxlbVxuICAgICAgICAgICpuZ0lmPVwiaXNQcm9jZXNzZWRcIj5cbiAgICAgICAgICA8c291cmNlXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc291cmNlIG9mIHJlc3RTb3VyY2VzXCJcbiAgICAgICAgICAgIFttZWRpYV09XCJzb3VyY2UubWVkaWFRdWVyeSB8fCAnJ1wiXG4gICAgICAgICAgICBbYXR0ci5sYXp5TG9hZF09XCJzb3VyY2Uuc3JjU2V0IHx8ICcnXCJcbiAgICAgICAgICAgIFtzcmNzZXRdPVwic291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzb3VyY2VcbiAgICAgICAgICAgICpuZ0lmPVwiZmlyc3RTb3VyY2VcIlxuICAgICAgICAgICAgW2F0dHIubGF6eUxvYWRdPVwiZmlyc3RTb3VyY2Uuc3JjU2V0IHx8ICcnXCJcbiAgICAgICAgICAgIFtzcmNzZXRdPVwiZmlyc3RTb3VyY2Uuc3JjU2V0IHx8ICcnXCJcbiAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7b3BhY2l0eToxO3RvcDowO2xlZnQ6MDtcIlxuICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cImdldFBvc2l0aW9uU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImdldEltZ0hlaWdodCgpXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNmb3JtU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUudHJhbnNpdGlvbl09XCJnZXRUcmFuc2l0aW9uU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuZmlsdGVyXT1cImdldEZpbHRlclN0eWxlKClcIlxuICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQoKVwiXG4gICAgICAgICAgICBbc3JjXT1cIiFpc1ByZXZpZXcgPyBjbG91ZGltYWdlVXJsIDogKGlzUHJldmlld0xvYWRlZCA/IGNsb3VkaW1hZ2VVcmwgOiBwcmV2aWV3Q2xvdWRpbWFnZVVybClcIlxuICAgICAgICAgICAgW2FsdF09XCJcIj5cbiAgICAgICAgPC9waWN0dXJlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgSW1nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdpbWdFbGVtJykgaW1nRWxlbTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncGljdHVyZUVsZW0nKSBwaWN0dXJlRWxlbTogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgc3JjOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgYWx0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wZXJhdGlvbjogc3RyaW5nO1xuICBASW5wdXQoKSBvOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNpemU6IHN0cmluZyB8IHt9O1xuICBASW5wdXQoKSBzOiBzdHJpbmcgfCB7fTtcbiAgQElucHV0KCkgZmlsdGVyczogc3RyaW5nO1xuICBASW5wdXQoKSBmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJhdGlvOiBudW1iZXI7XG4gIEBJbnB1dCgpIG9mZnNldCA9IDEwMDtcbiAgQElucHV0KCkgbmdTd2l0Y2g6IGFueTtcblxuICByZXNpemVPYnNlcnZhYmxlJDogT2JzZXJ2YWJsZTxFdmVudD47XG4gIHJlc2l6ZVN1YnNjcmlwdGlvbiQ6IFN1YnNjcmlwdGlvbjtcbiAgY2xvdWRpbWFnZVVybCA9ICcnO1xuICBzb3VyY2VzID0gW107XG4gIGZpcnN0U291cmNlID0gbnVsbDtcbiAgcmVzdFNvdXJjZXMgPSBbXTtcbiAgaXNMb2FkZWQgPSBmYWxzZTtcbiAgaXNQcm9jZXNzZWQgPSBmYWxzZTtcbiAgaXNQcmV2aWV3OiBib29sZWFuO1xuICBwcmV2aWV3Q2xvdWRpbWFnZVVybDogc3RyaW5nO1xuICBwcmV2aWV3U291cmNlczogc3RyaW5nO1xuICBpc0FkYXB0aXZlOiBib29sZWFuO1xuICBhY3R1YWxTaXplOiBzdHJpbmc7XG4gIHBhcmVudENvbnRhaW5lcldpZHRoOiBzdHJpbmc7XG4gIGlzUHJldmlld0xvYWRlZDogYm9vbGVhbjtcbiAgaXNSYXRpbzogYm9vbGVhbjtcbiAgcmF0aW9CeVNpemU6IG51bWJlcjtcbiAgbGF6eUxvYWRpbmc6IGJvb2xlYW47XG4gIGltYWdlSGVpZ2h0OiBudW1iZXI7XG4gIHdpbmRvd0lubmVyV2lkdGg6IG51bWJlciA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2lTZXJ2aWNlOiBDSVNlcnZpY2UsIHByaXZhdGUgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XG4gICAgdGhpcy5sYXp5TG9hZGluZyA9IGNpU2VydmljZS5jb25maWcubGF6eUxvYWRpbmc7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2YWJsZSQgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShkZWJvdW5jZVRpbWUoNTAwKSk7XG4gICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24kID0gdGhpcy5yZXNpemVPYnNlcnZhYmxlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNBZGFwdGl2ZSB8fCB0aGlzLndpbmRvd0lubmVyV2lkdGggPCB3aW5kb3cuaW5uZXJXaWR0aCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NJbWFnZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy53aW5kb3dJbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5wcm9jZXNzSW1hZ2UoKTtcbiAgfVxuXG4gIHByb2Nlc3NJbWFnZSgpIHtcbiAgICBjb25zdCBpbWdOb2RlID0gKHRoaXMuaW1nRWxlbSB8fCB0aGlzLnBpY3R1cmVFbGVtKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHtjb25maWd9ID0gdGhpcy5jaVNlcnZpY2U7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5vcGVyYXRpb24gfHwgdGhpcy5vIHx8IGNvbmZpZy5vcGVyYXRpb247XG4gICAgY29uc3QgcGFyZW50Q29udGFpbmVyV2lkdGggPSB0aGlzLmNpU2VydmljZS5nZXRQYXJlbnRXaWR0aChpbWdOb2RlLCBjb25maWcpO1xuICAgIGxldCBzaXplID0gdGhpcy5zaXplIHx8IHRoaXMucyB8fCBjb25maWcuc2l6ZSB8fCBwYXJlbnRDb250YWluZXJXaWR0aDtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzIHx8IHRoaXMuZiB8fCBjb25maWcuZmlsdGVycztcbiAgICBjb25zdCBpc0FkYXB0aXZlID0gdGhpcy5jaVNlcnZpY2UuY2hlY2tPbk1lZGlhKHNpemUpO1xuXG4gICAgc2l6ZSA9IGlzQWRhcHRpdmUgPyB0aGlzLmNpU2VydmljZS5nZXRBZGFwdGl2ZVNpemUoc2l6ZSwgY29uZmlnKSA6IHNpemU7XG5cbiAgICBjb25zdCBpc1JlbGF0aXZlVXJsUGF0aCA9IHRoaXMuY2lTZXJ2aWNlLmNoZWNrSWZSZWxhdGl2ZVVybFBhdGgodGhpcy5zcmMpO1xuICAgIGNvbnN0IGltZ1NyYyA9IHRoaXMuY2lTZXJ2aWNlLmdldEltZ1NyYyh0aGlzLnNyYywgaXNSZWxhdGl2ZVVybFBhdGgsIGNvbmZpZy5iYXNlVXJsKTtcbiAgICBjb25zdCByZXN1bHRTaXplID0gaXNBZGFwdGl2ZSA/IHNpemUgOiB0aGlzLmNpU2VydmljZS5nZXRTaXplQWNjb3JkaW5nVG9QaXhlbFJhdGlvKHNpemUpO1xuICAgIHRoaXMuaXNQcmV2aWV3ID0gIWNvbmZpZy5pc0Nocm9tZSAmJiAocGFyZW50Q29udGFpbmVyV2lkdGggPiA0MDApICYmIGNvbmZpZy5sYXp5TG9hZGluZztcbiAgICB0aGlzLmNsb3VkaW1hZ2VVcmwgPSBpc0FkYXB0aXZlID9cbiAgICAgIHRoaXMuY2lTZXJ2aWNlLmdlbmVyYXRlVXJsKCd3aWR0aCcsIHRoaXMuY2lTZXJ2aWNlLmdldFNpemVBY2NvcmRpbmdUb1BpeGVsUmF0aW8ocGFyZW50Q29udGFpbmVyV2lkdGgpLCBmaWx0ZXJzLCBpbWdTcmMsIGNvbmZpZykgOlxuICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVVcmwob3BlcmF0aW9uLCByZXN1bHRTaXplLCBmaWx0ZXJzLCBpbWdTcmMsIGNvbmZpZyk7XG4gICAgdGhpcy5zb3VyY2VzID0gaXNBZGFwdGl2ZSA/XG4gICAgICB0aGlzLmNpU2VydmljZS5nZW5lcmF0ZVNvdXJjZXMob3BlcmF0aW9uLCByZXN1bHRTaXplLCBmaWx0ZXJzLCBpbWdTcmMsIGlzQWRhcHRpdmUsIGNvbmZpZywgZmFsc2UpIDogW107XG4gICAgbGV0IHByZXZpZXdDbG91ZGltYWdlVXJsLCBwcmV2aWV3U291cmNlcztcblxuICAgIGlmICh0aGlzLmlzUHJldmlldykge1xuICAgICAgY29uc3QgcHJldmlld0NvbmZpZyA9IHsuLi5jb25maWcsIHF1ZXJ5U3RyaW5nOiAnJ307XG4gICAgICBwcmV2aWV3Q2xvdWRpbWFnZVVybCA9IGlzQWRhcHRpdmUgP1xuICAgICAgICB0aGlzLmNpU2VydmljZS5nZW5lcmF0ZVVybCgnd2lkdGgnLCAocGFyZW50Q29udGFpbmVyV2lkdGggLyA1KSwgJ3ExMC5mb2lsMScsIGltZ1NyYywgcHJldmlld0NvbmZpZykgOlxuICAgICAgICB0aGlzLmNpU2VydmljZS5nZW5lcmF0ZVVybChvcGVyYXRpb24sIHJlc3VsdFNpemUuc3BsaXQoJ3gnKS5tYXAoaXRlbSA9PiBpdGVtIC8gNSkuam9pbigneCcpLCAncTEwLmZvaWwxJywgaW1nU3JjLCBwcmV2aWV3Q29uZmlnKTtcbiAgICAgIHByZXZpZXdTb3VyY2VzID0gaXNBZGFwdGl2ZSA/XG4gICAgICAgIHRoaXMuY2lTZXJ2aWNlLmdlbmVyYXRlU291cmNlcyhvcGVyYXRpb24sIHJlc3VsdFNpemUsICdxMTAuZm9pbDEnLCBpbWdTcmMsIGlzQWRhcHRpdmUsIHByZXZpZXdDb25maWcsIHRydWUpIDogW107XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2aWV3Q2xvdWRpbWFnZVVybCA9IHByZXZpZXdDbG91ZGltYWdlVXJsO1xuICAgIHRoaXMucHJldmlld1NvdXJjZXMgPSBwcmV2aWV3U291cmNlcztcbiAgICB0aGlzLmlzQWRhcHRpdmUgPSBpc0FkYXB0aXZlO1xuICAgIHRoaXMuYWN0dWFsU2l6ZSA9IHNpemU7XG4gICAgdGhpcy5wYXJlbnRDb250YWluZXJXaWR0aCA9IHBhcmVudENvbnRhaW5lcldpZHRoO1xuICAgIGNvbnN0IHJhdGlvQnlTaXplID0gdGhpcy5jaVNlcnZpY2UuZ2V0UmF0aW9CeVNpemUoc2l6ZSwgY29uZmlnKTtcbiAgICB0aGlzLmltYWdlSGVpZ2h0ID0gTWF0aC5mbG9vcihwYXJlbnRDb250YWluZXJXaWR0aCAvIChyYXRpb0J5U2l6ZSB8fCB0aGlzLnJhdGlvIHx8IDEuNSkpO1xuICAgIHRoaXMuaXNSYXRpbyA9ICEhKHJhdGlvQnlTaXplIHx8IHRoaXMucmF0aW8pO1xuICAgIHRoaXMucmF0aW9CeVNpemUgPSByYXRpb0J5U2l6ZTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc1Byb2Nlc3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBvbkltYWdlTG9hZCgpIHtcbiAgICBpZiAoIXRoaXMuaXNQcmV2aWV3KSB7XG4gICAgICB0aGlzLmlzUHJldmlld0xvYWRlZCA9IHRydWU7XG4gICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNQcmV2aWV3TG9hZGVkKSB7XG4gICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1ByZXZpZXdMb2FkZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlc3RTb3VyY2VzKCkge1xuICAgIGNvbnN0IHJlc3VsdFNvdXJjZXMgPSBbLi4uKCF0aGlzLmlzUHJldmlldyA/IHRoaXMuc291cmNlcyA6ICh0aGlzLmlzUHJldmlld0xvYWRlZCA/IHRoaXMuc291cmNlcyA6IHRoaXMucHJldmlld1NvdXJjZXMpKV07XG5cbiAgICByZXR1cm4gcmVzdWx0U291cmNlcy5zbGljZSgxKS5yZXZlcnNlKCk7XG4gIH1cblxuICBnZXRGaXJzdFNvdXJjZSgpIHtcbiAgICBjb25zdCByZXN1bHRTb3VyY2VzID0gWy4uLighdGhpcy5pc1ByZXZpZXcgPyB0aGlzLnNvdXJjZXMgOiAodGhpcy5pc1ByZXZpZXdMb2FkZWQgPyB0aGlzLnNvdXJjZXMgOiB0aGlzLnByZXZpZXdTb3VyY2VzKSldO1xuICAgIHRoaXMuZmlyc3RTb3VyY2UgPSByZXN1bHRTb3VyY2VzWzBdO1xuXG4gICAgcmV0dXJuIHJlc3VsdFNvdXJjZXNbMF07XG4gIH1cblxuICBnZXRQb3NpdGlvblN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHRoaXMuaXNSYXRpbyA/ICdhYnNvbHV0ZScgOiAncmVsYXRpdmUnKTtcbiAgfVxuXG4gIGdldEltZ0hlaWdodCgpIHtcbiAgICAvLyB0b2RvIGNoZWNrIGlmIHdlIG5lZWQgMTAwJSBoZWlnaHRcbiAgICAvLyByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZSh0aGlzLmlzUmF0aW8gPyAnMTAwJScgOiAnYXV0bycpO1xuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHRoaXMuaXNSYXRpbyA/ICdhdXRvJyA6ICdhdXRvJyk7XG4gIH1cblxuICBnZXRUcmFuc2Zvcm1TdHlsZSgpIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuY2lTZXJ2aWNlO1xuICAgIGxldCByZXN1bHQgPSAnbm9uZSc7XG5cbiAgICBpZiAoY29uZmlnLmltZ0xvYWRpbmdBbmltYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9ICdzY2FsZTNkKDEuMSwgMS4xLCAxKSc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNMb2FkZWQgJiYgY29uZmlnLmltZ0xvYWRpbmdBbmltYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9ICd0cmFuc2xhdGVaKDApIHNjYWxlM2QoMSwgMSwgMSknO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHJlc3VsdCk7XG4gIH1cblxuICBnZXRUcmFuc2l0aW9uU3R5bGUoKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0aGlzLmNpU2VydmljZTtcbiAgICBsZXQgcmVzdWx0ID0gJ25vbmUnO1xuXG4gICAgaWYgKHRoaXMuaXNMb2FkZWQgJiYgY29uZmlnLmltZ0xvYWRpbmdBbmltYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9ICdhbGwgMC4zcyBlYXNlLWluLW91dCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUocmVzdWx0KTtcbiAgfVxuXG4gIGdldEZpbHRlclN0eWxlKCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdGhpcy5jaVNlcnZpY2U7XG4gICAgbGV0IHJlc3VsdCA9ICdub25lJztcblxuICAgIGlmIChjb25maWcuaW1nTG9hZGluZ0FuaW1hdGlvbikge1xuICAgICAgcmVzdWx0ID0gYGJsdXIoJHtNYXRoLmZsb29yKHBhcnNlSW50KHRoaXMucGFyZW50Q29udGFpbmVyV2lkdGgsIDEwKSAvIDEwMCl9cHgpYDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0xvYWRlZCAmJiBjb25maWcuaW1nTG9hZGluZ0FuaW1hdGlvbikge1xuICAgICAgcmVzdWx0ID0gJ2JsdXIoMHB4KSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUocmVzdWx0KTtcbiAgfVxuXG4gIGdldFBpY3R1cmVQYWRkaW5nQm90dG9tKCkge1xuICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgIGlmICh0aGlzLmlzUmF0aW8pIHtcbiAgICAgIHJlc3VsdCA9ICgxMDAgLyAodGhpcy5yYXRpb0J5U2l6ZSB8fCB0aGlzLnJhdGlvKSkgKyAnJSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUocmVzdWx0KTtcbiAgfVxuXG4gIGdldFBpY3R1cmVCYWNrZ3JvdW5kKCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdGhpcy5jaVNlcnZpY2U7XG4gICAgbGV0IHJlc3VsdCA9ICd0cmFuc3BhcmVudCc7XG5cbiAgICBpZiAodGhpcy5pc1JhdGlvICYmICF0aGlzLmlzUHJldmlld0xvYWRlZCAmJiAhdGhpcy5pc0xvYWRlZCkge1xuICAgICAgcmVzdWx0ID0gY29uZmlnLnBsYWNlaG9sZGVyQmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShyZXN1bHQpO1xuICB9XG59XG4iXX0= |
@@ -6,5 +6,5 @@ /** | ||
import { Injectable } from '@angular/core'; | ||
import { CIConfig } from './config.service'; | ||
import { CIConfig } from './config.model'; | ||
import * as i0 from "@angular/core"; | ||
import * as i1 from "./config.service"; | ||
import * as i1 from "./config.model"; | ||
export class CIService { | ||
@@ -30,15 +30,14 @@ /** | ||
baseUrl, | ||
presets: presets ? this.getPresets(presets, 'presets') : | ||
presets: presets ? presets : | ||
{ | ||
xs: 575, | ||
// up to 576 PHONE | ||
sm: 767, | ||
// 577 - 768 PHABLET | ||
md: 991, | ||
// 769 - 992 TABLET | ||
lg: 1199, | ||
// 993 - 1200 SMALL_LAPTOP_SCREEN | ||
xl: 3000 // from 1200 USUALSCREEN | ||
xs: '(max-width: 575px)', | ||
// to 575 PHONE | ||
sm: '(min-width: 576px)', | ||
// 576 - 767 PHABLET | ||
md: '(min-width: 768px)', | ||
// 768 - 991 TABLET | ||
lg: '(min-width: 992px)', | ||
// 992 - 1199 SMALL_LAPTOP_SCREEN | ||
xl: '(min-width: 1200px)' // from 1200 USUALSCREEN | ||
}, | ||
order: presets ? this.getPresets(presets, 'order') : ['xl', 'lg', 'md', 'sm', 'xs'], | ||
queryString, | ||
@@ -49,26 +48,2 @@ innerWidth: window.innerWidth, | ||
/** | ||
* @param {?=} value | ||
* @param {?=} type | ||
* @return {?} | ||
*/ | ||
getPresets(value = '', type) { | ||
/** @type {?} */ | ||
const splittedValues = value.split('|'); | ||
/** @type {?} */ | ||
const result = { presets: {}, order: [] }; | ||
for (let i = 0; i < splittedValues.length; i++) { | ||
/** @type {?} */ | ||
const splittedParam = splittedValues[i] && splittedValues[i].split(':'); | ||
/** @type {?} */ | ||
const prop = splittedParam[0] && splittedParam[0].trim(); | ||
/** @type {?} */ | ||
const val = splittedParam[1] && splittedParam[1].trim(); | ||
if (prop && val) { | ||
result.presets[prop] = val; | ||
result.order.unshift(prop); | ||
} | ||
} | ||
return result[type]; | ||
} | ||
/** | ||
* @param {?} img | ||
@@ -111,3 +86,7 @@ * @param {?} config | ||
} while (parentNode && !width); | ||
return width; | ||
/** @type {?} */ | ||
const letPadding = width && parentNode && parseInt(window.getComputedStyle(parentNode).paddingLeft, 10); | ||
/** @type {?} */ | ||
const rightPadding = parseInt(window.getComputedStyle(parentNode).paddingRight, 10); | ||
return width + (width ? (-letPadding - rightPadding) : 0); | ||
} | ||
@@ -119,26 +98,9 @@ /** | ||
getSizeLimit(currentSize) { | ||
return currentSize <= 25 ? '25' : | ||
currentSize <= 50 ? '50' : | ||
currentSize <= 100 ? '100' | ||
: currentSize <= 200 ? '200' | ||
: currentSize <= 300 ? '300' | ||
: currentSize <= 400 ? '400' | ||
: currentSize <= 500 ? '500' | ||
: currentSize <= 600 ? '600' | ||
: currentSize <= 700 ? '700' | ||
: currentSize <= 800 ? '800' | ||
: currentSize <= 900 ? '900' | ||
: currentSize <= 1000 ? '1000' | ||
: currentSize <= 1100 ? '1100' | ||
: currentSize <= 1200 ? '1200' | ||
: currentSize <= 1300 ? '1300' | ||
: currentSize <= 1400 ? '1400' | ||
: currentSize <= 1500 ? '1500' | ||
: currentSize <= 1600 ? '1600' | ||
: currentSize <= 1700 ? '1700' | ||
: currentSize <= 1800 ? '1800' | ||
: currentSize <= 1900 ? '1900' | ||
: currentSize <= 2400 ? '2400' | ||
: currentSize <= 2800 ? '2800' | ||
: '3600'; | ||
if (currentSize <= 25) { | ||
return '25'; | ||
} | ||
if (currentSize <= 50) { | ||
return '50'; | ||
} | ||
return (Math.ceil(currentSize / 100) * 100).toString(); | ||
} | ||
@@ -150,3 +112,10 @@ /** | ||
checkOnMedia(size) { | ||
return size && typeof size === 'object'; | ||
try { | ||
/** @type {?} */ | ||
const array = size.split(','); | ||
return array.length > 1; | ||
} | ||
catch (e) { | ||
return false; | ||
} | ||
} | ||
@@ -219,31 +188,17 @@ /** | ||
if (isAdaptive) { | ||
/** @type {?} */ | ||
const orderFiltered = []; | ||
for (let i = 0; i < config.order.length; i++) { | ||
/** @type {?} */ | ||
const nextSize = size[config.order[i]]; | ||
if (nextSize) { | ||
orderFiltered.unshift(config.order[i]); | ||
} | ||
} | ||
for (let i = 0; i < orderFiltered.length; i++) { | ||
/** @type {?} */ | ||
const isLast = !(i < orderFiltered.length - 1); | ||
/** @type {?} */ | ||
const nextSizeType = isLast ? orderFiltered[i - 1] : orderFiltered[i]; | ||
/** @type {?} */ | ||
let nextSize = size[orderFiltered[i]]; | ||
size.forEach(({ size: nextSize, media: mediaQuery }) => { | ||
if (isPreview) { | ||
nextSize = nextSize.split('x').map(item => item / 5).join('x'); | ||
nextSize = nextSize.split('x').map(sizeNext => sizeNext / 5).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
/** @type {?} */ | ||
const srcSet = this.generateSrcset(operation, nextSize, filters, imgSrc, config); | ||
/** @type {?} */ | ||
const mediaQuery = '(' + (isLast ? 'min' : 'max') + '-width: ' + (config.presets[nextSizeType] + (isLast ? 1 : 0)) + 'px)'; | ||
sources.push({ mediaQuery, srcSet }); | ||
} | ||
sources.push({ mediaQuery, srcSet: this.generateSrcset(operation, nextSize, filters, imgSrc, config) }); | ||
}); | ||
} | ||
else { | ||
if (isPreview) { | ||
size = size.split('x').map(sizeNext => sizeNext / 5).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
sources.push({ | ||
srcSet: this.generateSrcset(operation, size.split('x').map(item => item / 5).join('x'), 'q10.foil1', imgSrc, config) | ||
srcSet: this.generateSrcset(operation, size, filters, imgSrc, config) | ||
}); | ||
@@ -254,2 +209,21 @@ } | ||
/** | ||
* @param {?} size | ||
* @param {?} config | ||
* @return {?} | ||
*/ | ||
getAdaptiveSize(size, config) { | ||
/** @type {?} */ | ||
const arrayOfSizes = size.split(','); | ||
/** @type {?} */ | ||
const sizes = []; | ||
arrayOfSizes.forEach(string => { | ||
/** @type {?} */ | ||
const groups = string.match(/((?<variable>[a-z_][a-z_]*)|(?<media>\([\S\s]*\)))\s*(?<size>[0-9xp]*)/).groups; | ||
/** @type {?} */ | ||
const media = groups.media ? groups.media : config.presets[groups.variable]; | ||
sizes.push({ media, size: groups.size }); | ||
}); | ||
return sizes; | ||
} | ||
/** | ||
* @param {?} operation | ||
@@ -263,6 +237,3 @@ * @param {?} size | ||
generateSrcset(operation, size, filters, imgSrc, config) { | ||
/** @type {?} */ | ||
const imgWidth = size.toString().split('x')[0]; | ||
/** @type {?} */ | ||
const imgHeight = size.toString().split('x')[1]; | ||
const [imgWidth, imgHeight] = size.toString().split('x'); | ||
return this.generateImgSrc(operation, filters, imgSrc, imgWidth, imgHeight, 1, config); | ||
@@ -304,29 +275,9 @@ } | ||
/** @type {?} */ | ||
const breakPoint = this.getBreakPoint(config); | ||
const breakPointSource = this.getBreakPoint(size); | ||
/** @type {?} */ | ||
let orderIndex = config.order.indexOf(breakPoint); | ||
/** @type {?} */ | ||
let breakPointSize = null; | ||
do { | ||
/** @type {?} */ | ||
const nextBreakpoint = config.order[orderIndex]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndex--; | ||
} while (!breakPointSize && orderIndex >= 0); | ||
if (!breakPointSize) { | ||
/** @type {?} */ | ||
let orderIndexStepTwo = config.order.indexOf(breakPoint); | ||
do { | ||
/** @type {?} */ | ||
const nextBreakpoint = config.order[orderIndexStepTwo]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndexStepTwo++; | ||
} while (!breakPointSize && orderIndexStepTwo <= config.order.length); | ||
} | ||
width = breakPointSize.toString().split('x')[0]; | ||
height = breakPointSize.toString().split('x')[1]; | ||
const breakPointSize = breakPointSource ? breakPointSource.size : size[0].size; | ||
[width, height] = breakPointSize.toString().split('x'); | ||
} | ||
else { | ||
width = size.toString().split('x')[0]; | ||
height = size.toString().split('x')[1]; | ||
[width, height] = size.toString().split('x'); | ||
} | ||
@@ -339,12 +290,7 @@ if (width && height) { | ||
/** | ||
* @param {?} config | ||
* @param {?} size | ||
* @return {?} | ||
*/ | ||
getBreakPoint(config) { | ||
const { presets, order } = config; | ||
/** @type {?} */ | ||
const innerWidth = window.innerWidth; | ||
/** @type {?} */ | ||
const prevBreakPointLimit = order.findIndex(item => presets[item] < innerWidth); | ||
return order[prevBreakPointLimit - 1] || order[prevBreakPointLimit] || order[order.length - 1]; | ||
getBreakPoint(size) { | ||
return [...size].reverse().find(item => matchMedia(item.media).matches); | ||
} | ||
@@ -366,2 +312,2 @@ } | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1jbG91ZGltYWdlLXJlc3BvbnNpdmUvIiwic291cmNlcyI6WyJsaWIvbGliLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7QUFLMUMsTUFBTSxPQUFPLFNBQVM7Ozs7SUFHcEIsWUFBWSxRQUFrQjtRQUZ2QixXQUFNLEdBQVEsRUFBRSxDQUFDO2NBR2hCLEVBQ0osS0FBSyxHQUFHLEVBQUUsRUFDVixTQUFTLEdBQUcsYUFBYSxFQUN6QixTQUFTLEdBQUcsS0FBSyxFQUNqQixXQUFXLEdBQUcsSUFBSSxFQUNsQixtQkFBbUIsR0FBRyxJQUFJLEVBQzFCLGNBQWMsR0FBRyxHQUFHLEVBQ3BCLEtBQUssR0FBRyxLQUFLLEVBQ2IsTUFBTSxHQUFHLEtBQUssRUFDZCxTQUFTLEdBQUcsT0FBTyxFQUNuQixPQUFPLEdBQUcsR0FBRyxFQUNiLHFCQUFxQixHQUFHLFNBQVMsRUFDakMsT0FBTyxHQUFHLEdBQUcsRUFDYixPQUFPLEVBQ1AsV0FBVyxHQUFHLEVBQUUsRUFDakIsR0FBRyxRQUFRO1FBRVosSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEtBQUs7WUFDTCxTQUFTO1lBQ1QsU0FBUztZQUNULFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsY0FBYztZQUNkLEtBQUs7WUFDTCxNQUFNO1lBQ04sU0FBUztZQUNULE9BQU87WUFDUCxxQkFBcUI7WUFDckIsT0FBTztZQUNQLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3REO29CQUNFLEVBQUUsRUFBRSxHQUFHOztvQkFDUCxFQUFFLEVBQUUsR0FBRzs7b0JBQ1AsRUFBRSxFQUFF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RS9FLE9BQU8sS0FBSyxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7OztZQTdRRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFKTyxRQUFROzs7OztJQU1kLDJCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NJQ29uZmlnfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ0lTZXJ2aWNlIHtcbiAgcHVibGljIGNvbmZpZzogYW55ID0ge307XG5cbiAgY29uc3RydWN0b3IoY2lDb25maWc6IENJQ29uZmlnKSB7XG4gICAgY29uc3Qge1xuICAgICAgdG9rZW4gPSAnJyxcbiAgICAgIGNvbnRhaW5lciA9ICdjbG91ZGltZy5pbycsXG4gICAgICB1bHRyYUZhc3QgPSBmYWxzZSxcbiAgICAgIGxhenlMb2FkaW5nID0gdHJ1ZSxcbiAgICAgIGltZ0xvYWRpbmdBbmltYXRpb24gPSB0cnVlLFxuICAgICAgbGF6eUxvYWRPZmZzZXQgPSAxMDAsXG4gICAgICB3aWR0aCA9ICc0MDAnLFxuICAgICAgaGVpZ2h0ID0gJzMwMCcsXG4gICAgICBvcGVyYXRpb24gPSAnd2lkdGgnLFxuICAgICAgZmlsdGVycyA9ICduJyxcbiAgICAgIHBsYWNlaG9sZGVyQmFja2dyb3VuZCA9ICcjZjRmNGY0JyxcbiAgICAgIGJhc2VVcmwgPSAnLycsXG4gICAgICBwcmVzZXRzLFxuICAgICAgcXVlcnlTdHJpbmcgPSAnJ1xuICAgIH0gPSBjaUNvbmZpZztcblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgdG9rZW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICB1bHRyYUZhc3QsXG4gICAgICBsYXp5TG9hZGluZyxcbiAgICAgIGltZ0xvYWRpbmdBbmltYXRpb24sXG4gICAgICBsYXp5TG9hZE9mZnNldCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgZmlsdGVycyxcbiAgICAgIHBsYWNlaG9sZGVyQmFja2dyb3VuZCxcbiAgICAgIGJhc2VVcmwsXG4gICAgICBwcmVzZXRzOiBwcmVzZXRzID8gdGhpcy5nZXRQcmVzZXRzKHByZXNldHMsICdwcmVzZXRzJykgOlxuICAgICAgICB7XG4gICAgICAgICAgeHM6IDU3NSwgIC8vIHVwIHRvIDU3NiAgICBQSE9ORVxuICAgICAgICAgIHNtOiA3NjcsICAvLyA1NzcgLSA3NjggICAgUEhBQkxFVFxuICAgICAgICAgIG1kOiA5OTEsICAvLyA3NjkgLSA5OTIgICAgVEFCTEVUXG4gICAgICAgICAgbGc6IDExOTksIC8vIDk5MyAtIDEyMDAgICBTTUFMTF9MQVBUT1BfU0NSRUVOXG4gICAgICAgICAgeGw6IDMwMDAgIC8vIGZyb20gMTIwMCAgICBVU1VBTFNDUkVFTlxuICAgICAgICB9LFxuICAgICAgb3JkZXI6IHByZXNldHMgPyB0aGlzLmdldFByZXNldHMocHJlc2V0cywgJ29yZGVyJykgOiBbJ3hsJywgJ2xnJywgJ21kJywgJ3NtJywgJ3hzJ10sXG4gICAgICBxdWVyeVN0cmluZyxcbiAgICAgIGlubmVyV2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgLy8gaXNDaHJvbWU6IC9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL0dvb2dsZSBJbmMvLnRlc3QobmF2aWdhdG9yLnZlbmRvcilcbiAgICB9O1xuICB9XG5cbiAgZ2V0UHJlc2V0cyh2YWx1ZSA9ICcnLCB0eXBlKSB7XG4gICAgY29uc3Qgc3BsaXR0ZWRWYWx1ZXMgPSB2YWx1ZS5zcGxpdCgnfCcpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtwcmVzZXRzOiB7fSwgb3JkZXI6IFtdfTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXR0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNwbGl0dGVkUGFyYW0gPSBzcGxpdHRlZFZhbHVlc1tpXSAmJiBzcGxpdHRlZFZhbHVlc1tpXS5zcGxpdCgnOicpO1xuICAgICAgY29uc3QgcHJvcCA9IHNwbGl0dGVkUGFyYW1bMF0gJiYgc3BsaXR0ZWRQYXJhbVswXS50cmltKCk7XG4gICAgICBjb25zdCB2YWwgPSBzcGxpdHRlZFBhcmFtWzFdICYmIHNwbGl0dGVkUGFyYW1bMV0udHJpbSgpO1xuXG4gICAgICBpZiAocHJvcCAmJiB2YWwpIHtcbiAgICAgICAgcmVzdWx0LnByZXNldHNbcHJvcF0gPSB2YWw7XG4gICAgICAgIHJlc3VsdC5vcmRlci51bnNoaWZ0KHByb3ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRbdHlwZV07XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFyZW50V2lkdGgoaW1nLCBjb25maWcpIHtcbiAgICBpZiAoIShpbWcgJiYgaW1nLnBhcmVudEVsZW1lbnQgJiYgaW1nLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSAmJiAhKGltZyAmJiBpbWcud2lkdGgpKSB7XG4gICAgICByZXR1cm4gY29uZmlnLndpZHRoO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudENvbnRhaW5lciA9IHRoaXMuZ2V0UGFyZW50Q29udGFpbmVyV2l0aFdpZHRoKGltZyk7XG4gICAgY29uc3QgY3VycmVudFdpZHRoID0gcGFyc2VJbnQoJycgKyBwYXJlbnRDb250YWluZXIsIDEwKTtcbiAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gTnVtYmVyKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGltZykud2lkdGgpO1xuXG4gICAgaWYgKChjb21wdXRlZFdpZHRoICYmIChjb21wdXRlZFdpZHRoIDwgY3VycmVudFdpZHRoICYmIGNvbXB1dGVkV2lkdGggPiAxNSkgfHwgIWN1cnJlbnRXaWR0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNpemVMaW1pdChjb21wdXRlZFdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjdXJyZW50V2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGltZy53aWR0aCB8fCBjb25maWcud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFNpemVMaW1pdChjdXJyZW50V2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhcmVudENvbnRhaW5lcldpdGhXaWR0aChpbWcpIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgbGV0IHdpZHRoID0gMDtcblxuICAgIGRvIHtcbiAgICAgIHBhcmVudE5vZGUgPSAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLnBhcmVudE5vZGUpIHx8IGltZy5wYXJlbnROb2RlO1xuICAgICAgd2lkdGggPSBwYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH0gd2hpbGUgKHBhcmVudE5vZGUgJiYgIXdpZHRoKTtcblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldFNpemVMaW1pdChjdXJyZW50U2l6ZSkge1xuICAgIHJldHVybiBjdXJyZW50U2l6ZSA8PSAyNSA/ICcyNScgOlxuICAgICAgY3VycmVudFNpemUgPD0gNTAgPyAnNTAnIDpcbiAgICAgICAgY3VycmVudFNpemUgPD0gMTAwID8gJzEwMCdcbiAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDIwMCA/ICcyMDAnXG4gICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAzMDAgPyAnMzAwJ1xuICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSA0MDAgPyAnNDAwJ1xuICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDUwMCA/ICc1MDAnXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSA2MDAgPyAnNjAwJ1xuICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSA3MDAgPyAnNzAwJ1xuICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDgwMCA/ICc4MDAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSA5MDAgPyAnOTAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxMDAwID8gJzEwMDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMTEwMCA/ICcxMTAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMTIwMCA/ICcxMjAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxMzAwID8gJzEzMDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMTQwMCA/ICcxNDAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMTUwMCA/ICcxNTAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxNjAwID8gJzE2MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMTcwMCA/ICcxNzAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMTgwMCA/ICcxODAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxOTAwID8gJzE5MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMjQwMCA/ICcyNDAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMjgwMCA/ICcyODAwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMzYwMCc7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tPbk1lZGlhKHNpemUpIHtcbiAgICByZXR1cm4gc2l6ZSAmJiB0eXBlb2Ygc2l6ZSA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tJZlJlbGF0aXZlVXJsUGF0aChzcmMpIHtcbiAgICBpZiAoc3JjLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgIHNyYyA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIHNyYztcbiAgICB9XG4gICAgcmV0dXJuIChzcmMuaW5kZXhPZignaHR0cDovLycpICE9PSAwICYmIHNyYy5pbmRleE9mKCdodHRwczovLycpICE9PSAwICYmIHNyYy5pbmRleE9mKCcvLycpICE9PSAwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbWdTcmMoc3JjLCBpc1JlbGF0aXZlVXJsUGF0aCA9IGZhbHNlLCBiYXNlVXJsID0gJycpIHtcbiAgICBpZiAoaXNSZWxhdGl2ZVVybFBhdGgpIHtcbiAgICAgIHJldHVybiBiYXNlVXJsICsgc3JjO1xuICAgIH1cblxuICAgIHJldHVybiBzcmM7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2l6ZUFjY29yZGluZ1RvUGl4ZWxSYXRpbyhzaXplKSB7XG4gICAgY29uc3Qgc3BsaXR0ZWRTaXplcyA9IHNpemUudG9TdHJpbmcoKS5zcGxpdCgneCcpO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgW10uZm9yRWFjaC5jYWxsKHNwbGl0dGVkU2l6ZXMsIGl0ZW0gPT4ge1xuICAgICAgcmVzdWx0LnB1c2goaXRlbSAqIE1hdGgucm91bmQod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCd4Jyk7XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVVcmwob3BlcmF0aW9uLCBzaXplLCBmaWx0ZXJzLCBpbWdTcmMsIGNvbmZpZykge1xuICAgIGNvbnN0IHt1bHRyYUZhc3QsIHRva2VuLCBjb250YWluZXIsIHF1ZXJ5U3RyaW5nfSA9IGNvbmZpZztcbiAgICBjb25zdCBpc1VsdHJhRmFzdCA9IHVsdHJhRmFzdCA/ICdodHRwczovL3NjYWxlZmxleC51bHRyYWZhc3QuaW8vJyA6ICdodHRwczovLyc7XG4gICAgY29uc3QgY2xvdWRVcmwgPSBpc1VsdHJhRmFzdCArIHRva2VuICsgJy4nICsgY29udGFpbmVyICsgJy8nO1xuXG4gICAgcmV0dXJuIGNsb3VkVXJsICsgb3BlcmF0aW9uICsgJy8nICsgc2l6ZSArICcvJyArIGZpbHRlcnMgKyAnLycgKyBpbWdTcmMgKyBxdWVyeVN0cmluZztcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZVNvdXJjZXMob3BlcmF0aW9uLCBzaXplLCBmaWx0ZXJzLCBpbWdTcmMsIGlzQWRhcHRpdmUsIGNvbmZpZywgaXNQcmV2aWV3KSB7XG4gICAgY29uc3Qgc291cmNlcyA9IFtdO1xuXG4gICAgaWYgKGlzQWRhcHRpdmUpIHtcbiAgICAgIGNvbnN0IG9yZGVyRmlsdGVyZWQgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWcub3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmV4dFNpemUgPSBzaXplW2NvbmZpZy5vcmRlcltpXV07XG5cbiAgICAgICAgaWYgKG5leHRTaXplKSB7XG4gICAgICAgICAgb3JkZXJGaWx0ZXJlZC51bnNoaWZ0KGNvbmZpZy5vcmRlcltpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckZpbHRlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlzTGFzdCA9ICEoaSA8IG9yZGVyRmlsdGVyZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IG5leHRTaXplVHlwZSA9IGlzTGFzdCA/IG9yZGVyRmlsdGVyZWRbaSAtIDFdIDogb3JkZXJGaWx0ZXJlZFtpXTtcbiAgICAgICAgbGV0IG5leHRTaXplID0gc2l6ZVtvcmRlckZpbHRlcmVkW2ldXTtcblxuICAgICAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICAgICAgbmV4dFNpemUgPSBuZXh0U2l6ZS5zcGxpdCgneCcpLm1hcChpdGVtID0+IGl0ZW0gLyA1KS5qb2luKCd4Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcmNTZXQgPSB0aGlzLmdlbmVyYXRlU3Jjc2V0KG9wZXJhdGlvbiwgbmV4dFNpemUsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKTtcbiAgICAgICAgY29uc3QgbWVkaWFRdWVyeSA9ICcoJyArIChpc0xhc3QgPyAnbWluJyA6ICdtYXgnKSArICctd2lkdGg6ICcgKyAoY29uZmlnLnByZXNldHNbbmV4dFNpemVUeXBlXSArIChpc0xhc3QgPyAxIDogMCkpICsgJ3B4KSc7XG5cbiAgICAgICAgc291cmNlcy5wdXNoKHttZWRpYVF1ZXJ5LCBzcmNTZXR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc291cmNlcy5wdXNoKHtcbiAgICAgICAgc3JjU2V0OiB0aGlzLmdlbmVyYXRlU3Jjc2V0KG9wZXJhdGlvbiwgc2l6ZS5zcGxpdCgneCcpLm1hcChpdGVtID0+IGl0ZW0gLyA1KS5qb2luKCd4JyksICdxMTAuZm9pbDEnLCBpbWdTcmMsIGNvbmZpZylcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG5cbiAgZ2VuZXJhdGVTcmNzZXQob3BlcmF0aW9uLCBzaXplLCBmaWx0ZXJzLCBpbWdTcmMsIGNvbmZpZykge1xuICAgIGNvbnN0IGltZ1dpZHRoID0gc2l6ZS50b1N0cmluZygpLnNwbGl0KCd4JylbMF07XG4gICAgY29uc3QgaW1nSGVpZ2h0ID0gc2l6ZS50b1N0cmluZygpLnNwbGl0KCd4JylbMV07XG5cbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUltZ1NyYyhvcGVyYXRpb24sIGZpbHRlcnMsIGltZ1NyYywgaW1nV2lkdGgsIGltZ0hlaWdodCwgMSwgY29uZmlnKTtcbiAgfVxuXG4gIGdlbmVyYXRlSW1nU3JjKG9wZXJhdGlvbiwgZmlsdGVycywgaW1nU3JjLCBpbWdXaWR0aCwgaW1nSGVpZ2h0LCBmYWN0b3IsIGNvbmZpZykge1xuICAgIGxldCBpbWdTaXplID0gJycgKyBNYXRoLnRydW5jKGltZ1dpZHRoICogZmFjdG9yKTtcblxuICAgIGlmIChpbWdIZWlnaHQpIHtcbiAgICAgIGltZ1NpemUgKz0gJ3gnICsgTWF0aC50cnVuYyhpbWdIZWlnaHQgKiBmYWN0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlVXJsKG9wZXJhdGlvbiwgdGhpcy5nZXRTaXplQWNjb3JkaW5nVG9QaXhlbFJhdGlvKGltZ1NpemUpLCBmaWx0ZXJzLCBpbWdTcmMsIGNvbmZpZylcbiAgICAgIC5yZXBsYWNlKCdodHRwOi8vc2NhbGVmbGV4LnVsdHJhZmFzdC5pby8nLCAnJylcbiAgICAgIC5yZXBsYWNlKCdodHRwczovL3NjYWxlZmxleC51bHRyYWZhc3QuaW8vJywgJycpXG4gICAgICAucmVwbGFjZSgnLy9zY2FsZWZsZXgudWx0cmFmYXN0LmlvLycsICcnKVxuICAgICAgLnJlcGxhY2UoJy8vLycsICcvJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmF0aW9CeVNpemUoc2l6ZSwgY29uZmlnKSB7XG4gICAgbGV0IHdpZHRoLCBoZWlnaHQ7XG5cbiAgICBpZiAodHlwZW9mIHNpemUgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KGNvbmZpZyk7XG4gICAgICBsZXQgb3JkZXJJbmRleCA9IGNvbmZpZy5vcmRlci5pbmRleE9mKGJyZWFrUG9pbnQpO1xuICAgICAgbGV0IGJyZWFrUG9pbnRTaXplID0gbnVsbDtcblxuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBuZXh0QnJlYWtwb2ludCA9IGNvbmZpZy5vcmRlcltvcmRlckluZGV4XTtcbiAgICAgICAgYnJlYWtQb2ludFNpemUgPSBzaXplW25leHRCcmVha3BvaW50XTtcbiAgICAgICAgb3JkZXJJbmRleC0tO1xuICAgICAgfSB3aGlsZSAoIWJyZWFrUG9pbnRTaXplICYmIG9yZGVySW5kZXggPj0gMCk7XG5cbiAgICAgIGlmICghYnJlYWtQb2ludFNpemUpIHtcbiAgICAgICAgbGV0IG9yZGVySW5kZXhTdGVwVHdvID0gY29uZmlnLm9yZGVyLmluZGV4T2YoYnJlYWtQb2ludCk7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIGNvbnN0IG5leHRCcmVha3BvaW50ID0gY29uZmlnLm9yZGVyW29yZGVySW5kZXhTdGVwVHdvXTtcbiAgICAgICAgICBicmVha1BvaW50U2l6ZSA9IHNpemVbbmV4dEJyZWFrcG9pbnRdO1xuICAgICAgICAgIG9yZGVySW5kZXhTdGVwVHdvKys7XG4gICAgICAgIH0gd2hpbGUgKCFicmVha1BvaW50U2l6ZSAmJiBvcmRlckluZGV4U3RlcFR3byA8PSBjb25maWcub3JkZXIubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgd2lkdGggPSBicmVha1BvaW50U2l6ZS50b1N0cmluZygpLnNwbGl0KCd4JylbMF07XG4gICAgICBoZWlnaHQgPSBicmVha1BvaW50U2l6ZS50b1N0cmluZygpLnNwbGl0KCd4JylbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gc2l6ZS50b1N0cmluZygpLnNwbGl0KCd4JylbMF07XG4gICAgICBoZWlnaHQgPSBzaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKVsxXTtcbiAgICB9XG5cbiAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gd2lkdGggLyBoZWlnaHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRCcmVha1BvaW50KGNvbmZpZykge1xuICAgIGNvbnN0IHtwcmVzZXRzLCBvcmRlcn0gPSBjb25maWc7XG4gICAgY29uc3QgaW5uZXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGNvbnN0IHByZXZCcmVha1BvaW50TGltaXQgPSBvcmRlci5maW5kSW5kZXgoaXRlbSA9PiBwcmVzZXRzW2l0ZW1dIDwgaW5uZXJXaWR0aCk7XG5cbiAgICByZXR1cm4gb3JkZXJbcHJldkJyZWFrUG9pbnRMaW1pdCAtIDFdIHx8IG9yZGVyW3ByZXZCcmVha1BvaW50TGltaXRdIHx8IG9yZGVyW29yZGVyLmxlbmd0aCAtIDFdO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1jbG91ZGltYWdlLXJlc3BvbnNpdmUvIiwic291cmNlcyI6WyJsaWIvbGliLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFLeEMsTUFBTSxPQUFPLFNBQVM7Ozs7SUFHcEIsWUFBWSxRQUFrQjtRQUY5QixXQUFNLEdBQVEsRUFBRSxDQUFDO2NBR1QsRUFDSixLQUFLLEdBQUcsRUFBRSxFQUNWLFNBQVMsR0FBRyxhQUFhLEVBQ3pCLFNBQVMsR0FBRyxLQUFLLEVBQ2pCLFdBQVcsR0FBRyxJQUFJLEVBQ2xCLG1CQUFtQixHQUFHLElBQUksRUFDMUIsY0FBYyxHQUFHLEdBQUcsRUFDcEIsS0FBSyxHQUFHLEtBQUssRUFDYixNQUFNLEdBQUcsS0FBSyxFQUNkLFNBQVMsR0FBRyxPQUFPLEVBQ25CLE9BQU8sR0FBRyxHQUFHLEVBQ2IscUJBQXFCLEdBQUcsU0FBUyxFQUNqQyxPQUFPLEdBQUcsR0FBRyxFQUNiLE9BQU8sRUFDUCxXQUFXLEdBQUcsRUFBRSxFQUNqQixHQUFHLFFBQVE7UUFFWixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osS0FBSztZQUNMLFNBQVM7WUFDVCxTQUFTO1lBQ1QsV0FBVztZQUNYLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsS0FBSztZQUNMLE1BQU07WUFDTixTQUFTO1lBQ1QsT0FBTztZQUNQLHFCQUFxQjtZQUNyQixPQUFPO1lBQ1AsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFCO29CQUNFLEVBQUUsRUFBRSxvQkFBb0I7O29CQUN4QixFQUFFLEVBQUUsb0JBQW9COztvQkFDeEIsRUFBRSxFQUFFLG9CQUFvQjs7b0JBQ3hCLEVBQUUsRUFBRSxvQkFB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QUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNMLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDbkIsT0FBTyxLQUFLLEdBQUcsTUFBTSxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUVELGFBQWEsQ0FBQyxJQUFJO1FBQ2hCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7O1lBOU5GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQUpPLFFBQVE7Ozs7O0lBTWQsMkJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q0lDb25maWd9IGZyb20gJy4vY29uZmlnLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ0lTZXJ2aWNlIHtcbiAgY29uZmlnOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihjaUNvbmZpZzogQ0lDb25maWcpIHtcbiAgICBjb25zdCB7XG4gICAgICB0b2tlbiA9ICcnLFxuICAgICAgY29udGFpbmVyID0gJ2Nsb3VkaW1nLmlvJyxcbiAgICAgIHVsdHJhRmFzdCA9IGZhbHNlLFxuICAgICAgbGF6eUxvYWRpbmcgPSB0cnVlLFxuICAgICAgaW1nTG9hZGluZ0FuaW1hdGlvbiA9IHRydWUsXG4gICAgICBsYXp5TG9hZE9mZnNldCA9IDEwMCxcbiAgICAgIHdpZHRoID0gJzQwMCcsXG4gICAgICBoZWlnaHQgPSAnMzAwJyxcbiAgICAgIG9wZXJhdGlvbiA9ICd3aWR0aCcsXG4gICAgICBmaWx0ZXJzID0gJ24nLFxuICAgICAgcGxhY2Vob2xkZXJCYWNrZ3JvdW5kID0gJyNmNGY0ZjQnLFxuICAgICAgYmFzZVVybCA9ICcvJyxcbiAgICAgIHByZXNldHMsXG4gICAgICBxdWVyeVN0cmluZyA9ICcnXG4gICAgfSA9IGNpQ29uZmlnO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICB0b2tlbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHVsdHJhRmFzdCxcbiAgICAgIGxhenlMb2FkaW5nLFxuICAgICAgaW1nTG9hZGluZ0FuaW1hdGlvbixcbiAgICAgIGxhenlMb2FkT2Zmc2V0LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBvcGVyYXRpb24sXG4gICAgICBmaWx0ZXJzLFxuICAgICAgcGxhY2Vob2xkZXJCYWNrZ3JvdW5kLFxuICAgICAgYmFzZVVybCxcbiAgICAgIHByZXNldHM6IHByZXNldHMgPyBwcmVzZXRzIDpcbiAgICAgICAge1xuICAgICAgICAgIHhzOiAnKG1heC13aWR0aDogNTc1cHgpJywgIC8vIHRvIDU3NSAgICAgICBQSE9ORVxuICAgICAgICAgIHNtOiAnKG1pbi13aWR0aDogNTc2cHgpJywgIC8vIDU3NiAtIDc2NyAgICBQSEFCTEVUXG4gICAgICAgICAgbWQ6ICcobWluLXdpZHRoOiA3NjhweCknLCAgLy8gNzY4IC0gOTkxICAgIFRBQkxFVFxuICAgICAgICAgIGxnOiAnKG1pbi13aWR0aDogOTkycHgpJywgIC8vIDk5MiAtIDExOTkgICBTTUFMTF9MQVBUT1BfU0NSRUVOXG4gICAgICAgICAgeGw6ICcobWluLXdpZHRoOiAxMjAwcHgpJyAgLy8gZnJvbSAxMjAwICAgIFVTVUFMU0NSRUVOXG4gICAgICAgIH0sXG4gICAgICBxdWVyeVN0cmluZyxcbiAgICAgIGlubmVyV2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgLy8gaXNDaHJvbWU6IC9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL0dvb2dsZSBJbmMvLnRlc3QobmF2aWdhdG9yLnZlbmRvcilcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGFyZW50V2lkdGgoaW1nLCBjb25maWcpIHtcbiAgICBpZiAoIShpbWcgJiYgaW1nLnBhcmVudEVsZW1lbnQgJiYgaW1nLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSAmJiAhKGltZyAmJiBpbWcud2lkdGgpKSB7XG4gICAgICByZXR1cm4gY29uZmlnLndpZHRoO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudENvbnRhaW5lciA9IHRoaXMuZ2V0UGFyZW50Q29udGFpbmVyV2l0aFdpZHRoKGltZyk7XG4gICAgY29uc3QgY3VycmVudFdpZHRoID0gcGFyc2VJbnQoJycgKyBwYXJlbnRDb250YWluZXIsIDEwKTtcbiAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gTnVtYmVyKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGltZykud2lkdGgpO1xuXG4gICAgaWYgKChjb21wdXRlZFdpZHRoICYmIChjb21wdXRlZFdpZHRoIDwgY3VycmVudFdpZHRoICYmIGNvbXB1dGVkV2lkdGggPiAxNSkgfHwgIWN1cnJlbnRXaWR0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNpemVMaW1pdChjb21wdXRlZFdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjdXJyZW50V2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGltZy53aWR0aCB8fCBjb25maWcud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFNpemVMaW1pdChjdXJyZW50V2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhcmVudENvbnRhaW5lcldpdGhXaWR0aChpbWcpIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgbGV0IHdpZHRoID0gMDtcblxuICAgIGRvIHtcbiAgICAgIHBhcmVudE5vZGUgPSAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLnBhcmVudE5vZGUpIHx8IGltZy5wYXJlbnROb2RlO1xuICAgICAgd2lkdGggPSBwYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH0gd2hpbGUgKHBhcmVudE5vZGUgJiYgIXdpZHRoKTtcblxuICAgIGNvbnN0IGxldFBhZGRpbmcgPSB3aWR0aCAmJiBwYXJlbnROb2RlICYmIHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudE5vZGUpLnBhZGRpbmdMZWZ0LCAxMCk7XG4gICAgY29uc3QgcmlnaHRQYWRkaW5nID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucGFkZGluZ1JpZ2h0LCAxMCk7XG5cbiAgICByZXR1cm4gd2lkdGggKyAod2lkdGggPyAoLWxldFBhZGRpbmcgLSByaWdodFBhZGRpbmcpIDogMCk7XG4gIH1cblxuICBnZXRTaXplTGltaXQoY3VycmVudFNpemUpIHtcbiAgICBpZiAoY3VycmVudFNpemUgPD0gMjUpIHtcbiAgICAgIHJldHVybiAnMjUnO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFNpemUgPD0gNTApIHtcbiAgICAgIHJldHVybiAnNTAnO1xuICAgIH1cblxuICAgIHJldHVybiAoTWF0aC5jZWlsKGN1cnJlbnRTaXplIC8gMTAwKSAqIDEwMCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNoZWNrT25NZWRpYShzaXplKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFycmF5ID0gc2l6ZS5zcGxpdCgnLCcpO1xuXG4gICAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tJZlJlbGF0aXZlVXJsUGF0aChzcmMpIHtcbiAgICBpZiAoc3JjLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgIHNyYyA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIHNyYztcbiAgICB9XG5cbiAgICByZXR1cm4gKHNyYy5pbmRleE9mKCdodHRwOi8vJykgIT09IDAgJiYgc3JjLmluZGV4T2YoJ2h0dHBzOi8vJykgIT09IDAgJiYgc3JjLmluZGV4T2YoJy8vJykgIT09IDApO1xuICB9XG5cbiAgZ2V0SW1nU3JjKHNyYywgaXNSZWxhdGl2ZVVybFBhdGggPSBmYWxzZSwgYmFzZVVybCA9ICcnKSB7XG4gICAgaWYgKGlzUmVsYXRpdmVVcmxQYXRoKSB7XG4gICAgICByZXR1cm4gYmFzZVVybCArIHNyYztcbiAgICB9XG5cbiAgICByZXR1cm4gc3JjO1xuICB9XG5cbiAgZ2V0U2l6ZUFjY29yZGluZ1RvUGl4ZWxSYXRpbyhzaXplKSB7XG4gICAgY29uc3Qgc3BsaXR0ZWRTaXplcyA9IHNpemUudG9TdHJpbmcoKS5zcGxpdCgneCcpO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgW10uZm9yRWFjaC5jYWxsKHNwbGl0dGVkU2l6ZXMsIGl0ZW0gPT4ge1xuICAgICAgcmVzdWx0LnB1c2goaXRlbSAqIE1hdGgucm91bmQod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCd4Jyk7XG4gIH1cblxuICBnZW5lcmF0ZVVybChvcGVyYXRpb24sIHNpemUsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKSB7XG4gICAgY29uc3Qge3VsdHJhRmFzdCwgdG9rZW4sIGNvbnRhaW5lciwgcXVlcnlTdHJpbmd9ID0gY29uZmlnO1xuICAgIGNvbnN0IGlzVWx0cmFGYXN0ID0gdWx0cmFGYXN0ID8gJ2h0dHBzOi8vc2NhbGVmbGV4LnVsdHJhZmFzdC5pby8nIDogJ2h0dHBzOi8vJztcbiAgICBjb25zdCBjbG91ZFVybCA9IGlzVWx0cmFGYXN0ICsgdG9rZW4gKyAnLicgKyBjb250YWluZXIgKyAnLyc7XG5cbiAgICByZXR1cm4gY2xvdWRVcmwgKyBvcGVyYXRpb24gKyAnLycgKyBzaXplICsgJy8nICsgZmlsdGVycyArICcvJyArIGltZ1NyYyArIHF1ZXJ5U3RyaW5nO1xuICB9XG5cbiAgZ2VuZXJhdGVTb3VyY2VzKG9wZXJhdGlvbiwgc2l6ZSwgZmlsdGVycywgaW1nU3JjLCBpc0FkYXB0aXZlLCBjb25maWcsIGlzUHJldmlldykge1xuICAgIGNvbnN0IHNvdXJjZXMgPSBbXTtcblxuICAgIGlmIChpc0FkYXB0aXZlKSB7XG4gICAgICBzaXplLmZvckVhY2goKHsgc2l6ZTogbmV4dFNpemUsIG1lZGlhOiBtZWRpYVF1ZXJ5fSkgPT4ge1xuICAgICAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICAgICAgbmV4dFNpemUgPSBuZXh0U2l6ZS5zcGxpdCgneCcpLm1hcChzaXplTmV4dCA9PiBzaXplTmV4dCAvIDUpLmpvaW4oJ3gnKTtcbiAgICAgICAgICBmaWx0ZXJzID0gJ3ExMC5mb2lsMSc7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VzLnB1c2goeyBtZWRpYVF1ZXJ5LCBzcmNTZXQ6IHRoaXMuZ2VuZXJhdGVTcmNzZXQob3BlcmF0aW9uLCBuZXh0U2l6ZSwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgICAgc2l6ZSA9IHNpemUuc3BsaXQoJ3gnKS5tYXAoc2l6ZU5leHQgPT4gc2l6ZU5leHQgLyA1KS5qb2luKCd4Jyk7XG4gICAgICAgIGZpbHRlcnMgPSAncTEwLmZvaWwxJztcbiAgICAgIH1cblxuICAgICAgc291cmNlcy5wdXNoKHtcbiAgICAgICAgc3JjU2V0OiB0aGlzLmdlbmVyYXRlU3Jjc2V0KG9wZXJhdGlvbiwgc2l6ZSwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cblxuICBnZXRBZGFwdGl2ZVNpemUoc2l6ZSwgY29uZmlnKSB7XG4gICAgY29uc3QgYXJyYXlPZlNpemVzID0gc2l6ZS5zcGxpdCgnLCcpO1xuICAgIGNvbnN0IHNpemVzID0gW107XG5cbiAgICBhcnJheU9mU2l6ZXMuZm9yRWFjaChzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBzID0gc3RyaW5nLm1hdGNoKC8oKD88dmFyaWFibGU+W2Etel9dW2Etel9dKil8KD88bWVkaWE+XFwoW1xcU1xcc10qXFwpKSlcXHMqKD88c2l6ZT5bMC05eHBdKikvKS5ncm91cHM7XG4gICAgICBjb25zdCBtZWRpYSA9IGdyb3Vwcy5tZWRpYSA/IGdyb3Vwcy5tZWRpYSA6IGNvbmZpZy5wcmVzZXRzW2dyb3Vwcy52YXJpYWJsZV07XG5cbiAgICAgIHNpemVzLnB1c2goeyBtZWRpYSwgc2l6ZTogZ3JvdXBzLnNpemUgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2l6ZXM7XG4gIH1cblxuICBnZW5lcmF0ZVNyY3NldChvcGVyYXRpb24sIHNpemUsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKSB7XG4gICAgY29uc3QgW2ltZ1dpZHRoLCBpbWdIZWlnaHRdID0gc2l6ZS50b1N0cmluZygpLnNwbGl0KCd4Jyk7XG5cbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUltZ1NyYyhvcGVyYXRpb24sIGZpbHRlcnMsIGltZ1NyYywgaW1nV2lkdGgsIGltZ0hlaWdodCwgMSwgY29uZmlnKTtcbiAgfVxuXG4gIGdlbmVyYXRlSW1nU3JjKG9wZXJhdGlvbiwgZmlsdGVycywgaW1nU3JjLCBpbWdXaWR0aCwgaW1nSGVpZ2h0LCBmYWN0b3IsIGNvbmZpZykge1xuICAgIGxldCBpbWdTaXplID0gJycgKyBNYXRoLnRydW5jKGltZ1dpZHRoICogZmFjdG9yKTtcblxuICAgIGlmIChpbWdIZWlnaHQpIHtcbiAgICAgIGltZ1NpemUgKz0gJ3gnICsgTWF0aC50cnVuYyhpbWdIZWlnaHQgKiBmYWN0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlVXJsKG9wZXJhdGlvbiwgdGhpcy5nZXRTaXplQWNjb3JkaW5nVG9QaXhlbFJhdGlvKGltZ1NpemUpLCBmaWx0ZXJzLCBpbWdTcmMsIGNvbmZpZylcbiAgICAgIC5yZXBsYWNlKCdodHRwOi8vc2NhbGVmbGV4LnVsdHJhZmFzdC5pby8nLCAnJylcbiAgICAgIC5yZXBsYWNlKCdodHRwczovL3NjYWxlZmxleC51bHRyYWZhc3QuaW8vJywgJycpXG4gICAgICAucmVwbGFjZSgnLy9zY2FsZWZsZXgudWx0cmFmYXN0LmlvLycsICcnKVxuICAgICAgLnJlcGxhY2UoJy8vLycsICcvJyk7XG4gIH1cblxuICBnZXRSYXRpb0J5U2l6ZShzaXplLCBjb25maWcpIHtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRTb3VyY2UgPSB0aGlzLmdldEJyZWFrUG9pbnQoc2l6ZSk7XG4gICAgICBjb25zdCBicmVha1BvaW50U2l6ZSA9IGJyZWFrUG9pbnRTb3VyY2UgPyBicmVha1BvaW50U291cmNlLnNpemUgOiBzaXplWzBdLnNpemU7XG5cbiAgICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGJyZWFrUG9pbnRTaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgW3dpZHRoLCBoZWlnaHRdID0gc2l6ZS50b1N0cmluZygpLnNwbGl0KCd4Jyk7XG4gICAgfVxuXG4gICAgaWYgKHdpZHRoICYmIGhlaWdodCkge1xuICAgICAgcmV0dXJuIHdpZHRoIC8gaGVpZ2h0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0QnJlYWtQb2ludChzaXplKSB7XG4gICAgcmV0dXJuIFsuLi5zaXplXS5yZXZlcnNlKCkuZmluZChpdGVtID0+IG1hdGNoTWVkaWEoaXRlbS5tZWRpYSkubWF0Y2hlcyk7XG4gIH1cbn1cbiJdfQ== |
@@ -9,5 +9,5 @@ /** | ||
export { CIService } from './lib/lib.service'; | ||
export { CIConfig } from './lib/config.service'; | ||
export { CIConfig } from './lib/config.model'; | ||
export { CIModule } from './lib/lib.module'; | ||
export { ImgComponent } from './lib/img/img.component'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWNsb3VkaW1hZ2UtcmVzcG9uc2l2ZS8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBLDBCQUFjLG1CQUFtQixDQUFDO0FBQ2xDLHlCQUFjLHNCQUFzQixDQUFDO0FBQ3JDLHlCQUFjLGtCQUFrQixDQUFDO0FBQ2pDLDZCQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBsaWJcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9saWIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9saWIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ltZy9pbWcuY29tcG9uZW50JztcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWNsb3VkaW1hZ2UtcmVzcG9uc2l2ZS8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBLDBCQUFjLG1CQUFtQixDQUFDO0FBQ2xDLHlCQUFjLG9CQUFvQixDQUFDO0FBQ25DLHlCQUFjLGtCQUFrQixDQUFDO0FBQ2pDLDZCQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBsaWJcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9saWIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWcubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGliLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbWcvaW1nLmNvbXBvbmVudCc7XG4iXX0= |
@@ -15,5 +15,8 @@ /** | ||
this._sanitizer = _sanitizer; | ||
this.class = ''; | ||
this.offset = 100; | ||
this.cloudimageUrl = ''; | ||
this.sources = []; | ||
this.firstSource = null; | ||
this.restSources = []; | ||
this.isLoaded = false; | ||
@@ -43,8 +46,5 @@ this.isProcessed = false; | ||
this.resizeSubscription$ = this.resizeObservable$.subscribe(function () { | ||
if (_this.isAdaptive) { | ||
if (_this.isAdaptive || _this.windowInnerWidth < window.innerWidth) { | ||
_this.processImage(); | ||
} | ||
else if (_this.windowInnerWidth < window.innerWidth) { | ||
_this.processImage(); | ||
} | ||
_this.windowInnerWidth = window.innerWidth; | ||
@@ -83,2 +83,3 @@ }); | ||
var isAdaptive = this.ciService.checkOnMedia(size); | ||
size = isAdaptive ? this.ciService.getAdaptiveSize(size, config) : size; | ||
/** @type {?} */ | ||
@@ -92,3 +93,3 @@ var isRelativeUrlPath = this.ciService.checkIfRelativeUrlPath(this.src); | ||
this.cloudimageUrl = isAdaptive ? | ||
this.ciService.generateUrl('width', parentContainerWidth, filters, imgSrc, config) : | ||
this.ciService.generateUrl('width', this.ciService.getSizeAccordingToPixelRatio(parentContainerWidth), filters, imgSrc, config) : | ||
this.ciService.generateUrl(operation, resultSize, filters, imgSrc, config); | ||
@@ -145,2 +146,25 @@ this.sources = isAdaptive ? | ||
*/ | ||
ImgComponent.prototype.getRestSources = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
/** @type {?} */ | ||
var resultSources = tslib_1.__spread((!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))); | ||
return resultSources.slice(1).reverse(); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
ImgComponent.prototype.getFirstSource = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
/** @type {?} */ | ||
var resultSources = tslib_1.__spread((!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))); | ||
this.firstSource = resultSources[0]; | ||
return resultSources[0]; | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
ImgComponent.prototype.getPositionStyle = /** | ||
@@ -159,3 +183,5 @@ * @return {?} | ||
function () { | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
// todo check if we need 100% height | ||
// return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? 'auto' : 'auto'); | ||
}; | ||
@@ -237,3 +263,3 @@ /** | ||
var result = 'transparent'; | ||
if (this.isRatio) { | ||
if (this.isRatio && !this.isPreviewLoaded && !this.isLoaded) { | ||
result = config.placeholderBackground; | ||
@@ -246,3 +272,3 @@ } | ||
selector: 'ci-img', | ||
template: "\n <picture #pictureElem *ngIf=\"!isProcessed\"></picture>\n\n <ng-container [ngSwitch]=\"lazyLoading\">\n <ng-container *ngSwitchCase=\"true\">\n <picture\n class=\"{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [lazyLoad]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [offset]=\"offset\"\n [alt]=\"\">\n </picture>\n </ng-container>\n <div *ngSwitchCase=\"false\">\n <picture\n class=\"{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))\"\n [media]=\"source.mediaQuery || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [src]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [alt]=\"\">\n </picture>\n </div>\n </ng-container>\n " | ||
template: "\n <picture #pictureElem *ngIf=\"!isProcessed\"></picture>\n\n <ng-container [ngSwitch]=\"lazyLoading\">\n <ng-container *ngSwitchCase=\"true\">\n <picture\n [class]=\"class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of getRestSources()\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <source\n *ngIf=\"getFirstSource()\"\n [attr.lazyLoad]=\"firstSource.srcSet || ''\"\n [srcset]=\"firstSource.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [lazyLoad]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [offset]=\"offset\"\n [alt]=\"\">\n </picture>\n </ng-container>\n <div *ngSwitchCase=\"false\">\n <picture\n [class]=\"class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of restSources\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <source\n *ngIf=\"firstSource\"\n [attr.lazyLoad]=\"firstSource.srcSet || ''\"\n [srcset]=\"firstSource.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [src]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [alt]=\"\">\n </picture>\n </div>\n </ng-container>\n " | ||
}] } | ||
@@ -312,2 +338,6 @@ ]; | ||
/** @type {?} */ | ||
ImgComponent.prototype.firstSource; | ||
/** @type {?} */ | ||
ImgComponent.prototype.restSources; | ||
/** @type {?} */ | ||
ImgComponent.prototype.isLoaded; | ||
@@ -351,2 +381,2 @@ /** @type {?} */ | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWNsb3VkaW1hZ2UtcmVzcG9uc2l2ZS8iLCJzb3VyY2VzIjpbImxpYi9pbWcvaW1nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQXlCLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVDO0lBa0dFLHNCQUFvQixTQUFvQixFQUFVLFVBQXdCO1FBQXRELGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBdEJqRSxXQUFNLEdBQUcsR0FBRyxDQUFDO1FBS3RCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBWXBCLHFCQUFnQixHQUFXLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFHM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUNsRCxDQUFDOzs7O0lBRUQsa0NBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pDLENBQUM7Ozs7SUFFRCwrQkFBUTs7O0lBQVI7UUFBQSxpQkFVQztRQVRDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZ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Q0FBcUI7O0lBQ3JCLG1DQUFvQjs7SUFDcEIsd0NBQTZDOzs7OztJQUVqQyxpQ0FBNEI7Ozs7O0lBQUUsa0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q0lTZXJ2aWNlfSBmcm9tICcuLi9saWIuc2VydmljZSc7XG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge2Zyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NpLWltZycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHBpY3R1cmUgI3BpY3R1cmVFbGVtICpuZ0lmPVwiIWlzUHJvY2Vzc2VkXCI+PC9waWN0dXJlPlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibGF6eUxvYWRpbmdcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgPHBpY3R1cmVcbiAgICAgICAgICBjbGFzcz1cInt7Y2xhc3MgKyAnIGNsb3VkaW1hZ2UtaW1hZ2UtcGljdHVyZSBjbG91ZGltYWdlLWltYWdlLScgKyAoaXNMb2FkZWQgPyAnbG9hZGVkJyA6ICdsb2FkaW5nJyl9fVwiXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO1wiXG4gICAgICAgICAgW3N0eWxlLnBhZGRpbmdCb3R0b21dPVwiZ2V0UGljdHVyZVBhZGRpbmdCb3R0b20oKVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZ2V0UGljdHVyZUJhY2tncm91bmQoKVwiXG4gICAgICAgICAgI2ltZ0VsZW1cbiAgICAgICAgICAqbmdJZj1cImlzUHJvY2Vzc2VkXCI+XG4gICAgICAgICAgPHNvdXJjZVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNvdXJjZSBvZiAoIWlzUHJldmlldyA/IHNvdXJjZXMgOiAoaXNQcmV2aWV3TG9hZGVkID8gc291cmNlcyA6IHByZXZpZXdTb3VyY2VzKSlcIlxuICAgICAgICAgICAgW21lZGlhXT1cInNvdXJjZS5tZWRpYVF1ZXJ5IHx8ICcnXCJcbiAgICAgICAgICAgIFthdHRyLmxhenlMb2FkXT1cInNvdXJjZS5zcmNTZXQgfHwgJydcIlxuICAgICAgICAgICAgW3NyY3NldF09XCJzb3VyY2Uuc3JjU2V0IHx8ICcnXCJcbiAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7b3BhY2l0eToxO3RvcDowO2xlZnQ6MDtcIlxuICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cImdldFBvc2l0aW9uU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImdldEltZ0hlaWdodCgpXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNmb3JtU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUudHJhbnNpdGlvbl09XCJnZXRUcmFuc2l0aW9uU3R5bGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuZmlsdGVyXT1cImdldEZpbHRlclN0eWxlKClcIlxuICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQoKVwiXG4gICAgICAgICAgICBbbGF6eUxvYWRdPVwiIWlzUHJldmlldyA/IGNsb3VkaW1hZ2VVcmwgOiAoaXNQcmV2aWV3TG9hZGVkID8gY2xvdWRpbWFnZVVybCA6IHByZXZpZXdDbG91ZGltYWdlVXJsKVwiXG4gICAgICAgICAgICBbb2Zmc2V0XT1cIm9mZnNldFwiXG4gICAgICAgICAgICBbYWx0XT1cIlwiPlxuICAgICAgICA8L3BpY3R1cmU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCI+XG4gICAgICAgIDxwaWN0dXJlXG4gICAgICAgICAgY2xhc3M9XCJ7e2NsYXNzICsgJyBjbG91ZGltYWdlLWltYWdlLXBpY3R1cmUgY2xvdWRpbWFnZS1pbWFnZS0nICsgKGlzTG9hZGVkID8gJ2xvYWRlZCcgOiAnbG9hZGluZycpfX1cIlxuICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtcIlxuICAgICAgICAgIFtzdHlsZS5wYWRkaW5nQm90dG9tXT1cImdldFBpY3R1cmVQYWRkaW5nQm90dG9tKClcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImdldFBpY3R1cmVCYWNrZ3JvdW5kKClcIlxuICAgICAgICAgICNpbWdFbGVtXG4gICAgICAgICAgKm5nSWY9XCJpc1Byb2Nlc3NlZFwiPlxuICAgICAgICAgIDxzb3VyY2VcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzb3VyY2Ugb2YgKCFpc1ByZXZpZXcgPyBzb3VyY2VzIDogKGlzUHJldmlld0xvYWRlZCA/IHNvdXJjZXMgOiBwcmV2aWV3U291cmNlcykpXCJcbiAgICAgICAgICAgIFttZWRpYV09XCJzb3VyY2UubWVkaWFRdWVyeSB8fCAnJ1wiXG4gICAgICAgICAgICBbc3Jjc2V0XT1cInNvdXJjZS5zcmNTZXQgfHwgJydcIlxuICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQoKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtvcGFjaXR5OjE7dG9wOjA7bGVmdDowO1wiXG4gICAgICAgICAgICBbc3R5bGUucG9zaXRpb25dPVwiZ2V0UG9zaXRpb25TdHlsZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SW1nSGVpZ2h0KClcIlxuICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJnZXRUcmFuc2Zvcm1TdHlsZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2l0aW9uXT1cImdldFRyYW5zaXRpb25TdHlsZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS5maWx0ZXJdPVwiZ2V0RmlsdGVyU3R5bGUoKVwiXG4gICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZCgpXCJcbiAgICAgICAgICAgIFtzcmNdPVwiIWlzUHJldmlldyA/IGNsb3VkaW1hZ2VVcmwgOiAoaXNQcmV2aWV3TG9hZGVkID8gY2xvdWRpbWFnZVVybCA6IHByZXZpZXdDbG91ZGltYWdlVXJsKVwiXG4gICAgICAgICAgICBbYWx0XT1cIlwiPlxuICAgICAgICA8L3BpY3R1cmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBJbWdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2ltZ0VsZW0nKSBpbWdFbGVtOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwaWN0dXJlRWxlbScpIHBpY3R1cmVFbGVtOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBzcmM6IHN0cmluZztcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgYWx0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wZXJhdGlvbjogc3RyaW5nO1xuICBASW5wdXQoKSBvOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNpemU6IHN0cmluZyB8IHt9O1xuICBASW5wdXQoKSBzOiBzdHJpbmcgfCB7fTtcbiAgQElucHV0KCkgZmlsdGVyczogc3RyaW5nO1xuICBASW5wdXQoKSBmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJhdGlvOiBudW1iZXI7XG4gIEBJbnB1dCgpIG9mZnNldCA9IDEwMDtcbiAgQElucHV0KCkgbmdTd2l0Y2g6IGFueTtcblxuICByZXNpemVPYnNlcnZhYmxlJDogT2JzZXJ2YWJsZTxFdmVudD47XG4gIHJlc2l6ZVN1YnNjcmlwdGlvbiQ6IFN1YnNjcmlwdGlvbjtcbiAgY2xvdWRpbWFnZVVybCA9ICcnO1xuICBzb3VyY2VzID0gW107XG4gIGlzTG9hZGVkID0gZmFsc2U7XG4gIGlzUHJvY2Vzc2VkID0gZmFsc2U7XG4gIGlzUHJldmlldzogYm9vbGVhbjtcbiAgcHJldmlld0Nsb3VkaW1hZ2VVcmw6IHN0cmluZztcbiAgcHJldmlld1NvdXJjZXM6IHN0cmluZztcbiAgaXNBZGFwdGl2ZTogYm9vbGVhbjtcbiAgYWN0dWFsU2l6ZTogc3RyaW5nO1xuICBwYXJlbnRDb250YWluZXJXaWR0aDogc3RyaW5nO1xuICBpc1ByZXZpZXdMb2FkZWQ6IGJvb2xlYW47XG4gIGlzUmF0aW86IGJvb2xlYW47XG4gIHJhdGlvQnlTaXplOiBudW1iZXI7XG4gIGxhenlMb2FkaW5nOiBib29sZWFuO1xuICBpbWFnZUhlaWdodDogbnVtYmVyO1xuICB3aW5kb3dJbm5lcldpZHRoOiBudW1iZXIgPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNpU2VydmljZTogQ0lTZXJ2aWNlLCBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICAgIHRoaXMubGF6eUxvYWRpbmcgPSBjaVNlcnZpY2UuY29uZmlnLmxhenlMb2FkaW5nO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmFibGUkID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpO1xuICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uJCA9IHRoaXMucmVzaXplT2JzZXJ2YWJsZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQWRhcHRpdmUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzSW1hZ2UoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy53aW5kb3dJbm5lcldpZHRoIDwgd2luZG93LmlubmVyV2lkdGgpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzSW1hZ2UoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud2luZG93SW5uZXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucHJvY2Vzc0ltYWdlKCk7XG4gIH1cblxuICBwcm9jZXNzSW1hZ2UoKSB7XG4gICAgY29uc3QgaW1nTm9kZSA9ICh0aGlzLmltZ0VsZW0gfHwgdGhpcy5waWN0dXJlRWxlbSkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuY2lTZXJ2aWNlO1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMub3BlcmF0aW9uIHx8IHRoaXMubyB8fCBjb25maWcub3BlcmF0aW9uO1xuICAgIGNvbnN0IHBhcmVudENvbnRhaW5lcldpZHRoID0gdGhpcy5jaVNlcnZpY2UuZ2V0UGFyZW50V2lkdGgoaW1nTm9kZSwgY29uZmlnKTtcbiAgICBjb25zdCBzaXplID0gdGhpcy5zaXplIHx8IHRoaXMucyB8fCBjb25maWcuc2l6ZSB8fCBwYXJlbnRDb250YWluZXJXaWR0aDtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzIHx8IHRoaXMuZiB8fCBjb25maWcuZmlsdGVycztcbiAgICBjb25zdCBpc0FkYXB0aXZlID0gdGhpcy5jaVNlcnZpY2UuY2hlY2tPbk1lZGlhKHNpemUpO1xuICAgIGNvbnN0IGlzUmVsYXRpdmVVcmxQYXRoID0gdGhpcy5jaVNlcnZpY2UuY2hlY2tJZlJlbGF0aXZlVXJsUGF0aCh0aGlzLnNyYyk7XG4gICAgY29uc3QgaW1nU3JjID0gdGhpcy5jaVNlcnZpY2UuZ2V0SW1nU3JjKHRoaXMuc3JjLCBpc1JlbGF0aXZlVXJsUGF0aCwgY29uZmlnLmJhc2VVcmwpO1xuICAgIGNvbnN0IHJlc3VsdFNpemUgPSBpc0FkYXB0aXZlID8gc2l6ZSA6IHRoaXMuY2lTZXJ2aWNlLmdldFNpemVBY2NvcmRpbmdUb1BpeGVsUmF0aW8oc2l6ZSk7XG4gICAgdGhpcy5pc1ByZXZpZXcgPSAhY29uZmlnLmlzQ2hyb21lICYmIChwYXJlbnRDb250YWluZXJXaWR0aCA+IDQwMCkgJiYgY29uZmlnLmxhenlMb2FkaW5nO1xuICAgIHRoaXMuY2xvdWRpbWFnZVVybCA9IGlzQWRhcHRpdmUgP1xuICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVVcmwoJ3dpZHRoJywgcGFyZW50Q29udGFpbmVyV2lkdGgsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKSA6XG4gICAgICB0aGlzLmNpU2VydmljZS5nZW5lcmF0ZVVybChvcGVyYXRpb24sIHJlc3VsdFNpemUsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKTtcbiAgICB0aGlzLnNvdXJjZXMgPSBpc0FkYXB0aXZlID9cbiAgICAgIHRoaXMuY2lTZXJ2aWNlLmdlbmVyYXRlU291cmNlcyhvcGVyYXRpb24sIHJlc3VsdFNpemUsIGZpbHRlcnMsIGltZ1NyYywgaXNBZGFwdGl2ZSwgY29uZmlnLCBmYWxzZSkgOiBbXTtcbiAgICBsZXQgcHJldmlld0Nsb3VkaW1hZ2VVcmwsIHByZXZpZXdTb3VyY2VzO1xuXG4gICAgaWYgKHRoaXMuaXNQcmV2aWV3KSB7XG4gICAgICBjb25zdCBwcmV2aWV3Q29uZmlnID0gey4uLmNvbmZpZywgcXVlcnlTdHJpbmc6ICcnfTtcbiAgICAgIHByZXZpZXdDbG91ZGltYWdlVXJsID0gaXNBZGFwdGl2ZSA/XG4gICAgICAgIHRoaXMuY2lTZXJ2aWNlLmdlbmVyYXRlVXJsKCd3aWR0aCcsIChwYXJlbnRDb250YWluZXJXaWR0aCAvIDUpLCAncTEwLmZvaWwxJywgaW1nU3JjLCBwcmV2aWV3Q29uZmlnKSA6XG4gICAgICAgIHRoaXMuY2lTZXJ2aWNlLmdlbmVyYXRlVXJsKG9wZXJhdGlvbiwgcmVzdWx0U2l6ZS5zcGxpdCgneCcpLm1hcChpdGVtID0+IGl0ZW0gLyA1KS5qb2luKCd4JyksICdxMTAuZm9pbDEnLCBpbWdTcmMsIHByZXZpZXdDb25maWcpO1xuICAgICAgcHJldmlld1NvdXJjZXMgPSBpc0FkYXB0aXZlID9cbiAgICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVTb3VyY2VzKG9wZXJhdGlvbiwgcmVzdWx0U2l6ZSwgJ3ExMC5mb2lsMScsIGltZ1NyYywgaXNBZGFwdGl2ZSwgcHJldmlld0NvbmZpZywgdHJ1ZSkgOiBbXTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXZpZXdDbG91ZGltYWdlVXJsID0gcHJldmlld0Nsb3VkaW1hZ2VVcmw7XG4gICAgdGhpcy5wcmV2aWV3U291cmNlcyA9IHByZXZpZXdTb3VyY2VzO1xuICAgIHRoaXMuaXNBZGFwdGl2ZSA9IGlzQWRhcHRpdmU7XG4gICAgdGhpcy5hY3R1YWxTaXplID0gc2l6ZTtcbiAgICB0aGlzLnBhcmVudENvbnRhaW5lcldpZHRoID0gcGFyZW50Q29udGFpbmVyV2lkdGg7XG4gICAgY29uc3QgcmF0aW9CeVNpemUgPSB0aGlzLmNpU2VydmljZS5nZXRSYXRpb0J5U2l6ZShzaXplLCBjb25maWcpO1xuICAgIHRoaXMuaW1hZ2VIZWlnaHQgPSBNYXRoLmZsb29yKHBhcmVudENvbnRhaW5lcldpZHRoIC8gKHJhdGlvQnlTaXplIHx8IHRoaXMucmF0aW8gfHwgMS41KSk7XG4gICAgdGhpcy5pc1JhdGlvID0gISEocmF0aW9CeVNpemUgfHwgdGhpcy5yYXRpbyk7XG4gICAgdGhpcy5yYXRpb0J5U2l6ZSA9IHJhdGlvQnlTaXplO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uSW1hZ2VMb2FkKCkge1xuICAgIGlmICghdGhpcy5pc1ByZXZpZXcpIHtcbiAgICAgIHRoaXMuaXNQcmV2aWV3TG9hZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1ByZXZpZXdMb2FkZWQpIHtcbiAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzUHJldmlld0xvYWRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0UG9zaXRpb25TdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZSh0aGlzLmlzUmF0aW8gPyAnYWJzb2x1dGUnIDogJ3JlbGF0aXZlJyk7XG4gIH1cblxuICBnZXRJbWdIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodGhpcy5pc1JhdGlvID8gJzEwMCUnIDogJ2F1dG8nKTtcbiAgfVxuXG4gIGdldFRyYW5zZm9ybVN0eWxlKCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdGhpcy5jaVNlcnZpY2U7XG4gICAgbGV0IHJlc3VsdCA9ICdub25lJztcblxuICAgIGlmIChjb25maWcuaW1nTG9hZGluZ0FuaW1hdGlvbikge1xuICAgICAgcmVzdWx0ID0gJ3NjYWxlM2QoMS4xLCAxLjEsIDEpJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0xvYWRlZCAmJiBjb25maWcuaW1nTG9hZGluZ0FuaW1hdGlvbikge1xuICAgICAgcmVzdWx0ID0gJ3RyYW5zbGF0ZVooMCkgc2NhbGUzZCgxLCAxLCAxKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUocmVzdWx0KTtcbiAgfVxuXG4gIGdldFRyYW5zaXRpb25TdHlsZSgpIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuY2lTZXJ2aWNlO1xuICAgIGxldCByZXN1bHQgPSAnbm9uZSc7XG5cbiAgICBpZiAodGhpcy5pc0xvYWRlZCAmJiBjb25maWcuaW1nTG9hZGluZ0FuaW1hdGlvbikge1xuICAgICAgcmVzdWx0ID0gJ2FsbCAwLjNzIGVhc2UtaW4tb3V0JztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShyZXN1bHQpO1xuICB9XG5cbiAgZ2V0RmlsdGVyU3R5bGUoKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0aGlzLmNpU2VydmljZTtcbiAgICBsZXQgcmVzdWx0ID0gJ25vbmUnO1xuXG4gICAgaWYgKGNvbmZpZy5pbWdMb2FkaW5nQW5pbWF0aW9uKSB7XG4gICAgICByZXN1bHQgPSBgYmx1cigke01hdGguZmxvb3IocGFyc2VJbnQodGhpcy5wYXJlbnRDb250YWluZXJXaWR0aCwgMTApIC8gMTAwKX1weClgO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTG9hZGVkICYmIGNvbmZpZy5pbWdMb2FkaW5nQW5pbWF0aW9uKSB7XG4gICAgICByZXN1bHQgPSAnYmx1cigwcHgpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShyZXN1bHQpO1xuICB9XG5cbiAgZ2V0UGljdHVyZVBhZGRpbmdCb3R0b20oKSB7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuXG4gICAgaWYgKHRoaXMuaXNSYXRpbykge1xuICAgICAgcmVzdWx0ID0gKDEwMCAvICh0aGlzLnJhdGlvQnlTaXplIHx8IHRoaXMucmF0aW8pKSArICclJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShyZXN1bHQpO1xuICB9XG5cbiAgZ2V0UGljdHVyZUJhY2tncm91bmQoKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0aGlzLmNpU2VydmljZTtcbiAgICBsZXQgcmVzdWx0ID0gJ3RyYW5zcGFyZW50JztcblxuICAgIGlmICh0aGlzLmlzUmF0aW8pIHtcbiAgICAgIHJlc3VsdCA9IGNvbmZpZy5wbGFjZWhvbGRlckJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUocmVzdWx0KTtcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWNsb3VkaW1hZ2UtcmVzcG9uc2l2ZS8iLCJzb3VyY2VzIjpbImxpYi9pbWcvaW1nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQXlCLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVDO0lBaUhFLHNCQUFvQixTQUFvQixFQUFVLFVBQXdCO1FBQXRELGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBakNqRSxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBU25CLFdBQU0sR0FBRyxHQUFHLENBQUM7UUFLdEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFZcEIscUJBQWdCLEdBQVcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUczQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ2xELENBQUM7Ozs7SUFFRCxrQ0FBVzs7O0lBQVg7UUFDRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7OztJQUVELCtCQUFROzs7SUFBUjtRQUFBLGlC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akMsaUNBQTRCOzs7OztJQUFFLGtDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NJU2VydmljZX0gZnJvbSAnLi4vbGliLnNlcnZpY2UnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjaS1pbWcnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxwaWN0dXJlICNwaWN0dXJlRWxlbSAqbmdJZj1cIiFpc1Byb2Nlc3NlZFwiPjwvcGljdHVyZT5cblxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImxhenlMb2FkaW5nXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+XG4gICAgICAgIDxwaWN0dXJlXG4gICAgICAgICAgW2NsYXNzXT1cImNsYXNzICsgJyBjbG91ZGltYWdlLWltYWdlLXBpY3R1cmUgY2xvdWRpbWFnZS1pbWFnZS0nICsgKGlzTG9hZGVkID8gJ2xvYWRlZCcgOiAnbG9hZGluZycpXCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7XCJcbiAgICAgICAgICBbc3R5bGUucGFkZGluZ0JvdHRvbV09XCJnZXRQaWN0dXJlUGFkZGluZ0JvdHRvbSgpXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRQaWN0dXJlQmFja2dyb3VuZCgpXCJcbiAgICAgICAgICAjaW1nRWxlbVxuICAgICAgICAgICpuZ0lmPVwiaXNQcm9jZXNzZWRcIj5cbiAgICAgICAgICA8c291cmNlXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc291cmNlIG9mIGdldFJlc3RTb3VyY2VzKClcIlxuICAgICAgICAgICAgW21lZGlhXT1cInNvdXJjZS5tZWRpYVF1ZXJ5IHx8ICcnXCJcbiAgICAgICAgICAgIFthdHRyLmxhenlMb2FkXT1cInNvdXJjZS5zcmNTZXQgfHwgJydcIlxuICAgICAgICAgICAgW3NyY3NldF09XCJzb3VyY2Uuc3JjU2V0IHx8ICcnXCJcbiAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNvdXJjZVxuICAgICAgICAgICAgKm5nSWY9XCJnZXRGaXJzdFNvdXJjZSgpXCJcbiAgICAgICAgICAgIFthdHRyLmxhenlMb2FkXT1cImZpcnN0U291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICBbc3Jjc2V0XT1cImZpcnN0U291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO29wYWNpdHk6MTt0b3A6MDtsZWZ0OjA7XCJcbiAgICAgICAgICAgIFtzdHlsZS5wb3NpdGlvbl09XCJnZXRQb3NpdGlvblN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRJbWdIZWlnaHQoKVwiXG4gICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cImdldFRyYW5zZm9ybVN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLnRyYW5zaXRpb25dPVwiZ2V0VHJhbnNpdGlvblN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLmZpbHRlcl09XCJnZXRGaWx0ZXJTdHlsZSgpXCJcbiAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKClcIlxuICAgICAgICAgICAgW2xhenlMb2FkXT1cIiFpc1ByZXZpZXcgPyBjbG91ZGltYWdlVXJsIDogKGlzUHJldmlld0xvYWRlZCA/IGNsb3VkaW1hZ2VVcmwgOiBwcmV2aWV3Q2xvdWRpbWFnZVVybClcIlxuICAgICAgICAgICAgW29mZnNldF09XCJvZmZzZXRcIlxuICAgICAgICAgICAgW2FsdF09XCJcIj5cbiAgICAgICAgPC9waWN0dXJlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiPlxuICAgICAgICA8cGljdHVyZVxuICAgICAgICAgIFtjbGFzc109XCJjbGFzcyArICcgY2xvdWRpbWFnZS1pbWFnZS1waWN0dXJlIGNsb3VkaW1hZ2UtaW1hZ2UtJyArIChpc0xvYWRlZCA/ICdsb2FkZWQnIDogJ2xvYWRpbmcnKVwiXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO1wiXG4gICAgICAgICAgW3N0eWxlLnBhZGRpbmdCb3R0b21dPVwiZ2V0UGljdHVyZVBhZGRpbmdCb3R0b20oKVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZ2V0UGljdHVyZUJhY2tncm91bmQoKVwiXG4gICAgICAgICAgI2ltZ0VsZW1cbiAgICAgICAgICAqbmdJZj1cImlzUHJvY2Vzc2VkXCI+XG4gICAgICAgICAgPHNvdXJjZVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNvdXJjZSBvZiByZXN0U291cmNlc1wiXG4gICAgICAgICAgICBbbWVkaWFdPVwic291cmNlLm1lZGlhUXVlcnkgfHwgJydcIlxuICAgICAgICAgICAgW2F0dHIubGF6eUxvYWRdPVwic291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICBbc3Jjc2V0XT1cInNvdXJjZS5zcmNTZXQgfHwgJydcIlxuICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQoKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c291cmNlXG4gICAgICAgICAgICAqbmdJZj1cImZpcnN0U291cmNlXCJcbiAgICAgICAgICAgIFthdHRyLmxhenlMb2FkXT1cImZpcnN0U291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICBbc3Jjc2V0XT1cImZpcnN0U291cmNlLnNyY1NldCB8fCAnJ1wiXG4gICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO29wYWNpdHk6MTt0b3A6MDtsZWZ0OjA7XCJcbiAgICAgICAgICAgIFtzdHlsZS5wb3NpdGlvbl09XCJnZXRQb3NpdGlvblN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRJbWdIZWlnaHQoKVwiXG4gICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cImdldFRyYW5zZm9ybVN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLnRyYW5zaXRpb25dPVwiZ2V0VHJhbnNpdGlvblN0eWxlKClcIlxuICAgICAgICAgICAgW3N0eWxlLmZpbHRlcl09XCJnZXRGaWx0ZXJTdHlsZSgpXCJcbiAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKClcIlxuICAgICAgICAgICAgW3NyY109XCIhaXNQcmV2aWV3ID8gY2xvdWRpbWFnZVVybCA6IChpc1ByZXZpZXdMb2FkZWQgPyBjbG91ZGltYWdlVXJsIDogcHJldmlld0Nsb3VkaW1hZ2VVcmwpXCJcbiAgICAgICAgICAgIFthbHRdPVwiXCI+XG4gICAgICAgIDwvcGljdHVyZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEltZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnaW1nRWxlbScpIGltZ0VsZW06IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BpY3R1cmVFbGVtJykgcGljdHVyZUVsZW06IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIHNyYzogc3RyaW5nO1xuICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGFsdDogc3RyaW5nO1xuICBASW5wdXQoKSBvcGVyYXRpb246IHN0cmluZztcbiAgQElucHV0KCkgbzogc3RyaW5nO1xuICBASW5wdXQoKSBzaXplOiBzdHJpbmcgfCB7fTtcbiAgQElucHV0KCkgczogc3RyaW5nIHwge307XG4gIEBJbnB1dCgpIGZpbHRlcnM6IHN0cmluZztcbiAgQElucHV0KCkgZjogc3RyaW5nO1xuICBASW5wdXQoKSByYXRpbzogbnVtYmVyO1xuICBASW5wdXQoKSBvZmZzZXQgPSAxMDA7XG4gIEBJbnB1dCgpIG5nU3dpdGNoOiBhbnk7XG5cbiAgcmVzaXplT2JzZXJ2YWJsZSQ6IE9ic2VydmFibGU8RXZlbnQ+O1xuICByZXNpemVTdWJzY3JpcHRpb24kOiBTdWJzY3JpcHRpb247XG4gIGNsb3VkaW1hZ2VVcmwgPSAnJztcbiAgc291cmNlcyA9IFtdO1xuICBmaXJzdFNvdXJjZSA9IG51bGw7XG4gIHJlc3RTb3VyY2VzID0gW107XG4gIGlzTG9hZGVkID0gZmFsc2U7XG4gIGlzUHJvY2Vzc2VkID0gZmFsc2U7XG4gIGlzUHJldmlldzogYm9vbGVhbjtcbiAgcHJldmlld0Nsb3VkaW1hZ2VVcmw6IHN0cmluZztcbiAgcHJldmlld1NvdXJjZXM6IHN0cmluZztcbiAgaXNBZGFwdGl2ZTogYm9vbGVhbjtcbiAgYWN0dWFsU2l6ZTogc3RyaW5nO1xuICBwYXJlbnRDb250YWluZXJXaWR0aDogc3RyaW5nO1xuICBpc1ByZXZpZXdMb2FkZWQ6IGJvb2xlYW47XG4gIGlzUmF0aW86IGJvb2xlYW47XG4gIHJhdGlvQnlTaXplOiBudW1iZXI7XG4gIGxhenlMb2FkaW5nOiBib29sZWFuO1xuICBpbWFnZUhlaWdodDogbnVtYmVyO1xuICB3aW5kb3dJbm5lcldpZHRoOiBudW1iZXIgPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNpU2VydmljZTogQ0lTZXJ2aWNlLCBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICAgIHRoaXMubGF6eUxvYWRpbmcgPSBjaVNlcnZpY2UuY29uZmlnLmxhenlMb2FkaW5nO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmFibGUkID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpO1xuICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uJCA9IHRoaXMucmVzaXplT2JzZXJ2YWJsZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQWRhcHRpdmUgfHwgdGhpcy53aW5kb3dJbm5lcldpZHRoIDwgd2luZG93LmlubmVyV2lkdGgpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzSW1hZ2UoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud2luZG93SW5uZXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucHJvY2Vzc0ltYWdlKCk7XG4gIH1cblxuICBwcm9jZXNzSW1hZ2UoKSB7XG4gICAgY29uc3QgaW1nTm9kZSA9ICh0aGlzLmltZ0VsZW0gfHwgdGhpcy5waWN0dXJlRWxlbSkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuY2lTZXJ2aWNlO1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMub3BlcmF0aW9uIHx8IHRoaXMubyB8fCBjb25maWcub3BlcmF0aW9uO1xuICAgIGNvbnN0IHBhcmVudENvbnRhaW5lcldpZHRoID0gdGhpcy5jaVNlcnZpY2UuZ2V0UGFyZW50V2lkdGgoaW1nTm9kZSwgY29uZmlnKTtcbiAgICBsZXQgc2l6ZSA9IHRoaXMuc2l6ZSB8fCB0aGlzLnMgfHwgY29uZmlnLnNpemUgfHwgcGFyZW50Q29udGFpbmVyV2lkdGg7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVycyB8fCB0aGlzLmYgfHwgY29uZmlnLmZpbHRlcnM7XG4gICAgY29uc3QgaXNBZGFwdGl2ZSA9IHRoaXMuY2lTZXJ2aWNlLmNoZWNrT25NZWRpYShzaXplKTtcblxuICAgIHNpemUgPSBpc0FkYXB0aXZlID8gdGhpcy5jaVNlcnZpY2UuZ2V0QWRhcHRpdmVTaXplKHNpemUsIGNvbmZpZykgOiBzaXplO1xuXG4gICAgY29uc3QgaXNSZWxhdGl2ZVVybFBhdGggPSB0aGlzLmNpU2VydmljZS5jaGVja0lmUmVsYXRpdmVVcmxQYXRoKHRoaXMuc3JjKTtcbiAgICBjb25zdCBpbWdTcmMgPSB0aGlzLmNpU2VydmljZS5nZXRJbWdTcmModGhpcy5zcmMsIGlzUmVsYXRpdmVVcmxQYXRoLCBjb25maWcuYmFzZVVybCk7XG4gICAgY29uc3QgcmVzdWx0U2l6ZSA9IGlzQWRhcHRpdmUgPyBzaXplIDogdGhpcy5jaVNlcnZpY2UuZ2V0U2l6ZUFjY29yZGluZ1RvUGl4ZWxSYXRpbyhzaXplKTtcbiAgICB0aGlzLmlzUHJldmlldyA9ICFjb25maWcuaXNDaHJvbWUgJiYgKHBhcmVudENvbnRhaW5lcldpZHRoID4gNDAwKSAmJiBjb25maWcubGF6eUxvYWRpbmc7XG4gICAgdGhpcy5jbG91ZGltYWdlVXJsID0gaXNBZGFwdGl2ZSA/XG4gICAgICB0aGlzLmNpU2VydmljZS5nZW5lcmF0ZVVybCgnd2lkdGgnLCB0aGlzLmNpU2VydmljZS5nZXRTaXplQWNjb3JkaW5nVG9QaXhlbFJhdGlvKHBhcmVudENvbnRhaW5lcldpZHRoKSwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpIDpcbiAgICAgIHRoaXMuY2lTZXJ2aWNlLmdlbmVyYXRlVXJsKG9wZXJhdGlvbiwgcmVzdWx0U2l6ZSwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpO1xuICAgIHRoaXMuc291cmNlcyA9IGlzQWRhcHRpdmUgP1xuICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVTb3VyY2VzKG9wZXJhdGlvbiwgcmVzdWx0U2l6ZSwgZmlsdGVycywgaW1nU3JjLCBpc0FkYXB0aXZlLCBjb25maWcsIGZhbHNlKSA6IFtdO1xuICAgIGxldCBwcmV2aWV3Q2xvdWRpbWFnZVVybCwgcHJldmlld1NvdXJjZXM7XG5cbiAgICBpZiAodGhpcy5pc1ByZXZpZXcpIHtcbiAgICAgIGNvbnN0IHByZXZpZXdDb25maWcgPSB7Li4uY29uZmlnLCBxdWVyeVN0cmluZzogJyd9O1xuICAgICAgcHJldmlld0Nsb3VkaW1hZ2VVcmwgPSBpc0FkYXB0aXZlID9cbiAgICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVVcmwoJ3dpZHRoJywgKHBhcmVudENvbnRhaW5lcldpZHRoIC8gNSksICdxMTAuZm9pbDEnLCBpbWdTcmMsIHByZXZpZXdDb25maWcpIDpcbiAgICAgICAgdGhpcy5jaVNlcnZpY2UuZ2VuZXJhdGVVcmwob3BlcmF0aW9uLCByZXN1bHRTaXplLnNwbGl0KCd4JykubWFwKGl0ZW0gPT4gaXRlbSAvIDUpLmpvaW4oJ3gnKSwgJ3ExMC5mb2lsMScsIGltZ1NyYywgcHJldmlld0NvbmZpZyk7XG4gICAgICBwcmV2aWV3U291cmNlcyA9IGlzQWRhcHRpdmUgP1xuICAgICAgICB0aGlzLmNpU2VydmljZS5nZW5lcmF0ZVNvdXJjZXMob3BlcmF0aW9uLCByZXN1bHRTaXplLCAncTEwLmZvaWwxJywgaW1nU3JjLCBpc0FkYXB0aXZlLCBwcmV2aWV3Q29uZmlnLCB0cnVlKSA6IFtdO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlld0Nsb3VkaW1hZ2VVcmwgPSBwcmV2aWV3Q2xvdWRpbWFnZVVybDtcbiAgICB0aGlzLnByZXZpZXdTb3VyY2VzID0gcHJldmlld1NvdXJjZXM7XG4gICAgdGhpcy5pc0FkYXB0aXZlID0gaXNBZGFwdGl2ZTtcbiAgICB0aGlzLmFjdHVhbFNpemUgPSBzaXplO1xuICAgIHRoaXMucGFyZW50Q29udGFpbmVyV2lkdGggPSBwYXJlbnRDb250YWluZXJXaWR0aDtcbiAgICBjb25zdCByYXRpb0J5U2l6ZSA9IHRoaXMuY2lTZXJ2aWNlLmdldFJhdGlvQnlTaXplKHNpemUsIGNvbmZpZyk7XG4gICAgdGhpcy5pbWFnZUhlaWdodCA9IE1hdGguZmxvb3IocGFyZW50Q29udGFpbmVyV2lkdGggLyAocmF0aW9CeVNpemUgfHwgdGhpcy5yYXRpbyB8fCAxLjUpKTtcbiAgICB0aGlzLmlzUmF0aW8gPSAhIShyYXRpb0J5U2l6ZSB8fCB0aGlzLnJhdGlvKTtcbiAgICB0aGlzLnJhdGlvQnlTaXplID0gcmF0aW9CeVNpemU7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNQcm9jZXNzZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgb25JbWFnZUxvYWQoKSB7XG4gICAgaWYgKCF0aGlzLmlzUHJldmlldykge1xuICAgICAgdGhpcy5pc1ByZXZpZXdMb2FkZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUHJldmlld0xvYWRlZCkge1xuICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNQcmV2aWV3TG9hZGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSZXN0U291cmNlcygpIHtcbiAgICBjb25zdCByZXN1bHRTb3VyY2VzID0gWy4uLighdGhpcy5pc1ByZXZpZXcgPyB0aGlzLnNvdXJjZXMgOiAodGhpcy5pc1ByZXZpZXdMb2FkZWQgPyB0aGlzLnNvdXJjZXMgOiB0aGlzLnByZXZpZXdTb3VyY2VzKSldO1xuXG4gICAgcmV0dXJuIHJlc3VsdFNvdXJjZXMuc2xpY2UoMSkucmV2ZXJzZSgpO1xuICB9XG5cbiAgZ2V0Rmlyc3RTb3VyY2UoKSB7XG4gICAgY29uc3QgcmVzdWx0U291cmNlcyA9IFsuLi4oIXRoaXMuaXNQcmV2aWV3ID8gdGhpcy5zb3VyY2VzIDogKHRoaXMuaXNQcmV2aWV3TG9hZGVkID8gdGhpcy5zb3VyY2VzIDogdGhpcy5wcmV2aWV3U291cmNlcykpXTtcbiAgICB0aGlzLmZpcnN0U291cmNlID0gcmVzdWx0U291cmNlc1swXTtcblxuICAgIHJldHVybiByZXN1bHRTb3VyY2VzWzBdO1xuICB9XG5cbiAgZ2V0UG9zaXRpb25TdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZSh0aGlzLmlzUmF0aW8gPyAnYWJzb2x1dGUnIDogJ3JlbGF0aXZlJyk7XG4gIH1cblxuICBnZXRJbWdIZWlnaHQoKSB7XG4gICAgLy8gdG9kbyBjaGVjayBpZiB3ZSBuZWVkIDEwMCUgaGVpZ2h0XG4gICAgLy8gcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodGhpcy5pc1JhdGlvID8gJzEwMCUnIDogJ2F1dG8nKTtcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZSh0aGlzLmlzUmF0aW8gPyAnYXV0bycgOiAnYXV0bycpO1xuICB9XG5cbiAgZ2V0VHJhbnNmb3JtU3R5bGUoKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0aGlzLmNpU2VydmljZTtcbiAgICBsZXQgcmVzdWx0ID0gJ25vbmUnO1xuXG4gICAgaWYgKGNvbmZpZy5pbWdMb2FkaW5nQW5pbWF0aW9uKSB7XG4gICAgICByZXN1bHQgPSAnc2NhbGUzZCgxLjEsIDEuMSwgMSknO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTG9hZGVkICYmIGNvbmZpZy5pbWdMb2FkaW5nQW5pbWF0aW9uKSB7XG4gICAgICByZXN1bHQgPSAndHJhbnNsYXRlWigwKSBzY2FsZTNkKDEsIDEsIDEpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShyZXN1bHQpO1xuICB9XG5cbiAgZ2V0VHJhbnNpdGlvblN0eWxlKCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdGhpcy5jaVNlcnZpY2U7XG4gICAgbGV0IHJlc3VsdCA9ICdub25lJztcblxuICAgIGlmICh0aGlzLmlzTG9hZGVkICYmIGNvbmZpZy5pbWdMb2FkaW5nQW5pbWF0aW9uKSB7XG4gICAgICByZXN1bHQgPSAnYWxsIDAuM3MgZWFzZS1pbi1vdXQnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHJlc3VsdCk7XG4gIH1cblxuICBnZXRGaWx0ZXJTdHlsZSgpIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuY2lTZXJ2aWNlO1xuICAgIGxldCByZXN1bHQgPSAnbm9uZSc7XG5cbiAgICBpZiAoY29uZmlnLmltZ0xvYWRpbmdBbmltYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9IGBibHVyKCR7TWF0aC5mbG9vcihwYXJzZUludCh0aGlzLnBhcmVudENvbnRhaW5lcldpZHRoLCAxMCkgLyAxMDApfXB4KWA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNMb2FkZWQgJiYgY29uZmlnLmltZ0xvYWRpbmdBbmltYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9ICdibHVyKDBweCknO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHJlc3VsdCk7XG4gIH1cblxuICBnZXRQaWN0dXJlUGFkZGluZ0JvdHRvbSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgICBpZiAodGhpcy5pc1JhdGlvKSB7XG4gICAgICByZXN1bHQgPSAoMTAwIC8gKHRoaXMucmF0aW9CeVNpemUgfHwgdGhpcy5yYXRpbykpICsgJyUnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHJlc3VsdCk7XG4gIH1cblxuICBnZXRQaWN0dXJlQmFja2dyb3VuZCgpIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRoaXMuY2lTZXJ2aWNlO1xuICAgIGxldCByZXN1bHQgPSAndHJhbnNwYXJlbnQnO1xuXG4gICAgaWYgKHRoaXMuaXNSYXRpbyAmJiAhdGhpcy5pc1ByZXZpZXdMb2FkZWQgJiYgIXRoaXMuaXNMb2FkZWQpIHtcbiAgICAgIHJlc3VsdCA9IGNvbmZpZy5wbGFjZWhvbGRlckJhY2tncm91bmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUocmVzdWx0KTtcbiAgfVxufVxuIl19 |
@@ -5,6 +5,7 @@ /** | ||
*/ | ||
import * as tslib_1 from "tslib"; | ||
import { Injectable } from '@angular/core'; | ||
import { CIConfig } from './config.service'; | ||
import { CIConfig } from './config.model'; | ||
import * as i0 from "@angular/core"; | ||
import * as i1 from "./config.service"; | ||
import * as i1 from "./config.model"; | ||
var CIService = /** @class */ (function () { | ||
@@ -27,15 +28,14 @@ function CIService(ciConfig) { | ||
baseUrl: baseUrl, | ||
presets: presets ? this.getPresets(presets, 'presets') : | ||
presets: presets ? presets : | ||
{ | ||
xs: 575, | ||
// up to 576 PHONE | ||
sm: 767, | ||
// 577 - 768 PHABLET | ||
md: 991, | ||
// 769 - 992 TABLET | ||
lg: 1199, | ||
// 993 - 1200 SMALL_LAPTOP_SCREEN | ||
xl: 3000 // from 1200 USUALSCREEN | ||
xs: '(max-width: 575px)', | ||
// to 575 PHONE | ||
sm: '(min-width: 576px)', | ||
// 576 - 767 PHABLET | ||
md: '(min-width: 768px)', | ||
// 768 - 991 TABLET | ||
lg: '(min-width: 992px)', | ||
// 992 - 1199 SMALL_LAPTOP_SCREEN | ||
xl: '(min-width: 1200px)' // from 1200 USUALSCREEN | ||
}, | ||
order: presets ? this.getPresets(presets, 'order') : ['xl', 'lg', 'md', 'sm', 'xs'], | ||
queryString: queryString, | ||
@@ -46,32 +46,2 @@ innerWidth: window.innerWidth, | ||
/** | ||
* @param {?=} value | ||
* @param {?=} type | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getPresets = /** | ||
* @param {?=} value | ||
* @param {?=} type | ||
* @return {?} | ||
*/ | ||
function (value, type) { | ||
if (value === void 0) { value = ''; } | ||
/** @type {?} */ | ||
var splittedValues = value.split('|'); | ||
/** @type {?} */ | ||
var result = { presets: {}, order: [] }; | ||
for (var i = 0; i < splittedValues.length; i++) { | ||
/** @type {?} */ | ||
var splittedParam = splittedValues[i] && splittedValues[i].split(':'); | ||
/** @type {?} */ | ||
var prop = splittedParam[0] && splittedParam[0].trim(); | ||
/** @type {?} */ | ||
var val = splittedParam[1] && splittedParam[1].trim(); | ||
if (prop && val) { | ||
result.presets[prop] = val; | ||
result.order.unshift(prop); | ||
} | ||
} | ||
return result[type]; | ||
}; | ||
/** | ||
* @param {?} img | ||
@@ -123,3 +93,7 @@ * @param {?} config | ||
} while (parentNode && !width); | ||
return width; | ||
/** @type {?} */ | ||
var letPadding = width && parentNode && parseInt(window.getComputedStyle(parentNode).paddingLeft, 10); | ||
/** @type {?} */ | ||
var rightPadding = parseInt(window.getComputedStyle(parentNode).paddingRight, 10); | ||
return width + (width ? (-letPadding - rightPadding) : 0); | ||
}; | ||
@@ -135,26 +109,9 @@ /** | ||
function (currentSize) { | ||
return currentSize <= 25 ? '25' : | ||
currentSize <= 50 ? '50' : | ||
currentSize <= 100 ? '100' | ||
: currentSize <= 200 ? '200' | ||
: currentSize <= 300 ? '300' | ||
: currentSize <= 400 ? '400' | ||
: currentSize <= 500 ? '500' | ||
: currentSize <= 600 ? '600' | ||
: currentSize <= 700 ? '700' | ||
: currentSize <= 800 ? '800' | ||
: currentSize <= 900 ? '900' | ||
: currentSize <= 1000 ? '1000' | ||
: currentSize <= 1100 ? '1100' | ||
: currentSize <= 1200 ? '1200' | ||
: currentSize <= 1300 ? '1300' | ||
: currentSize <= 1400 ? '1400' | ||
: currentSize <= 1500 ? '1500' | ||
: currentSize <= 1600 ? '1600' | ||
: currentSize <= 1700 ? '1700' | ||
: currentSize <= 1800 ? '1800' | ||
: currentSize <= 1900 ? '1900' | ||
: currentSize <= 2400 ? '2400' | ||
: currentSize <= 2800 ? '2800' | ||
: '3600'; | ||
if (currentSize <= 25) { | ||
return '25'; | ||
} | ||
if (currentSize <= 50) { | ||
return '50'; | ||
} | ||
return (Math.ceil(currentSize / 100) * 100).toString(); | ||
}; | ||
@@ -170,3 +127,10 @@ /** | ||
function (size) { | ||
return size && typeof size === 'object'; | ||
try { | ||
/** @type {?} */ | ||
var array = size.split(','); | ||
return array.length > 1; | ||
} | ||
catch (e) { | ||
return false; | ||
} | ||
}; | ||
@@ -270,34 +234,22 @@ /** | ||
function (operation, size, filters, imgSrc, isAdaptive, config, isPreview) { | ||
var _this = this; | ||
/** @type {?} */ | ||
var sources = []; | ||
if (isAdaptive) { | ||
/** @type {?} */ | ||
var orderFiltered = []; | ||
for (var i = 0; i < config.order.length; i++) { | ||
/** @type {?} */ | ||
var nextSize = size[config.order[i]]; | ||
if (nextSize) { | ||
orderFiltered.unshift(config.order[i]); | ||
} | ||
} | ||
for (var i = 0; i < orderFiltered.length; i++) { | ||
/** @type {?} */ | ||
var isLast = !(i < orderFiltered.length - 1); | ||
/** @type {?} */ | ||
var nextSizeType = isLast ? orderFiltered[i - 1] : orderFiltered[i]; | ||
/** @type {?} */ | ||
var nextSize = size[orderFiltered[i]]; | ||
size.forEach(function (_a) { | ||
var nextSize = _a.size, mediaQuery = _a.media; | ||
if (isPreview) { | ||
nextSize = nextSize.split('x').map(function (item) { return item / 5; }).join('x'); | ||
nextSize = nextSize.split('x').map(function (sizeNext) { return sizeNext / 5; }).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
/** @type {?} */ | ||
var srcSet = this.generateSrcset(operation, nextSize, filters, imgSrc, config); | ||
/** @type {?} */ | ||
var mediaQuery = '(' + (isLast ? 'min' : 'max') + '-width: ' + (config.presets[nextSizeType] + (isLast ? 1 : 0)) + 'px)'; | ||
sources.push({ mediaQuery: mediaQuery, srcSet: srcSet }); | ||
} | ||
sources.push({ mediaQuery: mediaQuery, srcSet: _this.generateSrcset(operation, nextSize, filters, imgSrc, config) }); | ||
}); | ||
} | ||
else { | ||
if (isPreview) { | ||
size = size.split('x').map(function (sizeNext) { return sizeNext / 5; }).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
sources.push({ | ||
srcSet: this.generateSrcset(operation, size.split('x').map(function (item) { return item / 5; }).join('x'), 'q10.foil1', imgSrc, config) | ||
srcSet: this.generateSrcset(operation, size, filters, imgSrc, config) | ||
}); | ||
@@ -308,2 +260,26 @@ } | ||
/** | ||
* @param {?} size | ||
* @param {?} config | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getAdaptiveSize = /** | ||
* @param {?} size | ||
* @param {?} config | ||
* @return {?} | ||
*/ | ||
function (size, config) { | ||
/** @type {?} */ | ||
var arrayOfSizes = size.split(','); | ||
/** @type {?} */ | ||
var sizes = []; | ||
arrayOfSizes.forEach(function (string) { | ||
/** @type {?} */ | ||
var groups = string.match(/((?<variable>[a-z_][a-z_]*)|(?<media>\([\S\s]*\)))\s*(?<size>[0-9xp]*)/).groups; | ||
/** @type {?} */ | ||
var media = groups.media ? groups.media : config.presets[groups.variable]; | ||
sizes.push({ media: media, size: groups.size }); | ||
}); | ||
return sizes; | ||
}; | ||
/** | ||
* @param {?} operation | ||
@@ -325,6 +301,3 @@ * @param {?} size | ||
function (operation, size, filters, imgSrc, config) { | ||
/** @type {?} */ | ||
var imgWidth = size.toString().split('x')[0]; | ||
/** @type {?} */ | ||
var imgHeight = size.toString().split('x')[1]; | ||
var _a = tslib_1.__read(size.toString().split('x'), 2), imgWidth = _a[0], imgHeight = _a[1]; | ||
return this.generateImgSrc(operation, filters, imgSrc, imgWidth, imgHeight, 1, config); | ||
@@ -375,2 +348,3 @@ }; | ||
function (size, config) { | ||
var _a, _b; | ||
/** @type {?} */ | ||
@@ -382,29 +356,9 @@ var width; | ||
/** @type {?} */ | ||
var breakPoint = this.getBreakPoint(config); | ||
var breakPointSource = this.getBreakPoint(size); | ||
/** @type {?} */ | ||
var orderIndex = config.order.indexOf(breakPoint); | ||
/** @type {?} */ | ||
var breakPointSize = null; | ||
do { | ||
/** @type {?} */ | ||
var nextBreakpoint = config.order[orderIndex]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndex--; | ||
} while (!breakPointSize && orderIndex >= 0); | ||
if (!breakPointSize) { | ||
/** @type {?} */ | ||
var orderIndexStepTwo = config.order.indexOf(breakPoint); | ||
do { | ||
/** @type {?} */ | ||
var nextBreakpoint = config.order[orderIndexStepTwo]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndexStepTwo++; | ||
} while (!breakPointSize && orderIndexStepTwo <= config.order.length); | ||
} | ||
width = breakPointSize.toString().split('x')[0]; | ||
height = breakPointSize.toString().split('x')[1]; | ||
var breakPointSize = breakPointSource ? breakPointSource.size : size[0].size; | ||
_a = tslib_1.__read(breakPointSize.toString().split('x'), 2), width = _a[0], height = _a[1]; | ||
} | ||
else { | ||
width = size.toString().split('x')[0]; | ||
height = size.toString().split('x')[1]; | ||
_b = tslib_1.__read(size.toString().split('x'), 2), width = _b[0], height = _b[1]; | ||
} | ||
@@ -417,16 +371,11 @@ if (width && height) { | ||
/** | ||
* @param {?} config | ||
* @param {?} size | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getBreakPoint = /** | ||
* @param {?} config | ||
* @param {?} size | ||
* @return {?} | ||
*/ | ||
function (config) { | ||
var presets = config.presets, order = config.order; | ||
/** @type {?} */ | ||
var innerWidth = window.innerWidth; | ||
/** @type {?} */ | ||
var prevBreakPointLimit = order.findIndex(function (item) { return presets[item] < innerWidth; }); | ||
return order[prevBreakPointLimit - 1] || order[prevBreakPointLimit] || order[order.length - 1]; | ||
function (size) { | ||
return tslib_1.__spread(size).reverse().find(function (item) { return matchMedia(item.media).matches; }); | ||
}; | ||
@@ -450,2 +399,2 @@ CIService.decorators = [ | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1jbG91ZGltYWdlLXJlc3BvbnNpdmUvIiwic291cmNlcyI6WyJsaWIvbGliLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7QUFFMUM7SUFNRSxtQkFBWSxRQUFrQjtRQUZ2QixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBSXBCLElBQUEsbUJBQVUsRUFBViwrQkFBVSxFQUNWLHVCQUF5QixFQUF6Qiw4Q0FBeUIsRUFDekIsdUJBQWlCLEVBQWpCLHNDQUFpQixFQUNqQix5QkFBa0IsRUFBbEIsdUNBQWtCLEVBQ2xCLGlDQUEwQixFQUExQiwrQ0FBMEIsRUFDMUIsNEJBQW9CLEVBQXBCLHlDQUFvQixFQUNwQixtQkFBYSxFQUFiLGtDQUFhLEVBQ2Isb0JBQWMsRUFBZCxtQ0FBYyxFQUNkLHVCQUFtQixFQUFuQix3Q0FBbUIsRUFDbkIscUJBQWEsRUFBYixrQ0FBYSxFQUNiLG1DQUFpQyxFQUFqQyxzREFBaUMsRUFDakMscUJBQWEsRUFBYixrQ0FBYSxFQUNiLDBCQUFPLEVBQ1AseUJBQWdCLEVBQWhCLHFDQUFnQjtRQUdsQixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osS0FBSyxPQUFBO1lBQ0wsU0FBUyxXQUFBO1lBQ1QsU0FBUyxXQUFBO1lBQ1QsV0FBVyxhQUFBO1lBQ1gsbUJBQW1CLHFCQUFBO1lBQ25CLGNBQWMsZ0JBQUE7WUFDZCxLQUFLLE9BQUE7WUFDTCxNQUFNLFFBQUE7WUFDTixTQUFTLFdBQUE7WUFDVCxPQUFPLFNBQUE7WUFDUCxxQkFBcUIsdUJBQUE7WUFDckIsT0FBTyxTQUFBO1lBQ1AsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFD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UUFFRCxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDbkIsT0FBTyxLQUFLLEdBQUcsTUFBTSxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUVELGlDQUFhOzs7O0lBQWIsVUFBYyxNQUFNO1FBQ1gsSUFBQSx3QkFBTyxFQUFFLG9CQUFLOztZQUNmLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVTs7WUFDOUIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQTFCLENBQTBCLENBQUM7UUFFL0UsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQzs7Z0JBN1FGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBSk8sUUFBUTs7O29CQURoQjtDQWlSQyxBQTlRRCxJQThRQztTQTNRWSxTQUFTOzs7SUFDcEIsMkJBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q0lDb25maWd9IGZyb20gJy4vY29uZmlnLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDSVNlcnZpY2Uge1xuICBwdWJsaWMgY29uZmlnOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihjaUNvbmZpZzogQ0lDb25maWcpIHtcbiAgICBjb25zdCB7XG4gICAgICB0b2tlbiA9ICcnLFxuICAgICAgY29udGFpbmVyID0gJ2Nsb3VkaW1nLmlvJyxcbiAgICAgIHVsdHJhRmFzdCA9IGZhbHNlLFxuICAgICAgbGF6eUxvYWRpbmcgPSB0cnVlLFxuICAgICAgaW1nTG9hZGluZ0FuaW1hdGlvbiA9IHRydWUsXG4gICAgICBsYXp5TG9hZE9mZnNldCA9IDEwMCxcbiAgICAgIHdpZHRoID0gJzQwMCcsXG4gICAgICBoZWlnaHQgPSAnMzAwJyxcbiAgICAgIG9wZXJhdGlvbiA9ICd3aWR0aCcsXG4gICAgICBmaWx0ZXJzID0gJ24nLFxuICAgICAgcGxhY2Vob2xkZXJCYWNrZ3JvdW5kID0gJyNmNGY0ZjQnLFxuICAgICAgYmFzZVVybCA9ICcvJyxcbiAgICAgIHByZXNldHMsXG4gICAgICBxdWVyeVN0cmluZyA9ICcnXG4gICAgfSA9IGNpQ29uZmlnO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICB0b2tlbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHVsdHJhRmFzdCxcbiAgICAgIGxhenlMb2FkaW5nLFxuICAgICAgaW1nTG9hZGluZ0FuaW1hdGlvbixcbiAgICAgIGxhenlMb2FkT2Zmc2V0LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBvcGVyYXRpb24sXG4gICAgICBmaWx0ZXJzLFxuICAgICAgcGxhY2Vob2xkZXJCYWNrZ3JvdW5kLFxuICAgICAgYmFzZVVybCxcbiAgICAgIHByZXNldHM6IHByZXNldHMgPyB0aGlzLmdldFByZXNldHMocHJlc2V0cywgJ3ByZXNldHMnKSA6XG4gICAgICAgIHtcbiAgICAgICAgICB4czogNTc1LCAgLy8gdXAgdG8gNTc2ICAgIFBIT05FXG4gICAgICAgICAgc206IDc2NywgIC8vIDU3NyAtIDc2OCAgICBQSEFCTEVUXG4gICAgICAgICAgbWQ6IDk5MSwgIC8vIDc2OSAtIDk5MiAgICBUQUJMRVRcbiAgICAgICAgICBsZzogMTE5OSwgLy8gOTkzIC0gMTIwMCAgIFNNQUxMX0xBUFRPUF9TQ1JFRU5cbiAgICAgICAgICB4bDogMzAwMCAgLy8gZnJvbSAxMjAwICAgIFVTVUFMU0NSRUVOXG4gICAgICAgIH0sXG4gICAgICBvcmRlcjogcHJlc2V0cyA/IHRoaXMuZ2V0UHJlc2V0cyhwcmVzZXRzLCAnb3JkZXInKSA6IFsneGwnLCAnbGcnLCAnbWQnLCAnc20nLCAneHMnXSxcbiAgICAgIHF1ZXJ5U3RyaW5nLFxuICAgICAgaW5uZXJXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAvLyBpc0Nocm9tZTogL0Nocm9tZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvR29vZ2xlIEluYy8udGVzdChuYXZpZ2F0b3IudmVuZG9yKVxuICAgIH07XG4gIH1cblxuICBnZXRQcmVzZXRzKHZhbHVlID0gJycsIHR5cGUpIHtcbiAgICBjb25zdCBzcGxpdHRlZFZhbHVlcyA9IHZhbHVlLnNwbGl0KCd8Jyk7XG4gICAgY29uc3QgcmVzdWx0ID0ge3ByZXNldHM6IHt9LCBvcmRlcjogW119O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdHRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3BsaXR0ZWRQYXJhbSA9IHNwbGl0dGVkVmFsdWVzW2ldICYmIHNwbGl0dGVkVmFsdWVzW2ldLnNwbGl0KCc6Jyk7XG4gICAgICBjb25zdCBwcm9wID0gc3BsaXR0ZWRQYXJhbVswXSAmJiBzcGxpdHRlZFBhcmFtWzBdLnRyaW0oKTtcbiAgICAgIGNvbnN0IHZhbCA9IHNwbGl0dGVkUGFyYW1bMV0gJiYgc3BsaXR0ZWRQYXJhbVsxXS50cmltKCk7XG5cbiAgICAgIGlmIChwcm9wICYmIHZhbCkge1xuICAgICAgICByZXN1bHQucHJlc2V0c1twcm9wXSA9IHZhbDtcbiAgICAgICAgcmVzdWx0Lm9yZGVyLnVuc2hpZnQocHJvcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFt0eXBlXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJlbnRXaWR0aChpbWcsIGNvbmZpZykge1xuICAgIGlmICghKGltZyAmJiBpbWcucGFyZW50RWxlbWVudCAmJiBpbWcucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QpICYmICEoaW1nICYmIGltZy53aWR0aCkpIHtcbiAgICAgIHJldHVybiBjb25maWcud2lkdGg7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Q29udGFpbmVyID0gdGhpcy5nZXRQYXJlbnRDb250YWluZXJXaXRoV2lkdGgoaW1nKTtcbiAgICBjb25zdCBjdXJyZW50V2lkdGggPSBwYXJzZUludCgnJyArIHBhcmVudENvbnRhaW5lciwgMTApO1xuICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBOdW1iZXIod2luZG93LmdldENvbXB1dGVkU3R5bGUoaW1nKS53aWR0aCk7XG5cbiAgICBpZiAoKGNvbXB1dGVkV2lkdGggJiYgKGNvbXB1dGVkV2lkdGggPCBjdXJyZW50V2lkdGggJiYgY29tcHV0ZWRXaWR0aCA+IDE1KSB8fCAhY3VycmVudFdpZHRoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l6ZUxpbWl0KGNvbXB1dGVkV2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWN1cnJlbnRXaWR0aCkge1xuICAgICAgICByZXR1cm4gaW1nLndpZHRoIHx8IGNvbmZpZy53aWR0aDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l6ZUxpbWl0KGN1cnJlbnRXaWR0aCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFyZW50Q29udGFpbmVyV2l0aFdpZHRoKGltZykge1xuICAgIGxldCBwYXJlbnROb2RlID0gbnVsbDtcbiAgICBsZXQgd2lkdGggPSAwO1xuXG4gICAgZG8ge1xuICAgICAgcGFyZW50Tm9kZSA9IChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUucGFyZW50Tm9kZSkgfHwgaW1nLnBhcmVudE5vZGU7XG4gICAgICB3aWR0aCA9IHBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfSB3aGlsZSAocGFyZW50Tm9kZSAmJiAhd2lkdGgpO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0U2l6ZUxpbWl0KGN1cnJlbnRTaXplKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTaXplIDw9IDI1ID8gJzI1JyA6XG4gICAgICBjdXJyZW50U2l6ZSA8PSA1MCA/ICc1MCcgOlxuICAgICAgICBjdXJyZW50U2l6ZSA8PSAxMDAgPyAnMTAwJ1xuICAgICAgICAgIDogY3VycmVudFNpemUgPD0gMjAwID8gJzIwMCdcbiAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDMwMCA/ICczMDAnXG4gICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDQwMCA/ICc0MDAnXG4gICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gNTAwID8gJzUwMCdcbiAgICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDYwMCA/ICc2MDAnXG4gICAgICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDcwMCA/ICc3MDAnXG4gICAgICAgICAgICAgICAgICAgIDogY3VycmVudFNpemUgPD0gODAwID8gJzgwMCdcbiAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDkwMCA/ICc5MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDEwMDAgPyAnMTAwMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxMTAwID8gJzExMDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxMjAwID8gJzEyMDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDEzMDAgPyAnMTMwMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxNDAwID8gJzE0MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxNTAwID8gJzE1MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDE2MDAgPyAnMTYwMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxNzAwID8gJzE3MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAxODAwID8gJzE4MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRTaXplIDw9IDE5MDAgPyAnMTkwMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAyNDAwID8gJzI0MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50U2l6ZSA8PSAyODAwID8gJzI4MDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICczNjAwJztcbiAgfVxuXG4gIHB1YmxpYyBjaGVja09uTWVkaWEoc2l6ZSkge1xuICAgIHJldHVybiBzaXplICYmIHR5cGVvZiBzaXplID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0lmUmVsYXRpdmVVcmxQYXRoKHNyYykge1xuICAgIGlmIChzcmMuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgc3JjID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgc3JjO1xuICAgIH1cbiAgICByZXR1cm4gKHNyYy5pbmRleE9mKCdodHRwOi8vJykgIT09IDAgJiYgc3JjLmluZGV4T2YoJ2h0dHBzOi8vJykgIT09IDAgJiYgc3JjLmluZGV4T2YoJy8vJykgIT09IDApO1xuICB9XG5cbiAgcHVibGljIGdldEltZ1NyYyhzcmMsIGlzUmVsYXRpdmVVcmxQYXRoID0gZmFsc2UsIGJhc2VVcmwgPSAnJykge1xuICAgIGlmIChpc1JlbGF0aXZlVXJsUGF0aCkge1xuICAgICAgcmV0dXJuIGJhc2VVcmwgKyBzcmM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNyYztcbiAgfVxuXG4gIHB1YmxpYyBnZXRTaXplQWNjb3JkaW5nVG9QaXhlbFJhdGlvKHNpemUpIHtcbiAgICBjb25zdCBzcGxpdHRlZFNpemVzID0gc2l6ZS50b1N0cmluZygpLnNwbGl0KCd4Jyk7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBbXS5mb3JFYWNoLmNhbGwoc3BsaXR0ZWRTaXplcywgaXRlbSA9PiB7XG4gICAgICByZXN1bHQucHVzaChpdGVtICogTWF0aC5yb3VuZCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJ3gnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZVVybChvcGVyYXRpb24sIHNpemUsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKSB7XG4gICAgY29uc3Qge3VsdHJhRmFzdCwgdG9rZW4sIGNvbnRhaW5lciwgcXVlcnlTdHJpbmd9ID0gY29uZmlnO1xuICAgIGNvbnN0IGlzVWx0cmFGYXN0ID0gdWx0cmFGYXN0ID8gJ2h0dHBzOi8vc2NhbGVmbGV4LnVsdHJhZmFzdC5pby8nIDogJ2h0dHBzOi8vJztcbiAgICBjb25zdCBjbG91ZFVybCA9IGlzVWx0cmFGYXN0ICsgdG9rZW4gKyAnLicgKyBjb250YWluZXIgKyAnLyc7XG5cbiAgICByZXR1cm4gY2xvdWRVcmwgKyBvcGVyYXRpb24gKyAnLycgKyBzaXplICsgJy8nICsgZmlsdGVycyArICcvJyArIGltZ1NyYyArIHF1ZXJ5U3RyaW5nO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlU291cmNlcyhvcGVyYXRpb24sIHNpemUsIGZpbHRlcnMsIGltZ1NyYywgaXNBZGFwdGl2ZSwgY29uZmlnLCBpc1ByZXZpZXcpIHtcbiAgICBjb25zdCBzb3VyY2VzID0gW107XG5cbiAgICBpZiAoaXNBZGFwdGl2ZSkge1xuICAgICAgY29uc3Qgb3JkZXJGaWx0ZXJlZCA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5vcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuZXh0U2l6ZSA9IHNpemVbY29uZmlnLm9yZGVyW2ldXTtcblxuICAgICAgICBpZiAobmV4dFNpemUpIHtcbiAgICAgICAgICBvcmRlckZpbHRlcmVkLnVuc2hpZnQoY29uZmlnLm9yZGVyW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyRmlsdGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXNMYXN0ID0gIShpIDwgb3JkZXJGaWx0ZXJlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgY29uc3QgbmV4dFNpemVUeXBlID0gaXNMYXN0ID8gb3JkZXJGaWx0ZXJlZFtpIC0gMV0gOiBvcmRlckZpbHRlcmVkW2ldO1xuICAgICAgICBsZXQgbmV4dFNpemUgPSBzaXplW29yZGVyRmlsdGVyZWRbaV1dO1xuXG4gICAgICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgICAgICBuZXh0U2l6ZSA9IG5leHRTaXplLnNwbGl0KCd4JykubWFwKGl0ZW0gPT4gaXRlbSAvIDUpLmpvaW4oJ3gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNyY1NldCA9IHRoaXMuZ2VuZXJhdGVTcmNzZXQob3BlcmF0aW9uLCBuZXh0U2l6ZSwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpO1xuICAgICAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gJygnICsgKGlzTGFzdCA/ICdtaW4nIDogJ21heCcpICsgJy13aWR0aDogJyArIChjb25maWcucHJlc2V0c1tuZXh0U2l6ZVR5cGVdICsgKGlzTGFzdCA/IDEgOiAwKSkgKyAncHgpJztcblxuICAgICAgICBzb3VyY2VzLnB1c2goe21lZGlhUXVlcnksIHNyY1NldH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2VzLnB1c2goe1xuICAgICAgICBzcmNTZXQ6IHRoaXMuZ2VuZXJhdGVTcmNzZXQob3BlcmF0aW9uLCBzaXplLnNwbGl0KCd4JykubWFwKGl0ZW0gPT4gaXRlbSAvIDUpLmpvaW4oJ3gnKSwgJ3ExMC5mb2lsMScsIGltZ1NyYywgY29uZmlnKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cblxuICBnZW5lcmF0ZVNyY3NldChvcGVyYXRpb24sIHNpemUsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKSB7XG4gICAgY29uc3QgaW1nV2lkdGggPSBzaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKVswXTtcbiAgICBjb25zdCBpbWdIZWlnaHQgPSBzaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKVsxXTtcblxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlSW1nU3JjKG9wZXJhdGlvbiwgZmlsdGVycywgaW1nU3JjLCBpbWdXaWR0aCwgaW1nSGVpZ2h0LCAxLCBjb25maWcpO1xuICB9XG5cbiAgZ2VuZXJhdGVJbWdTcmMob3BlcmF0aW9uLCBmaWx0ZXJzLCBpbWdTcmMsIGltZ1dpZHRoLCBpbWdIZWlnaHQsIGZhY3RvciwgY29uZmlnKSB7XG4gICAgbGV0IGltZ1NpemUgPSAnJyArIE1hdGgudHJ1bmMoaW1nV2lkdGggKiBmYWN0b3IpO1xuXG4gICAgaWYgKGltZ0hlaWdodCkge1xuICAgICAgaW1nU2l6ZSArPSAneCcgKyBNYXRoLnRydW5jKGltZ0hlaWdodCAqIGZhY3Rvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVVcmwob3BlcmF0aW9uLCB0aGlzLmdldFNpemVBY2NvcmRpbmdUb1BpeGVsUmF0aW8oaW1nU2l6ZSksIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKVxuICAgICAgLnJlcGxhY2UoJ2h0dHA6Ly9zY2FsZWZsZXgudWx0cmFmYXN0LmlvLycsICcnKVxuICAgICAgLnJlcGxhY2UoJ2h0dHBzOi8vc2NhbGVmbGV4LnVsdHJhZmFzdC5pby8nLCAnJylcbiAgICAgIC5yZXBsYWNlKCcvL3NjYWxlZmxleC51bHRyYWZhc3QuaW8vJywgJycpXG4gICAgICAucmVwbGFjZSgnLy8vJywgJy8nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSYXRpb0J5U2l6ZShzaXplLCBjb25maWcpIHtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoY29uZmlnKTtcbiAgICAgIGxldCBvcmRlckluZGV4ID0gY29uZmlnLm9yZGVyLmluZGV4T2YoYnJlYWtQb2ludCk7XG4gICAgICBsZXQgYnJlYWtQb2ludFNpemUgPSBudWxsO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG5leHRCcmVha3BvaW50ID0gY29uZmlnLm9yZGVyW29yZGVySW5kZXhdO1xuICAgICAgICBicmVha1BvaW50U2l6ZSA9IHNpemVbbmV4dEJyZWFrcG9pbnRdO1xuICAgICAgICBvcmRlckluZGV4LS07XG4gICAgICB9IHdoaWxlICghYnJlYWtQb2ludFNpemUgJiYgb3JkZXJJbmRleCA+PSAwKTtcblxuICAgICAgaWYgKCFicmVha1BvaW50U2l6ZSkge1xuICAgICAgICBsZXQgb3JkZXJJbmRleFN0ZXBUd28gPSBjb25maWcub3JkZXIuaW5kZXhPZihicmVha1BvaW50KTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgY29uc3QgbmV4dEJyZWFrcG9pbnQgPSBjb25maWcub3JkZXJbb3JkZXJJbmRleFN0ZXBUd29dO1xuICAgICAgICAgIGJyZWFrUG9pbnRTaXplID0gc2l6ZVtuZXh0QnJlYWtwb2ludF07XG4gICAgICAgICAgb3JkZXJJbmRleFN0ZXBUd28rKztcbiAgICAgICAgfSB3aGlsZSAoIWJyZWFrUG9pbnRTaXplICYmIG9yZGVySW5kZXhTdGVwVHdvIDw9IGNvbmZpZy5vcmRlci5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICB3aWR0aCA9IGJyZWFrUG9pbnRTaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKVswXTtcbiAgICAgIGhlaWdodCA9IGJyZWFrUG9pbnRTaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKVsxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSBzaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKVswXTtcbiAgICAgIGhlaWdodCA9IHNpemUudG9TdHJpbmcoKS5zcGxpdCgneCcpWzFdO1xuICAgIH1cblxuICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHtcbiAgICAgIHJldHVybiB3aWR0aCAvIGhlaWdodDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldEJyZWFrUG9pbnQoY29uZmlnKSB7XG4gICAgY29uc3Qge3ByZXNldHMsIG9yZGVyfSA9IGNvbmZpZztcbiAgICBjb25zdCBpbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgY29uc3QgcHJldkJyZWFrUG9pbnRMaW1pdCA9IG9yZGVyLmZpbmRJbmRleChpdGVtID0+IHByZXNldHNbaXRlbV0gPCBpbm5lcldpZHRoKTtcblxuICAgIHJldHVybiBvcmRlcltwcmV2QnJlYWtQb2ludExpbWl0IC0gMV0gfHwgb3JkZXJbcHJldkJyZWFrUG9pbnRMaW1pdF0gfHwgb3JkZXJbb3JkZXIubGVuZ3RoIC0gMV07XG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1jbG91ZGltYWdlLXJlc3BvbnNpdmUvIiwic291cmNlcyI6WyJsaWIvbGliLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXhDO0lBTUUsbUJBQVksUUFBa0I7UUFGOUIsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUliLElBQUEsbUJBQVUsRUFBViwrQkFBVSxFQUNWLHVCQUF5QixFQUF6Qiw4Q0FBeUIsRUFDekIsdUJBQWlCLEVBQWpCLHNDQUFpQixFQUNqQix5QkFBa0IsRUFBbEIsdUNBQWtCLEVBQ2xCLGlDQUEwQixFQUExQiwrQ0FBMEIsRUFDMUIsNEJBQW9CLEVBQXBCLHlDQUFvQixFQUNwQixtQkFBYSxFQUFiLGtDQUFhLEVBQ2Isb0JBQWMsRUFBZCxtQ0FBYyxFQUNkLHVCQUFtQixFQUFuQix3Q0FBbUIsRUFDbkIscUJBQWEsRUFBYixrQ0FBYSxFQUNiLG1DQUFpQyxFQUFqQyxzREFBaUMsRUFDakMscUJBQWEsRUFBYixrQ0FBYSxFQUNiLDBCQUFPLEVBQ1AseUJBQWdCLEVBQWhCLHFDQUFnQjtRQUdsQixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osS0FBSyxPQUFBO1lBQ0wsU0FBUyxXQUFBO1lBQ1QsU0FBUyxXQUFBO1lBQ1QsV0FBVyxhQUFBO1lBQ1gsbUJBQW1CLHFCQUFBO1lBQ25CLGNBQWMsZ0JBQUE7WUFDZCxLQUFLLE9BQUE7WUFDTCxNQUFNLFFBQUE7WUFDTixTQUFTLFdBQUE7WUFDVCxPQUFPLFNBQUE7WUFDUCxxQkFBcUIsdUJBQUE7WUFDckIsT0FBTyxTQUFBO1lBQ1AsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFCO29CQUNFLEVBQUUsRUFBRSxv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LEtBQUssUUFBUSxFQUFFOztnQkFDdEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7O2dCQUMzQyxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFFOUUsNERBQXNELEVBQXJELGFBQUssRUFBRSxjQUFNLENBQXlDO1NBQ3hEO2FBQU07WUFDTCxrREFBNEMsRUFBM0MsYUFBSyxFQUFFLGNBQU0sQ0FBK0I7U0FDOUM7UUFFRCxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDbkIsT0FBTyxLQUFLLEdBQUcsTUFBTSxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUVELGlDQUFhOzs7O0lBQWIsVUFBYyxJQUFJO1FBQ2hCLE9BQU8saUJBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUE5QixDQUE4QixDQUFDLENBQUM7SUFDMUUsQ0FBQzs7Z0JBOU5GLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBSk8sUUFBUTs7O29CQURoQjtDQWtPQyxBQS9ORCxJQStOQztTQTVOWSxTQUFTOzs7SUFDcEIsMkJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q0lDb25maWd9IGZyb20gJy4vY29uZmlnLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ0lTZXJ2aWNlIHtcbiAgY29uZmlnOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihjaUNvbmZpZzogQ0lDb25maWcpIHtcbiAgICBjb25zdCB7XG4gICAgICB0b2tlbiA9ICcnLFxuICAgICAgY29udGFpbmVyID0gJ2Nsb3VkaW1nLmlvJyxcbiAgICAgIHVsdHJhRmFzdCA9IGZhbHNlLFxuICAgICAgbGF6eUxvYWRpbmcgPSB0cnVlLFxuICAgICAgaW1nTG9hZGluZ0FuaW1hdGlvbiA9IHRydWUsXG4gICAgICBsYXp5TG9hZE9mZnNldCA9IDEwMCxcbiAgICAgIHdpZHRoID0gJzQwMCcsXG4gICAgICBoZWlnaHQgPSAnMzAwJyxcbiAgICAgIG9wZXJhdGlvbiA9ICd3aWR0aCcsXG4gICAgICBmaWx0ZXJzID0gJ24nLFxuICAgICAgcGxhY2Vob2xkZXJCYWNrZ3JvdW5kID0gJyNmNGY0ZjQnLFxuICAgICAgYmFzZVVybCA9ICcvJyxcbiAgICAgIHByZXNldHMsXG4gICAgICBxdWVyeVN0cmluZyA9ICcnXG4gICAgfSA9IGNpQ29uZmlnO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICB0b2tlbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHVsdHJhRmFzdCxcbiAgICAgIGxhenlMb2FkaW5nLFxuICAgICAgaW1nTG9hZGluZ0FuaW1hdGlvbixcbiAgICAgIGxhenlMb2FkT2Zmc2V0LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBvcGVyYXRpb24sXG4gICAgICBmaWx0ZXJzLFxuICAgICAgcGxhY2Vob2xkZXJCYWNrZ3JvdW5kLFxuICAgICAgYmFzZVVybCxcbiAgICAgIHByZXNldHM6IHByZXNldHMgPyBwcmVzZXRzIDpcbiAgICAgICAge1xuICAgICAgICAgIHhzOiAnKG1heC13aWR0aDogNTc1cHgpJywgIC8vIHRvIDU3NSAgICAgICBQSE9ORVxuICAgICAgICAgIHNtOiAnKG1pbi13aWR0aDogNTc2cHgpJywgIC8vIDU3NiAtIDc2NyAgICBQSEFCTEVUXG4gICAgICAgICAgbWQ6ICcobWluLXdpZHRoOiA3NjhweCknLCAgLy8gNzY4IC0gOTkxICAgIFRBQkxFVFxuICAgICAgICAgIGxnOiAnKG1pbi13aWR0aDogOTkycHgpJywgIC8vIDk5MiAtIDExOTkgICBTTUFMTF9MQVBUT1BfU0NSRUVOXG4gICAgICAgICAgeGw6ICcobWluLXdpZHRoOiAxMjAwcHgpJyAgLy8gZnJvbSAxMjAwICAgIFVTVUFMU0NSRUVOXG4gICAgICAgIH0sXG4gICAgICBxdWVyeVN0cmluZyxcbiAgICAgIGlubmVyV2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgLy8gaXNDaHJvbWU6IC9DaHJvbWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL0dvb2dsZSBJbmMvLnRlc3QobmF2aWdhdG9yLnZlbmRvcilcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGFyZW50V2lkdGgoaW1nLCBjb25maWcpIHtcbiAgICBpZiAoIShpbWcgJiYgaW1nLnBhcmVudEVsZW1lbnQgJiYgaW1nLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSAmJiAhKGltZyAmJiBpbWcud2lkdGgpKSB7XG4gICAgICByZXR1cm4gY29uZmlnLndpZHRoO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudENvbnRhaW5lciA9IHRoaXMuZ2V0UGFyZW50Q29udGFpbmVyV2l0aFdpZHRoKGltZyk7XG4gICAgY29uc3QgY3VycmVudFdpZHRoID0gcGFyc2VJbnQoJycgKyBwYXJlbnRDb250YWluZXIsIDEwKTtcbiAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gTnVtYmVyKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGltZykud2lkdGgpO1xuXG4gICAgaWYgKChjb21wdXRlZFdpZHRoICYmIChjb21wdXRlZFdpZHRoIDwgY3VycmVudFdpZHRoICYmIGNvbXB1dGVkV2lkdGggPiAxNSkgfHwgIWN1cnJlbnRXaWR0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNpemVMaW1pdChjb21wdXRlZFdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjdXJyZW50V2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGltZy53aWR0aCB8fCBjb25maWcud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFNpemVMaW1pdChjdXJyZW50V2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhcmVudENvbnRhaW5lcldpdGhXaWR0aChpbWcpIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgbGV0IHdpZHRoID0gMDtcblxuICAgIGRvIHtcbiAgICAgIHBhcmVudE5vZGUgPSAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLnBhcmVudE5vZGUpIHx8IGltZy5wYXJlbnROb2RlO1xuICAgICAgd2lkdGggPSBwYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH0gd2hpbGUgKHBhcmVudE5vZGUgJiYgIXdpZHRoKTtcblxuICAgIGNvbnN0IGxldFBhZGRpbmcgPSB3aWR0aCAmJiBwYXJlbnROb2RlICYmIHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudE5vZGUpLnBhZGRpbmdMZWZ0LCAxMCk7XG4gICAgY29uc3QgcmlnaHRQYWRkaW5nID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucGFkZGluZ1JpZ2h0LCAxMCk7XG5cbiAgICByZXR1cm4gd2lkdGggKyAod2lkdGggPyAoLWxldFBhZGRpbmcgLSByaWdodFBhZGRpbmcpIDogMCk7XG4gIH1cblxuICBnZXRTaXplTGltaXQoY3VycmVudFNpemUpIHtcbiAgICBpZiAoY3VycmVudFNpemUgPD0gMjUpIHtcbiAgICAgIHJldHVybiAnMjUnO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFNpemUgPD0gNTApIHtcbiAgICAgIHJldHVybiAnNTAnO1xuICAgIH1cblxuICAgIHJldHVybiAoTWF0aC5jZWlsKGN1cnJlbnRTaXplIC8gMTAwKSAqIDEwMCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNoZWNrT25NZWRpYShzaXplKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFycmF5ID0gc2l6ZS5zcGxpdCgnLCcpO1xuXG4gICAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tJZlJlbGF0aXZlVXJsUGF0aChzcmMpIHtcbiAgICBpZiAoc3JjLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgIHNyYyA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIHNyYztcbiAgICB9XG5cbiAgICByZXR1cm4gKHNyYy5pbmRleE9mKCdodHRwOi8vJykgIT09IDAgJiYgc3JjLmluZGV4T2YoJ2h0dHBzOi8vJykgIT09IDAgJiYgc3JjLmluZGV4T2YoJy8vJykgIT09IDApO1xuICB9XG5cbiAgZ2V0SW1nU3JjKHNyYywgaXNSZWxhdGl2ZVVybFBhdGggPSBmYWxzZSwgYmFzZVVybCA9ICcnKSB7XG4gICAgaWYgKGlzUmVsYXRpdmVVcmxQYXRoKSB7XG4gICAgICByZXR1cm4gYmFzZVVybCArIHNyYztcbiAgICB9XG5cbiAgICByZXR1cm4gc3JjO1xuICB9XG5cbiAgZ2V0U2l6ZUFjY29yZGluZ1RvUGl4ZWxSYXRpbyhzaXplKSB7XG4gICAgY29uc3Qgc3BsaXR0ZWRTaXplcyA9IHNpemUudG9TdHJpbmcoKS5zcGxpdCgneCcpO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgW10uZm9yRWFjaC5jYWxsKHNwbGl0dGVkU2l6ZXMsIGl0ZW0gPT4ge1xuICAgICAgcmVzdWx0LnB1c2goaXRlbSAqIE1hdGgucm91bmQod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCd4Jyk7XG4gIH1cblxuICBnZW5lcmF0ZVVybChvcGVyYXRpb24sIHNpemUsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKSB7XG4gICAgY29uc3Qge3VsdHJhRmFzdCwgdG9rZW4sIGNvbnRhaW5lciwgcXVlcnlTdHJpbmd9ID0gY29uZmlnO1xuICAgIGNvbnN0IGlzVWx0cmFGYXN0ID0gdWx0cmFGYXN0ID8gJ2h0dHBzOi8vc2NhbGVmbGV4LnVsdHJhZmFzdC5pby8nIDogJ2h0dHBzOi8vJztcbiAgICBjb25zdCBjbG91ZFVybCA9IGlzVWx0cmFGYXN0ICsgdG9rZW4gKyAnLicgKyBjb250YWluZXIgKyAnLyc7XG5cbiAgICByZXR1cm4gY2xvdWRVcmwgKyBvcGVyYXRpb24gKyAnLycgKyBzaXplICsgJy8nICsgZmlsdGVycyArICcvJyArIGltZ1NyYyArIHF1ZXJ5U3RyaW5nO1xuICB9XG5cbiAgZ2VuZXJhdGVTb3VyY2VzKG9wZXJhdGlvbiwgc2l6ZSwgZmlsdGVycywgaW1nU3JjLCBpc0FkYXB0aXZlLCBjb25maWcsIGlzUHJldmlldykge1xuICAgIGNvbnN0IHNvdXJjZXMgPSBbXTtcblxuICAgIGlmIChpc0FkYXB0aXZlKSB7XG4gICAgICBzaXplLmZvckVhY2goKHsgc2l6ZTogbmV4dFNpemUsIG1lZGlhOiBtZWRpYVF1ZXJ5fSkgPT4ge1xuICAgICAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICAgICAgbmV4dFNpemUgPSBuZXh0U2l6ZS5zcGxpdCgneCcpLm1hcChzaXplTmV4dCA9PiBzaXplTmV4dCAvIDUpLmpvaW4oJ3gnKTtcbiAgICAgICAgICBmaWx0ZXJzID0gJ3ExMC5mb2lsMSc7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VzLnB1c2goeyBtZWRpYVF1ZXJ5LCBzcmNTZXQ6IHRoaXMuZ2VuZXJhdGVTcmNzZXQob3BlcmF0aW9uLCBuZXh0U2l6ZSwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgICAgc2l6ZSA9IHNpemUuc3BsaXQoJ3gnKS5tYXAoc2l6ZU5leHQgPT4gc2l6ZU5leHQgLyA1KS5qb2luKCd4Jyk7XG4gICAgICAgIGZpbHRlcnMgPSAncTEwLmZvaWwxJztcbiAgICAgIH1cblxuICAgICAgc291cmNlcy5wdXNoKHtcbiAgICAgICAgc3JjU2V0OiB0aGlzLmdlbmVyYXRlU3Jjc2V0KG9wZXJhdGlvbiwgc2l6ZSwgZmlsdGVycywgaW1nU3JjLCBjb25maWcpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cblxuICBnZXRBZGFwdGl2ZVNpemUoc2l6ZSwgY29uZmlnKSB7XG4gICAgY29uc3QgYXJyYXlPZlNpemVzID0gc2l6ZS5zcGxpdCgnLCcpO1xuICAgIGNvbnN0IHNpemVzID0gW107XG5cbiAgICBhcnJheU9mU2l6ZXMuZm9yRWFjaChzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBzID0gc3RyaW5nLm1hdGNoKC8oKD88dmFyaWFibGU+W2Etel9dW2Etel9dKil8KD88bWVkaWE+XFwoW1xcU1xcc10qXFwpKSlcXHMqKD88c2l6ZT5bMC05eHBdKikvKS5ncm91cHM7XG4gICAgICBjb25zdCBtZWRpYSA9IGdyb3Vwcy5tZWRpYSA/IGdyb3Vwcy5tZWRpYSA6IGNvbmZpZy5wcmVzZXRzW2dyb3Vwcy52YXJpYWJsZV07XG5cbiAgICAgIHNpemVzLnB1c2goeyBtZWRpYSwgc2l6ZTogZ3JvdXBzLnNpemUgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2l6ZXM7XG4gIH1cblxuICBnZW5lcmF0ZVNyY3NldChvcGVyYXRpb24sIHNpemUsIGZpbHRlcnMsIGltZ1NyYywgY29uZmlnKSB7XG4gICAgY29uc3QgW2ltZ1dpZHRoLCBpbWdIZWlnaHRdID0gc2l6ZS50b1N0cmluZygpLnNwbGl0KCd4Jyk7XG5cbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUltZ1NyYyhvcGVyYXRpb24sIGZpbHRlcnMsIGltZ1NyYywgaW1nV2lkdGgsIGltZ0hlaWdodCwgMSwgY29uZmlnKTtcbiAgfVxuXG4gIGdlbmVyYXRlSW1nU3JjKG9wZXJhdGlvbiwgZmlsdGVycywgaW1nU3JjLCBpbWdXaWR0aCwgaW1nSGVpZ2h0LCBmYWN0b3IsIGNvbmZpZykge1xuICAgIGxldCBpbWdTaXplID0gJycgKyBNYXRoLnRydW5jKGltZ1dpZHRoICogZmFjdG9yKTtcblxuICAgIGlmIChpbWdIZWlnaHQpIHtcbiAgICAgIGltZ1NpemUgKz0gJ3gnICsgTWF0aC50cnVuYyhpbWdIZWlnaHQgKiBmYWN0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlVXJsKG9wZXJhdGlvbiwgdGhpcy5nZXRTaXplQWNjb3JkaW5nVG9QaXhlbFJhdGlvKGltZ1NpemUpLCBmaWx0ZXJzLCBpbWdTcmMsIGNvbmZpZylcbiAgICAgIC5yZXBsYWNlKCdodHRwOi8vc2NhbGVmbGV4LnVsdHJhZmFzdC5pby8nLCAnJylcbiAgICAgIC5yZXBsYWNlKCdodHRwczovL3NjYWxlZmxleC51bHRyYWZhc3QuaW8vJywgJycpXG4gICAgICAucmVwbGFjZSgnLy9zY2FsZWZsZXgudWx0cmFmYXN0LmlvLycsICcnKVxuICAgICAgLnJlcGxhY2UoJy8vLycsICcvJyk7XG4gIH1cblxuICBnZXRSYXRpb0J5U2l6ZShzaXplLCBjb25maWcpIHtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRTb3VyY2UgPSB0aGlzLmdldEJyZWFrUG9pbnQoc2l6ZSk7XG4gICAgICBjb25zdCBicmVha1BvaW50U2l6ZSA9IGJyZWFrUG9pbnRTb3VyY2UgPyBicmVha1BvaW50U291cmNlLnNpemUgOiBzaXplWzBdLnNpemU7XG5cbiAgICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGJyZWFrUG9pbnRTaXplLnRvU3RyaW5nKCkuc3BsaXQoJ3gnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgW3dpZHRoLCBoZWlnaHRdID0gc2l6ZS50b1N0cmluZygpLnNwbGl0KCd4Jyk7XG4gICAgfVxuXG4gICAgaWYgKHdpZHRoICYmIGhlaWdodCkge1xuICAgICAgcmV0dXJuIHdpZHRoIC8gaGVpZ2h0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0QnJlYWtQb2ludChzaXplKSB7XG4gICAgcmV0dXJuIFsuLi5zaXplXS5yZXZlcnNlKCkuZmluZChpdGVtID0+IG1hdGNoTWVkaWEoaXRlbS5tZWRpYSkubWF0Y2hlcyk7XG4gIH1cbn1cbiJdfQ== |
@@ -9,5 +9,5 @@ /** | ||
export { CIService } from './lib/lib.service'; | ||
export { CIConfig } from './lib/config.service'; | ||
export { CIConfig } from './lib/config.model'; | ||
export { CIModule } from './lib/lib.module'; | ||
export { ImgComponent } from './lib/img/img.component'; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWNsb3VkaW1hZ2UtcmVzcG9uc2l2ZS8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBLDBCQUFjLG1CQUFtQixDQUFDO0FBQ2xDLHlCQUFjLHNCQUFzQixDQUFDO0FBQ3JDLHlCQUFjLGtCQUFrQixDQUFDO0FBQ2pDLDZCQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBsaWJcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9saWIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9saWIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ltZy9pbWcuY29tcG9uZW50JztcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWNsb3VkaW1hZ2UtcmVzcG9uc2l2ZS8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBLDBCQUFjLG1CQUFtQixDQUFDO0FBQ2xDLHlCQUFjLG9CQUFvQixDQUFDO0FBQ25DLHlCQUFjLGtCQUFrQixDQUFDO0FBQ2pDLDZCQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBsaWJcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9saWIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWcubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGliLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbWcvaW1nLmNvbXBvbmVudCc7XG4iXX0= |
@@ -39,15 +39,14 @@ import { CommonModule } from '@angular/common'; | ||
baseUrl, | ||
presets: presets ? this.getPresets(presets, 'presets') : | ||
presets: presets ? presets : | ||
{ | ||
xs: 575, | ||
// up to 576 PHONE | ||
sm: 767, | ||
// 577 - 768 PHABLET | ||
md: 991, | ||
// 769 - 992 TABLET | ||
lg: 1199, | ||
// 993 - 1200 SMALL_LAPTOP_SCREEN | ||
xl: 3000 // from 1200 USUALSCREEN | ||
xs: '(max-width: 575px)', | ||
// to 575 PHONE | ||
sm: '(min-width: 576px)', | ||
// 576 - 767 PHABLET | ||
md: '(min-width: 768px)', | ||
// 768 - 991 TABLET | ||
lg: '(min-width: 992px)', | ||
// 992 - 1199 SMALL_LAPTOP_SCREEN | ||
xl: '(min-width: 1200px)' // from 1200 USUALSCREEN | ||
}, | ||
order: presets ? this.getPresets(presets, 'order') : ['xl', 'lg', 'md', 'sm', 'xs'], | ||
queryString, | ||
@@ -58,26 +57,2 @@ innerWidth: window.innerWidth, | ||
/** | ||
* @param {?=} value | ||
* @param {?=} type | ||
* @return {?} | ||
*/ | ||
getPresets(value = '', type) { | ||
/** @type {?} */ | ||
const splittedValues = value.split('|'); | ||
/** @type {?} */ | ||
const result = { presets: {}, order: [] }; | ||
for (let i = 0; i < splittedValues.length; i++) { | ||
/** @type {?} */ | ||
const splittedParam = splittedValues[i] && splittedValues[i].split(':'); | ||
/** @type {?} */ | ||
const prop = splittedParam[0] && splittedParam[0].trim(); | ||
/** @type {?} */ | ||
const val = splittedParam[1] && splittedParam[1].trim(); | ||
if (prop && val) { | ||
result.presets[prop] = val; | ||
result.order.unshift(prop); | ||
} | ||
} | ||
return result[type]; | ||
} | ||
/** | ||
* @param {?} img | ||
@@ -120,3 +95,7 @@ * @param {?} config | ||
} while (parentNode && !width); | ||
return width; | ||
/** @type {?} */ | ||
const letPadding = width && parentNode && parseInt(window.getComputedStyle(parentNode).paddingLeft, 10); | ||
/** @type {?} */ | ||
const rightPadding = parseInt(window.getComputedStyle(parentNode).paddingRight, 10); | ||
return width + (width ? (-letPadding - rightPadding) : 0); | ||
} | ||
@@ -128,26 +107,9 @@ /** | ||
getSizeLimit(currentSize) { | ||
return currentSize <= 25 ? '25' : | ||
currentSize <= 50 ? '50' : | ||
currentSize <= 100 ? '100' | ||
: currentSize <= 200 ? '200' | ||
: currentSize <= 300 ? '300' | ||
: currentSize <= 400 ? '400' | ||
: currentSize <= 500 ? '500' | ||
: currentSize <= 600 ? '600' | ||
: currentSize <= 700 ? '700' | ||
: currentSize <= 800 ? '800' | ||
: currentSize <= 900 ? '900' | ||
: currentSize <= 1000 ? '1000' | ||
: currentSize <= 1100 ? '1100' | ||
: currentSize <= 1200 ? '1200' | ||
: currentSize <= 1300 ? '1300' | ||
: currentSize <= 1400 ? '1400' | ||
: currentSize <= 1500 ? '1500' | ||
: currentSize <= 1600 ? '1600' | ||
: currentSize <= 1700 ? '1700' | ||
: currentSize <= 1800 ? '1800' | ||
: currentSize <= 1900 ? '1900' | ||
: currentSize <= 2400 ? '2400' | ||
: currentSize <= 2800 ? '2800' | ||
: '3600'; | ||
if (currentSize <= 25) { | ||
return '25'; | ||
} | ||
if (currentSize <= 50) { | ||
return '50'; | ||
} | ||
return (Math.ceil(currentSize / 100) * 100).toString(); | ||
} | ||
@@ -159,3 +121,10 @@ /** | ||
checkOnMedia(size) { | ||
return size && typeof size === 'object'; | ||
try { | ||
/** @type {?} */ | ||
const array = size.split(','); | ||
return array.length > 1; | ||
} | ||
catch (e) { | ||
return false; | ||
} | ||
} | ||
@@ -228,31 +197,17 @@ /** | ||
if (isAdaptive) { | ||
/** @type {?} */ | ||
const orderFiltered = []; | ||
for (let i = 0; i < config.order.length; i++) { | ||
/** @type {?} */ | ||
const nextSize = size[config.order[i]]; | ||
if (nextSize) { | ||
orderFiltered.unshift(config.order[i]); | ||
} | ||
} | ||
for (let i = 0; i < orderFiltered.length; i++) { | ||
/** @type {?} */ | ||
const isLast = !(i < orderFiltered.length - 1); | ||
/** @type {?} */ | ||
const nextSizeType = isLast ? orderFiltered[i - 1] : orderFiltered[i]; | ||
/** @type {?} */ | ||
let nextSize = size[orderFiltered[i]]; | ||
size.forEach(({ size: nextSize, media: mediaQuery }) => { | ||
if (isPreview) { | ||
nextSize = nextSize.split('x').map(item => item / 5).join('x'); | ||
nextSize = nextSize.split('x').map(sizeNext => sizeNext / 5).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
/** @type {?} */ | ||
const srcSet = this.generateSrcset(operation, nextSize, filters, imgSrc, config); | ||
/** @type {?} */ | ||
const mediaQuery = '(' + (isLast ? 'min' : 'max') + '-width: ' + (config.presets[nextSizeType] + (isLast ? 1 : 0)) + 'px)'; | ||
sources.push({ mediaQuery, srcSet }); | ||
} | ||
sources.push({ mediaQuery, srcSet: this.generateSrcset(operation, nextSize, filters, imgSrc, config) }); | ||
}); | ||
} | ||
else { | ||
if (isPreview) { | ||
size = size.split('x').map(sizeNext => sizeNext / 5).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
sources.push({ | ||
srcSet: this.generateSrcset(operation, size.split('x').map(item => item / 5).join('x'), 'q10.foil1', imgSrc, config) | ||
srcSet: this.generateSrcset(operation, size, filters, imgSrc, config) | ||
}); | ||
@@ -263,2 +218,21 @@ } | ||
/** | ||
* @param {?} size | ||
* @param {?} config | ||
* @return {?} | ||
*/ | ||
getAdaptiveSize(size, config) { | ||
/** @type {?} */ | ||
const arrayOfSizes = size.split(','); | ||
/** @type {?} */ | ||
const sizes = []; | ||
arrayOfSizes.forEach(string => { | ||
/** @type {?} */ | ||
const groups = string.match(/((?<variable>[a-z_][a-z_]*)|(?<media>\([\S\s]*\)))\s*(?<size>[0-9xp]*)/).groups; | ||
/** @type {?} */ | ||
const media = groups.media ? groups.media : config.presets[groups.variable]; | ||
sizes.push({ media, size: groups.size }); | ||
}); | ||
return sizes; | ||
} | ||
/** | ||
* @param {?} operation | ||
@@ -272,6 +246,3 @@ * @param {?} size | ||
generateSrcset(operation, size, filters, imgSrc, config) { | ||
/** @type {?} */ | ||
const imgWidth = size.toString().split('x')[0]; | ||
/** @type {?} */ | ||
const imgHeight = size.toString().split('x')[1]; | ||
const [imgWidth, imgHeight] = size.toString().split('x'); | ||
return this.generateImgSrc(operation, filters, imgSrc, imgWidth, imgHeight, 1, config); | ||
@@ -313,29 +284,9 @@ } | ||
/** @type {?} */ | ||
const breakPoint = this.getBreakPoint(config); | ||
const breakPointSource = this.getBreakPoint(size); | ||
/** @type {?} */ | ||
let orderIndex = config.order.indexOf(breakPoint); | ||
/** @type {?} */ | ||
let breakPointSize = null; | ||
do { | ||
/** @type {?} */ | ||
const nextBreakpoint = config.order[orderIndex]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndex--; | ||
} while (!breakPointSize && orderIndex >= 0); | ||
if (!breakPointSize) { | ||
/** @type {?} */ | ||
let orderIndexStepTwo = config.order.indexOf(breakPoint); | ||
do { | ||
/** @type {?} */ | ||
const nextBreakpoint = config.order[orderIndexStepTwo]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndexStepTwo++; | ||
} while (!breakPointSize && orderIndexStepTwo <= config.order.length); | ||
} | ||
width = breakPointSize.toString().split('x')[0]; | ||
height = breakPointSize.toString().split('x')[1]; | ||
const breakPointSize = breakPointSource ? breakPointSource.size : size[0].size; | ||
[width, height] = breakPointSize.toString().split('x'); | ||
} | ||
else { | ||
width = size.toString().split('x')[0]; | ||
height = size.toString().split('x')[1]; | ||
[width, height] = size.toString().split('x'); | ||
} | ||
@@ -348,12 +299,7 @@ if (width && height) { | ||
/** | ||
* @param {?} config | ||
* @param {?} size | ||
* @return {?} | ||
*/ | ||
getBreakPoint(config) { | ||
const { presets, order } = config; | ||
/** @type {?} */ | ||
const innerWidth = window.innerWidth; | ||
/** @type {?} */ | ||
const prevBreakPointLimit = order.findIndex(item => presets[item] < innerWidth); | ||
return order[prevBreakPointLimit - 1] || order[prevBreakPointLimit] || order[order.length - 1]; | ||
getBreakPoint(size) { | ||
return [...size].reverse().find(item => matchMedia(item.media).matches); | ||
} | ||
@@ -384,5 +330,8 @@ } | ||
this._sanitizer = _sanitizer; | ||
this.class = ''; | ||
this.offset = 100; | ||
this.cloudimageUrl = ''; | ||
this.sources = []; | ||
this.firstSource = null; | ||
this.restSources = []; | ||
this.isLoaded = false; | ||
@@ -405,8 +354,5 @@ this.isProcessed = false; | ||
this.resizeSubscription$ = this.resizeObservable$.subscribe(() => { | ||
if (this.isAdaptive) { | ||
if (this.isAdaptive || this.windowInnerWidth < window.innerWidth) { | ||
this.processImage(); | ||
} | ||
else if (this.windowInnerWidth < window.innerWidth) { | ||
this.processImage(); | ||
} | ||
this.windowInnerWidth = window.innerWidth; | ||
@@ -433,3 +379,3 @@ }); | ||
/** @type {?} */ | ||
const size = this.size || this.s || config.size || parentContainerWidth; | ||
let size = this.size || this.s || config.size || parentContainerWidth; | ||
/** @type {?} */ | ||
@@ -439,2 +385,3 @@ const filters = this.filters || this.f || config.filters; | ||
const isAdaptive = this.ciService.checkOnMedia(size); | ||
size = isAdaptive ? this.ciService.getAdaptiveSize(size, config) : size; | ||
/** @type {?} */ | ||
@@ -448,3 +395,3 @@ const isRelativeUrlPath = this.ciService.checkIfRelativeUrlPath(this.src); | ||
this.cloudimageUrl = isAdaptive ? | ||
this.ciService.generateUrl('width', parentContainerWidth, filters, imgSrc, config) : | ||
this.ciService.generateUrl('width', this.ciService.getSizeAccordingToPixelRatio(parentContainerWidth), filters, imgSrc, config) : | ||
this.ciService.generateUrl(operation, resultSize, filters, imgSrc, config); | ||
@@ -498,2 +445,19 @@ this.sources = isAdaptive ? | ||
*/ | ||
getRestSources() { | ||
/** @type {?} */ | ||
const resultSources = [...(!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))]; | ||
return resultSources.slice(1).reverse(); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
getFirstSource() { | ||
/** @type {?} */ | ||
const resultSources = [...(!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))]; | ||
this.firstSource = resultSources[0]; | ||
return resultSources[0]; | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
getPositionStyle() { | ||
@@ -506,3 +470,5 @@ return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? 'absolute' : 'relative'); | ||
getImgHeight() { | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
// todo check if we need 100% height | ||
// return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? 'auto' : 'auto'); | ||
} | ||
@@ -569,3 +535,3 @@ /** | ||
let result = 'transparent'; | ||
if (this.isRatio) { | ||
if (this.isRatio && !this.isPreviewLoaded && !this.isLoaded) { | ||
result = config.placeholderBackground; | ||
@@ -585,3 +551,3 @@ } | ||
<picture | ||
class="{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}" | ||
[class]="class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')" | ||
style="display:block;width:100%;overflow:hidden;position:relative;" | ||
@@ -593,3 +559,3 @@ [style.paddingBottom]="getPicturePaddingBottom()" | ||
<source | ||
*ngFor="let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))" | ||
*ngFor="let source of getRestSources()" | ||
[media]="source.mediaQuery || ''" | ||
@@ -600,2 +566,8 @@ [attr.lazyLoad]="source.srcSet || ''" | ||
/> | ||
<source | ||
*ngIf="getFirstSource()" | ||
[attr.lazyLoad]="firstSource.srcSet || ''" | ||
[srcset]="firstSource.srcSet || ''" | ||
(load)="onImageLoad()" | ||
/> | ||
<img | ||
@@ -616,3 +588,3 @@ style="display:block;width:100%;opacity:1;top:0;left:0;" | ||
<picture | ||
class="{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}" | ||
[class]="class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')" | ||
style="display:block;width:100%;overflow:hidden;position:relative;" | ||
@@ -624,7 +596,14 @@ [style.paddingBottom]="getPicturePaddingBottom()" | ||
<source | ||
*ngFor="let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))" | ||
*ngFor="let source of restSources" | ||
[media]="source.mediaQuery || ''" | ||
[attr.lazyLoad]="source.srcSet || ''" | ||
[srcset]="source.srcSet || ''" | ||
(load)="onImageLoad()" | ||
/> | ||
<source | ||
*ngIf="firstSource" | ||
[attr.lazyLoad]="firstSource.srcSet || ''" | ||
[srcset]="firstSource.srcSet || ''" | ||
(load)="onImageLoad()" | ||
/> | ||
<img | ||
@@ -631,0 +610,0 @@ style="display:block;width:100%;opacity:1;top:0;left:0;" |
import { CommonModule } from '@angular/common'; | ||
import { __assign } from 'tslib'; | ||
import { __read, __spread, __assign } from 'tslib'; | ||
import { Injectable, NgModule, defineInjectable, inject, Component, ViewChild, Input } from '@angular/core'; | ||
@@ -40,15 +40,14 @@ import { DomSanitizer } from '@angular/platform-browser'; | ||
baseUrl: baseUrl, | ||
presets: presets ? this.getPresets(presets, 'presets') : | ||
presets: presets ? presets : | ||
{ | ||
xs: 575, | ||
// up to 576 PHONE | ||
sm: 767, | ||
// 577 - 768 PHABLET | ||
md: 991, | ||
// 769 - 992 TABLET | ||
lg: 1199, | ||
// 993 - 1200 SMALL_LAPTOP_SCREEN | ||
xl: 3000 // from 1200 USUALSCREEN | ||
xs: '(max-width: 575px)', | ||
// to 575 PHONE | ||
sm: '(min-width: 576px)', | ||
// 576 - 767 PHABLET | ||
md: '(min-width: 768px)', | ||
// 768 - 991 TABLET | ||
lg: '(min-width: 992px)', | ||
// 992 - 1199 SMALL_LAPTOP_SCREEN | ||
xl: '(min-width: 1200px)' // from 1200 USUALSCREEN | ||
}, | ||
order: presets ? this.getPresets(presets, 'order') : ['xl', 'lg', 'md', 'sm', 'xs'], | ||
queryString: queryString, | ||
@@ -59,32 +58,2 @@ innerWidth: window.innerWidth, | ||
/** | ||
* @param {?=} value | ||
* @param {?=} type | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getPresets = /** | ||
* @param {?=} value | ||
* @param {?=} type | ||
* @return {?} | ||
*/ | ||
function (value, type) { | ||
if (value === void 0) { value = ''; } | ||
/** @type {?} */ | ||
var splittedValues = value.split('|'); | ||
/** @type {?} */ | ||
var result = { presets: {}, order: [] }; | ||
for (var i = 0; i < splittedValues.length; i++) { | ||
/** @type {?} */ | ||
var splittedParam = splittedValues[i] && splittedValues[i].split(':'); | ||
/** @type {?} */ | ||
var prop = splittedParam[0] && splittedParam[0].trim(); | ||
/** @type {?} */ | ||
var val = splittedParam[1] && splittedParam[1].trim(); | ||
if (prop && val) { | ||
result.presets[prop] = val; | ||
result.order.unshift(prop); | ||
} | ||
} | ||
return result[type]; | ||
}; | ||
/** | ||
* @param {?} img | ||
@@ -136,3 +105,7 @@ * @param {?} config | ||
} while (parentNode && !width); | ||
return width; | ||
/** @type {?} */ | ||
var letPadding = width && parentNode && parseInt(window.getComputedStyle(parentNode).paddingLeft, 10); | ||
/** @type {?} */ | ||
var rightPadding = parseInt(window.getComputedStyle(parentNode).paddingRight, 10); | ||
return width + (width ? (-letPadding - rightPadding) : 0); | ||
}; | ||
@@ -148,26 +121,9 @@ /** | ||
function (currentSize) { | ||
return currentSize <= 25 ? '25' : | ||
currentSize <= 50 ? '50' : | ||
currentSize <= 100 ? '100' | ||
: currentSize <= 200 ? '200' | ||
: currentSize <= 300 ? '300' | ||
: currentSize <= 400 ? '400' | ||
: currentSize <= 500 ? '500' | ||
: currentSize <= 600 ? '600' | ||
: currentSize <= 700 ? '700' | ||
: currentSize <= 800 ? '800' | ||
: currentSize <= 900 ? '900' | ||
: currentSize <= 1000 ? '1000' | ||
: currentSize <= 1100 ? '1100' | ||
: currentSize <= 1200 ? '1200' | ||
: currentSize <= 1300 ? '1300' | ||
: currentSize <= 1400 ? '1400' | ||
: currentSize <= 1500 ? '1500' | ||
: currentSize <= 1600 ? '1600' | ||
: currentSize <= 1700 ? '1700' | ||
: currentSize <= 1800 ? '1800' | ||
: currentSize <= 1900 ? '1900' | ||
: currentSize <= 2400 ? '2400' | ||
: currentSize <= 2800 ? '2800' | ||
: '3600'; | ||
if (currentSize <= 25) { | ||
return '25'; | ||
} | ||
if (currentSize <= 50) { | ||
return '50'; | ||
} | ||
return (Math.ceil(currentSize / 100) * 100).toString(); | ||
}; | ||
@@ -183,3 +139,10 @@ /** | ||
function (size) { | ||
return size && typeof size === 'object'; | ||
try { | ||
/** @type {?} */ | ||
var array = size.split(','); | ||
return array.length > 1; | ||
} | ||
catch (e) { | ||
return false; | ||
} | ||
}; | ||
@@ -283,34 +246,22 @@ /** | ||
function (operation, size, filters, imgSrc, isAdaptive, config, isPreview) { | ||
var _this = this; | ||
/** @type {?} */ | ||
var sources = []; | ||
if (isAdaptive) { | ||
/** @type {?} */ | ||
var orderFiltered = []; | ||
for (var i = 0; i < config.order.length; i++) { | ||
/** @type {?} */ | ||
var nextSize = size[config.order[i]]; | ||
if (nextSize) { | ||
orderFiltered.unshift(config.order[i]); | ||
} | ||
} | ||
for (var i = 0; i < orderFiltered.length; i++) { | ||
/** @type {?} */ | ||
var isLast = !(i < orderFiltered.length - 1); | ||
/** @type {?} */ | ||
var nextSizeType = isLast ? orderFiltered[i - 1] : orderFiltered[i]; | ||
/** @type {?} */ | ||
var nextSize = size[orderFiltered[i]]; | ||
size.forEach(function (_a) { | ||
var nextSize = _a.size, mediaQuery = _a.media; | ||
if (isPreview) { | ||
nextSize = nextSize.split('x').map(function (item) { return item / 5; }).join('x'); | ||
nextSize = nextSize.split('x').map(function (sizeNext) { return sizeNext / 5; }).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
/** @type {?} */ | ||
var srcSet = this.generateSrcset(operation, nextSize, filters, imgSrc, config); | ||
/** @type {?} */ | ||
var mediaQuery = '(' + (isLast ? 'min' : 'max') + '-width: ' + (config.presets[nextSizeType] + (isLast ? 1 : 0)) + 'px)'; | ||
sources.push({ mediaQuery: mediaQuery, srcSet: srcSet }); | ||
} | ||
sources.push({ mediaQuery: mediaQuery, srcSet: _this.generateSrcset(operation, nextSize, filters, imgSrc, config) }); | ||
}); | ||
} | ||
else { | ||
if (isPreview) { | ||
size = size.split('x').map(function (sizeNext) { return sizeNext / 5; }).join('x'); | ||
filters = 'q10.foil1'; | ||
} | ||
sources.push({ | ||
srcSet: this.generateSrcset(operation, size.split('x').map(function (item) { return item / 5; }).join('x'), 'q10.foil1', imgSrc, config) | ||
srcSet: this.generateSrcset(operation, size, filters, imgSrc, config) | ||
}); | ||
@@ -321,2 +272,26 @@ } | ||
/** | ||
* @param {?} size | ||
* @param {?} config | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getAdaptiveSize = /** | ||
* @param {?} size | ||
* @param {?} config | ||
* @return {?} | ||
*/ | ||
function (size, config) { | ||
/** @type {?} */ | ||
var arrayOfSizes = size.split(','); | ||
/** @type {?} */ | ||
var sizes = []; | ||
arrayOfSizes.forEach(function (string) { | ||
/** @type {?} */ | ||
var groups = string.match(/((?<variable>[a-z_][a-z_]*)|(?<media>\([\S\s]*\)))\s*(?<size>[0-9xp]*)/).groups; | ||
/** @type {?} */ | ||
var media = groups.media ? groups.media : config.presets[groups.variable]; | ||
sizes.push({ media: media, size: groups.size }); | ||
}); | ||
return sizes; | ||
}; | ||
/** | ||
* @param {?} operation | ||
@@ -338,6 +313,3 @@ * @param {?} size | ||
function (operation, size, filters, imgSrc, config) { | ||
/** @type {?} */ | ||
var imgWidth = size.toString().split('x')[0]; | ||
/** @type {?} */ | ||
var imgHeight = size.toString().split('x')[1]; | ||
var _a = __read(size.toString().split('x'), 2), imgWidth = _a[0], imgHeight = _a[1]; | ||
return this.generateImgSrc(operation, filters, imgSrc, imgWidth, imgHeight, 1, config); | ||
@@ -388,2 +360,3 @@ }; | ||
function (size, config) { | ||
var _a, _b; | ||
/** @type {?} */ | ||
@@ -395,29 +368,9 @@ var width; | ||
/** @type {?} */ | ||
var breakPoint = this.getBreakPoint(config); | ||
var breakPointSource = this.getBreakPoint(size); | ||
/** @type {?} */ | ||
var orderIndex = config.order.indexOf(breakPoint); | ||
/** @type {?} */ | ||
var breakPointSize = null; | ||
do { | ||
/** @type {?} */ | ||
var nextBreakpoint = config.order[orderIndex]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndex--; | ||
} while (!breakPointSize && orderIndex >= 0); | ||
if (!breakPointSize) { | ||
/** @type {?} */ | ||
var orderIndexStepTwo = config.order.indexOf(breakPoint); | ||
do { | ||
/** @type {?} */ | ||
var nextBreakpoint = config.order[orderIndexStepTwo]; | ||
breakPointSize = size[nextBreakpoint]; | ||
orderIndexStepTwo++; | ||
} while (!breakPointSize && orderIndexStepTwo <= config.order.length); | ||
} | ||
width = breakPointSize.toString().split('x')[0]; | ||
height = breakPointSize.toString().split('x')[1]; | ||
var breakPointSize = breakPointSource ? breakPointSource.size : size[0].size; | ||
_a = __read(breakPointSize.toString().split('x'), 2), width = _a[0], height = _a[1]; | ||
} | ||
else { | ||
width = size.toString().split('x')[0]; | ||
height = size.toString().split('x')[1]; | ||
_b = __read(size.toString().split('x'), 2), width = _b[0], height = _b[1]; | ||
} | ||
@@ -430,16 +383,11 @@ if (width && height) { | ||
/** | ||
* @param {?} config | ||
* @param {?} size | ||
* @return {?} | ||
*/ | ||
CIService.prototype.getBreakPoint = /** | ||
* @param {?} config | ||
* @param {?} size | ||
* @return {?} | ||
*/ | ||
function (config) { | ||
var presets = config.presets, order = config.order; | ||
/** @type {?} */ | ||
var innerWidth = window.innerWidth; | ||
/** @type {?} */ | ||
var prevBreakPointLimit = order.findIndex(function (item) { return presets[item] < innerWidth; }); | ||
return order[prevBreakPointLimit - 1] || order[prevBreakPointLimit] || order[order.length - 1]; | ||
function (size) { | ||
return __spread(size).reverse().find(function (item) { return matchMedia(item.media).matches; }); | ||
}; | ||
@@ -467,5 +415,8 @@ CIService.decorators = [ | ||
this._sanitizer = _sanitizer; | ||
this.class = ''; | ||
this.offset = 100; | ||
this.cloudimageUrl = ''; | ||
this.sources = []; | ||
this.firstSource = null; | ||
this.restSources = []; | ||
this.isLoaded = false; | ||
@@ -495,8 +446,5 @@ this.isProcessed = false; | ||
this.resizeSubscription$ = this.resizeObservable$.subscribe(function () { | ||
if (_this.isAdaptive) { | ||
if (_this.isAdaptive || _this.windowInnerWidth < window.innerWidth) { | ||
_this.processImage(); | ||
} | ||
else if (_this.windowInnerWidth < window.innerWidth) { | ||
_this.processImage(); | ||
} | ||
_this.windowInnerWidth = window.innerWidth; | ||
@@ -535,2 +483,3 @@ }); | ||
var isAdaptive = this.ciService.checkOnMedia(size); | ||
size = isAdaptive ? this.ciService.getAdaptiveSize(size, config) : size; | ||
/** @type {?} */ | ||
@@ -544,3 +493,3 @@ var isRelativeUrlPath = this.ciService.checkIfRelativeUrlPath(this.src); | ||
this.cloudimageUrl = isAdaptive ? | ||
this.ciService.generateUrl('width', parentContainerWidth, filters, imgSrc, config) : | ||
this.ciService.generateUrl('width', this.ciService.getSizeAccordingToPixelRatio(parentContainerWidth), filters, imgSrc, config) : | ||
this.ciService.generateUrl(operation, resultSize, filters, imgSrc, config); | ||
@@ -597,2 +546,25 @@ this.sources = isAdaptive ? | ||
*/ | ||
ImgComponent.prototype.getRestSources = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
/** @type {?} */ | ||
var resultSources = __spread((!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))); | ||
return resultSources.slice(1).reverse(); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
ImgComponent.prototype.getFirstSource = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
/** @type {?} */ | ||
var resultSources = __spread((!this.isPreview ? this.sources : (this.isPreviewLoaded ? this.sources : this.previewSources))); | ||
this.firstSource = resultSources[0]; | ||
return resultSources[0]; | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
ImgComponent.prototype.getPositionStyle = /** | ||
@@ -611,3 +583,5 @@ * @return {?} | ||
function () { | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
// todo check if we need 100% height | ||
// return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? '100%' : 'auto'); | ||
return this._sanitizer.bypassSecurityTrustStyle(this.isRatio ? 'auto' : 'auto'); | ||
}; | ||
@@ -689,3 +663,3 @@ /** | ||
var result = 'transparent'; | ||
if (this.isRatio) { | ||
if (this.isRatio && !this.isPreviewLoaded && !this.isLoaded) { | ||
result = config.placeholderBackground; | ||
@@ -698,3 +672,3 @@ } | ||
selector: 'ci-img', | ||
template: "\n <picture #pictureElem *ngIf=\"!isProcessed\"></picture>\n\n <ng-container [ngSwitch]=\"lazyLoading\">\n <ng-container *ngSwitchCase=\"true\">\n <picture\n class=\"{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [lazyLoad]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [offset]=\"offset\"\n [alt]=\"\">\n </picture>\n </ng-container>\n <div *ngSwitchCase=\"false\">\n <picture\n class=\"{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))\"\n [media]=\"source.mediaQuery || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [src]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [alt]=\"\">\n </picture>\n </div>\n </ng-container>\n " | ||
template: "\n <picture #pictureElem *ngIf=\"!isProcessed\"></picture>\n\n <ng-container [ngSwitch]=\"lazyLoading\">\n <ng-container *ngSwitchCase=\"true\">\n <picture\n [class]=\"class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of getRestSources()\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <source\n *ngIf=\"getFirstSource()\"\n [attr.lazyLoad]=\"firstSource.srcSet || ''\"\n [srcset]=\"firstSource.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [lazyLoad]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [offset]=\"offset\"\n [alt]=\"\">\n </picture>\n </ng-container>\n <div *ngSwitchCase=\"false\">\n <picture\n [class]=\"class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of restSources\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <source\n *ngIf=\"firstSource\"\n [attr.lazyLoad]=\"firstSource.srcSet || ''\"\n [srcset]=\"firstSource.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [src]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [alt]=\"\">\n </picture>\n </div>\n </ng-container>\n " | ||
}] } | ||
@@ -701,0 +675,0 @@ ]; |
@@ -26,2 +26,4 @@ import { OnInit, AfterViewInit, ElementRef, OnDestroy } from '@angular/core'; | ||
sources: any[]; | ||
firstSource: any; | ||
restSources: any[]; | ||
isLoaded: boolean; | ||
@@ -47,2 +49,4 @@ isProcessed: boolean; | ||
onImageLoad(): void; | ||
getRestSources(): any[]; | ||
getFirstSource(): any; | ||
getPositionStyle(): import("@angular/platform-browser/src/security/dom_sanitization_service").SafeStyle; | ||
@@ -49,0 +53,0 @@ getImgHeight(): import("@angular/platform-browser/src/security/dom_sanitization_service").SafeStyle; |
@@ -1,9 +0,8 @@ | ||
import { CIConfig } from './config.service'; | ||
import { CIConfig } from './config.model'; | ||
export declare class CIService { | ||
config: any; | ||
constructor(ciConfig: CIConfig); | ||
getPresets(value: string, type: any): any; | ||
getParentWidth(img: any, config: any): any; | ||
getParentContainerWithWidth(img: any): number; | ||
getSizeLimit(currentSize: any): "400" | "300" | "25" | "50" | "100" | "200" | "500" | "600" | "700" | "800" | "900" | "1000" | "1100" | "1200" | "1300" | "1400" | "1500" | "1600" | "1700" | "1800" | "1900" | "2400" | "2800" | "3600"; | ||
getSizeLimit(currentSize: any): string; | ||
checkOnMedia(size: any): boolean; | ||
@@ -15,6 +14,7 @@ checkIfRelativeUrlPath(src: any): boolean; | ||
generateSources(operation: any, size: any, filters: any, imgSrc: any, isAdaptive: any, config: any, isPreview: any): any[]; | ||
getAdaptiveSize(size: any, config: any): any[]; | ||
generateSrcset(operation: any, size: any, filters: any, imgSrc: any, config: any): string; | ||
generateImgSrc(operation: any, filters: any, imgSrc: any, imgWidth: any, imgHeight: any, factor: any, config: any): string; | ||
getRatioBySize(size: any, config: any): number; | ||
getBreakPoint(config: any): any; | ||
getBreakPoint(size: any): any; | ||
} |
@@ -1,1 +0,1 @@ | ||
{"__symbolic":"module","version":4,"metadata":{"CIService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"CIConfig"}]}],"getPresets":[{"__symbolic":"method"}],"getParentWidth":[{"__symbolic":"method"}],"getParentContainerWithWidth":[{"__symbolic":"method"}],"getSizeLimit":[{"__symbolic":"method"}],"checkOnMedia":[{"__symbolic":"method"}],"checkIfRelativeUrlPath":[{"__symbolic":"method"}],"getImgSrc":[{"__symbolic":"method"}],"getSizeAccordingToPixelRatio":[{"__symbolic":"method"}],"generateUrl":[{"__symbolic":"method"}],"generateSources":[{"__symbolic":"method"}],"generateSrcset":[{"__symbolic":"method"}],"generateImgSrc":[{"__symbolic":"method"}],"getRatioBySize":[{"__symbolic":"method"}],"getBreakPoint":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"CIConfig":{"__symbolic":"class","members":{}},"CIModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ImgComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":7,"character":12},{"__symbolic":"reference","module":"ng-lazyload-image","name":"LazyLoadImageModule","line":7,"character":26}],"exports":[{"__symbolic":"reference","name":"ImgComponent"}],"providers":[]}]}],"members":{}},"ImgComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"ci-img","template":"\n <picture #pictureElem *ngIf=\"!isProcessed\"></picture>\n\n <ng-container [ngSwitch]=\"lazyLoading\">\n <ng-container *ngSwitchCase=\"true\">\n <picture\n class=\"{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [lazyLoad]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [offset]=\"offset\"\n [alt]=\"\">\n </picture>\n </ng-container>\n <div *ngSwitchCase=\"false\">\n <picture\n class=\"{{class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')}}\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of (!isPreview ? sources : (isPreviewLoaded ? sources : previewSources))\"\n [media]=\"source.mediaQuery || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [src]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [alt]=\"\">\n </picture>\n </div>\n </ng-container>\n "}]}],"members":{"imgElem":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":70,"character":3},"arguments":["imgElem"]}]}],"pictureElem":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":71,"character":3},"arguments":["pictureElem"]}]}],"src":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"class":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":3}}]}],"alt":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"operation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"o":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"s":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}}]}],"filters":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}}]}],"f":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}}]}],"ratio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3}}]}],"offset":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"ngSwitch":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"CIService"},{"__symbolic":"reference","module":"@angular/platform-browser","name":"DomSanitizer","line":104,"character":64}]}],"ngOnDestroy":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"processImage":[{"__symbolic":"method"}],"onImageLoad":[{"__symbolic":"method"}],"getPositionStyle":[{"__symbolic":"method"}],"getImgHeight":[{"__symbolic":"method"}],"getTransformStyle":[{"__symbolic":"method"}],"getTransitionStyle":[{"__symbolic":"method"}],"getFilterStyle":[{"__symbolic":"method"}],"getPicturePaddingBottom":[{"__symbolic":"method"}],"getPictureBackground":[{"__symbolic":"method"}]}}},"origins":{"CIService":"./lib/lib.service","CIConfig":"./lib/config.service","CIModule":"./lib/lib.module","ImgComponent":"./lib/img/img.component"},"importAs":"ng-cloudimage-responsive"} | ||
{"__symbolic":"module","version":4,"metadata":{"CIService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"CIConfig"}]}],"getParentWidth":[{"__symbolic":"method"}],"getParentContainerWithWidth":[{"__symbolic":"method"}],"getSizeLimit":[{"__symbolic":"method"}],"checkOnMedia":[{"__symbolic":"method"}],"checkIfRelativeUrlPath":[{"__symbolic":"method"}],"getImgSrc":[{"__symbolic":"method"}],"getSizeAccordingToPixelRatio":[{"__symbolic":"method"}],"generateUrl":[{"__symbolic":"method"}],"generateSources":[{"__symbolic":"method"}],"getAdaptiveSize":[{"__symbolic":"method"}],"generateSrcset":[{"__symbolic":"method"}],"generateImgSrc":[{"__symbolic":"method"}],"getRatioBySize":[{"__symbolic":"method"}],"getBreakPoint":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"CIConfig":{"__symbolic":"class","members":{}},"CIModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ImgComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":7,"character":12},{"__symbolic":"reference","module":"ng-lazyload-image","name":"LazyLoadImageModule","line":7,"character":26}],"exports":[{"__symbolic":"reference","name":"ImgComponent"}],"providers":[]}]}],"members":{}},"ImgComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"ci-img","template":"\n <picture #pictureElem *ngIf=\"!isProcessed\"></picture>\n\n <ng-container [ngSwitch]=\"lazyLoading\">\n <ng-container *ngSwitchCase=\"true\">\n <picture\n [class]=\"class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of getRestSources()\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <source\n *ngIf=\"getFirstSource()\"\n [attr.lazyLoad]=\"firstSource.srcSet || ''\"\n [srcset]=\"firstSource.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [lazyLoad]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [offset]=\"offset\"\n [alt]=\"\">\n </picture>\n </ng-container>\n <div *ngSwitchCase=\"false\">\n <picture\n [class]=\"class + ' cloudimage-image-picture cloudimage-image-' + (isLoaded ? 'loaded' : 'loading')\"\n style=\"display:block;width:100%;overflow:hidden;position:relative;\"\n [style.paddingBottom]=\"getPicturePaddingBottom()\"\n [style.background]=\"getPictureBackground()\"\n #imgElem\n *ngIf=\"isProcessed\">\n <source\n *ngFor=\"let source of restSources\"\n [media]=\"source.mediaQuery || ''\"\n [attr.lazyLoad]=\"source.srcSet || ''\"\n [srcset]=\"source.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <source\n *ngIf=\"firstSource\"\n [attr.lazyLoad]=\"firstSource.srcSet || ''\"\n [srcset]=\"firstSource.srcSet || ''\"\n (load)=\"onImageLoad()\"\n />\n <img\n style=\"display:block;width:100%;opacity:1;top:0;left:0;\"\n [style.position]=\"getPositionStyle()\"\n [style.height]=\"getImgHeight()\"\n [style.transform]=\"getTransformStyle()\"\n [style.transition]=\"getTransitionStyle()\"\n [style.filter]=\"getFilterStyle()\"\n (load)=\"onImageLoad()\"\n [src]=\"!isPreview ? cloudimageUrl : (isPreviewLoaded ? cloudimageUrl : previewCloudimageUrl)\"\n [alt]=\"\">\n </picture>\n </div>\n </ng-container>\n "}]}],"members":{"imgElem":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":83,"character":3},"arguments":["imgElem"]}]}],"pictureElem":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":84,"character":3},"arguments":["pictureElem"]}]}],"src":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":85,"character":3}}]}],"class":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":86,"character":3}}]}],"alt":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3}}]}],"operation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3}}]}],"o":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":89,"character":3}}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3}}]}],"s":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":3}}]}],"filters":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"f":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3}}]}],"ratio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3}}]}],"offset":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":95,"character":3}}]}],"ngSwitch":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"CIService"},{"__symbolic":"reference","module":"@angular/platform-browser","name":"DomSanitizer","line":119,"character":64}]}],"ngOnDestroy":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"processImage":[{"__symbolic":"method"}],"onImageLoad":[{"__symbolic":"method"}],"getRestSources":[{"__symbolic":"method"}],"getFirstSource":[{"__symbolic":"method"}],"getPositionStyle":[{"__symbolic":"method"}],"getImgHeight":[{"__symbolic":"method"}],"getTransformStyle":[{"__symbolic":"method"}],"getTransitionStyle":[{"__symbolic":"method"}],"getFilterStyle":[{"__symbolic":"method"}],"getPicturePaddingBottom":[{"__symbolic":"method"}],"getPictureBackground":[{"__symbolic":"method"}]}}},"origins":{"CIService":"./lib/lib.service","CIConfig":"./lib/config.model","CIModule":"./lib/lib.module","ImgComponent":"./lib/img/img.component"},"importAs":"ng-cloudimage-responsive"} |
{ | ||
"name": "ng-cloudimage-responsive", | ||
"version": "0.0.4", | ||
"description": "Cloudimage responsive plugin will make your website load the exact image size you need depending on your user's screen size. Multiple pixel ratios are supported.", | ||
"peerDependencies": { | ||
"@angular/common": "^7.0.0", | ||
"@angular/core": "^7.0.0", | ||
"rxjs": "^6.0.0" | ||
}, | ||
"version": "1.0.0", | ||
"description": "Cloudimage Responsive will smartly resize, compress and accelerate images across the World in your site for all devices. The plugin supports lazy loading technique with fancy animation on image load.", | ||
"author": "scaleflex", | ||
"license": "MIT", | ||
"repository": { | ||
@@ -15,6 +12,2 @@ "type": "git", | ||
"homepage": "https://github.com/scaleflex/ng-cloudimage-responsive#readme", | ||
"dependencies": { | ||
"ng-lazyload-image": "^5.0.0", | ||
"tslib": "^1.9.0" | ||
}, | ||
"keywords": [ | ||
@@ -41,4 +34,11 @@ "angular", | ||
], | ||
"author": "scaleflex", | ||
"license": "MIT", | ||
"peerDependencies": { | ||
"@angular/common": "^7.0.0", | ||
"@angular/core": "^7.0.0", | ||
"rxjs": "^6.0.0" | ||
}, | ||
"dependencies": { | ||
"ng-lazyload-image": "^5.0.0", | ||
"tslib": "^1.9.0" | ||
}, | ||
"main": "bundles/ng-cloudimage-responsive.umd.js", | ||
@@ -45,0 +45,0 @@ "module": "fesm5/ng-cloudimage-responsive.js", |
export * from './lib/lib.service'; | ||
export * from './lib/config.service'; | ||
export * from './lib/config.model'; | ||
export * from './lib/lib.module'; | ||
export * from './lib/img/img.component'; |
282
README.md
@@ -1,19 +0,93 @@ | ||
![](https://demo.cloudimg.io/width/800/none/sample.li/Cloudimage_diagram.jpeg) | ||
[![Release](https://img.shields.io/badge/release-v1.0.0-blue.svg)](https://github.com/scaleflex/ng-cloudimage-responsive/releases) | ||
[![Free plan](https://img.shields.io/badge/price-includes%20free%20plan-green.svg)](https://www.cloudimage.io/en/home#b38181a6-b9c8-4015-9742-7b1a1ad382d5) | ||
[![Contributions welcome](https://img.shields.io/badge/contributions-welcome-orange.svg)](#contributing) | ||
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) | ||
[![Scaleflex team](https://img.shields.io/badge/%3C%2F%3E%20with%20%E2%99%A5%20by-the%20Scaleflex%20team-6986fa.svg)](https://www.scaleflex.it/en/home) | ||
[![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Responsive%20images,%20now%20easier%20than%20ever&url=https://scaleflex.github.io/ng-cloudimage-responsive/&via=cloudimage&hashtags=react,images,cloudimage,responsive_images,lazy_loading,web_acceleration,image_optimization,image_CDN,image_CDNwebp,jpeg_xr,jpg_optimization,image_resizing_and_CDN,angular) | ||
<p align="center"> | ||
<img | ||
height="175" | ||
alt="The Lounge" | ||
src="https://demo.cloudimg.io/height/350/n/https://scaleflex.airstore.io/filerobot/filerobot-cloudimage.png?sanitize=true"> | ||
</p> | ||
<h1 align="center"> | ||
Angular Cloudimage Responsive | ||
</h1> | ||
<p align="center"> | ||
<strong> | ||
<a href="#table_of_contents">Docs</a> | ||
• | ||
<a href="https://scaleflex.github.io/ng-cloudimage-responsive/" target="_blank">Demo</a> | ||
• | ||
<a href="#" target="_blank">Why?</a> | ||
</strong> | ||
</p> | ||
This plugin detects the width of any image container as well as the device pixel ratio | ||
density to load the optimal image size needed. | ||
Images are resized on-the-fly via the <a href="https://cloudimage.io" target="_blank">Cloudimage service</a>, thus offering a comprehensive | ||
automated image optimization service. | ||
When an image is first loaded on your website or mobile app, | ||
Cloudimage's resizing servers will download the origin image from | ||
the source, resize it for the client's screen size and deliver to your users through one or multiple | ||
Content Delivery Networks (CDNs). The generated image formats are cached in the CDN and will be delivered rocket fast on any subsequent request. | ||
**NOTE:** Your original (master) images should be stored on a server | ||
or storage bucket (S3, Google Cloud, Azure Blob...) reachable over | ||
HTTP or HTTPS by Cloudimage. If you want to upload your master images to | ||
Cloudimage, contact us at | ||
[hello@cloudimage.io](mailto:hello@cloudimage.io). | ||
<p align="center"> | ||
<img | ||
alt="The Lounge" | ||
src="https://demo.cloudimg.io/width/1400/n/https://demo.cloudimg.io/width/800/none/sample.li/Cloudimage_diagram.jpeg?sanitize=true"> | ||
</p> | ||
powered by [Cloudimage](https://www.cloudimage.io/) | ||
([Watch the video here](https://www.youtube.com/watch?time_continue=2&v=JFZSE1vYb0k)) | ||
## Cloudimage Angular Plugin | ||
## Table of contents | ||
Cloudimage Responsive plugin will resize, compress and accelerate images across the World in your Angular application. It leverages the HTML5 `<picture>` and `srcset` elements to deliver the right image size based on the client's screen size and pixel ratio (retina or non-retina). | ||
* [Demo](#demo) | ||
* [Requirements](#requirements) | ||
* [Step 1: Installation](#installation) | ||
* [Step 2: Initialize](#initialize) | ||
* [Step 3: Implement](#implement) | ||
* [Configuration](#configuration) | ||
* [Image properties](#image_properties) | ||
* [Lazy loading](#lazy_loading) | ||
* [Browser support](#browser_support) | ||
* [Filerobot UI Family](#ui_family) | ||
* [Contributing](#contributing) | ||
* [License](#license) | ||
**NOTE:** Your original (master) images should be stored on a server or storage bucket (S3, Google Cloud, Azure Blob...) reachable over HTTP or HTTPS by Cloudimage. If you want to upload your master images to Cloudimage, contact us at [hello@cloudimage.io](mailto:hello@cloudimage.io). | ||
## <a name="demo"></a> Demo | ||
## Demo | ||
To see the Cloudimage Responsive plugin in action, please check out the | ||
[Demo page](https://scaleflex.github.io/ng-cloudimage-responsive/). | ||
Play with your browser's window size and observe your | ||
Inspector's Network tab to see how Cloudimage delivers the optimal | ||
image size to your browser, hence accelerating the overall page | ||
loading time. | ||
To see the Cloudimage Responsive plugin in action, please check out the [Demo page](https://scaleflex.github.io/ng-cloudimage-responsive/). Play with your browser's viewport size and observe your Inspector's Network tab to see how Cloudimage delivers the optimal image size to your browser, hence accelerating the overall page loading time. | ||
## <a name="requirements"/> Requirements | ||
## Installation | ||
To use the Cloudimage Responsive plugin, you will need a | ||
Cloudimage token to deliver your images over CDN. Don't worry, it only takes seconds to get one by | ||
registering [here](https://www.cloudimage.io/en/register_page). | ||
Once your token is created, you can configure it as described below. | ||
This token allows you to use 25GB of image cache and 25GB of worldwide | ||
CDN traffic per month for free. | ||
## <a name="installation"></a>Step 1: Installation | ||
using npm | ||
``` | ||
@@ -23,8 +97,11 @@ $ npm install --save ng-cloudimage-responsive | ||
And then include it in your module (see app.module.ts): | ||
## <a name="initialize"></a>Step 2: Initialize | ||
After installing the ng-cloudimage-responsive lib, simply initialize it with your **token** and the **baseUrl** | ||
of your image storage: | ||
```javascript | ||
import { NgModule } from '@angular/core'; | ||
import { BrowserModule } from '@angular/platform-browser'; | ||
import { CIModule, CIService, CIConfig } from 'ng-cloudimage-responsive'; | ||
import { CIModule, CIConfig } from 'ng-cloudimage-responsive'; | ||
import { AppComponent } from './app.component'; | ||
@@ -41,4 +118,3 @@ | ||
providers: [ | ||
{provide: CIConfig, useValue: ciConfig}, | ||
CIService | ||
{provide: CIConfig, useValue: ciConfig} | ||
], | ||
@@ -50,15 +126,15 @@ bootstrap: [ AppComponent ] | ||
## Simple Usage | ||
## <a name="implement"></a>Step 3: Implement it | ||
Finally, just use the ci-img component: | ||
```html | ||
<ci-img src="img.jpg" alt="Demo image" ratio="1.5"></ci-img> | ||
``` | ||
Note: as you see, using the Cloudimage plugin is very easy - just use the `ci-img` instead of the `img` tag. | ||
## Requirements | ||
NOTE: "ratio" is recommended to prevent page layout jumping. The parameter is used to calculate image height to hold | ||
the image position while image is loading. | ||
To use the Cloudimage Responsive plugin, you will need a Cloudimage token. Don't worry, it only takes seconds to get one by registering [here](https://www.cloudimage.io/en/register_page). Once your token is created, you can configure it as described below. This token allows you to use 25GB of image cache and 25GB of worldwide CDN traffic per month for free. | ||
## <a name="configuration"></a> Config | ||
## Config | ||
### token | ||
@@ -68,15 +144,19 @@ | ||
Your Cloudimage customer token. [Subscribe](https://www.cloudimage.io/en/register_page) for a Cloudimage account to get one. The subscription takes less than a minute and is totally free | ||
Your Cloudimage customer token. | ||
[Subscribe](https://www.cloudimage.io/en/register_page) for a | ||
Cloudimage account to get one. The subscription takes less than a | ||
minute and is totally free. | ||
### lazyLoading | ||
### baseUrl | ||
###### Type: **Bool** | Default: **true** | _required_ | ||
###### Type: **String** | Default: **"/"** | _optional_ | ||
Only load images close to the viewport | ||
Your image folder on server, this alows to shorten your origin image URLs. | ||
### imgLoadingAnimation | ||
### lazyLoading | ||
###### Type: **Bool** | Default: **true** | _required_ | ||
###### Type: **Bool** | Default: **true** | _optional_ | ||
Nice effect for preview transition | ||
Only images close to the client's viewport will be loaded, hence accelerating the page loading time. The plugin uses | ||
[ng-lazyload-image](https://github.com/tjoskar/ng-lazyload-image) library to achieve it. | ||
@@ -90,2 +170,8 @@ ### lazyLoadOffset | ||
### imgLoadingAnimation | ||
###### Type: **Bool** | Default: **true** | _optional_ | ||
Applies a nice interlacing effect for preview transition | ||
### filters | ||
@@ -95,5 +181,8 @@ | ||
Parameters like fcontrast, fpixelate, fgaussian, backtransparent, | ||
rotation to apply filters on your image by default | ||
Applies default Cloudimage filters to your image, e.g. fcontrast, fpixelate, fgaussian, backtransparent, | ||
rotation... Multiple filters can be applied, separated by "```.```" (dot). | ||
[Full documentaiton here.](https://docs.cloudimage.io/go/cloudimage-documentation/en/filters/) | ||
### placeholderBackground | ||
@@ -103,32 +192,53 @@ | ||
Parameters like fcontrast, fpixelate, fgaussian, backtransparent, | ||
rotation to apply filters on your image by default | ||
Placeholder colored background while the image is loading | ||
### baseUrl | ||
### presets | ||
###### Type: **String** | Default: **"/"** | _optional_ | ||
###### Type: **Object** | ||
Your image folder on server. | ||
Default: | ||
```javascript | ||
const ciConfig = { | ||
token: 'demo', | ||
baseUrl: 'https://jolipage.airstore.io/', | ||
... | ||
presets: { | ||
xs: '(max-width: 575px)', // up to 575 PHONE | ||
sm: '(min-width: 576px)', // 576 - 767 PHABLET | ||
md: '(min-width: 768px)', // 768 - 991 TABLET | ||
lg: '(min-width: 992px)', // 992 - 1199 SMALL_LAPTOP_SCREEN | ||
xl: '(min-width: 1200px)' // from 1200 USUALSCREEN | ||
} | ||
}; | ||
``` | ||
## Image properties | ||
Breakpoints shortcuts to use in image size property, can be overwridden. | ||
## <a name="image_properties"></a> Image properties | ||
### src | ||
###### Type: **String** | _required_ | ||
###### Type: **String** | Default: **undefined** | _required_ | ||
Original image hosted on your web server. | ||
Original image hosted on your web server. You can use absolute path or | ||
relative to baseUrl in your config. | ||
### operation/o | ||
**NOTES:** | ||
[see doc](https://docs.cloudimage.io/go/cloudimage-documentation/en/operations/) | ||
The plugin uses a special algorithm to detect the width of image container and set the image size accordingly. | ||
This is the recommended way of using the Cloudimage Responsive plugin. | ||
### operation (or o) | ||
###### Type: **String** | Default: **width** | _optional_ | ||
**width** - to resize with a specific width | ||
Operation allows to customize the behaviour of the plugin for specific images: | ||
**height** - to resize with a specific height | ||
**width** - to resize with a specific width. This is useful when you want to have a fixed width, regardless of screen size. | ||
**crop** - to crop the image at the center | ||
**height** - to resize with a specific height. This is useful when you want to have a fixed height, regardless of screen size. | ||
**crop** - to crop the image around the center | ||
**fit** - to resize the image in a box and keeping the proportions of the source image | ||
@@ -138,6 +248,12 @@ | ||
### size/s | ||
**NOTES:** | ||
###### Type: **String/Object** | _optional_ | ||
When you use an operation, you must specify the size for each screen size, see below | ||
Full documentation of all operations available [here](https://docs.cloudimage.io/go/cloudimage-documentation/en/operations/) | ||
### size (or s) | ||
###### Type: **String** | Default: **undefined** | _optional_ but _required_ when using operation | ||
Size of an image which is used as a base for creating retina ready and responsive image element. | ||
@@ -147,20 +263,59 @@ | ||
**[width]**: s="250" => width: 250 * PR (px); height: auto; | ||
**[width]**: | ||
**[width x height]**: s="125x200" => width: 125 * PR (px); height: 200 * PR (px); | ||
```html | ||
<ci-img | ||
src="dino-reichmuth-1.jpg" | ||
operation="width" | ||
size="250"/> | ||
``` | ||
=> width: 250 * PR (px); height: auto; | ||
**[width x height]**: | ||
```html | ||
<ci-img | ||
src="dino-reichmuth-1.jpg" | ||
operation="width" | ||
size="125x200"/> | ||
``` | ||
=> width: 125 * PR (px); height: 200 * PR (px); | ||
**[Width and height for different screen resolutions]**: | ||
s={{ xs: '50x100', sm:'100x125', md: '150x150', lg:'200x175', xl:'300x200' }} | ||
```html | ||
<ci-img | ||
src="dino-reichmuth-1.jpg" | ||
operation="crop" | ||
size=" | ||
sm 800x400, | ||
(min-width: 620px) 200x20, | ||
md 1000x1350, | ||
lg 1400x1200, | ||
xl 1600x1000 | ||
"/> | ||
``` | ||
*You can drop some breakpoints, for example s={{ sm:'100x125', xl:'300x200' }} | ||
You can drop some breakpoints, for example: | ||
**NOTE:** if size is set to **undefined**, Cloudimage uses a special | ||
algorithm to detect the width of image container and set the image size | ||
accordingly. | ||
```html | ||
<ci-img | ||
src="dino-reichmuth-1.jpg" | ||
operation="crop" | ||
size="md 1000x1350, lg 1400x1200"/> | ||
``` | ||
### filters/f | ||
**NOTE:** if size is not set, the plugin uses a special algorithm to | ||
detect the width of image container and set the image size accordingly. This is the recommended way of using | ||
the Cloudimage Responsive plugin. | ||
[see doc](https://docs.cloudimage.io/go/cloudimage-documentation/en/filters/) | ||
For example: | ||
```html | ||
<ci-img src="dino-reichmuth-1.jpg"/> | ||
``` | ||
### filters (or f) | ||
###### Type: **String** | Default: **none** | _optional_ | ||
@@ -182,5 +337,30 @@ | ||
Full documentation of all filters available [here](https://docs.cloudimage.io/go/cloudimage-documentation/en/filters/) | ||
*** | ||
### ratio (or r) | ||
###### Type: **Number** | _optional_ | ||
It is recommended to prevent page layout jumping. The parameter is used to calculate image height to hold | ||
the image position while image is loading. | ||
To see the full cloudimage documentation [click here](https://docs.cloudimage.io/go/cloudimage-documentation) | ||
## <a name="browser_support"></a>Browser support | ||
Tested in all modern browsers and IE 11. | ||
## <a name="ui_family"></a>Filerobot UI Familiy | ||
* [JS Cloudimage Responsive](https://github.com/scaleflex/js-cloudimage-responsive) | ||
* [React Cloudimage Responsive](https://github.com/scaleflex/react-cloudimage-responsive) | ||
* [Image Editor](https://github.com/scaleflex/filerobot-image-editor) | ||
* [Uploader](https://github.com/scaleflex/filerobot-uploader) | ||
## <a name="contributing"></a>Contributing! | ||
All contributions are super welcome! | ||
## <a name="license"></a>License | ||
Angular Cloudimage Responsive is provided under the [MIT License](https://opensource.org/licenses/MIT) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
1
357
410489
1
3901