UNPKG

jquery-cycle2-ibe

Version:

Cycle2 is a versatile slideshow plugin for jQuery built around ease-of-use. It supports a declarative initialization style that allows full customization without any scripting.

132 lines (118 loc) 4.12 kB
/*! progressive loader plugin for Cycle2; version: 20130315 */ (function($) { "use strict"; $.extend($.fn.cycle.defaults, { progressive: false }); $(document).on( 'cycle-pre-initialize', function( e, opts ) { if ( !opts.progressive ) return; var API = opts.API; var nextFn = API.next; var prevFn = API.prev; var prepareTxFn = API.prepareTx; var type = $.type( opts.progressive ); var slides, scriptEl; if ( type == 'array' ) { slides = opts.progressive; } else if ($.isFunction( opts.progressive ) ) { slides = opts.progressive( opts ); } else if ( type == 'string' ) { scriptEl = $( opts.progressive ); slides = $.trim( scriptEl.html() ); if ( !slides ) return; // is it json array? if ( /^(\[)/.test( slides ) ) { try { slides = $.parseJSON( slides ); } catch(err) { API.log( 'error parsing progressive slides', err ); return; } } else { // plain text, split on delimeter slides = slides.split( new RegExp( scriptEl.data('cycle-split') || '\n') ); // #95; look for empty slide if ( ! slides[ slides.length - 1 ] ) slides.pop(); } } if ( prepareTxFn ) { API.prepareTx = function( manual, fwd ) { var index, slide; if ( manual || slides.length === 0 ) { prepareTxFn.apply( opts.API, [ manual, fwd ] ); return; } if ( fwd && opts.currSlide == ( opts.slideCount-1) ) { slide = slides[ 0 ]; slides = slides.slice( 1 ); opts.container.one('cycle-slide-added', function(e, opts ) { setTimeout(function() { opts.API.advanceSlide( 1 ); },50); }); opts.API.add( slide ); } else if ( !fwd && opts.currSlide === 0 ) { index = slides.length-1; slide = slides[ index ]; slides = slides.slice( 0, index ); opts.container.one('cycle-slide-added', function(e, opts ) { setTimeout(function() { opts.currSlide = 1; opts.API.advanceSlide( -1 ); },50); }); opts.API.add( slide, true ); } else { prepareTxFn.apply( opts.API, [ manual, fwd ] ); } }; } if ( nextFn ) { API.next = function() { var opts = this.opts(); if ( slides.length && opts.currSlide == ( opts.slideCount - 1 ) ) { var slide = slides[ 0 ]; slides = slides.slice( 1 ); opts.container.one('cycle-slide-added', function(e, opts ) { nextFn.apply( opts.API ); opts.container.removeClass('cycle-loading'); }); opts.container.addClass('cycle-loading'); opts.API.add( slide ); } else { nextFn.apply( opts.API ); } }; } if ( prevFn ) { API.prev = function() { var opts = this.opts(); if ( slides.length && opts.currSlide === 0 ) { var index = slides.length-1; var slide = slides[ index ]; slides = slides.slice( 0, index ); opts.container.one('cycle-slide-added', function(e, opts ) { opts.currSlide = 1; opts.API.advanceSlide( -1 ); opts.container.removeClass('cycle-loading'); }); opts.container.addClass('cycle-loading'); opts.API.add( slide, true ); } else { prevFn.apply( opts.API ); } }; } }); })(jQuery);