1(function ($) { 2 3 'use strict'; 4 5 window.mkAddons = {}; 6 mkAddons.body = $( 'body' ); 7 mkAddons.html = $( 'html' ); 8 mkAddons.windowWidth = $( window ).width(); 9 mkAddons.windowHeight = $( window ).height(); 10 mkAddons.scroll = 0; 11 mkAddons.window = $( window ); 12 mkAddons.widgetsList = {}; 13 14 $( document ).ready( function () { 15 mkAddons.scroll = $( window ).scrollTop(); 16 mkCustomCursor.init(); 17 mkEyeCursor.init(); 18 mkScrollLoad.init(); 19 }); 20 21 $( window ).resize(function () { 22 mkAddons.windowWidth = $( window ).width(); 23 mkAddons.windowHeight = $( window ).height(); 24 }); 25 26 $( window ).scroll( function () { 27 mkAddons.scroll = $( window ).scrollTop(); 28 }); 29 30 $( window ).on('load', function () { 31 mkScrollLoad.init(); 32 }); 33 34 var getElementSettings = function ( $element ) { 35 var elementSettings = {}, 36 modelCID = $element.data( 'model-cid' ); 37 38 if ( elementorFrontend.isEditMode() && modelCID ) { 39 var settings = elementorFrontend.config.elements.data[ modelCID ], 40 settingsKeys = elementorFrontend.config.elements.keys[ settings.attributes.widgetType || settings.attributes.elType ]; 41 42 jQuery.each( settings.getActiveControls(), function( controlKey ) { 43 if ( -1 !== settingsKeys.indexOf( controlKey ) ) { 44 elementSettings[ controlKey ] = settings.attributes[ controlKey ]; 45 } 46 } ); 47 } else { 48 elementSettings = $element.data('settings') || {}; 49 } 50 51 return elementSettings; 52 } 53 54 function mkCursorSelectors($cursorHolder, dragSelectors) { 55 const resetCursorSelectors = 56 '.mk--drag-cursor .swiper-button-prev,' + 57 '.mk--drag-cursor .swiper-button-next,' + 58 '.mk--drag-cursor .mk-slider-pn,' + 59 '.mk--drag-cursor a:not(.mk-pf-slider-image-link),' + 60 '.mk--drag-cursor .swiper-pagination', 61 $resetCursorSelectors = $(resetCursorSelectors); 62 63 $resetCursorSelectors.css({cursor: 'pointer'}); 64 65 $(document).on('mouseenter', resetCursorSelectors, function () { 66 $cursorHolder.addClass('mk--hide'); 67 }).on('mouseleave', resetCursorSelectors, function () { 68 $cursorHolder.removeClass('mk--hide'); 69 }); 70 71 $(document).on('mouseenter', dragSelectors, function () { 72 $cursorHolder.addClass('mk--show'); 73 }).on('mouseleave', dragSelectors, function () { 74 $cursorHolder.removeClass('mk--show'); 75 }); 76 } 77 78 var mkCustomCursor = { 79 cursorApended: false, 80 init : function () { 81 const dragSelectors = '.mk--drag-cursor'; 82 const $dragSelectors = $(dragSelectors); 83 84 if ($dragSelectors.length) { 85 86 $dragSelectors.each( function () { 87 88 if (false === mkCustomCursor.cursorApended) { 89 mkAddons.body.append('<div class="mk-custom-cursor mk-cursor-holder"><div class="mk-custom-cursor-inner"><svg enable-background="new 0 0 256 512" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path d="m52.1 245.3 144-160c5.9-6.6 16-7.1 22.6-1.2 6.9 6.3 6.8 16.4 1.2 22.6l-134.4 149.3 134.4 149.3c5.9 6.6 5.4 16.7-1.2 22.6s-16.7 5.4-22.6-1.2l-144-160c-5.5-6.1-5.5-15.3 0-21.4z"/></svg><svg viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path d="m219.898 266.719-144.01 159.99c-5.906 6.562-16.031 7.094-22.593 1.187-6.918-6.271-6.784-16.394-1.188-22.625l134.367-149.271-134.367-149.271c-5.877-6.594-5.361-16.688 1.188-22.625 6.562-5.907 16.687-5.375 22.593 1.187l144.01 159.99c5.469 6.125 5.469 15.313 0 21.438z"/></svg></div></div>'); 90 mkCustomCursor.cursorApended = true; 91 } 92 93 const $cursorHolder = $('.mk-custom-cursor'); 94 95 if ( $(this).hasClass('mk--drag-cursor-light-skin') ) { 96 $cursorHolder.addClass('mk-skin--light'); 97 } 98 99 if (!mkAddons.html.hasClass('touchevents')) { 100 101 function handleMoveCursor(event) { 102 $cursorHolder.css({ 103 top : event.clientY - 45, // half of svg height 104 left: event.clientX - 45, // half of svg width 105 }); 106 } 107 108 document.addEventListener('pointermove', handleMoveCursor); 109 110 mkCursorSelectors($cursorHolder, dragSelectors); 111 112 } 113 114 }); // for each 115 116 } // end if 117 }, 118 }; 119 120 mkAddons.body.mkCustomCursor = mkCustomCursor; 121 122 // cursor with eye icon 123 var mkEyeCursor = { 124 cursorApended: false, 125 init : function () { 126 const dragSelectors = '.mk--eye-cursor'; 127 const $dragSelectors = $(dragSelectors); 128 129 if ($dragSelectors.length) { 130 131 $dragSelectors.each( function () { 132 133 if (false === mkEyeCursor.cursorApended) { 134 mkAddons.body.append( '<div class="mk-eye-cursor"><div class="mk-eye-cursor-inner"><span class="mk-eye-cursor-bg"></span><span class="mk-eye-cursor-icon"><svg height="512" viewBox="0 0 128 128" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m64 29.63c-34.76 0-62.36 31.72-63.52 33.07a2 2 0 0 0 0 2.6c1.16 1.35 28.76 33.07 63.52 33.07s62.36-31.72 63.52-33.07a2 2 0 0 0 0-2.6c-1.16-1.35-28.76-33.07-63.52-33.07zm0 64.74c-29 0-53.7-24.37-59.3-30.37 5.6-6 30.24-30.37 59.3-30.37s53.7 24.37 59.3 30.37c-5.6 6-30.24 30.37-59.3 30.37z"/><path d="m64 38.19a25.81 25.81 0 1 0 25.81 25.81 25.84 25.84 0 0 0 -25.81-25.81zm0 47.63a21.81 21.81 0 1 1 21.81-21.82 21.84 21.84 0 0 1 -21.81 21.81z"/></svg></span></div></div>' ); 135 mkEyeCursor.cursorApended = true; 136 } 137 138 const $cursorHolder = $('.mk-eye-cursor'); 139 140 if ( $(this).hasClass('mk--drag-cursor-light-skin') ) { 141 $cursorHolder.addClass('mk-skin--light'); 142 } 143 144 if (!mkAddons.html.hasClass('touchevents')) { 145 146 let $bg = $cursorHolder.find('.mk-eye-cursor-bg'), 147 $eye = $cursorHolder.find('.mk-eye-cursor-icon'), 148 xMove = 0, 149 yMove = 0; 150 151 function handleMoveCursorOne( event ) { 152 xMove = (event.clientX - 60).toFixed(2); 153 yMove = (event.clientY - 60).toFixed(2); 154 155 gsap.to( $bg, {x: xMove, y: yMove, duration: .39, }, ); 156 gsap.to( $eye, {x: xMove, y: yMove, duration: .45, }, ); 157 158 !$cursorHolder.hasClass( 'mk--show' ) && $cursorHolder.addClass( 'mk--show' ); 159 } 160 161 $( document ).on('pointermove', dragSelectors, handleMoveCursorOne ); 162 163 mkCursorSelectors($cursorHolder, dragSelectors); 164 165 } 166 167 }); // for each 168 169 } // end if 170 }, 171 }; 172 173 mkAddons.body.mkEyeCursor = mkEyeCursor; 174 175 // on scroll loading animation class 176 var mkScrollLoad = { 177 init: function () { 178 this.holder = $( '.mk-scroll--load:not(.mk--loaded)' ); 179 180 if ( this.holder.length ) { 181 this.holder.each( function () { 182 var holder = $( this ), 183 loadDelay = $( this ).attr( 'data-appear-delay' ); 184 185 if ( ! loadDelay ) { 186 mkScrollLoad.viewPortStatus( holder, function () { 187 holder.addClass( 'mk--loaded' ); 188 }); 189 } else { 190 loadDelay = (loadDelay === 'random') ? Math.floor( Math.random() * (450 - 10) + 10 )
190: loadDelay; 191 mkScrollLoad.viewPortStatus( holder, function () { 192 setTimeout( function () { holder.addClass( 'mk--loaded' ); }, loadDelay ); 193 }); 194 } 195 }); 196 } 197 }, 198 viewPortStatus: function($item, callback, onlyOnce) { 199 if ( $item.length ) { 200 var offset = typeof $item.data( 'viewport-offset' ) !== 'undefined' ? $item.data( 'viewport-offset' ) : 0.15; 201 var observer = new IntersectionObserver( 202 function ( entries ) { 203 if ( entries[0].isIntersecting === true ) { 204 callback.call( $item ); 205 if ( onlyOnce !== false ) { observer.disconnect(); } 206 } 207 }, 208 { threshold: [offset] } 209 ); 210 observer.observe( $item[0] ); 211 } 212 }, 213 }; 214 215 // Get saved content for panel or popup or store it (if first open occured) 216 window.mk_prepare_popup_offcanvas_content = function(container, autoplay) { 217 var wrapper = jQuery(container); 218 // Store popup content to the data-param or restore it when popup open again (second time) 219 // if popup contains audio or video or iframe 220 if (wrapper.data('popup-content') === undefined) { 221 var iframe = wrapper.find('iframe'); 222 if ( wrapper.find('audio').length 223 || wrapper.find('video').length 224 || ( iframe.length 225 && ( ( iframe.data('src') && iframe.data('src').search(/(youtu|vimeo|daily|facebook)/i) > 0 ) 226 || iframe.attr('src').search(/(youtu|vimeo|daily|facebook)/i) > 0 227 ) 228 ) 229 ) { 230 wrapper.data( 'popup-content', wrapper.html() ); 231 } 232 } else { 233 wrapper.html( wrapper.data('popup-content') ); 234 // Remove class 'inited' to reinit elements 235 wrapper.find('.inited').removeClass('inited'); 236 } 237 // Replace src with data-src 238 wrapper.find('[data-src]').each(function() { 239 jQuery(this).attr( 'src', jQuery(this).data('src') ); 240 }); 241 242 // If popup contain essential grid 243 var frame = wrapper.find('.esg-grid'); 244 if ( frame.length > 0 ) { 245 var wrappers = [".esg-tc.eec", ".esg-lc.eec", ".esg-rc.eec", ".esg-cc.eec", ".esg-bc.eec"]; 246 for (var i = 0; i < wrappers.length; i++) { 247 frame.find(wrappers[i]+'>'+wrappers[i]).unwrap(); 248 } 249 } 250 // Call resize actions for the new content 251 mkAddons.window.trigger('resize'); 252 }; 253 254 // Wait element images to loaded 255 var mkWaitForImages = { 256 check: function ( $element, callback ) { 257 if ( $element.length ) { 258 var images = $element.find( 'img' ); 259 260 if ( images.length ) { 261 var counter = 0; 262 263 for ( var index = 0; index < images.length; index++ ) { 264 var img = images[index]; 265 266 if ( img.complete ) { 267 counter++; 268 if ( counter === images.length ) { callback.call( $element ); } 269 } else { 270 var image = new Image(); 271 272 image.addEventListener( 'load', function () { 273 counter++; 274 if ( counter === images.length ) { 275 callback.call( $element ); 276 return false; 277 } 278 }, false ); 279 image.src = img.src; 280 } 281 } 282 } else { 283 callback.call( $element ); 284 } 285 } 286 }, 287 }; 288 289 // Parallax Scrolll Item 290 var mkItemParallaxEffect = { 291 292 init: function () { 293 294 if ( !$('.mk-parallax-scroll-item-on').length ) { return; } 295 296 var items = $('.mk-parallax-scroll-item-on .mk-parallax-item:nth-child(2n)'), // even 297 dirY = 25, 298 itemsOdd = $('.mk-parallax-scroll-item-on .mk-parallax-item:nth-child(2n+1)'), // odd 299 dirYOdd = 14; 300 301 var ease = function (a, b, n) { 302 return (1 - n) * a + n * b; 303 } 304 305 var inView = function (item) { 306 if (window.scrollY + window.innerHeight > item.offset().top && 307 window.scrollY < item.offset().top + item.outerHeight()) { 308 return true 309 } 310 return false;
311 } 312 313 var itemsInView = function (items) { 314 return items.filter(function () { 315 return inView($(this)) 316 }); 317 } 318 319 var move = function (items, dirY) { 320 items.each(function () { 321 var item = $(this); 322 item.data('y', 0); 323 item.data('c', Math.random()); 324 }); 325 326 function loop() { 327 328 itemsInView(items).each(function () { 329 var item = $(this); 330 var deltaY = (item.offset().top - window.scrollY) / window.innerHeight - 1; 331 332 item.data('y', ease(item.data('y'), deltaY, item.data('c') * .1)); 333 item.css({ 334 'transform': 'translate3d(0,' + (dirY * item.data('y')).toFixed(2) + '%,0)', 335 }); 336 }); 337 requestAnimationFrame(loop); 338 } 339 340 requestAnimationFrame(loop); 341 } 342 343 if (itemsOdd.length && !Modernizr.touch && mkAddons.windowWidth>=1024) move(itemsOdd, dirYOdd); 344 if (items.length && !Modernizr.touch && mkAddons.windowWidth>=1024) move(items, dirY); 345 } 346 }; 347 348 $( document ).ready( function () { 349 mkItemParallaxEffect.init(); 350 }); 351 352 353 // ########################################################### 354 // Custom Widgets ############################################ 355 // ########################################################### 356 357 var mkScrollLoadAnim = function ($scope, $) { 358 mkScrollLoad.init(); 359 } 360 361 mkAddons.widgetsList.mk_title = {}; 362 mkAddons.widgetsList.mk_title.mkScrollLoadAnim = mkScrollLoadAnim; 363 364 mkAddons.widgetsList.mk_section_heading = {}; 365 mkAddons.widgetsList.mk_section_heading.mkScrollLoadAnim = mkScrollLoadAnim; 366 367 mkAddons.widgetsList.mk_page_titlebar = {}; 368 mkAddons.widgetsList.mk_page_titlebar.mkScrollLoadAnim = mkScrollLoadAnim; 369 370 mkAddons.widgetsList.mk_dual_slider = {}; 371 mkAddons.widgetsList.mk_dual_slider.mkScrollLoadAnim = mkScrollLoadAnim; 372 373 374 // ---------------------------------------------------------- 375 376 var mkAccordion = function ($scope, $) { 377 var elementSettings = getElementSettings( $scope ), 378 $accordion_title = $scope.find(".mk-accordion-tab-title"), 379 $accordion_type = elementSettings.accordion_type, 380 $accordion_speed = elementSettings.toggle_speed; 381 382 // Open default actived tab 383 $accordion_title.each(function(){ 384 if ( $(this).hasClass('mk-accordion-tab-active-default') ) { 385 $(this).addClass('mk-accordion-tab-show mk-accordion-tab-active'); 386 $(this).parent().find('.mk-accordion-tab-content').slideDown($accordion_speed); 387 $(this).parent().addClass('mk-accordion-item-active'); 388 } 389 }); 390 391 // Remove multiple click event for nested accordion 392 $accordion_title.unbind("click"); 393 394 $accordion_title.click(function(e) { 395 e.preventDefault(); 396 397 var $this = $(this); 398 399 if ( $accordion_type === 'accordion' ) { 400 if ( $this.hasClass("mk-accordion-tab-show") ) { 401 $this.removeClass("mk-accordion-tab-show mk-accordion-tab-active"); 402 $this.parent().parent().find(".mk-accordion-tab-title").removeClass("mk-accordion-tab-active-default"); 403 $this.parent().find('.mk-accordion-tab-content').slideUp($accordion_speed); 404 $this.parent().removeClass("mk-accordion-item-active"); 405 } else { 406 $this.parent().parent().find(".mk-accordion-tab-title").removeClass("mk-accordion-tab-show mk-accordion-tab-active"); 407 $this.parent().parent().find(".mk-accordion-tab-title").removeClass("mk-accordion-tab-active-default"); 408 $this.parent().parent().find(".mk-accordion-tab-content").slideUp($accordion_speed); 409 $this.toggleClass("mk-accordion-tab-show mk-accordion-tab-active"); 410 $this.parent().find('.mk-accordion-tab-content').slideToggle($accordion_speed); 411 $this.parent().parent().find(".mk-accordion-item").removeClass("mk-accordion-item-active"); 412 $this.parent().toggleClass('mk-accordion-item-active'); 413 } 414 } else { 415 // For acccordion type 'toggle' 416 if ( $this.hasClass("mk-accordion-tab-show") ) { 417 $this.removeClass("mk-accordion-tab-show mk-accordion-tab-active"); 418 $this.parent().find('.mk-accordion-tab-content').slideUp($accordion_speed); 419 $this.parent().removeClass("mk-accordion-item-active"); 420 } else { 421 $this.addClass("mk-accordion-tab-show mk-accordion-tab-active"); 422 $this.parent().find('.mk-accordion-tab-content').slideDown($accordion_speed); 423 $this.parent().addClass('mk-accordion-item-active'); 424 } 425 } 426 }); 427 } 428 429 mkAddons.widgetsList.mk_accordion = {}; 430 mkAddons.widgetsList.mk_accordion.mkAccordion = mkAccordion; 431 432 // ---------------------------------------------------------- 433 434 var mkContactFormSevenStyler = function ($scope, $) { 435 436 if ( 'undefined' == typeof $scope ) 437 return; 438 439 var cf7SelectFields = $scope.find('select:not([multiple])'), 440 cf7Loader = $scope.find('span.ajax-loader'); 441 442 cf7SelectFields.wrap( "<span class='mk-cf7-select-custom'></span>" ); 443 444 cf7Loader.wrap( "<div class='mk-cf7-loader-active'></div>" ); 445 446 var wpcf7event = document.querySelector( '.wpcf7' ); 447 448 if( null !== wpcf7event ) { 449 wpcf7event.addEventListener( 'wpcf7submit', function( event ) { 450 var cf7ErrorFields = $scope.find('.wpcf7-not-valid-tip'); 451 cf7ErrorFields.wrap( "<span class='mk-cf7-alert'></span>" ); 452 }, false ); 453 } 454 455 } 456 457 mkAddons.widgetsList.mk_contact_form_styler = {}; 458 mkAddons.widgetsList.mk_contact_form_styler.mkContactFormSevenStyler = mkContactFormSevenStyler; 459 460 // ---------------------------------------------------------- 461 462 var mkGoogleMap = function ($scope, $) { 463 464 if ( 'undefined' == typeof $scope ) 465 return; 466 467 var selector = $scope.find( '.mk-google-map' ).eq(0), 468 locations = selector.data( 'locations' ), 469 map_style = ( selector.data( 'custom-style' ) != '' ) ? selector.data( 'custom-style' ) : '', 470 predefined_style = ( selector.data( 'predefined-style' ) != '' ) ? selector.data( 'predefined-style' ) : '', 471 info_window_size = ( selector.data( 'max-width' ) != '' ) ? selector.data( 'max-width' ) : '', 472 m_cluster = ( selector.data( 'cluster' ) == 'yes' ) ? true : false, 473 animate = selector.data( 'animate' ), 474 auto_center = selector.data( 'auto-center' ), 475 map_options = selector.data( 'map_options' ), 476 i = '', 477 bounds = new google.maps.LatLngBounds(), 478 marker_cluster = [], 479 device_size = elementorFrontend.getCurrentDeviceMode(); 480 481 if( 'drop' == animate ) { 482 var animation = google.maps.Animation.DROP; 483 } else if( 'bounce' == animate ) { 484 var animation = google.maps.Animation.BOUNCE; 485 } 486 487 var skins = { 488 "silver" : "[{\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#f5f5f5\"}]},{\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#616161\"}]},{\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#f5f5f5\"}]},{\"featureType\":\"administrative.land_parcel\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#bdbdbd\"}]},{\"featureType\":\"poi\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#eeeeee\"}]},{\"featureType\":\"poi\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#757575\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#e5e5e5\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#9e9e9e\"}]},{\"featureType\":\"road\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#ffffff\"}]},{\"featureType\":\"road.arterial\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#757575\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#dadada\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#616161\"}]},{\"featureType\":\"road.local\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#9e9e9e\"}]},{\"featureType\":\"transit.line\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#e5e5e5\"}]},{\"featureType\":\"transit.station\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#eeeeee\"}]},{\"featureType\":\"water\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#c9c9c9\"}]},{\"featureType\":\"water\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#9e9e9e\"}]}]", 489 490 "retro" : "[{\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#ebe3cd\"}]},{\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#523735\"}]},{\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#f5f1e6\"}]},{\"featureType\":\"administrative\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#c9b2a6\"}]},{\"featureType\":\"administrative.land_parcel\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#dcd2be\"}]},{\"featureType\":\"administrative.land_parcel\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#ae9e90\"}]},{\"featureType\":\"landscape.natural\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#dfd2ae\"}]},{\"featureType\":\"poi\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#dfd2ae\"}]},{\"featureType\":\"poi\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#93817c\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#a5b076\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#447530\"}]},{\"featureType\":\"road\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#f5f1e6\"}]},{\"featureType\":\"road.arterial\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#fdfcf8\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#f8c967\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#e9bc62\"}]},{\"featureType\":\"road.highway.controlled_access\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#e98d58\"}]},{\"featureType\":\"road.highway.controlled_access\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#db8555\"}]},{\"featureType\":\"road.local\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#806b63\"}]},{\"featureType\":\"transit.line\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#dfd2ae\"}]},{\"featureType\":\"transit.line\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#8f7d77\"}]},{\"featureType\":\"transit.line\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#ebe3cd\"}]},{\"featureType\":\"transit.station\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#dfd2ae\"}]},{\"featureType\":\"water\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#b9d3c2\"}]},{\"featureType\":\"water\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#92998d\"}]}]", 491 492 "dark" : "[{\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#212121\"}]},{\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#757575\"}]},{\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#212121\"}]},{\"featureType\":\"administrative\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#757575\"}]},{\"featureType\":\"administrative.country\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#9e9e9e\"}]},{\"featureType\":\"administrative.land_parcel\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"administrative.locality\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#bdbdbd\"}]},{\"featureType\":\"poi\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#757575\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#181818\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#616161\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#1b1b1b\"}]},{\"featureType\":\"road\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#2c2c2c\"}]},{\"featureType\":\"road\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#8a8a8a\"}]},{\"featureType\":\"road.arterial\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#373737\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#3c3c3c\"}]},{\"featureType\":\"road.highway.controlled_access\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#4e4e4e\"}]},{\"featureType\":\"road.local\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#616161\"}]},{\"featureType\":\"transit\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#757575\"}]},{\"featureType\":\"water\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"}]},{\"featureType\":\"water\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#3d3d3d\"}]}]", 493 494 "night" : "[{\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#242f3e\"}]},{\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#746855\"}]},{\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#242f3e\"}]},{\"featureType\":\"administrative.locality\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#d59563\"}]},{\"featureType\":\"poi\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#d59563\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#263c3f\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#6b9a76\"}]},{\"featureType\":\"road\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#38414e\"}]},{\"featureType\":\"road\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#212a37\"}]},{\"featureType\":\"road\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#9ca5b3\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#746855\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#1f2835\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#f3d19c\"}]},{\"featureType\":\"transit\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#2f3948\"}]},{\"featureType\":\"transit.station\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#d59563\"}]},{\"featureType\":\"water\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#17263c\"}]},{\"featureType\":\"water\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#515c6d\"}]},{\"featureType\":\"water\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#17263c\"}]}]", 495 496 "aubergine" : "[{\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#1d2
496c4d\"}]},{\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#8ec3b9\"}]},{\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#1a3646\"}]},{\"featureType\":\"administrative.country\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#4b6878\"}]},{\"featureType\":\"administrative.land_parcel\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#64779e\"}]},{\"featureType\":\"administrative.province\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#4b6878\"}]},{\"featureType\":\"landscape.man_made\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#334e87\"}]},{\"featureType\":\"landscape.natural\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#023e58\"}]},{\"featureType\":\"poi\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#283d6a\"}]},{\"featureType\":\"poi\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#6f9ba5\"}]},{\"featureType\":\"poi\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#1d2c4d\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#023e58\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#3C7680\"}]},{\"featureType\":\"road\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#304a7d\"}]},{\"featureType\":\"road\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#98a5be\"}]},{\"featureType\":\"road\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#1d2c4d\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#2c6675\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#255763\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#b0d5ce\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#023e58\"}]},{\"featureType\":\"transit\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#98a5be\"}]},{\"featureType\":\"transit\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"color\":\"#1d2c4d\"}]},{\"featureType\":\"transit.line\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#283d6a\"}]},{\"featureType\":\"transit.station\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#3a4762\"}]},{\"featureType\":\"water\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#0e1626\"}]},{\"featureType\":\"water\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#4e6d70\"}]}]", 497 498 "magnesium" : "[{\"featureType\":\"all\",\"stylers\":[{\"saturation\":0},{\"hue\":\"#e7ecf0\"}]},{\"featureType\":\"road\",\"stylers\":[{\"saturation\":-70}]},{\"featureType\":\"transit\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"poi\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"water\",\"stylers\":[{\"visibility\":\"simplified\"},{\"saturation\":-60}]}]", 499 500 "classic_blue" : "[{\"featureType\":\"all\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"on\"}]},{\"featureType\":\"administrative.country\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"on\"}]},{\"featureType\":\"administrative.country\",\"elementType\":\"labels.text\",\"stylers\":[{\"visibility\":\"on\"}]},{\"featureType\":\"administrative.province\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"on\"}]},{\"featureType\":\"administrative.province\",\"elementType\":\"labels.text\",\"stylers\":[{\"visibility\":\"on\"}]},{\"featureType\":\"administrative.locality\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"on\"}]},{\"featureType\":\"administrative.neighborhood\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"administrative.land_parcel\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"landscape\",\"elementType\":\"all\",\"stylers\":[{\"hue\":\"#FFBB00\"},{\"saturation\":43.400000000000006},{\"lightness\":37.599999999999994},{\"gamma\":1}]},{\"featureType\":\"landscape\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"saturation\":\"-40\"},{\"lightness\":\"36\"}]},{\"featureType\":\"landscape.man_made\",\"elementType\":\"geometry\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"landscape.natural\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"saturation\":\"-77\"},{\"lightness\":\"28\"}]},{\"featureType\":\"landscape.natural\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"poi\",\"elementType\":\"all\",\"stylers\":[{\"hue\":\"#00FF6A\"}
500,{\"saturation\":-1.0989010989011234},{\"lightness\":11.200000000000017},{\"gamma\":1}]},{\"featureType\":\"poi\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"poi.attraction\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"saturation\":\"-24\"},{\"lightness\":\"61\"}]},{\"featureType\":\"road\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"on\"}]},{\"featureType\":\"road\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"visibility\":\"on\"}]},{\"featureType\":\"road\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"all\",\"stylers\":[{\"hue\":\"#FFC200\"},{\"saturation\":-61.8},{\"lightness\":45.599999999999994},{\"gamma\":1}]},{\"featureType\":\"road.highway\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"road.highway.controlled_access\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"road.arterial\",\"elementType\":\"all\",\"stylers\":[{\"hue\":\"#FF0300\"},{\"saturation\":-100},{\"lightness\":51.19999999999999},{\"gamma\":1}]},{\"featureType\":\"road.local\",\"elementType\":\"all\",\"stylers\":[{\"hue\":\"#ff0300\"},{\"saturation\":-100},{\"lightness\":52},{\"gamma\":1}]},{\"featureType\":\"road.local\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"transit\",\"elementType\":\"geometry\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"transit\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"transit\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"transit\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"transit.line\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"transit.station\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"water\",\"elementType\":\"all\",\"stylers\":[{\"hue\":\"#0078FF\"},{\"saturation\":-13.200000000000003},{\"lightness\":2.4000000000000057},{\"gamma\":1}]},{\"featureType\":\"water\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]}]", 501 502 "aqua" : "[{\"featureType\":\"administrative\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"color\":\"#444444\"}]},{\"featureType\":\"landscape\",\"elementType\":\"all\",\"stylers\":[{\"color\":\"#f2f2f2\"}]},{\"featureType\":\"poi\",\"elementType\":\"all\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"road\",\"elementType\":\"all\",\"stylers\":[{\"saturation\":-100},{\"lightness\":45}]},{\"featureType\":\"road.highway\",\"elementType\":\"all\",\"stylers\":[{\"visibility\":\"simplified\"}]},{\"featureType\":\"road.arterial\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"transit\",\"elementType\":\"all\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"water\",\"elementType\":\"all\",\"stylers\":[{\"color\":\"#46bcec\"},{\"visibility\":\"on\"}]}]", 503 504 "earth" : "[{\"featureType\":\"landscape.man_made\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#f7f1df\"}]},{\"featureType\":\"landscape.natural\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#d0e3b4\"}]},{\"featureType\":\"landscape.natural.terrain\",\"elementType\":\"geometry\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"poi\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"poi.business\",\"elementType\":\"all\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"poi.medical\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#fbd3da\"}]},{\"featureType\":\"poi.park\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#bde6ab\"}]},{\"featureType\":\"road\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"road\",\"elementType\":\"labels\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#ffe15f\"}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#efd1
50451\"}]},{\"featureType\":\"road.arterial\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#ffffff\"}]},{\"featureType\":\"road.local\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"black\"}]},{\"featureType\":\"transit.station.airport\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#cfb2db\"}]},{\"featureType\":\"water\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#a2daf2\"}]}]" 505 }; 506 507 if( 'undefined' != typeof skins[predefined_style] ) { 508 map_style = JSON.parse( skins[predefined_style] ); 509 } 510 511 512 ( function initMap () { 513 514 var latlng = new google.maps.LatLng( locations[0][0], locations[0][1] ); 515 516 map_options.center = latlng; 517 map_options.styles = map_style; 518 519 var map = new google.maps.Map( $scope.find( '.mk-google-map' )[0], map_options ); 520 var infowindow = new google.maps.InfoWindow(); 521 522 for ( i = 0; i < locations.length; i++ ) { 523 524 var title = locations[i][3]; 525 var description = locations[i][4]; 526 var icon_size = parseInt( locations[i][7] ); 527 var icon_type = locations[i][5]; 528 var icon = ''; 529 var icon_url = locations[i][6]; 530 var enable_iw = locations[i][2]; 531 var click_open = locations[i][8]; 532 var lat = locations[i][0]; 533 var lng = locations[i][1]; 534 535 if( 'undefined' === typeof locations[i] ) { 536 return; 537 } 538 539 if ( '' != lat.length && '' != lng.length ) { 540 541 if ( 'custom' == icon_type ) { 542 543 icon = { 544 url: icon_url, 545 }; 546 if( ! isNaN( icon_size ) ) { 547 548 icon.scaledSize = new google.maps.Size( icon_size, icon_size ); 549 icon.origin = new google.maps.Point( 0, 0 ); 550 icon.anchor = new google.maps.Point( icon_size/2, icon_size ); 551 552 } 553 } 554 555 var marker = new google.maps.Marker( { 556 position: new google.maps.LatLng( lat, lng ), 557 map: map, 558 title: title, 559 icon: icon, 560 animation: animation 561 }); 562 563 if( locations.length > 1 ) { 564 565 // Extend the bounds to include each marker's position 566 bounds.extend( marker.position ); 567 } 568 569 marker_cluster[i] = marker; 570 571 if ( enable_iw && 'iw_open' == click_open ) { 572 573 var content_string = '<div class="mk-infowindow-content"><div class="mk-infowindow-title">' + title + '</div>'; 574 575 if ( '' != description.length ) { 576 content_string += '<div class="mk-infowindow-description">' + description + '</div>'; 577 } 578 content_string += '</div>'; 579 580 if ( '' != info_window_size ) { 581 var width_val = parseInt( info_window_size ); 582 var infowindow = new google.maps.InfoWindow( { 583 content: content_string, 584 maxWidth: width_val 585 } ); 586 } else { 587 var infowindow = new google.maps.InfoWindow( { 588 content: content_string, 589 } ); 590 } 591 592 infowindow.open( map, marker ); 593 } 594 595 // Adding close event for info window 596 google.maps.event.addListener( map, 'click', ( function ( infowindow ) { 597 598 return function() { 599 infowindow.close(); 600 } 601 })( infowindow )); 602 603 if ( enable_iw && '' != locations[i][3] ) { 604 605 google.maps.event.addListener( marker, 'click', ( function( marker, i ) { 606 return function() { 607 var infowindow = new google.maps.InfoWindow(); 608 var content_string = '<div class="mk-infowindow-content"><div class="mk-infowindow-title">' + locations[i][3] + '</div>'; 609
610 if ( '' != locations[i][4].length ) { 611 content_string += '<div class="mk-infowindow-description">' + locations[i][4] + '</div>'; 612 } 613 614 content_string += '</div>'; 615 616 infowindow.setContent( content_string ); 617 618 if ( '' != info_window_size ) { 619 var width_val = parseInt( info_window_size ); 620 var InfoWindowOptions = { maxWidth : width_val }; 621 infowindow.setOptions( { options:InfoWindowOptions } ); 622 } 623 624 infowindow.open( map, marker ); 625 } 626 })( marker, i )); 627 } 628 } 629 } 630 631 if( locations.length > 1 ) { 632 633 if ( 'center' == auto_center ) { 634 635 // Now fit the map to the newly inclusive bounds. 636 map.fitBounds( bounds ); 637 } 638 639 // Restore the zoom level after the map is done scaling. 640 var listener = google.maps.event.addListener( map, "idle", function () { 641 map.setZoom( map_options.zoom ); 642 google.maps.event.removeListener( listener ); 643 }); 644 } 645 646 var cluster_listener = google.maps.event.addListener( map, "idle", function () { 647 648 if( 0 < marker_cluster.length && m_cluster ) { 649 650 var markerCluster = new MarkerClusterer( 651 map, 652 marker_cluster, 653 { 654 imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m' 655 } 656 ); 657 } 658 google.maps.event.removeListener( cluster_listener ); 659 }); 660 661 662 })(); 663 } 664 665 mkAddons.widgetsList.mk_google_map = {}; 666 mkAddons.widgetsList.mk_google_map.mkGoogleMap = mkGoogleMap; 667 668 // ---------------------------------------------------------- 669 670 var mkVideo = function ($scope, $) { 671 672 var shalPlayVideo = { 673 674 /* Auto Play Video */ 675 _play: function( selector ) { 676 677 var iframe = $( "<iframe/>" ); 678 var vurl = selector.data( 'src' ); 679 680 if ( 0 == selector.find( 'iframe' ).length ) { 681 682 iframe.attr( 'src', vurl ); 683 iframe.attr( 'frameborder', '0' ); 684 iframe.attr( 'allowfullscreen', '1' ); 685 iframe.attr( 'allow', 'autoplay;encrypted-media;' ); 686 687 selector.html( iframe ); 688 } 689 690 selector.closest( '.mk-video-container' ).find( '.mk-video-vimeo-wrap' ).hide(); 691 } 692 } 693 694 var video_container = $scope.find( '.mk-video-container' ); 695 var video_holder = $scope.find( '.mk-video-holder' ); 696 697 video_container.off( 'click' ).on( 'click', function( e ) { 698 699 var selector = $( this ).find( '.mk-video__play' ); 700 701 shalPlayVideo._play( selector ); 702 }); 703 704 if( '1' == video_container.data( 'autoplay' ) || true == video_container.data( 'device' ) ) { 705 706 shalPlayVideo._play( $scope.find( '.mk-video__play' ) ); 707 } 708 709 } 710 711 mkAddons.widgetsList.mk_video = {}; 712 mkAddons.widgetsList.mk_video.mkVideo = mkVideo; 713 714 // ---------------------------------------------------------- 715 716 var mkTeam = function ($scope, $) { 717 var $this = $scope.find('.mk-team'), 718 $isoGrid = $this.children('.mk-team-grid'), 719 $btns = $this.children('.mk-team-btns'), 720 is_rtl = $this.data('rtl') ? false : true, 721 layout = $this.data('layout'); 722 723 $this.imagesLoaded( function() { 724 if ( 'masonry' == layout ) { 725 var $grid = $isoGrid.isotope({ 726 itemSelector: '.mk-team-item', 727 percentPosition: true, 728 originLeft: is_rtl, 729 masonry: { 730 columnWidth: '.mk-team-item', 731 } 732 }); 733 } else{ 734 var $grid = $isoGrid.isotope({ 735 itemSelector: '.mk-team-item', 736 layoutMode: 'fitRows', 737 originLeft: is_rtl 738 }); 739 } 740 741 }); 742 } 743 744 mkAddons.widgetsList.mk_team = {}; 745 mkAddons.widgetsList.mk_team.mkTeam = mkTeam; 746 747 // ---------------------------------------------------------- 748 749 var mkVideoIcon = function ($scope, $) { 750 var $this = $scope.find('.mk-video-lightbox'); 751 $this.magnificPopup({ 752 disableOn: 700, // disable popup 753 type: 'iframe', 754 mainClass: 'mfp-fade', 755 removalDelay: 160, 756 preloader: false,
757 fixedContentPos: false 758 }); 759 } 760 761 mkAddons.widgetsList.mk_video_icon = {}; 762 mkAddons.widgetsList.mk_video_icon.mkVideoIcon = mkVideoIcon; 763 764 mkAddons.widgetsList.mk_circle_text = {}; 765 mkAddons.widgetsList.mk_circle_text.mkVideoIcon = mkVideoIcon; 766 767 // ---------------------------------------------------------- 768 769 var mkAwards = function ($scope, $) { 770 if ($(window).width() >= 1024) { 771 772 var thisHolder = $scope.find( '.mk-awards' ), 773 articles = thisHolder.find('.mk-awards-item'), 774 showcaseWallImages = thisHolder.find('.mk-awards-images'), 775 showcaseWallImage = thisHolder.find('.mk-awards-image'); 776 777 $(articles.get().reverse()).each(function () { 778 if ($(this).hasClass('active-item')) { 779 articles.removeClass('active-item'); 780 $(this).addClass('active-item'); 781 } 782 }); 783 784 $(showcaseWallImage.get().reverse()).each(function () { 785 if ($(this).hasClass('active-item')) { 786 showcaseWallImage.removeClass('active-item'); 787 $(this).addClass('active-item'); 788 } 789 }); 790 791 articles.each(function () { 792 $(this).on({ 793 mouseenter: function () { 794 articles.removeClass('active-item'); 795 $(this).addClass('active-item'); 796 showcaseWallImage.removeClass('active-item'); 797 showcaseWallImages.find('#' + $(this).data('index')).addClass('active-item'); 798 }, 799 mouseleave: function () { 800 } 801 }); 802 }); 803 804 } 805 806 } 807 808 mkAddons.widgetsList.mk_awards = {}; 809 mkAddons.widgetsList.mk_awards.mkAwards = mkAwards; 810 811 // ---------------------------------------------------------- 812 813 var mkSearch = function ($scope, $) { 814 815 jQuery(".mk-search-icon").each(function() { 816 var iconInput = jQuery(this).find('a'); 817 818 iconInput.bind('click', function () { 819 var openDiv = jQuery(this).attr('data-open'); 820 jQuery('#'+openDiv).addClass('active'); 821 822 jQuery('body').addClass('elementor-no-overflow'); 823 jQuery('body').addClass('elementor-search-activate'); 824 825 }); 826 }); 827 828 jQuery(".mk_search_form").each(function() { 829 var wrapper = jQuery(this).attr('data-open'); 830 var formInput = jQuery(this).find('input[name="s"]'); 831 var resultDiv = jQuery(this).attr('data-result'); 832 833 formInput.bind('click', function () { 834 jQuery("#"+resultDiv).addClass('visible'); 835 jQuery("#"+resultDiv).attr('data-mousedown', 'true'); 836 }); 837 838 formInput.bind('focus', function () { 839 jQuery("#"+resultDiv).addClass('visible'); 840 formInput.addClass('visible'); 841 }); 842 843 formInput.bind('blur', function () { 844 jQuery("#"+resultDiv).removeClass('visible'); 845 formInput.removeClass('visible'); 846 }); 847 848 jQuery("#"+wrapper).bind('click', function () { 849 if(!formInput.hasClass('visible')) { 850 if(jQuery("#"+resultDiv).attr('data-mousedown') != 'true') { 851 jQuery("#"+resultDiv).removeClass('visible'); 852 } 853 jQuery('#'+wrapper).removeClass('active'); 854 jQuery('body').removeClass('elementor-no-overflow'); 855 jQuery('body').removeClass('elementor-search-activate'); 856 } 857 }); 858 }); 859 860 } 861 862 mkAddons.widgetsList.mk_search = {}; 863 mkAddons.widgetsList.mk_search.mkSearch = mkSearch; 864 865 // ---------------------------------------------------------- 866 867 var mkPopup = function ($scope, $) { 868 869 var $window = jQuery( window ), 870 $document = jQuery( document ), 871 $html = jQuery( 'html' ), 872 $body = jQuery( 'body' ), 873 $adminbar = jQuery( '#wpadminbar' ), 874 _adminbar_height = $adminbar.length === 0 || $adminbar.css( 'display' ) == 'none' || $adminbar.css( 'position' ) == 'absolute' ? 0 : $adminbar.height(); 875 876 window.mk_get_cookie = function(name) { 877 var defa = arguments[1] !== undefined ? arguments[1] : null; 878 var start = document.cookie.indexOf(name + '='); 879 var len = start + name.length + 1; 880 if ((!start) && (name != document.cookie.substring(0, name.length))) { 881 return defa; 882 } 883 if (start == -1) { return defa; } 884 var end = document.cookie.indexOf(';', len); 885 if (end == -1) { end = document.cookie.length; } 886 return decodeURIComponent(document.cookie.substring(len, end)); 887 }; 888 889 window.mk_set_cookie = function(name, value) { 890 891 var expires = arguments[2] !== undefined ? arguments[2] : 24 * 60 * 60 * 1000; // 24 hours 892 var path = arguments[3] !== undefined ? arguments[3] : '/'; 893 var domain = arguments[4] !== undefined ? arguments[4] : ''; 894 var secure = arguments[5] !== undefined ? arguments[5] : ''; 895 var samesite = arguments[6] !== undefined ? arguments[6] : 'strict'; // strict | lax | none 896 var today = new Date(); 897 today.setTime(today.getTime()); 898 var expires_date = new Date(today.getTime() + (expires * 1)); 899 document.cookie = encodeURIComponent(name) + '=' 900 + encodeURIComponent(value) 901 + (expires ? ';expires=' + expires_date.toGMTString() : '') 902 + (path ? ';path=' + path : '') 903 + (domain ? ';domain=' + domain : '') 904 + (secure ? ';secure' : '') 905 + (samesite ? ';samesite=' + samesite : ''); 906 }; 907 908 // popups & panels content 909 910 var on_leaving_site = [], 911 in_page_edit_mode = $body.hasClass('elementor-editor-active') 912 || $body.hasClass('wp-admin') 913 || $body.hasClass('block-editor-page'); 914 915 // Init popups and panels links 916 $body.find('.mk_sections_popup:not(.inited)').each( function() { 917 918 var $self = jQuery(this), 919 id = $self.data('trigger-id'), 920 esckey = $self.data('esckey'), 921 show = false;
922 if (!id) return; 923 924 // add background color dark/light skin 925 var $bg_skin = $self.data('skin'); 926 $body.addClass('popup-bg-skin-'+$bg_skin); 927 928 // close popup with escape key 929 if ( 'yes' == esckey ) { 930 jQuery(document).on('keydown', function (event) { 931 if (27 === event.keyCode) { 932 mk_close_popup($self); 933 } 934 }); 935 } 936 937 var link = jQuery('a[href="#'+id+'"],' + ( '.mk_popup_link[data-popup-id="'+id+'"]' ) ); 938 939 if (link.length === 0) { 940 $body.append('<a href="#'+id+'" class="mk_hidden"></a>'); 941 link = jQuery('a[href="#'+id+'"]'); 942 } 943 944 if ($self.hasClass('mk_sections_show_on_page_load')) { 945 show = true; 946 } else if ($self.hasClass('mk_sections_show_on_page_load_once') && mk_get_cookie('mk_show_on_page_load_once_'+id) != '1') { 947 mk_set_cookie('mk_show_on_page_load_once_'+id, '1'); 948 show = true; 949 } else if ($self.hasClass('mk_sections_show_on_page_close') && mk_get_cookie('mk_show_on_page_close_'+id) != '1') { 950 on_leaving_site.push({ link: link, id: id }); 951 } 952 953 if (show) { 954 // Display popups on the page (site) load 955 if ( ! in_page_edit_mode ) { 956 setTimeout( function() { 957 link.trigger('click'); // on click -> mk_popup_link 958 }, 0); 959 } 960 } 961 962 link.addClass('mk_popup_link') 963 .data('popup', $self); 964 965 }); // body.... .each 966 967 // Display popup when user leaving site 968 if ( on_leaving_site.length > 0 && ! in_page_edit_mode ) { 969 var showed = false; 970 $window.on( 'mousemove', function(e) { 971 if ( showed ) return; 972 var y = typeof e.clientY != 'undefined' ? e.clientY : 999; 973 if ( y < _adminbar_height + 15 ) { 974 showed = true; 975 on_leaving_site.forEach( function(item) { 976 item.link.trigger('click'); 977 mk_set_cookie('mk_show_on_page_close_'+item.id, '1'); 978 }); 979 } 980 } ); 981 } 982 983 // Close popup 984 window.mk_close_popup = function(panel) { 985 if ( panel.hasClass('mk_sections_popup') ) { 986 // $document.trigger('action.close_popup_elements', [panel]); 987 } 988 setTimeout( function() { 989 panel.removeClass('mk_sections_popup_active'); 990 if (panel.prev().hasClass('mk-off-canvas-overlay')) { 991 panel.prev().removeClass('mk_sections_popup_active'); 992 } 993 994 $body.removeClass('mk_sections_popup_active'); 995 996 if ( panel.data('popup-content') !== undefined ) { 997 setTimeout( function() { panel.empty(); }, 500 ); 998 } 999 }, 0 ); 1000 }; 1001 1002 // Display lightbox on click on the popup link 1003 $body.find( '.mk_popup_link:not(.popup_inited)' ) 1004 .addClass('popup_inited') 1005 .magnificPopup({ 1006 type: 'inline', 1007 focus: 'input', 1008 removalDelay: 0, 1009 tLoading: 'Loading...', 1010 tClose: 'Close (Esc)', 1011 closeBtnInside: true, 1012 callbacks: {
1013 // Will fire when this exact popup is opened this - is Magnific Popup object 1014 open: function () { 1015 // Get saved content or store it (if first open occured) 1016 mk_prepare_popup_offcanvas_content(this.content, true); 1017 }, 1018 close: function () { 1019 var $mfp = this; 1020 // Save and remove content before closing if its contain video, audio or iframe 1021 mk_close_popup($mfp.content); 1022 }, 1023 // resize event triggers only when height is changed or layout forced 1024 resize: function () { 1025 var $mfp = this; 1026 // mk_resize_actions(jQuery($mfp.content)); 1027 } 1028 } 1029 }); 1030 1031 }; 1032 1033 mkAddons.widgetsList.mk_popup = {}; 1034 mkAddons.widgetsList.mk_popup.mkPopup = mkPopup; 1035 1036 // ---------------------------------------------------------- 1037 1038 var mkOffCanvas = function ($scope, $) { 1039 1040 var $window = jQuery( window ), 1041 $document = jQuery( document ), 1042 $html = jQuery( 'html' ), 1043 $body = jQuery( 'body' ), 1044 $adminbar = jQuery( '#wpadminbar' ), 1045 _adminbar_height = $adminbar.length === 0 || $adminbar.css( 'display' ) == 'none' || $adminbar.css( 'position' ) == 'absolute' ? 0 : $adminbar.height(); 1046 1047 // Off-Canvas content 1048 1049 var on_leaving_site = [], 1050 in_page_edit_mode = $body.hasClass('elementor-editor-active') 1051 || $body.hasClass('wp-admin') 1052 || $body.hasClass('block-editor-page'); 1053 1054 // Init Off-Canvas links 1055 $body.find('.mk-off-canvas:not(.inited)').each( function() { 1056 1057 var $self = jQuery(this), 1058 getOffCanvasId = $self.data('offcanvas-id'), 1059 esckey = $self.data('esckey'), 1060 show = false; 1061 if (!getOffCanvasId) return; 1062 1063 $self.attr( 'id', getOffCanvasId ); // add ID attribute 1064 1065 // close offcanvas with escape key 1066 if ( 'yes' == esckey ) { 1067 jQuery(document).on('keydown', function (event) { 1068 if (27 === event.keyCode) { 1069 mk_close_offcanvas($self); 1070 } 1071 }); 1072 } 1073 1074 var link = jQuery('a[href="#'+getOffCanvasId+'"],' + ( '.mk_off_canvas_link[data-offcanvas-id="'+getOffCanvasId+'"]' ) ); 1075 1076 if (link.length === 0) { 1077 $body.append('<a href="#'+getOffCanvasId+'" class="mk_hidden"></a>'); 1078 link = jQuery('a[href="#'+getOffCanvasId+'"]'); 1079 } 1080 1081 link.addClass('mk_off_canvas_link') 1082 .data('offcanvas', $self); 1083 1084 $self.addClass('inited') 1085 .on('click', '.mk-off-canvas-close', function(e) { 1086 mk_close_offcanvas($self); 1087 e.preventDefault(); 1088 return false; 1089 }); 1090 1091 }); // body.... .each 1092 1093 // Open Off-Canvas on click on the off-canvas link 1094 $body.find( '.mk_off_canvas_link:not(.offcanvas_inited)' ) 1095 .addClass('offcanvas_inited') 1096 .on('click', function(e) { 1097 1098 console.log(jQuery(this)); 1099 1100 1101 var offCanvas = jQuery(this).data('offcanvas'); 1102 if ( ! offCanvas.hasClass( 'mk-off-canvas-active' ) ) { 1103 1104 mk_prepare_popup_offcanvas_content(offCanvas, true); 1105 offCanvas.addClass('mk-off-canvas-active'); 1106 $document.trigger('action.opened_popup_elements', [offCanvas]); 1107 1108 if (offCanvas.prev().hasClass('mk-off-canvas-overlay')) { 1109 offCanvas.prev().addClass('mk-off-canvas-active'); 1110 } 1111 1112 $body.addClass('mk-off-canvas-active'); 1113 } else { 1114 mk_close_offcanvas(offCanvas); 1115 } 1116 e.preventDefault(); 1117 return false;
1118 }); 1119 1120 // Close off-canvas on click on the modal cover 1121 $body.find('.mk-off-canvas-overlay:not(.inited)') 1122 .addClass('inited') 1123 .on('click', function(e) { 1124 mk_close_offcanvas(jQuery(this).next()); 1125 e.preventDefault(); 1126 return false; 1127 }); 1128 1129 // Close off-canvas 1130 window.mk_close_offcanvas = function(offCanvas) { 1131 setTimeout( function() { 1132 offCanvas.removeClass('mk-off-canvas-active'); 1133 if (offCanvas.prev().hasClass('mk-off-canvas-overlay')) { 1134 offCanvas.prev().removeClass('mk-off-canvas-active'); 1135 } 1136 1137 $body.removeClass('mk-off-canvas-active mk-off-canvas-active_left mk-off-canvas-active_right'); 1138 1139 if ( offCanvas.data('off-canvas-content') !== undefined ) { 1140 setTimeout( function() { offCanvas.empty(); }, 500 ); 1141 } 1142 }, 0 ); 1143 }; 1144 1145 }; 1146 1147 mkAddons.widgetsList.mk_off_canvas = {}; 1148 mkAddons.widgetsList.mk_off_canvas.mkOffCanvas = mkOffCanvas; 1149 1150 // ---------------------------------------------------------- 1151 1152 var mkCart = function ($scope, $) { 1153 1154 var $window = jQuery( window ), 1155 $body = jQuery( 'body' ), 1156 $adminbar = jQuery( '#wpadminbar' ); 1157 1158 // panels content 1159 var in_page_edit_mode = $body.hasClass('elementor-editor-active') 1160 || $body.hasClass('wp-admin') 1161 || $body.hasClass('block-editor-page'); 1162 1163 // Init panels links 1164 $body.find('.mk-cart-panel:not(.inited)').each( function() { 1165 1166 var $self = jQuery(this), 1167 id = $self.data('trigger-id'), 1168 esckey = $self.data('esckey'); 1169 1170 if (!id) return; 1171 1172 // close panel with escape key 1173 if ( 'yes' == esckey ) { 1174 jQuery(document).on('keydown', function (event) { 1175 if (27 === event.keyCode) { 1176 mk_close_cart_panel($self); 1177 } 1178 }); 1179 } 1180 1181 var link = jQuery('a[href="#'+id+'"],.mk-cart-panel-link[data-panel-id="'+id+'"]' ); 1182 1183 if (link.length === 0) { 1184 $body.append('<a href="#'+id+'" class="mk-hidden"></a>'); 1185 link = jQuery('a[href="#'+id+'"]'); 1186 } 1187 1188 link.addClass('mk-cart-panel-link') 1189 .data('panel', $self); 1190 1191 $self.addClass('inited') 1192 .on('click', '.mk-cart-panel-close', function(e) { 1193 mk_close_cart_panel($self); 1194 e.preventDefault(); 1195 return false; 1196 }); 1197 1198 }); // body.... .each 1199 1200 // Open panel on click on the panel link 1201 $body.find( '.mk-cart-panel-link:not(.panel_inited)' ) 1202 .addClass('panel_inited') 1203 .on('click', function(e) { 1204 1205 var panel = jQuery(this).data('panel'); 1206 if ( ! panel.hasClass( 'mk-cart-panel-active' ) ) { 1207 panel.addClass('mk-cart-panel-active'); 1208 if (panel.prev().hasClass('mk-cart-panel-overlay')) panel.prev().addClass('mk-cart-panel-active'); 1209 $body.addClass('mk-cart-panel-active mk-cart-panel-active-' + panel.data('panel-position')); 1210 } else { 1211 mk_close_cart_panel(panel); 1212 } 1213 e.preventDefault(); 1214 return false; 1215 }); 1216 1217 // Close panel on click on the modal cover 1218 $body.find('.mk-cart-panel-overlay:not(.inited)') 1219 .addClass('inited') 1220 .on('click', function(e) { 1221 mk_close_cart_panel(jQuery(this).next()); 1222 e.preventDefault(); 1223 return false; 1224 }); 1225 1226 // Close panel 1227 window.mk_close_cart_panel = function(panel) { 1228 setTimeout( function() { 1229 panel.removeClass('mk-cart-panel-active'); 1230 if (panel.prev().hasClass('mk-cart-panel-overlay')) { 1231 panel.prev().removeClass('mk-cart-panel-active'); 1232 } 1233 1234 $body.removeClass('mk-cart-panel-active mk-cart-panel-active-left mk-cart-panel-active-right'); 1235 1236 }, 0 ); 1237 }; 1238 1239 }; 1240 1241 mkAddons.widgetsList.mk_cart = {}; 1242 mkAddons.widgetsList.mk_cart.mkCart = mkCart; 1243 1244 // ---------------------------------------------------------- 1245 1246 var mkImage = function ($scope, $) { 1247 1248 var mkImageFigureLink = $scope.find( '.mk-image figure a' ), 1249 cursonIcon = mkImageFigureLink.data('cursor-icon') ? mkImageFigureLink.data('cursor-icon') : ''; 1250 if (cursonIcon.length) { 1251 mkImageFigureLink.css('cursor','url(' + cursonIcon + '),auto'); 1252 } 1253 1254 if ($scope.hasClass('mk-custom-image-appear-reveal')) { 1255 var mkImageFigure = $scope.find( '.mk-image figure' )[0]; 1256 1257 if (mkImageFigure) { 1258 1259 var revealColor = $(mkImageFigure).data('reveal-color'), 1260 revealDirection = $(mkImageFigure).data('reveal-direction'), 1261 revealDuration = $(mkImageFigure).data('reveal-duration'), 1262 revealDelay = $(mkImageFigure).data('reveal-delay'), 1263 revealViewport = $(mkImageFigure).data('reveal-viewport'), 1264 finalViewPort = revealViewport * -1, 1265 watcher_1 = scrollMonitor.create(mkImageFigure, finalViewPort); 1266 1267 var revealBlock = new RevealFx(mkImageFigure, { 1268 revealSettings : { 1269 bgColors: [revealColor], 1270 delay: revealDelay, 1271 direction:revealDirection, 1272 duration: revealDuration, 1273 onHalfway: function(contentEl, revealerEl) { 1274 contentEl.style.opacity = 1; 1275 } 1276 } 1277 }); 1278
1279 watcher_1.enterViewport(function() { 1280 revealBlock.reveal(); 1281 watcher_1.destroy(); 1282 }); 1283 } 1284 } 1285 1286 mkScrollLoad.init(); 1287 1288 } 1289 1290 mkAddons.widgetsList.mk_image = {}; 1291 mkAddons.widgetsList.mk_image.mkImage = mkImage; 1292 1293 // ---------------------------------------------------------- 1294 1295 var mkIconButton = function ($scope, $) { 1296 var mkIconButton = $scope.find('.mk-icon-button'); 1297 1298 if ( mkIconButton.length > 0 ) { 1299 if ( mkIconButton.hasClass( 'mk-icon-button-type--icon-boxed' ) ) { 1300 var $buttonIcon = mkIconButton.find( '.mk-icon-button-icon' ), 1301 height = mkIconButton.find( '.mk-icon-button-text-holder' ).outerHeight(); 1302 $buttonIcon.css('width', height ); 1303 } 1304 } 1305 }; 1306 1307 mkAddons.widgetsList.mk_icon_button = {}; 1308 mkAddons.widgetsList.mk_icon_button.mkIconButton = mkIconButton; 1309 1310 // ---------------------------------------------------------- 1311 1312 var mkMovingGallery = function ($scope, $) { 1313 1314 let $holder = $( '.mk-moving-gallery' ); 1315 1316 if ( $holder.length ) { 1317 1318 gsap.defaults({overwrite: "auto"}); 1319 gsap.registerPlugin(ScrollTrigger); 1320 gsap.config({nullTargetWarn: false}); 1321 1322 $holder.each( function () { 1323 1324 let $thisHolder = $( this ), 1325 $holder_id = $thisHolder.find('ul').attr( 'id' ); 1326 1327 gsap.utils.toArray(this).forEach((section, index) => { 1328 const galleryList = section.querySelector('.mg-' + $holder_id); 1329 const [x, xEnd] = (index % 2) ? [(section.offsetWidth - galleryList.scrollWidth), 0] : [0, section.offsetWidth - galleryList.scrollWidth]; 1330 gsap.fromTo(galleryList, { x }, { 1331 x: xEnd, 1332 scrollTrigger: { 1333 trigger: section, 1334 scrub: 0.5, 1335 } 1336 }); 1337 }); 1338 1339 }); 1340 } 1341 }; 1342 1343 mkAddons.widgetsList.mk_moving_gallery = {}; 1344 mkAddons.widgetsList.mk_moving_gallery.mkMovingGallery = mkMovingGallery; 1345 1346 // ---------------------------------------------------------- 1347 1348 var mkMovingProjects = function ($scope, $) { 1349 1350 var $holder = $scope.find( '.mk-moving-projects' ); 1351 1352 if ( $holder.length && mkAddons.windowWidth > 1024 ) { 1353 1354 gsap.defaults({overwrite: "auto"}); 1355 gsap.registerPlugin(ScrollTrigger); 1356 gsap.config({nullTargetWarn: false}); 1357 1358 $holder.each( function () { 1359 let $thisHolder = $( this ), 1360 $holder_id = $thisHolder.attr( 'id' ); 1361 initMovingPorjectItem($thisHolder,$holder_id); 1362 }); 1363 } 1364 1365 function initMovingPorjectItem($holder, $holder_id) { 1366 1367 gsap.registerPlugin(ScrollTrigger); 1368 1369 $holder_id = '.mk-moving-projects-' + $holder_id; 1370 1371 const firstRow = document.querySelector( $holder_id + ' .mk-moving-projects-holder .mk-moving-projects-images:first-of-type'), 1372 secondRow = document.querySelector( $holder_id + ' .mk-moving-projects-holder .mk-moving-projects-images:nth-of-type(2)'), 1373 projectImage = document.querySelector( $holder_id + ' .mk-moving-projects-holder .mk-moving-projects-images:first-of-type .mk-moving-projects-other-img'), 1374 allImages = document.querySelectorAll( $holder_id + ' .mk-moving-projects-holder .mk-moving-projects-images'); 1375 1376 let imageWidth = projectImage.offsetWidth, 1377 firstRowWidth = firstRow.getBoundingClientRect().left + imageWidth, 1378 secondRowRight = secondRow.getBoundingClientRect().right - imageWidth; 1379 1380 const movingProjectsAnim = gsap.timeline({ 1381 scrollTrigger: { 1382 trigger: $holder_id + ' .mk-moving-projects-holder', 1383 id: 'clientPin', 1384 start: 'top 20%', 1385 end: 'bottom top', 1386 pin: $holder_id + '.mk-moving-projects', 1387 scrub: 1 1388 } 1389 }); 1390 1391 movingProjectsAnim.to(firstRow, { x: -firstRowWidth, ease: 'linear' }), 1392 movingProjectsAnim.to(secondRow, { x: secondRowRight, ease: 'linear' }, '<'); 1393 1394 // hover circle text change 1395 const projectInfo = document.querySelector($holder_id + ' .mk-moving-project-info'), 1396 circleBg = projectInfo.querySelector($holder_id + ' .mk-moving-project-info-bg'), 1397 iconImage = projectInfo.querySelector($holder_id + ' .stat-main-title span'), 1398 imageItem = gsap.utils.toArray($holder_id + ' .mk-moving-projects-img'), 1399 gsapAnim = gsap.timeline({ repeat: -1 }); 1400 1401 gsapAnim.to(iconImage, { duration: .3, scale: 1.3, delay: .5, ease: "power3.in" }), 1402 gsapAnim.to(iconImage, { duration: .3, scale: 1, ease: "power3.out" }),
1403 allImages.forEach((theImage => { 1404 theImage.addEventListener('mouseenter', (function() { gsap.to(circleBg, { scale: 1.1, duration: 1, ease: 'elastic' }) })), 1405 theImage.addEventListener('mouseleave', (function() { gsap.to(circleBg, { scale: 1, duration: 1, ease: 'elastic' }) })) 1406 })), 1407 imageItem.forEach((imageElements => { 1408 1409 imageElements.addEventListener('mouseenter', (function() { 1410 const number = this.dataset.projectimage, 1411 dataStat = document.querySelector('[data-stat="' + number + '"]'); 1412 1413 gsapAnim.pause(), 1414 gsap.to(dataStat, { yPercent: -50, opacity: 1, scale: 1, duration: .4, ease: "power4" }), 1415 iconImage.classList.add('invisible') })), 1416 1417 imageElements.addEventListener('mouseleave', (function() { 1418 const number = this.dataset.projectimage, 1419 dataStat = document.querySelector('[data-stat="' + number + '"]'); 1420 1421 gsap.to(dataStat, { yPercent: -50, opacity: 0, scale: .5, duration: .4, ease: 'power4' }), 1422 iconImage.classList.remove('invisible'), 1423 gsapAnim.restart() 1424 })); 1425 1426 })); 1427 } 1428 1429 } 1430 1431 mkAddons.widgetsList.mk_moving_projects = {}; 1432 mkAddons.widgetsList.mk_moving_projects.mkMovingProjects = mkMovingProjects; 1433 1434 // ---------------------------------------------------------- 1435 1436 var mkMediaReveal = { 1437 1438 init: function () { 1439 let $holder = $( '.mk-reveal-image-wrapper' ); 1440 1441 if ( $holder.length ) { 1442 1443 gsap.defaults({overwrite: "auto"}); 1444 gsap.registerPlugin(ScrollTrigger); 1445 gsap.config({nullTargetWarn: false}); 1446 1447 $holder.each( function () { 1448 let $thisHolder = $( this ); 1449 mkMediaReveal.initItem($thisHolder); 1450 }); 1451 } 1452 }, 1453 initItem: function ($holder){ 1454 1455 // Clipped Image 1456 gsap.utils.toArray($holder).forEach((revealMediaWrapper) => { 1457 1458 let $holder_id = $holder.attr( 'id' ); 1459 1460 const revealMediaPin = revealMediaWrapper.querySelector('#' + $holder_id + ' .mk-reveal-image-pin'), 1461 revealMedia = revealMediaWrapper.querySelector('#' + $holder_id + ' .mk-reveal-image'), 1462 revealMediaContent = revealMediaWrapper.querySelector('#' + $holder_id + ' .mk-reveal-image-content'); 1463 1464 gsap.set(revealMediaContent, { paddingTop: (window.innerHeight/2) + revealMediaContent.offsetHeight}); 1465 1466 function mkSetMediaRevealImages() { 1467 gsap.set(revealMediaContent, { paddingTop:""}); 1468 gsap.set(revealMedia, { height: window.innerHeight, }); 1469 gsap.set(revealMediaContent, { paddingTop: (window.innerHeight/2) + revealMediaContent.offsetHeight}); 1470 gsap.set(revealMediaWrapper, { height: window.innerHeight + revealMediaContent.offsetHeight}); 1471 } 1472 1473 imagesLoaded('body', function() { 1474 mkSetMediaRevealImages(); 1475 }); 1476 1477 window.addEventListener('resize', mkSetMediaRevealImages); 1478 1479 var revealMediaAnimation = gsap.to(revealMedia, { 1480 clipPath: 'inset(0% 0% 0%)', 1481 scale: 1, 1482 duration: 1, 1483 ease: 'Linear.easeNone' 1484 }); 1485 1486 var revealMediaScene = ScrollTrigger.create({ 1487 trigger: revealMediaPin, 1488 start: function() { 1489 const startPin = 0; 1490 return "top +=" + startPin; 1491 }, 1492 end: function() { 1493 const endPin = revealMediaContent.offsetHeight; 1494 return "+=" + endPin; 1495 }, 1496 animation: revealMediaAnimation, 1497 scrub: 1, 1498 pin: true, 1499 pinSpacing: false, 1500 }); 1501 1502 }); 1503 1504 1505 // Elements Animation 1506 var contentVideo = gsap.utils.toArray('.mk-media-reveal-video'); 1507 contentVideo.forEach(function(videoPlay) { 1508 var video = videoPlay.querySelector("video"); 1509 1510 var videoScene = ScrollTrigger.create({ 1511 trigger: videoPlay, 1512 start: "top 100%", 1513 end: () => `+=${videoPlay.offsetHeight + window.innerHeight*2}`, 1514 onEnter: function() { video.play(); }, 1515 onLeave: function() { video.pause(); }, 1516 onEnterBack: function() { video.play(); }, 1517 onLeaveBack: function() { video.pause(); }, 1518 }); 1519 }); 1520 1521 // Reinit All Scrolltrigger After Page Load 1522 imagesLoaded('body', function() { 1523 setTimeout(function() { 1524 ScrollTrigger.refresh() 1525 }, 1000); 1526 }); 1527 1528 } 1529 }; 1530 1531 mkAddons.widgetsList.mk_media_reveal = {}; 1532 mkAddons.widgetsList.mk_media_reveal.mkMediaReveal = mkMediaReveal; 1533 1534 $( document ).ready( function () { 1535 mkMediaReveal.init(); 1536 }); 1537 1538 // ---------------------------------------------------------- 1539 1540 var mkMovingContent = function ($scope, $) { 1541 1542 if ($("body").hasClass("elementor-editor-active") ) { 1543 return; 1544 } 1545 1546 var $holder = $scope.find( '.mk-moving-content' ); 1547 1548 if ( $holder.length && mkAddons.windowWidth > 1024 ) { 1549 var holderItems = $holder.find( '.mk-moving-content-item' ); 1550 1551 gsap.defaults({overwrite: "auto"}); 1552 gsap.registerPlugin(ScrollTrigger); 1553 gsap.config({nullTargetWarn: false}); 1554 1555 holderItems.each( function () { 1556 let $thisHolder = $( this ); 1557 initMovingContentItem($thisHolder); 1558 }); 1559 1560 function initMovingContentItem($holder){ 1561 1562 gsap.to($holder,{ 1563 scrollTrigger: { 1564 trigger: $holder, 1565 scrub: 1, 1566 start:"top 100%", 1567 end: "top 50%", 1568 toggleActions: "restart play reverse play", 1569 toggleClass:"activeMedia", 1570 }, 1571 x:'-100vw', 1572 duration:3 1573 }); 1574 1575 } 1576 1577 } 1578 1579 } 1580 1581 mkAddons.widgetsList.mk_moving_content = {}; 1582 mkAddons.widgetsList.mk_moving_content.mkMovingContent = mkMovingContent; 1583 1584 // ---------------------------------------------------------- 1585 1586 var mkInteractivePortfolio = { 1587 1588 init: function () { 1589 1590 if ($("body").hasClass("elementor-editor-active")) { 1591 return; 1592 } 1593 1594 let $holder = $( '.mk-interactive-portfolio' ); 1595 1596 if ( $holder.length ) { 1597 1598 // gsap.defaults({overwrite: "auto"}); 1599 // gsap.registerPlugin(ScrollTrigger); 1600 // gsap.config({nullTargetWarn: false}); 1601 1602 $holder.each( function () { 1603 let $thisHolder = $( this ); 1604 mkInteractivePortfolio.initItem($thisHolder); 1605 }); 1606 } 1607 }, 1608 initItem: function ($holder){ 1609 1610 var $thisHolder = $holder, 1611 slideSpeed = 1200, 1612 autoplay = { disableOnInteraction: false }; 1613 1614 // title text split 1615 $($thisHolder).find('.mk-interactive-portfolio-split-text span').each(function() { 1616 let splitText = new SplitText($(this), { type: "chars" }); 1617 var i = 1; 1618 $(this).find('div').each(function() { 1619 $(this).addClass('mk-ip--char'); 1620 $(this).get(0).style.setProperty("--mk-ip-i", i); 1621 i = i + 1; 1622 }); 1623 }); 1624 1625 var $swiper = new Swiper($thisHolder, { 1626 direction:'vertical', 1627 effect: 'fade', 1628 slidesPerView: 1, 1629 centeredSlides: true, 1630 spaceBetween: 0, 1631 mousewheel: true, 1632 loop: true, 1633 speed: slideSpeed, 1634 preventInteractionOnTransition: true, 1635 disableOnInteraction: false, 1636 on: { 1637 init: function () { 1638 setTimeout( function() { $thisHolder.addClass('mk-initialized'); }, 100); 1639 }, 1640 slideChangeTransitionStart: function() { 1641 var activeSlide = $thisHolder.find('.swiper-slide-active'), 1642 notActive = $thisHolder.find('.swiper-slide:not(".swiper-slide-active")'), 1643 activeIndex = activeSlide.data('swiper-slide-index'),
1644 container = $thisHolder.find('.mk-interactive-portfolio-image-one, .mk-interactive-portfolio-image-two, .mk-interactive-portfolio-image-three, .mk-interactive-portfolio-image-four'); 1645 1646 activeSlide.removeClass('mk--non-active'); 1647 notActive.each( function () { 1648 if ( $( this ).length ) { 1649 $( this ).addClass('mk--non-active'); 1650 } 1651 }); 1652 1653 container.each(function () { 1654 if ( $( this ).length ) { 1655 if ( $( this ).data('image-index') === activeIndex ) { 1656 $( this ).addClass('mk--active'); 1657 } else { 1658 $( this ).removeClass('mk--active'); 1659 } 1660 } 1661 }); 1662 }, 1663 } 1664 }); 1665 1666 } 1667 }; 1668 1669 mkAddons.widgetsList.mk_interactive_portfolio = {}; 1670 mkAddons.widgetsList.mk_interactive_portfolio.mkInteractivePortfolio = mkInteractivePortfolio; 1671 1672 $( document ).ready( function () { 1673 mkInteractivePortfolio.init(); 1674 }); 1675 1676 // ---------------------------------------------------------- 1677 1678 var mkRevealServices = { 1679 1680 init: function () { 1681 1682 if ($("body").hasClass("elementor-editor-active") || mkAddons.windowWidth < 1024 ) { 1683 return; 1684 } 1685 1686 let $holder = $( '.mk-reveal-services-holder' ); 1687 1688 if ( $holder.length ) { 1689 1690 gsap.defaults({overwrite: "auto"}); 1691 gsap.registerPlugin(ScrollTrigger); 1692 gsap.config({nullTargetWarn: false}); 1693 1694 $holder.each( function () { 1695 let $thisHolder = $( this ); 1696 mkRevealServices.initItem($thisHolder); 1697 }); 1698 } 1699 }, 1700 initItem: function ($holder){ 1701 1702 // 0 - Boxes Move right to left 1703 const tlBoxMove = gsap.timeline({ 1704 scrollTrigger:{ 1705 trigger:'.mk-reveal-service-one', 1706 start:'top 80%', 1707 end:'top 30%', 1708 scrub:1 1709 } 1710 }); 1711 1712 tlBoxMove.to('.mk-reveal-service-one', { x:'150vh', duration:50, delay:1, opacity:1 }) 1713 .to('.mk-reveal-service-two', { x:'150vh', duration:50, delay:2, opacity:1 }) 1714 .to('.mk-reveal-service-three', { x:'150vh', duration:50, delay:3, opacity:1 }) 1715 .to('.mk-reveal-service-four', { x:'150vh', duration:50, delay:4, opacity:1 }); 1716 1717 } 1718 }; 1719 1720 mkAddons.widgetsList.mk_reveal_services = {}; 1721 mkAddons.widgetsList.mk_reveal_services.mkRevealServices = mkRevealServices; 1722 1723 $( document ).ready( function () { 1724 mkRevealServices.init(); 1725 }); 1726 1727 // ---------------------------------------------------------- 1728 1729 var mkInteractiveServices = function ($scope, $) { 1730 1731 var thisHolder = $scope.find( '.mk-interactive-services' ), 1732 articles = thisHolder.find('.mk-itsr-item'), 1733 showcaseWallImages = thisHolder.find('.mk-itsr-images'), 1734 showcaseWallImage = thisHolder.find('.mk-itsr-image'); 1735 1736 if ($(window).width() >= 1024) { 1737 1738 $(articles.get().reverse()).each(function () { 1739 if ($(this).hasClass('active-item')) { 1740 articles.removeClass('active-item'); 1741 $(this).addClass('active-item'); 1742 } 1743 }); 1744 1745 $(showcaseWallImage.get().reverse()).each(function () { 1746 if ($(this).hasClass('active-item')) { 1747 showcaseWallImage.removeClass('active-item'); 1748 $(this).addClass('active-item'); 1749 } 1750 }); 1751 1752 articles.each(function () { 1753 $(this).on({ 1754 mouseenter: function () { 1755 articles.removeClass('active-item'); 1756 $(this).addClass('active-item'); 1757 showcaseWallImage.removeClass('active-item'); 1758 showcaseWallImages.find('#' + $(this).data('index')).addClass('active-item'); 1759 }, 1760 mouseleave: function () { 1761 } 1762 }); 1763 }); 1764 1765 } else { 1766 articles.removeClass('active-item'); 1767 } 1768 } 1769 1770 mkAddons.widgetsList.mk_interactive_services = {}; 1771 mkAddons.widgetsList.mk_interactive_services.mkInteractiveServices = mkInteractiveServices; 1772 1773 // ---------------------------------------------------------- 1774 1775 var mkMovingServices = function ($scope, $) { 1776 1777 var $holder = $scope.find( '.mk-moving-services' ); 1778 1779 if ( $holder.length ) { 1780 1781 gsap.defaults({overwrite: "auto"}); 1782 gsap.registerPlugin(ScrollTrigger); 1783 gsap.config({nullTargetWarn: false}); 1784 1785 $holder.each( function () { 1786 let $thisHolder = $( this ); 1787 initMovingServicesItem($thisHolder); 1788 }); 1789 } 1790 1791 function initMovingServicesItem($holder) { 1792 1793 gsap.registerPlugin(ScrollTrigger,SplitText); 1794 1795 if (mkAddons.windowWidth > 1024) { 1796 1797 let $holder_id = $holder.attr( 'id' ); 1798 1799 const boxes = document.querySelector('#' + $holder_id + ' .mk-moving-services-items'), 1800 boxesDiv = gsap.utils.toArray('#' + $holder_id + ' .mk-moving-services-items > div'), 1801 boxesLeftDistance = boxes.getBoundingClientRect().left / 2; 1802 1803 let boxLeftDistance = boxesDiv[0].getBoundingClientRect().left, 1804 i = 0; 1805 1806 for (let x = 0; x < boxesDiv.length; x++) { 1807 i += boxesDiv[x].offsetWidth; // total width of all horizontal services items 1808 } 1809 1810 i += $($holder).data('extra-length'); // add extra length to match background text and scroll item scroll animation 1811 1812 const holderDistance = -i + (window.innerWidth - 4 * boxesLeftDistance), 1813 boxAnimation = function() { 1814 const firstBoxDistance = boxesDiv[0].getBoundingClientRect().left, 1815 distance = firstBoxDistance - boxLeftDistance, 1816 finalDistance = Math.abs(Math.round(1.75 * distance) / 100), 1817 getDistance = Math.min(Math.max(finalDistance, 0), 1); 1818 gsap.to(boxesDiv, { 1819 scale: 1 - getDistance / 2 1820 }
1820), boxLeftDistance = firstBoxDistance, requestAnimationFrame(boxAnimation) 1821 }; 1822 boxAnimation(), gsap.to(boxesDiv, { 1823 scrollTrigger: { 1824 trigger: '.mk-moving-services', 1825 start: 'top top', 1826 end: 'bottom -=300%', 1827 toggleActions: 'play none reverse none', 1828 scrub: !0 1829 }, 1830 x: holderDistance, 1831 ease: "linear" 1832 }), 1833 gsap.to('.mk-moving-services', { 1834 scrollTrigger: { 1835 trigger: '.mk-moving-services', 1836 id: 'attScroll', 1837 start: 'top top', 1838 end: 'bottom -=290%', 1839 toggleActions: 'play none reverse none', 1840 scrub: !0, 1841 pin: '.mk-moving-services' 1842 } 1843 }); 1844 1845 const defaultText = document.querySelector('#' + $holder_id + '.mk-moving-services span:first-of-type'), 1846 animText = document.querySelector('#' + $holder_id + '.mk-moving-services span:nth-of-type(2)'); 1847 1848 let splitText = new SplitText(animText, { type: 'chars' }), 1849 splitTextAnim = gsap.timeline({ 1850 scrollTrigger: { 1851 trigger: animText, 1852 start: 'top 40%', 1853 end: 'bottom -=280%', 1854 toggleActions: 'play reverse play reverse', 1855 scrub: .2 1856 } 1857 }); 1858 splitTextAnim.from(splitText.chars, { y: e => 100 * e, duration: 1, ease: 'linear' }), 1859 splitTextAnim.to(defaultText, { webkitClipPath: 'inset(0% 0% 0% 0%)', duration: 3, ease: 'linear' }), 1860 splitTextAnim.to(defaultText, { webkitClipPath: 'inset(0% 100% 0% 0%)', duration: 5, ease: 'linear' }), 1861 splitTextAnim.to(splitText.chars, { y: e => -100 * e - 550, duration: 1, ease: "linear" }); 1862 } 1863 1864 } 1865 1866 }; 1867 1868 var mkMovingServicesX = { 1869 1870 init: function () { 1871 1872 if ($("body").hasClass("elementor-editor-active") ) { 1873 return; 1874 } 1875 1876 let $holder = $( '.mk-moving-services' ); 1877 1878 if ( $holder.length ) { 1879 1880 gsap.defaults({overwrite: "auto"}); 1881 gsap.registerPlugin(ScrollTrigger); 1882 gsap.config({nullTargetWarn: false}); 1883 1884 $holder.each( function () { 1885 let $thisHolder = $( this ); 1886 mkMovingServices.initItem($thisHolder); 1887 }); 1888 } 1889 }, 1890 initItem: function ($holder) { 1891 1892 gsap.registerPlugin(ScrollTrigger,SplitText); 1893 1894 if (mkAddons.windowWidth > 1024) { 1895 1896 let $holder_id = $holder.attr( 'id' ); 1897 1898 const boxes = document.querySelector('#' + $holder_id + ' .mk-moving-services-items'), 1899 boxesDiv = gsap.utils.toArray('#' + $holder_id + ' .mk-moving-services-items > div'), 1900 boxesLeftDistance = boxes.getBoundingClientRect().left / 2; 1901 1902 let boxLeftDistance = boxesDiv[0].getBoundingClientRect().left, 1903 i = 0; 1904 1905 for (let x = 0; x < boxesDiv.length; x++) { 1906 i += boxesDiv[x].offsetWidth; // total width of all horizontal services items 1907 } 1908 1909 i += $($holder).data('extra-length'); // add extra length to match background text and scroll item scroll animation 1910 1911 const holderDistance = -i + (window.innerWidth - 4 * boxesLeftDistance), 1912 boxAnimation = function() { 1913 const firstBoxDistance = boxesDiv[0].getBoundingClientRect().left, 1914 distance = firstBoxDistance - boxLeftDistance, 1915 finalDistance = Math.abs(Math.round(1.75 * distance) / 100), 1916 getDistance = Math.min(Math.max(finalDistance, 0), 1); 1917 gsap.to(boxesDiv, { 1918 scale: 1 - getDistance / 2 1919 }
1919), boxLeftDistance = firstBoxDistance, requestAnimationFrame(boxAnimation) 1920 }; 1921 boxAnimation(), gsap.to(boxesDiv, { 1922 scrollTrigger: { 1923 trigger: '.mk-moving-services', 1924 start: 'top top', 1925 end: 'bottom -=300%', 1926 toggleActions: 'play none reverse none', 1927 scrub: !0 1928 }, 1929 x: holderDistance, 1930 ease: "linear" 1931 }), 1932 gsap.to('.mk-moving-services', { 1933 scrollTrigger: { 1934 trigger: '.mk-moving-services', 1935 id: 'attScroll', 1936 start: 'top top', 1937 end: 'bottom -=290%', 1938 toggleActions: 'play none reverse none', 1939 scrub: !0, 1940 pin: '.mk-moving-services' 1941 } 1942 }); 1943 1944 const defaultText = document.querySelector('#' + $holder_id + '.mk-moving-services span:first-of-type'), 1945 animText = document.querySelector('#' + $holder_id + '.mk-moving-services span:nth-of-type(2)'); 1946 1947 let splitText = new SplitText(animText, { type: 'chars' }), 1948 splitTextAnim = gsap.timeline({ 1949 scrollTrigger: { 1950 trigger: animText, 1951 start: 'top 40%', 1952 end: 'bottom -=280%', 1953 toggleActions: 'play reverse play reverse', 1954 scrub: .2 1955 } 1956 }); 1957 splitTextAnim.from(splitText.chars, { y: e => 100 * e, duration: 1, ease: 'linear' }), 1958 splitTextAnim.to(defaultText, { webkitClipPath: 'inset(0% 0% 0% 0%)', duration: 3, ease: 'linear' }), 1959 splitTextAnim.to(defaultText, { webkitClipPath: 'inset(0% 100% 0% 0%)', duration: 5, ease: 'linear' }), 1960 splitTextAnim.to(splitText.chars, { y: e => -100 * e - 550, duration: 1, ease: "linear" }); 1961 } else { 1962 1963 // mobile 1964 const e = document.querySelector('#' + $holder_id + '.mk-moving-services'), 1965 stackBox = gsap.utils.toArray('#' + $holder_id + ' .mk-moving-services-items .stack'), 1966 theBox = gsap.utils.toArray('#' + $holder_id + ' .mk-moving-services-items article'), 1967 a = document.querySelector('#' + $holder_id + '.mk-moving-services .about-link'), 1968 i = stackBox[0].offsetHeight; 1969 1970 // box bottom margin to adjust with next content section 1971 var getBottomMargin = $($holder).data('box-margin') || 0; 1972 e.style.marginBottom = getBottomMargin, gsap.set([stackBox, a], { 1973 yPercent: 200 // distance from actual view to move bottom to top animation 1974 }); 1975 let s = gsap.timeline({ 1976 scrollTrigger: { 1977 trigger: e, 1978 start: "top top", 1979 end: () => "+=" + i * stackBox.length, 1980 pin: !0, 1981 scrub: !0 1982 } 1983 }); 1984 1985 // box bottom margin to adjust with next content section 1986 var getVerticalMargin = $($holder).data('vertical-margin') || 0; 1987 1988 s.to(stackBox, { 1989 yPercent: (e, stackBox) => getVerticalMargin * e + 15, 1990 stagger: 1, 1991 duration: 1 1992 }), s.to(theBox, { 1993 duration: 1, 1994 stagger: 1 1995 }, "<"); 1996 1997 1998 if (document.querySelector('#' + $holder_id + ' .mk-moving-services-heading-mobile')) { 1999 2000 gsap.utils.toArray('#' + $holder_id + ' .mk-moving-services-heading-mobile').forEach((e => { 2001 let t = new SplitText(e, { type: 'chars' }); 2002 2003 gsap.timeline({ 2004 scrollTrigger: { 2005 trigger: e, 2006 start: 'top 100%', 2007 end: 'top center', 2008 toggleActions: 'play reverse reverse none', 2009 scrub: !0 2010 } 2011 }).from(t.chars, { 2012 yPercent: 100, 2013 scale: 2, 2014 stagger: .1, 2015 duration: 1, 2016 ease: 'power2' 2017 }) 2018 })) 2019 } 2020 2021 } 2022 2023 } 2024 }; 2025 2026 mkAddons.widgetsList.mk_moving_services = {}; 2027 mkAddons.widgetsList.mk_moving_services.mkMovingServices = mkMovingServices; 2028 2029 // ---------------------------------------------------------- 2030 2031 var mkAnimatedContent = function ($scope, $) { 2032 var $currentItem = $scope.find('.mk-animated-content.mk--animated-by-letter'); 2033 var $words = $currentItem.find( '.mk-ac-word-holder' ); 2034 2035 mkScrollLoad.init(); 2036 2037 $words.each( 2038 function () { 2039 let $word = $( this ).text(), 2040 $split_word = ''; 2041 2042 for (var i = 0; i < $word.length; i++) { 2043 $split_word += '<span class="mk-ac-character">' + $word.charAt( i ) + '</span>'; 2044 } 2045 2046 $( this ).html( $split_word ); 2047 } 2048 ); 2049 2050 let $characters = $currentItem.find( '.mk-ac-character' ); 2051 2052 $characters.each( 2053 function (index) { 2054 let $character = $( this ), 2055 transitionModifier = $currentItem.hasClass( 'mk--appear-from-left' ) ? 20 : 40, 2056 transitionDelay = (index * transitionModifier) + 'ms'; 2057 2058 $character.css( 'transition-delay', transitionDelay ); 2059 } 2060 ); 2061 }; 2062 2063 mkAddons.widgetsList.mk_animated_content = {}; 2064 mkAddons.widgetsList.mk_animated_content.mkAnimatedContent = mkAnimatedContent; 2065 2066 // ---------------------------------------------------------- 2067 2068 function mkDualSliderInit() {
2069 var holder = $( '.mk-dual-slider-swiper-container' ); 2070 2071 if ( holder.length ) { 2072 holder.each( 2073 function () { 2074 2075 var $holder = $( this ), 2076 settings = $holder.data( 'settings' ) || {}, 2077 pagination = $holder.siblings( '.swiper-pagination' ).length ? $holder.siblings( '.swiper-pagination' )[0] : null; 2078 2079 var swiperOptions = { 2080 direction : 'horizontal', 2081 slidesPerView : 1, 2082 loop : true, 2083 speed : settings['speed'], 2084 effect : settings['effect'], 2085 pagination : { el: pagination, type: 'bullets', clickable: true } 2086 }; 2087 2088 // autoplay 2089 if ( 'yes' === settings['autoplay'] ) { 2090 swiperOptions.autoplay = { delay: settings['autoplay_speed'], disableOnInteraction: false }; 2091 } 2092 2093 var $swiper = new Swiper( $( this )[0], swiperOptions ); 2094 } 2095 ); 2096 } 2097 } 2098 2099 var mkDualSlider = function ($scope, $) { 2100 var $holder = $scope.find('.mk-dual-slider'); 2101 2102 mkScrollLoad.init(); 2103 mkDualSliderInit(); 2104 2105 if ( $holder.length ) { 2106 $holder.each(function() { 2107 mkDualSliderSyncSwipers( $( this ) ); 2108 mkDualSliderSyncInfo( $( this ) ); 2109 }); 2110 } 2111 2112 function mkDualSliderSyncSwipers( $thisHolder ) { 2113 var mkLeftSwiper = $thisHolder.find( '.mk-dual-slider-left' ), 2114 mkRightSwiper = $thisHolder.find( '.mk-dual-slider-right' ); 2115 2116 if ( mkLeftSwiper.length && mkRightSwiper.length ) { 2117 var autoplay = $thisHolder.hasClass( 'mk-dual-slider-autoplay-yes' ); 2118 2119 mkRightSwiper[0].swiper.autoplay.stop(); 2120 mkLeftSwiper[0].swiper.autoplay.stop(); 2121 mkRightSwiper[0].swiper.controller.control = mkLeftSwiper[0].swiper; 2122 mkRightSwiper[0].swiper.controller.by = 'slide'; 2123 mkRightSwiper[0].swiper.controller.inverse = true; 2124 mkLeftSwiper[0].swiper.controller.control = mkRightSwiper[0].swiper; 2125 2126 if ( autoplay ) { 2127 mkRightSwiper[0].swiper.autoplay.start(); 2128 } 2129 } 2130 } 2131 2132 function mkDualSliderSyncInfo( $thisHolder ) { 2133 var mkLeftSwiper = $thisHolder.find( '.mk-dual-slider-left' ), 2134 contentToPopulate = $thisHolder.find( '.mk-dual-slider-content-large' ), 2135 contents = mkLeftSwiper.find( '.mk-dual-slider-item .mk-dual-slider-content' ); 2136 2137 mkDualSliderPopulateContent( mkLeftSwiper, contentToPopulate, contents ); 2138 2139 mkLeftSwiper[0].swiper.on('slideChangeTransitionStart', function () { 2140 //Timeout is safe here because it does not depend on anything apart from animation duration which is fixed value 2141 setTimeout(function() { 2142 mkDualSliderPopulateContent( mkLeftSwiper, contentToPopulate, contents ); 2143 }, 300 ); 2144 } 2145 ); 2146 } 2147 2148 function mkDualSliderPopulateContent( mkLeftSwiper, contentToPopulate, contents ) { 2149 var activeIndex = mkLeftSwiper[0].swiper.activeIndex; 2150 2151 if ( contentToPopulate.length ) { 2152 contentToPopulate.html( contents.eq( activeIndex ).html() ); 2153 } 2154 } 2155 2156 } 2157 2158 mkAddons.widgetsList.mk_dual_slider = {}; 2159 mkAddons.widgetsList.mk_dual_slider.mkDualSlider = mkDualSlider; 2160 2161 // ---------------------------------------------------------- 2162 2163 var mkCountdown = function ($scope, $) { 2164 var $this = $scope.find('.mk-countdown'), 2165 year = $this.find('.mk-cd-year'),
2166 month = $this.find('.mk-cd-month'), 2167 week = $this.find('.mk-cd-week'), 2168 day = $this.find('.mk-cd-day'), 2169 hour = $this.find('.mk-cd-hour'), 2170 min = $this.find('.mk-cd-minute'), 2171 sec = $this.find('.mk-cd-second'), 2172 text = $this.data('text'), 2173 standardCountdown = $this.data('standard-countdown'), 2174 mesg = $this.data('message'), 2175 link = $this.data('link'), 2176 time = $this.data('time'), 2177 data_text_year = $this.data('text-year'), 2178 data_text_years = $this.data('text-years'), 2179 data_text_month = $this.data('text-month'), 2180 data_text_months = $this.data('text-months'), 2181 data_text_week = $this.data('text-week'), 2182 data_text_weeks = $this.data('text-weeks'), 2183 data_text_day = $this.data('text-day'), 2184 data_text_days = $this.data('text-days'), 2185 data_text_hour = $this.data('text-hour'), 2186 data_text_hours = $this.data('text-hours'), 2187 data_text_minute = $this.data('text-minute'), 2188 data_text_minutes = $this.data('text-minutes'), 2189 data_text_second = $this.data('text-second'), 2190 data_text_seconds = $this.data('text-seconds'); 2191 2192 $this.countdown( time ).on('update.countdown', function (e) { 2193 var m = e.strftime('%m'), 2194 w = e.strftime('%w'), 2195 Y = Math.floor(m / 12), 2196 m = m % 12, 2197 w = w % 4; 2198 2199 function addZero(val) { 2200 if ( val < 10 ) { 2201 return '0'+val; 2202 } 2203 return val; 2204 } 2205 2206 if ( standardCountdown == 'yes' ) { 2207 day.html( e.strftime('%D') ); 2208 } else { 2209 year.html( addZero(Y) ); 2210 month.html( addZero(m) ); 2211 week.html( '0'+w ); 2212 day.html( e.strftime('%d') ); 2213 } 2214 2215 hour.html( e.strftime('%H') ); 2216 min.html( e.strftime('%M') ); 2217 sec.html( e.strftime('%S') ); 2218 2219 if ( text == 'yes' ) { 2220 2221 if ( standardCountdown == 'yes' ) { 2222 day.next().html( e.strftime('%D') < 2 ? data_text_day : data_text_days ); 2223 } else { 2224 year.next().html( Y < 2 ? data_text_year : data_text_years ); 2225 month.next().html( m < 2 ? data_text_month : data_text_months ); 2226 week.next().html( w < 2 ? data_text_week : data_text_weeks ); 2227 day.next().html( e.strftime('%d') < 2 ? data_text_day : data_text_days ); 2228 } 2229 2230 hour.next().html( e.strftime('%H') < 2 ? data_text_hour : data_text_hours ); 2231 min.next().html( e.strftime('%M') < 2 ? data_text_minute : data_text_minutes ); 2232 sec.next().html( e.strftime('%S') < 2 ? data_text_second : data_text_seconds ); 2233 } 2234 2235 }).on('finish.countdown', function (e) { 2236 $this.children().remove(); 2237 if ( mesg ) { 2238 $this.append('<div class="mk-cd-message">'+ mesg +'</div>'); 2239 } else if( link && elementorFrontend.isEditMode() ){ 2240 $this.append('<h2>You can\'t redirect url from elementor edit mode!!</h2>'); 2241 } else if (link) { 2242 window.location.href = link; 2243 } else{ 2244 $this.append('<h2>May be you don\'t enter a valid redirect url</h2>'); 2245 } 2246 }); 2247 } 2248 2249 mkAddons.widgetsList.mk_countdown = {}; 2250 mkAddons.widgetsList.mk_countdown.mkCountdown = mkCountdown; 2251 2252 // ---------------------------------------------------------- 2253 2254 // full screen menu 2255 var mkFullScreenMenu = function ($scope, $) { 2256 var $hamburgerIcon = $scope.find('.mk-fullscreen-menu-icon'), 2257 $dataID = '#' + $hamburgerIcon.attr('data-id'), 2258 overlayHolder = $('body').find($dataID), 2259 closeButton = overlayHolder.find('.mk-fs-menu-close'), 2260 menuHolder = overlayHolder.find('.mk-fullscreen-menu-holder'), 2261 subLinks = menuHolder.children().find("li"); 2262 2263 $hamburgerIcon.bind('click touchstart', function () { 2264 var openDiv = '#' + $(this).attr('data-id'); 2265 $(openDiv).removeClass('overlay-is--close'); 2266 $(openDiv).addClass('overlay-is--open'); 2267 $('body').addClass('elementor-no-overflow'); 2268 }); 2269 2270 closeButton.bind('click touchstart', function(e) { 2271 console.log('tes'); 2272 e.stopPropagation(); 2273 e.preventDefault(); 2274 $(this).parent().parent().removeClass('overlay-is--open'); 2275 $(this).parent().parent().addClass('overlay-is--close'); 2276 $(menuHolder).find('.sub-menu').delay(0).slideUp(300); 2277 }); 2278 2279 // indicator 2280 if ($(subLinks).find('.sub-menu').length > 0) { 2281 $(subLinks).find('.sub-menu').siblings("a").addClass('menu-indicator-icon'); 2282 } 2283 2284 $(subLinks).bind('click touchstart', function(e) { 2285 e.stopPropagation(); 2286 e.preventDefault(); 2287 2288 var $item = $(this), 2289 $subMenus = $item.children('.sub-menu'), 2290 $allSubMenus = $item.find('.sub-menu'),
2291 indicatorMinus = 'sub-menu-indicator-minus', 2292 activeClass = 'mk-fs-active'; 2293 2294 if ($subMenus.length > 0 ) { 2295 2296 $item.parents('.mk-fullscreen-menu-holder').find('li').removeClass(activeClass); 2297 $item.siblings('li').removeClass(activeClass); 2298 $item.addClass(activeClass); 2299 2300 if ($item.parents().hasClass('sub-menu')) { 2301 $item.parents().addClass(activeClass); 2302 } 2303 2304 if ($subMenus.css("display") == "none") { 2305 $subMenus.slideDown(300).siblings("a").addClass(indicatorMinus); 2306 $item.siblings().find('.sub-menu').slideUp(300).end().find("a").removeClass(indicatorMinus); 2307 return false; 2308 } else { 2309 $item.find('.sub-menu').delay(0).slideUp(300); 2310 } 2311 2312 if ($allSubMenus.siblings("a").hasClass(indicatorMinus)) { 2313 $allSubMenus.siblings("a").removeClass(indicatorMinus); 2314 } 2315 } 2316 window.location.href = $item.children("a").attr("href"); 2317 }); 2318 } 2319 2320 mkAddons.widgetsList.mk_full_screen_menu = {}; 2321 mkAddons.widgetsList.mk_full_screen_menu.mkFullScreenMenu = mkFullScreenMenu; 2322 2323 // ---------------------------------------------------------- 2324 2325 var mkCounter = function ($scope, $) { 2326 elementorFrontend.waypoint($scope.find('.mk-counter-number'), function () { 2327 var $this = $(this), 2328 data = $this.data(), 2329 digit = data.toValue.toString().match(/\.(.*)/); 2330 2331 if (digit) { 2332 data.rounding = digit[1].length; 2333 } 2334 2335 $this.numerator(data); 2336 }); 2337 } 2338 2339 mkAddons.widgetsList.mk_counter = {}; 2340 mkAddons.widgetsList.mk_counter.mkCounter = mkCounter; 2341 2342 // ---------------------------------------------------------- 2343 2344 var verticalMenu = function ($scope, $) { 2345
2346 var verMenu = $scope.find('.mk-ver-menu-wrap'), 2347 megaMenuDiv = verMenu.find('ul.mk-sections-megamenu'); 2348 2349 megaMenuDiv.remove(); 2350 2351 // add arrow icon 2352 verMenu.find('li ul').parent().addClass('mk-has-sub-menu'); 2353 // verMenu.find(".mk-has-sub-menu").prepend('<span class="mk-mini-menu-arrow"></span>'); 2354 2355 verMenu.find('.swm-svg-submenu-indicator').on('click', function(e) { 2356 2357 e.preventDefault(); 2358 2359 var parentLi = $(this).parent('.menu-item'); 2360 2361 if (parentLi.hasClass('mk-has-sub-active-menu')) { 2362 parentLi.removeClass('mk-has-sub-active-menu'); 2363 } else { 2364 parentLi.addClass('mk-has-sub-active-menu'); 2365 } 2366 2367 if ($(this).parent().siblings('ul').hasClass('open')) { 2368 $(this).parent().siblings('ul').removeClass('open').slideUp(); 2369 } else { 2370 $(this).parent().siblings('ul').addClass('open').slideDown(); 2371 } 2372 2373 if ($(this).hasClass('inactive')) { 2374 $(this).removeClass('inactive'); 2375 } else { 2376 $(this).addClass('inactive'); 2377 } 2378 }); 2379 2380 } 2381 2382 mkAddons.widgetsList.mk_vertical_menu = {}; 2383 mkAddons.widgetsList.mk_vertical_menu.verticalMenu = verticalMenu; 2384 2385 // ---------------------------------------------------------- 2386 2387 var mkTestimonialsSlider = function ($scope, $) { 2388 2389 var testimonialsSlider = $scope.find( '.mk-testimonials-slider-content' ).eq( 0 ), 2390 testimonialsSliderID = '#' + testimonialsSlider.attr( 'id' ), 2391 $target = $(testimonialsSliderID).first(); 2392 2393 var settings = $target.data( 'settings' ) || {}; 2394 2395 var swiperOptions = { 2396 direction: 'horizontal', 2397 slidesPerView: 1, 2398 loop: 'yes' === settings['loop'], 2399 speed: settings['speed'], 2400 effect: 'slide', 2401 keyboard: { enabled: true, onlyInViewport: true }, 2402 mousewheel: 'yes' === settings['mousewheel'], 2403 spaceBetween:50, 2404 on: { 2405 resize: function () { 2406 defaultswiperObj.update(); } 2407 } 2408 }; 2409 2410 if ( 'yes' === settings['autoplay'] ) { 2411 swiperOptions.autoplay = { delay: settings['autoplay_speed'] }; 2412 if ( settings['pause_on_hover'] ) { 2413 $( testimonialsSliderID ).on( 'mouseenter', function() { defaultswiperObj.autoplay.stop(); }); 2414 $( testimonialsSliderID ).on( 'mouseleave', function() { defaultswiperObj.autoplay.start(); }); 2415 } 2416 } 2417 2418 if ( 'yes' === settings['arrows_on'] ) { 2419 swiperOptions.navigation = { prevEl: settings['slider_prev'], nextEl: settings['slider_next'] }; 2420 } 2421 if ( 'yes' === settings['dots'] ) { 2422 swiperOptions.pagination = { 2423 el: settings['slider_pagination'], 2424 type: 'bullets', 2425 clickable: true 2426 }; 2427 } 2428 2429 var defaultswiperObj = new Swiper(testimonialsSliderID, swiperOptions); 2430 } 2431 2432 mkAddons.widgetsList.mk_testimonials_slider = {}; 2433 mkAddons.widgetsList.mk_testimonials_slider.mkTestimonialsSlider = mkTestimonialsSlider; 2434 2435 // ------------------------------------------------------------ 2436 // Custom Sliders --------------------------------------------- 2437 // ------------------------------------------------------------ 2438 2439 function mkSwiperSlider($swiperContainer) { 2440 2441 if ( ! $swiperContainer ) { $swiperContainer = '.swiper-container'; } 2442 2443 var $target = $($swiperContainer).first(), 2444 settings = $target.data( 'settings' ) || {}, 2445 thumbimage = $target.data( 'thumbimage' ) || {}, 2446 breakpointsSettings = {}, 2447 breakpoints = elementorFrontend.config.breakpoints, 2448 fadeVerticalSwiperBg = ''; 2449 2450 if ( $target.length === 0 ) { return; } 2451 2452 var swiperOptions = { 2453 slidesPerView: settings['slides_to_show'], 2454 loop: 'yes' === settings['loop'], 2455 speed: settings['speed'], 2456 keyboard: { enabled: true, onlyInViewport: true }, 2457 parallax: 'yes' === settings['parallax'], 2458 mousewheel: 'yes' === settings['mousewheel'], 2459 centeredSlides: 'yes' === settings['centered_slides'], 2460 on: { 2461 resize: function () { 2462 defaultswiperObj.update(); } 2463 } 2464 }; 2465 2466 if ( 'yes' === settings['video'] ) { 2467 swiperOptions.on.init = function () { 2468 $('.swiper-slide-active').find('video').each(function() { $(this).get(0).play(); }); 2469 } 2470 swiperOptions.on.slideChangeTransitionStart = function () { 2471 $('.swiper-slide-active').find('video').each(function() { $(this).get(0).play(); }); 2472 } 2473 swiperOptions.on.slideChangeTransitionEnd = function () { 2474 $('.swiper-slide-prev').find('video').each(function() { $(this).get(0).pause(); }); 2475 $('.swiper-slide-next').find('video').each(function() { $(this).get(0).pause(); }); 2476 } 2477 } 2478 2479 if ( settings['direction'] ) { swiperOptions.direction = settings['direction']; } 2480 2481 // effect 2482 if ( settings['effect'] ) { 2483 swiperOptions.effect = settings['effect']; 2484 if ( 'fade' === settings['effect'] ) { swiperOptions.fadeEffect = { crossFade: true }; } 2485 } 2486 2487 // autoplay 2488 if ( 'yes' === settings['autoplay'] ) { 2489 swiperOptions.autoplay = { delay: settings['autoplay_speed'] }; 2490 if ( settings['pause_on_hover'] ) { 2491 $( $target ).on( 'mouseenter', function() { defaultswiperObj.autoplay.stop(); }); 2492 $( $target ).on( 'mouseleave', function() { defaultswiperObj.autoplay.start(); }); 2493 } 2494 } 2495 2496 // navigation 2497 2498 if ( 'yes' === settings['arrows_on'] ) { 2499 swiperOptions.navigation = { prevEl: settings['slider_prev'], nextEl: settings['slider_next'] }; 2500 } 2501 2502 if ( 'yes' === settings['dots'] ) { 2503 swiperOptions.pagination = { 2504 el: settings['slider_pagination'], 2505 type: 'bullets', 2506 clickable: true, 2507 }; 2508
2509 if ( $target.hasClass('mk-thumbnail-slider')) { 2510 swiperOptions.pagination.renderBullet = function(index, className) { 2511 2512 var thumbimageHTML = '', 2513 thumbURL = thumbimage[index + 1], 2514 counter = index + 1; 2515 2516 if ( counter < 10 ) { 2517 counter = '0' + counter; 2518 } 2519 2520 if (thumbURL) { 2521 thumbimageHTML = '<div class="mk-thumbnailslider-navImage"><span class="mk-thumbnailslider-overlay">' + counter + '</span><img src="' + thumbimage[index + 1] + '" /></div>'; 2522 } 2523 2524 return '<div class="' + className + '">' + thumbimageHTML + '</div></div>'; 2525 } 2526 } 2527 2528 } 2529 2530 var numberPagination = 1; 2531 if( numberPagination != '' && numberPagination != undefined ) { 2532 2533 swiperOptions['on']['slideChange'] = function () { 2534 if( $( '.swiper-pagination-current' ).length > 0 ) { 2535 $( '.swiper-pagination-current' ).html( pad( this.realIndex + 1, 2 ) ); 2536 } 2537 if( $( '.swiper-pagination-total' ).length > 0 ) { 2538 $( '.swiper-pagination-total' ).html( pad( this.slides.length - 2, 2 ) ); 2539 } 2540 }; 2541 } 2542 2543 // image spacing 2544 if ( typeof( settings['image_spacing'] ) !== 'undefined' && settings['image_spacing']['size'] !== '' && settings['image_spacing']['size'] !== null ) { 2545 swiperOptions.spaceBetween = settings['image_spacing']['size'] 2546 } 2547 2548 breakpointsSettings[ breakpoints.lg ] = { slidesPerView: settings['slides_to_show'] || 1 }; 2549 breakpointsSettings[ breakpoints.md ] = { slidesPerView: settings['slides_to_show_tablet'] || 1 }; 2550 breakpointsSettings[ breakpoints.xs ] = { slidesPerView: settings['slides_to_show_mobile'] || 1 }; 2551 2552 if ( $target.hasClass('mk-carousel-slider')) { 2553 if ( !$target.parents().hasClass('mk-carousel-slider-st1') ) { 2554 breakpointsSettings[ breakpoints.md ] = { slidesPerView: 'auto' }; 2555 breakpointsSettings[ breakpoints.xs ] = { slidesPerView: 'auto' }; 2556 } 2557 } 2558 2559 swiperOptions.breakpoints = breakpointsSettings; 2560 2561 // Image slider 2562 if ( $target.hasClass('mk-preview-slider') ) { 2563 2564 var breakpointsTinySettings = {}; 2565 2566 breakpointsTinySettings[ breakpoints.lg ] = { slidesPerView: $target.data( 'thumb-items' ) || 5 }; 2567 breakpointsTinySettings[ breakpoints.md ] = { slidesPerView: $target.data( 'thumb-items-tablet' ) || 3 }; 2568 breakpointsTinySettings[ breakpoints.xs ] = { slidesPerView: $target.data( 'thumb-items-mobile' ) || 2 }; 2569 2570 var thumbSliderOptions = { 2571 loop: 'yes' === settings['loop'], 2572 speed: settings['speed'], 2573 spaceBetween: $target.data( 'thumb-space' ), 2574 effect:$target.data( 'thumb-effect' ), 2575 freeMode: true, 2576 watchSlidesProgress: true 2577 } 2578 2579 thumbSliderOptions.breakpoints = breakpointsTinySettings; 2580 2581 var imageSliderThumbs = new Swiper($target.data( 'thumb-slider-id' ), thumbSliderOptions); 2582 2583 swiperOptions.thumbs = { swiper: imageSliderThumbs }; 2584 } 2585 2586 // call 2587 var defaultswiperObj = new Swiper( $swiperContainer, swiperOptions ); 2588 2589 }; 2590 2591 // if adminbar - reset slider height 2592 var mkGetCustomSlider = function ($scope, $) { 2593 2594 var customSliderHolder = $scope.find( '.swiper-container' ).eq( 0 ), 2595 customSliderHolderID = '#' + customSliderHolder.attr( 'id' ); 2596 2597 if ( ! customSliderHolder.length ) { return; } 2598 mkSwiperSlider(customSliderHolderID); 2599 2600 var customSliderHolderIDHeight = $(customSliderHolderID).height(); 2601 2602 var $windowHeight = $(window).height(); 2603 2604 if ( customSliderHolderIDHeight == $windowHeight && mkAddons.body.hasClass('admin-bar') ) { 2605 2606 var $adminbar = jQuery( '#wpadminbar' ); 2607 2608 var adminbarHeight = $adminbar.length === 0 || $adminbar.css( 'display' ) == 'none' || $adminbar.css( 'position' ) == 'absolute' ? 0 : $adminbar.height(); 2609 2610 var customSliderHolderIDHeight = $(customSliderHolderID).height(); 2611 var finalHeight = customSliderHolderIDHeight - adminbarHeight; 2612 2613 $(customSliderHolderID).css( 'height', finalHeight ); 2614 } 2615
2616 mkAddons.body.mkCustomCursor.init(); 2617 2618 } 2619 2620 mkAddons.widgetsList.mk_basic_slider = {}; 2621 mkAddons.widgetsList.mk_basic_slider.mkGetCustomSlider = mkGetCustomSlider; 2622 2623 mkAddons.widgetsList.mk_thumbnail_slider = {}; 2624 mkAddons.widgetsList.mk_thumbnail_slider.mkGetCustomSlider = mkGetCustomSlider; 2625 2626 mkAddons.widgetsList.mk_carousel_slider = {}; 2627 mkAddons.widgetsList.mk_carousel_slider.mkGetCustomSlider = mkGetCustomSlider; 2628 2629 mkAddons.widgetsList.mk_portfolio_slider = {}; 2630 mkAddons.widgetsList.mk_portfolio_slider.mkGetCustomSlider = mkGetCustomSlider; 2631 2632 mkAddons.widgetsList.mk_image_carousel_slider = {}; 2633 mkAddons.widgetsList.mk_image_carousel_slider.mkGetCustomSlider = mkGetCustomSlider; 2634 2635 mkAddons.widgetsList.mk_image_slider = {}; 2636 mkAddons.widgetsList.mk_image_slider.mkGetCustomSlider = mkGetCustomSlider; 2637 2638 mkAddons.widgetsList.mk_testimonials = {}; 2639 mkAddons.widgetsList.mk_testimonials.mkGetCustomSlider = mkGetCustomSlider; 2640 2641 mkAddons.widgetsList.mk_circle_slider = {}; 2642 mkAddons.widgetsList.mk_circle_slider.mkGetCustomSlider = mkGetCustomSlider; 2643 2644 // End Custom Sliders --------------------------------------------- 2645 2646 // ------------------------------------------------------------ 2647 // Post Grid -------------------------------------------------- 2648 // ------------------------------------------------------------ 2649 2650 2651 // Filter 2652 2653 var mkFilter = { 2654 2655 customListQuery: {}, 2656 init: function ( settings ) { 2657 this.holder = $( '.mk-filter--on' ); 2658 2659 if ( this.holder.length ) { 2660 this.holder.each( 2661 function () { 2662 var holder = $( this ), 2663 filterItems = holder.find( '.mk-m-filter-item' ); 2664 2665 // mkFilter.checkCustomListQuery( holder.data( 'options' ) ); 2666 mkFilter.clickEvent( holder, filterItems ); 2667 }); 2668 } 2669 }, 2670 clickEvent: function ( holder, filterItems ) { 2671 filterItems.on( 'click', function (e) { 2672 e.preventDefault(); 2673 var thisItem = $( this ); 2674 2675 if ( ! thisItem.hasClass( 'mk--active' ) ) { 2676 holder.addClass( 'mk--filter-loading' ); 2677 filterItems.removeClass( 'mk--active' ); 2678 thisItem.addClass( 'mk--active' ); 2679 2680 mkFilter.setVisibility( holder, thisItem ); 2681 } 2682 }); 2683 }, 2684 setVisibility: function ( holder, item ) { 2685 var filterTaxonomy = item.data( 'taxonomy' ), 2686 filterValue = item.data( 'filter' ), 2687 showAll = filterValue === '*', 2688 options = holder.data( 'options' ), 2689 taxQueryOptions = {}; 2690 2691 if ( ! showAll ) { 2692 taxQueryOptions = { 2693 0: { 2694 taxonomy: filterTaxonomy, 2695 field: 'slug', 2696 terms: filterValue, 2697 }, 2698 }; 2699 } else { 2700 taxQueryOptions = mkFilter.customListQuery; 2701 } 2702 2703 options.additional_query_args = { tax_query: taxQueryOptions }; 2704 mkAddons.body.trigger( 'mk_trigger_load_more', [holder, 1] ); // param1 = holder, param2 = 1 2705 } 2706 2707 }; 2708 2709 // Masonry Layout 2710 2711 var mkMasonryLayout = { 2712 init: function ( settings ) { 2713 this.holder = $( '.mk-p-masonry-on' ); 2714 2715 if ( this.holder.length ) { 2716 this.holder.each( function () { 2717 mkMasonryLayout.createMasonry( $( this ) ); 2718 } 2719 ); 2720 } 2721 }, 2722 reInit: function ( settings ) { 2723 this.holder = $( '.mk-p-masonry-on' ); 2724 2725 if ( this.holder.length ) { 2726 this.holder.each( function () { 2727 var masonryDiv = $( this ).find( '.mk-grid-inner' ); 2728 2729 if ( typeof masonryDiv.isotope === 'function' ) { 2730 masonryDiv.isotope( 'layout' ); 2731 } 2732 }); 2733 } 2734 }, 2735 createMasonry: function ( holder ) { 2736 var masonryDiv = holder.find( '.mk-grid-inner' ), 2737 $masonryItem = masonryDiv.find( '.mk-grid-item' ); 2738 2739 mkAddons.mkWaitForImages.check( masonryDiv, function () { 2740 if ( typeof masonryDiv.isotope === 'function' ) { 2741 masonryDiv.isotope({ 2742 layoutMode: 'packery', 2743 itemSelector: '.mk-grid-item', 2744 percentPosition: true, 2745 masonry: { 2746 columnWidth: '.mk-grid-masonry-sizer', 2747 gutter: '.mk-grid-masonry-gutter' 2748 } 2749 }); 2750 2751 if ( holder.hasClass( 'mk-items--packery' ) ) { 2752 var size = mkMasonryLayout.getPackeryImageSize( masonryDiv, $masonryItem ); 2753 mkMasonryLayout.setPackeryImageProportionSize( masonryDiv, $masonryItem, size ); 2754 } 2755 2756 masonryDiv.isotope( 'layout' ); 2757 } 2758 2759 masonryDiv.addClass( 'mk--masonry-init' ); 2760 } 2761 ); 2762 }, 2763 getPackeryImageSize: function ( $holder, $item ) { 2764 var $squareItem = $holder.find( '.mk-item--square' ); 2765 2766 if ( $squareItem.length ) {
2767 var $squareItemImage = $squareItem.find( 'img' ), 2768 squareItemImageWidth = $squareItemImage.width(), 2769 squareItemImageHeight = $squareItemImage.height(); 2770 2771 if ( squareItemImageWidth !== squareItemImageHeight ) { 2772 return squareItemImageHeight; 2773 } else { 2774 return squareItemImageWidth; 2775 } 2776 } else { 2777 var size = $holder.find( '.mk-grid-masonry-sizer' ).width(), 2778 padding = parseInt( $item.css( 'paddingLeft' ), 10 ); 2779 2780 return (size - 2 * padding); // remove item side padding to get real item size 2781 } 2782 }, 2783 setPackeryImageProportionSize: function ( $holder, $item, size ) { 2784 var padding = parseInt( $item.css( 'paddingLeft' ), 10 ), 2785 $squareItem = $holder.find( '.mk-item--square' ), 2786 $horizontalItem = $holder.find( '.mk-item--horizontal' ), 2787 $verticalItem = $holder.find( '.mk-item--vertical' ), 2788 $largeSquareItem = $holder.find( '.mk-item--large-square' ), 2789 isMobileScreen = mkAddons.windowWidth <= 680; 2790 2791 $item.css( 'height', size ); 2792 2793 if ( $horizontalItem.length ) { 2794 $horizontalItem.css( 'height', Math.round( size / 2 ) ); 2795 } 2796 2797 if ( $verticalItem.length ) { 2798 $verticalItem.css( 'height', Math.round( 2 * (size + padding) ) ); 2799 } 2800 2801 if ( ! isMobileScreen ) { 2802 2803 if ( $horizontalItem.length ) { 2804 $horizontalItem.css( 'height', size ); 2805 } 2806 2807 if ( $largeSquareItem.length ) { 2808 $largeSquareItem.css( 'height', Math.round( 2 * (size + padding) ) ); 2809 } 2810 } 2811 } 2812 }; 2813 2814 // Pagination 2815 2816 var mkPagination = { 2817 init: function ( settings ) { 2818 this.holder = $( '.mk-pagination--on' ); 2819 2820 if ( this.holder.length ) { 2821 this.holder.each( function () { 2822 var holder = $( this ); 2823 mkPagination.initPaginationType( holder ); 2824 }); 2825 } 2826 }, 2827 initPaginationType: function ( holder ) { 2828 if ( holder.hasClass( 'mk-pagination-type--standard' ) ) { mkPagination.initStandard( holder ); 2829 } else if ( holder.hasClass( 'mk-pagination-type--load-more' ) ) { mkPagination.initLoadMore( holder ); 2830 } else if ( holder.hasClass( 'mk-pagination-type--infinite-scroll' ) ) { mkPagination.initInfiniteScroll( holder ); 2831 } 2832 }, 2833 initStandard: function ( holder, nextPage ) { 2834 var paginationItems = holder.find( '.mk-m-pagination-items' ); // pagination div 1,2,3... 2835 2836 if ( paginationItems.length ) { 2837 var options = holder.data( 'options' ), 2838 current_page = typeof nextPage !== 'undefined' && nextPage !== '' ? parseInt( nextPage, 10 ) : 1; 2839 2840 mkPagination.changeStandardState( holder, options.max_pages_num, current_page ); 2841 2842 paginationItems.children().each( function () { 2843 var thisItem = $( this ); 2844 2845 thisItem.on( 'click', function (e) { 2846 e.preventDefault(); 2847 if ( ! thisItem.hasClass( 'mk--active' ) ) { 2848 mkPagination.getNewPosts( holder, thisItem.data( 'paged' ) ); 2849 } 2850 }); 2851 } 2852 ); 2853 } 2854 }, 2855 changeStandardState: function ( holder, maxPagesNum, nextPage ) { 2856 if ( holder.hasClass( 'mk-pagination-type--standard' ) ) { 2857 var paginationNav = holder.find( '.mk-m-pagination-items' ), 2858 numericItem = paginationNav.children( '.mk--number' ), 2859 prevItem = paginationNav.children( '.mk--prev' ), 2860 nextItem = paginationNav.children( '.mk--next' ); 2861 2862 mkPagination.standardPaginationVisibility( paginationNav, maxPagesNum ); 2863 2864 numericItem.removeClass( 'mk--active' ).eq( nextPage - 1 ).addClass( 'mk--active' ); 2865 2866 // show/hide next prev arrows 2867 prevItem.data( 'paged', nextPage - 1 ); 2868 nextItem.data( 'paged', nextPage + 1 ); 2869 2870 if ( nextPage > 1 ) { 2871 prevItem.show(); 2872 prevItem.next().removeClass( 'mk-prev--hidden' ); 2873 } else { 2874 prevItem.hide(); 2875 prevItem.next().addClass( 'mk-prev--hidden' ); 2876 } 2877 2878 if ( nextPage === maxPagesNum ) { 2879 nextItem.hide(); 2880 } else { 2881 nextItem.show(); 2882 } 2883 } 2884 }, 2885 standardPaginationVisibility: function ( paginationNav, maxPagesNum ) { 2886 if ( maxPagesNum === 1 ) { 2887 paginationNav.hide(); 2888 } else if ( maxPagesNum > 1 && ! paginationNav.is( ':visible' ) ) { 2889 paginationNav.show(); 2890 } 2891 }, 2892 initLoadMore: function ( holder ) { 2893 var loadMoreButton = holder.find( '.mk-load-more-button' ); 2894
2895 loadMoreButton.on('click', function (e) { 2896 e.preventDefault(); 2897 mkPagination.getNewPosts( holder ); 2898 }); 2899 }, 2900 initInfiniteScroll: function ( holder ) { 2901 var holderEndPosition = holder.outerHeight() + holder.offset().top, 2902 scrollPosition = mkAddons.scroll + mkAddons.windowHeight, 2903 options = holder.data( 'options' ); 2904 2905 if ( ! holder.hasClass( 'mk--loading' ) && scrollPosition > holderEndPosition && options.max_pages_num >= options.next_page ) { 2906 mkPagination.getNewPosts( holder ); 2907 } 2908 }, 2909 getNewPosts: function ( holder, nextPage ) { 2910 holder.addClass( 'mk--loading' ); 2911 2912 var itemsHolder = holder.children( '.mk-grid-inner' ); 2913 var options = holder.data( 'options' ); 2914 2915 mkPagination.setNextPageValue( options, nextPage, false ); 2916 2917 // paginationRestRoute = mk/v1/get-posts 2918 // restUrl = http://localhost/mk/wp-json/ 2919 2920 $.ajax({ 2921 type: 'GET', 2922 url: mkWidgetsLocalize.restUrl + mkWidgetsLocalize.paginationRestRoute, 2923 data: { 2924 options: options 2925 }, 2926 beforeSend: function ( request ) { 2927 request.setRequestHeader( 'X-WP-Nonce', mkWidgetsLocalize.restNonce ); 2928 }, 2929 success: function ( response ) { 2930 2931 if ( response.status === 'success' ) { 2932 // Override max page numbers options 2933 if ( options.max_pages_num !== response.data.max_pages_num ) { 2934 options.max_pages_num = response.data.max_pages_num; 2935 } 2936 2937 mkPagination.setNextPageValue( options, nextPage, true ); 2938 mkPagination.changeStandardHtml( holder, options.max_pages_num, nextPage, response.data.pagination_html ); 2939 2940 mkPagination.addPosts( itemsHolder, response.data.html, nextPage ); 2941 mkPagination.reInitMasonryPosts( holder, itemsHolder ); 2942 2943 setTimeout( function () { 2944 mkAddons.body.trigger( 'mk_trigger_get_new_posts', [holder, response.data, nextPage] ); 2945 }, 300 ); // 300ms is set in order to be after the masonry script initialize 2946 2947 mkPagination.triggerStandardScrollAnimation( holder ); 2948 mkPagination.loadMoreButtonVisibility( holder, options ); 2949 } else { 2950 console.log( response.message ); 2951 } 2952 }, 2953 complete: function () { 2954 holder.removeClass( 'mk--loading' ); 2955 } 2956 }); 2957 }, 2958 setNextPageValue: function ( options, nextPage, ajaxTrigger ) { 2959 if ( typeof nextPage !== 'undefined' && nextPage !== '' && ! ajaxTrigger ) { 2960 options.next_page = nextPage; 2961 } else if ( ajaxTrigger ) { 2962 options.next_page = parseInt( options.next_page, 10 ) + 1; 2963 } 2964 }, 2965 changeStandardHtml: function ( holder, maxPagesNum, nextPage, pagination_html ) { 2966 if ( holder.hasClass( 'mk-pagination-type--standard' ) ) { 2967 var paginationNav = holder.find( '.mk-m-pagination' ), 2968 paginationSpinner = holder.find( '.mk-m-pagination-spinner' ); 2969 2970 mkPagination.standardPaginationVisibility( paginationNav, maxPagesNum ); 2971 2972 paginationNav.remove(); 2973 paginationSpinner.remove(); 2974 2975 holder.append( pagination_html ); 2976 mkPagination.initStandard( holder, nextPage ); 2977 } 2978 }, 2979 addPosts: function ( itemsHolder, newItems, nextPage ) { 2980 if ( typeof nextPage !== 'undefined' && nextPage !== '' ) { 2981 itemsHolder.html( newItems ); 2982 } else { 2983 itemsHolder.append( newItems ); 2984 } 2985 }, 2986 reInitMasonryPosts: function ( holder, itemsHolder ) { 2987 if ( holder.hasClass( 'mk-p-masonry-on' ) ) { 2988 itemsHolder.isotope( 'reloadItems' ).isotope( { sortBy: 'original-order' } ); 2989 setTimeout( function () { itemsHolder.isotope( 'layout' ); }, 200 ); 2990 } 2991 }, 2992 triggerStandardScrollAnimation: function ( holder ) { 2993 if ( holder.hasClass( 'mk-pagination-type--standard' ) ) { 2994 $( 'html, body' ).animate( { scrollTop: holder.offset().top - 100 }, 500 ); // move to top after click on pagination link 2995 } 2996 },
2997 loadMoreButtonVisibility: function ( holder, options ) { 2998 if ( holder.hasClass( 'mk-pagination-type--load-more' ) ) { 2999 3000 if ( options.next_page > options.max_pages_num || options.max_pages_num === 1 ) { 3001 holder.find( '.mk-load-more-button' ).hide(); 3002 } else if ( options.max_pages_num > 1 && options.next_page <= options.max_pages_num ) { 3003 holder.find( '.mk-load-more-button' ).show(); 3004 } 3005 } 3006 }, 3007 scroll: function ( settings ) { 3008 this.holder = $( '.mk-pagination--on' ); 3009 3010 if ( this.holder.length ) { 3011 this.holder.each( function () { 3012 var holder = $( this ); 3013 if ( holder.hasClass( 'mk-pagination-type--infinite-scroll' ) ) { 3014 mkPagination.initInfiniteScroll( holder ); 3015 } 3016 }); 3017 } 3018 }, 3019 triggerLoadMore: function ( holder, nextPage ) { 3020 mkPagination.getNewPosts( holder, nextPage ); 3021 }, 3022 3023 }; 3024 3025 // Portfolio Tooltip 3026 3027 var mkInfoFollow = { 3028 init: function() { 3029 var $portfolioTooltip = $('.mk-portfolio-tooltip'); 3030 if ($portfolioTooltip.length) { 3031 3032 var getOptions = $portfolioTooltip.data( 'options' ); 3033 3034 mkAddons.body.append('<div class="mk-portfolio-tooptip-box mk-pf-tooltip-subtitle-'+ getOptions.subtitle_type +' mk-portfolio-tooptip-box-'+ getOptions.data_id +'"><div class="mk-portfolio-tooltip-box-wrap"><div class="mk-portfolio-tooltip-box-title"></div><div class="mk-portfolio-tooltip-box-subtitle"></div></div></div>'); 3035 3036 var $tooltipBox = $('.mk-portfolio-tooptip-box'), 3037 $tooltipTitle = $tooltipBox.find('.mk-portfolio-tooltip-box-title'), 3038 $tooltipSubtitle = $tooltipBox.find('.mk-portfolio-tooltip-box-subtitle'); 3039 3040 $portfolioTooltip.each(function() { 3041 3042 $portfolioTooltip.find('.mk-portfolio-wrap').each(function() { 3043 var $this = $(this); 3044 $this.on('mousemove', function(e) { 3045 if (e.clientX + $tooltipBox.width() > mkAddons.windowWidth) { 3046 $tooltipBox.addClass('mk-right'); 3047 } else { 3048 $tooltipBox.removeClass('mk-right'); 3049 } 3050 var x = e.clientX, 3051 y = e.clientY; 3052 TweenMax.to($tooltipBox, 0, {x: x, y: y}); 3053 }); 3054 $this.on('mouseenter', function() { 3055 3056 var $getTitle = $(this).find('.mk-portfolio-title'), 3057 $getSubTitle = $(this).find('.mk-portfolio-subtitle'); 3058 3059 if ($getTitle.length) { $tooltipTitle.html($getTitle.clone()); } 3060 if ($getSubTitle.length) { $tooltipSubtitle.html($getSubTitle.html()); } 3061 if (!$tooltipBox.hasClass('mk-is-active')) { $tooltipBox.addClass('mk-is-active'); } 3062 3063 }).on('mouseleave', function() { 3064 if ($tooltipBox.hasClass('mk-is-active')) { 3065 $tooltipBox.removeClass('mk-is-active'); 3066 } 3067 }); 3068 }); 3069 }); 3070 } 3071 } 3072 }; 3073 3074 // Appear Animation 3075 var mkGridItemLoad = { 3076 init: function() { 3077 this.holder = $( '.mk-grid--load:not(.mk-grid--loaded)' ); 3078 3079 function swmRandomArbitrary( min, max ) { return Math.floor( Math.random() * (max - min) + min ); } 3080 3081 if ( this.holder.length ) { 3082 this.holder.each( 3083 function () { 3084 var holder = $( this ), 3085 randomNum = swmRandomArbitrary(10, 400 ),
3086 appearDelay = $( this ).attr( 'data-appear-delay' ); 3087 3088 if ( ! appearDelay ) { 3089 mkGridItemLoad.GridItemViewPort( holder, function () { 3090 holder.addClass( 'mk-grid--loaded' ); 3091 }); 3092 } else { 3093 appearDelay = (appearDelay === 'random') ? randomNum : appearDelay; 3094 mkGridItemLoad.GridItemViewPort( holder, function () { 3095 setTimeout( function () { holder.addClass( 'mk-grid--loaded' ); }, appearDelay ); 3096 }); 3097 } 3098 }); 3099 } 3100 }, 3101 GridItemViewPort:function($element, callback, onlyOnce) { 3102 if ( $element.length ) { 3103 var offset = typeof $element.data( 'viewport-offset' ) !== 'undefined' ? $element.data( 'viewport-offset' ) : 0.15; // When item is 15% in the viewport 3104 var observer = new IntersectionObserver( 3105 function ( entries ) { 3106 // isIntersecting is true when element and viewport are overlapping 3107 // isIntersecting is false when element and viewport don't overlap 3108 if ( entries[0].isIntersecting === true ) { 3109 callback.call( $element ); 3110 if ( onlyOnce !== false ) { observer.disconnect(); } // Stop watching the element when it's initialize 3111 } 3112 }, 3113 { threshold: [offset] } 3114 ); 3115 observer.observe( $element[0] ); 3116 } 3117 } 3118 3119 }; 3120 3121 var mkGridParallaxEffect = { 3122 3123 init: function () { 3124 let $holder = $( '.mk-p-grid.mk-parallax-scroll-on' ); 3125 3126 if ( $holder.length ) { 3127 $holder.each( function (i) { 3128 let $thisHolder = $( this ); 3129 mkGridParallaxEffect.initItem($thisHolder, i); 3130 }); 3131 } 3132 }, 3133 initItem: function ($holder, i){ 3134 let $articles = $holder.find('.mk-grid-item'); 3135 3136 $articles.each( function (i) { 3137 let $thisHolder = $( this ), 3138 randomScrub = (1.5 + gsap.utils.random(0, .7, .15)).toFixed(2);//num beetween 1.5 and 2.2 3139 mkGridParallaxEffect.initParallax($thisHolder, i, randomScrub); 3140 }); 3141 3142 }, 3143 initParallax: function ($holder, i, randomScrub){ 3144 let $image = $holder.find('.mk-post-grid-image img'), 3145 maxYMove = 6, 3146 yScrollModifier = gsap.utils.random([1, .86, .73]), 3147 moveY = i % 2 === 0 ? maxYMove * yScrollModifier : - maxYMove * yScrollModifier, 3148 scrub = Number.parseFloat(randomScrub); 3149 3150 const tl = gsap.timeline({ 3151 scrollTrigger: { 3152 trigger: $holder, 3153 scrub: scrub, 3154 start: () => { return "center bottom" }, 3155 end: () => { return "bottom top"; }, 3156 // markers: true, 3157 } 3158 }); 3159 3160 tl.fromTo ( $image, { yPercent: moveY, }, { yPercent: "*=-1", } ) 3161 } 3162 }; 3163 3164 // -------------------------------------------------- 3165 3166 mkAddons.mkFilter = mkFilter; 3167 mkAddons.mkMasonryLayout = mkMasonryLayout; 3168 mkAddons.mkPagination = mkPagination; 3169 mkAddons.mkWaitForImages = mkWaitForImages; 3170 mkAddons.mkInfoFollow = mkInfoFollow; 3171 mkAddons.mkGridItemLoad = mkGridItemLoad; 3172 mkAddons.mkGridParallaxEffect = mkGridParallaxEffect; 3173 3174 $(document).ready(function() { 3175 scroll = $( window ).scrollTop(); 3176 mkGridItemLoad.init(); 3177 mkPagination.init(); 3178 mkFilter.init(); 3179 mkMasonryLayout.init(); 3180 mkInfoFollow.init(); 3181 mkGridParallaxEffect.init(); 3182 3183 $( window ).scroll( function () { 3184 mkAddons.scroll = $( window ).scrollTop(); 3185 mkAddons.mkPagination.scroll(); 3186 }); 3187 3188 $( window ).resize( function () { 3189 mkAddons.windowWidth = $( window ).width(); 3190 mkAddons.windowHeight = $( window ).height(); 3191 if (!$("body").hasClass("elementor-editor-active")) { 3192 mkAddons.mkMasonryLayout.reInit(); 3193 } 3194 3195 }); 3196 3197 $( document ).on('mk_trigger_get_new_posts', function ( event, holder ) { 3198 if ( holder.hasClass( 'mk-filter--on' ) ) { holder.removeClass( 'mk--filter-loading' ); } 3199 if ( holder.hasClass( 'mk-p-masonry-on' ) ) { mkAddons.mkMasonryLayout.init(); } 3200 mkGridItemLoad.init(); 3201 }); 3202 3203 $( document ).on('mk_trigger_load_more', function ( event, holder, nextPage ) { 3204 mkAddons.mkPagination.triggerLoadMore( holder, nextPage ); 3205 }); 3206 3207 }); 3208 3209 $( document ).on('mk_trigger_get_new_posts', function ( event, holder ) { 3210 if ( $('.mk-portfolio-tooptip-box').length ) { 3211 $('.mk-portfolio-tooptip-box').remove(); 3212 } 3213 mkInfoFollow.init(); 3214 mkGridItemLoad.init(); 3215 }); 3216 3217 3218 // Initiate functions 3219 var mkGridItems = function () { 3220 var isEditMode = Boolean( elementorFrontend.isEditMode() ); 3221 if (isEditMode) { 3222 mkAddons.scroll = $( window ).scrollTop(); 3223 mkAddons.mkPagination.init(); 3224 mkAddons.mkFilter.init(); 3225 mkAddons.mkMasonryLayout.init(); 3226 mkAddons.mkInfoFollow.init(); 3227 mkAddons.mkGridItemLoad.init(); 3228 mkAddons.mkGridParallaxEffect.init();
3229 mkAddons.body.mkEyeCursor.init(); 3230 } 3231 } 3232 3233 mkAddons.widgetsList.mk_blog_posts = {}; 3234 mkAddons.widgetsList.mk_blog_posts.mkGridItems = mkGridItems; 3235 3236 mkAddons.widgetsList.mk_portfolio_modern = {}; 3237 mkAddons.widgetsList.mk_portfolio_modern.mkGridItems = mkGridItems; 3238 3239 mkAddons.widgetsList.mk_portfolio_tooltip = {}; 3240 mkAddons.widgetsList.mk_portfolio_tooltip.mkGridItems = mkGridItems; 3241 3242 // End Post Grid --------------------------------------------- 3243 3244 // ------------------------------------------------------------ 3245 // Filterable Gallery -------------------------------------------------- 3246 // ------------------------------------------------------------ 3247 3248 var mkGallery = { 3249 init: function () { 3250 3251 var $galleryDiv = $('.mk-filterable-gallery'); 3252 3253 if ( $galleryDiv.length ) { 3254 var $isoGrid = $galleryDiv.children('.mk-filterable-gallery-grid'), 3255 $btns = $galleryDiv.children('.mk-filterable-gallery-btns'), 3256 is_rtl = $galleryDiv.data('rtl') ? false : true, 3257 layout = $galleryDiv.data('layout'); 3258 3259 $galleryDiv.imagesLoaded( function(is_rtl) { 3260 if ( 'masonry' == layout ) { 3261 3262 var holder = $galleryDiv.find('.mk-gal-masonry-on'); 3263 if ( holder.length ) { 3264 holder.each( function () { 3265 mkGallery.createMasonry( $( holder ),$btns,is_rtl ); 3266 }); 3267 } 3268 3269 } else { 3270 var $grid = $isoGrid.isotope({ 3271 itemSelector: '.mk-filterable-gallery-item', 3272 layoutMode: 'fitRows', 3273 originLeft: is_rtl 3274 }); 3275 mkAddons.mkGallery.itemsFilter($grid,$btns,is_rtl); 3276 3277 } 3278 3279 }); 3280 3281 mkScrollLoad.init(); 3282 mkItemParallaxEffect.init(); 3283 3284 } 3285 }, 3286 reInit: function () { 3287 var $holder = $('.mk-gal-masonry-on'); 3288 if ( $holder.length ) { 3289 $holder.each( function () { 3290 var masonryDiv = $( $holder ).find( '.mk-gallery-grid-inner' ); 3291 3292 if ( typeof masonryDiv.isotope === 'function' ) { 3293 masonryDiv.isotope( 'layout' ); 3294 } 3295 }); 3296 } 3297 }, 3298 createMasonry: function ( holder,$btns,is_rtl ) { 3299 var masonryDiv = holder.find( '.mk-gallery-grid-inner' ), 3300 $masonryItem = masonryDiv.find( '.mk-filterable-gallery-item' ); 3301 3302 mkAddons.mkWaitForImages.check( masonryDiv, function () { 3303 // mkGallery.mkWaitForImages( masonryDiv, function () { 3304 if ( typeof masonryDiv.isotope === 'function' ) { 3305 var $grid = masonryDiv.isotope({ 3306 layoutMode: 'packery', 3307 itemSelector: '.mk-filterable-gallery-item', 3308 percentPosition: true, 3309 // originLeft: $is_rtl, 3310 masonry: { 3311 columnWidth: '.mk-gallery-grid-masonry-sizer', 3312 gutter: '.mk-gallery-grid-masonry-gutter' 3313 } 3314 }); 3315 3316 if ( holder.hasClass( 'mk-items--packery' ) ) { 3317 var size = mkGallery.getPackeryImageSize( masonryDiv, $masonryItem ); 3318 mkGallery.setPackeryImageProportionSize( masonryDiv, $masonryItem, size ); 3319 } 3320 3321 masonryDiv.isotope( 'layout' ); 3322 mkAddons.mkGallery.itemsFilter($grid,$btns,is_rtl); 3323 } 3324 3325 masonryDiv.addClass( 'mk-gal--masonry-init' ); 3326 }); 3327 }, 3328 getPackeryImageSize: function ( $holder, $item ) { 3329 var $squareItem = $holder.find( '.mk-item--square' ); 3330 if ( $squareItem.length ) { 3331
3332 var $squareItemImage = $squareItem.find( 'img' ), 3333 squareItemImageWidth = $squareItemImage.width(), 3334 squareItemImageHeight = $squareItemImage.height(); 3335 3336 if ( squareItemImageWidth !== squareItemImageHeight ) { 3337 return squareItemImageHeight; 3338 } else { 3339 return squareItemImageWidth; 3340 } 3341 } else { 3342 var size = $holder.find( '.mk-gallery-grid-masonry-sizer' ).width(), 3343 padding = parseInt( $item.css( 'paddingLeft' ), 10 ); 3344 3345 return (size - 2 * padding); // remove item side padding to get real item size 3346 } 3347 }, 3348 setPackeryImageProportionSize: function ( $holder, $item, size ) { 3349 var padding = parseInt( $item.css( 'paddingLeft' ), 10 ), 3350 $squareItem = $holder.find( '.mk-item--square' ), 3351 $horizontalItem = $holder.find( '.mk-item--horizontal' ), 3352 $verticalItem = $holder.find( '.mk-item--vertical' ), 3353 $largeSquareItem = $holder.find( '.mk-item--large-square' ), 3354 isMobileScreen = mkAddons.windowWidth <= 680; 3355 3356 $item.css( 'height', size ); 3357 3358 if ( $horizontalItem.length ) { 3359 $horizontalItem.css( 'height', Math.round( size / 2 ) ); 3360 } 3361 3362 if ( $verticalItem.length ) { 3363 $verticalItem.css( 'height', Math.round( 2 * (size + padding) ) ); 3364 } 3365 3366 if ( ! isMobileScreen ) { 3367 3368 if ( $horizontalItem.length ) { 3369 $horizontalItem.css( 'height', size ); 3370 } 3371 3372 if ( $largeSquareItem.length ) { 3373 $largeSquareItem.css( 'height', Math.round( 2 * (size + padding) ) ); 3374 } 3375 } 3376 }, 3377 itemsFilter: function( $grid, $btns, $is_rtl ) { 3378 $btns.on('click', 'a', function () { 3379 var filterValue = $(this).attr('data-filter'); 3380 $grid.isotope({ 3381 filter: filterValue, 3382 originLeft: $is_rtl 3383 }); 3384 3385 window.swm_animation_display( $grid ); 3386 return false; 3387 }); 3388 3389 $btns.each(function (i, btns) { 3390 var btns = $(btns); 3391 3392 btns.on('click', '.mk-filterable-gallery-btn', function () { 3393 btns.find('.is-checked').removeClass('is-checked'); 3394 $(this).addClass('is-checked'); 3395 }); 3396 }); 3397 } 3398 }; 3399 3400 mkAddons.mkGallery = mkGallery; 3401 3402 $( window ).resize(function () { 3403 if (!$("body").hasClass("elementor-editor-active")) { 3404 mkAddons.mkGallery.reInit(); 3405 } 3406 }); 3407 3408 $( document ).ready( function () { 3409 mkGallery.init(); 3410 }); 3411 3412 // Initiate functions 3413 var mkFilterableGallery = function () { 3414 var isEditMode = Boolean( elementorFrontend.isEditMode() ); 3415 if (isEditMode) { 3416 mkAddons.scroll = $( window ).scrollTop(); 3417 mkAddons.mkGallery.init(); 3418 } 3419 } 3420 3421 mkAddons.widgetsList.mk_filterable_gallery = {}; 3422 mkAddons.widgetsList.mk_filterable_gallery.mkFilterableGallery = mkFilterableGallery; 3423 3424 // ---------------------------------------------------------- 3425 3426 // End Filterable Gallery --------------------------------------------- 3427 3428 3429 $(window).on('elementor/frontend/init', function () { 3430 3431 for ( var key in mkAddons.widgetsList ) { 3432 for ( var keyChild in mkAddons.widgetsList[key] ) { 3433 elementorFrontend.hooks.addAction('frontend/element_ready/' + key + '.default', mkAddons.widgetsList[key][keyChild]); 3434 } 3435 } 3436 3437 // Link 'Edit layout' 3438 jQuery( '.mk_section_editor_link:not(.inited)' ) 3439 .addClass('inited') 3440 .on( 'click', function(e) { 3441 e.stopImmediatePropagation(); 3442 return true; 3443 }); 3444 }); 3445 3446})(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.