@itcenteratunihelsinki/huds-lib 0.8.62 → 0.8.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/hy-hero-carousel.js +328 -1
- package/components/hy-hero-carousel.js.map +1 -1
- package/dist/cjs/hy-hero-carousel.cjs.entry.js +328 -1
- package/dist/cjs/hy-hero-carousel.cjs.entry.js.map +1 -1
- package/dist/collection/components/hy-hero-carousel/hy-hero-carousel.js +5 -2
- package/dist/collection/components/hy-hero-carousel/hy-hero-carousel.js.map +1 -1
- package/dist/esm/hy-hero-carousel.entry.js +328 -1
- package/dist/esm/hy-hero-carousel.entry.js.map +1 -1
- package/dist/huds-lib/hy-hero-carousel.entry.js +1 -1
- package/dist/huds-lib/hy-hero-carousel.entry.js.map +1 -1
- package/package.json +2 -2
|
@@ -3865,6 +3865,330 @@ Object.keys(prototypes).forEach(prototypeGroup => {
|
|
|
3865
3865
|
});
|
|
3866
3866
|
Swiper.use([Resize, Observer]);
|
|
3867
3867
|
|
|
3868
|
+
function Virtual({
|
|
3869
|
+
swiper,
|
|
3870
|
+
extendParams,
|
|
3871
|
+
on,
|
|
3872
|
+
emit
|
|
3873
|
+
}) {
|
|
3874
|
+
extendParams({
|
|
3875
|
+
virtual: {
|
|
3876
|
+
enabled: false,
|
|
3877
|
+
slides: [],
|
|
3878
|
+
cache: true,
|
|
3879
|
+
renderSlide: null,
|
|
3880
|
+
renderExternal: null,
|
|
3881
|
+
renderExternalUpdate: true,
|
|
3882
|
+
addSlidesBefore: 0,
|
|
3883
|
+
addSlidesAfter: 0
|
|
3884
|
+
}
|
|
3885
|
+
});
|
|
3886
|
+
let cssModeTimeout;
|
|
3887
|
+
const document = getDocument();
|
|
3888
|
+
swiper.virtual = {
|
|
3889
|
+
cache: {},
|
|
3890
|
+
from: undefined,
|
|
3891
|
+
to: undefined,
|
|
3892
|
+
slides: [],
|
|
3893
|
+
offset: 0,
|
|
3894
|
+
slidesGrid: []
|
|
3895
|
+
};
|
|
3896
|
+
const tempDOM = document.createElement('div');
|
|
3897
|
+
function renderSlide(slide, index) {
|
|
3898
|
+
const params = swiper.params.virtual;
|
|
3899
|
+
if (params.cache && swiper.virtual.cache[index]) {
|
|
3900
|
+
return swiper.virtual.cache[index];
|
|
3901
|
+
}
|
|
3902
|
+
// eslint-disable-next-line
|
|
3903
|
+
let slideEl;
|
|
3904
|
+
if (params.renderSlide) {
|
|
3905
|
+
slideEl = params.renderSlide.call(swiper, slide, index);
|
|
3906
|
+
if (typeof slideEl === 'string') {
|
|
3907
|
+
tempDOM.innerHTML = slideEl;
|
|
3908
|
+
slideEl = tempDOM.children[0];
|
|
3909
|
+
}
|
|
3910
|
+
} else if (swiper.isElement) {
|
|
3911
|
+
slideEl = createElement('swiper-slide');
|
|
3912
|
+
} else {
|
|
3913
|
+
slideEl = createElement('div', swiper.params.slideClass);
|
|
3914
|
+
}
|
|
3915
|
+
slideEl.setAttribute('data-swiper-slide-index', index);
|
|
3916
|
+
if (!params.renderSlide) {
|
|
3917
|
+
slideEl.innerHTML = slide;
|
|
3918
|
+
}
|
|
3919
|
+
if (params.cache) swiper.virtual.cache[index] = slideEl;
|
|
3920
|
+
return slideEl;
|
|
3921
|
+
}
|
|
3922
|
+
function update(force) {
|
|
3923
|
+
const {
|
|
3924
|
+
slidesPerView,
|
|
3925
|
+
slidesPerGroup,
|
|
3926
|
+
centeredSlides,
|
|
3927
|
+
loop: isLoop
|
|
3928
|
+
} = swiper.params;
|
|
3929
|
+
const {
|
|
3930
|
+
addSlidesBefore,
|
|
3931
|
+
addSlidesAfter
|
|
3932
|
+
} = swiper.params.virtual;
|
|
3933
|
+
const {
|
|
3934
|
+
from: previousFrom,
|
|
3935
|
+
to: previousTo,
|
|
3936
|
+
slides,
|
|
3937
|
+
slidesGrid: previousSlidesGrid,
|
|
3938
|
+
offset: previousOffset
|
|
3939
|
+
} = swiper.virtual;
|
|
3940
|
+
if (!swiper.params.cssMode) {
|
|
3941
|
+
swiper.updateActiveIndex();
|
|
3942
|
+
}
|
|
3943
|
+
const activeIndex = swiper.activeIndex || 0;
|
|
3944
|
+
let offsetProp;
|
|
3945
|
+
if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
|
|
3946
|
+
let slidesAfter;
|
|
3947
|
+
let slidesBefore;
|
|
3948
|
+
if (centeredSlides) {
|
|
3949
|
+
slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
|
|
3950
|
+
slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
|
|
3951
|
+
} else {
|
|
3952
|
+
slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;
|
|
3953
|
+
slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;
|
|
3954
|
+
}
|
|
3955
|
+
let from = activeIndex - slidesBefore;
|
|
3956
|
+
let to = activeIndex + slidesAfter;
|
|
3957
|
+
if (!isLoop) {
|
|
3958
|
+
from = Math.max(from, 0);
|
|
3959
|
+
to = Math.min(to, slides.length - 1);
|
|
3960
|
+
}
|
|
3961
|
+
let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
|
|
3962
|
+
if (isLoop && activeIndex >= slidesBefore) {
|
|
3963
|
+
from -= slidesBefore;
|
|
3964
|
+
if (!centeredSlides) offset += swiper.slidesGrid[0];
|
|
3965
|
+
} else if (isLoop && activeIndex < slidesBefore) {
|
|
3966
|
+
from = -slidesBefore;
|
|
3967
|
+
if (centeredSlides) offset += swiper.slidesGrid[0];
|
|
3968
|
+
}
|
|
3969
|
+
Object.assign(swiper.virtual, {
|
|
3970
|
+
from,
|
|
3971
|
+
to,
|
|
3972
|
+
offset,
|
|
3973
|
+
slidesGrid: swiper.slidesGrid,
|
|
3974
|
+
slidesBefore,
|
|
3975
|
+
slidesAfter
|
|
3976
|
+
});
|
|
3977
|
+
function onRendered() {
|
|
3978
|
+
swiper.updateSlides();
|
|
3979
|
+
swiper.updateProgress();
|
|
3980
|
+
swiper.updateSlidesClasses();
|
|
3981
|
+
emit('virtualUpdate');
|
|
3982
|
+
}
|
|
3983
|
+
if (previousFrom === from && previousTo === to && !force) {
|
|
3984
|
+
if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
|
|
3985
|
+
swiper.slides.forEach(slideEl => {
|
|
3986
|
+
slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
|
|
3987
|
+
});
|
|
3988
|
+
}
|
|
3989
|
+
swiper.updateProgress();
|
|
3990
|
+
emit('virtualUpdate');
|
|
3991
|
+
return;
|
|
3992
|
+
}
|
|
3993
|
+
if (swiper.params.virtual.renderExternal) {
|
|
3994
|
+
swiper.params.virtual.renderExternal.call(swiper, {
|
|
3995
|
+
offset,
|
|
3996
|
+
from,
|
|
3997
|
+
to,
|
|
3998
|
+
slides: function getSlides() {
|
|
3999
|
+
const slidesToRender = [];
|
|
4000
|
+
for (let i = from; i <= to; i += 1) {
|
|
4001
|
+
slidesToRender.push(slides[i]);
|
|
4002
|
+
}
|
|
4003
|
+
return slidesToRender;
|
|
4004
|
+
}()
|
|
4005
|
+
});
|
|
4006
|
+
if (swiper.params.virtual.renderExternalUpdate) {
|
|
4007
|
+
onRendered();
|
|
4008
|
+
} else {
|
|
4009
|
+
emit('virtualUpdate');
|
|
4010
|
+
}
|
|
4011
|
+
return;
|
|
4012
|
+
}
|
|
4013
|
+
const prependIndexes = [];
|
|
4014
|
+
const appendIndexes = [];
|
|
4015
|
+
const getSlideIndex = index => {
|
|
4016
|
+
let slideIndex = index;
|
|
4017
|
+
if (index < 0) {
|
|
4018
|
+
slideIndex = slides.length + index;
|
|
4019
|
+
} else if (slideIndex >= slides.length) {
|
|
4020
|
+
// eslint-disable-next-line
|
|
4021
|
+
slideIndex = slideIndex - slides.length;
|
|
4022
|
+
}
|
|
4023
|
+
return slideIndex;
|
|
4024
|
+
};
|
|
4025
|
+
if (force) {
|
|
4026
|
+
swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}, swiper-slide`).forEach(slideEl => {
|
|
4027
|
+
slideEl.remove();
|
|
4028
|
+
});
|
|
4029
|
+
} else {
|
|
4030
|
+
for (let i = previousFrom; i <= previousTo; i += 1) {
|
|
4031
|
+
if (i < from || i > to) {
|
|
4032
|
+
const slideIndex = getSlideIndex(i);
|
|
4033
|
+
swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`).forEach(slideEl => {
|
|
4034
|
+
slideEl.remove();
|
|
4035
|
+
});
|
|
4036
|
+
}
|
|
4037
|
+
}
|
|
4038
|
+
}
|
|
4039
|
+
const loopFrom = isLoop ? -slides.length : 0;
|
|
4040
|
+
const loopTo = isLoop ? slides.length * 2 : slides.length;
|
|
4041
|
+
for (let i = loopFrom; i < loopTo; i += 1) {
|
|
4042
|
+
if (i >= from && i <= to) {
|
|
4043
|
+
const slideIndex = getSlideIndex(i);
|
|
4044
|
+
if (typeof previousTo === 'undefined' || force) {
|
|
4045
|
+
appendIndexes.push(slideIndex);
|
|
4046
|
+
} else {
|
|
4047
|
+
if (i > previousTo) appendIndexes.push(slideIndex);
|
|
4048
|
+
if (i < previousFrom) prependIndexes.push(slideIndex);
|
|
4049
|
+
}
|
|
4050
|
+
}
|
|
4051
|
+
}
|
|
4052
|
+
appendIndexes.forEach(index => {
|
|
4053
|
+
swiper.slidesEl.append(renderSlide(slides[index], index));
|
|
4054
|
+
});
|
|
4055
|
+
if (isLoop) {
|
|
4056
|
+
for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {
|
|
4057
|
+
const index = prependIndexes[i];
|
|
4058
|
+
swiper.slidesEl.prepend(renderSlide(slides[index], index));
|
|
4059
|
+
}
|
|
4060
|
+
} else {
|
|
4061
|
+
prependIndexes.sort((a, b) => b - a);
|
|
4062
|
+
prependIndexes.forEach(index => {
|
|
4063
|
+
swiper.slidesEl.prepend(renderSlide(slides[index], index));
|
|
4064
|
+
});
|
|
4065
|
+
}
|
|
4066
|
+
elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {
|
|
4067
|
+
slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
|
|
4068
|
+
});
|
|
4069
|
+
onRendered();
|
|
4070
|
+
}
|
|
4071
|
+
function appendSlide(slides) {
|
|
4072
|
+
if (typeof slides === 'object' && 'length' in slides) {
|
|
4073
|
+
for (let i = 0; i < slides.length; i += 1) {
|
|
4074
|
+
if (slides[i]) swiper.virtual.slides.push(slides[i]);
|
|
4075
|
+
}
|
|
4076
|
+
} else {
|
|
4077
|
+
swiper.virtual.slides.push(slides);
|
|
4078
|
+
}
|
|
4079
|
+
update(true);
|
|
4080
|
+
}
|
|
4081
|
+
function prependSlide(slides) {
|
|
4082
|
+
const activeIndex = swiper.activeIndex;
|
|
4083
|
+
let newActiveIndex = activeIndex + 1;
|
|
4084
|
+
let numberOfNewSlides = 1;
|
|
4085
|
+
if (Array.isArray(slides)) {
|
|
4086
|
+
for (let i = 0; i < slides.length; i += 1) {
|
|
4087
|
+
if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
|
|
4088
|
+
}
|
|
4089
|
+
newActiveIndex = activeIndex + slides.length;
|
|
4090
|
+
numberOfNewSlides = slides.length;
|
|
4091
|
+
} else {
|
|
4092
|
+
swiper.virtual.slides.unshift(slides);
|
|
4093
|
+
}
|
|
4094
|
+
if (swiper.params.virtual.cache) {
|
|
4095
|
+
const cache = swiper.virtual.cache;
|
|
4096
|
+
const newCache = {};
|
|
4097
|
+
Object.keys(cache).forEach(cachedIndex => {
|
|
4098
|
+
const cachedEl = cache[cachedIndex];
|
|
4099
|
+
const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');
|
|
4100
|
+
if (cachedElIndex) {
|
|
4101
|
+
cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);
|
|
4102
|
+
}
|
|
4103
|
+
newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;
|
|
4104
|
+
});
|
|
4105
|
+
swiper.virtual.cache = newCache;
|
|
4106
|
+
}
|
|
4107
|
+
update(true);
|
|
4108
|
+
swiper.slideTo(newActiveIndex, 0);
|
|
4109
|
+
}
|
|
4110
|
+
function removeSlide(slidesIndexes) {
|
|
4111
|
+
if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
|
|
4112
|
+
let activeIndex = swiper.activeIndex;
|
|
4113
|
+
if (Array.isArray(slidesIndexes)) {
|
|
4114
|
+
for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
|
|
4115
|
+
swiper.virtual.slides.splice(slidesIndexes[i], 1);
|
|
4116
|
+
if (swiper.params.virtual.cache) {
|
|
4117
|
+
delete swiper.virtual.cache[slidesIndexes[i]];
|
|
4118
|
+
}
|
|
4119
|
+
if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
|
|
4120
|
+
activeIndex = Math.max(activeIndex, 0);
|
|
4121
|
+
}
|
|
4122
|
+
} else {
|
|
4123
|
+
swiper.virtual.slides.splice(slidesIndexes, 1);
|
|
4124
|
+
if (swiper.params.virtual.cache) {
|
|
4125
|
+
delete swiper.virtual.cache[slidesIndexes];
|
|
4126
|
+
}
|
|
4127
|
+
if (slidesIndexes < activeIndex) activeIndex -= 1;
|
|
4128
|
+
activeIndex = Math.max(activeIndex, 0);
|
|
4129
|
+
}
|
|
4130
|
+
update(true);
|
|
4131
|
+
swiper.slideTo(activeIndex, 0);
|
|
4132
|
+
}
|
|
4133
|
+
function removeAllSlides() {
|
|
4134
|
+
swiper.virtual.slides = [];
|
|
4135
|
+
if (swiper.params.virtual.cache) {
|
|
4136
|
+
swiper.virtual.cache = {};
|
|
4137
|
+
}
|
|
4138
|
+
update(true);
|
|
4139
|
+
swiper.slideTo(0, 0);
|
|
4140
|
+
}
|
|
4141
|
+
on('beforeInit', () => {
|
|
4142
|
+
if (!swiper.params.virtual.enabled) return;
|
|
4143
|
+
let domSlidesAssigned;
|
|
4144
|
+
if (typeof swiper.passedParams.virtual.slides === 'undefined') {
|
|
4145
|
+
const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));
|
|
4146
|
+
if (slides && slides.length) {
|
|
4147
|
+
swiper.virtual.slides = [...slides];
|
|
4148
|
+
domSlidesAssigned = true;
|
|
4149
|
+
slides.forEach((slideEl, slideIndex) => {
|
|
4150
|
+
slideEl.setAttribute('data-swiper-slide-index', slideIndex);
|
|
4151
|
+
swiper.virtual.cache[slideIndex] = slideEl;
|
|
4152
|
+
slideEl.remove();
|
|
4153
|
+
});
|
|
4154
|
+
}
|
|
4155
|
+
}
|
|
4156
|
+
if (!domSlidesAssigned) {
|
|
4157
|
+
swiper.virtual.slides = swiper.params.virtual.slides;
|
|
4158
|
+
}
|
|
4159
|
+
swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
|
|
4160
|
+
swiper.params.watchSlidesProgress = true;
|
|
4161
|
+
swiper.originalParams.watchSlidesProgress = true;
|
|
4162
|
+
if (!swiper.params.initialSlide) {
|
|
4163
|
+
update();
|
|
4164
|
+
}
|
|
4165
|
+
});
|
|
4166
|
+
on('setTranslate', () => {
|
|
4167
|
+
if (!swiper.params.virtual.enabled) return;
|
|
4168
|
+
if (swiper.params.cssMode && !swiper._immediateVirtual) {
|
|
4169
|
+
clearTimeout(cssModeTimeout);
|
|
4170
|
+
cssModeTimeout = setTimeout(() => {
|
|
4171
|
+
update();
|
|
4172
|
+
}, 100);
|
|
4173
|
+
} else {
|
|
4174
|
+
update();
|
|
4175
|
+
}
|
|
4176
|
+
});
|
|
4177
|
+
on('init update resize', () => {
|
|
4178
|
+
if (!swiper.params.virtual.enabled) return;
|
|
4179
|
+
if (swiper.params.cssMode) {
|
|
4180
|
+
setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);
|
|
4181
|
+
}
|
|
4182
|
+
});
|
|
4183
|
+
Object.assign(swiper.virtual, {
|
|
4184
|
+
appendSlide,
|
|
4185
|
+
prependSlide,
|
|
4186
|
+
removeSlide,
|
|
4187
|
+
removeAllSlides,
|
|
4188
|
+
update
|
|
4189
|
+
});
|
|
4190
|
+
}
|
|
4191
|
+
|
|
3868
4192
|
function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
|
|
3869
4193
|
if (swiper.params.createElements) {
|
|
3870
4194
|
Object.keys(checkProps).forEach(key => {
|
|
@@ -5055,7 +5379,7 @@ const HyHeroCarousel = class {
|
|
|
5055
5379
|
}
|
|
5056
5380
|
componentDidLoad() {
|
|
5057
5381
|
new Swiper(".swiper", {
|
|
5058
|
-
modules: [Navigation, Pagination, A11y, EffectFade],
|
|
5382
|
+
modules: [Navigation, Pagination, A11y, EffectFade, Virtual],
|
|
5059
5383
|
enabled: true,
|
|
5060
5384
|
effect: 'fade',
|
|
5061
5385
|
fadeEffect: {
|
|
@@ -5066,6 +5390,9 @@ const HyHeroCarousel = class {
|
|
|
5066
5390
|
spaceBetween: 50,
|
|
5067
5391
|
virtual: {
|
|
5068
5392
|
enabled: true,
|
|
5393
|
+
cache: true,
|
|
5394
|
+
addSlidesAfter: 0,
|
|
5395
|
+
addSlidesBefore: 0,
|
|
5069
5396
|
},
|
|
5070
5397
|
navigation: {
|
|
5071
5398
|
nextEl: ".swiper-button-next",
|