"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@angular/core"); var shared_1 = require("../common/shared"); var common_1 = require("@angular/common"); var uniquecomponentid_1 = require("../utils/uniquecomponentid"); var Carousel = /** @class */ (function () { function Carousel(el, zone) { this.el = el; this.zone = zone; this.orientation = "horizontal"; this.verticalViewPortHeight = "300px"; this.contentClass = ""; this.dotsContainerClass = ""; this.circular = false; this.autoplayInterval = 0; this.onPage = new core_1.EventEmitter(); this._numVisible = 1; this._numScroll = 1; this._oldNumScroll = 0; this.prevState = { numScroll: 0, numVisible: 0, value: [] }; this.defaultNumScroll = 1; this.defaultNumVisible = 1; this._page = 0; this.isRemainingItemsAdded = false; this.remainingItems = 0; this.totalShiftedItems = this.page * this.numScroll * -1; } Object.defineProperty(Carousel.prototype, "page", { get: function () { return this._page; }, set: function (val) { if (this.isCreated && val !== this._page) { if (this.autoplayInterval) { this.stopAutoplay(); this.allowAutoplay = false; } if (val > this._page && val < (this.totalDots() - 1)) { this.step(-1, val); } else if (val < this._page && val !== 0) { this.step(1, val); } } this._page = val; }, enumerable: true, configurable: true }); Object.defineProperty(Carousel.prototype, "numVisible", { get: function () { return this._numVisible; }, set: function (val) { this._numVisible = val; }, enumerable: true, configurable: true }); Object.defineProperty(Carousel.prototype, "numScroll", { get: function () { return this._numVisible; }, set: function (val) { this._numScroll = val; }, enumerable: true, configurable: true }); Object.defineProperty(Carousel.prototype, "value", { get: function () { return this._value; }, set: function (val) { this._value = val; if (this.circular && this._value) { this.setCloneItems(); } }, enumerable: true, configurable: true }); ; Carousel.prototype.ngAfterContentInit = function () { var _this = this; this.id = uniquecomponentid_1.UniqueComponentId(); this.allowAutoplay = !!this.autoplayInterval; if (this.circular) { this.setCloneItems(); } if (this.responsiveOptions) { this.defaultNumScroll = this._numScroll; this.defaultNumVisible = this._numVisible; } this.createStyle(); this.calculatePosition(); if (this.responsiveOptions) { this.bindDocumentListeners(); } this.templates.forEach(function (item) { switch (item.getType()) { case 'item': _this.itemTemplate = item.template; break; default: _this.itemTemplate = item.template; break; } }); }; Carousel.prototype.ngAfterContentChecked = function () { var isCircular = this.isCircular(); var totalShiftedItems = this.totalShiftedItems; if (this.value && (this.prevState.numScroll !== this._numScroll || this.prevState.numVisible !== this._numVisible || this.prevState.value.length !== this.value.length)) { if (this.autoplayInterval) { this.stopAutoplay(); } this.remainingItems = (this.value.length - this._numVisible) % this._numScroll; var page = this._page; if (this.totalDots() !== 0 && page >= this.totalDots()) { page = this.totalDots() - 1; this._page = page; this.onPage.emit({ page: this.page }); } totalShiftedItems = (page * this._numScroll) * -1; if (isCircular) { totalShiftedItems -= this._numVisible; } if (page === (this.totalDots() - 1) && this.remainingItems > 0) { totalShiftedItems += (-1 * this.remainingItems) + this._numScroll; this.isRemainingItemsAdded = true; } else { this.isRemainingItemsAdded = false; } if (totalShiftedItems !== this.totalShiftedItems) { this.totalShiftedItems = totalShiftedItems; } this._oldNumScroll = this._numScroll; this.prevState.numScroll = this._numScroll; this.prevState.numVisible = this._numVisible; this.prevState.value = this._value; this.itemsContainer.nativeElement.style.transform = this.isVertical() ? "translate3d(0, " + totalShiftedItems * (100 / this._numVisible) + "%, 0)" : "translate3d(" + totalShiftedItems * (100 / this._numVisible) + "%, 0, 0)"; this.isCreated = true; if (this.autoplayInterval && this.isAutoplay()) { this.startAutoplay(); } } if (isCircular) { if (this.page === 0) { totalShiftedItems = -1 * this._numVisible; } else if (totalShiftedItems === 0) { totalShiftedItems = -1 * this.value.length; if (this.remainingItems > 0) { this.isRemainingItemsAdded = true; } } if (totalShiftedItems !== this.totalShiftedItems) { this.totalShiftedItems = totalShiftedItems; } } }; Carousel.prototype.createStyle = function () { if (!this.carouselStyle) { this.carouselStyle = document.createElement('style'); this.carouselStyle.type = 'text/css'; document.body.appendChild(this.carouselStyle); } var innerHTML = "\n #" + this.id + " .ui-carousel-item {\n\t\t\t\tflex: 1 0 " + (100 / this.numVisible) + "%\n\t\t\t}\n "; if (this.responsiveOptions) { this.responsiveOptions.sort(function (data1, data2) { var value1 = data1.breakpoint; var value2 = data2.breakpoint; var result = null; if (value1 == null && value2 != null) result = -1; else if (value1 != null && value2 == null) result = 1; else if (value1 == null && value2 == null) result = 0; else if (typeof value1 === 'string' && typeof value2 === 'string') result = value1.localeCompare(value2, undefined, { numeric: true }); else result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0; return -1 * result; }); for (var i = 0; i < this.responsiveOptions.length; i++) { var res = this.responsiveOptions[i]; innerHTML += "\n @media screen and (max-width: " + res.breakpoint + ") {\n #" + this.id + " .ui-carousel-item {\n flex: 1 0 " + (100 / res.numVisible) + "%\n }\n }\n "; } } this.carouselStyle.innerHTML = innerHTML; }; Carousel.prototype.calculatePosition = function () { if (this.itemsContainer && this.responsiveOptions) { var windowWidth = window.innerWidth; var matchedResponsiveData = { numVisible: this.defaultNumVisible, numScroll: this.defaultNumScroll }; for (var i = 0; i < this.responsiveOptions.length; i++) { var res = this.responsiveOptions[i]; if (parseInt(res.breakpoint, 10) >= windowWidth) { matchedResponsiveData = res; } } if (this._numScroll !== matchedResponsiveData.numScroll) { var page = this._page; page = Math.floor((page * this._numScroll) / matchedResponsiveData.numScroll); var totalShiftedItems = (matchedResponsiveData.numScroll * this.page) * -1; if (this.isCircular()) { totalShiftedItems -= matchedResponsiveData.numVisible; } this.totalShiftedItems = totalShiftedItems; this._numScroll = matchedResponsiveData.numScroll; this._page = page; this.onPage.emit({ page: this.page }); } if (this._numVisible !== matchedResponsiveData.numVisible) { this._numVisible = matchedResponsiveData.numVisible; this.setCloneItems(); } } }; Carousel.prototype.setCloneItems = function () { var _a, _b; this.clonedItemsForStarting = []; this.clonedItemsForFinishing = []; if (this.isCircular()) { (_a = this.clonedItemsForStarting).push.apply(_a, this.value.slice(-1 * this._numVisible)); (_b = this.clonedItemsForFinishing).push.apply(_b, this.value.slice(0, this._numVisible)); } }; Carousel.prototype.firstIndex = function () { return this.isCircular() ? (-1 * (this.totalShiftedItems + this.numVisible)) : (this.totalShiftedItems * -1); }; Carousel.prototype.lastIndex = function () { return this.firstIndex() + this.numVisible - 1; }; Carousel.prototype.totalDots = function () { return this.value ? Math.ceil((this.value.length - this._numVisible) / this._numScroll) + 1 : 0; }; Carousel.prototype.totalDotsArray = function () { return Array(this.value ? Math.ceil((this.value.length - this._numVisible) / this._numScroll) + 1 : 0).fill(0); ; }; Carousel.prototype.containerClass = function () { return { 'ui-carousel ui-widget': true, 'ui-carousel-vertical': this.isVertical(), 'ui-carousel-horizontal': !this.isVertical() }; }; Carousel.prototype.contentClasses = function () { return 'ui-carousel-content ' + this.contentClass; }; Carousel.prototype.dotsContentClasses = function () { return 'ui-carousel-dots-container ui-helper-reset ' + this.dotsContainerClass; }; Carousel.prototype.isVertical = function () { return this.orientation === 'vertical'; }; Carousel.prototype.isCircular = function () { return this.circular && this.value && this.value.length >= this.numVisible; }; Carousel.prototype.isAutoplay = function () { return this.autoplayInterval && this.allowAutoplay; }; Carousel.prototype.navForward = function (e, index) { if (this.circular || this._page < (this.totalDots() - 1)) { this.step(-1, index); } if (this.autoplayInterval) { this.stopAutoplay(); this.allowAutoplay = false; } if (e && e.cancelable) { e.preventDefault(); } }; Carousel.prototype.navBackward = function (e, index) { if (this.circular || this._page !== 0) { this.step(1, index); } if (this.autoplayInterval) { this.stopAutoplay(); this.allowAutoplay = false; } if (e && e.cancelable) { e.preventDefault(); } }; Carousel.prototype.onDotClick = function (e, index) { var page = this._page; if (this.autoplayInterval) { this.stopAutoplay(); this.allowAutoplay = false; } if (index > page) { this.navForward(e, index); } else if (index < page) { this.navBackward(e, index); } }; Carousel.prototype.step = function (dir, page) { var totalShiftedItems = this.totalShiftedItems; var isCircular = this.isCircular(); if (page != null) { totalShiftedItems = (this._numScroll * page) * -1; if (isCircular) { totalShiftedItems -= this._numVisible; } this.isRemainingItemsAdded = false; } else { totalShiftedItems += (this._numScroll * dir); if (this.isRemainingItemsAdded) { totalShiftedItems += this.remainingItems - (this._numScroll * dir); this.isRemainingItemsAdded = false; } var originalShiftedItems = isCircular ? (totalShiftedItems + this._numVisible) : totalShiftedItems; page = Math.abs(Math.floor((originalShiftedItems / this._numScroll))); } if (isCircular && this.page === (this.totalDots() - 1) && dir === -1) { totalShiftedItems = -1 * (this.value.length + this._numVisible); page = 0; } else if (isCircular && this.page === 0 && dir === 1) { totalShiftedItems = 0; page = (this.totalDots() - 1); } else if (page === (this.totalDots() - 1) && this.remainingItems > 0) { totalShiftedItems += ((this.remainingItems * -1) - (this._numScroll * dir)); this.isRemainingItemsAdded = true; } if (this.itemsContainer) { this.itemsContainer.nativeElement.style.transform = this.isVertical() ? "translate3d(0, " + totalShiftedItems * (100 / this._numVisible) + "%, 0)" : "translate3d(" + totalShiftedItems * (100 / this._numVisible) + "%, 0, 0)"; this.itemsContainer.nativeElement.style.transition = 'transform 500ms ease 0s'; } this.totalShiftedItems = totalShiftedItems; this._page = page; this.onPage.emit({ page: this.page }); }; Carousel.prototype.startAutoplay = function () { var _this = this; this.interval = setInterval(function () { if (_this.page === (_this.totalDots() - 1)) { _this.step(-1, 0); } else { _this.step(-1, _this.page + 1); } }, this.autoplayInterval); }; Carousel.prototype.stopAutoplay = function () { if (this.interval) { clearInterval(this.interval); } }; Carousel.prototype.onTransitionEnd = function () { if (this.itemsContainer) { this.itemsContainer.nativeElement.style.transition = ''; if ((this.page === 0 || this.page === (this.totalDots() - 1)) && this.isCircular()) { this.itemsContainer.nativeElement.style.transform = this.isVertical() ? "translate3d(0, " + this.totalShiftedItems * (100 / this._numVisible) + "%, 0)" : "translate3d(" + this.totalShiftedItems * (100 / this._numVisible) + "%, 0, 0)"; } } }; Carousel.prototype.onTouchStart = function (e) { var touchobj = e.changedTouches[0]; this.startPos = { x: touchobj.pageX, y: touchobj.pageY }; }; Carousel.prototype.onTouchMove = function (e) { if (e.cancelable) { e.preventDefault(); } }; Carousel.prototype.onTouchEnd = function (e) { var touchobj = e.changedTouches[0]; if (this.isVertical()) { this.changePageOnTouch(e, (touchobj.pageY - this.startPos.y)); } else { this.changePageOnTouch(e, (touchobj.pageX - this.startPos.x)); } }; Carousel.prototype.changePageOnTouch = function (e, diff) { if (diff < 0) { this.navForward(e); } else { this.navBackward(e); } }; Carousel.prototype.bindDocumentListeners = function () { var _this = this; if (!this.documentResizeListener) { this.documentResizeListener = function (e) { _this.calculatePosition(); }; window.addEventListener('resize', this.documentResizeListener); } }; Carousel.prototype.unbindDocumentListeners = function () { if (this.documentResizeListener) { window.removeEventListener('resize', this.documentResizeListener); this.documentResizeListener = null; } }; Carousel.prototype.ngOnDestroy = function () { if (this.responsiveOptions) { this.unbindDocumentListeners(); } if (this.autoplayInterval) { this.stopAutoplay(); } }; __decorate([ core_1.Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], Carousel.prototype, "page", null); __decorate([ core_1.Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], Carousel.prototype, "numVisible", null); __decorate([ core_1.Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], Carousel.prototype, "numScroll", null); __decorate([ core_1.Input(), __metadata("design:type", Array) ], Carousel.prototype, "responsiveOptions", void 0); __decorate([ core_1.Input(), __metadata("design:type", Object) ], Carousel.prototype, "orientation", void 0); __decorate([ core_1.Input(), __metadata("design:type", Object) ], Carousel.prototype, "verticalViewPortHeight", void 0); __decorate([ core_1.Input(), __metadata("design:type", String) ], Carousel.prototype, "contentClass", void 0); __decorate([ core_1.Input(), __metadata("design:type", String) ], Carousel.prototype, "dotsContainerClass", void 0); __decorate([ core_1.Input(), __metadata("design:type", Array), __metadata("design:paramtypes", [Object]) ], Carousel.prototype, "value", null); __decorate([ core_1.Input(), __metadata("design:type", Boolean) ], Carousel.prototype, "circular", void 0); __decorate([ core_1.Input(), __metadata("design:type", Number) ], Carousel.prototype, "autoplayInterval", void 0); __decorate([ core_1.Input(), __metadata("design:type", Object) ], Carousel.prototype, "style", void 0); __decorate([ core_1.Input(), __metadata("design:type", String) ], Carousel.prototype, "styleClass", void 0); __decorate([ core_1.Output(), __metadata("design:type", core_1.EventEmitter) ], Carousel.prototype, "onPage", void 0); __decorate([ core_1.ViewChild('itemsContainer', { static: true }), __metadata("design:type", core_1.ElementRef) ], Carousel.prototype, "itemsContainer", void 0); __decorate([ core_1.ContentChild(shared_1.Header, { static: false }), __metadata("design:type", Object) ], Carousel.prototype, "headerFacet", void 0); __decorate([ core_1.ContentChild(shared_1.Footer, { static: false }), __metadata("design:type", Object) ], Carousel.prototype, "footerFacet", void 0); __decorate([ core_1.ContentChildren(shared_1.PrimeTemplate), __metadata("design:type", core_1.QueryList) ], Carousel.prototype, "templates", void 0); Carousel = __decorate([ core_1.Component({ selector: 'p-carousel', template: "\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t" }), __metadata("design:paramtypes", [core_1.ElementRef, core_1.NgZone]) ], Carousel); return Carousel; }()); exports.Carousel = Carousel; var CarouselModule = /** @class */ (function () { function CarouselModule() { } CarouselModule = __decorate([ core_1.NgModule({ imports: [common_1.CommonModule, shared_1.SharedModule], exports: [common_1.CommonModule, Carousel, shared_1.SharedModule], declarations: [Carousel] }) ], CarouselModule); return CarouselModule; }()); exports.CarouselModule = CarouselModule; //# sourceMappingURL=carousel.js.map