PageSourceSearch

https://www.flysurf.com/modules/ybc_blog/views/js/jquery.nivo.slider.js

js flysurf.com collected 2026-09-25 00:53:34 UTC 29,772 bytes, 673 lines download raw bytes

1/**
2 * 2007-2018 ETS-Soft
3 *
4 * NOTICE OF LICENSE
5 *
6 * This file is not open source! Each license that you purchased is only available for 1 wesite only.
7 * If you want to use this file on more websites (or projects), you need to purchase additional licenses. 
8 * You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
9 * 
10 * DISCLAIMER
11 *
12 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
13 * versions in the future. If you wish to customize PrestaShop for your
14 * needs please contact us for extra customization service at an affordable price
15 *
16 *  @author ETS-Soft <[email protected]>
17 *  @copyright  2007-2018 ETS-Soft
18 *  @license    Valid for 1 website (or project) for each purchase of license
19 *  International Registered Trademark & Property of ETS-Soft
20 */
21(function($) {
22    var NivoSlider = function(element, options){
23        // Defaults are below
24        var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
25
26        // Useful variables. Play carefully.
27        var vars = {
28            currentSlide: 0,
29            currentImage: '',
30            totalSlides: 0,
31            running: false,
32            paused: false,
33            stop: false,
34            controlNavEl: false
35        };
36
37        // Get this slider
38        var slider = $(element);
39        slider.data('nivo:vars', vars).addClass('nivoSlider');
40
41        // Find our slider children
42        var kids = slider.children();
43        kids.each(function() {
44            var child = $(this);
45            var link = '';
46            if(!child.is('img')){
47                if(child.is('a')){
48                    child.addClass('nivo-imageLink');
49                    link = child;
50                }
51                child = child.find('img:first');
52            }
53            // Get img width & height
54            var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
55                childHeight = (childHeight === 0) ? child.attr('height') : child.height();
56
57            if(link !== ''){
58                link.css('display','none');
59            }
60            child.css('display','none');
61            vars.totalSlides++;
62        });
63         
64        // If randomStart
65        if(settings.randomStart){
66            settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
67        }
68        
69        // Set startSlide
70        if(settings.startSlide > 0){
71            if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
72            vars.currentSlide = settings.startSlide;
73        }
74        
75        // Get initial image
76        if($(kids[vars.currentSlide]).is('img')){
77            vars.currentImage = $(kids[vars.currentSlide]);
78        } else {
79            vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
80        }
81        
82        // Show initial link
83        if($(kids[vars.currentSlide]).is('a')){
84            $(kids[vars.currentSlide]).css('display','block');
85        }
86        
87        // Set first background
88        var sliderImg = $('<img/>').addClass('nivo-main-image');
89        sliderImg.attr('src', vars.currentImage.attr('src')).show();
90        slider.append(sliderImg);
91
92        // Detect Window Resize
93        $(window).resize(function() {
94            slider.children('img').width(slider.width());
95            sliderImg.attr('src', vars.currentImage.attr('src'));
96            sliderImg.stop().height('auto');
97            $('.nivo-slice').remove();
98            $('.nivo-box').remove();
99        });
100
101        //Create caption
102        slider.append($('<div class="nivo-caption"></div>'));
103        
104        // Process caption function
105        var processCaption = function(settings){
106            var nivoCaption = $('.nivo-caption', slider);
107            if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
108                var title = vars.currentImage.attr('title');
109                if(title.substr(0,1) == '#') title = $(title).html();   
110
111                if(nivoCaption.css('display') == 'block'){
112                    setTimeout(function(){
113                        nivoCaption.html(title);
114                    }, settings.animSpeed);
115                } else {
116                    nivoCaption.html(title);
117                    nivoCaption.stop().fadeIn(settings.animSpeed);
118                }
119            } else {
120                nivoCaption.stop().fadeOut(settings.animSpeed);
121            }
122        }
123        
124        //Process initial  caption
125        processCaption(settings);
126        
127        // In the words of Super Mario "let's a go!"
128        var timer = 0;
129        if(!settings.manualAdvance && kids.length > 1){
130            timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
131        }
132        
133        // Add Direction nav
134        if(settings.directionNav){
135            slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
136            
137            $(slider).on('click', 'a.nivo-prevNav', function(){
138                if(vars.running) { return false; }
139                clearInterval(timer);
140                timer = '';
141                vars.currentSlide -= 2;
142                nivoRun(slider, kids, settings, 'prev');
143            });
144            
145            $(slider).on('click', 'a.nivo-nextNav', function(){
146                if(vars.running) { return false; }
147                clearInterval(timer);
148                timer = '';
149                nivoRun(slider, kids, settings, 'next');
150            });
151        }
152        
153        // Add Control nav
154        if(settings.controlNav){
155            vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
156            slider.after(vars.controlNavEl);
157            for(var i = 0; i < kids.length; i++){
158                if(settings.controlNavThumbs){
159                    vars.controlNavEl.addClass('nivo-thumbs-enabled');
160                    var child = kids.eq(i);
161                    if(!child.is('img')){
162                        child = child.find('img:first');
163                    }
164                    if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
165                } else {
166                    vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
167                }
168            }
169
170            //Set initial active link
171            $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
172            
173            $('a', vars.controlNavEl).bind('click', function(){
174                if(vars.running) return false;
175                if($(this).hasClass('active')) return false;
176                clearInterval(timer);
177                timer = '';
178                sliderImg.attr('src', vars.currentImage.attr('src'));
179                vars.currentSlide = $(this).attr('rel') - 1;
180                nivoRun(slider, kids, settings, 'control');
181            });
182        }
183        
184        //For pauseOnHover setting
185        if(settings.pauseOnHover){
186            slider.hover(function(){
187                vars.paused = true;
188                clearInterval(timer);
189                timer = '';
190            }, function(){
191                vars.paused = false;
192                // Restart the timer
193                if(timer === '' && !settings.manualAdvance){
194                    timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
195                }
196            });
197        }
198        
199        // Event when Animation finishes
200        slider.bind('nivo:animFinished', function(){
201            sliderImg.attr('src', vars.currentImage.attr('src'));
202            vars.running = false; 
203            // Hide child links
204            $(kids).each(function(){
205                if($(this).is('a')){
206                   $(this).css('display','none');
207                }
208            });
209            // Show current link
210            if($(kids[vars.currentSlide]).is('a')){
211                $(kids[vars.currentSlide]).css('display','block');
212            }
213            // Restart the timer
214            if(timer === '' && !vars.paused && !settings.manualAdvance){
215                timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
216            }
217            // Trigger the afterChange callback
218            settings.afterChange.call(this);
219        }); 
220        
221        // Add slices for slice animations
222        var createSlices = function(slider, settings, vars) {
223        	if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
224            $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
225            var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();
226
227            for(var i = 0; i < settings.slices; i++){
228                var sliceWidth = Math.round(slider.width()/settings.slices);
229                
230                if(i === settings.slices-1){
231                    slider.append(
232                        $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0;
232 left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({ 
233                            left:(sliceWidth*i)+'px', 
234                            width:(slider.width()-(sliceWidth*i))+'px',
235                            height:sliceHeight+'px', 
236                            opacity:'0',
237                            overflow:'hidden'
238                        })
239                    );
240                } else {
241                    slider.append(
242                        $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({ 
243                            left:(sliceWidth*i)+'px', 
244                            width:sliceWidth+'px',
245                            height:sliceHeight+'px',
246                            opacity:'0',
247                            overflow:'hidden'
248                        })
249                    );
250                }
251            }
252            
253            $('.nivo-slice', slider).height(sliceHeight);
254            sliderImg.stop().animate({
255                height: $(vars.currentImage).height()
256            }, settings.animSpeed);
257        };
258        
259        // Add boxes for box animations
260        var createBoxes = function(slider, settings, vars){
261        	if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
262            $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
263            var boxWidth = Math.round(slider.width()/settings.boxCols),
264                boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);
265            
266                        
267            for(var rows = 0; rows < settings.boxRows; rows++){
268                for(var cols = 0; cols < settings.boxCols; cols++){
269                    if(cols === settings.boxCols-1){
270                        slider.append(
271                            $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({ 
272                                opacity:0,
273                                left:(boxWidth*cols)+'px', 
274                                top:(boxHeight*rows)+'px',
275                                width:(slider.width()-(boxWidth*cols))+'px'
276                                
277                            })
278                        );
279                        $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
280                    } else {
281                        slider.append(
282                            $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({ 
283                                opacity:0,
284                                left:(boxWidth*cols)+'px', 
285                                top:(boxHeight*rows)+'px',
286                                width:boxWidth+'px'
287                            })
288                        );
289                        $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
290                    }
291                }
292            }
293            
294            sliderImg.stop().animate({
295                height: $(vars.currentImage).height()
296            }, settings.animSpeed);
297        };
298
299        // Private run method
300        var nivoRun = function(slider, kids, settings, nudge){          
301            // Get our vars
302            var vars = slider.data('nivo:vars');
303            
304            // Trigger the lastSlide callback
305            if(vars && (vars.currentSlide === vars.totalSlides - 1)){ 
306                settings.lastSlide.call(this);
307            }
308            
309            // Stop
310            if((!vars || vars.stop) && !nudge) { return false; }
311            
312            // Trigger the beforeChange callback
313            settings.beforeChange.call(this);
314
315            // Set current background before change
316            if(!nudge){
317                sliderImg.attr('src', vars.currentImage.attr('src'));
318            } else {
319                if(nudge === 'prev'){
320                    sliderImg.attr('src', vars.currentImage.attr('src'));
321                }
322                if(nudge === 'next'){
323                    sliderImg.attr('src', vars.currentImage.attr('src'));
324                }
325            }
326            
327            vars.currentSlide++;
328            // Trigger the slideshowEnd callback
329            if(vars.currentSlide === vars.totalSlides){ 
330                vars.currentSlide = 0;
331                settings.slideshowEnd.call(this);
332            }
333            if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
334            // Set vars.currentImage
335            if($(kids[vars.currentSlide]).is('img')){
336                vars.currentImage = $(kids[vars.currentSlide]);
337            } else {
338                vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
339            }
340            
341            // Set active links
342            if(settings.controlNav){
343                $('a', vars.controlNavEl).removeClass('active');
344                $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
345            }
346            
347            // Process caption
348            processCaption(settings);            
349            
350            // Remove any slices from last transition
351            $('.nivo-slice', slider).remove();
352            
353            // Remove any boxes from last transition
354            $('.nivo-box', slider).remove();
355            
356            var currentEffect = settings.effect,
357                anims = '';
358                
359            // Generate random effect
360            if(settings.effect === 'random'){
361                anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
362                'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
363                currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
364                if(currentEffect === undefined) { currentEffect = 'fade'; }
365            }
366            
367            // Run random effect from specified set (eg: effect:'fold,fade')
368            if(settings.effect.indexOf(',') !== -1){
369                anims = settings.effect.split(',');
370                currentEffect = anims[Math.floor(Math.random()*(anims.length))];
371                if(currentEffect === undefined) { currentEffect = 'fade'; }
372            }
373            
374            // Custom transition as defined by "data-transition" attribute
375            if(vars.currentImage.attr('data-transition')){
376                currentEffect = vars.currentImage.attr('data-transition');
377            }
378        
379            // Run effects
380            vars.running = true;
381            var timeBuff = 0,
382                i = 0,
383                slices = '',
384                firstSlice = '',
385                totalBoxes = '',
386                boxes = '';
387            
388            if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
389                createSlices(slider, settings, vars);
390                timeBuff = 0;
391                i = 0;
392                slices = $('.nivo-slice', slider);
393                if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
394                
395                slices.each(function(){
396                    var slice = $(this);
397                    slice.css({ 'top': '0px' });
398                    if(i === settings.slices-1){
399                        setTimeout(function(){
400                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
401                        }, (100 + timeBuff));
402                    } else {
403                        setTimeout(function(){
404                            slice.animate({opacity:'1.0' }, settings.animSpeed);
405                        }, (100 + timeBuff));
406                    }
407                    timeBuff += 50;
408                    i++;
409                });
410            } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
411                createSlices(slider, settings, vars);
412                timeBuff = 0;
413                i = 0;
414                slices = $('.nivo-slice', slider);
415                if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); }
416                
417                slices.each(function(){
418                    var slice = $(this);
419                    slice.css({ 'bottom': '0px' });
420                    if(i === settings.slices-1){
421                        setTimeout(function(){
422                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
423                        }, (100 + timeBuff));
424                    } else {
425                        setTimeout(function(){
426                            slice.animate({opacity:'1.0' }, settings.animSpeed);
427                        }, (100 + timeBuff));
428                    }
429                    timeBuff += 50;
430                    i++;
431                });
432            } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
433                createSlices(slider, settings, vars);
434                timeBuff = 0;
435                i = 0;
436                var v = 0;
437                slices = $('.nivo-slice', slider);
438                if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
439                
440                slices.each(function(){
441                    var slice = $(this);
442                    if(i === 0){
443                        slice.css('top','0px');
444                        i++;
445                    } else {
446                        slice.css('bottom','0px');
447                        i = 0;
448                    }
449                    
450                    if(v === settings.slices-1){
451                        setTimeout(function(){
452                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
453                        }, (100 + timeBuff));
454                    } else {
455                        setTimeout(function(){
456                            slice.animate({opacity:'1.0' }, settings.animSpeed);
457                        }, (100 + timeBuff));
458                    }
459                    timeBuff += 50;
460                    v++;
461                });
462            } else if(currentEffect === 'fold'){
463                createSlices(slider, settings, vars);
464                timeBuff = 0;
465                i = 0;
466                
467                $('.nivo-slice', slider).each(function(){
468                    var slice = $(this);
469                    var origWidth = slice.width();
470                    slice.css({ top:'0px', width:'0px' });
471                    if(i === settings.slices-1){
472                        setTimeout(function(){
473                            slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
474                        }, (100 + timeBuff));
475                    } else {
476                        setTimeout(function(){
477                            slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
478                        }, (100 + timeBuff));
479                    }
480                    timeBuff += 50;
481                    i++;
482                });
483            } else if(currentEffect === 'fade'){
484                createSlices(slider, settings, vars);
485                
486                firstSlice = $('.nivo-slice:first', slider);
487                firstSlice.css({
488                    'width': slider.width() + 'px'
489                });
490    
491                firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
492            } else if(currentEffect === 'slideInRight'){
493                createSlices(slider, settings, vars);
494                
495                firstSlice = $('.nivo-slice:first', slider);
496                firstSlice.css({
497                    'width': '0px',
498                    'opacity': '1'
499                });
500
501                firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
502            } else if(currentEffect === 'slideInLeft'){
503                createSlices(slider, settings, vars);
504                
505                firstSlice = $('.nivo-slice:first', slider);
506                firstSlice.css({
507                    'width': '0px',
508                    'opacity': '1',
509                    'left': '',
510                    'right': '0px'
511                });
512
513                firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ 
514                    // Reset positioning
515                    firstSlice.css({
516                        'left': '0px',
517                        'right': ''
518                    });
519                    slider.trigger('nivo:animFinished'); 
520                });
521            } else if(currentEffect === 'boxRandom'){
522                createBoxes(slider, settings, vars);
523                
524                totalBoxes = settings.boxCols * settings.boxRows;
525                i = 0;
526                timeBuff = 0;
527
528                boxes = shuffle($('.nivo-box', slider));
529                boxes.each(function(){
530                    var box = $(this);
531                    if(i === totalBoxes-1){
532                        setTimeout(function(){
533                            box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
534                        }, (100 + timeBuff));
535                    } else {
536                        setTimeout(function(){
537                            box.animate({ opacity:'1' }, settings.animSpeed);
538                        }, (100 + timeBuff));
539                    }
540                    timeBuff += 20;
541                    i++;
542                });
543            } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
544                createBoxes(slider, settings, vars);
545                
546                totalBoxes = settings.boxCols * settings.boxRows;
547                i = 0;
548                timeBuff = 0;
549                
550                // Split boxes into 2D array
551                var rowIndex = 0;
552                var colIndex = 0;
553                var box2Darr = [];
554                box2Darr[rowIndex] = [];
555                boxes = $('.nivo-box', slider);
556                if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
557                    boxes = $('.nivo-box', slider)._reverse();
558                }
559                boxes.each(function(){
560                    box2Darr[rowIndex][colIndex] = $(this);
561                    colIndex++;
562                    if(colIndex === settings.boxCols){
563                        rowIndex++;
564                        colIndex = 0;
565                        box2Darr[rowIndex] = [];
566                    }
567                });
568                
569                // Run animation
570                for(var cols = 0; cols < (settings.boxCols * 2); cols++){
571                    var prevCol = cols;
572                    for(var rows = 0; rows < settings.boxRows; rows++){
573                        if(prevCol >= 0 && prevCol < settings.boxCols){
574                            /* Due to some weird JS bug with loop vars 
575                            being used in setTimeout, this is wrapped
576                            with an anonymous function call */
577                            (function(row, col, time, i, totalBoxes) {
578                                var box = $(box2Darr[row][col]);
579                                var w = box.width();
580                                var h = box.height();
581                                if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
582                                    box.width(0).height(0);
583                                }
584                                if(i === totalBoxes-1){
585                                    setTimeout(function(){
586                                        box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
587                                    }, (100 + time));
588                                } else {
589                                    setTimeout(function(){
590                                        box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
591                                    }, (100 + time));
592                                }
593                            })(rows, prevCol, timeBuff, i, totalBoxes);
594                            i++;
595                        }
596                        prevCol--;
597                    }
598                    timeBuff += 100;
599                }
600            }           
601        };
602        
603        // Shuffle an array
604        var shuffle = function(arr){
605            for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
606            return arr;
607        };
608        
609        // For debugging
610        var trace = function(msg){
611            if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
612        };
613        
614        // Start / Stop
615        this.stop = function(){
616            if(!$(element).data('nivo:vars').stop){
617                $(element).data('nivo:vars').stop = true;
618                trace('Stop Slider');
619            }
620        };
621        
622        this.start = function(){
623            if($(element).data('nivo:vars').stop){
624                $(element).data('nivo:vars').stop = false;
625                trace('Start Slider');
626            }
627        };
628        
629        // Trigger the afterLoad callback
630        settings.afterLoad.call(this);
631        
632        return this;
633    };
634        
635    $.fn.nivoSlider = function(options) {
636        return this.each(function(key, value){
637            var element = $(this);
638            // Return early if this element already has a plugin instance
639            if (element.data('nivoslider')) { return element.data('nivoslider'); }
640            // Pass options to plugin constructor
641            var nivoslider = new NivoSlider(this, options);
642            // Store plugin object in this element's data
643            element.data('nivoslider', nivoslider);
644        });
645    };
646    
647    //Default settings
648    $.fn.nivoSlider.defaults = {
649        effect: 'random',
650        slices: 15,
651        boxCols: 8,
652        boxRows: 4,
653        animSpeed: 500,
654        pauseTime: 3000,
655        startSlide: 0,
656        directionNav: true,
657        controlNav: true,
658        controlNavThumbs: false,
659        pauseOnHover: true,
660        manualAdvance: false,
661        prevText: 'Prev',
662        nextText: 'Next',
663        randomStart: false,
664        beforeChange: function(){},
665        afterChange: function(){},
666        slideshowEnd: function(){},
667        lastSlide: function(){},
668        afterLoad: function(){}
669    };
670
671    $.fn._reverse = [].reverse;
672    
673})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.