|
@@ -407,17 +407,18 @@ function EventBinder() {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+var ARROWS = "arrows:";
|
|
|
+var PAGINATION = "pagination:";
|
|
|
+var AUTOPLAY = "autoplay:";
|
|
|
var EVENT_MOUNTED = "mounted";
|
|
|
var EVENT_READY = "ready";
|
|
|
var EVENT_MOVE = "move";
|
|
|
var EVENT_MOVED = "moved";
|
|
|
-var EVENT_SHIFTED = "shifted";
|
|
|
var EVENT_CLICK = "click";
|
|
|
var EVENT_ACTIVE = "active";
|
|
|
var EVENT_INACTIVE = "inactive";
|
|
|
var EVENT_VISIBLE = "visible";
|
|
|
var EVENT_HIDDEN = "hidden";
|
|
|
-var EVENT_SLIDE_KEYDOWN = "slide:keydown";
|
|
|
var EVENT_REFRESH = "refresh";
|
|
|
var EVENT_UPDATED = "updated";
|
|
|
var EVENT_RESIZE = "resize";
|
|
@@ -428,15 +429,18 @@ var EVENT_DRAGGED = "dragged";
|
|
|
var EVENT_SCROLL = "scroll";
|
|
|
var EVENT_SCROLLED = "scrolled";
|
|
|
var EVENT_DESTROY = "destroy";
|
|
|
-var EVENT_ARROWS_MOUNTED = "arrows:mounted";
|
|
|
-var EVENT_ARROWS_UPDATED = "arrows:updated";
|
|
|
-var EVENT_PAGINATION_MOUNTED = "pagination:mounted";
|
|
|
-var EVENT_PAGINATION_UPDATED = "pagination:updated";
|
|
|
+var EVENT_ARROWS_MOUNTED = ARROWS + "mounted";
|
|
|
+var EVENT_ARROWS_UPDATED = ARROWS + "updated";
|
|
|
+var EVENT_PAGINATION_MOUNTED = PAGINATION + "mounted";
|
|
|
+var EVENT_PAGINATION_UPDATED = PAGINATION + "updated";
|
|
|
var EVENT_NAVIGATION_MOUNTED = "navigation:mounted";
|
|
|
-var EVENT_AUTOPLAY_PLAY = "autoplay:play";
|
|
|
-var EVENT_AUTOPLAY_PLAYING = "autoplay:playing";
|
|
|
-var EVENT_AUTOPLAY_PAUSE = "autoplay:pause";
|
|
|
+var EVENT_AUTOPLAY_PLAY = AUTOPLAY + "play";
|
|
|
+var EVENT_AUTOPLAY_PLAYING = AUTOPLAY + "playing";
|
|
|
+var EVENT_AUTOPLAY_PAUSE = AUTOPLAY + "pause";
|
|
|
var EVENT_LAZYLOAD_LOADED = "lazyload:loaded";
|
|
|
+var EVENT_SLIDE_KEYDOWN = "sk";
|
|
|
+var EVENT_SHIFTED = "sh";
|
|
|
+var EVENT_END_INDEX_CHANGED = "ei";
|
|
|
|
|
|
function EventInterface(Splide2) {
|
|
|
var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();
|
|
@@ -1548,7 +1552,8 @@ function Move(Splide2, Components2, options) {
|
|
|
|
|
|
function Controller(Splide2, Components2, options) {
|
|
|
var _EventInterface6 = EventInterface(Splide2),
|
|
|
- on = _EventInterface6.on;
|
|
|
+ on = _EventInterface6.on,
|
|
|
+ emit = _EventInterface6.emit;
|
|
|
|
|
|
var Move = Components2.Move;
|
|
|
var getPosition = Move.getPosition,
|
|
@@ -1557,11 +1562,13 @@ function Controller(Splide2, Components2, options) {
|
|
|
var _Components2$Slides = Components2.Slides,
|
|
|
isEnough = _Components2$Slides.isEnough,
|
|
|
getLength = _Components2$Slides.getLength;
|
|
|
+ var compact = options.compact;
|
|
|
var isLoop = Splide2.is(LOOP);
|
|
|
var isSlide = Splide2.is(SLIDE);
|
|
|
var getNext = apply(getAdjacent, false);
|
|
|
var getPrev = apply(getAdjacent, true);
|
|
|
var currIndex = options.start || 0;
|
|
|
+ var endIndex;
|
|
|
var prevIndex = currIndex;
|
|
|
var slideCount;
|
|
|
var perMove;
|
|
@@ -1569,14 +1576,16 @@ function Controller(Splide2, Components2, options) {
|
|
|
|
|
|
function mount() {
|
|
|
init();
|
|
|
- on([EVENT_UPDATED, EVENT_REFRESH], init);
|
|
|
+ on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);
|
|
|
+ on(EVENT_RESIZED, onResized);
|
|
|
}
|
|
|
|
|
|
function init() {
|
|
|
slideCount = getLength(true);
|
|
|
perMove = options.perMove;
|
|
|
perPage = options.perPage;
|
|
|
- var index = clamp(currIndex, 0, slideCount - 1);
|
|
|
+ endIndex = getEnd();
|
|
|
+ var index = clamp(currIndex, 0, compact ? endIndex : slideCount - 1);
|
|
|
|
|
|
if (index !== currIndex) {
|
|
|
currIndex = index;
|
|
@@ -1584,6 +1593,12 @@ function Controller(Splide2, Components2, options) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ function onResized() {
|
|
|
+ if (endIndex !== getEnd()) {
|
|
|
+ emit(EVENT_END_INDEX_CHANGED);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
function go(control, allowSameIndex, callback) {
|
|
|
if (!isBusy()) {
|
|
|
var dest = parse(control);
|
|
@@ -1598,7 +1613,7 @@ function Controller(Splide2, Components2, options) {
|
|
|
|
|
|
function scroll(destination, duration, snap, callback) {
|
|
|
Components2.Scroll.scroll(destination, duration, snap, function () {
|
|
|
- setIndex(loop(Move.toIndex(getPosition())));
|
|
|
+ setIndex(min(loop(Move.toIndex(getPosition())), endIndex));
|
|
|
callback && callback();
|
|
|
});
|
|
|
}
|
|
@@ -1619,7 +1634,7 @@ function Controller(Splide2, Components2, options) {
|
|
|
index = getPrev(true);
|
|
|
}
|
|
|
} else {
|
|
|
- index = isLoop ? control : clamp(control, 0, getEnd());
|
|
|
+ index = isLoop ? control : clamp(control, 0, endIndex);
|
|
|
}
|
|
|
|
|
|
return index;
|
|
@@ -1631,7 +1646,7 @@ function Controller(Splide2, Components2, options) {
|
|
|
|
|
|
if (dest === -1 && isSlide) {
|
|
|
if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {
|
|
|
- return prev ? 0 : getEnd();
|
|
|
+ return prev ? 0 : endIndex;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1640,7 +1655,6 @@ function Controller(Splide2, Components2, options) {
|
|
|
|
|
|
function computeDestIndex(dest, from, snapPage) {
|
|
|
if (isEnough() || hasFocus()) {
|
|
|
- var end = getEnd();
|
|
|
var index = computeMovableDestIndex(dest);
|
|
|
|
|
|
if (index !== dest) {
|
|
@@ -1649,14 +1663,14 @@ function Controller(Splide2, Components2, options) {
|
|
|
snapPage = false;
|
|
|
}
|
|
|
|
|
|
- if (dest < 0 || dest > end) {
|
|
|
- if (!perMove && (between(0, dest, from, true) || between(end, from, dest, true))) {
|
|
|
+ if (dest < 0 || dest > endIndex) {
|
|
|
+ if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {
|
|
|
dest = toIndex(toPage(dest));
|
|
|
} else {
|
|
|
if (isLoop) {
|
|
|
dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;
|
|
|
} else if (options.rewind) {
|
|
|
- dest = dest < 0 ? end : 0;
|
|
|
+ dest = dest < 0 ? endIndex : 0;
|
|
|
} else {
|
|
|
dest = -1;
|
|
|
}
|
|
@@ -1690,20 +1704,29 @@ function Controller(Splide2, Components2, options) {
|
|
|
}
|
|
|
|
|
|
function getEnd() {
|
|
|
- return max(slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage), 0);
|
|
|
+ var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);
|
|
|
+
|
|
|
+ while (compact && --end > 0) {
|
|
|
+ if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {
|
|
|
+ end++;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return clamp(end, 0, slideCount - 1);
|
|
|
}
|
|
|
|
|
|
function toIndex(page) {
|
|
|
- return clamp(hasFocus() ? page : perPage * page, 0, getEnd());
|
|
|
+ return clamp(hasFocus() ? page : perPage * page, 0, endIndex);
|
|
|
}
|
|
|
|
|
|
function toPage(index) {
|
|
|
- return hasFocus() ? index : floor((index >= getEnd() ? slideCount - 1 : index) / perPage);
|
|
|
+ return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);
|
|
|
}
|
|
|
|
|
|
function toDest(destination) {
|
|
|
var closest = Move.toIndex(destination);
|
|
|
- return isSlide ? clamp(closest, 0, getEnd()) : closest;
|
|
|
+ return isSlide ? clamp(closest, 0, endIndex) : closest;
|
|
|
}
|
|
|
|
|
|
function setIndex(index) {
|
|
@@ -1812,7 +1835,7 @@ function Arrows(Splide2, Components2, options) {
|
|
|
}
|
|
|
|
|
|
function listen() {
|
|
|
- on([EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED], update);
|
|
|
+ on([EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);
|
|
|
bind(next, "click", apply(go, ">"));
|
|
|
bind(prev, "click", apply(go, "<"));
|
|
|
}
|
|
@@ -2501,7 +2524,7 @@ function Pagination(Splide2, Components2, options) {
|
|
|
|
|
|
function mount() {
|
|
|
destroy();
|
|
|
- on([EVENT_UPDATED, EVENT_REFRESH], mount);
|
|
|
+ on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], mount);
|
|
|
var enabled = options.pagination && Slides.isEnough();
|
|
|
placeholder && display(placeholder, enabled ? "" : "none");
|
|
|
|
|
@@ -2532,7 +2555,7 @@ function Pagination(Splide2, Components2, options) {
|
|
|
var classes = options.classes,
|
|
|
i18n = options.i18n,
|
|
|
perPage = options.perPage;
|
|
|
- var max = hasFocus() ? length : ceil(length / perPage);
|
|
|
+ var max = hasFocus() ? Controller.getEnd() + 1 : ceil(length / perPage);
|
|
|
list = placeholder || create("ul", classes.pagination, Elements.track.parentElement);
|
|
|
addClass(list, paginationClasses = CLASS_PAGINATION + "--" + getDirection());
|
|
|
setAttribute(list, ROLE, "tablist");
|
|
@@ -3654,4 +3677,4 @@ var SplideRenderer = /*#__PURE__*/function () {
|
|
|
return SplideRenderer;
|
|
|
}();
|
|
|
|
|
|
-export { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };
|
|
|
+export { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_END_INDEX_CHANGED, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };
|