1(function($){ 2 $.fn.featureCarouselslider = function (options) { 3 // Adds support for multiple carousels on one page. 4 if (this.length > 1) { 5 this.each(function() { 6 $(this).featureCarouselslider(options); 7 }); 8 return this; 9 } 10 11 // override the default options with user defined options 12 options = $.extend({}, $.fn.featureCarouselslider.defaults, options || {}); 13 14 /* These are univeral values that are used throughout the plugin. Do not modify them 15 * unless you know what you're doing. Most of them feed off the options 16 * so most customization can be achieved by modifying the options values 17 */ 18 var pluginData = { 19 20 containerWidth: 0, 21 containerHeight: 0, 22 largeFeatureWidth: 0, 23 largeFeatureHeight: 0, 24 smallFeatureHeight: 0, 25 smallFeatureWidth: 0, 26 totalFeatureCount: $(this).children().first().children().first().children("span").length, 27 featuresContainer: $(this), 28 featuresArray: [], 29 containerIDTag: "." + $(this).attr("id"), 30 timeoutVar: null, 31 rotationsRemaining: 0, 32 itemsToAnimate: 0, 33 borderWidth: 0, 34 autoTime: 0 35 }; 36 37 /** 38 * Function to preload the images in the carousel if desired. 39 * This is not recommended if there are a lot of images in the carousel because 40 * it may take a while. Functionality does not depend on preloading the images 41 */ 42 var preload = function(callback) { 43 callback(); 44 } 45 46 // Gets the feature container based on the number 47 var getContainer = function(featureNum) { 48 return pluginData.featuresArray[featureNum-1]; 49 } 50 51 // get previous feature number 52 var getPreviousNum = function(num) { 53 if ((num - 1) == 0) { 54 return pluginData.totalFeatureCount; 55 } else { 56 return num - 1; 57 } 58 } 59 60 // get next feature number 61 var getNextNum = function(num) { 62 if ((num + 1) > pluginData.totalFeatureCount) { 63 return 1; 64 } else { 65 return num + 1; 66 } 67 } 68 69 /** 70 * Because there are several options the user can set for the width and height 71 * of the feature images, this function is used to determine which options were set 72 * and to set the appropriate dimensions used for a small and large feature 73 */ 74 var setupFeatureDimensions = function() { 75 // Set the height and width of the entire carousel container 76 options.containerWidth = pluginData.featuresContainer.width(); 77 options.containerHeight = pluginData.featuresContainer.height(); 78 79 // Grab the first image for reference 80 var $firstFeatureImage = $(pluginData.containerIDTag).find(".wds_slider_car_image" + options.wds_number + ":first"); 81 82 // Large Feature Width 83 if (options.largeFeatureWidth > 1) { 84 pluginData.largeFeatureWidth = options.largeFeatureWidth; 85 } 86 else if (options.largeFeatureWidth > 0 && options.largeFeatureWidth < 1) { 87 pluginData.largeFeatureWidth = $firstFeatureImage.width() * options.largeFeatureWidth; 88 } 89 else { 90 pluginData.largeFeatureWidth = $firstFeatureImage.outerWidth(); 91 } 92 // Large Feature Height 93 if (options.largeFeatureHeight > 1) { 94 pluginData.largeFeatureHeight = options.largeFeatureHeight; 95 } 96 else if (options.largeFeatureHeight > 0 && options.largeFeatureHeight < 1) { 97 pluginData.largeFeatureHeight = $firstFeatureImage.height() * options.largeFeatureHeight; 98 } 99 else { 100 pluginData.largeFeatureHeight = $firstFeatureImage.outerHeight(); 101 } 102 } 103 104 /** 105 * Function to take care of setting up various aspects of the carousel, 106 * most importantly the default positions for the features 107 */ 108 var setupCarousel = function() { 109 // Set the total feature count to the amount the user wanted to cutoff 110 if (options.displayCutoff > 0 && options.displayCutoff < pluginData.totalFeatureCount) { 111 pluginData.totalFeatureCount = options.displayCutoff; 112 } 113 114 // Fill in the features array . 115 pluginData.featuresContainer.find(".wds_slider_car_image" + options.wds_number).each(function (index) { 116 if (index < pluginData.totalFeatureCount) { 117 pluginData.featuresArray[index] = $(this); 118 } 119 }); 120 121 // Determine the total border width around the feature if there is one. 122 if (pluginData.featuresContainer.find(".wds_slider_car_image" + options.wds_number).first().css("borderLeftWidth") != "medium") { 123 pluginData.borderWidth = parseInt(pluginData.featuresContainer.find(".wds_slider_car_image" + options.wds_number).first().css("borderLeftWidth"))*2; 124 } 125 // Place all the features in a center hidden position to start off. 126 if (options.imagecount != 1) { 127 pluginData.featuresContainer 128 .find(".wds_slider_car_image" + options.wds_number).each(function () { 129 // Center all the features in the middle and hide them. 130 jQuery(this).css({ 131 'left': (options.containerWidth / 2) - (options.largeFeatureWidth * options.smallFeaturePar / 2) - (pluginData.borderWidth / 2) - options.parf, 132 'width': options.largeFeatureWidth * options.smallFeaturePar * options.parametr / 100,
133 'height': options.largeFeatureHeight * options.smallFeaturePar * options.parametr / 100, 134 'top': options.smallFeatureOffset + options.topPadding + options.parf, 135 'opacity': 0, 136 'filter': 'Alpha(opacity=0)' 137 }); 138 }); 139 } 140 else { 141 pluginData.featuresContainer 142 .find(".wds_slider_car_image" + options.wds_number).each(function () { 143 // Center all the features in the middle and hide them. 144 jQuery(this).css({ 145 'left': 0, 146 'width': options.largeFeatureWidth * options.smallFeaturePar, 147 'height': options.largeFeatureHeight * options.smallFeaturePar, 148 'top': 0, 149 'opacity': 0, 150 'filter': 'Alpha(opacity=0)' 151 }); 152 }); 153 } 154 // Set position to relative of captions if displaying below image. 155 if (options.captionBelow) { 156 pluginData.featuresContainer.find(".wds_slider_car_image" + options.wds_number).css('position','absolute'); 157 } 158 159 // Figure out number of items that will rotate each time. 160 if (pluginData.totalFeatureCount < options.imagecount) { 161 pluginData.itemsToAnimate = pluginData.totalFeatureCount; 162 } else { 163 pluginData.itemsToAnimate = options.imagecount + 2 ; 164 } 165 } 166 167 /** 168 * Here all the position data is set for the features. 169 * This is an important part of the carousel to keep track of where 170 * each feature within the carousel is 171 */ 172 var setupFeaturePositions = function() { 173 // give all features a set number that won't change so they remember their 174 // original order 175 $.each(pluginData.featuresArray, function (i) { 176 $(this).data('setPosition', i + 1); 177 }); 178 179 // Go back one - This is done because we call the move function right away, which 180 // shifts everything to the right. So we set the current center back one, so that 181 // it displays in the center when that happens 182 var oneBeforeStarting = getPreviousNum(window["wds_currentCenterNum" +options.wds_number]); 183 184 window["wds_currentCenterNum" +options.wds_number] = oneBeforeStarting; 185 186 // Center feature will be position 1 187 var $centerFeature = getContainer(oneBeforeStarting); 188 $centerFeature.data('position', 1); 189 190 // Everything before that center feature... 191 var $prevFeatures = $centerFeature.prevAll(); 192 $prevFeatures.each(function (i) { 193 $(this).data('position', (pluginData.totalFeatureCount - i
193)); 194 }); 195 196 // And everything after that center feature... 197 var $nextFeatures = $centerFeature.nextAll(); 198 $nextFeatures.each(function (i) { 199 if ($(this).data('setPosition') != undefined) { 200 $(this).data('position',(i + 2)); 201 } 202 }); 203 } 204 205 /** 206 * This function will set the autoplay for the carousel to 207 * automatically rotate it given the time in the options 208 * pass in TRUE to just clear the timer 209 */ 210 var setTimer = function(stop) { 211 return; 212 // clear the timeout var if it exists 213 clearTimeout(pluginData.timeoutVar); 214 215 // set interval for moving if autoplay is set 216 if (!stop && options.autoPlay != 0) { 217 var autoTime = (Math.abs(options.autoPlay) < options.carouselSpeed) ? options.carouselSpeed : Math.abs(options.autoPlay); 218 pluginData.timeoutVar = setTimeout(function () { 219 (options.autoPlay > 0) ? initiateMove(true,1) : initiateMove(false,1); 220 }, autoTime); 221 } 222 } 223 224 // This is a helper function for the animateFeature function that 225 // will update the positions of all the features based on the direction 226 var rotatePositions = function(direction) { 227 $.each(pluginData.featuresArray, function () { 228 var newPos; 229 if (direction == false) { 230 newPos = getNextNum($(this).data().position); 231 } else { 232 newPos = getPreviousNum($(this).data().position); 233 } 234 235 $(this).data('position',newPos); 236 }); 237 } 238 239 /* Animate the given feature to the given location. Valid locations are "left", "right", "center", "hidden".*/ 240 var animateFeature = function($feature, direction, onload) { 241 if (typeof onload == "undefined") { 242 var onload = 0; 243 } 244 $feature.find(".wds_slideshow_image_" + options.wds_number).children().each(function() { 245 jQuery(this).hide(); 246 }); 247 $feature.find(".wds_video_hide" + options.wds_number).each(function() { 248 jQuery(this).show(); 249 }); 250 var new_width, new_height, new_top, new_left, new_zindex, new_padding, new_fade, new_fade1, new_left1; 251 // Determine the old and new positions of the feature. 252 var oldPosition = $feature.data('position'); 253 var newPosition; 254 if (direction == true) { 255 newPosition = getPreviousNum(oldPosition); 256 } 257 else { 258 newPosition = getNextNum(oldPosition); 259 } 260 // Callback for moving out of center pos. 261 if (oldPosition == 1) { 262 options.leavingCenter($feature); 263 } 264 // Caculate new new css values depending on where the feature will be located center. 265 if (newPosition == 1) { 266 new_width = pluginData.largeFeatureWidth; 267 new_height = pluginData.largeFeatureHeight; 268 new_top =(options.containerHeight / 2 - new_height / 2 ); 269 new_zindex = $feature.css("z-index"); 270 new_left = (options.containerWidth / 2) - (pluginData.largeFeatureWidth / 2) - (pluginData.borderWidth / 2); 271 new_fade = 1.0; 272 new_fade1 = 100; 273 new_f = "translateZ(0px) rotateY(0deg)"; 274 new_gray = "grayscale(0%)"; 275 $feature.find(".wds_slideshow_image_" + options.wds_number).children().each(function() { 276 jQuery(this).show(); 277 }); 278 $feature.find(".wds_video_hide" + options.wds_number).each(function() { 279 jQuery(this).hide(); 280 }); 281 } 282 else { 283 // Left. 284 if (newPosition <= pluginData.totalFeatureCount && newPosition > pluginData.totalFeatureCount - options.imagecount / 2 + 1) { 285 new_width = (pluginData.largeFeatureWidth * Math.pow(options.smallFeaturePar, pluginData.totalFeatureCount - newPosition + 1)); 286 new_height = (pluginData.largeFeatureHeight * Math.pow(options.smallFeaturePar, pluginData.totalFeatureCount - newPosition + 1)); 287 new_top = (options.containerHeight/ 2 - new_height / 2 ) ; 288 new_fade = 1 - options.carousel_transparency / 100; 289 new_fade1 = 100; 290 new_f = "translateX("+ (-1) * options.parametr * options.carousel_degree +"px) translateZ("+ (-1) *options.parametr * options.carousel_degree + "px) rotateY("+ options.carousel_degree +"deg)"; 291 new_gray = "grayscale("+ options.carousel_grayscale +"%)"; 292 if(options.fit_containerWidth == false && options.smallFeaturePar < 1){ 293 new_left = (options.containerWidth / 2 - pluginData.largeFeatureWidth / 2)-(pluginData.largeFeatureWidth * (1 - options.smallFeaturePar) * options.smallFeaturePar * (pluginData.totalFeatureCount - newPosition + 1)); 294 } else if(options.fit_containerWidth == false && options.smallFeaturePar == 1){ 295 new_left = (options.containerWidth / 2 - pluginData.largeFeatureWidth / 2)-(pluginData.largeFeatureWidth * ( options.smallFeaturePar) * options.smallFeaturePar * (pluginData.totalFeatureCount - newPosition + 1)); 296 } else { 297 new_left1 = (options.containerWidth / 2 - pluginData.largeFeatureWidth / 2) / (options.imagecount / 2 - 0.5); 298 new_left = ((options.containerWidth / 2) - (pluginData.largeFeatureWidth / 2) - (pluginData.borderWidth / 2)) - (new_left1 * (pluginData.totalFeatureCount - newPosition+1 )); 299 } 300 } 301 // Right. 302 else if (newPosition >
302= 2 && newPosition <= options.imagecount / 2 + 1) { 303 new_width = (pluginData.largeFeatureWidth * Math.pow(options.smallFeaturePar,newPosition - 1)); 304 new_height =( pluginData.largeFeatureHeight * Math.pow(options.smallFeaturePar, newPosition - 1)); 305 new_top = ( options.containerHeight / 2 - new_height / 2); 306 new_fade = 1 - options.carousel_transparency / 100; 307 new_fade1 = 100; 308 new_f = "translateX("+ options.parametr * options.carousel_degree +"px) translateZ("+ (-1) * options.parametr *options.carousel_degree +"px) rotateY("+ (-1) * options.carousel_degree +"deg)" ; 309 new_gray = "grayscale("+ options.carousel_grayscale + "%)"; 310 if (options.fit_containerWidth == false && options.smallFeaturePar < 1) { 311 new_left = (options.containerWidth / 2 + pluginData.largeFeatureWidth / 2) + (pluginData.largeFeatureWidth * options.smallFeaturePar * (1 - options.smallFeaturePar) * (newPosition - 1)) - new_width; 312 } else if (options.fit_containerWidth == false && options.smallFeaturePar == 1) { 313 new_left = (options.containerWidth / 2 + pluginData.largeFeatureWidth / 2) + (pluginData.largeFeatureWidth * options.smallFeaturePar * (options.smallFeaturePar) * (newPosition - 1)) - new_width; 314 } else { 315 new_left1 = ( (options.containerWidth / 2 -pluginData.largeFeatureWidth / 2)) / (options.imagecount / 2 - 0.5); 316 new_left = (options.containerWidth / 2 + pluginData.largeFeatureWidth / 2) - new_width + (new_left1 * (newPosition - 1)); 317 } 318 } 319 // Hidden. 320 else { 321 new_left = (options.containerWidth / 2) - (pluginData.largeFeatureWidth * options.smallFeaturePar / 2) - (pluginData.borderWidth / 2); 322 new_fade = 0; 323 new_fade1 = 0; 324 } 325 } 326 // This code block takes care of hiding the feature information if the feature is leaving the center. 327 if (oldPosition == 1) { 328 // Slide up the story information. 329 $feature.find(".wds_slider_car_image" + options.wds_number).hide(); 330 } 331 332 // Animate the feature div to its new location. 333 jQuery(".wds_slide_bg_" + options.wds_number).css('perspective', 1000); 334 jQuery(".wds_slide_" + options.wds_number).css({"transformStyle":"preserve-3d"}); 335 $feature.css({ 336 "-webkit-transform":new_f, 337 "-moz-transform:":new_f, 338 "-ms-transform":new_f, 339 "-o-transform":new_f, 340 "transform":new_f, 341 "-webkit-filter":new_gray, 342 "-moz-filter":new_gray, 343 "-ms-filter":new_gray, 344 "-o-filter":new_gray, 345 "filter":new_gray, 346 "progid":"DXImageTransform.Microsoft.BasicImage(grayscale=1)",}), 347 $feature 348 .animate( 349 { 350 width: new_width, 351 height: new_height, 352 top: new_top, 353 left: new_left, 354 opacity: new_fade, 355 filter: new_fade1 356 }, 357 onload ? 0 : options.carouselSpeed, 358 options.animationEasing, 359 function () { 360 // Take feature info out of hiding if new position is center 361 if (newPosition == 1) { 362 // need to set the height to auto to accomodate caption if displayed below image 363 if (options.captionBelow) 364 $feature.css('height','auto'); 365 // fade in the feature information 366 $feature.find(".wds_slider_car_image" + options.wds_number) 367 .fadeTo("fast",0.85); 368 // callback for moved to center 369 options.movedToCenter($feature); 370 } 371 // decrement the animation queue 372 pluginData.rotationsRemaining = pluginData.rotationsRemaining - 1; 373 // have to change the z-index after the animation is done 374 $feature.css("z-index", new_zindex); 375 // change trackers if using them 376 if (options.trackerIndividual || options.trackerSummation) { 377 // just update the tracker once; once the new center feature has arrived in center 378 if (newPosition == 1) { 379 // figure out what item was just in the center, and what item is now in the center 380 var newCenterItemNum = pluginData.featuresContainer.find(".wds_slider_car_image" + options.wds_number).index($feature) + 1; 381 var oldCenterItemNum; 382 if (direction == false) { 383 oldCenterItemNum = getNextNum(newCenterItemNum); 384 } 385 else { 386 oldCenterItemNum = getPreviousNum(newCenterItemNum); 387 } 388 } 389 } 390 391 // did all the the animations finish yet? 392 var divide = pluginData.rotationsRemaining / pluginData.itemsToAnimate; 393 if (divide % 1 == 0) { 394 // Set moving to false. 395 window["wds_currentlyMoving" +options.wds_number] = false;
396 // Change positions for all items. 397 rotatePositions(direction); 398 399 // Move carousel again if queue is not empty. 400 if (pluginData.rotationsRemaining > 0) 401 move(direction); 402 } 403 // Reset timer and auto rotate again. 404 setTimer(false); 405 } 406 ) 407 .end(); 408 } 409 410 /* Move the carousel to the left or to the right. The features that 411 * will move into the four positions are calculated and then animated 412 * rotate to the RIGHT when direction is TRUE and 413 * rotate to the LEFT when direction is FALSE. 414 */ 415 var move = function(direction, onload) { 416 // Set the carousel to currently moving 417 window["wds_currentlyMoving" + options.wds_number] = true; 418 // Obtain the new feature positions based on the direction that the carousel is moving 419 var $newCenter, $newLefts, $newRights, $newHidden, $curNum; 420 421 if (direction == true) { 422 // Shift features to the left 423 $newCenter = getContainer(getNextNum(window["wds_currentCenterNum" +options.wds_number])); 424 $newLefts = []; 425 $curNum = window["wds_currentCenterNum" +options.wds_number]; 426 for (var i = 1; i <= options.imagecount / 2 + 1; ++i) { 427 $newLefts.push(getContainer($curNum)); 428 $curNum = getPreviousNum($curNum); 429 } 430 $newRights = []; 431 $curNum = getNextNum(window["wds_currentCenterNum" + options.wds_number]); 432 for (var i = 1; i <= options.imagecount / 2 + 1; ++i) { 433 $curNum = getNextNum($curNum); 434 $newRights.push(getContainer($curNum)); 435 } 436 window["wds_currentCenterNum" + options.wds_number] = getNextNum(window["wds_currentCenterNum" + options.wds_number]); 437 } 438 else { 439 $newCenter = getContainer(getPreviousNum(window["wds_currentCenterNum" +options.wds_number])); 440 $newLefts = []; 441 $curNum = getPreviousNum(window["wds_currentCenterNum" +options.wds_number]); 442 for (var i = 1; i <= options.imagecount / 2 +1; ++i) { 443 $curNum = getPreviousNum($curNum); 444 $newLefts.push(getContainer($curNum)); 445 } 446 $newRights = []; 447 $curNum = window["wds_currentCenterNum" + options.wds_number]; 448 for (var i = 1; i <= options.imagecount / 2 + 1; ++i) { 449 $newRights.push(getContainer($curNum)); 450 $curNum = getNextNum($curNum); 451 } 452 window["wds_currentCenterNum" +options.wds_number] = getPreviousNum(window["wds_currentCenterNum" + options.wds_number]); 453 } 454 // Animate the features into their new positions. 455 for (i = 0; i < $newLefts.length; i++) { 456 $newLefts[i].css("z-index", $newLefts.length - i + 3); 457 animateFeature($newLefts[i], direction, onload); 458 } 459 $newCenter.css("z-index", Math.max($newLefts.length, $newRights.length) + 4); 460 animateFeature($newCenter, direction, onload); 461 for (i = 0; i < $newRights.length; i++) { 462 $newRights[i].css("z-index", $newRights.length - i + 3); 463 animateFeature($newRights[i], direction, onload); 464 } 465 } 466 467 // This is used to relegate carousel movement throughout the plugin. 468 // It will only initiate a move if the carousel isn't currently moving. 469 // It will set the animation queue to the number of rotations given. 470 var initiateMove = function(direction, rotations, onload) { 471 if (typeof onload == "undefined") { 472 var onload = 0; 473 } 474 if (window["wds_currentlyMoving" +options.wds_number] == false) { 475 var queue = rotations * pluginData.itemsToAnimate ; 476 pluginData.rotationsRemaining = queue ; 477 window["wds_set_filmstrip_class_" + options.wds_number](); 478 window["wds_set_dots_class_" + options.wds_number](); 479 move(direction, onload); 480 } 481 } 482 483 // Add event listener to all clicks within the features container 484 // This is done to disable any links that aren't within the center feature 485 $("a", pluginData.containerIDTag).on("click", function (event) { 486 // travel up to the container 487 var $parents = $(this).parentsUntil(pluginData.containerIDTag); 488 // now check each of the feature divs within it 489 $parents.each(function () { 490 var position = $(this).data('position'); 491 // if there are more than just feature divs within the container, they will 492 // not have a position and it may come back as undefined. Throw these out 493 if (position != undefined) { 494 // if any of the links on a feature OTHER THAN the center feature were clicked, 495 // initiate a carousel move but then throw the link action away 496 if (position != 1) { 497 if (position == pluginData.totalFeatureCount) { 498 initiateMove(false,1); 499 } else if (position == 2) { 500 initiateMove(true, 1); 501 } 502 event.preventDefault(); 503 return false;
504 // if the position WAS the center (i.e. 1), fire callback 505 } else { 506 options.clickedCenter($(this)); 507 } 508 } 509 }); 510 }); 511 512 // Public functions. 513 this.initialize = function () { 514 jQuery("#wds_container2_" + options.wds_number).css({visibility: 'visible'}); 515 jQuery(".wds_loading").hide(); 516 // Call the preloader and pass in our callback, which is just a slew of function calls 517 // that should only be executed after the images have been loaded 518 preload(function () { 519 setupFeatureDimensions(); 520 setupCarousel(); 521 if (window["wds_currentlyMoving" +options.wds_number] == false ) { 522 setupFeaturePositions(); 523 initiateMove(true, 1, 1); 524 } 525 }); 526 return this; 527 }; 528 529 this.next = function() { 530 initiateMove(true, 1); 531 } 532 this.prev = function () { 533 initiateMove(false, 1); 534 } 535 this.shift = function (that) { 536 var position = $(that).data('position'); 537 if (position == 1) { 538 return; 539 } 540 if (position > pluginData.totalFeatureCount / 2 + 1) { 541 initiateMove(false, pluginData.totalFeatureCount - position + 1); 542 options.carouselSpeed = 400; 543 options.animationEasing; 544 } 545 else { 546 initiateMove(true, position - 1); 547 options.carouselSpeed = 400; 548 options.animationEasing; 549 } 550 } 551 this.pause = function () { 552 options.autoPlay = false; 553 setTimer(true); 554 } 555 this.start = function () { 556 options.autoPlay = options.interval; 557 setTimer(false); 558 } 559 // Initialize the plugin. 560 return this.initialize(); 561 }; 562 563 $.fn.featureCarouselslider.defaults = { 564 // If zero, take original width and height of image 565 // If between 0 and 1, multiply by original width and height (acts as a percentage) 566 // If greater than one, use as a forced width/height for all of the images 567 largeFeatureWidth : 0, 568 largeFeatureHeight: 0, 569 containerWidth: 0, 570 containerHeight: 0, 571 fit_containerWidth: 0, 572 wds_number: 0, 573 // how much to pad the top of the carousel 574 topPadding: 20, 575 // spacing between the sides of the container 576 sidePadding: 50, 577 // the additional offset to pad the side features from the top of the carousel 578 smallFeatureOffset: 50, 579 //smallFeature parameters 580 smallFeaturePar: 0, 581 // indicates which feature to start the carousel at 582 startingFeature: 1, 583 // speed in milliseconds it takes to rotate the carousel 584 carouselSpeed: 400, 585 // time in milliseconds to set interval to autorotate the carousel 586 // set to zero to disable it, negative to go left 587 autoPlay: 4000, 588 carousel_degree: 50, 589 carousel_grayscale: 0, 590 carousel_transparency: 50, 591 interval: true, 592 //imagecounts 593 imagecount: 7, 594 // with autoplay enabled, set this option to true to have the carousel pause rotating 595 // when a user hovers over any feature 596 pauseOnHover: true, 597 // with autoplay enabled, set this option to completely stop the autorotate functionality 598 stopOnHover: false, 599 // numbered blips can appear and be used to track the currently centered feature, as well as 600 // allow the user to click a number to move to that feature. Set to false to not process these at all 601 // and true to process and display them//and true to process and display them 602 trackerIndividual: true, 603 // a summation of the features can also be used to display an "x Of y" style of tracking 604 // this can be combined with the above option as well 605 trackerSummation: true, 606 // Will only display this many features in the carousel 607 // set to zero to disable 608 displayCutoff: 0, 609 data: "", 610 // an easing can be specified for the animation of the carousel 611 animationEasing: 'swing', 612 // display captions below the image instead of on top 613 captionBelow: false, 614 parf: 0, 615 // callback function for when a feature has animated to the center 616 movedToCenter: $.noop, 617 // callback function for when feature left center 618 leavingCenter: $.noop, 619 // callback function for when center feature was clicked 620 clickedCenter: $.noop 621 }; 622})(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.