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