1/* 2 * AIT WordPress Theme Framework 3 * 4 * Copyright (c) 2013, Affinity Information Technology, s.r.o. (http://ait-themes.com) 5 */ 6 7 8(function($, $window){ 9 10 "use strict"; 11 12 var Carousel = function(element, options) 13 { 14 var elem = $(element); 15 var obj = this; 16 var settings = $.extend({}, options.defaults, options.current); 17 18 var interval; 19 var glDirection = "right"; 20 var glAutoplay = 0; 21 var glFading = 0; 22 var glInfinite = true; 23 var time = 5000; 24 var visible; 25 var moving = false; 26 var item = {}; 27 28 29 var carouselInit = function(){ 30 if(typeof settings.glInfinite != 'undefined') { 31 glInfinite = settings.glInfinite; 32 } 33 34 carouselTransform(); 35 carouselSetVisible(); 36 carouselResize(); 37 38 if(settings.layout == "box"){ 39 glAutoplay = typeof settings.boxEnableAutoplay != "undefined" ? settings.boxEnableAutoplay : 0; 40 glFading = typeof settings.boxEnableFading != "undefined" ? settings.boxEnableFading : 0; 41 } else if (settings.layout == "icon"){ 42 glAutoplay = typeof settings.iconEnableAutoplay != "undefined" ? settings.iconEnableAutoplay : 0; 43 glFading = typeof settings.iconEnableFading != "undefined" ? settings.iconEnableFading : 0; 44 } else { 45 glAutoplay = typeof settings.listEnableAutoplay != "undefined" ? settings.listEnableAutoplay : 0; 46 glFading = typeof settings.listEnableFading != "undefined" ? settings.listEnableFading : 0; 47 } 48 49 if(elem.hasClass('elm-testimonials')){ 50 carouselTransformItems(); 51 } 52 53 carouselArrowsCreate(); 54 carouselArrowLeft(); 55 carouselArrowRight(); 56 if(glAutoplay != 0){ 57 carouselPlay(); 58 carouselHover(); 59 } 60 61 if(glInfinite){ 62 var container = elem.find('.carousel-container'); 63 var items = container.find('.item').parent().clone(); 64 items.addClass('item-clone'); 65 container.append(items); 66 container.prepend(container.find('.item:last').parent()); 67 container.css({'margin-left':-(item.width+item.gap)}); 68 } 69 70 if(settings.layout != "icon"){ 71 elem.find('.loading').fadeOut('fast'); 72 } 73 }; 74 75 var carouselTransformItems = function(){ 76 var height = carouselItemHeight(); 77 var container = elem.find('.carousel-container'); 78 container.children('div.item-box').each(function(){ 79 jQuery(this).find('.item-excerpt').height(height); 80 }); 81 }; 82 83 var carouselItemHeight = function(){ 84 var height = 0; 85 var container = elem.find('.carousel-container'); 86 87 container.children('div.item-box').each(function(){ 88 var excerpt = jQuery(this).find('.item-excerpt'); 89 if(excerpt.height() > height){ 90 height = excerpt.height(); 91 } 92 }); 93 94 return height; 95 }; 96 97 var carouselTransform = function(){ 98 if(settings.layout != 'icon'){ 99 elem.parent().parent().addClass('carousel-enabled'); 100 //elem.parent().parent().addClass('layout-'+settings.layout); 101 } 102 item.count = elem.find('.carousel-item').length; 103 104 carouselRefresh(); 105 //elem.css({'overflow' : 'hidden'}); 106 }; 107 108 var carouselRefresh = function(){ 109 var container = elem.find('.carousel-container'); 110 111 container.removeAttr('style'); 112 container.find('.carousel-item').each(function(){ 113 $(this).removeAttr('style'); 114 }); 115 116 if(settings.layout == 'icon'){ 117 item.width = parseInt(settings.iconBoxWidth); 118 var itemFirst = container.find('.carousel-item').first(); 119 item.gap = parseInt(itemFirst.outerWidth(true)-itemFirst.width()); 120 visible = Math.round(elem.parent().width() / (item.width+item.gap)); 121 122 /*container.find('.carousel-item').each(function(){ 123 $(this).css({'width' : item.width}); 124 });*/ 125 } else { 126 item.width = parseInt(container.find('.carousel-item').first().width()); 127 item.gap = parseInt(container.find('.carousel-item').first().outerWidth(true)-item.width); 128 visible = Math.floor(elem.parent().width() / (item.width+item.gap)); 129 130 container.find('.carousel-item').each(function(){ 131 $(this).css({'width' : item.width, 'margin-right' : item.gap}); 132 }); 133 } 134 135 container.width(parseInt((item.width+item.gap)*item.count)); 136 if (glInfinite) { 137 container.css({'margin-left':-(item.width+item.gap)}); 138 } 139 140 carouselResetVisible(); 141 142 container.find('.carousel-item').css({'visibility':'visible'}); 143 144 }; 145 146 var carouselResize = function(){ 147 $window.resize(function(){ 148 /*var cWidthHack = Math.floor(elem.width()/(parseInt(settings.iconBoxWidth)+itemGap))*(parseInt(settings.iconBoxWidth)+itemGap); 149 elem.width(cWidthHack-itemGap);*/ 150 151 carouselRefresh(); 152 }); 153 }; 154 155 var carouselSetVisible = function(){ 156 var container = elem.find('.carousel-container'); 157 container.find('.carousel-item').each(function(){ 158 $(this).removeClass('first-visible').removeClass('last-visible'); 159 }); 160 var firstVisible = parseInt(container.attr('data-first')); 161 var lastVisible = parseInt(container.attr('data-first'))+(visible-1); 162 carouselSetRange(firstVisible, 'first-visible'); 163 carouselSetRange(lastVisible, 'last-visible'); 164 }; 165 166 var carouselResetVisible = function(){ 167 var container = elem.find('.carousel-container'); 168 container.attr('data-first', 1); 169 carouselSetVisible(); 170 } 171 172 var carouselSetRange = function(id, htmlclass){ 173 elem.find('.carousel-item').each(function(){ 174 if(parseInt($(this).data('id')) == id){ 175 $(this).addClass(htmlclass); 176 } 177 }); 178 }; 179 180 var carouselPlay = function(){ 181 interval = setInterval(function(){ 182 carouselMoveAuto(); 183 }, time); 184 }; 185 186 var carouselStop = function(){ 187 clearInterval(interval); 188 }; 189 190 var carouselFade = function(direction, multiplier){ 191 var container = elem.find('.carousel-container'); 192 switch(direction){
193 case "left": 194 // left 195 if(glInfinite){ 196 moving = true; 197 var counter = parseInt(container.attr('data-first')); 198 var localScroll = parseInt((item.width+item.gap)*multiplier); 199 var move = parseInt(container.css('margin-left')) + localScroll; 200 container.animate({'opacity': 0}, 250, function(){ 201 container.delay(500).animate({marginLeft : move}, {queue: true, duration: 100, complete: function(){ 202 container.find('div.item-box:first').before(container.find('div.item-box:last')); 203 container.css({'margin-left':-(item.width+item.gap)}); 204 carouselSetVisible(); 205 container.delay(100).animate({'opacity': 1}, 250, function(){ 206 moving = false; 207 }); 208 }}); 209 }); 210 } else { 211 var firstId = 1; 212 var firstVisibleId = parseInt(container.attr('data-first')); 213 if(firstVisibleId > 0){ 214 moving = true; 215 if(multiplier > parseInt(firstVisibleId - firstId)){ 216 var localMult = firstVisibleId - firstId; 217 } else { 218 var localMult = multiplier; 219 } 220 221 var localScroll = parseInt((item.width+item.gap)*localMult); 222 var move = parseInt(container.css('margin-left')) + localScroll; 223 container.animate({marginLeft : move}, {queue: true, duration: 500, complete: function(){ 224 container.attr('data-first', parseInt(firstVisibleId-localMult)); 225 carouselSetVisible(); 226 moving = false; 227 }}); 228 } 229 } 230 break; 231 case "right": 232 // right 233 if(glInfinite){ 234 moving = true; 235 var counter = parseInt(container.attr('data-first')); 236 var localScroll = parseInt((item.width+item.gap)*multiplier); 237 var move = parseInt(container.css('margin-left')) - localScroll; 238 container.animate({'opacity': 0}, 250, function(){ 239 container.delay(500).animate({marginLeft : move}, {queue: true, duration: 100, complete: function(){ 240 container.find('div.item-box:last').after(container.find('div.item-box:first')); 241 container.css({'margin-left':-(item.width+item.gap)}); 242 carouselSetVisible(); 243 container.delay(100).animate({'opacity': 1}, 250, function(){ 244 moving = false; 245 }); 246 }}); 247 }); 248 } else { 249 var firstId = parseInt(container.attr('data-first')); 250 var lastId = parseInt(container.attr('data-last')); 251 var lastVisibleId = parseInt(firstId+(visible-1)); 252 if(lastVisibleId < lastId){ 253 moving = true; 254 if(multiplier > parseInt(lastId - lastVisibleId)){ 255 var localMult = lastId - lastVisibleId; 256 } else { 257 var localMult = multiplier; 258 } 259 260 var localScroll = parseInt((item.width+item.gap)*localMult); 261 var move = parseInt(container.css('margin-left')) - localScroll; 262 container.animate({marginLeft : move}, {queue: true, duration: 500, complete: function(){ 263 container.attr('data-first', parseInt(firstId+localMult)); 264 carouselSetVisible(); 265 moving = false; 266 }}); 267 } 268 } 269 break; 270 } 271 }; 272 273 var carouselMove = function(direction, multiplier){ 274 var container = elem.find('.carousel-container'); 275 switch(direction){ 276 case "left": 277 // left 278 if(glInfinite){ 279 moving = true; 280 var counter = parseInt(container.attr('data-first')); 281 var localScroll = parseInt((item.width+item.gap)*multiplier); 282 var move = parseInt(container.css('margin-left')) + localScroll; 283 container.animate({marginLeft : move}, {queue: true, duration: 500, complete: function(){ 284 container.find('div.item-box:first').before(container.find('div.item-box:last')); 285 container.css({'margin-left':-(item.width+item.gap)}); 286 carouselSetVisible(); 287 moving = false; 288 }}); 289 } else { 290 var firstId = 1; 291 var firstVisibleId = parseInt(container.attr('data-first')); 292 if(firstVisibleId > 0){ 293 moving = true; 294 if(multiplier > parseInt(firstVisibleId - firstId)){ 295 var localMult = firstVisibleId - firstId; 296 } else { 297 var localMult = multiplier; 298 } 299 300 var localScroll = parseInt((item.width+item.gap)*localMult); 301 var move = parseInt(container.css('margin-left')) + localScroll; 302 container.animate({marginLeft : move}, {queue: true, duration: 500, complete: function(){ 303 container.attr('data-first', parseInt(firstVisibleId-localMult)); 304 carouselSetVisible(); 305 moving = false;
306 }}); 307 } 308 } 309 break; 310 case "right": 311 // right 312 if(glInfinite){ 313 moving = true; 314 var counter = parseInt(container.attr('data-first')); 315 var localScroll = parseInt((item.width+item.gap)*multiplier); 316 var move = parseInt(container.css('margin-left')) - localScroll; 317 container.animate({marginLeft : move}, {queue: true, duration: 500, complete: function(){ 318 container.find('div.item-box:last').after(container.find('div.item-box:first')); 319 container.css({'margin-left':-(item.width+item.gap)}); 320 carouselSetVisible(); 321 moving = false; 322 }}); 323 } else { 324 var firstId = parseInt(container.attr('data-first')); 325 var lastId = parseInt(container.attr('data-last')); 326 var lastVisibleId = parseInt(firstId+(visible-1)); 327 if(lastVisibleId < lastId){ 328 moving = true; 329 if(multiplier > parseInt(lastId - lastVisibleId)){ 330 var localMult = lastId - lastVisibleId; 331 } else { 332 var localMult = multiplier; 333 } 334 335 var localScroll = parseInt((item.width+item.gap)*localMult); 336 var move = parseInt(container.css('margin-left')) - localScroll; 337 container.animate({marginLeft : move}, {queue: true, duration: 500, complete: function(){ 338 container.attr('data-first', parseInt(firstId+localMult)); 339 carouselSetVisible(); 340 moving = false; 341 }}); 342 } 343 } 344 break; 345 } 346 }; 347 348 var carouselMoveManual = function(index){ 349 var container = elem.find('.carousel-container'); 350 var firstVisibleElementId = parseInt(container.attr('data-first')); 351 var lastVisibleElementId = parseInt(container.attr('data-first'))+visible-1; 352 var allElements = container.attr('data-last'); 353 /*if(index > lastVisibleElementId){ 354 var move = index - lastVisibleElementId; 355 carouselMove('right', move); 356 } else if (index < firstVisibleElementId){ 357 var move = firstVisibleElementId - index; 358 carouselMove('left', move); 359 } else { 360 // in range, dont move anything 361 }*/ 362 if(!glInfinite){ 363 if(glDirection == "right"){ 364 if(lastVisibleElementId == allElements){ 365 glDirection = "left"; 366 } 367 } else { 368 if(firstVisibleElementId == 1){ 369 glDirection = "right"; 370 } 371 } 372 } 373 374 if(glFading != 0){ 375 carouselFade(glDirection, index); 376 } else { 377 carouselMove(glDirection, index); 378 } 379 }; 380 381 var carouselMoveAuto = function(){ 382 if(moving == false){ 383 carouselMoveManual(1); 384 } 385 }; 386 387 /* user functions */ 388 var carouselHover = function(){ 389 elem.parent().hover(function(){ 390 carouselStop(); 391 }, function(){ 392 carouselPlay(); 393 }); 394 }; 395 396 var carouselArrowsCreate = function(){ 397 // fix - do not show arrows if queried items count is less then items count available for one slide 398 var itemsCount = elem.find('.carousel-item.item').length; 399 if (settings.layout == 'box') { 400 if (itemsCount <= (settings.boxColumns * settings.boxRows) && !glInfinite) {return;} 401 } 402 else { 403 if (itemsCount <= settings.listColumns * settings.listRows && !glInfinite) {return;} 404 } 405 // Find manual added arrows 406 if(settings.layout == 'icon'){ 407 var arrowLeft = elem.parent().parent().find('.carousel-arrow-left'); 408 var arrowRight = elem.parent().parent().find('.carousel-arrow-right'); 409 } else { 410 var arrowLeft = elem.parent().find('.carousel-arrow-left'); 411 var arrowRight = elem.parent().find('.carousel-arrow-right'); 412 } 413 414 // check if exists 415 if( arrowLeft.length > 0 && arrowRight.length > 0) 416 { 417 arrowLeft.addClass('arrow arrow-left').show(); 418 arrowRight.addClass('arrow arrow-right').show(); 419 } 420 else 421 { 422 // create arrows 423 elem.parent().append('<div class="carousel-arrows"><div class="standard-arrows"><div class="arrow arrow-left"><</div><div class="arrow arrow-right">></div></div></div>'); 424 } 425 }; 426 427 var carouselArrowLeft = function(){ 428 // action for left arrow 429 if(settings.layout == 'icon'){ 430 elem.parent().parent().find('.carousel-arrows .arrow-left, .carousel-arrow-left').css({'cursor' : 'pointer'}).click(function(){ 431 if(moving == false){ 432 //carouselMove('left', 1); 433 if(glFading != 0){ 434 carouselFade('left', 1); 435 } else { 436 carouselMove('left', 1); 437 } 438 } 439 }); 440 } else { 441 elem.parent().find('.carousel-arrows .arrow-left, .carousel-arrow-left').css({'cursor' : 'pointer'}).click(function(){ 442 if(moving == false){ 443 //carouselMove('left', 1); 444 if(glFading != 0){ 445 carouselFade('left', 1); 446 } else { 447 carouselMove('left', 1); 448 } 449 } 450 }); 451 } 452 }; 453 454 var carouselArrowRight = function(){ 455 // action for right arrow 456 if(settings.layout == 'icon'){ 457 elem.parent().parent().find('.carousel-arrows .arrow-right, .carousel-arrow-right').css({'cursor' : 'pointer'}).click(function(){ 458 if(moving == false){ 459 //carouselMove('right', 1); 460 if(glFading != 0){ 461 carouselFade('right', 1); 462 } else { 463 carouselMove('right', 1); 464 } 465 } 466 }); 467 } else { 468 elem.parent().find('.carousel-arrows .arrow-right, .carousel-arrow-right').css({'cursor' : 'pointer'}).click(function(){ 469 if(moving == false){ 470 //carouselMove('right', 1); 471 if(glFading != 0){ 472 carouselFade('right', 1); 473 } else { 474 carouselMove('right', 1); 475 } 476 } 477 }); 478 } 479 }; 480 481 var carouselConditionalInit = function(){ 482 var elem_width = elem.outerWidth(true); 483 var $container = elem.find('.carousel-container'); 484 485 var item_first_width = $container.find('.item-box:first').width(); 486 var item_first_offset = $container.find('.item-box:first').outerWidth(true) - item_first_width; 487 488 var items_width = 0; 489 $container.find('.item-box').each(function(){ 490 items_width = items_width+jQuery(this).outerWidth(true); 491 }); 492 items_width = items_width - item_first_offset; 493 494 if(items_width >= elem_width){ 495 carouselInit(); 496 } else { 497 elem.parent().parent().removeClass('carousel-enabled'); 498 elem.parent().parent().addClass('carousel-disabled'); 499 elem.find('.loading').fadeOut('fast'); 500 } 501 } 502 503 504 if(settings.layout == 'icon'){ 505 elem.parent().parent().parent().parent().addClass('carousel-enabled'); 506 507 var itemFirst = elem.find('.carousel-container .carousel-item').first(); 508 var itemGap = parseInt(itemFirst.outerWidth(true)-itemFirst.width()); 509 510 511 /*console.log(elem.find('.carousel-item').length); 512 console.log(parseInt(settings.iconBoxWidth)+itemGap); 513 console.log(elem.width());*/ 514 515 if( ( (elem.find('.carousel-item').length/2) *(parseInt(settings.iconBoxWidth)+itemGap)-itemGap > elem.width()) ) {
516 // enable carousel 517 var widthHack = Math.floor(elem.width()/(parseInt(settings.iconBoxWidth)+itemGap))*(parseInt(settings.iconBoxWidth)+itemGap); 518 elem.width(widthHack-itemGap); 519 520 carouselInit(); 521 } else { 522 elem.parent().parent().parent().parent().removeClass('carousel-enabled'); 523 elem.parent().parent().parent().parent().addClass('carousel-disabled'); 524 } 525 526 elem.parent().css({'width': 'auto'}); 527 elem.find('.loading').fadeOut('fast'); 528 529 530 } else { 531 carouselConditionalInit(); 532 } 533 }; 534 535 $.fn.carousel = function(options){ 536 return this.each(function(){ 537 var element = $(this); 538 if (element.data('carousel')) return; 539 540 var carousel = new Carousel(this, options); 541 element.data('carousel', carousel); 542 }); 543 }; 544})(jQuery, jQuery(window));
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.