1function isTouchDevice() { 2 return 'ontouchstart' in window // works on most browsers 3 || 'onmsgesturechange' in window; // works on ie10 4} 5 6function isMobileDevice() { 7 return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); 8}; 9 10jQuery.fn.isInViewport = function() { 11 var elementTop = jQuery(this).offset().top; 12 var elementBottom = elementTop + jQuery(this).outerHeight(); 13 14 var viewportTop = jQuery(window).scrollTop(); 15 var viewportBottom = viewportTop + jQuery(window).height(); 16 17 return elementBottom > viewportTop && elementTop < viewportBottom; 18}; 19 20( function( $ ) { 21 // Make sure you run this code under Elementor.. 22 $( window ).on( 'elementor/frontend/init', function() { 23 24 //Add link to mini cart 25 jQuery('.grandconference-cart-mini-cart-link').on( 'click', function(){ 26 if(jQuery('#woocommerce-mini-cart-wrapper').length) { 27 setTimeout(function () { jQuery('#woocommerce-mini-cart-wrapper').addClass('visible'); }, 10); 28 } 29 30 return false; 31 }); 32 33 //Touch devices hack for firing first event 34 var isTouch = ('ontouchstart' in document.documentElement); 35 if ( isTouch ) { 36 jQuery('#footer-wrapper').css('overflow-x', 'hidden'); 37 } 38 39 jQuery("img.lazy").each(function() { 40 var currentImg = jQuery(this); 41 42 jQuery(this).Lazy({ 43 onFinishedAll: function() { 44 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 45 currentImg.parent('.grandconference_gallery_lightbox').parent("div.gallery-grid-item").removeClass("lazy"); 46 } 47 }); 48 }); 49 50 //Apply all entrance animation 51 jQuery('#page-content-wrapper .elementor-widget-image.animation').each(function() { 52 jQuery(this).smoove({ 53 offset : '30%' 54 }); 55 }); 56 57 var bodyBGColor = jQuery('body').css('background-color'); 58 if(bodyBGColor != '') 59 { 60 jQuery('#wrapper').css('background-color', bodyBGColor); 61 } 62 63 //Calculated min height section dynamically for mobile 64 if(parseInt(jQuery(window).width()) < 501) 65 { 66 jQuery("section.elementor-section-height-min-height .elementor-container").each(function() { 67 jQuery(this).height('auto'); 68 }); 69 } 70 71 jQuery(window).resize(function() { 72 jQuery("section.elementor-section-height-min-height .elementor-container").each(function() { 73 var currentSection = jQuery(this); 74 75 if(parseInt(jQuery(window).width()) < 501) 76 { 77 currentSection.height('auto'); 78 } 79 else 80 { 81 currentSection.height(''); 82 } 83 }); 84 }); 85 86 elementorFrontend.hooks.addAction('frontend/element_ready/global', function( $scope ) { 87 88 if(elementorFrontend.isEditMode()) 89 { 90 var elementSettings = {}; 91 var modelCID = $scope.data( 'model-cid' ); 92 93 var settings = elementorFrontend.config.elements.data[ modelCID ]; 94 if(typeof settings != 'undefined') 95 { 96 var type = settings.attributes.widgetType || settings.attributes.elType, 97 settingsKeys = elementorFrontend.config.elements.keys[ type ]; 98 99 if ( ! settingsKeys ) { 100 settingsKeys = elementorFrontend.config.elements.keys[type] = []; 101 102 jQuery.each( settings.controls, function ( name, control ) { 103 if ( control.frontend_available ) { 104 settingsKeys.push( name ); 105 } 106 }); 107 } 108 109 jQuery.each( settings.getActiveControls(), function( controlKey ) { 110 if ( -1 !== settingsKeys.indexOf( controlKey ) ) { 111 elementSettings[ controlKey ] = settings.attributes[ controlKey ]; 112 } 113 } ); 114 115 var widgetExt = elementSettings; 116 } 117 } 118 else 119 { 120 //Get widget settings data 121 var widgetExtObj = $scope.attr('data-settings'); 122 123 if(typeof widgetExtObj != 'undefined') 124 { 125 var widgetExt = JSON.parse(widgetExtObj); 126 } 127 } 128 129 if(typeof widgetExt != 'undefined') 130 { 131 //Begin background image parallax scrolling 132 if(typeof widgetExt.grandconference_ext_is_background_parallax != 'undefined' && widgetExt.grandconference_ext_is_background_parallax == 'true') 133 { 134 if(typeof widgetExt.background_background != 'undefined' && widgetExt.background_background == 'classic') 135 { 136 //If not edit in Elementor for better performance 137 if(!elementorFrontend.isEditMode()) 138 { 139 var widgetBg = $scope.css('background-image'); 140 widgetBg = widgetBg.replace('url(','').replace(')','').replace(/\"/gi, ""); 141 142 //parallaxator 143 /*$scope.addClass('parallaxator'); 144 $scope.append('<img class="parallax_child" src="'+widgetBg+'" data-parallaxator-reverse="true"/>');*/ 145 146 if(widgetBg != '') 147 { 148 var jarallaxScrollSpeed = 0.5; 149 if(typeof widgetExt.grandconference_ext_is_background_parallax_speed.size != 'undefined') 150 { 151 jarallaxScrollSpeed = parseFloat(widgetExt.grandconference_ext_is_background_parallax_speed.size); 152 } 153 154 //Jarallax 155 $scope.addClass('jarallax'); 156 $scope.append('<img class="jarallax-img" src="'+widgetBg+'"/>'); 157 158 $scope.jarallax({ 159 speed: jarallaxScrollSpeed 160 }); 161
162 if(!isMobileDevice()) 163 { 164 $scope.css('background-image', 'none'); 165 } 166 167 jQuery(window).resize(function() { 168 if(!isMobileDevice()) 169 { 170 $scope.css('background-image', 'none'); 171 } 172 else 173 { 174 $scope.css('background-image', 'url('+widgetBg+')'); 175 } 176 }); 177 } 178 } 179 } 180 } 181 182 if(typeof widgetExt.grandconference_ext_is_fadeout_animation != 'undefined' && widgetExt.grandconference_ext_is_fadeout_animation == 'true') 183 { 184 var scrollVelocity = parseFloat(widgetExt.grandconference_ext_is_fadeout_animation_velocity.size); 185 var scrollDirection = widgetExt.grandconference_ext_is_fadeout_animation_direction; 186 187 jQuery(window).scroll(function(i){ 188 var scrollVar = jQuery(window).scrollTop(); 189 var scrollPx = -(scrollVelocity*scrollVar); 190 191 if(scrollDirection == 'up') 192 { 193 scrollPx = -(scrollVelocity*scrollVar); 194 } 195 else if(scrollDirection == 'down') 196 { 197 scrollPx = scrollVelocity*scrollVar; 198 } 199 else 200 { 201 scrollPx = 0; 202 } 203 204 //console.log(scrollVelocity); 205 $scope.find('.elementor-widget-container').css({'transform': "translateY("+scrollPx+"px)" }); 206 $scope.find('.elementor-widget-container').css({'opacity':( 100-(scrollVar/4) )/100}); 207 }) 208 } 209 210 211 //Begin scroll animation extensions 212 if(typeof widgetExt.grandconference_ext_is_scrollme != 'undefined' && widgetExt.grandconference_ext_is_scrollme == 'true') 213 { 214 var scrollArgs = {}; 215 216 if(typeof widgetExt.grandconference_ext_scrollme_scalex.size != 'undefined' && widgetExt.grandconference_ext_scrollme_scalex.size != 1) 217 { 218 scrollArgs['scaleX'] = widgetExt.grandconference_ext_scrollme_scalex.size; 219 } 220 221 if(typeof widgetExt.grandconference_ext_scrollme_scaley.size != 'undefined' && widgetExt.grandconference_ext_scrollme_scaley.size != 1) 222 { 223 scrollArgs['scaleY'] = widgetExt.grandconference_ext_scrollme_scaley.size; 224 } 225 226 if(typeof widgetExt.grandconference_ext_scrollme_scalez.size != 'undefined' && widgetExt.grandconference_ext_scrollme_scalez.size != 1) 227 { 228 scrollArgs['scaleZ'] = widgetExt.grandconference_ext_scrollme_scalez.size; 229 } 230 231 if(typeof widgetExt.grandconference_ext_scrollme_rotatex.size != 'undefined' && widgetExt.grandconference_ext_scrollme_rotatex.size != 0) 232 { 233 scrollArgs['rotateX'] = widgetExt.grandconference_ext_scrollme_rotatex.size; 234 } 235 236 if(typeof widgetExt.grandconference_ext_scrollme_rotatey.size != 'undefined' && widgetExt.grandconference_ext_scrollme_rotatey.size != 0) 237 { 238 scrollArgs['rotateY'] = widgetExt.grandconference_ext_scrollme_rotatey.size; 239 } 240 241 if(typeof widgetExt.grandconference_ext_scrollme_rotatez.size != 'undefined' && widgetExt.grandconference_ext_scrollme_rotatez.size != 0) 242 { 243 scrollArgs['rotateY'] = widgetExt.grandconference_ext_scrollme_rotatez.size; 244 } 245 246 if(typeof widgetExt.grandconference_ext_scrollme_translatex.size != 'undefined' && widgetExt.grandconference_ext_scrollme_translatex.size != 0) 247 { 248 scrollArgs['x'] = widgetExt.grandconference_ext_scrollme_translatex.size; 249 } 250 251 if(typeof widgetExt.grandconference_ext_scrollme_translatey.size != 'undefined' && widgetExt.grandconference_ext_scrollme_translatey.size != 0) 252 { 253 scrollArgs['y'] = widgetExt.grandconference_ext_scrollme_translatey.size; 254 } 255 256 if(typeof widgetExt.grandconference_ext_scrollme_translatez.size != 'undefined' && widgetExt.grandconference_ext_scrollme_translatez.size != 0) 257 { 258 scrollArgs['z'] = widgetExt.grandconference_ext_scrollme_translatez.size; 259 } 260 261 if(typeof widgetExt.grandconference_ext_scrollme_smoothness.size != 'undefined') 262 { 263 scrollArgs['smoothness'] = widgetExt.grandconference_ext_scrollme_smoothness.size; 264 } 265 266 //scrollArgs['duration'] = 150; 267 268 $scope.attr('data-parallax', JSON.stringify(scrollArgs)); 269 270 if(typeof widgetExt.grandconference_ext_scrollme_disable != 'undefined') 271 { 272 if(widgetExt.grandconference_ext_scrollme_disable == 'mobile') 273 {
274 if(parseInt(jQuery(window).width()) < 501) 275 { 276 $scope.addClass('noanimation'); 277 } 278 } 279 280 if(widgetExt.grandconference_ext_scrollme_disable == 'tablet') 281 { 282 if(parseInt(jQuery(window).width()) < 769) 283 { 284 $scope.addClass('noanimation'); 285 } 286 } 287 288 jQuery(window).resize(function() { 289 if(widgetExt.grandconference_ext_scrollme_disable == 'mobile') 290 { 291 if(isMobileDevice() || parseInt(jQuery(window).width()) < 501) 292 { 293 $scope.addClass('noanimation'); 294 } 295 else 296 { 297 $scope.removeClass('noanimation'); 298 } 299 } 300 301 if(widgetExt.grandconference_ext_scrollme_disable == 'tablet') 302 { 303 if(parseInt(jQuery(window).width()) < 769) 304 { 305 $scope.addClass('noanimation'); 306 } 307 else 308 { 309 $scope.removeClass('noanimation'); 310 } 311 } 312 }); 313 } 314 } 315 //End scroll animation extensions 316 317 //Begin entrance animation extensions 318 if(typeof widgetExt.grandconference_ext_is_smoove != 'undefined' && widgetExt.grandconference_ext_is_smoove == 'true') 319 { 320 $scope.addClass('init-smoove'); 321 322 $scope.smoove({ 323 min_width : parseInt(widgetExt.grandconference_ext_smoove_disable), 324 325 scaleX : widgetExt.grandconference_ext_smoove_scalex.size, 326 scaleY : widgetExt.grandconference_ext_smoove_scaley.size, 327 328 rotateX : parseInt(widgetExt.grandconference_ext_smoove_rotatex.size)+'deg', 329 rotateY : parseInt(widgetExt.grandconference_ext_smoove_rotatey.size)+'deg', 330 rotateZ : parseInt(widgetExt.grandconference_ext_smoove_rotatez.size)+'deg', 331 332 moveX : parseInt(widgetExt.grandconference_ext_smoove_translatex.size)+'px', 333 moveY : parseInt(widgetExt.grandconference_ext_smoove_translatey.size)+'px', 334 moveZ : parseInt(widgetExt.grandconference_ext_smoove_translatez.size)+'px', 335 336 skewX : parseInt(widgetExt.grandconference_ext_smoove_skewx.size)+'deg', 337 skewY : parseInt(widgetExt.grandconference_ext_smoove_skewy.size)+'deg', 338 339 perspective : parseInt(widgetExt.grandconference_ext_smoove_perspective.size), 340 transformOrigin : parseInt(widgetExt.grandconference_ext_smoove_transform_originy.size)+'% '+parseInt(widgetExt.grandconference_ext_smoove_transform_originx.size)+'%', 341 342 offset : '-5%', 343 }); 344 345 if(typeof widgetExt.grandconference_ext_smoove_duration != 'undefined') 346 { 347 $scope.css('transition-duration', parseInt(widgetExt.grandconference_ext_smoove_duration)+'ms'); 348 } 349 350 var width = jQuery(window).width(); 351 if (widgetExt.grandconference_ext_smoove_disable >= width) { 352 if(!$scope.hasClass('smooved')) 353 { 354 $scope.addClass('no-smooved'); 355 } 356 357 return false; 358 } 359 360 setTimeout(function(){ 361 window.scrollTo(window.scrollX, window.scrollY + 1); 362 363 if(!jQuery('body').hasClass('elementor-editor-active')) { 364 window.scrollTo(window.scrollX, 0); 365 } 366 }, 1000); 367 368 } 369 //End entrance animation extensions 370 371 372 //Begin mouse parallax extensions 373 if(typeof widgetExt.grandconference_ext_is_parallax_mouse != 'undefined' && widgetExt.grandconference_ext_is_parallax_mouse == 'true') 374 { 375 var elementID = $scope.attr('data-id'); 376 $scope.find('.elementor-widget-container').attr('data-depth', parseFloat(widgetExt.grandconference_ext_is_parallax_mouse_depth.size)); 377 $scope.attr('ID', 'parallax-'+elementID); 378 379 var parentElement = document.getElementById('parallax-'+elementID); 380 var parallax = new Parallax(parentElement, { 381 relativeInput: true 382 }); 383 384 if(elementorFrontend.isEditMode()) 385 { 386 if($scope.width() == 0) 387 { 388 $scope.css('width', '100%'); 389 } 390 391 if($scope.height() == 0) 392 { 393 $scope.css('height', '100%'); 394 } 395 } 396 } 397 //End mouse parallax extensions 398 399 400 //Begin infinite animation extensions 401 if(typeof widgetExt.grandconference_ext_is_infinite != 'undefined' && widgetExt.grandconference_ext_is_infinite == 'true') 402 { 403 var animationClass = ''; 404 var keyframeName = ''; 405 var animationCSS = ''; 406 407 if(typeof widgetExt.grandconference_ext_infinite_animation != 'undefined') 408 { 409 animationClass = widgetExt.grandconference_ext_infinite_animation; 410 411 switch(animationClass) { 412 case 'if_swing1': 413 keyframeName = 'swing'; 414 break; 415 416 case 'if_swing2': 417 keyframeName = 'swing2'; 418 break; 419 420 case 'if_wave': 421 keyframeName = 'wave'; 422 break; 423 424 case 'if_tilt': 425 keyframeName = 'tilt'; 426 break; 427 428 case 'if_bounce': 429 keyframeName = 'bounce'; 430 break; 431 432 case 'if_scale': 433 keyframeName = 'scale'; 434 break; 435 436 case 'if_spin': 437 keyframeName = 'spin'; 438 break; 439 } 440 441 animationCSS+= keyframeName+' '; 442 } 443 //alert(widgetExt.grandconference_ext_infinite_duration); 444 if(typeof widgetExt.grandconference_ext_infinite_duration != 'undefined') 445 { 446 animationCSS+= widgetExt.grandconference_ext_infinite_duration+'s '; 447 } 448 449 animationCSS+= 'infinite alternate '; 450 451 if(typeof widgetExt.grandconference_ext_infinite_easing != 'undefined') 452 { 453 animationCSS+= 'cubic-bezier('+widgetExt.grandconference_ext_infinite_easing+')'; 454 } 455 //alert(animationCSS); 456 $scope.css({ 457 'animation' : animationCSS, 458 }); 459 $scope.addClass(animationClass); 460 } 461 //End infinite animation extensions 462 463 //Begin link to side menu extensions 464 if(typeof widgetExt.grandconference_ext_link_sidemenu != 'undefined' && widgetExt.grandconference_ext_link_sidemenu == 'true') 465 { 466 var overlayEffect = jQuery('#tg_sidemenu_overlay_effect').val(); 467 468 $scope.on( 'click', function(e) { 469 //console.log('side menu clicked'); 470 e.preventDefault(); 471 472 jQuery('body').toggleClass('js_nav'); 473 jQuery('body').toggleClass(overlayEffect); 474 jQuery('#close_mobile_menu').addClass('open'); 475
476 if(is_touch_device()) 477 { 478 jQuery('body.js_nav').css('overflow', 'auto'); 479 } 480 }); 481 } 482 483 //Begin link to fullscreen menu extensions 484 if(typeof widgetExt.grandconference_ext_link_fullmenu != 'undefined' && widgetExt.grandconference_ext_link_fullmenu == 'true') 485 { 486 var canvas = document.createElement("canvas"); 487 488 // Width and height of canvas can 489 // be varied depending on the 490 // size of icon 491 canvas.width = 30; 492 canvas.height = 28; 493 494 // Set interval for allowing the 495 // font awesome icon to load 496 setInterval(() => { 497 var ctx = canvas.getContext("2d"); 498 499 // Setting the color of the icon 500 ctx.fillStyle = "#ffffff"; 501 502 // Set size of cursor 503 ctx.font = '900 28px "Font Awesome 5 Free"'; 504 505 // '\uf0f9' is the unicode of 506 // the font awesome icon 507 ctx.fillText("\uf00d", 0, 20); 508 509 // Converting the canvas to image 510 var dataURL = canvas.toDataURL("image/png"); 511 512 // Setting the cursor property 513 // to the image created 514 jQuery(".fullmenu-wrapper").css( 515 "cursor", "url(" + dataURL + "), auto"); 516 }, 1000); 517 518 $scope.addClass('fullmenu-button'); 519 520 $scope.on( 'click', function(e) { 521 e.preventDefault(); 522 523 //jQuery('body,html').animate({scrollTop:0},100); 524 jQuery('body').toggleClass('fullmenu-active').trigger('classChange'); 525 jQuery('.fullmenu-wrapper').toggleClass('fullmenu-wrapper-active'); 526 }); 527 528 jQuery('.fullmenu-wrapper').on( 'click', function(e) { 529 jQuery('body').removeClass('fullmenu-active').trigger('classChange'); 530 jQuery('.fullmenu-wrapper').removeClass('fullmenu-wrapper-active'); 531 }); 532 } 533 534 //Begin sticky element extensions 535 if(typeof widgetExt.grandconference_ext_is_sticky != 'undefined' && widgetExt.grandconference_ext_is_sticky == 'true') 536 { 537 var stickyElement = $scope.children('.elementor-widget-wrap'); 538 var topSpacing = 100; 539 if(typeof widgetExt.grandconference_ext_sticky_top_spacing != 'undefined') 540 { 541 topSpacing = parseInt(widgetExt.grandconference_ext_sticky_top_spacing.size); 542 } 543 544 stickyElement.stickySidebar({ 545 topSpacing: topSpacing 546 }); 547 548 if(jQuery(window).width() < 768 || is_touch_device()) 549 { 550 stickyElement.destroy(); 551 } 552 } 553 554 //Begin background on change extensions 555 if(typeof widgetExt.grandconference_ext_is_background_on_scroll != 'undefined' && widgetExt.grandconference_ext_is_background_on_scroll == 'true') 556 { 557 var bodyBackground = jQuery('body').css('background-color'); 558 var position = jQuery(window).scrollTop(); 559 560 jQuery(window).on("scroll touchmove", function() { 561 clearTimeout($.data(this, 'scrollTimer')); 562 $.data(this, 'scrollTimer', setTimeout(function() { 563 jQuery('body').attr('data-scrollend', jQuery(window).scrollTop()); 564 }, 250)); 565 566 var scroll = jQuery(window).scrollTop(); 567 var position = jQuery('body').attr('data-scrollend'); 568 var windowHeight = jQuery(window).height(); 569 var windowHeightOffset = parseInt(windowHeight/2); 570 var elementTop = $scope.position().top - windowHeightOffset; 571 var elementBottom = elementTop + $scope.outerHeight(true); 572 573 /*console.log('document scroll top: '+jQuery(document).scrollTop()); 574 console.log('element top: '+elementTop); 575 console.log('element bottom: '+elementBottom);*/ 576 577 if (scroll > position) { 578 //console.log('scroll down'); 579 580 //Scroll down 581 if (jQuery(document).scrollTop() >= elementTop && jQuery(document).scrollTop() <= elementBottom) { 582 //jQuery('body').css('background-color', widgetExt.grandconference_ext_background_on_scroll_color); 583 jQuery('#wrapper').css('background-color', widgetExt.grandconference_ext_background_on_scroll_color); 584 } 585 586 if (jQuery(document).scrollTop() > elementBottom) { 587 //jQuery('body').css('background-color', bodyBackground); 588 jQuery('#wrapper').css('background-color', bodyBackgroun
588d); 589 } 590 591 } else { 592 /*console.log('scroll up'); 593 console.log('document scroll top: '+jQuery(document).scrollTop()); 594 console.log('element top: '+$scope.position().top); 595 console.log('element bottom: '+elementBottom);*/ 596 597 //Scroll up 598 if (jQuery(document).scrollTop() <= elementBottom && jQuery(document).scrollTop() >= elementTop) { 599 clearTimeout($.data(this, 'scrollTimer2')); 600 $.data(this, 'scrollTimer2', setTimeout(function() { 601 jQuery('#wrapper').css('background-color', widgetExt.grandconference_ext_background_on_scroll_color).stop(); 602 }, 250)); 603 604 /*setTimeout(function(){ 605 //jQuery('body').css('background-color', widgetExt.grandconference_ext_background_on_scroll_color).stop(); 606 jQuery('#wrapper').css('background-color', widgetExt.grandconference_ext_background_on_scroll_color).stop(); 607 }, 100);*/ 608 } 609 610 if (jQuery(document).scrollTop() < $scope.position().top) { 611 //jQuery('body').css('background-color', bodyBackground); 612 jQuery('#wrapper').css('background-color', bodyBackground); 613 } 614 } 615 }); 616 } 617 //End background on change extensions 618 } 619 }); 620 621 //Start execute javascript for blog posts 622 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-blog-posts.default', function( $scope ) { 623 jQuery(function( $ ) { 624 jQuery("img.lazy").each(function() { 625 var currentImg = jQuery(this); 626 627 jQuery(this).Lazy({ 628 onFinishedAll: function() { 629 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 630 }, 631 }); 632 }); 633 634 jQuery(".layout-masonry").each(function() { 635 var grid = jQuery(this); 636 637 grid.imagesLoaded(function() { 638 grid.masonry({ 639 itemSelector: ".blog-posts-masonry", 640 columnWidth: ".blog-posts-masonry", 641 gutter : 45 642 }); 643 644 jQuery(".layout-masonry .blog-posts-masonry").each(function(index) { 645 setTimeout(function() { 646 jQuery(".layout-masonry .blog-posts-masonry").eq(index).addClass("is-showing"); 647 }, 250 * index); 648 }); 649 }); 650 651 jQuery(".layout-masonry img.lazy_masonry").each(function() { 652 var currentImg = jQuery(this); 653 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 654 655 jQuery(this).Lazy({ 656 onFinishedAll: function() { 657 grid.masonry({ 658 itemSelector: ".blog-posts-masonry", 659 columnWidth: ".blog-posts-masonry", 660 gutter : 45 661 }); 662 }, 663 }); 664 }); 665 }); 666 667 jQuery(".layout-metro_masonry").each(function() { 668 var grid = jQuery(this); 669 670 grid.imagesLoaded(function() { 671 grid.masonry({ 672 itemSelector: ".blog-posts-metro", 673 columnWidth: ".blog-posts-metro", 674 gutter : 40 675 }); 676 677 jQuery(".layout-metro_masonry .blog-posts-metro").each(function(index) { 678 setTimeout(function() { 679 jQuery(".layout-metro_masonry .blog-posts-metro").eq(index).addClass("is-showing"); 680 }, 100 * index); 681 }); 682 }); 683 684 jQuery(".post-metro-left-wrapper img.lazy_masonry, .layout-metro_masonry img.lazy_masonry").each(function() { 685 var currentImg = jQuery(this); 686 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 687 688 jQuery(this).Lazy({ 689 onFinishedAll: function() { 690 grid.masonry({ 691 itemSelector: ".blog-posts-metro", 692 columnWidth: ".blog-posts-metro", 693 gutter : 40 694 }); 695 }, 696 }); 697 }); 698 }); 699 700 var menuLayout = jQuery('#pp_menu_layout').val(); 701 if(menuLayout != 'leftmenu') 702 { 703 var metroSticky = jQuery(".post-metro-left-wrapper").stickySidebar({ topSpacing: 120 }); 704 } 705 else 706 { 707 var metroSticky = jQuery(".post-metro-left-wrapper").stickySidebar({ topSpacing: 40 }); 708 } 709 710 if(jQuery(window).width() <= 768 || isTouchDevice()) 711 { 712 713 } 714 }); 715 } ); 716 //End execute javascript for blog posts 717 718 //Start execute javascript for gallery grid 719 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-gallery-grid.default', function( $scope ) { 720 jQuery("img.lazy").each(function() { 721 var currentImg = jQuery(this); 722 723 jQuery(this).Lazy({ 724 onFinishedAll: function() { 725 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 726 currentImg.parent('.grandconference_gallery_lightbox').parent("div.gallery-grid-item").removeClass("lazy"); 727 currentImg.parent("div.gallery-grid-item").removeClass("lazy"); 728 } 729 }); 730 }); 731 } ); 732 //End execute javascript for gallery grid 733 734 //Start execute javascript for gallery masonry 735 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-gallery-masonry.default', function( $scope ) { 736 jQuery(function( $ ) { 737 jQuery(".grandconference-gallery-grid-content-wrapper.do-masonry:not(.proofing-gallery)").each(function() { 738 var grid = jQuery(this); 739 var cols = grid.attr('data-cols'); 740 741 if(!grid.hasClass('has-no-space')) 742 { 743 var gutter = 30; 744 if(cols > 4) 745 { 746 gutter = 20; 747 } 748 } 749 else 750 { 751 gutter = 0; 752 } 753 754 grid.imagesLoaded(function() { 755 grid.masonry({ 756 itemSelector: ".gallery-grid-item", 757 columnWidth: ".gallery-grid-item", 758 gutter : gutter 759 }); 760 761 jQuery(".grandconference-gallery-grid-content-wrapper.do-masonry .gallery-grid-item").each(function(index) { 762 setTimeout(function() { 763 jQuery(".do-masonry .gallery-grid-item").eq(index).addClass("is-showing"); 764 }, 100 * index); 765 }); 766 }); 767 768 jQuery(".grandconference-gallery-grid-content-wrapper.do-masonry img.lazy_masonry").each(function() { 769 var currentImg = jQuery(this); 770 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 771 772 var cols = grid.attr('data-cols'); 773 774 if(!grid.hasClass('has-no-space')) 775 { 776 var gutter = 40; 777 if(cols > 4) 778 { 779 gutter = 30; 780 } 781 } 782 else 783 { 784 gutter = 0; 785 } 786 787 jQuery(this).Lazy({ 788 onFinishedAll: function() { 789 grid.masonry({ 790 itemSelector: ".gallery-grid-item", 791 columnWidth: ".gallery-grid-item", 792 gutter : gutter 793 }); 794 }, 795 }); 796 }); 797 }); 798 }); 799 } ); 800 //End execute javascript for gallery masonry 801 802 //Start execute javascript for gallery masonry 803 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-gallery-proofing.default', function( $scope ) { 804 jQuery(function( $ ) { 805 jQuery(".grandconference-gallery-grid-content-wrapper.do-masonry.proofing-gallery").each(function() { 806 var grid = jQuery(this); 807 var cols = grid.attr('data-cols'); 808 809 if(!grid.hasClass('has-no-space')) 810 { 811 var gutter = 30; 812 if(cols > 4) 813 { 814 gutter = 20; 815 } 816 } 817 else 818 { 819 gutter = 0; 820 } 821 822 grid.imagesLoaded(function() { 823 grid.masonry({ 824 itemSelector: ".gallery-grid-item", 825 columnWidth: ".gallery-grid-item", 826 gutter : gutter 827 }); 828 829 jQuery(".grandconference-gallery-grid-content-wrapper.do-masonry .gallery-grid-item").each(function(index) { 830 setTimeout(function() { 831 jQuery(".do-masonry .gallery-grid-item").eq(index).addClass("is-showing"); 832 }, 100 * index); 833 }); 834 }); 835 836 jQuery(".grandconference-gallery-grid-content-wrapper.do-masonry img.lazy_masonry").each(function() { 837 var currentImg = jQuery(this); 838 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 839 840 var cols = grid.attr('data-cols'); 841 842 if(!grid.hasClass('has-no-space')) 843 { 844 var gutter = 40; 845 if(cols > 4) 846 { 847 gutter = 30; 848 } 849 } 850 else 851 { 852 gutter = 0; 853 } 854 855 jQuery(this).Lazy({ 856 onFinishedAll: function() { 857 grid.masonry({ 858 itemSelector: ".gallery-grid-item", 859 columnWidth: ".gallery-grid-item", 860 gutter : gutter 861 }); 862 }, 863 }); 864 }); 865 866 jQuery(document).ajaxStart(function() { 867 jQuery('#gallery_proofing_status').val(1); 868 }); 869 870 jQuery(document).ajaxStop(function() { 871 jQuery('#gallery_proofing_status').val(0); 872 }); 873 874 var galleryID = grid.attr('data-gallery-id'); 875 var WPonce = jQuery('#themegoods_security_'+galleryID).val(); 876 877 var containderDiv = jQuery('#gallery-proofing-container-'+galleryID); 878 var selectedClass = ""; 879 880 containderDiv.find(".filter-tag-btn").on('click', function(){ 881 containderDiv.find(".filter-tag-btn").removeClass("active"); 882 jQuery(this).addClass("active"); 883 selectedClass = jQuery(this).attr("data-rel"); 884 885 grid.fadeTo(100, 0);
886 grid.find(".gallery-grid-item").css({ 887 opacity: 0, 888 display: 'none', 889 transform: 'scale(0.0)' 890 }); 891 grid.find(".gallery-grid-item").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 892 893 setTimeout(function() { 894 jQuery("."+selectedClass).fadeIn().addClass('scale-anm'); 895 896 jQuery("."+selectedClass).css({ 897 opacity: 1, 898 display: 'block', 899 transform: 'scale(1,1)' 900 }); 901 902 grid.masonry('destroy'); 903 var $grid = grid.masonry({ 904 itemSelector: ".gallery-grid-item.scale-anm", 905 columnWidth: ".gallery-grid-item.scale-anm", 906 gutter : gutter 907 }); 908 909 $grid.masonry('reloadItems'); 910 911 setTimeout(function() { 912 grid.fadeTo(300, 1); 913 }, 500); 914 915 }, 300); 916 }); 917 918 grid.find('.gallery-grid-approve').on('click', function(){ 919 var imgID = jQuery(this).attr('data-image-id'); 920 var mark = jQuery(this); 921 var markParent = mark.parent('.gallery-grid-actions').parent('.gallery-grid-item'); 922 //console.log(markParent); 923 mark.addClass('disabled'); 924 925 if(jQuery('#gallery_proofing_status').val() == 0) 926 { 927 jQuery.ajax({ 928 url: tgAjax.ajaxurl, 929 type:'POST', 930 data: 'action=grandconference_image_proofing&method=approve&gallery_id='+galleryID+'&image_id='+imgID+'&themegoods_security='+WPonce, 931 error: function (xhr, ajaxOptions, thrownError) { 932 console.log(thrownError); 933 }, 934 success:function(results) { 935 mark.addClass('hidden'); 936 mark.removeClass('disabled'); 937 markParent.addClass('approve'); 938 markParent.removeClass('unapprove'); 939 jQuery('#unapprove_'+imgID).removeClass('hidden'); 940 941 //console.log(results); 942 } 943 }); 944 } 945 }); 946 947 grid.find('.gallery-grid-unapprove').on('click', function(){ 948 var imgID = jQuery(this).attr('data-image-id'); 949 var mark = jQuery(this); 950 var markParent = mark.parent('.gallery-grid-actions').parent('.gallery-grid-item'); 951 //console.log(markParent); 952 mark.addClass('disabled'); 953 954 if(jQuery('#gallery_proofing_status').val() == 0) 955 { 956 jQuery.ajax({ 957 url: tgAjax.ajaxurl, 958 type:'POST', 959 data: 'action=grandconference_image_proofing&method=unapprove&gallery_id='+galleryID+'&image_id='+imgID+'&themegoods_security='+WPonce, 960 error: function (xhr, ajaxOptions, thrownError) { 961 console.log(thrownError); 962 }, 963 success:function(results) { 964 mark.addClass('hidden'); 965 mark.removeClass('disabled'); 966 markParent.addClass('unapprove'); 967 markParent.removeClass('approve'); 968 jQuery('#approve_'+imgID).removeClass('hidden'); 969 970 //console.log(results); 971 } 972 }); 973 } 974 }); 975 }); 976 }); 977 } ); 978 //End execute javascript for gallery proofing 979 980 //Start execute javascript for gallery justified 981 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-gallery-justified.default', function( $scope ) { 982 jQuery(function( $ ) { 983 jQuery("img.lazy").each(function() { 984 var currentImg = jQuery(this); 985 986 jQuery(this).Lazy({ 987 onFinishedAll: function() { 988 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 989 } 990 }); 991 }); 992 993 jQuery(".grandconference-gallery-grid-content-wrapper.do-justified").each(function() { 994 var grid = jQuery(this); 995 var rowHeight = grid.attr('data-row_height'); 996 var margin = grid.attr('data-margin'); 997 var justifyLastRow = grid.attr('data-justify_last_row'); 998 var justifyLastRowStr = 'nojustify'; 999 if(justifyLastRow == 'yes') 1000 { 1001 justifyLastRowStr = 'justify'; 1002 } 1003 1004 grid.imagesLoaded(function() { 1005 grid.justifiedGallery({ 1006 rowHeight: rowHeight, 1007 margins: margin, 1008 lastRow: justifyLastRowStr 1009 }); 1010 }); 1011 }); 1012 }); 1013 } ); 1014 //End execute javascript for gallery justified 1015 1016 //Start execute javascript for gallery fullscreen 1017 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-gallery-fullscreen.default', function( $scope ) { 1018 jQuery(function( $ ) { 1019 var slideshow = jQuery('.fullscreen-gallery'); 1020 var autoPlay = slideshow.attr('data-autoplay'); 1021 var autoPlayArr = false;
1022 if (typeof autoPlay != "undefined"){ 1023 autoPlayArr = { 1024 delay: autoPlay 1025 }; 1026 } 1027 1028 var effect = slideshow.attr('data-effect'); 1029 if (typeof effect == "undefined"){ 1030 effect = 'slide'; 1031 } 1032 1033 var speed = slideshow.attr('data-speed'); 1034 if (typeof speed == "undefined"){ 1035 speed = 400; 1036 } 1037 1038 var galleryTop = new Swiper('.fullscreen-gallery', { 1039 navigation: { 1040 nextEl: '.swiper-button-next', 1041 prevEl: '.swiper-button-prev', 1042 }, 1043 spaceBetween: 0, 1044 keyboardControl: true, 1045 speed: parseInt(speed), 1046 loop: true, 1047 effect: effect, 1048 grabCursor: true, 1049 preloadImages: false, 1050 lazy: { 1051 loadPrevNext: true, 1052 }, 1053 autoplay: autoPlayArr 1054 }); 1055 }); 1056 } ); 1057 //End execute javascript for gallery fullscreen 1058 1059 //Start execute javascript for vertical parallax 1060 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-vertical-parallax.default', function( $scope ) { 1061 jQuery(function( $ ) { 1062 jQuery('body').addClass('elementor-fullscreen'); 1063 1064 var ticking = false; 1065 var isFirefox = /Firefox/i.test(navigator.userAgent); 1066 var isIe = /MSIE/i.test(navigator.userAgent) || /Trident.*rv\:11\./i.test(navigator.userAgent); 1067 var scrollSensitivitySetting = 30; 1068 var slideDurationSetting =800; 1069 var currentSlideNumber = 0; 1070 var totalSlideNumber = jQuery('.parallax-slide-background').length; 1071 function parallaxScroll(evt) { 1072 if (isFirefox) { 1073 delta = evt.detail * -120; 1074 } else if (isIe) { 1075 delta = -evt.deltaY; 1076 } else { 1077 delta = evt.wheelDelta; 1078 } 1079 if (ticking != true) { 1080 if (delta <= -scrollSensitivitySetting) { 1081 ticking = true; 1082 if (currentSlideNumber !== totalSlideNumber - 1) { 1083 currentSlideNumber++; 1084 nextItem(); 1085 } 1086 slideDurationTimeout(slideDurationSetting); 1087 } 1088 if (delta >= scrollSensitivitySetting) { 1089 ticking = true; 1090 if (currentSlideNumber !== 0) { 1091 currentSlideNumber--; 1092 } 1093 previousItem(); 1094 slideDurationTimeout(slideDurationSetting); 1095 } 1096 } 1097 } 1098 function slideDurationTimeout(slideDuration) { 1099 setTimeout(function () { 1100 ticking = false; 1101 }, slideDuration); 1102 } 1103 1104 var mousewheelEvent = isFirefox ? 'DOMMouseScroll' : 'wheel'; 1105 window.addEventListener(mousewheelEvent, parallaxScroll, false); 1106 function nextItem() { 1107 var $previousSlide = jQuery('.parallax-slide-background').eq(currentSlideNumber - 1); 1108 $previousSlide.css('transform', 'translate3d(0,-130vh,0)').find('.parallax-slide-content-wrapper').css('transform', 'translateY(40vh)'); 1109 currentSlideTransition(); 1110 } 1111 function previousItem() { 1112 var $previousSlide = jQuery('.parallax-slide-background').eq(currentSlideNumber + 1); 1113 $previousSlide.css('transform', 'translate3d(0,30vh,0)').find('.parallax-slide-content-wrapper').css('transform', 'translateY(30vh)'); 1114 currentSlideTransition(); 1115 } 1116 function currentSlideTransition() { 1117 var $currentSlide = jQuery('.parallax-slide-background').eq(currentSlideNumber); 1118 $currentSlide.css('transform', 'translate3d(0,-15vh,0)').find('.parallax-slide-content-wrapper').css('transform', 'translateY(15vh)'); 1119 ; 1120 } 1121 1122 jQuery('body').on('touchmove', function(e){ 1123 e.preventDefault(); 1124 e.stopPropagation(); 1125 1126 return false; 1127 }); 1128 1129 var ts; 1130 jQuery(document).bind('touchstart', function (e){ 1131 ts = e.originalEvent.touches[0].clientY; 1132 }); 1133 1134 jQuery(document).bind('touchend', function (e){ 1135 var te = e.originalEvent.changedTouches[0].clientY; 1136 if(ts > te+5){ 1137 if (currentSlideNumber !== totalSlideNumber - 1) { 1138 currentSlideNumber++; 1139 nextItem(); 1140 } 1141 slideDurationTimeout(slideDurationSetting); 1142 }else if(ts < te-5){ 1143 if (currentSlideNumber !== 0) { 1144 currentSlideNumber--; 1145 } 1146 previousItem(); 1147 slideDurationTimeout(slideDurationSetting); 1148 } 1149 }); 1150 }); 1151 } ); 1152 //End execute javascript for gallery vertical parallax 1153 1154 //Start execute javascript for gallery horizontal 1155 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-gallery-horizontal.default', function( $scope ) { 1156 jQuery('body').addClass('gallery-horizontal'); 1157 1158 jQuery(".horizontal-gallery-wrapper").each(function() { 1159 var $carousel = jQuery(this); 1160 var timer = $carousel.attr('data-autoplay'); 1161 if(timer == 0) 1162 { 1163 timer = false;
1164 } 1165 1166 var loop = $carousel.attr('data-loop'); 1167 var navigation = $carousel.attr('data-navigation'); 1168 if(navigation == 0) 1169 { 1170 navigation = false; 1171 } 1172 1173 var pagination = $carousel.attr('data-pagination'); 1174 if(pagination == 0) 1175 { 1176 pagination = false; 1177 } 1178 1179 $carousel.flickity({ 1180 cellSelector: '.horizontal-gallery-cell', 1181 percentPosition: false, 1182 imagesLoaded: true, 1183 selectedAttraction: 0.01, 1184 friction: 0.2, 1185 lazyLoad: 5, 1186 pauseAutoPlayOnHover: true, 1187 autoPlay: parseInt(timer), 1188 contain: true, 1189 prevNextButtons: navigation, 1190 pageDots: pagination 1191 }); 1192 1193 var parallax = $carousel.attr('data-parallax'); 1194 if(parallax == 1) 1195 { 1196 var $imgs = $carousel.find('.horizontal-gallery-cell img'); 1197 1198 var docStyle = document.documentElement.style; 1199 var transformProp = typeof docStyle.transform == 'string' ? 1200 'transform' : 'WebkitTransform'; 1201 1202 var flkty = $carousel.data('flickity'); 1203 1204 $carousel.on( 'scroll.flickity', function() { 1205 flkty.slides.forEach( function( slide, i ) { 1206 var img = $imgs[i]; 1207 var x = ( slide.target + flkty.x ) * -1/3; 1208 img.style[ transformProp ] = 'translateX(' + x + 'px)'; 1209 }); 1210 }); 1211 } 1212 1213 var fullscreen = $carousel.attr('data-fullscreen'); 1214 if(fullscreen != 0) 1215 { 1216 jQuery('body').addClass('elementor-fullscreen'); 1217 1218 //Get menu element height 1219 var menuHeight = parseInt(jQuery('#wrapper').css('paddingTop')); 1220 var documentHeight = jQuery(window).innerHeight(); 1221 var sliderHeight = parseInt(documentHeight - menuHeight); 1222 1223 $carousel.find('.horizontal-gallery-cell').css('height', sliderHeight+'px'); 1224 $carousel.find('.horizontal-gallery-cell-img').css('height', sliderHeight+'px'); 1225 $carousel.flickity('resize'); 1226 1227 jQuery( window ).resize(function() { 1228 var menuHeight = parseInt(jQuery('#wrapper').css('paddingTop')); 1229 var documentHeight = jQuery(window).innerHeight(); 1230 var sliderHeight = parseInt(documentHeight - menuHeight); 1231 1232 $carousel.find('.horizontal-gallery-cell').css('height', sliderHeight+'px'); 1233 $carousel.find('.horizontal-gallery-cell-img').css('height', sliderHeight+'px'); 1234 $carousel.flickity('resize'); 1235 }); 1236 } 1237 }); 1238 } ); 1239 //End execute javascript for gallery horizontal 1240 1241 //Start execute javascript for slider horizontal 1242 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-horizontal.default', function( $scope ) { 1243 jQuery(".horizontal-slider-wrapper").each(function() { 1244 var $carousel = jQuery(this); 1245 var timer = $carousel.attr('data-autoplay'); 1246 if(timer == 0) 1247 { 1248 timer = false; 1249 } 1250 1251 var loop = $carousel.attr('data-loop'); 1252 var navigation = $carousel.attr('data-navigation'); 1253 if(navigation == 0) 1254 { 1255 navigation = false; 1256 } 1257 1258 var pagination = $carousel.attr('data-pagination'); 1259 if(pagination == 0) 1260 { 1261 pagination = false; 1262 } 1263 1264 var horizonSlider = $carousel.flickity({ 1265 percentPosition: false, 1266 imagesLoaded: true, 1267 pauseAutoPlayOnHover: true, 1268 autoPlay: parseInt(timer), 1269 contain: true, 1270 prevNextButtons: navigation, 1271 pageDots: pagination 1272 }); 1273 1274 var fullscreen = $carousel.attr('data-fullscreen'); 1275 if(fullscreen != 0) 1276 { 1277 jQuery('body').addClass('elementor-fullscreen'); 1278 1279 //Get menu element height 1280 var menuHeight = parseInt(jQuery('#wrapper').css('paddingTop')); 1281 var documentHeight = jQuery(window).innerHeight(); 1282 var sliderHeight = parseInt(documentHeight - menuHeight); 1283 1284 $carousel.find('.horizontal-slider-cell').css('height', sliderHeight+'px'); 1285 $carousel.flickity('resize'); 1286 1287 jQuery( window ).resize(function() { 1288 var menuHeight = parseInt(jQuery('#wrapper').css('paddingTop')); 1289 var documentHeight = jQuery(window).innerHeight(); 1290 var sliderHeight = parseInt(documentHeight - menuHeight); 1291 1292 $carousel.find('.horizontal-slider-cell').css('height', sliderHeight+'px'); 1293 $carousel.flickity('resize'); 1294 }); 1295 } 1296 }); 1297 } ); 1298 //End execute javascript for slider horizontal 1299 1300 //Start execute javascript for slider animated frame 1301 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-animated-frame.default', function( $scope ) { 1302 function debounce(func, wait, immediate) { 1303 var timeout; 1304 return function() { 1305 var context = this, args = arguments; 1306 var later = function() { 1307 timeout = null;
1308 if (!immediate) func.apply(context, args); 1309 }; 1310 var callNow = immediate && !timeout; 1311 clearTimeout(timeout); 1312 timeout = setTimeout(later, wait); 1313 if (callNow) func.apply(context, args); 1314 }; 1315 }; 1316 1317 class Slideshow { 1318 constructor(el) { 1319 this.DOM = {}; 1320 this.DOM.el = el; 1321 this.settings = { 1322 animation: { 1323 slides: { 1324 duration: 600, 1325 easing: 'easeOutQuint' 1326 }, 1327 shape: { 1328 duration: 300, 1329 easing: {in: 'easeOutQuint', out: 'easeOutQuad'} 1330 } 1331 }, 1332 frameFill: slideshowFrameColor 1333 } 1334 this.init(); 1335 } 1336 init() { 1337 if(this.DOM.el) 1338 { 1339 this.DOM.slides = Array.from(this.DOM.el.querySelectorAll('.slides > .slide')); 1340 this.slidesTotal = this.DOM.slides.length; 1341 this.DOM.nav = this.DOM.el.querySelector('.slidenav'); 1342 this.DOM.nextCtrl = this.DOM.nav.querySelector('.slidenav-item--next'); 1343 this.DOM.prevCtrl = this.DOM.nav.querySelector('.slidenav-item--prev'); 1344 this.current = 0; 1345 this.createFrame(); 1346 this.initEvents(); 1347 } 1348 } 1349 createFrame() { 1350 this.rect = this.DOM.el.getBoundingClientRect(); 1351 this.frameSize = this.rect.width/12; 1352 this.paths = { 1353 initial: this.calculatePath('initial'), 1354 final: this.calculatePath('final') 1355 }; 1356 this.DOM.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); 1357 this.DOM.svg.setAttribute('class', 'shape'); 1358 this.DOM.svg.setAttribute('width','100%'); 1359 this.DOM.svg.setAttribute('height','100%'); 1360 this.DOM.svg.setAttribute('viewbox',`0 0 ${this.rect.width} ${this.rect.height}`); 1361 this.DOM.svg.innerHTML = `<path fill="${this.settings.frameFill}" d="${this.paths.initial}"/>`; 1362 this.DOM.el.insertBefore(this.DOM.svg, this.DOM.nav); 1363 this.DOM.shape = this.DOM.svg.querySelector('path'); 1364 } 1365 updateFrame() { 1366 this.paths.initial = this.calculatePath('initial'); 1367 this.paths.final = this.calculatePath('final'); 1368 this.DOM.svg.setAttribute('viewbox',`0 0 ${this.rect.width} ${this.rect.height}`); 1369 this.DOM.shape.setAttribute('d', this.isAnimating ? this.paths.final : this.paths.initial); 1370 } 1371 calculatePath(path = 'initial') { 1372 return path === 'initial' ? 1373 `M 0,0 0,${this.rect.height} ${this.rect.width},${this.rect.height} ${this.rect.width},0 0,0 Z M 0,0 ${this.rect.width},0 ${this.rect.width},${this.rect.height} 0,${this.rect.height} Z` : 1374 `M 0,0 0,${this.rect.height} ${this.rect.width},${this.rect.height} ${this.rect.width},0 0,0 Z M ${this.frameSize},${this.frameSize} ${this.rect.width-this.frameSize},${this.frameSize} ${this.rect.width-this.frameSize},${this.rect.height-this.frameSize} ${this.frameSize},${this.rect.height-this.frameSize} Z`; 1375 } 1376 initEvents() { 1377 this.DOM.nextCtrl.addEventListener('click', () => this.navigate('next')); 1378 this.DOM.prevCtrl.addEventListener('click', () => this.navigate('prev')); 1379 1380 window.addEventListener('resize', debounce(() => { 1381 this.rect = this.DOM.el.getBoundingClientRect(); 1382 this.updateFrame(); 1383 }, 20)); 1384 1385 document.addEventListener('keydown', (ev) => { 1386 const keyCode = ev.keyCode || ev.which; 1387 if ( keyCode === 37 ) { 1388 this.navigate('prev'); 1389 } 1390 else if ( keyCode === 39 ) { 1391 this.navigate('next'); 1392 } 1393 }); 1394 } 1395 navigate(dir = 'next') { 1396 if ( this.isAnimating ) return false;
1397 this.isAnimating = true; 1398 1399 const animateShapeIn = anime({ 1400 targets: this.DOM.shape, 1401 duration: this.settings.animation.shape.duration, 1402 easing: this.settings.animation.shape.easing.in, 1403 d: this.paths.final 1404 }); 1405 1406 const animateSlides = () => { 1407 return new Promise((resolve, reject) => { 1408 const currentSlide = this.DOM.slides[this.current]; 1409 anime({ 1410 targets: currentSlide, 1411 duration: this.settings.animation.slides.duration, 1412 easing: this.settings.animation.slides.easing, 1413 translateX: dir === 'next' ? -1*this.rect.width : this.rect.width, 1414 complete: () => { 1415 currentSlide.classList.remove('slide-current'); 1416 resolve(); 1417 } 1418 }); 1419 1420 this.current = dir === 'next' ? 1421 this.current < this.slidesTotal-1 ? this.current + 1 : 0 : 1422 this.current > 0 ? this.current - 1 : this.slidesTotal-1; 1423 1424 const newSlide = this.DOM.slides[this.current]; 1425 newSlide.classList.add('slide-current'); 1426 anime({ 1427 targets: newSlide, 1428 duration: this.settings.animation.slides.duration, 1429 easing: this.settings.animation.slides.easing, 1430 translateX: [dir === 'next' ? this.rect.width : -1*this.rect.width,0] 1431 }); 1432 1433 const newSlideImg = newSlide.querySelector('.slide-img'); 1434 anime.remove(newSlideImg); 1435 anime({ 1436 targets: newSlideImg, 1437 duration: this.settings.animation.slides.duration*4, 1438 easing: this.settings.animation.slides.easing, 1439 translateX: [dir === 'next' ? 200 : -200, 0] 1440 }); 1441 1442 anime({ 1443 targets: [newSlide.querySelector('.slide-title'), newSlide.querySelector('.slide-desc'), newSlide.querySelector('.slide-link')], 1444 duration: this.settings.animation.slides.duration*2, 1445 easing: this.settings.animation.slides.easing, 1446 delay: (t,i) => i*100+100, 1447 translateX: [dir === 'next' ? 300 : -300,0], 1448 opacity: [0,1] 1449 }); 1450 }); 1451 }; 1452 1453 const animateShapeOut = () => { 1454 anime({ 1455 targets: this.DOM.shape, 1456 duration: this.settings.animation.shape.duration, 1457 delay: 150, 1458 easing: this.settings.animation.shape.easing.out, 1459 d: this.paths.initial, 1460 complete: () => this.isAnimating = false 1461 }); 1462 } 1463 1464 animateShapeIn.finished.then(animateSlides).then(animateShapeOut); 1465 } 1466 }; 1467 1468 var slideshow = document.querySelector('.slideshow'); 1469 if(slideshow) 1470 { 1471 var slideshowFrameColor = slideshow.getAttribute('data-background'); 1472 new Slideshow(slideshow); 1473 imagesLoaded('.slide-img', { background: true }); 1474 } 1475 } ); 1476 //End execute javascript for slider animated frame 1477 1478 //Start execute javascript for slider 3d room 1479 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-room.default', function( $scope ) { 1480 jQuery('body').addClass('elementor-fullscreen'); 1481 jQuery('body').addClass('room'); 1482 1483 function debounce(func, wait, immediate) { 1484 var timeout; 1485 return function() { 1486 var context = this, args = arguments; 1487 var later = function() { 1488 timeout = null;
1489 if (!immediate) func.apply(context, args); 1490 }; 1491 var callNow = immediate && !timeout; 1492 clearTimeout(timeout); 1493 timeout = setTimeout(later, wait); 1494 if (callNow) func.apply(context, args); 1495 }; 1496 }; 1497 1498 function getMousePos(e) { 1499 var posx = 0; 1500 var posy = 0; 1501 if (!e) var e = window.event; 1502 if (e.pageX || e.pageY) { 1503 posx = e.pageX; 1504 posy = e.pageY; 1505 } 1506 else if (e.clientX || e.clientY) { 1507 posx = e.clientX + document.body.scrollLeft 1508 + document.documentElement.scrollLeft; 1509 posy = e.clientY + document.body.scrollTop 1510 + document.documentElement.scrollTop; 1511 } 1512 return { 1513 x : posx, 1514 y : posy 1515 } 1516 } 1517 1518 var DOM = {}; 1519 // The loader. 1520 DOM.loader = document.querySelector('.room-slider-wrapper .overlay--loader'); 1521 // The room wrapper. This will be the element to be transformed in order to move around. 1522 DOM.scroller = document.querySelector('.room-slider-wrapper .container > .scroller'); 1523 // The rooms. 1524 if (DOM.scroller) 1525 { 1526 DOM.rooms = [].slice.call(DOM.scroller.querySelectorAll('.room')); 1527 } 1528 else 1529 { 1530 DOM.rooms = {}; 1531 } 1532 1533 // The content wrapper. 1534 DOM.content = document.querySelector('.room-slider-wrapper .content'); 1535 if (DOM.content) 1536 { 1537 // Rooms navigation controls. 1538 DOM.nav = { 1539 leftCtrl : DOM.content.querySelector('.room-slider-wrapper nav > .btn--nav-left'), 1540 rightCtrl : DOM.content.querySelector('.room-slider-wrapper nav > .btn--nav-right') 1541 }; 1542 // Content slides. 1543 DOM.slides = [].slice.call(DOM.content.querySelectorAll('.slides > .slide')); 1544 } 1545 1546 var currentRoom = 0, 1547 // Total number of rooms. 1548 totalRooms = DOM.rooms.length, 1549 // Initial transform. 1550 initTransform = { translateX : 0, translateY : 0, translateZ : '500px', rotateX : 0, rotateY : 0, rotateZ : 0 }, 1551 // Reset transform. 1552 resetTransform = { translateX : 0, translateY : 0, translateZ : 0, rotateX : 0, rotateY : 0, rotateZ : 0 }, 1553 // View from top. 1554 menuTransform = { translateX : 0, translateY : '150%', translateZ : 0, rotateX : '15deg', rotateY : 0, rotateZ : 0 }, 1555 menuTransform = { translateX : 0, translateY : '50%', translateZ : 0, rotateX : '-10deg', rotateY : 0, rotateZ : 0 }, 1556 // Info view transform. 1557 infoTransform = { translateX : 0, translateY : 0, translateZ : '200px', rotateX : '2deg', rotateY : 0, rotateZ : '4deg' }, 1558 // Room initial moving transition. 1559 initTransition = { speed: '0.9s', easing: 'ease' }, 1560 // Room moving transition. 1561 roomTransition = { speed: '0.4s', easing: 'ease' }, 1562 // View from top transition. 1563 menuTransition = { speed: '1.5s', easing: 'cubic-bezier(0.2,1,0.3,1)' }, 1564 // Info transition. 1565 infoTransition = { speed: '15s', easing: 'cubic-bezier(0.3,1,0.3,1)' }, 1566 // Tilt transition 1567 tiltTransition = { speed: '0.2s', easing: 'ease-out' }, 1568 tilt = false, 1569 // How much to rotate when the mouse moves. 1570 tiltRotation = { 1571 rotateX : 1, // a relative rotation of -1deg to 1deg on the x-axis 1572 rotateY : -3 // a relative rotation of -3deg to 3deg on the y-axis 1573 }, 1574 // Transition end event handler. 1575 onEndTransition = function(el, callback) { 1576 var onEndCallbackFn = function(ev) { 1577 this.removeEventListener('transitionend', onEndCallbackFn); 1578 if( callback && typeof callback === 'function' ) { callback.call(); } 1579 }; 1580 el.addEventListener('transitionend', onEndCallbackFn); 1581 },
1582 // Window sizes. 1583 win = {width: window.innerWidth, height: window.innerHeight}, 1584 // Check if moving inside the room and check if navigating. 1585 isMoving, isNavigating; 1586 1587 function init() { 1588 // Move into the current room. 1589 move({transition: initTransition, transform: initTransform}).then(function() { 1590 initTilt(); 1591 }); 1592 // Animate the current slide in. 1593 showSlide(100); 1594 // Init/Bind events. 1595 initEvents(); 1596 } 1597 1598 function initTilt() { 1599 applyRoomTransition(tiltTransition); 1600 tilt = true; 1601 } 1602 1603 function removeTilt() { 1604 tilt = false; 1605 } 1606 1607 function move(opts) { 1608 return new Promise(function(resolve, reject) { 1609 if( isMoving && !opts.stopTransition ) { 1610 return false; 1611 } 1612 isMoving = true; 1613 1614 if( opts.transition ) { 1615 applyRoomTransition(opts.transition); 1616 } 1617 1618 if( opts.transform ) { 1619 applyRoomTransform(opts.transform); 1620 var onEndFn = function() { 1621 isMoving = false; 1622 resolve(); 1623 }; 1624 onEndTransition(DOM.scroller, onEndFn); 1625 } 1626 else { 1627 resolve(); 1628 } 1629 1630 }); 1631 } 1632 1633 function initEvents() { 1634 // Mousemove event / Tilt functionality. 1635 var onMouseMoveFn = function(ev) { 1636 requestAnimationFrame(function() { 1637 if( !tilt ) return false; 1638 1639 1640 var mousepos = getMousePos(ev), 1641 // transform values 1642 rotX = tiltRotation.rotateX ? initTransform.rotateX - (2 * tiltRotation.rotateX / win.height * mousepos.y - tiltRotation.rotateX) : 0, 1643 rotY = tiltRotation.rotateY ? initTransform.rotateY - (2 * tiltRotation.rotateY / win.width * mousepos.x - tiltRotation.rotateY) : 0; 1644 1645 // apply transform 1646 applyRoomTransform({ 1647 'translateX' : initTransform.translateX, 1648 'translateY' : initTransform.translateY, 1649 'translateZ' : initTransform.translateZ, 1650 'rotateX' : rotX + 'deg', 1651 'rotateY' : rotY + 'deg', 1652 'rotateZ' : initTransform.rotateZ 1653 }); 1654 }); 1655 }, 1656 // Window resize. 1657 debounceResizeFn = debounce(function() { 1658 win = {width: window.innerWidth, height: window.innerHeight}; 1659 }, 10); 1660 1661 document.addEventListener('mousemove', onMouseMoveFn); 1662 window.addEventListener('resize', debounceResizeFn); 1663 1664 // Room navigation. 1665 var onNavigatePrevFn = function() { navigate('prev'); }, 1666 onNavigateNextFn = function() { navigate('next'); }; 1667 1668 if(DOM.nav.leftCtrl && DOM.nav.rightCtrl) 1669 { 1670 DOM.nav.leftCtrl.addEventListener('click', onNavigatePrevFn); 1671 DOM.nav.rightCtrl.addEventListener('click', onNavigateNextFn); 1672 } 1673 } 1674 1675 function applyRoomTransform(transform) { 1676 DOM.scroller.style.transform = 'translate3d(' + transform.translateX + ', ' + transform.translateY + ', ' + transform.translateZ + ') ' + 1677 'rotate3d(1,0,0,' + transform.rotateX + ') rotate3d(0,1,0,' + transform.rotateY + ') rotate3d(0,0,1,' + transform.rotateZ + ')'; 1678 } 1679 1680 function applyRoomTransition(transition) { 1681 DOM.scroller.style.transition = transition === 'none' ? transition : 'transform ' + transition.speed + ' ' + transition.easing; 1682 } 1683 1684 function toggleSlide(dir, delay) { 1685 var slide = DOM.slides[currentRoom], 1686 // Slide's name. 1687 name = slide.querySelector('.slide-name'), 1688 // Slide's title and date elements. 1689 title = slide.querySelector('.slide-title'), 1690 date = slide.querySelector('.slide-date'); 1691 1692 delay = delay !== undefined ? delay : 0; 1693 1694 anime.remove([name, title, date]); 1695 var animeOpts = { 1696 targets: [name, title, date], 1697 duration: dir === 'in' ? 400 : 400, 1698 //delay: 0,//dir === 'in' ? 150 : 0, 1699 delay: function(t, i, c) { 1700 return delay + 75+i*75; 1701 }, 1702 easing: [0.25,0.1,0.25,1], 1703 opacity: { 1704 value: dir === 'in' ? [0,1] : [1,0], 1705 duration: dir === 'in' ? 550 : 250 1706 }, 1707 translateY: function(t, i) { 1708 return dir === 'in' ? [150,0] : [0,-150]; 1709 } 1710 }; 1711 if( dir === 'in' ) { 1712 animeOpts.begin = function() { 1713 slide.classList.add('slide-current'); 1714 }; 1715 } 1716 else { 1717 animeOpts.complete = function() { 1718 slide.classList.remove('slide-current'); 1719 }; 1720 } 1721 anime(animeOpts); 1722 } 1723 1724 function showSlide(delay) { 1725 toggleSlide('in', delay); 1726 } 1727 1728 function hideSlide(delay) { 1729 toggleSlide('out', delay); 1730 } 1731 1732 function navigate(dir) { 1733 if( isMoving || isNavigating ) { 1734 return false;
1735 } 1736 isNavigating = true; 1737 1738 var room = DOM.rooms[currentRoom]; 1739 1740 // Remove tilt. 1741 removeTilt(); 1742 // Animate the current slide out - animate the name, title and date elements. 1743 hideSlide(); 1744 1745 // Update currentRoom. 1746 if( dir === 'next' ) { 1747 currentRoom = currentRoom < totalRooms - 1 ? currentRoom + 1 : 0; 1748 } 1749 else { 1750 currentRoom = currentRoom > 0 ? currentRoom - 1 : totalRooms - 1; 1751 } 1752 1753 // Position the next room. 1754 var nextRoom = DOM.rooms[currentRoom]; 1755 nextRoom.style.transform = 'translate3d(' + (dir === 'next' ? 100 : -100) + '%,0,0) translate3d(' + (dir === 'next' ? 1 : -1) + 'px,0,0)' ; 1756 nextRoom.style.opacity = 1; 1757 1758 // Move back. 1759 move({transition: roomTransition, transform: resetTransform}) 1760 .then(function() { 1761 // Move left or right. 1762 return move({transform: { translateX : (dir === 'next' ? -100 : 100) + '%', translateY : 0, translateZ : 0, rotateX : 0, rotateY : 0, rotateZ : 0 }}); 1763 }) 1764 .then(function() { 1765 // Update current room class. 1766 nextRoom.classList.add('room--current'); 1767 room.classList.remove('room--current'); 1768 room.style.opacity = 0; 1769 1770 // Show the next slide. 1771 showSlide(); 1772 1773 // Move into room. 1774 // Update final transform state: 1775 return move({transform: { translateX : (dir === 'next' ? -100 : 100) + '%', translateY : 0, translateZ : '500px', rotateX : 0, rotateY : 0, rotateZ : 0 }}); 1776 }) 1777 .then(function() { 1778 // Reset positions. 1779 applyRoomTransition('none'); 1780 nextRoom.style.transform = 'translate3d(0,0,0)'; 1781 applyRoomTransform(initTransform); 1782 1783 setTimeout(function() { 1784 initTilt(); 1785 }, 60); 1786 isNavigating = false; 1787 }); 1788 } 1789 1790 function addAdjacentRooms() { 1791 // Current room. 1792 var room = DOM.rooms[currentRoom], 1793 // Adjacent rooms. 1794 nextRoom = DOM.rooms[currentRoom < totalRooms - 1 ? currentRoom + 1 : 0], 1795 prevRoom = DOM.rooms[currentRoom > 0 ? currentRoom - 1 : totalRooms - 1]; 1796 1797 // Position the adjacent rooms. 1798 nextRoom.style.transform = 'translate3d(100%,0,0) translate3d(3px,0,0)'; 1799 nextRoom.style.opacity = 1; 1800 prevRoom.style.transform = 'translate3d(-100%,0,0) translate3d(-3px,0,0)'; 1801 prevRoom.style.opacity = 1; 1802 } 1803 1804 function removeAdjacentRooms() { 1805 // Current room. 1806 var room = DOM.rooms[currentRoom], 1807 // Adjacent rooms. 1808 nextRoom = DOM.rooms[currentRoom < totalRooms - 1 ? currentRoom + 1 : 0], 1809 prevRoom = DOM.rooms[currentRoom > 0 ? currentRoom - 1 : totalRooms - 1]; 1810 1811 // Position the adjacent rooms. 1812 nextRoom.style.transform = 'none'; 1813 nextRoom.style.opacity = 0; 1814 prevRoom.style.transform = 'none'; 1815 prevRoom.style.opacity = 0; 1816 } 1817 1818 // Preload all the images. 1819 if(DOM.scroller) 1820 { 1821 imagesLoaded(DOM.scroller, function() { 1822 var extradelay = 1000; 1823 // Slide out loader. 1824 anime({ 1825 targets: DOM.loader, 1826 duration: 600, 1827 easing: 'easeInOutCubic', 1828 delay: extradelay, 1829 translateY: '-100%', 1830 begin: function() { 1831 init(); 1832 }, 1833 complete: function() { 1834 DOM.loader.classList.remove('overlay--active'); 1835 } 1836 }); 1837 }); 1838 } 1839 } ); 1840 //End execute javascript for slider 3d room 1841 1842 1843 //Start execute javascript for slider multi layouts 1844 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-multi-layouts.default', function( $scope ) { 1845 document.documentElement.className = 'js'; 1846 1847 var slideshow = new MLSlideshow(document.querySelector('.slideshow')); 1848 1849 if(document.querySelector('#next-slide')) 1850 { 1851 document.querySelector('#next-slide').addEventListener('click', function() { 1852 slideshow.next(); 1853 }); 1854 } 1855 1856 if(document.querySelector('#prev-slide')) 1857 { 1858 document.querySelector('#prev-slide').addEventListener('click', function() { 1859 slideshow.prev(); 1860 }); 1861 } 1862 } ); 1863 //End execute javascript for slider multi layouts 1864 1865 //Start execute javascript for slider velo 1866 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-velo.default', function( $scope ) { 1867 jQuery('body').addClass('elementor-fullscreen'); 1868 1869 /** 1870 * Velocity Effects 1871 * 1872 * First, A few Registered effects for velocity's ui kit. 1873 * Actual slider stuff below 1874 */ 1875 1876 var scaleDownAmnt = 0.7;
1877 var boxShadowAmnt = '40px'; 1878 1879 $.Velocity.RegisterEffect("translateUp", { 1880 defaultDuration: 1, 1881 calls: [ 1882 [{ 1883 translateY: '-100%' 1884 }, 1] 1885 ] 1886 }); 1887 $.Velocity.RegisterEffect("translateDown", { 1888 defaultDuration: 1, 1889 calls: [ 1890 [{ 1891 translateY: '100%' 1892 }, 1] 1893 ] 1894 }); 1895 $.Velocity.RegisterEffect("translateNone", { 1896 defaultDuration: 1, 1897 calls: [ 1898 [{ 1899 translateY: '0', 1900 opacity: '1', 1901 scale: '1', 1902 1903 }, 1] 1904 ] 1905 }); 1906 //scale down 1907 $.Velocity.RegisterEffect("scaleDown", { 1908 defaultDuration: 1, 1909 calls: [ 1910 [{ 1911 opacity: '0', 1912 scale: '0.7', 1913 1914 }, 1] 1915 ] 1916 }); 1917 1918 //gallery 1919 $.Velocity.RegisterEffect("scaleDown.moveUp", { 1920 defaultDuration: 1, 1921 calls: [ 1922 [{ 1923 translateY: '0%', 1924 scale: scaleDownAmnt, 1925 1926 }, 0.20], 1927 [{ 1928 translateY: '-100%' 1929 }, 0.60], 1930 [{ 1931 translateY: '-100%', 1932 scale: '1', 1933 // boxShadowBlur: '0' 1934 }, 0.20] 1935 ] 1936 }); 1937 $.Velocity.RegisterEffect("scaleDown.moveUp.scroll", { 1938 defaultDuration: 1, 1939 calls: [ 1940 [{ 1941 translateY: '-100%', 1942 scale: scaleDownAmnt, 1943 1944 }, 0.60], 1945 [{ 1946 translateY: '-100%', 1947 scale: '1', 1948 // boxShadowBlur: '0' 1949 }, 0.40] 1950 ] 1951 }); 1952 $.Velocity.RegisterEffect("scaleUp.moveUp", { 1953 defaultDuration: 1, 1954 calls: [ 1955 [{ 1956 translateY: '90%', 1957 scale: scaleDownAmnt, 1958 // boxShadowBlur: boxShadowAmnt 1959 }, 0.20], 1960 [{ 1961 translateY: '0%' 1962 }, 0.60], 1963 [{ 1964 translateY: '0%', 1965 scale: '1', 1966 // boxShadowBlur: '0' 1967 }, 0.20] 1968 ] 1969 }); 1970 $.Velocity.RegisterEffect("scaleUp.moveUp.scroll", { 1971 defaultDuration: 1, 1972 calls: [ 1973 [{ 1974 translateY: '0%', 1975 scale: scaleDownAmnt, 1976 // boxShadowBlur: boxShadowAmnt 1977 }, 0.60], 1978 [{ 1979 translateY: '0%', 1980 scale: '1', 1981 // boxShadowBlur: '0' 1982 }, 0.40] 1983 ] 1984 }); 1985 $.Velocity.RegisterEffect("scaleDown.moveDown", { 1986 defaultDuration: 1, 1987 calls: [ 1988 [{ 1989 translateY: '0%', 1990 scale: scaleDownAmnt, 1991 // boxShadowBlur: boxShadowAmnt 1992 }, 0.20], 1993 [{ 1994 translateY: '100%' 1995 }, 0.60], 1996 [{ 1997 translateY: '100%', 1998 scale: '1', 1999 // boxShadowBlur: '0' 2000 }, 0.20] 2001 ] 2002 }); 2003 $.Velocity.RegisterEffect("scaleDown.moveDown.scroll", { 2004 defaultDuration: 1, 2005 calls: [ 2006 [{ 2007 2008 }, 0.60], 2009 [{ 2010 translateY: '100%', 2011 scale: '1', 2012 // boxShadowBlur: '0' 2013 }, 0.40] 2014 ] 2015 }); 2016 $.Velocity.RegisterEffect("scaleUp.moveDown", { 2017 defaultDuration: 1, 2018 calls: [ 2019 [{ 2020 translateY: '-90%', 2021 scale: scaleDownAmnt, 2022 // boxShadowBlur: boxShadowAmnt 2023 }, 0.20], 2024 [{ 2025 translateY: '0%' 2026 }, 0.60], 2027 [{ 2028 translateY: '0%', 2029 scale: '1', 2030 // boxShadowBlur: '0' 2031 }, 0.20] 2032 ] 2033 }); 2034 2035 2036 2037 /** 2038 * Velo Slider 2039 * A Custom Slider using Velocity and Velocity UI effects 2040 */ 2041 2042 var VeloSlider = (function() { 2043 2044 /** 2045 * Global Settings 2046 */ 2047 var settings = { 2048 veloInit: $('.velo-slides').data('velo-slider'), 2049 $veloSlide: $('.velo-slide'), 2050 veloSlideBg: '.velo-slide-bg', 2051 navPrev: $('.velo-slides-nav').find('a.js-velo-slides-prev'), 2052 navNext: $('.velo-slides-nav').find('a.js-velo-slides-next'), 2053 veloBtn: $('.velo-slide-btn'), 2054 delta: 0, 2055 scrollThreshold: 7, 2056 currentSlide: 1, 2057 animating: false, 2058 animationDuration: 2000 2059 }; 2060 2061 2062 // Flags 2063 var delta = 0, 2064 animating = false; 2065 2066 return { 2067 2068 /** 2069 * Init 2070 */ 2071 init: function() { 2072 this.bind(); 2073 }, 2074 2075 /** 2076 * Bind our click, scroll, key events 2077 */ 2078 bind: function(){ 2079 2080 // Add active to first slide to set it off 2081 settings.$veloSlide.first().addClass('is-active'); 2082 2083 // Init with a data attribute, 2084 // Binding the animation to scroll, arrows, keys 2085 if (settings.veloInit == 'on') { 2086 VeloSlider.initScrollJack(); 2087 $(window).on('DOMMouseScroll mousewheel', VeloSlider.scrollJacking); 2088 } 2089 2090 // Arrow / Click Nav 2091 settings.navPrev.on('click', VeloSlider.prevSlide); 2092 settings.navNext.on('click', VeloSlider.nextSlide); 2093 2094 // Key Nav 2095 $(document).on('keydown', function(e) { 2096 var keyNext = (e.which == 39 || e.which == 40),
2097 keyPrev = (e.which == 37 || e.which == 38); 2098 2099 if (keyNext && !settings.navNext.hasClass('inactive')) { 2100 e.preventDefault(); 2101 VeloSlider.nextSlide(); 2102 2103 } else if (keyPrev && (!settings.navPrev.hasClass('inactive'))) { 2104 e.preventDefault(); 2105 VeloSlider.prevSlide(); 2106 } 2107 }); 2108 2109 jQuery('body').on('touchmove', function(e){ 2110 e.preventDefault(); 2111 e.stopPropagation(); 2112 2113 return false; 2114 }); 2115 2116 var ts; 2117 jQuery(document).bind('touchstart', function (e){ 2118 ts = e.originalEvent.touches[0].clientY; 2119 }); 2120 2121 jQuery(document).bind('touchend', function (e){ 2122 var te = e.originalEvent.changedTouches[0].clientY; 2123 if(ts > te+5){ 2124 VeloSlider.nextSlide(); 2125 }else if(ts < te-5){ 2126 VeloSlider.prevSlide(); 2127 } 2128 }); 2129 2130 //set navigation arrows visibility 2131 VeloSlider.checkNavigation(); 2132 2133 // Call Button Hover animation 2134 VeloSlider.hoverAnimation(); 2135 2136 }, 2137 2138 /** 2139 * Hover Animation 2140 * Adds 'is-hovering' class to the current slide 2141 * when hovering over the button. 2142 */ 2143 hoverAnimation: function(){ 2144 settings.veloBtn.hover(function (){ 2145 $(this).closest(settings.$veloSlide).toggleClass('is-hovering'); 2146 }); 2147 }, 2148 2149 /** 2150 * Set Animation 2151 * Defines the animation sequence, calling our registered velocity effects 2152 * @see js/components/_velocity-effects.js 2153 */ 2154 setAnimation: function(midStep, direction) { 2155 2156 // Vars for our velocity effects 2157 var animationVisible = 'translateNone', 2158 animationTop = 'translateUp', 2159 animationBottom = 'translateDown', 2160 easing = 'ease', 2161 animDuration = settings.animationDuration; 2162 2163 // Middle Step 2164 if (midStep) { 2165 animationVisible = 'scaleUp.moveUp.scroll'; 2166 animationTop = 'scaleDown.moveUp.scroll'; 2167 animationBottom = 'scaleDown.moveDown.scroll'; 2168 2169 } else { 2170 animationVisible = (direction == 'next') ? 'scaleUp.moveUp' : 'scaleUp.moveDown'; 2171 animationTop = 'scaleDown.moveUp'; 2172 animationBottom = 'scaleDown.moveDown'; 2173 } 2174 2175 return [animationVisible, animationTop, animationBottom, animDuration, easing]; 2176 }, 2177 2178 /** 2179 * Init Scroll Jaclk 2180 */ 2181 initScrollJack: function() { 2182 2183 var visibleSlide = settings.$veloSlide.filter('.is-active'), 2184 topSection = visibleSlide.prevAll(settings.$veloSlide), 2185 bottomSection = visibleSlide.nextAll(settings.$veloSlide), 2186 animationParams = VeloSlider.setAnimation(false), 2187 animationVisible = animationParams[0], 2188 animationTop = animationParams[1], 2189 animationBottom = animationParams[2]; 2190 2191 visibleSlide.children('div').velocity(animationVisible, 1, function() { 2192 visibleSlide.css('opacity', 1); 2193 topSection.css('opacity', 1); 2194 bottomSection.css('opacity', 1); 2195 }); 2196 2197 topSection.children('div').velocity(animationTop, 0); 2198 bottomSection.children('div').velocity(animationBottom, 0); 2199 }, 2200 2201 /** 2202 * Scroll Jack 2203 * On Mouse Scroll 2204 */ 2205 scrollJacking: function(e) { 2206 if(!jQuery('body').hasClass('js_nav')) 2207 { 2208 if (e.originalEvent.detail < 0 || e.originalEvent.wheelDelta > 0) { 2209 delta--; 2210 (Math.abs(delta) >= settings.scrollThreshold) && VeloSlider.prevSlide(); 2211 } else { 2212 delta++; 2213 (delta >= settings.scrollThreshold) && VeloSlider.nextSlide(); 2214 } 2215 return false; 2216 } 2217 }, 2218 2219 /** 2220 * Previous Slide 2221 */ 2222 prevSlide: function(e) { 2223 //go to previous section 2224 typeof e !== 'undefined' && e.preventDefault(); 2225 2226 var visibleSlide = settings.$veloSlide.filter('.is-active'), 2227 animationParams = VeloSlider.setAnimation(midStep, 'prev'), 2228 midStep = false;
2229 2230 visibleSlide = midStep ? visibleSlide.next(settings.$veloSlide) : visibleSlide; 2231 2232 if (!animating && !visibleSlide.is(":first-child")) { 2233 animating = true; 2234 2235 visibleSlide 2236 .removeClass('is-active') 2237 .children(settings.veloSlideBg) 2238 .velocity(animationParams[2], animationParams[3], animationParams[4]) 2239 .end() 2240 .prev(settings.$veloSlide) 2241 .addClass('is-active') 2242 .children(settings.veloSlideBg) 2243 .velocity(animationParams[0], animationParams[3], animationParams[4], function() { 2244 animating = false; 2245 }); 2246 currentSlide = settings.currentSlide - 1; 2247 } 2248 VeloSlider.resetScroll(); 2249 }, 2250 2251 2252 /** 2253 * Next Slide 2254 */ 2255 nextSlide: function(e) { 2256 2257 //go to next section 2258 typeof e !== 'undefined' && e.preventDefault(); 2259 2260 var visibleSlide = settings.$veloSlide.filter('.is-active'), 2261 animationParams = VeloSlider.setAnimation(midStep, 'next'), 2262 midStep = false; 2263 2264 if (!animating && !visibleSlide.is(":last-of-type")) { 2265 animating = true; 2266 2267 visibleSlide.removeClass('is-active') 2268 .children(settings.veloSlideBg) 2269 .velocity(animationParams[1], animationParams[3]) 2270 .end() 2271 .next(settings.$veloSlide) 2272 .addClass('is-active') 2273 .children(settings.veloSlideBg) 2274 .velocity(animationParams[0], animationParams[3], function() { 2275 animating = false; 2276 }); 2277 currentSlide = settings.currentSlide + 1; 2278 } 2279 VeloSlider.resetScroll(); 2280 }, 2281 2282 /** 2283 * Reset SCroll 2284 */ 2285 resetScroll: function() { 2286 delta = 0; 2287 VeloSlider.checkNavigation(); 2288 }, 2289 2290 /** 2291 * Check Nav 2292 * Adds / hides nav based on first/last slide 2293 * @todo - loop slides, without cloning if possible 2294 */ 2295 checkNavigation: function() { 2296 //update navigation arrows visibility 2297 (settings.$veloSlide.filter('.is-active').is(':first-of-type')) ? settings.navPrev.addClass('inactive'): settings.navPrev.removeClass('inactive'); 2298 (settings.$veloSlide.filter('.is-active').is(':last-of-type')) ? settings.navNext.addClass('inactive'): settings.navNext.removeClass('inactive'); 2299 2300 }, 2301 }; 2302 })(); 2303 2304 // INIT 2305 VeloSlider.init(); 2306 } ); 2307 //End execute javascript for slider velo 2308 2309 //Start execute javascript for slider popout 2310 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-popout.default', function( $scope ) { 2311 jQuery('body').addClass('elementor-fullscreen'); 2312 2313 function goToSlide(number){ 2314 $('.slider-slide').removeClass('slider-slide--active'); 2315 $('.slider-slide[data-slide='+number+']').addClass('slider-slide--active'); 2316 } 2317 2318 $('.slider__next, .go-to-next').on('click', function(){ 2319 var currentSlide = Number($('.slider-slide--active').data('slide')); 2320 var totalSlides = $('.slider-slide').length; 2321 currentSlide++ 2322 if (currentSlide > totalSlides){ 2323 currentSlide = 1; 2324 } 2325 goToSlide(currentSlide); 2326 }); 2327 2328 for (var i=1; i <= $('.slider-slide').length; i++){ 2329 $('.slider__indicators').append('<div class="slider__indicator" data-slide="'+i+'"></div>') 2330 } 2331 setTimeout(function(){ 2332 $('.slider-wrap').addClass('slider-wrap--hacked'); 2333 }, 1000); 2334 } ); 2335 //End execute javascript for slider popout 2336 2337 2338 //Start execute javascript for slider clip path 2339 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-clip-path.default', function( $scope ) { 2340 jQuery('body').addClass('elementor-fullscreen'); 2341 2342 (function() { 2343 var $slides = document.querySelectorAll('.clip-path-slide-container .slide'); 2344 2345 var $controls = document.querySelectorAll('.slider-control'); 2346 var numOfSlides = $slides.length; 2347 var slidingAT = 1300; // sync this with scss variable 2348 var slidingBlocked = false;
2349 2350 [].slice.call($slides).forEach(function($el, index) { 2351 var i = index + 1; 2352 $el.classList.add('slide-' + i); 2353 $el.dataset.slide = i; 2354 }); 2355 2356 [].slice.call($controls).forEach(function($el) { 2357 $el.addEventListener('click', controlClickHandler); 2358 }); 2359 2360 function controlClickHandler() { 2361 if (slidingBlocked) return; 2362 slidingBlocked = true; 2363 2364 var $control = this; 2365 var isRight = $control.classList.contains('m--right'); 2366 var $curActive = document.querySelector('.slide.s--active'); 2367 var index = +$curActive.dataset.slide; 2368 (isRight) ? index++ : index--; 2369 if (index < 1) index = numOfSlides; 2370 if (index > numOfSlides) index = 1; 2371 var $newActive = document.querySelector('.slide-' + index); 2372 2373 $control.classList.add('a--rotation'); 2374 $curActive.classList.remove('s--active', 's--active-prev'); 2375 document.querySelector('.slide.s--prev').classList.remove('s--prev'); 2376 2377 $newActive.classList.add('s--active'); 2378 if (!isRight) $newActive.classList.add('s--active-prev'); 2379 2380 2381 var prevIndex = index - 1; 2382 if (prevIndex < 1) prevIndex = numOfSlides; 2383 2384 document.querySelector('.slide-' + prevIndex).classList.add('s--prev'); 2385 2386 setTimeout(function() { 2387 $control.classList.remove('a--rotation'); 2388 slidingBlocked = false; 2389 }, slidingAT*0.75); 2390 }; 2391 }()); 2392 } ); 2393 //End execute javascript for slider clip path 2394 2395 //Start execute javascript for gallery preview 2396 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-gallery-preview.default', function( $scope ) { 2397 jQuery('body').addClass('grandconference-gallery-preview'); 2398 2399 var $slider = $('.slider'); 2400 var $slickTrack = $('.slick-track'); 2401 var $slickCurrent = $('.slick-current'); 2402 2403 var slideDuration = 900; 2404 2405 //RESET ANIMATIONS 2406 // On init slide change 2407 $slider.on('init', function(slick){ 2408 TweenMax.to($('.slick-track'), 0.9, { 2409 marginLeft: 0 2410 }); 2411 TweenMax.to($('.slick-active'), 0.9, { 2412 x: 0, 2413 zIndex: 2 2414 }); 2415 }); 2416 // On before slide change 2417 $slider.on('beforeChange', function(event, slick, currentSlide, nextSlide){ 2418 TweenMax.to($('.slick-track'), 0.9, { 2419 marginLeft: 0 2420 }); 2421 TweenMax.to($('.slick-active'), 0.9, { 2422 x: 0 2423 }); 2424 }); 2425 2426 // On after slide change 2427 $slider.on('afterChange', function(event, slick, currentSlide){ 2428 TweenMax.to($('.slick-track'), 0.9, { 2429 marginLeft: 0 2430 }); 2431 $('.slick-slide').css('z-index','1'); 2432 TweenMax.to($('.slick-active'), 0.9, { 2433 x: 0, 2434 zIndex: 2 2435 }); 2436 }); 2437 2438 var $sliderPagination = $('.slider').attr('data-pagination'); 2439 var dotsVar = false; 2440 if($sliderPagination == 'yes') 2441 { 2442 dotsVar = true; 2443 } 2444 2445 var $sliderNavigation = $('.slider').attr('data-navigation'); 2446 var arrowsVar = false; 2447 if($sliderNavigation == 'yes') 2448 { 2449 arrowsVar = true; 2450 } 2451 2452 var $sliderAutoPlay = $('.slider').attr('data-autoplay'); 2453 var autoPlayVar = false; 2454 var autoPlayTimeVar = 0; 2455 if (typeof $sliderAutoPlay != "undefined"){ 2456 autoPlayVar = true; 2457 autoPlayTimeVar = $sliderAutoPlay; 2458 } 2459 2460 //SLICK INIT 2461 $slider.slick({ 2462 speed: slideDuration, 2463 touchMove: true, 2464 dots: dotsVar, 2465 arrows: arrowsVar, 2466 waitForAnimate: true, 2467 useTransform: true, 2468 autoplay: autoPlayVar, 2469 autoplaySpeed: autoPlayTimeVar, 2470 cssEase: 'cubic-bezier(0.455, 0.030, 0.130, 1.000)' 2471 }) 2472 2473 //PREV 2474 $('.slick-prev').on('mouseenter', function(){ 2475 TweenMax.to($('.slick-track'), 0.6, { 2476 marginLeft: "180px", 2477 ease: Quad.easeOut 2478 }); 2479 TweenMax.to($('.slick-current'), 0.6, { 2480 x: -100, 2481 ease: Quad.easeOut 2482 }); 2483 }); 2484 2485 $('.slick-prev').on('mouseleave', function(){ 2486 TweenMax.to($('.slick-track'), 0.4, { 2487 marginLeft: 0, 2488 ease: Sine.easeInOut 2489 }); 2490 TweenMax.to($('.slick-current'), 0.4, { 2491 x: 0, 2492 ease: Sine.easeInOut 2493 }); 2494 }); 2495 2496 //NEXT 2497 $('.slick-next').on('mouseenter', function(){ 2498 2499 TweenMax.to($('.slick-track'), 0.6, { 2500 marginLeft: "-180px", 2501 ease: Quad.easeOut 2502 }); 2503 TweenMax.to($('.slick-current'), 0.6, { 2504 x: 100, 2505 ease: Quad.easeOut 2506 }); 2507 }); 2508 2509 $('.slick-next').on('mouseleave', function(){ 2510 TweenMax.to($('.slick-track'), 0.4, { 2511 marginLeft: 0, 2512 ease: Quad.easeInOut 2513 }); 2514 TweenMax.to($('.slick-current'), 0.4, { 2515 x: 0, 2516 ease: Quad.easeInOut 2517 }); 2518 }); 2519 } ); 2520 //End execute javascript for gallery preview 2521 2522 //Start execute javascript for slider split slick 2523 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-split-slick.default', function( $scope ) { 2524 jQuery('body').addClass('elementor-fullscreen'); 2525 2526 var $slider = $('.slideshow .slider'), 2527 maxItems = $('.item', $slider).length, 2528 dragging = false, 2529 tracking, 2530 rightTracking; 2531 2532 $sliderRight = $('.slideshow').clone().addClass('slideshow-right').appendTo($('.split-slideshow')); 2533 2534 rightItems = $('.item', $sliderRight).toArray(); 2535 reverseItems = rightItems.reverse(); 2536 $('.slider', $sliderRight).html(''); 2537 for (i = 0; i < maxItems; i++) { 2538 $(reverseItems[i]).appendTo($('.slider', $sliderRight)); 2539 } 2540 2541 $slider.addClass('slideshow-left'); 2542 $('.slideshow-left').slick({ 2543 vertical: true, 2544 verticalSwiping: true,
2545 arrows: false, 2546 infinite: true, 2547 dots: true, 2548 speed: 1000, 2549 cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)' 2550 }).on('beforeChange', function(event, slick, currentSlide, nextSlide) { 2551 2552 if (currentSlide > nextSlide && nextSlide == 0 && currentSlide == maxItems - 1) { 2553 $('.slideshow-right .slider').slick('slickGoTo', -1); 2554 $('.slideshow-text').slick('slickGoTo', maxItems); 2555 } else if (currentSlide < nextSlide && currentSlide == 0 && nextSlide == maxItems - 1) { 2556 $('.slideshow-right .slider').slick('slickGoTo', maxItems); 2557 $('.slideshow-text').slick('slickGoTo', -1); 2558 } else { 2559 $('.slideshow-right .slider').slick('slickGoTo', maxItems - 1 - nextSlide); 2560 $('.slideshow-text').slick('slickGoTo', nextSlide); 2561 } 2562 }).on("mousewheel", function(event) { 2563 event.preventDefault(); 2564 if (event.deltaX > 0 || event.deltaY < 0) { 2565 $(this).slick('slickNext'); 2566 } else if (event.deltaX < 0 || event.deltaY > 0) { 2567 $(this).slick('slickPrev'); 2568 }; 2569 }).on('mousedown touchstart', function(){ 2570 dragging = true; 2571 tracking = $('.slick-track', $slider).css('transform'); 2572 tracking = parseInt(tracking.split(',')[5]); 2573 rightTracking = $('.slideshow-right .slick-track').css('transform'); 2574 rightTracking = parseInt(rightTracking.split(',')[5]); 2575 }).on('mousemove touchmove', function(){ 2576 if (dragging) { 2577 newTracking = $('.slideshow-left .slick-track').css('transform'); 2578 newTracking = parseInt(newTracking.split(',')[5]); 2579 diffTracking = newTracking - tracking; 2580 $('.slideshow-right .slick-track').css({'transform': 'matrix(1, 0, 0, 1, 0, ' + (rightTracking - diffTracking) + ')'}); 2581 } 2582 }).on('mouseleave touchend mouseup', function(){ 2583 dragging = false; 2584 }); 2585 2586 $('.slideshow-right .slider').slick({ 2587 swipe: false, 2588 vertical: true, 2589 arrows: false, 2590 infinite: true, 2591 speed: 950, 2592 cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)', 2593 initialSlide: maxItems - 1 2594 }); 2595 $('.slideshow-text').slick({ 2596 swipe: false, 2597 vertical: true, 2598 arrows: false, 2599 infinite: true, 2600 speed: 900, 2601 cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)' 2602 }); 2603 } ); 2604 //End execute javascript for slider split slick 2605 2606 //Start execute javascript for slider transitions 2607 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-transitions.default', function( $scope ) { 2608 jQuery('body').addClass('elementor-fullscreen'); 2609 2610 var mySwiper = new Swiper(".swiper-container", { 2611 direction: "vertical", 2612 loop: true, 2613 pagination: { 2614 el: '.swiper-pagination', 2615 type: 'bullets', 2616 clickable: true 2617 }, 2618 keyboard: { 2619 enabled: true, 2620 onlyInViewport: false, 2621 }, 2622 grabCursor: true, 2623 speed: 1000, 2624 paginationClickable: true, 2625 parallax: true, 2626 autoplay: false, 2627 effect: "slide", 2628 mousewheel: { 2629 invert: false, 2630 }, 2631 }); 2632 } ); 2633 //End execute javascript for slider transitions 2634 2635 2636 //Start execute javascript for slider property clip 2637 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-property-clip.default', function( $scope ) { 2638 jQuery(".slider-property-clip-wrapper").each(function() { 2639 var slider = jQuery(this).find(".slider"), 2640 slides = slider.find('li'), 2641 nav = slider.find('nav'); 2642 2643 slides.eq(0).addClass('current'); 2644 2645 nav.children('a').eq(0).addClass('current-dot'); 2646 2647 nav.on('click', 'a', function(event) { 2648 event.preventDefault(); 2649 $(this).addClass('current-dot').siblings().removeClass('current-dot'); 2650 slides.eq($(this).index()).addClass('current').removeClass('prev').siblings().removeClass('current'); 2651 slides.eq($(this).index()).prevAll().addClass('prev'); 2652 slides.eq($(this).index()).nextAll().removeClass('prev'); 2653 }); 2654 }); 2655 } ); 2656 //End execute javascript for slider property clip 2657 2658 //Start execute javascript for slider slice 2659 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-slice.default', function( $scope ) { 2660 jQuery(".slice-slide-container").each(function() { 2661 var slide = jQuery(this).children('.slide'); 2662 var navPrev = jQuery('.js-prev'); 2663 var navNext = jQuery('.js-next'); 2664 2665 var SliceSlider = { 2666 2667 /** 2668 * Settings Object 2669 */ 2670 settings: { 2671 delta: 0, 2672 currentSlideIndex: 0, 2673 scrollThreshold: 40, 2674 slides: slide, 2675 numSlides: slide.length, 2676 navPrev: navPrev, 2677 navNext: navNext, 2678 }, 2679 2680 /** 2681 * Init 2682 */ 2683 init: function() { 2684 s = this.settings; 2685 this.bindEvents(); 2686 }, 2687 2688 /** 2689 * Bind our click, scroll, key events 2690 */ 2691 bindEvents: function(){ 2692 2693 // Scrollwheel & trackpad 2694 /*s.slides.on({ 2695 'DOMMouseScroll mousewheel' : SliceSlider.handleScroll 2696 });*/ 2697 // On click prev 2698 s.navPrev.on({ 2699 'click' : SliceSlider.prevSlide 2700 }); 2701 // On click next 2702 s.navNext.on({ 2703 'click' : SliceSlider.nextSlide 2704 }); 2705 // On Arrow keys 2706 $(document).keyup(function(e) { 2707 // Left or back arrows 2708 if ((e.which === 37) || (e.which === 38)){ 2709 SliceSlider.prevSlide(); 2710 } 2711 // Down or right 2712 if ((e.which === 39) || (e.which === 40)) { 2713 SliceSlider.nextSlide(); 2714 } 2715 }); 2716 }, 2717 2718 /** 2719 * Interept scroll direction 2720 */ 2721 handleScroll: function(e){ 2722 2723 // Scrolling up 2724 if (e.originalEvent.detail < 0 || e.originalEvent.wheelDelta > 0) { 2725 2726 s.delta--; 2727 2728 if ( Math.abs(s.delta) >= s.scrollThreshold) { 2729 SliceSlider.prevSlide(); 2730 } 2731 } 2732 2733 // Scrolling Down 2734 else { 2735 2736 s.delta++; 2737 2738 if (s.delta >= s.scrollThreshold) { 2739 SliceSlider.nextSlide(); 2740 } 2741 } 2742 2743 // Prevent page from scrolling 2744 return false;
2745 }, 2746 2747 /** 2748 * Show Slide 2749 */ 2750 showSlide: function(){ 2751 // reset 2752 s.delta = 0; 2753 // Bail if we're already sliding 2754 if ($('body').hasClass('is-sliding')){ 2755 return; 2756 } 2757 // Loop through our slides 2758 s.slides.each(function(i, slide) { 2759 2760 // Toggle the is-active class to show slide 2761 $(slide).toggleClass('is-active', (i === s.currentSlideIndex)); 2762 $(slide).toggleClass('is-prev', (i === s.currentSlideIndex - 1)); 2763 $(slide).toggleClass('is-next', (i === s.currentSlideIndex + 1)); 2764 2765 // Add and remove is-sliding class 2766 $('body').addClass('is-sliding'); 2767 2768 setTimeout(function(){ 2769 $('body').removeClass('is-sliding'); 2770 }, 1000); 2771 }); 2772 }, 2773 2774 /** 2775 * Previous Slide 2776 */ 2777 prevSlide: function(){ 2778 2779 // If on first slide, loop to last 2780 if (s.currentSlideIndex <= 0) { 2781 s.currentSlideIndex = s.numSlides; 2782 } 2783 s.currentSlideIndex--; 2784 2785 SliceSlider.showSlide(); 2786 }, 2787 2788 /** 2789 * Next Slide 2790 */ 2791 nextSlide: function(){ 2792 2793 s.currentSlideIndex++; 2794 2795 // If on last slide, loop to first 2796 if (s.currentSlideIndex >= s.numSlides) { 2797 s.currentSlideIndex = 0; 2798 } 2799 2800 SliceSlider.showSlide(); 2801 }, 2802 }; 2803 SliceSlider.init(); 2804 }); 2805 } ); 2806 //End execute javascript for slider slice 2807 2808 //Start execute javascript for slider flip 2809 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-flip.default', function( $scope ) { 2810 //jQuery('body').addClass('elementor-fullscreen'); 2811 //jQuery('body').addClass('elementor-overflow'); 2812 2813 var Gallery = (function() { 2814 var scrollTimeId; 2815 var posLeft = 0; 2816 2817 function Gallery(config) { 2818 this.list = $(config.list); 2819 this.items = this.list.find('li'); 2820 this.itemWidth = this.items.outerWidth(); 2821 }; 2822 2823 Gallery.prototype = { 2824 constructor: Gallery, 2825 2826 init: function() { 2827 this.setGalleryWidth(); 2828 this.eventManager(); 2829 2830 return this; 2831 }, 2832 2833 eventManager: function() { 2834 var _this = this; 2835 2836 $("html, body").on('mousewheel', function(event) { 2837 clearTimeout(scrollTimeId); 2838 scrollTimeId = setTimeout(onScrollEventHandler.bind(this, event, _this.itemWidth), 0); 2839 }); 2840 }, 2841 2842 setGalleryWidth: function() { 2843 this.list.css('width', this.getGalleryWidth()); 2844 this.list.css('overflow', 'scroll'); 2845 }, 2846 2847 getGalleryWidth: function() { 2848 var width = 0; 2849 2850 this.items.each(function(index, item) { 2851 width += $(this).outerWidth(); 2852 }); 2853 2854 return width; 2855 } 2856 }; 2857 2858 function onScrollEventHandler(event, width) { 2859 if (event.deltaY > 0) { 2860 this.scrollLeft -= width / 20; 2861 } else { 2862 this.scrollLeft += width / 20; 2863 } 2864 2865 event.preventDefault(); 2866 }; 2867 2868 return Gallery; 2869 })(); 2870 2871 2872 $(document).ready(function() { 2873 var gallery = new Gallery({ 2874 list: '.flip-slide-container .container .gallery' 2875 }).init(); 2876 2877 jQuery('.flip-slide-container').css('overflow', 'scroll'); 2878 jQuery('body').css('overflow-x', 'scroll'); 2879 }); 2880 } ); 2881 //End execute javascript for slider flip 2882 2883 //Start execute javascript for slider split carousel 2884 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-split-carousel.default', function( $scope ) { 2885 jQuery(".split-carousel-slider-wrapper").each(function() { 2886 var $carousel = jQuery(this); 2887 2888 var fullscreen = $carousel.attr('data-fullscreen'); 2889 if(fullscreen != 0) 2890 { 2891 jQuery('body').addClass('elementor-fullscreen'); 2892 2893 //Get menu element height
2894 var menuHeight = parseInt(jQuery('#wrapper').css('paddingTop')); 2895 var documentHeight = jQuery(window).innerHeight(); 2896 var sliderHeight = parseInt(documentHeight - menuHeight); 2897 2898 $carousel.css('height', sliderHeight+'px'); 2899 2900 jQuery( window ).resize(function() { 2901 var menuHeight = parseInt(jQuery('#wrapper').css('paddingTop')); 2902 var documentHeight = jQuery(window).innerHeight(); 2903 var sliderHeight = parseInt(documentHeight - menuHeight); 2904 2905 $carousel.css('height', sliderHeight+'px'); 2906 }); 2907 } 2908 2909 var activeIndex = 0; 2910 var limit = 0; 2911 var disabled = false; 2912 var $stage = void 0; 2913 var $controls = void 0; 2914 var canvas = false; 2915 2916 var SPIN_FORWARD_CLASS = 'js-spin-fwd'; 2917 var SPIN_BACKWARD_CLASS = 'js-spin-bwd'; 2918 var DISABLE_TRANSITIONS_CLASS = 'js-transitions-disabled'; 2919 var SPIN_DUR = 1000; 2920 2921 var appendControls = function appendControls() { 2922 for (var i = 0; i < limit; i++) { 2923 $('.carousel-control').append('<a href="#" data-index="' + i + '"></a>'); 2924 } 2925 var height = $('.carousel-control').children().last().outerHeight(); 2926 2927 $('.carousel-control').css('height', 30 + limit * height); 2928 $controls = $('.carousel-control').children(); 2929 $controls.eq(activeIndex).addClass('active'); 2930 }; 2931 2932 var setIndexes = function setIndexes() { 2933 $('.spinner').children().each(function (i, el) { 2934 $(el).attr('data-index', i); 2935 limit++; 2936 }); 2937 }; 2938 2939 var duplicateSpinner = function duplicateSpinner() { 2940 var $el = $('.spinner').parent(); 2941 var html = $('.spinner').parent().html(); 2942 $el.append(html); 2943 $('.spinner').last().addClass('spinner--right'); 2944 $('.spinner--right').removeClass('spinner--left'); 2945 }; 2946 2947 var paintFaces = function paintFaces() { 2948 $('.spinner-face').each(function (i, el) { 2949 var $el = $(el); 2950 var color = $(el).attr('data-bg'); 2951 $el.children().css('backgroundImage', 'url(' + getBase64PixelByColor(color) + ')'); 2952 }); 2953 }; 2954 2955 var getBase64PixelByColor = function getBase64PixelByColor(hex) { 2956 if (!canvas) { 2957 canvas = document.createElement('canvas'); 2958 canvas.height = 1; 2959 canvas.width = 1; 2960 } 2961 if (canvas.getContext) { 2962 var ctx = canvas.getContext('2d'); 2963 ctx.fillStyle = hex; 2964 ctx.fillRect(0, 0, 1, 1); 2965 return canvas.toDataURL(); 2966 } 2967 return false; 2968 }; 2969 2970 var prepareDom = function prepareDom() { 2971 setIndexes(); 2972 paintFaces(); 2973 duplicateSpinner(); 2974 appendControls(); 2975 }; 2976 2977 var spin = function spin() { 2978 var inc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; 2979 2980 if (disabled) return; 2981 if (!inc) return; 2982 activeIndex += inc; 2983 disabled = true; 2984 2985 if (activeIndex >= limit) { 2986 activeIndex = 0; 2987 } 2988 2989 if (activeIndex < 0) { 2990 activeIndex = limit - 1; 2991 } 2992 2993 var $activeEls = $('.spinner-face.js-active'); 2994 var $nextEls = $('.spinner-face[data-index=' + activeIndex + ']'); 2995 $nextEls.addClass('js-next'); 2996 2997 if (inc > 0) { 2998 $stage.addClass(SPIN_FORWARD_CLASS); 2999 } else { 3000 $stage.addClass(SPIN_BACKWARD_CLASS); 3001 } 3002 3003 $controls.removeClass('active'); 3004 $controls.eq(activeIndex).addClass('active'); 3005 3006 setTimeout(function () { 3007 spinCallback(inc); 3008 }, SPIN_DUR, inc); 3009 }; 3010 3011 var spinCallback = function spinCallback(inc) { 3012 3013 $('.js-active').removeClass('js-active'); 3014 $('.js-next').removeClass('js-next').addClass('js-active'); 3015 $stage.addClass(DISABLE_TRANSITIONS_CLASS).removeClass(SPIN_FORWARD_CLASS).removeClass(SPIN_BACKWARD_CLASS); 3016 3017 $('.js-active').each(function (i, el) { 3018 var $el = $(el); 3019 $el.prependTo($el.parent()); 3020 }); 3021 setTimeout(function () { 3022 $stage.removeClass(DISABLE_TRANSITIONS_CLASS); 3023 disabled = false;
3024 }, 100); 3025 }; 3026 3027 var attachListeners = function attachListeners() { 3028 3029 document.onkeyup = function (e) { 3030 switch (e.keyCode) { 3031 case 38: 3032 spin(-1); 3033 break; 3034 case 40: 3035 spin(1); 3036 break; 3037 } 3038 }; 3039 3040 $carousel.bind('DOMMouseScroll', function(e){ 3041 if(e.originalEvent.detail > 0) { 3042 //scroll down 3043 spin(1); 3044 }else { 3045 //scroll up 3046 spin(-1); 3047 } 3048 3049 //prevent page fom scrolling 3050 return false; 3051 }); 3052 3053 //IE, Opera, Safari 3054 $carousel.bind('mousewheel', function(e){ 3055 if(e.originalEvent.wheelDelta < 0) { 3056 //scroll down 3057 spin(1); 3058 }else { 3059 //scroll up 3060 spin(-1); 3061 } 3062 3063 //prevent page fom scrolling 3064 return false; 3065 }); 3066 3067 jQuery('body').on('touchmove', function(e){ 3068 e.preventDefault(); 3069 e.stopPropagation(); 3070 3071 return false; 3072 }); 3073 3074 var ts; 3075 $carousel.bind('touchstart', function (e){ 3076 ts = e.originalEvent.touches[0].clientY; 3077 }); 3078 3079 $carousel.bind('touchend', function (e){ 3080 var te = e.originalEvent.changedTouches[0].clientY; 3081 if(ts > te+5){ 3082 spin(1); 3083 }else if(ts < te-5){ 3084 spin(-1); 3085 } 3086 }); 3087 3088 $controls.on('click', function (e) { 3089 e.preventDefault(); 3090 if (disabled) return; 3091 var $el = $(e.target); 3092 var toIndex = parseInt($el.attr('data-index'), 10); 3093 spin(toIndex - activeIndex); 3094 }); 3095 }; 3096 3097 var assignEls = function assignEls() { 3098 $stage = $('.carousel-stage'); 3099 }; 3100 3101 var init = function init() { 3102 assignEls(); 3103 prepareDom(); 3104 attachListeners(); 3105 }; 3106 3107 $(function () { 3108 init(); 3109 }); 3110 }); 3111 } ); 3112 //End execute javascript for slider split carousel 3113 3114 //Start execute javascript for horizontal timeline 3115 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-horizontal-timeline.default', function( $scope ) { 3116 var timelines = jQuery('.cd-horizontal-timeline'); 3117 var eventsMinDistance = timelines.attr('data-spacing'); 3118 3119 if(eventsMinDistance == '') 3120 { 3121 eventsMinDistance = 60; 3122 } 3123 3124 (timelines.length > 0) && initTimeline(timelines); 3125 3126 function initTimeline(timelines) { 3127 timelines.each(function(){ 3128 var timeline = jQuery(this), 3129 timelineComponents = {}; 3130 //cache timeline components 3131 timelineComponents['timelineWrapper'] = timeline.find('.events-wrapper'); 3132 timelineComponents['eventsWrapper'] = timelineComponents['timelineWrapper'].children('.events'); 3133 timelineComponents['fillingLine'] = timelineComponents['eventsWrapper'].children('.filling-line'); 3134 timelineComponents['timelineEvents'] = timelineComponents['eventsWrapper'].find('a'); 3135 timelineComponents['timelineDates'] = parseDate(timelineComponents['timelineEvents']); 3136 timelineComponents['eventsMinLapse'] = minLapse(timelineComponents['timelineDates']); 3137 timelineComponents['timelineNavigation'] = timeline.find('.cd-timeline-navigation'); 3138 timelineComponents['eventsContent'] = timeline.children('.events-content'); 3139 3140 //assign a left postion to the single events along the timeline 3141 setDatePosition(timelineComponents, eventsMinDistance); 3142 //assign a width to the timeline 3143 var timelineTotWidth = setTimelineWidth(timelineComponents, eventsMinDistance); 3144 //the timeline has been initialize - show it 3145 timeline.addClass('loaded'); 3146 3147 //detect click on the next arrow 3148 timelineComponents['timelineNavigation'].on('click', '.next', function(event){ 3149 event.preventDefault(); 3150 updateSlide(timelineComponents, timelineTotWidth, 'next'); 3151 }); 3152 //detect click on the prev arrow 3153 timelineComponents['timelineNavigation'].on('click', '.prev', function(event){ 3154 event.preventDefault(); 3155 updateSlide(timelineComponents, timelineTotWidth, 'prev'); 3156 }); 3157 //detect click on the a single event - show new event content 3158 timelineComponents['eventsWrapper'].on('click', 'a', function(event){ 3159 event.preventDefault(); 3160 timelineComponents['timelineEvents'].removeClass('selected'); 3161 jQuery(this).addClass('selected'); 3162 updateOlderEvents(jQuery(this)); 3163 updateFilling(jQuery(this), timelineComponents['fillingLine'], timelineTotWidth); 3164 updateVisibleContent(jQuery(this), timelineComponents['eventsContent']); 3165 }); 3166 3167 //on swipe, show next/prev event content 3168 timelineComponents['eventsContent'].on('swipeleft', function(){ 3169 var mq = checkMQ(); 3170 ( mq == 'mobile' ) && showNewContent(timelineComponents, timelineTotWidth, 'next'); 3171 }); 3172 timelineComponents['eventsContent'].on('swiperight', function(){ 3173 var mq = checkMQ(); 3174 ( mq == 'mobile' ) && showNewContent(timelineComponents, timelineTotWidth, 'prev'); 3175 }); 3176 3177 //keyboard navigation 3178 jQuery(document).keyup(function(event){ 3179 if(event.which=='37' && elementInViewport(timeline.get(0)) ) { 3180 showNewContent(timelineComponents, timelineTotWidth, 'prev'); 3181 } else if( event.which=='39' && elementInViewport(timeline.get(0))) { 3182 showNewContent(timelineComponents, timelineTotWidth, 'next'); 3183 } 3184 }); 3185 }); 3186 } 3187 3188 function updateSlide(timelineComponents, timelineTotWidth, string) { 3189 //retrieve translateX value of timelineComponents['eventsWrapper'] 3190 var translateValue = getTranslateValue(timelineComponents['eventsWrapper']),
3191 wrapperWidth = Number(timelineComponents['timelineWrapper'].css('width').replace('px', '')); 3192 //translate the timeline to the left('next')/right('prev') 3193 (string == 'next') 3194 ? translateTimeline(timelineComponents, translateValue - wrapperWidth + eventsMinDistance, wrapperWidth - timelineTotWidth) 3195 : translateTimeline(timelineComponents, translateValue + wrapperWidth - eventsMinDistance); 3196 } 3197 3198 function showNewContent(timelineComponents, timelineTotWidth, string) { 3199 //go from one event to the next/previous one 3200 var visibleContent = timelineComponents['eventsContent'].find('.selected'), 3201 newContent = ( string == 'next' ) ? visibleContent.next() : visibleContent.prev(); 3202 3203 if ( newContent.length > 0 ) { //if there's a next/prev event - show it 3204 var selectedDate = timelineComponents['eventsWrapper'].find('.selected'), 3205 newEvent = ( string == 'next' ) ? selectedDate.parent('li').next('li').children('a') : selectedDate.parent('li').prev('li').children('a'); 3206 3207 updateFilling(newEvent, timelineComponents['fillingLine'], timelineTotWidth); 3208 updateVisibleContent(newEvent, timelineComponents['eventsContent']); 3209 newEvent.addClass('selected'); 3210 selectedDate.removeClass('selected'); 3211 updateOlderEvents(newEvent); 3212 updateTimelinePosition(string, newEvent, timelineComponents, timelineTotWidth); 3213 } 3214 } 3215 3216 function updateTimelinePosition(string, event, timelineComponents, timelineTotWidth) { 3217 //translate timeline to the left/right according to the position of the selected event 3218 var eventStyle = window.getComputedStyle(event.get(0), null), 3219 eventLeft = Number(eventStyle.getPropertyValue("left").replace('px', '')), 3220 timelineWidth = Number(timelineComponents['timelineWrapper'].css('width').replace('px', '')), 3221 timelineTotWidth = Number(timelineComponents['eventsWrapper'].css('width').replace('px', '')); 3222 var timelineTranslate = getTranslateValue(timelineComponents['eventsWrapper']); 3223 3224 if( (string == 'next' && eventLeft > timelineWidth - timelineTranslate) || (string == 'prev' && eventLeft < - timelineTranslate) ) { 3225 translateTimeline(timelineComponents, - eventLeft + timelineWidth/2, timelineWidth - timelineTotWidth); 3226 } 3227 } 3228 3229 function translateTimeline(timelineComponents, value, totWidth) { 3230 var eventsWrapper = timelineComponents['eventsWrapper'].get(0); 3231 value = (value > 0) ? 0 : value; //only negative translate value 3232 value = ( !(typeof totWidth === 'undefined') && value < totWidth ) ? totWidth : value; //do not translate more than timeline width 3233 setTransformValue(eventsWrapper, 'translateX', value+'px'); 3234 //update navigation arrows visibility 3235 (value == 0 ) ? timelineComponents['timelineNavigation'].find('.prev').addClass('inactive') : timelineComponents['timelineNavigation'].find('.prev').removeClass('inactive'); 3236 (value == totWidth ) ? timelineComponents['timelineNavigation'].find('.next').addClass('inactive') : timelineComponents['timelineNavigation'].find('.next').removeClass('inactive'); 3237 } 3238 3239 function updateFilling(selectedEvent, filling, totWidth) { 3240 //change .filling-line length according to the selected event 3241 var eventStyle = window.getComputedStyle(selectedEvent.get(0), null), 3242 eventLeft = eventStyle.getPropertyValue("left"), 3243 eventWidth = eventStyle.getPropertyValue("width"); 3244 eventLeft = Number(eventLeft.replace('px', '')) + Number(eventWidth.replace('px', ''))/2; 3245 var scaleValue = eventLeft/totWidth; 3246 setTransformValue(filling.get(0), 'scaleX', scaleValue); 3247 } 3248 3249 function setDatePosition(timelineComponents, min) { 3250 for (i = 0; i < timelineComponents['timelineDates'].length; i++) { 3251 var distance = daydiff(timelineComponents['timelineDates'][0], timelineComponents['timelineDates'][i]), 3252 distanceNorm = Math.round(distance/timelineComponents['eventsMinLapse']) + 2; 3253 timelineComponents['timelineEvents'].eq(i).css('left', distanceNorm*min+'px'); 3254 } 3255 } 3256 3257 function setTimelineWidth(timelineComponents, width) { 3258 var timeSpan = daydiff(timelineComponents['timelineDates'][0], timelineComponents['timelineDates'][timelineComponents['timelineDates'].length-1]), 3259 timeSpanNorm = timeSpan/timelineComponents['eventsMinLapse'], 3260 timeSpanNorm = Math.round(timeSpanNorm) + 4, 3261 totalWidth = timeSpanNorm*width; 3262 timelineComponents['eventsWrapper'].css('width', totalWidth+'px'); 3263 updateFilling(timelineComponents['timelineEvents'].eq(0), timelineComponents['fillingLine'], totalWidth); 3264 3265 return totalWidth; 3266 } 3267 3268 function updateVisibleContent(event, eventsContent) { 3269 var eventDate = event.data('date'), 3270 visibleContent = eventsContent.find('.selected'), 3271 selectedContent = eventsContent.find('[data-date="'+ eventDate +'"]'), 3272 selectedContentHeight = selectedContent.height(); 3273 3274 if (selectedContent.index() > visibleContent.index()) { 3275 var classEnetering = 'selected enter-right', 3276 classLeaving = 'leave-left'; 3277 } else { 3278 var classEnetering = 'selected enter-left', 3279 classLeaving = 'leave-right'; 3280 } 3281 3282 selectedContent.attr('class', classEnetering); 3283 visibleContent.attr('class', classLeaving).one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(){ 3284 visibleContent.removeClass('leave-right leave-left'); 3285 selectedContent.removeClass('enter-left enter-right'); 3286 }); 3287 eventsContent.css('height', selectedContentHeight+'px'); 3288 } 3289 3290 function updateOlderEvents(event) { 3291 event.parent('li').prevAll('li').children('a').addClass('older-event').end().end().nextAll('li').children('a').removeClass('older-event'); 3292 } 3293 3294 function getTranslateValue(timeline) { 3295 var timelineStyle = window.getComputedStyle(timeline.get(0), null), 3296 timelineTranslate = timelineStyle.getPropertyValue("-webkit-transform") || 3297 timelineStyle.getPropertyValue("-moz-transform") || 3298 timelineStyle.getPropertyValue("-ms-transform") || 3299 timelineStyle.getPropertyValue("-o-transform") || 3300 timelineStyle.getPropertyValue("transform"); 3301 3302 if( timelineTranslate.indexOf('(') >=0 ) { 3303 var timelineTranslate = timelineTranslate.split('(')[1]; 3304 timelineTranslate = timelineTranslate.split(')')[0]; 3305 timelineTranslate = timelineTranslate.split(','); 3306 var translateValue = timelineTranslate[4]; 3307 } else { 3308 var translateValue = 0; 3309 } 3310 3311 return Number(translateValue); 3312 } 3313 3314 function setTransformValue(element, property, value) { 3315 element.style["-webkit-transform"] = property+"("+value+")"; 3316 element.style["-moz-transform"] = property+"("+value+")"; 3317 element.style["-ms-transform"] = property+"("+value+")"; 3318 element.style["-o-transform"] = property+"("+value+")"; 3319 element.style["transform"] = property+"("+value+")"; 3320 } 3321 3322 //based on http://stackoverflow.com/questions/542938/how-do-i-get-the-number-of-days-between-two-dates-in-javascript 3323 function parseDate(events) { 3324 var dateArrays = []; 3325 events.each(function(){ 3326 var dateComp = jQuery(this).data('date').split('/'), 3327 newDate = new Date(dateComp[2], dateComp[1]-1, dateComp[0]); 3328 dateArrays.push(newDate); 3329 }); 3330 return dateArrays; 3331 } 3332 3333 function parseDate2(events) { 3334 var dateArrays = []; 3335 events.each(function(){ 3336 var singleDate = jQuery(this), 3337 dateComp = singleDate.data('date').split('T'); 3338 if( dateComp.length > 1 ) { //both DD/MM/YEAR and time are provided 3339 var dayComp = dateComp[0].split('/'), 3340 timeComp = dateComp[1].split(':'); 3341 } else if( dateComp[0].indexOf(':') >=0 ) { //only time is provide 3342 var dayComp = ["2000", "0", "0"], 3343 timeComp = dateComp[0].split(':'); 3344 } else { //only DD/MM/YEAR 3345 var dayComp = dateComp[0].split('/'), 3346 timeComp = ["0", "0"]; 3347 } 3348 var newDate = new Date(dayComp[2], dayComp[1]-1, dayComp[0], timeComp[0], timeComp[1]); 3349 dateArrays.push(newDate); 3350 }); 3351 return dateArrays; 3352 } 3353 3354 function daydiff(first, second) { 3355 return Math.round((second-first)); 3356 } 3357 3358 function minLapse(dates) { 3359 //determine the minimum distance among events 3360 var dateDistances = []; 3361 for (i = 1; i < dates.length; i++) { 3362 var distance = daydiff(dates[i-1], dates[i]); 3363 dateDistances.push(distance); 3364 } 3365 return Math.min.apply(null, dateDistances); 3366 } 3367 3368 /* 3369 How to tell if a DOM element is visible in the current viewport? 3370 http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport 3371 */ 3372 function elementInViewport(el) { 3373 var top = el.offsetTop; 3374 var left = el.offsetLeft; 3375 var width = el.offsetWidth; 3376 var height = el.offsetHeight; 3377 3378 while(el.offsetParent) { 3379 el = el.offsetParent; 3380 top += el.offsetTop; 3381 left += el.offsetLeft; 3382 } 3383 3384 return ( 3385 top < (window.pageYOffset + window.innerHeight) && 3386 left < (window.pageXOffset + window.innerWidth) && 3387 (top + height) > window.pageYOffset && 3388 (left + width) > window.pageXOffset 3389 ); 3390 } 3391 3392 function checkMQ() { 3393 //check if mobile or desktop device 3394 return window.getComputedStyle(document.querySelector('.cd-horizontal-timeline'), '::before').getPropertyValue('content').replace(/'/g, "").replace(/"/g, ""); 3395 } 3396 } ); 3397 //End execute javascript for horizontal timeline 3398 3399 3400 //Start execute javascript for background list 3401 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-background-list.default', function( $scope ) { 3402 jQuery(".background-list-wrapper").each(function() { 3403 var parentDiv = jQuery(this); 3404 3405 parentDiv.children('.background-list-column').hover(function () { 3406 parentDiv.find('.background-list-img').removeClass('hover'); 3407 jQuery(this).next('.background-list-img').addClass('hover'); 3408 }); 3409 }); 3410 } ); 3411 //End execute javascript for background list 3412 3413 3414 //Start execute javascript for portfolio masonry 3415 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-masonry.default', function( $scope ) { 3416 jQuery(function( $ ) { 3417 3418 jQuery(".portfolio-masonry-content-wrapper.do-masonry").each(function() { 3419 var grid = jQuery(this); 3420 var cols = grid.attr('data-cols'); 3421 cols = parseInt(cols); 3422 3423 var gutter = 50; 3424 switch(cols) 3425 { 3426 case 2: 3427 gutter = 50; 3428 break; 3429 case 3: 3430 gutter = 40; 3431 break; 3432 case 4: 3433 gutter = 30; 3434 break; 3435 case 5: 3436 gutter = 20; 3437 break; 3438 } 3439 3440 grid.imagesLoaded(function() { 3441 grid.masonry({ 3442 itemSelector: ".gallery-grid-item", 3443 columnWidth: ".gallery-grid-item", 3444 gutter : gutter 3445 }); 3446 }); 3447 3448 jQuery(".portfolio-masonry-content-wrapper.do-masonry img.lazy_masonry").each(function() { 3449 var currentImg = jQuery(this); 3450 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 3451 3452 var cols = grid.attr('data-cols'); 3453 3454 var gutter = 50; 3455 switch(cols) 3456 { 3457 case 2: 3458 gutter = 50; 3459 break; 3460 case 3: 3461 gutter = 40; 3462 break; 3463 case 4: 3464 gutter = 30; 3465 break; 3466 case 5: 3467 gutter = 20; 3468 break; 3469 } 3470 3471 jQuery(this).Lazy({ 3472 onFinishedAll: function() { 3473 grid.masonry({ 3474 itemSelector: ".portfolio-masonry-grid-wrapper.scale-anm", 3475 columnWidth: ".portfolio-masonry-grid-wrapper.scale-anm", 3476 gutter : gutter 3477 }); 3478 }, 3479 }); 3480 }); 3481 3482 jQuery(".portfolio-masonry-container").each(function() { 3483 var containderDiv = jQuery(this); 3484 var selectedClass = ""; 3485 3486 containderDiv.find(".filter-tag-btn").on('click', function(){ 3487 containderDiv.find(".filter-tag-btn").removeClass("active"); 3488 jQuery(this).addClass("active"); 3489 selectedClass = jQuery(this).attr("data-rel"); 3490 3491 var gridDiv = containderDiv.find(".portfolio-masonry-content-wrapper.do-masonry"); 3492 gridDiv.fadeTo(100, 0);
3493 gridDiv.find(".portfolio-masonry-grid-wrapper").css({ 3494 opacity: 0, 3495 display: 'none', 3496 transform: 'scale(0.0)' 3497 }); 3498 gridDiv.find(".portfolio-masonry-grid-wrapper").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 3499 3500 setTimeout(function() { 3501 jQuery("."+selectedClass).fadeIn().addClass('scale-anm'); 3502 3503 jQuery("."+selectedClass).css({ 3504 opacity: 1, 3505 display: 'block', 3506 transform: 'scale(1,1)' 3507 }); 3508 3509 gridDiv.masonry('destroy'); 3510 var $grid = gridDiv.masonry({ 3511 itemSelector: ".portfolio-masonry-grid-wrapper.scale-anm", 3512 columnWidth: ".portfolio-masonry-grid-wrapper.scale-anm", 3513 gutter : gutter 3514 }); 3515 3516 $grid.masonry('reloadItems'); 3517 3518 setTimeout(function() { 3519 gridDiv.fadeTo(300, 1); 3520 }, 300); 3521 3522 }, 300); 3523 }); 3524 }); 3525 }); 3526 }); 3527 } ); 3528 //End execute javascript for portfolio masonry 3529 3530 3531 //Start execute javascript for portfolio masonry grid 3532 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-masonry-grid.default', function( $scope ) { 3533 jQuery(function( $ ) { 3534 3535 jQuery(".portfolio-masonry-content-wrapper.do-masonry").each(function() { 3536 var grid = jQuery(this); 3537 var cols = grid.attr('data-cols'); 3538 cols = parseInt(cols); 3539 3540 var gutter = 50; 3541 switch(cols) 3542 { 3543 case 2: 3544 gutter = 50; 3545 break; 3546 case 3: 3547 gutter = 40; 3548 break; 3549 case 4: 3550 gutter = 30; 3551 break; 3552 case 5: 3553 gutter = 20; 3554 break; 3555 } 3556 3557 grid.imagesLoaded(function() { 3558 grid.masonry({ 3559 itemSelector: ".portfolio-masonry-grid-wrapper.scale-anm", 3560 columnWidth: ".portfolio-masonry-grid-wrapper.scale-anm", 3561 gutter : gutter 3562 }); 3563 }); 3564 3565 jQuery(".portfolio-masonry-content-wrapper.do-masonry img.lazy_masonry").each(function() { 3566 var currentImg = jQuery(this); 3567 currentImg.parent("div.post-featured-image-hover").removeClass("lazy"); 3568 3569 var cols = grid.attr('data-cols'); 3570 3571 var gutter = 50; 3572 switch(cols) 3573 { 3574 case 2: 3575 gutter = 50; 3576 break; 3577 case 3: 3578 gutter = 40; 3579 break; 3580 case 4: 3581 gutter = 30; 3582 break; 3583 case 5: 3584 gutter = 20; 3585 break; 3586 } 3587 3588 jQuery(this).Lazy({ 3589 onFinishedAll: function() { 3590 grid.masonry({ 3591 itemSelector: ".gallery-grid-item", 3592 columnWidth: ".gallery-grid-item", 3593 gutter : gutter 3594 }); 3595 }, 3596 }); 3597 }); 3598 3599 jQuery(".portfolio-masonry-container").each(function() { 3600 var containderDiv = jQuery(this); 3601 var selectedClass = ""; 3602 3603 containderDiv.find(".filter-tag-btn").on('click', function(){ 3604 containderDiv.find(".filter-tag-btn").removeClass("active"); 3605 jQuery(this).addClass("active"); 3606 selectedClass = jQuery(this).attr("data-rel"); 3607 3608 var gridDiv = containderDiv.find(".portfolio-masonry-content-wrapper.do-masonry"); 3609 gridDiv.fadeTo(100, 0); 3610 gridDiv.find(".portfolio-masonry-grid-wrapper").css({ 3611 opacity: 0, 3612 display: 'none', 3613 transform: 'scale(0.0)' 3614 }); 3615 gridDiv.find(".portfolio-masonry-grid-wrapper").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 3616 3617 setTimeout(function() { 3618 jQuery("."+selectedClass).fadeIn().addClass('scale-anm'); 3619 3620 jQuery("."+selectedClass).css({ 3621 opacity: 1, 3622 display: 'block', 3623 transform: 'scale(1,1)' 3624 }); 3625 3626 gridDiv.masonry('destroy'); 3627 var $grid = gridDiv.masonry({ 3628 itemSelector: ".portfolio-masonry-grid-wrapper.scale-anm", 3629 columnWidth: ".portfolio-masonry-grid-wrapper.scale-anm", 3630 gutter : gutter 3631 }); 3632 3633 $grid.masonry('reloadItems'); 3634 3635 setTimeout(function() { 3636 gridDiv.fadeTo(300, 1); 3637 }, 300); 3638 3639 }, 300); 3640 }); 3641 }); 3642 }); 3643 }); 3644 } ); 3645 //End execute javascript for portfolio masonry grid 3646 3647 3648 //Start execute javascript for portfolio timeline 3649 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-timeline.default', function( $scope ) { 3650 var timelines = jQuery('.cd-horizontal-timeline'); 3651 var eventsMinDistance = timelines.attr('data-spacing'); 3652 3653 if(eventsMinDistance == '') 3654 { 3655 eventsMinDistance = 60; 3656 } 3657 3658 (timelines.length > 0) && initTimeline(timelines); 3659 3660 function initTimeline(timelines) { 3661 timelines.each(function(){ 3662 var timeline = jQuery(this), 3663 timelineComponents = {}; 3664 //cache timeline components 3665 timelineComponents['timelineWrapper'] = timeline.find('.events-wrapper'); 3666 timelineComponents['eventsWrapper'] = timelineComponents['timelineWrapper'].children('.events'); 3667 timelineComponents['fillingLine'] = timelineComponents['eventsWrapper'].children('.filling-line'); 3668 timelineComponents['timelineEvents'] = timelineComponents['eventsWrapper'].find('a'); 3669 timelineComponents['timelineDates'] = parseDate(timelineComponents['timelineEvents']); 3670 timelineComponents['eventsMinLapse'] = minLapse(timelineComponents['timelineDates']); 3671 timelineComponents['timelineNavigation'] = timeline.find('.cd-timeline-navigation'); 3672 timelineComponents['eventsContent'] = timeline.children('.events-content'); 3673 3674 //assign a left postion to the single events along the timeline 3675 setDatePosition(timelineComponents, eventsMinDistance); 3676 //assign a width to the timeline 3677 var timelineTotWidth = setTimelineWidth(timelineComponents, eventsMinDistance); 3678 //the timeline has been initialize - show it 3679 timeline.addClass('loaded'); 3680 3681 //detect click on the next arrow 3682 timelineComponents['timelineNavigation'].on('click', '.next', function(event){ 3683 event.preventDefault(); 3684 updateSlide(timelineComponents, timelineTotWidth, 'next'); 3685 }); 3686 //detect click on the prev arrow 3687 timelineComponents['timelineNavigation'].on('click', '.prev', function(event){ 3688 event.preventDefault(); 3689 updateSlide(timelineComponents, timelineTotWidth, 'prev'); 3690 }); 3691 //detect click on the a single event - show new event content 3692 timelineComponents['eventsWrapper'].on('click', 'a', function(event){ 3693 event.preventDefault(); 3694 timelineComponents['timelineEvents'].removeClass('selected'); 3695 jQuery(this).addClass('selected'); 3696 updateOlderEvents(jQuery(this)); 3697 updateFilling(jQuery(this), timelineComponents['fillingLine'], timelineTotWidth); 3698 updateVisibleContent(jQuery(this), timelineComponents['eventsContent']); 3699 }); 3700 3701 //on swipe, show next/prev event content 3702 timelineComponents['eventsContent'].on('swipeleft', function(){ 3703 var mq = checkMQ(); 3704 ( mq == 'mobile' ) && showNewContent(timelineComponents, timelineTotWidth, 'next'); 3705 }); 3706 timelineComponents['eventsContent'].on('swiperight', function(){ 3707 var mq = checkMQ(); 3708 ( mq == 'mobile' ) && showNewContent(timelineComponents, timelineTotWidth, 'prev'); 3709 }); 3710 3711 //keyboard navigation 3712 jQuery(document).keyup(function(event){ 3713 if(event.which=='37' && elementInViewport(timeline.get(0)) ) { 3714 showNewContent(timelineComponents, timelineTotWidth, 'prev'); 3715 } else if( event.which=='39' && elementInViewport(timeline.get(0))) { 3716 showNewContent(timelineComponents, timelineTotWidth, 'next'); 3717 } 3718 }); 3719 }); 3720 } 3721 3722 function updateSlide(timelineComponents, timelineTotWidth, string) { 3723 //retrieve translateX value of timelineComponents['eventsWrapper'] 3724 var translateValue = getTranslateValue(timelineComponents['eventsWrapper']),
3725 wrapperWidth = Number(timelineComponents['timelineWrapper'].css('width').replace('px', '')); 3726 //translate the timeline to the left('next')/right('prev') 3727 (string == 'next') 3728 ? translateTimeline(timelineComponents, translateValue - wrapperWidth + eventsMinDistance, wrapperWidth - timelineTotWidth) 3729 : translateTimeline(timelineComponents, translateValue + wrapperWidth - eventsMinDistance); 3730 } 3731 3732 function showNewContent(timelineComponents, timelineTotWidth, string) { 3733 //go from one event to the next/previous one 3734 var visibleContent = timelineComponents['eventsContent'].find('.selected'), 3735 newContent = ( string == 'next' ) ? visibleContent.next() : visibleContent.prev(); 3736 3737 if ( newContent.length > 0 ) { //if there's a next/prev event - show it 3738 var selectedDate = timelineComponents['eventsWrapper'].find('.selected'), 3739 newEvent = ( string == 'next' ) ? selectedDate.parent('li').next('li').children('a') : selectedDate.parent('li').prev('li').children('a'); 3740 3741 updateFilling(newEvent, timelineComponents['fillingLine'], timelineTotWidth); 3742 updateVisibleContent(newEvent, timelineComponents['eventsContent']); 3743 newEvent.addClass('selected'); 3744 selectedDate.removeClass('selected'); 3745 updateOlderEvents(newEvent); 3746 updateTimelinePosition(string, newEvent, timelineComponents, timelineTotWidth); 3747 } 3748 } 3749 3750 function updateTimelinePosition(string, event, timelineComponents, timelineTotWidth) { 3751 //translate timeline to the left/right according to the position of the selected event 3752 var eventStyle = window.getComputedStyle(event.get(0), null), 3753 eventLeft = Number(eventStyle.getPropertyValue("left").replace('px', '')), 3754 timelineWidth = Number(timelineComponents['timelineWrapper'].css('width').replace('px', '')), 3755 timelineTotWidth = Number(timelineComponents['eventsWrapper'].css('width').replace('px', '')); 3756 var timelineTranslate = getTranslateValue(timelineComponents['eventsWrapper']); 3757 3758 if( (string == 'next' && eventLeft > timelineWidth - timelineTranslate) || (string == 'prev' && eventLeft < - timelineTranslate) ) { 3759 translateTimeline(timelineComponents, - eventLeft + timelineWidth/2, timelineWidth - timelineTotWidth); 3760 } 3761 } 3762 3763 function translateTimeline(timelineComponents, value, totWidth) { 3764 var eventsWrapper = timelineComponents['eventsWrapper'].get(0); 3765 value = (value > 0) ? 0 : value; //only negative translate value 3766 value = ( !(typeof totWidth === 'undefined') && value < totWidth ) ? totWidth : value; //do not translate more than timeline width 3767 setTransformValue(eventsWrapper, 'translateX', value+'px'); 3768 //update navigation arrows visibility 3769 (value == 0 ) ? timelineComponents['timelineNavigation'].find('.prev').addClass('inactive') : timelineComponents['timelineNavigation'].find('.prev').removeClass('inactive'); 3770 (value == totWidth ) ? timelineComponents['timelineNavigation'].find('.next').addClass('inactive') : timelineComponents['timelineNavigation'].find('.next').removeClass('inactive'); 3771 } 3772 3773 function updateFilling(selectedEvent, filling, totWidth) { 3774 //change .filling-line length according to the selected event 3775 var eventStyle = window.getComputedStyle(selectedEvent.get(0), null), 3776 eventLeft = eventStyle.getPropertyValue("left"), 3777 eventWidth = eventStyle.getPropertyValue("width"); 3778 eventLeft = Number(eventLeft.replace('px', '')) + Number(eventWidth.replace('px', ''))/2; 3779 var scaleValue = eventLeft/totWidth; 3780 setTransformValue(filling.get(0), 'scaleX', scaleValue); 3781 } 3782 3783 function setDatePosition(timelineComponents, min) { 3784 for (i = 0; i < timelineComponents['timelineDates'].length; i++) { 3785 var distance = daydiff(timelineComponents['timelineDates'][0], timelineComponents['timelineDates'][i]), 3786 distanceNorm = Math.round(distance/timelineComponents['eventsMinLapse']) + 2; 3787 timelineComponents['timelineEvents'].eq(i).css('left', distanceNorm*min+'px'); 3788 } 3789 } 3790 3791 function setTimelineWidth(timelineComponents, width) { 3792 var timeSpan = daydiff(timelineComponents['timelineDates'][0], timelineComponents['timelineDates'][timelineComponents['timelineDates'].length-1]), 3793 timeSpanNorm = timeSpan/timelineComponents['eventsMinLapse'], 3794 timeSpanNorm = Math.round(timeSpanNorm) + 4, 3795 totalWidth = timeSpanNorm*width; 3796 timelineComponents['eventsWrapper'].css('width', totalWidth+'px'); 3797 updateFilling(timelineComponents['timelineEvents'].eq(0), timelineComponents['fillingLine'], totalWidth); 3798 3799 return totalWidth; 3800 } 3801 3802 function updateVisibleContent(event, eventsContent) { 3803 var eventDate = event.data('date'), 3804 visibleContent = eventsContent.find('.selected'), 3805 selectedContent = eventsContent.find('[data-date="'+ eventDate +'"]'), 3806 selectedContentHeight = selectedContent.height(); 3807 3808 if (selectedContent.index() > visibleContent.index()) { 3809 var classEnetering = 'selected enter-right', 3810 classLeaving = 'leave-left'; 3811 } else { 3812 var classEnetering = 'selected enter-left', 3813 classLeaving = 'leave-right'; 3814 } 3815 3816 selectedContent.attr('class', classEnetering); 3817 visibleContent.attr('class', classLeaving).one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(){ 3818 visibleContent.removeClass('leave-right leave-left'); 3819 selectedContent.removeClass('enter-left enter-right'); 3820 }); 3821 eventsContent.css('height', selectedContentHeight+'px'); 3822 } 3823 3824 function updateOlderEvents(event) { 3825 event.parent('li').prevAll('li').children('a').addClass('older-event').end().end().nextAll('li').children('a').removeClass('older-event'); 3826 } 3827 3828 function getTranslateValue(timeline) { 3829 var timelineStyle = window.getComputedStyle(timeline.get(0), null), 3830 timelineTranslate = timelineStyle.getPropertyValue("-webkit-transform") || 3831 timelineStyle.getPropertyValue("-moz-transform") || 3832 timelineStyle.getPropertyValue("-ms-transform") || 3833 timelineStyle.getPropertyValue("-o-transform") || 3834 timelineStyle.getPropertyValue("transform"); 3835 3836 if( timelineTranslate.indexOf('(') >=0 ) { 3837 var timelineTranslate = timelineTranslate.split('(')[1]; 3838 timelineTranslate = timelineTranslate.split(')')[0]; 3839 timelineTranslate = timelineTranslate.split(','); 3840 var translateValue = timelineTranslate[4]; 3841 } else { 3842 var translateValue = 0; 3843 } 3844 3845 return Number(translateValue); 3846 } 3847 3848 function setTransformValue(element, property, value) { 3849 element.style["-webkit-transform"] = property+"("+value+")"; 3850 element.style["-moz-transform"] = property+"("+value+")"; 3851 element.style["-ms-transform"] = property+"("+value+")"; 3852 element.style["-o-transform"] = property+"("+value+")"; 3853 element.style["transform"] = property+"("+value+")"; 3854 } 3855 3856 //based on http://stackoverflow.com/questions/542938/how-do-i-get-the-number-of-days-between-two-dates-in-javascript 3857 function parseDate(events) { 3858 var dateArrays = []; 3859 events.each(function(){ 3860 var dateComp = jQuery(this).data('date').split('/'), 3861 newDate = new Date(dateComp[2], dateComp[1]-1, dateComp[0]); 3862 dateArrays.push(newDate); 3863 }); 3864 return dateArrays; 3865 } 3866 3867 function parseDate2(events) { 3868 var dateArrays = []; 3869 events.each(function(){ 3870 var singleDate = jQuery(this), 3871 dateComp = singleDate.data('date').split('T'); 3872 if( dateComp.length > 1 ) { //both DD/MM/YEAR and time are provided 3873 var dayComp = dateComp[0].split('/'), 3874 timeComp = dateComp[1].split(':'); 3875 } else if( dateComp[0].indexOf(':') >=0 ) { //only time is provide 3876 var dayComp = ["2000", "0", "0"], 3877 timeComp = dateComp[0].split(':'); 3878 } else { //only DD/MM/YEAR 3879 var dayComp = dateComp[0].split('/'), 3880 timeComp = ["0", "0"]; 3881 } 3882 var newDate = new Date(dayComp[2], dayComp[1]-1, dayComp[0], timeComp[0], timeComp[1]); 3883 dateArrays.push(newDate); 3884 }); 3885 return dateArrays; 3886 } 3887 3888 function daydiff(first, second) { 3889 return Math.round((second-first)); 3890 } 3891 3892 function minLapse(dates) { 3893 //determine the minimum distance among events 3894 var dateDistances = []; 3895 for (i = 1; i < dates.length; i++) { 3896 var distance = daydiff(dates[i-1], dates[i]); 3897 dateDistances.push(distance); 3898 } 3899 return Math.min.apply(null, dateDistances); 3900 } 3901 3902 /* 3903 How to tell if a DOM element is visible in the current viewport? 3904 http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport 3905 */ 3906 function elementInViewport(el) { 3907 var top = el.offsetTop; 3908 var left = el.offsetLeft; 3909 var width = el.offsetWidth; 3910 var height = el.offsetHeight; 3911 3912 while(el.offsetParent) { 3913 el = el.offsetParent; 3914 top += el.offsetTop; 3915 left += el.offsetLeft; 3916 } 3917 3918 return ( 3919 top < (window.pageYOffset + window.innerHeight) && 3920 left < (window.pageXOffset + window.innerWidth) && 3921 (top + height) > window.pageYOffset && 3922 (left + width) > window.pageXOffset 3923 ); 3924 } 3925 3926 function checkMQ() { 3927 //check if mobile or desktop device 3928 return window.getComputedStyle(document.querySelector('.cd-horizontal-timeline'), '::before').getPropertyValue('content').replace(/'/g, "").replace(/"/g, ""); 3929 } 3930 } ); 3931 //End execute javascript for portfolio timeline vertical 3932 3933 3934 //Start execute javascript for background list 3935 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-timeline-vertical.default', function( $scope ) { 3936 jQuery(".portfolio-timeline-vertical-content-wrapper").each(function() { 3937 var slideshow = jQuery(this); 3938 var autoPlay = slideshow.attr('data-autoplay'); 3939 var autoPlayArr = false;
3940 if (typeof autoPlay != "undefined"){ 3941 autoPlayArr = { 3942 delay: autoPlay 3943 }; 3944 } 3945 3946 var speed = slideshow.attr('data-speed'); 3947 if (typeof speed == "undefined"){ 3948 speed = 1600; 3949 } 3950 3951 var timelineSwiper = new Swiper ('.portfolio-timeline-vertical-content-wrapper .timeline .swiper-container', { 3952 direction: 'vertical', 3953 loop: false, 3954 speed: parseInt(speed), 3955 autoplay: autoPlayArr, 3956 pagination: { 3957 el: '.swiper-pagination', 3958 type: 'bullets', 3959 renderBullet: function (index, className) { 3960 var year = document.querySelectorAll('.swiper-slide')[index].getAttribute('data-year'); 3961 return '<span class="' + className + '">' + year + '</span>';; 3962 }, 3963 clickable: true 3964 }, 3965 navigation: { 3966 nextEl: '.swiper-button-next', 3967 prevEl: '.swiper-button-prev', 3968 }, 3969 breakpoints: { 3970 768: { 3971 direction: 'horizontal', 3972 } 3973 }, 3974 on: { 3975 init: function () { 3976 slideshow.delay(100).queue(function (next) { 3977 jQuery(this).addClass('active'); 3978 }); 3979 }, 3980 } 3981 }); 3982 }); 3983 } ); 3984 //End execute javascript for portfolio timeline vertical 3985 3986 //Start execute javascript for slider parallax 3987 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-parallax.default', function( $scope ) { 3988 jQuery(".slider-parallax-wrapper").each(function() { 3989 var slideshow=jQuery(this); 3990 var timer = slideshow.attr('data-autoplay'); 3991 var autoplay = true; 3992 3993 if(timer == 0) 3994 { 3995 timer = false; 3996 autoplay = false; 3997 } 3998 3999 var pagination = slideshow.attr('data-pagination'); 4000 if(pagination == 0) 4001 { 4002 var pagination = false; 4003 } 4004 else 4005 { 4006 var pagination = true; 4007 } 4008 4009 var navigation = slideshow.attr('data-navigation'); 4010 if(navigation == 0) 4011 { 4012 var navigation = false; 4013 } 4014 else 4015 { 4016 var navigation = true; 4017 } 4018 4019 var slideshowDuration = timer; 4020 4021 function slideshowSwitch(slideshow,index,auto){ 4022 if(slideshow.data('wait')) return; 4023 4024 var slides = slideshow.find('.slide'); 4025 var pages = slideshow.find('.pagination'); 4026 var activeSlide = slides.filter('.is-active'); 4027 var activeSlideImage = activeSlide.find('.image-container'); 4028 var newSlide = slides.eq(index); 4029 var newSlideImage = newSlide.find('.image-container'); 4030 var newSlideContent = newSlide.find('.slide-content'); 4031 var newSlideElements=newSlide.find('.caption > *'); 4032 if(newSlide.is(activeSlide))return; 4033 4034 newSlide.addClass('is-new'); 4035 var timeout=slideshow.data('timeout'); 4036 clearTimeout(timeout); 4037 slideshow.data('wait',true); 4038 var transition=slideshow.attr('data-transition'); 4039 if(transition=='fade'){ 4040 newSlide.css({ 4041 display:'block', 4042 zIndex:2 4043 }); 4044 newSlideImage.css({ 4045 opacity:0 4046 }); 4047 4048 TweenMax.to(newSlideImage,1,{ 4049 alpha:1, 4050 onComplete:function(){ 4051 newSlide.addClass('is-active').removeClass('is-new'); 4052 activeSlide.removeClass('is-active'); 4053 newSlide.css({display:'',zIndex:''}); 4054 newSlideImage.css({opacity:''}); 4055 slideshow.find('.pagination').trigger('check'); 4056 slideshow.data('wait',false); 4057 if(auto){ 4058 timeout=setTimeout(function(){ 4059 slideshowNext(slideshow,false,true); 4060 },slideshowDuration); 4061 slideshow.data('timeout',timeout);}}}); 4062 } else { 4063 if(newSlide.index()>activeSlide.index()){ 4064 var newSlideRight=0; 4065 var newSlideLeft='auto'; 4066 var newSlideImageRight=-slideshow.width()/8; 4067 var newSlideImageLeft='auto'; 4068 var newSlideImageToRight=0; 4069 var newSlideImageToLeft='auto'; 4070 var newSlideContentLeft='auto'; 4071 var newSlideContentRight=0; 4072 var activeSlideImageLeft=-slideshow.width()/4; 4073 } else { 4074 var newSlideRight=''; 4075 var newSlideLeft=0; 4076 var newSlideImageRight='auto'; 4077 var newSlideImageLeft=-slideshow.width()/8; 4078 var newSlideImageToRight=''; 4079 var newSlideImageToLeft=0; 4080 var newSlideContentLeft=0; 4081 var newSlideContentRight='auto'; 4082 var activeSlideImageLeft=slideshow.width()/4; 4083 } 4084 4085 newSlide.css({ 4086 display:'block', 4087 width:0,
4088 right:newSlideRight, 4089 left:newSlideLeft 4090 ,zIndex:2 4091 }); 4092 4093 newSlideImage.css({ 4094 width:slideshow.width(), 4095 right:newSlideImageRight, 4096 left:newSlideImageLeft 4097 }); 4098 4099 newSlideContent.css({ 4100 width:slideshow.width(), 4101 left:newSlideContentLeft, 4102 right:newSlideContentRight 4103 }); 4104 4105 activeSlideImage.css({ 4106 left:0 4107 }); 4108 4109 TweenMax.set(newSlideElements,{y:20,force3D:true}); 4110 TweenMax.to(activeSlideImage,1,{ 4111 left:activeSlideImageLeft, 4112 ease:Power3.easeInOut 4113 }); 4114 4115 TweenMax.to(newSlide,1,{ 4116 width:slideshow.width(), 4117 ease:Power3.easeInOut 4118 }); 4119 4120 TweenMax.to(newSlideImage,1,{ 4121 right:newSlideImageToRight, 4122 left:newSlideImageToLeft, 4123 ease:Power3.easeInOut 4124 }); 4125 4126 TweenMax.staggerFromTo(newSlideElements,0.8,{alpha:0,y:60},{alpha:1,y:0,ease:Power3.easeOut,force3D:true,delay:0.6},0.1,function(){ 4127 newSlide.addClass('is-active').removeClass('is-new'); 4128 activeSlide.removeClass('is-active'); 4129 newSlide.css({ 4130 display:'', 4131 width:'', 4132 left:'', 4133 zIndex:'' 4134 }); 4135 4136 newSlideImage.css({ 4137 width:'', 4138 right:'', 4139 left:'' 4140 }); 4141 4142 newSlideContent.css({ 4143 width:'', 4144 left:'' 4145 }); 4146 4147 newSlideElements.css({ 4148 opacity:'', 4149 transform:'' 4150 }); 4151 4152 activeSlideImage.css({ 4153 left:'' 4154 }); 4155 4156 slideshow.find('.pagination').trigger('check'); 4157 slideshow.data('wait',false); 4158 if(auto){ 4159 timeout=setTimeout(function(){ 4160 slideshowNext(slideshow,false,true); 4161 },slideshowDuration); 4162 slideshow.data('timeout',timeout); 4163 } 4164 }); 4165 } 4166 } 4167 4168 function slideshowNext(slideshow,previous,auto){ 4169 var slides=slideshow.find('.slide'); 4170 var activeSlide=slides.filter('.is-active'); 4171 var newSlide=null; 4172 if(previous){ 4173 newSlide=activeSlide.prev('.slide'); 4174 if(newSlide.length === 0) { 4175 newSlide=slides.last(); 4176 } 4177 } else { 4178 newSlide=activeSlide.next('.slide'); 4179 if(newSlide.length==0) 4180 newSlide=slides.filter('.slide').first(); 4181 } 4182 4183 slideshowSwitch(slideshow,newSlide.index(),auto); 4184 } 4185 4186 function homeSlideshowParallax(){ 4187 var scrollTop=jQuery(window).scrollTop(); 4188 if(scrollTop>windowHeight) return; 4189 var inner=slideshow.find('.slideshow-inner'); 4190 var newHeight=windowHeight-(scrollTop/2); 4191 var newTop=scrollTop*0.8; 4192 4193 inner.css({ 4194 transform:'translateY('+newTop+'px)',height:newHeight 4195 }); 4196 } 4197 4198 jQuery(document).ready(function() { 4199 jQuery('.slider-parallax-wrapper .slide').addClass('is-loaded'); 4200 4201 jQuery('.slider-parallax-wrapper .arrows .arrow').on('click',function(){ 4202 slideshowNext(jQuery(this).closest('.slider-parallax-wrapper'),jQuery(this).hasClass('prev')); 4203 }); 4204 4205 jQuery('.slider-parallax-wrapper .pagination .item').on('click',function(){ 4206 slideshowSwitch(jQuery(this).closest('.slider-parallax-wrapper'),jQuery(this).index()); 4207 }); 4208 4209 jQuery('.slider-parallax-wrapper .pagination').on('check',function(){ 4210 var slideshow=jQuery(this).closest('.slider-parallax-wrapper'); 4211 var pages=jQuery(this).find('.item'); 4212 var index=slideshow.find('.slider_parallax_slides .is-active').index(); 4213 pages.removeClass('is-active'); 4214 pages.eq(index).addClass('is-active'); 4215 }); 4216 4217 if(autoplay) 4218 { 4219 var timeout=setTimeout(function(){ 4220 slideshowNext(slideshow,false,true); 4221 },slideshowDuration); 4222 4223 slideshow.data('timeout',timeout); 4224 } 4225 }); 4226 }); 4227 } ); 4228 //End execute javascript for slider parallax 4229 4230 4231 //Start execute javascript for distortion grid 4232 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-distortion-grid.default', function( $scope ) { 4233 Array.from(document.querySelectorAll('.distortion-grid-item-img')).forEac
4233h((el) => { 4234 const imgs = Array.from(el.querySelectorAll('img')); 4235 new hoverEffect({ 4236 parent: el, 4237 intensity: el.dataset.intensity || undefined, 4238 speedIn: el.dataset.speedin || undefined, 4239 speedOut: el.dataset.speedout || undefined, 4240 easing: el.dataset.easing || undefined, 4241 hover: el.dataset.hover || undefined, 4242 image1: imgs[0].getAttribute('src'), 4243 image2: imgs[1].getAttribute('src'), 4244 displacementImage: el.dataset.displacement 4245 }); 4246 }); 4247 } ); 4248 //End execute javascript for distortion grid 4249 4250 4251 //Start execute javascript for slider animated 4252 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-animated.default', function( $scope ) { 4253 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 4254 4255 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 4256 4257 var $window = jQuery(window); 4258 var $body = jQuery('body'); 4259 4260 var Slideshow = function () { 4261 function Slideshow() { 4262 var _this = this; 4263 4264 var userOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 4265 4266 _classCallCheck(this, Slideshow); 4267 4268 var defaultOptions = { 4269 $el: jQuery('.animated-slider-wrapper'),
4270 showArrows: false, 4271 showPagination: true, 4272 duration: 10000, 4273 autoplay: true 4274 }; 4275 4276 var options = Object.assign({}, defaultOptions, userOptions); 4277 4278 this.$el = options.$el; 4279 this.maxSlide = this.$el.find(jQuery('.js-slider-home-slide')).length; 4280 this.showArrows = this.maxSlide > 1 ? options.showArrows : false; 4281 this.showPagination = options.showPagination; 4282 this.currentSlide = 1; 4283 this.isAnimating = false; 4284 this.animationDuration = 1200; 4285 this.autoplaySpeed = options.duration; 4286 this.interval; 4287 this.$controls = this.$el.find('.js-slider-home-button'); 4288 this.autoplay = this.maxSlide > 1 ? options.autoplay : false; 4289 this.autoplay = false; 4290 4291 this.$el.on('click', '.js-slider-home-next', function (event) { 4292 return _this.nextSlide(); 4293 }); 4294 this.$el.on('click', '.js-slider-home-prev', function (event) { 4295 return _this.prevSlide(); 4296 }); 4297 this.$el.on('click', '.js-pagination-item', function (event) { 4298 if (!_this.isAnimating) { 4299 _this.preventClick(); 4300 _this.goToSlide(event.target.dataset.slide); 4301 } 4302 }); 4303 4304 this.init(); 4305 } 4306 4307 _createClass(Slideshow, [{ 4308 key: 'init', 4309 value: function init() { 4310 this.goToSlide(1); 4311 4312 if (this.autoplay) { 4313 this.startAutoplay(); 4314 } 4315 4316 if (this.showPagination) { 4317 var paginationNumber = this.maxSlide; 4318 var pagination = '<div class="pagination"><div class="container">'; 4319 4320 for (var i = 0; i < this.maxSlide; i++) { 4321 var item = '<span class="pagination-item js-pagination-item ' + (i === 0 ? 'is-current' : '') + '" data-slide=' + (i + 1) + '>' + (i + 1) + '</span>'; 4322 pagination = pagination + item; 4323 } 4324 4325 pagination = pagination + '</div></div>'; 4326 4327 this.$el.append(pagination); 4328 } 4329 } 4330 }, { 4331 key: 'preventClick', 4332 value: function preventClick() { 4333 var _this2 = this; 4334 4335 this.isAnimating = true; 4336 this.$controls.prop('disabled', true); 4337 clearInterval(this.interval); 4338 4339 setTimeout(function () { 4340 _this2.isAnimating = false; 4341 _this2.$controls.prop('disabled', false); 4342 if (_this2.autoplay) { 4343 _this2.startAutoplay(); 4344 } 4345 }, this.animationDuration); 4346 } 4347 }, { 4348 key: 'goToSlide', 4349 value: function goToSlide(index) { 4350 this.currentSlide = parseInt(index); 4351 4352 if (this.currentSlide > this.maxSlide) { 4353 this.currentSlide = 1; 4354 } 4355 4356 if (this.currentSlide === 0) { 4357 this.currentSlide = this.maxSlide; 4358 } 4359 4360 var newCurrent = this.$el.find('.js-slider-home-slide[data-slide="' + this.currentSlide + '"]'); 4361 var newPrev = this.currentSlide === 1 ? this.$el.find('.js-slider-home-slide').last() : newCurrent.prev('.js-slider-home-slide'); 4362 var newNext = this.currentSlide === this.maxSlide ? this.$el.find('.js-slider-home-slide').first() : newCurrent.next('.js-slider-home-slide'); 4363 4364 this.$el.find('.js-slider-home-slide').removeClass('is-prev is-next is-current'); 4365 this.$el.find('.js-pagination-item').removeClass('is-current'); 4366 4367 if (this.maxSlide > 1) { 4368 newPrev.addClass('is-prev'); 4369 newNext.addClass('is-next'); 4370 } 4371 4372 newCurrent.addClass('is-current');
4373 this.$el.find('.js-pagination-item[data-slide="' + this.currentSlide + '"]').addClass('is-current'); 4374 } 4375 }, { 4376 key: 'nextSlide', 4377 value: function nextSlide() { 4378 this.preventClick(); 4379 this.goToSlide(this.currentSlide + 1); 4380 } 4381 }, { 4382 key: 'prevSlide', 4383 value: function prevSlide() { 4384 this.preventClick(); 4385 this.goToSlide(this.currentSlide - 1); 4386 } 4387 }, { 4388 key: 'startAutoplay', 4389 value: function startAutoplay() { 4390 var _this3 = this; 4391 4392 this.interval = setInterval(function () { 4393 if (!_this3.isAnimating) { 4394 _this3.nextSlide(); 4395 } 4396 }, this.autoplaySpeed); 4397 } 4398 }, { 4399 key: 'destroy', 4400 value: function destroy() { 4401 this.$el.off(); 4402 } 4403 }]); 4404 4405 return Slideshow; 4406 }(); 4407 4408 (function () { 4409 var loaded = false; 4410 var maxLoad = 3000; 4411 4412 function load() { 4413 var options = { 4414 showPagination: true 4415 }; 4416 4417 var slideShow = new Slideshow(options); 4418 } 4419 4420 function addLoadClass() { 4421 $body.addClass('is-loaded'); 4422 4423 setTimeout(function () { 4424 $body.addClass('is-animated'); 4425 }, 600); 4426 } 4427 4428 $window.on('load', function () { 4429 if (!loaded) { 4430 loaded = true; 4431 load(); 4432 } 4433 }); 4434 4435 setTimeout(function () { 4436 if (!loaded) { 4437 loaded = true; 4438 load(); 4439 } 4440 }, maxLoad); 4441 4442 addLoadClass(); 4443 })(); 4444 } ); 4445 //End execute javascript for slider animated 4446 4447 4448 //Start execute javascript for fade up slider 4449 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-fadeup.default', function( $scope ) { 4450 function init(item) { 4451 var items = item.querySelectorAll('li'), 4452 current = 0, 4453 autoUpdate = true; 4454 4455 //create nav 4456 var nav = document.createElement('nav'); 4457 nav.className = 'nav_arrows'; 4458 4459 //create button prev 4460 var prevbtn = document.createElement('button'); 4461 prevbtn.className = 'prev'; 4462 prevbtn.setAttribute('aria-label', 'Prev'); 4463 4464 //create button next 4465 var nextbtn = document.createElement('button'); 4466 nextbtn.className = 'next'; 4467 nextbtn.setAttribute('aria-label', 'Next'); 4468 4469 //create counter 4470 var counter = document.createElement('div'); 4471 counter.className = 'counter'; 4472 counter.innerHTML = "<span>1</span><span>"+items.length+"</span>"; 4473 4474 if (items.length > 1) { 4475 nav.appendChild(prevbtn); 4476 nav.appendChild(counter); 4477 nav.appendChild(nextbtn); 4478 item.appendChild(nav); 4479 } 4480 4481 items[current].className = "current"; 4482 if (items.length > 1) items[items.length-1].className = "prev-slide"; 4483 4484 var navigate = function(dir) { 4485 items[current].className = ""; 4486 4487 if (dir === 'right') { 4488 current = current < items.length-1 ? current + 1 : 0; 4489 } else { 4490 current = current > 0 ? current - 1 : items.length-1; 4491 } 4492 4493 var nextCurrent = current < items.length-1 ? current + 1 : 0, 4494 prevCurrent = current > 0 ? current - 1 : items.length-1; 4495 4496 items[current].className = "current"; 4497 items[prevCurrent].className = "prev-slide"; 4498 items[nextCurrent].className = ""; 4499 4500 //update counter 4501 counter.firstChild.textContent = current + 1; 4502 } 4503 4504 item.addEventListener('mouseenter', function() { 4505 autoUpdate = false; 4506 }); 4507 4508 item.addEventListener('mouseleave', function() { 4509 autoUpdate = true; 4510 }); 4511 4512 prevbtn.addEventListener('click', function() { 4513 navigate('left'); 4514 }); 4515 4516 nextbtn.addEventListener('click', function() { 4517 navigate('right'); 4518 }); 4519 4520 //keyboard navigation 4521 document.addEventListener('keydown', function(ev) { 4522 var keyCode = ev.keyCode || ev.which; 4523 switch (keyCode) { 4524 case 37: 4525 navigate('left'); 4526 break; 4527 case 39: 4528 navigate('right'); 4529 break; 4530 } 4531 }); 4532 4533 // swipe navigation 4534 // from http://stackoverflow.com/a/23230280 4535 item.addEventListener('touchstart', handleTouchStart, false); 4536 item.addEventListener('touchmove', handleTouchMove, false); 4537 var xDown = null; 4538 var yDown = null; 4539 function handleTouchStart(evt) { 4540 xDown = evt.touches[0].clientX; 4541 yDown = evt.touches[0].clientY; 4542 }; 4543 function handleTouchMove(evt) { 4544 if ( ! xDown || ! yDown ) { 4545 return; 4546 } 4547 4548 var xUp = evt.touches[0].clientX; 4549 var yUp = evt.touches[0].clientY; 4550 4551 var xDiff = xDown - xUp; 4552 var yDiff = yDown - yUp; 4553 4554 if ( Math.abs( xDiff ) > Math.abs( yDiff ) ) {/*most significant*/ 4555 if ( xDiff > 0 ) { 4556 /* left swipe */ 4557 navigate('right'); 4558 } else { 4559 navigate('left'); 4560 } 4561 } 4562 /* reset values */ 4563 xDown = null; 4564 yDown = null; 4565 }; 4566 4567 4568 } 4569 4570 [].slice.call(document.querySelectorAll('.fadeup-slider-wrapper')).forEac
4570h( function(item) { 4571 init(item); 4572 }); 4573 } ); 4574 //End execute javascript for fade up slider 4575 4576 4577 //Start execute javascript for motion reveal slider 4578 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-motion-reveal.default', function( $scope ) { 4579 // The Slide class. 4580 class Slide { 4581 constructor(el) { 4582 this.DOM = {el: el}; 4583 // The image conteiner. 4584 this.DOM.imgWrap = this.DOM.el.querySelector('.slide-img-wrap'); 4585 // The revealer element (the element with the same color of the body that covers the image). 4586 this.DOM.revealer = this.DOM.imgWrap.querySelector('.slide-img-reveal'); 4587 // The title element. 4588 this.DOM.title = this.DOM.el.querySelector('.slide-title'); 4589 // The slide´s number element 4590 this.DOM.number = this.DOM.el.querySelector('.slide-number'); 4591 // The large preview elements (also an image and revealer for the cover/uncover effect) 4592 this.DOM.preview = { 4593 imgWrap: this.DOM.el.querySelector('.preview-img-wrap'), 4594 revealer: this.DOM.el.querySelector('.preview-img-wrap > .preview-img-reveal'), 4595 title: this.DOM.el.querySelector('.preview-title'), 4596 content: this.DOM.el.querySelector('.preview-content') 4597 }; 4598 4599 // Some config values. 4600 this.config = { 4601 animation: { 4602 duration: 0.6, 4603 ease: Expo.easeOut 4604 } 4605 }; 4606 } 4607 // Sets the current class. 4608 setCurrent(isCurrent = true) { 4609 this.DOM.el.classList[isCurrent ? 'add' : 'remove']('slide-current'); 4610 } 4611 // Hide the slide. 4612 hide(direction) { 4613 return this.toggle('hide', direction); 4614 } 4615 // Show the slide. 4616 show(direction) { 4617 return this.toggle('show', direction); 4618 } 4619 // Show/Hide the slide. 4620 toggle(action, direction) { 4621 // Hide/Show revealer on top of the image and move the image, title and number. 4622 return new Promise((resolve, reject) => { 4623 let revealerOpts = { 4624 delay: action === 'hide' ? 0 : this.config.animation.duration/2, 4625 ease: this.config.animation.ease, 4626 onComplete: resolve 4627 }; 4628 4629 const commonOpts = { 4630 delay: action === 'hide' ? 0 : this.config.animation.duration/2, 4631 ease: this.config.animation.ease, 4632 opacity: action === 'hide' ? 0 : 1 4633 }; 4634 let imgOpts = Object.assign({},commonOpts); 4635 let numberOpts = Object.assign({},commonOpts); 4636 let titleOpts = Object.assign({},commonOpts); 4637 4638 if ( direction === 'left' || direction === 'right' ) { 4639 revealerOpts.startAt = action === 'hide' ? {x: direction === 'left' ? '-100%' : '100%', y:'0%'} : {x: '0%', y:'0%'}; 4640 revealerOpts.x = action === 'hide' ? '0%' : direction === 'left' ? '100%' : '-100%'; 4641 imgOpts.startAt = action === 'show' ? {opacity: 0, x: direction === 'left' ? '-20%' : '20%'} : {}; 4642 imgOpts.x = action === 'hide' ? direction === 'left' ? '20%' : '-20%' : '0%'; 4643 titleOpts.startAt = action === 'show' ? {opacity: 1, scale: 0.2, x: direction === 'left' ? '-200%' : '200%'} : {}; 4644 titleOpts.x = action === 'hide' ? direction === 'left' ? '200%' : '-200%' : '0%'; 4645 titleOpts.scale = action === 'hide' ? 0.2 : 1; 4646 numberOpts.startAt = action === 'show' ? {opacity: 1, x: direction === 'left' ? '-50%' : '50%'} : {}; 4647 numberOpts.x = action === 'hide' ? direction === 'left' ? '50%' : '-50%' : '0%'; 4648 } 4649 else { 4650 revealerOpts.startAt = action === 'hide' ? {x:'0%', y: direction === 'down' ? '-100%' : '100%'} : {x:'0%', y: '0%'}; 4651 revealerOpts.y = action === 'hide' ? '0%' : direction === 'down' ? '100%' : '-100%'; 4652 imgOpts.startAt = action === 'show' ? {opacity: 1, y: direction === 'down' ? '-10%' : '10%'} : {}; 4653 imgOpts.y = action === 'hide' ? direction === 'down' ? '10%' : '-10%' : '0%'; 4654 titleOpts.ease = this.config.animation.ease, 4655 titleOpts.startAt = action === 'show' ? {opacity: 1, y: direction === 'down' ? '-100%' : '100%'} : {}; 4656 titleOpts.y = action === 'hide' ? direction === 'down' ? '100%' : '-100%' : '0%'; 4657 } 4658 4659 // Toggling the revealer. 4660 TweenMax.to(this.DOM.revealer, this.config.animation.duration, revealerOpts); 4661 // Moving & fading the image (wrappper). 4662 TweenMax.to(this.DOM.imgWrap, this.config.animation.duration, imgOpts); 4663 // Moving & fading the title and number. 4664 TweenMax.to(this.DOM.title, this.config.animation.duration*1.5, titleOpts); 4665 TweenMax.to(this.DOM.number, this.config.animation.duration, numberOpts); 4666 }); 4667 } 4668 // Hide the preview element. 4669 hidePreview(delay) { 4670 return this.togglePreview('hide'); 4671 } 4672 // Show the preview element. 4673 showPreview(delay) { 4674 return this.togglePreview('show'); 4675 } 4676 // Show/Hide the preview. 4677 togglePreview(action) { 4678 return new Promise((resolve, reject) => { 4679 // Hide/Show revealer. 4680 TweenMax.to(this.DOM.preview.revealer, this.config.animation.duration, { 4681 delay: action === 'hide' ? 0 : this.config.animation.duration/2, 4682 ease: this.config.animation.ease, 4683 startAt: action === 'hide' ? {x:'0%', y:'-100%'} : {x:'0%', y:'0%'}, 4684 y: action === 'hide' ? '0%' : '-100%', 4685 onComplete: resolve 4686 }); 4687 // Move and fade the image wrapper. 4688 TweenMax.to(this.DOM.preview.imgWrap, this.config.animation.duration, { 4689 delay: action === 'hide' ? 0 : this.config.animation.duration/2, 4690 ease: this.config.animation.ease, 4691 startAt: action === 'hide' ? {} : {opacity: 0, y: '20%'}, 4692 y: action === 'hide' ? '20%' : '0%', 4693 opacity: action === 'hide' ? 0 : 1 4694 }); 4695 // Move and fade the title and content. 4696 TweenMax.to([this.DOM.preview.title,this.DOM.preview.content], this.config.animation.duration, { 4697 delay: action === 'hide' ? 0 : this.config.animation.duration/2, 4698 ease: this.config.animation.ease, 4699 startAt: action === 'hide' ? {} : {opacity: 0, y: '200%'}, 4700 y: action === 'hide' ? '200%' : '0%', 4701 opacity: action === 'hide' ? 0 : 1 4702 }); 4703 }); 4704 } 4705 } 4706 4707 // The Slideshow class. 4708 class Slideshow { 4709 constructor(el) { 4710 this.DOM = {el: el}; 4711 // Navigation controls (prev, next and preview ctrls) 4712 this.DOM.prevCtrl = this.DOM.el.querySelector('.slidenav-item--prev'); 4713 this.DOM.nextCtrl = this.DOM.el.querySelector('.slidenav-item--next'); 4714 this.DOM.previewCtrl = this.DOM.el.querySelector('.slidenav-preview'); 4715 // The slides. 4716 this.slides = []; 4717 Array.from(this.DOM.el.querySelectorAll('.slide')).forEac
4717h(slideEl => this.slides.push(new Slide(slideEl))); 4718 // The total number of slides. 4719 this.slidesTotal = this.slides.length; 4720 // Current slide position. 4721 this.current = 0; 4722 // initialize the slideshow. 4723 this.init(); 4724 } 4725 // init: set the current slide and initialize some events.. 4726 init() { 4727 this.slides[this.current].setCurrent(); 4728 this.initEvents(); 4729 } 4730 initEvents() { 4731 this.DOM.prevCtrl.addEventListener('click', () => this.prev()); 4732 this.DOM.nextCtrl.addEventListener('click', () => this.next()); 4733 this.DOM.previewCtrl.addEventListener('click', (ev) => { 4734 if ( this.isAnimating ) return; 4735 if ( ev.target.classList.contains('slidenav-preview--open') ) { 4736 ev.target.classList.remove('slidenav-preview--open'); 4737 this.exitPreview(); 4738 } 4739 else { 4740 ev.target.classList.add('slidenav-preview--open') 4741 this.enterPreview(); 4742 } 4743 }); 4744 } 4745 prev() { 4746 this.navigate('left'); 4747 } 4748 next() { 4749 this.navigate('right'); 4750 } 4751 enterPreview() { 4752 this.togglePreview('enter'); 4753 } 4754 exitPreview() { 4755 this.togglePreview('exit'); 4756 } 4757 togglePreview(action) { 4758 // If animating return. 4759 if ( this.isAnimating ) return; 4760 this.isAnimating = true; 4761 4762 const processing = action === 'enter' ? 4763 [this.slides[this.current].hide('up'), this.slides[this.current].showPreview()] : 4764 [this.slides[this.current].show('down'), this.slides[this.current].hidePreview()]; 4765 4766 // Hide the next/prev controls. 4767 this.toggleNavCtrls(action); 4768 4769 Promise.all(processing).then(() => this.isAnimating = false); 4770 } 4771 toggleNavCtrls(action) { 4772 TweenMax.to([this.DOM.prevCtrl, this.DOM.nextCtrl], 0.5, { 4773 ease: 'Expo.easeOut', 4774 opacity: action === 'enter' ? 0 : 1, 4775 onStart: () => this.DOM.prevCtrl.style.pointerEvents = this.DOM.nextCtrl.style.pointerEvents = action === 'enter' ? 'none' : 'auto' 4776 }); 4777 } 4778 // Navigate the slideshow. 4779 navigate(direction) { 4780 // If animating return. 4781 if ( this.isAnimating ) return; 4782 this.isAnimating = true; 4783 4784 const nextSlidePos = direction === 'right' ? 4785 this.current < this.slidesTotal-1 ? this.current+1 : 0 : 4786 this.current > 0 ? this.current-1 : this.slidesTotal-1; 4787 4788 Promise.all([this.slides[this.current].hide(direction), this.slides[nextSlidePos].show(direction)]) 4789 .then(() => { 4790 // Update current. 4791 this.slides[this.current].setCurrent(false); 4792 this.current = nextSlidePos; 4793 this.isAnimating = false; 4794 this.slides[this.current].setCurrent(); 4795 }); 4796 } 4797 } 4798 4799 const slideshow = new Slideshow(document.querySelector('.motion-reveal-slider-wrapper.slideshow')); 4800 } ); 4801 //End execute javascript for motion reveal slider 4802 4803 4804 //Start execute javascript for testimonials card 4805 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-testimonial-card.default', function( $scope ) { 4806 jQuery(".testimonials-card-wrapper .owl-carousel").each(function() { 4807 var autoPlay = jQuery(this).attr('data-autoplay'); 4808 if (typeof autoPlay == "undefined"){ 4809 autoPlay = false; 4810 } 4811 if(autoPlay == 1) 4812 { 4813 autoPlay = true; 4814 } 4815 else 4816 { 4817 autoPlay = false; 4818 } 4819 4820 var timer = jQuery(this).attr('data-timer'); 4821 if (typeof timer == "undefined"){ 4822 timer = 8000; 4823 } 4824 4825 var pagination = jQuery(this).attr('data-pagination'); 4826 if (typeof pagination == "undefined"){ 4827 pagination = true; 4828 } 4829 if(pagination == 1) 4830 { 4831 pagination = true; 4832 } 4833 else 4834 { 4835 pagination = false; 4836 } 4837 4838 jQuery(this).owlCarousel({ 4839 loop: true, 4840 center: true, 4841 items: 3, 4842 margin: 0, 4843 autoplay: autoPlay, 4844 dots:pagination, 4845 autoplayTimeout: timer, 4846 smartSpeed: 450, 4847 responsive: { 4848 0: { 4849 items: 1 4850 }, 4851 768: { 4852 items: 2 4853 }, 4854 1170: { 4855 items: 3 4856 } 4857 } 4858 }); 4859 }); 4860 }); 4861 //End execute javascript for testimonials card 4862 4863 4864 //Start execute javascript for testimonials slider 4865 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-testimonial-slider.default', function( $scope ) { 4866 jQuery(".testimonials-slider-wrapper .owl-carousel").each(function() { 4867 var autoPlay = jQuery(this).attr('data-autoplay'); 4868 if (typeof autoPlay == "undefined"){ 4869 autoPlay = false;
4870 } 4871 if(autoPlay == 1) 4872 { 4873 autoPlay = true; 4874 } 4875 else 4876 { 4877 autoPlay = false; 4878 } 4879 4880 var timer = jQuery(this).attr('data-timer'); 4881 if (typeof timer == "undefined"){ 4882 timer = 8000; 4883 } 4884 4885 jQuery(this).owlCarousel({ 4886 loop: true, 4887 center: true, 4888 margin: 0, 4889 nav:true, 4890 autoplay: autoPlay, 4891 autoplayTimeout: timer, 4892 smartSpeed: 300, 4893 navText: [ '<span class="arrow-left"></span>', '<span class="arrow-right"></span>' ], 4894 responsive:{ 4895 0:{ 4896 items:1 4897 }, 4898 600:{ 4899 items:1 4900 }, 4901 800:{ 4902 items:1 4903 }, 4904 1024:{ 4905 items:1 4906 } 4907 } 4908 }); 4909 }); 4910 }); 4911 //End execute javascript for testimonials slider 4912 4913 4914 //Start execute javascript for slider image carousel 4915 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-image-carousel.default', function( $scope ) { 4916 jQuery(".image-carousel-slider-wrapper").each(function() { 4917 jQuery(this).find('.carousel-item').eq(0).addClass('active'); 4918 var total = jQuery(this).find('.carousel-item').length; 4919 var current = 0; 4920 var slideObj = jQuery(this); 4921 4922 jQuery(this).find('#moveRight').on('click', function(){ 4923 var next=current; 4924 current= current+1; 4925 setSlide(next, current, slideObj); 4926 }); 4927 jQuery(this).find('#moveLeft').on('click', function(){ 4928 var prev=current; 4929 current = current- 1; 4930 setSlide(prev, current, slideObj); 4931 }); 4932 function setSlide(prev, next, slideObj){ 4933 var slide= current; 4934 if(next>total-1){ 4935 slide=0; 4936 current=0; 4937 } 4938 if(next<0){ 4939 slide=total - 1; 4940 current=total - 1; 4941 } 4942 4943 slideObj.find('.carousel-item').eq(prev).removeClass('active'); 4944 slideObj.find('.carousel-item').eq(slide).addClass('active'); 4945 setTimeout(function(){ 4946 4947 },800); 4948 } 4949 }); 4950 } ); 4951 //End execute javascript for slider image carousel 4952 4953 4954 //Start execute javascript for portfolio grid 4955 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-grid.default', function( $scope ) { 4956 jQuery(".portfolio_grid_container").each(function() { 4957 var containderDiv = jQuery(this); 4958 var selectedClass = ""; 4959 4960 containderDiv.find(".filter-tag-btn").on('click', function(){ 4961 containderDiv.find(".filter-tag-btn").removeClass("active"); 4962 jQuery(this).addClass("active"); 4963 selectedClass = jQuery(this).attr("data-rel"); 4964 column = jQuery(this).attr("data-cols"); 4965 4966 var gridDiv = containderDiv.find(".portfolio-grid-content-wrapper"); 4967 4968 gridDiv.fadeTo(100, 0); 4969 gridDiv.find(".portfolio-grid-wrapper").css({ 4970 opacity: 0, 4971 display: 'none', 4972 transform: 'scale(0.0)' 4973 }); 4974 gridDiv.find(".portfolio-grid-wrapper").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 4975 4976 setTimeout(function() { 4977 jQuery("."+selectedClass).fadeIn().addClass('scale-anm'); 4978 4979 jQuery("."+selectedClass).css({ 4980 opacity: 1, 4981 display: 'block', 4982 transform: 'scale(1,1)' 4983 }); 4984 4985 gridDiv.find(".portfolio-grid-wrapper.last").removeClass('last'); 4986 var count = gridDiv.find(".portfolio-grid-wrapper.scale-anm").length; 4987 4988 gridDiv.find(".portfolio-grid-wrapper.scale-anm").each(function(index){ 4989 var lastIndex = parseInt(index+1); 4990 4991 if(lastIndex%column == 0) 4992 { 4993 jQuery(this).addClass('last'); 4994 } 4995 4996 if(lastIndex == count) 4997 { 4998 setTimeout(function() { 4999 gridDiv.fadeTo(300, 1); 5000 }, 300); 5001 } 5002 }); 5003 5004 }, 300); 5005 }); 5006 }); 5007 } ); 5008 //End execute javascript for portfolio grid 5009 5010 5011 5012 //Start execute javascript for portfolio grid overlay 5013 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-grid-overlay.default', function( $scope ) { 5014 jQuery(".portfolio-grid-overlay-container").each(function() { 5015 var containderDiv = jQuery(this); 5016 var selectedClass = ""; 5017
5018 containderDiv.find(".portfolio-grid-wrapper-overlay").imagesLoaded().always( function() { 5019 var currentWrapper = containderDiv.find(".portfolio-grid-wrapper-overlay"); 5020 var currentImg = containderDiv.find(".portfolio-grid-wrapper-overlay img"); 5021 5022 currentWrapper.css('height', currentImg.height()+'px'); 5023 }); 5024 5025 jQuery(window).resize(function() { 5026 containderDiv.find(".portfolio-grid-wrapper-overlay").each(function() { 5027 var currentImg = jQuery(this).find("img"); 5028 5029 jQuery(this).css('height', currentImg.height()+'px'); 5030 }); 5031 }); 5032 5033 containderDiv.find(".filter-tag-btn").on('click', function(){ 5034 containderDiv.find(".filter-tag-btn").removeClass("active"); 5035 jQuery(this).addClass("active"); 5036 selectedClass = jQuery(this).attr("data-rel"); 5037 column = jQuery(this).attr("data-cols"); 5038 5039 var gridDiv = containderDiv.find(".portfolio-grid-content-wrapper"); 5040 5041 gridDiv.fadeTo(100, 0); 5042 gridDiv.find(".portfolio-grid-wrapper-overlay").css({ 5043 opacity: 0, 5044 display: 'none', 5045 transform: 'scale(0.0)' 5046 }); 5047 gridDiv.find(".portfolio-grid-wrapper-overlay").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 5048 5049 setTimeout(function() { 5050 jQuery("."+selectedClass).fadeIn().addClass('scale-anm'); 5051 5052 jQuery("."+selectedClass).css({ 5053 opacity: 1, 5054 display: 'block', 5055 transform: 'scale(1,1)' 5056 }); 5057 5058 gridDiv.find(".portfolio-grid-wrapper-overlay.last").removeClass('last'); 5059 var count = gridDiv.find(".portfolio-grid-wrapper-overlay.scale-anm").length; 5060 5061 gridDiv.find(".portfolio-grid-wrapper-overlay.scale-anm").each(function(index){ 5062 var lastIndex = parseInt(index+1); 5063 if(lastIndex%column == 0) 5064 { 5065 jQuery(this).addClass('last'); 5066 } 5067 5068 if(lastIndex == count) 5069 { 5070 setTimeout(function() { 5071 gridDiv.fadeTo(300, 1); 5072 }, 300); 5073 } 5074 }); 5075 5076 }, 300); 5077 }); 5078 }); 5079 } ); 5080 //End execute javascript for portfolio grid overlay 5081 5082 5083 //Start execute javascript for portfolio grid overlay 3d 5084 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-3d-overlay.default', function( $scope ) { 5085 jQuery(".portfolio-grid-overlay-container").each(function() { 5086 var containderDiv = jQuery(this); 5087 var selectedClass = ""; 5088 5089 containderDiv.find(".portfolio-grid-wrapper-overlay").imagesLoaded().always( function() { 5090 var currentWrapper = containderDiv.find(".portfolio-grid-wrapper-overlay"); 5091 var currentImg = containderDiv.find(".portfolio-grid-wrapper-overlay img"); 5092 5093 currentWrapper.css('height', currentImg.height()+'px'); 5094 }); 5095 5096 jQuery(window).resize(function() { 5097 containderDiv.find(".portfolio-grid-wrapper-overlay").each(function() { 5098 var currentImg = jQuery(this).find("img"); 5099 5100 jQuery(this).css('height', currentImg.height()+'px'); 5101 }); 5102 }); 5103 5104 if(!is_touch_device()) 5105 { 5106 var scaleTilt = 1.1; 5107 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 5108 scaleTilt = 1; 5109 } 5110 5111 containderDiv.find(".grid_tilt").tilt({ 5112 scale: scaleTilt, 5113 perspective: 2000, 5114 glare: true, 5115 maxGlare: .5 5116 }); 5117 } 5118 if(!elementorFrontend.isEditMode()) 5119 { 5120 containderDiv.find(".portfolio-grid-wrapper-overlay").on('click', function(){ 5121 window.location = jQuery(this).find("a").first().attr("href"); 5122 }); 5123 } 5124 5125 containderDiv.find(".filter-tag-btn").on('click', function(){ 5126 containderDiv.find(".filter-tag-btn").removeClass("active"); 5127 jQuery(this).addClass("active"); 5128 selectedClass = jQuery(this).attr("data-rel"); 5129 column = jQuery(this).attr("data-cols"); 5130 5131 var gridDiv = containderDiv.find(".portfolio-grid-content-wrapper"); 5132 5133 gridDiv.fadeTo(100, 0); 5134 gridDiv.find(".portfolio-grid-wrapper-overlay").css({ 5135 opacity: 0, 5136 display: 'none', 5137 transform: 'scale(0.0)' 5138 });
5139 gridDiv.find(".portfolio-grid-wrapper-overlay").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 5140 5141 setTimeout(function() { 5142 jQuery("."+selectedClass).fadeIn().addClass('scale-anm'); 5143 5144 jQuery("."+selectedClass).css({ 5145 opacity: 1, 5146 display: 'block', 5147 transform: 'scale(1,1)' 5148 }); 5149 5150 gridDiv.find(".portfolio-grid-wrapper-overlay.last").removeClass('last'); 5151 var count = gridDiv.find(".portfolio-grid-wrapper-overlay.scale-anm").length; 5152 5153 gridDiv.find(".portfolio-grid-wrapper-overlay.scale-anm").each(function(index){ 5154 var lastIndex = parseInt(index+1); 5155 if(lastIndex%column == 0) 5156 { 5157 jQuery(this).addClass('last'); 5158 } 5159 5160 if(lastIndex == count) 5161 { 5162 setTimeout(function() { 5163 gridDiv.fadeTo(300, 1); 5164 }, 300); 5165 } 5166 }); 5167 5168 }, 300); 5169 }); 5170 }); 5171 } ); 5172 //End execute javascript for portfolio grid overlay 3d 5173 5174 5175 //Start execute javascript for portfolio classic 5176 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-classic.default', function( $scope ) { 5177 jQuery(".portfolio-classic-container").each(function() { 5178 var containderDiv = jQuery(this); 5179 var selectedClass = ""; 5180 5181 containderDiv.find(".filter-tag-btn").on('click', function(){ 5182 containderDiv.find(".filter-tag-btn").removeClass("active"); 5183 jQuery(this).addClass("active"); 5184 selectedClass = jQuery(this).attr("data-rel"); 5185 column = jQuery(this).attr("data-cols"); 5186 5187 var gridDiv = containderDiv.find(".portfolio-classic-content-wrapper"); 5188 5189 gridDiv.fadeTo(100, 0); 5190 gridDiv.find(".portfolio-classic-grid-wrapper").css({ 5191 opacity: 0, 5192 display: 'none', 5193 transform: 'scale(0.0)' 5194 }); 5195 gridDiv.find(".portfolio-classic-grid-wrapper").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 5196 5197 setTimeout(function() { 5198 jQuery("."+selectedClass).addClass('scale-anm'); 5199 5200 jQuery("."+selectedClass).css({ 5201 opacity: 1, 5202 display: 'block', 5203 transform: 'scale(1,1)' 5204 }); 5205 5206 gridDiv.find(".portfolio-classic-grid-wrapper.last").removeClass('last'); 5207 var count = gridDiv.find(".portfolio-classic-grid-wrapper.scale-anm").length; 5208 5209 gridDiv.find(".portfolio-classic-grid-wrapper.scale-anm").each(function(index){ 5210 var lastIndex = parseInt(index+1); 5211 if(lastIndex%column == 0) 5212 { 5213 jQuery(this).addClass('last'); 5214 } 5215 5216 if(lastIndex == count) 5217 { 5218 setTimeout(function() { 5219 gridDiv.fadeTo(300, 1); 5220 }, 300); 5221 } 5222 }); 5223 5224 }, 300); 5225 }); 5226 }); 5227 } ); 5228 //End execute javascript for portfolio classic 5229 5230 5231 //Start execute javascript for portfolio contain 5232 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-contain.default', function( $scope ) { 5233 jQuery(".portfolio-classic-container.contain").each(function() { 5234 var containderDiv = jQuery(this); 5235 var selectedClass = ""; 5236 5237 containderDiv.find(".filter-tag-btn").on('click', function(){ 5238 containderDiv.find(".filter-tag-btn").removeClass("active"); 5239 jQuery(this).addClass("active"); 5240 selectedClass = jQuery(this).attr("data-rel"); 5241 column = jQuery(this).attr("data-cols"); 5242 5243 var gridDiv = containderDiv.find(".portfolio-classic-content-wrapper"); 5244 5245 gridDiv.fadeTo(100, 0); 5246 gridDiv.find(".portfolio-classic-grid-wrapper").css({ 5247 opacity: 0, 5248 display: 'none', 5249 transform: 'scale(0.0)' 5250 }); 5251 gridDiv.find(".portfolio-classic-grid-wrapper").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 5252 5253 setTimeout(function() { 5254 jQuery("."+selectedClass).addClass('scale-anm'); 5255 5256 jQuery("."+selectedClass).css({ 5257 opacity: 1, 5258 display: 'block', 5259 transform: 'scale(1,1)' 5260 }); 5261
5262 gridDiv.find(".portfolio-classic-grid-wrapper.last").removeClass('last'); 5263 var count = gridDiv.find(".portfolio-classic-grid-wrapper.scale-anm").length; 5264 5265 gridDiv.find(".portfolio-classic-grid-wrapper.scale-anm").each(function(index){ 5266 var lastIndex = parseInt(index+1); 5267 if(lastIndex%column == 0) 5268 { 5269 jQuery(this).addClass('last'); 5270 } 5271 5272 if(lastIndex == count) 5273 { 5274 setTimeout(function() { 5275 gridDiv.fadeTo(300, 1); 5276 }, 300); 5277 } 5278 }); 5279 5280 }, 300); 5281 }); 5282 }); 5283 } ); 5284 //End execute javascript for portfolio contain 5285 5286 5287 //Start execute javascript for navigation menu 5288 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-navigation-menu.default', function( $scope ) { 5289 jQuery('.themegoods-navigation-wrapper .nav li.menu-item').hover(function() 5290 { 5291 jQuery('.themegoods-navigation-wrapper .nav li.menu-item ul').removeClass('visible'); 5292 jQuery('.themegoods-navigation-wrapper .nav li.menu-item ul').removeClass('hover'); 5293 jQuery('.themegoods-navigation-wrapper .nav li.menu-item .elementor-megamenu-wrapper').removeClass('visible'); 5294 jQuery('.themegoods-navigation-wrapper .nav li.menu-item .elementor-megamenu-wrapper').removeClass('hover'); 5295 5296 jQuery(this).children('ul:first').addClass('visible'); 5297 jQuery(this).children('ul:first').addClass('hover'); 5298 5299 jQuery(this).children('.elementor-megamenu-wrapper:first').addClass('visible'); 5300 jQuery(this).children('.elementor-megamenu-wrapper:first').addClass('hover'); 5301 }, 5302 function() 5303 { 5304 jQuery(this).children('ul:first').stop().removeClass('visible'); 5305 jQuery(this).children('ul:first').stop().removeClass('hover'); 5306 5307 jQuery(this).children('.elementor-megamenu-wrapper:first').stop().removeClass('visible'); 5308 jQuery(this).children('.elementor-megamenu-wrapper:first').stop().removeClass('hover'); 5309 }); 5310 5311 jQuery('.themegoods-navigation-wrapper .nav li.menu-item').children('ul:first.hover').hover(function() 5312 { 5313 jQuery(this).stop().addClass('visible'); 5314 }, 5315 function() 5316 { 5317 jQuery(this).stop().removeClass('visible'); 5318 }); 5319 5320 jQuery('.themegoods-navigation-wrapper .nav li.menu-item').children('.elementor-megamenu-wrapper.hover').hover(function() 5321 { 5322 jQuery(this).stop().addClass('visible'); 5323 }, 5324 function() 5325 { 5326 jQuery(this).stop().removeClass('visible'); 5327 }); 5328 } ); 5329 //End execute javascript for navigation menu 5330 5331 5332 //Start execute javascript for video grid 5333 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-video-grid.default', function( $scope ) { 5334 jQuery(".portfolio-classic-container.video-grid").each(function() { 5335 var containerDiv = jQuery(this); 5336 var selectedClass = ""; 5337 5338 containerDiv.find(".filter-tag-btn").on('click', function(){ 5339 containerDiv.find(".filter-tag-btn").removeClass("active"); 5340 jQuery(this).addClass("active"); 5341 selectedClass = jQuery(this).attr("data-rel"); 5342 column = jQuery(this).attr("data-cols"); 5343 5344 var gridDiv = containerDiv.find(".portfolio-classic-content-wrapper"); 5345 5346 gridDiv.fadeTo(100, 0); 5347 gridDiv.find(".portfolio-classic-grid-wrapper").css({ 5348 opacity: 0, 5349 display: 'none', 5350 transform: 'scale(0.0)' 5351 }); 5352 gridDiv.find(".portfolio-classic-grid-wrapper").not("."+selectedClass).fadeOut().removeClass('scale-anm'); 5353 5354 setTimeout(function() { 5355 jQuery("."+selectedClass).addClass('scale-anm'); 5356 5357 jQuery("."+selectedClass).css({ 5358 opacity: 1, 5359 display: 'block', 5360 transform: 'scale(1,1)' 5361 }); 5362 5363 gridDiv.find(".portfolio-classic-grid-wrapper.last").removeClass('last'); 5364 var count = gridDiv.find(".portfolio-classic-grid-wrapper.scale-anm").length; 5365 5366 gridDiv.find(".portfolio-classic-grid-wrapper.scale-anm").each(function(index){ 5367 var lastIndex = parseInt(index+1); 5368 if(lastIndex%column == 0) 5369 { 5370 jQuery(this).addClass('last'); 5371 } 5372 5373 if(lastIndex == count) 5374 { 5375 setTimeout(function() { 5376 gridDiv.fadeTo(300, 1); 5377 }, 300); 5378 } 5379 }); 5380 5381 }, 300); 5382 }); 5383 }); 5384 5385 5386 jQuery(".portfolio-classic-content-wrapper.video-grid .video-grid-wrapper").each(function() { 5387 var video = this.getElementsByClassName("video-card")[0]; 5388 var id = jQuery(video).data('video-id'); 5389 5390 var play = document.createElement("div"); 5391 var outline = document.createElement("div"); 5392 var ring = document.createElement("div"); 5393 var fill = document.createElement("div"); 5394 var mask = document.createElement("div"); 5395 var wipe = document.createElement("div"); 5396 var wrap = document.createElement("div"); 5397 var iframe = '<iframe width="100%" height="100%" src="https://www.youtube.com/embed/'+id+'" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>'; 5398 5399 TweenMax.set(play, {
5400 css:{ 5401 width: 0, 5402 height: 0, 5403 "border-top": "10px solid transparent", 5404 "border-bottom": "10px solid transparent", 5405 "border-left": "14px solid white", 5406 "z-index": 50, 5407 position: 'absolute', 5408 top: "50%", 5409 left: "50%", 5410 marginLeft: "-4px", 5411 marginTop: "-9px" 5412 } 5413 }); 5414 TweenMax.set(outline, { 5415 css:{ 5416 width: 65, 5417 height: 65, 5418 border: "3px solid white", 5419 "border-radius": "999px", 5420 "z-index": 50, 5421 position: 'absolute', 5422 top: "50%", 5423 left: "50%", 5424 y: "-50%", 5425 x: "-50%" 5426 } 5427 }); 5428 TweenMax.set(ring, { 5429 css:{ 5430 width: 65, 5431 height: 65, 5432 border: "1px solid white", 5433 "border-radius": "999px", 5434 "z-index": 50, 5435 position: 'absolute', 5436 top: "50%", 5437 left: "50%", 5438 y: "-50%", 5439 x: "-50%" 5440 } 5441 }); 5442 TweenMax.set(fill, { 5443 css:{ 5444 width: 65, 5445 opacity: 0, 5446 height: 65, 5447 "background-color": "white", 5448 "border-radius": "999px", 5449 "z-index": 50, 5450 position: 'absolute', 5451 top: "50%", 5452 left: "50%", 5453 y: "-50%", 5454 x: "-50%" 5455 } 5456 }); 5457 TweenMax.set(mask, { 5458 css:{ 5459 width: 600, 5460 height: 600, 5461 scale: 1, 5462 opacity: 0, 5463 backgroundColor: "#fff", 5464 "border-radius": "300px", 5465 "z-index": 51, 5466 position: 'absolute', 5467 top: "50%", 5468 left: "50%", 5469 y: "-50%", 5470 x: "-50%" 5471 } 5472 }); 5473 TweenMax.set(wipe, { 5474 css:{ 5475 width: "100%", 5476 height: "100%", 5477 opacity: 0, 5478 backgroundColor: "#fff", 5479 "z-index": 53, 5480 position: 'absolute', 5481 top: "0", 5482 right: "0" 5483 } 5484 }); 5485 TweenMax.set(wrap, { 5486 css:{ 5487 width: "100%", 5488 height: "100%", 5489 autoAlpha: 0, 5490 "z-index": 52, 5491 position: 'absolute', 5492 top: "0", 5493 left: "0" 5494 } 5495 }); 5496 5497 video.appendChild(play); 5498 video.appendChild(outline); 5499 video.appendChild(ring); 5500 video.appendChild(fill); 5501 video.appendChild(mask); 5502 video.appendChild(wipe); 5503 jQuery(wrap).html(iframe); 5504 video.appendChild(wrap); 5505 5506 5507 5508 jQuery(video).on("mouseenter", function(event) { 5509 TweenLite.killTweensOf([fill, outline, ring]); 5510 TweenLite.to(fill, 0.4, {opacity: 0.2, ease:"cubic-bezier(0.39, 0.575, 0.565, 1)"}); 5511 TweenLite.to(outline, 0.4, {scale: 0.9, ease:"cubic-bezier(0.39, 0.575, 0.565, 1)"}); 5512 TweenLite.fromTo(ring, 0.7, { 5513 scale: 1, 5514 opacity: 0.5 5515 }, 5516 { 5517 scale: 2, 5518 opacity: 0, 5519 ease:"cubic-bezier(0.165, 0.84, 0.44, 1)" 5520 }); 5521 TweenLite.to(play, 0.2, { 5522 x: 8, 5523 opacity: 0, 5524 ease: "cubic-bezier(0.550, 0.055, 0.675, 0.190)", 5525 onComplete: function() { 5526 TweenLite.set(play,{ 5527 x:-12, 5528 onComplete: function() { 5529 TweenLite.to(play, 0.4, { 5530 x: 0, 5531 opacity: 1, 5532 ease: "cubic-bezier(0.215, 0.610, 0.355, 1.000)", 5533 }); 5534 } 5535 }); 5536 } 5537 }); 5538 }); 5539 5540 jQuery(video).on("mouseleave", function(event) { 5541 TweenLite.killTweensOf([fill, outline]); 5542 TweenLite.to(fill, 0.4, {opacity: 0, ease:"cubic-bezier(0.39, 0.575, 0.565, 1)"}); 5543 TweenLite.to(outline, 0.4, {scale: 1, ease:"cubic-bezier(0.39, 0.575, 0.565, 1)"}); 5544 5545 }); 5546 5547 jQuery(video).on("click", function(event) { 5548 event.preventDefault(); 5549 5550 TweenLite.fromTo(mask, 0.35, { 5551 opacity: 1, 5552 scale: 0 5553 }, 5554 { 5555 scale: 1, 5556 ease: "cubic-bezier(0.550, 0.055, 0.675, 0.190)", 5557 onComplete: function() { 5558 TweenLite.set(mask, { 5559 opacity: 0, 5560 scale: 0, 5561 delay: 0.5, 5562 onComplete: function() { 5563 TweenLite.fromTo(wipe, 0.4, { 5564 width: "100%", 5565 },{ 5566 width: 0, 5567 ease: "cubic-bezier(.42,0,.58,1)" 5568 }); 5569 } 5570 }); 5571 5572 TweenLite.set(wipe, { 5573 opacity: 1, 5574 }); 5575 5576 TweenLite.set(wrap, { 5577 autoAlpha: 1, 5578 }); 5579 5580 } 5581 }); 5582 5583 5584 }); 5585 }); 5586 } ); 5587 //End execute javascript for video grid 5588 5589 //Start execute javascript for portfolio coverflow 5590 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-coverflow.default', function( $scope ) { 5591 5592 jQuery(".portfolio-coverflow").each(function() { 5593 var initialSlide = 0;
5594 initialSlide = parseInt(jQuery(this).attr('data-initial') - 1); 5595 5596 var coverflowSwiper = new Swiper(jQuery(this), { 5597 grabCursor: true, 5598 centeredSlides: true, 5599 slidesPerView: 'auto', 5600 spaceBetween: 50, 5601 keyboard: { 5602 enabled: true, 5603 onlyInViewport: false, 5604 }, 5605 pagination: { 5606 el: '.swiper-pagination', 5607 }, 5608 initialSlide: initialSlide 5609 }); 5610 }); 5611 5612 } ); 5613 //End execute javascript for portfolio coverflow 5614 5615 //Start execute javascript for glitch slideshow 5616 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-glitch-slideshow.default', function( $scope ) { 5617 class Slide { 5618 constructor(el) { 5619 this.DOM = {el: el}; 5620 this.DOM.slideImg = this.DOM.el.querySelector('.slide-img'); 5621 this.bgImage = this.DOM.slideImg.style.backgroundImage; 5622 this.layout(); 5623 } 5624 layout() { 5625 this.DOM.slideImg.innerHTML = `<div class='glitch-img' style='background-image: ${this.DOM.slideImg.style.backgroundImage};'></div>`.repeat(5); 5626 this.DOM.glitchImgs = Array.from(this.DOM.slideImg.querySelectorAll('.glitch-img')); 5627 } 5628 changeBGImage(bgimage, pos = 0, delay = 0) { 5629 setTimeout(() => this.DOM.glitchImgs[pos].style.backgroundImage = bgimage, delay); 5630 } 5631 } 5632 5633 class GlitchSlideshow { 5634 constructor(el) { 5635 this.DOM = {el: el}; 5636 this.DOM.slides = Array.from(this.DOM.el.querySelectorAll('.slide')); 5637 this.slidesTotal = this.DOM.slides.length; 5638 this.slides = [];
5639 this.DOM.slides.forEach(slide => this.slides.push(new Slide(slide))); 5640 this.current = 0; 5641 this.glitchTime = 1800; 5642 this.totalGlitchSlices = 5; 5643 } 5644 glitch(slideFrom, slideTo) { 5645 return new Promise((resolve, reject) => { 5646 slideFrom.DOM.slideImg.classList.add('glitch--animate'); 5647 5648 const slideFromBGImage = slideFrom.bgImage; 5649 const slideToBGImage = slideTo.bgImage; 5650 5651 for (let i = this.totalGlitchSlices-1; i >= 0; --i) { 5652 slideFrom.changeBGImage(slideToBGImage, i, this.glitchTime/(this.totalGlitchSlices+1)*(this.totalGlitchSlices-i-1) + this.glitchTime/(this.totalGlitchSlices+1)); 5653 } 5654 5655 setTimeout(() => { 5656 slideFrom.DOM.slideImg.classList.remove('glitch--animate'); 5657 5658 // reset bgimages. 5659 for (let i = this.totalGlitchSlices-1; i >= 0; --i) { 5660 slideFrom.changeBGImage(slideFromBGImage, i, 0); 5661 } 5662 5663 resolve(); 5664 }, this.glitchTime); 5665 }); 5666 } 5667 navigate(dir) { 5668 if ( this.isAnimating ) return; 5669 this.isAnimating = true; 5670 5671 const newCurrent = dir === 'next' ? 5672 this.current < this.slidesTotal-1 ? this.current+1 : 0 : 5673 this.current > 0 ? this.current-1 : this.slidesTotal-1; 5674 5675 this.glitch(this.slides[this.current], this.slides[newCurrent]).then(() => { 5676 this.DOM.slides[this.current].classList.remove('slide-current'); 5677 this.current = newCurrent; 5678 this.DOM.slides[this.current].classList.add('slide-current'); 5679 this.isAnimating = false; 5680 }); 5681 } 5682 } 5683 5684 // Preload all the images in the page.. 5685 imagesLoaded(document.querySelectorAll('.slide-img'), {background: true}, () => { 5686 document.body.classList.remove('loading'); 5687 const slideshow = new GlitchSlideshow(document.querySelector('.slides')); 5688 const nav = Array.from(document.querySelectorAll('.slide-nav-button')); 5689 nav[0].addEventListener('click', () => slideshow.navigate('prev')); 5690 nav[1].addEventListener('click', () => slideshow.navigate('next')); 5691 }); 5692 }); 5693 //End execute javascript for glitch slideshow 5694 5695 5696 //Start execute javascript for music player 5697 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-music-player.default', function( $scope ) { 5698 jQuery(".grandconference-music-player").each(function() { 5699 var containerDiv = jQuery(this); 5700 5701 var songIndex = 0; 5702 var audio = new Audio(); 5703 var $audio = jQuery(audio); 5704 var handleDrag = false; 5705 var timeIn = 0; // only used on mouseup event 5706 5707 var songListID = containerDiv.attr('data-songlist'); 5708 var playlist = JSON.parse(jQuery('#'+songListID).val()); 5709 5710 const $player = containerDiv.find('.player'), 5711 $poster = containerDiv.find('.player-img'), 5712 $background = containerDiv.find('.player-background'), 5713 $title = containerDiv.find('.player-title'), 5714 $artist = containerDiv.find('.player-artist'), 5715 $prev = containerDiv.find('.player-controls__prev'), 5716 $next = containerDiv.find('.player-controls__next'), 5717 $play = containerDiv.find('.player-controls__play'), 5718 $scrubber = containerDiv.find('.player-scrubber'), 5719 $handle = containerDiv.find('.player-scrubber-handle'), 5720 $fill = containerDiv.find('.player-scrubber__fill'), 5721 $time = containerDiv.find('.player-time__played'),
5722 $dur = containerDiv.find('.player-time__duration'); 5723 5724 function time(seconds) { 5725 seconds = Math.floor(seconds); 5726 const mins = Math.floor(seconds / 60); 5727 const secs = seconds % 60; 5728 return mins + ":" + (secs < 10 ? "0": "") + secs; 5729 } 5730 5731 function changeSong(offset, play) { 5732 songIndex += offset; 5733 if(songIndex > playlist.length - 1) songIndex = 0; 5734 if(songIndex < 0) songIndex = playlist.length - 1; 5735 5736 $audio.attr('src', playlist[songIndex].mp3 ); 5737 5738 const src = playlist[songIndex].poster; 5739 5740 $title.text(playlist[songIndex].title); 5741 $artist.text(playlist[songIndex].artist); 5742 5743 $dur.text("-:--");// Until it loads 5744 $audio.on('loadedmetadata', function() { 5745 $dur.text(time(audio.duration)); 5746 setHandle(0, audio.duration); 5747 }); 5748 $audio.on('ended', () => changeSong(+1, true) ); 5749 5750 var img = new Image(); 5751 5752 jQuery(img).attr("src", src) 5753 .on("load", function(){ 5754 5755 $poster.attr('src', src); 5756 $background.css('background-image', 'url("' + src + '")'); 5757 5758 }) 5759 .on("error", function(){ 5760 5761 console.log("Cannot find image"); 5762 5763 }); 5764 5765 if( play ) 5766 { 5767 audio.play(); 5768 $play.find('i').removeClass('fa-play').addClass('fa-pause'); 5769 } 5770 else 5771 { 5772 $play.find('i').removeClass('fa-pause').addClass('fa-play'); 5773 } 5774 5775 } 5776 function setHandle(seconds, duration) { 5777 const percent = seconds/duration*100; 5778 5779 $time.text(time(seconds)); 5780 5781 $handle.css('left', percent + "%"); 5782 $fill.css('width', percent + "%"); 5783 } 5784 5785 $play.click(function(){ 5786 if(audio.currentTime > 0 && !audio.paused) { 5787 audio.pause(); 5788 $play.find('i').removeClass('fa-pause').addClass('fa-play'); 5789 } else { 5790 audio.play(); 5791 $play.find('i').removeClass('fa-play').addClass('fa-pause'); 5792 } 5793 5794 }); 5795 $prev.click(() => changeSong(-1, true) ); 5796 $next.click(() => changeSong(+1, true) ); 5797 5798 5799 $audio.on("timeupdate", () => { 5800 setHandle(audio.currentTime, audio.duration); 5801 }); 5802 5803 $handle.on('mousedown', function() { 5804 handleDrag = true; 5805 audio.pause(); 5806 }); 5807 5808 $player.on('mousemove', function(e) { 5809 5810 if(handleDrag) { 5811 5812 //get percent 5813 const width = $scrubber.width(); 5814 var diff = $scrubber.offset().left - e.clientX; 5815 var percent = -diff / width * 100; 5816 // Limit percent to between 0 and 100 5817 percent = (percent < 0 ? 0 : (percent > 100 ? 100 : percent)); 5818 //convert percent into seconds 5819 var seconds = percent / 100 * audio.duration; 5820 setHandle(seconds, audio.duration); 5821 timeIn = seconds; 5822 5823 } 5824 5825 5826 }) 5827 .on('mouseup mouseleave', function(){ 5828 if(handleDrag) { 5829 handleDrag = false; 5830 audio.currentTime = timeIn; 5831 $play.find('i').removeClass('fa-pause').addClass('fa-play'); 5832 } 5833 }); 5834 5835 5836 // Initialize 5837 changeSong(0, false); 5838 }); 5839 }); 5840 //End execute javascript for music player 5841 5842 //Start execute javascript for mouse driven vertical carousel 5843 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-mouse-driven-vertical-carousel.default', function( $scope ) { 5844 5845 class VerticalMouseDrivenCarousel { 5846 constructor(options = {}) { 5847 const _defaults = { 5848 carousel: ".mouse-driven-vertical-carousel-wrapper .js-carousel", 5849 bgImg: ".js-carousel-bg-img", 5850 list: ".js-carousel-list", 5851 listItem: ".js-carousel-list-item" 5852 }; 5853 5854 this.posY = 0; 5855 5856 this.defaults = Object.assign({}, _defaults, options); 5857 5858 this.initCursor(); 5859 this.init(); 5860 this.bgImgController(); 5861 } 5862 5863 //region getters 5864 getBgImgs() { 5865 return document.querySelectorAll(this.defaults.bgImg); 5866 } 5867 5868 getListItems() { 5869 return document.querySelectorAll(this.defaults.listItem); 5870 } 5871 5872 getList() { 5873 return document.querySelector(this.defaults.list); 5874 } 5875 5876 getCarousel() { 5877 return document.querySelector(this.defaults.carousel); 5878 } 5879 5880 init() { 5881 TweenMax.set(this.getBgImgs(), { 5882 autoAlpha: 0, 5883 scale: 1.05 5884 }); 5885 5886 TweenMax.set(this.getBgImgs()[0], { 5887 autoAlpha: 1, 5888 scale: 1 5889 }); 5890 5891 this.listItems = this.getListItems().length - 1; 5892 5893 this.listOpacityController(0); 5894 } 5895
5896 initCursor() { 5897 //Init only on desktop device 5898 if(jQuery(window).width()>1024) 5899 { 5900 const listHeight = this.getList().clientHeight; 5901 const carouselHeight = this.getCarousel().clientHeight; 5902 const carouselPos = this.getCarousel().getBoundingClientRect(); 5903 const carouselPosY = parseInt(carouselPos.top); 5904 5905 this.getCarousel().addEventListener( 5906 "mousemove", 5907 event => { 5908 this.posY = parseInt(event.pageY - carouselPosY) - this.getCarousel().offsetTop; 5909 let offset = -this.posY / carouselHeight * listHeight; 5910 5911 TweenMax.to(this.getList(), 0.3, { 5912 y: offset, 5913 ease: Power4.easeOut 5914 }); 5915 }, 5916 false 5917 ); 5918 } 5919 } 5920 5921 bgImgController() { 5922 for (const link of this.getListItems()) { 5923 link.addEventListener("mouseenter", ev => { 5924 let currentId = ev.currentTarget.dataset.itemId; 5925 5926 this.listOpacityController(currentId); 5927 5928 TweenMax.to(ev.currentTarget, 0.3, { 5929 autoAlpha: 1 5930 }); 5931 5932 TweenMax.to(".is-visible", 0.2, { 5933 autoAlpha: 0, 5934 scale: 1.05 5935 }); 5936 5937 if (!this.getBgImgs()[currentId].classList.contains("is-visible")) { 5938 this.getBgImgs()[currentId].classList.add("is-visible"); 5939 } 5940 5941 TweenMax.to(this.getBgImgs()[currentId], 0.6, { 5942 autoAlpha: 1, 5943 scale: 1 5944 }); 5945 }); 5946 } 5947 } 5948 5949 listOpacityController(id) { 5950 id = parseInt(id); 5951 let aboveCurrent = this.listItems - id; 5952 let belowCurrent = parseInt(id); 5953 5954 if (aboveCurrent > 0) { 5955 for (let i = 1; i <= aboveCurrent; i++) { 5956 let opacity = 0.5 / i; 5957 let offset = 5 * i; 5958 TweenMax.to(this.getListItems()[id + i], 0.5, { 5959 autoAlpha: opacity, 5960 x: offset, 5961 ease: Power3.easeOut 5962 }); 5963 } 5964 } 5965 5966 if (belowCurrent > 0) { 5967 for (let i = 0; i <= belowCurrent; i++) { 5968 let opacity = 0.5 / i; 5969 let offset = 5 * i; 5970 TweenMax.to(this.getListItems()[id - i], 0.5, { 5971 autoAlpha: opacity, 5972 x: offset, 5973 ease: Power3.easeOut 5974 }); 5975 } 5976 } 5977 } 5978 } 5979 5980 new VerticalMouseDrivenCarousel(); 5981 5982 } ); 5983 //End execute javascript for mouse driven vertical carousel 5984 5985 //Start execute javascript for synchronized carousel slider 5986 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-synchronized-carousel.default', function( $scope ) { 5987 5988 jQuery(".synchronized-carousel-slider-wrapper").each(function() { 5989 var sliderID = jQuery(this).attr('id'); 5990 var slidersContainer = document.querySelector("#"+sliderID); 5991 var countSlide = jQuery(this).attr('data-countslide'); 5992 5993 // Initializing the numbers slider 5994 var msNumbers = new MomentumSlider({ 5995 el: slidersContainer, 5996 cssClass: "ms--numbers", 5997 range: [1, countSlide], 5998 rangeContent: function (i) { 5999 return "0" + i; 6000 }, 6001 style: { 6002 transform: [{scale: [0.4, 1]}], 6003 opacity: [0, 1] 6004 }, 6005 interactive: false 6006 }); 6007 6008 var titles = JSON.parse(jQuery(this).attr('data-slidetitles')); 6009 6010 var msTitles = new MomentumSlider({ 6011 el: slidersContainer, 6012 cssClass: "ms--titles", 6013 range: [0, parseInt(countSlide-1)], 6014 rangeContent: function (i) { 6015 return "<h3>"+ titles[i] +"</h3>"; 6016 }, 6017 vertical: true, 6018 reverse: true, 6019 style: { 6020 opacity: [0, 1] 6021 }, 6022 interactive: false 6023 }); 6024 6025 var buttonTitles = JSON.parse(jQuery(this).attr('data-slidebuttontitles')); 6026 var buttonUrls = JSON.parse(jQuery(this).attr('data-slidebuttonurls')); 6027 6028 // Initializing the links slider 6029 var msLinks = new MomentumSlider({ 6030 el: slidersContainer, 6031 cssClass: "ms--links", 6032 range: [0, parseInt(countSlide-1)], 6033 rangeContent: function (i) { 6034 return "<a href=\""+buttonUrls[i]+"\" class=\"ms-slide-link\">"+buttonTitles[i]+"</a>"; 6035 }, 6036 vertical: true, 6037 interactive: false 6038 }); 6039 6040 // Get pagination items 6041 var paginationID = jQuery(this).attr('data-pagination'); 6042 var pagination = document.querySelector("#"+paginationID); 6043 var paginationItems = [].slice.call(pagination.children); 6044
6045 var images = JSON.parse(jQuery(this).attr('data-slideimages')); 6046 6047 // Initializing the images slider 6048 var msImages = new MomentumSlider({ 6049 // Element to append the slider 6050 el: slidersContainer, 6051 // CSS class to reference the slider 6052 cssClass: "ms--images", 6053 // Generate the 4 slides required 6054 range: [0, parseInt(countSlide-1)], 6055 rangeContent: function (i) { 6056 return "<div class=\"ms-slide-image-container\"><div class=\"ms-slide-image\" style=\"background-image: url('"+images[i]+"')\"></div></div>"; 6057 }, 6058 // Syncronize the other sliders 6059 sync: [msNumbers, msTitles, msLinks], 6060 // Styles to interpolate as we move the slider 6061 style: { 6062 ".ms-slide-image": { 6063 transform: [{scale: [1.5, 1]}] 6064 } 6065 }, 6066 // Update pagination if slider change 6067 change: function(newIndex, oldIndex) { 6068 if (typeof oldIndex !== "undefined") { 6069 paginationItems[oldIndex].classList.remove("pagination-item--active"); 6070 } 6071 paginationItems[newIndex].classList.add("pagination-item--active"); 6072 } 6073 }); 6074 6075 pagination.addEventListener("click", function(e) { 6076 if (e.target.matches(".pagination-button")) { 6077 var index = paginationItems.indexOf(e.target.parentNode); 6078 msImages.select(index); 6079 } 6080 }); 6081 }); 6082 6083 } ); 6084 //End execute javascript for synchronized carousel slider 6085 6086 //Start execute javascript for flip box 6087 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-flip-box.default', function( $scope ) { 6088 6089 var countSquare = jQuery('.square').length; 6090 6091 //For each Square found add BG image 6092 for (i = 0; i < countSquare; i++) { 6093 var firstImage = jQuery('.square').eq([i]); 6094 var secondImage = jQuery('.square2').eq([i]); 6095 6096 var getImage = firstImage.attr('data-image'); 6097 var getImage2 = secondImage.attr('data-image'); 6098 6099 firstImage.css('background-image', 'url(' + getImage + ')'); 6100 secondImage.css('background-image', 'url(' + getImage2 + ')'); 6101 } 6102 6103 jQuery('.flip-box-wrapper').on('click', function() { 6104 jQuery(this).trigger("mouseover"); 6105 }); 6106 6107 } ); 6108 //End execute javascript for flip box 6109 6110 //Start execute javascript for slider zoom 6111 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-slider-zoom.default', function( $scope ) { 6112 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 6113 6114 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 6115 6116 var $window = $(window); 6117 var $body = $('body'); 6118 6119 var Slideshow = function () { 6120 function Slideshow() { 6121 var _this = this; 6122 6123 var userOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 6124 6125 _classCallCheck(this, Slideshow); 6126 6127 var timer = $('.slider-zoom-wrapper').attr('data-autoplay'); 6128 var autoplay = true; 6129 6130 if(timer == 0) 6131 { 6132 timer = false; 6133 autoplay = false; 6134 } 6135 6136 var pagination = $('.slider-zoom-wrapper').attr('data-pagination'); 6137 if(pagination == 0) 6138 { 6139 var pagination = false; 6140 } 6141 else 6142 { 6143 var pagination = true; 6144 } 6145 6146 var defaultOptions = { 6147 $el: $('.slider-zoom-wrapper'),
6148 showArrows: false, 6149 showPagination: false, 6150 duration: timer, 6151 autoplay: autoplay 6152 }; 6153 6154 var options = Object.assign({}, defaultOptions, userOptions); 6155 6156 this.$el = options.$el; 6157 this.maxSlide = this.$el.find($('.js-slider-home-slide')).length; 6158 this.showArrows = this.maxSlide > 1 ? options.showArrows : false; 6159 this.showPagination = pagination; 6160 this.currentSlide = 1; 6161 this.isAnimating = false; 6162 this.animationDuration = 1200; 6163 this.autoplaySpeed = options.duration; 6164 this.interval; 6165 this.$controls = this.$el.find('.js-slider-home-button'); 6166 this.autoplay = this.maxSlide > 1 ? options.autoplay : false; 6167 6168 this.$el.on('click', '.js-slider-home-next', function (event) { 6169 return _this.nextSlide(); 6170 }); 6171 this.$el.on('click', '.js-slider-home-prev', function (event) { 6172 return _this.prevSlide(); 6173 }); 6174 this.$el.on('click', '.js-pagination-item', function (event) { 6175 if (!_this.isAnimating) { 6176 _this.preventClick(); 6177 _this.goToSlide(event.target.dataset.slide); 6178 } 6179 }); 6180 6181 this.init(); 6182 } 6183 6184 _createClass(Slideshow, [{ 6185 key: 'init', 6186 value: function init() { 6187 this.goToSlide(1); 6188 6189 if (this.autoplay) { 6190 this.startAutoplay(); 6191 } 6192 6193 if (this.showPagination) { 6194 var paginationNumber = this.maxSlide; 6195 var pagination = '<div class="pagination"><div class="container">'; 6196 6197 for (var i = 0; i < this.maxSlide; i++) { 6198 var item = '<span class="pagination-item js-pagination-item ' + (i === 0 ? 'is-current' : '') + '" data-slide=' + (i + 1) + '>' + (i + 1) + '</span>'; 6199 pagination = pagination + item; 6200 } 6201 6202 pagination = pagination + '</div></div>'; 6203 6204 this.$el.append(pagination); 6205 } 6206 } 6207 }, { 6208 key: 'preventClick', 6209 value: function preventClick() { 6210 var _this2 = this; 6211 6212 this.isAnimating = true; 6213 this.$controls.prop('disabled', true); 6214 clearInterval(this.interval); 6215 6216 setTimeout(function () { 6217 _this2.isAnimating = false; 6218 _this2.$controls.prop('disabled', false); 6219 if (_this2.autoplay) { 6220 _this2.startAutoplay(); 6221 } 6222 }, this.animationDuration); 6223 } 6224 }, { 6225 key: 'goToSlide', 6226 value: function goToSlide(index) { 6227 this.currentSlide = parseInt(index); 6228 6229 if (this.currentSlide > this.maxSlide) { 6230 this.currentSlide = 1; 6231 } 6232 6233 if (this.currentSlide === 0) { 6234 this.currentSlide = this.maxSlide; 6235 } 6236 6237 var newCurrent = this.$el.find('.js-slider-home-slide[data-slide="' + this.currentSlide + '"]'); 6238 var newPrev = this.currentSlide === 1 ? this.$el.find('.js-slider-home-slide').last() : newCurrent.prev('.js-slider-home-slide'); 6239 var newNext = this.currentSlide === this.maxSlide ? this.$el.find('.js-slider-home-slide').first() : newCurrent.next('.js-slider-home-slide'); 6240 6241 this.$el.find('.js-slider-home-slide').removeClass('is-prev is-next is-current'); 6242 this.$el.find('.js-pagination-item').removeClass('is-current'); 6243 6244 if (this.maxSlide > 1) { 6245 newPrev.addClass('is-prev'); 6246 newNext.addClass('is-next'); 6247 } 6248 6249 newCurrent.addClass('is-current'); 6250 this.$el.find('.js-pagination-item[data-slide="' + this.currentSlide + '"]').addClass('is-current'); 6251 } 6252 }, { 6253 key: 'nextSlide', 6254 value: function nextSlide() { 6255 this.preventClick(); 6256 this.goToSlide(this.currentSlide + 1); 6257 } 6258 }, { 6259 key: 'prevSlide', 6260 value: function prevSlide() { 6261 this.preventClick(); 6262 this.goToSlide(this.currentSlide - 1); 6263 } 6264 }, { 6265 key: 'startAutoplay', 6266 value: function startAutoplay() { 6267 var _this3 = this; 6268 6269 this.interval = setInterval(function () { 6270 if (!_this3.isAnimating) { 6271 _this3.nextSlide(); 6272 } 6273 }, this.autoplaySpeed); 6274 } 6275 }, { 6276 key: 'destroy', 6277 value: function destroy() { 6278 this.$el.off(); 6279 } 6280 }]); 6281 6282 return Slideshow; 6283 }(); 6284 6285 (function () { 6286 var loaded = false;
6287 var maxLoad = 3000; 6288 6289 function load() { 6290 var options = { 6291 showPagination: true 6292 }; 6293 6294 var slideShow = new Slideshow(options); 6295 } 6296 6297 function addLoadClass() { 6298 $body.addClass('is-loaded'); 6299 6300 setTimeout(function () { 6301 $body.addClass('is-animated'); 6302 }, 600); 6303 } 6304 6305 $window.on('load', function () { 6306 if (!loaded) { 6307 loaded = true; 6308 load(); 6309 } 6310 }); 6311 6312 setTimeout(function () { 6313 if (!loaded) { 6314 loaded = true; 6315 load(); 6316 } 6317 }, maxLoad); 6318 6319 addLoadClass(); 6320 })(); 6321 } ); 6322 //End execute javascript for slider zoom 6323 6324 6325 //Start execute javascript for course grid 6326 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-course-grid.default', function( $scope ) { 6327 6328 jQuery('.course_tooltip').tooltipster({ 6329 position: 'right', 6330 multiple: true, 6331 contentCloning: true, 6332 theme: 'tooltipster-shadow', 6333 minWidth: 300, 6334 maxWidth: 300, 6335 delay: 50, 6336 interactive: true, 6337 }); 6338 6339 } ); 6340 //End execute javascript for course grid 6341 6342 6343 //Start execute javascript for search 6344 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-search.default', function( $scope ) { 6345 6346 jQuery(".grandconference-search-icon").each(function() { 6347 var iconInput = jQuery(this).find('a'); 6348 6349 iconInput.bind('click', function () { 6350 var openDiv = jQuery(this).attr('data-open'); 6351 jQuery('#'+openDiv).addClass('active'); 6352 6353 var isTouch = ('ontouchstart' in document.documentElement); 6354 if ( isTouch ) { 6355 jQuery('#'+openDiv).find('.grandconference-search-inner').addClass('touch'); 6356 } 6357 6358 jQuery('body').addClass('elementor-no-overflow'); 6359 jQuery('body').addClass('elementor-search-activate'); 6360 6361 setTimeout(function(){ 6362 jQuery('#'+openDiv).find('.tg_search_form.autocomplete_form').find('input#s').trigger('focus'); 6363 }, 300); 6364 }); 6365 }); 6366 6367 jQuery(".tg_search_form.autocomplete_form").each(function() { 6368 var wrapper = jQuery(this).attr('data-open'); 6369 var formInput = jQuery(this).find('input[name="s"]'); 6370 var resultDiv = jQuery(this).attr('data-result'); 6371 var isTouch = ('ontouchstart' in document.documentElement); 6372 6373 if ( !isTouch ) { 6374 formInput.on('input', function() { 6375 if(jQuery(this).val().length > 1) 6376 { 6377 jQuery.ajax({ 6378 url: tgAjax.ajaxurl, 6379 type:'POST', 6380 data:'action=grandconference_ajax_search_result&'+jQuery(this).serialize(), 6381 success:function(results) { 6382 jQuery("#"+resultDiv).html(results); 6383 6384 if(results != '') 6385 { 6386 jQuery("#"+resultDiv).addClass('visible'); 6387 jQuery("#"+resultDiv).show(); 6388 jQuery("#"+resultDiv).css('z-index', 99); 6389 6390 jQuery("#"+resultDiv+ " ul li a").mousedown(function() { 6391 jQuery("#"+resultDiv).addClass('visible'); 6392 jQuery("#"+resultDiv).attr('data-mousedown', 'true'); 6393 6394 location.href = jQuery(this).attr('href'); 6395 }); 6396 } 6397 else 6398 { 6399 jQuery("#"+resultDiv).hide(); 6400 } 6401 } 6402 }); 6403 } 6404 else 6405 { 6406 jQuery("#"+resultDiv).html(''); 6407 } 6408 }); 6409 } 6410 6411 formInput.bind('click', function () { 6412 jQuery("#"+resultDiv).addClass('visible'); 6413 jQuery("#"+resultDiv).attr('data-mousedown', 'true'); 6414 6415 /*var isTouch = ('ontouchstart' in document.documentElement); 6416 if ( isTouch ) {*/ 6417 //jQuery('#'+wrapper).addClass('touch'); 6418 //} 6419 }); 6420 6421 formInput.bind('focus', function () { 6422 jQuery("#"+resultDiv).addClass('visible'); 6423 formInput.addClass('visible'); 6424 }); 6425 6426 formInput.bind('blur', function () { 6427 jQuery("#"+resultDiv).removeClass('visible'); 6428 formInput.removeClass('visible'); 6429 }); 6430 6431 jQuery("#"+wrapper).bind('click', function () { 6432 if(!formInput.hasClass('visible')) 6433 { 6434 if(jQuery("#"+resultDiv).attr('data-mousedown') != 'true') 6435 { 6436 jQuery("#"+resultDiv).removeClass('visible'); 6437 } 6438 jQuery('#'+wrapper).removeClass('active'); 6439 jQuery('body').removeClass('elementor-no-overflow'); 6440 jQuery('body').removeClass('elementor-search-activate'); 6441 } 6442 }); 6443 }); 6444 6445 } ); 6446 //End execute javascript for search 6447 6448 6449 //Start execute javascript for Elementor image 6450 elementorFrontend.hooks.addAction( 'frontend/element_ready/image.default', function( $scope ) { 6451 6452 if(elementorFrontend.isEditMode()) 6453 { 6454 var elementSettings = {};
6455 var modelCID = $scope.data( 'model-cid' ); 6456 6457 var settings = elementorFrontend.config.elements.data[ modelCID ]; 6458 if(typeof settings != 'undefined') 6459 { 6460 var type = settings.attributes.widgetType || settings.attributes.elType, 6461 settingsKeys = elementorFrontend.config.elements.keys[ type ]; 6462 6463 if ( ! settingsKeys ) { 6464 settingsKeys = elementorFrontend.config.elements.keys[type] = []; 6465 6466 jQuery.each( settings.controls, function ( name, control ) { 6467 if ( control.frontend_available ) { 6468 settingsKeys.push( name ); 6469 } 6470 }); 6471 } 6472 6473 jQuery.each( settings.getActiveControls(), function( controlKey ) { 6474 if ( -1 !== settingsKeys.indexOf( controlKey ) ) { 6475 elementSettings[ controlKey ] = settings.attributes[ controlKey ]; 6476 } 6477 } ); 6478 6479 var widgetExt = elementSettings; 6480 } 6481 } 6482 else 6483 { 6484 //Get widget settings data 6485 var widgetExtObj = $scope.attr('data-settings'); 6486 6487 if(typeof widgetExtObj != 'undefined') 6488 { 6489 var widgetExt = JSON.parse(widgetExtObj); 6490 } 6491 } 6492 6493 if(typeof widgetExt != 'undefined') 6494 { 6495 //Begin background image parallax scrolling 6496 if(widgetExt.grandconference_image_is_animation == 'true') 6497 { 6498 $scope.addClass('themegoods-image-animation-'+widgetExt.grandconference_image_animation_effect); 6499 $scope.addClass('themegoods-image-animation'); 6500 6501 $scope.smoove({ 6502 offset : '30%' 6503 }); 6504 } 6505 } 6506 } ); 6507 //End execute javascript for Elementor image 6508 6509 6510 //Start execute javascript for portfolio carousel 6511 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-portfolio-carousel.default', function( $scope ) { 6512 jQuery(".portfolio-carousel-wrapper .owl-carousel").each(function() { 6513 var autoPlay = jQuery(this).attr('data-autoplay'); 6514 if (typeof autoPlay == "undefined"){ 6515 autoPlay = false; 6516 } 6517 if(autoPlay == 1) 6518 { 6519 autoPlay = true; 6520 } 6521 else 6522 { 6523 autoPlay = false; 6524 } 6525 6526 var timer = parseInt(jQuery(this).attr('data-timer')); 6527 if (typeof timer == "undefined"){ 6528 timer = 8000; 6529 } 6530 6531 var slidePadding = parseInt(jQuery(this).attr('data-stage-padding')); 6532 if (typeof slidePadding == "undefined"){ 6533 slidePadding = 70; 6534 } 6535 6536 var slideMargin = parseInt(jQuery(this).attr('data-margin')); 6537 if (typeof slideMargin == "undefined"){ 6538 slideMargin = 40; 6539 } 6540 6541 var items = parseInt(jQuery(this).attr('data-items')); 6542 if (typeof items == "undefined"){ 6543 items = 4; 6544 } 6545 6546 var pagination = jQuery(this).attr('data-pagination'); 6547 if (typeof pagination == "undefined"){ 6548 pagination = true; 6549 } 6550 if(pagination == 1) 6551 { 6552 pagination = true; 6553 } 6554 else 6555 { 6556 pagination = false; 6557 } 6558 //console.log(pagination); 6559 var portfolioCarousel = jQuery(this).owlCarousel({ 6560 stagePadding: parseInt(slidePadding), 6561 loop: false, 6562 center: false, 6563 items: parseInt(items), 6564 margin: parseInt(slideMargin), 6565 autoHeight : true, 6566 autoplay: autoPlay, 6567 dots: pagination, 6568 autoplayTimeout: timer, 6569 smartSpeed: 450, 6570 responsive: { 6571 0: { 6572 items: 1 6573 }, 6574 768: { 6575 items: 2 6576 }, 6577 1170: { 6578 items: parseInt(items) 6579 }, 6580 1600: { 6581 items: parseInt(items+1) 6582 }, 6583 2000: { 6584 items: parseInt(items+2) 6585 }, 6586 2400: { 6587 items: parseInt(items+3) 6588 }, 6589 } 6590 }); 6591 6592 setTimeout(function(){ 6593 portfolioCarousel.trigger('refresh.owl.carousel'); 6594 }, 1000); 6595 }); 6596 }); 6597 //End execute javascript for portfolio carousel 6598 6599 6600 //Start execute javascript for service grid 6601 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-service-grid.default', function( $scope ) { 6602 6603 jQuery(".service-grid-wrapper").mouseover(function() { 6604 6605 var dataHoverY = jQuery(this).attr('data-hoverY'); 6606 jQuery(this).find('.header-wrap').css('transform', 'translateY(-'+dataHoverY+'px)'); 6607 6608 }).mouseleave(function() { 6609 6610 jQuery(this).find('.header-wrap').css('transform', 'translateY(0px)'); 6611 }); 6612 6613 jQuery(".service-grid-wrapper").each(function() { 6614 var hoverContent = jQuery(this).find('.hover-content'); 6615 var hoverMoveY = parseInt(hoverContent.height()+10); 6616 jQuery(this).attr('data-hoverY', hoverMoveY); 6617 }); 6618 6619 jQuery(window).resize(function() { 6620 jQuery(".service-grid-wrapper").each(function() { 6621 var hoverContent = jQuery(this).find('.hover-content'); 6622 var hoverMoveY = parseInt(hoverContent.height()+10); 6623 jQuery(this).attr('data-hoverY', hoverMoveY); 6624 }); 6625 }); 6626 6627 } ); 6628 //End execute javascript for service grid 6629 6630 //Start execute javascript for service carousel
6631 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-service-carousel.default', function( $scope ) { 6632 jQuery(".service-carousel-wrapper .owl-carousel").each(function() { 6633 var autoPlay = jQuery(this).attr('data-autoplay'); 6634 if (typeof autoPlay == "undefined"){ 6635 autoPlay = false; 6636 } 6637 if(autoPlay == 1) 6638 { 6639 autoPlay = true; 6640 } 6641 else 6642 { 6643 autoPlay = false; 6644 } 6645 6646 var timer = parseInt(jQuery(this).attr('data-timer')); 6647 if (typeof timer == "undefined"){ 6648 timer = 8000; 6649 } 6650 6651 var slidePadding = parseInt(jQuery(this).attr('data-stage-padding')); 6652 if (typeof slidePadding == "undefined"){ 6653 slidePadding = 70; 6654 } 6655 6656 var slideMargin = parseInt(jQuery(this).attr('data-margin')); 6657 if (typeof slideMargin == "undefined"){ 6658 slideMargin = 40; 6659 } 6660 6661 var items = parseInt(jQuery(this).attr('data-items')); 6662 if (typeof items == "undefined"){ 6663 items = 4; 6664 } 6665 6666 var pagination = jQuery(this).attr('data-pagination'); 6667 if (typeof pagination == "undefined"){ 6668 pagination = true; 6669 } 6670 if(pagination == 1) 6671 { 6672 pagination = true; 6673 } 6674 else 6675 { 6676 pagination = false; 6677 } 6678 //console.log(pagination); 6679 var serviceCarousel = jQuery(this).owlCarousel({ 6680 stagePadding: parseInt(slidePadding), 6681 loop: false, 6682 center: false, 6683 items: parseInt(items), 6684 margin: parseInt(slideMargin), 6685 autoHeight : true, 6686 autoplay: autoPlay, 6687 dots: pagination, 6688 autoplayTimeout: timer, 6689 smartSpeed: 450, 6690 responsive: { 6691 0: { 6692 items: 1 6693 }, 6694 768: { 6695 items: 2 6696 }, 6697 1170: { 6698 items: parseInt(items) 6699 }, 6700 1600: { 6701 items: parseInt(items+1) 6702 }, 6703 2000: { 6704 items: parseInt(items+2) 6705 }, 6706 2400: { 6707 items: parseInt(items+3) 6708 }, 6709 } 6710 }); 6711 6712 setTimeout(function(){ 6713 serviceCarousel.trigger('refresh.owl.carousel'); 6714 }, 1000); 6715 }); 6716 }); 6717 //End execute javascript for service carousel 6718 6719 //Start execute javascript for blog carousel 6720 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-blog-carousel.default', function( $scope ) { 6721 jQuery(".blog-carousel-wrapper .owl-carousel").each(function() { 6722 var autoPlay = jQuery(this).attr('data-autoplay'); 6723 if (typeof autoPlay == "undefined"){ 6724 autoPlay = false; 6725 } 6726 if(autoPlay == 1) 6727 { 6728 autoPlay = true; 6729 } 6730 else 6731 { 6732 autoPlay = false; 6733 } 6734 6735 var timer = parseInt(jQuery(this).attr('data-timer')); 6736 if (typeof timer == "undefined"){ 6737 timer = 8000; 6738 } 6739 6740 var slidePadding = parseInt(jQuery(this).attr('data-stage-padding')); 6741 if (typeof slidePadding == "undefined"){ 6742 slidePadding = 70; 6743 } 6744 6745 var slideMargin = parseInt(jQuery(this).attr('data-margin')); 6746 if (typeof slideMargin == "undefined"){ 6747 slideMargin = 40; 6748 } 6749 6750 var items = parseInt(jQuery(this).attr('data-items')); 6751 if (typeof items == "undefined"){ 6752 items = 4; 6753 } 6754 6755 var pagination = jQuery(this).attr('data-pagination'); 6756 if (typeof pagination == "undefined"){ 6757 pagination = true; 6758 } 6759 if(pagination == 1) 6760 { 6761 pagination = true; 6762 } 6763 else 6764 { 6765 pagination = false; 6766 } 6767 //console.log(pagination); 6768 var blogCarousel = jQuery(this).owlCarousel({ 6769 stagePadding: parseInt(slidePadding), 6770 loop: false, 6771 center: false, 6772 items: parseInt(items), 6773 margin: parseInt(slideMargin), 6774 autoHeight : true, 6775 autoplay: autoPlay, 6776 dots: pagination, 6777 autoplayTimeout: timer, 6778 smartSpeed: 450, 6779 responsive: { 6780 0: { 6781 items: 1 6782 }, 6783 768: { 6784 items: 2 6785 }, 6786 1170: { 6787 items: parseInt(items) 6788 }, 6789 1600: { 6790 items: parseInt(items+1) 6791 }, 6792 2000: { 6793 items: parseInt(items+2) 6794 }, 6795 2400: { 6796 items: parseInt(items+3) 6797 }, 6798 } 6799 }); 6800 6801 setTimeout(function(){ 6802 blogCarousel.trigger('refresh.owl.carousel'); 6803 }, 1000); 6804 }); 6805 }); 6806 //End execute javascript for blog carousel
6807 6808 //Start execute javascript for pricing table 6809 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-pricing-table.default', function( $scope ) { 6810 6811 var elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch')); 6812 6813 elems.forEach(function(elem) { 6814 var switchery = new Switchery(elem, { disabled: true, disabledOpacity: 1, color: elem.getAttribute('data-switch-bg'), secondaryColor: elem.getAttribute('data-switch-bg'), jackColor: elem.getAttribute('data-switch-button'), jackSecondaryColor: elem.getAttribute('data-switch-button') }); 6815 }); 6816 6817 var changeCheckbox = document.querySelector('.js-switch'); 6818 6819 if (!!changeCheckbox) { 6820 changeCheckbox.onchange = function() { 6821 jQuery(".pricing-plan-price").each(function() { 6822 //If select yearly 6823 if(changeCheckbox.checked) 6824 { 6825 var pricingPlan = jQuery(this).attr('data-price-year'); 6826 jQuery(this).html(pricingPlan); 6827 jQuery('.pricing-plan-unit-month').addClass('hide'); 6828 jQuery('.pricing-plan-unit-year').removeClass('hide'); 6829 } 6830 //If select monthly 6831 else 6832 { 6833 var pricingPlan = jQuery(this).attr('data-price-month'); 6834 jQuery(this).html(pricingPlan); 6835 jQuery('.pricing-plan-unit-year').addClass('hide'); 6836 jQuery('.pricing-plan-unit-month').removeClass('hide'); 6837 } 6838 }); 6839 }; 6840 } 6841 } ); 6842 //End execute javascript for pricing table 6843 6844 //Start execute javascript for food menu 6845 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-food-menu.default', function( $scope ) { 6846 6847 jQuery('.food-tooltip').tooltipster({ 6848 position: 'right', 6849 multiple: true, 6850 contentCloning: true, 6851 theme: 'tooltipster-shadow', 6852 minWidth: 300, 6853 maxWidth: 300, 6854 delay: 50, 6855 interactive: true, 6856 }); 6857 6858 } ); 6859 //End execute javascript for food menu 6860 6861 6862 //Start execute javascript for search form 6863 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-search-form.default', function( $scope ) { 6864 6865 jQuery(".tg-search-form.autocomplete-form").each(function() { 6866 var formInput = jQuery(this).find('input[name="s"]'); 6867 var resultDiv = jQuery(this).attr('data-result'); 6868 6869 formInput.on('input', function() { 6870 if(jQuery(this).val().length > 1) 6871 { 6872 jQuery.ajax({ 6873 url: tgAjax.ajaxurl, 6874 type:'POST', 6875 data:'action=grandconference_ajax_search_result&'+jQuery(this).serialize(), 6876 success:function(results) { 6877 jQuery("#"+resultDiv).html(results); 6878 6879 if(results != '') 6880 { 6881 jQuery("#"+resultDiv).addClass('visible'); 6882 jQuery("#"+resultDiv).show(); 6883 jQuery("#"+resultDiv).css('z-index', 99); 6884 6885 jQuery("#"+resultDiv+ " ul li a").mousedown(function() { 6886 jQuery("#"+resultDiv).attr('data-mousedown', true); 6887 }); 6888 } 6889 else 6890 { 6891 jQuery("#"+resultDiv).hide(); 6892 } 6893 } 6894 }); 6895 } 6896 }); 6897 6898 formInput.bind('focus', function () { 6899 jQuery("#"+resultDiv).addClass('visible'); 6900 }); 6901 6902 formInput.bind('blur', function () { 6903 if(jQuery("#"+resultDiv).attr('data-mousedown') != 'true') 6904 { 6905 jQuery("#"+resultDiv).removeClass('visible'); 6906 } 6907 }); 6908 }); 6909 6910 } ); 6911 //End execute javascript for search form 6912 6913 //Start execute javascript for animated headline 6914 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-animated-headline.default', function( $scope ) { 6915 6916 jQuery(".themegoods-animated-headline").each(function() { 6917 var animationType = jQuery(this).attr('data-animation'); 6918 6919 jQuery(this).animatedHeadline({ 6920 animationType: animationType 6921 }); 6922 }); 6923 6924 } ); 6925 //End execute javascript for animated headline 6926 6927 //Start execute javascript for animated text 6928 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-animated-text.default', function( $scope ) { 6929 6930 jQuery(".themegoods-animated-text").each(function() { 6931 var textContent = jQuery(this).first(); 6932 var delimiterTypeOri = jQuery(this).attr('data-delimiter'); 6933 var delimiterType = jQuery(this).attr('data-delimiter');
6934 var transitionSpeed = parseInt(jQuery(this).attr('data-transition')); 6935 var transitionDelay = parseInt(jQuery(this).attr('data-transition-delay')); 6936 var transitionDuration = parseInt(jQuery(this).attr('data-transition-duration')); 6937 6938 if(delimiterType == 'sentence') { 6939 delimiterType = 'word' 6940 } 6941 6942 var animatedText = textContent.blast({ 6943 delimiter: delimiterType, 6944 aria: false, 6945 }); 6946 6947 //If overflow hidden 6948 if(jQuery(this).hasClass('overflow-hidden')){ 6949 animatedText.each(function(i) { 6950 var textEachSpan = jQuery(this); 6951 var initialText = textEachSpan.text(); 6952 //console.log(textEachSpan.html()); 6953 //textEachSpan.html('<span>'+initialText+'</span>'); 6954 6955 //console.log(initialText); 6956 }); 6957 } 6958 6959 if(textContent.isInViewport() && jQuery(this).closest('.fullmenu-wrapper').length != 1) { 6960 animatedText.each(function(i) { 6961 var delaySpeed = parseInt(transitionDelay + (i * transitionSpeed)); 6962 //console.log(delimiterType); 6963 if(delimiterTypeOri == 'sentence') { 6964 delaySpeed = parseInt(transitionDelay + transitionSpeed); 6965 } 6966 6967 jQuery(this).queue(function (next) { 6968 jQuery(this).css({'transition-delay': delaySpeed+'ms', 'transition-duration': transitionDuration+'ms', 'transform': 'translateX(0px) translateY(0px) translateZ(0px)', 'opacity': 1}); 6969 }) 6970 }); 6971 } 6972 6973 jQuery(window).on('resize scroll', function() { 6974 if(textContent.isInViewport()) { 6975 animatedText.each(function(i) { 6976 var delaySpeed = parseInt(transitionDelay + (i * transitionSpeed)); 6977 if(delimiterTypeOri == 'sentence') { 6978 delaySpeed = parseInt(transitionDelay + transitionSpeed); 6979 } 6980 6981 jQuery(this).queue(function (next) { 6982 jQuery(this).css({'transition-delay': delaySpeed+'ms', 'transition-duration': transitionDuration+'ms', 'transform': 'translateX(0px) translateY(0px) translateZ(0px)', 'opacity': 1}); 6983 }) 6984 }); 6985 } 6986 }); 6987 6988 jQuery('body').on('classChange', function() { 6989 if(jQuery(this).hasClass('fullmenu-active')) { 6990 animatedText.each(function(i) { 6991 var delaySpeed = parseInt(transitionDelay + (i * transitionSpeed)); 6992 if(delimiterTypeOri == 'sentence') { 6993 delaySpeed = parseInt(transitionDelay + transitionSpeed); 6994 } 6995 6996 jQuery(this).queue(function (next) { 6997 jQuery(this).css({'transition-delay': delaySpeed+'ms', 'transition-duration': transitionDuration+'ms', 'transform': 'translateX(0px) translateY(0px) translateZ(0px)', 'opacity': 1}); 6998 }) 6999 }); 7000 } 7001 }); 7002 }); 7003 7004 } ); 7005 //End execute javascript for animated text 7006 7007 //Start execute javascript for animated gallery 7008 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-gallery-animated.default', function( $scope ) { 7009 jQuery(".grandconference-gallery-animated-content-wrapper").each(function() { 7010 var columns = jQuery(this).attr('data-columns'); 7011 if (typeof columns == "undefined"){ 7012 columns = 7; 7013 } 7014 7015 var rows = jQuery(this).attr('data-rows'); 7016 if (typeof rows == "undefined"){ 7017 rows = 1; 7018 } 7019 7020 var animationType = jQuery(this).attr('data-animation'); 7021 if (typeof animationType == "undefined"){ 7022 animationType = 'random'; 7023 } 7024 7025 var animationSpeed = jQuery(this).attr('data-animation-speed'); 7026 if (typeof animationSpeed == "undefined"){ 7027 animationSpeed = 800; 7028 } 7029 7030 var intervalTime = jQuery(this).attr('data-interval'); 7031 if (typeof intervalTime == "undefined"){ 7032 intervalTime = 3000; 7033 } 7034 7035 jQuery(this).gridrotator( { 7036 rows : parseInt(rows), 7037 maxStep : 2, 7038 columns : parseInt(columns), 7039 preventClick : true, 7040 animType : animationType, 7041 animEasingOut : 'ease', 7042 animEasingIn : 'ease', 7043 animSpeed : parseInt(animationSpeed), 7044 interval : parseInt(intervalTime), 7045 w1024 : { 7046 rows : parseInt(rows), 7047 columns : parseInt(columns) 7048 }, 7049 w768 : { 7050 rows : parseInt(rows), 7051 columns : parseInt(columns) 7052 }, 7053 w480 : { 7054 rows : parseInt(rows), 7055 columns : parseInt(columns) 7056 }, 7057 w320 : { 7058 rows : 1, 7059 columns : 3 7060 }, 7061 w240 : { 7062 rows : 1, 7063 columns : 3 7064 }, 7065 } ); 7066 }); 7067 7068 } ); 7069 //End execute javascript for animated gallery 7070 7071 7072 //Start execute javascript for team carousel
7073 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-team-carousel.default', function( $scope ) { 7074 jQuery(".team-carousel-wrapper .owl-carousel").each(function() { 7075 var autoPlay = jQuery(this).attr('data-autoplay'); 7076 if (typeof autoPlay == "undefined"){ 7077 autoPlay = false; 7078 } 7079 if(autoPlay == 1) 7080 { 7081 autoPlay = true; 7082 } 7083 else 7084 { 7085 autoPlay = false; 7086 } 7087 7088 var timer = parseInt(jQuery(this).attr('data-timer')); 7089 if (typeof timer == "undefined"){ 7090 timer = 8000; 7091 } 7092 7093 var slidePadding = parseInt(jQuery(this).attr('data-stage-padding')); 7094 if (typeof slidePadding == "undefined"){ 7095 slidePadding = 70; 7096 } 7097 7098 var slideMargin = parseInt(jQuery(this).attr('data-margin')); 7099 if (typeof slideMargin == "undefined"){ 7100 slideMargin = 40; 7101 } 7102 7103 var items = parseInt(jQuery(this).attr('data-items')); 7104 if (typeof items == "undefined"){ 7105 items = 4; 7106 } 7107 7108 var pagination = jQuery(this).attr('data-pagination'); 7109 if (typeof pagination == "undefined"){ 7110 pagination = true; 7111 } 7112 if(pagination == 1) 7113 { 7114 pagination = true; 7115 } 7116 else 7117 { 7118 pagination = false; 7119 } 7120 //console.log(pagination); 7121 var teamCarousel = jQuery(this).owlCarousel({ 7122 stagePadding: parseInt(slidePadding), 7123 loop: false, 7124 center: false, 7125 items: parseInt(items), 7126 margin: parseInt(slideMargin), 7127 autoHeight : true, 7128 autoplay: autoPlay, 7129 dots: pagination, 7130 autoplayTimeout: timer, 7131 smartSpeed: 450, 7132 responsive: { 7133 0: { 7134 items: 1 7135 }, 7136 768: { 7137 items: 2 7138 }, 7139 1170: { 7140 items: parseInt(items) 7141 }, 7142 1600: { 7143 items: parseInt(items) 7144 }, 7145 2000: { 7146 items: parseInt(items) 7147 }, 7148 2400: { 7149 items: parseInt(items) 7150 }, 7151 } 7152 }); 7153 7154 setTimeout(function(){ 7155 teamCarousel.trigger('refresh.owl.carousel'); 7156 }, 1000); 7157 }); 7158 }); 7159 //End execute javascript for team carousel 7160 7161 //Start execute javascript for session fullwidth 7162 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-classic-session-fullwidth.default', function( $scope ) { 7163 jQuery(".session-fullwidth-wrapper").each(function() { 7164 var widgetID = jQuery(this).attr('data-widget-id'); 7165 7166 var grid = jQuery('#'+widgetID).masonry({ 7167 itemSelector: '.scheduleday_wrapper', 7168 columnWidth: ".scheduleday_wrapper", 7169 gutter: 40 7170 }); 7171 7172 jQuery('#'+widgetID+' li .session_content_wrapper.expandable').on( 'click', function(e) { 7173 var targetID = jQuery(this).attr('data-expandid'); 7174 7175 jQuery(this).parent('li').find('#'+targetID).toggleClass('hide'); 7176 jQuery(this).toggleClass('active'); 7177 grid.masonry(); 7178 }); 7179 jQuery('#session_filter_'+widgetID+' li a').on( 'click', function(e) { 7180 var targetFilter = jQuery(this).attr('data-filter'); 7181 7182 jQuery('#session_filter_'+widgetID+' li a').removeClass('active'); 7183 jQuery(this).addClass('active'); 7184 7185 if(targetFilter != '') 7186 { 7187 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').removeClass('hide'); 7188 7189 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').each(function(){ 7190 if(!jQuery(this).hasClass(targetFilter) && !jQuery(this).hasClass('scheduleday_title')) 7191 { 7192 jQuery(this).addClass('hide'); 7193 } 7194 }); 7195 } 7196 else 7197 { 7198 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').removeClass('hide'); 7199 } 7200 7201 grid.masonry(); 7202 }); 7203 7204 jQuery('#session_expand_'+widgetID).on( 'click', function(e) { 7205 jQuery('#'+widgetID+' ul.scheduleday_wrapper li .session_content_wrapper.expandable').trigger('click'); 7206 7207 var expandTitle = jQuery(this).attr('data-expand-title'); 7208 var collapseTitle = jQuery(this).attr('data-collapse-title'); 7209 7210 if(jQuery(this).hasClass('do_expand')) 7211 { 7212 jQuery(this).removeClass('do_expand'); 7213 jQuery(this).addClass('do_collapse'); 7214 7215 jQuery(this).html(collapseTitle+' -'); 7216 } 7217 else 7218 { 7219 jQuery(this).addClass('do_expand'); 7220 jQuery(this).removeClass('do_collapse'); 7221 7222 jQuery(this).html(expandTitle+' +'); 7223 } 7224 7225 grid.masonry(); 7226 }); 7227 }); 7228 }); 7229 7230 //Start execute javascript for session fullwidth 7231 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-classic-session-sidebar.default', function( $scope ) { 7232 jQuery(".session-sidebar-wrapper").each(function() { 7233 var widgetID = jQuery(this).attr('data-widget-id'); 7234 7235 var grid = jQuery('#'+widgetID).masonry({ 7236 itemSelector: '.scheduleday_wrapper', 7237 columnWidth: ".scheduleday_wrapper", 7238 gutter: 40 7239 }); 7240 7241 jQuery('#'+widgetID+' li .session_content_wrapper.expandable').on( 'click', function(e) { 7242 var targetID = jQuery(this).attr('data-expandid'); 7243 7244 jQuery(this).parent('li').find('#'+targetID).toggleClass('hide'); 7245 jQuery(this).toggleClass('active'); 7246 grid.masonry(); 7247 }); 7248 jQuery('#session_filter_'+widgetID+' li a').on( 'click', function(e) { 7249 var targetFilter = jQuery(this).attr('data-filter'); 7250 7251 jQuery('#session_filter_'+widgetID+' li a').removeClass('active'); 7252 jQuery(this).addClass('active'); 7253 7254 if(targetFilter != '') 7255 { 7256 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').removeClass('hide'); 7257 7258 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').each(function(){ 7259 if(!jQuery(this).hasClass(targetFilter) && !jQuery(this).hasClass('scheduleday_title')) 7260 { 7261 jQuery(this).addClass('hide'); 7262 } 7263 }); 7264 } 7265 else 7266 { 7267 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').removeClass('hide'); 7268 } 7269 7270 grid.masonry(); 7271 }); 7272 7273 jQuery('#session_expand_'+widgetID).on( 'click', function(e) { 7274 jQuery('#'+widgetID+' ul.scheduleday_wrapper li .session_content_wrapper.expandable').trigger('click'); 7275 7276 var expandTitle = jQuery(this).attr('data-expand-title'); 7277 var collapseTitle = jQuery(this).attr('data-collapse-title'); 7278 7279 if(jQuery(this).hasClass('do_expand')) 7280 { 7281 jQuery(this).removeClass('do_expand'); 7282 jQuery(this).addClass('do_collapse'); 7283 7284 jQuery(this).html(collapseTitle+' -'); 7285 } 7286 else 7287 { 7288 jQuery(this).addClass('do_expand'); 7289 jQuery(this).removeClass('do_collapse'); 7290 7291 jQuery(this).html(expandTitle+' +'); 7292 } 7293 7294 grid.masonry(); 7295 }); 7296 }); 7297 }); 7298 7299 //Start execute javascript for session tab 7300 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-classic-session-tab.default', function( $scope ) { 7301 jQuery(".session-tab-wrapper").each(function() { 7302 var widgetID = jQuery(this).attr('data-widget-id'); 7303 7304 jQuery('#'+widgetID+' li .session_content_wrapper.expandable').on( 'click', function(e) { 7305 var targetID = jQuery(this).attr('data-expandid'); 7306 7307 jQuery(this).parent('li').find('#'+targetID).toggleClass('hide'); 7308 jQuery(this).toggleClass('active'); 7309 }); 7310 7311 jQuery('#'+widgetID+' ul.scheduleday_wrapper li.scheduleday_title').on( 'click', function(e) { 7312 jQuery('#'+widgetID+' ul.scheduleday_wrapper li.scheduleday_title').removeClass('active'); 7313 jQuery(this).addClass('active'); 7314 7315 var targetTab = jQuery(this).attr('data-tab'); 7316 jQuery('#'+widgetID+' ul.scheduleday_wrapper.tab_content').addClass('hide'); 7317 jQuery('#'+widgetID+' ul#'+targetTab).removeClass('hide'); 7318 }); 7319 7320 jQuery('#session_filter_'+widgetID+' li a').on( 'click', function(e) { 7321 var targetFilter = jQuery(this).attr('data-filter'); 7322 7323 jQuery('#session_filter_'+widgetID+' li a').removeClass('active'); 7324 jQuery(this).addClass('active'); 7325 7326 if(targetFilter != '') 7327 { 7328 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').removeClass('hide'); 7329 7330 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').each(function(){ 7331 if(!jQuery(this).hasClass(targetFilter) && !jQuery(this).hasClass('scheduleday_title')) 7332 { 7333 jQuery(this).addClass('hide'); 7334 } 7335 }); 7336 } 7337 else 7338 { 7339 jQuery('#'+widgetID+' ul.scheduleday_wrapper li').removeClass('hide'); 7340 } 7341 }); 7342 7343 jQuery('#session_expand_'+widgetID).on( 'click', function(e) { 7344 jQuery('#'+widgetID+' ul.scheduleday_wrapper li .session_content_wrapper.expandable').trigger('click'); 7345 7346 var expandTitle = jQuery(this).attr('data-expand-title'); 7347 var collapseTitle = jQuery(this).attr('data-collapse-title'); 7348 7349 if(jQuery(this).hasClass('do_expand')) 7350 { 7351 jQuery(this).removeClass('do_expand'); 7352 jQuery(this).addClass('do_collapse'); 7353 7354 jQuery(this).html(collapseTitle+' -'); 7355 } 7356 else 7357 { 7358 jQuery(this).addClass('do_expand'); 7359 jQuery(this).removeClass('do_collapse'); 7360 7361 jQuery(this).html(expandTitle+' +'); 7362 } 7363 }); 7364 }); 7365 }); 7366 7367 //Start execute javascript for testimonials slider 7368 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-classic-testimonials-slider.default', function( $scope ) { 7369 jQuery(".testimonials-slider-wrapper").find('.testimonial_slider_wrapper').each(function() { 7370 var timer = jQuery(this).attr('data-timer'); 7371 var autoplay = jQuery(this).attr('data-autoplay'); 7372 7373 if(timer == 0) 7374 { 7375 timer = false;
7376 autoplay = false; 7377 } 7378 7379 var pagination = jQuery(this).attr('data-pagination'); 7380 if(pagination == 0) 7381 { 7382 var pagination = false; 7383 } 7384 else 7385 { 7386 var pagination = true; 7387 } 7388 7389 jQuery(this).flexslider({ 7390 animation: "fade", 7391 animationLoop: true, 7392 itemMargin: 0, 7393 minItems: 1, 7394 maxItems: 1, 7395 slideshow: autoplay, 7396 controlNav: pagination, 7397 smoothHeight: false, 7398 pauseOnHover: true, 7399 directionNav: false, 7400 slideshowSpeed: timer, 7401 animationSpeed: 400, 7402 move: 1 7403 }); 7404 }); 7405 }); 7406 7407 //Start execute javascript for countdown timer 7408 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-countdown.default', function( $scope ) { 7409 jQuery(".countdown-wrapper").find('.countdown-clock').each(function() { 7410 var dataDate = jQuery(this).attr('data-date'); 7411 var labelWeek = jQuery(this).attr('data-weeks'); 7412 var labelDay = jQuery(this).attr('data-days'); 7413 var labelhour = jQuery(this).attr('data-hours'); 7414 var labelMinute = jQuery(this).attr('data-minutes'); 7415 var labelSecond = jQuery(this).attr('data-seconds'); 7416 7417 jQuery(this).countdown(dataDate, function(event) { 7418 var clock = jQuery(this).html(event.strftime('' 7419 + '<div class="countdown-clock-col"><div class="countdown-clock-counter">%w</div><div class="countdown-clock-label">'+labelWeek+'</div></div>' 7420 + '<div class="countdown-clock-col"><div class="countdown-clock-counter">%d</div><div class="countdown-clock-label">'+labelDay+'</div></div>' 7421 + '<div class="countdown-clock-col"><div class="countdown-clock-counter">%H</div><div class="countdown-clock-label">'+labelhour+'</div></div>' 7422 + '<div class="countdown-clock-col"><div class="countdown-clock-counter">%M</div><div class="countdown-clock-label">'+labelMinute+'</div></div>' 7423 + '<div class="countdown-clock-col"><div class="countdown-clock-counter">%S</div><div class="countdown-clock-label">'+labelSecond+'</div></div>')); 7424 }); 7425 }); 7426 }); 7427 7428 //Start execute javascript for speaker carousel
7429 elementorFrontend.hooks.addAction( 'frontend/element_ready/grandconference-speaker-carousel.default', function( $scope ) { 7430 jQuery(".speaker-carousel-wrapper .owl-carousel").each(function() { 7431 var autoPlay = jQuery(this).attr('data-autoplay'); 7432 if (typeof autoPlay == "undefined"){ 7433 autoPlay = false; 7434 } 7435 if(autoPlay == 1) 7436 { 7437 autoPlay = true; 7438 } 7439 else 7440 { 7441 autoPlay = false; 7442 } 7443 7444 var timer = parseInt(jQuery(this).attr('data-timer')); 7445 if (typeof timer == "undefined"){ 7446 timer = 8000; 7447 } 7448 7449 var slidePadding = parseInt(jQuery(this).attr('data-stage-padding')); 7450 if (typeof slidePadding == "undefined"){ 7451 slidePadding = 70; 7452 } 7453 7454 var slideMargin = parseInt(jQuery(this).attr('data-margin')); 7455 if (typeof slideMargin == "undefined"){ 7456 slideMargin = 40; 7457 } 7458 7459 var items = parseInt(jQuery(this).attr('data-items')); 7460 if (typeof items == "undefined"){ 7461 items = 4; 7462 } 7463 7464 var pagination = jQuery(this).attr('data-pagination'); 7465 if (typeof pagination == "undefined"){ 7466 pagination = true; 7467 } 7468 if(pagination == 1) 7469 { 7470 pagination = true; 7471 } 7472 else 7473 { 7474 pagination = false; 7475 } 7476 //console.log(pagination); 7477 var speakerCarousel = jQuery(this).owlCarousel({ 7478 stagePadding: parseInt(slidePadding), 7479 loop: false, 7480 center: false, 7481 items: parseInt(items), 7482 margin: parseInt(slideMargin), 7483 autoHeight : true, 7484 autoplay: autoPlay, 7485 dots: pagination, 7486 autoplayTimeout: timer, 7487 smartSpeed: 450, 7488 responsive: { 7489 0: { 7490 items: 1 7491 }, 7492 768: { 7493 items: 2 7494 }, 7495 1170: { 7496 items: parseInt(items) 7497 }, 7498 1600: { 7499 items: parseInt(items) 7500 }, 7501 2000: { 7502 items: parseInt(items) 7503 }, 7504 2400: { 7505 items: parseInt(items) 7506 }, 7507 } 7508 }); 7509 7510 setTimeout(function(){ 7511 speakerCarousel.trigger('refresh.owl.carousel'); 7512 }, 1000); 7513 }); 7514 }); 7515 //End execute javascript for speaker carousel
7516 7517 } ); 7518 7519} )( 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.