Addons for Elementor - Version 6.9.2

Version Description

  • Added - Carousel option along with Grid for Services and Clients Elementor addons
  • Added - Extensive customization options for Carousel function of Services, Team Members, Testimonials and Clients addons
Download this release

Release Info

Developer livemesh
Plugin Icon 128x128 Addons for Elementor
Version 6.9.2
Comparing to
See all releases

Code changes from version 6.9.1 to 6.9.2

addons-for-elementor.php CHANGED
@@ -8,7 +8,7 @@
8
  * Author URI: https://livemeshelementor.com
9
  * License: GPL3
10
  * License URI: https://www.gnu.org/licenses/gpl-3.0.txt
11
- * Version: 6.9.1
12
  * Text Domain: livemesh-el-addons
13
  * Domain Path: languages
14
  * Elementor tested up to: 3.1.0
@@ -37,7 +37,7 @@ if ( !defined( 'ABSPATH' ) ) {
37
 
38
  if ( !function_exists( 'lae_fs' ) ) {
39
  // Plugin version
40
- define( 'LAE_VERSION', '6.9.1' );
41
  // Plugin Root File
42
  define( 'LAE_PLUGIN_FILE', __FILE__ );
43
  // Plugin Folder Path
8
  * Author URI: https://livemeshelementor.com
9
  * License: GPL3
10
  * License URI: https://www.gnu.org/licenses/gpl-3.0.txt
11
+ * Version: 6.9.2
12
  * Text Domain: livemesh-el-addons
13
  * Domain Path: languages
14
  * Elementor tested up to: 3.1.0
37
 
38
  if ( !function_exists( 'lae_fs' ) ) {
39
  // Plugin version
40
+ define( 'LAE_VERSION', '6.9.2' );
41
  // Plugin Root File
42
  define( 'LAE_PLUGIN_FILE', __FILE__ );
43
  // Plugin Folder Path
assets/css/widgets/clients.css CHANGED
@@ -1,56 +1,52 @@
1
  /* ---------------------------------- Clients Widget ---------------------------------- */
2
- .lae-clients {
3
- clear: both;
4
- overflow: hidden;
5
- margin: 0 auto; }
6
- .lae-clients .lae-client {
7
- position: relative;
8
- border: 1px solid #ddd;
9
- overflow: hidden; }
10
- .lae-dark-bg .lae-clients .lae-client {
11
- border-color: #505050 !important; }
12
- .lae-clients .lae-client img {
13
- -webkit-transition: all 0.3s ease-in-out 0s;
14
- transition: all 0.3s ease-in-out 0s;
15
- width: 100%;
16
- margin: 0;
17
- display: block; }
18
- .lae-clients .lae-client .lae-client-name {
19
- position: absolute;
20
- z-index: 2;
21
- top: 50%;
22
- left: 0;
23
- text-align: center;
24
- width: 100%;
25
- height: 100%;
26
- margin-top: -12px;
 
 
 
27
  color: #fff;
28
- font-size: 18px;
29
- line-height: 26px;
30
- -webkit-transition: opacity .4s ease-in-out 0s;
31
- transition: opacity .4s ease-in-out 0s;
32
- opacity: 0; }
33
- .lae-clients .lae-client .lae-client-name a {
34
- color: #fff;
35
- text-decoration: none; }
36
- .lae-clients .lae-client .lae-image-overlay {
37
- position: absolute;
38
- left: 0;
39
- top: 0;
40
- overflow: hidden;
41
- width: 100%;
42
- height: 100%;
43
- background: #000;
44
- filter: alpha(opacity=0);
45
- -moz-opacity: 0;
46
- opacity: 0;
47
- -webkit-transition: opacity .4s ease-in-out 0s;
48
- transition: opacity .4s ease-in-out 0s; }
49
- .lae-clients .lae-client:hover .lae-image-overlay {
50
- opacity: 0.7; }
51
- .lae-dark-bg .lae-clients .lae-client:hover .lae-image-overlay {
52
- opacity: 0.8; }
53
- .lae-clients .lae-client:hover .lae-client-name {
54
- opacity: 1; }
55
 
56
  /*# sourceMappingURL=clients.css.map */
1
  /* ---------------------------------- Clients Widget ---------------------------------- */
2
+ .lae-clients .lae-client {
3
+ position: relative;
4
+ border: 1px solid #ddd;
5
+ overflow: hidden; }
6
+ .lae-dark-bg .lae-clients .lae-client {
7
+ border-color: #505050 !important; }
8
+ .lae-clients .lae-client img {
9
+ -webkit-transition: all 0.3s ease-in-out 0s;
10
+ transition: all 0.3s ease-in-out 0s;
11
+ width: 100%;
12
+ margin: 0;
13
+ display: block; }
14
+ .lae-clients .lae-client .lae-client-name {
15
+ position: absolute;
16
+ z-index: 2;
17
+ top: 50%;
18
+ left: 0;
19
+ text-align: center;
20
+ width: 100%;
21
+ height: 100%;
22
+ margin-top: -12px;
23
+ color: #fff;
24
+ font-size: 18px;
25
+ line-height: 26px;
26
+ -webkit-transition: opacity .4s ease-in-out 0s;
27
+ transition: opacity .4s ease-in-out 0s;
28
+ opacity: 0; }
29
+ .lae-clients .lae-client .lae-client-name a {
30
  color: #fff;
31
+ text-decoration: none; }
32
+ .lae-clients .lae-client .lae-image-overlay {
33
+ position: absolute;
34
+ left: 0;
35
+ top: 0;
36
+ overflow: hidden;
37
+ width: 100%;
38
+ height: 100%;
39
+ background: #000;
40
+ filter: alpha(opacity=0);
41
+ -moz-opacity: 0;
42
+ opacity: 0;
43
+ -webkit-transition: opacity .4s ease-in-out 0s;
44
+ transition: opacity .4s ease-in-out 0s; }
45
+ .lae-clients .lae-client:hover .lae-image-overlay {
46
+ opacity: 0.7; }
47
+ .lae-dark-bg .lae-clients .lae-client:hover .lae-image-overlay {
48
+ opacity: 0.8; }
49
+ .lae-clients .lae-client:hover .lae-client-name {
50
+ opacity: 1; }
 
 
 
 
 
 
 
51
 
52
  /*# sourceMappingURL=clients.css.map */
assets/css/widgets/clients.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["clients.scss"],"names":[],"mappings":"AAGA,0FAA0F;AAE1F;EACE,YAAW;EACX,iBAAgB;EAChB,eAAc,EAAA;EAEd;IACE,mBAAkB;IAClB,uBAAsB;IACtB,iBAAgB,EAAA;IAEhB;MACE,iCAAgC,EAAA;IAGlC;MACE,4CAA2C;MAE3C,oCAAmC;MACnC,YAAW;MACX,UAAS;MACT,eAAc,EAAA;IAGhB;MACE,mBAAkB;MAClB,WAAU;MACV,SAAQ;MACR,QAAO;MACP,mBAAkB;MAClB,YAAW;MACX,aAAY;MACZ,kBAAiB;MACjB,YAAW;MACX,gBAAe;MACf,kBAAiB;MACjB,+CAAsC;MAAtC,uCAAsC;MACtC,WAAU,EAAA;MAEV;QACE,YAAW;QACX,sBAAqB,EAAA;IAIzB;MACE,mBAAkB;MAClB,QAAO;MACP,OAAM;MACN,iBAAgB;MAChB,YAAW;MACX,aAAY;MACZ,iBAAgB;MAChB,yBAAwB;MACxB,gBAAe;MACf,WAAU;MACV,+CAAsC;MAAtC,uCAAsC,EAAA;IAItC;MACE,aAAY,EAAA;MAEZ;QACE,aAAY,EAAA;IAIhB;MACE,WAAU,EAAA","file":"clients.css"}
1
+ {"version":3,"sources":["clients.scss"],"names":[],"mappings":"AAGA,0FAA0F;AAIxF;EACE,mBAAkB;EAClB,uBAAsB;EACtB,iBAAgB,EAAA;EAEhB;IACE,iCAAgC,EAAA;EAGlC;IACE,4CAA2C;IAE3C,oCAAmC;IACnC,YAAW;IACX,UAAS;IACT,eAAc,EAAA;EAGhB;IACE,mBAAkB;IAClB,WAAU;IACV,SAAQ;IACR,QAAO;IACP,mBAAkB;IAClB,YAAW;IACX,aAAY;IACZ,kBAAiB;IACjB,YAAW;IACX,gBAAe;IACf,kBAAiB;IACjB,+CAAsC;IAAtC,uCAAsC;IACtC,WAAU,EAAA;IAEV;MACE,YAAW;MACX,sBAAqB,EAAA;EAIzB;IACE,mBAAkB;IAClB,QAAO;IACP,OAAM;IACN,iBAAgB;IAChB,YAAW;IACX,aAAY;IACZ,iBAAgB;IAChB,yBAAwB;IACxB,gBAAe;IACf,WAAU;IACV,+CAAsC;IAAtC,uCAAsC,EAAA;EAItC;IACE,aAAY,EAAA;IAEZ;MACE,aAAY,EAAA;EAIhB;IACE,WAAU,EAAA","file":"clients.css"}
assets/css/widgets/clients.scss CHANGED
@@ -4,9 +4,6 @@
4
  /* ---------------------------------- Clients Widget ---------------------------------- */
5
 
6
  .lae-clients {
7
- clear: both;
8
- overflow: hidden;
9
- margin: 0 auto;
10
 
11
  .lae-client {
12
  position: relative;
4
  /* ---------------------------------- Clients Widget ---------------------------------- */
5
 
6
  .lae-clients {
 
 
 
7
 
8
  .lae-client {
9
  position: relative;
assets/css/widgets/services.css CHANGED
@@ -119,7 +119,7 @@
119
  max-width: 300px;
120
  margin: 0;
121
  font-size: 14px;
122
- line-height: 32px;
123
  color: #888; }
124
  .rtl .lae-services-style3 .lae-service .lae-service-text {
125
  text-align: right; }
119
  max-width: 300px;
120
  margin: 0;
121
  font-size: 14px;
122
+ line-height: 26px;
123
  color: #888; }
124
  .rtl .lae-services-style3 .lae-service .lae-service-text {
125
  text-align: right; }
assets/css/widgets/services.scss CHANGED
@@ -176,7 +176,7 @@
176
  max-width: 300px;
177
  margin: 0;
178
  font-size: 14px;
179
- line-height: 32px;
180
  color: #888;
181
 
182
  .rtl & {
176
  max-width: 300px;
177
  margin: 0;
178
  font-size: 14px;
179
+ line-height: 26px;
180
  color: #888;
181
 
182
  .rtl & {
assets/js/widgets/clients.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function ( $ ) {
2
+
3
+
4
+ var WidgetLAECarouselHandler = function ($scope, $) {
5
+
6
+ var helper = new LAE_Carousel_Helper($scope, '.lae-clients-carousel');
7
+
8
+ helper.init();
9
+ };
10
+
11
+ // Make sure you run this code under Elementor..
12
+ $( window ).on( 'elementor/frontend/init', function () {
13
+
14
+ elementorFrontend.hooks.addAction( 'frontend/element_ready/lae-clients.default', WidgetLAECarouselHandler );
15
+
16
+ } );
17
+
18
+ } )( jQuery );
assets/js/widgets/clients.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function($){var WidgetLAECarouselHandler=function($scope,$){var helper=new LAE_Carousel_Helper($scope,".lae-clients-carousel");helper.init()};$(window).on("elementor/frontend/init",function(){elementorFrontend.hooks.addAction("frontend/element_ready/lae-clients.default",WidgetLAECarouselHandler)})})(jQuery);
assets/js/widgets/services.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function ( $ ) {
2
+
3
+
4
+ var WidgetLAECarouselHandler = function ($scope, $) {
5
+
6
+ var helper = new LAE_Carousel_Helper($scope, '.lae-services-carousel');
7
+
8
+ helper.init();
9
+ };
10
+
11
+ // Make sure you run this code under Elementor..
12
+ $( window ).on( 'elementor/frontend/init', function () {
13
+
14
+ elementorFrontend.hooks.addAction( 'frontend/element_ready/lae-services.default', WidgetLAECarouselHandler );
15
+
16
+ } );
17
+
18
+ } )( jQuery );
assets/js/widgets/services.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function($){var WidgetLAECarouselHandler=function($scope,$){var helper=new LAE_Carousel_Helper($scope,".lae-services-carousel");helper.init()};$(window).on("elementor/frontend/init",function(){elementorFrontend.hooks.addAction("frontend/element_ready/lae-services.default",WidgetLAECarouselHandler)})})(jQuery);
includes/widgets/clients.php CHANGED
@@ -48,12 +48,25 @@ class LAE_Clients_Widget extends LAE_Widget_Base
48
 
49
  public function get_script_depends()
50
  {
51
- return [ 'lae-waypoints', 'lae-frontend-scripts' ];
 
 
 
 
 
 
52
  }
53
 
54
  public function get_style_depends()
55
  {
56
- return [ 'lae-animate-styles', 'lae-frontend-styles', 'lae-clients-styles' ];
 
 
 
 
 
 
 
57
  }
58
 
59
  protected function _register_controls()
@@ -109,10 +122,19 @@ class LAE_Clients_Widget extends LAE_Widget_Base
109
  'raw' => '<div style="text-align:center;line-height:1.6;"><p>' . __( 'Unlock new possibilities with premium widgets and styles of <strong>Livemesh Addons for Elementor <i>Premium</i></strong>. ', 'livemesh-el-addons' ) . '</p><p style="padding-top:15px;"><a class="elementor-button elementor-button-default elementor-button-go-pro" href="https://livemeshelementor.com/pricing/#pricing-plans" target="_blank"><i class="fa fa-hand-o-right" aria-hidden="true"></i>' . __( 'Go Pro', 'livemesh-el-addons' ) . '</a></p></div>',
110
  ] );
111
  $this->end_controls_section();
112
- $this->start_controls_section( 'section_animation_settings', [
113
- 'label' => __( 'Widget Animation', 'livemesh-el-addons' ),
114
  'tab' => Controls_Manager::TAB_SETTINGS,
115
  ] );
 
 
 
 
 
 
 
 
 
116
  $this->add_control( 'widget_animation', [
117
  "type" => Controls_Manager::SELECT,
118
  "label" => __( "Animation Type", "livemesh-el-addons" ),
@@ -120,9 +142,191 @@ class LAE_Clients_Widget extends LAE_Widget_Base
120
  'default' => 'none',
121
  ] );
122
  $this->end_controls_section();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  $this->start_controls_section( 'section_grid_settings', [
124
- 'label' => __( 'Grid Settings', 'livemesh-el-addons' ),
125
- 'tab' => Controls_Manager::TAB_SETTINGS,
 
 
 
126
  ] );
127
  $this->add_control( 'column_layout', [
128
  'label' => __( 'Column Layout', 'livemesh-el-addons' ),
48
 
49
  public function get_script_depends()
50
  {
51
+ return [
52
+ 'lae-waypoints',
53
+ 'lae-jquery-slick',
54
+ 'lae-frontend-scripts',
55
+ 'lae-carousel-helper-scripts',
56
+ 'lae-clients-scripts'
57
+ ];
58
  }
59
 
60
  public function get_style_depends()
61
  {
62
+ return [
63
+ 'lae-icomoon-styles',
64
+ 'lae-animate-styles',
65
+ 'lae-slick-carousel-styles',
66
+ 'lae-frontend-styles',
67
+ 'lae-slick-carousel-custom-styles',
68
+ 'lae-clients-styles'
69
+ ];
70
  }
71
 
72
  protected function _register_controls()
122
  'raw' => '<div style="text-align:center;line-height:1.6;"><p>' . __( 'Unlock new possibilities with premium widgets and styles of <strong>Livemesh Addons for Elementor <i>Premium</i></strong>. ', 'livemesh-el-addons' ) . '</p><p style="padding-top:15px;"><a class="elementor-button elementor-button-default elementor-button-go-pro" href="https://livemeshelementor.com/pricing/#pricing-plans" target="_blank"><i class="fa fa-hand-o-right" aria-hidden="true"></i>' . __( 'Go Pro', 'livemesh-el-addons' ) . '</a></p></div>',
123
  ] );
124
  $this->end_controls_section();
125
+ $this->start_controls_section( 'section_general_settings', [
126
+ 'label' => __( 'General Settings', 'livemesh-el-addons' ),
127
  'tab' => Controls_Manager::TAB_SETTINGS,
128
  ] );
129
+ $this->add_control( 'layout', [
130
+ 'type' => Controls_Manager::SELECT,
131
+ 'label' => __( 'Choose Layout', 'livemesh-el-addons' ),
132
+ 'default' => 'grid',
133
+ 'options' => [
134
+ 'grid' => __( 'Grid', 'livemesh-el-addons' ),
135
+ 'carousel' => __( 'Carousel', 'livemesh-el-addons' ),
136
+ ],
137
+ ] );
138
  $this->add_control( 'widget_animation', [
139
  "type" => Controls_Manager::SELECT,
140
  "label" => __( "Animation Type", "livemesh-el-addons" ),
142
  'default' => 'none',
143
  ] );
144
  $this->end_controls_section();
145
+ $this->start_controls_section( 'section_carousel_settings', [
146
+ 'label' => __( 'Carousel Settings', 'livemesh-el-addons' ),
147
+ 'tab' => Controls_Manager::TAB_SETTINGS,
148
+ 'condition' => [
149
+ 'layout' => [ 'carousel' ],
150
+ ],
151
+ ] );
152
+ $this->add_responsive_control( 'gutter', [
153
+ 'label' => __( 'Spacing between items', 'livemesh-el-addons' ),
154
+ 'type' => Controls_Manager::SLIDER,
155
+ 'size_units' => [ 'px' ],
156
+ 'default' => [
157
+ 'size' => 0,
158
+ ],
159
+ 'range' => [
160
+ 'px' => [
161
+ 'min' => 0,
162
+ 'max' => 50,
163
+ ],
164
+ ],
165
+ 'selectors' => [
166
+ '{{WRAPPER}} .lae-clients-carousel .slick-slide' => 'margin: 0 {{SIZE}}{{UNIT}};',
167
+ '{{WRAPPER}} .lae-clients-carousel .slick-list' => 'margin: 0 -{{SIZE}}{{UNIT}};',
168
+ ],
169
+ ] );
170
+ $this->add_control( 'arrows', [
171
+ 'type' => Controls_Manager::SWITCHER,
172
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
173
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
174
+ 'return_value' => 'yes',
175
+ 'default' => 'yes',
176
+ 'label' => __( 'Prev/Next Arrows?', 'livemesh-el-addons' ),
177
+ ] );
178
+ $this->add_control( 'dots', [
179
+ 'type' => Controls_Manager::SWITCHER,
180
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
181
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
182
+ 'return_value' => 'yes',
183
+ 'default' => 'yes',
184
+ 'label' => __( 'Show dot indicators for navigation?', 'livemesh-el-addons' ),
185
+ ] );
186
+ $this->add_control( 'pause_on_hover', [
187
+ 'type' => Controls_Manager::SWITCHER,
188
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
189
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
190
+ 'return_value' => 'yes',
191
+ 'default' => 'yes',
192
+ 'label' => __( 'Pause on Hover?', 'livemesh-el-addons' ),
193
+ ] );
194
+ $this->add_control( 'pause_on_action', [
195
+ 'type' => Controls_Manager::SWITCHER,
196
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
197
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
198
+ 'return_value' => 'yes',
199
+ 'default' => 'yes',
200
+ "description" => __( "Pause the slideshow when interacting with control elements.", "livemesh-el-addons" ),
201
+ "label" => __( "Pause on action?", "livemesh-el-addons" ),
202
+ ] );
203
+ $this->add_control( 'loop', [
204
+ 'type' => Controls_Manager::SWITCHER,
205
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
206
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
207
+ 'return_value' => 'yes',
208
+ 'default' => 'yes',
209
+ "description" => __( "Should the animation loop?", "livemesh-el-addons" ),
210
+ "label" => __( "Loop", "livemesh-el-addons" ),
211
+ ] );
212
+ $this->add_control( 'autoplay', [
213
+ 'type' => Controls_Manager::SWITCHER,
214
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
215
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
216
+ 'return_value' => 'yes',
217
+ 'default' => 'yes',
218
+ 'label' => __( 'Autoplay?', 'livemesh-el-addons' ),
219
+ 'description' => __( 'Should the slider autoplay as in a slideshow.', 'livemesh-el-addons' ),
220
+ ] );
221
+ $this->add_control( 'autoplay_speed', [
222
+ 'label' => __( 'Autoplay speed in ms', 'livemesh-el-addons' ),
223
+ 'type' => Controls_Manager::NUMBER,
224
+ 'default' => 3000,
225
+ ] );
226
+ $this->add_control( 'animation_speed', [
227
+ 'label' => __( 'Autoplay animation speed in ms', 'livemesh-el-addons' ),
228
+ 'type' => Controls_Manager::NUMBER,
229
+ 'default' => 300,
230
+ ] );
231
+ $this->add_control( 'adaptive_height', [
232
+ 'type' => Controls_Manager::SWITCHER,
233
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
234
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
235
+ 'return_value' => 'yes',
236
+ 'default' => 'no',
237
+ 'label' => __( 'Adaptive Height?', 'livemesh-el-addons' ),
238
+ 'description' => __( 'Enables adaptive height for single slide horizontal multisliders.', 'livemesh-el-addons' ),
239
+ ] );
240
+ $this->end_controls_section();
241
+ $this->start_controls_section( 'section_responsive', [
242
+ 'label' => __( 'Responsive Options', 'livemesh-el-addons' ),
243
+ 'tab' => Controls_Manager::TAB_SETTINGS,
244
+ 'condition' => [
245
+ 'layout' => [ 'carousel' ],
246
+ ],
247
+ ] );
248
+ $this->add_control( 'heading_desktop', [
249
+ 'label' => __( 'Desktop', 'livemesh-el-addons' ),
250
+ 'type' => Controls_Manager::HEADING,
251
+ 'separator' => 'after',
252
+ ] );
253
+ $this->add_control( 'display_columns', [
254
+ 'label' => __( 'Columns per row', 'livemesh-el-addons' ),
255
+ 'type' => Controls_Manager::NUMBER,
256
+ 'min' => 1,
257
+ 'max' => 15,
258
+ 'step' => 1,
259
+ 'default' => 5,
260
+ ] );
261
+ $this->add_control( 'scroll_columns', [
262
+ 'label' => __( 'Columns to scroll', 'livemesh-el-addons' ),
263
+ 'type' => Controls_Manager::NUMBER,
264
+ 'min' => 1,
265
+ 'max' => 15,
266
+ 'step' => 1,
267
+ 'default' => 5,
268
+ ] );
269
+ $this->add_control( 'heading_tablet', [
270
+ 'label' => __( 'Tablet', 'livemesh-el-addons' ),
271
+ 'type' => Controls_Manager::HEADING,
272
+ 'separator' => 'after',
273
+ ] );
274
+ $this->add_control( 'tablet_display_columns', [
275
+ 'label' => __( 'Columns per row', 'livemesh-el-addons' ),
276
+ 'type' => Controls_Manager::NUMBER,
277
+ 'min' => 1,
278
+ 'max' => 12,
279
+ 'step' => 1,
280
+ 'default' => 4,
281
+ ] );
282
+ $this->add_control( 'tablet_scroll_columns', [
283
+ 'label' => __( 'Columns to scroll', 'livemesh-el-addons' ),
284
+ 'type' => Controls_Manager::NUMBER,
285
+ 'min' => 1,
286
+ 'max' => 12,
287
+ 'step' => 1,
288
+ 'default' => 4,
289
+ ] );
290
+ $this->add_control( 'tablet_width', [
291
+ 'label' => __( 'Tablet Resolution', 'livemesh-el-addons' ),
292
+ 'description' => __( 'The resolution to treat as a tablet resolution.', 'livemesh-el-addons' ),
293
+ 'type' => Controls_Manager::NUMBER,
294
+ 'default' => 800,
295
+ ] );
296
+ $this->add_control( 'heading_mobile', [
297
+ 'label' => __( 'Mobile Phone', 'livemesh-el-addons' ),
298
+ 'type' => Controls_Manager::HEADING,
299
+ 'separator' => 'after',
300
+ ] );
301
+ $this->add_control( 'mobile_display_columns', [
302
+ 'label' => __( 'Columns per row', 'livemesh-el-addons' ),
303
+ 'type' => Controls_Manager::NUMBER,
304
+ 'min' => 1,
305
+ 'max' => 6,
306
+ 'step' => 1,
307
+ 'default' => 2,
308
+ ] );
309
+ $this->add_control( 'mobile_scroll_columns', [
310
+ 'label' => __( 'Columns to scroll', 'livemesh-el-addons' ),
311
+ 'type' => Controls_Manager::NUMBER,
312
+ 'min' => 1,
313
+ 'max' => 6,
314
+ 'step' => 1,
315
+ 'default' => 2,
316
+ ] );
317
+ $this->add_control( 'mobile_width', [
318
+ 'label' => __( 'Mobile Resolution', 'livemesh-el-addons' ),
319
+ 'description' => __( 'The resolution to treat as a mobile resolution.', 'livemesh-el-addons' ),
320
+ 'type' => Controls_Manager::NUMBER,
321
+ 'default' => 480,
322
+ ] );
323
+ $this->end_controls_section();
324
  $this->start_controls_section( 'section_grid_settings', [
325
+ 'label' => __( 'Grid Settings', 'livemesh-el-addons' ),
326
+ 'tab' => Controls_Manager::TAB_SETTINGS,
327
+ 'condition' => [
328
+ 'layout' => [ 'grid' ],
329
+ ],
330
  ] );
331
  $this->add_control( 'column_layout', [
332
  'label' => __( 'Column Layout', 'livemesh-el-addons' ),
includes/widgets/services.php CHANGED
@@ -50,12 +50,25 @@ class LAE_Services_Widget extends LAE_Widget_Base
50
 
51
  public function get_script_depends()
52
  {
53
- return [ 'lae-waypoints', 'lae-frontend-scripts' ];
 
 
 
 
 
 
54
  }
55
 
56
  public function get_style_depends()
57
  {
58
- return [ 'lae-animate-styles', 'lae-frontend-styles', 'lae-services-styles' ];
 
 
 
 
 
 
 
59
  }
60
 
61
  protected function _register_controls()
@@ -185,11 +198,19 @@ class LAE_Services_Widget extends LAE_Widget_Base
185
  'style3' => __( 'Style 3', 'livemesh-el-addons' ),
186
  ];
187
  $this->add_control( 'style', [
188
- 'type' => Controls_Manager::SELECT,
189
- 'label' => __( 'Choose Style', 'livemesh-el-addons' ),
190
- 'default' => 'style1',
191
- 'options' => $style_options,
192
- 'prefix_class' => 'lae-services-',
 
 
 
 
 
 
 
 
193
  ] );
194
  $this->add_group_control( Group_Control_Image_Size::get_type(), [
195
  'name' => 'thumbnail_size',
@@ -198,9 +219,191 @@ class LAE_Services_Widget extends LAE_Widget_Base
198
  'default' => 'large',
199
  ] );
200
  $this->end_controls_section();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  $this->start_controls_section( 'section_grid_settings', [
202
- 'label' => __( 'Grid Settings', 'livemesh-el-addons' ),
203
- 'tab' => Controls_Manager::TAB_SETTINGS,
 
 
 
204
  ] );
205
  $this->add_control( 'column_layout', [
206
  'label' => __( 'Column Layout', 'livemesh-el-addons' ),
50
 
51
  public function get_script_depends()
52
  {
53
+ return [
54
+ 'lae-waypoints',
55
+ 'lae-jquery-slick',
56
+ 'lae-frontend-scripts',
57
+ 'lae-carousel-helper-scripts',
58
+ 'lae-services-scripts'
59
+ ];
60
  }
61
 
62
  public function get_style_depends()
63
  {
64
+ return [
65
+ 'lae-icomoon-styles',
66
+ 'lae-animate-styles',
67
+ 'lae-slick-carousel-styles',
68
+ 'lae-slick-carousel-custom-styles',
69
+ 'lae-frontend-styles',
70
+ 'lae-services-styles'
71
+ ];
72
  }
73
 
74
  protected function _register_controls()
198
  'style3' => __( 'Style 3', 'livemesh-el-addons' ),
199
  ];
200
  $this->add_control( 'style', [
201
+ 'type' => Controls_Manager::SELECT,
202
+ 'label' => __( 'Choose Style', 'livemesh-el-addons' ),
203
+ 'default' => 'style1',
204
+ 'options' => $style_options,
205
+ ] );
206
+ $this->add_control( 'layout', [
207
+ 'type' => Controls_Manager::SELECT,
208
+ 'label' => __( 'Choose Layout', 'livemesh-el-addons' ),
209
+ 'default' => 'grid',
210
+ 'options' => [
211
+ 'grid' => __( 'Grid', 'livemesh-el-addons' ),
212
+ 'carousel' => __( 'Carousel', 'livemesh-el-addons' ),
213
+ ],
214
  ] );
215
  $this->add_group_control( Group_Control_Image_Size::get_type(), [
216
  'name' => 'thumbnail_size',
219
  'default' => 'large',
220
  ] );
221
  $this->end_controls_section();
222
+ $this->start_controls_section( 'section_carousel_settings', [
223
+ 'label' => __( 'Carousel Settings', 'livemesh-el-addons' ),
224
+ 'tab' => Controls_Manager::TAB_SETTINGS,
225
+ 'condition' => [
226
+ 'layout' => [ 'carousel' ],
227
+ ],
228
+ ] );
229
+ $this->add_responsive_control( 'gutter', [
230
+ 'label' => __( 'Spacing between items', 'livemesh-el-addons' ),
231
+ 'type' => Controls_Manager::SLIDER,
232
+ 'size_units' => [ 'px' ],
233
+ 'default' => [
234
+ 'size' => 10,
235
+ ],
236
+ 'range' => [
237
+ 'px' => [
238
+ 'min' => 0,
239
+ 'max' => 50,
240
+ ],
241
+ ],
242
+ 'selectors' => [
243
+ '{{WRAPPER}} .lae-services-carousel .slick-slide' => 'margin: 0 {{SIZE}}{{UNIT}};',
244
+ '{{WRAPPER}} .lae-services-carousel .slick-list' => 'margin: 0 -{{SIZE}}{{UNIT}};',
245
+ ],
246
+ ] );
247
+ $this->add_control( 'arrows', [
248
+ 'type' => Controls_Manager::SWITCHER,
249
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
250
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
251
+ 'return_value' => 'yes',
252
+ 'default' => 'yes',
253
+ 'label' => __( 'Prev/Next Arrows?', 'livemesh-el-addons' ),
254
+ ] );
255
+ $this->add_control( 'dots', [
256
+ 'type' => Controls_Manager::SWITCHER,
257
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
258
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
259
+ 'return_value' => 'yes',
260
+ 'default' => 'yes',
261
+ 'label' => __( 'Show dot indicators for navigation?', 'livemesh-el-addons' ),
262
+ ] );
263
+ $this->add_control( 'pause_on_hover', [
264
+ 'type' => Controls_Manager::SWITCHER,
265
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
266
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
267
+ 'return_value' => 'yes',
268
+ 'default' => 'yes',
269
+ 'label' => __( 'Pause on Hover?', 'livemesh-el-addons' ),
270
+ ] );
271
+ $this->add_control( 'pause_on_action', [
272
+ 'type' => Controls_Manager::SWITCHER,
273
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
274
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
275
+ 'return_value' => 'yes',
276
+ 'default' => 'yes',
277
+ "description" => __( "Pause the slideshow when interacting with control elements.", "livemesh-el-addons" ),
278
+ "label" => __( "Pause on action?", "livemesh-el-addons" ),
279
+ ] );
280
+ $this->add_control( 'loop', [
281
+ 'type' => Controls_Manager::SWITCHER,
282
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
283
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
284
+ 'return_value' => 'yes',
285
+ 'default' => 'yes',
286
+ "description" => __( "Should the animation loop?", "livemesh-el-addons" ),
287
+ "label" => __( "Loop", "livemesh-el-addons" ),
288
+ ] );
289
+ $this->add_control( 'autoplay', [
290
+ 'type' => Controls_Manager::SWITCHER,
291
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
292
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
293
+ 'return_value' => 'yes',
294
+ 'default' => 'yes',
295
+ 'label' => __( 'Autoplay?', 'livemesh-el-addons' ),
296
+ 'description' => __( 'Should the slider autoplay as in a slideshow.', 'livemesh-el-addons' ),
297
+ ] );
298
+ $this->add_control( 'autoplay_speed', [
299
+ 'label' => __( 'Autoplay speed in ms', 'livemesh-el-addons' ),
300
+ 'type' => Controls_Manager::NUMBER,
301
+ 'default' => 3000,
302
+ ] );
303
+ $this->add_control( 'animation_speed', [
304
+ 'label' => __( 'Autoplay animation speed in ms', 'livemesh-el-addons' ),
305
+ 'type' => Controls_Manager::NUMBER,
306
+ 'default' => 300,
307
+ ] );
308
+ $this->add_control( 'adaptive_height', [
309
+ 'type' => Controls_Manager::SWITCHER,
310
+ 'label_off' => __( 'No', 'livemesh-el-addons' ),
311
+ 'label_on' => __( 'Yes', 'livemesh-el-addons' ),
312
+ 'return_value' => 'yes',
313
+ 'default' => 'no',
314
+ 'label' => __( 'Adaptive Height?', 'livemesh-el-addons' ),
315
+ 'description' => __( 'Enables adaptive height for single slide horizontal multisliders.', 'livemesh-el-addons' ),
316
+ ] );
317
+ $this->end_controls_section();
318
+ $this->start_controls_section( 'section_responsive', [
319
+ 'label' => __( 'Responsive Options', 'livemesh-el-addons' ),
320
+ 'tab' => Controls_Manager::TAB_SETTINGS,
321
+ 'condition' => [
322
+ 'layout' => [ 'carousel' ],
323
+ ],
324
+ ] );
325
+ $this->add_control( 'heading_desktop', [
326
+ 'label' => __( 'Desktop', 'livemesh-el-addons' ),
327
+ 'type' => Controls_Manager::HEADING,
328
+ 'separator' => 'after',
329
+ ] );
330
+ $this->add_control( 'display_columns', [
331
+ 'label' => __( 'Columns per row', 'livemesh-el-addons' ),
332
+ 'type' => Controls_Manager::NUMBER,
333
+ 'min' => 1,
334
+ 'max' => 5,
335
+ 'step' => 1,
336
+ 'default' => 3,
337
+ ] );
338
+ $this->add_control( 'scroll_columns', [
339
+ 'label' => __( 'Columns to scroll', 'livemesh-el-addons' ),
340
+ 'type' => Controls_Manager::NUMBER,
341
+ 'min' => 1,
342
+ 'max' => 5,
343
+ 'step' => 1,
344
+ 'default' => 3,
345
+ ] );
346
+ $this->add_control( 'heading_tablet', [
347
+ 'label' => __( 'Tablet', 'livemesh-el-addons' ),
348
+ 'type' => Controls_Manager::HEADING,
349
+ 'separator' => 'after',
350
+ ] );
351
+ $this->add_control( 'tablet_display_columns', [
352
+ 'label' => __( 'Columns per row', 'livemesh-el-addons' ),
353
+ 'type' => Controls_Manager::NUMBER,
354
+ 'min' => 1,
355
+ 'max' => 5,
356
+ 'step' => 1,
357
+ 'default' => 2,
358
+ ] );
359
+ $this->add_control( 'tablet_scroll_columns', [
360
+ 'label' => __( 'Columns to scroll', 'livemesh-el-addons' ),
361
+ 'type' => Controls_Manager::NUMBER,
362
+ 'min' => 1,
363
+ 'max' => 5,
364
+ 'step' => 1,
365
+ 'default' => 2,
366
+ ] );
367
+ $this->add_control( 'tablet_width', [
368
+ 'label' => __( 'Tablet Resolution', 'livemesh-el-addons' ),
369
+ 'description' => __( 'The resolution to treat as a tablet resolution.', 'livemesh-el-addons' ),
370
+ 'type' => Controls_Manager::NUMBER,
371
+ 'default' => 800,
372
+ ] );
373
+ $this->add_control( 'heading_mobile', [
374
+ 'label' => __( 'Mobile Phone', 'livemesh-el-addons' ),
375
+ 'type' => Controls_Manager::HEADING,
376
+ 'separator' => 'after',
377
+ ] );
378
+ $this->add_control( 'mobile_display_columns', [
379
+ 'label' => __( 'Columns per row', 'livemesh-el-addons' ),
380
+ 'type' => Controls_Manager::NUMBER,
381
+ 'min' => 1,
382
+ 'max' => 3,
383
+ 'step' => 1,
384
+ 'default' => 1,
385
+ ] );
386
+ $this->add_control( 'mobile_scroll_columns', [
387
+ 'label' => __( 'Columns to scroll', 'livemesh-el-addons' ),
388
+ 'type' => Controls_Manager::NUMBER,
389
+ 'min' => 1,
390
+ 'max' => 3,
391
+ 'step' => 1,
392
+ 'default' => 1,
393
+ ] );
394
+ $this->add_control( 'mobile_width', [
395
+ 'label' => __( 'Mobile Resolution', 'livemesh-el-addons' ),
396
+ 'description' => __( 'The resolution to treat as a mobile resolution.', 'livemesh-el-addons' ),
397
+ 'type' => Controls_Manager::NUMBER,
398
+ 'default' => 480,
399
+ ] );
400
+ $this->end_controls_section();
401
  $this->start_controls_section( 'section_grid_settings', [
402
+ 'label' => __( 'Grid Settings', 'livemesh-el-addons' ),
403
+ 'tab' => Controls_Manager::TAB_SETTINGS,
404
+ 'condition' => [
405
+ 'layout' => [ 'grid' ],
406
+ ],
407
  ] );
408
  $this->add_control( 'column_layout', [
409
  'label' => __( 'Column Layout', 'livemesh-el-addons' ),
plugin.php CHANGED
@@ -45,7 +45,7 @@ if ( !class_exists( 'Livemesh_Elementor_Addons' ) ) {
45
  public function __clone()
46
  {
47
  // Cloning instances of the class is forbidden
48
- _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'livemesh-el-addons' ), '6.9.1' );
49
  }
50
 
51
  /**
@@ -55,7 +55,7 @@ if ( !class_exists( 'Livemesh_Elementor_Addons' ) ) {
55
  public function __wakeup()
56
  {
57
  // Unserializing instances of the class is forbidden
58
- _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'livemesh-el-addons' ), '6.9.1' );
59
  }
60
 
61
  private function setup_debug_constants()
@@ -321,6 +321,20 @@ if ( !class_exists( 'Livemesh_Elementor_Addons' ) ) {
321
  LAE_VERSION,
322
  true
323
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
  wp_register_script(
325
  'lae-testimonials-scripts',
326
  LAE_PLUGIN_URL . 'assets/js/widgets/testimonials' . $suffix . '.js',
45
  public function __clone()
46
  {
47
  // Cloning instances of the class is forbidden
48
+ _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'livemesh-el-addons' ), '6.9.2' );
49
  }
50
 
51
  /**
55
  public function __wakeup()
56
  {
57
  // Unserializing instances of the class is forbidden
58
+ _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'livemesh-el-addons' ), '6.9.2' );
59
  }
60
 
61
  private function setup_debug_constants()
321
  LAE_VERSION,
322
  true
323
  );
324
+ wp_register_script(
325
+ 'lae-clients-scripts',
326
+ LAE_PLUGIN_URL . 'assets/js/widgets/clients' . $suffix . '.js',
327
+ array( 'lae-carousel-helper-scripts', 'elementor-frontend' ),
328
+ LAE_VERSION,
329
+ true
330
+ );
331
+ wp_register_script(
332
+ 'lae-services-scripts',
333
+ LAE_PLUGIN_URL . 'assets/js/widgets/services' . $suffix . '.js',
334
+ array( 'lae-carousel-helper-scripts', 'elementor-frontend' ),
335
+ LAE_VERSION,
336
+ true
337
+ );
338
  wp_register_script(
339
  'lae-testimonials-scripts',
340
  LAE_PLUGIN_URL . 'assets/js/widgets/testimonials' . $suffix . '.js',
readme.txt CHANGED
@@ -7,7 +7,7 @@ Tags: elementor, elementor addons, elementor extensions, elementor widgets, page
7
  Requires at least: 4.5
8
  Tested up to: 5.7
9
  Requires PHP: 5.6
10
- Stable Tag: 6.9.1
11
  License: GPLv3
12
  License URI: https://opensource.org/licenses/GPL-3.0
13
 
@@ -258,6 +258,10 @@ Email us at support[at]livemeshthemes.com and we will be happy to assist you.
258
 
259
 
260
 
 
 
 
 
261
  = 6.9.1 =
262
  * Added - Carousel option along with Grid for Team Members and Testimonials Elementor addons
263
  * Added - Support for star rating in Testimonials addons
7
  Requires at least: 4.5
8
  Tested up to: 5.7
9
  Requires PHP: 5.6
10
+ Stable Tag: 6.9.2
11
  License: GPLv3
12
  License URI: https://opensource.org/licenses/GPL-3.0
13
 
258
 
259
 
260
 
261
+ = 6.9.2 =
262
+ * Added - Carousel option along with Grid for Services and Clients Elementor addons
263
+ * Added - Extensive customization options for Carousel function of Services, Team Members, Testimonials and Clients addons
264
+
265
  = 6.9.1 =
266
  * Added - Carousel option along with Grid for Team Members and Testimonials Elementor addons
267
  * Added - Support for star rating in Testimonials addons
templates/addons/clients/content.php CHANGED
@@ -12,7 +12,7 @@ if (!defined('ABSPATH')) {
12
 
13
  ?>
14
 
15
- <div class="lae-grid-item lae-client <?php echo $animate_class; ?>" <?php echo $animation_attr; ?>>
16
 
17
  <?php if (!empty($client['client_image'])): ?>
18
 
12
 
13
  ?>
14
 
15
+ <div class="lae-client <?php echo $animate_class; ?>" <?php echo $animation_attr; ?>>
16
 
17
  <?php if (!empty($client['client_image'])): ?>
18
 
templates/addons/clients/loop.php CHANGED
@@ -10,26 +10,64 @@ if (!defined('ABSPATH')) {
10
  exit; // Exit if accessed directly
11
  }
12
 
13
- list($animate_class, $animation_attr) = lae_get_animation_atts($settings['widget_animation']);
 
 
 
14
 
15
  $args['animate_class'] = $animate_class;
16
 
17
  $args['animation_attr'] = $animation_attr;
18
 
19
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
- <div class="lae-clients">
 
 
 
 
 
 
 
 
 
22
 
23
- <div class="lae-uber-grid-container <?php echo lae_get_grid_classes($settings); ?>">
24
 
25
- <?php foreach ($settings['clients'] as $client): ?>
26
 
27
- <?php $args['client'] = $client; ?>
28
 
29
- <?php lae_get_template_part("addons/clients/content", $args); ?>
30
 
31
- <?php endforeach; ?>
32
 
33
- </div>
34
 
35
- </div><!-- .lae-clients -->
10
  exit; // Exit if accessed directly
11
  }
12
 
13
+ $animate_class = $animation_attr = '';
14
+
15
+ if ($settings['layout'] == 'grid')
16
+ list($animate_class, $animation_attr) = lae_get_animation_atts($settings['widget_animation']);
17
 
18
  $args['animate_class'] = $animate_class;
19
 
20
  $args['animation_attr'] = $animation_attr;
21
 
22
+ $class_attr = $data_attr = '';
23
+ $dir = is_rtl() ? ' dir="rtl"' : '';
24
+
25
+ if ($settings['layout'] == 'carousel') :
26
+
27
+ $carousel_settings = [
28
+ 'arrows' => ('yes' === $settings['arrows']),
29
+ 'dots' => ('yes' === $settings['dots']),
30
+ 'autoplay' => ('yes' === $settings['autoplay']),
31
+ 'autoplay_speed' => absint($settings['autoplay_speed']),
32
+ 'animation_speed' => absint($settings['animation_speed']),
33
+ 'pause_on_hover' => ('yes' === $settings['pause_on_hover']),
34
+ 'adaptive_height' => ('yes' === $settings['adaptive_height']),
35
+ ];
36
+
37
+ $responsive_settings = [
38
+ 'display_columns' => $settings['display_columns'],
39
+ 'scroll_columns' => $settings['scroll_columns'],
40
+ 'tablet_width' => $settings['tablet_width'],
41
+ 'tablet_display_columns' => $settings['tablet_display_columns'],
42
+ 'tablet_scroll_columns' => $settings['tablet_scroll_columns'],
43
+ 'mobile_width' => $settings['mobile_width'],
44
+ 'mobile_display_columns' => $settings['mobile_display_columns'],
45
+ 'mobile_scroll_columns' => $settings['mobile_scroll_columns'],
46
+ ];
47
+
48
+ $carousel_settings = array_merge($carousel_settings, $responsive_settings);
49
 
50
+ $class_attr = 'lae-clients-carousel lae-container';
51
+ $data_attr = ' data-settings=\'' . wp_json_encode($carousel_settings) . '\'';
52
+
53
+ else:
54
+
55
+ $class_attr = 'lae-uber-grid-container ' . lae_get_grid_classes($settings);
56
+
57
+ endif;
58
+
59
+ ?>
60
 
61
+ <div<?php echo $dir; ?> class="lae-clients <?php echo $class_attr; ?>" <?php echo $data_attr; ?>>
62
 
63
+ <?php foreach ($settings['clients'] as $client): ?>
64
 
65
+ <?php $args['client'] = $client; ?>
66
 
67
+ <?php lae_get_template_part("addons/clients/content", $args); ?>
68
 
69
+ <?php endforeach; ?>
70
 
71
+ </div><!-- .lae-clients -->
72
 
73
+ <div class="lae-clear"></div>
templates/addons/services/content.php CHANGED
@@ -38,92 +38,91 @@ if (!empty($service['service_link']['url'])) {
38
  }
39
  }
40
 
41
- list($animate_class, $animation_attr) = lae_get_animation_atts($service['widget_animation']);
42
 
43
- ?>
44
-
45
- <div class="lae-grid-item lae-service-wrapper">
46
 
47
- <div class="lae-service <?php echo $animate_class; ?>" <?php echo $animation_attr; ?>>
48
 
49
- <?php if ($service['icon_type'] == 'icon_image') : ?>
50
 
51
- <?php if (!empty($service['icon_image'])): ?>
52
 
53
- <div class="lae-image-wrapper">
54
 
55
- <?php
56
 
57
- $image_html = lae_get_image_html($service['icon_image'], 'thumbnail_size', $settings);
58
 
59
- if ($has_link)
60
- $image_html = '<a class="lae-title-link" ' . $widget_instance->get_render_attribute_string($link_key) . '>' . $image_html . '</a>';
61
 
62
- echo $image_html;
 
63
 
64
- ?>
65
 
66
- </div>
67
 
68
- <?php endif; ?>
69
 
70
- <?php elseif ($service['icon_type'] == 'icon' && (!empty($service['icon']) || !empty($service['selected_icon']['value']))) : ?>
71
 
72
- <?php
73
 
74
- $migrated = isset($service['__fa4_migrated']['selected_icon']);
75
- $is_new = empty($service['icon']) && $migration_allowed;
76
 
77
- ?>
 
78
 
79
- <div class="lae-icon-wrapper">
80
 
81
- <?php
82
 
83
- if ($is_new || $migrated) :
84
 
85
- ob_start();
86
 
87
- Icons_Manager::render_icon($service['selected_icon'], ['aria-hidden' => 'true']);
88
 
89
- $icon_html = ob_get_contents();
90
 
91
- ob_end_clean();
92
 
93
- else :
94
 
95
- $icon_html = '<i class="' . esc_attr($service['icon']) . '" aria-hidden="true"></i>';
96
 
97
- endif;
98
 
99
- if ($has_link)
100
- $icon_html = '<a class="lae-icon-link" ' . $widget_instance->get_render_attribute_string($link_key) . '>' . $icon_html . '</a>';
101
 
102
- echo $icon_html;
 
103
 
104
- ?>
105
 
106
- </div>
107
 
108
- <?php endif; ?>
109
 
110
- <div class="lae-service-text">
111
 
112
- <?php
113
 
114
- $title_html = '<' . lae_validate_html_tag($settings['title_tag']) . ' class="lae-title">' . esc_html($service['service_title']) . '</' . lae_validate_html_tag($settings['title_tag']) . '>';
115
 
116
- if ($has_link)
117
- $title_html = '<a class="lae-title-link" ' . $widget_instance->get_render_attribute_string($link_key) . '>' . $title_html . '</a>';
118
 
119
- echo $title_html;
 
120
 
121
- ?>
122
 
123
- <div class="lae-service-details"><?php echo do_shortcode(wp_kses_post($service['service_excerpt'])); ?></div>
124
 
125
- </div><!-- .lae-service-text -->
126
 
127
- </div><!-- .lae-service -->
128
 
129
- </div><!-- .lae-service-wrapper -->
38
  }
39
  }
40
 
41
+ $class_attr = $data_attr = '';
42
 
43
+ if ($settings['layout'] == 'grid')
44
+ list($class_attr, $data_attr) = lae_get_animation_atts($service['widget_animation']);
 
45
 
46
+ ?>
47
 
48
+ <div class="lae-service <?php echo $class_attr; ?>" <?php echo $data_attr; ?>>
49
 
50
+ <?php if ($service['icon_type'] == 'icon_image') : ?>
51
 
52
+ <?php if (!empty($service['icon_image'])): ?>
53
 
54
+ <div class="lae-image-wrapper">
55
 
56
+ <?php
57
 
58
+ $image_html = lae_get_image_html($service['icon_image'], 'thumbnail_size', $settings);
 
59
 
60
+ if ($has_link)
61
+ $image_html = '<a class="lae-title-link" ' . $widget_instance->get_render_attribute_string($link_key) . '>' . $image_html . '</a>';
62
 
63
+ echo $image_html;
64
 
65
+ ?>
66
 
67
+ </div>
68
 
69
+ <?php endif; ?>
70
 
71
+ <?php elseif ($service['icon_type'] == 'icon' && (!empty($service['icon']) || !empty($service['selected_icon']['value']))) : ?>
72
 
73
+ <?php
 
74
 
75
+ $migrated = isset($service['__fa4_migrated']['selected_icon']);
76
+ $is_new = empty($service['icon']) && $migration_allowed;
77
 
78
+ ?>
79
 
80
+ <div class="lae-icon-wrapper">
81
 
82
+ <?php
83
 
84
+ if ($is_new || $migrated) :
85
 
86
+ ob_start();
87
 
88
+ Icons_Manager::render_icon($service['selected_icon'], ['aria-hidden' => 'true']);
89
 
90
+ $icon_html = ob_get_contents();
91
 
92
+ ob_end_clean();
93
 
94
+ else :
95
 
96
+ $icon_html = '<i class="' . esc_attr($service['icon']) . '" aria-hidden="true"></i>';
97
 
98
+ endif;
 
99
 
100
+ if ($has_link)
101
+ $icon_html = '<a class="lae-icon-link" ' . $widget_instance->get_render_attribute_string($link_key) . '>' . $icon_html . '</a>';
102
 
103
+ echo $icon_html;
104
 
105
+ ?>
106
 
107
+ </div>
108
 
109
+ <?php endif; ?>
110
 
111
+ <div class="lae-service-text">
112
 
113
+ <?php
114
 
115
+ $title_html = '<' . lae_validate_html_tag($settings['title_tag']) . ' class="lae-title">' . esc_html($service['service_title']) . '</' . lae_validate_html_tag($settings['title_tag']) . '>';
 
116
 
117
+ if ($has_link)
118
+ $title_html = '<a class="lae-title-link" ' . $widget_instance->get_render_attribute_string($link_key) . '>' . $title_html . '</a>';
119
 
120
+ echo $title_html;
121
 
122
+ ?>
123
 
124
+ <div class="lae-service-details"><?php echo do_shortcode(wp_kses_post($service['service_excerpt'])); ?></div>
125
 
126
+ </div><!-- .lae-service-text -->
127
 
128
+ </div><!-- .lae-service -->
templates/addons/services/loop.php CHANGED
@@ -12,7 +12,48 @@ if (!defined('ABSPATH')) {
12
 
13
  ?>
14
 
15
- <div class="lae-services lae-<?php echo $settings['style']; ?> lae-uber-grid-container <?php echo lae_get_grid_classes($settings); ?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  <?php foreach ($settings['services'] as $index => $service): ?>
18
 
12
 
13
  ?>
14
 
15
+ <?php
16
+
17
+ $class_attr = $data_attr = '';
18
+ $dir = is_rtl() ? ' dir="rtl"' : '';
19
+
20
+ if ($settings['layout'] == 'carousel') :
21
+
22
+ $carousel_settings = [
23
+ 'arrows' => ('yes' === $settings['arrows']),
24
+ 'dots' => ('yes' === $settings['dots']),
25
+ 'autoplay' => ('yes' === $settings['autoplay']),
26
+ 'autoplay_speed' => absint($settings['autoplay_speed']),
27
+ 'animation_speed' => absint($settings['animation_speed']),
28
+ 'pause_on_hover' => ('yes' === $settings['pause_on_hover']),
29
+ 'adaptive_height' => ('yes' === $settings['adaptive_height']),
30
+ ];
31
+
32
+ $responsive_settings = [
33
+ 'display_columns' => $settings['display_columns'],
34
+ 'scroll_columns' => $settings['scroll_columns'],
35
+ 'tablet_width' => $settings['tablet_width'],
36
+ 'tablet_display_columns' => $settings['tablet_display_columns'],
37
+ 'tablet_scroll_columns' => $settings['tablet_scroll_columns'],
38
+ 'mobile_width' => $settings['mobile_width'],
39
+ 'mobile_display_columns' => $settings['mobile_display_columns'],
40
+ 'mobile_scroll_columns' => $settings['mobile_scroll_columns'],
41
+ ];
42
+
43
+ $carousel_settings = array_merge($carousel_settings, $responsive_settings);
44
+
45
+ $class_attr = 'lae-services-carousel lae-container';
46
+ $data_attr = ' data-settings=\'' . wp_json_encode($carousel_settings) . '\'';
47
+
48
+ else:
49
+
50
+ $class_attr = 'lae-uber-grid-container ' . lae_get_grid_classes($settings);
51
+
52
+ endif;
53
+
54
+ ?>
55
+
56
+ <div<?php echo $dir; ?> class="lae-services lae-services-<?php echo $settings['style']; ?> <?php echo $class_attr; ?>" <?php echo $data_attr; ?>>
57
 
58
  <?php foreach ($settings['services'] as $index => $service): ?>
59