|
- const $ = require('jquery');
- class EventPagination {
- constructor(list) {
- if (!list.data('pagination') || list.data('items') >= list.children().length) {
- list.closest('.events-wrapper').next('.events-actions').find('.prev, .next').remove();
- return false;
- }
- this.list = list.addClass('initiated');
- this.wrapper = list.closest('.events-wrapper');
- this.items = list.children();
- this.current = 0;
- this.resizeTimer = null;
- this.scroll = this.list.data('scroll');
- this.show = this.list.data('items');
-
- if (!this.scroll) {
- this.scroll = this.show;
- }
-
- this.initButtons();
- this.goTo(0);
- this.initResize();
- }
-
- initResize() {
- $(window).on('resize', () => {
- if (this.resizeTimer) {
- clearTimeout(this.resizeTimer);
- }
- this.resizeTimer = setTimeout( () => {
- this.goTo(this.current);
- }, 250)
- })
- }
-
- initButtons() {
- this.prevBtn = this.wrapper.next('.events-actions').find('.prev');
- this.nextBtn = this.wrapper.next('.events-actions').find('.next');
-
- this.nextBtn.on('click', (e) => {
- e.preventDefault();
- this.next();
- })
- this.prevBtn.on('click', (e) => {
- e.preventDefault();
- this.prev();
- })
- }
-
- next() {
- if (this.current + this.scroll + this.show < this.items.length) {
- this.goTo(this.current + this.scroll);
- this.nextBtn.removeClass('disabled').removeAttr('disabled', 'disabled');
- }
- else {
- this.goTo(this.items.length - this.show);
- this.nextBtn.addClass('disabled').attr('disabled', 'disabled');
- }
-
- this.prevBtn.removeClass('disabled').removeAttr('disabled', 'disabled');
- }
-
- prev() {
- if (this.current - this.scroll > 0) {
- this.goTo(this.current - this.scroll);
- this.prevBtn.removeClass('disabled').removeAttr('disabled', 'disabled');
- }
- else {
- this.goTo(0);
- this.prevBtn.addClass('disabled').attr('disabled', 'disabled');
- }
-
- this.nextBtn.removeClass('disabled').removeAttr('disabled', 'disabled');
- }
-
- goTo(firstID) {
- const firstItem = this.items.eq(firstID);
- const lastItem = this.items.eq(firstID + this.show - 1);
-
- this.wrapper.css('height', (lastItem.position().top - firstItem.position().top + lastItem.outerHeight()) + 'px');
- this.list.css('transform', 'translate3d(0, -' + firstItem.position().top + 'px, 0');
-
- this.items.each((i, el) => {
- if (i < firstID || i > firstID + this.show - 1) {
- $(el).find('a').attr('tabindex', '-1');
- }
- else {
- $(el).find('a').removeAttr('tabindex');
- }
- })
-
- this.current = firstID;
- }
- }
-
- $('body').on('ihk-init dynamic-component-loaded gfi-dynamic-init', function () {
- $('.events-list[data-pagination="true"]:not(.initiated)').each(function(i) {
- new EventPagination($(this));
- });
- })
|