Elementor Essential Addons - Version 3.1.3

Version Description

  • 14/07/2019 =
  • Twitter Feed masonry layout bug fixed
  • Few minor bugfix and improvements
Download this release

Release Info

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

Code changes from version 3.1.2 to 3.1.3

assets/admin/css/notice.css CHANGED
@@ -113,7 +113,7 @@ span.coupon-code {
113
  padding: 10px 0;
114
  }
115
  .wpdeveloper-upsale-notice .wpdeveloper-notice-message + .notice-dismiss {
116
- top: 18px;
117
  }
118
  .wpdeveloper-upsale-notice #plugin-install-core {
119
  margin-left: 10px;
@@ -127,10 +127,16 @@ span.coupon-code {
127
  display: flex;
128
  }
129
  .wpdeveloper-upsale-notice .wpdeveloper-notice-thumbnail {
130
- padding: 0;
131
- width: 80px;
 
 
 
132
  }
133
  .toplevel_page_eael-settings .wp-menu-image img {
134
  max-width: 20px;
135
  padding-top: 8px !important;
136
  }
 
 
 
113
  padding: 10px 0;
114
  }
115
  .wpdeveloper-upsale-notice .wpdeveloper-notice-message + .notice-dismiss {
116
+ top: 10px;
117
  }
118
  .wpdeveloper-upsale-notice #plugin-install-core {
119
  margin-left: 10px;
127
  display: flex;
128
  }
129
  .wpdeveloper-upsale-notice .wpdeveloper-notice-thumbnail {
130
+ padding: 10px;
131
+ width: 40px;
132
+ }
133
+ .wpdeveloper-upsale-notice .wpdeveloper-notice-thumbnail img {
134
+ width: 32px;
135
  }
136
  .toplevel_page_eael-settings .wp-menu-image img {
137
  max-width: 20px;
138
  padding-top: 8px !important;
139
  }
140
+ .wpdeveloper-upsale-notice .wpdeveloper-notice-message .button {
141
+ margin-left: 15px;
142
+ }
assets/admin/images/nx-icon.svg ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg width="387px" height="392px" viewBox="0 0 387 392" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2
+ <!-- Generator: Sketch 51.2 (57519) - http://www.bohemiancoding.com/sketch -->
3
+ <desc>Created with Sketch.</desc>
4
+ <defs></defs>
5
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
6
+ <g id="NotificationX_final" transform="translate(-1564.000000, -253.000000)">
7
+ <g id="Group" transform="translate(1564.000000, 253.000000)">
8
+ <path d="M135.45,358.68 C173.45,358.68 211.27,358.68 249.07,358.68 C247.02,371.83 221.24,388.59 199.26,390.98 C173.92,393.73 143.23,378.38 135.45,358.68 Z" id="Shape" fill="#5614D5" fill-rule="nonzero"></path>
9
+ <path d="M372.31,305.79 C369.97,305.59 367.6,305.71 365.24,305.71 C359.63,305.7 354.02,305.71 347.08,305.71 C347.08,301.43 347.08,298.42 347.08,295.41 C347.07,248.75 347.25,202.09 346.91,155.43 C346.83,144.89 345.88,134.19 343.79,123.87 C326.39,37.9 239.94,-16.19 154.81,5.22 C86.84,22.31 37.91,84.26 38.19,154.7 C38.36,197.12 38.21,239.54 38.2,281.96 C38.2,285.8 38.18,297.79 38.16,305.7 C32.98,305.66 18.07,305.57 12.86,305.88 C5.13,306.33 -0.06,312.31 0.04,319.97 C0.14,327.43 5.08,332.74 12.67,333.42 C14.78,333.61 16.91,333.57 19.03,333.57 C134.74,333.61 250.46,333.64 366.17,333.66 C368.29,333.66 370.42,333.69 372.53,333.48 C380.01,332.73 385.14,327.23 385.28,319.95 C385.41,312.58 379.86,306.44 372.31,305.79 Z" id="Shape" fill="#5614D5" fill-rule="nonzero"></path>
10
+ <circle id="Oval" fill="#836EFF" fill-rule="nonzero" cx="281.55" cy="255.92" r="15.49"></circle>
11
+ <path d="M295.67,140.1 L295.91,139.94 C295.7,138.63 295.52,137.29 295.27,136.02 C285.87,89.57 245.83,55.34 198.79,52.53 C198.73,52.53 198.67,52.52 198.61,52.52 C196.59,52.4 194.57,52.32 192.53,52.32 C192.48,52.32 192.44,52.32 192.39,52.32 C192.34,52.32 192.3,52.32 192.25,52.32 C190.21,52.32 188.18,52.4 186.17,52.52 C186.11,52.52 186.05,52.53 185.99,52.53 C138.95,55.34 98.91,89.57 89.51,136.02 C89.25,137.29 89.07,138.63 88.87,139.94 L89.11,140.1 C88.2,145.6 87.72,151.22 87.74,156.9 C87.76,161.42 87.77,256.77 87.78,269.74 L119.91,304.42 C119.91,280.14 119.9,170.57 119.85,156.78 C119.72,124.18 142.81,94.69 174.76,86.66 C177.41,85.99 180.09,85.5 182.78,85.13 C183.23,85.07 183.67,85 184.13,84.95 C185.15,84.83 186.17,84.74 187.18,84.66 C188.64,84.56 190.1,84.48 191.58,84.47 C191.85,84.47 192.12,84.45 192.39,84.44 C192.66,84.44 192.93,84.46 193.2,84.47 C194.68,84.48 196.14,84.56 197.6,84.66 C198.62,84.74 199.64,84.83 200.65,84.95 C201.1,85 201.55,85.07 202,85.13 C204.69,85.5 207.37,85.99 210.02,86.66 C241.96,94.69 265.06,124.19 264.93,156.78 C264.91,161.95 264.9,207.07 264.89,228.18 L297.03,206.73 C297.03,194.5 297.04,158.28 297.04,156.91 C297.06,151.21 296.59,145.6 295.67,140.1 Z" id="Shape" fill="#836EFF" fill-rule="nonzero"></path>
12
+ <path d="M31.94,305.72 C25.58,305.85 19.2,305.51 12.86,305.88 C5.13,306.33 -0.06,312.31 0.04,319.97 C0.14,327.43 5.08,332.74 12.67,333.42 C14.78,333.61 16.91,333.57 19.03,333.57 C134.74,333.61 250.45,333.63 366.17,333.66 C368.29,333.66 370.42,333.69 372.53,333.48 C380.01,332.73 385.14,327.23 385.28,319.95 C385.42,312.58 379.87,306.45 372.32,305.79 C369.98,305.59 367.61,305.71 365.25,305.71 C359.64,305.7 354.03,305.71 347.09,305.71 C347.09,301.43 347.09,298.42 347.09,295.41 C347.08,254.74 347.2,214.07 347.01,173.41 L131.62,317.03 L53.58,232.81 L87.05,202.02 L138.72,257.62 L343.2,121.26 C324.59,36.81 239.08,-15.98 154.82,5.21 C86.85,22.3 37.92,84.25 38.2,154.69 C38.37,197.11 38.22,239.53 38.21,281.95 C38.21,287.84 38.3,293.74 38.16,299.62" id="Shape"></path>
13
+ <path d="M346.91,155.42 C346.95,161.41 346.97,167.41 347,173.4 L386.14,147.41 L360.9,109.57 L343.2,121.26 C343.39,122.13 343.62,122.98 343.8,123.85 C345.88,134.18 346.84,144.89 346.91,155.42 Z" id="Shape" fill="#00F9AC" fill-rule="nonzero"></path>
14
+ <path d="M87.05,202.03 L53.58,232.82 L131.62,317.04 L347,173.41 C346.97,167.42 346.96,161.42 346.91,155.43 C346.83,144.89 345.88,134.19 343.79,123.87 C343.61,122.99 343.39,122.14 343.19,121.28 L138.72,257.63 L87.05,202.03 Z" id="Shape"></path>
15
+ <path d="M87.05,202.03 L53.58,232.82 L131.62,317.04 L347,173.41 C346.97,167.42 346.96,161.42 346.91,155.43 C346.83,144.89 345.88,134.19 343.79,123.87 C343.61,122.99 343.39,122.14 343.19,121.28 L138.72,257.63 L87.05,202.03 Z" id="Shape" fill="#21D8A3" fill-rule="nonzero" opacity="0.9"></path>
16
+ </g>
17
+ </g>
18
+ </g>
19
+ </svg>
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.1.2
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', plugin_dir_path(__FILE__));
26
  define('EAEL_PLUGIN_URL', plugins_url('/', __FILE__));
27
- define('EAEL_PLUGIN_VERSION', '3.1.2');
28
  define('EAEL_ASSET_PATH', WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'essential-addons-elementor');
29
  define('EAEL_ASSET_URL', WP_CONTENT_URL . '/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.1.3
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', plugin_dir_path(__FILE__));
26
  define('EAEL_PLUGIN_URL', plugins_url('/', __FILE__));
27
+ define('EAEL_PLUGIN_VERSION', '3.1.3');
28
  define('EAEL_ASSET_PATH', WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'essential-addons-elementor');
29
  define('EAEL_ASSET_URL', WP_CONTENT_URL . '/essential-addons-elementor');
30
 
includes/Classes/Plugin_Usage_Tracker.php CHANGED
@@ -61,25 +61,6 @@ class Plugin_Usage_Tracker
61
 
62
  // Get it going
63
  $this->init();
64
-
65
- }
66
- /**
67
- * Migrate to the new Insights
68
- * @return void
69
- */
70
- public function migrate_plan()
71
- {
72
- $old_key = array_flip(['wisdom_allow_tracking', 'wisdom_last_track_time', 'wisdom_block_notice', 'wisdom_collect_email', 'wisdom_admin_emails', 'wisdom_deactivation_reason_' . $this->plugin_name, 'wisdom_deactivation_details_' . $this->plugin_name]);
73
- $new_key = ['wpins_allow_tracking', 'wpins_last_track_time', 'wpins_block_notice', 'wpins_collect_email', 'wpins_admin_emails', 'wpins_deactivation_reason_' . $this->plugin_name, 'wpins_deactivation_details_' . $this->plugin_name];
74
-
75
- foreach ( $old_key as $key => $value) {
76
- $old_data = get_option( $key );
77
- if ( ! $old_data ) {
78
- continue;
79
- }
80
- update_option($new_key[$value], $old_data);
81
- delete_option( $key );
82
- }
83
  }
84
  /**
85
  * This function is fired for one time in a life time!
@@ -97,12 +78,6 @@ class Plugin_Usage_Tracker
97
 
98
  public function init()
99
  {
100
- $is_migrated = get_option('wpins_' . $this->plugin_name . '_migrated');
101
-
102
- if ( version_compare($this->wpins_version, '1.1.2', '>') && ! $is_migrated ) {
103
- $this->migrate_plan();
104
- update_option('wpins_' . $this->plugin_name . '_migrated', true);
105
- }
106
  // Check marketing
107
  if ($this->marketing == 3) {
108
  $this->set_can_collect_email(true, $this->plugin_name);
61
 
62
  // Get it going
63
  $this->init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  }
65
  /**
66
  * This function is fired for one time in a life time!
78
 
79
  public function init()
80
  {
 
 
 
 
 
 
81
  // Check marketing
82
  if ($this->marketing == 3) {
83
  $this->set_can_collect_email(true, $this->plugin_name);
includes/Classes/WPDeveloper_Core_Installer.php CHANGED
@@ -92,7 +92,7 @@ class WPDeveloper_Core_Installer {
92
  }
93
 
94
  // seems like the plugin doesn't exists. Download and activate it
95
- $upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
96
 
97
  $api = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) );
98
  $result = $upgrader->install( $api->download_link );
92
  }
93
 
94
  // seems like the plugin doesn't exists. Download and activate it
95
+ $upgrader = new \Plugin_Upgrader( new \WP_Ajax_Upgrader_Skin() );
96
 
97
  $api = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) );
98
  $result = $upgrader->install( $api->download_link );
includes/Classes/WPDeveloper_Notice.php CHANGED
@@ -182,6 +182,28 @@ class WPDeveloper_Notice {
182
  unset( $options_data[ $this->plugin_name ]['notice_will_show'][ $current_notice ] );
183
  $this->update_options_data( $options_data[ $this->plugin_name ] );
184
  } else {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  if ( ! function_exists( 'get_plugins' ) ) {
186
  include ABSPATH . '/wp-admin/includes/plugin.php';
187
  }
@@ -384,10 +406,11 @@ class WPDeveloper_Notice {
384
  private function upsale_button(){
385
  $upsale_args = $this->get_upsale_args();
386
  $plugin_slug = ( isset( $upsale_args['slug'] )) ? $upsale_args['slug'] : '' ;
 
387
  if( empty( $plugin_slug ) ) {
388
  return;
389
  }
390
- echo '<button data-slug="'. $plugin_slug .'" id="plugin-install-core-'. $this->plugin_name .'" class="button button-primary">'. __( 'Install Now!', $this->text_domain ) .'</button>';
391
  }
392
  /**
393
  * This methods is responsible for get notice image.
@@ -828,7 +851,6 @@ class WPDeveloper_Notice {
828
  },
829
  error: function(error) {
830
  self.removeClass('install-now updating-message');
831
- alert( error );
832
  },
833
  complete: function() {
834
  self.attr('disabled', 'disabled');
@@ -836,13 +858,9 @@ class WPDeveloper_Notice {
836
  }
837
  });
838
  });
839
-
840
  <?php endif; ?>
841
-
842
  $('.wpdeveloper-upsale-notice').on('click', 'button.notice-dismiss', function (e) {
843
  e.preventDefault();
844
- console.log( e );
845
- return;
846
  $.ajax({
847
  url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
848
  type: 'post',
182
  unset( $options_data[ $this->plugin_name ]['notice_will_show'][ $current_notice ] );
183
  $this->update_options_data( $options_data[ $this->plugin_name ] );
184
  } else {
185
+ /**
186
+ * For Upsale Remove
187
+ * if the plugin is activated.
188
+ */
189
+ if( isset( $upsale_args['condition'], $upsale_args['condition']['by'] ) ) {
190
+ switch( $upsale_args['condition']['by'] ) {
191
+ case 'class' :
192
+ if( isset( $upsale_args['condition']['class'] ) && class_exists( $upsale_args['condition']['class'] ) ) {
193
+ unset( $options_data[ $this->plugin_name ]['notice_will_show'][ $current_notice ] );
194
+ $this->update_options_data( $options_data[ $this->plugin_name ] );
195
+ return;
196
+ }
197
+ break;
198
+ case 'function' :
199
+ if( isset( $upsale_args['condition']['function'] ) && function_exists( $upsale_args['condition']['function'] ) ) {
200
+ unset( $options_data[ $this->plugin_name ]['notice_will_show'][ $current_notice ] );
201
+ $this->update_options_data( $options_data[ $this->plugin_name ] );
202
+ return;
203
+ }
204
+ break;
205
+ }
206
+ }
207
  if ( ! function_exists( 'get_plugins' ) ) {
208
  include ABSPATH . '/wp-admin/includes/plugin.php';
209
  }
406
  private function upsale_button(){
407
  $upsale_args = $this->get_upsale_args();
408
  $plugin_slug = ( isset( $upsale_args['slug'] )) ? $upsale_args['slug'] : '' ;
409
+ $btn_text = ( isset( $upsale_args['btn_text'] )) ? $upsale_args['btn_text'] : __( 'Install Now!', $this->text_domain ) ;
410
  if( empty( $plugin_slug ) ) {
411
  return;
412
  }
413
+ echo '<button data-slug="'. $plugin_slug .'" id="plugin-install-core-'. $this->plugin_name .'" class="button button-primary">'. $btn_text .'</button>';
414
  }
415
  /**
416
  * This methods is responsible for get notice image.
851
  },
852
  error: function(error) {
853
  self.removeClass('install-now updating-message');
 
854
  },
855
  complete: function() {
856
  self.attr('disabled', 'disabled');
858
  }
859
  });
860
  });
 
861
  <?php endif; ?>
 
862
  $('.wpdeveloper-upsale-notice').on('click', 'button.notice-dismiss', function (e) {
863
  e.preventDefault();
 
 
864
  $.ajax({
865
  url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
866
  type: 'post',
includes/Traits/Admin.php CHANGED
@@ -134,7 +134,19 @@ trait Admin
134
  public function admin_notice()
135
  {
136
  $notice = new WPDeveloper_Notice(EAEL_PLUGIN_BASENAME, EAEL_PLUGIN_VERSION);
137
- $notice->finish_time['update'] = 'May 28, 2019';
 
 
 
 
 
 
 
 
 
 
 
 
138
  $scheme = (parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY)) ? '&' : '?';
139
  $url = $_SERVER['REQUEST_URI'] . $scheme;
140
  $notice->links = [
@@ -182,31 +194,31 @@ trait Admin
182
  */
183
  $notice->message('review', '<p>' . __('We hope you\'re enjoying Essential Addons for Elementor! Could you please do us a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?', 'essential-addons-elementor') . '</p>');
184
  $notice->thumbnail('review', plugins_url('assets/admin/images/icon-ea-logo.svg', EAEL_PLUGIN_BASENAME));
185
-
186
- /**
187
- * This is update message and thumbnail.
188
- */
189
- $notice->message('update', '<p>' . __("Get 20% Discount & Turbo-Charge Your <strong>Elementor</strong> Page Building With <strong>Essential Addons PRO</strong>. Use Coupon Code <span class='coupon-code'>SpeedUp</span> on checkout. <a class='ea-notice-cta' target='_blank' href='https://wpdeveloper.net/plugins/essential-addons-elementor#pricing'>Redeem Now</a>", 'essential-addons-elementor') . '<button class="notice-dismiss" data-notice="update"></button></p>');
190
- $notice->thumbnail('update', plugins_url('assets/admin/images/icon-bolt.svg', EAEL_PLUGIN_BASENAME));
191
-
192
- /**
193
- * Current Notice End Time.
194
- * Notice will dismiss in 3 days if user does nothing.
195
- */
196
- $notice->cne_time = '3 Day';
197
  /**
198
- * Current Notice Maybe Later Time.
199
- * Notice will show again in 7 days
 
200
  */
201
- $notice->maybe_later_time = '7 Day';
202
-
203
- $notice->text_domain = 'essential-addons-elementor';
 
 
 
 
 
 
 
 
 
 
 
204
 
205
  $notice->options_args = array(
206
  'notice_will_show' => [
207
- 'update' => $notice->timestamp,
208
- 'opt_in' => $notice->makeTime($notice->timestamp, '1 Day'),
209
- 'review' => $notice->makeTime($notice->timestamp, '4 Day'), // after 4 days
210
  ],
211
  );
212
 
134
  public function admin_notice()
135
  {
136
  $notice = new WPDeveloper_Notice(EAEL_PLUGIN_BASENAME, EAEL_PLUGIN_VERSION);
137
+ /**
138
+ * Current Notice End Time.
139
+ * Notice will dismiss in 3 days if user does nothing.
140
+ */
141
+ $notice->cne_time = '3 Day';
142
+ /**
143
+ * Current Notice Maybe Later Time.
144
+ * Notice will show again in 7 days
145
+ */
146
+ $notice->maybe_later_time = '7 Day';
147
+
148
+ $notice->text_domain = 'essential-addons-elementor';
149
+
150
  $scheme = (parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY)) ? '&' : '?';
151
  $url = $_SERVER['REQUEST_URI'] . $scheme;
152
  $notice->links = [
194
  */
195
  $notice->message('review', '<p>' . __('We hope you\'re enjoying Essential Addons for Elementor! Could you please do us a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?', 'essential-addons-elementor') . '</p>');
196
  $notice->thumbnail('review', plugins_url('assets/admin/images/icon-ea-logo.svg', EAEL_PLUGIN_BASENAME));
 
 
 
 
 
 
 
 
 
 
 
 
197
  /**
198
+ * This is upsale notice settings
199
+ * classes for wrapper,
200
+ * Message message for showing.
201
  */
202
+ $notice->classes( 'upsale', 'notice is-dismissible' );
203
+ $notice->message( 'upsale', '<p>'. __( 'Increase 20-40% Sales & Interaction in Your Site with <a href="https://notificationx.com" target="_blank">NotificationX!</a>', $notice->text_domain ) .'</p>' );
204
+ $notice->thumbnail( 'upsale', plugins_url( 'assets/admin/images/nx-icon.svg', EAEL_PLUGIN_BASENAME ) );
205
+
206
+ $notice->upsale_args = array(
207
+ 'slug' => 'notificationx',
208
+ 'page_slug' => 'nx-builder',
209
+ 'file' => 'notificationx.php',
210
+ 'btn_text' => __( 'Download Free', 'essential-addons-elementor' ),
211
+ 'condition' => [
212
+ 'by' => 'class',
213
+ 'class' => 'NotificationX'
214
+ ],
215
+ );
216
 
217
  $notice->options_args = array(
218
  'notice_will_show' => [
219
+ 'opt_in' => $notice->timestamp,
220
+ 'upsale' => $notice->makeTime($notice->timestamp, '1 Hour'),
221
+ 'review' => $notice->makeTime($notice->timestamp, '3 Day'), // after 3 days
222
  ],
223
  );
224
 
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.1.2
8
  License: GPLv3
9
  License URI: https://opensource.org/licenses/GPL-3.0
10
 
@@ -167,6 +167,10 @@ Your existing elements/content will work with premium version. So you won't lose
167
 
168
  == Changelog ==
169
 
 
 
 
 
170
  = 3.1.2 - 10/07/2019 =
171
  - Twitter Feed rebuilt with new API for better performance
172
  - Few minor bugfix and improvements
4
  Requires at least: 4.0
5
  Tested up to: 5.2
6
  Requires PHP: 5.4
7
+ Stable tag: 3.1.3
8
  License: GPLv3
9
  License URI: https://opensource.org/licenses/GPL-3.0
10
 
167
 
168
  == Changelog ==
169
 
170
+ = 3.1.3 - 14/07/2019 =
171
+ - Twitter Feed masonry layout bug fixed
172
+ - Few minor bugfix and improvements
173
+
174
  = 3.1.2 - 10/07/2019 =
175
  - Twitter Feed rebuilt with new API for better performance
176
  - Few minor bugfix and improvements