Premium Addons for Elementor - Version 3.2.4

Version Description

  • Tweak: Added Portuguese translation.
  • Tweak: WPML Compatibility for Carousel widget.
  • Tweak: Use transform instead of absolute position to enhance Carousel widget transitions.
  • Fixed: Grid widget images don't fill container height for some themes.
Download this release

Release Info

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

Code changes from version 3.2.3 to 3.2.4

admin/includes/notices.php CHANGED
@@ -18,14 +18,17 @@ class Premium_Admin_Notices {
18
  * Constructor for the class
19
  */
20
  public function __construct() {
 
21
  add_action('admin_init', array( $this, 'init') );
22
- add_action('admin_notices', array( $this, 'check_admin_notices' ) );
 
 
23
  }
24
 
25
  /**
26
  * init required functions
27
  */
28
- public function init(){
29
  $this->handle_review_notice();
30
  //$this->handle_pbg_notice();
31
  // $this->handle_image_scroll_notice();
@@ -34,7 +37,7 @@ class Premium_Admin_Notices {
34
  /**
35
  * init notices check functions
36
  */
37
- public function check_admin_notices() {
38
  $this->required_plugins_check();
39
 
40
  $cache_key = 'premium_notice_' . PREMIUM_ADDONS_VERSION;
18
  * Constructor for the class
19
  */
20
  public function __construct() {
21
+
22
  add_action('admin_init', array( $this, 'init') );
23
+
24
+ add_action('admin_notices', array( $this, 'admin_notices' ) );
25
+
26
  }
27
 
28
  /**
29
  * init required functions
30
  */
31
+ public function init() {
32
  $this->handle_review_notice();
33
  //$this->handle_pbg_notice();
34
  // $this->handle_image_scroll_notice();
37
  /**
38
  * init notices check functions
39
  */
40
+ public function admin_notices() {
41
  $this->required_plugins_check();
42
 
43
  $cache_key = 'premium_notice_' . PREMIUM_ADDONS_VERSION;
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.2.2</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.2.3</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>
assets/css/premium-addons.css CHANGED
@@ -3162,6 +3162,7 @@ button.premium-modal-box-modal-close {
3162
  -moz-transform: translate3d(0, 0, 0);
3163
  }
3164
  .pa-gallery-img-container img {
 
3165
  -webkit-transition: all 0.3s ease-in-out;
3166
  -moz-transition: all 0.3s ease-in-out;
3167
  -ms-transition: all 0.3s ease-in-out;
3162
  -moz-transform: translate3d(0, 0, 0);
3163
  }
3164
  .pa-gallery-img-container img {
3165
+ display: block;
3166
  -webkit-transition: all 0.3s ease-in-out;
3167
  -moz-transition: all 0.3s ease-in-out;
3168
  -ms-transition: all 0.3s ease-in-out;
assets/js/lib/scrollify.js ADDED
@@ -0,0 +1,853 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * jQuery Scrollify
3
+ * Version 1.0.20
4
+ *
5
+ * Requires:
6
+ * - jQuery 1.7 or higher
7
+ *
8
+ * https://github.com/lukehaas/Scrollify
9
+ *
10
+ * Copyright 2016, Luke Haas
11
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
12
+ * this software and associated documentation files (the "Software"), to deal in
13
+ * the Software without restriction, including without limitation the rights to
14
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
15
+ * the Software, and to permit persons to whom the Software is furnished to do so,
16
+ * subject to the following conditions:
17
+ *
18
+ * The above copyright notice and this permission notice shall be included in all
19
+ * copies or substantial portions of the Software.
20
+ *
21
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
23
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
24
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
25
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
26
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
+
28
+
29
+
30
+ if touchScroll is false - update index
31
+
32
+ */
33
+ (function (global,factory) {
34
+ "use strict";
35
+ if (typeof define === 'function' && define.amd) {
36
+ // AMD. Register as an anonymous module.
37
+ define(['jquery'], function($) {
38
+ return factory($, global, global.document);
39
+ });
40
+ } else if (typeof module === 'object' && module.exports) {
41
+ // Node/CommonJS
42
+ module.exports = factory(require('jquery'), global, global.document);
43
+ } else {
44
+ // Browser globals
45
+ factory(jQuery, global, global.document);
46
+ }
47
+ }(typeof window !== 'undefined' ? window : this, function ($, window, document, undefined) {
48
+ "use strict";
49
+ var heights = [],
50
+ names = [],
51
+ elements = [],
52
+ overflow = [],
53
+ index = 0,
54
+ currentIndex = 0,
55
+ interstitialIndex = 1,
56
+ hasLocation = false,
57
+ timeoutId,
58
+ timeoutId2,
59
+ $window = $(window),
60
+ portHeight,
61
+ top = $window.scrollTop(),
62
+ scrollable = false,
63
+ locked = false,
64
+ scrolled = false,
65
+ manualScroll,
66
+ swipeScroll,
67
+ util,
68
+ disabled = false,
69
+ scrollSamples = [],
70
+ scrollTime = new Date().getTime(),
71
+ firstLoad = true,
72
+ initialised = false,
73
+ destination = 0,
74
+ wheelEvent = 'onwheel' in document ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll',
75
+ settings = {
76
+ //section should be an identifier that is the same for each section
77
+ section: ".section",
78
+ sectionName: "section-name",
79
+ interstitialSection: "",
80
+ easing: "easeOutExpo",
81
+ scrollSpeed: 1100,
82
+ offset: 0,
83
+ scrollbars: true,
84
+ target:"html,body",
85
+ standardScrollElements: false,
86
+ setHeights: true,
87
+ overflowScroll:true,
88
+ updateHash: true,
89
+ touchScroll:true,
90
+ before:function() {},
91
+ after:function() {},
92
+ afterResize:function() {},
93
+ afterRender:function() {}
94
+ };
95
+ function getportHeight() {
96
+ return ($window.height() + settings.offset);
97
+ }
98
+ function animateScroll(index,instant,callbacks,toTop) {
99
+ if(currentIndex===index) {
100
+ callbacks = false;
101
+ }
102
+ if(disabled===true) {
103
+ return true;
104
+ }
105
+ if(names[index]) {
106
+ scrollable = false;
107
+ if(firstLoad===true) {
108
+ firstLoad = false;
109
+ settings.afterRender();
110
+ }
111
+ if(callbacks) {
112
+ if( typeof settings.before == 'function' && settings.before(index,elements) === false ){
113
+ return true;
114
+ }
115
+ }
116
+ interstitialIndex = 1;
117
+ destination = (!index) ? 0 : heights[index];
118
+ if(firstLoad===false && currentIndex>index && toTop===false) {
119
+ //We're going backwards
120
+ if(overflow[index]) {
121
+ portHeight = getportHeight();
122
+
123
+ interstitialIndex = parseInt(elements[index].outerHeight()/portHeight);
124
+
125
+ destination = parseInt(heights[index])+(elements[index].outerHeight()-portHeight);
126
+ }
127
+ }
128
+
129
+
130
+ if(settings.updateHash && settings.sectionName && !(firstLoad===true && index===0)) {
131
+ if(history.pushState) {
132
+ try {
133
+ history.replaceState(null, null, names[index]);
134
+ } catch (e) {
135
+ if(window.console) {
136
+ console.warn("Scrollify warning: Page must be hosted to manipulate the hash value.");
137
+ }
138
+ }
139
+
140
+ } else {
141
+ window.location.hash = names[index];
142
+ }
143
+ }
144
+
145
+ currentIndex = index;
146
+ if(instant) {
147
+ $(settings.target).stop().scrollTop(destination);
148
+ if(callbacks) {
149
+ settings.after(index,elements);
150
+ }
151
+ } else {
152
+ locked = true;
153
+ if( $().velocity ) {
154
+ $(settings.target).stop().velocity('scroll', {
155
+ duration: settings.scrollSpeed,
156
+ easing: settings.easing,
157
+ offset: destination,
158
+ mobileHA: false
159
+ });
160
+ } else {
161
+ $(settings.target).stop().animate({
162
+ scrollTop: destination
163
+ }, settings.scrollSpeed,settings.easing);
164
+ }
165
+
166
+ if(window.location.hash.length && settings.sectionName && window.console) {
167
+ try {
168
+ if($(window.location.hash).length) {
169
+ console.warn("Scrollify warning: ID matches hash value - this will cause the page to anchor.");
170
+ }
171
+ } catch (e) {}
172
+ }
173
+ $(settings.target).promise().done(function(){
174
+ locked = false;
175
+ firstLoad = false;
176
+ if(callbacks) {
177
+ settings.after(index,elements);
178
+ }
179
+ });
180
+ }
181
+
182
+ }
183
+ }
184
+
185
+ function isAccelerating(samples) {
186
+ function average(num) {
187
+ var sum = 0;
188
+
189
+ var lastElements = samples.slice(Math.max(samples.length - num, 1));
190
+
191
+ for(var i = 0; i < lastElements.length; i++){
192
+ sum += lastElements[i];
193
+ }
194
+
195
+ return Math.ceil(sum/num);
196
+ }
197
+
198
+ var avEnd = average(10);
199
+ var avMiddle = average(70);
200
+
201
+ if(avEnd >= avMiddle) {
202
+ return true;
203
+ } else {
204
+ return false;
205
+ }
206
+ }
207
+ var scrollify = function(options) {
208
+ initialised = true;
209
+ $.easing['easeOutExpo'] = function(x, t, b, c, d) {
210
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
211
+ };
212
+
213
+ manualScroll = {
214
+ handleMousedown:function() {
215
+ if(disabled===true) {
216
+ return true;
217
+ }
218
+ scrollable = false;
219
+ scrolled = false;
220
+ },
221
+ handleMouseup:function() {
222
+ if(disabled===true) {
223
+ return true;
224
+ }
225
+ scrollable = true;
226
+ if(scrolled) {
227
+ //instant,callbacks
228
+ manualScroll.calculateNearest(false,true);
229
+ }
230
+ },
231
+ handleScroll:function() {
232
+ if(disabled===true) {
233
+ return true;
234
+ }
235
+ if(timeoutId){
236
+ clearTimeout(timeoutId);
237
+ }
238
+
239
+ timeoutId = setTimeout(function(){
240
+ scrolled = true;
241
+ if(scrollable===false) {
242
+ return false;
243
+ }
244
+ scrollable = false;
245
+ //instant,callbacks
246
+ manualScroll.calculateNearest(false,true);
247
+ }, 200);
248
+ },
249
+ calculateNearest:function(instant,callbacks) {
250
+ top = $window.scrollTop();
251
+ var i =1,
252
+ max = heights.length,
253
+ closest = 0,
254
+ prev = Math.abs(heights[0] - top),
255
+ diff;
256
+ for(;i<max;i++) {
257
+ diff = Math.abs(heights[i] - top);
258
+
259
+ if(diff < prev) {
260
+ prev = diff;
261
+ closest = i;
262
+ }
263
+ }
264
+ if((atBottom() && closest>index) || atTop()) {
265
+ index = closest;
266
+ //index, instant, callbacks, toTop
267
+ animateScroll(closest,instant,callbacks,false);
268
+ }
269
+ },
270
+ wheelHandler:function(e) {
271
+ if(disabled===true) {
272
+ return true;
273
+ } else if(settings.standardScrollElements) {
274
+ if($(e.target).is(settings.standardScrollElements) || $(e.target).closest(settings.standardScrollElements).length) {
275
+ return true;
276
+ }
277
+ }
278
+ if(!overflow[index]) {
279
+ e.preventDefault();
280
+ }
281
+ var currentScrollTime = new Date().getTime();
282
+
283
+
284
+ e = e || window.event;
285
+ var value;
286
+ if (e.originalEvent) {
287
+ value = e.originalEvent.wheelDelta || -e.originalEvent.deltaY || -e.originalEvent.detail;
288
+ } else {
289
+ value = e.wheelDelta || -e.deltaY || -e.detail;
290
+ }
291
+ var delta = Math.max(-1, Math.min(1, value));
292
+
293
+ //delta = delta || -e.originalEvent.detail / 3 || e.originalEvent.wheelDelta / 120;
294
+
295
+ if(scrollSamples.length > 149){
296
+ scrollSamples.shift();
297
+ }
298
+ //scrollSamples.push(Math.abs(delta*10));
299
+ scrollSamples.push(Math.abs(value));
300
+
301
+ if((currentScrollTime-scrollTime) > 200){
302
+ scrollSamples = [];
303
+ }
304
+ scrollTime = currentScrollTime;
305
+
306
+
307
+ if(locked) {
308
+ return false;
309
+ }
310
+ if(delta<0) {
311
+ if(index<heights.length-1) {
312
+ if(atBottom()) {
313
+ if(isAccelerating(scrollSamples)) {
314
+ e.preventDefault();
315
+ index++;
316
+ locked = true;
317
+ //index, instant, callbacks, toTop
318
+ animateScroll(index,false,true, false);
319
+ } else {
320
+ return false;
321
+ }
322
+ }
323
+ }
324
+ } else if(delta>0) {
325
+ if(index>0) {
326
+ if(atTop()) {
327
+ if(isAccelerating(scrollSamples)) {
328
+ e.preventDefault();
329
+ index--;
330
+ locked = true;
331
+ //index, instant, callbacks, toTop
332
+ animateScroll(index,false,true, false);
333
+ } else {
334
+ return false
335
+ }
336
+ }
337
+ }
338
+ }
339
+
340
+ },
341
+ keyHandler:function(e) {
342
+ if(disabled===true || document.activeElement.readOnly===false) {
343
+ return true;
344
+ } else if(settings.standardScrollElements) {
345
+ if($(e.target).is(settings.standardScrollElements) || $(e.target).closest(settings.standardScrollElements).length) {
346
+ return true;
347
+ }
348
+ }
349
+ if(locked===true) {
350
+ return false;
351
+ }
352
+ if(e.keyCode==38 || e.keyCode==33) {
353
+ if(index>0) {
354
+ if(atTop()) {
355
+ e.preventDefault();
356
+ index--;
357
+ //index, instant, callbacks, toTop
358
+ animateScroll(index,false,true,false);
359
+ }
360
+ }
361
+ } else if(e.keyCode==40 || e.keyCode==34) {
362
+ if(index<heights.length-1) {
363
+ if(atBottom()) {
364
+ e.preventDefault();
365
+ index++;
366
+ //index, instant, callbacks, toTop
367
+ animateScroll(index,false,true,false);
368
+ }
369
+ }
370
+ }
371
+ },
372
+ init:function() {
373
+ if(settings.scrollbars) {
374
+ $window.on('mousedown', manualScroll.handleMousedown);
375
+ $window.on('mouseup', manualScroll.handleMouseup);
376
+ $window.on('scroll', manualScroll.handleScroll);
377
+ } else {
378
+ $("body").css({"overflow":"hidden"});
379
+ }
380
+ window.addEventListener(wheelEvent, manualScroll.wheelHandler, { passive: false });
381
+ //$(document).bind(wheelEvent,manualScroll.wheelHandler);
382
+ $window.on('keydown', manualScroll.keyHandler);
383
+ }
384
+ };
385
+
386
+ swipeScroll = {
387
+ touches : {
388
+ "touchstart": {"y":-1,"x":-1},
389
+ "touchmove" : {"y":-1,"x":-1},
390
+ "touchend" : false,
391
+ "direction" : "undetermined"
392
+ },
393
+ options:{
394
+ "distance" : 30,
395
+ "timeGap" : 800,
396
+ "timeStamp" : new Date().getTime()
397
+ },
398
+ touchHandler: function(event) {
399
+ if(disabled===true) {
400
+ return true;
401
+ } else if(settings.standardScrollElements) {
402
+ if($(event.target).is(settings.standardScrollElements) || $(event.target).closest(settings.standardScrollElements).length) {
403
+ return true;
404
+ }
405
+ }
406
+ var touch;
407
+ if (typeof event !== 'undefined'){
408
+ if (typeof event.touches !== 'undefined') {
409
+ touch = event.touches[0];
410
+ switch (event.type) {
411
+ case 'touchstart':
412
+ swipeScroll.touches.touchstart.y = touch.pageY;
413
+ swipeScroll.touches.touchmove.y = -1;
414
+
415
+ swipeScroll.touches.touchstart.x = touch.pageX;
416
+ swipeScroll.touches.touchmove.x = -1;
417
+
418
+ swipeScroll.options.timeStamp = new Date().getTime();
419
+ swipeScroll.touches.touchend = false;
420
+ case 'touchmove':
421
+ swipeScroll.touches.touchmove.y = touch.pageY;
422
+ swipeScroll.touches.touchmove.x = touch.pageX;
423
+ if(swipeScroll.touches.touchstart.y!==swipeScroll.touches.touchmove.y && (Math.abs(swipeScroll.touches.touchstart.y-swipeScroll.touches.touchmove.y)>Math.abs(swipeScroll.touches.touchstart.x-swipeScroll.touches.touchmove.x))) {
424
+ //if(!overflow[index]) {
425
+ event.preventDefault();
426
+ //}
427
+ swipeScroll.touches.direction = "y";
428
+ if((swipeScroll.options.timeStamp+swipeScroll.options.timeGap)<(new Date().getTime()) && swipeScroll.touches.touchend == false) {
429
+
430
+ swipeScroll.touches.touchend = true;
431
+ if (swipeScroll.touches.touchstart.y > -1) {
432
+
433
+ if(Math.abs(swipeScroll.touches.touchmove.y-swipeScroll.touches.touchstart.y)>swipeScroll.options.distance) {
434
+ if(swipeScroll.touches.touchstart.y < swipeScroll.touches.touchmove.y) {
435
+
436
+ swipeScroll.up();
437
+
438
+ } else {
439
+ swipeScroll.down();
440
+
441
+ }
442
+ }
443
+ }
444
+ }
445
+ }
446
+ break;
447
+ case 'touchend':
448
+ if(swipeScroll.touches[event.type]===false) {
449
+ swipeScroll.touches[event.type] = true;
450
+ if (swipeScroll.touches.touchstart.y > -1 && swipeScroll.touches.touchmove.y > -1 && swipeScroll.touches.direction==="y") {
451
+
452
+ if(Math.abs(swipeScroll.touches.touchmove.y-swipeScroll.touches.touchstart.y)>swipeScroll.options.distance) {
453
+ if(swipeScroll.touches.touchstart.y < swipeScroll.touches.touchmove.y) {
454
+ swipeScroll.up();
455
+
456
+ } else {
457
+ swipeScroll.down();
458
+
459
+ }
460
+ }
461
+ swipeScroll.touches.touchstart.y = -1;
462
+ swipeScroll.touches.touchstart.x = -1;
463
+ swipeScroll.touches.direction = "undetermined";
464
+ }
465
+ }
466
+ default:
467
+ break;
468
+ }
469
+ }
470
+ }
471
+ },
472
+ down: function() {
473
+
474
+ if(index<heights.length) {
475
+
476
+ if(atBottom() && index<heights.length-1) {
477
+
478
+ index++;
479
+ //index, instant, callbacks, toTop
480
+ animateScroll(index,false,true,false);
481
+ } else {
482
+ portHeight = getportHeight();
483
+ if(Math.floor(elements[index].height()/portHeight)>interstitialIndex) {
484
+
485
+ interstitialScroll(parseInt(heights[index])+(portHeight*interstitialIndex));
486
+ interstitialIndex += 1;
487
+
488
+ } else {
489
+ interstitialScroll(parseInt(heights[index])+(elements[index].outerHeight()-portHeight));
490
+ }
491
+
492
+ }
493
+ }
494
+ },
495
+ up: function() {
496
+ if(index>=0) {
497
+ if(atTop() && index>0) {
498
+
499
+ index--;
500
+ //index, instant, callbacks, toTop
501
+ animateScroll(index,false,true,false);
502
+ } else {
503
+
504
+ if(interstitialIndex>2) {
505
+ portHeight = getportHeight();
506
+
507
+ interstitialIndex -= 1;
508
+ interstitialScroll(parseInt(heights[index])+(portHeight*interstitialIndex));
509
+
510
+ } else {
511
+
512
+ interstitialIndex = 1;
513
+ interstitialScroll(parseInt(heights[index]));
514
+ }
515
+ }
516
+
517
+ }
518
+ },
519
+ init: function() {
520
+ if (document.addEventListener && settings.touchScroll) {
521
+ var eventListenerOptions = {
522
+ passive: false
523
+ };
524
+ document.addEventListener('touchstart', swipeScroll.touchHandler, eventListenerOptions);
525
+ document.addEventListener('touchmove', swipeScroll.touchHandler, eventListenerOptions);
526
+ document.addEventListener('touchend', swipeScroll.touchHandler, eventListenerOptions);
527
+ }
528
+ }
529
+ };
530
+
531
+
532
+ util = {
533
+ refresh:function(withCallback,scroll) {
534
+ clearTimeout(timeoutId2);
535
+ timeoutId2 = setTimeout(function() {
536
+ //retain position
537
+ sizePanels(true);
538
+ //scroll, firstLoad
539
+ calculatePositions(scroll,false);
540
+ if(withCallback) {
541
+ settings.afterResize();
542
+ }
543
+ },400);
544
+ },
545
+ handleUpdate:function() {
546
+ //callbacks, scroll
547
+ //changed from false,true to false,false
548
+ util.refresh(false,false);
549
+ },
550
+ handleResize:function() {
551
+ //callbacks, scroll
552
+ util.refresh(true,false);
553
+ },
554
+ handleOrientation:function() {
555
+ //callbacks, scroll
556
+ util.refresh(true,true);
557
+ }
558
+ };
559
+ settings = $.extend(settings, options);
560
+
561
+ //retain position
562
+ sizePanels(false);
563
+
564
+ calculatePositions(false,true);
565
+
566
+ if(true===hasLocation) {
567
+ //index, instant, callbacks, toTop
568
+ animateScroll(index,false,true,true);
569
+ } else {
570
+ setTimeout(function() {
571
+ //instant,callbacks
572
+ manualScroll.calculateNearest(true,false);
573
+ },200);
574
+ }
575
+ if(heights.length) {
576
+ manualScroll.init();
577
+ swipeScroll.init();
578
+
579
+ $window.on("resize",util.handleResize);
580
+ if (document.addEventListener) {
581
+ window.addEventListener("orientationchange", util.handleOrientation, false);
582
+ }
583
+ }
584
+ function interstitialScroll(pos) {
585
+ if( $().velocity ) {
586
+ $(settings.target).stop().velocity('scroll', {
587
+ duration: settings.scrollSpeed,
588
+ easing: settings.easing,
589
+ offset: pos,
590
+ mobileHA: false
591
+ });
592
+ } else {
593
+ $(settings.target).stop().animate({
594
+ scrollTop: pos
595
+ }, settings.scrollSpeed,settings.easing);
596
+ }
597
+ }
598
+
599
+ function sizePanels(keepPosition) {
600
+ if(keepPosition) {
601
+ top = $window.scrollTop();
602
+ }
603
+
604
+ var selector = settings.section;
605
+ overflow = [];
606
+ if(settings.interstitialSection.length) {
607
+ selector += "," + settings.interstitialSection;
608
+ }
609
+ if(settings.scrollbars===false) {
610
+ settings.overflowScroll = false;
611
+ }
612
+ portHeight = getportHeight();
613
+ $(selector).each(function(i) {
614
+ var $this = $(this);
615
+
616
+ if(settings.setHeights) {
617
+ if($this.is(settings.interstitialSection)) {
618
+ overflow[i] = false;
619
+ } else {
620
+ if(($this.css("height","auto").outerHeight()<portHeight) || $this.css("overflow")==="hidden") {
621
+ $this.css({"height":portHeight});
622
+
623
+ overflow[i] = false;
624
+ } else {
625
+
626
+ $this.css({"height":$this.outerHeight()});
627
+
628
+ if(settings.overflowScroll) {
629
+ overflow[i] = true;
630
+ } else {
631
+ overflow[i] = false;
632
+ }
633
+ }
634
+
635
+ }
636
+
637
+ } else {
638
+
639
+ if(($this.outerHeight()<portHeight) || (settings.overflowScroll===false)) {
640
+ overflow[i] = false;
641
+ } else {
642
+ overflow[i] = true;
643
+ }
644
+ }
645
+ });
646
+ if(keepPosition) {
647
+ $window.scrollTop(top);
648
+ }
649
+ }
650
+ function calculatePositions(scroll,firstLoad) {
651
+ var selector = settings.section;
652
+ if(settings.interstitialSection.length) {
653
+ selector += "," + settings.interstitialSection;
654
+ }
655
+ heights = [];
656
+ names = [];
657
+ elements = [];
658
+ $(selector).each(function(i){
659
+ var $this = $(this);
660
+ if(i>0) {
661
+ heights[i] = parseInt($this.offset().top) + settings.offset;
662
+ } else {
663
+ heights[i] = parseInt($this.offset().top);
664
+ }
665
+ if(settings.sectionName && $this.data(settings.sectionName)) {
666
+ names[i] = "#" + $this.data(settings.sectionName).toString().replace(/ /g,"-");
667
+ } else {
668
+ if($this.is(settings.interstitialSection)===false) {
669
+ names[i] = "#" + (i + 1);
670
+ } else {
671
+ names[i] = "#";
672
+ if(i===$(selector).length-1 && i>1) {
673
+ heights[i] = heights[i-1] + (parseInt($($(selector)[i-1]).outerHeight()) - parseInt($(window).height())) + parseInt($this.outerHeight());
674
+ }
675
+ }
676
+ }
677
+ elements[i] = $this;
678
+ try {
679
+ if($(names[i]).length && window.console) {
680
+ console.warn("Scrollify warning: Section names can't match IDs - this will cause the browser to anchor.");
681
+ }
682
+ } catch (e) {}
683
+
684
+ if(window.location.hash===names[i]) {
685
+ index = i;
686
+ hasLocation = true;
687
+ }
688
+
689
+ });
690
+
691
+ if(true===scroll) {
692
+ //index, instant, callbacks, toTop
693
+ animateScroll(index,false,false,false);
694
+ }
695
+ }
696
+
697
+ function atTop() {
698
+ if(!overflow[index]) {
699
+ return true;
700
+ }
701
+ top = $window.scrollTop();
702
+ if(top>parseInt(heights[index])) {
703
+ return false;
704
+ } else {
705
+ return true;
706
+ }
707
+ }
708
+ function atBottom() {
709
+ if(!overflow[index]) {
710
+ return true;
711
+ }
712
+ top = $window.scrollTop();
713
+ portHeight = getportHeight();
714
+
715
+ if(top<parseInt(heights[index])+(elements[index].outerHeight()-portHeight)-28) {
716
+
717
+ return false;
718
+
719
+ } else {
720
+ return true;
721
+ }
722
+ }
723
+ }
724
+
725
+ function move(panel,instant) {
726
+ var z = names.length;
727
+ for(;z>=0;z--) {
728
+ if(typeof panel === 'string') {
729
+ if (names[z]===panel) {
730
+ index = z;
731
+ //index, instant, callbacks, toTop
732
+ animateScroll(z,instant,true,true);
733
+ }
734
+ } else {
735
+ if(z===panel) {
736
+ index = z;
737
+ //index, instant, callbacks, toTop
738
+ animateScroll(z,instant,true,true);
739
+ }
740
+ }
741
+ }
742
+ }
743
+ scrollify.move = function(panel) {
744
+ if(panel===undefined) {
745
+ return false;
746
+ }
747
+ if(panel.originalEvent) {
748
+ panel = $(this).attr("href");
749
+ }
750
+ move(panel,false);
751
+ };
752
+ scrollify.instantMove = function(panel) {
753
+ if(panel===undefined) {
754
+ return false;
755
+ }
756
+ move(panel,true);
757
+ };
758
+ scrollify.next = function() {
759
+ if(index<names.length) {
760
+ index += 1;
761
+ //index, instant, callbacks, toTop
762
+ animateScroll(index,false,true,true);
763
+ }
764
+ };
765
+ scrollify.previous = function() {
766
+ if(index>0) {
767
+ index -= 1;
768
+ //index, instant, callbacks, toTop
769
+ animateScroll(index,false,true,true);
770
+ }
771
+ };
772
+ scrollify.instantNext = function() {
773
+ if(index<names.length) {
774
+ index += 1;
775
+ //index, instant, callbacks, toTop
776
+ animateScroll(index,true,true,true);
777
+ }
778
+ };
779
+ scrollify.instantPrevious = function() {
780
+ if(index>0) {
781
+ index -= 1;
782
+ //index, instant, callbacks, toTop
783
+ animateScroll(index,true,true,true);
784
+ }
785
+ };
786
+ scrollify.destroy = function() {
787
+ if(!initialised) {
788
+ return false;
789
+ }
790
+ if(settings.setHeights) {
791
+ $(settings.section).each(function() {
792
+ $(this).css("height","auto");
793
+ });
794
+ }
795
+ $window.off("resize",util.handleResize);
796
+ if(settings.scrollbars) {
797
+ $window.off('mousedown', manualScroll.handleMousedown);
798
+ $window.off('mouseup', manualScroll.handleMouseup);
799
+ $window.off('scroll', manualScroll.handleScroll);
800
+ }
801
+ // $window.off(wheelEvent,manualScroll.wheelHandler);
802
+ window.removeEventListener(wheelEvent,manualScroll.wheelHandler);
803
+ $window.off('keydown', manualScroll.keyHandler);
804
+
805
+ if (document.addEventListener && settings.touchScroll) {
806
+ document.removeEventListener('touchstart', swipeScroll.touchHandler, false);
807
+ document.removeEventListener('touchmove', swipeScroll.touchHandler, false);
808
+ document.removeEventListener('touchend', swipeScroll.touchHandler, false);
809
+ }
810
+ heights = [];
811
+ names = [];
812
+ elements = [];
813
+ overflow = [];
814
+ };
815
+ scrollify.update = function() {
816
+ if(!initialised) {
817
+ return false;
818
+ }
819
+ util.handleUpdate();
820
+ };
821
+ scrollify.current = function() {
822
+ return elements[index];
823
+ };
824
+ scrollify.currentIndex = function() {
825
+ return index;
826
+ };
827
+ scrollify.disable = function() {
828
+ disabled = true;
829
+ };
830
+ scrollify.enable = function() {
831
+ disabled = false;
832
+ if (initialised) {
833
+ //instant,callbacks
834
+ manualScroll.calculateNearest(false,false);
835
+ }
836
+ };
837
+ scrollify.isDisabled = function() {
838
+ return disabled;
839
+ };
840
+ scrollify.setOptions = function(updatedOptions) {
841
+ if(!initialised) {
842
+ return false;
843
+ }
844
+ if(typeof updatedOptions === "object") {
845
+ settings = $.extend(settings, updatedOptions);
846
+ util.handleUpdate();
847
+ } else if(window.console) {
848
+ console.warn("Scrollify warning: setOptions expects an object.");
849
+ }
850
+ };
851
+ $.scrollify = scrollify;
852
+ return scrollify;
853
+ }));
assets/js/premium-addons.js CHANGED
@@ -355,7 +355,7 @@
355
  draggable: carouselSettings["draggable"],
356
  touchMove: carouselSettings["touchMove"],
357
  rtl: carouselSettings["rtl"],
358
- useTransform: false,
359
  adaptiveHeight: carouselSettings["adaptiveHeight"],
360
  pauseOnHover: carouselSettings["pauseOnHover"],
361
  centerMode: carouselSettings["centerMode"],
355
  draggable: carouselSettings["draggable"],
356
  touchMove: carouselSettings["touchMove"],
357
  rtl: carouselSettings["rtl"],
358
+ useTransform: true,
359
  adaptiveHeight: carouselSettings["adaptiveHeight"],
360
  pauseOnHover: carouselSettings["pauseOnHover"],
361
  centerMode: carouselSettings["centerMode"],
assets/js/premium-vscroll.js CHANGED
@@ -1,12 +1,243 @@
1
- (function($) {
 
 
 
2
  /****** Premium Vertical Scroll Handler ******/
3
  var PremiumVerticalScrollHandler = function($scope, $) {
4
- var vScrollElem = $scope.find(".premium-vscroll-wrap"),
5
- instance = null,
6
- vScrollSettings = vScrollElem.data("settings");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
- instance = new premiumVerticalScroll(vScrollElem, vScrollSettings);
9
- instance.init();
10
  };
11
 
12
  window.premiumVerticalScroll = function($selector, settings) {
@@ -482,4 +713,4 @@
482
  PremiumVerticalScrollHandler
483
  );
484
  });
485
- })(jQuery);
1
+ // Works on mobile but needs enhancements
2
+
3
+ ( function( $ ) {
4
+
5
  /****** Premium Vertical Scroll Handler ******/
6
  var PremiumVerticalScrollHandler = function($scope, $) {
7
+
8
+ var vScrollElem = $scope.find( ".premium-vscroll-wrap" ),
9
+ instance = null,
10
+ vScrollSettings = vScrollElem.data( "settings" );
11
+
12
+ // var touch = vScrollSettings.touch;
13
+
14
+ instance = new premiumVerticalScroll( vScrollElem, vScrollSettings );
15
+ instance.init();
16
+
17
+ // var isTouchDevice = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/);
18
+ // var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0) || (navigator.maxTouchPoints));
19
+ //
20
+ //
21
+ // if( touch ) {
22
+ // instance = new premiumVerticalScroll2( vScrollElem, vScrollSettings );
23
+ // instance.init();
24
+ // } else {
25
+ // if ( isTouchDevice || isTouch ) {
26
+ // instance = new premiumVerticalScroll( vScrollElem, vScrollSettings );
27
+ // instance.init();
28
+ // } else {
29
+ // instance = new premiumVerticalScroll2( vScrollElem, vScrollSettings );
30
+ // instance.init();
31
+ // }
32
+ // }
33
+
34
+
35
+ };
36
+
37
+
38
+ window.premiumVerticalScroll2 = function( $selector, settings ) {
39
+
40
+ var self = this,
41
+ $instance = $selector,
42
+ $window = $( window ),
43
+ $htmlBody = $("html, body"),
44
+ checkTemps = $selector.find( ".premium-vscroll-sections-wrap" ).length,
45
+ deviceType = $("body").data("elementor-device-mode"),
46
+ $itemsList = $(".premium-vscroll-dot-item", $instance),
47
+ $menuItems = $(".premium-vscroll-nav-item", $instance),
48
+ animated = 0;
49
+
50
+
51
+ var $lastItem = $itemsList.last(),
52
+ lastSectionId = $lastItem.data("menuanchor"),
53
+ lastOffset = Math.round( $( "#" + lastSectionId ).offset().top );
54
+
55
+ self.init = function() {
56
+
57
+ self.setSectionsData();
58
+
59
+ $itemsList.on("click.premiumVerticalScroll", self.onNavDotChange);
60
+ $menuItems.on("click.premiumVerticalScroll", self.onNavDotChange);
61
+
62
+ $itemsList.on( "mouseenter.premiumVerticalScroll", self.onNavDotEnter );
63
+
64
+ $itemsList.on( "mouseleave.premiumVerticalScroll", self.onNavDotLeave );
65
+
66
+ $.scrollify({
67
+ section: ".premium-vscroll-section",
68
+ updateHash: false,
69
+ standardScrollElements: "#" + lastSectionId,
70
+ scrollSpeed: settings.speed,
71
+ overflowScroll: settings.overflow,
72
+ setHeights: settings.setHeight,
73
+ before: function( index ) {
74
+
75
+ $menuItems.removeClass("active");
76
+ $itemsList.removeClass("active");
77
+
78
+ $( $itemsList[ index ] ).addClass( "active" );
79
+ $( $menuItems[ index ] ).addClass( "active" );
80
+
81
+ },
82
+ after: function( index ) {
83
+
84
+ if ( index === $lastItem.index() ) {
85
+ // $.scrollify.disable();
86
+ }
87
+
88
+ },
89
+ afterRender: function() {
90
+
91
+ $( $itemsList[ 0 ] ).addClass( "active" );
92
+ $( $menuItems[ 0 ] ).addClass( "active" );
93
+
94
+ }
95
+ });
96
+
97
+ if ( deviceType === "desktop" ) {
98
+
99
+ $window.on( "scroll.premiumVerticalScroll2", self.onWheel );
100
+
101
+ }
102
+
103
+ if ( settings.fullSection ) {
104
+
105
+ var vSection = document.getElementById( $instance.attr("id") );
106
+
107
+ if ( checkTemps ) {
108
+
109
+ document.addEventListener
110
+ ? vSection.addEventListener("wheel", self.onWheel, !1)
111
+ : vSection.attachEvent("onmousewheel", self.onWheel);
112
+
113
+ } else {
114
+
115
+ document.addEventListener
116
+ ? document.addEventListener("wheel", self.onWheel, !1)
117
+ : document.attachEvent("onmousewheel", self.onWheel);
118
+
119
+ }
120
+ }
121
+
122
+ };
123
+
124
+ self.onWheel = function( event ) {
125
+
126
+ var $target = $( event.target ),
127
+ sectionSelector = checkTemps ? ".premium-vscroll-temp" : ".elementor-top-section",
128
+ $section = $target.closest( sectionSelector ),
129
+ sectionId = $section.attr( "id" ),
130
+ $currentSection = $.scrollify.current();
131
+
132
+ //re-enable Scrollify
133
+ if ( sectionId !== lastSectionId && $section.hasClass("premium-vscroll-section") && $.scrollify.isDisabled() ) {
134
+
135
+ $(".premium-vscroll-dots, .premium-vscroll-nav-menu").removeClass(
136
+ "premium-vscroll-dots-hide"
137
+ );
138
+
139
+ $.scrollify.enable();
140
+
141
+ }
142
+
143
+ if ( ! $section.hasClass("premium-vscroll-section") && $.scrollify.isDisabled() ) {
144
+
145
+ $(".premium-vscroll-tooltip").hide();
146
+
147
+ $(".premium-vscroll-dots, .premium-vscroll-nav-menu").addClass(
148
+ "premium-vscroll-dots-hide"
149
+ );
150
+
151
+ }
152
+
153
+
154
+
155
+ };
156
+
157
+ self.moveSectionDown = function() {
158
+ $.scrollify.next();
159
+ }
160
+
161
+ self.moveSectionUp = function() {
162
+ $.scrollify.previous();
163
+ }
164
+
165
+ self.moveToSection = function( index ) {
166
+
167
+ $.scrollify.move( index );
168
+ }
169
+
170
+ self.setSectionsData = function() {
171
+
172
+ $itemsList.each( function() {
173
+
174
+ var $this = $( this ),
175
+ sectionId = $this.data( "menuanchor" ),
176
+ $section = $( "#" + sectionId );
177
+
178
+ $section.addClass( "premium-vscroll-section" );
179
+
180
+ });
181
+
182
+ };
183
+
184
+ self.onNavDotChange = function( event ) {
185
+
186
+ var $this = $( this ),
187
+ index = $this.index(),
188
+ sectionId = $this.data("menuanchor");
189
+
190
+ // if ( ! isScrolling ) {
191
+
192
+ if ( $.scrollify.isDisabled() ) {
193
+
194
+ $.scrollify.enable();
195
+
196
+ }
197
+
198
+ $menuItems.removeClass("active");
199
+ $itemsList.removeClass("active");
200
+
201
+ if ( $this.hasClass( "premium-vscroll-nav-item") ) {
202
+
203
+ $( $itemsList[ index ] ).addClass( "active" );
204
+
205
+ } else {
206
+
207
+ $( $menuItems[ index ] ).addClass( "active" );
208
+ }
209
+
210
+ $this.addClass( "active" );
211
+
212
+ self.moveToSection( index );
213
+
214
+ // }
215
+ };
216
+
217
+ self.onNavDotEnter = function() {
218
+
219
+ var $this = $( this ),
220
+ index = $this.data("index");
221
+
222
+ if ( settings.tooltips ) {
223
+
224
+ $('<div class="premium-vscroll-tooltip"><span>' + settings.dotsText[index] + "</span></div>" ).hide().appendTo( $this ).fadeIn( 200 );
225
+ }
226
+
227
+ };
228
+
229
+ self.onNavDotLeave = function() {
230
+
231
+ $( ".premium-vscroll-tooltip" ).fadeOut( 200, function() {
232
+
233
+ $( this ).remove();
234
+
235
+ });
236
+
237
+ };
238
 
239
+
240
+
241
  };
242
 
243
  window.premiumVerticalScroll = function($selector, settings) {
713
  PremiumVerticalScrollHandler
714
  );
715
  });
716
+ })( jQuery );
includes/class-addons-integration.php CHANGED
@@ -213,6 +213,14 @@ class Premium_Addons_Integration {
213
  true
214
  );
215
 
 
 
 
 
 
 
 
 
216
  }
217
 
218
  /*
213
  true
214
  );
215
 
216
+ // wp_register_script(
217
+ // 'scrollify-js',
218
+ // PREMIUM_ADDONS_URL . 'assets/js/lib/scrollify.js',
219
+ // array('jquery'),
220
+ // PREMIUM_ADDONS_VERSION,
221
+ // true
222
+ // );
223
+
224
  }
225
 
226
  /*
includes/compatibility/class-premium-addons-wpml.php CHANGED
@@ -34,21 +34,36 @@ if ( ! class_exists ('Premium_Addons_Wpml') ) {
34
  }
35
  }
36
 
 
 
 
 
 
 
 
 
 
 
 
37
  public static function is_wpml_active() {
38
 
39
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
40
 
41
- return is_plugin_active( 'wpml-string-translation/plugin.php' );
42
 
43
  }
44
 
45
  /**
 
 
 
46
  * Integrations class for widgets with complex controls.
47
  *
48
  * @since 3.1.9
49
  */
50
  public function includes() {
51
 
 
52
  include_once( 'widgets/fancy-text.php' );
53
  include_once( 'widgets/grid.php' );
54
  include_once( 'widgets/maps.php' );
@@ -253,6 +268,11 @@ if ( ! class_exists ('Premium_Addons_Wpml') ) {
253
  ]
254
  ];
255
 
 
 
 
 
 
256
  $widgets['premium-addon-fancy-text'] = [
257
  'conditions' => [ 'widgetType' => 'premium-addon-fancy-text' ],
258
  'fields' => [
@@ -562,8 +582,8 @@ if( ! function_exists('premium_addons_wpml') ) {
562
 
563
  /**
564
  * Triggers `get_instance` method
565
- * @since 0.0.1
566
- * @access public
567
  * return object
568
  */
569
  function premium_addons_wpml() {
34
  }
35
  }
36
 
37
+
38
+ /*
39
+ * Is WPML Active
40
+ *
41
+ * Check if WPML String Translation active
42
+ *
43
+ * @since 3.1.9
44
+ * @access private
45
+ *
46
+ * @return boolean is WPML String Translation
47
+ */
48
  public static function is_wpml_active() {
49
 
50
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
51
 
52
+ return is_plugin_active( 'wpml-string-translation/plugin.php' );
53
 
54
  }
55
 
56
  /**
57
+ *
58
+ * Includes
59
+ *
60
  * Integrations class for widgets with complex controls.
61
  *
62
  * @since 3.1.9
63
  */
64
  public function includes() {
65
 
66
+ include_once( 'widgets/carousel.php' );
67
  include_once( 'widgets/fancy-text.php' );
68
  include_once( 'widgets/grid.php' );
69
  include_once( 'widgets/maps.php' );
268
  ]
269
  ];
270
 
271
+ $widgets['premium-carousel-widget'] = [
272
+ 'conditions' => [ 'widgetType' => 'premium-carousel-widget' ],
273
+ 'integration-class' => 'PremiumAddons\Compatibility\WPML\Widgets\Carousel',
274
+ ];
275
+
276
  $widgets['premium-addon-fancy-text'] = [
277
  'conditions' => [ 'widgetType' => 'premium-addon-fancy-text' ],
278
  'fields' => [
582
 
583
  /**
584
  * Triggers `get_instance` method
585
+ * @since 0.0.1
586
+ * @access public
587
  * return object
588
  */
589
  function premium_addons_wpml() {
includes/compatibility/widgets/carousel.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
+ * Carousel
11
+ *
12
+ * Registers translatable widget with items.
13
+ *
14
+ * @since 3.2.4
15
+ */
16
+ class Carousel extends WPML_Elementor_Module_With_Items {
17
+
18
+ /**
19
+ * Retrieve the field name.
20
+ *
21
+ * @since 3.2.4
22
+ * @return string
23
+ */
24
+ public function get_items_field() {
25
+ return 'premium_carousel_templates_repeater';
26
+ }
27
+
28
+ /**
29
+ * Retrieve the fields inside the repeater.
30
+ *
31
+ * @since 3.2.4
32
+ *
33
+ * @return array
34
+ */
35
+ public function get_fields() {
36
+ return array(
37
+ 'premium_carousel_repeater_item',
38
+ );
39
+ }
40
+
41
+ /**
42
+ * Get the title for each repeater string
43
+ *
44
+ * @since 3.2.4
45
+ *
46
+ * @return string
47
+ */
48
+ protected function get_title( $field ) {
49
+
50
+ return __( 'Carousel : Template', 'premium-addons-for-elementor' );
51
+
52
+ }
53
+
54
+ /**
55
+ * Get `editor_type` for each repeater string
56
+ *
57
+ * @since 3.2.4
58
+ *
59
+ * @return string
60
+ */
61
+ protected function get_editor_type( $field ) {
62
+
63
+ return 'LINE';
64
+ }
65
+
66
+ }
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.2.3
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.2.3');
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.2.2');
23
 
24
  if( ! class_exists('Premium_Addons_Elementor') ) {
25
  /*
@@ -56,6 +56,7 @@ if( ! class_exists('Premium_Addons_Elementor') ) {
56
  * @return void
57
  */
58
  public function premium_addons_elementor_setup() {
 
59
  $this->load_domain();
60
 
61
  $this->init_files();
@@ -111,7 +112,9 @@ if( ! class_exists('Premium_Addons_Elementor') ) {
111
  * @return void
112
  */
113
  public function load_domain() {
114
- load_plugin_textdomain('premium-addons-for-elementor', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/');
 
 
115
  }
116
 
117
  /**
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.2.4
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.2.4');
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.2.3');
23
 
24
  if( ! class_exists('Premium_Addons_Elementor') ) {
25
  /*
56
  * @return void
57
  */
58
  public function premium_addons_elementor_setup() {
59
+
60
  $this->load_domain();
61
 
62
  $this->init_files();
112
  * @return void
113
  */
114
  public function load_domain() {
115
+
116
+ load_plugin_textdomain( 'premium-addons-for-elementor' );
117
+
118
  }
119
 
120
  /**
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.2.3
9
  License: GPL v3.0
10
  License URI: https://opensource.org/licenses/GPL-3.0
11
 
@@ -139,6 +139,13 @@ Premium Addons for Elementor is 100% Ads Free, Ads can only be detected from You
139
 
140
  == Changelog ==
141
 
 
 
 
 
 
 
 
142
  = 3.2.3 =
143
 
144
  - Tweak: Added `Dynamic Content` support for Progress Bar value.
5
  Requires at least: 4.5
6
  Tested up to: 5.1.1
7
  Requires PHP: 5.4
8
+ Stable tag: 3.2.4
9
  License: GPL v3.0
10
  License URI: https://opensource.org/licenses/GPL-3.0
11
 
139
 
140
  == Changelog ==
141
 
142
+ = 3.2.4 =
143
+
144
+ - Tweak: Added `Portuguese` translation.
145
+ - Tweak: `WPML Compatibility` for Carousel widget.
146
+ - Tweak: Use `transform` instead of `absolute` position to enhance Carousel widget transitions.
147
+ - Fixed: Grid widget images don't fill container height for some themes.
148
+
149
  = 3.2.3 =
150
 
151
  - Tweak: Added `Dynamic Content` support for Progress Bar value.
widgets/premium-progressbar.php CHANGED
@@ -584,8 +584,10 @@ class Premium_Progressbar extends Widget_Base {
584
  $this->add_inline_editing_attributes('premium_progressbar_left_label');
585
  $this->add_inline_editing_attributes('premium_progressbar_right_label');
586
 
 
 
587
  $progressbar_settings = [
588
- 'progress_length' => $settings['premium_progressbar_progress_percentage'],
589
  'speed' => !empty( $settings['premium_progressbar_speed'] ) ? $settings['premium_progressbar_speed'] : 1000
590
  ];
591
  ?>
584
  $this->add_inline_editing_attributes('premium_progressbar_left_label');
585
  $this->add_inline_editing_attributes('premium_progressbar_right_label');
586
 
587
+ $length = isset ( $settings['premium_progressbar_progress_percentage']['size'] ) ? $settings['premium_progressbar_progress_percentage']['size'] : $settings['premium_progressbar_progress_percentage'];
588
+
589
  $progressbar_settings = [
590
+ 'progress_length' => $length,
591
  'speed' => !empty( $settings['premium_progressbar_speed'] ) ? $settings['premium_progressbar_speed'] : 1000
592
  ];
593
  ?>