Premium Addons for Elementor - Version 3.1.9

Version Description

  • Tweak: WPML Compatibility for all widgets.
  • Tweak: Added Dynamic Content support for all URL fields.
  • Fixed: Title and description container rendered even title and description are empty.
Download this release

Release Info

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

Code changes from version 3.1.8 to 3.1.9

admin/settings/version-control.php CHANGED
@@ -79,7 +79,7 @@ class PA_Version_Control {
79
  <tr class="pa-roll-row">
80
  <th>Rollback Version</th>
81
  <td>
82
- <div><?php echo sprintf( '<a target="_blank" href="%s" class="button pa-btn pa-rollback-button elementor-button-spinner">Reinstall Version 3.1.7</a>', wp_nonce_url( admin_url( 'admin-post.php?action=premium_addons_rollback' ), 'premium_addons_rollback' ) ); ?> </div>
83
  <p class="pa-roll-desc"><span>Warning: Please backup your database before making the rollback.</span></p>
84
  </td>
85
  </tr>
79
  <tr class="pa-roll-row">
80
  <th>Rollback Version</th>
81
  <td>
82
+ <div><?php echo sprintf( '<a target="_blank" href="%s" class="button pa-btn pa-rollback-button elementor-button-spinner">Reinstall Version 3.1.8</a>', wp_nonce_url( admin_url( 'admin-post.php?action=premium_addons_rollback' ), 'premium_addons_rollback' ) ); ?> </div>
83
  <p class="pa-roll-desc"><span>Warning: Please backup your database before making the rollback.</span></p>
84
  </td>
85
  </tr>
includes/class-addons-integration.php CHANGED
@@ -19,7 +19,7 @@ class Premium_Addons_Integration {
19
 
20
  add_action( 'elementor/widgets/widgets_registered', array( $this, 'premium_widgets_area' ) );
21
 
22
- add_action('elementor/editor/before_enqueue_scripts', array( $this,'enqueue_editor_scripts') );
23
 
24
  add_action( 'elementor/preview/enqueue_styles', array( $this, 'premium_enqueue_preview_styles' ) );
25
 
@@ -29,7 +29,7 @@ class Premium_Addons_Integration {
29
 
30
  add_action( 'elementor/frontend/after_register_scripts', array( $this, 'premium_register_frontend_scripts' ) );
31
 
32
- add_action('wp_enqueue_scripts', array($this, 'premium_maps_required_script'));
33
  }
34
 
35
  /**
19
 
20
  add_action( 'elementor/widgets/widgets_registered', array( $this, 'premium_widgets_area' ) );
21
 
22
+ add_action( 'elementor/editor/before_enqueue_scripts', array( $this,'enqueue_editor_scripts') );
23
 
24
  add_action( 'elementor/preview/enqueue_styles', array( $this, 'premium_enqueue_preview_styles' ) );
25
 
29
 
30
  add_action( 'elementor/frontend/after_register_scripts', array( $this, 'premium_register_frontend_scripts' ) );
31
 
32
+ add_action( 'wp_enqueue_scripts', array($this, 'premium_maps_required_script'));
33
  }
34
 
35
  /**
includes/compatibility/class-premium-addons-wpml.php ADDED
@@ -0,0 +1,566 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PremiumAddons\Compatibility\WPML;
4
+
5
+ if ( ! defined('ABSPATH') ) exit; // No access of directly access
6
+
7
+ if ( ! class_exists ('Premium_Addons_Wpml') ) {
8
+
9
+ /**
10
+ * Class Premium_Addons_Wpml.
11
+ */
12
+ class Premium_Addons_Wpml {
13
+
14
+ /*
15
+ * Instance of the class
16
+ * @access private
17
+ * @since 3.1.9
18
+ */
19
+ private static $instance = null;
20
+
21
+ /**
22
+ * Constructor
23
+ */
24
+ public function __construct() {
25
+
26
+ // WPML String Translation plugin exist check.
27
+ if ( is_wpml_string_translation_active() ) {
28
+
29
+ $this->includes();
30
+
31
+ add_filter( 'wpml_elementor_widgets_to_translate', [ $this, 'translatable_widgets' ] );
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Integrations class for widgets with complex controls.
37
+ *
38
+ * @since 3.1.9
39
+ */
40
+ public function includes() {
41
+
42
+ include_once( 'widgets/fancy-text.php' );
43
+ include_once( 'widgets/grid.php' );
44
+ include_once( 'widgets/maps.php' );
45
+ include_once( 'widgets/pricing-table.php' );
46
+ include_once( 'widgets/progress-bar.php' );
47
+ include_once( 'widgets/vertical-scroll.php' );
48
+
49
+ }
50
+
51
+ /**
52
+ * Widgets to translate.
53
+ *
54
+ * @since 3.1.9
55
+ * @param array $widgets Widget array.
56
+ * @return array
57
+ */
58
+ function translatable_widgets( $widgets ) {
59
+
60
+ $widgets['premium-addon-banner'] = [
61
+ 'conditions' => [ 'widgetType' => 'premium-addon-banner' ],
62
+ 'fields' => [
63
+ [
64
+ 'field' => 'premium_banner_title',
65
+ 'type' => __( 'Banner : Title', 'premium-addons-for-elementor' ),
66
+ 'editor_type' => 'LINE',
67
+ ],
68
+ [
69
+ 'field' => 'premium_banner_description',
70
+ 'type' => __( 'Banner : Description', 'premium-addons-for-elementor' ),
71
+ 'editor_type' => 'AREA',
72
+ ],
73
+ [
74
+ 'field' => 'premium_banner_more_text',
75
+ 'type' => __( 'Banner : Button Text', 'premium-addons-for-elementor' ),
76
+ 'editor_type' => 'LINE',
77
+ ],
78
+ 'premium_banner_image_custom_link' => [
79
+ 'field' => 'url',
80
+ 'type' => __( 'Banner : URL', 'premium-addons-for-elementor' ),
81
+ 'editor_type' => 'LINK',
82
+ ],
83
+ 'premium_banner_link' => [
84
+ 'field' => 'url',
85
+ 'type' => __( 'Banner : Button URL', 'premium-addons-for-elementor' ),
86
+ 'editor_type' => 'LINK',
87
+ ],
88
+ ]
89
+ ];
90
+
91
+ $widgets['premium-addon-button'] = [
92
+ 'conditions' => [ 'widgetType' => 'premium-addon-button' ],
93
+ 'fields' => [
94
+ [
95
+ 'field' => 'premium_button_text',
96
+ 'type' => __( 'Button : Text', 'premium-addons-for-elementor' ),
97
+ 'editor_type' => 'LINE',
98
+ ],
99
+ 'premium_button_link' => [
100
+ 'field' => 'url',
101
+ 'type' => __( 'Button : URL', 'premium-addons-for-elementor' ),
102
+ 'editor_type' => 'LINK',
103
+ ],
104
+ ]
105
+ ];
106
+
107
+ $widgets['premium-countdown-timer'] = [
108
+ 'conditions' => [ 'widgetType' => 'premium-countdown-timer' ],
109
+ 'fields' => [
110
+ [
111
+ 'field' => 'premium_countdown_expiry_text_',
112
+ 'type' => __( 'Countdown : Expiration Message', 'premium-addons-for-elementor' ),
113
+ 'editor_type' => 'AREA',
114
+ ],
115
+ [
116
+ 'field' => 'premium_countdown_day_singular',
117
+ 'type' => __( 'Countdown : Day Singular', 'premium-addons-for-elementor' ),
118
+ 'editor_type' => 'LINE',
119
+ ],
120
+ [
121
+ 'field' => 'premium_countdown_day_plural',
122
+ 'type' => __( 'Countdown : Day Plural', 'premium-addons-for-elementor' ),
123
+ 'editor_type' => 'LINE',
124
+ ],
125
+ [
126
+ 'field' => 'premium_countdown_week_singular',
127
+ 'type' => __( 'Countdown : Week Singular', 'premium-addons-for-elementor' ),
128
+ 'editor_type' => 'LINE',
129
+ ],
130
+ [
131
+ 'field' => 'premium_countdown_week_plural',
132
+ 'type' => __( 'Countdown : Week Plural', 'premium-addons-for-elementor' ),
133
+ 'editor_type' => 'LINE',
134
+ ],
135
+ [
136
+ 'field' => 'premium_countdown_month_singular',
137
+ 'type' => __( 'Countdown : Month Singular', 'premium-addons-for-elementor' ),
138
+ 'editor_type' => 'LINE',
139
+ ],
140
+ [
141
+ 'field' => 'premium_countdown_month_plural',
142
+ 'type' => __( 'Countdown : Month Plural', 'premium-addons-for-elementor' ),
143
+ 'editor_type' => 'LINE',
144
+ ],
145
+ [
146
+ 'field' => 'premium_countdown_year_singular',
147
+ 'type' => __( 'Countdown : Year Singular', 'premium-addons-for-elementor' ),
148
+ 'editor_type' => 'LINE',
149
+ ],
150
+ [
151
+ 'field' => 'premium_countdown_year_plural',
152
+ 'type' => __( 'Countdown : Year Plural', 'premium-addons-for-elementor' ),
153
+ 'editor_type' => 'LINE',
154
+ ],
155
+ [
156
+ 'field' => 'premium_countdown_hour_singular',
157
+ 'type' => __( 'Countdown : Hour Singular', 'premium-addons-for-elementor' ),
158
+ 'editor_type' => 'LINE',
159
+ ],
160
+ [
161
+ 'field' => 'premium_countdown_hour_plural',
162
+ 'type' => __( 'Countdown : Hour Plural', 'premium-addons-for-elementor' ),
163
+ 'editor_type' => 'LINE',
164
+ ],
165
+ [
166
+ 'field' => 'premium_countdown_minute_singular',
167
+ 'type' => __( 'Countdown : Minute Singular', 'premium-addons-for-elementor' ),
168
+ 'editor_type' => 'LINE',
169
+ ],
170
+ [
171
+ 'field' => 'premium_countdown_minute_plural',
172
+ 'type' => __( 'Countdown : Minute Plural', 'premium-addons-for-elementor' ),
173
+ 'editor_type' => 'LINE',
174
+ ],
175
+ [
176
+ 'field' => 'premium_countdown_second_singular',
177
+ 'type' => __( 'Countdown : Second Singular', 'premium-addons-for-elementor' ),
178
+ 'editor_type' => 'LINE',
179
+ ],
180
+ [
181
+ 'field' => 'premium_countdown_second_plural',
182
+ 'type' => __( 'Countdown : Second Plural', 'premium-addons-for-elementor' ),
183
+ 'editor_type' => 'LINE',
184
+ ],
185
+ 'premium_countdown_expiry_redirection_' => [
186
+ 'field' => 'url',
187
+ 'type' => __( 'Countdown : Direction URL', 'premium-addons-for-elementor' ),
188
+ 'editor_type' => 'LINK',
189
+ ],
190
+ ]
191
+ ];
192
+
193
+ $widgets['premium-counter'] = [
194
+ 'conditions' => [ 'widgetType' => 'premium-counter' ],
195
+ 'fields' => [
196
+ [
197
+ 'field' => 'premium_counter_title',
198
+ 'type' => __( 'Counter: Title Text', 'premium-addons-for-elementor' ),
199
+ 'editor_type' => 'LINE',
200
+ ],
201
+ [
202
+ 'field' => 'premium_counter_t_separator',
203
+ 'type' => __( 'Counter: Thousands Separator', 'premium-addons-for-elementor' ),
204
+ 'editor_type' => 'LINE',
205
+ ],
206
+ [
207
+ 'field' => 'premium_counter_preffix',
208
+ 'type' => __( 'Counter: Prefix', 'premium-addons-for-elementor' ),
209
+ 'editor_type' => 'LINE',
210
+ ],
211
+ [
212
+ 'field' => 'premium_counter_suffix',
213
+ 'type' => __( 'Counter: Suffix', 'premium-addons-for-elementor' ),
214
+ 'editor_type' => 'LINE',
215
+ ],
216
+
217
+ 'premium_dual_heading_link' => [
218
+ 'field' => 'url',
219
+ 'type' => __( 'Advanced Heading : Heading URL', 'premium-addons-for-elementor' ),
220
+ 'editor_type' => 'LINK',
221
+ ]
222
+ ]
223
+ ];
224
+
225
+ $widgets['premium-addon-dual-header'] = [
226
+ 'conditions' => [ 'widgetType' => 'premium-addon-dual-header' ],
227
+ 'fields' => [
228
+ [
229
+ 'field' => 'premium_dual_header_first_header_text',
230
+ 'type' => __( 'Dual Heading : First Heading', 'premium-addons-for-elementor' ),
231
+ 'editor_type' => 'LINE',
232
+ ],
233
+ [
234
+ 'field' => 'premium_dual_header_second_header_text',
235
+ 'type' => __( 'Dual Heading : Second Heading', 'premium-addons-for-elementor' ),
236
+ 'editor_type' => 'LINE',
237
+ ],
238
+ 'premium_dual_heading_link' => [
239
+ 'field' => 'url',
240
+ 'type' => __( 'Advanced Heading : Heading URL', 'premium-addons-for-elementor' ),
241
+ 'editor_type' => 'LINK',
242
+ ]
243
+ ]
244
+ ];
245
+
246
+ $widgets['premium-addon-fancy-text'] = [
247
+ 'conditions' => [ 'widgetType' => 'premium-addon-fancy-text' ],
248
+ 'fields' => [
249
+ [
250
+ 'field' => 'premium_fancy_prefix_text',
251
+ 'type' => __( 'Fancy Text : Prefix', 'premium-addons-for-elementor' ),
252
+ 'editor_type' => 'LINE',
253
+ ],
254
+ [
255
+ 'field' => 'premium_fancy_suffix_text',
256
+ 'type' => __( 'Fancy Text : Suffix', 'premium-addons-for-elementor' ),
257
+ 'editor_type' => 'LINE',
258
+ ],
259
+ [
260
+ 'field' => 'premium_fancy_text_cursor_text',
261
+ 'type' => __( 'Fancy Text : Cursor Text', 'premium-addons-for-elementor' ),
262
+ 'editor_type' => 'LINE',
263
+ ],
264
+ ],
265
+ 'integration-class' => 'PremiumAddons\Compatibility\WPML\Widgets\FancyText',
266
+ ];
267
+
268
+ $widgets['premium-img-gallery'] = [
269
+ 'conditions' => [ 'widgetType' => 'premium-img-gallery' ],
270
+ 'fields' => [
271
+ [
272
+ 'field' => 'premium_gallery_load_more_text',
273
+ 'type' => __( 'Grid : Load More Button', 'premium-addons-for-elementor' ),
274
+ 'editor_type' => 'LINE',
275
+ ]
276
+ ],
277
+ 'integration-class' => 'PremiumAddons\Compatibility\WPML\Widgets\Grid',
278
+ ];
279
+
280
+ $widgets['premium-addon-image-button'] = [
281
+ 'conditions' => [ 'widgetType' => 'premium-addon-image-button' ],
282
+ 'fields' => [
283
+ [
284
+ 'field' => 'premium_image_button_text',
285
+ 'type' => __( 'Button : Text', 'premium-addons-for-elementor' ),
286
+ 'editor_type' => 'LINE',
287
+ ],
288
+ 'premium_image_button_link' => [
289
+ 'field' => 'url',
290
+ 'type' => __( 'Button : URL', 'premium-addons-for-elementor' ),
291
+ 'editor_type' => 'LINK',
292
+ ],
293
+ ]
294
+ ];
295
+
296
+ $widgets['premium-image-scroll'] = [
297
+ 'conditions' => [ 'widgetType' => 'premium-image-scroll' ],
298
+ 'fields' => [
299
+ [
300
+ 'field' => 'link_text',
301
+ 'type' => __( 'Image Scroll : Link Title', 'premium-addons-for-elementor' ),
302
+ 'editor_type' => 'LINE',
303
+ ],
304
+ 'link' => [
305
+ 'field' => 'url',
306
+ 'type' => __( 'Image Scroll : URL', 'premium-addons-for-elementor' ),
307
+ 'editor_type' => 'LINK',
308
+ ]
309
+ ]
310
+ ];
311
+
312
+ $widgets['premium-addon-image-separator'] = [
313
+ 'conditions' => [ 'widgetType' => 'premium-addon-image-separator' ],
314
+ 'fields' => [
315
+ [
316
+ 'field' => 'premium_image_separator_image_link_text',
317
+ 'type' => __( 'Image Separator : Link Title', 'premium-addons-for-elementor' ),
318
+ 'editor_type' => 'LINE',
319
+ ],
320
+ 'link' => [
321
+ 'field' => 'premium_image_separator_image_link',
322
+ 'type' => __( 'Image Separator : URL', 'premium-addons-for-elementor' ),
323
+ 'editor_type' => 'LINK',
324
+ ]
325
+ ]
326
+ ];
327
+
328
+ $widgets['premium-addon-maps'] = [
329
+ 'conditions' => [ 'widgetType' => 'premium-addon-maps' ],
330
+ 'fields' => [
331
+ [
332
+ 'field' => 'premium_maps_center_lat',
333
+ 'type' => __( 'Maps : Center Latitude', 'premium-addons-for-elementor' ),
334
+ 'editor_type' => 'LINE',
335
+ ],
336
+ [
337
+ 'field' => 'premium_maps_center_long',
338
+ 'type' => __( 'Maps : Center Longitude', 'premium-addons-for-elementor' ),
339
+ 'editor_type' => 'LINE',
340
+ ]
341
+ ],
342
+ 'integration-class' => 'PremiumAddons\Compatibility\WPML\Widgets\Maps',
343
+ ];
344
+
345
+ $widgets['premium-addon-modal-box'] = [
346
+ 'conditions' => [ 'widgetType' => 'premium-addon-modal-box' ],
347
+ 'fields' => [
348
+ [
349
+ 'field' => 'premium_modal_box_title',
350
+ 'type' => __( 'Modal Box: Header Title', 'premium-addons-for-elementor' ),
351
+ 'editor_type' => 'LINE',
352
+ ],
353
+ [
354
+ 'field' => 'premium_modal_box_content',
355
+ 'type' => __( 'Modal Box: Content Text', 'premium-addons-for-elementor' ),
356
+ 'editor_type' => 'VISUAL',
357
+ ],
358
+ [
359
+ 'field' => 'premium_modal_close_text',
360
+ 'type' => __( 'Modal Box: Close Button', 'premium-addons-for-elementor' ),
361
+ 'editor_type' => 'LINE',
362
+ ],
363
+ [
364
+ 'field' => 'premium_modal_box_button_text',
365
+ 'type' => __( 'Modal Box: Trigger Button', 'premium-addons-for-elementor' ),
366
+ 'editor_type' => 'LINE',
367
+ ],
368
+ [
369
+ 'field' => 'premium_modal_box_selector_text',
370
+ 'type' => __( 'Modal Box: Trigger Text', 'premium-addons-for-elementor' ),
371
+ 'editor_type' => 'LINE',
372
+ ],
373
+ ],
374
+ ];
375
+
376
+ $widgets['premium-addon-person'] = [
377
+ 'conditions' => [ 'widgetType' => 'premium-addon-person' ],
378
+ 'fields' => [
379
+ [
380
+ 'field' => 'premium_person_name',
381
+ 'type' => __( 'Person : Name', 'premium-addons-for-elementor' ),
382
+ 'editor_type' => 'LINE',
383
+ ],
384
+ [
385
+ 'field' => 'premium_person_title',
386
+ 'type' => __( 'Person : Title', 'premium-addons-for-elementor' ),
387
+ 'editor_type' => 'LINE',
388
+ ],
389
+ [
390
+ 'field' => 'premium_person_content',
391
+ 'type' => __( 'Person : Description', 'premium-addons-for-elementor' ),
392
+ 'editor_type' => 'AREA',
393
+ ],
394
+ ],
395
+ ];
396
+
397
+ $widgets['premium-addon-pricing-table'] = [
398
+ 'conditions' => [ 'widgetType' => 'premium-addon-pricing-table' ],
399
+ 'fields' => [
400
+ [
401
+ 'field' => 'premium_pricing_table_title_text',
402
+ 'type' => __( 'Pricing Table : Title', 'premium-addons-for-elementor' ),
403
+ 'editor_type' => 'LINE',
404
+ ],
405
+ [
406
+ 'field' => 'premium_pricing_table_slashed_price_value',
407
+ 'type' => __( 'Pricing Table : Slashed Price', 'premium-addons-for-elementor' ),
408
+ 'editor_type' => 'LINE',
409
+ ],
410
+ [
411
+ 'field' => 'premium_pricing_table_price_currency',
412
+ 'type' => __( 'Pricing Table : Currency', 'premium-addons-for-elementor' ),
413
+ 'editor_type' => 'LINE',
414
+ ],
415
+ [
416
+ 'field' => 'premium_pricing_table_price_value',
417
+ 'type' => __( 'Pricing Table : Price Value', 'premium-addons-for-elementor' ),
418
+ 'editor_type' => 'LINE',
419
+ ],
420
+ [
421
+ 'field' => 'premium_pricing_table_price_separator',
422
+ 'type' => __( 'Pricing Table : Separator', 'premium-addons-for-elementor' ),
423
+ 'editor_type' => 'LINE',
424
+ ],
425
+ [
426
+ 'field' => 'premium_pricing_table_price_duration',
427
+ 'type' => __( 'Pricing Table : Duration', 'premium-addons-for-elementor' ),
428
+ 'editor_type' => 'LINE',
429
+ ],
430
+ [
431
+ 'field' => 'premium_pricing_table_description_text',
432
+ 'type' => __( 'Pricing Table : Description', 'premium-addons-for-elementor' ),
433
+ 'editor_type' => 'AREA',
434
+ ],
435
+ [
436
+ 'field' => 'premium_pricing_table_button_text',
437
+ 'type' => __( 'Pricing Table : Button Text', 'premium-addons-for-elementor' ),
438
+ 'editor_type' => 'LINE',
439
+ ],
440
+ [
441
+ 'field' => 'premium_pricing_table_button_link',
442
+ 'type' => __( 'Pricing Table : Button URL', 'premium-addons-for-elementor' ),
443
+ 'editor_type' => 'LINK',
444
+ ],
445
+ [
446
+ 'field' => 'premium_pricing_table_badge_text',
447
+ 'type' => __( 'Pricing Table : Badge', 'premium-addons-for-elementor' ),
448
+ 'editor_type' => 'LINE',
449
+ ],
450
+ ],
451
+ 'integration-class' => 'PremiumAddons\Compatibility\WPML\Widgets\Pricing_Table',
452
+ ];
453
+
454
+ $widgets['premium-addon-progressbar'] = [
455
+ 'conditions' => [ 'widgetType' => 'premium-addon-progressbar' ],
456
+ 'fields' => [
457
+ [
458
+ 'field' => 'premium_progressbar_left_label',
459
+ 'type' => __( 'Progess Bar : Left Label', 'premium-addons-for-elementor' ),
460
+ 'editor_type' => 'LINE',
461
+ ],
462
+ ],
463
+ 'integration-class' => 'PremiumAddons\Compatibility\WPML\Widgets\Progress_Bar',
464
+ ];
465
+
466
+ $widgets['premium-addon-testimonials'] = [
467
+ 'conditions' => [ 'widgetType' => 'premium-addon-testimonials' ],
468
+ 'fields' => [
469
+ [
470
+ 'field' => 'premium_testimonial_person_name',
471
+ 'type' => __( 'Testimonial : Name', 'premium-addons-for-elementor' ),
472
+ 'editor_type' => 'LINE',
473
+ ],
474
+ [
475
+ 'field' => 'premium_testimonial_company_name',
476
+ 'type' => __( 'Testimonial : Company', 'premium-addons-for-elementor' ),
477
+ 'editor_type' => 'LINE',
478
+ ],
479
+ [
480
+ 'field' => 'premium_testimonial_company_link',
481
+ 'type' => __( 'Testimonial : Company Link', 'premium-addons-for-elementor' ),
482
+ 'editor_type' => 'LINK',
483
+ ],
484
+ [
485
+ 'field' => 'premium_testimonial_content',
486
+ 'type' => __( 'Testimonial : Content', 'premium-addons-for-elementor' ),
487
+ 'editor_type' => 'AREA',
488
+ ],
489
+ ],
490
+ ];
491
+
492
+ $widgets['premium-addon-title'] = [
493
+ 'conditions' => [ 'widgetType' => 'premium-addon-title' ],
494
+ 'fields' => [
495
+ [
496
+ 'field' => 'premium_title_text',
497
+ 'type' => __( 'Title : Text', 'premium-addons-for-elementor' ),
498
+ 'editor_type' => 'LINE',
499
+ ],
500
+ ],
501
+ ];
502
+
503
+ $widgets['premium-addon-video-box'] = [
504
+ 'conditions' => [ 'widgetType' => 'premium-addon-video-box' ],
505
+ 'fields' => [
506
+ [
507
+ 'field' => 'premium_video_box_link',
508
+ 'type' => __( 'Video Box : Link', 'premium-addons-for-elementor' ),
509
+ 'editor_type' => 'LINK',
510
+ ],
511
+ [
512
+ 'field' => 'premium_video_box_description_text',
513
+ 'type' => __( 'Video Box : Description', 'premium-addons-for-elementor' ),
514
+ 'editor_type' => 'AREA',
515
+ ]
516
+ ]
517
+ ];
518
+
519
+ $widgets['premium-vscroll'] = [
520
+ 'conditions' => [ 'widgetType' => 'premium-vscroll' ],
521
+ 'fields' => [
522
+ [
523
+ 'field' => 'dots_tooltips',
524
+ 'type' => __( 'Vertical Scroll : Tooltips', 'premium-addons-for-elementor' ),
525
+ 'editor_type' => 'LINE',
526
+ ]
527
+ ],
528
+ 'integration-class' => 'PremiumAddons\Compatibility\WPML\Widgets\Vertical_Scroll',
529
+ ];
530
+
531
+ return $widgets;
532
+ }
533
+
534
+ /**
535
+ * Creates and returns an instance of the class
536
+ * @since 0.0.1
537
+ * @access public
538
+ * return object
539
+ */
540
+ public static function get_instance() {
541
+ if( self::$instance == null ) {
542
+ self::$instance = new self;
543
+ }
544
+ return self::$instance;
545
+ }
546
+
547
+ }
548
+
549
+ }
550
+
551
+ if( ! function_exists('premium_addons_wpml') ) {
552
+
553
+ /**
554
+ * Triggers `get_instance` method
555
+ * @since 0.0.1
556
+ * @access public
557
+ * return object
558
+ */
559
+ function premium_addons_wpml() {
560
+
561
+ Premium_Addons_Wpml::get_instance();
562
+
563
+ }
564
+
565
+ }
566
+ premium_addons_wpml();
includes/compatibility/widgets/fancy-text.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PremiumAddons\Compatibility\WPML\Widgets;
4
+
5
+ use WPML_Elementor_Module_With_Items;
6
+
7
+ if ( ! defined('ABSPATH') ) exit; // No access of directly access
8
+
9
+ /**
10
+ * Fancy Text
11
+ *
12
+ * Registers translatable widget with items.
13
+ *
14
+ * @since 3.1.9
15
+ */
16
+ class FancyText extends WPML_Elementor_Module_With_Items {
17
+
18
+ /**
19
+ * Retrieve the field name.
20
+ *
21
+ * @since 3.1.9
22
+ * @return string
23
+ */
24
+ public function get_items_field() {
25
+ return 'premium_fancy_text_strings';
26
+ }
27
+
28
+ /**
29
+ * Retrieve the fields inside the repeater.
30
+ *
31
+ * @since 3.1.9
32
+ *
33
+ * @return array
34
+ */
35
+ public function get_fields() {
36
+ return array(
37
+ 'premium_text_strings_text_field',
38
+ );
39
+ }
40
+
41
+ /**
42
+ * Get the title for each repeater string
43
+ *
44
+ * @since 3.1.9
45
+ *
46
+ * @return string
47
+ */
48
+ protected function get_title( $field ) {
49
+
50
+ return __( 'Fancy Text : String', 'premium-addons-for-elementor' );
51
+
52
+ }
53
+
54
+ /**
55
+ * Get `editor_type` for each repeater string
56
+ *
57
+ * @since 3.1.9
58
+ *
59
+ * @return string
60
+ */
61
+ protected function get_editor_type( $field ) {
62
+
63
+ return 'LINE';
64
+ }
65
+
66
+ }
includes/compatibility/widgets/grid.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PremiumAddons\Compatibility\WPML\Widgets;
4
+
5
+ use WPML_Elementor_Module_With_Items;
6
+
7
+ if ( ! defined('ABSPATH') ) exit; // No access of directly access
8
+
9
+ /**
10
+ * Fancy Text
11
+ *
12
+ * Registers translatable widget with items.
13
+ *
14
+ * @since 3.1.9
15
+ */
16
+ class Grid extends WPML_Elementor_Module_With_Items {
17
+
18
+ /**
19
+ * Retrieve the field name.
20
+ *
21
+ * @since 3.1.9
22
+ * @return string
23
+ */
24
+ public function get_items_field() {
25
+ return 'premium_gallery_img_content';
26
+ }
27
+
28
+ /**
29
+ * Retrieve the fields inside the repeater.
30
+ *
31
+ * @since 3.1.9
32
+ *
33
+ * @return array
34
+ */
35
+ public function get_fields() {
36
+ return array(
37
+ 'premium_gallery_img_name',
38
+ 'premium_gallery_img_desc'
39
+ );
40
+ }
41
+
42
+ /**
43
+ * Get the title for each repeater string
44
+ *
45
+ * @since 3.1.9
46
+ *
47
+ * @return string
48
+ */
49
+ protected function get_title( $field ) {
50
+
51
+ if ( 'premium_gallery_img_name' === $field ) {
52
+ return __( 'Grid: Image Name', 'premium-addons-for-elementor' );
53
+ }
54
+ if ( 'premium_gallery_img_desc' === $field ) {
55
+ return __( 'Grid: Image Description', 'premium-addons-for-elementor' );
56
+ }
57
+
58
+ return '';
59
+
60
+ }
61
+
62
+ /**
63
+ * Get `editor_type` for each repeater string
64
+ *
65
+ * @since 3.1.9
66
+ *
67
+ * @return string
68
+ */
69
+ protected function get_editor_type( $field ) {
70
+
71
+ if ( 'premium_gallery_img_name' === $field ) {
72
+ return 'LINE';
73
+ }
74
+ if ( 'premium_gallery_img_desc' === $field ) {
75
+ return 'AREA';
76
+ }
77
+
78
+ return '';
79
+ }
80
+
81
+ }
includes/compatibility/widgets/maps.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PremiumAddons\Compatibility\WPML\Widgets;
4
+
5
+ use WPML_Elementor_Module_With_Items;
6
+
7
+ if ( ! defined('ABSPATH') ) exit; // No access of directly access
8
+
9
+ /**
10
+ * Fancy Text
11
+ *
12
+ * Registers translatable widget with items.
13
+ *
14
+ * @since 3.1.9
15
+ */
16
+ class Maps extends WPML_Elementor_Module_With_Items {
17
+
18
+ /**
19
+ * Retrieve the field name.
20
+ *
21
+ * @since 3.1.9
22
+ * @return string
23
+ */
24
+ public function get_items_field() {
25
+ return 'premium_maps_map_pins';
26
+ }
27
+
28
+ /**
29
+ * Retrieve the fields inside the repeater.
30
+ *
31
+ * @since 3.1.9
32
+ *
33
+ * @return array
34
+ */
35
+ public function get_fields() {
36
+ return array(
37
+ 'map_latitude',
38
+ 'map_longitude',
39
+ 'pin_title',
40
+ 'pin_desc'
41
+ );
42
+ }
43
+
44
+ /**
45
+ * Get the title for each repeater string
46
+ *
47
+ * @since 3.1.9
48
+ *
49
+ * @return string
50
+ */
51
+ protected function get_title( $field ) {
52
+
53
+ if ( 'map_latitude' === $field ) {
54
+ return __( 'Maps : Marker Latitude', 'premium-addons-for-elementor' );
55
+ }
56
+ if ( 'map_longitude' === $field ) {
57
+ return __( 'Maps : Marker Longitude', 'premium-addons-for-elementor' );
58
+ }
59
+ if ( 'pin_title' === $field ) {
60
+ return __( 'Maps : Marker Title', 'premium-addons-for-elementor' );
61
+ }
62
+ if ( 'pin_desc' === $field ) {
63
+ return __( 'Maps : Marker Description', 'premium-addons-for-elementor' );
64
+ }
65
+
66
+ return '';
67
+
68
+ }
69
+
70
+ /**
71
+ * Get `editor_type` for each repeater string
72
+ *
73
+ * @since 3.1.9
74
+ *
75
+ * @return string
76
+ */
77
+ protected function get_editor_type( $field ) {
78
+
79
+ if ( 'map_latitude' === $field || 'map_longitude' === $field || 'pin_title' === $field ) {
80
+ return 'LINE';
81
+ }
82
+ if ( 'pin_desc' === $field ) {
83
+ return 'AREA';
84
+ }
85
+
86
+ return '';
87
+ }
88
+
89
+ }
includes/compatibility/widgets/pricing-table.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PremiumAddons\Compatibility\WPML\Widgets;
4
+
5
+ use WPML_Elementor_Module_With_Items;
6
+
7
+ if ( ! defined('ABSPATH') ) exit; // No access of directly access
8
+
9
+ /**
10
+ * Fancy Text
11
+ *
12
+ * Registers translatable widget with items.
13
+ *
14
+ * @since 3.1.9
15
+ */
16
+ class Pricing_Table extends WPML_Elementor_Module_With_Items {
17
+
18
+ /**
19
+ * Retrieve the field name.
20
+ *
21
+ * @since 3.1.9
22
+ * @return string
23
+ */
24
+ public function get_items_field() {
25
+ return 'premium_fancy_text_list_items';
26
+ }
27
+
28
+ /**
29
+ * Retrieve the fields inside the repeater.
30
+ *
31
+ * @since 3.1.9
32
+ *
33
+ * @return array
34
+ */
35
+ public function get_fields() {
36
+ return array(
37
+ 'premium_pricing_list_item_text'
38
+ );
39
+ }
40
+
41
+ /**
42
+ * Get the title for each repeater string
43
+ *
44
+ * @since 3.1.9
45
+ *
46
+ * @return string
47
+ */
48
+ protected function get_title( $field ) {
49
+
50
+ return __( 'Pricing Table: Item Text', 'premium-addons-for-elementor' );
51
+
52
+ }
53
+
54
+ /**
55
+ * Get `editor_type` for each repeater string
56
+ *
57
+ * @since 3.1.9
58
+ *
59
+ * @return string
60
+ */
61
+ protected function get_editor_type( $field ) {
62
+
63
+ return 'LINE';
64
+
65
+ }
66
+
67
+ }
includes/compatibility/widgets/progress-bar.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PremiumAddons\Compatibility\WPML\Widgets;
4
+
5
+ use WPML_Elementor_Module_With_Items;
6
+
7
+ if ( ! defined('ABSPATH') ) exit; // No access of directly access
8
+
9
+ /**
10
+ * Fancy Text
11
+ *
12
+ * Registers translatable widget with items.
13
+ *
14
+ * @since 3.1.9
15
+ */
16
+ class Progress_Bar extends WPML_Elementor_Module_With_Items {
17
+
18
+ /**
19
+ * Retrieve the field name.
20
+ *
21
+ * @since 3.1.9
22
+ * @return string
23
+ */
24
+ public function get_items_field() {
25
+ return 'premium_progressbar_multiple_label';
26
+ }
27
+
28
+ /**
29
+ * Retrieve the fields inside the repeater.
30
+ *
31
+ * @since 3.1.9
32
+ *
33
+ * @return array
34
+ */
35
+ public function get_fields() {
36
+ return array(
37
+ 'text',
38
+ );
39
+ }
40
+
41
+ /**
42
+ * Get the title for each repeater string
43
+ *
44
+ * @since 3.1.9
45
+ *
46
+ * @return string
47
+ */
48
+ protected function get_title( $field ) {
49
+
50
+ return __( 'Progress Bar: Label Text', 'premium-addons-for-elementor' );
51
+
52
+ }
53
+
54
+ /**
55
+ * Get `editor_type` for each repeater string
56
+ *
57
+ * @since 3.1.9
58
+ *
59
+ * @return string
60
+ */
61
+ protected function get_editor_type( $field ) {
62
+
63
+ return 'LINE';
64
+
65
+ }
66
+
67
+ }
includes/compatibility/widgets/vertical-scroll.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PremiumAddons\Compatibility\WPML\Widgets;
4
+
5
+ use WPML_Elementor_Module_With_Items;
6
+
7
+ if ( ! defined('ABSPATH') ) exit; // No access of directly access
8
+
9
+ /**
10
+ * Fancy Text
11
+ *
12
+ * Registers translatable widget with items.
13
+ *
14
+ * @since 3.1.9
15
+ */
16
+ class Vertical_Scroll extends WPML_Elementor_Module_With_Items {
17
+
18
+ /**
19
+ * Retrieve the field name.
20
+ *
21
+ * @since 3.1.9
22
+ * @return string
23
+ */
24
+ public function get_items_field() {
25
+ return 'id_repeater';
26
+ }
27
+
28
+ /**
29
+ * Retrieve the fields inside the repeater.
30
+ *
31
+ * @since 3.1.9
32
+ *
33
+ * @return array
34
+ */
35
+ public function get_fields() {
36
+ return array(
37
+ 'id_repeater' => 'section_id'
38
+ );
39
+ }
40
+
41
+ /**
42
+ * Get the title for each repeater string
43
+ *
44
+ * @since 3.1.9
45
+ *
46
+ * @return string
47
+ */
48
+ protected function get_title( $field ) {
49
+
50
+ return __( 'Vertical Scroll: Section ID', 'premium-addons-for-elementor' );
51
+
52
+ }
53
+
54
+ /**
55
+ * Get `editor_type` for each repeater string
56
+ *
57
+ * @since 3.1.9
58
+ *
59
+ * @return string
60
+ */
61
+ protected function get_editor_type( $field ) {
62
+
63
+ return 'LINE';
64
+ }
65
+
66
+ }
includes/elementor-helper.php CHANGED
@@ -68,7 +68,7 @@ class premium_Template_Tags {
68
  return $this->options;
69
  }
70
 
71
- public function get_elementor_page_list(){
72
  $pagelist = get_posts(array(
73
  'post_type' => 'elementor_library',
74
  'showposts' => 999,
68
  return $this->options;
69
  }
70
 
71
+ public function get_elementor_page_list() {
72
  $pagelist = get_posts(array(
73
  'post_type' => 'elementor_library',
74
  'showposts' => 999,
includes/helper-functions.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  namespace PremiumAddons;
4
 
5
- if(!defined('ABSPATH')) exit;
6
 
7
  class Helper_Functions {
8
 
2
 
3
  namespace PremiumAddons;
4
 
5
+ if( ! defined('ABSPATH') ) exit;
6
 
7
  class Helper_Functions {
8
 
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.1.8
7
  Author: Leap13
8
  Author URI: http://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.1.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.1.7');
23
 
24
  if( ! class_exists('Premium_Addons_Elementor') ) {
25
  /*
@@ -39,7 +39,7 @@ if( ! class_exists('Premium_Addons_Elementor') ) {
39
 
40
  add_action('plugins_loaded', array( $this, 'premium_addons_elementor_setup') );
41
 
42
- add_action('elementor/init', array( $this, 'create_premium_category') );
43
 
44
  add_action( 'init', array( $this, 'init_addons' ), -999 );
45
 
@@ -115,13 +115,18 @@ if( ! class_exists('Premium_Addons_Elementor') ) {
115
  }
116
 
117
  /**
118
- * Creates Premium Widgets category
119
  * @since 2.6.8
120
  * @access public
121
  * @return void
122
  */
123
- public function create_premium_category() {
 
 
 
124
  require_once ( PREMIUM_ADDONS_PATH . 'includes/class-addons-category.php' );
 
 
125
  }
126
 
127
  /**
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.1.9
7
  Author: Leap13
8
  Author URI: http://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.1.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.1.8');
23
 
24
  if( ! class_exists('Premium_Addons_Elementor') ) {
25
  /*
39
 
40
  add_action('plugins_loaded', array( $this, 'premium_addons_elementor_setup') );
41
 
42
+ add_action('elementor/init', array( $this, 'elementor_init') );
43
 
44
  add_action( 'init', array( $this, 'init_addons' ), -999 );
45
 
115
  }
116
 
117
  /**
118
+ * Elementor Init
119
  * @since 2.6.8
120
  * @access public
121
  * @return void
122
  */
123
+ public function elementor_init() {
124
+
125
+ require_once ( PREMIUM_ADDONS_PATH . 'includes/compatibility/class-premium-addons-wpml.php' );
126
+
127
  require_once ( PREMIUM_ADDONS_PATH . 'includes/class-addons-category.php' );
128
+
129
+
130
  }
131
 
132
  /**
readme.txt CHANGED
@@ -5,7 +5,7 @@ Donate link: http://premiumaddons.com
5
  Requires at least: 4.5
6
  Tested up to: 5.1.1
7
  Requires PHP: 5.4
8
- Stable tag: 3.1.8
9
  License: GPL v3.0
10
  License URI: https://opensource.org/licenses/GPL-3.0
11
 
@@ -139,6 +139,12 @@ Premium Addons for Elementor is 100% Ads Free, Ads can only be detected from You
139
 
140
  == Changelog ==
141
 
 
 
 
 
 
 
142
  = 3.1.8 =
143
 
144
  - Tweak: Added `Tablet/Mobile Breakpoint` options in Carousel widget.
5
  Requires at least: 4.5
6
  Tested up to: 5.1.1
7
  Requires PHP: 5.4
8
+ Stable tag: 3.1.9
9
  License: GPL v3.0
10
  License URI: https://opensource.org/licenses/GPL-3.0
11
 
139
 
140
  == Changelog ==
141
 
142
+ = 3.1.9 =
143
+
144
+ - Tweak: `WPML Compatibility` for all widgets.
145
+ - Tweak: Added `Dynamic Content` support for all `URL` fields.
146
+ - Fixed: Title and description container rendered even title and description are empty.
147
+
148
  = 3.1.8 =
149
 
150
  - Tweak: Added `Tablet/Mobile Breakpoint` options in Carousel widget.
widgets/premium-banner.php CHANGED
@@ -78,6 +78,7 @@ class Premium_Banner extends Widget_Base {
78
  [
79
  'label' => __( 'Set custom Link', 'premium-addons-for-elementor' ),
80
  'type' => Controls_Manager::URL,
 
81
  'description' => __( 'What custom link you want to set to banner?', 'premium-addons-for-elementor' ),
82
  'condition' => [
83
  'premium_banner_image_link_switcher' => 'yes',
@@ -324,6 +325,7 @@ class Premium_Banner extends Widget_Base {
324
  [
325
  'label' => __('Link', 'premium-addons-for-elementor'),
326
  'type' => Controls_Manager::URL,
 
327
  'default' => [
328
  'url' => '#',
329
  ],
78
  [
79
  'label' => __( 'Set custom Link', 'premium-addons-for-elementor' ),
80
  'type' => Controls_Manager::URL,
81
+ 'dynamic' => [ 'active' => true ],
82
  'description' => __( 'What custom link you want to set to banner?', 'premium-addons-for-elementor' ),
83
  'condition' => [
84
  'premium_banner_image_link_switcher' => 'yes',
325
  [
326
  'label' => __('Link', 'premium-addons-for-elementor'),
327
  'type' => Controls_Manager::URL,
328
+ 'dynamic' => [ 'active' => true ],
329
  'default' => [
330
  'url' => '#',
331
  ],
widgets/premium-button.php CHANGED
@@ -67,9 +67,10 @@ class Premium_Button extends Widget_Base {
67
  [
68
  'label' => __('Link', 'premium-addons-for-elementor'),
69
  'type' => Controls_Manager::URL,
 
70
  'default' => [
71
  'url' => '#',
72
- ],
73
  'placeholder' => 'https://premiumaddons.com/',
74
  'label_block' => true,
75
  'separator' => 'after',
67
  [
68
  'label' => __('Link', 'premium-addons-for-elementor'),
69
  'type' => Controls_Manager::URL,
70
+ 'dynamic' => [ 'active' => true ],
71
  'default' => [
72
  'url' => '#',
73
+ ],
74
  'placeholder' => 'https://premiumaddons.com/',
75
  'label_block' => true,
76
  'separator' => 'after',
widgets/premium-counter.php CHANGED
@@ -73,16 +73,6 @@ class Premium_Counter extends Widget_Base {
73
  ]
74
  );
75
 
76
- // $this->add_control('premium_counter_d_separator',
77
- // [
78
- // 'label' => __( 'Decimal Point', 'premium-addons-for-elementor' ),
79
- // 'type' => Controls_Manager::TEXT,
80
- // 'dynamic' => [ 'active' => true ],
81
- // 'description' => __( 'Set a decimal number (Eg - 12.76). The decimal point '.' will be replaced with the value that you will enter above', 'premium-addons-for-elementor' ),
82
- // 'default' => '.'
83
- // ]
84
- // );
85
- //
86
  $this->add_control('premium_counter_d_after',
87
  [
88
  'label' => __( 'Digits After Decimal Point', 'premium-addons-for-elementor' ),
73
  ]
74
  );
75
 
 
 
 
 
 
 
 
 
 
 
76
  $this->add_control('premium_counter_d_after',
77
  [
78
  'label' => __( 'Digits After Decimal Point', 'premium-addons-for-elementor' ),
widgets/premium-dual-header.php CHANGED
@@ -126,6 +126,7 @@ class Premium_Dual_Header extends Widget_Base {
126
  [
127
  'label' => __('Link', 'premium-addons-for-elementor'),
128
  'type' => Controls_Manager::URL,
 
129
  'default' => [
130
  'url' => '#',
131
  ],
126
  [
127
  'label' => __('Link', 'premium-addons-for-elementor'),
128
  'type' => Controls_Manager::URL,
129
+ 'dynamic' => [ 'active' => true ],
130
  'default' => [
131
  'url' => '#',
132
  ],
widgets/premium-grid.php CHANGED
@@ -293,7 +293,7 @@ class Premium_Grid extends Widget_Base {
293
 
294
  $img_repeater->add_control('premium_gallery_img_name',
295
  [
296
- 'label' => __( 'Name', 'premium-addons-for-elementor' ),
297
  'type' => Controls_Manager::TEXT,
298
  'dynamic' => [ 'active' => true ],
299
  'label_block' => true,
@@ -330,6 +330,7 @@ class Premium_Grid extends Widget_Base {
330
  [
331
  'label' => __('Link', 'premium-addons-for-elementor'),
332
  'type' => Controls_Manager::URL,
 
333
  'placeholder' => 'https://premiumaddons.com/',
334
  'label_block' => true,
335
  'condition' => [
@@ -1567,14 +1568,16 @@ class Premium_Grid extends Widget_Base {
1567
  <?php endif; ?>
1568
  </div>
1569
  </div>
1570
- <div class="premium-gallery-caption">
1571
- <?php if(!empty($image['premium_gallery_img_name'])):?>
1572
- <span class="premium-gallery-img-name"><?php echo $image['premium_gallery_img_name']; ?></span>
1573
- <?php endif; ?>
1574
- <?php if(!empty($image['premium_gallery_img_desc'])):?>
1575
- <p class="premium-gallery-img-desc"><?php echo $image['premium_gallery_img_desc']; ?></p>
1576
- <?php endif; ?>
1577
- </div>
 
 
1578
  <?php else: ?>
1579
  <div class="pa-gallery-icons-caption-container">
1580
  <div class="pa-gallery-icons-caption-cell">
@@ -1590,15 +1593,17 @@ class Premium_Grid extends Widget_Base {
1590
  $icon_link = get_permalink($image['premium_gallery_img_existing']);
1591
  ?>
1592
  <a href="<?php echo esc_attr( $icon_link ); ?>" class="pa-gallery-img-link"><span><i class="fa fa-link"></i></span></a>
1593
- <?php endif; ?>
1594
- <div class="premium-gallery-caption">
1595
- <?php if(!empty($image['premium_gallery_img_name'])):?>
1596
- <span class="premium-gallery-img-name"><?php echo $image['premium_gallery_img_name']; ?></span>
1597
- <?php endif; ?>
1598
- <?php if(!empty($image['premium_gallery_img_desc'])):?>
1599
- <p class="premium-gallery-img-desc"><?php echo $image['premium_gallery_img_desc']; ?></p>
1600
  <?php endif; ?>
 
 
 
 
 
 
 
 
1601
  </div>
 
1602
  </div>
1603
  </div>
1604
  <?php endif; ?>
293
 
294
  $img_repeater->add_control('premium_gallery_img_name',
295
  [
296
+ 'label' => __( 'Title', 'premium-addons-for-elementor' ),
297
  'type' => Controls_Manager::TEXT,
298
  'dynamic' => [ 'active' => true ],
299
  'label_block' => true,
330
  [
331
  'label' => __('Link', 'premium-addons-for-elementor'),
332
  'type' => Controls_Manager::URL,
333
+ 'dynamic' => [ 'active' => true ],
334
  'placeholder' => 'https://premiumaddons.com/',
335
  'label_block' => true,
336
  'condition' => [
1568
  <?php endif; ?>
1569
  </div>
1570
  </div>
1571
+ <?php if( ! empty( $image['premium_gallery_img_name'] ) || ! empty( $image['premium_gallery_img_desc'] ) ) : ?>
1572
+ <div class="premium-gallery-caption">
1573
+ <?php if( ! empty( $image['premium_gallery_img_name'] ) ) : ?>
1574
+ <span class="premium-gallery-img-name"><?php echo $image['premium_gallery_img_name']; ?></span>
1575
+ <?php endif; ?>
1576
+ <?php if( ! empty( $image['premium_gallery_img_desc'] ) ) : ?>
1577
+ <p class="premium-gallery-img-desc"><?php echo $image['premium_gallery_img_desc']; ?></p>
1578
+ <?php endif; ?>
1579
+ </div>
1580
+ <?php endif; ?>
1581
  <?php else: ?>
1582
  <div class="pa-gallery-icons-caption-container">
1583
  <div class="pa-gallery-icons-caption-cell">
1593
  $icon_link = get_permalink($image['premium_gallery_img_existing']);
1594
  ?>
1595
  <a href="<?php echo esc_attr( $icon_link ); ?>" class="pa-gallery-img-link"><span><i class="fa fa-link"></i></span></a>
 
 
 
 
 
 
 
1596
  <?php endif; ?>
1597
+ <?php if( ! empty( $image['premium_gallery_img_name'] ) || ! empty( $image['premium_gallery_img_desc'] ) ) : ?>
1598
+ <div class="premium-gallery-caption">
1599
+ <?php if( ! empty( $image['premium_gallery_img_name'] ) ) : ?>
1600
+ <span class="premium-gallery-img-name"><?php echo $image['premium_gallery_img_name']; ?></span>
1601
+ <?php endif; ?>
1602
+ <?php if( ! empty( $image['premium_gallery_img_desc'] ) ) : ?>
1603
+ <p class="premium-gallery-img-desc"><?php echo $image['premium_gallery_img_desc']; ?></p>
1604
+ <?php endif; ?>
1605
  </div>
1606
+ <?php endif; ?>
1607
  </div>
1608
  </div>
1609
  <?php endif; ?>
widgets/premium-image-button.php CHANGED
@@ -63,9 +63,10 @@ class Premium_Image_Button extends Widget_Base {
63
  [
64
  'label' => __('Link', 'premium-addons-for-elementor'),
65
  'type' => Controls_Manager::URL,
 
66
  'default' => [
67
- 'url' => '#',
68
- ],
69
  'placeholder' => 'https://premiumaddons.com/',
70
  'label_block' => true,
71
  'separator' => 'after',
63
  [
64
  'label' => __('Link', 'premium-addons-for-elementor'),
65
  'type' => Controls_Manager::URL,
66
+ 'dynamic' => [ 'active' => true ],
67
  'default' => [
68
+ 'url' => '#',
69
+ ],
70
  'placeholder' => 'https://premiumaddons.com/',
71
  'label_block' => true,
72
  'separator' => 'after',
widgets/premium-image-scroll.php CHANGED
@@ -117,6 +117,7 @@ class Premium_Image_Scroll extends Widget_Base {
117
  [
118
  'label' => __('URL', 'premium-addons-for-elementor'),
119
  'type' => Controls_Manager::URL,
 
120
  'placeholder' => 'https://premiumaddons.com/',
121
  'label_block' => true,
122
  'condition' => [
117
  [
118
  'label' => __('URL', 'premium-addons-for-elementor'),
119
  'type' => Controls_Manager::URL,
120
+ 'dynamic' => [ 'active' => true ],
121
  'placeholder' => 'https://premiumaddons.com/',
122
  'label_block' => true,
123
  'condition' => [
widgets/premium-image-separator.php CHANGED
@@ -80,7 +80,6 @@ class Premium_Image_Separator extends Widget_Base {
80
  'type' => Controls_Manager::NUMBER,
81
  'default' => -50,
82
  'description' => __('-50% is default. Increase to push the image outside or decrease to pull the image inside.','premium-addons-for-elementor'),
83
- 'label_block' => true,
84
  'selectors' => [
85
  '{{WRAPPER}} .premium-image-separator-container' => 'transform: translateY( {{VALUE}}% );'
86
 
@@ -153,7 +152,6 @@ class Premium_Image_Separator extends Widget_Base {
153
  ]
154
  );
155
 
156
- /*Link Below Image*/
157
  $this->add_control('premium_image_separator_image_link',
158
  [
159
  'label' => __('URL', 'premium-addons-for-elementor'),
@@ -166,8 +164,6 @@ class Premium_Image_Separator extends Widget_Base {
166
  ]
167
  );
168
 
169
-
170
- /*Link Below Image*/
171
  $this->add_control('premium_image_separator_image_link_text',
172
  [
173
  'label' => __('Image Hovering Title', 'premium-addons-for-elementor'),
80
  'type' => Controls_Manager::NUMBER,
81
  'default' => -50,
82
  'description' => __('-50% is default. Increase to push the image outside or decrease to pull the image inside.','premium-addons-for-elementor'),
 
83
  'selectors' => [
84
  '{{WRAPPER}} .premium-image-separator-container' => 'transform: translateY( {{VALUE}}% );'
85
 
152
  ]
153
  );
154
 
 
155
  $this->add_control('premium_image_separator_image_link',
156
  [
157
  'label' => __('URL', 'premium-addons-for-elementor'),
164
  ]
165
  );
166
 
 
 
167
  $this->add_control('premium_image_separator_image_link_text',
168
  [
169
  'label' => __('Image Hovering Title', 'premium-addons-for-elementor'),
widgets/premium-maps.php CHANGED
@@ -1,9 +1,11 @@
1
  <?php
 
2
  namespace Elementor;
3
 
4
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
 
6
  class Premium_Maps extends Widget_Base {
 
7
  public function get_name() {
8
  return 'premium-addon-maps';
9
  }
1
  <?php
2
+
3
  namespace Elementor;
4
 
5
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
6
 
7
  class Premium_Maps extends Widget_Base {
8
+
9
  public function get_name() {
10
  return 'premium-addon-maps';
11
  }
widgets/premium-modalbox.php CHANGED
@@ -314,7 +314,7 @@ class Premium_Modalbox extends Widget_Base {
314
  ]
315
  );
316
 
317
- if( ! $this->check_rtl() ){
318
  $this->add_control('premium_modal_box_icon_before_spacing',
319
  [
320
  'label' => __('Icon Spacing', 'premium-addons-for-elementor'),
@@ -335,7 +335,7 @@ class Premium_Modalbox extends Widget_Base {
335
  );
336
  }
337
 
338
- if( ! $this->check_rtl() ){
339
  $this->add_control('premium_modal_box_icon_after_spacing',
340
  [
341
  'label' => __('Icon Spacing', 'premium-addons-for-elementor'),
314
  ]
315
  );
316
 
317
+ if( ! $this->check_rtl() ) {
318
  $this->add_control('premium_modal_box_icon_before_spacing',
319
  [
320
  'label' => __('Icon Spacing', 'premium-addons-for-elementor'),
335
  );
336
  }
337
 
338
+ if( ! $this->check_rtl() ) {
339
  $this->add_control('premium_modal_box_icon_after_spacing',
340
  [
341
  'label' => __('Icon Spacing', 'premium-addons-for-elementor'),
widgets/premium-person.php CHANGED
@@ -4,6 +4,7 @@ namespace Elementor;
4
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
 
6
  class Premium_Person extends Widget_Base {
 
7
  public function get_name() {
8
  return 'premium-addon-person';
9
  }
4
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
 
6
  class Premium_Person extends Widget_Base {
7
+
8
  public function get_name() {
9
  return 'premium-addon-person';
10
  }
widgets/premium-pricing-table.php CHANGED
@@ -64,7 +64,7 @@ class Premium_Pricing_Table extends Widget_Base {
64
  $this->add_control('premium_pricing_table_title_text',
65
  [
66
  'label' => __('Text', 'premium-addons-for-elementor'),
67
- 'default' => 'Pricing Table',
68
  'type' => Controls_Manager::TEXT,
69
  'dynamic' => [ 'active' => true ],
70
  'label_block' => true,
64
  $this->add_control('premium_pricing_table_title_text',
65
  [
66
  'label' => __('Text', 'premium-addons-for-elementor'),
67
+ 'default' => __('Pricing Table', 'premium-addons-for-elementor'),
68
  'type' => Controls_Manager::TEXT,
69
  'dynamic' => [ 'active' => true ],
70
  'label_block' => true,
widgets/premium-progressbar.php CHANGED
@@ -1,9 +1,11 @@
1
  <?php
 
2
  namespace Elementor;
3
 
4
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
 
6
  class Premium_Progressbar extends Widget_Base {
 
7
  public function get_name() {
8
  return 'premium-addon-progressbar';
9
  }
@@ -95,23 +97,22 @@ class Premium_Progressbar extends Widget_Base {
95
  [
96
  'label' => __( 'Percentage', 'premium-addons-for-elementor' ),
97
  'type' => Controls_Manager::NUMBER,
98
- 'label_block' => true,
99
  'default' => 50,
100
  ]
101
  );
102
 
103
  $this->add_control('premium_progressbar_multiple_label',
104
- [
105
- 'label' => __('Label','premium-addons-for-elementor'),
106
- 'type' => Controls_Manager::REPEATER,
107
- 'default' => [
108
- [
109
- 'text' => __( 'Label','premium-addons-for-elementor' ),
110
- 'number' => 50
111
- ]
112
- ],
113
- 'fields' => array_values( $repeater->get_controls() ),
114
- 'condition' => [
115
  'premium_progressbar_select_label' =>'more_labels'
116
  ]
117
  ]
1
  <?php
2
+
3
  namespace Elementor;
4
 
5
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
6
 
7
  class Premium_Progressbar extends Widget_Base {
8
+
9
  public function get_name() {
10
  return 'premium-addon-progressbar';
11
  }
97
  [
98
  'label' => __( 'Percentage', 'premium-addons-for-elementor' ),
99
  'type' => Controls_Manager::NUMBER,
 
100
  'default' => 50,
101
  ]
102
  );
103
 
104
  $this->add_control('premium_progressbar_multiple_label',
105
+ [
106
+ 'label' => __('Label','premium-addons-for-elementor'),
107
+ 'type' => Controls_Manager::REPEATER,
108
+ 'default' => [
109
+ [
110
+ 'text' => __( 'Label','premium-addons-for-elementor' ),
111
+ 'number' => 50
112
+ ]
113
+ ],
114
+ 'fields' => array_values( $repeater->get_controls() ),
115
+ 'condition' => [
116
  'premium_progressbar_select_label' =>'more_labels'
117
  ]
118
  ]
widgets/premium-testimonials.php CHANGED
@@ -4,6 +4,7 @@ namespace Elementor;
4
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
 
6
  class Premium_Testimonials extends Widget_Base {
 
7
  public function get_name() {
8
  return 'premium-addon-testimonials';
9
  }
4
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
5
 
6
  class Premium_Testimonials extends Widget_Base {
7
+
8
  public function get_name() {
9
  return 'premium-addon-testimonials';
10
  }
widgets/premium-title.php CHANGED
@@ -5,6 +5,7 @@ namespace Elementor;
5
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
6
 
7
  class Premium_Title extends Widget_Base {
 
8
  public function get_name() {
9
  return 'premium-addon-title';
10
  }
5
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
6
 
7
  class Premium_Title extends Widget_Base {
8
+
9
  public function get_name() {
10
  return 'premium-addon-title';
11
  }
widgets/premium-videobox.php CHANGED
@@ -6,6 +6,7 @@ use Elementor\Modules\DynamicTags\Module as TagsModule;
6
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
7
 
8
  class Premium_Videobox extends Widget_Base {
 
9
  public function get_name() {
10
  return 'premium-addon-video-box';
11
  }
6
  if ( ! defined( 'ABSPATH' ) ) exit; // If this file is called directly, abort.
7
 
8
  class Premium_Videobox extends Widget_Base {
9
+
10
  public function get_name() {
11
  return 'premium-addon-video-box';
12
  }