Header Footer Elementor - Version 1.5.4

Version Description

  • Improvement: Compatibility to PHP v8.0.
  • Improvement: Improved compatibility with Astra theme.
  • Improvement: Navigation Menu - Added option to toggle menu item.
  • Fix: Added 'alt' attribute to the widgets containing images.
  • Fix: Closed the missing HTML tag in footer in the global theme compatibility.
  • Fix: Navigation Menu - Alignment option not working for the last menu item set as 'Button'.
Download this release

Release Info

Developer Nikschavan
Plugin Icon Header Footer Elementor
Version 1.5.4
Comparing to
See all releases

Code changes from version 1.5.3 to 1.5.4

admin/bsf-analytics/assets/css/minified/style-rtl.min.css ADDED
@@ -0,0 +1 @@
 
1
+ [ID*="-optin-notice"]{padding:1px 12px;border-right-color:#007cba}[ID*="-optin-notice"] .notice-container{padding-top:10px;padding-bottom:12px}[ID*="-optin-notice"] .notice-content{margin:0}[ID*="-optin-notice"] .notice-heading{padding:0 0 12px 20px}[ID*="-optin-notice"] .button-primary{margin-left:5px}
admin/bsf-analytics/assets/css/minified/style.min-rtl.css DELETED
@@ -1 +0,0 @@
1
- #bsf-optin-notice{padding:1px 12px;border-right-color:#007cba}#bsf-optin-notice .notice-container{padding-top:10px;padding-bottom:12px}#bsf-optin-notice .notice-content{margin:0}#bsf-optin-notice .notice-heading{padding:0 0 12px 20px}#bsf-optin-notice .button-primary{margin-left:5px}
 
admin/bsf-analytics/assets/css/minified/style.min.css CHANGED
@@ -1 +1 @@
1
- #bsf-optin-notice{padding:1px 12px;border-left-color:#007cba}#bsf-optin-notice .notice-container{padding-top:10px;padding-bottom:12px}#bsf-optin-notice .notice-content{margin:0}#bsf-optin-notice .notice-heading{padding:0 20px 12px 0}#bsf-optin-notice .button-primary{margin-right:5px}
1
+ [ID*="-optin-notice"]{padding:1px 12px;border-left-color:#007cba}[ID*="-optin-notice"] .notice-container{padding-top:10px;padding-bottom:12px}[ID*="-optin-notice"] .notice-content{margin:0}[ID*="-optin-notice"] .notice-heading{padding:0 20px 12px 0}[ID*="-optin-notice"] .button-primary{margin-right:5px}
admin/bsf-analytics/assets/css/unminified/style-rtl.css CHANGED
@@ -1,21 +1,21 @@
1
- #bsf-optin-notice {
2
  padding: 1px 12px;
3
  border-right-color: #007cba;
4
  }
5
 
6
- #bsf-optin-notice .notice-container {
7
  padding-top: 10px;
8
  padding-bottom: 12px;
9
  }
10
 
11
- #bsf-optin-notice .notice-content {
12
  margin: 0;
13
  }
14
 
15
- #bsf-optin-notice .notice-heading {
16
  padding: 0 0 12px 20px;
17
  }
18
 
19
- #bsf-optin-notice .button-primary {
20
  margin-left: 5px;
21
  }
1
+ [ID*="-optin-notice"] {
2
  padding: 1px 12px;
3
  border-right-color: #007cba;
4
  }
5
 
6
+ [ID*="-optin-notice"] .notice-container {
7
  padding-top: 10px;
8
  padding-bottom: 12px;
9
  }
10
 
11
+ [ID*="-optin-notice"] .notice-content {
12
  margin: 0;
13
  }
14
 
15
+ [ID*="-optin-notice"] .notice-heading {
16
  padding: 0 0 12px 20px;
17
  }
18
 
19
+ [ID*="-optin-notice"] .button-primary {
20
  margin-left: 5px;
21
  }
admin/bsf-analytics/assets/css/unminified/style.css CHANGED
@@ -1,21 +1,21 @@
1
- #bsf-optin-notice {
2
  padding: 1px 12px;
3
  border-left-color: #007cba;
4
  }
5
 
6
- #bsf-optin-notice .notice-container {
7
  padding-top: 10px;
8
  padding-bottom: 12px;
9
  }
10
 
11
- #bsf-optin-notice .notice-content {
12
  margin: 0;
13
  }
14
 
15
- #bsf-optin-notice .notice-heading {
16
  padding: 0 20px 12px 0;
17
  }
18
 
19
- #bsf-optin-notice .button-primary {
20
  margin-right: 5px;
21
  }
1
+ [ID*="-optin-notice"] {
2
  padding: 1px 12px;
3
  border-left-color: #007cba;
4
  }
5
 
6
+ [ID*="-optin-notice"] .notice-container {
7
  padding-top: 10px;
8
  padding-bottom: 12px;
9
  }
10
 
11
+ [ID*="-optin-notice"] .notice-content {
12
  margin: 0;
13
  }
14
 
15
+ [ID*="-optin-notice"] .notice-heading {
16
  padding: 0 20px 12px 0;
17
  }
18
 
19
+ [ID*="-optin-notice"] .button-primary {
20
  margin-right: 5px;
21
  }
admin/bsf-analytics/class-bsf-analytics-loader.php ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BSF analytics loader file.
4
+ *
5
+ * @version 1.0.0
6
+ *
7
+ * @package bsf-analytics
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) {
11
+ exit();
12
+ }
13
+
14
+ /**
15
+ * Class BSF_Analytics_Loader.
16
+ */
17
+ class BSF_Analytics_Loader {
18
+
19
+ /**
20
+ * Analytics Entities.
21
+ *
22
+ * @access private
23
+ * @var array Entities array.
24
+ */
25
+ private $entities = [];
26
+
27
+ /**
28
+ * Analytics Version.
29
+ *
30
+ * @access private
31
+ * @var float analytics version.
32
+ */
33
+ private $analytics_version = '';
34
+
35
+ /**
36
+ * Analytics path.
37
+ *
38
+ * @access private
39
+ * @var string path array.
40
+ */
41
+ private $analytics_path = '';
42
+
43
+ /**
44
+ * Instance
45
+ *
46
+ * @access private
47
+ * @var object Class object.
48
+ */
49
+ private static $instance = null;
50
+
51
+ /**
52
+ * Get instace of class.
53
+ *
54
+ * @return object
55
+ */
56
+ public static function get_instance() {
57
+ if ( null === self::$instance ) {
58
+ self::$instance = new self();
59
+ }
60
+
61
+ return self::$instance;
62
+ }
63
+
64
+ /**
65
+ * Constructor
66
+ */
67
+ public function __construct() {
68
+ add_action( 'init', [ $this, 'load_analytics' ] );
69
+ }
70
+
71
+ /**
72
+ * Set entity for analytics.
73
+ *
74
+ * @param string $data Entity attributes data.
75
+ * @return void
76
+ */
77
+ public function set_entity( $data ) {
78
+ array_push( $this->entities, $data );
79
+ }
80
+
81
+ /**
82
+ * Load Analytics library.
83
+ *
84
+ * @return void
85
+ */
86
+ public function load_analytics() {
87
+ $unique_entities = [];
88
+
89
+ if ( ! empty( $this->entities ) ) {
90
+ foreach ( $this->entities as $entity ) {
91
+ foreach ( $entity as $key => $data ) {
92
+
93
+ if ( isset( $data['path'] ) ) {
94
+ if ( file_exists( $data['path'] . '/version.json' ) ) {
95
+ $file_contents = file_get_contents( $data['path'] . '/version.json' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
96
+ $analytics_version = json_decode( $file_contents, 1 );
97
+ $analytics_version = $analytics_version['bsf-analytics-ver'];
98
+
99
+ if ( version_compare( $analytics_version, $this->analytics_version, '>' ) ) {
100
+ $this->analytics_version = $analytics_version;
101
+ $this->analytics_path = $data['path'];
102
+ }
103
+ }
104
+ }
105
+
106
+ if ( ! isset( $unique_entities[ $key ] ) ) {
107
+ $unique_entities[ $key ] = $data;
108
+ }
109
+ }
110
+ }
111
+
112
+ if ( file_exists( $this->analytics_path ) && ! class_exists( 'BSF_Analytics' ) ) {
113
+ require_once $this->analytics_path . '/class-bsf-analytics.php';
114
+ new BSF_Analytics( $unique_entities, $this->analytics_path, $this->analytics_version );
115
+ }
116
+ }
117
+ }
118
+ }
admin/bsf-analytics/class-bsf-analytics-stats.php CHANGED
@@ -68,7 +68,7 @@ if ( ! class_exists( 'BSF_Analytics_Stats' ) ) {
68
  'graupi_version' => defined( 'BSF_UPDATER_VERSION' ) ? BSF_UPDATER_VERSION : false,
69
  'domain_name' => get_site_url(),
70
  'php_os' => PHP_OS,
71
- 'server_software' => $_SERVER['SERVER_SOFTWARE'],
72
  'mysql_version' => $this->get_mysql_version(),
73
  'php_version' => $this->get_php_version(),
74
  'php_max_input_vars' => ini_get( 'max_input_vars' ), // phpcs:ignore:PHPCompatibility.IniDirectives.NewIniDirectives.max_input_varsFound
@@ -181,7 +181,7 @@ if ( ! class_exists( 'BSF_Analytics_Stats' ) ) {
181
  private function get_curl_ssl_version() {
182
  $curl = [];
183
  if ( function_exists( 'curl_version' ) ) {
184
- $curl = curl_version();
185
  }
186
 
187
  return isset( $curl['ssl_version'] ) ? $curl['ssl_version'] : false;
@@ -194,9 +194,8 @@ if ( ! class_exists( 'BSF_Analytics_Stats' ) ) {
194
  * @since 1.0.0
195
  */
196
  private function get_curl_version() {
197
- $curl = [];
198
  if ( function_exists( 'curl_version' ) ) {
199
- $curl = curl_version();
200
  }
201
 
202
  return isset( $curl['version'] ) ? $curl['version'] : false;
68
  'graupi_version' => defined( 'BSF_UPDATER_VERSION' ) ? BSF_UPDATER_VERSION : false,
69
  'domain_name' => get_site_url(),
70
  'php_os' => PHP_OS,
71
+ 'server_software' => isset( $_SERVER['SERVER_SOFTWARE'] ) ? filter_var( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ), FILTER_SANITIZE_STRING ) : '',
72
  'mysql_version' => $this->get_mysql_version(),
73
  'php_version' => $this->get_php_version(),
74
  'php_max_input_vars' => ini_get( 'max_input_vars' ), // phpcs:ignore:PHPCompatibility.IniDirectives.NewIniDirectives.max_input_varsFound
181
  private function get_curl_ssl_version() {
182
  $curl = [];
183
  if ( function_exists( 'curl_version' ) ) {
184
+ $curl = curl_version(); // phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_version
185
  }
186
 
187
  return isset( $curl['ssl_version'] ) ? $curl['ssl_version'] : false;
194
  * @since 1.0.0
195
  */
196
  private function get_curl_version() {
 
197
  if ( function_exists( 'curl_version' ) ) {
198
+ $curl = curl_version(); // phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_version
199
  }
200
 
201
  return isset( $curl['version'] ) ? $curl['version'] : false;
admin/bsf-analytics/class-bsf-analytics.php CHANGED
@@ -18,60 +18,79 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
18
  */
19
  class BSF_Analytics {
20
 
 
 
 
 
 
 
 
21
  /**
22
  * Member Variable
23
  *
24
  * @var string Usage tracking document URL
25
  */
26
- private $usage_doc_link = 'https://store.brainstormforce.com/usage-tracking/?utm_source=wp_dashboard&utm_medium=general_settings&utm_campaign=usage_tracking';
27
 
28
  /**
29
  * Setup actions, load files.
30
  *
 
 
 
31
  * @since 1.0.0
32
  */
33
- public function __construct() {
34
 
35
- define( 'BSF_ANALYTICS_FILE', __FILE__ );
36
- define( 'BSF_ANALYTICS_VERSION', '1.0.0' );
37
- define( 'BSF_ANALYTICS_PATH', dirname( __FILE__ ) );
38
- define( 'BSF_ANALYTICS_URI', $this->bsf_analytics_url() );
 
 
 
 
 
39
 
40
  add_action( 'admin_init', [ $this, 'handle_optin_optout' ] );
41
- add_action( 'cron_schedules', [ $this, 'every_two_days_schedule' ] );
42
  add_action( 'admin_notices', [ $this, 'option_notice' ] );
43
- add_action( 'astra_notice_before_markup_bsf-optin-notice', [ $this, 'enqueue_assets' ] );
44
-
45
- add_action( 'init', [ $this, 'schedule_unschedule_event' ] );
46
 
47
- if ( ! has_action( 'bsf_analytics_send', [ $this, 'send' ] ) ) {
48
- add_action( 'bsf_analytics_send', [ $this, 'send' ] );
49
- }
50
 
51
  add_action( 'admin_init', [ $this, 'register_usage_tracking_setting' ] );
52
 
53
- add_action( 'update_option_bsf_analytics_optin', [ $this, 'update_analytics_option_callback' ], 10, 3 );
54
- add_action( 'add_option_bsf_analytics_optin', [ $this, 'add_analytics_option_callback' ], 10, 2 );
55
-
56
  $this->includes();
57
  }
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  /**
60
  * BSF Analytics URL
61
  *
 
62
  * @return String URL of bsf-analytics directory.
63
  * @since 1.0.0
64
  */
65
- public function bsf_analytics_url() {
66
 
67
- $path = wp_normalize_path( BSF_ANALYTICS_PATH );
68
- $theme_dir = wp_normalize_path( get_template_directory() );
69
 
70
- if ( strpos( $path, $theme_dir ) !== false ) {
71
- return rtrim( get_template_directory_uri() . '/admin/bsf-analytics/', '/' );
72
- } else {
73
- return rtrim( plugin_dir_url( BSF_ANALYTICS_FILE ), '/' );
74
- }
75
  }
76
 
77
  /**
@@ -129,21 +148,30 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
129
  * @since 1.0.0
130
  */
131
  public function is_tracking_enabled() {
132
- $is_enabled = get_site_option( 'bsf_analytics_optin' ) === 'yes' ? true : false;
133
- $is_enabled = $this->is_white_label_enabled() ? false : $is_enabled;
134
 
135
- return apply_filters( 'bsf_tracking_enabled', $is_enabled );
 
 
 
 
 
 
 
 
 
 
136
  }
137
 
138
  /**
139
  * Check if WHITE label is enabled for BSF products.
140
  *
 
141
  * @return bool
142
  * @since 1.0.0
143
  */
144
- public function is_white_label_enabled() {
145
 
146
- $options = apply_filters( 'bsf_white_label_options', [] );
147
  $is_enabled = false;
148
 
149
  if ( is_array( $options ) ) {
@@ -169,65 +197,75 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
169
  return;
170
  }
171
 
172
- // Don't display the notice if tracking is disabled or White Label is enabled for any of our plugins.
173
- if ( false !== get_site_option( 'bsf_analytics_optin', false ) || $this->is_white_label_enabled() ) {
174
- return;
175
- }
176
 
177
- // Show tracker consent notice after 24 hours from installed time.
178
- if ( strtotime( '+24 hours', $this->get_analytics_install_time() ) > time() ) {
179
- return;
180
- }
181
 
182
- /* translators: %s product name */
183
- $notice_string = __( 'Want to help make <strong>%1s</strong> even more awesome? Allow us to collect non-sensitive diagnostic data and usage information. ', 'header-footer-elementor' );
 
 
184
 
185
- if ( is_multisite() ) {
186
- $notice_string .= __( 'This will be applicable for all sites from the network.', 'header-footer-elementor' );
187
- }
 
188
 
189
- Astra_Notices::add_notice(
190
- [
191
- 'id' => 'bsf-optin-notice',
192
- 'type' => '',
193
- 'message' => sprintf(
194
- '<div class="notice-content">
195
- <div class="notice-heading">
196
- %1$s
197
- </div>
198
- <div class="astra-notices-container">
199
- <a href="%2$s" class="astra-notices button-primary">
200
- %3$s
201
- </a>
202
- <a href="%4$s" data-repeat-notice-after="%5$s" class="astra-notices button-secondary">
203
- %6$s
204
- </a>
205
- </div>
206
- </div>',
207
- /* translators: %s usage doc link */
208
- sprintf( $notice_string . '<a href="%2s" target="_blank" rel="noreferrer noopener">%3s</a>', $this->get_product_name(), esc_url( $this->usage_doc_link ), __( ' Know More.', 'header-footer-elementor' ) ),
209
- add_query_arg(
210
- [
211
- 'bsf_analytics_optin' => 'yes',
212
- 'bsf_analytics_nonce' => wp_create_nonce( 'bsf_analytics_optin' ),
213
- ]
214
- ),
215
- __( 'Yes! Allow it', 'header-footer-elementor' ),
216
- add_query_arg(
217
- [
218
- 'bsf_analytics_optin' => 'no',
219
- 'bsf_analytics_nonce' => wp_create_nonce( 'bsf_analytics_optin' ),
220
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  ),
222
- MONTH_IN_SECONDS,
223
- __( 'No Thanks', 'header-footer-elementor' )
224
- ),
225
- 'show_if' => true,
226
- 'repeat-notice-after' => false,
227
- 'priority' => 18,
228
- 'display-with-other-notices' => true,
229
- ]
230
- );
231
  }
232
 
233
  /**
@@ -236,27 +274,35 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
236
  * @since 1.0.0
237
  */
238
  public function handle_optin_optout() {
239
- if ( ! isset( $_GET['bsf_analytics_nonce'] ) ) {
 
 
 
 
 
 
 
240
  return;
241
  }
242
 
243
- if ( ! wp_verify_nonce( sanitize_text_field( $_GET['bsf_analytics_nonce'] ), 'bsf_analytics_optin' ) ) {
244
  return;
245
  }
246
 
247
- $optin_status = sanitize_text_field( $_GET['bsf_analytics_optin'] );
248
 
249
  if ( 'yes' === $optin_status ) {
250
- $this->optin();
251
  } elseif ( 'no' === $optin_status ) {
252
- $this->optout();
253
  }
254
 
255
  wp_safe_redirect(
256
  remove_query_arg(
257
  [
258
- 'bsf_analytics_optin',
259
- 'bsf_analytics_nonce',
 
260
  ]
261
  )
262
  );
@@ -265,54 +311,21 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
265
  /**
266
  * Opt in to usage tracking.
267
  *
 
268
  * @since 1.0.0
269
  */
270
- private function optin() {
271
- update_site_option( 'bsf_analytics_optin', 'yes' );
272
  }
273
 
274
  /**
275
  * Opt out to usage tracking.
276
  *
 
277
  * @since 1.0.0
278
  */
279
- private function optout() {
280
- update_site_option( 'bsf_analytics_optin', 'no' );
281
- }
282
-
283
- /**
284
- * Add two days event schedule variables.
285
- *
286
- * @param array $schedules scheduled array data.
287
- * @since 1.0.0
288
- */
289
- public function every_two_days_schedule( $schedules ) {
290
- $schedules['every_two_days'] = [
291
- 'interval' => 2 * DAY_IN_SECONDS,
292
- 'display' => __( 'Every two days', 'header-footer-elementor' ),
293
- ];
294
-
295
- return $schedules;
296
- }
297
-
298
- /**
299
- * Schedule usage tracking event.
300
- *
301
- * @since 1.0.0
302
- */
303
- private function schedule_event() {
304
- if ( ! wp_next_scheduled( 'bsf_analytics_send' ) && $this->is_tracking_enabled() ) {
305
- wp_schedule_event( time(), 'every_two_days', 'bsf_analytics_send' );
306
- }
307
- }
308
-
309
- /**
310
- * Unschedule usage tracking event.
311
- *
312
- * @since 1.0.0
313
- */
314
- private function unschedule_event() {
315
- wp_clear_scheduled_hook( 'bsf_analytics_send' );
316
  }
317
 
318
  /**
@@ -331,22 +344,37 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
331
  */
332
  public function register_usage_tracking_setting() {
333
 
334
- if ( ! apply_filters( 'bsf_tracking_enabled', true ) || $this->is_white_label_enabled() ) {
335
- return;
336
- }
337
 
338
- register_setting(
339
- 'general', // Options group.
340
- 'bsf_analytics_optin', // Option name/database.
341
- [ 'sanitize_callback' => [ $this, 'sanitize_option' ] ] // sanitize callback function.
342
- );
343
 
344
- add_settings_field(
345
- 'bsf-analytics-optin', // Field ID.
346
- __( 'Usage Tracking', 'header-footer-elementor' ), // Field title.
347
- [ $this, 'render_settings_field_html' ], // Field callback function.
348
- 'general' // Settings page slug.
349
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
350
  }
351
 
352
  /**
@@ -367,14 +395,17 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
367
  /**
368
  * Print settings field HTML.
369
  *
 
370
  * @since 1.0.0
371
  */
372
- public function render_settings_field_html() {
373
  ?>
374
- <label for="bsf-analytics-optin">
375
- <input id="bsf-analytics-optin" type="checkbox" value="1" name="bsf_analytics_optin" <?php checked( get_site_option( 'bsf_analytics_optin', 'no' ), 'yes' ); ?>>
 
376
  <?php
377
- esc_html_e( 'Allow Brainstorm Force products to track non-sensitive usage tracking data.', 'header-footer-elementor' );
 
378
 
379
  if ( is_multisite() ) {
380
  esc_html_e( ' This will be applicable for all sites from the network.', 'header-footer-elementor' );
@@ -382,53 +413,26 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
382
  ?>
383
  </label>
384
  <?php
385
- echo wp_kses_post( sprintf( '<a href="%1s" target="_blank" rel="noreferrer noopener">%2s</a>', esc_url( $this->usage_doc_link ), __( 'Learn More.', 'header-footer-elementor' ) ) );
386
- }
387
-
388
- /**
389
- * Get current product name.
390
- *
391
- * @return string $plugin_data['Name] Name of plugin.
392
- * @since 1.0.0
393
- */
394
- private function get_product_name() {
395
-
396
- $base = wp_normalize_path( dirname( __FILE__ ) );
397
- $theme_dir = wp_normalize_path( get_template_directory() );
398
-
399
- if ( false !== strpos( $base, $theme_dir ) ) {
400
- $theme = wp_get_theme( get_template() );
401
- return $theme->get( 'Name' );
402
- }
403
-
404
- $base = plugin_basename( __FILE__ );
405
-
406
- $exploded_path = explode( '/', $base, 2 );
407
- $plugin_slug = $exploded_path[0];
408
-
409
- if ( ! function_exists( 'get_plugin_data' ) ) {
410
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
411
- }
412
-
413
- $plugin_main_file = WP_PLUGIN_DIR . '/' . $plugin_slug . '/' . $plugin_slug . '.php';
414
- $plugin_data = get_plugin_data( wp_normalize_path( $plugin_main_file ) );
415
-
416
- return $plugin_data['Name'];
417
  }
418
 
419
  /**
420
  * Set analytics installed time in option.
421
  *
 
422
  * @return string $time analytics installed time.
423
  * @since 1.0.0
424
  */
425
- private function get_analytics_install_time() {
426
 
427
- $time = get_site_option( 'bsf_analytics_installed_time' );
428
 
429
  if ( ! $time ) {
430
  $time = time();
431
- update_site_option( 'bsf_analytics_installed_time', time() );
432
  }
433
 
434
  return $time;
@@ -443,7 +447,9 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
443
  * @since 1.0.0
444
  */
445
  public function update_analytics_option_callback( $old_value, $value, $option ) {
446
- $this->add_option_to_network( $value );
 
 
447
  }
448
 
449
  /**
@@ -454,50 +460,49 @@ if ( ! class_exists( 'BSF_Analytics' ) ) {
454
  * @since 1.0.0
455
  */
456
  public function add_analytics_option_callback( $option, $value ) {
457
- $this->add_option_to_network( $value );
 
 
458
  }
459
 
460
  /**
461
- * Schedule or unschedule event based on analytics option value.
462
  *
463
  * @since 1.0.0
464
  */
465
- public function schedule_unschedule_event() {
466
 
467
- if ( true === $this->is_white_label_enabled() ) {
468
- $this->unschedule_event();
469
  return;
470
  }
471
 
472
- $analytics_option = get_site_option( 'bsf_analytics_optin' );
473
 
474
- if ( 'no' === $analytics_option ) {
475
- $this->unschedule_event();
476
- } elseif ( 'yes' === $analytics_option ) {
477
- $this->schedule_event();
478
  }
479
  }
480
 
481
  /**
482
  * Save analytics option to network.
483
  *
 
484
  * @param string $value value of option.
485
  * @since 1.0.0
486
  */
487
- public function add_option_to_network( $value ) {
488
 
489
  // If action coming from general settings page.
490
  if ( isset( $_POST['option_page'] ) && 'general' === $_POST['option_page'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
491
 
492
- if ( get_site_option( 'bsf_analytics_optin' ) ) {
493
- update_site_option( 'bsf_analytics_optin', $value );
494
  } else {
495
- add_site_option( 'bsf_analytics_optin', $value );
496
  }
497
  }
498
  }
499
  }
500
-
501
- new BSF_Analytics();
502
-
503
  }
18
  */
19
  class BSF_Analytics {
20
 
21
+ /**
22
+ * Member Variable
23
+ *
24
+ * @var array Entities data.
25
+ */
26
+ private $entities;
27
+
28
  /**
29
  * Member Variable
30
  *
31
  * @var string Usage tracking document URL
32
  */
33
+ public $usage_doc_link = 'https://store.brainstormforce.com/usage-tracking/?utm_source=wp_dashboard&utm_medium=general_settings&utm_campaign=usage_tracking';
34
 
35
  /**
36
  * Setup actions, load files.
37
  *
38
+ * @param array $args entity data for analytics.
39
+ * @param string $analytics_path directory path to analytics library.
40
+ * @param float $analytics_version analytics library version.
41
  * @since 1.0.0
42
  */
43
+ public function __construct( $args, $analytics_path, $analytics_version ) {
44
 
45
+ // Bail when no analytics entities are registered.
46
+ if ( empty( $args ) ) {
47
+ return;
48
+ }
49
+
50
+ $this->entities = $args;
51
+
52
+ define( 'BSF_ANALYTICS_VERSION', $analytics_version );
53
+ define( 'BSF_ANALYTICS_URI', $this->get_analytics_url( $analytics_path ) );
54
 
55
  add_action( 'admin_init', [ $this, 'handle_optin_optout' ] );
 
56
  add_action( 'admin_notices', [ $this, 'option_notice' ] );
57
+ add_action( 'init', [ $this, 'maybe_track_analytics' ], 99 );
 
 
58
 
59
+ $this->set_actions();
 
 
60
 
61
  add_action( 'admin_init', [ $this, 'register_usage_tracking_setting' ] );
62
 
 
 
 
63
  $this->includes();
64
  }
65
 
66
+ /**
67
+ * Setup actions for admin notice style and analytics cron event.
68
+ *
69
+ * @since 1.0.4
70
+ */
71
+ public function set_actions() {
72
+
73
+ foreach ( $this->entities as $key => $data ) {
74
+ add_action( 'astra_notice_before_markup_' . $key . '-optin-notice', [ $this, 'enqueue_assets' ] );
75
+ add_action( 'update_option_' . $key . '_analytics_optin', [ $this, 'update_analytics_option_callback' ], 10, 3 );
76
+ add_action( 'add_option_' . $key . '_analytics_optin', [ $this, 'add_analytics_option_callback' ], 10, 2 );
77
+ }
78
+ }
79
+
80
  /**
81
  * BSF Analytics URL
82
  *
83
+ * @param string $analytics_path directory path to analytics library.
84
  * @return String URL of bsf-analytics directory.
85
  * @since 1.0.0
86
  */
87
+ public function get_analytics_url( $analytics_path ) {
88
 
89
+ $content_dir_path = wp_normalize_path( WP_CONTENT_DIR );
 
90
 
91
+ $analytics_path = wp_normalize_path( $analytics_path );
92
+
93
+ return str_replace( $content_dir_path, content_url(), $analytics_path );
 
 
94
  }
95
 
96
  /**
148
  * @since 1.0.0
149
  */
150
  public function is_tracking_enabled() {
 
 
151
 
152
+ foreach ( $this->entities as $key => $data ) {
153
+
154
+ $is_enabled = get_site_option( $key . '_analytics_optin' ) === 'yes' ? true : false;
155
+ $is_enabled = $this->is_white_label_enabled( $key ) ? false : $is_enabled;
156
+
157
+ if ( apply_filters( $key . '_tracking_enabled', $is_enabled ) ) {
158
+ return true;
159
+ }
160
+ }
161
+
162
+ return false;
163
  }
164
 
165
  /**
166
  * Check if WHITE label is enabled for BSF products.
167
  *
168
+ * @param string $source source of analytics.
169
  * @return bool
170
  * @since 1.0.0
171
  */
172
+ public function is_white_label_enabled( $source ) {
173
 
174
+ $options = apply_filters( $source . '_white_label_options', [] );
175
  $is_enabled = false;
176
 
177
  if ( is_array( $options ) ) {
197
  return;
198
  }
199
 
200
+ foreach ( $this->entities as $key => $data ) {
 
 
 
201
 
202
+ $time_to_display = isset( $data['time_to_display'] ) ? $data['time_to_display'] : '+24 hours';
203
+ $usage_doc_link = isset( $data['usage_doc_link'] ) ? $data['usage_doc_link'] : $this->usage_doc_link;
 
 
204
 
205
+ // Don't display the notice if tracking is disabled or White Label is enabled for any of our plugins.
206
+ if ( false !== get_site_option( $key . '_analytics_optin', false ) || $this->is_white_label_enabled( $key ) ) {
207
+ continue;
208
+ }
209
 
210
+ // Show tracker consent notice after 24 hours from installed time.
211
+ if ( strtotime( $time_to_display, $this->get_analytics_install_time( $key ) ) > time() ) {
212
+ continue;
213
+ }
214
 
215
+ /* translators: %s product name */
216
+ $notice_string = __( 'Want to help make <strong>%1s</strong> even more awesome? Allow us to collect non-sensitive diagnostic data and usage information. ', 'header-footer-elementor' );
217
+
218
+ if ( is_multisite() ) {
219
+ $notice_string .= __( 'This will be applicable for all sites from the network.', 'header-footer-elementor' );
220
+ }
221
+
222
+ $language_dir = is_rtl() ? 'rtl' : 'ltr';
223
+
224
+ Astra_Notices::add_notice(
225
+ [
226
+ 'id' => $key . '-optin-notice',
227
+ 'type' => '',
228
+ 'message' => sprintf(
229
+ '<div class="notice-content">
230
+ <div class="notice-heading">
231
+ %1$s
232
+ </div>
233
+ <div class="astra-notices-container">
234
+ <a href="%2$s" class="astra-notices button-primary">
235
+ %3$s
236
+ </a>
237
+ <a href="%4$s" data-repeat-notice-after="%5$s" class="astra-notices button-secondary">
238
+ %6$s
239
+ </a>
240
+ </div>
241
+ </div>',
242
+ /* translators: %s usage doc link */
243
+ sprintf( $notice_string . '<span dir="%2s"><a href="%3s" target="_blank" rel="noreferrer noopener">%4s</a><span>', esc_html( $data['product_name'] ), $language_dir, esc_url( $usage_doc_link ), __( ' Know More.', 'header-footer-elementor' ) ),
244
+ add_query_arg(
245
+ [
246
+ $key . '_analytics_optin' => 'yes',
247
+ $key . '_analytics_nonce' => wp_create_nonce( $key . '_analytics_optin' ),
248
+ 'bsf_analytics_source' => $key,
249
+ ]
250
+ ),
251
+ __( 'Yes! Allow it', 'header-footer-elementor' ),
252
+ add_query_arg(
253
+ [
254
+ $key . '_analytics_optin' => 'no',
255
+ $key . '_analytics_nonce' => wp_create_nonce( $key . '_analytics_optin' ),
256
+ 'bsf_analytics_source' => $key,
257
+ ]
258
+ ),
259
+ MONTH_IN_SECONDS,
260
+ __( 'No Thanks', 'header-footer-elementor' )
261
  ),
262
+ 'show_if' => true,
263
+ 'repeat-notice-after' => false,
264
+ 'priority' => 18,
265
+ 'display-with-other-notices' => true,
266
+ ]
267
+ );
268
+ }
 
 
269
  }
270
 
271
  /**
274
  * @since 1.0.0
275
  */
276
  public function handle_optin_optout() {
277
+
278
+ if ( ! current_user_can( 'manage_options' ) ) {
279
+ return;
280
+ }
281
+
282
+ $source = isset( $_GET['bsf_analytics_source'] ) ? sanitize_text_field( wp_unslash( $_GET['bsf_analytics_source'] ) ) : '';
283
+
284
+ if ( ! isset( $_GET[ $source . '_analytics_nonce' ] ) ) {
285
  return;
286
  }
287
 
288
+ if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET[ $source . '_analytics_nonce' ] ) ), $source . '_analytics_optin' ) ) {
289
  return;
290
  }
291
 
292
+ $optin_status = isset( $_GET[ $source . '_analytics_optin' ] ) ? sanitize_text_field( wp_unslash( $_GET[ $source . '_analytics_optin' ] ) ) : '';
293
 
294
  if ( 'yes' === $optin_status ) {
295
+ $this->optin( $source );
296
  } elseif ( 'no' === $optin_status ) {
297
+ $this->optout( $source );
298
  }
299
 
300
  wp_safe_redirect(
301
  remove_query_arg(
302
  [
303
+ $source . '_analytics_optin',
304
+ $source . '_analytics_nonce',
305
+ 'bsf_analytics_source',
306
  ]
307
  )
308
  );
311
  /**
312
  * Opt in to usage tracking.
313
  *
314
+ * @param string $source source of analytics.
315
  * @since 1.0.0
316
  */
317
+ private function optin( $source ) {
318
+ update_site_option( $source . '_analytics_optin', 'yes' );
319
  }
320
 
321
  /**
322
  * Opt out to usage tracking.
323
  *
324
+ * @param string $source source of analytics.
325
  * @since 1.0.0
326
  */
327
+ private function optout( $source ) {
328
+ update_site_option( $source . '_analytics_optin', 'no' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  }
330
 
331
  /**
344
  */
345
  public function register_usage_tracking_setting() {
346
 
347
+ foreach ( $this->entities as $key => $data ) {
 
 
348
 
349
+ if ( ! apply_filters( $key . '_tracking_enabled', true ) || $this->is_white_label_enabled( $key ) ) {
350
+ return;
351
+ }
 
 
352
 
353
+ $usage_doc_link = isset( $data['usage_doc_link'] ) ? $data['usage_doc_link'] : $this->usage_doc_link;
354
+ $author = isset( $data['author'] ) ? $data['author'] : 'Brainstorm Force';
355
+
356
+ register_setting(
357
+ 'general', // Options group.
358
+ $key . '_analytics_optin', // Option name/database.
359
+ [ 'sanitize_callback' => [ $this, 'sanitize_option' ] ] // sanitize callback function.
360
+ );
361
+
362
+ add_settings_field(
363
+ $key . '-analytics-optin', // Field ID.
364
+ __( 'Usage Tracking', 'header-footer-elementor' ), // Field title.
365
+ [ $this, 'render_settings_field_html' ], // Field callback function.
366
+ 'general',
367
+ 'default', // Settings page slug.
368
+ [
369
+ 'type' => 'checkbox',
370
+ 'title' => $author,
371
+ 'name' => $key . '_analytics_optin',
372
+ 'label_for' => $key . '-analytics-optin',
373
+ 'id' => $key . '-analytics-optin',
374
+ 'usage_doc_link' => $usage_doc_link,
375
+ ]
376
+ );
377
+ }
378
  }
379
 
380
  /**
395
  /**
396
  * Print settings field HTML.
397
  *
398
+ * @param array $args arguments to field.
399
  * @since 1.0.0
400
  */
401
+ public function render_settings_field_html( $args ) {
402
  ?>
403
+ <fieldset>
404
+ <label for="<?php echo esc_attr( $args['label_for'] ); ?>">
405
+ <input id="<?php echo esc_attr( $args['id'] ); ?>" type="checkbox" value="1" name="<?php echo esc_attr( $args['name'] ); ?>" <?php checked( get_site_option( $args['name'], 'no' ), 'yes' ); ?>>
406
  <?php
407
+ /* translators: %s Product title */
408
+ echo esc_html( sprintf( __( 'Allow %s products to track non-sensitive usage tracking data.', 'header-footer-elementor' ), $args['title'] ) );// phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText
409
 
410
  if ( is_multisite() ) {
411
  esc_html_e( ' This will be applicable for all sites from the network.', 'header-footer-elementor' );
413
  ?>
414
  </label>
415
  <?php
416
+ echo wp_kses_post( sprintf( '<a href="%1s" target="_blank" rel="noreferrer noopener">%2s</a>', esc_url( $args['usage_doc_link'] ), __( 'Learn More.', 'header-footer-elementor' ) ) );
417
+ ?>
418
+ </fieldset>
419
+ <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
420
  }
421
 
422
  /**
423
  * Set analytics installed time in option.
424
  *
425
+ * @param string $source source of analytics.
426
  * @return string $time analytics installed time.
427
  * @since 1.0.0
428
  */
429
+ private function get_analytics_install_time( $source ) {
430
 
431
+ $time = get_site_option( $source . '_analytics_installed_time' );
432
 
433
  if ( ! $time ) {
434
  $time = time();
435
+ update_site_option( $source . '_analytics_installed_time', time() );
436
  }
437
 
438
  return $time;
447
  * @since 1.0.0
448
  */
449
  public function update_analytics_option_callback( $old_value, $value, $option ) {
450
+ if ( is_multisite() ) {
451
+ $this->add_option_to_network( $option, $value );
452
+ }
453
  }
454
 
455
  /**
460
  * @since 1.0.0
461
  */
462
  public function add_analytics_option_callback( $option, $value ) {
463
+ if ( is_multisite() ) {
464
+ $this->add_option_to_network( $option, $value );
465
+ }
466
  }
467
 
468
  /**
469
+ * Send analaytics track event if tracking is enabled.
470
  *
471
  * @since 1.0.0
472
  */
473
+ public function maybe_track_analytics() {
474
 
475
+ if ( ! $this->is_tracking_enabled() ) {
 
476
  return;
477
  }
478
 
479
+ $analytics_track = get_site_transient( 'bsf_analytics_track' );
480
 
481
+ // If the last data sent is 2 days old i.e. transient is expired.
482
+ if ( ! $analytics_track ) {
483
+ $this->send();
484
+ set_site_transient( 'bsf_analytics_track', true, 2 * DAY_IN_SECONDS );
485
  }
486
  }
487
 
488
  /**
489
  * Save analytics option to network.
490
  *
491
+ * @param string $option name of option.
492
  * @param string $value value of option.
493
  * @since 1.0.0
494
  */
495
+ public function add_option_to_network( $option, $value ) {
496
 
497
  // If action coming from general settings page.
498
  if ( isset( $_POST['option_page'] ) && 'general' === $_POST['option_page'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
499
 
500
+ if ( get_site_option( $option ) ) {
501
+ update_site_option( $option, $value );
502
  } else {
503
+ add_site_option( $option, $value );
504
  }
505
  }
506
  }
507
  }
 
 
 
508
  }
admin/bsf-analytics/version.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ {
2
+ "bsf-analytics-ver": "1.1.0"
3
+ }
4
+
header-footer-elementor.php CHANGED
@@ -7,12 +7,12 @@
7
  * Author URI: https://www.brainstormforce.com/
8
  * Text Domain: header-footer-elementor
9
  * Domain Path: /languages
10
- * Version: 1.5.3
11
  *
12
  * @package header-footer-elementor
13
  */
14
 
15
- define( 'HFE_VER', '1.5.3' );
16
  define( 'HFE_DIR', plugin_dir_path( __FILE__ ) );
17
  define( 'HFE_URL', plugins_url( '/', __FILE__ ) );
18
  define( 'HFE_PATH', plugin_basename( __FILE__ ) );
7
  * Author URI: https://www.brainstormforce.com/
8
  * Text Domain: header-footer-elementor
9
  * Domain Path: /languages
10
+ * Version: 1.5.4
11
  *
12
  * @package header-footer-elementor
13
  */
14
 
15
+ define( 'HFE_VER', '1.5.4' );
16
  define( 'HFE_DIR', plugin_dir_path( __FILE__ ) );
17
  define( 'HFE_URL', plugins_url( '/', __FILE__ ) );
18
  define( 'HFE_PATH', plugin_basename( __FILE__ ) );
inc/class-header-footer-elementor.php CHANGED
@@ -90,7 +90,22 @@ class Header_Footer_Elementor {
90
  add_action( 'admin_notices', [ $this, 'register_notices' ] );
91
 
92
  // BSF Analytics Tracker.
93
- require_once HFE_DIR . 'admin/bsf-analytics/class-bsf-analytics.php';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  } else {
96
  add_action( 'admin_notices', [ $this, 'elementor_not_available' ] );
@@ -190,7 +205,7 @@ class Header_Footer_Elementor {
190
 
191
  $plugin = 'elementor/elementor.php';
192
 
193
- if ( _is_elementor_installed() ) {
194
 
195
  $action_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $plugin . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin );
196
  $button_label = __( 'Activate Elementor', 'header-footer-elementor' );
@@ -436,19 +451,3 @@ class Header_Footer_Elementor {
436
  }
437
 
438
  }
439
- /**
440
- * Is elementor plugin installed.
441
- */
442
- if ( ! function_exists( '_is_elementor_installed' ) ) {
443
-
444
- /**
445
- * Check if Elementor is installed
446
- *
447
- * @since 1.5.0
448
- *
449
- * @access public
450
- */
451
- function _is_elementor_installed() {
452
- return defined( 'ELEMENTOR_VERSION' ) ? true : false;
453
- }
454
- }
90
  add_action( 'admin_notices', [ $this, 'register_notices' ] );
91
 
92
  // BSF Analytics Tracker.
93
+ if ( ! class_exists( 'BSF_Analytics_Loader' ) ) {
94
+ require_once HFE_DIR . 'admin/bsf-analytics/class-bsf-analytics-loader.php';
95
+ }
96
+
97
+ $bsf_analytics = BSF_Analytics_Loader::get_instance();
98
+
99
+ $bsf_analytics->set_entity(
100
+ [
101
+ 'bsf' => [
102
+ 'product_name' => 'Elementor - Header, Footer & Blocks',
103
+ 'path' => HFE_DIR . 'admin/bsf-analytics',
104
+ 'author' => 'Brainstorm Force',
105
+ 'time_to_display' => '+24 hours',
106
+ ],
107
+ ]
108
+ );
109
 
110
  } else {
111
  add_action( 'admin_notices', [ $this, 'elementor_not_available' ] );
205
 
206
  $plugin = 'elementor/elementor.php';
207
 
208
+ if ( file_exists( WP_PLUGIN_DIR . '/elementor/elementor.php' ) ) {
209
 
210
  $action_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $plugin . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin );
211
  $button_label = __( 'Activate Elementor', 'header-footer-elementor' );
451
  }
452
 
453
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/js/frontend.js CHANGED
@@ -336,82 +336,85 @@
336
  $( '.elementor-element-' + id + ' div.hfe-has-submenu-container' ).off( 'click' ).on( 'click', function( event ) {
337
 
338
  var $this = $( this );
339
-
340
- if( $this.hasClass( 'sub-menu-active' ) ) {
341
 
342
- if( ! $this.next().hasClass( 'sub-menu-open' ) ) {
343
 
344
- $this.find( 'a' ).attr( 'aria-expanded', 'false' );
345
 
346
- if( 'horizontal' !== layout ){
347
 
348
- event.preventDefault();
349
 
350
- $this.next().css( 'position', 'relative' );
351
- }else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 767px )" ).matches && ($( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
352
-
353
- event.preventDefault();
354
 
355
- $this.next().css( 'position', 'relative' );
356
- }else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 1024px )" ).matches && ( $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
357
-
358
- event.preventDefault();
359
 
360
- $this.next().css( 'position', 'relative' );
361
- }
362
-
363
- $this.removeClass( 'sub-menu-active' );
364
- $this.next().removeClass( 'sub-menu-open' );
365
- $this.next().css( { 'visibility': 'hidden', 'opacity': '0', 'height': '0' } );
366
- $this.next().css( { 'transition': 'none'} );
367
- }else{
368
-
369
- $this.find( 'a' ).attr( 'aria-expanded', 'false' );
370
-
371
- $this.removeClass( 'sub-menu-active' );
372
- $this.next().removeClass( 'sub-menu-open' );
373
- $this.next().css( { 'visibility': 'hidden', 'opacity': '0', 'height': '0' } );
374
- $this.next().css( { 'transition': 'none'} );
375
-
376
- if ( 'horizontal' !== layout ){
377
-
378
- $this.next().css( 'position', 'relative' );
379
- } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 767px )" ).matches && ($( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
380
-
381
- $this.next().css( 'position', 'relative' );
382
-
383
- } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 1024px )" ).matches && ( $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
384
 
385
- $this.next().css( 'position', 'absolute' );
386
- }
387
- }
388
- }else {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
 
390
  $this.find( 'a' ).attr( 'aria-expanded', 'true' );
391
  if ( 'horizontal' !== layout ) {
392
 
393
  event.preventDefault();
394
- $this.next().css( 'position', 'relative');
395
  } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 767px )" ).matches && ($( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
396
 
397
  event.preventDefault();
398
- $this.next().css( 'position', 'relative');
399
  } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 1024px )" ).matches ) {
400
  event.preventDefault();
401
 
402
- if ( $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') ) {
403
-
404
- $this.next().css( 'position', 'relative');
405
- } else if ( $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-none') ) {
406
-
407
- $this.next().css( 'position', 'absolute');
408
- }
409
- }
410
-
411
- $this.addClass( 'sub-menu-active' );
412
- $this.next().addClass( 'sub-menu-open' );
413
- $this.next().css( { 'visibility': 'visible', 'opacity': '1', 'height': 'auto' } );
414
- $this.next().css( { 'transition': '0.3s ease'} );
 
415
  }
416
  });
417
 
336
  $( '.elementor-element-' + id + ' div.hfe-has-submenu-container' ).off( 'click' ).on( 'click', function( event ) {
337
 
338
  var $this = $( this );
 
 
339
 
340
+ if( $( '.elementor-element-' + id ).hasClass( 'hfe-link-redirect-child' ) ) {
341
 
342
+ if( $this.hasClass( 'sub-menu-active' ) ) {
343
 
344
+ if( ! $this.next().hasClass( 'sub-menu-open' ) ) {
345
 
346
+ $this.find( 'a' ).attr( 'aria-expanded', 'false' );
347
 
348
+ if( 'horizontal' !== layout ){
 
 
 
349
 
350
+ event.preventDefault();
 
 
 
351
 
352
+ $this.next().css( 'position', 'relative' );
353
+ } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 767px )" ).matches && ($( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
354
+
355
+ event.preventDefault();
356
+
357
+ $this.next().css( 'position', 'relative' );
358
+ } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 1024px )" ).matches && ( $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
359
+
360
+ event.preventDefault();
361
+
362
+ $this.next().css( 'position', 'relative' );
363
+ }
364
+
365
+ $this.removeClass( 'sub-menu-active' );
366
+ $this.next().removeClass( 'sub-menu-open' );
367
+ $this.next().css( { 'visibility': 'hidden', 'opacity': '0', 'height': '0' } );
368
+ $this.next().css( { 'transition': 'none'} );
369
+ } else{
370
+
371
+ $this.find( 'a' ).attr( 'aria-expanded', 'false' );
 
 
 
 
372
 
373
+ $this.removeClass( 'sub-menu-active' );
374
+ $this.next().removeClass( 'sub-menu-open' );
375
+ $this.next().css( { 'visibility': 'hidden', 'opacity': '0', 'height': '0' } );
376
+ $this.next().css( { 'transition': 'none'} );
377
+
378
+ if ( 'horizontal' !== layout ){
379
+
380
+ $this.next().css( 'position', 'relative' );
381
+ } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 767px )" ).matches && ($( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
382
+
383
+ $this.next().css( 'position', 'relative' );
384
+
385
+ } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 1024px )" ).matches && ( $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
386
+
387
+ $this.next().css( 'position', 'absolute' );
388
+ }
389
+ }
390
+ } else {
391
 
392
  $this.find( 'a' ).attr( 'aria-expanded', 'true' );
393
  if ( 'horizontal' !== layout ) {
394
 
395
  event.preventDefault();
396
+ $this.next().css( 'position', 'relative');
397
  } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 767px )" ).matches && ($( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile'))) {
398
 
399
  event.preventDefault();
400
+ $this.next().css( 'position', 'relative');
401
  } else if ( 'horizontal' === layout && window.matchMedia( "( max-width: 1024px )" ).matches ) {
402
  event.preventDefault();
403
 
404
+ if ( $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-tablet') ) {
405
+
406
+ $this.next().css( 'position', 'relative');
407
+ } else if ( $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-mobile') || $( '.elementor-element-' + id ).hasClass('hfe-nav-menu__breakpoint-none') ) {
408
+
409
+ $this.next().css( 'position', 'absolute');
410
+ }
411
+ }
412
+
413
+ $this.addClass( 'sub-menu-active' );
414
+ $this.next().addClass( 'sub-menu-open' );
415
+ $this.next().css( { 'visibility': 'visible', 'opacity': '1', 'height': 'auto' } );
416
+ $this.next().css( { 'transition': '0.3s ease'} );
417
+ }
418
  }
419
  });
420
 
inc/widgets-css/frontend.css CHANGED
@@ -135,13 +135,13 @@ div.hfe-nav-menu,
135
  -webkit-justify-content: flex-end;
136
  -moz-box-pack: end;
137
  justify-content: flex-end; }
138
- .hfe-nav-menu__align-right .hfe-nav-menu__layout-vertical li.elementor-button-wrapper{
139
  text-align: right;
140
  }
141
- .hfe-nav-menu__align-left .hfe-nav-menu__layout-vertical li.elementor-button-wrapper{
142
  text-align: left;
143
  }
144
- .hfe-nav-menu__align-center .hfe-nav-menu__layout-vertical li.elementor-button-wrapper{
145
  text-align: center;
146
  }
147
  .hfe-nav-menu__align-left .hfe-nav-menu {
@@ -276,13 +276,13 @@ div.hfe-nav-menu,
276
  display: none;
277
  }
278
 
279
- .hfe-submenu-icon-arrow .hfe-nav-menu .parent-has-child .sub-menu-active .sub-arrow i:before {
280
  content: '';
281
  }
282
- .hfe-submenu-icon-plus .hfe-nav-menu .parent-has-child .sub-menu-active .sub-arrow i:before {
283
  content: '-';
284
  }
285
- .hfe-submenu-icon-classic .hfe-nav-menu .parent-has-child .sub-menu-active .sub-arrow i:before {
286
  content: '';
287
  }
288
 
@@ -1101,9 +1101,9 @@ div.hfe-nav-menu,
1101
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
1102
  }
1103
 
1104
- a.hfe-menu-item.elementor-button {
1105
  display: inline-flex;
1106
- }
1107
 
1108
  .hfe-nav-menu li.elementor-button-wrapper {
1109
  align-self: center;
135
  -webkit-justify-content: flex-end;
136
  -moz-box-pack: end;
137
  justify-content: flex-end; }
138
+ .hfe-nav-menu__align-right .hfe-nav-menu__layout-vertical li .elementor-button-wrapper{
139
  text-align: right;
140
  }
141
+ .hfe-nav-menu__align-left .hfe-nav-menu__layout-vertical li .elementor-button-wrapper{
142
  text-align: left;
143
  }
144
+ .hfe-nav-menu__align-center .hfe-nav-menu__layout-vertical li .elementor-button-wrapper{
145
  text-align: center;
146
  }
147
  .hfe-nav-menu__align-left .hfe-nav-menu {
276
  display: none;
277
  }
278
 
279
+ .hfe-submenu-icon-arrow .hfe-nav-menu .parent-has-child .sub-menu-active .sub-arrow i:before,.hfe-link-redirect-self_link.hfe-submenu-icon-arrow .hfe-nav-menu .parent-has-child .menu-active .sub-arrow i:before {
280
  content: '';
281
  }
282
+ .hfe-submenu-icon-plus .hfe-nav-menu .parent-has-child .sub-menu-active .sub-arrow i:before, .hfe-link-redirect-self_link.hfe-submenu-icon-plus .hfe-nav-menu .parent-has-child .menu-active .sub-arrow i:before {
283
  content: '-';
284
  }
285
+ .hfe-submenu-icon-classic .hfe-nav-menu .parent-has-child .sub-menu-active .sub-arrow i:before, .hfe-link-redirect-self_link.hfe-submenu-icon-classic .hfe-nav-menu .parent-has-child .menu-active .sub-arrow i:before {
286
  content: '';
287
  }
288
 
1101
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
1102
  }
1103
 
1104
+ .elementor-widget-navigation-menu:not(.hfe-nav-menu__align-justify):not(.hfe-menu-item-space-between) a.hfe-menu-item.elementor-button {
1105
  display: inline-flex;
1106
+ }
1107
 
1108
  .hfe-nav-menu li.elementor-button-wrapper {
1109
  align-self: center;
inc/widgets-manager/widgets/class-menu-walker.php CHANGED
@@ -98,7 +98,7 @@ class Menu_Walker extends \Walker_Nav_Menu {
98
  * @param string $output Output HTML.
99
  * @access public
100
  */
101
- function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) {
102
 
103
  $id_field = $this->db_fields['id'];
104
 
98
  * @param string $output Output HTML.
99
  * @access public
100
  */
101
+ function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
102
 
103
  $id_field = $this->db_fields['id'];
104
 
inc/widgets-manager/widgets/class-navigation-menu.php CHANGED
@@ -399,8 +399,8 @@ class Navigation_Menu extends Widget_Base {
399
  ],
400
  'selectors' => [
401
  '{{WRAPPER}} li.menu-item a' => 'justify-content: {{VALUE}};',
402
- '{{WRAPPER}} li.elementor-button-wrapper' => 'text-align: {{VALUE}};',
403
- '{{WRAPPER}}.hfe-menu-item-flex-end li.elementor-button-wrapper' => 'text-align: right;',
404
  ],
405
  'prefix_class' => 'hfe-menu-item-',
406
  ]
@@ -438,6 +438,21 @@ class Navigation_Menu extends Widget_Base {
438
  ]
439
  );
440
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
441
  $this->add_control(
442
  'heading_responsive',
443
  [
399
  ],
400
  'selectors' => [
401
  '{{WRAPPER}} li.menu-item a' => 'justify-content: {{VALUE}};',
402
+ '{{WRAPPER}} li .elementor-button-wrapper' => 'text-align: {{VALUE}};',
403
+ '{{WRAPPER}}.hfe-menu-item-flex-end li .elementor-button-wrapper' => 'text-align: right;',
404
  ],
405
  'prefix_class' => 'hfe-menu-item-',
406
  ]
438
  ]
439
  );
440
 
441
+ $this->add_control(
442
+ 'link_redirect',
443
+ [
444
+ 'label' => __( 'Action On Menu Click', 'header-footer-elementor' ),
445
+ 'type' => Controls_Manager::SELECT,
446
+ 'default' => 'child',
447
+ 'description' => __( 'For Horizontal layout, this will affect on the selected breakpoint', 'header-footer-elementor' ),
448
+ 'options' => [
449
+ 'child' => __( 'Open Submenu', 'header-footer-elementor' ),
450
+ 'self_link' => __( 'Redirect To Self Link', 'header-footer-elementor' ),
451
+ ],
452
+ 'prefix_class' => 'hfe-link-redirect-',
453
+ ]
454
+ );
455
+
456
  $this->add_control(
457
  'heading_responsive',
458
  [
inc/widgets-manager/widgets/class-retina.php CHANGED
@@ -798,7 +798,7 @@ class Retina extends Widget_Base {
798
  ?>
799
  <div class="hfe-retina-image-set">
800
  <div class="hfe-retina-image-container">
801
- <img class="hfe-retina-img <?php echo $class_animation; ?>" src="<?php echo $image_url; ?>" srcset="<?php echo $image_url . ' 1x' . ',' . $retina_image_url . ' 2x'; ?>"/>
802
  </div>
803
  </div>
804
  <?php if ( $link ) : ?>
798
  ?>
799
  <div class="hfe-retina-image-set">
800
  <div class="hfe-retina-image-container">
801
+ <img class="hfe-retina-img <?php echo $class_animation; ?>" src="<?php echo $image_url; ?>" alt="<?php echo esc_attr( Control_Media::get_image_alt( $settings['retina_image'] ) ); ?>" srcset="<?php echo $image_url . ' 1x' . ',' . $retina_image_url . ' 2x'; ?>"/>
802
  </div>
803
  </div>
804
  <?php if ( $link ) : ?>
inc/widgets-manager/widgets/class-site-logo.php CHANGED
@@ -827,7 +827,7 @@ class Site_Logo extends Widget_Base {
827
  ?>
828
  <div class="hfe-site-logo-set">
829
  <div class="hfe-site-logo-container">
830
- <img class="hfe-site-logo-img <?php echo esc_attr( $class_animation ); ?>" src="<?php echo esc_url( $image_url ); ?>"/>
831
  </div>
832
  </div>
833
  <?php if ( $link ) : ?>
827
  ?>
828
  <div class="hfe-site-logo-set">
829
  <div class="hfe-site-logo-container">
830
+ <img class="hfe-site-logo-img <?php echo esc_attr( $class_animation ); ?>" src="<?php echo esc_url( $image_url ); ?>" alt="<?php echo esc_attr( Control_Media::get_image_alt( $settings['custom_image'] ) ); ?>"/>
831
  </div>
832
  </div>
833
  <?php if ( $link ) : ?>
languages/header-footer-elementor.pot CHANGED
@@ -2,10 +2,10 @@
2
  # This file is distributed under the same license as the Elementor - Header, Footer & Blocks package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Elementor - Header, Footer & Blocks 1.5.3\n"
6
  "Report-Msgid-Bugs-To: "
7
  "https://wordpress.org/support/plugin/header-footer-elementor\n"
8
- "POT-Creation-Date: 2020-08-13 09:59:44+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=utf-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
@@ -25,47 +25,44 @@ msgstr ""
25
  "X-Textdomain-Support: yes\n"
26
  "X-Generator: grunt-wp-i18n 1.0.3\n"
27
 
28
- #: admin/bsf-analytics/class-bsf-analytics.php:183
29
  #. translators: %s product name
30
  msgid ""
31
  "Want to help make <strong>%1s</strong> even more awesome? Allow us to "
32
  "collect non-sensitive diagnostic data and usage information. "
33
  msgstr ""
34
 
35
- #: admin/bsf-analytics/class-bsf-analytics.php:186
36
  msgid "This will be applicable for all sites from the network."
37
  msgstr ""
38
 
39
- #: admin/bsf-analytics/class-bsf-analytics.php:208
40
  #. translators: %s usage doc link
41
  msgid " Know More."
42
  msgstr ""
43
 
44
- #: admin/bsf-analytics/class-bsf-analytics.php:215
45
  msgid "Yes! Allow it"
46
  msgstr ""
47
 
48
- #: admin/bsf-analytics/class-bsf-analytics.php:223
49
  msgid "No Thanks"
50
  msgstr ""
51
 
52
- #: admin/bsf-analytics/class-bsf-analytics.php:292
53
- msgid "Every two days"
54
- msgstr ""
55
-
56
- #: admin/bsf-analytics/class-bsf-analytics.php:346
57
  msgid "Usage Tracking"
58
  msgstr ""
59
 
60
- #: admin/bsf-analytics/class-bsf-analytics.php:377
61
- msgid "Allow Brainstorm Force products to track non-sensitive usage tracking data."
 
62
  msgstr ""
63
 
64
- #: admin/bsf-analytics/class-bsf-analytics.php:380
65
  msgid " This will be applicable for all sites from the network."
66
  msgstr ""
67
 
68
- #: admin/bsf-analytics/class-bsf-analytics.php:385
69
  msgid "Learn More."
70
  msgstr ""
71
 
@@ -227,43 +224,43 @@ msgstr ""
227
  msgid "Template %1$s is already assigned to the location %2$s"
228
  msgstr ""
229
 
230
- #: inc/class-header-footer-elementor.php:148
231
  msgid ""
232
  "Hello! Seems like you have used Elementor - Header, Footer & Blocks to "
233
  "build this website — Thanks a ton!"
234
  msgstr ""
235
 
236
- #: inc/class-header-footer-elementor.php:149
237
  msgid ""
238
  "Could you please do us a BIG favor and give it a 5-star rating on "
239
  "WordPress? This would boost our motivation and help other users make a "
240
  "comfortable decision while choosing the Elementor - Header, Footer & Blocks."
241
  msgstr ""
242
 
243
- #: inc/class-header-footer-elementor.php:151
244
  msgid "Ok, you deserve it"
245
  msgstr ""
246
 
247
- #: inc/class-header-footer-elementor.php:153
248
  msgid "Nope, maybe later"
249
  msgstr ""
250
 
251
- #: inc/class-header-footer-elementor.php:154
252
  msgid "I already did"
253
  msgstr ""
254
 
255
- #: inc/class-header-footer-elementor.php:189
256
  #. translators: %s: html tags
257
  msgid ""
258
  "The %1$sElementor - Header Footer and Blocks%2$s plugin requires "
259
  "%1$sElementor%2$s plugin installed & activated."
260
  msgstr ""
261
 
262
- #: inc/class-header-footer-elementor.php:196
263
  msgid "Activate Elementor"
264
  msgstr ""
265
 
266
- #: inc/class-header-footer-elementor.php:201
267
  msgid "Install Elementor"
268
  msgstr ""
269
 
@@ -457,7 +454,7 @@ msgid "Custom"
457
  msgstr ""
458
 
459
  #: inc/widgets-manager/widgets/class-cart.php:130
460
- #: inc/widgets-manager/widgets/class-navigation-menu.php:546
461
  #: inc/widgets-manager/widgets/class-page-title.php:351
462
  #: inc/widgets-manager/widgets/class-search-button.php:134
463
  #: inc/widgets-manager/widgets/class-search-button.php:758
@@ -485,9 +482,9 @@ msgid "Items Count"
485
  msgstr ""
486
 
487
  #: inc/widgets-manager/widgets/class-cart.php:151
488
- #: inc/widgets-manager/widgets/class-navigation-menu.php:462
489
- #: inc/widgets-manager/widgets/class-navigation-menu.php:794
490
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1395
491
  #: inc/widgets-manager/widgets/class-page-title.php:181
492
  #: inc/widgets-manager/widgets/class-retina.php:185
493
  #: inc/widgets-manager/widgets/class-retina.php:216
@@ -510,7 +507,7 @@ msgstr ""
510
  #: inc/widgets-manager/widgets/class-cart.php:167
511
  #: inc/widgets-manager/widgets/class-cart.php:183
512
  #: inc/widgets-manager/widgets/class-navigation-menu.php:239
513
- #: inc/widgets-manager/widgets/class-navigation-menu.php:514
514
  #: inc/widgets-manager/widgets/class-site-logo.php:126
515
  #: inc/widgets-manager/widgets/class-site-logo.php:191
516
  #: inc/widgets-manager/widgets/class-site-logo.php:253
@@ -520,7 +517,7 @@ msgstr ""
520
  #: inc/widgets-manager/widgets/class-cart.php:168
521
  #: inc/widgets-manager/widgets/class-cart.php:184
522
  #: inc/widgets-manager/widgets/class-navigation-menu.php:240
523
- #: inc/widgets-manager/widgets/class-navigation-menu.php:515
524
  #: inc/widgets-manager/widgets/class-site-logo.php:127
525
  #: inc/widgets-manager/widgets/class-site-logo.php:190
526
  #: inc/widgets-manager/widgets/class-site-logo.php:254
@@ -538,7 +535,7 @@ msgstr ""
538
  #: inc/widgets-manager/widgets/class-cart.php:198
539
  #: inc/widgets-manager/widgets/class-copyright.php:130
540
  #: inc/widgets-manager/widgets/class-navigation-menu.php:274
541
- #: inc/widgets-manager/widgets/class-navigation-menu.php:475
542
  #: inc/widgets-manager/widgets/class-page-title.php:242
543
  #: inc/widgets-manager/widgets/class-retina.php:156
544
  #: inc/widgets-manager/widgets/class-site-logo.php:161
@@ -553,7 +550,7 @@ msgstr ""
553
  #: inc/widgets-manager/widgets/class-navigation-menu.php:309
554
  #: inc/widgets-manager/widgets/class-navigation-menu.php:344
555
  #: inc/widgets-manager/widgets/class-navigation-menu.php:380
556
- #: inc/widgets-manager/widgets/class-navigation-menu.php:479
557
  #: inc/widgets-manager/widgets/class-page-title.php:246
558
  #: inc/widgets-manager/widgets/class-retina.php:160
559
  #: inc/widgets-manager/widgets/class-site-logo.php:165
@@ -567,7 +564,7 @@ msgstr ""
567
  #: inc/widgets-manager/widgets/class-navigation-menu.php:282
568
  #: inc/widgets-manager/widgets/class-navigation-menu.php:348
569
  #: inc/widgets-manager/widgets/class-navigation-menu.php:384
570
- #: inc/widgets-manager/widgets/class-navigation-menu.php:483
571
  #: inc/widgets-manager/widgets/class-page-title.php:250
572
  #: inc/widgets-manager/widgets/class-retina.php:164
573
  #: inc/widgets-manager/widgets/class-site-logo.php:169
@@ -582,7 +579,7 @@ msgstr ""
582
  #: inc/widgets-manager/widgets/class-navigation-menu.php:310
583
  #: inc/widgets-manager/widgets/class-navigation-menu.php:352
584
  #: inc/widgets-manager/widgets/class-navigation-menu.php:388
585
- #: inc/widgets-manager/widgets/class-navigation-menu.php:487
586
  #: inc/widgets-manager/widgets/class-page-title.php:254
587
  #: inc/widgets-manager/widgets/class-retina.php:168
588
  #: inc/widgets-manager/widgets/class-site-logo.php:173
@@ -600,8 +597,8 @@ msgid "Size"
600
  msgstr ""
601
 
602
  #: inc/widgets-manager/widgets/class-cart.php:271
603
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1428
604
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1550
605
  #: inc/widgets-manager/widgets/class-retina.php:348
606
  #: inc/widgets-manager/widgets/class-search-button.php:346
607
  #: inc/widgets-manager/widgets/class-search-button.php:580
@@ -610,9 +607,9 @@ msgid "Border Width"
610
  msgstr ""
611
 
612
  #: inc/widgets-manager/widgets/class-cart.php:290
613
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1255
614
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1566
615
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1697
616
  #: inc/widgets-manager/widgets/class-retina.php:389
617
  #: inc/widgets-manager/widgets/class-search-button.php:371
618
  #: inc/widgets-manager/widgets/class-search-button.php:603
@@ -621,17 +618,17 @@ msgid "Border Radius"
621
  msgstr ""
622
 
623
  #: inc/widgets-manager/widgets/class-cart.php:310
624
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1637
625
  #: inc/widgets-manager/widgets/class-retina.php:573
626
  #: inc/widgets-manager/widgets/class-site-logo.php:615
627
  msgid "Padding"
628
  msgstr ""
629
 
630
  #: inc/widgets-manager/widgets/class-cart.php:327
631
- #: inc/widgets-manager/widgets/class-navigation-menu.php:893
632
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1099
633
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1465
634
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1651
635
  #: inc/widgets-manager/widgets/class-page-title.php:326
636
  #: inc/widgets-manager/widgets/class-retina.php:414
637
  #: inc/widgets-manager/widgets/class-search-button.php:228
@@ -647,14 +644,14 @@ msgstr ""
647
  #: inc/widgets-manager/widgets/class-cart.php:390
648
  #: inc/widgets-manager/widgets/class-cart.php:499
649
  #: inc/widgets-manager/widgets/class-copyright.php:155
650
- #: inc/widgets-manager/widgets/class-navigation-menu.php:900
651
- #: inc/widgets-manager/widgets/class-navigation-menu.php:940
652
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1010
653
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1106
654
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1149
655
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1192
656
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1658
657
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1726
658
  #: inc/widgets-manager/widgets/class-retina.php:529
659
  #: inc/widgets-manager/widgets/class-search-button.php:238
660
  #: inc/widgets-manager/widgets/class-search-button.php:408
@@ -676,17 +673,17 @@ msgstr ""
676
  #: inc/widgets-manager/widgets/class-cart.php:359
677
  #: inc/widgets-manager/widgets/class-cart.php:415
678
  #: inc/widgets-manager/widgets/class-cart.php:513
679
- #: inc/widgets-manager/widgets/class-navigation-menu.php:775
680
- #: inc/widgets-manager/widgets/class-navigation-menu.php:916
681
- #: inc/widgets-manager/widgets/class-navigation-menu.php:959
682
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1023
683
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1123
684
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1166
685
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1209
686
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1484
687
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1517
688
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1671
689
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1738
690
  #: inc/widgets-manager/widgets/class-retina.php:545
691
  #: inc/widgets-manager/widgets/class-search-button.php:275
692
  #: inc/widgets-manager/widgets/class-search-button.php:441
@@ -700,7 +697,7 @@ msgstr ""
700
 
701
  #: inc/widgets-manager/widgets/class-cart.php:370
702
  #: inc/widgets-manager/widgets/class-cart.php:426
703
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1411
704
  #: inc/widgets-manager/widgets/class-retina.php:370
705
  #: inc/widgets-manager/widgets/class-search-button.php:324
706
  #: inc/widgets-manager/widgets/class-search-button.php:474
@@ -710,10 +707,10 @@ msgid "Border Color"
710
  msgstr ""
711
 
712
  #: inc/widgets-manager/widgets/class-cart.php:383
713
- #: inc/widgets-manager/widgets/class-navigation-menu.php:933
714
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1142
715
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1497
716
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1719
717
  #: inc/widgets-manager/widgets/class-retina.php:449
718
  #: inc/widgets-manager/widgets/class-search-button.php:675
719
  #: inc/widgets-manager/widgets/class-search-button.php:791
@@ -723,7 +720,7 @@ msgid "Hover"
723
  msgstr ""
724
 
725
  #: inc/widgets-manager/widgets/class-cart.php:440
726
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1532
727
  #: inc/widgets-manager/widgets/class-search-button.php:708
728
  #: inc/widgets-manager/widgets/class-search-button.php:813
729
  msgid "Icon Size"
@@ -803,7 +800,7 @@ msgid "Last Menu Item"
803
  msgstr ""
804
 
805
  #: inc/widgets-manager/widgets/class-navigation-menu.php:228
806
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1617
807
  #: inc/widgets-manager/widgets/class-search-button.php:629
808
  msgid "Button"
809
  msgstr ""
@@ -889,144 +886,160 @@ msgstr ""
889
  msgid "Slide Up"
890
  msgstr ""
891
 
892
- #: inc/widgets-manager/widgets/class-navigation-menu.php:445
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
893
  msgid "Responsive"
894
  msgstr ""
895
 
896
- #: inc/widgets-manager/widgets/class-navigation-menu.php:456
897
  msgid "Breakpoint"
898
  msgstr ""
899
 
900
- #: inc/widgets-manager/widgets/class-navigation-menu.php:460
901
  msgid "Mobile (768px >)"
902
  msgstr ""
903
 
904
- #: inc/widgets-manager/widgets/class-navigation-menu.php:461
905
  msgid "Tablet (1025px >)"
906
  msgstr ""
907
 
908
- #: inc/widgets-manager/widgets/class-navigation-menu.php:492
909
  msgid "This is the alignement of menu icon on selected responsive breakpoints."
910
  msgstr ""
911
 
912
- #: inc/widgets-manager/widgets/class-navigation-menu.php:511
913
  msgid "Full Width"
914
  msgstr ""
915
 
916
- #: inc/widgets-manager/widgets/class-navigation-menu.php:512
917
  msgid "Enable this option to stretch the Sub Menu to Full Width."
918
  msgstr ""
919
 
920
- #: inc/widgets-manager/widgets/class-navigation-menu.php:530
921
  msgid "Menu Icon"
922
  msgstr ""
923
 
924
- #: inc/widgets-manager/widgets/class-navigation-menu.php:561
925
- #: inc/widgets-manager/widgets/class-navigation-menu.php:577
926
  #: inc/widgets-manager/widgets/class-search-button.php:837
927
  msgid "Close Icon"
928
  msgstr ""
929
 
930
- #: inc/widgets-manager/widgets/class-navigation-menu.php:602
931
  msgid "Main Menu"
932
  msgstr ""
933
 
934
- #: inc/widgets-manager/widgets/class-navigation-menu.php:613
935
  msgid "Flyout Box Width"
936
  msgstr ""
937
 
938
- #: inc/widgets-manager/widgets/class-navigation-menu.php:640
939
  msgid "Flyout Box Padding"
940
  msgstr ""
941
 
942
- #: inc/widgets-manager/widgets/class-navigation-menu.php:663
943
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1313
944
  msgid "Horizontal Padding"
945
  msgstr ""
946
 
947
- #: inc/widgets-manager/widgets/class-navigation-menu.php:688
948
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1335
949
  msgid "Vertical Padding"
950
  msgstr ""
951
 
952
- #: inc/widgets-manager/widgets/class-navigation-menu.php:709
953
  msgid "Space Between"
954
  msgstr ""
955
 
956
- #: inc/widgets-manager/widgets/class-navigation-menu.php:735
957
  msgid "Row Spacing"
958
  msgstr ""
959
 
960
- #: inc/widgets-manager/widgets/class-navigation-menu.php:755
961
  msgid "Menu Item Top Spacing"
962
  msgstr ""
963
 
964
- #: inc/widgets-manager/widgets/class-navigation-menu.php:790
965
  msgid "Link Hover Effect"
966
  msgstr ""
967
 
968
- #: inc/widgets-manager/widgets/class-navigation-menu.php:795
969
  msgid "Underline"
970
  msgstr ""
971
 
972
- #: inc/widgets-manager/widgets/class-navigation-menu.php:796
973
  msgid "Overline"
974
  msgstr ""
975
 
976
- #: inc/widgets-manager/widgets/class-navigation-menu.php:797
977
  msgid "Double Line"
978
  msgstr ""
979
 
980
- #: inc/widgets-manager/widgets/class-navigation-menu.php:798
981
  msgid "Framed"
982
  msgstr ""
983
 
984
- #: inc/widgets-manager/widgets/class-navigation-menu.php:799
985
  msgid "Text"
986
  msgstr ""
987
 
988
- #: inc/widgets-manager/widgets/class-navigation-menu.php:810
989
- #: inc/widgets-manager/widgets/class-navigation-menu.php:852
990
  msgid "Animation"
991
  msgstr ""
992
 
993
- #: inc/widgets-manager/widgets/class-navigation-menu.php:831
994
  msgid "Frame Animation"
995
  msgstr ""
996
 
997
- #: inc/widgets-manager/widgets/class-navigation-menu.php:977
998
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1039
999
  msgid "Link Hover Effect Color"
1000
  msgstr ""
1001
 
1002
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1003
1003
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1185
1004
  msgid "Active"
1005
  msgstr ""
1006
 
1007
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1074
1008
  msgid "Dropdown"
1009
  msgstr ""
1010
 
1011
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1082
1012
  msgid ""
1013
  "<b>Note:</b> On desktop, below style options will apply to the submenu. On "
1014
  "mobile, this will apply to the entire menu."
1015
  msgstr ""
1016
 
1017
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1289
1018
  msgid "Dropdown Width (px)"
1019
  msgstr ""
1020
 
1021
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1360
1022
  msgid "Top Distance"
1023
  msgstr ""
1024
 
1025
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1381
1026
  msgid "Divider"
1027
  msgstr ""
1028
 
1029
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1390
1030
  #: inc/widgets-manager/widgets/class-retina.php:329
1031
  #: inc/widgets-manager/widgets/class-search-button.php:301
1032
  #: inc/widgets-manager/widgets/class-search-button.php:541
@@ -1034,7 +1047,7 @@ msgstr ""
1034
  msgid "Border Style"
1035
  msgstr ""
1036
 
1037
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1396
1038
  #: inc/widgets-manager/widgets/class-retina.php:335
1039
  #: inc/widgets-manager/widgets/class-search-button.php:307
1040
  #: inc/widgets-manager/widgets/class-search-button.php:547
@@ -1042,7 +1055,7 @@ msgstr ""
1042
  msgid "Solid"
1043
  msgstr ""
1044
 
1045
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1397
1046
  #: inc/widgets-manager/widgets/class-retina.php:336
1047
  #: inc/widgets-manager/widgets/class-search-button.php:308
1048
  #: inc/widgets-manager/widgets/class-search-button.php:548
@@ -1050,7 +1063,7 @@ msgstr ""
1050
  msgid "Double"
1051
  msgstr ""
1052
 
1053
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1398
1054
  #: inc/widgets-manager/widgets/class-retina.php:337
1055
  #: inc/widgets-manager/widgets/class-search-button.php:309
1056
  #: inc/widgets-manager/widgets/class-search-button.php:549
@@ -1058,7 +1071,7 @@ msgstr ""
1058
  msgid "Dotted"
1059
  msgstr ""
1060
 
1061
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1399
1062
  #: inc/widgets-manager/widgets/class-retina.php:338
1063
  #: inc/widgets-manager/widgets/class-search-button.php:310
1064
  #: inc/widgets-manager/widgets/class-search-button.php:550
@@ -1066,12 +1079,12 @@ msgstr ""
1066
  msgid "Dashed"
1067
  msgstr ""
1068
 
1069
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1455
1070
  msgid "Menu Trigger & Close Icon"
1071
  msgstr ""
1072
 
1073
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1472
1074
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1504
1075
  #: inc/widgets-manager/widgets/class-page-title.php:298
1076
  #: inc/widgets-manager/widgets/class-search-button.php:778
1077
  #: inc/widgets-manager/widgets/class-search-button.php:798
@@ -1082,23 +1095,23 @@ msgstr ""
1082
  msgid "Color"
1083
  msgstr ""
1084
 
1085
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1578
1086
  msgid "Close Icon Color"
1087
  msgstr ""
1088
 
1089
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1596
1090
  msgid "Close Icon Size"
1091
  msgstr ""
1092
 
1093
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1629
1094
  msgid "Typography"
1095
  msgstr ""
1096
 
1097
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1689
1098
  msgid "Border"
1099
  msgstr ""
1100
 
1101
- #: inc/widgets-manager/widgets/class-navigation-menu.php:1755
1102
  msgid "Border Hover Color"
1103
  msgstr ""
1104
 
2
  # This file is distributed under the same license as the Elementor - Header, Footer & Blocks package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Elementor - Header, Footer & Blocks 1.5.4\n"
6
  "Report-Msgid-Bugs-To: "
7
  "https://wordpress.org/support/plugin/header-footer-elementor\n"
8
+ "POT-Creation-Date: 2020-12-14 05:04:12+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=utf-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
25
  "X-Textdomain-Support: yes\n"
26
  "X-Generator: grunt-wp-i18n 1.0.3\n"
27
 
28
+ #: admin/bsf-analytics/class-bsf-analytics.php:216
29
  #. translators: %s product name
30
  msgid ""
31
  "Want to help make <strong>%1s</strong> even more awesome? Allow us to "
32
  "collect non-sensitive diagnostic data and usage information. "
33
  msgstr ""
34
 
35
+ #: admin/bsf-analytics/class-bsf-analytics.php:219
36
  msgid "This will be applicable for all sites from the network."
37
  msgstr ""
38
 
39
+ #: admin/bsf-analytics/class-bsf-analytics.php:243
40
  #. translators: %s usage doc link
41
  msgid " Know More."
42
  msgstr ""
43
 
44
+ #: admin/bsf-analytics/class-bsf-analytics.php:251
45
  msgid "Yes! Allow it"
46
  msgstr ""
47
 
48
+ #: admin/bsf-analytics/class-bsf-analytics.php:260
49
  msgid "No Thanks"
50
  msgstr ""
51
 
52
+ #: admin/bsf-analytics/class-bsf-analytics.php:364
 
 
 
 
53
  msgid "Usage Tracking"
54
  msgstr ""
55
 
56
+ #: admin/bsf-analytics/class-bsf-analytics.php:408
57
+ #. translators: %s Product title
58
+ msgid "Allow %s products to track non-sensitive usage tracking data."
59
  msgstr ""
60
 
61
+ #: admin/bsf-analytics/class-bsf-analytics.php:411
62
  msgid " This will be applicable for all sites from the network."
63
  msgstr ""
64
 
65
+ #: admin/bsf-analytics/class-bsf-analytics.php:416
66
  msgid "Learn More."
67
  msgstr ""
68
 
224
  msgid "Template %1$s is already assigned to the location %2$s"
225
  msgstr ""
226
 
227
+ #: inc/class-header-footer-elementor.php:163
228
  msgid ""
229
  "Hello! Seems like you have used Elementor - Header, Footer & Blocks to "
230
  "build this website — Thanks a ton!"
231
  msgstr ""
232
 
233
+ #: inc/class-header-footer-elementor.php:164
234
  msgid ""
235
  "Could you please do us a BIG favor and give it a 5-star rating on "
236
  "WordPress? This would boost our motivation and help other users make a "
237
  "comfortable decision while choosing the Elementor - Header, Footer & Blocks."
238
  msgstr ""
239
 
240
+ #: inc/class-header-footer-elementor.php:166
241
  msgid "Ok, you deserve it"
242
  msgstr ""
243
 
244
+ #: inc/class-header-footer-elementor.php:168
245
  msgid "Nope, maybe later"
246
  msgstr ""
247
 
248
+ #: inc/class-header-footer-elementor.php:169
249
  msgid "I already did"
250
  msgstr ""
251
 
252
+ #: inc/class-header-footer-elementor.php:204
253
  #. translators: %s: html tags
254
  msgid ""
255
  "The %1$sElementor - Header Footer and Blocks%2$s plugin requires "
256
  "%1$sElementor%2$s plugin installed & activated."
257
  msgstr ""
258
 
259
+ #: inc/class-header-footer-elementor.php:211
260
  msgid "Activate Elementor"
261
  msgstr ""
262
 
263
+ #: inc/class-header-footer-elementor.php:216
264
  msgid "Install Elementor"
265
  msgstr ""
266
 
454
  msgstr ""
455
 
456
  #: inc/widgets-manager/widgets/class-cart.php:130
457
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:561
458
  #: inc/widgets-manager/widgets/class-page-title.php:351
459
  #: inc/widgets-manager/widgets/class-search-button.php:134
460
  #: inc/widgets-manager/widgets/class-search-button.php:758
482
  msgstr ""
483
 
484
  #: inc/widgets-manager/widgets/class-cart.php:151
485
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:477
486
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:809
487
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1410
488
  #: inc/widgets-manager/widgets/class-page-title.php:181
489
  #: inc/widgets-manager/widgets/class-retina.php:185
490
  #: inc/widgets-manager/widgets/class-retina.php:216
507
  #: inc/widgets-manager/widgets/class-cart.php:167
508
  #: inc/widgets-manager/widgets/class-cart.php:183
509
  #: inc/widgets-manager/widgets/class-navigation-menu.php:239
510
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:529
511
  #: inc/widgets-manager/widgets/class-site-logo.php:126
512
  #: inc/widgets-manager/widgets/class-site-logo.php:191
513
  #: inc/widgets-manager/widgets/class-site-logo.php:253
517
  #: inc/widgets-manager/widgets/class-cart.php:168
518
  #: inc/widgets-manager/widgets/class-cart.php:184
519
  #: inc/widgets-manager/widgets/class-navigation-menu.php:240
520
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:530
521
  #: inc/widgets-manager/widgets/class-site-logo.php:127
522
  #: inc/widgets-manager/widgets/class-site-logo.php:190
523
  #: inc/widgets-manager/widgets/class-site-logo.php:254
535
  #: inc/widgets-manager/widgets/class-cart.php:198
536
  #: inc/widgets-manager/widgets/class-copyright.php:130
537
  #: inc/widgets-manager/widgets/class-navigation-menu.php:274
538
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:490
539
  #: inc/widgets-manager/widgets/class-page-title.php:242
540
  #: inc/widgets-manager/widgets/class-retina.php:156
541
  #: inc/widgets-manager/widgets/class-site-logo.php:161
550
  #: inc/widgets-manager/widgets/class-navigation-menu.php:309
551
  #: inc/widgets-manager/widgets/class-navigation-menu.php:344
552
  #: inc/widgets-manager/widgets/class-navigation-menu.php:380
553
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:494
554
  #: inc/widgets-manager/widgets/class-page-title.php:246
555
  #: inc/widgets-manager/widgets/class-retina.php:160
556
  #: inc/widgets-manager/widgets/class-site-logo.php:165
564
  #: inc/widgets-manager/widgets/class-navigation-menu.php:282
565
  #: inc/widgets-manager/widgets/class-navigation-menu.php:348
566
  #: inc/widgets-manager/widgets/class-navigation-menu.php:384
567
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:498
568
  #: inc/widgets-manager/widgets/class-page-title.php:250
569
  #: inc/widgets-manager/widgets/class-retina.php:164
570
  #: inc/widgets-manager/widgets/class-site-logo.php:169
579
  #: inc/widgets-manager/widgets/class-navigation-menu.php:310
580
  #: inc/widgets-manager/widgets/class-navigation-menu.php:352
581
  #: inc/widgets-manager/widgets/class-navigation-menu.php:388
582
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:502
583
  #: inc/widgets-manager/widgets/class-page-title.php:254
584
  #: inc/widgets-manager/widgets/class-retina.php:168
585
  #: inc/widgets-manager/widgets/class-site-logo.php:173
597
  msgstr ""
598
 
599
  #: inc/widgets-manager/widgets/class-cart.php:271
600
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1443
601
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1565
602
  #: inc/widgets-manager/widgets/class-retina.php:348
603
  #: inc/widgets-manager/widgets/class-search-button.php:346
604
  #: inc/widgets-manager/widgets/class-search-button.php:580
607
  msgstr ""
608
 
609
  #: inc/widgets-manager/widgets/class-cart.php:290
610
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1270
611
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1581
612
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1712
613
  #: inc/widgets-manager/widgets/class-retina.php:389
614
  #: inc/widgets-manager/widgets/class-search-button.php:371
615
  #: inc/widgets-manager/widgets/class-search-button.php:603
618
  msgstr ""
619
 
620
  #: inc/widgets-manager/widgets/class-cart.php:310
621
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1652
622
  #: inc/widgets-manager/widgets/class-retina.php:573
623
  #: inc/widgets-manager/widgets/class-site-logo.php:615
624
  msgid "Padding"
625
  msgstr ""
626
 
627
  #: inc/widgets-manager/widgets/class-cart.php:327
628
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:908
629
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1114
630
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1480
631
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1666
632
  #: inc/widgets-manager/widgets/class-page-title.php:326
633
  #: inc/widgets-manager/widgets/class-retina.php:414
634
  #: inc/widgets-manager/widgets/class-search-button.php:228
644
  #: inc/widgets-manager/widgets/class-cart.php:390
645
  #: inc/widgets-manager/widgets/class-cart.php:499
646
  #: inc/widgets-manager/widgets/class-copyright.php:155
647
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:915
648
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:955
649
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1025
650
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1121
651
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1164
652
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1207
653
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1673
654
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1741
655
  #: inc/widgets-manager/widgets/class-retina.php:529
656
  #: inc/widgets-manager/widgets/class-search-button.php:238
657
  #: inc/widgets-manager/widgets/class-search-button.php:408
673
  #: inc/widgets-manager/widgets/class-cart.php:359
674
  #: inc/widgets-manager/widgets/class-cart.php:415
675
  #: inc/widgets-manager/widgets/class-cart.php:513
676
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:790
677
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:931
678
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:974
679
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1038
680
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1138
681
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1181
682
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1224
683
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1499
684
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1532
685
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1686
686
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1753
687
  #: inc/widgets-manager/widgets/class-retina.php:545
688
  #: inc/widgets-manager/widgets/class-search-button.php:275
689
  #: inc/widgets-manager/widgets/class-search-button.php:441
697
 
698
  #: inc/widgets-manager/widgets/class-cart.php:370
699
  #: inc/widgets-manager/widgets/class-cart.php:426
700
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1426
701
  #: inc/widgets-manager/widgets/class-retina.php:370
702
  #: inc/widgets-manager/widgets/class-search-button.php:324
703
  #: inc/widgets-manager/widgets/class-search-button.php:474
707
  msgstr ""
708
 
709
  #: inc/widgets-manager/widgets/class-cart.php:383
710
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:948
711
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1157
712
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1512
713
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1734
714
  #: inc/widgets-manager/widgets/class-retina.php:449
715
  #: inc/widgets-manager/widgets/class-search-button.php:675
716
  #: inc/widgets-manager/widgets/class-search-button.php:791
720
  msgstr ""
721
 
722
  #: inc/widgets-manager/widgets/class-cart.php:440
723
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1547
724
  #: inc/widgets-manager/widgets/class-search-button.php:708
725
  #: inc/widgets-manager/widgets/class-search-button.php:813
726
  msgid "Icon Size"
800
  msgstr ""
801
 
802
  #: inc/widgets-manager/widgets/class-navigation-menu.php:228
803
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1632
804
  #: inc/widgets-manager/widgets/class-search-button.php:629
805
  msgid "Button"
806
  msgstr ""
886
  msgid "Slide Up"
887
  msgstr ""
888
 
889
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:444
890
+ msgid "Action On Menu Click"
891
+ msgstr ""
892
+
893
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:447
894
+ msgid "For Horizontal layout, this will affect on the selected breakpoint"
895
+ msgstr ""
896
+
897
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:449
898
+ msgid "Open Submenu"
899
+ msgstr ""
900
+
901
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:450
902
+ msgid "Redirect To Self Link"
903
+ msgstr ""
904
+
905
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:460
906
  msgid "Responsive"
907
  msgstr ""
908
 
909
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:471
910
  msgid "Breakpoint"
911
  msgstr ""
912
 
913
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:475
914
  msgid "Mobile (768px >)"
915
  msgstr ""
916
 
917
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:476
918
  msgid "Tablet (1025px >)"
919
  msgstr ""
920
 
921
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:507
922
  msgid "This is the alignement of menu icon on selected responsive breakpoints."
923
  msgstr ""
924
 
925
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:526
926
  msgid "Full Width"
927
  msgstr ""
928
 
929
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:527
930
  msgid "Enable this option to stretch the Sub Menu to Full Width."
931
  msgstr ""
932
 
933
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:545
934
  msgid "Menu Icon"
935
  msgstr ""
936
 
937
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:576
938
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:592
939
  #: inc/widgets-manager/widgets/class-search-button.php:837
940
  msgid "Close Icon"
941
  msgstr ""
942
 
943
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:617
944
  msgid "Main Menu"
945
  msgstr ""
946
 
947
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:628
948
  msgid "Flyout Box Width"
949
  msgstr ""
950
 
951
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:655
952
  msgid "Flyout Box Padding"
953
  msgstr ""
954
 
955
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:678
956
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1328
957
  msgid "Horizontal Padding"
958
  msgstr ""
959
 
960
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:703
961
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1350
962
  msgid "Vertical Padding"
963
  msgstr ""
964
 
965
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:724
966
  msgid "Space Between"
967
  msgstr ""
968
 
969
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:750
970
  msgid "Row Spacing"
971
  msgstr ""
972
 
973
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:770
974
  msgid "Menu Item Top Spacing"
975
  msgstr ""
976
 
977
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:805
978
  msgid "Link Hover Effect"
979
  msgstr ""
980
 
981
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:810
982
  msgid "Underline"
983
  msgstr ""
984
 
985
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:811
986
  msgid "Overline"
987
  msgstr ""
988
 
989
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:812
990
  msgid "Double Line"
991
  msgstr ""
992
 
993
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:813
994
  msgid "Framed"
995
  msgstr ""
996
 
997
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:814
998
  msgid "Text"
999
  msgstr ""
1000
 
1001
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:825
1002
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:867
1003
  msgid "Animation"
1004
  msgstr ""
1005
 
1006
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:846
1007
  msgid "Frame Animation"
1008
  msgstr ""
1009
 
1010
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:992
1011
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1054
1012
  msgid "Link Hover Effect Color"
1013
  msgstr ""
1014
 
1015
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1018
1016
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1200
1017
  msgid "Active"
1018
  msgstr ""
1019
 
1020
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1089
1021
  msgid "Dropdown"
1022
  msgstr ""
1023
 
1024
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1097
1025
  msgid ""
1026
  "<b>Note:</b> On desktop, below style options will apply to the submenu. On "
1027
  "mobile, this will apply to the entire menu."
1028
  msgstr ""
1029
 
1030
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1304
1031
  msgid "Dropdown Width (px)"
1032
  msgstr ""
1033
 
1034
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1375
1035
  msgid "Top Distance"
1036
  msgstr ""
1037
 
1038
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1396
1039
  msgid "Divider"
1040
  msgstr ""
1041
 
1042
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1405
1043
  #: inc/widgets-manager/widgets/class-retina.php:329
1044
  #: inc/widgets-manager/widgets/class-search-button.php:301
1045
  #: inc/widgets-manager/widgets/class-search-button.php:541
1047
  msgid "Border Style"
1048
  msgstr ""
1049
 
1050
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1411
1051
  #: inc/widgets-manager/widgets/class-retina.php:335
1052
  #: inc/widgets-manager/widgets/class-search-button.php:307
1053
  #: inc/widgets-manager/widgets/class-search-button.php:547
1055
  msgid "Solid"
1056
  msgstr ""
1057
 
1058
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1412
1059
  #: inc/widgets-manager/widgets/class-retina.php:336
1060
  #: inc/widgets-manager/widgets/class-search-button.php:308
1061
  #: inc/widgets-manager/widgets/class-search-button.php:548
1063
  msgid "Double"
1064
  msgstr ""
1065
 
1066
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1413
1067
  #: inc/widgets-manager/widgets/class-retina.php:337
1068
  #: inc/widgets-manager/widgets/class-search-button.php:309
1069
  #: inc/widgets-manager/widgets/class-search-button.php:549
1071
  msgid "Dotted"
1072
  msgstr ""
1073
 
1074
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1414
1075
  #: inc/widgets-manager/widgets/class-retina.php:338
1076
  #: inc/widgets-manager/widgets/class-search-button.php:310
1077
  #: inc/widgets-manager/widgets/class-search-button.php:550
1079
  msgid "Dashed"
1080
  msgstr ""
1081
 
1082
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1470
1083
  msgid "Menu Trigger & Close Icon"
1084
  msgstr ""
1085
 
1086
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1487
1087
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1519
1088
  #: inc/widgets-manager/widgets/class-page-title.php:298
1089
  #: inc/widgets-manager/widgets/class-search-button.php:778
1090
  #: inc/widgets-manager/widgets/class-search-button.php:798
1095
  msgid "Color"
1096
  msgstr ""
1097
 
1098
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1593
1099
  msgid "Close Icon Color"
1100
  msgstr ""
1101
 
1102
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1611
1103
  msgid "Close Icon Size"
1104
  msgstr ""
1105
 
1106
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1644
1107
  msgid "Typography"
1108
  msgstr ""
1109
 
1110
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1704
1111
  msgid "Border"
1112
  msgstr ""
1113
 
1114
+ #: inc/widgets-manager/widgets/class-navigation-menu.php:1770
1115
  msgid "Border Hover Color"
1116
  msgstr ""
1117
 
readme.txt CHANGED
@@ -4,8 +4,8 @@ Tags: elementor, header footer builder, header template, footer template, elemen
4
  Donate link: https://www.paypal.me/BrainstormForce
5
  Requires at least: 4.4
6
  Requires PHP: 5.4
7
- Tested up to: 5.5
8
- Stable tag: 1.5.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -137,6 +137,13 @@ This same applies when you are creating your Header/Footer using this plugin.
137
  5. Default widgets available with Elementor – Header, Footer & Blocks.
138
 
139
  == Changelog ==
 
 
 
 
 
 
 
140
 
141
  = 1.5.3 =
142
  - Fix: Polylang plugin conflicting issue with target rules.
4
  Donate link: https://www.paypal.me/BrainstormForce
5
  Requires at least: 4.4
6
  Requires PHP: 5.4
7
+ Tested up to: 5.6
8
+ Stable tag: 1.5.4
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
137
  5. Default widgets available with Elementor – Header, Footer & Blocks.
138
 
139
  == Changelog ==
140
+ = 1.5.4 =
141
+ - Improvement: Compatibility to PHP v8.0.
142
+ - Improvement: Improved compatibility with Astra theme.
143
+ - Improvement: Navigation Menu - Added option to toggle menu item.
144
+ - Fix: Added 'alt' attribute to the widgets containing images.
145
+ - Fix: Closed the missing HTML tag in footer in the global theme compatibility.
146
+ - Fix: Navigation Menu - Alignment option not working for the last menu item set as 'Button'.
147
 
148
  = 1.5.3 =
149
  - Fix: Polylang plugin conflicting issue with target rules.
themes/astra/class-hfe-astra-compat.php CHANGED
@@ -54,6 +54,11 @@ class HFE_Astra_Compat {
54
  */
55
  public function astra_setup_header() {
56
  remove_action( 'astra_header', 'astra_header_markup' );
 
 
 
 
 
57
  }
58
 
59
  /**
@@ -61,8 +66,12 @@ class HFE_Astra_Compat {
61
  */
62
  public function astra_setup_footer() {
63
  remove_action( 'astra_footer', 'astra_footer_markup' );
64
- }
65
 
 
 
 
 
 
66
  }
67
 
68
  HFE_Astra_Compat::instance();
54
  */
55
  public function astra_setup_header() {
56
  remove_action( 'astra_header', 'astra_header_markup' );
57
+
58
+ // Remove the new header builder action.
59
+ if ( class_exists( 'Astra_Builder_Helper' ) && Astra_Builder_Helper::$is_header_footer_builder_active ) {
60
+ remove_action( 'astra_header', [ Astra_Builder_Header::get_instance(), 'prepare_header_builder_markup' ] );
61
+ }
62
  }
63
 
64
  /**
66
  */
67
  public function astra_setup_footer() {
68
  remove_action( 'astra_footer', 'astra_footer_markup' );
 
69
 
70
+ // Remove the new footer builder action.
71
+ if ( class_exists( 'Astra_Builder_Helper' ) && Astra_Builder_Helper::$is_header_footer_builder_active ) {
72
+ remove_action( 'astra_footer', [ Astra_Builder_Footer::get_instance(), 'footer_markup' ] );
73
+ }
74
+ }
75
  }
76
 
77
  HFE_Astra_Compat::instance();
themes/default/hfe-footer.php CHANGED
@@ -10,6 +10,7 @@
10
 
11
  <?php do_action( 'hfe_footer_before' ); ?>
12
  <?php do_action( 'hfe_footer' ); ?>
 
13
  <?php wp_footer(); ?>
14
  </body>
15
  </html>
10
 
11
  <?php do_action( 'hfe_footer_before' ); ?>
12
  <?php do_action( 'hfe_footer' ); ?>
13
+ </div><!-- #page -->
14
  <?php wp_footer(); ?>
15
  </body>
16
  </html>