Elementor Essential Addons - Version 3.5.2

Version Description

  • 11/11/2019 =
  • Fixed : Style breaking issue after update
  • Few minor bugfix and improvements
Download this release

Release Info

Developer re_enter_rupok
Plugin Icon 128x128 Elementor Essential Addons
Version 3.5.2
Comparing to
See all releases

Code changes from version 3.5.1 to 3.5.2

assets/admin/js/admin-bar.js CHANGED
@@ -1,30 +1,31 @@
1
  (function($) {
2
- "use strict";
3
 
4
- $(document).on('click', '.ea-clear-cache', function (e) {
5
  e.preventDefault();
6
 
7
- if(typeof localize != 'undefined' && localize) {
8
- var pageID = $(this).parent().find('.ea-clear-cache-id').data('pageid'),
9
- text = $(this).find('.ab-item');
 
 
 
10
 
11
  $.ajax({
12
  url: localize.ajaxurl,
13
- type: "post",
14
  data: {
15
- action: "clear_cache_files_with_ajax",
16
  security: localize.nonce,
17
  pageID: pageID,
18
  actionType: 'post'
19
  },
20
  beforeSend: function() {
21
- text.text(
22
- 'Clearing...'
23
- );
24
  },
25
  success: function(response) {
26
  setTimeout(function() {
27
- text.text('Clear Page Cache');
28
  window.location.reload();
29
  }, 1000);
30
  },
@@ -37,27 +38,25 @@
37
  }
38
  });
39
 
40
- $(document).on('click', '.ea-all-cache-clear', function (e) {
41
  e.preventDefault();
42
 
43
- if(typeof localize != 'undefined' && localize) {
44
  var text = $(this).find('.ab-item');
45
-
46
  $.ajax({
47
  url: localize.ajaxurl,
48
- type: "post",
49
  data: {
50
- action: "clear_cache_files_with_ajax",
51
  security: localize.nonce
52
  },
53
  beforeSend: function() {
54
- text.text(
55
- 'Clearing...'
56
- );
57
  },
58
  success: function(response) {
59
  setTimeout(function() {
60
- text.text('Clear All Cache');
61
  window.location.reload();
62
  }, 1000);
63
  },
@@ -65,9 +64,8 @@
65
  console.log('Something went wrong!');
66
  }
67
  });
68
- }else {
69
- console.log('This page has no widget from EA, Clear cache from Dashboard');
70
  }
71
  });
72
-
73
  })(jQuery);
1
  (function($) {
2
+ 'use strict';
3
 
4
+ $(document).on('click', '.ea-clear-cache', function(e) {
5
  e.preventDefault();
6
 
7
+ if (typeof localize != 'undefined' && localize) {
8
+ var pageID = $(this)
9
+ .parent()
10
+ .find('.ea-clear-cache-id')
11
+ .data('pageid'),
12
+ text = $(this).find('.ab-item');
13
 
14
  $.ajax({
15
  url: localize.ajaxurl,
16
+ type: 'post',
17
  data: {
18
+ action: 'clear_cache_files_with_ajax',
19
  security: localize.nonce,
20
  pageID: pageID,
21
  actionType: 'post'
22
  },
23
  beforeSend: function() {
24
+ text.text('Generating...');
 
 
25
  },
26
  success: function(response) {
27
  setTimeout(function() {
28
+ text.text('Regenerate Page Assets');
29
  window.location.reload();
30
  }, 1000);
31
  },
38
  }
39
  });
40
 
41
+ $(document).on('click', '.ea-all-cache-clear', function(e) {
42
  e.preventDefault();
43
 
44
+ if (typeof localize != 'undefined' && localize) {
45
  var text = $(this).find('.ab-item');
46
+
47
  $.ajax({
48
  url: localize.ajaxurl,
49
+ type: 'post',
50
  data: {
51
+ action: 'clear_cache_files_with_ajax',
52
  security: localize.nonce
53
  },
54
  beforeSend: function() {
55
+ text.text('Generating...');
 
 
56
  },
57
  success: function(response) {
58
  setTimeout(function() {
59
+ text.text('Regenerate All Assets');
60
  window.location.reload();
61
  }, 1000);
62
  },
64
  console.log('Something went wrong!');
65
  }
66
  });
67
+ } else {
68
+ console.log('This page has no widget from EA, Regenerate Assets from Dashboard');
69
  }
70
  });
 
71
  })(jQuery);
assets/admin/js/admin.js CHANGED
@@ -83,7 +83,7 @@
83
  }
84
  });
85
 
86
- // Clear cache files
87
  $('#eael-regenerate-files').on('click', function(e) {
88
  e.preventDefault();
89
  var _this = $(this);
@@ -97,16 +97,16 @@
97
  },
98
  beforeSend: function() {
99
  _this.html(
100
- '<svg id="eael-spinner" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 48 48"><circle cx="24" cy="4" r="4" fill="#fff"/><circle cx="12.19" cy="7.86" r="3.7" fill="#fffbf2"/><circle cx="5.02" cy="17.68" r="3.4" fill="#fef7e4"/><circle cx="5.02" cy="30.32" r="3.1" fill="#fef3d7"/><circle cx="12.19" cy="40.14" r="2.8" fill="#feefc9"/><circle cx="24" cy="44" r="2.5" fill="#feebbc"/><circle cx="35.81" cy="40.14" r="2.2" fill="#fde7af"/><circle cx="42.98" cy="30.32" r="1.9" fill="#fde3a1"/><circle cx="42.98" cy="17.68" r="1.6" fill="#fddf94"/><circle cx="35.81" cy="7.86" r="1.3" fill="#fcdb86"/></svg><span>Clearing...</span>'
101
  );
102
  },
103
  success: function(response) {
104
  setTimeout(function() {
105
- _this.html('Clear Cache');
106
 
107
  Swal.fire({
108
  type: 'success',
109
- title: 'Cache Cleared!',
110
  showConfirmButton: false,
111
  timer: 2000
112
  });
@@ -167,11 +167,11 @@
167
  var target = $(this).data('target');
168
  var val = $(target).val();
169
 
170
- if(Object.keys(options).length > 0) {
171
  prepareOptions['all'] = 'All';
172
 
173
- for(var index in options) {
174
- prepareOptions[index] = options[index].toUpperCase()
175
  }
176
  }
177
 
83
  }
84
  });
85
 
86
+ // Regenerate Assets
87
  $('#eael-regenerate-files').on('click', function(e) {
88
  e.preventDefault();
89
  var _this = $(this);
97
  },
98
  beforeSend: function() {
99
  _this.html(
100
+ '<svg id="eael-spinner" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 48 48"><circle cx="24" cy="4" r="4" fill="#fff"/><circle cx="12.19" cy="7.86" r="3.7" fill="#fffbf2"/><circle cx="5.02" cy="17.68" r="3.4" fill="#fef7e4"/><circle cx="5.02" cy="30.32" r="3.1" fill="#fef3d7"/><circle cx="12.19" cy="40.14" r="2.8" fill="#feefc9"/><circle cx="24" cy="44" r="2.5" fill="#feebbc"/><circle cx="35.81" cy="40.14" r="2.2" fill="#fde7af"/><circle cx="42.98" cy="30.32" r="1.9" fill="#fde3a1"/><circle cx="42.98" cy="17.68" r="1.6" fill="#fddf94"/><circle cx="35.81" cy="7.86" r="1.3" fill="#fcdb86"/></svg><span>Generating...</span>'
101
  );
102
  },
103
  success: function(response) {
104
  setTimeout(function() {
105
+ _this.html('Regenerate Assets');
106
 
107
  Swal.fire({
108
  type: 'success',
109
+ title: 'Assets Regenerated!',
110
  showConfirmButton: false,
111
  timer: 2000
112
  });
167
  var target = $(this).data('target');
168
  var val = $(target).val();
169
 
170
+ if (Object.keys(options).length > 0) {
171
  prepareOptions['all'] = 'All';
172
 
173
+ for (var index in options) {
174
+ prepareOptions[index] = options[index].toUpperCase();
175
  }
176
  }
177
 
essential_adons_elementor.php CHANGED
@@ -4,7 +4,7 @@
4
  * Description: The ultimate elements library for Elementor page builder plugin for WordPress.
5
  * Plugin URI: https://essential-addons.com/elementor/
6
  * Author: WPDeveloper
7
- * Version: 3.5.1
8
  * Author URI: https://wpdeveloper.net/
9
  *
10
  * Text Domain: essential-addons-elementor
@@ -24,7 +24,7 @@ define('EAEL_PLUGIN_FILE', __FILE__);
24
  define('EAEL_PLUGIN_BASENAME', plugin_basename(__FILE__));
25
  define('EAEL_PLUGIN_PATH', trailingslashit(plugin_dir_path(__FILE__)));
26
  define('EAEL_PLUGIN_URL', trailingslashit(plugins_url('/', __FILE__)));
27
- define('EAEL_PLUGIN_VERSION', '3.5.1');
28
  define('EAEL_ASSET_PATH', WP_CONTENT_DIR . '/uploads/essential-addons-elementor');
29
  define('EAEL_ASSET_URL', WP_CONTENT_URL . '/uploads/essential-addons-elementor');
30
 
4
  * Description: The ultimate elements library for Elementor page builder plugin for WordPress.
5
  * Plugin URI: https://essential-addons.com/elementor/
6
  * Author: WPDeveloper
7
+ * Version: 3.5.2
8
  * Author URI: https://wpdeveloper.net/
9
  *
10
  * Text Domain: essential-addons-elementor
24
  define('EAEL_PLUGIN_BASENAME', plugin_basename(__FILE__));
25
  define('EAEL_PLUGIN_PATH', trailingslashit(plugin_dir_path(__FILE__)));
26
  define('EAEL_PLUGIN_URL', trailingslashit(plugins_url('/', __FILE__)));
27
+ define('EAEL_PLUGIN_VERSION', '3.5.2');
28
  define('EAEL_ASSET_PATH', WP_CONTENT_DIR . '/uploads/essential-addons-elementor');
29
  define('EAEL_ASSET_URL', WP_CONTENT_URL . '/uploads/essential-addons-elementor');
30
 
includes/Classes/Bootstrap.php CHANGED
@@ -104,8 +104,8 @@ class Bootstrap
104
  add_action('elementor/editor/after_save', array($this, 'save_global_values'), 10, 2);
105
 
106
  // Generator
 
107
  add_action('elementor/frontend/before_render', array($this, 'collect_transient_elements'));
108
- add_action('wp_print_footer_scripts', array($this, 'generate_frontend_scripts'));
109
 
110
  // Enqueue
111
  add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
104
  add_action('elementor/editor/after_save', array($this, 'save_global_values'), 10, 2);
105
 
106
  // Generator
107
+ add_action('wp', [$this, 'before_page_render']);
108
  add_action('elementor/frontend/before_render', array($this, 'collect_transient_elements'));
 
109
 
110
  // Enqueue
111
  add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
includes/Traits/Admin.php CHANGED
@@ -265,7 +265,7 @@ trait Admin
265
  'meta' => [
266
  'class' => 'ea-all-cache-clear'
267
  ],
268
- 'title' => 'Clear All Cache'
269
  ]);
270
 
271
  $wp_admin_bar->add_node([
@@ -276,7 +276,7 @@ trait Admin
276
  'class' => 'ea-clear-cache',
277
  'html' => '<div class="ea-clear-cache-id" data-pageid="'.get_queried_object_id().'">'
278
  ],
279
- 'title' => 'Clear Page Cache'
280
  ]);
281
 
282
 
265
  'meta' => [
266
  'class' => 'ea-all-cache-clear'
267
  ],
268
+ 'title' => 'Regenerate All Assets'
269
  ]);
270
 
271
  $wp_admin_bar->add_node([
276
  'class' => 'ea-clear-cache',
277
  'html' => '<div class="ea-clear-cache-id" data-pageid="'.get_queried_object_id().'">'
278
  ],
279
+ 'title' => 'Regenerate Page Assets'
280
  ]);
281
 
282
 
includes/Traits/Elements.php CHANGED
@@ -90,23 +90,19 @@ trait Elements
90
  */
91
  public function render_global_html()
92
  {
93
- if (is_singular()) {
 
 
 
94
  $page_settings_manager = Settings_Manager::get_settings_managers('page');
95
- $page_settings_model = $page_settings_manager->get_model(get_the_ID());
 
 
96
  $global_settings = get_option('eael_global_settings');
97
- $html = '';
98
-
99
- if($this->get_settings('eael-reading-progress') == false) {
100
- return;
101
- }
102
-
103
- if ($page_settings_model->get_settings('eael_ext_reading_progress') == 'yes' || isset($global_settings['reading_progress']['enabled'])) {
104
- add_filter('eael/section/after_render', function ($extensions) {
105
- $extensions[] = 'eael-reading-progress';
106
- return $extensions;
107
- });
108
 
109
- $html .= '<div class="eael-reading-progress-wrap eael-reading-progress-wrap-' . ($page_settings_model->get_settings('eael_ext_reading_progress') == 'yes' ? 'local' : 'global') . '">
 
110
  <div class="eael-reading-progress eael-reading-progress-local eael-reading-progress-' . $page_settings_model->get_settings('eael_ext_reading_progress_position') . '">
111
  <div class="eael-reading-progress-fill"></div>
112
  </div>
90
  */
91
  public function render_global_html()
92
  {
93
+ if (is_singular() || is_home() || is_archive()) {
94
+ $queried_object = get_queried_object_id();
95
+
96
+ // get elementor page settings
97
  $page_settings_manager = Settings_Manager::get_settings_managers('page');
98
+ $page_settings_model = $page_settings_manager->get_model($queried_object);
99
+
100
+ // get global settings
101
  $global_settings = get_option('eael_global_settings');
102
+
 
 
 
 
 
 
 
 
 
 
103
 
104
+ if ($this->get_settings('eael-reading-progress') && ($page_settings_model->get_settings('eael_ext_reading_progress') == 'yes' || isset($global_settings['reading_progress']['enabled']))) {
105
+ $html = '<div class="eael-reading-progress-wrap eael-reading-progress-wrap-' . ($page_settings_model->get_settings('eael_ext_reading_progress') == 'yes' ? 'local' : 'global') . '">
106
  <div class="eael-reading-progress eael-reading-progress-local eael-reading-progress-' . $page_settings_model->get_settings('eael_ext_reading_progress_position') . '">
107
  <div class="eael-reading-progress-fill"></div>
108
  </div>
includes/Traits/Enqueue.php CHANGED
@@ -29,7 +29,8 @@ trait Enqueue
29
  add_filter('caldera_forms_force_enqueue_styles_early', '__return_true');
30
  }
31
 
32
- if( defined('FLUENTFORM') ) {
 
33
  wp_enqueue_style(
34
  'fluent-form-styles',
35
  WP_PLUGIN_URL . '/fluentform/public/css/fluent-forms-public.css',
@@ -47,41 +48,42 @@ trait Enqueue
47
 
48
  // Load fontawesome as fallback
49
  wp_enqueue_style(
50
- 'font-awesome-5-all',
51
- ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/all.min.css',
52
- false,
53
- EAEL_PLUGIN_VERSION
54
- );
55
-
56
- wp_enqueue_style(
57
- 'font-awesome-4-shim',
58
- ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/v4-shims.min.css',
59
- false,
60
- EAEL_PLUGIN_VERSION
61
  );
62
-
63
- //Admin bar css
64
  wp_enqueue_style(
65
- 'ea-admin-bar',
66
- EAEL_PLUGIN_URL . 'assets/admin/css/admin-bar.css',
67
  false,
68
  EAEL_PLUGIN_VERSION
69
  );
70
-
71
  wp_enqueue_script(
72
- 'font-awesome-4-shim',
73
- ELEMENTOR_ASSETS_URL . 'lib/font-awesome/js/v4-shims.min.js',
74
- false,
75
- EAEL_PLUGIN_VERSION
76
  );
77
-
78
- // Admin bar js
79
- wp_enqueue_script(
80
- 'ea-admin-bar',
81
- EAEL_PLUGIN_URL . 'assets/admin/js/admin-bar.js',
82
- ['jquery'],
83
- EAEL_PLUGIN_VERSION
84
- );
 
 
 
 
 
 
 
 
 
85
 
86
  // My Assets
87
  if ($this->is_preview_mode()) {
@@ -128,19 +130,50 @@ trait Enqueue
128
  if (is_singular() || is_home() || is_archive()) {
129
  $queried_object = get_queried_object_id();
130
  $post_type = (is_singular() || is_home() ? 'post' : 'term');
131
- $elements = (array) get_metadata($post_type, $queried_object, 'eael_transient_elements', true);
132
 
133
- if (empty($elements)) {
134
- return;
 
 
 
 
 
 
 
135
  }
136
-
137
- $this->enqueue_protocols($post_type, $queried_object);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  }
139
  }
140
  }
141
 
142
  // editor styles
143
- public function editor_enqueue_scripts() {
 
144
  wp_enqueue_style(
145
  'eael-editor-css',
146
  $this->safe_protocol(EAEL_PLUGIN_URL . '/assets/admin/css/editor.css'),
@@ -148,42 +181,4 @@ trait Enqueue
148
  EAEL_PLUGIN_VERSION
149
  );
150
  }
151
-
152
- // rules how css will be enqueued on front-end
153
- protected function enqueue_protocols($post_type, $queried_object)
154
- {
155
- if ($this->has_cache_files($post_type, $queried_object)) {
156
- $css_file = EAEL_ASSET_URL . '/eael-' . $post_type . '-' . $queried_object . '.min.css';
157
- $js_file = EAEL_ASSET_URL . '/eael-' . $post_type . '-' . $queried_object . '.min.js';
158
- } else {
159
- $css_file = EAEL_PLUGIN_URL . 'assets/front-end/css/eael.min.css';
160
- $js_file = EAEL_PLUGIN_URL . 'assets/front-end/js/eael.min.js';
161
- }
162
-
163
- wp_enqueue_style(
164
- 'eael-front-end',
165
- $this->safe_protocol($css_file),
166
- false,
167
- EAEL_PLUGIN_VERSION
168
- );
169
-
170
- wp_enqueue_script(
171
- 'eael-front-end',
172
- $this->safe_protocol($js_file),
173
- ['jquery'],
174
- EAEL_PLUGIN_VERSION,
175
- true
176
- );
177
-
178
- // hook extended assets
179
- do_action('eael/after_enqueue_scripts', $this->has_cache_files($post_type, $queried_object));
180
-
181
- // localize script
182
- $this->localize_objects = apply_filters('eael/localize_objects', [
183
- 'ajaxurl' => admin_url('admin-ajax.php'),
184
- 'nonce' => wp_create_nonce('essential-addons-elementor'),
185
- ]);
186
-
187
- wp_localize_script('eael-front-end', 'localize', $this->localize_objects);
188
- }
189
  }
29
  add_filter('caldera_forms_force_enqueue_styles_early', '__return_true');
30
  }
31
 
32
+ // Fluent form compatibility
33
+ if (defined('FLUENTFORM')) {
34
  wp_enqueue_style(
35
  'fluent-form-styles',
36
  WP_PLUGIN_URL . '/fluentform/public/css/fluent-forms-public.css',
48
 
49
  // Load fontawesome as fallback
50
  wp_enqueue_style(
51
+ 'font-awesome-5-all',
52
+ ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/all.min.css',
53
+ false,
54
+ EAEL_PLUGIN_VERSION
 
 
 
 
 
 
 
55
  );
56
+
 
57
  wp_enqueue_style(
58
+ 'font-awesome-4-shim',
59
+ ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/v4-shims.min.css',
60
  false,
61
  EAEL_PLUGIN_VERSION
62
  );
63
+
64
  wp_enqueue_script(
65
+ 'font-awesome-4-shim',
66
+ ELEMENTOR_ASSETS_URL . 'lib/font-awesome/js/v4-shims.min.js',
67
+ false,
68
+ EAEL_PLUGIN_VERSION
69
  );
70
+
71
+ // admin bar
72
+ if (is_admin_bar_showing()) {
73
+ wp_enqueue_style(
74
+ 'ea-admin-bar',
75
+ EAEL_PLUGIN_URL . 'assets/admin/css/admin-bar.css',
76
+ false,
77
+ EAEL_PLUGIN_VERSION
78
+ );
79
+
80
+ wp_enqueue_script(
81
+ 'ea-admin-bar',
82
+ EAEL_PLUGIN_URL . 'assets/admin/js/admin-bar.js',
83
+ ['jquery'],
84
+ EAEL_PLUGIN_VERSION
85
+ );
86
+ }
87
 
88
  // My Assets
89
  if ($this->is_preview_mode()) {
130
  if (is_singular() || is_home() || is_archive()) {
131
  $queried_object = get_queried_object_id();
132
  $post_type = (is_singular() || is_home() ? 'post' : 'term');
 
133
 
134
+ $this->generate_frontend_scripts($queried_object, $post_type);
135
+
136
+ if ($this->has_cache_files($queried_object, $post_type)) {
137
+ $uid = get_metadata($post_type, $queried_object, 'eael_uid', true);
138
+ $css_file = EAEL_ASSET_URL . '/' . $uid . '.min.css';
139
+ $js_file = EAEL_ASSET_URL . '/' . $uid . '.min.js';
140
+ } else {
141
+ $css_file = EAEL_PLUGIN_URL . 'assets/front-end/css/eael.min.css';
142
+ $js_file = EAEL_PLUGIN_URL . 'assets/front-end/js/eael.min.js';
143
  }
144
+
145
+ wp_enqueue_style(
146
+ 'eael-front-end',
147
+ $this->safe_protocol($css_file),
148
+ false,
149
+ EAEL_PLUGIN_VERSION
150
+ );
151
+
152
+ wp_enqueue_script(
153
+ 'eael-front-end',
154
+ $this->safe_protocol($js_file),
155
+ ['jquery'],
156
+ EAEL_PLUGIN_VERSION,
157
+ true
158
+ );
159
+
160
+ // hook extended assets
161
+ do_action('eael/after_enqueue_scripts', $this->has_cache_files($queried_object, $post_type));
162
+
163
+ // localize script
164
+ $this->localize_objects = apply_filters('eael/localize_objects', [
165
+ 'ajaxurl' => admin_url('admin-ajax.php'),
166
+ 'nonce' => wp_create_nonce('essential-addons-elementor'),
167
+ ]);
168
+
169
+ wp_localize_script('eael-front-end', 'localize', $this->localize_objects);
170
  }
171
  }
172
  }
173
 
174
  // editor styles
175
+ public function editor_enqueue_scripts()
176
+ {
177
  wp_enqueue_style(
178
  'eael-editor-css',
179
  $this->safe_protocol(EAEL_PLUGIN_URL . '/assets/admin/css/editor.css'),
181
  EAEL_PLUGIN_VERSION
182
  );
183
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  }
includes/Traits/Generator.php CHANGED
@@ -5,10 +5,44 @@ if (!defined('ABSPATH')) {
5
  exit;
6
  } // Exit if accessed directly
7
 
 
 
8
  use \ReflectionClass;
9
 
10
  trait Generator
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  /**
13
  * Collect elements in a page or post
14
  *
@@ -16,12 +50,12 @@ trait Generator
16
  */
17
  public function collect_transient_elements($widget)
18
  {
19
- if($widget->get_name() === 'global') {
20
  $reflection = new ReflectionClass(get_class($widget));
21
  $protected = $reflection->getProperty('template_data');
22
  $protected->setAccessible(true);
23
 
24
- if($global_data = $protected->getValue($widget)) {
25
  $this->transient_elements = array_merge($this->transient_elements, $this->collect_recursive_elements($global_data['content']));
26
  }
27
  } else {
@@ -34,11 +68,12 @@ trait Generator
34
  *
35
  * @since 3.0.5
36
  */
37
- public function collect_recursive_elements($elements) {
 
38
  $collections = [];
39
 
40
- array_walk_recursive($elements, function($val, $key) use (&$collections) {
41
- if($key == 'widgetType') {
42
  $collections[] = $val;
43
  }
44
  });
@@ -130,10 +165,20 @@ trait Generator
130
  *
131
  * @since 3.0.0
132
  */
133
- public function has_cache_files($post_type = null, $post_id = null)
134
  {
135
- $css_path = EAEL_ASSET_PATH . DIRECTORY_SEPARATOR . ($post_type ? 'eael-' . $post_type : 'eael') . ($post_id ? '-' . $post_id : '') . '.min.css';
136
- $js_path = EAEL_ASSET_PATH . DIRECTORY_SEPARATOR . ($post_type ? 'eael-' . $post_type : 'eael') . ($post_id ? '-' . $post_id : '') . '.min.js';
 
 
 
 
 
 
 
 
 
 
137
 
138
  if (is_readable($this->safe_path($css_path)) && is_readable($this->safe_path($js_path))) {
139
  return true;
@@ -147,12 +192,8 @@ trait Generator
147
  *
148
  * @since 3.0.0
149
  */
150
- public function generate_frontend_scripts()
151
  {
152
- if ($this->is_preview_mode()) {
153
- return;
154
- }
155
-
156
  $replace = [
157
  'eicon-woocommerce' => 'eael-product-grid',
158
  'eael-countdown' => 'eael-count-down',
@@ -173,47 +214,54 @@ trait Generator
173
  ];
174
 
175
  $elements = array_map(function ($val) use ($replace) {
176
- if(array_key_exists($val, $replace)) {
177
  $val = $replace[$val];
178
  }
179
 
180
  return (strpos($val, 'eael-') !== false ? str_replace(['eael-'], [''], $val) : null);
181
  }, $this->transient_elements);
182
 
183
- $extensions = apply_filters('eael/section/after_render', $this->transient_extensions);
184
 
185
- $elements = array_filter(array_unique(array_merge($elements, $extensions)));
 
 
186
 
187
- if (is_singular() || is_home() || is_archive()) {
188
- $queried_object = get_queried_object_id();
189
- $post_type = (is_singular() || is_home() ? 'post' : 'term');
190
- $old_elements = (array) get_metadata($post_type, $queried_object, 'eael_transient_elements', true);
191
 
192
- // sort two arr for compare
193
- sort($elements);
194
- sort($old_elements);
195
 
196
- if ($old_elements != $elements) {
197
- update_metadata($post_type, $queried_object, 'eael_transient_elements', $elements);
 
 
198
 
199
- // if not empty elements, regenerate cache files
200
- if (!empty($elements)) {
201
- $this->generate_scripts($elements, 'eael-' . $post_type . '-' . $queried_object);
202
 
203
- // load generated files - fallback
204
- $this->enqueue_protocols($queried_object, $post_type);
205
- }
206
  }
 
207
 
208
- // if no cache files, generate new
209
- if (!$this->has_cache_files($post_type, $queried_object)) {
210
- $this->generate_scripts($elements, 'eael-' . $post_type . '-' . $queried_object);
211
- }
212
 
213
- // if no elements, remove cache files
214
- if (empty($elements)) {
215
- $this->remove_files($post_type, $queried_object);
216
- }
 
 
 
 
 
 
217
  }
218
  }
219
  }
5
  exit;
6
  } // Exit if accessed directly
7
 
8
+ use \Elementor\Core\Settings\Manager as Settings_Manager;
9
+ use \Elementor\Frontend;
10
  use \ReflectionClass;
11
 
12
  trait Generator
13
  {
14
+ /**
15
+ * Hit the page before it renders
16
+ *
17
+ * @since 3.5.2
18
+ * @todo new class
19
+ */
20
+ public function before_page_render()
21
+ {
22
+ if (is_singular() || is_home() || is_archive()) {
23
+ $queried_object = get_queried_object_id();
24
+
25
+ // hit page
26
+ $frontend = new Frontend;
27
+ $frontend->get_builder_content($queried_object);
28
+
29
+ // get elementor page settings
30
+ $page_settings_manager = Settings_Manager::get_settings_managers('page');
31
+ $page_settings_model = $page_settings_manager->get_model($queried_object);
32
+
33
+ // get global settings
34
+ $global_settings = get_option('eael_global_settings');
35
+
36
+ // add global extension in transient
37
+ if ($this->get_settings('eael-reading-progress') && ($page_settings_model->get_settings('eael_ext_reading_progress') == 'yes' || isset($global_settings['reading_progress']['enabled']))) {
38
+ add_filter('eael/section/after_render', function ($extensions) {
39
+ $extensions[] = 'eael-reading-progress';
40
+ return $extensions;
41
+ });
42
+ }
43
+ }
44
+ }
45
+
46
  /**
47
  * Collect elements in a page or post
48
  *
50
  */
51
  public function collect_transient_elements($widget)
52
  {
53
+ if ($widget->get_name() === 'global') {
54
  $reflection = new ReflectionClass(get_class($widget));
55
  $protected = $reflection->getProperty('template_data');
56
  $protected->setAccessible(true);
57
 
58
+ if ($global_data = $protected->getValue($widget)) {
59
  $this->transient_elements = array_merge($this->transient_elements, $this->collect_recursive_elements($global_data['content']));
60
  }
61
  } else {
68
  *
69
  * @since 3.0.5
70
  */
71
+ public function collect_recursive_elements($elements)
72
+ {
73
  $collections = [];
74
 
75
+ array_walk_recursive($elements, function ($val, $key) use (&$collections) {
76
+ if ($key == 'widgetType') {
77
  $collections[] = $val;
78
  }
79
  });
165
  *
166
  * @since 3.0.0
167
  */
168
+ public function has_cache_files($post_id = null, $post_type = null)
169
  {
170
+ if ($post_id && $post_type) {
171
+ $uid = get_metadata($post_type, $post_id, 'eael_uid', true);
172
+
173
+ if ($uid === false) {
174
+ return false;
175
+ }
176
+ } else {
177
+ $uid = 'eael';
178
+ }
179
+
180
+ $css_path = EAEL_ASSET_PATH . DIRECTORY_SEPARATOR . $uid . '.min.css';
181
+ $js_path = EAEL_ASSET_PATH . DIRECTORY_SEPARATOR . $uid . '.min.js';
182
 
183
  if (is_readable($this->safe_path($css_path)) && is_readable($this->safe_path($js_path))) {
184
  return true;
192
  *
193
  * @since 3.0.0
194
  */
195
+ public function generate_frontend_scripts($queried_object, $post_type)
196
  {
 
 
 
 
197
  $replace = [
198
  'eicon-woocommerce' => 'eael-product-grid',
199
  'eael-countdown' => 'eael-count-down',
214
  ];
215
 
216
  $elements = array_map(function ($val) use ($replace) {
217
+ if (array_key_exists($val, $replace)) {
218
  $val = $replace[$val];
219
  }
220
 
221
  return (strpos($val, 'eael-') !== false ? str_replace(['eael-'], [''], $val) : null);
222
  }, $this->transient_elements);
223
 
224
+ $this->transient_extensions = apply_filters('eael/section/after_render', $this->transient_extensions);
225
 
226
+ $elements = array_filter(array_unique(array_merge($elements, $this->transient_extensions)));
227
+ $file_name = str_rot13($post_type . $queried_object . time());
228
+ $old_elements = (array) get_metadata($post_type, $queried_object, 'eael_transient_elements', true);
229
 
230
+ // sort two arr for compare
231
+ sort($elements);
232
+ sort($old_elements);
 
233
 
234
+ if ($old_elements != $elements) {
235
+ update_metadata($post_type, $queried_object, 'eael_transient_elements', $elements);
 
236
 
237
+ // if not empty elements, regenerate cache files
238
+ if (!empty($elements)) {
239
+ // remove old cache
240
+ $this->remove_files($post_type, $queried_object);
241
 
242
+ // update new meta
243
+ update_metadata($post_type, $queried_object, 'eael_uid', $file_name);
 
244
 
245
+ // generate new cache
246
+ $this->generate_scripts($elements, $file_name);
 
247
  }
248
+ }
249
 
250
+ // if no cache files, generate new
251
+ if (!$this->has_cache_files($queried_object, $post_type)) {
252
+ // remove old cache
253
+ $this->remove_files($post_type, $queried_object);
254
 
255
+ // update new meta
256
+ update_metadata($post_type, $queried_object, 'eael_uid', $file_name);
257
+
258
+ // generate new cache
259
+ $this->generate_scripts($elements, $file_name);
260
+ }
261
+
262
+ // if no elements, remove cache files
263
+ if (empty($elements)) {
264
+ $this->remove_files($post_type, $queried_object);
265
  }
266
  }
267
  }
includes/Traits/Helper.php CHANGED
@@ -957,15 +957,36 @@ trait Helper
957
  $this->end_controls_section();
958
  }
959
 
960
- public function fix_old_query($settings) {
961
- foreach($settings as $key => $value) {
962
- if(strpos($key, 'eaeposts_') !== false) {
 
 
 
963
  $settings[str_replace('eaeposts_', '', $key)] = $value;
964
-
965
- update_post_meta(get_the_ID(), '_elementor_data', str_replace('eaeposts_', '', get_post_meta(get_the_ID(), '_elementor_data', true)));
966
  }
967
  }
968
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
969
  return $settings;
970
  }
971
 
957
  $this->end_controls_section();
958
  }
959
 
960
+ public function fix_old_query($settings)
961
+ {
962
+ $update_query = false;
963
+
964
+ foreach ($settings as $key => $value) {
965
+ if (strpos($key, 'eaeposts_') !== false) {
966
  $settings[str_replace('eaeposts_', '', $key)] = $value;
967
+ $update_query = true;
 
968
  }
969
  }
970
 
971
+ if ($update_query) {
972
+ global $wpdb;
973
+
974
+ $post_id = get_the_ID();
975
+ $data = get_post_meta($post_id, '_elementor_data', true);
976
+ $data = str_replace('eaeposts_', '', $data);
977
+
978
+ $wpdb->update(
979
+ $wpdb->postmeta,
980
+ [
981
+ 'meta_value' => $data,
982
+ ],
983
+ [
984
+ 'post_id' => $post_id,
985
+ 'meta_key' => '_elementor_data',
986
+ ]
987
+ );
988
+ }
989
+
990
  return $settings;
991
  }
992
 
includes/Traits/Library.php CHANGED
@@ -39,8 +39,14 @@ trait Library
39
  */
40
  public function remove_files($post_type = null, $post_id = null)
41
  {
42
- $css_path = $this->safe_path(EAEL_ASSET_PATH . DIRECTORY_SEPARATOR . ($post_type ? 'eael-' . $post_type : 'eael') . ($post_id ? '-' . $post_id : '') . '.min.css');
43
- $js_path = $this->safe_path(EAEL_ASSET_PATH . DIRECTORY_SEPARATOR . ($post_type ? 'eael-' . $post_type : 'eael') . ($post_id ? '-' . $post_id : '') . '.min.js');
 
 
 
 
 
 
44
 
45
  if (file_exists($css_path)) {
46
  unlink($css_path);
@@ -80,9 +86,9 @@ trait Library
80
  {
81
  check_ajax_referer('essential-addons-elementor', 'security');
82
 
83
- if(isset($_POST['pageID']) && 'post' === $_POST['actionType'] ) {
84
  $this->remove_files($_POST['actionType'], $_POST['pageID']);
85
- }else {
86
  // clear cache files
87
  $this->empty_dir(EAEL_ASSET_PATH);
88
  }
39
  */
40
  public function remove_files($post_type = null, $post_id = null)
41
  {
42
+ if($post_id && $post_type) {
43
+ $filename = get_metadata($post_type, $post_id, 'eael_uid', true);
44
+ } else {
45
+ $filename = 'eael';
46
+ }
47
+
48
+ $css_path = $this->safe_path(EAEL_ASSET_PATH . DIRECTORY_SEPARATOR . $filename . '.min.css');
49
+ $js_path = $this->safe_path(EAEL_ASSET_PATH . DIRECTORY_SEPARATOR . $filename . '.min.js');
50
 
51
  if (file_exists($css_path)) {
52
  unlink($css_path);
86
  {
87
  check_ajax_referer('essential-addons-elementor', 'security');
88
 
89
+ if (isset($_POST['pageID']) && 'post' === $_POST['actionType']) {
90
  $this->remove_files($_POST['actionType'], $_POST['pageID']);
91
+ } else {
92
  // clear cache files
93
  $this->empty_dir(EAEL_ASSET_PATH);
94
  }
includes/templates/admin/tools.php CHANGED
@@ -7,21 +7,19 @@
7
  <div class="eael-admin-block-header-icon">
8
  <img src="<?php echo EAEL_PLUGIN_URL . 'assets/admin/images/icon-clean-cache.svg'; ?>" alt="essential-addons-tools-clean-cache">
9
  </div>
10
- <h4 class="eael-admin-title"><?php _e('Clear Cache', 'essential-addons-elementor'); ?></h4>
11
  </header>
12
  <div class="eael-admin-block-content">
13
- <p><?php _e('Essential Addons styles & scripts are saved in Uploads folder. This option will clear all those cached files.', 'essential-addons-elementor'); ?></p>
14
- <a href="#" id="eael-regenerate-files" class="button eael-btn" target="_blank"><?php _e('Clear Cache', 'essential-addons-elementor'); ?></a>
15
 
16
  <div class="eael-checkbox eael-checkbox-quick-tools">
17
- <p class="eael-el-title">
18
- <?php _e( 'Show Quick Tools in Admin Bar?', 'essential-addons-elementor' ); ?>
19
- </p>
20
 
21
  <input type="checkbox" id="<?php echo esc_attr('quick_tools'); ?>" name="<?php echo esc_attr('quick_tools'); ?>" <?php echo checked( 1, $this->get_settings('quick_tools'), false ); ?>>
22
  <label for="<?php echo esc_attr('quick_tools'); ?>"></label>
23
  </div>
24
- <p class="quick-tools-description"><?php _e('Display quick cache clearing tools in admin bar from where you can clear global cache or page cache.', 'essential-addons-elementor'); ?></p>
25
  </div>
26
  </div>
27
  </div>
7
  <div class="eael-admin-block-header-icon">
8
  <img src="<?php echo EAEL_PLUGIN_URL . 'assets/admin/images/icon-clean-cache.svg'; ?>" alt="essential-addons-tools-clean-cache">
9
  </div>
10
+ <h4 class="eael-admin-title"><?php _e('Regenerate Assets', 'essential-addons-elementor'); ?></h4>
11
  </header>
12
  <div class="eael-admin-block-content">
13
+ <p><?php _e('Essential Addons styles & scripts are saved in Uploads folder. This option will clear all those generated files.', 'essential-addons-elementor'); ?></p>
14
+ <a href="#" id="eael-regenerate-files" class="button eael-btn" target="_blank"><?php _e('Regenerate Assets', 'essential-addons-elementor'); ?></a>
15
 
16
  <div class="eael-checkbox eael-checkbox-quick-tools">
17
+ <p class="eael-el-title"><?php _e( 'Show Quick Tools in Admin Bar?', 'essential-addons-elementor' ); ?></p>
 
 
18
 
19
  <input type="checkbox" id="<?php echo esc_attr('quick_tools'); ?>" name="<?php echo esc_attr('quick_tools'); ?>" <?php echo checked( 1, $this->get_settings('quick_tools'), false ); ?>>
20
  <label for="<?php echo esc_attr('quick_tools'); ?>"></label>
21
  </div>
22
+ <p class="quick-tools-description"><?php _e('Display quick assets generating tools in admin bar from where you can regenerate global assets or page assets.', 'essential-addons-elementor'); ?></p>
23
  </div>
24
  </div>
25
  </div>
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: elementor, elements, addons, elementor addon, elementor widget, page build
4
  Requires at least: 4.0
5
  Tested up to: 5.2
6
  Requires PHP: 5.4
7
- Stable tag: 3.5.1
8
  License: GPLv3
9
  License URI: https://opensource.org/licenses/GPL-3.0
10
 
@@ -174,6 +174,10 @@ Your existing elements/content will work with premium version. So you won't lose
174
 
175
  == Changelog ==
176
 
 
 
 
 
177
  = 3.5.1 - 31/10/2019 =
178
  - Conflict Fix: Elementor Pro Media Carousel
179
  - Fixed : Few Creative Buttons effects
4
  Requires at least: 4.0
5
  Tested up to: 5.2
6
  Requires PHP: 5.4
7
+ Stable tag: 3.5.2
8
  License: GPLv3
9
  License URI: https://opensource.org/licenses/GPL-3.0
10
 
174
 
175
  == Changelog ==
176
 
177
+ = 3.5.2 - 11/11/2019 =
178
+ - Fixed : Style breaking issue after update
179
+ - Few minor bugfix and improvements
180
+
181
  = 3.5.1 - 31/10/2019 =
182
  - Conflict Fix: Elementor Pro Media Carousel
183
  - Fixed : Few Creative Buttons effects