PageSourceSearch

https://kmfc.ru/cms_js/jquery.nivo.slider.js

js kmfc.ru collected 2026-10-08 13:33:06 UTC 30,322 bytes, 682 lines download raw bytes

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