UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

639 lines (638 loc) 66.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, ContentChildren, HostBinding, Input, Output, HostListener, QueryList, EventEmitter, ElementRef, ViewEncapsulation } from '@angular/core'; import { CarouselSlideComponent } from './carousel-slide/carousel-slide.component'; import * as touchEvent from '../core/util/touch-event'; export class CarouselComponent { /** * @param {?} _ele */ constructor(_ele) { this._ele = _ele; this.style = { height: 'auto', width: '100%', transform: 'translate3d(0px, 0px, 0px)', margin: '' }; this._nodeArr = []; this._lastIndex = 0; this._isMouseDown = false; this._rationWidth = 0; this._currentSlideWidth = 0; this._currentSlideHeight = 0; this._transition = ''; this._spaceWidth = 0; this.speed = 500; this.selectedIndex = 0; this.dots = true; this.vertical = false; this.autoplay = false; this.autoplayInterval = 3000; this.infinite = false; this.dotStyle = {}; this.dotActiveStyle = {}; this.frameOverflow = 'hidden'; this.cellSpacing = 0; this.slideWidth = 1; this.swipeSpeed = 12; this.dragging = true; this.afterChange = new EventEmitter(); this.beforeChange = new EventEmitter(); this.carouselWrapper = true; this.carouselwrap = true; } /** * @param {?} event * @return {?} */ panstart(event) { event.stopPropagation(); if (!this.dragging) { return; } this.stopTimer(); this._isMouseDown = true; this.touchObject = { startX: touchEvent.getEventTarget(event).pageX, startY: touchEvent.getEventTarget(event).pageY, direction: this.touchObject.direction }; } /** * @param {?} event * @return {?} */ panmove(event) { event.stopPropagation(); if (!this.dragging && !this._isMouseDown) { return; } const { direction } = this.swipeDirection(this.touchObject.startX, touchEvent.getEventTarget(event).pageX, this.touchObject.startY, touchEvent.getEventTarget(event).pageY); if (direction !== 0) { event.preventDefault(); } /** @type {?} */ const length = this.vertical ? Math.abs(touchEvent.getEventTarget(event).pageY - this.touchObject.startY) : Math.abs(touchEvent.getEventTarget(event).pageX - this.touchObject.startX); /** @type {?} */ const offset = -this.touchObject.direction * length - this.selectedIndex * this._rationWidth; this.touchObject = { startX: this.touchObject.startX, startY: this.touchObject.startY, endX: touchEvent.getEventTarget(event).pageX, endY: touchEvent.getEventTarget(event).pageY, length, direction, offset }; if (direction !== 0) { this.setSlideStyles(this.selectedIndex, this.touchObject.direction); } this.getListStyles(offset); } /** * @param {?} event * @return {?} */ panend(event) { event.stopPropagation(); if (!this.dragging && !this._isMouseDown) { return; } this._isMouseDown = false; if (this.touchObject.length > this.swipeSpeed) { this.carousel(this.touchObject.direction); } else { this.getListStyles(this.touchObject.direction * this.touchObject.length + this.touchObject.offset); this.style['transition'] = this._transition; } setTimeout(() => { this.startTimer(); }, this.speed); } /** * @return {?} */ cancel() { setTimeout(() => { this.startTimer(); }, this.speed); } /** * @return {?} */ initCarouselSize() { /** @type {?} */ const nativeElement = this._ele.nativeElement; this.slideHeight = nativeElement.querySelector('carouselslide').clientHeight; this._currentSlideHeight = this.slideHeight * this.slideWidth; this._currentSlideWidth = nativeElement.clientWidth; this._rationWidth = this.vertical ? this._currentSlideWidth : this._currentSlideWidth * this.slideWidth; this._spaceWidth = ((this.vertical ? this.slideHeight : this._currentSlideWidth) - this._rationWidth) / 2; } /** * @param {?} items * @return {?} */ carouselInit(items) { this.infinite = this.infinite || true; this._nodeArr = items['_results']; this.dragging = this.dragging ? this.dragging : false; if (this._nodeArr.length > 1) { this._lastIndex = this._nodeArr.length - 1; setTimeout(() => { this._nodeArr.forEach((v, index) => { v.width = this.vertical ? 'auto' : this._rationWidth - this.cellSpacing; v.left = this.vertical ? 0 : index === this._lastIndex ? -this._rationWidth : index * this._rationWidth; v.top = this.vertical ? (index === this._lastIndex ? -this._rationWidth : index * this._rationWidth) : 0; v.margin = this.vertical ? `${this.cellSpacing / 2}px auto` : `auto ${this.cellSpacing / 2}px`; }); this.startTimer(); }, 0); } else if (this._nodeArr.length === 1) { setTimeout(() => { this._nodeArr.forEach((v) => { v.width = this._rationWidth - this.cellSpacing; v.left = 0; v.top = 0; v.margin = `auto ${this.cellSpacing / 2}px`; }); }, 0); } } /** * @return {?} */ startTimer() { if (!this.autoplay) { return; } this.stopTimer(); this._timer = this.autoplayInterval ? setInterval(() => { this.carousel(1); }, this.autoplayInterval) : 0; } /** * @return {?} */ stopTimer() { clearInterval(this._timer); } /** * @param {?} moveDirection * @return {?} */ carousel(moveDirection) { if (this.vertical) { if (moveDirection === 1) { this.moveUp(); } else if (moveDirection === -1) { this.moveDown(); } } else { if (moveDirection === 1) { this.moveLeft(); } else if (moveDirection === -1) { this.moveRight(); } } this.style['transition'] = this._transition; } /** * @return {?} */ moveUp() { this.gotoCarousel(this.getAfterNode(false)); } /** * @return {?} */ moveDown() { this.gotoCarousel(this.getAfterNode(true)); } /** * @return {?} */ moveLeft() { this.gotoCarousel(this.getAfterNode(false)); } /** * @return {?} */ moveRight() { this.gotoCarousel(this.getAfterNode(true)); } /** * @param {?} pre * @return {?} */ getAfterNode(pre) { /** @type {?} */ let nextIndex; if (pre) { if (this.selectedIndex <= 0) { this.getListStyles(this._rationWidth); setTimeout(() => { this._nodeArr.forEach((v, tempIndex) => { if (tempIndex === 0) { v.left = this.vertical ? 0 : this._nodeArr.length * this._rationWidth; v.top = this.vertical ? this._nodeArr.length * this._rationWidth : 0; } else { v.left = this.vertical ? 0 : tempIndex * this._rationWidth; v.top = this.vertical ? tempIndex * this._rationWidth : 0; } }); this.getListStyles(-this._rationWidth * (this.items.length - 1)); }, this.speed); nextIndex = !this.infinite ? null : this._lastIndex; this.beforeChange.emit({ from: this.selectedIndex, to: nextIndex }); return nextIndex; } nextIndex = this.selectedIndex - 1; this.getListStyles(nextIndex * this._rationWidth * this.touchObject.direction); this._nodeArr.forEach((v, tempIndex) => { if (0 === tempIndex && nextIndex === this._nodeArr.length - 2) { v.left = 0; v.top = 0; } }); this.beforeChange.emit({ from: this.selectedIndex, to: nextIndex }); return nextIndex; } else { if (this.selectedIndex >= this._lastIndex) { this.setSlideStyles(this.selectedIndex, 1); this.getListStyles(-(this._lastIndex + 1) * this._rationWidth); nextIndex = !this.infinite ? null : 0; this.beforeChange.emit({ from: this.selectedIndex, to: nextIndex }); return nextIndex; } nextIndex = this.selectedIndex + 1; this.setSlideStyles(this.selectedIndex, 1); this.getListStyles(-nextIndex * this._rationWidth); this.beforeChange.emit({ from: this.selectedIndex, to: nextIndex }); return nextIndex; } } /** * @return {?} */ caculateDirectionLeftCurrentIndex() { /** @type {?} */ const previousIndex = this.selectedIndex; this.selectedIndex = (previousIndex + 1) % this.items.length; } /** * @return {?} */ caculateDirectionRightCurrentIndex() { if (this.selectedIndex === 0) { this.selectedIndex = this.items.length; } /** @type {?} */ const previousIndex = this.selectedIndex; this.selectedIndex = (previousIndex - 1) % this.items.length; } /** * @param {?} afterIndex * @return {?} */ gotoCarousel(afterIndex) { if (afterIndex === null) { return; } this.getCurrentIndex(); if (afterIndex === 0) { setTimeout(() => { this._nodeArr.forEach((v, index) => { if (index === this._nodeArr.length - 1) { v.left = this.vertical ? 0 : -this._rationWidth; v.top = this.vertical ? -this._rationWidth : 0; } else { v.left = this.vertical ? 0 : index * this._rationWidth; v.top = this.vertical ? index * this._rationWidth : 0; } }); this.startTimer(); this.getListStyles(0); }, this.speed); } this.selectedIndex = afterIndex; this.afterChange.emit(this.selectedIndex); } /** * @return {?} */ getCurrentIndex() { if (this.touchObject.direction === 1) { this.caculateDirectionLeftCurrentIndex(); } else { this.caculateDirectionRightCurrentIndex(); } } /** * @param {?} index * @param {?} direction * @param {?=} xDist * @return {?} */ setSlideStyles(index, direction, xDist = 0) { if (direction === 1) { this._nodeArr.forEach((v, tempIndex) => { if (index < this._nodeArr.length && index - 1 === tempIndex) { if (xDist === 0 || xDist > this._spaceWidth) { v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth; v.top = this.vertical ? (this._nodeArr.length + tempIndex) * this._rationWidth : 0; } } else if (this._nodeArr.length - 1 === tempIndex && index !== 2) { if (xDist === 0 || xDist > this._spaceWidth) { v.left = this.vertical ? 0 : (this._nodeArr.length - 1) * this._rationWidth; v.top = this.vertical ? (this._nodeArr.length - 1) * this._rationWidth : 0; } } else if (index === this._nodeArr.length - 1 && tempIndex === 1 && this.autoplay) { v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth; v.top = this.vertical ? tempIndex * this._rationWidth : 0; } else if (index === this._nodeArr.length - 1 && tempIndex === 0 && !this.autoplay) { v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth; v.top = this.vertical ? tempIndex * this._rationWidth : 0; } }); } else if (direction === -1) { this._nodeArr.forEach((v, tempIndex) => { if (index === 0 && this._nodeArr.length - 1 === tempIndex) { v.left = this.vertical ? 0 : direction * this._rationWidth; v.top = this.vertical ? direction * this._rationWidth : 0; } else if (index === this._nodeArr.length - 2 && index + 1 === tempIndex) { v.left = this.vertical ? 0 : direction * this._rationWidth; v.top = this.vertical ? direction * this._rationWidth : 0; } else if (index === 1 && 0 === tempIndex) { v.left = this.vertical ? 0 : direction * this._rationWidth * tempIndex; v.top = this.vertical ? direction * this._rationWidth : 0; } else if (index > 1) { v.left = this.vertical ? 0 : tempIndex * this._rationWidth; v.top = this.vertical ? tempIndex * this._rationWidth : 0; } }); } } /** * @param {?=} offset * @return {?} */ getListStyles(offset = 0) { /** @type {?} */ const positionOffset = offset + (this.vertical ? (this.slideHeight - this._currentSlideHeight) / 2 : (this._currentSlideWidth - this._rationWidth) / 2) - this.cellSpacing; this.style = { height: this._currentSlideHeight + 'px', width: this.items.length * this._rationWidth + 'px', transform: this.vertical ? `translate3d(0px, ${positionOffset}px, 0px)` : `translate3d(${positionOffset}px, 0px, 0px)`, margin: this.vertical ? `${(this.cellSpacing / 2) * -1}px 0px` : `0px ${(this.cellSpacing / 2) * -1}px` }; } /** * @param {?} x1 * @param {?} x2 * @param {?} y1 * @param {?} y2 * @return {?} */ swipeDirection(x1, x2, y1, y2) { /** @type {?} */ const xDist = x1 - x2; /** @type {?} */ const yDist = y1 - y2; /** @type {?} */ const r = Math.atan2(yDist, xDist); /** @type {?} */ let swipeAngle = Math.round((r * 180) / Math.PI); if (swipeAngle < 0) { swipeAngle = 360 - Math.abs(swipeAngle); } if (swipeAngle <= 45 && swipeAngle >= 0) { return { direction: 1, xDist: xDist }; } if (swipeAngle <= 360 && swipeAngle >= 315) { return { direction: 1, xDist: xDist }; } if (swipeAngle >= 135 && swipeAngle <= 225) { return { direction: -1, xDist: xDist }; } if (this.vertical === true) { if (swipeAngle >= 35 + 33 && swipeAngle <= 135) { return { direction: 1, xDist: xDist }; } else { return { direction: -1, xDist: xDist }; } } return { direction: 0, xDist: xDist }; } /** * @return {?} */ get page() { return this.dots ? this.selectedIndex : 0; } /** * @return {?} */ get pageCount() { return this.dots ? this.items.length : 0; } /** * @return {?} */ get dotindicatorStatus() { return this.dots ? (this.items.length > 1) : this.dots; } /** * @return {?} */ ngAfterViewInit() { this.touchObject = { direction: 1 }; this._transition = `transform ${this.speed / 1000}s`; this.items.changes.subscribe(items => { this.carouselInit(items); }); this.initCarouselSize(); this.getListStyles(); this.carouselInit(this.items); /** @type {?} */ const nativeElement = this._ele.nativeElement; /** @type {?} */ const targetNode = nativeElement.querySelector('carouselslide'); /** @type {?} */ const config = { attributes: true, childList: true, subtree: true }; /** @type {?} */ const callback = (mutationsList) => { for (const mutation of mutationsList) { if (mutation.type == 'attributes') { if (this.slideHeight !== nativeElement.querySelector('carouselslide').clientHeight) { this.initCarouselSize(); this.getListStyles(); } } } }; this.observer = new MutationObserver(callback); this.observer.observe(targetNode, config); } /** * @return {?} */ ngOnDestroy() { this.observer.disconnect(); this.observer = null; this.stopTimer(); } } CarouselComponent.decorators = [ { type: Component, args: [{ selector: 'Carousel, nzm-carousel', encapsulation: ViewEncapsulation.None, template: "<div class=\"slider-frame\" [ngStyle]=\"{overflow: frameOverflow}\">\n <ul class=\"slider-list\" [ngStyle]=\"style\">\n <ng-content></ng-content>\n </ul>\n</div>\n<DotIndicator *ngIf=\"dotindicatorStatus\"\n class=\"am-carousel-wrap-dot\"\n [page]=\"page\"\n [dotStyle]=\"dotStyle\"\n [pageCount]=\"pageCount\"\n [dotActiveStyle]=\"dotActiveStyle\"\n></DotIndicator>\n" }] } ]; /** @nocollapse */ CarouselComponent.ctorParameters = () => [ { type: ElementRef } ]; CarouselComponent.propDecorators = { items: [{ type: ContentChildren, args: [CarouselSlideComponent,] }], speed: [{ type: Input }], selectedIndex: [{ type: Input }], dots: [{ type: Input }], vertical: [{ type: Input }], autoplay: [{ type: Input }], autoplayInterval: [{ type: Input }], infinite: [{ type: Input }], dotStyle: [{ type: Input }], dotActiveStyle: [{ type: Input }], frameOverflow: [{ type: Input }], cellSpacing: [{ type: Input }], slideWidth: [{ type: Input }], swipeSpeed: [{ type: Input }], dragging: [{ type: Input }], afterChange: [{ type: Output }], beforeChange: [{ type: Output }], carouselWrapper: [{ type: HostBinding, args: ['class.am-carousel',] }], carouselwrap: [{ type: HostBinding, args: ['class.carousel',] }], panstart: [{ type: HostListener, args: ['mousedown', ['$event'],] }, { type: HostListener, args: ['touchstart', ['$event'],] }], panmove: [{ type: HostListener, args: ['mousemove', ['$event'],] }, { type: HostListener, args: ['touchmove', ['$event'],] }], panend: [{ type: HostListener, args: ['mouseleave', ['$event'],] }, { type: HostListener, args: ['mouseup', ['$event'],] }, { type: HostListener, args: ['touchend', ['$event'],] }], cancel: [{ type: HostListener, args: ['touchcancel', ['$event'],] }] }; if (false) { /** @type {?} */ CarouselComponent.prototype.slideHeight; /** @type {?} */ CarouselComponent.prototype.touchObject; /** @type {?} */ CarouselComponent.prototype.style; /** @type {?} */ CarouselComponent.prototype._timer; /** @type {?} */ CarouselComponent.prototype._nodeArr; /** @type {?} */ CarouselComponent.prototype._lastIndex; /** @type {?} */ CarouselComponent.prototype._isMouseDown; /** @type {?} */ CarouselComponent.prototype._rationWidth; /** @type {?} */ CarouselComponent.prototype._currentSlideWidth; /** @type {?} */ CarouselComponent.prototype._currentSlideHeight; /** @type {?} */ CarouselComponent.prototype._transition; /** @type {?} */ CarouselComponent.prototype._spaceWidth; /** @type {?} */ CarouselComponent.prototype.observer; /** @type {?} */ CarouselComponent.prototype.items; /** @type {?} */ CarouselComponent.prototype.speed; /** @type {?} */ CarouselComponent.prototype.selectedIndex; /** @type {?} */ CarouselComponent.prototype.dots; /** @type {?} */ CarouselComponent.prototype.vertical; /** @type {?} */ CarouselComponent.prototype.autoplay; /** @type {?} */ CarouselComponent.prototype.autoplayInterval; /** @type {?} */ CarouselComponent.prototype.infinite; /** @type {?} */ CarouselComponent.prototype.dotStyle; /** @type {?} */ CarouselComponent.prototype.dotActiveStyle; /** @type {?} */ CarouselComponent.prototype.frameOverflow; /** @type {?} */ CarouselComponent.prototype.cellSpacing; /** @type {?} */ CarouselComponent.prototype.slideWidth; /** @type {?} */ CarouselComponent.prototype.swipeSpeed; /** @type {?} */ CarouselComponent.prototype.dragging; /** @type {?} */ CarouselComponent.prototype.afterChange; /** @type {?} */ CarouselComponent.prototype.beforeChange; /** @type {?} */ CarouselComponent.prototype.carouselWrapper; /** @type {?} */ CarouselComponent.prototype.carouselwrap; /** @type {?} */ CarouselComponent.prototype._ele; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvIiwic291cmNlcyI6WyJjYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUVaLFVBQVUsRUFFVixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxLQUFLLFVBQVUsTUFBTSwwQkFBMEIsQ0FBQztBQU92RCxNQUFNOzs7O0lBK0lKLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7cUJBNUk1QjtZQUNOLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixTQUFTLEVBQUUsNEJBQTRCO1lBQ3ZDLE1BQU0sRUFBRSxFQUFFO1NBQ1g7d0JBRzhCLEVBQUU7MEJBQ0osQ0FBQzs0QkFDRSxLQUFLOzRCQUNOLENBQUM7a0NBQ0ssQ0FBQzttQ0FDQSxDQUFDOzJCQUNULEVBQUU7MkJBQ0YsQ0FBQztxQkFPZixHQUFHOzZCQUVLLENBQUM7b0JBRVQsSUFBSTt3QkFFQSxLQUFLO3dCQUVMLEtBQUs7Z0NBRUQsSUFBSTt3QkFFUixLQUFLO3dCQUVOLEVBQUU7OEJBRUksRUFBRTs2QkFFSCxRQUFROzJCQUVWLENBQUM7MEJBRUYsQ0FBQzswQkFFRCxFQUFFO3dCQUVILElBQUk7MkJBRVMsSUFBSSxZQUFZLEVBQUU7NEJBRWpCLElBQUksWUFBWSxFQUFFOytCQUd6QixJQUFJOzRCQUVQLElBQUk7S0FtRlk7Ozs7O0lBL0V4QyxRQUFRLENBQUMsS0FBSztRQUNaLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztR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QUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQ2hFLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRTt3QkFDM0MsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzt3QkFDNUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDNUU7aUJBQ0Y7cUJBQU0sSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakYsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztvQkFDcEYsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDtxQkFBTSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7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QUFDLFFBQVEsQ0FBQyxjQUNsQyxZQUFZLFNBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO3FCQWtCbkMsWUFBWSxTQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgSG9zdExpc3RlbmVyLFxuICBRdWVyeUxpc3QsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBFbGVtZW50UmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcm91c2VsU2xpZGVDb21wb25lbnQgfSBmcm9tICcuL2Nhcm91c2VsLXNsaWRlL2Nhcm91c2VsLXNsaWRlLmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyB0b3VjaEV2ZW50IGZyb20gJy4uL2NvcmUvdXRpbC90b3VjaC1ldmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0Nhcm91c2VsLCBuem0tY2Fyb3VzZWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogJy4vY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIENhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgc2xpZGVIZWlnaHQ6IG51bWJlcjtcbiAgdG91Y2hPYmplY3Q7XG4gIHN0eWxlID0ge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCknLFxuICAgIG1hcmdpbjogJydcbiAgfTtcblxuICBwcml2YXRlIF90aW1lcjogYW55O1xuICBwcml2YXRlIF9ub2RlQXJyOiBBcnJheTxhbnk+ID0gW107XG4gIHByaXZhdGUgX2xhc3RJbmRleDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfaXNNb3VzZURvd246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmF0aW9uV2lkdGg6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRTbGlkZVdpZHRoOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50U2xpZGVIZWlnaHQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX3RyYW5zaXRpb246IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9zcGFjZVdpZHRoOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ2Fyb3VzZWxTbGlkZUNvbXBvbmVudClcbiAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbFNsaWRlQ29tcG9uZW50PjtcblxuICBASW5wdXQoKVxuICBzcGVlZDogbnVtYmVyID0gNTAwO1xuICBASW5wdXQoKVxuICBzZWxlY3RlZEluZGV4OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKVxuICBkb3RzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgdmVydGljYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgYXV0b3BsYXk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgYXV0b3BsYXlJbnRlcnZhbDogYW55ID0gMzAwMDtcbiAgQElucHV0KClcbiAgaW5maW5pdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZG90U3R5bGU6IG9iamVjdCA9IHt9O1xuICBASW5wdXQoKVxuICBkb3RBY3RpdmVTdHlsZTogb2JqZWN0ID0ge307XG4gIEBJbnB1dCgpXG4gIGZyYW1lT3ZlcmZsb3c6IHN0cmluZyA9ICdoaWRkZW4nO1xuICBASW5wdXQoKVxuICBjZWxsU3BhY2luZzogbnVtYmVyID0gMDtcbiAgQElucHV0KClcbiAgc2xpZGVXaWR0aDogbnVtYmVyID0gMTtcbiAgQElucHV0KClcbiAgc3dpcGVTcGVlZDogbnVtYmVyID0gMTI7XG4gIEBJbnB1dCgpXG4gIGRyYWdnaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgQE91dHB1dCgpXG4gIGFmdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpXG4gIGJlZm9yZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1jYXJvdXNlbCcpXG4gIGNhcm91c2VsV3JhcHBlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuY2Fyb3VzZWwnKVxuICBjYXJvdXNlbHdyYXA6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBbJyRldmVudCddKVxuICBwYW5zdGFydChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5kcmFnZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIHRoaXMuX2lzTW91c2VEb3duID0gdHJ1ZTtcbiAgICB0aGlzLnRvdWNoT2JqZWN0ID0ge1xuICAgICAgc3RhcnRYOiB0b3VjaEV2ZW50LmdldEV2ZW50VGFyZ2V0KGV2ZW50KS5wYWdlWCxcbiAgICAgIHN0YXJ0WTogdG91Y2hFdmVudC5nZXRFdmVudFRhcmdldChldmVudCkucGFnZVksXG4gICAgICBkaXJlY3Rpb246IHRoaXMudG91Y2hPYmplY3QuZGlyZWN0aW9uXG4gICAgfTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbW92ZScsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNobW92ZScsIFsnJGV2ZW50J10pXG4gIHBhbm1vdmUoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMuZHJhZ2dpbmcgJiYgIXRoaXMuX2lzTW91c2VEb3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgZGlyZWN0aW9uIH0gPSB0aGlzLnN3aXBlRGlyZWN0aW9uKFxuICAgICAgdGhpcy50b3VjaE9iamVjdC5zdGFydFgsXG4gICAgICB0b3VjaEV2ZW50LmdldEV2ZW50VGFyZ2V0KGV2ZW50KS5wYWdlWCxcbiAgICAgIHRoaXMudG91Y2hPYmplY3Quc3RhcnRZLFxuICAgICAgdG91Y2hFdmVudC5nZXRFdmVudFRhcmdldChldmVudCkucGFnZVlcbiAgICApO1xuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLnZlcnRpY2FsXG4gICAgICA/IE1hdGguYWJzKHRvdWNoRXZlbnQuZ2V0RXZlbnRUYXJnZXQoZXZlbnQpLnBhZ2VZIC0gdGhpcy50b3VjaE9iamVjdC5zdGFydFkpXG4gICAgICA6IE1hdGguYWJzKHRvdWNoRXZlbnQuZ2V0RXZlbnRUYXJnZXQoZXZlbnQpLnBhZ2VYIC0gdGhpcy50b3VjaE9iamVjdC5zdGFydFgpO1xuICAgIGNvbnN0IG9mZnNldCA9IC10aGlzLnRvdWNoT2JqZWN0LmRpcmVjdGlvbiAqIGxlbmd0aCAtIHRoaXMuc2VsZWN0ZWRJbmRleCAqIHRoaXMuX3JhdGlvbldpZHRoO1xuICAgIH