Yoast SEO - Version 11.9

Version Description

Download this release

Release Info

Developer Yoast
Plugin Icon 128x128 Yoast SEO
Version 11.9
Comparing to
See all releases

Code changes from version 11.8 to 11.9

Files changed (129) hide show
  1. admin/ajax.php +25 -19
  2. admin/ajax/class-recalculate-scores-ajax.php +2 -0
  3. admin/ajax/class-shortcode-filter.php +1 -0
  4. admin/class-admin-init.php +15 -23
  5. admin/class-bulk-description-editor-list-table.php +3 -0
  6. admin/class-bulk-editor-list-table.php +8 -3
  7. admin/class-bulk-title-editor-list-table.php +4 -1
  8. admin/class-export.php +29 -30
  9. admin/class-gutenberg-compatibility.php +2 -2
  10. admin/class-meta-columns.php +3 -1
  11. admin/class-option-tabs-formatter.php +1 -1
  12. admin/class-premium-upsell-admin-block.php +3 -2
  13. admin/class-social-admin.php +2 -2
  14. admin/class-yoast-alerts.php +2 -0
  15. admin/class-yoast-notification-center.php +1 -0
  16. admin/links/class-link-reindex-dashboard.php +7 -38
  17. admin/metabox/class-metabox-addon-section.php +0 -39
  18. admin/metabox/class-metabox-collapsibles-section.php +5 -1
  19. admin/metabox/class-metabox-section-additional.php +95 -0
  20. admin/metabox/class-metabox-section-react.php +11 -7
  21. admin/metabox/class-metabox.php +46 -12
  22. admin/notifiers/class-configuration-notifier.php +1 -1
  23. admin/taxonomy/class-taxonomy-metabox.php +22 -1
  24. admin/views/licenses.php +4 -4
  25. css/dist/{admin-global-1180-rtl.min.css → admin-global-1190-rtl.min.css} +0 -0
  26. css/dist/{admin-global-1180.min.css → admin-global-1190.min.css} +0 -0
  27. css/dist/{adminbar-1180-rtl.min.css → adminbar-1190-rtl.min.css} +0 -0
  28. css/dist/{adminbar-1180.min.css → adminbar-1190.min.css} +0 -0
  29. css/dist/{alerts-1180-rtl.min.css → alerts-1190-rtl.min.css} +0 -0
  30. css/dist/{alerts-1180.min.css → alerts-1190.min.css} +0 -0
  31. css/dist/{dashboard-1180-rtl.min.css → dashboard-1190-rtl.min.css} +0 -0
  32. css/dist/{dashboard-1180.min.css → dashboard-1190.min.css} +0 -0
  33. css/dist/{edit-page-1180-rtl.min.css → edit-page-1190-rtl.min.css} +0 -0
  34. css/dist/{edit-page-1180.min.css → edit-page-1190.min.css} +0 -0
  35. css/dist/{featured-image-1180-rtl.min.css → featured-image-1190-rtl.min.css} +0 -0
  36. css/dist/{featured-image-1180.min.css → featured-image-1190.min.css} +0 -0
  37. css/dist/{filter-explanation-1180-rtl.min.css → filter-explanation-1190-rtl.min.css} +0 -0
  38. css/dist/{filter-explanation-1180.min.css → filter-explanation-1190.min.css} +0 -0
  39. css/dist/{inside-editor-1180-rtl.min.css → inside-editor-1190-rtl.min.css} +0 -0
  40. css/dist/{inside-editor-1180.min.css → inside-editor-1190.min.css} +0 -0
  41. css/dist/{metabox-1180-rtl.min.css → metabox-1190-rtl.min.css} +0 -0
  42. css/dist/{metabox-1180.min.css → metabox-1190.min.css} +0 -0
  43. css/dist/{metabox-primary-category-1180-rtl.min.css → metabox-primary-category-1190-rtl.min.css} +0 -0
  44. css/dist/{metabox-primary-category-1180.min.css → metabox-primary-category-1190.min.css} +0 -0
  45. css/dist/{search-appearance-1180-rtl.min.css → search-appearance-1190-rtl.min.css} +0 -0
  46. css/dist/{search-appearance-1180.min.css → search-appearance-1190.min.css} +0 -0
  47. css/dist/{structured-data-blocks-1180-rtl.min.css → structured-data-blocks-1190-rtl.min.css} +0 -0
  48. css/dist/{structured-data-blocks-1180.min.css → structured-data-blocks-1190.min.css} +0 -0
  49. css/dist/{toggle-switch-1180-rtl.min.css → toggle-switch-1190-rtl.min.css} +0 -0
  50. css/dist/{toggle-switch-1180.min.css → toggle-switch-1190.min.css} +0 -0
  51. css/dist/{wpseo-dismissible-1180-rtl.min.css → wpseo-dismissible-1190-rtl.min.css} +0 -0
  52. css/dist/{wpseo-dismissible-1180.min.css → wpseo-dismissible-1190.min.css} +0 -0
  53. css/dist/{yoast-components-1180-rtl.min.css → yoast-components-1190-rtl.min.css} +0 -0
  54. css/dist/{yoast-components-1180.min.css → yoast-components-1190.min.css} +0 -0
  55. css/dist/{yoast-extensions-1180-rtl.min.css → yoast-extensions-1190-rtl.min.css} +0 -0
  56. css/dist/{yoast-extensions-1180.min.css → yoast-extensions-1190.min.css} +0 -0
  57. css/dist/{yst_plugin_tools-1180-rtl.min.css → yst_plugin_tools-1190-rtl.min.css} +0 -0
  58. css/dist/{yst_plugin_tools-1180.min.css → yst_plugin_tools-1190.min.css} +0 -0
  59. css/dist/{yst_seo_score-1180-rtl.min.css → yst_seo_score-1190-rtl.min.css} +0 -0
  60. css/dist/{yst_seo_score-1180.min.css → yst_seo_score-1190.min.css} +0 -0
  61. deprecated/class-metabox-addon-section.php +69 -0
  62. frontend/schema/class-schema-author.php +1 -7
  63. inc/class-wpseo-shortlinker.php +1 -1
  64. inc/class-wpseo-utils.php +149 -0
  65. js/dist/{analysis-1180.min.js → analysis-1190.min.js} +0 -0
  66. js/dist/{babel-polyfill-1180.min.js → babel-polyfill-1190.min.js} +0 -0
  67. js/dist/{commons-1180.min.js → commons-1190.min.js} +0 -0
  68. js/dist/{components-1180.min.js → components-1190.min.js} +0 -0
  69. js/dist/{configuration-wizard-1180.min.js → configuration-wizard-1190.min.js} +0 -0
  70. js/dist/{search-appearance-1180.min.js → search-appearance-1190.min.js} +0 -0
  71. js/dist/{styled-components-1180.min.js → styled-components-1190.min.js} +0 -0
  72. js/dist/{wp-apiFetch-1180.min.js → wp-apiFetch-1190.min.js} +0 -0
  73. js/dist/{wp-components-1180.min.js → wp-components-1190.min.js} +0 -0
  74. js/dist/{wp-compose-1180.min.js → wp-compose-1190.min.js} +0 -0
  75. js/dist/{wp-data-1180.min.js → wp-data-1190.min.js} +0 -0
  76. js/dist/{wp-element-1180.min.js → wp-element-1190.min.js} +0 -0
  77. js/dist/{wp-i18n-1180.min.js → wp-i18n-1190.min.js} +0 -0
  78. js/dist/{wp-richText-1180.min.js → wp-richText-1190.min.js} +0 -0
  79. js/dist/{wp-seo-admin-1180.min.js → wp-seo-admin-1190.min.js} +0 -0
  80. js/dist/{wp-seo-admin-global-1180.min.js → wp-seo-admin-global-1190.min.js} +0 -0
  81. js/dist/{wp-seo-admin-gsc-1180.min.js → wp-seo-admin-gsc-1190.min.js} +0 -0
  82. js/dist/{wp-seo-admin-media-1180.min.js → wp-seo-admin-media-1190.min.js} +0 -0
  83. js/dist/{wp-seo-analysis-worker-1180.min.js → wp-seo-analysis-worker-1190.min.js} +0 -0
  84. js/dist/{wp-seo-api-1180.min.js → wp-seo-api-1190.min.js} +0 -0
  85. js/dist/{wp-seo-bulk-editor-1180.min.js → wp-seo-bulk-editor-1190.min.js} +0 -0
  86. js/dist/{wp-seo-courses-overview-1180.min.js → wp-seo-courses-overview-1190.min.js} +0 -0
  87. js/dist/{wp-seo-dashboard-widget-1180.min.js → wp-seo-dashboard-widget-1190.min.js} +0 -0
  88. js/dist/{wp-seo-edit-page-1180.min.js → wp-seo-edit-page-1190.min.js} +0 -0
  89. js/dist/{wp-seo-featured-image-1180.min.js → wp-seo-featured-image-1190.min.js} +0 -0
  90. js/dist/{wp-seo-filter-explanation-1180.min.js → wp-seo-filter-explanation-1190.min.js} +0 -0
  91. js/dist/{wp-seo-help-center-1180.min.js → wp-seo-help-center-1190.min.js} +0 -0
  92. js/dist/{wp-seo-metabox-1180.min.js → wp-seo-metabox-1190.min.js} +0 -0
  93. js/dist/{wp-seo-metabox-category-1180.min.js → wp-seo-metabox-category-1190.min.js} +0 -0
  94. js/dist/{wp-seo-modal-1180.min.js → wp-seo-modal-1190.min.js} +0 -0
  95. js/dist/{wp-seo-network-admin-1180.min.js → wp-seo-network-admin-1190.min.js} +0 -0
  96. js/dist/{wp-seo-post-scraper-1180.min.js → wp-seo-post-scraper-1190.min.js} +1 -1
  97. js/dist/{wp-seo-quick-edit-handler-1180.min.js → wp-seo-quick-edit-handler-1190.min.js} +0 -0
  98. js/dist/{wp-seo-recalculate-1180.min.js → wp-seo-recalculate-1190.min.js} +0 -0
  99. js/dist/{wp-seo-reindex-links-1180.min.js → wp-seo-reindex-links-1190.min.js} +0 -0
  100. js/dist/{wp-seo-replacevar-plugin-1180.min.js → wp-seo-replacevar-plugin-1190.min.js} +0 -0
  101. js/dist/{wp-seo-shortcode-plugin-1180.min.js → wp-seo-shortcode-plugin-1190.min.js} +0 -0
  102. js/dist/{wp-seo-structured-data-blocks-1180.min.js → wp-seo-structured-data-blocks-1190.min.js} +0 -0
  103. js/dist/{wp-seo-term-scraper-1180.min.js → wp-seo-term-scraper-1190.min.js} +1 -1
  104. js/dist/{wp-seo-used-keywords-assessment-1180.min.js → wp-seo-used-keywords-assessment-1190.min.js} +0 -0
  105. languages/wordpress-seo-nl_NL.json +1 -1
  106. languages/wordpress-seo-pt_BR.json +1 -1
  107. languages/wordpress-seo-sv_SE.json +1 -1
  108. languages/wordpress-seojs-hr.json +1 -1
  109. languages/wordpress-seojs-nl_NL.json +1 -1
  110. languages/wordpress-seojs-pt_PT.json +1 -1
  111. languages/wordpress-seojs-sv_SE.json +1 -1
  112. languages/wordpress-seojs.php +2 -2
  113. languages/yoast-components-bg_BG.json +1 -1
  114. languages/yoast-components-bs_BA.json +1 -1
  115. languages/yoast-components-ca.json +1 -1
  116. languages/yoast-components-cs_CZ.json +1 -1
  117. languages/yoast-components-da_DK.json +1 -1
  118. languages/yoast-components-de_CH.json +1 -1
  119. languages/yoast-components-de_DE.json +1 -1
  120. languages/yoast-components-el.json +1 -1
  121. languages/yoast-components-en_AU.json +1 -1
  122. languages/yoast-components-en_CA.json +1 -1
  123. languages/yoast-components-en_GB.json +1 -1
  124. languages/yoast-components-en_NZ.json +1 -1
  125. languages/yoast-components-en_ZA.json +1 -1
  126. languages/yoast-components-es_AR.json +1 -1
  127. languages/yoast-components-es_ES.json +1 -1
  128. languages/yoast-components-es_MX.json +1 -1
  129. languages/yoast-components-es_PE.json +1 -1
admin/ajax.php CHANGED
@@ -17,6 +17,7 @@ if ( ! defined( 'WPSEO_VERSION' ) ) {
17
  * @param array $results Results array for encoding.
18
  */
19
  function wpseo_ajax_json_echo_die( $results ) {
 
20
  echo WPSEO_Utils::format_json_encode( $results );
21
  die();
22
  }
@@ -82,25 +83,6 @@ function wpseo_dismiss_tagline_notice() {
82
 
83
  add_action( 'wp_ajax_wpseo_dismiss_tagline_notice', 'wpseo_dismiss_tagline_notice' );
84
 
85
- /**
86
- * Used in the editor to replace vars for the snippet preview.
87
- */
88
- function wpseo_ajax_replace_vars() {
89
- global $post;
90
- check_ajax_referer( 'wpseo-replace-vars' );
91
-
92
- $post = get_post( intval( filter_input( INPUT_POST, 'post_id' ) ) );
93
- global $wp_query;
94
- $wp_query->queried_object = $post;
95
- $wp_query->queried_object_id = $post->ID;
96
-
97
- $omit = array( 'excerpt', 'excerpt_only', 'title' );
98
- echo wpseo_replace_vars( stripslashes( filter_input( INPUT_POST, 'string' ) ), $post, $omit );
99
- die;
100
- }
101
-
102
- add_action( 'wp_ajax_wpseo_replace_vars', 'wpseo_ajax_replace_vars' );
103
-
104
  /**
105
  * Save an individual SEO title from the Bulk Editor.
106
  */
@@ -293,6 +275,7 @@ function ajax_get_keyword_usage() {
293
  }
294
 
295
  wp_die(
 
296
  WPSEO_Utils::format_json_encode( WPSEO_Meta::keyword_usage( $keyword, $post_id ) )
297
  );
298
  }
@@ -323,6 +306,7 @@ function ajax_get_term_keyword_usage() {
323
  $usage = $usage[ $keyword ];
324
 
325
  wp_die(
 
326
  WPSEO_Utils::format_json_encode( $usage )
327
  );
328
  }
@@ -398,3 +382,25 @@ function wpseo_add_fb_admin() {
398
  _deprecated_function( __FUNCTION__, 'WPSEO 7.0', 'This method is deprecated.' );
399
  wpseo_ajax_json_echo_die( '' );
400
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  * @param array $results Results array for encoding.
18
  */
19
  function wpseo_ajax_json_echo_die( $results ) {
20
+ // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe.
21
  echo WPSEO_Utils::format_json_encode( $results );
22
  die();
23
  }
83
 
84
  add_action( 'wp_ajax_wpseo_dismiss_tagline_notice', 'wpseo_dismiss_tagline_notice' );
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  /**
87
  * Save an individual SEO title from the Bulk Editor.
88
  */
275
  }
276
 
277
  wp_die(
278
+ // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe.
279
  WPSEO_Utils::format_json_encode( WPSEO_Meta::keyword_usage( $keyword, $post_id ) )
280
  );
281
  }
306
  $usage = $usage[ $keyword ];
307
 
308
  wp_die(
309
+ // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe.
310
  WPSEO_Utils::format_json_encode( $usage )
311
  );
312
  }
382
  _deprecated_function( __FUNCTION__, 'WPSEO 7.0', 'This method is deprecated.' );
383
  wpseo_ajax_json_echo_die( '' );
384
  }
385
+
386
+ /**
387
+ * Used in the editor to replace vars for the snippet preview.
388
+ *
389
+ * @deprecated 11.9
390
+ * @codeCoverageIgnore
391
+ */
392
+ function wpseo_ajax_replace_vars() {
393
+ _deprecated_function( __METHOD__, 'WPSEO 11.9' );
394
+
395
+ global $post;
396
+ check_ajax_referer( 'wpseo-replace-vars' );
397
+
398
+ $post = get_post( intval( filter_input( INPUT_POST, 'post_id' ) ) );
399
+ global $wp_query;
400
+ $wp_query->queried_object = $post;
401
+ $wp_query->queried_object_id = $post->ID;
402
+
403
+ $omit = array( 'excerpt', 'excerpt_only', 'title' );
404
+ echo wpseo_replace_vars( stripslashes( filter_input( INPUT_POST, 'string' ) ), $post, $omit );
405
+ die;
406
+ }
admin/ajax/class-recalculate-scores-ajax.php CHANGED
@@ -28,6 +28,7 @@ class WPSEO_Recalculate_Scores_Ajax {
28
  check_ajax_referer( 'wpseo_recalculate', 'nonce' );
29
 
30
  wp_die(
 
31
  WPSEO_Utils::format_json_encode(
32
  array(
33
  'posts' => $this->calculate_posts(),
@@ -49,6 +50,7 @@ class WPSEO_Recalculate_Scores_Ajax {
49
  $response = $fetch_object->get_items_to_recalculate( $paged );
50
 
51
  if ( ! empty( $response ) ) {
 
52
  wp_die( WPSEO_Utils::format_json_encode( $response ) );
53
  }
54
  }
28
  check_ajax_referer( 'wpseo_recalculate', 'nonce' );
29
 
30
  wp_die(
31
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: WPSEO_Utils::format_json_encode is considered safe.
32
  WPSEO_Utils::format_json_encode(
33
  array(
34
  'posts' => $this->calculate_posts(),
50
  $response = $fetch_object->get_items_to_recalculate( $paged );
51
 
52
  if ( ! empty( $response ) ) {
53
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: WPSEO_Utils::format_json_encode is considered safe.
54
  wp_die( WPSEO_Utils::format_json_encode( $response ) );
55
  }
56
  }
admin/ajax/class-shortcode-filter.php CHANGED
@@ -36,6 +36,7 @@ class WPSEO_Shortcode_Filter {
36
  );
37
  }
38
 
 
39
  wp_die( WPSEO_Utils::format_json_encode( $parsed_shortcodes ) );
40
  }
41
  }
36
  );
37
  }
38
 
39
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: WPSEO_Utils::format_json_encode is considered safe.
40
  wp_die( WPSEO_Utils::format_json_encode( $parsed_shortcodes ) );
41
  }
42
  }
admin/class-admin-init.php CHANGED
@@ -679,22 +679,6 @@ class WPSEO_Admin_Init {
679
 
680
  // WordPress hooks that have been deprecated since a Yoast SEO version.
681
  $deprecated_filters = array(
682
- 'wpseo_metakey' => array(
683
- 'version' => '6.3',
684
- 'alternative' => null,
685
- ),
686
- 'wpseo_metakeywords' => array(
687
- 'version' => '6.3',
688
- 'alternative' => null,
689
- ),
690
- 'wpseo_stopwords' => array(
691
- 'version' => '7.0',
692
- 'alternative' => null,
693
- ),
694
- 'wpseo_redirect_orphan_attachment' => array(
695
- 'version' => '7.0',
696
- 'alternative' => null,
697
- ),
698
  'wpseo_genesis_force_adjacent_rel_home' => array(
699
  'version' => '9.4',
700
  'alternative' => null,
@@ -710,11 +694,13 @@ class WPSEO_Admin_Init {
710
  // Show notice for each deprecated filter or action that has been registered.
711
  foreach ( $deprecated_notices as $deprecated_filter ) {
712
  $deprecation_info = $deprecated_filters[ $deprecated_filter ];
 
713
  _deprecated_hook(
714
  $deprecated_filter,
715
  'WPSEO ' . $deprecation_info['version'],
716
  $deprecation_info['alternative']
717
  );
 
718
  }
719
  }
720
 
@@ -734,13 +720,19 @@ class WPSEO_Admin_Init {
734
  global $pagenow;
735
 
736
  if ( $pagenow === 'options-permalink.php' ) {
737
- $warning = esc_html__( 'WARNING:', 'wordpress-seo' );
738
- /* translators: %1$s and %2$s expand to <i> items to emphasize the word in the middle. */
739
- $message = esc_html__( 'Changing your permalinks settings can seriously impact your search engine visibility. It should almost %1$s never %2$s be done on a live website.', 'wordpress-seo' );
740
- $link = esc_html__( 'Learn about why permalinks are important for SEO.', 'wordpress-seo' );
741
- $url = WPSEO_Shortlinker::get( 'https://yoa.st/why-permalinks/' );
742
-
743
- echo '<div class="notice notice-warning"><p><strong>' . $warning . '</strong><br>' . sprintf( $message, '<i>', '</i>' ) . '<br><a href="' . $url . '" target="_blank">' . $link . '</a></p></div>';
 
 
 
 
 
 
744
  }
745
  }
746
  }
679
 
680
  // WordPress hooks that have been deprecated since a Yoast SEO version.
681
  $deprecated_filters = array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
682
  'wpseo_genesis_force_adjacent_rel_home' => array(
683
  'version' => '9.4',
684
  'alternative' => null,
694
  // Show notice for each deprecated filter or action that has been registered.
695
  foreach ( $deprecated_notices as $deprecated_filter ) {
696
  $deprecation_info = $deprecated_filters[ $deprecated_filter ];
697
+ // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- only uses the hardcoded values from above.
698
  _deprecated_hook(
699
  $deprecated_filter,
700
  'WPSEO ' . $deprecation_info['version'],
701
  $deprecation_info['alternative']
702
  );
703
+ // phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped.
704
  }
705
  }
706
 
720
  global $pagenow;
721
 
722
  if ( $pagenow === 'options-permalink.php' ) {
723
+ printf(
724
+ '<div class="notice notice-warning"><p><strong>%1$s</strong><br>%2$s<br><a href="%3$s" target="_blank">%4$s</a></p></div>',
725
+ esc_html__( 'WARNING:', 'wordpress-seo' ),
726
+ sprintf(
727
+ /* translators: %1$s and %2$s expand to <em> items to emphasize the word in the middle. */
728
+ esc_html__( 'Changing your permalinks settings can seriously impact your search engine visibility. It should almost %1$s never %2$s be done on a live website.', 'wordpress-seo' ),
729
+ '<em>',
730
+ '</em>'
731
+ ),
732
+ esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/why-permalinks/' ) ),
733
+ // The link's content.
734
+ esc_html__( 'Learn about why permalinks are important for SEO.', 'wordpress-seo' )
735
+ );
736
  }
737
  }
738
  }
admin/class-bulk-description-editor-list-table.php CHANGED
@@ -70,6 +70,9 @@ class WPSEO_Bulk_Description_List_Table extends WPSEO_Bulk_List_Table {
70
 
71
  case 'col_existing_yoast_seo_metadesc':
72
  // @todo Inconsistent return/echo behavior R.
 
 
 
73
  echo $this->parse_meta_data_field( $record->ID, $attributes );
74
  break;
75
  }
70
 
71
  case 'col_existing_yoast_seo_metadesc':
72
  // @todo Inconsistent return/echo behavior R.
73
+ // I traced the escaping of the attributes to WPSEO_Bulk_List_Table::column_attributes. Alexander.
74
+ // The output of WPSEO_Bulk_List_Table::parse_meta_data_field is properly escaped.
75
+ // phpcs:ignore WordPress.Security.EscapeOutput
76
  echo $this->parse_meta_data_field( $record->ID, $attributes );
77
  break;
78
  }
admin/class-bulk-editor-list-table.php CHANGED
@@ -409,11 +409,12 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
409
  );
410
  printf(
411
  '<select name="post_type_filter" id="%2$s">%1$s</select>',
 
412
  $options,
413
  esc_attr( 'post-type-filter-' . $instance_type )
414
  );
415
 
416
- submit_button( __( 'Filter', 'wordpress-seo' ), 'button', false, false, array( 'id' => 'post-query-submit' ) );
417
  echo '</div>';
418
  }
419
  }
@@ -770,7 +771,7 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
770
  }
771
 
772
  if ( ! empty( $class ) ) {
773
- $attributes = 'class="' . implode( ' ', $class ) . '"';
774
  }
775
 
776
  $attributes .= ' data-colname="' . esc_attr( $column_display_name ) . '"';
@@ -910,7 +911,11 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
910
  $meta_value = $values[ $meta_value ];
911
  }
912
 
913
- return sprintf( '<td %2$s id="wpseo-existing-%4$s-%3$s">%1$s</td>', $meta_value, $attributes, $record_id, $this->target_db_field );
 
 
 
 
914
  }
915
 
916
  /**
409
  );
410
  printf(
411
  '<select name="post_type_filter" id="%2$s">%1$s</select>',
412
+ // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $options is properly escaped above.
413
  $options,
414
  esc_attr( 'post-type-filter-' . $instance_type )
415
  );
416
 
417
+ submit_button( esc_html__( 'Filter', 'wordpress-seo' ), 'button', false, false, array( 'id' => 'post-query-submit' ) );
418
  echo '</div>';
419
  }
420
  }
771
  }
772
 
773
  if ( ! empty( $class ) ) {
774
+ $attributes = 'class="' . esc_attr( implode( ' ', $class ) ) . '"';
775
  }
776
 
777
  $attributes .= ' data-colname="' . esc_attr( $column_display_name ) . '"';
911
  $meta_value = $values[ $meta_value ];
912
  }
913
 
914
+ $id = "wpseo-existing-$record_id-$this->target_db_field";
915
+
916
+ // $attributes correctly escaped, verified by Alexander. See WPSEO_Bulk_Description_List_Table::parse_page_specific_column.
917
+ // phpcs:ignore WordPress.Security.EscapeOutput
918
+ return sprintf( '<td %2$s id="%3$s">%1$s</td>', esc_html( $meta_value ), $attributes, esc_attr( $id ) );
919
  }
920
 
921
  /**
admin/class-bulk-title-editor-list-table.php CHANGED
@@ -69,7 +69,10 @@ class WPSEO_Bulk_Title_Editor_List_Table extends WPSEO_Bulk_List_Table {
69
 
70
  switch ( $column_name ) {
71
  case 'col_existing_yoast_seo_title':
72
- // @todo Inconsistent echo/return behavior R.
 
 
 
73
  echo $this->parse_meta_data_field( $record->ID, $attributes );
74
  break;
75
 
69
 
70
  switch ( $column_name ) {
71
  case 'col_existing_yoast_seo_title':
72
+ // @todo Inconsistent return/echo behavior R.
73
+ // I traced the escaping of the attributes to WPSEO_Bulk_List_Table::column_attributes.
74
+ // The output of WPSEO_Bulk_List_Table::parse_meta_data_field is properly escaped.
75
+ // phpcs:ignore WordPress.Security.EscapeOutput
76
  echo $this->parse_meta_data_field( $record->ID, $attributes );
77
  break;
78
 
admin/class-export.php CHANGED
@@ -26,13 +26,6 @@ class WPSEO_Export {
26
  */
27
  private $export = '';
28
 
29
- /**
30
- * Holds the export error message.
31
- *
32
- * @var string
33
- */
34
- private $error = '';
35
-
36
  /**
37
  * Holds whether the export was a success.
38
  *
@@ -71,29 +64,7 @@ class WPSEO_Export {
71
  )
72
  );
73
  echo '</p>';
74
- echo '<textarea id="wpseo-export" rows="20" cols="100">' . $this->export . '</textarea>';
75
- }
76
-
77
- /**
78
- * Returns true when the property error has a value.
79
- *
80
- * @return bool
81
- */
82
- public function has_error() {
83
- return ( $this->error !== '' );
84
- }
85
-
86
- /**
87
- * Sets the error hook, to display the error to the user.
88
- */
89
- public function set_error_hook() {
90
- /* translators: %1$s expands to Yoast SEO */
91
- $message = sprintf( __( 'Error creating %1$s export: ', 'wordpress-seo' ), 'Yoast SEO' ) . $this->error;
92
-
93
- printf(
94
- '<div class="notice notice-error"><p>%1$s</p></div>',
95
- $message
96
- );
97
  }
98
 
99
  /**
@@ -173,4 +144,32 @@ class WPSEO_Export {
173
  }
174
  $this->write_line( $key . ' = ' . $val );
175
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  }
26
  */
27
  private $export = '';
28
 
 
 
 
 
 
 
 
29
  /**
30
  * Holds whether the export was a success.
31
  *
64
  )
65
  );
66
  echo '</p>';
67
+ echo '<textarea id="wpseo-export" rows="20" cols="100">' . esc_textarea( $this->export ) . '</textarea>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  }
69
 
70
  /**
144
  }
145
  $this->write_line( $key . ' = ' . $val );
146
  }
147
+
148
+ /* ********************* DEPRECATED METHODS ********************* */
149
+
150
+ /**
151
+ * Returns true when the property error has a value.
152
+ *
153
+ * @deprecated 11.9 Obsolete since the export setting refactor in 9.2.
154
+ *
155
+ * @codeCoverageIgnore
156
+ *
157
+ * @return bool
158
+ */
159
+ public function has_error() {
160
+ _deprecated_function( __METHOD__, 'WPSEO 11.9' );
161
+
162
+ return false;
163
+ }
164
+
165
+ /**
166
+ * Sets the error hook, to display the error to the user.
167
+ *
168
+ * @deprecated 11.9 Obsolete since the export setting refactor in 9.2.
169
+ *
170
+ * @codeCoverageIgnore
171
+ */
172
+ public function set_error_hook() {
173
+ _deprecated_function( __METHOD__, 'WPSEO 11.9' );
174
+ }
175
  }
admin/class-gutenberg-compatibility.php CHANGED
@@ -15,14 +15,14 @@ class WPSEO_Gutenberg_Compatibility {
15
  *
16
  * @var string
17
  */
18
- const CURRENT_RELEASE = '6.2.0';
19
 
20
  /**
21
  * The minimally supported version of Gutenberg by the plugin.
22
  *
23
  * @var string
24
  */
25
- const MINIMUM_SUPPORTED = '6.2.0';
26
 
27
  /**
28
  * Holds the current version.
15
  *
16
  * @var string
17
  */
18
+ const CURRENT_RELEASE = '6.3.0';
19
 
20
  /**
21
  * The minimally supported version of Gutenberg by the plugin.
22
  *
23
  * @var string
24
  */
25
+ const MINIMUM_SUPPORTED = '6.3.0';
26
 
27
  /**
28
  * Holds the current version.
admin/class-meta-columns.php CHANGED
@@ -98,10 +98,12 @@ class WPSEO_Meta_Columns {
98
 
99
  switch ( $column_name ) {
100
  case 'wpseo-score':
 
101
  echo $this->parse_column_score( $post_id );
102
  return;
103
 
104
  case 'wpseo-score-readability':
 
105
  echo $this->parse_column_score_readability( $post_id );
106
  return;
107
 
@@ -733,7 +735,7 @@ class WPSEO_Meta_Columns {
733
  $title = $rank->get_label();
734
  }
735
 
736
- return '<div aria-hidden="true" title="' . esc_attr( $title ) . '" class="wpseo-score-icon ' . esc_attr( $rank->get_css_class() ) . '"></div><span class="screen-reader-text wpseo-score-text">' . $title . '</span>';
737
  }
738
 
739
  /**
98
 
99
  switch ( $column_name ) {
100
  case 'wpseo-score':
101
+ // @phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in render_score_indicator() method.
102
  echo $this->parse_column_score( $post_id );
103
  return;
104
 
105
  case 'wpseo-score-readability':
106
+ // @phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in render_score_indicator() method.
107
  echo $this->parse_column_score_readability( $post_id );
108
  return;
109
 
735
  $title = $rank->get_label();
736
  }
737
 
738
+ return '<div aria-hidden="true" title="' . esc_attr( $title ) . '" class="' . esc_attr( 'wpseo-score-icon ' . $rank->get_css_class() ) . '"></div><span class="screen-reader-text wpseo-score-text">' . esc_html( $title ) . '</span>';
739
  }
740
 
741
  /**
admin/class-option-tabs-formatter.php CHANGED
@@ -64,7 +64,7 @@ class WPSEO_Option_Tabs_Formatter {
64
  */
65
  $option_tab_content = apply_filters( 'wpseo_option_tab-' . $tab_filter_name, null, $option_tabs, $tab );
66
  if ( ! empty( $option_tab_content ) ) {
67
- echo $option_tab_content;
68
  }
69
 
70
  if ( empty( $option_tab_content ) ) {
64
  */
65
  $option_tab_content = apply_filters( 'wpseo_option_tab-' . $tab_filter_name, null, $option_tabs, $tab );
66
  if ( ! empty( $option_tab_content ) ) {
67
+ echo wp_kses_post( $option_tab_content );
68
  }
69
 
70
  if ( empty( $option_tab_content ) ) {
admin/class-premium-upsell-admin-block.php CHANGED
@@ -74,8 +74,8 @@ class WPSEO_Premium_Upsell_Admin_Block {
74
  '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>';
75
 
76
  $upgrade_button = sprintf(
77
- '<a id="wpseo-%1$s-popup-button" class="yoast-button-upsell" href="%2$s" target="_blank">%3$s</a>',
78
- $this->identifier,
79
  esc_url( $url ),
80
  $button_text
81
  );
@@ -98,6 +98,7 @@ class WPSEO_Premium_Upsell_Admin_Block {
98
  '</h2>';
99
  echo '<ul class="' . esc_attr( $class . '--motivation' ) . '">' . $arguments_html . '</ul>';
100
 
 
101
  echo '<p>' . $upgrade_button . '</p>';
102
  echo '</div>';
103
 
74
  '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>';
75
 
76
  $upgrade_button = sprintf(
77
+ '<a id="%1$s" class="yoast-button-upsell" href="%2$s" target="_blank">%3$s</a>',
78
+ esc_attr( 'wpseo-' . $this->identifier . '-popup-button' ),
79
  esc_url( $url ),
80
  $button_text
81
  );
98
  '</h2>';
99
  echo '<ul class="' . esc_attr( $class . '--motivation' ) . '">' . $arguments_html . '</ul>';
100
 
101
+ // @phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in $upgrade_button and $button_text above.
102
  echo '<p>' . $upgrade_button . '</p>';
103
  echo '</div>';
104
 
admin/class-social-admin.php CHANGED
@@ -132,11 +132,11 @@ class WPSEO_Social_Admin extends WPSEO_Metabox {
132
  $tab_content .= $this->do_meta_box( $meta_field_defs[ $field_name ], $field_name );
133
  }
134
 
135
- $features = new WPSEO_Features();
136
  /**
137
  * If premium hide the form to show the social preview instead, we still need the fields to be output because
138
  * the values of the social preview are saved in the hidden field.
139
  */
 
140
  if ( $features->is_premium() ) {
141
  return $this->hide_form( $tab_content );
142
  }
@@ -151,7 +151,7 @@ class WPSEO_Social_Admin extends WPSEO_Metabox {
151
  *
152
  * @return string The content.
153
  */
154
- public function hide_form( $tab_content ) {
155
  return '<div class="hidden">' . $tab_content . '</div>';
156
  }
157
 
132
  $tab_content .= $this->do_meta_box( $meta_field_defs[ $field_name ], $field_name );
133
  }
134
 
 
135
  /**
136
  * If premium hide the form to show the social preview instead, we still need the fields to be output because
137
  * the values of the social preview are saved in the hidden field.
138
  */
139
+ $features = new WPSEO_Features();
140
  if ( $features->is_premium() ) {
141
  return $this->hide_form( $tab_content );
142
  }
151
  *
152
  * @return string The content.
153
  */
154
+ private function hide_form( $tab_content ) {
155
  return '<div class="hidden">' . $tab_content . '</div>';
156
  }
157
 
admin/class-yoast-alerts.php CHANGED
@@ -141,12 +141,14 @@ class Yoast_Alerts {
141
  private function output_ajax_response( $type ) {
142
 
143
  $html = $this->get_view_html( $type );
 
144
  echo WPSEO_Utils::format_json_encode(
145
  array(
146
  'html' => $html,
147
  'total' => self::get_active_alert_count(),
148
  )
149
  );
 
150
  }
151
 
152
  /**
141
  private function output_ajax_response( $type ) {
142
 
143
  $html = $this->get_view_html( $type );
144
+ // phpcs:disable WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe.
145
  echo WPSEO_Utils::format_json_encode(
146
  array(
147
  'html' => $html,
148
  'total' => self::get_active_alert_count(),
149
  )
150
  );
151
+ // phpcs:enable -- Reason: WPSEO_Utils::format_json_encode is safe.
152
  }
153
 
154
  /**
admin/class-yoast-notification-center.php CHANGED
@@ -369,6 +369,7 @@ class Yoast_Notification_Center {
369
  $notification_json[] = $notification->render();
370
  }
371
 
 
372
  echo WPSEO_Utils::format_json_encode( $notification_json );
373
 
374
  return;
369
  $notification_json[] = $notification->render();
370
  }
371
 
372
+ // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe.
373
  echo WPSEO_Utils::format_json_encode( $notification_json );
374
 
375
  return;
admin/links/class-link-reindex-dashboard.php CHANGED
@@ -65,10 +65,12 @@ class WPSEO_Link_Reindex_Dashboard {
65
  echo '<strong>' . esc_html__( 'Text link counter', 'wordpress-seo' ) . '</strong><br/>';
66
 
67
  if ( ! $this->has_unprocessed() ) {
 
68
  echo $this->message_already_indexed();
69
  }
70
 
71
  if ( $this->has_unprocessed() ) {
 
72
  printf( '<span id="reindexLinks">%s</span>', $this->message_start_indexing() );
73
  }
74
 
@@ -100,7 +102,7 @@ class WPSEO_Link_Reindex_Dashboard {
100
  if ( $this->has_unprocessed() ) {
101
  $progress = sprintf(
102
  /* translators: 1: expands to a <span> containing the number of items recalculated. 2: expands to a <strong> containing the total number of items. */
103
- __( 'Text %1$s of %2$s processed.', 'wordpress-seo' ),
104
  '<span id="wpseo_count_index_links">0</span>',
105
  sprintf( '<strong id="wpseo_count_total">%d</strong>', $this->get_unprocessed_count() )
106
  );
@@ -116,7 +118,10 @@ class WPSEO_Link_Reindex_Dashboard {
116
  );
117
  ?>
118
  <div id="wpseo_index_links_wrapper" class="hidden">
119
- <?php echo implode( '<hr />', $blocks ); ?>
 
 
 
120
  <button onclick="tb_remove();" type="button"
121
  class="button"><?php esc_html_e( 'Stop counting', 'wordpress-seo' ); ?></button>
122
  </div>
@@ -199,40 +204,4 @@ class WPSEO_Link_Reindex_Dashboard {
199
  esc_attr__( 'Count links in your texts', 'wordpress-seo' )
200
  );
201
  }
202
-
203
- /* ********************* DEPRECATED METHODS ********************* */
204
-
205
- /**
206
- * Add the indexing interface for links to the dashboard.
207
- *
208
- * @deprecated 7.0
209
- * @codeCoverageIgnore
210
- *
211
- * @return void
212
- */
213
- public function add_link_index_interface() {
214
- _deprecated_function( __METHOD__, 'WPSEO 7.0' );
215
-
216
- $html = '';
217
- $html .= '<h2>' . esc_html__( 'Text link counter', 'wordpress-seo' ) . '</h2>';
218
- $html .= '<p>' . sprintf(
219
- /* translators: 1: link to yoast.com post about internal linking suggestion. 4: is Yoast.com 3: is anchor closing. */
220
- __( 'The links in all your public texts need to be counted. This will provide insights of which texts need more links to them. If you want to know more about the why and how of internal linking, check out %1$sthe article about internal linking on %2$s%3$s.', 'wordpress-seo' ),
221
- '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/15n' ) . '" target="_blank">',
222
- 'Yoast.com',
223
- '</a>'
224
- ) . '</p>';
225
-
226
- if ( ! $this->has_unprocessed() ) {
227
- $html .= '<p>' . $this->message_already_indexed() . '</p>';
228
- }
229
-
230
- if ( $this->has_unprocessed() ) {
231
- $html .= '<p id="reindexLinks">' . $this->message_start_indexing() . '</p>';
232
- }
233
-
234
- $html .= '<br />';
235
-
236
- echo $html;
237
- }
238
  }
65
  echo '<strong>' . esc_html__( 'Text link counter', 'wordpress-seo' ) . '</strong><br/>';
66
 
67
  if ( ! $this->has_unprocessed() ) {
68
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: `message_already_indexed` is considered a safe method.
69
  echo $this->message_already_indexed();
70
  }
71
 
72
  if ( $this->has_unprocessed() ) {
73
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: `message_start_indexing` is considered a safe method.
74
  printf( '<span id="reindexLinks">%s</span>', $this->message_start_indexing() );
75
  }
76
 
102
  if ( $this->has_unprocessed() ) {
103
  $progress = sprintf(
104
  /* translators: 1: expands to a <span> containing the number of items recalculated. 2: expands to a <strong> containing the total number of items. */
105
+ esc_html__( 'Text %1$s of %2$s processed.', 'wordpress-seo' ),
106
  '<span id="wpseo_count_index_links">0</span>',
107
  sprintf( '<strong id="wpseo_count_total">%d</strong>', $this->get_unprocessed_count() )
108
  );
118
  );
119
  ?>
120
  <div id="wpseo_index_links_wrapper" class="hidden">
121
+ <?php
122
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: All inputs are escaped properly.
123
+ echo implode( '<hr />', $blocks );
124
+ ?>
125
  <button onclick="tb_remove();" type="button"
126
  class="button"><?php esc_html_e( 'Stop counting', 'wordpress-seo' ); ?></button>
127
  </div>
204
  esc_attr__( 'Count links in your texts', 'wordpress-seo' )
205
  );
206
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  }
admin/metabox/class-metabox-addon-section.php DELETED
@@ -1,39 +0,0 @@
1
- <?php
2
- /**
3
- * WPSEO plugin file.
4
- *
5
- * @package WPSEO\Admin
6
- */
7
-
8
- /**
9
- * Generates and displays a section containing metabox tabs that have been added by other plugins through the
10
- * `wpseo_tab_header` and `wpseo_tab_content` actions.
11
- */
12
- class WPSEO_Metabox_Addon_Tab_Section extends WPSEO_Metabox_Tab_Section {
13
-
14
- /**
15
- * Applies the actions for adding a tab to the metabox.
16
- */
17
- public function display_content() {
18
- ?>
19
- <div role="tabpanel" id="wpseo-meta-section-addons" aria-labelledby="wpseo-meta-tab-addons" tabindex="0" class="wpseo-meta-section">
20
- <div class="wpseo-metabox-tabs-div">
21
- <ul class="wpseo-metabox-tabs">
22
- <?php do_action( 'wpseo_tab_header' ); ?>
23
- </ul>
24
- <?php do_action( 'wpseo_tab_content' ); ?>
25
- </div>
26
- </div>
27
- <?php
28
- }
29
-
30
- /**
31
- * `WPSEO_Metabox_Addon_Section` always has "tabs", represented by registered actions. If this is not the case,
32
- * it should not be instantiated.
33
- *
34
- * @return bool
35
- */
36
- protected function has_sections() {
37
- return true;
38
- }
39
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/metabox/class-metabox-collapsibles-section.php CHANGED
@@ -40,9 +40,13 @@ class WPSEO_Metabox_Collapsibles_Sections extends WPSEO_Abstract_Metabox_Tab_Wit
40
  printf( '<div id="%1$s" class="wpseo-meta-section">', esc_attr( 'wpseo-meta-section-' . $this->name ) );
41
  echo '<div class="wpseo_content_wrapper">';
42
 
 
 
43
  foreach ( $this->collapsibles as $collapsible ) {
44
- echo $collapsible->content();
45
  }
 
 
46
 
47
  echo '</div></div>';
48
  }
40
  printf( '<div id="%1$s" class="wpseo-meta-section">', esc_attr( 'wpseo-meta-section-' . $this->name ) );
41
  echo '<div class="wpseo_content_wrapper">';
42
 
43
+ add_filter( 'wp_kses_allowed_html', array( 'WPSEO_Utils', 'extend_kses_post_with_forms' ) );
44
+ add_filter( 'wp_kses_allowed_html', array( 'WPSEO_Utils', 'extend_kses_post_with_a11y' ) );
45
  foreach ( $this->collapsibles as $collapsible ) {
46
+ echo wp_kses_post( $collapsible->content() );
47
  }
48
+ remove_filter( 'wp_kses_allowed_html', array( 'WPSEO_Utils', 'extend_kses_post_with_forms' ) );
49
+ remove_filter( 'wp_kses_allowed_html', array( 'WPSEO_Utils', 'extend_kses_post_with_a11y' ) );
50
 
51
  echo '</div></div>';
52
  }
admin/metabox/class-metabox-section-additional.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Admin\Metabox
6
+ */
7
+
8
+ /**
9
+ * Generates and displays an additional metabox section.
10
+ */
11
+ class WPSEO_Metabox_Section_Additional implements WPSEO_Metabox_Section {
12
+
13
+ /**
14
+ * Name of the section, used as an identifier in the HTML.
15
+ *
16
+ * @var string
17
+ */
18
+ public $name;
19
+ /**
20
+ * Content of the tab's section.
21
+ *
22
+ * @var string
23
+ */
24
+ public $content;
25
+ /**
26
+ * HTML to use in the tab header.
27
+ *
28
+ * @var string
29
+ */
30
+ private $link_content;
31
+ /**
32
+ * Class to add to the link.
33
+ *
34
+ * @var string
35
+ */
36
+ private $link_class;
37
+ /**
38
+ * Aria label to use for the link.
39
+ *
40
+ * @var string
41
+ */
42
+ private $link_aria_label;
43
+
44
+ /**
45
+ * Constructor.
46
+ *
47
+ * @param string $name The name of the section, used as an identifier in the html.
48
+ * Can only contain URL safe characters.
49
+ * @param string $link_content The text content of the section link.
50
+ * @param string $content Optional. Content to use above the React root element.
51
+ * @param array $options Optional link attributes.
52
+ */
53
+ public function __construct( $name, $link_content, $content = '', array $options = array() ) {
54
+ $this->name = $name;
55
+ $this->content = $content;
56
+ $default_options = array(
57
+ 'link_class' => '',
58
+ 'link_aria_label' => '',
59
+ );
60
+ $options = wp_parse_args( $options, $default_options );
61
+ $this->link_content = $link_content;
62
+ $this->link_class = $options['link_class'];
63
+ $this->link_aria_label = $options['link_aria_label'];
64
+ }
65
+
66
+ /**
67
+ * Outputs the section link.
68
+ *
69
+ * @return void
70
+ */
71
+ public function display_link() {
72
+ printf(
73
+ '<li role="presentation"><a role="tab" href="#wpseo-meta-section-%1$s" id="wpseo-meta-tab-%1$s" aria-controls="wpseo-meta-section-%1$s" class="wpseo-meta-section-link %2$s"%3$s>%4$s</a></li>',
74
+ esc_attr( $this->name ),
75
+ esc_attr( $this->link_class ),
76
+ ( '' !== $this->link_aria_label ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '',
77
+ $this->link_content
78
+ );
79
+ }
80
+
81
+ /**
82
+ * Outputs the section content.
83
+ *
84
+ * @return void
85
+ */
86
+ public function display_content() {
87
+ $html = sprintf(
88
+ '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section wpseo-form">',
89
+ esc_attr( $this->name )
90
+ );
91
+ $html .= $this->content;
92
+ $html .= '</div>';
93
+ echo $html;
94
+ }
95
+ }
admin/metabox/class-metabox-section-react.php CHANGED
@@ -90,7 +90,7 @@ class WPSEO_Metabox_Section_React implements WPSEO_Metabox_Section {
90
  esc_attr( $this->name ),
91
  esc_attr( $this->link_class ),
92
  ( '' !== $this->link_aria_label ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '',
93
- $this->link_content
94
  );
95
  }
96
 
@@ -100,15 +100,19 @@ class WPSEO_Metabox_Section_React implements WPSEO_Metabox_Section {
100
  * @return void
101
  */
102
  public function display_content() {
103
- $html = sprintf(
 
 
 
104
  '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section">',
105
  esc_attr( $this->name )
106
  );
107
- $html .= $this->content;
108
- $html .= '<div id="wpseo-metabox-root" class="wpseo-metabox-root"></div>';
109
- $html .= $this->html_after;
110
- $html .= '</div>';
111
 
112
- echo $html;
 
113
  }
114
  }
90
  esc_attr( $this->name ),
91
  esc_attr( $this->link_class ),
92
  ( '' !== $this->link_aria_label ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '',
93
+ wp_kses_post( $this->link_content )
94
  );
95
  }
96
 
100
  * @return void
101
  */
102
  public function display_content() {
103
+ add_filter( 'wp_kses_allowed_html', array( 'WPSEO_Utils', 'extend_kses_post_with_forms' ) );
104
+ add_filter( 'wp_kses_allowed_html', array( 'WPSEO_Utils', 'extend_kses_post_with_a11y' ) );
105
+
106
+ printf(
107
  '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section">',
108
  esc_attr( $this->name )
109
  );
110
+ echo wp_kses_post( $this->content );
111
+ echo '<div id="wpseo-metabox-root" class="wpseo-metabox-root"></div>';
112
+ echo wp_kses_post( $this->html_after );
113
+ echo '</div>';
114
 
115
+ remove_filter( 'wp_kses_allowed_html', array( 'WPSEO_Utils', 'extend_kses_post_with_forms' ) );
116
+ remove_filter( 'wp_kses_allowed_html', array( 'WPSEO_Utils', 'extend_kses_post_with_a11y' ) );
117
  }
118
  }
admin/metabox/class-metabox.php CHANGED
@@ -315,9 +315,7 @@ class WPSEO_Metabox extends WPSEO_Meta {
315
  $content_sections[] = $this->social_admin->get_meta_section();
316
  }
317
 
318
- if ( has_action( 'wpseo_tab_header' ) || has_action( 'wpseo_tab_content' ) ) {
319
- $content_sections[] = $this->get_addons_meta_section();
320
- }
321
 
322
  return $content_sections;
323
  }
@@ -381,16 +379,53 @@ class WPSEO_Metabox extends WPSEO_Meta {
381
  }
382
 
383
  /**
384
- * Returns a metabox section dedicated to hosting metabox tabs that have been added by other plugins through the
385
- * `wpseo_tab_header` and `wpseo_tab_content` actions.
386
  *
387
- * @return WPSEO_Metabox_Section
388
  */
389
- private function get_addons_meta_section() {
390
- return new WPSEO_Metabox_Addon_Tab_Section(
391
- 'addons',
392
- '<span class="dashicons dashicons-admin-plugins"></span>' . __( 'Add-ons', 'wordpress-seo' )
393
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394
  }
395
 
396
  /**
@@ -738,7 +773,6 @@ class WPSEO_Metabox extends WPSEO_Meta {
738
  $asset_manager->enqueue_script( 'metabox' );
739
  $asset_manager->enqueue_script( 'admin-media' );
740
 
741
-
742
  $asset_manager->enqueue_script( 'post-scraper' );
743
  $asset_manager->enqueue_script( 'replacevar-plugin' );
744
  $asset_manager->enqueue_script( 'shortcode-plugin' );
315
  $content_sections[] = $this->social_admin->get_meta_section();
316
  }
317
 
318
+ $content_sections = array_merge( $content_sections, $this->get_additional_meta_sections() );
 
 
319
 
320
  return $content_sections;
321
  }
379
  }
380
 
381
  /**
382
+ * Returns metabox sections that have been added by other plugins.
 
383
  *
384
+ * @return WPSEO_Metabox_Section_Additional[]
385
  */
386
+ protected function get_additional_meta_sections() {
387
+ $sections = array();
388
+
389
+ /**
390
+ * Private filter: 'yoast_free_additional_metabox_sections'.
391
+ *
392
+ * Meant for internal use only. Allows adding additional tabs to the Yoast SEO metabox.
393
+ *
394
+ * @since 11.9
395
+ *
396
+ * @param array[] $sections {
397
+ * An array of arrays with tab specifications.
398
+ *
399
+ * @type array $section {
400
+ * A tab specification.
401
+ *
402
+ * @type string $name The name of the tab. Used in the HTML IDs, href and aria properties.
403
+ * @type string $link_content The content of the tab link.
404
+ * @type string $content The content of the tab.
405
+ * @type array $options {
406
+ * Optional. Extra options.
407
+ *
408
+ * @type string $link_class Optional. The class for the tab link.
409
+ * @type string $link_aria_label Optional. The aria label of the tab link.
410
+ * }
411
+ * }
412
+ * }
413
+ */
414
+ $requested_sections = apply_filters( 'yoast_free_additional_metabox_sections', array() );
415
+
416
+ foreach ( $requested_sections as $section ) {
417
+ if ( is_array( $section ) && array_key_exists( 'name', $section ) && array_key_exists( 'link_content', $section ) && array_key_exists( 'content', $section ) ) {
418
+ $options = array_key_exists( 'options', $section ) ? $section['options'] : array();
419
+ $sections[] = new WPSEO_Metabox_Section_Additional(
420
+ $section['name'],
421
+ $section['link_content'],
422
+ $section['content'],
423
+ $options
424
+ );
425
+ }
426
+ }
427
+
428
+ return $sections;
429
  }
430
 
431
  /**
773
  $asset_manager->enqueue_script( 'metabox' );
774
  $asset_manager->enqueue_script( 'admin-media' );
775
 
 
776
  $asset_manager->enqueue_script( 'post-scraper' );
777
  $asset_manager->enqueue_script( 'replacevar-plugin' );
778
  $asset_manager->enqueue_script( 'shortcode-plugin' );
admin/notifiers/class-configuration-notifier.php CHANGED
@@ -146,7 +146,7 @@ class WPSEO_Configuration_Notifier implements WPSEO_Listener {
146
  private function notification( $title, $content, $show_dismissal = false ) {
147
  $notification = '<div class="yoast-container yoast-container__configuration-wizard">';
148
  $notification .= sprintf(
149
- '<img src="%1$s" height="%2$s" width="%3$d" />',
150
  esc_url( plugin_dir_url( WPSEO_FILE ) . 'images/new-to-configuration-notice.svg' ),
151
  60,
152
  60
146
  private function notification( $title, $content, $show_dismissal = false ) {
147
  $notification = '<div class="yoast-container yoast-container__configuration-wizard">';
148
  $notification .= sprintf(
149
+ '<img src="%1$s" height="%2$s" width="%3$d" alt="" />',
150
  esc_url( plugin_dir_url( WPSEO_FILE ) . 'images/new-to-configuration-notice.svg' ),
151
  60,
152
  60
admin/taxonomy/class-taxonomy-metabox.php CHANGED
@@ -202,13 +202,34 @@ class WPSEO_Taxonomy_Metabox {
202
  }
203
 
204
  $meta_fields = $this->taxonomy_social_fields->get_by_network( $network );
 
 
 
 
 
 
 
 
 
 
205
 
206
  $tab_settings = new WPSEO_Metabox_Collapsible(
207
  $name,
208
- $this->social_admin->get_premium_notice( $network ) . $this->taxonomy_tab_content->html( $meta_fields ),
209
  $label
210
  );
211
 
212
  return $tab_settings;
213
  }
 
 
 
 
 
 
 
 
 
 
 
214
  }
202
  }
203
 
204
  $meta_fields = $this->taxonomy_social_fields->get_by_network( $network );
205
+ $content = $this->taxonomy_tab_content->html( $meta_fields );
206
+
207
+ /**
208
+ * If premium hide the form to show the social preview instead, we still need the fields to be output because
209
+ * the values of the social preview are saved in the hidden field.
210
+ */
211
+ $features = new WPSEO_Features();
212
+ if ( $features->is_premium() ) {
213
+ $content = $this->hide_form( $content );
214
+ }
215
 
216
  $tab_settings = new WPSEO_Metabox_Collapsible(
217
  $name,
218
+ $this->social_admin->get_premium_notice( $network ) . $content,
219
  $label
220
  );
221
 
222
  return $tab_settings;
223
  }
224
+
225
+ /**
226
+ * Hides the given output when rendered to HTML.
227
+ *
228
+ * @param string $tab_content The social tab content.
229
+ *
230
+ * @return string The content.
231
+ */
232
+ private function hide_form( $tab_content ) {
233
+ return '<div class="hidden">' . $tab_content . '</div>';
234
+ }
235
  }
admin/views/licenses.php CHANGED
@@ -158,7 +158,7 @@ $new_tab_message = '<span class="screen-reader-text">' . esc_html__( '(O
158
  class="yoast-link--license">
159
  <?php
160
  /* translators: %s expands to the extension title */
161
- printf( esc_html( 'Manage your %s subscription on MyYoast', 'wordpress-seo' ), $premium_extension->get_title() );
162
  echo $new_tab_message;
163
  ?>
164
  </a>
@@ -168,7 +168,7 @@ $new_tab_message = '<span class="screen-reader-text">' . esc_html__( '(O
168
  class="yoast-link--license">
169
  <?php
170
  /* translators: %s expands to the extension title */
171
- printf( esc_html( 'Activate %s for your site on MyYoast', 'wordpress-seo' ), $premium_extension->get_title() );
172
  echo $new_tab_message;
173
  ?>
174
  </a>
@@ -242,7 +242,7 @@ $new_tab_message = '<span class="screen-reader-text">' . esc_html__( '(O
242
  class="yoast-link--license">
243
  <?php
244
  /* translators: %s expands to the extension title */
245
- printf( esc_html( 'Manage your %s subscription on MyYoast', 'wordpress-seo' ), $extension->get_title() );
246
  echo $new_tab_message;
247
  ?>
248
  </a>
@@ -252,7 +252,7 @@ $new_tab_message = '<span class="screen-reader-text">' . esc_html__( '(O
252
  class="yoast-link--license">
253
  <?php
254
  /* translators: %s expands to the extension title */
255
- printf( esc_html( 'Activate %s for your site on MyYoast', 'wordpress-seo' ), $extension->get_title() );
256
  echo $new_tab_message;
257
  ?>
258
  </a>
158
  class="yoast-link--license">
159
  <?php
160
  /* translators: %s expands to the extension title */
161
+ printf( esc_html__( 'Manage your %s subscription on MyYoast', 'wordpress-seo' ), $premium_extension->get_title() );
162
  echo $new_tab_message;
163
  ?>
164
  </a>
168
  class="yoast-link--license">
169
  <?php
170
  /* translators: %s expands to the extension title */
171
+ printf( esc_html__( 'Activate %s for your site on MyYoast', 'wordpress-seo' ), $premium_extension->get_title() );
172
  echo $new_tab_message;
173
  ?>
174
  </a>
242
  class="yoast-link--license">
243
  <?php
244
  /* translators: %s expands to the extension title */
245
+ printf( esc_html__( 'Manage your %s subscription on MyYoast', 'wordpress-seo' ), $extension->get_title() );
246
  echo $new_tab_message;
247
  ?>
248
  </a>
252
  class="yoast-link--license">
253
  <?php
254
  /* translators: %s expands to the extension title */
255
+ printf( esc_html__( 'Activate %s for your site on MyYoast', 'wordpress-seo' ), $extension->get_title() );
256
  echo $new_tab_message;
257
  ?>
258
  </a>
css/dist/{admin-global-1180-rtl.min.css → admin-global-1190-rtl.min.css} RENAMED
File without changes
css/dist/{admin-global-1180.min.css → admin-global-1190.min.css} RENAMED
File without changes
css/dist/{adminbar-1180-rtl.min.css → adminbar-1190-rtl.min.css} RENAMED
File without changes
css/dist/{adminbar-1180.min.css → adminbar-1190.min.css} RENAMED
File without changes
css/dist/{alerts-1180-rtl.min.css → alerts-1190-rtl.min.css} RENAMED
File without changes
css/dist/{alerts-1180.min.css → alerts-1190.min.css} RENAMED
File without changes
css/dist/{dashboard-1180-rtl.min.css → dashboard-1190-rtl.min.css} RENAMED
File without changes
css/dist/{dashboard-1180.min.css → dashboard-1190.min.css} RENAMED
File without changes
css/dist/{edit-page-1180-rtl.min.css → edit-page-1190-rtl.min.css} RENAMED
File without changes
css/dist/{edit-page-1180.min.css → edit-page-1190.min.css} RENAMED
File without changes
css/dist/{featured-image-1180-rtl.min.css → featured-image-1190-rtl.min.css} RENAMED
File without changes
css/dist/{featured-image-1180.min.css → featured-image-1190.min.css} RENAMED
File without changes
css/dist/{filter-explanation-1180-rtl.min.css → filter-explanation-1190-rtl.min.css} RENAMED
File without changes
css/dist/{filter-explanation-1180.min.css → filter-explanation-1190.min.css} RENAMED
File without changes
css/dist/{inside-editor-1180-rtl.min.css → inside-editor-1190-rtl.min.css} RENAMED
File without changes
css/dist/{inside-editor-1180.min.css → inside-editor-1190.min.css} RENAMED
File without changes
css/dist/{metabox-1180-rtl.min.css → metabox-1190-rtl.min.css} RENAMED
File without changes
css/dist/{metabox-1180.min.css → metabox-1190.min.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1180-rtl.min.css → metabox-primary-category-1190-rtl.min.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1180.min.css → metabox-primary-category-1190.min.css} RENAMED
File without changes
css/dist/{search-appearance-1180-rtl.min.css → search-appearance-1190-rtl.min.css} RENAMED
File without changes
css/dist/{search-appearance-1180.min.css → search-appearance-1190.min.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1180-rtl.min.css → structured-data-blocks-1190-rtl.min.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1180.min.css → structured-data-blocks-1190.min.css} RENAMED
File without changes
css/dist/{toggle-switch-1180-rtl.min.css → toggle-switch-1190-rtl.min.css} RENAMED
File without changes
css/dist/{toggle-switch-1180.min.css → toggle-switch-1190.min.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1180-rtl.min.css → wpseo-dismissible-1190-rtl.min.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1180.min.css → wpseo-dismissible-1190.min.css} RENAMED
File without changes
css/dist/{yoast-components-1180-rtl.min.css → yoast-components-1190-rtl.min.css} RENAMED
File without changes
css/dist/{yoast-components-1180.min.css → yoast-components-1190.min.css} RENAMED
File without changes
css/dist/{yoast-extensions-1180-rtl.min.css → yoast-extensions-1190-rtl.min.css} RENAMED
File without changes
css/dist/{yoast-extensions-1180.min.css → yoast-extensions-1190.min.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1180-rtl.min.css → yst_plugin_tools-1190-rtl.min.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1180.min.css → yst_plugin_tools-1190.min.css} RENAMED
File without changes
css/dist/{yst_seo_score-1180-rtl.min.css → yst_seo_score-1190-rtl.min.css} RENAMED
File without changes
css/dist/{yst_seo_score-1180.min.css → yst_seo_score-1190.min.css} RENAMED
File without changes
deprecated/class-metabox-addon-section.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Admin
6
+ */
7
+
8
+ /**
9
+ * Generates and displays a section containing metabox tabs that have been added by other plugins through the
10
+ * `wpseo_tab_header` and `wpseo_tab_content` actions.
11
+ *
12
+ * @deprecated 11.9
13
+ */
14
+ class WPSEO_Metabox_Addon_Tab_Section extends WPSEO_Metabox_Tab_Section {
15
+
16
+ /**
17
+ * WPSEO_Metabox_Addon_Tab_Section constructor.
18
+ *
19
+ * @deprecated 11.9
20
+ *
21
+ * @param string $name The name of the section, used as an identifier in the html.
22
+ * Can only contain URL safe characters.
23
+ * @param string $link_content The text content of the section link.
24
+ * @param array $tabs The metabox tabs (`WPSEO_Metabox_Tabs[]`) to be included in the section.
25
+ * @param array $options Optional link attributes.
26
+ */
27
+ public function __construct( $name, $link_content, array $tabs = array(), array $options = array() ) {
28
+ _deprecated_constructor( 'WPSEO_Metabox_Addon_Tab_Section', '11.9' );
29
+ parent::__construct( $name, $link_content, $tabs, $options );
30
+ }
31
+
32
+ /**
33
+ * Applies the actions for adding a tab to the metabox.
34
+ *
35
+ * @deprecated 11.9
36
+ */
37
+ public function display_content() {
38
+ _deprecated_function( __METHOD__, '11.9' );
39
+ ?>
40
+ <div role="tabpanel" id="wpseo-meta-section-addons" aria-labelledby="wpseo-meta-tab-addons" tabindex="0" class="wpseo-meta-section">
41
+ <div class="wpseo-metabox-tabs-div">
42
+ <ul class="wpseo-metabox-tabs">
43
+ <?php
44
+ // @deprecated 11.9 This functionality has been replaced by the filter: `yoast_free_additional_metabox_sections`.
45
+ do_action_deprecated( 'wpseo_tab_header', array(), '11.9' );
46
+ ?>
47
+ </ul>
48
+ <?php
49
+ // @deprecated 11.9 This functionality has been replaced by the filter: `yoast_free_additional_metabox_sections`.
50
+ do_action_deprecated( 'wpseo_tab_content', array(), '11.9' );
51
+ ?>
52
+ </div>
53
+ </div>
54
+ <?php
55
+ }
56
+
57
+ /**
58
+ * `WPSEO_Metabox_Addon_Section` always has "sections", represented by registered actions. If this is not the case,
59
+ * it should not be instantiated.
60
+ *
61
+ * @deprecated 11.9
62
+ *
63
+ * @return bool
64
+ */
65
+ protected function has_sections() {
66
+ _deprecated_function( __METHOD__, '11.9' );
67
+ return true;
68
+ }
69
+ }
frontend/schema/class-schema-author.php CHANGED
@@ -91,13 +91,7 @@ class WPSEO_Schema_Author extends WPSEO_Schema_Person implements WPSEO_Graph_Pie
91
  * @return bool
92
  */
93
  protected function is_post_author() {
94
- /**
95
- * Filter: 'wpseo_schema_article_post_type' - Allow changing for which post types we output Article schema.
96
- *
97
- * @api array $post_types The post types for which we output Article.
98
- */
99
- $post_types = apply_filters( 'wpseo_schema_article_post_type', array( 'post' ) );
100
- if ( is_singular( $post_types ) ) {
101
  return true;
102
  }
103
 
91
  * @return bool
92
  */
93
  protected function is_post_author() {
94
+ if ( is_singular() && WPSEO_Schema_Article::is_article_post_type() ) {
 
 
 
 
 
 
95
  return true;
96
  }
97
 
inc/class-wpseo-shortlinker.php CHANGED
@@ -116,7 +116,7 @@ class WPSEO_Shortlinker {
116
  $cohort = '6-30';
117
  break;
118
  default:
119
- $cohort = '>30';
120
  }
121
  return $cohort;
122
  }
116
  $cohort = '6-30';
117
  break;
118
  default:
119
+ $cohort = '30plus';
120
  }
121
  return $cohort;
122
  }
inc/class-wpseo-utils.php CHANGED
@@ -1216,6 +1216,155 @@ SVG;
1216
  return "<script type='application/ld+json' class='" . esc_attr( $class ) . "'>" . self::format_json_encode( $output ) . '</script>' . "\n";
1217
  }
1218
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1219
  /* ********************* DEPRECATED METHODS ********************* */
1220
 
1221
  /**
1216
  return "<script type='application/ld+json' class='" . esc_attr( $class ) . "'>" . self::format_json_encode( $output ) . '</script>' . "\n";
1217
  }
1218
 
1219
+ /**
1220
+ * Extends the allowed post tags with accessibility-related attributes.
1221
+ *
1222
+ * @param array $allowed_post_tags The allowed post tags.
1223
+ * @codeCoverageIgnore
1224
+ *
1225
+ * @return array The allowed tags including post tags, input tags and select tags.
1226
+ */
1227
+ public static function extend_kses_post_with_a11y( $allowed_post_tags ) {
1228
+ static $a11y_tags;
1229
+
1230
+ if ( isset( $a11y_tags ) === false ) {
1231
+ $a11y_tags = array(
1232
+ 'button' => array(
1233
+ 'aria-expanded' => true,
1234
+ ),
1235
+ 'div' => array(
1236
+ 'tabindex' => true,
1237
+ ),
1238
+ // Below are attributes that are needed for backwards compatibility (WP < 5.1).
1239
+ 'span' => array(
1240
+ 'aria-hidden' => true,
1241
+ ),
1242
+ 'input' => array(
1243
+ 'aria-describedby' => true,
1244
+ ),
1245
+ 'select' => array(
1246
+ 'aria-describedby' => true,
1247
+ ),
1248
+ 'textarea' => array(
1249
+ 'aria-describedby' => true,
1250
+ ),
1251
+ );
1252
+
1253
+ // Add the global allowed attributes to each html element.
1254
+ $a11y_tags = array_map( '_wp_add_global_attributes', $a11y_tags );
1255
+ }
1256
+
1257
+ return array_merge_recursive( $allowed_post_tags, $a11y_tags );
1258
+ }
1259
+
1260
+ /**
1261
+ * Extends the allowed post tags with input, select and option tags.
1262
+ *
1263
+ * @param array $allowed_post_tags The allowed post tags.
1264
+ * @codeCoverageIgnore
1265
+ *
1266
+ * @return array The allowed tags including post tags, input tags, select tags and option tags.
1267
+ */
1268
+ public static function extend_kses_post_with_forms( $allowed_post_tags ) {
1269
+ static $input_tags;
1270
+
1271
+ if ( isset( $input_tags ) === false ) {
1272
+ $input_tags = array(
1273
+ 'input' => array(
1274
+ 'accept' => true,
1275
+ 'accesskey' => true,
1276
+ 'align' => true,
1277
+ 'alt' => true,
1278
+ 'autocomplete' => true,
1279
+ 'autofocus' => true,
1280
+ 'checked' => true,
1281
+ 'contenteditable' => true,
1282
+ 'dirname' => true,
1283
+ 'disabled' => true,
1284
+ 'draggable' => true,
1285
+ 'dropzone' => true,
1286
+ 'form' => true,
1287
+ 'formaction' => true,
1288
+ 'formenctype' => true,
1289
+ 'formmethod' => true,
1290
+ 'formnovalidate' => true,
1291
+ 'formtarget' => true,
1292
+ 'height' => true,
1293
+ 'hidden' => true,
1294
+ 'lang' => true,
1295
+ 'list' => true,
1296
+ 'max' => true,
1297
+ 'maxlength' => true,
1298
+ 'min' => true,
1299
+ 'multiple' => true,
1300
+ 'name' => true,
1301
+ 'pattern' => true,
1302
+ 'placeholder' => true,
1303
+ 'readonly' => true,
1304
+ 'required' => true,
1305
+ 'size' => true,
1306
+ 'spellcheck' => true,
1307
+ 'src' => true,
1308
+ 'step' => true,
1309
+ 'tabindex' => true,
1310
+ 'translate' => true,
1311
+ 'type' => true,
1312
+ 'value' => true,
1313
+ 'width' => true,
1314
+
1315
+ /*
1316
+ * Below are attributes that are needed for backwards compatibility (WP < 5.1).
1317
+ * They are used for the social media image in the metabox.
1318
+ * These can be removed once we move to the React versions of the social previews.
1319
+ */
1320
+ 'data-target' => true,
1321
+ 'data-target-id' => true,
1322
+ ),
1323
+ 'select' => array(
1324
+ 'accesskey' => true,
1325
+ 'autofocus' => true,
1326
+ 'contenteditable' => true,
1327
+ 'disabled' => true,
1328
+ 'draggable' => true,
1329
+ 'dropzone' => true,
1330
+ 'form' => true,
1331
+ 'hidden' => true,
1332
+ 'lang' => true,
1333
+ 'multiple' => true,
1334
+ 'name' => true,
1335
+ 'onblur' => true,
1336
+ 'onchange' => true,
1337
+ 'oncontextmenu' => true,
1338
+ 'onfocus' => true,
1339
+ 'oninput' => true,
1340
+ 'oninvalid' => true,
1341
+ 'onreset' => true,
1342
+ 'onsearch' => true,
1343
+ 'onselect' => true,
1344
+ 'onsubmit' => true,
1345
+ 'required' => true,
1346
+ 'size' => true,
1347
+ 'spellcheck' => true,
1348
+ 'tabindex' => true,
1349
+ 'translate' => true,
1350
+ ),
1351
+ 'option' => array(
1352
+ 'class' => true,
1353
+ 'disabled' => true,
1354
+ 'id' => true,
1355
+ 'label' => true,
1356
+ 'selected' => true,
1357
+ 'value' => true,
1358
+ ),
1359
+ );
1360
+
1361
+ // Add the global allowed attributes to each html element.
1362
+ $input_tags = array_map( '_wp_add_global_attributes', $input_tags );
1363
+ }
1364
+
1365
+ return array_merge_recursive( $allowed_post_tags, $input_tags );
1366
+ }
1367
+
1368
  /* ********************* DEPRECATED METHODS ********************* */
1369
 
1370
  /**
js/dist/{analysis-1180.min.js → analysis-1190.min.js} RENAMED
File without changes
js/dist/{babel-polyfill-1180.min.js → babel-polyfill-1190.min.js} RENAMED
File without changes
js/dist/{commons-1180.min.js → commons-1190.min.js} RENAMED
File without changes
js/dist/{components-1180.min.js → components-1190.min.js} RENAMED
File without changes
js/dist/{configuration-wizard-1180.min.js → configuration-wizard-1190.min.js} RENAMED
File without changes
js/dist/{search-appearance-1180.min.js → search-appearance-1190.min.js} RENAMED
File without changes
js/dist/{styled-components-1180.min.js → styled-components-1190.min.js} RENAMED
File without changes
js/dist/{wp-apiFetch-1180.min.js → wp-apiFetch-1190.min.js} RENAMED
File without changes
js/dist/{wp-components-1180.min.js → wp-components-1190.min.js} RENAMED
File without changes
js/dist/{wp-compose-1180.min.js → wp-compose-1190.min.js} RENAMED
File without changes
js/dist/{wp-data-1180.min.js → wp-data-1190.min.js} RENAMED
File without changes
js/dist/{wp-element-1180.min.js → wp-element-1190.min.js} RENAMED
File without changes
js/dist/{wp-i18n-1180.min.js → wp-i18n-1190.min.js} RENAMED
File without changes
js/dist/{wp-richText-1180.min.js → wp-richText-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-admin-1180.min.js → wp-seo-admin-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-admin-global-1180.min.js → wp-seo-admin-global-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-admin-gsc-1180.min.js → wp-seo-admin-gsc-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-admin-media-1180.min.js → wp-seo-admin-media-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-analysis-worker-1180.min.js → wp-seo-analysis-worker-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-api-1180.min.js → wp-seo-api-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-bulk-editor-1180.min.js → wp-seo-bulk-editor-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-courses-overview-1180.min.js → wp-seo-courses-overview-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-dashboard-widget-1180.min.js → wp-seo-dashboard-widget-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-edit-page-1180.min.js → wp-seo-edit-page-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-featured-image-1180.min.js → wp-seo-featured-image-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-filter-explanation-1180.min.js → wp-seo-filter-explanation-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-help-center-1180.min.js → wp-seo-help-center-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-metabox-1180.min.js → wp-seo-metabox-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-metabox-category-1180.min.js → wp-seo-metabox-category-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-modal-1180.min.js → wp-seo-modal-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-network-admin-1180.min.js → wp-seo-network-admin-1190.min.js} RENAMED
File without changes
js/dist/{wp-seo-post-scraper-1180.min.js → wp-seo-post-scraper-1190.min.js} RENAMED
@@ -2,4 +2,4 @@
2
  /**
3
  * @preserve jed.js https://github.com/SlexAxton/Jed
4
  */
5
- !function(n,r){var o=Array.prototype,i=Object.prototype,a=o.slice,s=i.hasOwnProperty,u=o.forEach,l={},c={forEach:function(e,t,n){var r,o,i;if(null!==e)if(u&&e.forEach===u)e.forEach(t,n);else if(e.length===+e.length){for(r=0,o=e.length;r<o;r++)if(r in e&&t.call(n,e[r],r,e)===l)return}else for(i in e)if(s.call(e,i)&&t.call(n,e[i],i,e)===l)return},extend:function(e){return this.forEach(a.call(arguments,1),function(t){for(var n in t)e[n]=t[n]}),e}},p=function(e){if(this.defaults={locale_data:{messages:{"":{domain:"messages",lang:"en",plural_forms:"nplurals=2; plural=(n != 1);"}}},domain:"messages",debug:!1},this.options=c.extend({},this.defaults,e),this.textdomain(this.options.domain),e.domain&&!this.options.locale_data[this.options.domain])throw new Error("Text domain set to non-existent domain: `"+e.domain+"`")};function f(e){return p.PF.compile(e||"nplurals=2; plural=(n != 1);")}function d(e,t){this._key=e,this._i18n=t}p.context_delimiter=String.fromCharCode(4),c.extend(d.prototype,{onDomain:function(e){return this._domain=e,this},withContext:function(e){return this._context=e,this},ifPlural:function(e,t){return this._val=e,this._pkey=t,this},fetch:function(e){return"[object Array]"!={}.toString.call(e)&&(e=[].slice.call(arguments,0)),(e&&e.length?p.sprintf:function(e){return e})(this._i18n.dcnpgettext(this._domain,this._context,this._key,this._pkey,this._val),e)}}),c.extend(p.prototype,{translate:function(e){return new d(e,this)},textdomain:function(e){if(!e)return this._textdomain;this._textdomain=e},gettext:function(e){return this.dcnpgettext.call(this,void 0,void 0,e)},dgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},dcgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},ngettext:function(e,t,n){return this.dcnpgettext.call(this,void 0,void 0,e,t,n)},dngettext:function(e,t,n,r){return this.dcnpgettext.call(this,e,void 0,t,n,r)},dcngettext:function(e,t,n,r){return this.dcnpgettext.call(this,e,void 0,t,n,r)},pgettext:function(e,t){return this.dcnpgettext.call(this,void 0,e,t)},dpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},dcpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},npgettext:function(e,t,n,r){return this.dcnpgettext.call(this,void 0,e,t,n,r)},dnpgettext:function(e,t,n,r,o){return this.dcnpgettext.call(this,e,t,n,r,o)},dcnpgettext:function(e,t,n,r,o){var i;if(r=r||n,e=e||this._textdomain,!this.options)return(i=new p).dcnpgettext.call(i,void 0,void 0,n,r,o);if(!this.options.locale_data)throw new Error("No locale data provided.");if(!this.options.locale_data[e])throw new Error("Domain `"+e+"` was not found.");if(!this.options.locale_data[e][""])throw new Error("No locale meta information provided.");if(!n)throw new Error("No translation key found.");var a,s,u,l=t?t+p.context_delimiter+n:n,c=this.options.locale_data,d=c[e],h=(c.messages||this.defaults.locale_data.messages)[""],y=d[""].plural_forms||d[""]["Plural-Forms"]||d[""]["plural-forms"]||h.plural_forms||h["Plural-Forms"]||h["plural-forms"];if(void 0===o)u=0;else{if("number"!=typeof o&&(o=parseInt(o,10),isNaN(o)))throw new Error("The number that was passed in is not a number.");u=f(y)(o)}if(!d)throw new Error("No domain named `"+e+"` could be found.");return!(a=d[l])||u>a.length?(this.options.missing_key_callback&&this.options.missing_key_callback(l,e),s=[n,r],!0===this.options.debug&&console.log(s[f(y)(o)]),s[f()(o)]):(s=a[u])||(s=[n,r])[f()(o)]}});var h=function(){function e(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function t(e,t){for(var n=[];t>0;n[--t]=e);return n.join("")}var n=function(){return n.cache.hasOwnProperty(arguments[0])||(n.cache[arguments[0]]=n.parse(arguments[0])),n.format.call(null,n.cache[arguments[0]],arguments)};return n.format=function(n,r){var o,i,a,s,u,l,c,p=1,f=n.length,d="",y=[];for(i=0;i<f;i++)if("string"===(d=e(n[i])))y.push(n[i]);else if("array"===d){if((s=n[i])[2])for(o=r[p],a=0;a<s[2].length;a++){if(!o.hasOwnProperty(s[2][a]))throw h('[sprintf] property "%s" does not exist',s[2][a]);o=o[s[2][a]]}else o=s[1]?r[s[1]]:r[p++];if(/[^s]/.test(s[8])&&"number"!=e(o))throw h("[sprintf] expecting number but found %s",e(o));switch(void 0!==o&&null!==o||(o=""),s[8]){case"b":o=o.toString(2);break;case"c":o=String.fromCharCode(o);break;case"d":o=parseInt(o,10);break;case"e":o=s[7]?o.toExponential(s[7]):o.toExponential();break;case"f":o=s[7]?parseFloat(o).toFixed(s[7]):parseFloat(o);break;case"o":o=o.toString(8);break;case"s":o=(o=String(o))&&s[7]?o.substring(0,s[7]):o;break;case"u":o=Math.abs(o);break;case"x":o=o.toString(16);break;case"X":o=o.toString(16).toUpperCase()}o=/[def]/.test(s[8])&&s[3]&&o>=0?"+"+o:o,l=s[4]?"0"==s[4]?"0":s[4].charAt(1):" ",c=s[6]-String(o).length,u=s[6]?t(l,c):"",y.push(s[5]?o+u:u+o)}return y.join("")},n.cache={},n.parse=function(e){for(var t=e,n=[],r=[],o=0;t;){if(null!==(n=/^[^\x25]+/.exec(t)))r.push(n[0]);else if(null!==(n=/^\x25{2}/.exec(t)))r.push("%");else{if(null===(n=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(t)))throw"[sprintf] huh?";if(n[2]){o|=1;var i=[],a=n[2],s=[];if(null===(s=/^([a-z_][a-z_\d]*)/i.exec(a)))throw"[sprintf] huh?";for(i.push(s[1]);""!==(a=a.substring(s[0].length));)if(null!==(s=/^\.([a-z_][a-z_\d]*)/i.exec(a)))i.push(s[1]);else{if(null===(s=/^\[(\d+)\]/.exec(a)))throw"[sprintf] huh?";i.push(s[1])}n[2]=i}else o|=2;if(3===o)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";r.push(n)}t=t.substring(n[0].length)}return r},n}();p.parse_plural=function(e,t){return e=e.replace(/n/g,t),p.parse_expression(e)},p.sprintf=function(e,t){return"[object Array]"=={}.toString.call(t)?function(e,t){return t.unshift(e),h.apply(null,t)}(e,[].slice.call(t)):h.apply(this,[].slice.call(arguments))},p.prototype.sprintf=function(){return p.sprintf.apply(this,arguments)},p.PF={},p.PF.parse=function(e){var t=p.PF.extractPluralExpr(e);return p.PF.parser.parse.call(p.PF.parser,t)},p.PF.compile=function(e){var t=p.PF.parse(e);return function(e){return function(e){return!0===e?1:e||0}(p.PF.interpreter(t)(e))}},p.PF.interpreter=function(e){return function(t){switch(e.type){case"GROUP":return p.PF.interpreter(e.expr)(t);case"TERNARY":return p.PF.interpreter(e.expr)(t)?p.PF.interpreter(e.truthy)(t):p.PF.interpreter(e.falsey)(t);case"OR":return p.PF.interpreter(e.left)(t)||p.PF.interpreter(e.right)(t);case"AND":return p.PF.interpreter(e.left)(t)&&p.PF.interpreter(e.right)(t);case"LT":return p.PF.interpreter(e.left)(t)<p.PF.interpreter(e.right)(t);case"GT":return p.PF.interpreter(e.left)(t)>p.PF.interpreter(e.right)(t);case"LTE":return p.PF.interpreter(e.left)(t)<=p.PF.interpreter(e.right)(t);case"GTE":return p.PF.interpreter(e.left)(t)>=p.PF.interpreter(e.right)(t);case"EQ":return p.PF.interpreter(e.left)(t)==p.PF.interpreter(e.right)(t);case"NEQ":return p.PF.interpreter(e.left)(t)!=p.PF.interpreter(e.right)(t);case"MOD":return p.PF.interpreter(e.left)(t)%p.PF.interpreter(e.right)(t);case"VAR":return t;case"NUM":return e.val;default:throw new Error("Invalid Token found.")}}},p.PF.extractPluralExpr=function(e){e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(e)||(e=e.concat(";"));var t,n=/nplurals\=(\d+);/,r=e.match(n);if(!(r.length>1))throw new Error("nplurals not found in plural_forms string: "+e);if(r[1],!((t=(e=e.replace(n,"")).match(/plural\=(.*);/))&&t.length>1))throw new Error("`plural` expression not found: "+e);return t[1]},p.PF.parser=function(){var e={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(e,t,n,r,o,i,a){var s=i.length-1;switch(o){case 1:return{type:"GROUP",expr:i[s-1]};case 2:this.$={type:"TERNARY",expr:i[s-4],truthy:i[s-2],falsey:i[s]};break;case 3:this.$={type:"OR",left:i[s-2],right:i[s]};break;case 4:this.$={type:"AND",left:i[s-2],right:i[s]};break;case 5:this.$={type:"LT",left:i[s-2],right:i[s]};break;case 6:this.$={type:"LTE",left:i[s-2],right:i[s]};break;case 7:this.$={type:"GT",left:i[s-2],right:i[s]};break;case 8:this.$={type:"GTE",left:i[s-2],right:i[s]};break;case 9:this.$={type:"NEQ",left:i[s-2],right:i[s]};break;case 10:this.$={type:"EQ",left:i[s-2],right:i[s]};break;case 11:this.$={type:"MOD",left:i[s-2],right:i[s]};break;case 12:this.$={type:"GROUP",expr:i[s-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(e)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(e,t){throw new Error(e)},parse:function(e){var t=this,n=[0],r=[null],o=[],i=this.table,a="",s=0,u=0,l=0;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var c=this.lexer.yylloc;function p(e){n.length=n.length-2*e,r.length=r.length-e,o.length=o.length-e}function f(){var e;return"number"!=typeof(e=t.lexer.lex()||1)&&(e=t.symbols_[e]||e),e}o.push(c),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var d,h,y,g,m,v,b,_,w,x={};;){if(y=n[n.length-1],this.defaultActions[y]?g=this.defaultActions[y]:(null==d&&(d=f()),g=i[y]&&i[y][d]),void 0===g||!g.length||!g[0]){if(!l){for(v in w=[],i[y])this.terminals_[v]&&v>2&&w.push("'"+this.terminals_[v]+"'");var E="";E=this.lexer.showPosition?"Parse error on line "+(s+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+w.join(", ")+", got '"+this.terminals_[d]+"'":"Parse error on line "+(s+1)+": Unexpected "+(1==d?"end of input":"'"+(this.terminals_[d]||d)+"'"),this.parseError(E,{text:this.lexer.match,token:this.terminals_[d]||d,line:this.lexer.yylineno,loc:c,expected:w})}if(3==l){if(1==d)throw new Error(E||"Parsing halted.");u=this.lexer.yyleng,a=this.lexer.yytext,s=this.lexer.yylineno,c=this.lexer.yylloc,d=f()}for(;!(2..toString()in i[y]);){if(0==y)throw new Error(E||"Parsing halted.");p(1),y=n[n.length-1]}h=d,d=2,g=i[y=n[n.length-1]]&&i[y][2],l=3}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+d);switch(g[0]){case 1:n.push(d),r.push(this.lexer.yytext),o.push(this.lexer.yylloc),n.push(g[1]),d=null,h?(d=h,h=null):(u=this.lexer.yyleng,a=this.lexer.yytext,s=this.lexer.yylineno,c=this.lexer.yylloc,l>0&&l--);break;case 2:if(b=this.productions_[g[1]][1],x.$=r[r.length-b],x._$={first_line:o[o.length-(b||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(b||1)].first_column,last_column:o[o.length-1].last_column},void 0!==(m=this.performAction.call(x,a,u,s,this.yy,g[1],r,o)))return m;b&&(n=n.slice(0,-1*b*2),r=r.slice(0,-1*b),o=o.slice(0,-1*b)),n.push(this.productions_[g[1]][0]),r.push(x.$),o.push(x._$),_=i[n[n.length-2]][n[n.length-1]],n.push(_);break;case 3:return!0}}return!0}},t=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;var e,t;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if(e=this._input.match(this.rules[n[r]]))return(t=e[0].match(/\n.*/g))&&(this.yylineno+=t.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:t?t[t.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],this.performAction.call(this,this.yy,this,n[r],this.conditionStack[this.conditionStack.length-1])||void 0;if(""===this._input)return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return void 0!==e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},performAction:function(e,t,n,r){switch(n){case 0:break;case 1:return 20;case 2:return 19;case 3:return 8;case 4:return 9;case 5:return 6;case 6:return 7;case 7:return 11;case 8:return 13;case 9:return 10;case 10:return 12;case 11:return 14;case 12:return 15;case 13:return 16;case 14:return 17;case 15:return 18;case 16:return 5;case 17:return"INVALID"}},rules:[/^\s+/,/^[0-9]+(\.[0-9]+)?\b/,/^n\b/,/^\|\|/,/^&&/,/^\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};return e}();return e.lexer=t,e}(),void 0!==e&&e.exports&&(t=e.exports=p),t.Jed=p}()},function(e,t,n){var r=n(109),o=n(58),i=n(40),a=n(3),s=n(27),u=n(44),l=n(57),c=n(56),p="[object Map]",f="[object Set]",d=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(s(e)&&(a(e)||"string"==typeof e||"function"==typeof e.splice||u(e)||c(e)||i(e)))return!e.length;var t=o(e);if(t==p||t==f)return!e.size;if(l(e))return!r(e).length;for(var n in e)if(d.call(e,n))return!1;return!0}},,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";(function(e,r){Object.defineProperty(t,"__esModule",{value:!0});var o,i=function(e){return e&&e.__esModule?e:{default:e}}(n(304));o="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==e?e:r;var a=(0,i.default)(o);t.default=a}).call(this,n(20),n(41)(e))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,n=e.Symbol;"function"==typeof n?n.observable?t=n.observable:(t=n("observable"),n.observable=t):t="@@observable";return t}},,,,,function(e,t,n){var r=n(31),o=n(116),i=n(310),a=n(3);e.exports=function(e,t){return(a(e)?r:i)(e,o(t,3))}},function(e,t,n){var r=n(104),o=n(27);e.exports=function(e,t){var n=-1,i=o(e)?Array(e.length):[];return r(e,function(e,r,o){i[++n]=t(e,r,o)}),i}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});s(n(0));var r=s(n(2)),o=s(n(11)),i=n(19),a=n(23);function s(e){return e&&e.__esModule?e:{default:e}}var u=(0,o.default)(i.StyledSection).withConfig({displayName:"SnippetPreviewSection__Section",componentId:"gjy5w5-0"})(["max-width:640px;&","{padding-left:0;padding-right:0;& ","{",":20px;margin-left:",";}}"],i.StyledSectionBase,i.StyledHeading,(0,a.getDirectionalStyle)("padding-left","padding-right"),(0,a.getDirectionalStyle)("0","20px")),l=function(e){var t=e.children,n=e.title,r=e.icon,o=e.hasPaperStyle;return wp.element.createElement(u,{headingLevel:3,headingText:n,headingIcon:r,headingIconColor:"#555",hasPaperStyle:o},t)};l.propTypes={children:r.default.element,title:r.default.string,icon:r.default.string,hasPaperStyle:r.default.bool},l.defaultProps={hasPaperStyle:!0},t.default=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=n(48),i=function(e){return e&&e.__esModule?e:{default:e}}(n(279)),a=n(39),s=n(194);t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{mode:o.DEFAULT_MODE,data:{title:"",slug:"",description:""},wordsToHighlight:[],replacementVariables:(0,i.default)(),uniqueRefreshValue:""},t=arguments[1];switch(t.type){case a.SWITCH_MODE:return r({},e,{mode:t.mode});case a.UPDATE_DATA:return r({},e,{data:r({},e.data,t.data)});case a.UPDATE_REPLACEMENT_VARIABLE:var n=!0,u=e.replacementVariables.map(function(e){return e.name===t.name?(n=!1,{name:t.name,label:t.label||e.label,value:t.value}):e});return n&&(u=(0,s.pushNewReplaceVar)(u,t)),r({},e,{replacementVariables:u});case a.REMOVE_REPLACEMENT_VARIABLE:return r({},e,{replacementVariables:e.replacementVariables.filter(function(e){return e.name!==t.name})});case a.REFRESH:return r({},e,{uniqueRefreshValue:t.time});case a.UPDATE_WORDS_TO_HIGHLIGHT:return r({},e,{wordsToHighlight:t.wordsToHighlight})}return e}},function(e,t,n){var r=n(31),o=n(238),i=n(327),a=n(25),s=n(88),u=n(330),l=n(280),c=n(160),p=l(function(e,t){var n={};if(null==e)return n;var l=!1;t=r(t,function(t){return t=a(t,e),l||(l=t.length>1),t}),s(e,c(e),n),l&&(n=o(n,7,u));for(var p=t.length;p--;)i(n,t[p]);return n});e.exports=p},function(e,t,n){var r=n(88),o=n(36);e.exports=function(e,t){return e&&r(t,o(t),e)}},function(e,t,n){var r=n(88),o=n(101);e.exports=function(e,t){return e&&r(t,o(t),e)}},function(e,t,n){var r=n(88),o=n(106);e.exports=function(e,t){return r(e,o(e),t)}},function(e,t,n){var r=n(88),o=n(216);e.exports=function(e,t){return r(e,o(e),t)}},function(e,t){var n=Object.prototype.hasOwnProperty;e.exports=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&n.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},function(e,t,n){var r=n(145),o=n(320),i=n(321),a=n(322),s=n(242),u="[object Boolean]",l="[object Date]",c="[object Map]",p="[object Number]",f="[object RegExp]",d="[object Set]",h="[object String]",y="[object Symbol]",g="[object ArrayBuffer]",m="[object DataView]",v="[object Float32Array]",b="[object Float64Array]",_="[object Int8Array]",w="[object Int16Array]",x="[object Int32Array]",E="[object Uint8Array]",k="[object Uint8ClampedArray]",O="[object Uint16Array]",S="[object Uint32Array]";e.exports=function(e,t,n){var P=e.constructor;switch(t){case g:return r(e);case u:case l:return new P(+e);case m:return o(e,n);case v:case b:case _:case w:case x:case E:case k:case O:case S:return s(e,n);case c:return new P;case p:case h:return new P(e);case f:return i(e);case d:return new P;case y:return a(e)}}},function(e,t,n){var r=n(145);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},function(e,t){var n=/\w*$/;e.exports=function(e){var t=new e.constructor(e.source,n.exec(e));return t.lastIndex=e.lastIndex,t}},function(e,t,n){var r=n(9),o=r?r.prototype:void 0,i=o?o.valueOf:void 0;e.exports=function(e){return i?Object(i.call(e)):{}}},function(e,t,n){var r=n(324),o=n(90),i=n(96),a=i&&i.isMap,s=a?o(a):r;e.exports=s},function(e,t,n){var r=n(58),o=n(7),i="[object Map]";e.exports=function(e){return o(e)&&r(e)==i}},function(e,t,n){var r=n(326),o=n(90),i=n(96),a=i&&i.isSet,s=a?o(a):r;e.exports=s},function(e,t,n){var r=n(58),o=n(7),i="[object Set]";e.exports=function(e){return o(e)&&r(e)==i}},function(e,t,n){var r=n(25),o=n(328),i=n(329),a=n(18);e.exports=function(e,t){return t=r(t,e),null==(e=i(e,t))||delete e[a(o(t))]}},function(e,t){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},function(e,t,n){var r=n(33),o=n(245);e.exports=function(e,t){return t.length<2?e:r(e,o(t,0,-1))}},function(e,t,n){var r=n(246);e.exports=function(e){return r(e)?void 0:e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.firstToUpperCase=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},t.stripHTML=function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}},function(e,t){e.exports=window.yoast.analysisReport},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setActiveMarker=function(e){return{type:r,activeMarker:e}};var r=t.SET_ACTIVE_MARKER="WPSEO_SET_ACTIVE_MARKER"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.updateAnalysisData=function(e){return{type:r,data:e}};var r=t.UPDATE_SNIPPET_DATA="SNIPPET_EDITOR_UPDATE_ANALYSIS_DATA"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.SET_PRIMARY_TAXONOMY="WPSEO_SET_PRIMARY_TAXONOMY";t.setPrimaryTaxonomyId=function(e,t){return{type:r,taxonomy:e,termId:t}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.SET_SETTINGS="SET_SETTINGS";t.setSettings=function(e){return{type:r,settings:e}}},function(e,t,n){var r=n(206),o=n(24),i=n(255),a=n(101),s=Object.prototype,u=s.hasOwnProperty,l=r(function(e,t){e=Object(e);var n=-1,r=t.length,l=r>2?t[2]:void 0;for(l&&i(t[0],t[1],l)&&(r=1);++n<r;)for(var c=t[n],p=a(c),f=-1,d=p.length;++f<d;){var h=p[f],y=e[h];(void 0===y||o(y,s[h])&&!u.call(e,h))&&(e[h]=c[h])}return e});e.exports=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(51),o=function(e){return e&&e.__esModule?e:{default:e}}(n(486)),i=n(217);t.default=(0,r.connect)(function(e){return{isCornerstone:e.isCornerstone}},function(e){return{onChange:function(){e((0,i.toggleCornerstoneContent)())}}})(o.default)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(51),o=n(19);t.default=(0,r.connect)(function(e){return{message:e.warning.message}})(o.Warning)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(22),i=n(5),a=h(n(2)),s=n(51),u=n(48),l=h(n(11)),c=n(202),p=n(254),f=h(n(341)),d=n(151);function h(e){return e&&e.__esModule?e:{default:e}}var y=l.default.div.withConfig({displayName:"KeywordInput__KeywordInputContainer",componentId:"sc-16tnggn-0"})(["padding:16px;border-bottom:1px solid transparent;"]),g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.Component),r(t,[{key:"render",value:function(){var e=this;return wp.element.createElement(d.LocationConsumer,null,function(n){return wp.element.createElement(y,null,wp.element.createElement(u.KeywordInput,{id:"focus-keyword-input-"+n,onChange:e.props.onFocusKeywordChange,keyword:e.props.keyword,label:(0,i.__)("Focus keyphrase","wordpress-seo"),helpLink:t.renderHelpLink(),onBlurKeyword:e.props.onBlurKeyword,onFocusKeyword:e.props.onFocusKeyword}))})}}],[{key:"renderHelpLink",value:function(){return wp.element.createElement(f.default,{href:wpseoAdminL10n["shortlinks.focus_keyword_info"],className:"dashicons"},wp.element.createElement("span",{className:"screen-reader-text"},(0,i.__)("Help on choosing the perfect focus keyphrase","wordpress-seo")))}}]),t}();g.propTypes={keyword:a.default.string,onFocusKeywordChange:a.default.func.isRequired,onFocusKeyword:a.default.func.isRequired,onBlurKeyword:a.default.func.isRequired},g.defaultProps={keyword:""},t.default=(0,s.connect)(function(e){return{keyword:e.focusKeyword}},function(e){return{onFocusKeywordChange:function(t){e((0,c.setFocusKeyword)(t))},onFocusKeyword:function(){e((0,p.setMarkerPauseStatus)(!0))},onBlurKeyword:function(){e((0,p.setMarkerPauseStatus)(!1))}}})(g)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(107),o=n(23),i=function(e){return e&&e.__esModule?e:{default:e}}(n(11));var a=(0,o.makeOutboundLink)(i.default.a.withConfig({displayName:"HelpLink",componentId:"sc-1ue6ao6-0"})(["display:inline-block;position:relative;outline:none;text-decoration:none;border-radius:100%;width:24px;height:24px;margin:-4px 0;vertical-align:middle;color:",";&:hover,&:focus{color:",";}&:active{color:",';}&::before{position:absolute;top:0;left:0;padding:2px;content:"\f223";}'],r.colors.$color_help_text,r.colors.$color_snippet_focus,r.colors.$color_help_text));t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(22),i=m(n(2)),a=n(51),s=m(n(11)),u=n(5),l=m(n(121)),c=m(n(343)),p=m(n(344)),f=m(n(207)),d=m(n(209)),h=n(208),y=n(151),g=m(n(341));function m(e){return e&&e.__esModule?e:{default:e}}var v=s.default.span.withConfig({displayName:"ReadabilityAnalysis__AnalysisHeader",componentId:"z9f9eh-0"})(["font-size:1em;font-weight:bold;margin:0 0 8px;display:block;"]),b=s.default.div.withConfig({displayName:"ReadabilityAnalysis__ReadabilityResultsTabContainer",componentId:"z9f9eh-1"})(["padding:16px;"]),_={};window.wpseoPostScraperL10n?_=wpseoPostScraperL10n:window.wpseoTermScraperL10n&&(_=wpseoTermScraperL10n);var w=(0,s.default)(g.default).withConfig({displayName:"ReadabilityAnalysis__StyledHelpLink",componentId:"z9f9eh-2"})(["margin:-8px 0 -4px 4px;"]),x=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.Component),r(t,[{key:"renderResults",value:function(){return wp.element.createElement(o.Fragment,null,wp.element.createElement(v,null,(0,u.__)("Analysis results","wordpress-seo"),wp.element.createElement(w,{href:wpseoAdminL10n["shortlinks.readability_analysis_info"],className:"dashicons"},wp.element.createElement("span",{className:"screen-reader-text"},(0,u.__)("Learn more about the readability analysis","wordpress-seo")))),wp.element.createElement(p.default,{canChangeLanguage:!(""===_.settings_link),showLanguageNotice:!1,changeLanguageLink:_.settings_link,language:_.language,results:this.props.results,marksButtonClassName:"yoast-tooltip yoast-tooltip-w",marksButtonStatus:this.props.marksButtonStatus}))}},{key:"render",value:function(){var e=this,t=(0,d.default)(this.props.overallScore);return(0,l.default)(this.props.overallScore)&&(t.className="loading"),wp.element.createElement(y.LocationConsumer,null,function(n){return"sidebar"===n?wp.element.createElement(f.default,{title:(0,u.__)("Readability analysis","wordpress-seo"),titleScreenReaderText:t.screenReaderReadabilityText,prefixIcon:(0,h.getIconForScore)(t.className),prefixIconCollapsed:(0,h.getIconForScore)(t.className),id:"yoast-readability-analysis-collapsible-"+n},e.renderResults()):"metabox"===n?(0,o.createPortal)(wp.element.createElement(b,null,wp.element.createElement(c.default,{scoreIndicator:t.className,elementId:"wpseo-readability-score-icon"}),e.renderResults()),document.getElementById("wpseo-metabox-readability-root")):void 0})}}]),t}();x.propTypes={results:i.default.array.isRequired,marksButtonStatus:i.default.string.isRequired,hideMarksButtons:i.default.bool.isRequired,overallScore:i.default.number},x.defaultProps={overallScore:null},t.default=(0,a.connect)(function(e,t){var n=t.hideMarksButtons?"disabled":e.marksButtonStatus;return{results:e.analysis.readability.results,marksButtonStatus:n,overallScore:e.analysis.readability.overallScore}})(x)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(22),o=n(19),i=function(e){return e&&e.__esModule?e:{default:e}}(n(2)),a=n(208);var s=function(e){var t=e.elementId,n=e.scoreIndicator,i=document.getElementById(t);return i?(0,r.createPortal)(wp.element.createElement(o.SvgIcon,(0,a.getIconForScore)(n)),i):null};s.propTypes={elementId:i.default.string.isRequired,scoreIndicator:i.default.string.isRequired},t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=d(n(0)),i=d(n(2)),a=n(19),s=n(332),u=n(22),l=n(345),c=n(120),p=n(45),f=d(n(208));function d(e){return e&&e.__esModule?e:{default:e}}var h=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e)),r=n.props.results;return n.state={mappedResults:{}},null!==r&&(n.state={mappedResults:(0,f.default)(r,n.props.keywordKey)}),n.handleMarkButtonClick=n.handleMarkButtonClick.bind(n),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.default.Component),r(t,[{key:"componentDidUpdate",value:function(e){null!==this.props.results&&this.props.results!==e.results&&this.setState({mappedResults:(0,f.default)(this.props.results,this.props.keywordKey)})}},{key:"handleMarkButtonClick",value:function(e,t){var n=this.props.keywordKey.length>0?this.props.keywordKey+":"+e:e;n===this.props.activeMarker?(this.props.setActiveMarker(null),this.props.setMarkerPauseStatus(!1),this.removeMarkers()):(this.props.setActiveMarker(n),t())}},{key:"removeMarkers",value:function(){window.YoastSEO.analysis.applyMarks(new p.Paper("",{}),[])}},{key:"render",value:function(){var e=this.state.mappedResults,t=e.errorsResults,n=e.improvementsResults,r=e.goodResults,o=e.considerationsResults,i=e.problemsResults;return wp.element.createElement(u.Fragment,null,wp.element.createElement(a.LanguageNotice,{changeLanguageLink:this.props.changeLanguageLink,language:this.props.language,showLanguageNotice:this.props.showLanguageNotice,canChangeLanguage:this.props.canChangeLanguage}),wp.element.createElement(s.ContentAnalysis,{errorsResults:t,problemsResults:i,improvementsResults:n,considerationsResults:o,goodResults:r,activeMarker:this.props.activeMarker,onMarkButtonClick:this.handleMarkButtonClick,marksButtonClassName:this.props.marksButtonClassName,marksButtonStatus:this.props.marksButtonStatus,headingLevel:3,keywordKey:this.props.keywordKey}))}}]),t}();h.propTypes={results:i.default.array,language:i.default.string,changeLanguageLink:i.default.string,showLanguageNotice:i.default.bool.isRequired,canChangeLanguage:i.default.bool,marksButtonClassName:i.default.string,marksButtonStatus:i.default.string,setActiveMarker:i.default.func.isRequired,setMarkerPauseStatus:i.default.func.isRequired,activeMarker:i.default.string,keywordKey:i.default.string},h.defaultProps={results:null,language:"",changeLanguageLink:"#",canChangeLanguage:!1,marksButtonStatus:"enabled",marksButtonClassName:"",activeMarker:null,keywordKey:""},t.default=(0,l.compose)([(0,c.withSelect)(function(e){return{activeMarker:(0,e("yoast-seo/editor").getActiveMarker)()}}),(0,c.withDispatch)(function(e){var t=e("yoast-seo/editor");return{setActiveMarker:t.setActiveMarker,setMarkerPauseStatus:t.setMarkerPauseStatus}})])(h)},function(e,t){e.exports=window.wp.compose},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(22),i=E(n(2)),a=n(51),s=E(n(11)),u=n(98),l=n(5),c=n(19),p=n(107),f=E(n(343)),d=E(n(207)),h=E(n(344)),y=E(n(209)),g=n(208),m=E(n(488)),v=E(n(347)),b=E(n(489)),_=n(151),w=E(n(490)),x=n(348);function E(e){return e&&e.__esModule?e:{default:e}}var k=s.default.span.withConfig({displayName:"SeoAnalysis__AnalysisHeader",componentId:"sc-18qlxmf-0"})(["font-size:1em;font-weight:bold;margin:1.5em 0 1em;display:block;"]),O=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.Component),r(t,[{key:"renderSynonymsUpsell",value:function(e){var t={classes:{openButton:"wpseo-keyword-synonyms button-link"},labels:{open:"+ "+(0,l.__)("Add synonyms","wordpress-seo"),modalAriaLabel:(0,l.sprintf)((0,l.__)("Get %s","wordpress-seo"),"Yoast SEO Premium"),heading:(0,l.sprintf)((0,l.__)("Get %s","wordpress-seo"),"Yoast SEO Premium")}},n=wpseoAdminL10n["shortlinks.upsell.metabox.focus_keyword_synonyms_link"],r=wpseoAdminL10n["shortlinks.upsell.metabox.focus_keyword_synonyms_button"];return"sidebar"===e.toLowerCase()&&(n=wpseoAdminL10n["shortlinks.upsell.sidebar.focus_keyword_synonyms_link"],r=wpseoAdminL10n["shortlinks.upsell.sidebar.focus_keyword_synonyms_button"]),wp.element.createElement(v.default,t,wp.element.createElement(x.ModalContainer,null,wp.element.createElement(x.ModalIcon,{icon:c.YoastSeoIcon}),wp.element.createElement("h2",null,(0,l.__)("Would you like to add keyphrase synonyms?","wordpress-seo")),wp.element.createElement(m.default,{link:n,buyLink:r})))}},{key:"renderMultipleKeywordsUpsell",value:function(e){var t={classes:{openButton:"wpseo-multiple-keywords button-link"},labels:{open:"+ "+(0,l.__)("Add related keyphrase","wordpress-seo"),modalAriaLabel:(0,l.sprintf)((0,l.__)("Get %s","wordpress-seo"),"Yoast SEO Premium"),heading:(0,l.sprintf)((0,l.__)("Get %s","wordpress-seo"),"Yoast SEO Premium")}},n=wpseoAdminL10n["shortlinks.upsell.metabox.focus_keyword_additional_link"],r=wpseoAdminL10n["shortlinks.upsell.metabox.focus_keyword_additional_button"];return"sidebar"===e.toLowerCase()&&(n=wpseoAdminL10n["shortlinks.upsell.sidebar.focus_keyword_additional_link"],r=wpseoAdminL10n["shortlinks.upsell.sidebar.focus_keyword_additional_button"]),wp.element.createElement(v.default,t,wp.element.createElement(x.ModalContainer,null,wp.element.createElement(x.ModalIcon,{icon:c.YoastSeoIcon}),wp.element.createElement("h2",null,(0,l.__)("Would you like to add a related keyphrase?","wordpress-seo")),wp.element.createElement(b.default,{link:n,buyLink:r})))}},{key:"renderKeywordUpsell",value:function(e){var t=wpseoAdminL10n["shortlinks.upsell.metabox.additional_link"],n=wpseoAdminL10n["shortlinks.upsell.metabox.additional_button"];return"sidebar"===e.toLowerCase()&&(t=wpseoAdminL10n["shortlinks.upsell.sidebar.additional_link"],n=wpseoAdminL10n["shortlinks.upsell.sidebar.additional_button"]),wp.element.createElement(d.default,{prefixIcon:{icon:"plus",color:p.colors.$color_grey_medium_dark},prefixIconCollapsed:{icon:"plus",color:p.colors.$color_grey_medium_dark},title:(0,l.__)("Add related keyphrase","wordpress-seo"),id:"yoast-additional-keyphrase-collapsible-"+e},wp.element.createElement(b.default,{link:t,buyLink:n}))}},{key:"renderWordFormsUpsell",value:function(e){return wp.element.createElement(w.default,{url:"sidebar"===e?wpseoAdminL10n["shortlinks.upsell.sidebar.morphology_upsell_sidebar"]:wpseoAdminL10n["shortlinks.upsell.sidebar.morphology_upsell_metabox"],alignment:"sidebar"===e?"vertical":"horizontal"})}},{key:"renderTabIcon",value:function(e,t){return"metabox"!==e?null:wp.element.createElement(f.default,{elementId:"wpseo-seo-score-icon",scoreIndicator:t})}},{key:"render",value:function(){var e=this,t=(0,y.default)(this.props.overallScore);return"loading"!==t.className&&""===this.props.keyword&&(t.className="na",t.screenReaderReadabilityText=(0,l.__)("Enter a focus keyphrase to calculate the SEO score","wordpress-seo")),wp.element.createElement(_.LocationConsumer,null,function(n){return wp.element.createElement(o.Fragment,null,wp.element.createElement(d.default,{title:(0,l.__)("SEO analysis","wordpress-seo"),titleScreenReaderText:t.screenReaderReadabilityText,prefixIcon:(0,g.getIconForScore)(t.className),prefixIconCollapsed:(0,g.getIconForScore)(t.className),subTitle:e.props.keyword,id:"yoast-seo-analysis-collapsible-"+n},wp.element.createElement(u.Slot,{name:"yoast-synonyms-"+n}),e.props.shouldUpsell&&wp.element.createElement(o.Fragment,null,e.renderSynonymsUpsell(n),e.renderMultipleKeywordsUpsell(n)),e.props.shouldUpsellWordFormRecognition&&e.renderWordFormsUpsell(n),wp.element.createElement(k,null,(0,l.__)("Analysis results","wordpress-seo")),wp.element.createElement(h.default,{showLanguageNotice:!1,results:e.props.results,marksButtonClassName:"yoast-tooltip yoast-tooltip-w",marksButtonStatus:e.props.marksButtonStatus})),e.props.shouldUpsell&&e.renderKeywordUpsell(n),e.renderTabIcon(n,t.className))})}}]),t}();O.propTypes={results:i.default.array,marksButtonStatus:i.default.string,keyword:i.default.string,shouldUpsell:i.default.bool,shouldUpsellWordFormRecognition:i.default.bool,overallScore:i.default.number},O.defaultProps={results:[],marksButtonStatus:null,keyword:"",shouldUpsell:!1,shouldUpsellWordFormRecognition:!1,overallScore:null},t.default=(0,a.connect)(function(e,t){var n=t.hideMarksButtons?"disabled":e.marksButtonStatus,r=e.focusKeyword,o=[],i=null;return e.analysis.seo[r]&&(o=e.analysis.seo[r].results,i=e.analysis.seo[r].overallScore),{results:o,marksButtonStatus:n,keyword:r,overallScore:i}})(O)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=l(n(0)),i=l(n(2)),a=l(n(11)),s=n(5),u=n(19);function l(e){return e&&e.__esModule?e:{default:e}}var c=a.default.button.withConfig({displayName:"Modal__StyledButton",componentId:"sc-1fwm34s-0"})(["&&{display:flex;align-items:center;}.yoast-svg-icon{margin:1px 7px 0 0;fill:currentColor;}"]),p=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.state={modalIsOpen:!1},n.openModal=n.openModal.bind(n),n.closeModal=n.closeModal.bind(n),n.appElement=document.querySelector(n.props.appElement),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.default.Component),r(t,[{key:"openModal",value:function(){this.setState({modalIsOpen:!0})}},{key:"closeModal",value:function(){this.setState({modalIsOpen:!1})}},{key:"render",value:function(){var e={open:(0,s.__)("Open","wordpress-seo"),heading:"",closeIconButton:(0,s.__)("Close","wordpress-seo"),closeButton:""},t=Object.assign({},e,this.props.labels);return wp.element.createElement(o.default.Fragment,null,wp.element.createElement(c,{type:"button",onClick:this.openModal,className:this.props.classes.openButton+" yoast-modal__button-open"},this.props.openButtonIcon&&wp.element.createElement(u.SvgIcon,{icon:this.props.openButtonIcon,size:"13px"}),t.open),wp.element.createElement(u.Modal,{isOpen:this.state.modalIsOpen,onClose:this.closeModal,className:this.props.className,modalAriaLabel:t.modalAriaLabel,appElement:this.appElement,heading:t.heading,closeIconButton:t.closeIconButton,closeIconButtonClassName:this.props.classes.closeIconButton,closeButton:t.closeButton,closeButtonClassName:this.props.classes.closeButton},this.props.children))}}]),t}();p.propTypes={appElement:i.default.string,openButtonIcon:i.default.string,labels:i.default.shape({open:i.default.string,modalAriaLabel:i.default.string.isRequired,heading:i.default.string,closeIconButton:i.default.string,closeButton:i.default.string}).isRequired,classes:i.default.shape({openButton:i.default.string,closeIconButton:i.default.string,closeButton:i.default.string}),className:i.default.string,children:i.default.any.isRequired},p.defaultProps={className:"",appElement:"#wpwrap",openButtonIcon:"",classes:{}},t.default=p},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ModalIcon=t.ModalContainer=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(11)),o=n(19),i=n(23);t.ModalContainer=r.default.div.withConfig({displayName:"Container__ModalContainer",componentId:"sc-1onoh63-0"})(["min-width:600px;@media screen and ( max-width:680px ){min-width:0;width:86vw;}"]),t.ModalIcon=(0,r.default)(o.Icon).withConfig({displayName:"Container__ModalIcon",componentId:"sc-1onoh63-1"})(["float:",";margin:",";&&{width:150px;height:150px;@media screen and ( max-width:680px ){width:80px;height:80px;}}"],(0,i.getDirectionalStyle)("right","left"),(0,i.getDirectionalStyle)("0 0 16px 16px","0 16px 16px 0"))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});r(n(0));function r(e){return e&&e.__esModule?e:{default:e}}var o=(0,r(n(491)).default)(function(e){var t=e.children;return wp.element.createElement("div",null,t)});t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mapEditorDataToPreview=void 0;var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};t.mapStateToProps=b,t.mapDispatchToProps=_;var o=y(n(0)),i=n(51),a=n(237),s=y(n(42)),u=y(n(16)),l=n(5),c=n(120),p=y(n(45)),f=n(39),d=n(334),h=y(n(311));function y(e){return e&&e.__esModule?e:{default:e}}var g=p.default.string.stripHTMLTags,m=function(e){var t=(0,u.default)(window,["YoastSEO","app","pluggable"],!1);if(!t||!(0,u.default)(window,["YoastSEO","app","pluggable","loaded"],!1))return function(e){var t=(0,u.default)(window,["YoastSEO","wp","replaceVarsPlugin","replaceVariables"],s.default);return{url:e.url,title:g(t(e.title)),description:g(t(e.description))}}(e);var n=t._applyModifications.bind(t);return{url:e.url,title:g(n("data_page_title",e.title)),description:g(n("data_meta_desc",e.description))}},v=t.mapEditorDataToPreview=function(e,t){var n=0;return t.shortenedBaseUrl&&"string"==typeof t.shortenedBaseUrl&&(n=t.shortenedBaseUrl.length),e.url=e.url.replace(/\s+/g,"-"),"-"===e.url[e.url.length-1]&&(e.url=e.url.slice(0,-1)),"-"===e.url[n]&&(e.url=e.url.slice(0,n)+e.url.slice(n+1)),m(e)};function b(e){return e.snippetEditor.replacementVariables.forEach(function(e){""!==e.value||["title","excerpt","excerpt_only"].includes(e.name)||(e.value="%%"+e.name+"%%")}),r({},e.snippetEditor,{keyword:e.focusKeyword,baseUrl:e.settings.snippetEditor.baseUrl,date:e.settings.snippetEditor.date,recommendedReplacementVariables:e.settings.snippetEditor.recommendedReplacementVariables})}function _(e){return{onChange:function(t,n){var r=(0,f.updateData)(function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,n));if("mode"===t&&(r=(0,f.switchMode)(n)),e(r),"slug"===t){var o=(0,c.dispatch)("core/editor");o&&o.editPost({slug:n})}},onChangeAnalysisData:function(t){e((0,d.updateAnalysisData)(t))}}}t.default=(0,i.connect)(b,_)(function(e){return wp.element.createElement(o.default.Fragment,null,wp.element.createElement(h.default,{icon:"eye",hasPaperStyle:e.hasPaperStyle},wp.element.createElement(a.SnippetEditor,r({},e,{descriptionPlaceholder:(0,l.__)("Please provide a meta description by editing the snippet below.","wordpress-seo"),mapEditorDataToPreview:v}))))})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){return e&&e.__esModule?e:{default:e}}(n(2)),o=n(51),i=n(11),a=n(151);var s=function(e){var t=e.store,n=e.theme,r=e.location,s=e.children;return wp.element.createElement(a.LocationProvider,{value:r},wp.element.createElement(i.ThemeProvider,{theme:n},wp.element.createElement(o.Provider,{store:t},s)))};s.propTypes={store:r.default.object.isRequired,theme:r.default.object.isRequired,location:r.default.oneOf(["sidebar","metabox"]).isRequired,children:r.default.element.isRequired},t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.target,n=e.store,s=e.theme,u=document.getElementById(t);if(!u)return null;return(0,o.createPortal)(wp.element.createElement(o.Fragment,null,wp.element.createElement(r.Slot,{name:"YoastMetabox"},function(e){return(0,a.default)(e)}),wp.element.createElement(i.default,{store:n,theme:s})),u)};var r=n(98),o=n(22),i=s(n(493)),a=s(n(353));function s(e){return e&&e.__esModule?e:{default:e}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(void 0===e.length)return e;return(0,r.default)(e).sort(function(e,t){return void 0===e.props.renderPriority?1:e.props.renderPriority-t.props.renderPriority})};var r=function(e){return e&&e.__esModule?e:{default:e}}(n(195))},function(e,t,n){var r=n(502),o=n(143);e.exports=function(e,t){return null!=e&&o(e,t,r)}},function(e,t,n){var r=n(115);e.exports=function(e,t){return!(null==e||!e.length)&&r(e,t,0)>-1}},function(e,t){e.exports=function(e,t,n){for(var r=-1,o=null==e?0:e.length;++r<o;)if(n(t,e[r]))return!0;return!1}},function(e,t,n){"use strict";e.exports={update:function(e){var t=jQuery(".yst-traffic-light"),n=t.closest(".wpseo-meta-section-link"),r=jQuery("#wpseo-traffic-light-desc"),o=e.className||"na";t.attr("class","yst-traffic-light "+o),n.attr("aria-describedby","wpseo-traffic-light-desc"),r.length>0?r.text(e.screenReaderText):n.closest("li").append("<span id='wpseo-traffic-light-desc' class='screen-reader-text'>"+e.screenReaderText+"</span>")}}},function(e,t,n){"use strict";e.exports={update:function(e){jQuery(".adminbar-seo-score").attr("class","wpseo-score-icon adminbar-seo-score "+e.className).find(".adminbar-seo-score-text").text(e.screenReaderText)}}},function(e,t,n){var r=n(159),o=n(24);e.exports=function(e,t,n){(void 0===n||o(e[t],n))&&(void 0!==n||t in e)||r(e,t,n)}},function(e,t,n){var r=n(27),o=n(7);e.exports=function(e){return o(e)&&r(e)}},function(e,t){e.exports=function(e,t){if("__proto__"!=t)return e[t]}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=(0,o.default)();return(0,r.default)(e,"contentLocale","en_US")};var r=i(n(16)),o=i(n(108));function i(e){return e&&e.__esModule?e:{default:e}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=document.getElementById(r);t||(t=function(){var e=document.createElement("div");return e.id=r,e.style.position="absolute",e.style.left="-9999em",e.style.top=0,e.style.height=0,e.style.overflow="hidden",e.style.fontFamily="arial, sans-serif",e.style.fontSize="18px",e.style.fontWeight="400",document.body.appendChild(e),e}());return t.innerHTML=e,t.offsetWidth};var r="yoast-measurement-element"},,,,,,,,,,,,,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=u(n(337)),i=u(n(148)),a=u(n(482)),s=u(n(483));function u(e){return e&&e.__esModule?e:{default:e}}var l={classicEditorHidden:i.default,classicEditorShown:i.default,pageBuilderLoaded:i.default},c=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.determineActivePageBuilders()}return r(e,[{key:"determineActivePageBuilders",value:function(){a.default.isActive()&&(this.diviActive=!0),s.default.isActive()&&(this.vcActive=!0)}},{key:"isPageBuilderActive",value:function(){return this.diviActive||this.vcActive}},{key:"listen",value:function(e){(this.callbacks=(0,o.default)(e,l),this.diviActive)&&(new a.default).listen(e)}},{key:"isClassicEditorHidden",value:function(){return!(!this.diviActive||!a.default.isTinyMCEHidden())}}]),e}();t.default=c},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){var r=n(4);e.exports=function(){return r.Date.now()}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=(O(n(0)),O(n(11))),i=n(22),a=n(98),s=n(120),u=O(n(16)),l=O(n(460)),c=O(n(463)),p=O(n(466)),f=O(n(480)),d=O(n(481)),h=O(n(257)),y=O(n(484)),g=O(n(352)),m=O(n(353)),v=k(n(495)),b=n(500),_=k(b),w=n(336),x=O(n(501)),E=n(252);function k(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function O(e){return e&&e.__esModule?e:{default:e}}var S=(0,o.default)(f.default).withConfig({displayName:"edit__PinnedPluginIcon",componentId:"bs2hdt-0"})(["width:20px;height:20px;"]),P=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._localizedData=this.getLocalizedData(),this._args=t,this._init()}return r(e,[{key:"getLocalizedData",value:function(){return window.wpseoPostScraperL10n||window.wpseoTermScraperL10n||{intl:{},isRtl:!1}}},{key:"_init",value:function(){this._store=this._registerStoreInGutenberg(),this._registerPlugin(),this._data=this._initializeData(),this._store.dispatch((0,w.setSettings)({snippetEditor:{baseUrl:this._args.snippetEditorBaseUrl,date:this._args.snippetEditorDate,recommendedReplacementVariables:this._args.recommendedReplaceVars}}))}},{key:"_registerStoreInGutenberg",value:function(){return(0,s.registerStore)("yoast-seo/editor",{reducer:(0,s.combineReducers)(p.default),selectors:v,actions:(0,l.default)(_,function(e){return"function"==typeof e})})}},{key:"_registerPlugin",value:function(){if((0,h.default)()){var e=wp.editPost,t=e.PluginSidebar,n=e.PluginSidebarMoreMenuItem,r=wp.plugins.registerPlugin,o=this._store,s=this._localizedData.isPremium?"Yoast SEO Premium":"Yoast SEO",u={isRtl:this._localizedData.isRtl};r("yoast-seo",{render:function(){return wp.element.createElement(i.Fragment,null,wp.element.createElement(n,{target:"seo-sidebar",icon:wp.element.createElement(f.default,null)},s),wp.element.createElement(t,{name:"seo-sidebar",title:s},wp.element.createElement(a.Slot,{name:"YoastSidebar"},function(e){return(0,m.default)(e)})),wp.element.createElement(i.Fragment,null,wp.element.createElement(y.default,{store:o,theme:u}),wp.element.createElement(g.default,{target:"wpseo-metabox-root",store:o,theme:u})))},icon:wp.element.createElement(S,null)})}}},{key:"_initializeData",value:function(){var e=this._store,t=this._args,n=(0,u.default)(window,"wp.data");if((0,h.default)()){var r=new c.default(n,t.onRefreshRequest,e);return r.initialize(t.replaceVars),r}var o=new d.default(t.onRefreshRequest,e,t.classicEditorDataSettings);return o.initialize(t.replaceVars),o}},{key:"initializeUsedKeywords",value:function(e,t){var n=this._store,r=this._localizedData,o=(0,u.default)(window,["wpseoAnalysisWorkerL10n","keywords_assessment_url"],"wp-seo-used-keywords-assessment.js"),i=new x.default(t,r,e,o);i.init();var a={};n.subscribe(function(){var e=n.getState()||{};e.focusKeyword!==a.focusKeyword&&(a=e,i.setKeyword(e.focusKeyword))})}},{key:"initializeAnnotations",value:function(){(0,E.isAnnotationAvailable)()&&this._store.dispatch((0,b.setMarkerStatus)("enabled"))}},{key:"getStore",value:function(){return this._store}},{key:"getData",value:function(){return this._data}}]),e}();t.default=P},function(e,t,n){var r=n(31),o=n(116),i=n(461),a=n(160);e.exports=function(e,t){if(null==e)return{};var n=r(a(e),function(e){return[e]});return t=o(t),i(e,n,function(e,n){return t(e,n[0])})}},function(e,t,n){var r=n(33),o=n(462),i=n(25);e.exports=function(e,t,n){for(var a=-1,s=t.length,u={};++a<s;){var l=t[a],c=r(e,l);n(c,l)&&o(u,i(l,e),c)}return u}},function(e,t,n){var r=n(158),o=n(25),i=n(55),a=n(6),s=n(18);e.exports=function(e,t,n,u){if(!a(e))return e;for(var l=-1,c=(t=o(t,e)).length,p=c-1,f=e;null!=f&&++l<c;){var d=s(t[l]),h=n;if(l!=p){var y=f[d];void 0===(h=u?u(y,d,f):void 0)&&(h=a(y)?y:i(t[l+1])?[]:{})}r(f,d,h),f=f[d]}return e}},function(e,t,n){"use strict";var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e){return e&&e.__esModule?e:{default:e}}(n(201)),a=n(39),s=n(194),u=n(252);var l=function(){function e(t,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._wpData=t,this._refresh=n,this._store=r,this._data={},this.getPostAttribute=this.getPostAttribute.bind(this),this.refreshYoastSEO=this.refreshYoastSEO.bind(this)}return o(e,[{key:"initialize",value:function(e){this._data=this.getInitialData(e),(0,s.fillReplacementVariables)(this._data,this._store),this.subscribeToGutenberg(),this.subscribeToYoastSEO()}},{key:"getInitialData",value:function(e){var t=this.collectGutenbergData(this.getPostAttribute);return e=(0,s.mapCustomFields)(e,this._store),e=(0,s.mapCustomTaxonomies)(e,this._store),r({},e,t)}},{key:"setRefresh",value:function(e){this._refresh=e}},{key:"isShallowEqual",value:function(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(e.hasOwnProperty(n)&&(!(n in t)||e[n]!==t[n]))return!1;return!0}},{key:"getPostAttribute",value:function(e){return this._coreEditorSelect||(this._coreEditorSelect=this._wpData.select("core/editor")),this._coreEditorSelect.getEditedPostAttribute(e)}},{key:"getSlug",value:function(){if("auto-draft"===this.getPostAttribute("status"))return"";var e=this.getPostAttribute("generated_slu