PageSourceSearch

https://theshq.com/wp-content/themes/soundboard/js/nivoslider.js?ver=3.2

js theshq.com collected 2026-10-10 02:01:33 UTC 29,933 bytes, 680 lines download raw bytes

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