Newer
Older

Dominik Chrzanowski
committed
/**
* @module package/quiqqer/bricks/bin/Controls/Slider/CustomerReviewsSlider
* @author Dominik Chrzanowski
*
* Basic Slider
*/
define('package/quiqqer/bricks/bin/Controls/Slider/CustomerReviewsSlider', [
'qui/QUI',
'qui/controls/Control',
URL_OPT_DIR + 'bin/quiqqer-asset/glidejs-glide/@glidejs/glide/dist/glide.js',
'css!' + URL_OPT_DIR + 'bin/quiqqer-asset/glidejs-glide/@glidejs/glide/dist/css/glide.core.css',

Dominik Chrzanowski
committed
// 'css!' + URL_OPT_DIR + 'bin/quiqqer-asset/glidejs-glide/@glidejs/glide/dist/css/glide.theme.css'

Dominik Chrzanowski
committed
], function (QUI, QUIControl, Glide) {
"use strict";
return new Class({
Extends: QUIControl,
Type : 'package/quiqqer/bricks/bin/Controls/Slider/CustomerReviewsSlider',
Binds: [
'$onImport',
'prev',
'next',
'resize'
],
options: {

Dominik Chrzanowski
committed
delay: 5000,
height: 'const',
autoplay: false,

Dominik Chrzanowski
committed
perview: 1

Dominik Chrzanowski
committed
},

Dominik Chrzanowski
committed
glideTrack: null,

Dominik Chrzanowski
committed
initialize: function (options) {
this.parent(options);

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
this.addEvents({
onImport: this.$onImport
});
},
/**
* event : on import
*/
$onImport: function () {
var delay = this.getAttribute('delay');

Dominik Chrzanowski
committed
var autoplay = this.getAttribute('autoplay');
var sliderHeight = this.getAttribute('height');

Dominik Chrzanowski
committed
var perView = this.getAttribute('perview');
this.glideTrack = document.querySelector('.customerReviewsSlider-track');

Dominik Chrzanowski
committed
var options = {

Dominik Chrzanowski
committed
type: 'carousel',

Dominik Chrzanowski
committed
perView: perView

Dominik Chrzanowski
committed
};

Dominik Chrzanowski
committed
if (delay >= 1000 && autoplay == true) {

Dominik Chrzanowski
committed
options['autoplay'] = delay;
}

Dominik Chrzanowski
committed
var glide = new Glide('.glide', options);

Dominik Chrzanowski
committed
if (sliderHeight === 'variable') {
this.sliderHandleHeight(glide);
}
glide.mount();
},
sliderHandleHeight: function (glide) {

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
var self = this;

Dominik Chrzanowski
committed
var GlideElem = document.querySelector('.customerReviewsSlider-slider-wrapper');
if (GlideElem) {
// Automated height on Carousel build
glide.on('build.after', function () {

Dominik Chrzanowski
committed
self.showSlider();

Dominik Chrzanowski
committed
self.setSliderHeight();

Dominik Chrzanowski
committed
});
// Automated height on Carousel change

Dominik Chrzanowski
committed
glide.on('run.before', function (e) {
self.changeSliderHeight(e.direction);

Dominik Chrzanowski
committed
});
}
},

Dominik Chrzanowski
committed
showSlider: function () {
var Wrapper = document.querySelector('.customerReviewsSlider-track');
Wrapper.style.opacity = 1;
},

Dominik Chrzanowski
committed
changeSliderHeight: function (direction) {

Dominik Chrzanowski
committed
var activeSlide = document.querySelector('.glide__slide--active');
var actvieSlideWidth = activeSlide.offsetWidth;
var glideTrackWidth = this.glideTrack.offsetWidth;
var howMany = Math.round(glideTrackWidth/actvieSlideWidth);

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
var slides = this.getSlides(howMany, direction);
var highestSlide = this.getHeight(slides);
var glideTrackHeight = this.glideTrack.offsetHeight;
if (highestSlide !== glideTrackHeight) {
this.glideTrack.style.height = `${highestSlide+50}px`;
}
},
setSliderHeight: function () {
var activeSlide = document.querySelector('.glide__slide--active');
var actvieSlideWidth = activeSlide.offsetWidth;
var glideTrackWidth = this.glideTrack.offsetWidth;
var howMany = Math.round(glideTrackWidth/actvieSlideWidth);

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
var slides = this.getSlides(howMany);
var highestSlide = this.getHeight(slides);

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
var glideTrackHeight = this.glideTrack.offsetHeight;

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
if (highestSlide !== glideTrackHeight) {
this.glideTrack.style.height = `${highestSlide+50}px`;
}
},
getSlides: function (howMany, direction = null) {
var i = 0;
var Slider = document.querySelector('.customerReviewsSlider-slider');
var SliderChildren = Slider.children;
var len = SliderChildren.length;
var activeSlideIndex = null;
var firstNewIndex = null;
var lastNewIndex = null;
var visibleSlides = [];
for (i; i<len; i++) {
if (SliderChildren[i].className.includes('glide__slide--active')) {
activeSlideIndex = i;

Dominik Chrzanowski
committed
break;
}
}

Dominik Chrzanowski
committed
if (direction === ">") {
firstNewIndex = activeSlideIndex + 1;
lastNewIndex = activeSlideIndex + this.getAttribute('perview'); //change to preView option
}
if (direction === "<") {
firstNewIndex = activeSlideIndex - 1;
lastNewIndex = firstNewIndex + this.getAttribute('perview') - 1; //change to preView option
}

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
if (direction === null) {
firstNewIndex = activeSlideIndex;
lastNewIndex = firstNewIndex + this.getAttribute('perview') - 1; //change to preView option
}

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
for (i = firstNewIndex; i<=lastNewIndex; i++) {
visibleSlides.push(SliderChildren[i]);

Dominik Chrzanowski
committed
}

Dominik Chrzanowski
committed
return visibleSlides;

Dominik Chrzanowski
committed
},

Dominik Chrzanowski
committed
getHeight: function (slides) {
var newHeight = 0;
var i = 0;
var len = slides.length;

Dominik Chrzanowski
committed

Dominik Chrzanowski
committed
for (i; i<len; i++) {
var slideHeight = slides[i].offsetHeight;
if(slideHeight>newHeight) {
newHeight = slideHeight;
}

Dominik Chrzanowski
committed
}

Dominik Chrzanowski
committed
return newHeight;