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"></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.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('rel') + '" alt="" /></a>'); 171 } else { 172 nivoControl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('src').replace(settings.controlNavThumbsSearch, settings.controlNavThumbsReplace) +'" alt="" /></a>'); 173 } 174 } else { 175 nivoControl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>'); 176 } 177 178 } 179 //Set initial active link 180 $('.nivo-controlNav a:eq('+ vars.currentSlide +')', slider).addClass('active'); 181 182 $('.nivo-controlNav 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 * sliceWi
260dth)) - 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 a', slider).removeClass('active'); 354 $('.nivo-controlNav 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: 'fade', 665 slices: 15, 666 boxCols: 8, 667 boxRows: 4, 668 animSpeed: 500, 669 pauseTime: 7000, 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.