Premium Addons for Elementor - Version 3.6.6

Version Description

  • Fixed: `Notice: Undefined variable: col_number in /premium-blog.php on line 1752'
  • Fixed: Fatal error when WPML Multilingual inactive and WPML Strings Translation active.
  • Fixed: Margin Top/Bottom issue with multiple Carousel widgets on the same page.
Download this release

Release Info

Developer leap13
Plugin Icon 128x128 Premium Addons for Elementor
Version 3.6.6
Comparing to
See all releases

Code changes from version 3.6.5 to 3.6.6

admin/includes/version-control.php CHANGED
@@ -91,7 +91,7 @@ class Version_Control {
91
  <tr class="pa-roll-row">
92
  <th><?php echo __('Rollback Version', 'premium-addons-for-elementor'); ?></th>
93
  <td>
94
- <div><?php echo sprintf( '<a target="_blank" href="%1$s" class="button pa-btn pa-rollback-button elementor-button-spinner">%2$s</a>', wp_nonce_url( admin_url( 'admin-post.php?action=premium_addons_rollback' ), 'premium_addons_rollback' ), __('Reinstall Version 3.6.4', 'premium-addons-for-elementor') ); ?></div>
95
  <p class="pa-roll-desc">
96
  <span><?php echo __('Warning: Please backup your database before making the rollback.', 'premium-addons-for-elementor'); ?></span>
97
  </p>
91
  <tr class="pa-roll-row">
92
  <th><?php echo __('Rollback Version', 'premium-addons-for-elementor'); ?></th>
93
  <td>
94
+ <div><?php echo sprintf( '<a target="_blank" href="%1$s" class="button pa-btn pa-rollback-button elementor-button-spinner">%2$s</a>', wp_nonce_url( admin_url( 'admin-post.php?action=premium_addons_rollback' ), 'premium_addons_rollback' ), __('Reinstall Version 3.6.5', 'premium-addons-for-elementor') ); ?></div>
95
  <p class="pa-roll-desc">
96
  <span><?php echo __('Warning: Please backup your database before making the rollback.', 'premium-addons-for-elementor'); ?></span>
97
  </p>
assets/frontend/js/premium-addons.js CHANGED
@@ -380,246 +380,215 @@
380
 
381
  /****** Premium Carousel Handler ******/
382
  var PremiumCarouselHandler = function ($scope, $) {
383
- var isEdit = elementorFrontend.isEditMode();
 
 
 
384
 
385
- var carouselElement = $scope
386
- .find(".premium-carousel-wrapper")
387
- .each(function () {
388
- var $carouselElement = $(this);
389
- var carouselSettings = $(this).data("settings");
390
 
391
- function slideToShow(slick) {
392
- slidesToShow = slick.options.slidesToShow;
393
 
394
- windowWidth = jQuery(window).width();
 
 
395
 
396
- if (windowWidth > carouselSettings["tabletBreak"]) {
397
- slidesToShow = carouselSettings["slidesDesk"];
398
- }
399
 
400
- if (windowWidth <= carouselSettings["tabletBreak"]) {
401
- slidesToShow = carouselSettings["slidesTab"];
402
- }
403
 
404
- if (windowWidth <= carouselSettings["mobileBreak"]) {
405
- slidesToShow = carouselSettings["slidesMob"];
406
- }
407
 
408
- return slidesToShow;
409
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410
 
411
- if (isEdit) {
412
- $(this)
413
- .find(".item-wrapper")
414
- .each(function (index, slide) {
415
- var templateID = $(slide).data("template");
416
-
417
- if (undefined !== templateID) {
418
- $.ajax({
419
- type: "GET",
420
- url: PremiumProSettings.ajaxurl,
421
- dataType: "html",
422
- data: {
423
- action:
424
- "get_elementor_template_content",
425
- templateID: templateID
426
- }
427
- }).success(function (response) {
428
- var data = JSON.parse(response).data;
429
-
430
- if (undefined !== data.template_content) {
431
- $(slide).html(data.template_content);
432
-
433
- $carouselElement
434
- .find(".premium-carousel-inner")
435
- .slick("refresh");
436
- }
437
- });
438
  }
439
  });
 
 
440
 
441
- // $( this ).find( ".premium-carousel-inner" ).slick( 'refresh' );
442
- }
443
 
444
- $(this).on("init", function (event) {
445
- event.preventDefault();
446
 
447
- $(this)
448
- .find("item-wrapper.slick-active")
449
- .each(function () {
450
- $this = $(this);
451
- $this.addClass($this.data("animation"));
452
- });
453
-
454
- $(".slick-track").addClass("translate");
455
  });
456
 
457
- $(this)
458
- .find(".premium-carousel-inner")
459
- .slick({
460
- vertical: carouselSettings["vertical"],
461
- slidesToScroll: carouselSettings["slidesToScroll"],
462
- slidesToShow: carouselSettings["slidesToShow"],
463
- responsive: [
464
- {
465
- breakpoint: carouselSettings["tabletBreak"],
466
- settings: {
467
- slidesToShow: carouselSettings["slidesTab"],
468
- slidesToScroll:
469
- carouselSettings["slidesTab"]
470
- }
471
- },
472
- {
473
- breakpoint: carouselSettings["mobileBreak"],
474
- settings: {
475
- slidesToShow: carouselSettings["slidesMob"],
476
- slidesToScroll:
477
- carouselSettings["slidesMob"]
478
- }
479
- }
480
- ],
481
- fade: carouselSettings["fade"],
482
- infinite: carouselSettings["infinite"],
483
- speed: carouselSettings["speed"],
484
- autoplay: carouselSettings["autoplay"],
485
- autoplaySpeed: carouselSettings["autoplaySpeed"],
486
- draggable: carouselSettings["draggable"],
487
- touchMove: carouselSettings["touchMove"],
488
- rtl: carouselSettings["rtl"],
489
- useTransform: true,
490
- adaptiveHeight: carouselSettings["adaptiveHeight"],
491
- pauseOnHover: carouselSettings["pauseOnHover"],
492
- centerMode: carouselSettings["centerMode"],
493
- centerPadding: carouselSettings["centerPadding"],
494
- arrows: carouselSettings["arrows"],
495
- nextArrow: carouselSettings["nextArrow"],
496
- prevArrow: carouselSettings["prevArrow"],
497
- dots: carouselSettings["dots"],
498
- customPaging: function (slider, i) {
499
- return (
500
- '<i class="' +
501
- carouselSettings["customPaging"] +
502
- '"></i>'
503
- );
504
- }
505
- });
506
 
507
- $(this).on("afterChange", function (
508
- event,
509
- slick,
510
- currentSlide,
511
- nextSlide
512
- ) {
513
- slidesScrolled = slick.options.slidesToScroll;
514
- slidesToShow = slideToShow(slick);
515
- centerMode = slick.options.centerMode;
516
- $currentParent = slick.$slider[0].parentElement.id;
517
- slideToAnimate = currentSlide + slidesToShow - 1;
518
- if (slidesScrolled == 1) {
519
- if (centerMode == true) {
520
- animate = slideToAnimate - 2;
521
- $inViewPort = $(this).find(
522
- "[data-slick-index='" + animate + "']"
523
- );
524
- //$inViewPort.addClass($inViewPort.data("animation"));
525
- } else {
526
- $inViewPort = $(this).find(
527
- "[data-slick-index='" + slideToAnimate + "']"
528
- );
529
- if ("null" != carouselSettings["animation"]) {
530
- $inViewPort
531
- .find(
532
- "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button"
533
- )
534
- .addClass(carouselSettings["animation"])
535
- .removeClass(
536
- "premium-carousel-content-hidden"
537
- );
538
- }
539
  }
540
- } else {
541
- for (
542
- var i = slidesScrolled + currentSlide;
543
- i >= 0;
544
- i--
545
- ) {
546
- $inViewPort = $(this).find(
547
- "[data-slick-index='" + i + "']"
548
- );
549
- if ("null" != carouselSettings["animation"]) {
550
- $inViewPort
551
- .find(
552
- "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button"
553
- )
554
- .addClass(carouselSettings["animation"])
555
- .removeClass(
556
- "premium-carousel-content-hidden"
557
- );
558
- }
559
  }
560
  }
561
- });
562
-
563
- $(this).on("beforeChange", function (
564
- event,
565
- slick,
566
- currentSlide
567
- ) {
568
- $inViewPort = $(this).find(
569
- "[data-slick-index='" + currentSlide + "']"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  );
571
- if ("null" != carouselSettings["animation"]) {
572
- $inViewPort
573
- .siblings()
574
- .find(
575
- "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button"
576
- )
577
- .removeClass(carouselSettings["animation"])
578
- .addClass("premium-carousel-content-hidden");
579
- }
580
- });
581
- if (carouselSettings["vertical"]) {
582
- var maxHeight = -1;
583
- $(".slick-slide").each(function () {
584
- if ($(this).height() > maxHeight) {
585
- maxHeight = $(this).height();
586
- }
587
- });
588
- $(".slick-slide").each(function () {
589
- if ($(this).height() < maxHeight) {
590
- $(this).css(
591
- "margin",
592
- Math.ceil((maxHeight - $(this).height()) / 2) +
593
- "px 0"
594
- );
595
- }
596
- });
597
  }
598
- var marginFix = {
599
- element: $("a.ver-carousel-arrow"),
600
- getWidth: function () {
601
- var width = this.element.outerWidth();
602
- return width / 2;
603
- },
604
- setWidth: function (type) {
605
- type = type || "vertical";
606
- if (type == "vertical") {
607
- this.element.css(
608
- "margin-left",
609
- "-" + this.getWidth() + "px"
610
- );
611
- } else {
612
- this.element.css(
613
- "margin-top",
614
- "-" + this.getWidth() + "px"
615
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
616
  }
617
  }
618
- };
619
- marginFix.setWidth();
620
- marginFix.element = $("a.carousel-arrow");
621
- marginFix.setWidth("horizontal");
622
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
623
  };
624
 
625
  /****** Premium Banner Handler ******/
380
 
381
  /****** Premium Carousel Handler ******/
382
  var PremiumCarouselHandler = function ($scope, $) {
383
+
384
+ var carouselElement = $scope.find(".premium-carousel-wrapper"),
385
+ carouselSettings = $( carouselElement ).data("settings"),
386
+ isEdit = elementorFrontend.isEditMode();
387
 
388
+ function slideToShow( slick ) {
 
 
 
 
389
 
390
+ var slidesToShow = slick.options.slidesToShow,
391
+ windowWidth = $( window ).width();
392
 
393
+ if ( windowWidth > carouselSettings["tabletBreak"] ) {
394
+ slidesToShow = carouselSettings["slidesDesk"];
395
+ }
396
 
397
+ if ( windowWidth <= carouselSettings["tabletBreak"] ) {
398
+ slidesToShow = carouselSettings["slidesTab"];
399
+ }
400
 
401
+ if ( windowWidth <= carouselSettings["mobileBreak"] ) {
402
+ slidesToShow = carouselSettings["slidesMob"];
403
+ }
404
 
405
+ return slidesToShow;
406
+ }
 
407
 
408
+ if ( isEdit ) {
409
+ carouselElement.find(".item-wrapper").each(function ( index, slide ) {
410
+
411
+ var templateID = $(slide).data("template");
412
+
413
+ if (undefined !== templateID) {
414
+ $.ajax({
415
+ type: "GET",
416
+ url: PremiumProSettings.ajaxurl,
417
+ dataType: "html",
418
+ data: {
419
+ action:
420
+ "get_elementor_template_content",
421
+ templateID: templateID
422
+ }
423
+ }).success(function (response) {
424
+ var data = JSON.parse(response).data;
425
 
426
+ if (undefined !== data.template_content) {
427
+ $(slide).html(data.template_content);
428
+
429
+ carouselElement.find(".premium-carousel-inner").slick("refresh");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
430
  }
431
  });
432
+ }
433
+ });
434
 
435
+ }
 
436
 
437
+ carouselElement.on("init", function (event) {
438
+ event.preventDefault();
439
 
440
+ $(this).find("item-wrapper.slick-active").each(function () {
441
+ var $this = $( this );
442
+ $this.addClass($this.data("animation"));
 
 
 
 
 
443
  });
444
 
445
+ $(".slick-track").addClass("translate");
446
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
447
 
448
+ carouselElement.find(".premium-carousel-inner").slick({
449
+ vertical: carouselSettings["vertical"],
450
+ slidesToScroll: carouselSettings["slidesToScroll"],
451
+ slidesToShow: carouselSettings["slidesToShow"],
452
+ responsive: [
453
+ {
454
+ breakpoint: carouselSettings["tabletBreak"],
455
+ settings: {
456
+ slidesToShow: carouselSettings["slidesTab"],
457
+ slidesToScroll: carouselSettings["slidesTab"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
458
  }
459
+ },
460
+ {
461
+ breakpoint: carouselSettings["mobileBreak"],
462
+ settings: {
463
+ slidesToShow: carouselSettings["slidesMob"],
464
+ slidesToScroll: carouselSettings["slidesMob"]
 
 
 
 
 
 
 
 
 
 
 
 
 
465
  }
466
  }
467
+ ],
468
+ useTransform: true,
469
+ fade: carouselSettings["fade"],
470
+ infinite: carouselSettings["infinite"],
471
+ speed: carouselSettings["speed"],
472
+ autoplay: carouselSettings["autoplay"],
473
+ autoplaySpeed: carouselSettings["autoplaySpeed"],
474
+ draggable: carouselSettings["draggable"],
475
+ touchMove: carouselSettings["touchMove"],
476
+ rtl: carouselSettings["rtl"],
477
+ adaptiveHeight: carouselSettings["adaptiveHeight"],
478
+ pauseOnHover: carouselSettings["pauseOnHover"],
479
+ centerMode: carouselSettings["centerMode"],
480
+ centerPadding: carouselSettings["centerPadding"],
481
+ arrows: carouselSettings["arrows"],
482
+ nextArrow: carouselSettings["nextArrow"],
483
+ prevArrow: carouselSettings["prevArrow"],
484
+ dots: carouselSettings["dots"],
485
+ customPaging: function ( slider, i ) {
486
+ return (
487
+ '<i class="' +
488
+ carouselSettings["customPaging"] +
489
+ '"></i>'
490
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
491
  }
492
+ });
493
+
494
+ carouselElement.on("afterChange", function ( event, slick, currentSlide ) {
495
+
496
+ var slidesScrolled = slick.options.slidesToScroll,
497
+ slidesToShow = slideToShow( slick ),
498
+ centerMode = slick.options.centerMode,
499
+ slideToAnimate = currentSlide + slidesToShow - 1;
500
+
501
+ if (slidesScrolled === 1) {
502
+ if ( ! centerMode === true ) {
503
+ var $inViewPort = $(this).find( "[data-slick-index='" + slideToAnimate + "']" );
504
+
505
+ if ( "null" != carouselSettings["animation"] ) {
506
+ $inViewPort.find( "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button").addClass(carouselSettings["animation"]).removeClass("premium-carousel-content-hidden");
507
+ }
508
+ }
509
+ } else {
510
+ for (
511
+ var i = slidesScrolled + currentSlide;
512
+ i >= 0;
513
+ i--
514
+ ) {
515
+ $inViewPort = $(this).find(
516
+ "[data-slick-index='" + i + "']"
517
+ );
518
+ if ( "null" != carouselSettings["animation"] ) {
519
+ $inViewPort
520
+ .find(
521
+ "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button"
522
+ )
523
+ .addClass(carouselSettings["animation"])
524
+ .removeClass(
525
+ "premium-carousel-content-hidden"
526
+ );
527
  }
528
  }
529
+ }
 
 
 
530
  });
531
+
532
+ carouselElement.on("beforeChange", function ( event, slick, currentSlide ) {
533
+ var $inViewPort = $(this).find( "[data-slick-index='" + currentSlide + "']" );
534
+
535
+ if ("null" != carouselSettings["animation"]) {
536
+ $inViewPort
537
+ .siblings()
538
+ .find(
539
+ "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button"
540
+ )
541
+ .removeClass(carouselSettings["animation"])
542
+ .addClass("premium-carousel-content-hidden");
543
+ }
544
+ });
545
+
546
+ if ( carouselSettings["vertical"] ) {
547
+
548
+ var maxHeight = -1;
549
+
550
+ carouselElement.find(".slick-slide").each(function () {
551
+
552
+ if ( $( this ).height() > maxHeight ) {
553
+
554
+ maxHeight = $( this ).height();
555
+
556
+ }
557
+ });
558
+
559
+ carouselElement.find(".slick-slide").each(function () {
560
+ if ( $( this ).height() < maxHeight ) {
561
+ $(this).css( "margin", Math.ceil(( maxHeight - $( this ).height() ) / 2 ) + "px 0" );
562
+ }
563
+ });
564
+ }
565
+
566
+ var marginFix = {
567
+ element: $( "a.ver-carousel-arrow" ),
568
+ getWidth: function () {
569
+ var width = this.element.outerWidth();
570
+
571
+ return width / 2;
572
+ },
573
+ setWidth: function ( type ) {
574
+
575
+ type = type || "vertical";
576
+
577
+ if ( type == "vertical" ) {
578
+
579
+ this.element.css( "margin-left", "-" + this.getWidth() + "px" );
580
+
581
+ } else {
582
+
583
+ this.element.css( "margin-top", "-" + this.getWidth() + "px" );
584
+
585
+ }
586
+ }
587
+ };
588
+
589
+ marginFix.setWidth();
590
+ marginFix.element = $( "a.carousel-arrow" );
591
+ marginFix.setWidth( "horizontal" );
592
  };
593
 
594
  /****** Premium Banner Handler ******/
assets/frontend/js/premium-vscroll.js CHANGED
@@ -1,5 +1,3 @@
1
- // Works on mobile but needs enhancements
2
-
3
  (function($) {
4
  /****** Premium Vertical Scroll Handler ******/
5
  var PremiumVerticalScrollHandler = function( $scope, $ ) {
@@ -7,8 +5,6 @@
7
  instance = null,
8
  vScrollSettings = vScrollElem.data("settings");
9
 
10
- // var touch = vScrollSettings.touch;
11
-
12
  instance = new premiumVerticalScroll(vScrollElem, vScrollSettings);
13
  instance.init();
14
 
@@ -286,24 +282,6 @@
286
 
287
  $( ".premium-vscroll-tooltip" ).hide();
288
 
289
- // if ( dotIndex === $itemsList.length - 1 && ! $vTarget ) {
290
- //
291
- // $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).addClass( "premium-vscroll-dots-hide" );
292
- //
293
- // } else if ( dotIndex === 0 && ! $vTarget ) {
294
- //
295
- // if ( $instance.offset().top - $( document ).scrollTop() > 200 ) {
296
- //
297
- // $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).addClass( "premium-vscroll-dots-hide" );
298
- //
299
- // }
300
- //
301
- // } else {
302
- //
303
- // $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).removeClass( "premium-vscroll-dots-hide" );
304
- //
305
- // }
306
-
307
  if ( beforeCheck() ) {
308
 
309
  sectionId = self.getFirstSection( sections );
@@ -325,127 +303,64 @@
325
  direction = 'up';
326
 
327
  }
328
-
329
- // if ( Math.abs( touchStartY - touchEndY ) > ( window.innerHeight / 100 * 100 ) ) {
330
-
331
- // if ( sectionId && sections.hasOwnProperty( sectionId ) ) {
332
- //
333
- // prevSectionId = self.checkPrevSection( sections, sectionId );
334
- // nextSectionId = self.checkNextSection( sections, sectionId );
335
- //
336
- // if ( "up" === direction ) {
337
- //
338
- // if ( ! nextSectionId && sections[ sectionId ].offset < windowScrollTop ) {
339
- // newSectionId = sectionId;
340
- // } else {
341
- // newSectionId = prevSectionId;
342
- // }
343
- // }
344
- //
345
- // if ( "down" === direction ) {
346
- //
347
- // if ( ! prevSectionId && sections[ sectionId ].offset > windowScrollTop + 5 ) {
348
- // newSectionId = sectionId;
349
- // } else {
350
- // newSectionId = nextSectionId;
351
- // }
352
- // }
353
- //
354
- // if ( newSectionId ) {
355
- //
356
- // inScope = true;
357
- //
358
- // $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).removeClass( "premium-vscroll-dots-hide" );
359
- //
360
- // self.scrolling( newSectionId );
361
- //
362
- // } else {
363
- // inScope = false;
364
- //
365
- // var $lastselector = checkTemps ? $instance : $( "#" + sectionId );
366
- //
367
- // if ( "down" === direction ) {
368
- //
369
- // if ( $lastselector.offset().top + $lastselector.innerHeight() - $( document ).scrollTop() > 600 ) {
370
- //
371
- // $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).addClass( "premium-vscroll-dots-hide" );
372
- //
373
- // }
374
- //
375
- // } else if ( "up" === direction ) {
376
- //
377
- // if ( $lastselector.offset().top - $( document ).scrollTop() > 200 ) {
378
- //
379
- // $(".premium-vscroll-dots, .premium-vscroll-nav-menu").addClass( "premium-vscroll-dots-hide" );
380
- //
381
- // }
382
- //
383
- // }
384
- // }
385
- //
386
- // }
387
-
388
- // } else {
389
 
390
- if ( sectionId && sections.hasOwnProperty( sectionId ) ) {
391
-
392
- prevSectionId = self.checkPrevSection( sections, sectionId );
393
- nextSectionId = self.checkNextSection( sections, sectionId );
394
-
395
- if ( "up" === direction ) {
396
 
397
- if ( ! nextSectionId && sections[ sectionId ].offset < windowScrollTop ) {
398
- newSectionId = sectionId;
399
- } else {
400
- newSectionId = prevSectionId;
401
- }
402
- }
403
 
404
- if ( "down" === direction ) {
405
 
406
- if ( ! prevSectionId && sections[ sectionId ].offset > windowScrollTop + 5 || ! self.atBottom( sectionId ) ) {
407
- newSectionId = sectionId;
408
- } else {
409
- newSectionId = nextSectionId;
410
- sectionChanged = 1;
411
- }
412
  }
413
-
414
- if ( newSectionId ) {
415
-
416
- inScope = true;
417
-
418
- $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).removeClass( "premium-vscroll-dots-hide" );
419
-
420
- self.scrolling( newSectionId );
421
-
422
  } else {
423
- inScope = false;
424
-
425
- var $lastselector = checkTemps ? $instance : $( "#" + sectionId );
 
 
 
426
 
427
- if ( "down" === direction ) {
428
 
429
- if ( $lastselector.offset().top + $lastselector.innerHeight() - $( document ).scrollTop() > 600 ) {
430
 
431
- $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).addClass( "premium-vscroll-dots-hide" );
432
 
433
- }
 
434
 
435
- } else if ( "up" === direction ) {
436
 
437
- if ( $lastselector.offset().top - $( document ).scrollTop() > 200 ) {
438
 
439
- $(".premium-vscroll-dots, .premium-vscroll-nav-menu").addClass( "premium-vscroll-dots-hide" );
440
 
441
- }
442
 
443
- }
444
- }
445
 
 
 
 
 
 
 
 
 
 
446
  }
447
-
448
- // }
449
 
450
  };
451
 
 
 
1
  (function($) {
2
  /****** Premium Vertical Scroll Handler ******/
3
  var PremiumVerticalScrollHandler = function( $scope, $ ) {
5
  instance = null,
6
  vScrollSettings = vScrollElem.data("settings");
7
 
 
 
8
  instance = new premiumVerticalScroll(vScrollElem, vScrollSettings);
9
  instance.init();
10
 
282
 
283
  $( ".premium-vscroll-tooltip" ).hide();
284
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
285
  if ( beforeCheck() ) {
286
 
287
  sectionId = self.getFirstSection( sections );
303
  direction = 'up';
304
 
305
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
306
 
307
+ if ( sectionId && sections.hasOwnProperty( sectionId ) ) {
 
 
 
 
 
308
 
309
+ prevSectionId = self.checkPrevSection( sections, sectionId );
310
+ nextSectionId = self.checkNextSection( sections, sectionId );
 
 
 
 
311
 
312
+ if ( "up" === direction ) {
313
 
314
+ if ( ! nextSectionId && sections[ sectionId ].offset < windowScrollTop ) {
315
+ newSectionId = sectionId;
316
+ } else {
317
+ newSectionId = prevSectionId;
 
 
318
  }
319
+ }
320
+
321
+ if ( "down" === direction ) {
322
+
323
+ if ( ! prevSectionId && sections[ sectionId ].offset > windowScrollTop + 5 || ! self.atBottom( sectionId ) ) {
324
+ newSectionId = sectionId;
 
 
 
325
  } else {
326
+ newSectionId = nextSectionId;
327
+ sectionChanged = 1;
328
+ }
329
+ }
330
+
331
+ if ( newSectionId ) {
332
 
333
+ inScope = true;
334
 
335
+ $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).removeClass( "premium-vscroll-dots-hide" );
336
 
337
+ self.scrolling( newSectionId );
338
 
339
+ } else {
340
+ inScope = false;
341
 
342
+ var $lastselector = checkTemps ? $instance : $( "#" + sectionId );
343
 
344
+ if ( "down" === direction ) {
345
 
346
+ if ( $lastselector.offset().top + $lastselector.innerHeight() - $( document ).scrollTop() > 600 ) {
347
 
348
+ $( ".premium-vscroll-dots, .premium-vscroll-nav-menu" ).addClass( "premium-vscroll-dots-hide" );
349
 
350
+ }
 
351
 
352
+ } else if ( "up" === direction ) {
353
+
354
+ if ( $lastselector.offset().top - $( document ).scrollTop() > 200 ) {
355
+
356
+ $(".premium-vscroll-dots, .premium-vscroll-nav-menu").addClass( "premium-vscroll-dots-hide" );
357
+
358
+ }
359
+
360
+ }
361
  }
362
+
363
+ }
364
 
365
  };
366
 
includes/compatibility/class-premium-addons-wpml.php CHANGED
@@ -38,7 +38,7 @@ if ( ! class_exists ('Premium_Addons_Wpml') ) {
38
  /*
39
  * Is WPML Active
40
  *
41
- * Check if WPML String Translation active
42
  *
43
  * @since 3.1.9
44
  * @access private
@@ -48,8 +48,12 @@ if ( ! class_exists ('Premium_Addons_Wpml') ) {
48
  public static function is_wpml_active() {
49
 
50
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
51
-
52
- return is_plugin_active( 'wpml-string-translation/plugin.php' );
 
 
 
 
53
 
54
  }
55
 
38
  /*
39
  * Is WPML Active
40
  *
41
+ * Check if WPML Multilingual CMS and WPML String Translation active
42
  *
43
  * @since 3.1.9
44
  * @access private
48
  public static function is_wpml_active() {
49
 
50
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
51
+
52
+ $wpml_active = is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' );
53
+
54
+ $string_translation_active = is_plugin_active( 'wpml-string-translation/plugin.php' );
55
+
56
+ return $wpml_active && $string_translation_active;
57
 
58
  }
59
 
premium-addons-for-elementor.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Premium Addons for Elementor
4
  Description: Premium Addons Plugin Includes 22+ premium widgets for Elementor Page Builder.
5
  Plugin URI: https://premiumaddons.com
6
- Version: 3.6.5
7
  Author: Leap13
8
  Author URI: https://leap13.com/
9
  Text Domain: premium-addons-for-elementor
@@ -14,12 +14,12 @@ License: GNU General Public License v3.0
14
  if ( ! defined('ABSPATH') ) exit; // No access of directly access
15
 
16
  // Define Constants
17
- define('PREMIUM_ADDONS_VERSION', '3.6.5');
18
  define('PREMIUM_ADDONS_URL', plugins_url('/', __FILE__));
19
  define('PREMIUM_ADDONS_PATH', plugin_dir_path(__FILE__));
20
  define('PREMIUM_ADDONS_FILE', __FILE__);
21
  define('PREMIUM_ADDONS_BASENAME', plugin_basename( PREMIUM_ADDONS_FILE ) );
22
- define('PREMIUM_ADDONS_STABLE_VERSION', '3.6.4');
23
 
24
  if( ! class_exists('Premium_Addons_Elementor') ) {
25
 
3
  Plugin Name: Premium Addons for Elementor
4
  Description: Premium Addons Plugin Includes 22+ premium widgets for Elementor Page Builder.
5
  Plugin URI: https://premiumaddons.com
6
+ Version: 3.6.6
7
  Author: Leap13
8
  Author URI: https://leap13.com/
9
  Text Domain: premium-addons-for-elementor
14
  if ( ! defined('ABSPATH') ) exit; // No access of directly access
15
 
16
  // Define Constants
17
+ define('PREMIUM_ADDONS_VERSION', '3.6.6');
18
  define('PREMIUM_ADDONS_URL', plugins_url('/', __FILE__));
19
  define('PREMIUM_ADDONS_PATH', plugin_dir_path(__FILE__));
20
  define('PREMIUM_ADDONS_FILE', __FILE__);
21
  define('PREMIUM_ADDONS_BASENAME', plugin_basename( PREMIUM_ADDONS_FILE ) );
22
+ define('PREMIUM_ADDONS_STABLE_VERSION', '3.6.5');
23
 
24
  if( ! class_exists('Premium_Addons_Elementor') ) {
25
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Donate Link: https://premiumaddons.com/?utm_source=wp-repo&utm_medium=link&utm_c
5
  Requires at Least: 4.5
6
  Tested Up To: 5.2.2
7
  Requires PHP: 5.4
8
- Stable Tag: 3.6.5
9
  License: GPL v3.0
10
  License URI: https://opensource.org/licenses/GPL-3.0
11
 
@@ -174,6 +174,12 @@ Premium Addons for Elementor is 100% Ads Free, Ads can only be detected from You
174
 
175
  == Changelog ==
176
 
 
 
 
 
 
 
177
  = 3.6.5 =
178
 
179
  - Tweak: Added `Autoplay` option for self hosted videos in Video Box widget.
5
  Requires at Least: 4.5
6
  Tested Up To: 5.2.2
7
  Requires PHP: 5.4
8
+ Stable Tag: 3.6.6
9
  License: GPL v3.0
10
  License URI: https://opensource.org/licenses/GPL-3.0
11
 
174
 
175
  == Changelog ==
176
 
177
+ = 3.6.6 =
178
+
179
+ - Fixed: `Notice: Undefined variable: col_number in /premium-blog.php on line 1752'
180
+ - Fixed: Fatal error when WPML Multilingual inactive and WPML Strings Translation active.
181
+ - Fixed: Margin Top/Bottom issue with multiple Carousel widgets on the same page.
182
+
183
  = 3.6.5 =
184
 
185
  - Tweak: Added `Autoplay` option for self hosted videos in Video Box widget.
widgets/premium-blog.php CHANGED
@@ -1728,6 +1728,9 @@ class Premium_Blog extends Widget_Base {
1728
  $posts = premium_blog_get_post_data( $post_args, $paged , $new_offset );
1729
 
1730
  switch( $settings['premium_blog_columns_number'] ) {
 
 
 
1731
  case '50%' :
1732
  $col_number = 'col-2';
1733
  break;
1728
  $posts = premium_blog_get_post_data( $post_args, $paged , $new_offset );
1729
 
1730
  switch( $settings['premium_blog_columns_number'] ) {
1731
+ case '100%' :
1732
+ $col_number = 'col-1';
1733
+ break;
1734
  case '50%' :
1735
  $col_number = 'col-2';
1736
  break;
widgets/premium-grid.php CHANGED
@@ -88,11 +88,10 @@ class Premium_Grid extends Widget_Base {
88
  );
89
 
90
  $this->add_responsive_control('pemium_gallery_even_img_height',
91
- [
92
- 'label' => __( 'Maximum Height', 'premium-addons-for-elementor' ),
93
  'label_block' => true,
94
  'size_units' => ['px', 'em', 'vh'],
95
- 'description' => __('You may need to click `Apply` button after settings this option', 'premium-addons-for-elementor'),
96
  'type' => Controls_Manager::SLIDER,
97
  'range' => [
98
  'px' => [
@@ -109,7 +108,7 @@ class Premium_Grid extends Widget_Base {
109
  'premium_gallery_img_size_select' => 'fitRows'
110
  ],
111
  'selectors' => [
112
- '{{WRAPPER}} .premium-gallery-item .pa-gallery-image' => 'max-height: {{SIZE}}{{UNIT}}'
113
  ]
114
  ]
115
  );
88
  );
89
 
90
  $this->add_responsive_control('pemium_gallery_even_img_height',
91
+ [
92
+ 'label' => __( 'Minimum Height', 'premium-addons-for-elementor' ),
93
  'label_block' => true,
94
  'size_units' => ['px', 'em', 'vh'],
 
95
  'type' => Controls_Manager::SLIDER,
96
  'range' => [
97
  'px' => [
108
  'premium_gallery_img_size_select' => 'fitRows'
109
  ],
110
  'selectors' => [
111
+ '{{WRAPPER}} .premium-gallery-item .pa-gallery-image' => 'min-height: {{SIZE}}{{UNIT}}'
112
  ]
113
  ]
114
  );
widgets/premium-person.php CHANGED
@@ -666,7 +666,7 @@ class Premium_Person extends Widget_Base {
666
 
667
  <div {{{ view.getRenderAttributeString('container') }}} >
668
  <div class="premium-person-image-container">
669
- <img src="{{ settings.premium_person_image.url}}" alt="{{ settings.premium_person_name }}">
670
  </div>
671
  <div class="premium-person-info">
672
  <div class="premium-person-info-container">
666
 
667
  <div {{{ view.getRenderAttributeString('container') }}} >
668
  <div class="premium-person-image-container">
669
+ <img src="{{ settings.premium_person_image.url }}" alt="{{ settings.premium_person_name }}">
670
  </div>
671
  <div class="premium-person-info">
672
  <div class="premium-person-info-container">