Premium Addons for Elementor - Version 3.7.9

Version Description

  • Tweak: Added style options for Container in Banner widget.
  • Tweak: Changed Border Radius option from SLIDER to DIMENSIONS in Countdown widget.
  • Tweak: Added Remote Video URL option to Media Grid and Video Box widget.
  • Tweak: Added First Category Label option for Filter Tabs in Blog widget.
  • Fixed: Image overlay does not appear with Self Hosted videos in Video Box widget.
  • Fixed: Contact Form 7 widget wraps all inputs in the page.
  • Fixed: Single quote not rendered in Fancy Text widget.
  • Fixed: Default border applied on navigation arrows in Carousel widget.
  • Fixed: Navigation Arrows hidden by default in some themes in Carousel widget.
Download this release

Release Info

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

Code changes from version 3.7.8 to 3.7.9

admin/assets/css/notice.css CHANGED
@@ -21,6 +21,35 @@
21
  .error.pa-black-notice .pa-img-wrap {
22
  min-height: auto;
23
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  .error.pa-notice-wrap .pa-text-wrap {
25
  padding-top: 0.3em;
26
  }
@@ -46,14 +75,16 @@
46
  }
47
  .error .pa-text-wrap a {
48
  margin: 0;
49
- /* padding: 0;*/
50
  }
51
- .error .pa-text-wrap a:focus {
52
- box-shadow: none;
53
- }
54
- .pa-notice-close {
55
  flex-basis: 56%;
56
  }
 
 
 
 
57
  .pa-notice-close span {
58
  float: right;
59
  text-decoration: none;
21
  .error.pa-black-notice .pa-img-wrap {
22
  min-height: auto;
23
  }
24
+ .error .pa-text-wrap {
25
+ display: -ms-flexbox;
26
+ display: -webkit-flex;
27
+ display: -moz-flex;
28
+ display: -ms-flex;
29
+ display: flex;
30
+ align-items: center;
31
+ padding:10px 10px 10px 0;
32
+ }
33
+ .error .pa-text-wrap .pa-notice-logo {
34
+ width: 40px;
35
+ margin-right: 0.8em;
36
+ }
37
+ .error .pa-text-wrap .pa-notice-cta {
38
+ -webkit-box-flex: 2;
39
+ -webkit-flex-grow: 2;
40
+ -ms-flex-positive: 2;
41
+ flex-grow: 2;
42
+ }
43
+ .error .pa-text-wrap .pa-notice-close {
44
+ text-decoration: none;
45
+ margin-left: 1em;
46
+ float: right;
47
+ }
48
+ .error .pa-text-wrap a:focus {
49
+ box-shadow: none;
50
+ outline: none;
51
+
52
+ }
53
  .error.pa-notice-wrap .pa-text-wrap {
54
  padding-top: 0.3em;
55
  }
75
  }
76
  .error .pa-text-wrap a {
77
  margin: 0;
 
78
  }
79
+ .pa-notice-wrap .pa-notice-close {
80
+ -webkit-flex-basis: 56%;
81
+ -ms-flex-preferred-size: 56%;
 
82
  flex-basis: 56%;
83
  }
84
+ .pa-notice-close a:focus {
85
+ outline: none;
86
+ box-shadow: none;
87
+ }
88
  .pa-notice-close span {
89
  float: right;
90
  text-decoration: none;
admin/includes/admin-notices.php CHANGED
@@ -36,9 +36,11 @@ class Admin_Notices {
36
  */
37
  public function init() {
38
 
39
- $this->handle_review_notice();
 
 
40
 
41
- $this->handle_color_trans_notice();
42
 
43
  }
44
 
@@ -49,15 +51,17 @@ class Admin_Notices {
49
 
50
  $this->required_plugins_check();
51
 
52
- $cache_key = 'premium_notice_' . PREMIUM_ADDONS_VERSION;
 
 
 
 
 
 
 
 
53
 
54
- $response = get_transient( $cache_key );
55
-
56
- if ( false == $response ) {
57
- $this->get_review_notice();
58
- }
59
-
60
- $this->get_color_trans_notice();
61
 
62
  }
63
 
@@ -133,6 +137,29 @@ class Admin_Notices {
133
  }
134
 
135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  /**
137
  * Required plugin check
138
  *
@@ -146,7 +173,7 @@ class Admin_Notices {
146
 
147
  $elementor_path = sprintf( '%1$s/%1$s.php', self::$elementor );
148
 
149
- if( ! defined('ELEMENTOR_VERSION' ) ) {
150
 
151
  if ( ! self::is_plugin_installed( $elementor_path ) ) {
152
 
@@ -295,7 +322,7 @@ class Admin_Notices {
295
  } else if ( '1' !== $color_trans_notice ) {
296
  $optout_url = wp_nonce_url( add_query_arg( 'color_trans', 'opt_out' ), 'opt_out' );
297
 
298
- $message = sprintf( __('<p class="pa-text-wrap" style="display: flex; align-items: center; padding:10px 10px 10px 0;"><img src="%s" style="margin-right: 0.8em; width: 40px;"><strong><span>Premium Color Transition&nbsp</strong> widget is now available in Premium Addons Pro.&nbsp</span><a href="%s" target="_blank" style="flex-grow: 2;"> Check it out now.</a>', 'premium-addons-for-elementor' ), PREMIUM_ADDONS_URL .'admin/images/premium-addons-logo.png', $notice_url );
299
 
300
  $message .= sprintf( __('<a href="%s" style="text-decoration: none; margin-left: 1em; float:right; "><span class="dashicons dashicons-dismiss"></span></a></p>', 'premium-addons-for-elementor'), $optout_url );
301
 
@@ -304,6 +331,42 @@ class Admin_Notices {
304
  }
305
 
306
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
 
308
 
309
  /**
36
  */
37
  public function init() {
38
 
39
+ // $this->handle_review_notice();
40
+ //
41
+ // $this->handle_color_trans_notice();
42
 
43
+ $this->handle_det_notice();
44
 
45
  }
46
 
51
 
52
  $this->required_plugins_check();
53
 
54
+ // $cache_key = 'premium_notice_' . PREMIUM_ADDONS_VERSION;
55
+ //
56
+ // $response = get_transient( $cache_key );
57
+ //
58
+ // if ( false == $response ) {
59
+ // $this->get_review_notice();
60
+ // }
61
+ //
62
+ // $this->get_color_trans_notice();
63
 
64
+ $this->get_det_notice();
 
 
 
 
 
 
65
 
66
  }
67
 
137
  }
138
 
139
 
140
+ /**
141
+ * Checks if Disable Elementor Translation message is dismissed.
142
+ *
143
+ * @since 3.7.9
144
+ * @access public
145
+ *
146
+ * @return void
147
+ */
148
+ public function handle_det_notice() {
149
+ if ( ! isset( $_GET['det'] ) ) {
150
+ return;
151
+ }
152
+
153
+ if ( 'opt_out' === $_GET['det'] ) {
154
+ check_admin_referer( 'opt_out' );
155
+
156
+ update_option( 'det_notice', '1' );
157
+ }
158
+
159
+ wp_redirect( remove_query_arg( 'det' ) );
160
+ exit;
161
+ }
162
+
163
  /**
164
  * Required plugin check
165
  *
173
 
174
  $elementor_path = sprintf( '%1$s/%1$s.php', self::$elementor );
175
 
176
+ if( ! defined( 'ELEMENTOR_VERSION' ) ) {
177
 
178
  if ( ! self::is_plugin_installed( $elementor_path ) ) {
179
 
322
  } else if ( '1' !== $color_trans_notice ) {
323
  $optout_url = wp_nonce_url( add_query_arg( 'color_trans', 'opt_out' ), 'opt_out' );
324
 
325
+ $message = sprintf( __('<p class="pa-text-wrap"><img src="%s" style="margin-right: 0.8em; width: 40px;"><strong><span>Premium Color Transition&nbsp</strong> widget is now available in Premium Addons Pro.&nbsp</span><a href="%s" target="_blank" style="flex-grow: 2;"> Check it out now.</a>', 'premium-addons-for-elementor' ), PREMIUM_ADDONS_URL .'admin/images/premium-addons-logo.png', $notice_url );
326
 
327
  $message .= sprintf( __('<a href="%s" style="text-decoration: none; margin-left: 1em; float:right; "><span class="dashicons dashicons-dismiss"></span></a></p>', 'premium-addons-for-elementor'), $optout_url );
328
 
331
  }
332
 
333
  }
334
+
335
+ /**
336
+ *
337
+ * Shows an admin notice for Disable Elementor Translation.
338
+ *
339
+ * @since 3.7.9
340
+ * @access public
341
+ *
342
+ * @return void
343
+ */
344
+ public function get_det_notice() {
345
+
346
+ $det_notice = get_option( 'det_notice' );
347
+
348
+ if( ! current_user_can( 'install_plugins' ) || '1' === $det_notice || defined( 'DET_VERSION' ) )
349
+ return;
350
+
351
+ $det_slug = 'disable-elementor-editor-translation';
352
+
353
+ $install_url = wp_nonce_url( self_admin_url( sprintf( 'update.php?action=install-plugin&plugin=%s', $det_slug ) ), sprintf( 'install-plugin_%s', $det_slug ) );
354
+
355
+ $optout_url = wp_nonce_url( add_query_arg( 'det', 'opt_out' ), 'opt_out' );
356
+
357
+ $message = '<p class="pa-text-wrap">';
358
+
359
+ $message .= sprintf( '<img class="pa-notice-logo" src="%s">', PREMIUM_ADDONS_URL .'admin/images/premium-addons-logo.png' );
360
+
361
+ $message .= sprintf( '<strong>%s</strong>' , __( 'Now, you can disable Elementor editor & Premium Addons translation with this handy plugin.&nbsp;', 'premium-addons-for-elementor' ) );
362
+
363
+ $message .= sprintf( '<a class="pa-notice-cta" href="%s" target="_blank">%s</a>', $install_url , __( 'Click Here to Install', 'premium-addons-for-elementor' ) );
364
+
365
+ $message .= sprintf( __('<a class="pa-notice-close" href="%s"><span class="dashicons dashicons-dismiss"></span></a></p>', 'premium-addons-for-elementor'), $optout_url );
366
+
367
+ $this->render_admin_notices( $message );
368
+
369
+ }
370
 
371
 
372
  /**
admin/includes/version-control.php CHANGED
@@ -46,7 +46,7 @@ class Version_Control {
46
  $js_info = array(
47
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
48
  'nonce' => wp_create_nonce( 'pa-version-control' ),
49
- );
50
 
51
  wp_localize_script( 'pa-admin-js', 'settings', $js_info );
52
 
@@ -92,7 +92,7 @@ class Version_Control {
92
  <tr class="pa-roll-row">
93
  <th><?php echo __('Rollback Version', 'premium-addons-for-elementor'); ?></th>
94
  <td>
95
- <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.7.7', 'premium-addons-for-elementor') ); ?></div>
96
  <p class="pa-roll-desc">
97
  <span><?php echo __('Warning: Please backup your database before making the rollback.', 'premium-addons-for-elementor'); ?></span>
98
  </p>
46
  $js_info = array(
47
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
48
  'nonce' => wp_create_nonce( 'pa-version-control' ),
49
+ );
50
 
51
  wp_localize_script( 'pa-admin-js', 'settings', $js_info );
52
 
92
  <tr class="pa-roll-row">
93
  <th><?php echo __('Rollback Version', 'premium-addons-for-elementor'); ?></th>
94
  <td>
95
+ <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.7.8', 'premium-addons-for-elementor') ); ?></div>
96
  <p class="pa-roll-desc">
97
  <span><?php echo __('Warning: Please backup your database before making the rollback.', 'premium-addons-for-elementor'); ?></span>
98
  </p>
assets/frontend/css/premium-addons.css CHANGED
@@ -7,6 +7,9 @@
7
  }
8
  /**************** Premium Banner ****************/
9
  /************************************************/
 
 
 
10
  .premium-banner-ib, .premium-banner-ib img {
11
  display: block;
12
  position: relative;
@@ -30,7 +33,7 @@
30
  background: #3085a3;
31
  text-align: center;
32
  /* cursor: pointer;
33
- */
34
  -webkit-box-sizing: border-box;
35
  -moz-box-sizing: border-box;
36
  box-sizing: border-box;
@@ -322,7 +325,7 @@
322
  -webkit-transform: translate3d(0, 0, 0);
323
  transform: translate3d(0, 0, 0);
324
  }
325
- */
326
  .premium-banner-animation4:hover .premium-banner-ib-desc::after, .premium-banner-animation4.active .premium-banner-ib-desc::after, .premium-banner-animation4:hover .premium-banner-ib-desc::before, .premium-banner-animation4.active .premium-banner-ib-desc::before {
327
  opacity: 1;
328
  -webkit-transform: scale(1);
@@ -703,6 +706,10 @@
703
  /**************** Premium Carousel **************/
704
  /************************************************/
705
  .premium-carousel-wrapper a.carousel-arrow, .premium-carousel-wrapper a.ver-carousel-arrow, .premium-fb-rev-container a.carousel-arrow, .premium-fb-rev-container a.ver-carousel-arrow, .premium-blog-wrap a.carousel-arrow, .premium-blog-wrap a.ver-carousel-arrow {
 
 
 
 
706
  display: flex;
707
  align-items: center;
708
  justify-content: center;
@@ -718,7 +725,11 @@
718
  -o-transition: all 0.3s ease-in-out;
719
  transition: all 0.3s ease-in-out;
720
  -webkit-appearance: inherit;
 
721
  box-shadow: none;
 
 
 
722
  }
723
  .ver-carousel-arrow.carousel-next i{
724
  margin-bottom: -3px;
@@ -1068,7 +1079,7 @@
1068
  padding: 0;
1069
  line-height: 1.42857143;
1070
  /* clear: none;
1071
- */
1072
  padding: 0;
1073
  margin: 0;
1074
  }
@@ -1129,7 +1140,7 @@
1129
  /*.premium-modal-box-close-button-container {
1130
  float: right;
1131
  }
1132
- */
1133
  .premium-modal-box-modal-close {
1134
  position: relative;
1135
  z-index: 99;
@@ -1144,9 +1155,9 @@
1144
  /* prevent Scroll on body */
1145
  .premium-modal-open {
1146
  /* overflow: hidden;
1147
- */
1148
  /* height: 100vh;
1149
- */
1150
  }
1151
  @media (min-width:768px) {
1152
  .premium-modal-box-modal-dialog {
@@ -1158,7 +1169,7 @@
1158
  -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
1159
  box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
1160
  }
1161
- */
1162
  }
1163
  @media (max-width:767px) {
1164
  .premium-modal-box-modal-dialog {
@@ -2108,13 +2119,13 @@
2108
  font-size: 18px;
2109
  margin: 0 5px;
2110
  }
2111
- .elementor-widget-premium-addon-person .elementor-widget-container {
2112
- display: -ms-flexbox;
2113
- display: -webkit-flex;
2114
- display: -moz-flex;
2115
- display: -ms-flex;
2116
- display: flex;
2117
- justify-content: center;
2118
  }
2119
  /**************** Premium Dual Header ******************/
2120
  /*******************************************************/
@@ -3059,8 +3070,7 @@
3059
  -o-transition: all 0.3s ease-in-out, opacity 0.5s ease-in-out 0.6s;
3060
  transition: all 0.3s ease-in-out, opacity 0.5s ease-in-out 0.6s;
3061
  }
3062
- .pa-gallery-img:hover .pa-gallery-magnific-image span, .pa-gallery-img:hover .pa-gallery-img-link span,
3063
- .premium-gallery-icon-show a.pa-gallery-video-icon span {
3064
  opacity: 1;
3065
  }
3066
  .premium-img-gallery-filter .premium-gallery-cats-container, .premium-blog-filter .premium-blog-cats-container {
@@ -3211,7 +3221,7 @@
3211
  }
3212
  .premium-img-gallery .premium-gallery-item-hidden {
3213
  /* display: none;
3214
- */
3215
  visibility: hidden;
3216
  width: 0 !important;
3217
  height: 0 !important;
@@ -3264,15 +3274,12 @@
3264
  width: 20px;
3265
  height: 20px;
3266
  }
3267
- /**
3268
- * Video
3269
- */
3270
- .pa-gallery-img .pa-gallery-lightbox-wrap {
3271
- display: inline-block;
3272
  }
3273
- .premium-img-gallery-no-lightbox .premium-gallery-video-item .pa-gallery-img,
3274
- .pa-gallery-img .pa-gallery-video-icon {
3275
- cursor: pointer;
3276
  }
3277
  .pa-gallery-img-container iframe, .pa-gallery-img-container video {
3278
  position: absolute;
@@ -3311,7 +3318,7 @@
3311
  .premium-vscroll-inner {
3312
  position: relative;
3313
  /* overflow: hidden;
3314
- */
3315
  min-height: 100%;
3316
  }
3317
  .premium-vscroll-inner .premium-vscroll-dots {
@@ -3510,32 +3517,8 @@
3510
  .premium-vscroll-nav-menu .premium-vscroll-nav-item .premium-vscroll-nav-link:focus, .multiscroll-nav li a:focus{
3511
  outline:none
3512
  }
3513
- /* * Scroller */
3514
- #scroller {
3515
- /* position: absolute;
3516
- */
3517
- /* z-index: 1;
3518
- -webkit-tap-highlight-color: rgba(0,0,0,0);
3519
- width: 100%;
3520
- -webkit-transform: translateZ(0);
3521
- -moz-transform: translateZ(0);
3522
- -ms-transform: translateZ(0);
3523
- -o-transform: translateZ(0);
3524
- transform: translateZ(0);
3525
- -webkit-touch-callout: none;
3526
- -webkit-user-select: none;
3527
- -moz-user-select: none;
3528
- -ms-user-select: none;
3529
- user-select: none;
3530
- -webkit-text-size-adjust: none;
3531
- -moz-text-size-adjust: none;
3532
- -ms-text-size-adjust: none;
3533
- -o-text-size-adjust: none;
3534
- text-size-adjust: none;
3535
- */
3536
- }
3537
- .premium-vscroll-temp .slimScrollBar {
3538
- visibility: hidden;
3539
  }
3540
  /************ Premium Image Scroll ***************/
3541
  /*************************************************/
@@ -3596,6 +3579,10 @@
3596
  -webkit-transform: translate(-50%, -50%);
3597
  -ms-transform: translate(-50%, -50%);
3598
  transform: translate(-50%, -50%);
 
 
 
 
3599
  }
3600
  .premium-image-scroll-container img {
3601
  -webkit-transition: transform 3s ease-in-out;
@@ -3666,3 +3653,4 @@
3666
  transform:translateX(5px);
3667
  }
3668
  }
 
7
  }
8
  /**************** Premium Banner ****************/
9
  /************************************************/
10
+ .premium-banner {
11
+ overflow: hidden;
12
+ }
13
  .premium-banner-ib, .premium-banner-ib img {
14
  display: block;
15
  position: relative;
33
  background: #3085a3;
34
  text-align: center;
35
  /* cursor: pointer;
36
+ */
37
  -webkit-box-sizing: border-box;
38
  -moz-box-sizing: border-box;
39
  box-sizing: border-box;
325
  -webkit-transform: translate3d(0, 0, 0);
326
  transform: translate3d(0, 0, 0);
327
  }
328
+ */
329
  .premium-banner-animation4:hover .premium-banner-ib-desc::after, .premium-banner-animation4.active .premium-banner-ib-desc::after, .premium-banner-animation4:hover .premium-banner-ib-desc::before, .premium-banner-animation4.active .premium-banner-ib-desc::before {
330
  opacity: 1;
331
  -webkit-transform: scale(1);
706
  /**************** Premium Carousel **************/
707
  /************************************************/
708
  .premium-carousel-wrapper a.carousel-arrow, .premium-carousel-wrapper a.ver-carousel-arrow, .premium-fb-rev-container a.carousel-arrow, .premium-fb-rev-container a.ver-carousel-arrow, .premium-blog-wrap a.carousel-arrow, .premium-blog-wrap a.ver-carousel-arrow {
709
+ display: -ms-flexbox;
710
+ display: -webkit-flex;
711
+ display: -moz-flex;
712
+ display: -ms-flex;
713
  display: flex;
714
  align-items: center;
715
  justify-content: center;
725
  -o-transition: all 0.3s ease-in-out;
726
  transition: all 0.3s ease-in-out;
727
  -webkit-appearance: inherit;
728
+ border: none;
729
  box-shadow: none;
730
+ }
731
+ div[class^="premium-"] .slick-arrow i {
732
+ display: block;
733
  }
734
  .ver-carousel-arrow.carousel-next i{
735
  margin-bottom: -3px;
1079
  padding: 0;
1080
  line-height: 1.42857143;
1081
  /* clear: none;
1082
+ */
1083
  padding: 0;
1084
  margin: 0;
1085
  }
1140
  /*.premium-modal-box-close-button-container {
1141
  float: right;
1142
  }
1143
+ */
1144
  .premium-modal-box-modal-close {
1145
  position: relative;
1146
  z-index: 99;
1155
  /* prevent Scroll on body */
1156
  .premium-modal-open {
1157
  /* overflow: hidden;
1158
+ */
1159
  /* height: 100vh;
1160
+ */
1161
  }
1162
  @media (min-width:768px) {
1163
  .premium-modal-box-modal-dialog {
1169
  -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
1170
  box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
1171
  }
1172
+ */
1173
  }
1174
  @media (max-width:767px) {
1175
  .premium-modal-box-modal-dialog {
2119
  font-size: 18px;
2120
  margin: 0 5px;
2121
  }
2122
+ .elementor-widget-premium-addon-person .elementor-widget-container {
2123
+ display: -ms-flexbox;
2124
+ display: -webkit-flex;
2125
+ display: -moz-flex;
2126
+ display: -ms-flex;
2127
+ display: flex;
2128
+ justify-content: center;
2129
  }
2130
  /**************** Premium Dual Header ******************/
2131
  /*******************************************************/
3070
  -o-transition: all 0.3s ease-in-out, opacity 0.5s ease-in-out 0.6s;
3071
  transition: all 0.3s ease-in-out, opacity 0.5s ease-in-out 0.6s;
3072
  }
3073
+ .pa-gallery-img:hover .pa-gallery-magnific-image span, .pa-gallery-img:hover .pa-gallery-img-link span, .premium-gallery-icon-show a.pa-gallery-video-icon span {
 
3074
  opacity: 1;
3075
  }
3076
  .premium-img-gallery-filter .premium-gallery-cats-container, .premium-blog-filter .premium-blog-cats-container {
3221
  }
3222
  .premium-img-gallery .premium-gallery-item-hidden {
3223
  /* display: none;
3224
+ */
3225
  visibility: hidden;
3226
  width: 0 !important;
3227
  height: 0 !important;
3274
  width: 20px;
3275
  height: 20px;
3276
  }
3277
+ /** * Video */
3278
+ .pa-gallery-img .pa-gallery-lightbox-wrap {
3279
+ display: inline-block;
 
 
3280
  }
3281
+ .premium-img-gallery-no-lightbox .premium-gallery-video-item .pa-gallery-img, .pa-gallery-img .pa-gallery-video-icon {
3282
+ cursor: pointer;
 
3283
  }
3284
  .pa-gallery-img-container iframe, .pa-gallery-img-container video {
3285
  position: absolute;
3318
  .premium-vscroll-inner {
3319
  position: relative;
3320
  /* overflow: hidden;
3321
+ */
3322
  min-height: 100%;
3323
  }
3324
  .premium-vscroll-inner .premium-vscroll-dots {
3517
  .premium-vscroll-nav-menu .premium-vscroll-nav-item .premium-vscroll-nav-link:focus, .multiscroll-nav li a:focus{
3518
  outline:none
3519
  }
3520
+ .premium-vscroll-temp .slimScrollBar {
3521
+ visibility: hidden;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3522
  }
3523
  /************ Premium Image Scroll ***************/
3524
  /*************************************************/
3579
  -webkit-transform: translate(-50%, -50%);
3580
  -ms-transform: translate(-50%, -50%);
3581
  transform: translate(-50%, -50%);
3582
+ }
3583
+ .premium-container-scroll-instant .premium-image-scroll-image {
3584
+ -webkit-transition: all 0s ease-in-out !important;
3585
+ transition: all 0s ease-in-out !important;
3586
  }
3587
  .premium-image-scroll-container img {
3588
  -webkit-transition: transform 3s ease-in-out;
3653
  transform:translateX(5px);
3654
  }
3655
  }
3656
+
assets/frontend/js/premium-addons.js CHANGED
@@ -1,9 +1,9 @@
1
- (function ($) {
2
  /****** Premium Progress Bar Handler ******/
3
- var PremiumProgressBarWidgetHandler = function ($scope, $) {
4
  var progressbarElement = $scope
5
  .find(".premium-progressbar-progress-bar")
6
- .each(function () {
7
  var settings = $(this).data("settings"),
8
  length = settings["progress_length"],
9
  speed = settings["speed"];
@@ -13,10 +13,10 @@
13
  };
14
 
15
  /****** Premium Progress Bar Scroll Handler *****/
16
- var PremiumProgressBarScrollWidgetHandler = function ($scope, $) {
17
  elementorFrontend.waypoint(
18
  $scope,
19
- function () {
20
  PremiumProgressBarWidgetHandler($(this), $);
21
  },
22
  {
@@ -27,7 +27,7 @@
27
  };
28
 
29
  /****** Premium Video Box Handler ******/
30
- var PremiumVideoBoxWidgetHandler = function ($scope, $) {
31
  var videoBoxElement = $scope.find(".premium-video-box-container"),
32
  videoContainer = videoBoxElement.find(
33
  ".premium-video-box-video-container"
@@ -36,7 +36,7 @@
36
  video,
37
  vidSrc,
38
  checkRel;
39
- videoBoxElement.on("click", function () {
40
  if ("self" === type) {
41
  video = videoContainer.find("video");
42
  vidSrc = video.attr("src");
@@ -64,35 +64,35 @@
64
  };
65
 
66
  /****** Premium Grid Handler ******/
67
- var PremiumGridWidgetHandler = function ($scope, $) {
68
- var galleryElement = $scope.find(".premium-gallery-container"),
69
- gridSettings = galleryElement.data("settings"),
70
- layout = gridSettings["img_size"],
71
- deviceType = $("body").data("elementor-device-mode"),
72
- loadMore = gridSettings["load_more"],
73
- columnWidth = null,
74
- filter = null,
75
  isFilterClicked = false,
76
- minimum = gridSettings["minimum"],
77
- imageToShow = gridSettings["click_images"],
78
- counter = minimum,
79
- ltrMode = gridSettings["ltr_mode"],
80
- shuffle = gridSettings["shuffle"];
81
 
82
- if ( layout === "metro" ) {
83
  var suffix = "";
84
 
85
- if ( "tablet" === deviceType ) {
86
  suffix = "_tablet";
87
  } else if ("mobile" === deviceType) {
88
  suffix = "_mobile";
89
  }
90
  var gridWidth = galleryElement.width(),
91
  cellSize = Math.floor(gridWidth / 12);
92
-
93
  galleryElement
94
  .find(".premium-gallery-item")
95
- .each(function (index, item) {
96
  var cells = $(item).data("metro")["cells" + suffix],
97
  vCells = $(item).data("metro")["vcells" + suffix];
98
  if ("" == cells || undefined == cells) {
@@ -112,137 +112,139 @@
112
  }
113
 
114
  galleryElement
115
- .imagesLoaded(function () { })
116
- .done(function () {
117
  galleryElement.isotope({
118
- itemSelector: ".premium-gallery-item",
119
- percentPosition: true,
120
- animationOptions: {
121
- duration: 750,
122
- easing: "linear"
123
  },
124
- filter: gridSettings["active_cat"],
125
- layoutMode: layout,
126
- originLeft: ltrMode,
127
- masonry: {
128
  columnWidth: columnWidth
129
  },
130
- sortBy: gridSettings["sort_by"]
131
  });
132
  });
133
 
134
- if ( loadMore ) {
135
-
136
  galleryElement
137
  .parent()
138
  .find(".premium-gallery-load-more div")
139
  .addClass("premium-gallery-item-hidden");
140
-
141
- if ( galleryElement.find(".premium-gallery-item").length > minimum ) {
142
  galleryElement
143
  .parent()
144
  .find(".premium-gallery-load-more")
145
  .removeClass("premium-gallery-item-hidden");
146
  galleryElement
147
- .find(".premium-gallery-item:gt(" + ( minimum - 1 ) + ")")
148
  .addClass("premium-gallery-item-hidden");
149
 
150
- function appendItems( imagesToShow ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
 
152
- var instance = galleryElement.data('isotope');
153
-
154
- galleryElement.find(".premium-gallery-item-hidden").removeClass("premium-gallery-item-hidden");
155
-
156
- galleryElement.parent().find(".premium-gallery-load-more").removeClass("premium-gallery-item-hidden");
157
-
158
- var itemsToHide = instance.filteredItems.slice( imagesToShow, instance.filteredItems.length ).map(function( item ) {
159
- return item.element;
160
- });
161
-
162
- $( itemsToHide ).addClass("premium-gallery-item-hidden");
163
-
164
  galleryElement.isotope("layout");
165
-
166
- if( 0 == itemsToHide ) {
167
-
168
  galleryElement
169
  .parent()
170
  .find(".premium-gallery-load-more")
171
- .addClass(
172
- "premium-gallery-item-hidden"
173
- );
174
-
175
  }
176
-
177
  }
178
 
179
- galleryElement.parent().on("click", ".premium-gallery-load-more-btn", function () {
180
-
181
- if ( isFilterClicked ) {
182
- counter = minimum;
183
- isFilterClicked = false;
184
- } else {
185
- counter = counter;
186
- }
187
-
188
- counter = counter + imageToShow;
189
-
190
- $.ajax({
191
- url: appendItems( counter ),
192
- beforeSend: function () {
193
- galleryElement
194
- .parent()
195
- .find(".premium-gallery-load-more div")
196
- .removeClass("premium-gallery-item-hidden");
197
- },
198
- success: function () {
199
- galleryElement
200
- .parent()
201
- .find(".premium-gallery-load-more div")
202
- .addClass("premium-gallery-item-hidden");
203
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  });
205
- });
206
  }
207
  }
208
-
209
- if( 'yes' !== gridSettings['light_box'] ) {
210
-
211
- galleryElement.find(".premium-gallery-video-wrap").each(function (index, item) {
212
-
213
- var type = $(item).data("type");
214
-
215
- $(item).closest(".premium-gallery-item").on('click', function(){
216
-
217
- var $this = $(this);
218
-
219
- $this.find(".pa-gallery-img").css("background", "#000");
220
-
221
- $this.find("img, .pa-gallery-icons-caption-container, .pa-gallery-icons-wrapper, .premium-gallery-caption").css("visibility", "hidden");
222
 
 
 
 
 
 
223
 
224
- if( "hosted" !== type ) {
225
-
226
- var $iframe = $(item).find("iframe"),
227
- src = $iframe.attr("src");
228
-
229
- src = src.replace("&mute", "&autoplay=1&mute" );
230
- $iframe.attr("src", src);
231
- $iframe.css("visibility", "visible");
232
 
233
- } else {
234
- var $video = $(item).find("video");
235
- $video.get(0).play();
236
- $video.css("visibility", "visible");
237
- }
238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  });
240
-
241
- });
242
  }
243
-
244
 
245
- $scope.find(".premium-gallery-cats-container li a").click(function (e) {
246
  e.preventDefault();
247
 
248
  isFilterClicked = true;
@@ -257,19 +259,17 @@
257
  filter = $(this).attr("data-filter");
258
 
259
  galleryElement.isotope({ filter: filter });
260
-
261
- if ( shuffle ) {
262
- galleryElement.isotope( 'shuffle' );
263
  }
264
-
265
- if ( loadMore )
266
- appendItems( minimum );
267
 
268
  return false;
269
  });
270
 
271
-
272
- if( 'default' === gridSettings['lightbox_type'] ) {
273
  $scope
274
  .find(".premium-img-gallery a[data-rel^='prettyPhoto']")
275
  .prettyPhoto({
@@ -283,14 +283,14 @@
283
  default_width: 900,
284
  default_height: 506,
285
  social_tools: ""
286
- });
287
  }
288
  };
289
 
290
  /****** Premium Counter Handler ******/
291
- var PremiumCounterHandler = function ($scope, $) {
292
  var counterElement = $scope.find(".premium-counter");
293
- elementorFrontend.waypoint(counterElement, function () {
294
  var counterSettings = counterElement.data(),
295
  incrementElement = counterElement.find(".premium-counter-init"),
296
  iconElement = counterElement.find(".icon");
@@ -302,7 +302,7 @@
302
  };
303
 
304
  /****** Premium Fancy Text Handler ******/
305
- var PremiumFancyTextHandler = function ($scope, $) {
306
  var fancyTextElement = $scope.find(".premium-fancy-text-wrapper");
307
  var fancyTextSettings = fancyTextElement.data("settings");
308
  function escapeHtml(unsafe) {
@@ -315,7 +315,7 @@
315
  }
316
  if (fancyTextSettings["effect"] === "typing") {
317
  var fancyStrings = [];
318
- fancyTextSettings["strings"].forEach(function (item) {
319
  fancyStrings.push(escapeHtml(item));
320
  });
321
  fancyTextElement.find(".premium-fancy-text").typed({
@@ -340,10 +340,10 @@
340
  };
341
 
342
  /****** Premium Countdown Handler ******/
343
- var PremiumCountDownHandler = function ($scope, $) {
344
  var countDownElement = $scope
345
  .find(".premium-countdown")
346
- .each(function () {
347
  var countDownSettings = $(this).data("settings");
348
 
349
  var label1 = countDownSettings["label1"],
@@ -360,10 +360,10 @@
360
  until: new Date(countDownSettings["until"]),
361
  format: countDownSettings["format"],
362
  padZeroes: true,
363
- onExpiry: function () {
364
  $(this).html(countDownSettings["text"]);
365
  },
366
- serverSync: function () {
367
  return new Date(
368
  countDownSettings["serverSync"]
369
  );
@@ -379,7 +379,7 @@
379
  format: countDownSettings["format"],
380
  padZeroes: true,
381
  expiryUrl: countDownSettings["text"],
382
- serverSync: function () {
383
  return new Date(
384
  countDownSettings["serverSync"]
385
  );
@@ -415,228 +415,229 @@
415
  };
416
 
417
  /****** Premium Carousel Handler ******/
418
- var PremiumCarouselHandler = function ($scope, $) {
419
-
420
- var carouselElement = $scope.find(".premium-carousel-wrapper"),
421
- carouselSettings = $( carouselElement ).data("settings"),
422
- isEdit = elementorFrontend.isEditMode();
423
-
424
- function slideToShow( slick ) {
425
 
426
- var slidesToShow = slick.options.slidesToShow,
427
- windowWidth = $( window ).width();
 
428
 
429
- if ( windowWidth > carouselSettings["tabletBreak"] ) {
430
- slidesToShow = carouselSettings["slidesDesk"];
431
- }
432
-
433
- if ( windowWidth <= carouselSettings["tabletBreak"] ) {
434
- slidesToShow = carouselSettings["slidesTab"];
435
- }
436
 
437
- if ( windowWidth <= carouselSettings["mobileBreak"] ) {
438
- slidesToShow = carouselSettings["slidesMob"];
439
- }
440
 
441
- return slidesToShow;
 
442
  }
443
 
444
- if ( isEdit ) {
445
- carouselElement.find(".item-wrapper").each(function ( index, slide ) {
446
-
447
- var templateID = $(slide).data("template");
448
 
449
- if (undefined !== templateID) {
450
- $.ajax({
451
- type: "GET",
452
- url: PremiumSettings.ajaxurl,
453
- dataType: "html",
454
- data: {
455
- action:
456
- "get_elementor_template_content",
457
- templateID: templateID
458
- }
459
- }).success(function (response) {
460
- var data = JSON.parse(response).data;
461
 
462
- if (undefined !== data.template_content) {
463
- $(slide).html(data.template_content);
 
 
 
 
 
 
 
 
 
464
 
465
- carouselElement.find(".premium-carousel-inner").slick("refresh");
466
- }
467
- });
468
- }
469
- });
470
 
471
- }
 
 
 
 
 
 
 
472
 
473
- carouselElement.on("init", function (event) {
474
- event.preventDefault();
475
 
476
- $(this).find("item-wrapper.slick-active").each(function () {
477
- var $this = $( this );
 
 
478
  $this.addClass($this.data("animation"));
479
  });
480
 
481
- $(".slick-track").addClass("translate");
482
- });
483
 
484
- carouselElement.find(".premium-carousel-inner").slick({
485
- vertical: carouselSettings["vertical"],
486
- slidesToScroll: carouselSettings["slidesToScroll"],
487
- slidesToShow: carouselSettings["slidesToShow"],
488
- responsive: [
489
- {
490
- breakpoint: carouselSettings["tabletBreak"],
491
- settings: {
492
- slidesToShow: carouselSettings["slidesTab"],
493
- slidesToScroll: carouselSettings["slidesTab"]
494
- }
495
- },
496
- {
497
- breakpoint: carouselSettings["mobileBreak"],
498
- settings: {
499
- slidesToShow: carouselSettings["slidesMob"],
500
- slidesToScroll: carouselSettings["slidesMob"]
501
- }
502
  }
503
- ],
504
- useTransform: true,
505
- fade: carouselSettings["fade"],
506
- infinite: carouselSettings["infinite"],
507
- speed: carouselSettings["speed"],
508
- autoplay: carouselSettings["autoplay"],
509
- autoplaySpeed: carouselSettings["autoplaySpeed"],
510
- draggable: carouselSettings["draggable"],
511
- touchMove: carouselSettings["touchMove"],
512
- rtl: carouselSettings["rtl"],
513
- adaptiveHeight: carouselSettings["adaptiveHeight"],
514
- pauseOnHover: carouselSettings["pauseOnHover"],
515
- centerMode: carouselSettings["centerMode"],
516
- centerPadding: carouselSettings["centerPadding"],
517
- arrows: carouselSettings["arrows"],
518
- nextArrow: carouselSettings["nextArrow"],
519
- prevArrow: carouselSettings["prevArrow"],
520
- dots: carouselSettings["dots"],
521
- customPaging: function () {
522
- return (
523
- '<i class="' +
524
- carouselSettings["customPaging"] +
525
- '"></i>'
526
- );
527
  }
528
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
529
 
530
- carouselElement.on("afterChange", function ( event, slick, currentSlide ) {
531
-
532
- var slidesScrolled = slick.options.slidesToScroll,
533
- slidesToShow = slideToShow( slick ),
534
- centerMode = slick.options.centerMode,
535
- slideToAnimate = currentSlide + slidesToShow - 1;
536
-
537
- if (slidesScrolled === 1) {
538
- if ( ! centerMode === true ) {
539
- var $inViewPort = $(this).find( "[data-slick-index='" + slideToAnimate + "']" );
540
-
541
- if ( "null" != carouselSettings["animation"] ) {
542
- $inViewPort.find( "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button").addClass(carouselSettings["animation"]).removeClass("premium-carousel-content-hidden");
543
- }
 
 
 
 
 
544
  }
545
- } else {
546
- for (
547
- var i = slidesScrolled + currentSlide;
548
- i >= 0;
549
- i--
550
- ) {
551
- $inViewPort = $(this).find(
552
- "[data-slick-index='" + i + "']"
553
- );
554
- if ( "null" != carouselSettings["animation"] ) {
555
- $inViewPort
556
- .find(
557
- "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button"
558
- )
559
- .addClass(carouselSettings["animation"])
560
- .removeClass(
561
- "premium-carousel-content-hidden"
562
- );
563
- }
564
  }
565
  }
566
- });
 
 
 
 
 
 
 
 
 
 
567
 
568
- carouselElement.on("beforeChange", function ( event, slick, currentSlide ) {
569
- var $inViewPort = $(this).find( "[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
-
582
- if ( carouselSettings["vertical"] ) {
583
 
 
584
  var maxHeight = -1;
585
 
586
- carouselElement.find(".slick-slide").each(function () {
587
-
588
- if ( $( this ).height() > maxHeight ) {
589
-
590
- maxHeight = $( this ).height();
591
-
592
  }
593
  });
594
 
595
- carouselElement.find(".slick-slide").each(function () {
596
- if ( $( this ).height() < maxHeight ) {
597
- $(this).css( "margin", Math.ceil(( maxHeight - $( this ).height() ) / 2 ) + "px 0" );
 
 
 
598
  }
599
  });
600
  }
601
-
602
  var marginFix = {
603
- element: $( "a.ver-carousel-arrow" ),
604
- getWidth: function () {
605
- var width = this.element.outerWidth();
606
-
607
- return width / 2;
608
  },
609
- setWidth: function ( type ) {
610
-
611
  type = type || "vertical";
612
-
613
- if ( type == "vertical" ) {
614
-
615
- this.element.css( "margin-left", "-" + this.getWidth() + "px" );
616
-
 
617
  } else {
618
-
619
- this.element.css( "margin-top", "-" + this.getWidth() + "px" );
620
-
 
621
  }
622
  }
623
  };
624
-
625
  marginFix.setWidth();
626
- marginFix.element = $( "a.carousel-arrow" );
627
- marginFix.setWidth( "horizontal" );
628
  };
629
 
630
  /****** Premium Banner Handler ******/
631
- var PremiumBannerHandler = function ($scope, $) {
632
  var bannerElement = $scope.find(".premium-banner");
633
  bannerElement.find(".premium-banner-ib").hover(
634
- function () {
635
  $(this)
636
  .find(".premium-banner-ib-img")
637
  .addClass("active");
638
  },
639
- function () {
640
  $(this)
641
  .find(".premium-banner-ib-img")
642
  .removeClass("active");
@@ -645,14 +646,14 @@
645
  };
646
 
647
  /****** Premium Modal Box Handler ******/
648
- var PremiumModalBoxHandler = function ($scope, $) {
649
  var modalBoxElement = $scope.find(".premium-modal-box-container"),
650
  modalBoxSettings = modalBoxElement.data("settings");
651
 
652
  if (modalBoxElement.length > 0) {
653
  if (modalBoxSettings["trigger"] === "pageload") {
654
- $(document).ready(function ($) {
655
- setTimeout(function () {
656
  modalBoxElement
657
  .find(".premium-modal-box-modal")
658
  .modal();
@@ -663,13 +664,13 @@
663
  };
664
 
665
  /****** Premium Blog Handler ******/
666
- var PremiumBlogHandler = function ($scope, $) {
667
  var blogElement = $scope.find(".premium-blog-wrap"),
668
- colsNumber = blogElement.data("col"),
669
- carousel = blogElement.data("carousel"),
670
- grid = blogElement.data("grid");
671
-
672
- $scope.find(".premium-blog-cats-container li a").click(function (e) {
673
  e.preventDefault();
674
 
675
  $scope
@@ -679,16 +680,16 @@
679
  $(this).addClass("active");
680
 
681
  var selector = $(this).attr("data-filter");
682
-
683
  blogElement.isotope({ filter: selector });
684
 
685
  return false;
686
  });
687
-
688
- var masonryBlog = blogElement.hasClass( "premium-blog-masonry" );
689
 
690
- if ( masonryBlog && ! carousel ) {
691
- blogElement.imagesLoaded( function () {
 
 
692
  blogElement.isotope({
693
  itemSelector: ".premium-blog-post-outer-container",
694
  percentPosition: true,
@@ -701,28 +702,29 @@
701
  });
702
  }
703
 
704
- if ( carousel && grid ) {
705
-
706
- var autoPlay = blogElement.data("play"),
707
- speed = blogElement.data("speed"),
708
- fade = blogElement.data("fade"),
709
- arrows = blogElement.data("arrows"),
710
- dots = blogElement.data("dots"),
711
- prevArrow = null,
712
- nextArrow = null;
713
-
714
- if ( arrows ) {
715
- prevArrow = '<a type="button" data-role="none" class="carousel-arrow carousel-prev" aria-label="Next" role="button" style=""><i class="fas fa-angle-left" aria-hidden="true"></i></a>',
716
- nextArrow = '<a type="button" data-role="none" class="carousel-arrow carousel-next" aria-label="Next" role="button" style=""><i class="fas fa-angle-right" aria-hidden="true"></i></a>';
 
717
  } else {
718
- prevArrow = prevArrow = '';
719
  }
720
-
721
- $( blogElement ).slick({
722
- infinite: true,
723
- slidesToShow: colsNumber,
724
  slidesToScroll: colsNumber,
725
- responsive: [
726
  {
727
  breakpoint: 769,
728
  settings: {
@@ -738,24 +740,22 @@
738
  }
739
  }
740
  ],
741
- autoplay: autoPlay,
742
- autoplaySpeed: speed,
743
- nextArrow: nextArrow,
744
- prevArrow: prevArrow,
745
- fade: fade,
746
- draggable: true,
747
- dots: dots,
748
- customPaging: function () {
749
- return (
750
- '<i class="fas fa-circle"></i>'
751
- );
752
  }
753
  });
754
  }
755
  };
756
 
757
  /****** Premium Image Scroll ******/
758
- var PremiumImageScrollHandler = function ($scope, $) {
759
  var scrollElement = $scope.find(".premium-image-scroll-container"),
760
  scrollOverlay = scrollElement.find(".premium-image-scroll-overlay"),
761
  scrollVertical = scrollElement.find(
@@ -771,9 +771,9 @@
771
  imageScroll.css(
772
  "transform",
773
  (direction === "vertical" ? "translateY" : "translateX") +
774
- "( -" +
775
- transformOffset +
776
- "px)"
777
  );
778
  }
779
 
@@ -781,7 +781,7 @@
781
  imageScroll.css(
782
  "transform",
783
  (direction === "vertical" ? "translateY" : "translateX") +
784
- "(0px)"
785
  );
786
  }
787
 
@@ -798,7 +798,7 @@
798
  if (direction === "vertical") {
799
  scrollVertical.addClass("premium-image-scroll-ver");
800
  } else {
801
- scrollElement.imagesLoaded(function () {
802
  scrollOverlay.css({
803
  width: imageScroll.width(),
804
  height: imageScroll.height()
@@ -807,7 +807,7 @@
807
  }
808
  } else {
809
  if (reverse === "yes") {
810
- scrollElement.imagesLoaded(function () {
811
  scrollElement.addClass("premium-container-scroll-instant");
812
  setTransform();
813
  startTransform();
@@ -816,20 +816,35 @@
816
  if (direction === "vertical") {
817
  scrollVertical.removeClass("premium-image-scroll-ver");
818
  }
819
- scrollElement.mouseenter(function () {
820
  scrollElement.removeClass("premium-container-scroll-instant");
821
  setTransform();
822
  reverse === "yes" ? endTransform() : startTransform();
823
  });
824
 
825
- scrollElement.mouseleave(function () {
826
  reverse === "yes" ? startTransform() : endTransform();
827
  });
828
  }
829
  };
830
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
831
  //Elementor JS Hooks
832
- $(window).on("elementor/frontend/init", function () {
833
  elementorFrontend.hooks.addAction(
834
  "frontend/element_ready/premium-addon-video-box.default",
835
  PremiumVideoBoxWidgetHandler
@@ -870,6 +885,11 @@
870
  "frontend/element_ready/premium-image-scroll.default",
871
  PremiumImageScrollHandler
872
  );
 
 
 
 
 
873
  if (elementorFrontend.isEditMode()) {
874
  elementorFrontend.hooks.addAction(
875
  "frontend/element_ready/premium-addon-progressbar.default",
1
+ (function($) {
2
  /****** Premium Progress Bar Handler ******/
3
+ var PremiumProgressBarWidgetHandler = function($scope, $) {
4
  var progressbarElement = $scope
5
  .find(".premium-progressbar-progress-bar")
6
+ .each(function() {
7
  var settings = $(this).data("settings"),
8
  length = settings["progress_length"],
9
  speed = settings["speed"];
13
  };
14
 
15
  /****** Premium Progress Bar Scroll Handler *****/
16
+ var PremiumProgressBarScrollWidgetHandler = function($scope, $) {
17
  elementorFrontend.waypoint(
18
  $scope,
19
+ function() {
20
  PremiumProgressBarWidgetHandler($(this), $);
21
  },
22
  {
27
  };
28
 
29
  /****** Premium Video Box Handler ******/
30
+ var PremiumVideoBoxWidgetHandler = function($scope, $) {
31
  var videoBoxElement = $scope.find(".premium-video-box-container"),
32
  videoContainer = videoBoxElement.find(
33
  ".premium-video-box-video-container"
36
  video,
37
  vidSrc,
38
  checkRel;
39
+ videoBoxElement.on("click", function() {
40
  if ("self" === type) {
41
  video = videoContainer.find("video");
42
  vidSrc = video.attr("src");
64
  };
65
 
66
  /****** Premium Grid Handler ******/
67
+ var PremiumGridWidgetHandler = function($scope, $) {
68
+ var galleryElement = $scope.find(".premium-gallery-container"),
69
+ gridSettings = galleryElement.data("settings"),
70
+ layout = gridSettings["img_size"],
71
+ deviceType = $("body").data("elementor-device-mode"),
72
+ loadMore = gridSettings["load_more"],
73
+ columnWidth = null,
74
+ filter = null,
75
  isFilterClicked = false,
76
+ minimum = gridSettings["minimum"],
77
+ imageToShow = gridSettings["click_images"],
78
+ counter = minimum,
79
+ ltrMode = gridSettings["ltr_mode"],
80
+ shuffle = gridSettings["shuffle"];
81
 
82
+ if (layout === "metro") {
83
  var suffix = "";
84
 
85
+ if ("tablet" === deviceType) {
86
  suffix = "_tablet";
87
  } else if ("mobile" === deviceType) {
88
  suffix = "_mobile";
89
  }
90
  var gridWidth = galleryElement.width(),
91
  cellSize = Math.floor(gridWidth / 12);
92
+
93
  galleryElement
94
  .find(".premium-gallery-item")
95
+ .each(function(index, item) {
96
  var cells = $(item).data("metro")["cells" + suffix],
97
  vCells = $(item).data("metro")["vcells" + suffix];
98
  if ("" == cells || undefined == cells) {
112
  }
113
 
114
  galleryElement
115
+ .imagesLoaded(function() {})
116
+ .done(function() {
117
  galleryElement.isotope({
118
+ itemSelector: ".premium-gallery-item",
119
+ percentPosition: true,
120
+ animationOptions: {
121
+ duration: 750,
122
+ easing: "linear"
123
  },
124
+ filter: gridSettings["active_cat"],
125
+ layoutMode: layout,
126
+ originLeft: ltrMode,
127
+ masonry: {
128
  columnWidth: columnWidth
129
  },
130
+ sortBy: gridSettings["sort_by"]
131
  });
132
  });
133
 
134
+ if (loadMore) {
 
135
  galleryElement
136
  .parent()
137
  .find(".premium-gallery-load-more div")
138
  .addClass("premium-gallery-item-hidden");
139
+
140
+ if (galleryElement.find(".premium-gallery-item").length > minimum) {
141
  galleryElement
142
  .parent()
143
  .find(".premium-gallery-load-more")
144
  .removeClass("premium-gallery-item-hidden");
145
  galleryElement
146
+ .find(".premium-gallery-item:gt(" + (minimum - 1) + ")")
147
  .addClass("premium-gallery-item-hidden");
148
 
149
+ function appendItems(imagesToShow) {
150
+ var instance = galleryElement.data("isotope");
151
+
152
+ galleryElement
153
+ .find(".premium-gallery-item-hidden")
154
+ .removeClass("premium-gallery-item-hidden");
155
+
156
+ galleryElement
157
+ .parent()
158
+ .find(".premium-gallery-load-more")
159
+ .removeClass("premium-gallery-item-hidden");
160
+
161
+ var itemsToHide = instance.filteredItems
162
+ .slice(imagesToShow, instance.filteredItems.length)
163
+ .map(function(item) {
164
+ return item.element;
165
+ });
166
+
167
+ $(itemsToHide).addClass("premium-gallery-item-hidden");
168
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  galleryElement.isotope("layout");
170
+
171
+ if (0 == itemsToHide) {
 
172
  galleryElement
173
  .parent()
174
  .find(".premium-gallery-load-more")
175
+ .addClass("premium-gallery-item-hidden");
 
 
 
176
  }
 
177
  }
178
 
179
+ galleryElement
180
+ .parent()
181
+ .on("click", ".premium-gallery-load-more-btn", function() {
182
+ if (isFilterClicked) {
183
+ counter = minimum;
184
+ isFilterClicked = false;
185
+ } else {
186
+ counter = counter;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  }
188
+
189
+ counter = counter + imageToShow;
190
+
191
+ $.ajax({
192
+ url: appendItems(counter),
193
+ beforeSend: function() {
194
+ galleryElement
195
+ .parent()
196
+ .find(".premium-gallery-load-more div")
197
+ .removeClass("premium-gallery-item-hidden");
198
+ },
199
+ success: function() {
200
+ galleryElement
201
+ .parent()
202
+ .find(".premium-gallery-load-more div")
203
+ .addClass("premium-gallery-item-hidden");
204
+ }
205
+ });
206
  });
 
207
  }
208
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
209
 
210
+ if ("yes" !== gridSettings["light_box"]) {
211
+ galleryElement
212
+ .find(".premium-gallery-video-wrap")
213
+ .each(function(index, item) {
214
+ var type = $(item).data("type");
215
 
216
+ $(item)
217
+ .closest(".premium-gallery-item")
218
+ .on("click", function() {
219
+ var $this = $(this);
 
 
 
 
220
 
221
+ $this
222
+ .find(".pa-gallery-img")
223
+ .css("background", "#000");
 
 
224
 
225
+ $this
226
+ .find(
227
+ "img, .pa-gallery-icons-caption-container, .pa-gallery-icons-wrapper, .premium-gallery-caption"
228
+ )
229
+ .css("visibility", "hidden");
230
+
231
+ if ("hosted" !== type) {
232
+ var $iframe = $(item).find("iframe"),
233
+ src = $iframe.attr("src");
234
+
235
+ src = src.replace("&mute", "&autoplay=1&mute");
236
+ $iframe.attr("src", src);
237
+ $iframe.css("visibility", "visible");
238
+ } else {
239
+ var $video = $(item).find("video");
240
+ $video.get(0).play();
241
+ $video.css("visibility", "visible");
242
+ }
243
+ });
244
  });
 
 
245
  }
 
246
 
247
+ $scope.find(".premium-gallery-cats-container li a").click(function(e) {
248
  e.preventDefault();
249
 
250
  isFilterClicked = true;
259
  filter = $(this).attr("data-filter");
260
 
261
  galleryElement.isotope({ filter: filter });
262
+
263
+ if (shuffle) {
264
+ galleryElement.isotope("shuffle");
265
  }
266
+
267
+ if (loadMore) appendItems(minimum);
 
268
 
269
  return false;
270
  });
271
 
272
+ if ("default" === gridSettings["lightbox_type"]) {
 
273
  $scope
274
  .find(".premium-img-gallery a[data-rel^='prettyPhoto']")
275
  .prettyPhoto({
283
  default_width: 900,
284
  default_height: 506,
285
  social_tools: ""
286
+ });
287
  }
288
  };
289
 
290
  /****** Premium Counter Handler ******/
291
+ var PremiumCounterHandler = function($scope, $) {
292
  var counterElement = $scope.find(".premium-counter");
293
+ elementorFrontend.waypoint(counterElement, function() {
294
  var counterSettings = counterElement.data(),
295
  incrementElement = counterElement.find(".premium-counter-init"),
296
  iconElement = counterElement.find(".icon");
302
  };
303
 
304
  /****** Premium Fancy Text Handler ******/
305
+ var PremiumFancyTextHandler = function($scope, $) {
306
  var fancyTextElement = $scope.find(".premium-fancy-text-wrapper");
307
  var fancyTextSettings = fancyTextElement.data("settings");
308
  function escapeHtml(unsafe) {
315
  }
316
  if (fancyTextSettings["effect"] === "typing") {
317
  var fancyStrings = [];
318
+ fancyTextSettings["strings"].forEach(function(item) {
319
  fancyStrings.push(escapeHtml(item));
320
  });
321
  fancyTextElement.find(".premium-fancy-text").typed({
340
  };
341
 
342
  /****** Premium Countdown Handler ******/
343
+ var PremiumCountDownHandler = function($scope, $) {
344
  var countDownElement = $scope
345
  .find(".premium-countdown")
346
+ .each(function() {
347
  var countDownSettings = $(this).data("settings");
348
 
349
  var label1 = countDownSettings["label1"],
360
  until: new Date(countDownSettings["until"]),
361
  format: countDownSettings["format"],
362
  padZeroes: true,
363
+ onExpiry: function() {
364
  $(this).html(countDownSettings["text"]);
365
  },
366
+ serverSync: function() {
367
  return new Date(
368
  countDownSettings["serverSync"]
369
  );
379
  format: countDownSettings["format"],
380
  padZeroes: true,
381
  expiryUrl: countDownSettings["text"],
382
+ serverSync: function() {
383
  return new Date(
384
  countDownSettings["serverSync"]
385
  );
415
  };
416
 
417
  /****** Premium Carousel Handler ******/
418
+ var PremiumCarouselHandler = function($scope, $) {
419
+ var carouselElement = $scope.find(".premium-carousel-wrapper"),
420
+ carouselSettings = $(carouselElement).data("settings"),
421
+ isEdit = elementorFrontend.isEditMode();
 
 
 
422
 
423
+ function slideToShow(slick) {
424
+ var slidesToShow = slick.options.slidesToShow,
425
+ windowWidth = $(window).width();
426
 
427
+ if (windowWidth > carouselSettings["tabletBreak"]) {
428
+ slidesToShow = carouselSettings["slidesDesk"];
429
+ }
 
 
 
 
430
 
431
+ if (windowWidth <= carouselSettings["tabletBreak"]) {
432
+ slidesToShow = carouselSettings["slidesTab"];
433
+ }
434
 
435
+ if (windowWidth <= carouselSettings["mobileBreak"]) {
436
+ slidesToShow = carouselSettings["slidesMob"];
437
  }
438
 
439
+ return slidesToShow;
440
+ }
 
 
441
 
442
+ if (isEdit) {
443
+ carouselElement.find(".item-wrapper").each(function(index, slide) {
444
+ var templateID = $(slide).data("template");
 
 
 
 
 
 
 
 
 
445
 
446
+ if (undefined !== templateID) {
447
+ $.ajax({
448
+ type: "GET",
449
+ url: PremiumSettings.ajaxurl,
450
+ dataType: "html",
451
+ data: {
452
+ action: "get_elementor_template_content",
453
+ templateID: templateID
454
+ }
455
+ }).success(function(response) {
456
+ var data = JSON.parse(response).data;
457
 
458
+ if (undefined !== data.template_content) {
459
+ $(slide).html(data.template_content);
 
 
 
460
 
461
+ carouselElement
462
+ .find(".premium-carousel-inner")
463
+ .slick("refresh");
464
+ }
465
+ });
466
+ }
467
+ });
468
+ }
469
 
470
+ carouselElement.on("init", function(event) {
471
+ event.preventDefault();
472
 
473
+ $(this)
474
+ .find("item-wrapper.slick-active")
475
+ .each(function() {
476
+ var $this = $(this);
477
  $this.addClass($this.data("animation"));
478
  });
479
 
480
+ $(".slick-track").addClass("translate");
481
+ });
482
 
483
+ carouselElement.find(".premium-carousel-inner").slick({
484
+ vertical: carouselSettings["vertical"],
485
+ slidesToScroll: carouselSettings["slidesToScroll"],
486
+ slidesToShow: carouselSettings["slidesToShow"],
487
+ responsive: [
488
+ {
489
+ breakpoint: carouselSettings["tabletBreak"],
490
+ settings: {
491
+ slidesToShow: carouselSettings["slidesTab"],
492
+ slidesToScroll: carouselSettings["slidesTab"]
493
+ }
494
+ },
495
+ {
496
+ breakpoint: carouselSettings["mobileBreak"],
497
+ settings: {
498
+ slidesToShow: carouselSettings["slidesMob"],
499
+ slidesToScroll: carouselSettings["slidesMob"]
 
500
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
501
  }
502
+ ],
503
+ useTransform: true,
504
+ fade: carouselSettings["fade"],
505
+ infinite: carouselSettings["infinite"],
506
+ speed: carouselSettings["speed"],
507
+ autoplay: carouselSettings["autoplay"],
508
+ autoplaySpeed: carouselSettings["autoplaySpeed"],
509
+ draggable: carouselSettings["draggable"],
510
+ touchMove: carouselSettings["touchMove"],
511
+ rtl: carouselSettings["rtl"],
512
+ adaptiveHeight: carouselSettings["adaptiveHeight"],
513
+ pauseOnHover: carouselSettings["pauseOnHover"],
514
+ centerMode: carouselSettings["centerMode"],
515
+ centerPadding: carouselSettings["centerPadding"],
516
+ arrows: carouselSettings["arrows"],
517
+ nextArrow: carouselSettings["nextArrow"],
518
+ prevArrow: carouselSettings["prevArrow"],
519
+ dots: carouselSettings["dots"],
520
+ customPaging: function() {
521
+ return (
522
+ '<i class="' + carouselSettings["customPaging"] + '"></i>'
523
+ );
524
+ }
525
+ });
526
 
527
+ carouselElement.on("afterChange", function(event, slick, currentSlide) {
528
+ var slidesScrolled = slick.options.slidesToScroll,
529
+ slidesToShow = slideToShow(slick),
530
+ centerMode = slick.options.centerMode,
531
+ slideToAnimate = currentSlide + slidesToShow - 1;
532
+
533
+ if (slidesScrolled === 1) {
534
+ if (!centerMode === true) {
535
+ var $inViewPort = $(this).find(
536
+ "[data-slick-index='" + slideToAnimate + "']"
537
+ );
538
+
539
+ if ("null" != carouselSettings["animation"]) {
540
+ $inViewPort
541
+ .find(
542
+ "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button"
543
+ )
544
+ .addClass(carouselSettings["animation"])
545
+ .removeClass("premium-carousel-content-hidden");
546
  }
547
+ }
548
+ } else {
549
+ for (var i = slidesScrolled + currentSlide; i >= 0; i--) {
550
+ $inViewPort = $(this).find(
551
+ "[data-slick-index='" + i + "']"
552
+ );
553
+ if ("null" != carouselSettings["animation"]) {
554
+ $inViewPort
555
+ .find(
556
+ "p, h1, h2, h3, h4, h5, h6, span, a, img, i, button"
557
+ )
558
+ .addClass(carouselSettings["animation"])
559
+ .removeClass("premium-carousel-content-hidden");
 
 
 
 
 
 
560
  }
561
  }
562
+ }
563
+ });
564
+
565
+ carouselElement.on("beforeChange", function(
566
+ event,
567
+ slick,
568
+ currentSlide
569
+ ) {
570
+ var $inViewPort = $(this).find(
571
+ "[data-slick-index='" + currentSlide + "']"
572
+ );
573
 
 
 
 
574
  if ("null" != carouselSettings["animation"]) {
575
  $inViewPort
576
  .siblings()
577
+ .find("p, h1, h2, h3, h4, h5, h6, span, a, img, i, button")
 
 
578
  .removeClass(carouselSettings["animation"])
579
  .addClass("premium-carousel-content-hidden");
580
  }
581
  });
 
 
582
 
583
+ if (carouselSettings["vertical"]) {
584
  var maxHeight = -1;
585
 
586
+ carouselElement.find(".slick-slide").each(function() {
587
+ if ($(this).height() > maxHeight) {
588
+ maxHeight = $(this).height();
 
 
 
589
  }
590
  });
591
 
592
+ carouselElement.find(".slick-slide").each(function() {
593
+ if ($(this).height() < maxHeight) {
594
+ $(this).css(
595
+ "margin",
596
+ Math.ceil((maxHeight - $(this).height()) / 2) + "px 0"
597
+ );
598
  }
599
  });
600
  }
601
+
602
  var marginFix = {
603
+ element: $("a.ver-carousel-arrow"),
604
+ getWidth: function() {
605
+ var width = this.element.outerWidth();
606
+
607
+ return width / 2;
608
  },
609
+ setWidth: function(type) {
 
610
  type = type || "vertical";
611
+
612
+ if (type == "vertical") {
613
+ this.element.css(
614
+ "margin-left",
615
+ "-" + this.getWidth() + "px"
616
+ );
617
  } else {
618
+ this.element.css(
619
+ "margin-top",
620
+ "-" + this.getWidth() + "px"
621
+ );
622
  }
623
  }
624
  };
625
+
626
  marginFix.setWidth();
627
+ marginFix.element = $("a.carousel-arrow");
628
+ marginFix.setWidth("horizontal");
629
  };
630
 
631
  /****** Premium Banner Handler ******/
632
+ var PremiumBannerHandler = function($scope, $) {
633
  var bannerElement = $scope.find(".premium-banner");
634
  bannerElement.find(".premium-banner-ib").hover(
635
+ function() {
636
  $(this)
637
  .find(".premium-banner-ib-img")
638
  .addClass("active");
639
  },
640
+ function() {
641
  $(this)
642
  .find(".premium-banner-ib-img")
643
  .removeClass("active");
646
  };
647
 
648
  /****** Premium Modal Box Handler ******/
649
+ var PremiumModalBoxHandler = function($scope, $) {
650
  var modalBoxElement = $scope.find(".premium-modal-box-container"),
651
  modalBoxSettings = modalBoxElement.data("settings");
652
 
653
  if (modalBoxElement.length > 0) {
654
  if (modalBoxSettings["trigger"] === "pageload") {
655
+ $(document).ready(function($) {
656
+ setTimeout(function() {
657
  modalBoxElement
658
  .find(".premium-modal-box-modal")
659
  .modal();
664
  };
665
 
666
  /****** Premium Blog Handler ******/
667
+ var PremiumBlogHandler = function($scope, $) {
668
  var blogElement = $scope.find(".premium-blog-wrap"),
669
+ colsNumber = blogElement.data("col"),
670
+ carousel = blogElement.data("carousel"),
671
+ grid = blogElement.data("grid");
672
+
673
+ $scope.find(".premium-blog-cats-container li a").click(function(e) {
674
  e.preventDefault();
675
 
676
  $scope
680
  $(this).addClass("active");
681
 
682
  var selector = $(this).attr("data-filter");
683
+
684
  blogElement.isotope({ filter: selector });
685
 
686
  return false;
687
  });
 
 
688
 
689
+ var masonryBlog = blogElement.hasClass("premium-blog-masonry");
690
+
691
+ if (masonryBlog && !carousel) {
692
+ blogElement.imagesLoaded(function() {
693
  blogElement.isotope({
694
  itemSelector: ".premium-blog-post-outer-container",
695
  percentPosition: true,
702
  });
703
  }
704
 
705
+ if (carousel && grid) {
706
+ var autoPlay = blogElement.data("play"),
707
+ speed = blogElement.data("speed"),
708
+ fade = blogElement.data("fade"),
709
+ arrows = blogElement.data("arrows"),
710
+ dots = blogElement.data("dots"),
711
+ prevArrow = null,
712
+ nextArrow = null;
713
+
714
+ if (arrows) {
715
+ (prevArrow =
716
+ '<a type="button" data-role="none" class="carousel-arrow carousel-prev" aria-label="Next" role="button" style=""><i class="fas fa-angle-left" aria-hidden="true"></i></a>'),
717
+ (nextArrow =
718
+ '<a type="button" data-role="none" class="carousel-arrow carousel-next" aria-label="Next" role="button" style=""><i class="fas fa-angle-right" aria-hidden="true"></i></a>');
719
  } else {
720
+ prevArrow = prevArrow = "";
721
  }
722
+
723
+ $(blogElement).slick({
724
+ infinite: true,
725
+ slidesToShow: colsNumber,
726
  slidesToScroll: colsNumber,
727
+ responsive: [
728
  {
729
  breakpoint: 769,
730
  settings: {
740
  }
741
  }
742
  ],
743
+ autoplay: autoPlay,
744
+ autoplaySpeed: speed,
745
+ nextArrow: nextArrow,
746
+ prevArrow: prevArrow,
747
+ fade: fade,
748
+ draggable: true,
749
+ dots: dots,
750
+ customPaging: function() {
751
+ return '<i class="fas fa-circle"></i>';
 
 
752
  }
753
  });
754
  }
755
  };
756
 
757
  /****** Premium Image Scroll ******/
758
+ var PremiumImageScrollHandler = function($scope, $) {
759
  var scrollElement = $scope.find(".premium-image-scroll-container"),
760
  scrollOverlay = scrollElement.find(".premium-image-scroll-overlay"),
761
  scrollVertical = scrollElement.find(
771
  imageScroll.css(
772
  "transform",
773
  (direction === "vertical" ? "translateY" : "translateX") +
774
+ "( -" +
775
+ transformOffset +
776
+ "px)"
777
  );
778
  }
779
 
781
  imageScroll.css(
782
  "transform",
783
  (direction === "vertical" ? "translateY" : "translateX") +
784
+ "(0px)"
785
  );
786
  }
787
 
798
  if (direction === "vertical") {
799
  scrollVertical.addClass("premium-image-scroll-ver");
800
  } else {
801
+ scrollElement.imagesLoaded(function() {
802
  scrollOverlay.css({
803
  width: imageScroll.width(),
804
  height: imageScroll.height()
807
  }
808
  } else {
809
  if (reverse === "yes") {
810
+ scrollElement.imagesLoaded(function() {
811
  scrollElement.addClass("premium-container-scroll-instant");
812
  setTransform();
813
  startTransform();
816
  if (direction === "vertical") {
817
  scrollVertical.removeClass("premium-image-scroll-ver");
818
  }
819
+ scrollElement.mouseenter(function() {
820
  scrollElement.removeClass("premium-container-scroll-instant");
821
  setTransform();
822
  reverse === "yes" ? endTransform() : startTransform();
823
  });
824
 
825
+ scrollElement.mouseleave(function() {
826
  reverse === "yes" ? startTransform() : endTransform();
827
  });
828
  }
829
  };
830
 
831
+ var PremiumContactFormHandler = function($scope, $) {
832
+ var contactForm = $scope.find(".premium-cf7-container");
833
+
834
+ var input = contactForm.find(
835
+ 'input[type="text"], input[type="email"], textarea, input[type="password"], input[type="date"], input[type="number"], input[type="tel"], input[type="file"], input[type="url"]'
836
+ );
837
+ input.wrap("<span class='wpcf7-span'>");
838
+
839
+ input.on("focus blur", function() {
840
+ $(this)
841
+ .closest(".wpcf7-span")
842
+ .toggleClass("is-focused");
843
+ });
844
+ };
845
+
846
  //Elementor JS Hooks
847
+ $(window).on("elementor/frontend/init", function() {
848
  elementorFrontend.hooks.addAction(
849
  "frontend/element_ready/premium-addon-video-box.default",
850
  PremiumVideoBoxWidgetHandler
885
  "frontend/element_ready/premium-image-scroll.default",
886
  PremiumImageScrollHandler
887
  );
888
+ elementorFrontend.hooks.addAction(
889
+ "frontend/element_ready/premium-contact-form.default",
890
+ PremiumContactFormHandler
891
+ );
892
+
893
  if (elementorFrontend.isEditMode()) {
894
  elementorFrontend.hooks.addAction(
895
  "frontend/element_ready/premium-addon-progressbar.default",
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.7.8
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.7.8');
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.7.7');
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.7.9
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.7.9');
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.7.8');
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.7.8
9
  License: GPL v3.0
10
  License URI: https://opensource.org/licenses/GPL-3.0
11
 
@@ -56,7 +56,7 @@ Each widget and addon has been tested on different screen sizes, mobile devices,
56
 
57
  ### Section Addons & Widgets
58
  * [**Vertical Scroll Widget**](https://premiumaddons.com/vertical-scroll-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create beautiful vertical scroll pages with advanced responsive control options using Premium Vertical Scroll Widget for Elementor Page Builder.
59
- * [**Color Transition Widget**](https://premiumaddons.com/elementor-color-transition-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create fancy, colorful, and eye-catching webpages using background Color Transition Widget for Elementor. It allows you to have a seamless transition between sections background colors.
60
  * [**Multi-Scroll Widget**](https://premiumaddons.com/multi-scroll-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: The only Elementor widget available that allows you to create attractive multi-scroll effect. It can be used to create full landing pages or use it inside any page.
61
  * [**Parallax Section Addon**](https://premiumaddons.com/parallax-section-addon-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: The only Elementor Parallax Section Addon with freehand design experience and many styles to choose from.
62
  * [**Particles Section Addon**](https://premiumaddons.com/particles-section-addon-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create eye-catching particles background using Elementor and Premium Addons with many customization options.
@@ -175,6 +175,18 @@ Premium Addons for Elementor is 100% Ads Free, Ads can only be detected from You
175
 
176
  == Changelog ==
177
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  = 3.7.8 =
179
 
180
  - Tweak: Added `Image Size` option in Image Scroll widget.
5
  Requires at Least: 4.5
6
  Tested Up To: 5.2.2
7
  Requires PHP: 5.4
8
+ Stable Tag: 3.7.9
9
  License: GPL v3.0
10
  License URI: https://opensource.org/licenses/GPL-3.0
11
 
56
 
57
  ### Section Addons & Widgets
58
  * [**Vertical Scroll Widget**](https://premiumaddons.com/vertical-scroll-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(FREE)*: Create beautiful vertical scroll pages with advanced responsive control options using Premium Vertical Scroll Widget for Elementor Page Builder.
59
+ * [**Background Transition Widget**](https://premiumaddons.com/elementor-background-transition-widget/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create fancy, colorful, and eye-catching webpages using background Color Transition Widget for Elementor. It allows you to have a seamless transition between sections background colors.
60
  * [**Multi-Scroll Widget**](https://premiumaddons.com/multi-scroll-widget-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: The only Elementor widget available that allows you to create attractive multi-scroll effect. It can be used to create full landing pages or use it inside any page.
61
  * [**Parallax Section Addon**](https://premiumaddons.com/parallax-section-addon-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: The only Elementor Parallax Section Addon with freehand design experience and many styles to choose from.
62
  * [**Particles Section Addon**](https://premiumaddons.com/particles-section-addon-for-elementor-page-builder/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme) *(PRO)*: Create eye-catching particles background using Elementor and Premium Addons with many customization options.
175
 
176
  == Changelog ==
177
 
178
+ = 3.7.9 =
179
+
180
+ - Tweak: Added style options for Container in Banner widget.
181
+ - Tweak: Changed `Border Radius` option from `SLIDER` to `DIMENSIONS` in Countdown widget.
182
+ - Tweak: Added `Remote Video URL` option to Media Grid and Video Box widget.
183
+ - Tweak: Added `First Category Label` option for Filter Tabs in Blog widget.
184
+ - Fixed: Image overlay does not appear with Self Hosted videos in Video Box widget.
185
+ - Fixed: `Contact Form 7` widget wraps all inputs in the page.
186
+ - Fixed: Single quote not rendered in Fancy Text widget.
187
+ - Fixed: Default border applied on navigation arrows in Carousel widget.
188
+ - Fixed: Navigation Arrows hidden by default in some themes in Carousel widget.
189
+
190
  = 3.7.8 =
191
 
192
  - Tweak: Added `Image Size` option in Image Scroll widget.
widgets/premium-banner.php CHANGED
@@ -13,6 +13,7 @@ use Elementor\Scheme_Typography;
13
  use Elementor\Group_Control_Border;
14
  use Elementor\Group_Control_Typography;
15
  use Elementor\Group_Control_Css_Filter;
 
16
  use Elementor\Group_Control_Text_Shadow;
17
 
18
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
@@ -781,6 +782,42 @@ class Premium_Banner extends Widget_Base {
781
  );
782
 
783
  $this->end_controls_section();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
784
 
785
  }
786
 
13
  use Elementor\Group_Control_Border;
14
  use Elementor\Group_Control_Typography;
15
  use Elementor\Group_Control_Css_Filter;
16
+ use Elementor\Group_Control_Box_Shadow;
17
  use Elementor\Group_Control_Text_Shadow;
18
 
19
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
782
  );
783
 
784
  $this->end_controls_section();
785
+
786
+ $this->start_controls_section('premium_banner_container_style',
787
+ [
788
+ 'label' => __( 'Container', 'premium-addons-for-elementor' ),
789
+ 'tab' => Controls_Manager::TAB_STYLE
790
+ ]
791
+ );
792
+
793
+ $this->add_group_control(
794
+ Group_Control_Border::get_type(),
795
+ [
796
+ 'name' => 'premium_banner_border',
797
+ 'selector' => '{{WRAPPER}} .premium-banner'
798
+ ]
799
+ );
800
+
801
+ $this->add_control('premium_banner_border_radius',
802
+ [
803
+ 'label' => __('Border Radius', 'premium-addons-for-elementor'),
804
+ 'type' => Controls_Manager::DIMENSIONS,
805
+ 'size_units' => ['px', '%' ,'em'],
806
+ 'selectors' => [
807
+ '{{WRAPPER}} .premium-banner' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
808
+ ]
809
+ ]
810
+ );
811
+
812
+ $this->add_group_control(
813
+ Group_Control_Box_Shadow::get_type(),
814
+ [
815
+ 'name' => 'premium_banner_shadow',
816
+ 'selector' => '{{WRAPPER}} .premium-banner',
817
+ ]
818
+ );
819
+
820
+ $this->end_controls_section();
821
 
822
  }
823
 
widgets/premium-blog.php CHANGED
@@ -480,6 +480,18 @@ class Premium_Blog extends Widget_Base {
480
  ]
481
  );
482
 
 
 
 
 
 
 
 
 
 
 
 
 
483
  $this->add_responsive_control('premium_blog_filter_align',
484
  [
485
  'label' => __( 'Alignment', 'premium-addons-for-elementor' ),
@@ -1856,7 +1868,7 @@ class Premium_Blog extends Widget_Base {
1856
  <ul class="premium-blog-cats-container">
1857
  <li>
1858
  <a href="javascript:;" class="category active" data-filter="*">
1859
- <span><?php echo __('All', 'premium-addons-for-elementor'); ?></span>
1860
  </a>
1861
  </li>
1862
  <?php foreach( $settings['premium_blog_categories'] as $index => $id ) {
480
  ]
481
  );
482
 
483
+ $this->add_control('premium_blog_cat_tabs_label',
484
+ [
485
+ 'label' => __( 'First Category Label', 'premium-addons-for-elementor' ),
486
+ 'type' => Controls_Manager::TEXT,
487
+ 'default' => __('All', 'premium-addons-for-elementor'),
488
+ 'condition' => [
489
+ 'premium_blog_cat_tabs' => 'yes',
490
+ 'premium_blog_carousel!' => 'yes'
491
+ ]
492
+ ]
493
+ );
494
+
495
  $this->add_responsive_control('premium_blog_filter_align',
496
  [
497
  'label' => __( 'Alignment', 'premium-addons-for-elementor' ),
1868
  <ul class="premium-blog-cats-container">
1869
  <li>
1870
  <a href="javascript:;" class="category active" data-filter="*">
1871
+ <span><?php echo esc_html ( $settings['premium_blog_cat_tabs_label'] ); ?></span>
1872
  </a>
1873
  </li>
1874
  <?php foreach( $settings['premium_blog_categories'] as $index => $id ) {
widgets/premium-contactform.php CHANGED
@@ -18,12 +18,6 @@ class Premium_Contactform extends Widget_Base {
18
  public function get_name() {
19
  return 'premium-contact-form';
20
  }
21
-
22
- public function get_style_depends() {
23
- return [
24
- 'premium-addons'
25
- ];
26
- }
27
 
28
  public function get_title() {
29
  return sprintf( '%1$s %2$s', Helper_Functions::get_prefix(), __('Contact Form7', 'premium-addons-for-elementor') );
@@ -31,16 +25,28 @@ class Premium_Contactform extends Widget_Base {
31
 
32
  public function get_icon() {
33
  return 'pa-contact-form';
34
- }
35
- public function get_categories() {
 
36
  return array( 'premium-elements' );
37
  }
38
 
39
- // Adding the controls fields for the premium contact form
 
 
 
 
 
 
 
 
 
 
 
 
40
  // This will controls the animation, colors and background, dimensions etc
41
- protected function _register_controls() {
42
 
43
-
44
  $this->start_controls_section(
45
  'premium_section_wpcf7_form',
46
  [
@@ -94,7 +100,7 @@ class Premium_Contactform extends Widget_Base {
94
  'unit' => '%'
95
  ],
96
  'selectors' => [
97
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text' => 'width: {{SIZE}}{{UNIT}};',
98
  ],
99
  ]
100
  );
@@ -120,7 +126,7 @@ class Premium_Contactform extends Widget_Base {
120
  'unit' => '%'
121
  ],
122
  'selectors' => [
123
- '{{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea' => 'width: {{SIZE}}{{UNIT}};',
124
  ],
125
  ]
126
  );
@@ -148,7 +154,7 @@ class Premium_Contactform extends Widget_Base {
148
  ],
149
  ],
150
  'selectors' => [
151
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text' => 'height: {{SIZE}}{{UNIT}};',
152
  ],
153
  ]
154
  );
@@ -170,7 +176,7 @@ class Premium_Contactform extends Widget_Base {
170
  ],
171
  ],
172
  'selectors' => [
173
- '{{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea' => 'height: {{SIZE}}{{UNIT}};',
174
  ],
175
  ]
176
  );
@@ -200,7 +206,7 @@ class Premium_Contactform extends Widget_Base {
200
  ],
201
  ],
202
  'selectors' => [
203
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit' => 'width: {{SIZE}}{{UNIT}};',
204
  ],
205
  ]
206
  );
@@ -223,7 +229,7 @@ class Premium_Contactform extends Widget_Base {
223
  ],
224
  ],
225
  'selectors' => [
226
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit' => 'height: {{SIZE}}{{UNIT}};',
227
  ],
228
  ]
229
  );
@@ -243,7 +249,7 @@ class Premium_Contactform extends Widget_Base {
243
  'label' => __( 'Input Field Background', 'premium-addons-for-elementor' ),
244
  'type' => Controls_Manager::COLOR,
245
  'selectors' => [
246
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea' => 'background: {{VALUE}};',
247
  ],
248
  ]
249
  );
@@ -255,7 +261,7 @@ class Premium_Contactform extends Widget_Base {
255
  'type' => Controls_Manager::DIMENSIONS,
256
  'size_units' => [ 'px', 'em', '%' ],
257
  'selectors' => [
258
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
259
  ],
260
  ]
261
  );
@@ -264,7 +270,7 @@ class Premium_Contactform extends Widget_Base {
264
  Group_Control_Border::get_type(),
265
  [
266
  'name' => 'premium_elements_input_border',
267
- 'selector' => '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea',
268
  ]
269
  );
270
 
@@ -275,7 +281,7 @@ class Premium_Contactform extends Widget_Base {
275
  'type' => Controls_Manager::DIMENSIONS,
276
  'size_units' => [ 'px' ],
277
  'selectors' => [
278
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
279
  ],
280
  ]
281
  );
@@ -287,7 +293,7 @@ class Premium_Contactform extends Widget_Base {
287
  'type' => Controls_Manager::DIMENSIONS,
288
  'size_units' => [ 'px', 'em', '%' ],
289
  'selectors' => [
290
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
291
  ],
292
  ]
293
  );
@@ -298,7 +304,7 @@ class Premium_Contactform extends Widget_Base {
298
  'label' => __( 'Focus Border Color', 'premium-addons-for-elementor' ),
299
  'type' => Controls_Manager::COLOR,
300
  'selectors' => [
301
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text:focus, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea:focus' => 'border-color: {{VALUE}};',
302
  ],
303
  ]
304
  );
@@ -334,7 +340,7 @@ class Premium_Contactform extends Widget_Base {
334
  Group_Control_Box_Shadow::get_type(),
335
  [
336
  'name' => 'input_button_shadow',
337
- 'selector' => '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea',
338
  ]
339
  );
340
 
@@ -369,7 +375,7 @@ class Premium_Contactform extends Widget_Base {
369
  'value' => Scheme_Color::COLOR_1,
370
  ],
371
  'selectors' => [
372
- '{{WRAPPER}} .premium-elements-contact-form-container, {{WRAPPER}} .premium-elements-contact-form-container label' => 'color: {{VALUE}};',
373
  ],
374
  ]
375
  );
@@ -379,7 +385,7 @@ class Premium_Contactform extends Widget_Base {
379
  [
380
  'name' => 'premium_elements_contact_form_default_typography',
381
  'scheme' => Scheme_Typography::TYPOGRAPHY_1,
382
- 'selector' => '{{WRAPPER}} .premium-elements-contact-form-container',
383
  ]
384
  );
385
 
@@ -402,7 +408,7 @@ class Premium_Contactform extends Widget_Base {
402
  'value' => Scheme_Color::COLOR_1,
403
  ],
404
  'selectors' => [
405
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea' => 'color: {{VALUE}};',
406
  ],
407
  ]
408
  );
@@ -412,7 +418,7 @@ class Premium_Contactform extends Widget_Base {
412
  [
413
  'name' => 'premium_elements_contact_form_field_typography',
414
  'scheme' => Scheme_Typography::TYPOGRAPHY_1,
415
- 'selector' => '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-text, {{WRAPPER}} .premium-elements-contact-form-container textarea.wpcf7-textarea',
416
  ]
417
  );
418
 
@@ -423,9 +429,9 @@ class Premium_Contactform extends Widget_Base {
423
  'label' => __( 'Placeholder Color', 'premium-addons-for-elementor' ),
424
  'type' => Controls_Manager::COLOR,
425
  'selectors' => [
426
- '{{WRAPPER}} .premium-elements-contact-form-container ::-webkit-input-placeholder' => 'color: {{VALUE}};',
427
- '{{WRAPPER}} .premium-elements-contact-form-container ::-moz-placeholder' => 'color: {{VALUE}};',
428
- '{{WRAPPER}} .premium-elements-contact-form-container ::-ms-input-placeholder' => 'color: {{VALUE}};',
429
  ],
430
  ]
431
  );
@@ -446,7 +452,7 @@ class Premium_Contactform extends Widget_Base {
446
  [
447
  'name' => 'section_title_premium_btn_typography',
448
  'scheme' => Scheme_Typography::TYPOGRAPHY_1,
449
- 'selector' => '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit',
450
  ]
451
  );
452
 
@@ -457,7 +463,7 @@ class Premium_Contactform extends Widget_Base {
457
  'type' => Controls_Manager::DIMENSIONS,
458
  'size_units' => [ 'px', 'em', '%' ],
459
  'selectors' => [
460
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
461
  ],
462
  ]
463
  );
@@ -474,7 +480,7 @@ class Premium_Contactform extends Widget_Base {
474
  'label' => __( 'Text Color', 'premium-addons-for-elementor' ),
475
  'type' => Controls_Manager::COLOR,
476
  'selectors' => [
477
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit' => 'color: {{VALUE}};',
478
  ],
479
  ]
480
  );
@@ -491,7 +497,7 @@ class Premium_Contactform extends Widget_Base {
491
  'value' => Scheme_Color::COLOR_1,
492
  ],
493
  'selectors' => [
494
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit' => 'background-color: {{VALUE}};',
495
  ],
496
  ]
497
  );
@@ -500,7 +506,7 @@ class Premium_Contactform extends Widget_Base {
500
  Group_Control_Border::get_type(),
501
  [
502
  'name' => 'premium_elements_btn_border',
503
- 'selector' => '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit',
504
  ]
505
  );
506
 
@@ -515,7 +521,7 @@ class Premium_Contactform extends Widget_Base {
515
  ],
516
  ],
517
  'selectors' => [
518
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit' => 'border-radius: {{SIZE}}px;',
519
  ],
520
  ]
521
  );
@@ -532,7 +538,7 @@ class Premium_Contactform extends Widget_Base {
532
  'label' => __( 'Text Color', 'premium-addons-for-elementor' ),
533
  'type' => Controls_Manager::COLOR,
534
  'selectors' => [
535
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit:hover' => 'color: {{VALUE}};',
536
  ],
537
  ]
538
  );
@@ -543,7 +549,7 @@ class Premium_Contactform extends Widget_Base {
543
  'label' => __( 'Background Color', 'premium-addons-for-elementor' ),
544
  'type' => Controls_Manager::COLOR,
545
  'selectors' => [
546
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit:hover' => 'background-color: {{VALUE}};',
547
  ],
548
  ]
549
  );
@@ -554,7 +560,7 @@ class Premium_Contactform extends Widget_Base {
554
  'label' => __( 'Border Color', 'premium-addons-for-elementor' ),
555
  'type' => Controls_Manager::COLOR,
556
  'selectors' => [
557
- '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit:hover' => 'border-color: {{VALUE}};',
558
  ],
559
  ]
560
  );
@@ -568,7 +574,7 @@ class Premium_Contactform extends Widget_Base {
568
  Group_Control_Box_Shadow::get_type(),
569
  [
570
  'name' => 'button_box_shadow',
571
- 'selector' => '{{WRAPPER}} .premium-elements-contact-form-container input.wpcf7-submit',
572
  ]
573
  );
574
 
@@ -602,29 +608,27 @@ class Premium_Contactform extends Widget_Base {
602
 
603
  return $result;
604
  }
605
- protected function render() {
 
606
 
607
  $settings = $this->get_settings();
608
 
 
 
 
 
 
 
 
 
 
 
609
 
610
- if ( ! empty( $settings['premium_wpcf7_form'] ) ) {?>
611
-
612
- <div class="premium-elements-contact-form-container <?php echo $settings['premium_elements_input_focus_border_animation'] ?> ">
613
-
614
  <?php echo do_shortcode( '[contact-form-7 id="' . $settings['premium_wpcf7_form'] . '" ]' );?>
615
  </div>
616
- <script>
617
- jQuery(function($){
618
- var linput = jQuery( 'body input[type="text"], body input[type="email"], body textarea , body input[type="password"], body input[type="date"], body input[type="number"], body input[type="tel"], body input[type="file"], body input[type="url"]');
619
- linput.wrap("<span class='wpcf7-span'>")
620
-
621
- var linput = jQuery( 'body input[type="text"], body input[type="email"], body textarea , body input[type="password"], body input[type="date"], body input[type="number"], body input[type="tel"], body input[type="file"], body input[type="url"]');
622
- linput.on("focus blur", function(){
623
- $(this).closest(".wpcf7-span").toggleClass("is-focused");
624
- });
625
- });
626
- </script>
627
- <?php
628
  }
629
 
630
  }
18
  public function get_name() {
19
  return 'premium-contact-form';
20
  }
 
 
 
 
 
 
21
 
22
  public function get_title() {
23
  return sprintf( '%1$s %2$s', Helper_Functions::get_prefix(), __('Contact Form7', 'premium-addons-for-elementor') );
25
 
26
  public function get_icon() {
27
  return 'pa-contact-form';
28
+ }
29
+
30
+ public function get_categories() {
31
  return array( 'premium-elements' );
32
  }
33
 
34
+ public function get_style_depends() {
35
+ return [
36
+ 'premium-addons'
37
+ ];
38
+ }
39
+
40
+ public function get_script_depends() {
41
+ return [
42
+ 'premium-addons-js'
43
+ ];
44
+ }
45
+
46
+ // Adding the controls fields for the premium contact form
47
  // This will controls the animation, colors and background, dimensions etc
48
+ protected function _register_controls() {
49
 
 
50
  $this->start_controls_section(
51
  'premium_section_wpcf7_form',
52
  [
100
  'unit' => '%'
101
  ],
102
  'selectors' => [
103
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-text' => 'width: {{SIZE}}{{UNIT}};',
104
  ],
105
  ]
106
  );
126
  'unit' => '%'
127
  ],
128
  'selectors' => [
129
+ '{{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea' => 'width: {{SIZE}}{{UNIT}};',
130
  ],
131
  ]
132
  );
154
  ],
155
  ],
156
  'selectors' => [
157
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-text' => 'height: {{SIZE}}{{UNIT}};',
158
  ],
159
  ]
160
  );
176
  ],
177
  ],
178
  'selectors' => [
179
+ '{{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea' => 'height: {{SIZE}}{{UNIT}};',
180
  ],
181
  ]
182
  );
206
  ],
207
  ],
208
  'selectors' => [
209
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit' => 'width: {{SIZE}}{{UNIT}};',
210
  ],
211
  ]
212
  );
229
  ],
230
  ],
231
  'selectors' => [
232
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit' => 'height: {{SIZE}}{{UNIT}};',
233
  ],
234
  ]
235
  );
249
  'label' => __( 'Input Field Background', 'premium-addons-for-elementor' ),
250
  'type' => Controls_Manager::COLOR,
251
  'selectors' => [
252
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-text, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea' => 'background: {{VALUE}};',
253
  ],
254
  ]
255
  );
261
  'type' => Controls_Manager::DIMENSIONS,
262
  'size_units' => [ 'px', 'em', '%' ],
263
  'selectors' => [
264
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-text, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
265
  ],
266
  ]
267
  );
270
  Group_Control_Border::get_type(),
271
  [
272
  'name' => 'premium_elements_input_border',
273
+ 'selector' => '{{WRAPPER}} .premium-cf7-container input.wpcf7-text, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea',
274
  ]
275
  );
276
 
281
  'type' => Controls_Manager::DIMENSIONS,
282
  'size_units' => [ 'px' ],
283
  'selectors' => [
284
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-text, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
285
  ],
286
  ]
287
  );
293
  'type' => Controls_Manager::DIMENSIONS,
294
  'size_units' => [ 'px', 'em', '%' ],
295
  'selectors' => [
296
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-text, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
297
  ],
298
  ]
299
  );
304
  'label' => __( 'Focus Border Color', 'premium-addons-for-elementor' ),
305
  'type' => Controls_Manager::COLOR,
306
  'selectors' => [
307
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-text:focus, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea:focus' => 'border-color: {{VALUE}};',
308
  ],
309
  ]
310
  );
340
  Group_Control_Box_Shadow::get_type(),
341
  [
342
  'name' => 'input_button_shadow',
343
+ 'selector' => '{{WRAPPER}} .premium-cf7-container input.wpcf7-text, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea',
344
  ]
345
  );
346
 
375
  'value' => Scheme_Color::COLOR_1,
376
  ],
377
  'selectors' => [
378
+ '{{WRAPPER}} .premium-cf7-container, {{WRAPPER}} .premium-cf7-container label' => 'color: {{VALUE}};',
379
  ],
380
  ]
381
  );
385
  [
386
  'name' => 'premium_elements_contact_form_default_typography',
387
  'scheme' => Scheme_Typography::TYPOGRAPHY_1,
388
+ 'selector' => '{{WRAPPER}} .premium-cf7-container',
389
  ]
390
  );
391
 
408
  'value' => Scheme_Color::COLOR_1,
409
  ],
410
  'selectors' => [
411
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-text, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea' => 'color: {{VALUE}};',
412
  ],
413
  ]
414
  );
418
  [
419
  'name' => 'premium_elements_contact_form_field_typography',
420
  'scheme' => Scheme_Typography::TYPOGRAPHY_1,
421
+ 'selector' => '{{WRAPPER}} .premium-cf7-container input.wpcf7-text, {{WRAPPER}} .premium-cf7-container textarea.wpcf7-textarea',
422
  ]
423
  );
424
 
429
  'label' => __( 'Placeholder Color', 'premium-addons-for-elementor' ),
430
  'type' => Controls_Manager::COLOR,
431
  'selectors' => [
432
+ '{{WRAPPER}} .premium-cf7-container ::-webkit-input-placeholder' => 'color: {{VALUE}};',
433
+ '{{WRAPPER}} .premium-cf7-container ::-moz-placeholder' => 'color: {{VALUE}};',
434
+ '{{WRAPPER}} .premium-cf7-container ::-ms-input-placeholder' => 'color: {{VALUE}};',
435
  ],
436
  ]
437
  );
452
  [
453
  'name' => 'section_title_premium_btn_typography',
454
  'scheme' => Scheme_Typography::TYPOGRAPHY_1,
455
+ 'selector' => '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit',
456
  ]
457
  );
458
 
463
  'type' => Controls_Manager::DIMENSIONS,
464
  'size_units' => [ 'px', 'em', '%' ],
465
  'selectors' => [
466
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
467
  ],
468
  ]
469
  );
480
  'label' => __( 'Text Color', 'premium-addons-for-elementor' ),
481
  'type' => Controls_Manager::COLOR,
482
  'selectors' => [
483
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit' => 'color: {{VALUE}};',
484
  ],
485
  ]
486
  );
497
  'value' => Scheme_Color::COLOR_1,
498
  ],
499
  'selectors' => [
500
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit' => 'background-color: {{VALUE}};',
501
  ],
502
  ]
503
  );
506
  Group_Control_Border::get_type(),
507
  [
508
  'name' => 'premium_elements_btn_border',
509
+ 'selector' => '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit',
510
  ]
511
  );
512
 
521
  ],
522
  ],
523
  'selectors' => [
524
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit' => 'border-radius: {{SIZE}}px;',
525
  ],
526
  ]
527
  );
538
  'label' => __( 'Text Color', 'premium-addons-for-elementor' ),
539
  'type' => Controls_Manager::COLOR,
540
  'selectors' => [
541
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit:hover' => 'color: {{VALUE}};',
542
  ],
543
  ]
544
  );
549
  'label' => __( 'Background Color', 'premium-addons-for-elementor' ),
550
  'type' => Controls_Manager::COLOR,
551
  'selectors' => [
552
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit:hover' => 'background-color: {{VALUE}};',
553
  ],
554
  ]
555
  );
560
  'label' => __( 'Border Color', 'premium-addons-for-elementor' ),
561
  'type' => Controls_Manager::COLOR,
562
  'selectors' => [
563
+ '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit:hover' => 'border-color: {{VALUE}};',
564
  ],
565
  ]
566
  );
574
  Group_Control_Box_Shadow::get_type(),
575
  [
576
  'name' => 'button_box_shadow',
577
+ 'selector' => '{{WRAPPER}} .premium-cf7-container input.wpcf7-submit',
578
  ]
579
  );
580
 
608
 
609
  return $result;
610
  }
611
+
612
+ protected function render() {
613
 
614
  $settings = $this->get_settings();
615
 
616
+ if ( ! empty( $settings['premium_wpcf7_form'] ) ) {
617
+
618
+ $this->add_render_attribute( 'container', 'class',
619
+ [
620
+ 'premium-cf7-container',
621
+ $settings['premium_elements_input_focus_border_animation']
622
+ ]
623
+ );
624
+
625
+ ?>
626
 
627
+ <div <?php echo $this->get_render_attribute_string( 'container' ); ?>>
 
 
 
628
  <?php echo do_shortcode( '[contact-form-7 id="' . $settings['premium_wpcf7_form'] . '" ]' );?>
629
  </div>
630
+
631
+ <?php
 
 
 
 
 
 
 
 
 
 
632
  }
633
 
634
  }
widgets/premium-countdown.php CHANGED
@@ -436,13 +436,13 @@ class Premium_Countdown extends Widget_Base {
436
  $this->add_control('premium_countdown_digit_border_radius',
437
  [
438
  'label' => __('Border Radius', 'premium-addons-for-elementor'),
439
- 'type' => Controls_Manager::SLIDER,
440
  'size_units' => ['px', '%', 'em'],
441
  'selectors' => [
442
- '{{WRAPPER}} .countdown .pre_countdown-section .pre_countdown-amount' => 'border-radius: {{SIZE}}{{UNIT}};'
443
- ]
444
  ]
445
- );
 
446
 
447
  $this->end_controls_section();
448
 
436
  $this->add_control('premium_countdown_digit_border_radius',
437
  [
438
  'label' => __('Border Radius', 'premium-addons-for-elementor'),
439
+ 'type' => Controls_Manager::DIMENSIONS,
440
  'size_units' => ['px', '%', 'em'],
441
  'selectors' => [
442
+ '{{WRAPPER}} .countdown .pre_countdown-section .pre_countdown-amount' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
 
443
  ]
444
+ ]
445
+ );
446
 
447
  $this->end_controls_section();
448
 
widgets/premium-fancytext.php CHANGED
@@ -492,20 +492,20 @@ class Premium_Fancytext extends Widget_Base {
492
 
493
  $cursor_text = addslashes( $settings['premium_fancy_text_cursor_text'] );
494
 
495
- if($settings['premium_fancy_text_effect'] == 'slide'){
496
  $this->add_render_attribute( 'prefix', 'class', 'premium-fancy-text-span-align' );
497
  $this->add_render_attribute( 'suffix', 'class', 'premium-fancy-text-span-align' );
498
  }
499
 
500
- if($settings['premium_fancy_text_effect'] == 'typing'){
501
- $show_cursor = (!empty($settings['premium_fancy_text_show_cursor'])) ? true : false;
502
- $loop = !empty( $settings['premium_fancy_text_type_loop'] ) ? true : false;
503
  $strings = array();
504
- foreach ( $settings['premium_fancy_text_strings'] as $item ) :
505
- if ( ! empty( $item['premium_text_strings_text_field'] ) ) :
506
- array_push( $strings, str_replace('\'','`', $item['premium_text_strings_text_field'] ) );
507
- endif;
508
- endforeach;
509
  $fancytext_settings = [
510
  'effect' => $settings['premium_fancy_text_effect'],
511
  'strings' => $strings,
@@ -536,7 +536,7 @@ class Premium_Fancytext extends Widget_Base {
536
  <?php if ( $settings['premium_fancy_text_effect'] === 'typing' ) : ?>
537
  <span class="premium-fancy-text" ></span>
538
  <?php else : ?>
539
- <div class="premium-fancy-text" style=' display: inline-block; text-align: center;'>
540
  <ul>
541
  <?php foreach ( $settings['premium_fancy_text_strings'] as $item ) :
542
  if ( ! empty( $item['premium_text_strings_text_field'] ) ) :
@@ -580,7 +580,7 @@ class Premium_Fancytext extends Widget_Base {
580
 
581
  var fancyString = item.premium_text_strings_text_field;
582
 
583
- strings.push( fancyString.replace( '\'','`' ) );
584
  }
585
  });
586
 
492
 
493
  $cursor_text = addslashes( $settings['premium_fancy_text_cursor_text'] );
494
 
495
+ if( $settings['premium_fancy_text_effect'] === 'slide' ) {
496
  $this->add_render_attribute( 'prefix', 'class', 'premium-fancy-text-span-align' );
497
  $this->add_render_attribute( 'suffix', 'class', 'premium-fancy-text-span-align' );
498
  }
499
 
500
+ if( $settings['premium_fancy_text_effect'] === 'typing' ) {
501
+ $show_cursor = ( ! empty( $settings['premium_fancy_text_show_cursor'] ) ) ? true : false;
502
+ $loop = ! empty( $settings['premium_fancy_text_type_loop'] ) ? true : false;
503
  $strings = array();
504
+ foreach ( $settings['premium_fancy_text_strings'] as $item ) {
505
+ if ( ! empty( $item['premium_text_strings_text_field'] ) ) {
506
+ array_push( $strings, str_replace('\'','&#39;', $item['premium_text_strings_text_field'] ) );
507
+ }
508
+ }
509
  $fancytext_settings = [
510
  'effect' => $settings['premium_fancy_text_effect'],
511
  'strings' => $strings,
536
  <?php if ( $settings['premium_fancy_text_effect'] === 'typing' ) : ?>
537
  <span class="premium-fancy-text" ></span>
538
  <?php else : ?>
539
+ <div class="premium-fancy-text" style='display: inline-block; text-align: center;'>
540
  <ul>
541
  <?php foreach ( $settings['premium_fancy_text_strings'] as $item ) :
542
  if ( ! empty( $item['premium_text_strings_text_field'] ) ) :
580
 
581
  var fancyString = item.premium_text_strings_text_field;
582
 
583
+ strings.push( fancyString );
584
  }
585
  });
586
 
widgets/premium-grid.php CHANGED
@@ -466,6 +466,21 @@ class Premium_Grid extends Widget_Base {
466
  ]
467
  );
468
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
  $img_repeater->add_control('premium_gallery_video_controls',
470
  [
471
  'label' => __( 'Controls', 'premium-addons-for-elementor' ),
@@ -2207,7 +2222,7 @@ class Premium_Grid extends Widget_Base {
2207
  <?php if( 'hosted' !== $item['premium_gallery_video_type'] ) : ?>
2208
  <iframe src="<?php echo $link; ?>"></iframe>
2209
  <?php else:
2210
- $link = $item['premium_gallery_video_self']['url'];
2211
  ?>
2212
  <video src="<?php echo esc_url( $link ); ?>" <?php echo Utils::render_html_attributes( $video_params ); ?>></video>
2213
  <?php endif; ?>
466
  ]
467
  );
468
 
469
+ $img_repeater->add_control('premium_gallery_video_self_url',
470
+ [
471
+ 'label' => __('Remote Video URL', 'premium-addons-for-elementor'),
472
+ 'type' => Controls_Manager::TEXT,
473
+ 'dynamic' => [
474
+ 'active' => true,
475
+ ],
476
+ 'label_block' => true,
477
+ 'condition' => [
478
+ 'premium_gallery_video' => 'true',
479
+ 'premium_gallery_video_type'=> 'hosted'
480
+ ]
481
+ ]
482
+ );
483
+
484
  $img_repeater->add_control('premium_gallery_video_controls',
485
  [
486
  'label' => __( 'Controls', 'premium-addons-for-elementor' ),
2222
  <?php if( 'hosted' !== $item['premium_gallery_video_type'] ) : ?>
2223
  <iframe src="<?php echo $link; ?>"></iframe>
2224
  <?php else:
2225
+ $link = empty( $item['premium_gallery_video_self_url'] ) ? $item['premium_gallery_video_self']['url'] : $item['premium_gallery_video_self_url'];
2226
  ?>
2227
  <video src="<?php echo esc_url( $link ); ?>" <?php echo Utils::render_html_attributes( $video_params ); ?>></video>
2228
  <?php endif; ?>
widgets/premium-videobox.php CHANGED
@@ -153,6 +153,20 @@ class Premium_Videobox extends Widget_Base {
153
  ]
154
  );
155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  $this->add_control('premium_video_box_controls',
157
  [
158
  'label' => __('Player Controls', 'premium-addons-for-elementor'),
@@ -667,18 +681,24 @@ class Premium_Videobox extends Widget_Base {
667
 
668
  $thumbnail = $this->get_video_thumbnail( $params['id'] );
669
 
670
- if( 'self' !== $video_type ) {
671
- $image = sprintf( 'url(\'%s\')', $thumbnail );
672
- } else {
673
- $image = 'none';
 
 
 
 
 
 
 
 
 
 
674
  }
675
 
676
  $link = $params['link'];
677
 
678
-
679
-
680
- $hosted_url = !empty( $settings['premium_video_box_self_hosted']['url'] ) ? $settings['premium_video_box_self_hosted']['url'] : '' ;
681
-
682
  $related = $settings['premium_video_box_suggested_videos'];
683
 
684
  $mute = $settings['premium_video_box_mute'];
@@ -807,7 +827,7 @@ class Premium_Videobox extends Widget_Base {
807
 
808
  if ( 'yes' !== $overlay ) {
809
  $size = '';
810
- if('youtube'=== $type) {
811
  $size = $settings['premium_video_box_yt_thumbnail_size'];
812
  }
813
  $thumbnail_src = Helper_Functions::get_video_thumbnail( $id, $type, $size );
153
  ]
154
  );
155
 
156
+ $this->add_control('premium_video_box_self_hosted_remote',
157
+ [
158
+ 'label' => __('Remote Video URL', 'premium-addons-for-elementor'),
159
+ 'type' => Controls_Manager::TEXT,
160
+ 'dynamic' => [
161
+ 'active' => true,
162
+ ],
163
+ 'label_block' => true,
164
+ 'condition' => [
165
+ 'premium_video_box_video_type' => 'self',
166
+ ]
167
+ ]
168
+ );
169
+
170
  $this->add_control('premium_video_box_controls',
171
  [
172
  'label' => __('Player Controls', 'premium-addons-for-elementor'),
681
 
682
  $thumbnail = $this->get_video_thumbnail( $params['id'] );
683
 
684
+ $image = sprintf( 'url(\'%s\')', $thumbnail );
685
+
686
+ if( 'self' === $video_type ) {
687
+
688
+ $overlay = $settings['premium_video_box_image_switcher'];
689
+
690
+ if( 'yes' !== $overlay )
691
+ $image = 'transparent';
692
+
693
+ if ( empty( $settings['premium_video_box_self_hosted_remote'] ) ) {
694
+ $hosted_url = $settings['premium_video_box_self_hosted']['url'];
695
+ } else {
696
+ $hosted_url = $settings['premium_video_box_self_hosted_remote'];
697
+ }
698
  }
699
 
700
  $link = $params['link'];
701
 
 
 
 
 
702
  $related = $settings['premium_video_box_suggested_videos'];
703
 
704
  $mute = $settings['premium_video_box_mute'];
827
 
828
  if ( 'yes' !== $overlay ) {
829
  $size = '';
830
+ if( 'youtube' === $type ) {
831
  $size = $settings['premium_video_box_yt_thumbnail_size'];
832
  }
833
  $thumbnail_src = Helper_Functions::get_video_thumbnail( $id, $type, $size );