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