feat(slides): update swiper to latest

* feat(slides): update swiper to latest

* chore(slides): remove debug
This commit is contained in:
Mike Hartington
2018-05-30 11:42:06 -04:00
committed by GitHub
parent bd53bba5e8
commit 8e164d6036
5 changed files with 10446 additions and 6038 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,12 @@
import { Component, Element, Event, EventEmitter, Method, Prop, Watch } from '@stencil/core';
import {
Component,
Element,
Event,
EventEmitter,
Method,
Prop,
Watch
} from '@stencil/core';
import { Swiper } from './vendor/swiper.js';
@Component({
tag: 'ion-slides',
@ -12,7 +20,6 @@ import { Swiper } from './vendor/swiper.js';
assetsDir: 'vendor'
})
export class Slides {
private container!: HTMLElement;
private swiper: any;
@ -106,22 +113,15 @@ export class Slides {
}
componentDidUnload() {
this.enableKeyboardControl(false);
this.swiper.destroy(true, true);
}
private initSlides() {
console.debug(`ion-slides, init`);
this.container = this.el.children[0] as HTMLElement;
const finalOptions = this.normalizeOptions();
// init swiper core
this.swiper = new Swiper(this.container, finalOptions);
if (finalOptions.keyboardControl) {
// init keyboard event listeners
this.enableKeyboardControl(true);
}
}
/**
@ -203,7 +203,7 @@ export class Slides {
*/
@Method()
startAutoplay(): void {
this.swiper.startAutoplay();
this.swiper.autoplay.start();
}
/**
@ -211,7 +211,7 @@ export class Slides {
*/
@Method()
stopAutoplay(): void {
this.swiper.stopAutoplay();
this.swiper.autoplay.stop();
}
/**
@ -247,21 +247,10 @@ export class Slides {
this.swiper.unlockSwipes();
}
/**
* Enable or disable keyboard control.
*/
private enableKeyboardControl(shouldEnableKeyboard: boolean) {
if (shouldEnableKeyboard) {
return this.swiper.enableKeyboardControl();
}
this.swiper.disableKeyboardControl();
}
private normalizeOptions() {
// Base options, can be changed
const swiperOptions = {
effect: 'slide',
autoplay: 0,
direction: 'horizontal',
initialSlide: 0,
loop: false,
@ -323,7 +312,6 @@ export class Slides {
runCallbacksOnInit: true,
controlBy: 'slide',
controlInverse: false,
keyboardControl: true,
coverflow: {
rotate: 50,
stretch: 0,
@ -369,18 +357,12 @@ export class Slides {
};
// Merge the base, user options, and events together then pas to swiper
return Object.assign(
{},
swiperOptions,
this.options,
eventOptions
);
return Object.assign({}, swiperOptions, this.options, eventOptions);
}
render() {
return (
<div class="swiper-container" data-dir="rtl">
<div class="swiper-container">
<div class="swiper-wrapper">
<slot />
</div>

View File

@ -63,7 +63,12 @@
}
function slideAutoPlay() {
slides.options = Object.assign({}, slides.options, {autoplay: 300});
slides.options = Object.assign({}, slides.options, {
autoplay: {
delay: 2500,
disableOnInteraction: false
}
});
slides.startAutoplay();
}

View File

@ -1,11 +1,195 @@
// Type definitions for Swiper 3.4
// Type definitions for Swiper 4.2
// Project: https://github.com/nolimits4web/Swiper
// Definitions by: Sebastián Galiano <https://github.com/sgaliano/>, Luca Trazzi <https://github.com/lucax88x/>
// Definitions by: Sebastián Galiano <https://github.com/sgaliano>, Luca Trazzi <https://github.com/lucax88x>, Eugene Matseruk <https://github.com/ematseruk>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.7
type CommonEvent =
| 'init'
| 'beforeDestroy'
| 'slideChange'
| 'slideChangeTransitionStart'
| 'slideChangeTransitionEnd'
| 'slideNextTransitionStart'
| 'slideNextTransitionEnd'
| 'slidePrevTransitionStart'
| 'slidePrevTransitionEnd'
| 'transitionStart'
| 'transitionEnd'
| 'touchStart'
| 'touchMove'
| 'touchMoveOpposite'
| 'sliderMove'
| 'touchEnd'
| 'click'
| 'tap'
| 'doubleTap'
| 'imagesReady'
| 'progress'
| 'reachBeginning'
| 'reachEnd'
| 'fromEdge'
| 'setTranslate'
| 'setTransition'
| 'resize';
type PaginationEvent = 'paginationRender' | 'paginationUpdate';
type AutoplayEvent = 'autoplayStart' | 'autoplayStop' | 'autoplay';
type LazyLoadingEvent = 'lazyImageLoad' | 'lazyImageReady';
type SwiperEvent = CommonEvent | PaginationEvent | AutoplayEvent | LazyLoadingEvent;
interface NavigationOptions {
nextEl?: string | HTMLElement;
prevEl?: string | HTMLElement;
hideOnClick?: boolean;
disabledClass?: string;
hiddenClass?: string;
}
interface PaginationOptions {
el?: string;
type?: 'bullets' | 'fraction' | 'progressbar' | 'custom';
bulletElement?: string;
dynamicBullets?: boolean;
dynamicMainBullets?: number;
hideOnClick?: boolean;
clickable?: boolean;
progressbarOpposite?: boolean;
bulletClass?: string;
bulletActiveClass?: string;
modifierClass?: string;
currentClass?: string;
totalClass?: string;
hiddenClass?: string;
progressbarFillClass?: string;
clickableClass?: string;
renderBullet?: (index: number, className: string) => void;
renderFraction?: (currentClass: string, totalClass: string) => void;
renderProgressbar?: (progressbarFillClass: string) => void;
renderCustom?: (swiper: Swiper, current: number, total: number) => void;
}
interface ScrollbarOptions {
el?: string | HTMLElement;
hide?: boolean;
draggable?: boolean;
snapOnRelease?: boolean;
dragSize?: 'auto' | number;
lockClass?: 'string';
dragClass?: 'string';
}
interface AutoplayOptions {
delay?: number;
stopOnLastSlide?: boolean;
disableOnInteraction?: boolean;
reverseDirection?: boolean;
waitForTransition?: boolean;
}
interface LazyLoadingOptions {
loadPrevNext?: string;
loadPrevNextAmount?: number;
loadOnTransitionStart?: boolean;
elementClass?: string;
loadingClass?: string;
loadedClass?: string;
preloaderClass?: string;
}
interface FadeEffectOptions {
crossFade: boolean;
}
interface CoverflowEffectOptions {
slideShadows?: boolean;
rotate?: number;
stretch?: number;
depth?: number;
modifier?: number;
}
interface FlipEffectOptions {
slideShadows?: boolean;
limitRotation?: boolean;
}
interface CubeEffectOptions {
slideShadows?: boolean;
shadow?: boolean;
shadowOffset: number;
shadowScale: number;
}
interface ZoomOptions {
maxRatio?: number;
minRatio?: number;
toggle?: boolean;
containerClass?: string;
zoomedSlideClass?: string;
}
interface KeyboardControlOptions {
enabled?: boolean;
onlyInViewport?: boolean;
}
interface MouseWheelControlOptions {
forceToAxis?: boolean;
releaseOnEdges?: boolean;
invert?: boolean;
sensitivity?: number;
eventsTarged?: string | HTMLElement;
}
interface VirtualSlidesRenderExternalData {
offset: number;
from: number;
to: number;
slides: any[];
}
interface VirtualSlidesOptions {
slides?: any[];
cache?: boolean;
renderSlide?: (slide: any, index: number) => void;
renderExternal?: (data: VirtualSlidesRenderExternalData) => void;
}
interface HashNavigationOptions {
watchState?: boolean;
replaceState?: boolean;
}
interface HistoryNavigationOptions {
replaceState?: boolean;
key?: string;
}
interface ControllerOptions {
control: Swiper;
inverse: boolean;
by: 'slide' | 'container';
}
interface AccessibilityOptions {
enabled?: boolean;
prevSlideMessage?: string;
nextSlideMessage?: string;
firstSlideMessage?: string;
lastSlideMessage?: string;
paginationBulletMessage?: string;
notificationClass?: string;
}
export interface SwiperOptions {
// General parameters
init?: boolean;
initialSlide?: number;
direction?: string;
direction?: 'horizontal' | 'vertical';
speed?: number;
setWrapperSize?: boolean;
virtualTranslate?: boolean;
@ -14,15 +198,61 @@ export interface SwiperOptions {
autoHeight?: boolean;
roundLengths?: boolean;
nested?: boolean;
uniqueNavElements?: boolean;
effect?: 'slide' | 'fade' | 'cube' | 'coverflow' | 'flip';
runCallbacksOnInit?: boolean;
watchOverflow?: boolean;
on?: {[key in SwiperEvent]?: () => void };
// Autoplay
autoplay?: number;
autoplayStopOnLast?: boolean;
autoplayDisableOnInteraction?: boolean;
// Slides grid
spaceBetween?: number;
slidesPerView?: 'auto' | number;
slidesPerColumn?: number;
slidesPerColumnFill?: 'row' | 'column';
slidesPerGroup?: number;
centeredSlides?: boolean;
slidesOffsetBefore?: number;
slidesOffsetAfter?: number;
normalizeSlideIndex?: boolean;
// Progress
watchSlidesProgress?: boolean;
watchSlidesVisibility?: boolean;
// Grab cursor
grabCursor?: boolean;
// Touches
touchEventsTarget?: 'container' | 'wrapper';
touchRatio?: number;
touchAngle?: number;
simulateTouch?: boolean;
shortSwipes?: boolean;
longSwipes?: boolean;
longSwipesRatio?: number;
longSwipesMs?: number;
followFinger?: boolean;
allowTouchMove?: boolean;
threshold?: number;
touchMoveStopPropagation?: boolean;
iOSEdgeSwipeDetection?: boolean;
iOSEdgeSwipeThreshold?: number;
touchReleaseOnEdges?: boolean;
passiveListeners?: boolean;
// Touch Resistance
resistance?: boolean;
resistanceRatio?: number;
// Swiping / No swiping
preventIntercationOnTransition?: boolean;
allowSlidePrev?: boolean;
allowSlideNext?: boolean;
noSwiping?: boolean;
noSwipingClass?: string;
noSwipingSelector?: string;
swipeHandler?: string | HTMLElement;
// Clicks
preventClicks?: boolean;
preventClicksPropagation?: boolean;
slideToClickedSlide?: boolean;
// Freemode
freeMode?: boolean;
@ -34,291 +264,195 @@ export interface SwiperOptions {
freeModeMinimumVelocity?: number;
freeModeSticky?: boolean;
// Effects
effect?: string;
fade?: {};
cube?: {};
coverflow?: {};
flip?: {};
// Parallax
parallax?: boolean;
// Slides grid
spaceBetween?: number;
slidesPerView?: number | string;
slidesPerColumn?: number;
slidesPerColumnFill?: string;
slidesPerGroup?: number;
centeredSlides?: boolean;
slidesOffsetBefore?: number;
slidesOffsetAfter?: number;
// Grab Cursor
grabCursor?: boolean;
// Touches
touchEventsTarget?: string;
touchRatio?: number;
touchAngle?: number;
simulateTouch?: boolean;
shortSwipes?: boolean;
longSwipes?: boolean;
longSwipesRatio?: number;
longSwipesMs?: number;
followFinger?: boolean;
onlyExternal?: boolean;
threshold?: number;
touchMoveStopPropagation?: boolean;
iOSEdgeSwipeDetection?: boolean;
iOSEdgeSwipeThreshold?: number;
// Touch Resistance
resistance?: boolean;
resistanceRatio?: number;
// Clicks
preventClicks?: boolean;
preventClicksPropagation?: boolean;
slideToClickedSlide?: boolean;
// Swiping / No swiping
allowSwipeToPrev?: boolean;
allowSwipeToNext?: boolean;
noSwiping?: boolean;
noSwipingClass?: string;
swipeHandler?: string | Element;
// Navigation Controls
uniqueNavElements?: boolean;
// Pagination
pagination?: string | Element;
paginationType?: string;
paginationHide?: boolean;
paginationClickable?: boolean;
paginationElement?: string;
paginationBulletRender?(swiper: Swiper, index: number, className: string): void;
paginationFractionRender?(swiper: Swiper, currentClassName: string, totalClassName: string): void;
paginationProgressRender?(swiper: Swiper, progressbarClass: string): void;
paginationCustomRender?(swiper: Swiper, current: number, total: number): void;
// Navigation Buttons
nextButton?: string | Element;
prevButton?: string | Element;
// Scollbar
scrollbar?: string | Element | SwiperScrollbarOptions;
scrollbarHide?: boolean;
scrollbarDraggable?: boolean;
scrollbarSnapOnRelease?: boolean;
// Accessibility
a11y?: boolean;
prevSlideMessage?: string;
nextSlideMessage?: string;
firstSlideMessage?: string;
lastSlideMessage?: string;
paginationBulletMessage?: string;
// Keyboard / Mousewheel
keyboardControl?: boolean;
mousewheelControl?: boolean;
mousewheelForceToAxis?: boolean;
mousewheelReleaseOnEdges?: boolean;
mousewheelInvert?: boolean;
mousewheelSensitivity?: number;
// Hash Navigation
hashnav?: boolean;
hashnavWatchState?: boolean;
history?: string;
// Progress
watchSlidesProgress?: boolean;
watchSlidesVisibility?: boolean;
// Images
preloadImages?: boolean;
updateOnImagesReady?: boolean;
lazyLoading?: boolean;
lazyLoadingInPrevNext?: boolean;
lazyLoadingInPrevNextAmount?: number;
lazyLoadingOnTransitionStart?: boolean;
// Loop
loop?: boolean;
loopAdditionalSlides?: number;
loopedSlides?: number;
loopFillGroupWithBlank?: boolean;
zoom?: boolean;
// Controller
control?: Swiper;
controlInverse?: boolean;
controlBy?: string;
// Breakpoints
breakpoints?: {
// TODO: extract possible parameters for breakpoints to separate interface
[index: number]: any;
};
// Observer
observer?: boolean;
observeParents?: boolean;
// Breakpoints
breakpoints?: {};
// Callbacks
runCallbacksOnInit?: boolean;
onInit?(swiper: Swiper): void;
onSlideChangeStart?(swiper: Swiper): void;
onSlideChangeEnd?(swiper: Swiper): void;
onSlideNextStart?(swiper: Swiper): void;
onSlideNextEnd?(swiper: Swiper): void;
onSlidePrevStart?(swiper: Swiper): void;
onSlidePrevEnd?(swiper: Swiper): void;
onTransitionStart?(swiper: Swiper): void;
onTransitionEnd?(swiper: Swiper): void;
onTouchStart?(swiper: Swiper, event: Event): void;
onTouchMove?(swiper: Swiper, event: Event): void;
onTouchMoveOpposite?(swiper: Swiper, event: Event): void;
onSliderMove?(swiper: Swiper, event: Event): void;
onTouchEnd?(swiper: Swiper, event: Event): void;
onClick?(swiper: Swiper, event: Event): void;
onTap?(swiper: Swiper, event: Event): void;
onDoubleTap?(swiper: Swiper, event: Event): void;
onImagesReady?(swiper: Swiper): void;
onProgress?(swiper: Swiper, progress: number): void;
onReachBeginning?(swiper: Swiper): void;
onReachEnd?(swiper: Swiper): void;
onDestroy?(swiper: Swiper): void;
onSetTranslate?(swiper: Swiper, translate: any): void;
onSetTransition?(swiper: Swiper, transition: any): void;
onAutoplay?(swiper: Swiper): void;
onAutoplayStart?(swiper: Swiper): void;
onAutoplayStop?(swiper: Swiper): void;
onLazyImageLoad?(swiper: Swiper, slide: any, image: any): void;
onLazyImageReady?(swiper: Swiper, slide: any, image: any): void;
onPaginationRendered?(swiper: Swiper, paginationContainer: any): void;
// Namespace
containerModifierClass?: string;
slideClass?: string;
slideActiveClass?: string;
slideDuplicatedActiveClass?: string;
slideVisibleClass?: string;
slideDuplicateClass?: string;
slideNextClass?: string;
slideDuplicatedNextClass?: string;
slidePrevClass?: string;
slideDuplicatedPrevClass?: string;
wrapperClass?: string;
bulletClass?: string;
bulletActiveClass?: string;
paginationHiddenClass?: string;
paginationCurrentClass?: string;
paginationTotalClass?: string;
paginationProgressbarClass?: string;
buttonDisabledClass?: string;
// Components
navigation?: NavigationOptions;
pagination?: PaginationOptions;
scrollbar?: ScrollbarOptions;
autoplay?: AutoplayOptions;
parallax?: boolean;
lazy?: LazyLoadingOptions | boolean;
fadeEffect?: FadeEffectOptions;
coverflowEffect?: CoverflowEffectOptions;
flipEffect?: FlipEffectOptions;
cubeEffect?: CubeEffectOptions;
zoom?: ZoomOptions | boolean;
keyboard?: KeyboardControlOptions | boolean;
mousewheel?: MouseWheelControlOptions | boolean;
virtual?: VirtualSlidesOptions;
hashNavigation?: HashNavigationOptions;
history?: HistoryNavigationOptions;
controller?: ControllerOptions;
a11y?: AccessibilityOptions;
}
interface SwiperScrollbarOptions {
container: string; // Default: '.swiper-scrollbar'
draggable?: boolean; // Default: true
hide?: boolean; // Default: true
snapOnRelease?: boolean; // Default: false
interface Navigation {
nextEl: HTMLElement;
prevEl: HTMLElement;
update: () => void;
}
interface Pagination {
el: HTMLElement;
// TODO: dom7 like array
bullets: any[];
render: () => void;
update: () => void;
}
declare class SwiperSlide {
append(): SwiperSlide;
clone(): SwiperSlide;
getWidth(): number;
getHeight(): number;
getOffset(): { top: number; left: number; };
insertAfter(index: number): SwiperSlide;
prepend(): SwiperSlide;
remove(): void;
interface Scrollbar {
eL: HTMLElement;
dragEl: HTMLElement;
updateSize: () => void;
}
interface Autoplay {
running: boolean;
start: () => void;
stop: () => void;
}
interface LazyLoading {
load: () => void;
loadInSlide: (index: number) => void;
}
interface Zoom {
enabled: boolean;
scale: number;
enable: () => void;
disable: () => void;
in: () => void;
out: () => void;
toggle: () => void;
}
// Keyboard and Mousewheel control
interface Control {
enabled: boolean;
enable: () => void;
disable: () => void;
}
interface VirtualSlides {
cache: any;
from: number;
to: number;
slides: any[];
appendSlide: (slide: any) => void;
prependSlide: (slide: any) => void;
update: () => void;
}
interface Controller {
control: Swiper;
}
export declare class Swiper {
constructor(container: string | Element, options?: SwiperOptions);
constructor(container: string | Element, parameters?: SwiperOptions);
// Properties
params: SwiperOptions;
// TODO: dom7 element
$el: any;
// TODO: dom7 element
$wrapperEl: any;
slides: HTMLElement[];
width: number;
height: number;
params: any;
positions: any;
// Feature detection
support: {
touch: boolean;
transforms: boolean;
transforms3d: boolean;
transitions: boolean;
};
// Browser detection
browser: {
ie8: boolean;
ie10: boolean;
};
// Navigation
translate: number;
progress: number;
activeIndex: number;
activeLoopIndex: number;
activeLoaderIndex: number;
realIndex: number;
previousIndex: number;
swipeNext(internal?: boolean): boolean;
swipePrev(internal?: boolean): boolean;
swipeReset(): boolean;
swipeTo(index: number, speed?: number, runCallbacks?: boolean): boolean;
activeSlide(): SwiperSlide;
updateActiveSlide(index: number): void;
// Events
touches: any;
isTouched: boolean;
clickedSlideIndex: number;
clickedSlide: SwiperSlide;
wrapperTransitionEnd(callback: () => void, permanent: boolean): void;
// Init/reset
destroy(deleteInstance: boolean, cleanupStyles: boolean): void;
reInit(forceCalcSlides?: boolean): void;
resizeFix(reInit?: boolean): void;
// Autoplaying
autoplay: boolean;
startAutoplay(): void;
stopAutoplay(): void;
// Other methods
getWrapperTranslate(axis: string): number; // 'x' or 'y'
setWrapperTranslate(x: number, y: number, z: number): void;
setWrapperTransition(duration: any): void;
// Slides API
slides: SwiperSlide[];
slidePrev(runCallbacks?: boolean, speed?: number): void;
slideNext(runCallbacks?: boolean, speed?: number): void;
slideTo(index: number, speed?: number, runCallbacks?: boolean): void;
update(updateTranslate?: boolean): void;
onResize(): void;
detachEvents(): void;
attachEvents(): void;
appendSlide(slides: HTMLElement | string | string[]): void;
prependSlide(slides: HTMLElement | string | string[]): void;
removeSlide(slideIndex: number): void;
removeAllSlides(): void;
lockSwipeToNext(): void;
unlockSwipeToNext(): void;
lockSwipeToPrev(): void;
unlockSwipeToPrev(): void;
lockSwipes(): void;
unlockSwipes(): void;
disableMousewheelControl(): void;
enableMousewheelControl(): void;
disableKeyboardControl(): void;
enableKeyboardControl(): void;
disableTouchContro(): void;
enableTouchContro(): void;
unsetGrabCursor(): void;
setGrabCursor(): void;
plugins?: {
debugger?(swiper: any, params: any): void;
isBeginning: boolean;
isEnd: boolean;
animating: boolean;
touches: {
startX: number;
startY: number;
currentX: number;
currentY: number;
diff: number;
};
clickedIndex: number;
clickedSlide: HTMLElement;
allowSlideNext: boolean;
allowSlidePrev: boolean;
allowTouchMove: boolean;
slideNext: (speed?: number, runCallbacks?: boolean) => void;
slidePrev: (speed?: number, runCallbacks?: boolean) => void;
slideTo: (index: number, speed?: number, runCallbacks?: boolean) => void;
slideToLoop: (index: number, speed?: number, runCallbacks?: boolean) => void;
slideReset: (speed?: number, runCallbacks?: boolean) => void;
slideToClosest: (speed?: number, runCallbacks?: boolean) => void;
updateAutoHeight: (speed?: number) => void;
update: () => void;
detachEvents: () => void;
attachEvents: () => void;
destroy: (deleteInstance?: boolean, cleanStyles?: boolean) => void;
appendSlide: (slides: Array<(HTMLElement | string)> | string | HTMLElement) => void;
prependSlide: (slides: Array<(HTMLElement | string)> | string | HTMLElement) => void;
removeSlide: (index: number) => void;
removeAllSlides: () => void;
setTranslate: (translate: number) => void;
getTranslate: () => void;
on: (event: SwiperEvent, handler: () => void) => void;
once: (event: SwiperEvent, handler: () => void) => void;
off: (event: SwiperEvent, handler?: () => void) => void;
unsetGrabCursor: () => void;
setGrabCursor: () => void;
// components
navigation: Navigation;
pagination: Pagination;
scrollbar: Scrollbar;
autoplay: Autoplay;
zoom: Zoom;
keyboard: Control;
mousewheel: Control;
virtual: VirtualSlides;
controller: Controller;
}

File diff suppressed because it is too large Load Diff