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