[
MAINHACK SHELL
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: admin.tar
ajax/class-shortcode-filter.php 0000644 00000003067 15150262017 0012565 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Ajax */ /** * Class WPSEO_Shortcode_Filter. * * Used for parsing WP shortcodes with AJAX. */ class WPSEO_Shortcode_Filter { /** * Initialize the AJAX hooks. */ public function __construct() { add_action( 'wp_ajax_wpseo_filter_shortcodes', [ $this, 'do_filter' ] ); } /** * Parse the shortcodes. * * @return void */ public function do_filter() { check_ajax_referer( 'wpseo-filter-shortcodes', 'nonce' ); if ( ! isset( $_POST['data'] ) || ! is_array( $_POST['data'] ) ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: WPSEO_Utils::format_json_encode is considered safe. wp_die( WPSEO_Utils::format_json_encode( [] ) ); } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: $shortcodes is getting sanitized later, before it's used. $shortcodes = wp_unslash( $_POST['data'] ); $parsed_shortcodes = []; foreach ( $shortcodes as $shortcode ) { if ( $shortcode !== sanitize_text_field( $shortcode ) ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: WPSEO_Utils::format_json_encode is considered safe. wp_die( WPSEO_Utils::format_json_encode( [] ) ); } $parsed_shortcodes[] = [ 'shortcode' => $shortcode, 'output' => do_shortcode( $shortcode ), ]; } // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: WPSEO_Utils::format_json_encode is considered safe. wp_die( WPSEO_Utils::format_json_encode( $parsed_shortcodes ) ); } } ajax/class-yoast-dismissable-notice.php 0000644 00000003716 15150262017 0014224 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Ajax */ /** * This class will catch the request to dismiss the target notice (set by notice_name) * and will store the dismiss status as an user meta in the database. */ class Yoast_Dismissable_Notice_Ajax { /** * Notice type toggle value for user notices. * * @var string */ public const FOR_USER = 'user_meta'; /** * Notice type toggle value for network notices. * * @var string */ public const FOR_NETWORK = 'site_option'; /** * Notice type toggle value for site notices. * * @var string */ public const FOR_SITE = 'option'; /** * Name of the notice that will be dismissed. * * @var string */ private $notice_name; /** * The type of the current notice. * * @var string */ private $notice_type; /** * Initialize the hooks for the AJAX request. * * @param string $notice_name The name for the hook to catch the notice. * @param string $notice_type The notice type. */ public function __construct( $notice_name, $notice_type = self::FOR_USER ) { $this->notice_name = $notice_name; $this->notice_type = $notice_type; add_action( 'wp_ajax_wpseo_dismiss_' . $notice_name, [ $this, 'dismiss_notice' ] ); } /** * Handles the dismiss notice request. * * @return void */ public function dismiss_notice() { check_ajax_referer( 'wpseo-dismiss-' . $this->notice_name ); $this->save_dismissed(); wp_die( 'true' ); } /** * Storing the dismissed value in the database. The target location is based on the set notification type. * * @return void */ private function save_dismissed() { if ( $this->notice_type === self::FOR_SITE ) { update_option( 'wpseo_dismiss_' . $this->notice_name, 1 ); return; } if ( $this->notice_type === self::FOR_NETWORK ) { update_site_option( 'wpseo_dismiss_' . $this->notice_name, 1 ); return; } update_user_meta( get_current_user_id(), 'wpseo_dismiss_' . $this->notice_name, 1 ); } } ajax/class-yoast-plugin-conflict-ajax.php 0000644 00000006662 15150262017 0014467 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Ajax */ /** * Class Yoast_Plugin_Conflict_Ajax. */ class Yoast_Plugin_Conflict_Ajax { /** * Option identifier where dismissed conflicts are stored. * * @var string */ private $option_name = 'wpseo_dismissed_conflicts'; /** * List of notification identifiers that have been dismissed. * * @var array */ private $dismissed_conflicts = []; /** * Initialize the hooks for the AJAX request. */ public function __construct() { add_action( 'wp_ajax_wpseo_dismiss_plugin_conflict', [ $this, 'dismiss_notice' ] ); } /** * Handles the dismiss notice request. * * @return void */ public function dismiss_notice() { check_ajax_referer( 'dismiss-plugin-conflict' ); if ( ! isset( $_POST['data'] ) || ! is_array( $_POST['data'] ) ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: WPSEO_Utils::format_json_encode is considered safe. wp_die( WPSEO_Utils::format_json_encode( [] ) ); } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: $conflict_data is getting sanitized later. $conflict_data = wp_unslash( $_POST['data'] ); $conflict_data = [ 'section' => sanitize_text_field( $conflict_data['section'] ), 'plugins' => sanitize_text_field( $conflict_data['plugins'] ), ]; $this->dismissed_conflicts = $this->get_dismissed_conflicts( $conflict_data['section'] ); $this->compare_plugins( $conflict_data['plugins'] ); $this->save_dismissed_conflicts( $conflict_data['section'] ); wp_die( 'true' ); } /** * Getting the user option from the database. * * @return bool|array */ private function get_dismissed_option() { return get_user_meta( get_current_user_id(), $this->option_name, true ); } /** * Getting the dismissed conflicts from the database * * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). * * @return array */ private function get_dismissed_conflicts( $plugin_section ) { $dismissed_conflicts = $this->get_dismissed_option(); if ( is_array( $dismissed_conflicts ) && array_key_exists( $plugin_section, $dismissed_conflicts ) ) { return $dismissed_conflicts[ $plugin_section ]; } return []; } /** * Storing the conflicting plugins as an user option in the database. * * @param string $plugin_section Plugin conflict type (such as Open Graph or sitemap). * * @return void */ private function save_dismissed_conflicts( $plugin_section ) { $dismissed_conflicts = $this->get_dismissed_option(); $dismissed_conflicts[ $plugin_section ] = $this->dismissed_conflicts; update_user_meta( get_current_user_id(), $this->option_name, $dismissed_conflicts ); } /** * Loop through the plugins to compare them with the already stored dismissed plugin conflicts. * * @param array $posted_plugins Plugin set to check. * * @return void */ public function compare_plugins( array $posted_plugins ) { foreach ( $posted_plugins as $posted_plugin ) { $this->compare_plugin( $posted_plugin ); } } /** * Check if plugin is already dismissed, if not store it in the array that will be saved later. * * @param string $posted_plugin Plugin to check against dismissed conflicts. * * @return void */ private function compare_plugin( $posted_plugin ) { if ( ! in_array( $posted_plugin, $this->dismissed_conflicts, true ) ) { $this->dismissed_conflicts[] = $posted_plugin; } } } capabilities/class-abstract-capability-manager.php 0000644 00000004360 15150262017 0016345 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Capabilities */ /** * Abstract Capability Manager shared code. */ abstract class WPSEO_Abstract_Capability_Manager implements WPSEO_Capability_Manager { /** * Registered capabilities. * * @var array */ protected $capabilities = []; /** * Registers a capability. * * @param string $capability Capability to register. * @param array $roles Roles to add the capability to. * @param bool $overwrite Optional. Use add or overwrite as registration method. * * @return void */ public function register( $capability, array $roles, $overwrite = false ) { if ( $overwrite || ! isset( $this->capabilities[ $capability ] ) ) { $this->capabilities[ $capability ] = $roles; return; } // Combine configurations. $this->capabilities[ $capability ] = array_merge( $roles, $this->capabilities[ $capability ] ); // Remove doubles. $this->capabilities[ $capability ] = array_unique( $this->capabilities[ $capability ] ); } /** * Returns the list of registered capabilitities. * * @return string[] Registered capabilities. */ public function get_capabilities() { return array_keys( $this->capabilities ); } /** * Returns a list of WP_Role roles. * * The string array of role names are converted to actual WP_Role objects. * These are needed to be able to use the API on them. * * @param array $roles Roles to retrieve the objects for. * * @return WP_Role[] List of WP_Role objects. */ protected function get_wp_roles( array $roles ) { $wp_roles = array_map( 'get_role', $roles ); return array_filter( $wp_roles ); } /** * Filter capability roles. * * @param string $capability Capability to filter roles for. * @param array $roles List of roles which can be filtered. * * @return array Filtered list of roles for the capability. */ protected function filter_roles( $capability, array $roles ) { /** * Filter: Allow changing roles that a capability is added to. * * @param array $roles The default roles to be filtered. */ $filtered = apply_filters( $capability . '_roles', $roles ); // Make sure we have the expected type. if ( ! is_array( $filtered ) ) { return []; } return $filtered; } } capabilities/class-capability-manager-factory.php 0000644 00000001373 15150262017 0016212 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Capabilities */ /** * Capability Manager Factory. */ class WPSEO_Capability_Manager_Factory { /** * Returns the Manager to use. * * @param string $plugin_type Whether it's Free or Premium. * * @return WPSEO_Capability_Manager Manager to use. */ public static function get( $plugin_type = 'free' ) { static $manager = []; if ( ! array_key_exists( $plugin_type, $manager ) ) { if ( function_exists( 'wpcom_vip_add_role_caps' ) ) { $manager[ $plugin_type ] = new WPSEO_Capability_Manager_VIP(); } if ( ! function_exists( 'wpcom_vip_add_role_caps' ) ) { $manager[ $plugin_type ] = new WPSEO_Capability_Manager_WP(); } } return $manager[ $plugin_type ]; } } capabilities/class-capability-manager-integration.php 0000644 00000006053 15150262017 0017066 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Capabilities */ /** * Integrates Yoast SEO capabilities with third party role manager plugins. * * Integrates with: Members * Integrates with: User Role Editor */ class WPSEO_Capability_Manager_Integration implements WPSEO_WordPress_Integration { /** * Capability manager to use. * * @var WPSEO_Capability_Manager */ public $manager; /** * WPSEO_Capability_Manager_Integration constructor. * * @param WPSEO_Capability_Manager $manager The capability manager to use. */ public function __construct( WPSEO_Capability_Manager $manager ) { $this->manager = $manager; } /** * Registers the hooks. * * @return void */ public function register_hooks() { add_filter( 'members_get_capabilities', [ $this, 'get_capabilities' ] ); add_action( 'members_register_cap_groups', [ $this, 'action_members_register_cap_group' ] ); add_filter( 'ure_capabilities_groups_tree', [ $this, 'filter_ure_capabilities_groups_tree' ] ); add_filter( 'ure_custom_capability_groups', [ $this, 'filter_ure_custom_capability_groups' ], 10, 2 ); } /** * Get the Yoast SEO capabilities. * Optionally append them to an existing array. * * @param array $caps Optional existing capability list. * @return array */ public function get_capabilities( array $caps = [] ) { if ( ! did_action( 'wpseo_register_capabilities' ) ) { do_action( 'wpseo_register_capabilities' ); } return array_merge( $caps, $this->manager->get_capabilities() ); } /** * Add capabilities to its own group in the Members plugin. * * @see members_register_cap_group() * * @return void */ public function action_members_register_cap_group() { if ( ! function_exists( 'members_register_cap_group' ) ) { return; } // Register the yoast group. $args = [ 'label' => esc_html__( 'Yoast SEO', 'wordpress-seo' ), 'caps' => $this->get_capabilities(), 'icon' => 'dashicons-admin-plugins', 'diff_added' => true, ]; members_register_cap_group( 'wordpress-seo', $args ); } /** * Adds Yoast SEO capability group in the User Role Editor plugin. * * @see URE_Capabilities_Groups_Manager::get_groups_tree() * * @param array $groups Current groups. * * @return array Filtered list of capabilty groups. */ public function filter_ure_capabilities_groups_tree( $groups = [] ) { $groups = (array) $groups; $groups['wordpress-seo'] = [ 'caption' => 'Yoast SEO', 'parent' => 'custom', 'level' => 3, ]; return $groups; } /** * Adds capabilities to the Yoast SEO group in the User Role Editor plugin. * * @see URE_Capabilities_Groups_Manager::get_cap_groups() * * @param array $groups Current capability groups. * @param string $cap_id Capability identifier. * * @return array List of filtered groups. */ public function filter_ure_custom_capability_groups( $groups = [], $cap_id = '' ) { if ( in_array( $cap_id, $this->get_capabilities(), true ) ) { $groups = (array) $groups; $groups[] = 'wordpress-seo'; } return $groups; } } capabilities/class-capability-manager.php 0000644 00000001455 15150262017 0014546 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Capabilities */ /** * Capability Manager interface. */ interface WPSEO_Capability_Manager { /** * Registers a capability. * * @param string $capability Capability to register. * @param array $roles Roles to add the capability to. * @param bool $overwrite Optional. Use add or overwrite as registration method. */ public function register( $capability, array $roles, $overwrite = false ); /** * Adds the registerd capabilities to the system. */ public function add(); /** * Removes the registered capabilities from the system. */ public function remove(); /** * Returns the list of registered capabilities. * * @return string[] List of registered capabilities. */ public function get_capabilities(); } capabilities/class-capability-manager-vip.php 0000644 00000003640 15150262017 0015340 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Capabilities */ /** * VIP implementation of the Capability Manager. */ final class WPSEO_Capability_Manager_VIP extends WPSEO_Abstract_Capability_Manager { /** * Adds the registered capabilities to the system. * * @return void */ public function add() { $role_capabilities = []; foreach ( $this->capabilities as $capability => $roles ) { $role_capabilities = $this->get_role_capabilities( $role_capabilities, $capability, $roles ); } foreach ( $role_capabilities as $role => $capabilities ) { wpcom_vip_add_role_caps( $role, $capabilities ); } } /** * Removes the registered capabilities from the system * * @return void */ public function remove() { // Remove from any role it has been added to. $roles = wp_roles()->get_names(); $roles = array_keys( $roles ); $role_capabilities = []; foreach ( array_keys( $this->capabilities ) as $capability ) { // Allow filtering of roles. $role_capabilities = $this->get_role_capabilities( $role_capabilities, $capability, $roles ); } foreach ( $role_capabilities as $role => $capabilities ) { wpcom_vip_remove_role_caps( $role, $capabilities ); } } /** * Returns the roles which the capability is registered on. * * @param array $role_capabilities List of all roles with their capabilities. * @param string $capability Capability to filter roles for. * @param array $roles List of default roles. * * @return array List of capabilities. */ protected function get_role_capabilities( $role_capabilities, $capability, $roles ) { // Allow filtering of roles. $filtered_roles = $this->filter_roles( $capability, $roles ); foreach ( $filtered_roles as $role ) { if ( ! isset( $add_role_caps[ $role ] ) ) { $role_capabilities[ $role ] = []; } $role_capabilities[ $role ][] = $capability; } return $role_capabilities; } } capabilities/class-capability-manager-wp.php 0000644 00000002331 15150262017 0015164 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Capabilities */ /** * Default WordPress capability manager implementation. */ final class WPSEO_Capability_Manager_WP extends WPSEO_Abstract_Capability_Manager { /** * Adds the capabilities to the roles. * * @return void */ public function add() { foreach ( $this->capabilities as $capability => $roles ) { $filtered_roles = $this->filter_roles( $capability, $roles ); $wp_roles = $this->get_wp_roles( $filtered_roles ); foreach ( $wp_roles as $wp_role ) { $wp_role->add_cap( $capability ); } } } /** * Unregisters the capabilities from the system. * * @return void */ public function remove() { // Remove from any roles it has been added to. $roles = wp_roles()->get_names(); $roles = array_keys( $roles ); foreach ( $this->capabilities as $capability => $_roles ) { $registered_roles = array_unique( array_merge( $roles, $this->capabilities[ $capability ] ) ); // Allow filtering of roles. $filtered_roles = $this->filter_roles( $capability, $registered_roles ); $wp_roles = $this->get_wp_roles( $filtered_roles ); foreach ( $wp_roles as $wp_role ) { $wp_role->remove_cap( $capability ); } } } } capabilities/class-capability-utils.php 0000644 00000004536 15150262017 0014277 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Capabilities */ /** * Capability Utils collection. */ class WPSEO_Capability_Utils { /** * Checks if the user has the proper capabilities. * * @param string $capability Capability to check. * * @return bool True if the user has the proper rights. */ public static function current_user_can( $capability ) { if ( $capability === 'wpseo_manage_options' ) { return self::has( $capability ); } return self::has_any( [ 'wpseo_manage_options', $capability ] ); } /** * Retrieves the users that have the specified capability. * * @param string $capability The name of the capability. * * @return array The users that have the capability. */ public static function get_applicable_users( $capability ) { $applicable_roles = self::get_applicable_roles( $capability ); if ( $applicable_roles === [] ) { return []; } return get_users( [ 'role__in' => $applicable_roles ] ); } /** * Retrieves the roles that have the specified capability. * * @param string $capability The name of the capability. * * @return array The names of the roles that have the capability. */ public static function get_applicable_roles( $capability ) { $roles = wp_roles(); $role_names = $roles->get_names(); $applicable_roles = []; foreach ( array_keys( $role_names ) as $role_name ) { $role = $roles->get_role( $role_name ); if ( ! $role ) { continue; } // Add role if it has the capability. if ( array_key_exists( $capability, $role->capabilities ) && $role->capabilities[ $capability ] === true ) { $applicable_roles[] = $role_name; } } return $applicable_roles; } /** * Checks if the current user has at least one of the supplied capabilities. * * @param array $capabilities Capabilities to check against. * * @return bool True if the user has at least one capability. */ protected static function has_any( array $capabilities ) { foreach ( $capabilities as $capability ) { if ( self::has( $capability ) ) { return true; } } return false; } /** * Checks if the user has a certain capability. * * @param string $capability Capability to check against. * * @return bool True if the user has the capability. */ protected static function has( $capability ) { return current_user_can( $capability ); } } capabilities/class-register-capabilities.php 0000644 00000006250 15150262017 0015266 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Capabilities */ /** * Capabilities registration class. */ class WPSEO_Register_Capabilities implements WPSEO_WordPress_Integration { /** * Registers the hooks. * * @return void */ public function register_hooks() { add_action( 'wpseo_register_capabilities', [ $this, 'register' ] ); if ( is_multisite() ) { add_action( 'user_has_cap', [ $this, 'filter_user_has_wpseo_manage_options_cap' ], 10, 4 ); } /** * Maybe add manage_privacy_options capability for wpseo_manager user role. */ add_filter( 'map_meta_cap', [ $this, 'map_meta_cap_for_seo_manager' ], 10, 2 ); } /** * Registers the capabilities. * * @return void */ public function register() { $manager = WPSEO_Capability_Manager_Factory::get(); $manager->register( 'wpseo_bulk_edit', [ 'editor', 'wpseo_editor', 'wpseo_manager' ] ); $manager->register( 'wpseo_edit_advanced_metadata', [ 'editor', 'wpseo_editor', 'wpseo_manager' ] ); $manager->register( 'wpseo_manage_options', [ 'administrator', 'wpseo_manager' ] ); $manager->register( 'view_site_health_checks', [ 'wpseo_manager' ] ); } /** * Revokes the 'wpseo_manage_options' capability from administrator users if it should * only be granted to network administrators. * * @param array $allcaps An array of all the user's capabilities. * @param array $caps Actual capabilities being checked. * @param array $args Optional parameters passed to has_cap(), typically object ID. * @param WP_User $user The user object. * * @return array Possibly modified array of the user's capabilities. */ public function filter_user_has_wpseo_manage_options_cap( $allcaps, $caps, $args, $user ) { // We only need to do something if 'wpseo_manage_options' is being checked. if ( ! in_array( 'wpseo_manage_options', $caps, true ) ) { return $allcaps; } // If the user does not have 'wpseo_manage_options' anyway, we don't need to revoke access. if ( empty( $allcaps['wpseo_manage_options'] ) ) { return $allcaps; } // If the user does not have 'delete_users', they are not an administrator. if ( empty( $allcaps['delete_users'] ) ) { return $allcaps; } $options = WPSEO_Options::get_instance(); if ( $options->get( 'access' ) === 'superadmin' && ! is_super_admin( $user->ID ) ) { unset( $allcaps['wpseo_manage_options'] ); } return $allcaps; } /** * Maybe add manage_privacy_options capability for wpseo_manager user role. * * @param string[] $caps Primitive capabilities required of the user. * @param string[] $cap Capability being checked. * * @return string[] Filtered primitive capabilities required of the user. */ public function map_meta_cap_for_seo_manager( $caps, $cap ) { $user = wp_get_current_user(); // No multisite support. if ( is_multisite() ) { return $caps; } // User must be of role wpseo_manager. if ( ! in_array( 'wpseo_manager', $user->roles, true ) ) { return $caps; } // Remove manage_options cap requirement if requested cap is manage_privacy_options. if ( $cap === 'manage_privacy_options' ) { return array_diff( $caps, [ 'manage_options' ] ); } return $caps; } } endpoints/class-endpoint-file-size.php 0000644 00000003341 15150262017 0014070 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Endpoints */ /** * Represents an implementation of the WPSEO_Endpoint interface to register one or multiple endpoints. */ class WPSEO_Endpoint_File_Size implements WPSEO_Endpoint { /** * The namespace of the REST route. * * @var string */ public const REST_NAMESPACE = 'yoast/v1'; /** * The route of the endpoint to retrieve the file size. * * @var string */ public const ENDPOINT_SINGULAR = 'file_size'; /** * The name of the capability needed to retrieve data using the endpoints. * * @var string */ public const CAPABILITY_RETRIEVE = 'manage_options'; /** * The service provider. * * @var WPSEO_File_Size_Service */ private $service; /** * Sets the service provider. * * @param WPSEO_File_Size_Service $service The service provider. */ public function __construct( WPSEO_File_Size_Service $service ) { $this->service = $service; } /** * Registers the routes for the endpoints. * * @return void */ public function register() { $route_args = [ 'methods' => 'GET', 'args' => [ 'url' => [ 'required' => true, 'type' => 'string', 'description' => 'The url to retrieve', ], ], 'callback' => [ $this->service, 'get', ], 'permission_callback' => [ $this, 'can_retrieve_data', ], ]; register_rest_route( self::REST_NAMESPACE, self::ENDPOINT_SINGULAR, $route_args ); } /** * Determines whether or not data can be retrieved for the registered endpoints. * * @return bool Whether or not data can be retrieved. */ public function can_retrieve_data() { return current_user_can( self::CAPABILITY_RETRIEVE ); } } endpoints/class-endpoint.php 0000644 00000000727 15150262017 0012210 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Endpoints */ /** * Dictates the required methods for an Endpoint implementation. */ interface WPSEO_Endpoint { /** * Registers the routes for the endpoints. * * @return void */ public function register(); /** * Determines whether or not data can be retrieved for the registered endpoints. * * @return bool Whether or not data can be retrieved. */ public function can_retrieve_data(); } endpoints/class-endpoint-statistics.php 0000644 00000003167 15150262017 0014401 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Statistics */ /** * Represents an implementation of the WPSEO_Endpoint interface to register one or multiple endpoints. */ class WPSEO_Endpoint_Statistics implements WPSEO_Endpoint { /** * The namespace of the REST route. * * @var string */ public const REST_NAMESPACE = 'yoast/v1'; /** * The route of the statistics endpoint. * * @var string */ public const ENDPOINT_RETRIEVE = 'statistics'; /** * The name of the capability needed to retrieve data using the endpoints. * * @var string */ public const CAPABILITY_RETRIEVE = 'read'; /** * Service to use. * * @var WPSEO_Statistics_Service */ protected $service; /** * Constructs the WPSEO_Endpoint_Statistics class and sets the service to use. * * @param WPSEO_Statistics_Service $service Service to use. */ public function __construct( WPSEO_Statistics_Service $service ) { $this->service = $service; } /** * Registers the REST routes that are available on the endpoint. * * @return void */ public function register() { // Register fetch config. $route_args = [ 'methods' => 'GET', 'callback' => [ $this->service, 'get_statistics' ], 'permission_callback' => [ $this, 'can_retrieve_data' ], ]; register_rest_route( self::REST_NAMESPACE, self::ENDPOINT_RETRIEVE, $route_args ); } /** * Determines whether or not data can be retrieved for the registered endpoints. * * @return bool Whether or not data can be retrieved. */ public function can_retrieve_data() { return current_user_can( self::CAPABILITY_RETRIEVE ); } } exceptions/class-file-size-exception.php 0000644 00000002102 15150262017 0014416 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Exceptions */ /** * Represents named methods for exceptions. */ class WPSEO_File_Size_Exception extends Exception { /** * Gets the exception for an externally hosted file. * * @param string $file_url The file url. * * @return WPSEO_File_Size_Exception Instance of the exception. */ public static function externally_hosted( $file_url ) { $message = sprintf( /* translators: %1$s expands to the requested url */ __( 'Cannot get the size of %1$s because it is hosted externally.', 'wordpress-seo' ), $file_url ); return new self( $message ); } /** * Gets the exception for when a unknown error occurs. * * @param string $file_url The file url. * * @return WPSEO_File_Size_Exception Instance of the exception. */ public static function unknown_error( $file_url ) { $message = sprintf( /* translators: %1$s expands to the requested url */ __( 'Cannot get the size of %1$s because of unknown reasons.', 'wordpress-seo' ), $file_url ); return new self( $message ); } } filters/class-abstract-post-filter.php 0000644 00000012471 15150262017 0014105 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Filters */ /** * Class WPSEO_Abstract_Post_Filter. */ abstract class WPSEO_Abstract_Post_Filter implements WPSEO_WordPress_Integration { /** * The filter's query argument. * * @var string */ public const FILTER_QUERY_ARG = 'yoast_filter'; /** * Modify the query based on the FILTER_QUERY_ARG variable in $_GET. * * @param string $where Query variables. * * @return string The modified query. */ abstract public function filter_posts( $where ); /** * Returns the query value this filter uses. * * @return string The query value this filter uses. */ abstract public function get_query_val(); /** * Returns the total number of posts that match this filter. * * @return int The total number of posts that match this filter. */ abstract protected function get_post_total(); /** * Returns the label for this filter. * * @return string The label for this filter. */ abstract protected function get_label(); /** * Registers the hooks. * * @return void */ public function register_hooks() { add_action( 'admin_init', [ $this, 'add_filter_links' ], 11 ); add_filter( 'posts_where', [ $this, 'filter_posts' ] ); if ( $this->is_filter_active() ) { add_action( 'restrict_manage_posts', [ $this, 'render_hidden_input' ] ); } if ( $this->is_filter_active() && $this->get_explanation() !== null ) { add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_explanation_assets' ] ); } } /** * Adds the filter links to the view_edit screens to give the user a filter link. * * @return void */ public function add_filter_links() { foreach ( $this->get_post_types() as $post_type ) { add_filter( 'views_edit-' . $post_type, [ $this, 'add_filter_link' ] ); } } /** * Enqueues the necessary assets to display a filter explanation. * * @return void */ public function enqueue_explanation_assets() { $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_script( 'filter-explanation' ); $asset_manager->enqueue_style( 'filter-explanation' ); $asset_manager->localize_script( 'filter-explanation', 'yoastFilterExplanation', [ 'text' => $this->get_explanation() ] ); } /** * Adds a filter link to the views. * * @param array<string, string> $views Array with the views. * * @return array<string, string> Array of views including the added view. */ public function add_filter_link( $views ) { $views[ 'yoast_' . $this->get_query_val() ] = sprintf( '<a href="%1$s"%2$s>%3$s</a> (%4$s)', esc_url( $this->get_filter_url() ), ( $this->is_filter_active() ) ? ' class="current" aria-current="page"' : '', $this->get_label(), $this->get_post_total() ); return $views; } /** * Returns a text explaining this filter. Null if no explanation is necessary. * * @return string|null The explanation or null. */ protected function get_explanation() { return null; } /** * Renders a hidden input to preserve this filter's state when using sub-filters. * * @return void */ public function render_hidden_input() { echo '<input type="hidden" name="' . esc_attr( self::FILTER_QUERY_ARG ) . '" value="' . esc_attr( $this->get_query_val() ) . '">'; } /** * Returns an url to edit.php with post_type and this filter as the query arguments. * * @return string The url to activate this filter. */ protected function get_filter_url() { $query_args = [ self::FILTER_QUERY_ARG => $this->get_query_val(), 'post_type' => $this->get_current_post_type(), ]; return add_query_arg( $query_args, 'edit.php' ); } /** * Returns true when the filter is active. * * @return bool Whether the filter is active. */ protected function is_filter_active() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET[ self::FILTER_QUERY_ARG ] ) && is_string( $_GET[ self::FILTER_QUERY_ARG ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. return sanitize_text_field( wp_unslash( $_GET[ self::FILTER_QUERY_ARG ] ) ) === $this->get_query_val(); } return false; } /** * Returns the current post type. * * @return string The current post type. */ protected function get_current_post_type() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['post_type'] ) && is_string( $_GET['post_type'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $post_type = sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); if ( ! empty( $post_type ) ) { return $post_type; } } return 'post'; } /** * Returns the post types to which this filter should be added. * * @return array The post types to which this filter should be added. */ protected function get_post_types() { return WPSEO_Post_Type::get_accessible_post_types(); } /** * Checks if the post type is supported. * * @param string $post_type Post type to check against. * * @return bool True when it is supported. */ protected function is_supported_post_type( $post_type ) { return in_array( $post_type, $this->get_post_types(), true ); } } filters/class-cornerstone-filter.php 0000644 00000007275 15150262017 0013666 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Registers the filter for filtering posts by cornerstone content. */ class WPSEO_Cornerstone_Filter extends WPSEO_Abstract_Post_Filter { /** * Name of the meta value. * * @var string */ public const META_NAME = 'is_cornerstone'; /** * Registers the hooks. * * @return void */ public function register_hooks() { parent::register_hooks(); add_filter( 'wpseo_cornerstone_post_types', [ 'WPSEO_Post_Type', 'filter_attachment_post_type' ] ); add_filter( 'wpseo_cornerstone_post_types', [ $this, 'filter_metabox_disabled' ] ); } /** * Returns the query value this filter uses. * * @return string The query value this filter uses. */ public function get_query_val() { return 'cornerstone'; } /** * Modify the query based on the seo_filter variable in $_GET. * * @param string $where Query variables. * * @return string The modified query. */ public function filter_posts( $where ) { if ( $this->is_filter_active() ) { global $wpdb; $where .= $wpdb->prepare( " AND {$wpdb->posts}.ID IN ( SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = %s AND meta_value = '1' ) ", WPSEO_Meta::$meta_prefix . self::META_NAME ); } return $where; } /** * Filters the post types that have the metabox disabled. * * @param array $post_types The post types to filter. * * @return array The filtered post types. */ public function filter_metabox_disabled( $post_types ) { $filtered_post_types = []; foreach ( $post_types as $post_type_key => $post_type ) { if ( ! WPSEO_Post_Type::has_metabox_enabled( $post_type_key ) ) { continue; } $filtered_post_types[ $post_type_key ] = $post_type; } return $filtered_post_types; } /** * Returns the label for this filter. * * @return string The label for this filter. */ protected function get_label() { return __( 'Cornerstone content', 'wordpress-seo' ); } /** * Returns a text explaining this filter. * * @return string|null The explanation. */ protected function get_explanation() { $post_type_object = get_post_type_object( $this->get_current_post_type() ); if ( $post_type_object === null ) { return null; } return sprintf( /* translators: %1$s expands to the posttype label, %2$s expands anchor to blog post about cornerstone content, %3$s expands to </a> */ __( 'Mark the most important %1$s as \'cornerstone content\' to improve your site structure. %2$sLearn more about cornerstone content%3$s.', 'wordpress-seo' ), strtolower( $post_type_object->labels->name ), '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/1i9' ) . '" target="_blank">', '</a>' ); } /** * Returns the total amount of articles marked as cornerstone content. * * @return int */ protected function get_post_total() { global $wpdb; return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( 1 ) FROM {$wpdb->postmeta} WHERE post_id IN( SELECT ID FROM {$wpdb->posts} WHERE post_type = %s ) AND meta_key = %s AND meta_value = '1' ", $this->get_current_post_type(), WPSEO_Meta::$meta_prefix . self::META_NAME ) ); } /** * Returns the post types to which this filter should be added. * * @return array The post types to which this filter should be added. */ protected function get_post_types() { /** * Filter: 'wpseo_cornerstone_post_types' - Filters post types to exclude the cornerstone feature for. * * @param array $post_types The accessible post types to filter. */ $post_types = apply_filters( 'wpseo_cornerstone_post_types', parent::get_post_types() ); if ( ! is_array( $post_types ) ) { return []; } return $post_types; } } formatter/class-metabox-formatter.php 0000644 00000035517 15150262017 0014035 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Formatter */ use Yoast\WP\SEO\Conditionals\Third_Party\Polylang_Conditional; use Yoast\WP\SEO\Conditionals\Third_Party\TranslatePress_Conditional; use Yoast\WP\SEO\Conditionals\Third_Party\WPML_Conditional; use Yoast\WP\SEO\Config\Schema_Types; use Yoast\WP\SEO\Config\SEMrush_Client; use Yoast\WP\SEO\Exceptions\OAuth\Authentication_Failed_Exception; use Yoast\WP\SEO\Exceptions\OAuth\Tokens\Empty_Property_Exception; use Yoast\WP\SEO\Exceptions\OAuth\Tokens\Empty_Token_Exception; /** * This class forces needed methods for the metabox localization. */ class WPSEO_Metabox_Formatter { /** * Object that provides formatted values. * * @var WPSEO_Metabox_Formatter_Interface */ private $formatter; /** * Setting the formatter property. * * @param WPSEO_Metabox_Formatter_Interface $formatter Object that provides the formatted values. */ public function __construct( WPSEO_Metabox_Formatter_Interface $formatter ) { $this->formatter = $formatter; } /** * Returns the values. * * @return array */ public function get_values() { $defaults = $this->get_defaults(); $values = $this->formatter->get_values(); return ( $values + $defaults ); } /** * Returns array with all the values always needed by a scraper object. * * @return array Default settings for the metabox. */ private function get_defaults() { $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); $analysis_readability = new WPSEO_Metabox_Analysis_Readability(); $analysis_inclusive_language = new WPSEO_Metabox_Analysis_Inclusive_Language(); $schema_types = new Schema_Types(); $is_wincher_active = YoastSEO()->helpers->wincher->is_active(); $host = YoastSEO()->helpers->url->get_url_host( get_site_url() ); return [ 'author_name' => get_the_author_meta( 'display_name' ), 'site_name' => YoastSEO()->meta->for_current_page()->site_name, 'sitewide_social_image' => WPSEO_Options::get( 'og_default_image' ), 'search_url' => '', 'post_edit_url' => '', 'base_url' => '', 'contentTab' => __( 'Readability', 'wordpress-seo' ), 'keywordTab' => __( 'Keyphrase:', 'wordpress-seo' ), 'removeKeyword' => __( 'Remove keyphrase', 'wordpress-seo' ), 'contentLocale' => get_locale(), 'userLocale' => get_user_locale(), 'translations' => $this->get_translations(), 'keyword_usage' => [], 'title_template' => '', 'metadesc_template' => '', 'contentAnalysisActive' => $analysis_readability->is_enabled() ? 1 : 0, 'keywordAnalysisActive' => $analysis_seo->is_enabled() ? 1 : 0, 'inclusiveLanguageAnalysisActive' => $analysis_inclusive_language->is_enabled() ? 1 : 0, 'cornerstoneActive' => WPSEO_Options::get( 'enable_cornerstone_content', false ) ? 1 : 0, 'semrushIntegrationActive' => WPSEO_Options::get( 'semrush_integration_active', true ) ? 1 : 0, 'intl' => $this->get_content_analysis_component_translations(), 'isRtl' => is_rtl(), 'isPremium' => YoastSEO()->helpers->product->is_premium(), 'wordFormRecognitionActive' => YoastSEO()->helpers->language->is_word_form_recognition_active( WPSEO_Language_Utils::get_language( get_locale() ) ), 'siteIconUrl' => get_site_icon_url(), 'countryCode' => WPSEO_Options::get( 'semrush_country_code', false ), 'SEMrushLoginStatus' => WPSEO_Options::get( 'semrush_integration_active', true ) ? $this->get_semrush_login_status() : false, 'showSocial' => [ 'facebook' => WPSEO_Options::get( 'opengraph', false ), 'twitter' => WPSEO_Options::get( 'twitter', false ), ], 'schema' => [ 'displayFooter' => WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ), 'pageTypeOptions' => $schema_types->get_page_type_options(), 'articleTypeOptions' => $schema_types->get_article_type_options(), ], 'twitterCardType' => 'summary_large_image', /** * Filter to determine if the markers should be enabled or not. * * @param bool $showMarkers Should the markers being enabled. Default = true. */ 'show_markers' => apply_filters( 'wpseo_enable_assessment_markers', true ), 'publish_box' => [ 'labels' => [ 'keyword' => [ 'na' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */ __( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-seo-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Not available', 'wordpress-seo' ) . '</strong>' ), 'bad' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */ __( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-seo-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Needs improvement', 'wordpress-seo' ) . '</strong>' ), 'ok' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */ __( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-seo-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'OK', 'wordpress-seo' ) . '</strong>' ), 'good' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */ __( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-seo-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Good', 'wordpress-seo' ) . '</strong>' ), ], 'content' => [ 'na' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */ __( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-readability-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Not available', 'wordpress-seo' ) . '</strong>' ), 'bad' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */ __( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-readability-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Needs improvement', 'wordpress-seo' ) . '</strong>' ), 'ok' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */ __( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-readability-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'OK', 'wordpress-seo' ) . '</strong>' ), 'good' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */ __( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-readability-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Good', 'wordpress-seo' ) . '</strong>' ), ], 'inclusive-language' => [ 'na' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */ __( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-inclusive-language-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Not available', 'wordpress-seo' ) . '</strong>' ), 'bad' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */ __( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-inclusive-language-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Needs improvement', 'wordpress-seo' ) . '</strong>' ), 'ok' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */ __( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-inclusive-language-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Potentially non-inclusive', 'wordpress-seo' ) . '</strong>' ), 'good' => sprintf( /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */ __( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ), '<a href="#yoast-inclusive-language-analysis-collapsible-metabox">', '</a>', '<strong>' . __( 'Good', 'wordpress-seo' ) . '</strong>' ), ], ], ], 'markdownEnabled' => $this->is_markdown_enabled(), 'analysisHeadingTitle' => __( 'Analysis', 'wordpress-seo' ), 'zapierIntegrationActive' => WPSEO_Options::get( 'zapier_integration_active', false ) ? 1 : 0, 'zapierConnectedStatus' => ! empty( WPSEO_Options::get( 'zapier_subscription', [] ) ) ? 1 : 0, 'wincherIntegrationActive' => ( $is_wincher_active ) ? 1 : 0, 'wincherLoginStatus' => ( $is_wincher_active ) ? YoastSEO()->helpers->wincher->login_status() : false, 'wincherWebsiteId' => WPSEO_Options::get( 'wincher_website_id', '' ), 'wincherAutoAddKeyphrases' => WPSEO_Options::get( 'wincher_automatically_add_keyphrases', false ), 'wordproofIntegrationActive' => YoastSEO()->helpers->wordproof->is_active() ? 1 : 0, 'multilingualPluginActive' => $this->multilingual_plugin_active(), /** * Filter to determine whether the PreviouslyUsedKeyword assessment should run. * * @param bool $previouslyUsedKeywordActive Whether the PreviouslyUsedKeyword assessment should run. */ 'previouslyUsedKeywordActive' => apply_filters( 'wpseo_previously_used_keyword_active', true ), 'getJetpackBoostPrePublishLink' => WPSEO_Shortlinker::get( 'https://yoa.st/jetpack-boost-get-prepublish?domain=' . $host ), 'upgradeJetpackBoostPrePublishLink' => WPSEO_Shortlinker::get( 'https://yoa.st/jetpack-boost-upgrade-prepublish?domain=' . $host ), 'woocommerceUpsellSchemaLink' => WPSEO_Shortlinker::get( 'https://yoa.st/product-schema-metabox' ), 'woocommerceUpsellGooglePreviewLink' => WPSEO_Shortlinker::get( 'https://yoa.st/product-google-preview-metabox' ), ]; } /** * Returns required yoast-component translations. * * @return array */ private function get_content_analysis_component_translations() { // Esc_html is not needed because React already handles HTML in the (translations of) these strings. return [ 'locale' => get_user_locale(), 'content-analysis.errors' => __( 'Errors', 'wordpress-seo' ), 'content-analysis.problems' => __( 'Problems', 'wordpress-seo' ), 'content-analysis.improvements' => __( 'Improvements', 'wordpress-seo' ), 'content-analysis.considerations' => __( 'Considerations', 'wordpress-seo' ), 'content-analysis.good' => __( 'Good results', 'wordpress-seo' ), 'content-analysis.highlight' => __( 'Highlight this result in the text', 'wordpress-seo' ), 'content-analysis.nohighlight' => __( 'Remove highlight from the text', 'wordpress-seo' ), 'content-analysis.disabledButton' => __( 'Marks are disabled in current view', 'wordpress-seo' ), /* translators: Hidden accessibility text. */ 'a11yNotice.opensInNewTab' => __( '(Opens in a new browser tab)', 'wordpress-seo' ), ]; } /** * Returns Jed compatible YoastSEO.js translations. * * @return array */ private function get_translations() { $locale = get_user_locale(); $file = WPSEO_PATH . 'languages/wordpress-seo-' . $locale . '.json'; if ( file_exists( $file ) ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Retrieving a local file. $file = file_get_contents( $file ); if ( is_string( $file ) && $file !== '' ) { return json_decode( $file, true ); } } return []; } /** * Checks if Jetpack's markdown module is enabled. * Can be extended to work with other plugins that parse markdown in the content. * * @return bool */ private function is_markdown_enabled() { $is_markdown = false; if ( class_exists( 'Jetpack' ) && method_exists( 'Jetpack', 'get_active_modules' ) ) { $active_modules = Jetpack::get_active_modules(); // First at all, check if Jetpack's markdown module is active. $is_markdown = in_array( 'markdown', $active_modules, true ); } /** * Filters whether markdown support is active in the readability- and seo-analysis. * * @since 11.3 * * @param array $is_markdown Is markdown support for Yoast SEO active. */ return apply_filters( 'wpseo_is_markdown_enabled', $is_markdown ); } /** * Checks if the user is logged in to SEMrush. * * @return bool The SEMrush login status. */ private function get_semrush_login_status() { try { $semrush_client = YoastSEO()->classes->get( SEMrush_Client::class ); } catch ( Empty_Property_Exception $e ) { // Return false if token is malformed (empty property). return false; } // Get token (and refresh it if it's expired). try { $semrush_client->get_tokens(); } catch ( Authentication_Failed_Exception $e ) { return false; } catch ( Empty_Token_Exception $e ) { return false; } return $semrush_client->has_valid_tokens(); } /** * Checks whether a multilingual plugin is currently active. Currently, we only check the following plugins: WPML, Polylang, and TranslatePress. * * @return bool Whether a multilingual plugin is currently active. */ private function multilingual_plugin_active() { $wpml_active = YoastSEO()->classes->get( WPML_Conditional::class )->is_met(); $polylang_active = YoastSEO()->classes->get( Polylang_Conditional::class )->is_met(); $translatepress_active = YoastSEO()->classes->get( TranslatePress_Conditional::class )->is_met(); return ( $wpml_active || $polylang_active || $translatepress_active ); } } formatter/class-post-metabox-formatter.php 0000644 00000021247 15150262017 0015013 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Formatter */ /** * This class provides data for the post metabox by return its values for localization. */ class WPSEO_Post_Metabox_Formatter implements WPSEO_Metabox_Formatter_Interface { /** * Holds the WordPress Post. * * @var WP_Post */ private $post; /** * The permalink to follow. * * @var string */ private $permalink; /** * Whether we must return social templates values. * * @var bool */ private $use_social_templates = false; /** * Constructor. * * @param WP_Post|array $post Post object. * @param array $options Title options to use. * @param string $structure The permalink to follow. */ public function __construct( $post, array $options, $structure ) { $this->post = $post; $this->permalink = $structure; $this->use_social_templates = $this->use_social_templates(); } /** * Determines whether the social templates should be used. * * @return bool Whether the social templates should be used. */ public function use_social_templates() { return WPSEO_Options::get( 'opengraph', false ) === true; } /** * Returns the translated values. * * @return array */ public function get_values() { $values = [ 'search_url' => $this->search_url(), 'post_edit_url' => $this->edit_url(), 'base_url' => $this->base_url_for_js(), 'metaDescriptionDate' => '', ]; if ( $this->post instanceof WP_Post ) { $keyword_usage = $this->get_focus_keyword_usage(); $values_to_set = [ 'keyword_usage' => $keyword_usage, 'keyword_usage_post_types' => $this->get_post_types_for_all_ids( $keyword_usage ), 'title_template' => $this->get_title_template(), 'title_template_no_fallback' => $this->get_title_template( false ), 'metadesc_template' => $this->get_metadesc_template(), 'metaDescriptionDate' => $this->get_metadesc_date(), 'first_content_image' => $this->get_image_url(), 'social_title_template' => $this->get_social_title_template(), 'social_description_template' => $this->get_social_description_template(), 'social_image_template' => $this->get_social_image_template(), 'isInsightsEnabled' => $this->is_insights_enabled(), ]; $values = ( $values_to_set + $values ); } /** * Filter: 'wpseo_post_edit_values' - Allows changing the values Yoast SEO uses inside the post editor. * * @param array $values The key-value map Yoast SEO uses inside the post editor. * @param WP_Post $post The post opened in the editor. */ return apply_filters( 'wpseo_post_edit_values', $values, $this->post ); } /** * Gets the image URL for the post's social preview. * * @return string|null The image URL for the social preview. */ protected function get_image_url() { return WPSEO_Image_Utils::get_first_usable_content_image_for_post( $this->post->ID ); } /** * Returns the url to search for keyword for the post. * * @return string */ private function search_url() { return admin_url( 'edit.php?seo_kw_filter={keyword}' ); } /** * Returns the url to edit the taxonomy. * * @return string */ private function edit_url() { return admin_url( 'post.php?post={id}&action=edit' ); } /** * Returns a base URL for use in the JS, takes permalink structure into account. * * @return string */ private function base_url_for_js() { global $pagenow; // The default base is the home_url. $base_url = home_url( '/', null ); if ( $pagenow === 'post-new.php' ) { return $base_url; } // If %postname% is the last tag, just strip it and use that as a base. if ( preg_match( '#%postname%/?$#', $this->permalink ) === 1 ) { $base_url = preg_replace( '#%postname%/?$#', '', $this->permalink ); } // If %pagename% is the last tag, just strip it and use that as a base. if ( preg_match( '#%pagename%/?$#', $this->permalink ) === 1 ) { $base_url = preg_replace( '#%pagename%/?$#', '', $this->permalink ); } return $base_url; } /** * Counts the number of given keywords used for other posts other than the given post_id. * * @return array The keyword and the associated posts that use it. */ private function get_focus_keyword_usage() { $keyword = WPSEO_Meta::get_value( 'focuskw', $this->post->ID ); $usage = [ $keyword => $this->get_keyword_usage_for_current_post( $keyword ) ]; /** * Allows enhancing the array of posts' that share their focus keywords with the post's related keywords. * * @param array $usage The array of posts' ids that share their focus keywords with the post. * @param int $post_id The id of the post we're finding the usage of related keywords for. */ return apply_filters( 'wpseo_posts_for_related_keywords', $usage, $this->post->ID ); } /** * Retrieves the post types for the given post IDs. * * @param array $post_ids_per_keyword An associative array with keywords as keys and an array of post ids where those keywords are used. * @return array The post types for the given post IDs. */ private function get_post_types_for_all_ids( $post_ids_per_keyword ) { $post_type_per_keyword_result = []; foreach ( $post_ids_per_keyword as $keyword => $post_ids ) { $post_type_per_keyword_result[ $keyword ] = WPSEO_Meta::post_types_for_ids( $post_ids ); } return $post_type_per_keyword_result; } /** * Gets the keyword usage for the current post and the specified keyword. * * @param string $keyword The keyword to check the usage of. * * @return array The post IDs which use the passed keyword. */ protected function get_keyword_usage_for_current_post( $keyword ) { return WPSEO_Meta::keyword_usage( $keyword, $this->post->ID ); } /** * Retrieves the title template. * * @param bool $fallback Whether to return the hardcoded fallback if the template value is empty. * * @return string The title template. */ private function get_title_template( $fallback = true ) { $title = $this->get_template( 'title' ); if ( $title === '' && $fallback === true ) { return '%%title%% %%page%% %%sep%% %%sitename%%'; } return $title; } /** * Retrieves the metadesc template. * * @return string The metadesc template. */ private function get_metadesc_template() { return $this->get_template( 'metadesc' ); } /** * Retrieves the social title template. * * @return string The social title template. */ private function get_social_title_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'title' ); } return ''; } /** * Retrieves the social description template. * * @return string The social description template. */ private function get_social_description_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'description' ); } return ''; } /** * Retrieves the social image template. * * @return string The social description template. */ private function get_social_image_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'image-url' ); } return ''; } /** * Retrieves a template. * * @param string $template_option_name The name of the option in which the template you want to get is saved. * * @return string */ private function get_template( $template_option_name ) { $needed_option = $template_option_name . '-' . $this->post->post_type; if ( WPSEO_Options::get( $needed_option, '' ) !== '' ) { return WPSEO_Options::get( $needed_option ); } return ''; } /** * Retrieves a social template. * * @param string $template_option_name The name of the option in which the template you want to get is saved. * * @return string */ private function get_social_template( $template_option_name ) { /** * Filters the social template value for a given post type. * * @param string $template The social template value, defaults to empty string. * @param string $template_option_name The subname of the option in which the template you want to get is saved. * @param string $post_type The name of the post type. */ return apply_filters( 'wpseo_social_template_post_type', '', $template_option_name, $this->post->post_type ); } /** * Determines the date to be displayed in the snippet preview. * * @return string */ private function get_metadesc_date() { return YoastSEO()->helpers->date->format_translated( $this->post->post_date, 'M j, Y' ); } /** * Determines whether the insights feature is enabled for this post. * * @return bool */ protected function is_insights_enabled() { return WPSEO_Options::get( 'enable_metabox_insights', false ); } } formatter/class-term-metabox-formatter.php 0000644 00000015340 15150262017 0014772 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Formatter */ /** * This class provides data for the term metabox by return its values for localization. */ class WPSEO_Term_Metabox_Formatter implements WPSEO_Metabox_Formatter_Interface { /** * The term the metabox formatter is for. * * @var WP_Term|stdClass */ private $term; /** * The term's taxonomy. * * @var stdClass */ private $taxonomy; /** * Whether we must return social templates values. * * @var bool */ private $use_social_templates = false; /** * Array with the WPSEO_Titles options. * * @var array */ protected $options; /** * WPSEO_Taxonomy_Scraper constructor. * * @param stdClass $taxonomy Taxonomy. * @param WP_Term|stdClass $term Term. */ public function __construct( $taxonomy, $term ) { $this->taxonomy = $taxonomy; $this->term = $term; $this->use_social_templates = $this->use_social_templates(); } /** * Determines whether the social templates should be used. * * @return bool Whether the social templates should be used. */ public function use_social_templates() { return WPSEO_Options::get( 'opengraph', false ) === true; } /** * Returns the translated values. * * @return array */ public function get_values() { $values = []; // Todo: a column needs to be added on the termpages to add a filter for the keyword, so this can be used in the focus keyphrase doubles. if ( is_object( $this->term ) && property_exists( $this->term, 'taxonomy' ) ) { $values = [ 'search_url' => $this->search_url(), 'post_edit_url' => $this->edit_url(), 'base_url' => $this->base_url_for_js(), 'taxonomy' => $this->term->taxonomy, 'keyword_usage' => $this->get_focus_keyword_usage(), 'title_template' => $this->get_title_template(), 'title_template_no_fallback' => $this->get_title_template( false ), 'metadesc_template' => $this->get_metadesc_template(), 'first_content_image' => $this->get_image_url(), 'semrushIntegrationActive' => 0, 'social_title_template' => $this->get_social_title_template(), 'social_description_template' => $this->get_social_description_template(), 'social_image_template' => $this->get_social_image_template(), 'wincherIntegrationActive' => 0, 'isInsightsEnabled' => $this->is_insights_enabled(), ]; } return $values; } /** * Gets the image URL for the term's social preview. * * @return string|null The image URL for the social preview. */ protected function get_image_url() { return WPSEO_Image_Utils::get_first_content_image_for_term( $this->term->term_id ); } /** * Returns the url to search for keyword for the taxonomy. * * @return string */ private function search_url() { return admin_url( 'edit-tags.php?taxonomy=' . $this->term->taxonomy . '&seo_kw_filter={keyword}' ); } /** * Returns the url to edit the taxonomy. * * @return string */ private function edit_url() { return admin_url( 'term.php?action=edit&taxonomy=' . $this->term->taxonomy . '&tag_ID={id}' ); } /** * Returns a base URL for use in the JS, takes permalink structure into account. * * @return string */ private function base_url_for_js() { $base_url = home_url( '/', null ); if ( ! WPSEO_Options::get( 'stripcategorybase', false ) ) { if ( $this->taxonomy->rewrite ) { $base_url = trailingslashit( $base_url . $this->taxonomy->rewrite['slug'] ); } } return $base_url; } /** * Counting the number of given keyword used for other term than given term_id. * * @return array */ private function get_focus_keyword_usage() { $focuskw = WPSEO_Taxonomy_Meta::get_term_meta( $this->term, $this->term->taxonomy, 'focuskw' ); return WPSEO_Taxonomy_Meta::get_keyword_usage( $focuskw, $this->term->term_id, $this->term->taxonomy ); } /** * Retrieves the title template. * * @param bool $fallback Whether to return the hardcoded fallback if the template value is empty. * * @return string The title template. */ private function get_title_template( $fallback = true ) { $title = $this->get_template( 'title' ); if ( $title === '' && $fallback === true ) { /* translators: %s expands to the variable used for term title. */ $archives = sprintf( __( '%s Archives', 'wordpress-seo' ), '%%term_title%%' ); return $archives . ' %%page%% %%sep%% %%sitename%%'; } return $title; } /** * Retrieves the metadesc template. * * @return string The metadesc template. */ private function get_metadesc_template() { return $this->get_template( 'metadesc' ); } /** * Retrieves the social title template. * * @return string The social title template. */ private function get_social_title_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'title' ); } return ''; } /** * Retrieves the social description template. * * @return string The social description template. */ private function get_social_description_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'description' ); } return ''; } /** * Retrieves the social image template. * * @return string The social description template. */ private function get_social_image_template() { if ( $this->use_social_templates ) { return $this->get_social_template( 'image-url' ); } return ''; } /** * Retrieves a template. * * @param string $template_option_name The name of the option in which the template you want to get is saved. * * @return string */ private function get_template( $template_option_name ) { $needed_option = $template_option_name . '-tax-' . $this->term->taxonomy; return WPSEO_Options::get( $needed_option, '' ); } /** * Retrieves a social template. * * @param string $template_option_name The name of the option in which the template you want to get is saved. * * @return string */ private function get_social_template( $template_option_name ) { /** * Filters the social template value for a given taxonomy. * * @param string $template The social template value, defaults to empty string. * @param string $template_option_name The subname of the option in which the template you want to get is saved. * @param string $taxonomy The name of the taxonomy. */ return apply_filters( 'wpseo_social_template_taxonomy', '', $template_option_name, $this->term->taxonomy ); } /** * Determines whether the insights feature is enabled for this taxonomy. * * @return bool */ protected function is_insights_enabled() { return WPSEO_Options::get( 'enable_metabox_insights', false ); } } formatter/interface-metabox-formatter.php 0000644 00000000402 15150262017 0014651 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Formatter */ /** * Interface to force get_values. */ interface WPSEO_Metabox_Formatter_Interface { /** * Returns formatter values. * * @return array */ public function get_values(); } google_search_console/views/gsc-display.php 0000644 00000004472 15150262017 0015162 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Google_Search_Console */ // Admin header. Yoast_Form::get_instance()->admin_header( false, 'wpseo-gsc', false, 'yoast_wpseo_gsc_options' ); // GSC Error notification. $gsc_url = 'https://search.google.com/search-console/index'; $gsc_post_url = 'https://yoa.st/google-search-console-deprecated'; $gsc_style_alert = ' display: flex; align-items: baseline; position: relative; padding: 16px; border: 1px solid rgba(0, 0, 0, 0.2); font-size: 14px; font-weight: 400; line-height: 1.5; margin: 16px 0; color: #450c11; background: #f8d7da; '; $gsc_style_alert_icon = 'display: block; margin-right: 8px;'; $gsc_style_alert_content = 'max-width: 600px;'; $gsc_style_alert_link = 'color: #004973;'; $gsc_notification = sprintf( /* Translators: %1$s: expands to opening anchor tag, %2$s expands to closing anchor tag. */ __( 'Google has discontinued its Crawl Errors API. Therefore, any possible crawl errors you might have cannot be displayed here anymore. %1$sRead our statement on this for further information%2$s.', 'wordpress-seo' ), '<a style="' . $gsc_style_alert_link . '" href="' . WPSEO_Shortlinker::get( $gsc_post_url ) . '" target="_blank" rel="noopener">', WPSEO_Admin_Utils::get_new_tab_message() . '</a>' ); $gsc_notification .= '<br/><br/>'; $gsc_notification .= sprintf( /* Translators: %1$s: expands to opening anchor tag, %2$s expands to closing anchor tag. */ __( 'To view your current crawl errors, %1$splease visit Google Search Console%2$s.', 'wordpress-seo' ), '<a style="' . $gsc_style_alert_link . '" href="' . $gsc_url . '" target="_blank" rel="noopener noreferrer">', WPSEO_Admin_Utils::get_new_tab_message() . '</a>' ); ?> <div style="<?php echo $gsc_style_alert; ?>"> <span style="<?php echo $gsc_style_alert_icon; ?>"> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="14" viewBox="0 0 12 14" role="img" aria-hidden="true" focusable="false" fill="#450c11"> <path d="M6 1q1.6 0 3 .8T11.2 4t.8 3-.8 3T9 12.2 6 13t-3-.8T.8 10 0 7t.8-3T3 1.8 6 1zm1 9.7V9.3 9L6.7 9H5l-.1.3V10.9l.3.1h1.6l.1-.3zm0-2.6L7 3.2v-.1L6.8 3H5 5l-.1.2.1 4.9.3.2h1.4l.2-.1Q7 8 6.9 8z"></path> </svg> </span> <span style="<?php echo $gsc_style_alert_content; ?>"><?php echo $gsc_notification; ?></span> </div> <?php google_search_console/views/gsc-redirect-nopremium.php 0000644 00000001757 15150262017 0017332 0 ustar 00 <?php /** * WPSEO plugin file. * * This is the view for the modal box that appears when premium isn't loaded. * * @package WPSEO\Admin\Google_Search_Console */ _deprecated_file( __FILE__, 'Yoast SEO 9.5' ); echo '<h1 class="wpseo-redirect-url-title">'; printf( /* Translators: %s: expands to Yoast SEO Premium */ esc_html__( 'Creating redirects is a %s feature', 'wordpress-seo' ), 'Yoast SEO Premium' ); echo '</h1>'; echo '<p>'; printf( /* Translators: %1$s: expands to 'Yoast SEO Premium', %2$s: links to Yoast SEO Premium plugin page. */ esc_html__( 'To be able to create a redirect and fix this issue, you need %1$s. You can buy the plugin, including one year of support and updates, on %2$s.', 'wordpress-seo' ), 'Yoast SEO Premium', '<a href="' . esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/redirects' ) ) . '" target="_blank">yoast.com</a>' ); echo '</p>'; echo '<button type="button" class="button wpseo-redirect-close">' . esc_html__( 'Close', 'wordpress-seo' ) . '</button>'; google_search_console/class-gsc.php 0000644 00000000672 15150262017 0013463 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\admin\google_search_console */ /** * Class WPSEO_GSC. */ class WPSEO_GSC { /** * The option where data will be stored. * * @var string */ public const OPTION_WPSEO_GSC = 'wpseo-gsc'; /** * Outputs the HTML for the redirect page. * * @return void */ public function display() { require_once WPSEO_PATH . 'admin/google_search_console/views/gsc-display.php'; } } import/plugins/class-abstract-plugin-importer.php 0000644 00000020440 15150262017 0016310 0 ustar 00 <?php /** * This file holds the abstract class for dealing with imports from other plugins. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Plugin_Importer. * * Class with functionality to import meta data from other plugins. */ abstract class WPSEO_Plugin_Importer { /** * Holds the import status object. * * @var WPSEO_Import_Status */ protected $status; /** * The plugin name. * * @var string */ protected $plugin_name; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys; /** * Class constructor. */ public function __construct() {} /** * Returns the string for the plugin we're importing from. * * @return string Plugin name. */ public function get_plugin_name() { return $this->plugin_name; } /** * Imports the settings and post meta data from another SEO plugin. * * @return WPSEO_Import_Status Import status object. */ public function run_import() { $this->status = new WPSEO_Import_Status( 'import', false ); if ( ! $this->detect() ) { return $this->status; } $this->status->set_status( $this->import() ); // Flush the entire cache, as we no longer know what's valid and what's not. wp_cache_flush(); return $this->status; } /** * Handles post meta data to import. * * @return bool Import success status. */ protected function import() { return $this->meta_keys_clone( $this->clone_keys ); } /** * Removes the plugin data from the database. * * @return WPSEO_Import_Status Import status object. */ public function run_cleanup() { $this->status = new WPSEO_Import_Status( 'cleanup', false ); if ( ! $this->detect() ) { return $this->status; } return $this->status->set_status( $this->cleanup() ); } /** * Removes the plugin data from the database. * * @return bool Cleanup status. */ protected function cleanup() { global $wpdb; if ( empty( $this->meta_key ) ) { return true; } $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE %s", $this->meta_key ) ); $result = $wpdb->__get( 'result' ); if ( ! $result ) { $this->cleanup_error_msg(); } return $result; } /** * Sets the status message for when a cleanup has gone bad. * * @return void */ protected function cleanup_error_msg() { /* translators: %s is replaced with the plugin's name. */ $this->status->set_msg( sprintf( __( 'Cleanup of %s data failed.', 'wordpress-seo' ), $this->plugin_name ) ); } /** * Detects whether an import for this plugin is needed. * * @return WPSEO_Import_Status Import status object. */ public function run_detect() { $this->status = new WPSEO_Import_Status( 'detect', false ); if ( ! $this->detect() ) { return $this->status; } return $this->status->set_status( true ); } /** * Detects whether there is post meta data to import. * * @return bool Boolean indicating whether there is something to import. */ protected function detect() { global $wpdb; $meta_keys = wp_list_pluck( $this->clone_keys, 'old_key' ); $result = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) AS `count` FROM {$wpdb->postmeta} WHERE meta_key IN ( " . implode( ', ', array_fill( 0, count( $meta_keys ), '%s' ) ) . ' )', $meta_keys ) ); if ( $result === '0' ) { return false; } return true; } /** * Helper function to clone meta keys and (optionally) change their values in bulk. * * @param string $old_key The existing meta key. * @param string $new_key The new meta key. * @param array $replace_values An array, keys old value, values new values. * * @return bool Clone status. */ protected function meta_key_clone( $old_key, $new_key, $replace_values = [] ) { global $wpdb; // First we create a temp table with all the values for meta_key. $result = $wpdb->query( $wpdb->prepare( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange -- This is intentional + temporary. "CREATE TEMPORARY TABLE tmp_meta_table SELECT * FROM {$wpdb->postmeta} WHERE meta_key = %s", $old_key ) ); if ( $result === false ) { $this->set_missing_db_rights_status(); return false; } // Delete all the values in our temp table for posts that already have data for $new_key. $wpdb->query( $wpdb->prepare( "DELETE FROM tmp_meta_table WHERE post_id IN ( SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = %s )", WPSEO_Meta::$meta_prefix . $new_key ) ); /* * We set meta_id to NULL so on re-insert into the postmeta table, MYSQL can set * new meta_id's and we don't get duplicates. */ $wpdb->query( 'UPDATE tmp_meta_table SET meta_id = NULL' ); // Now we rename the meta_key. $wpdb->query( $wpdb->prepare( 'UPDATE tmp_meta_table SET meta_key = %s', WPSEO_Meta::$meta_prefix . $new_key ) ); $this->meta_key_clone_replace( $replace_values ); // With everything done, we insert all our newly cloned lines into the postmeta table. $wpdb->query( "INSERT INTO {$wpdb->postmeta} SELECT * FROM tmp_meta_table" ); // Now we drop our temporary table. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange -- This is intentional + a temporary table. $wpdb->query( 'DROP TEMPORARY TABLE IF EXISTS tmp_meta_table' ); return true; } /** * Clones multiple meta keys. * * @param array $clone_keys The keys to clone. * * @return bool Success status. */ protected function meta_keys_clone( $clone_keys ) { foreach ( $clone_keys as $clone_key ) { $result = $this->meta_key_clone( $clone_key['old_key'], $clone_key['new_key'], ( $clone_key['convert'] ?? [] ) ); if ( ! $result ) { return false; } } return true; } /** * Sets the import status to false and returns a message about why it failed. * * @return void */ protected function set_missing_db_rights_status() { $this->status->set_status( false ); /* translators: %s is replaced with Yoast SEO. */ $this->status->set_msg( sprintf( __( 'The %s importer functionality uses temporary database tables. It seems your WordPress install does not have the capability to do this, please consult your hosting provider.', 'wordpress-seo' ), 'Yoast SEO' ) ); } /** * Helper function to search for a key in an array and maybe save it as a meta field. * * @param string $plugin_key The key in the $data array to check. * @param string $yoast_key The identifier we use in our meta settings. * @param array $data The array of data for this post to sift through. * @param int $post_id The post ID. * * @return void */ protected function import_meta_helper( $plugin_key, $yoast_key, $data, $post_id ) { if ( ! empty( $data[ $plugin_key ] ) ) { $this->maybe_save_post_meta( $yoast_key, $data[ $plugin_key ], $post_id ); } } /** * Saves a post meta value if it doesn't already exist. * * @param string $new_key The key to save. * @param mixed $value The value to set the key to. * @param int $post_id The Post to save the meta for. * * @return void */ protected function maybe_save_post_meta( $new_key, $value, $post_id ) { // Big. Fat. Sigh. Mostly used for _yst_is_cornerstone, but might be useful for other hidden meta's. $key = WPSEO_Meta::$meta_prefix . $new_key; $wpseo_meta = true; if ( substr( $new_key, 0, 1 ) === '_' ) { $key = $new_key; $wpseo_meta = false; } $existing_value = get_post_meta( $post_id, $key, true ); if ( empty( $existing_value ) ) { if ( $wpseo_meta ) { WPSEO_Meta::set_value( $new_key, $value, $post_id ); return; } update_post_meta( $post_id, $new_key, $value ); } } /** * Replaces values in our temporary table according to our settings. * * @param array $replace_values Key value pair of values to replace with other values. * * @return void */ protected function meta_key_clone_replace( $replace_values ) { global $wpdb; // Now we replace values if needed. if ( is_array( $replace_values ) && $replace_values !== [] ) { foreach ( $replace_values as $old_value => $new_value ) { $wpdb->query( $wpdb->prepare( 'UPDATE tmp_meta_table SET meta_value = %s WHERE meta_value = %s', $new_value, $old_value ) ); } } } } import/plugins/class-import-aioseo.php 0000644 00000004717 15150262017 0014152 0 ustar 00 <?php /** * File with the class to handle data from All in One SEO Pack, versions 3 and under. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean All in One SEO Pack post metadata, versions 3 and under. */ class WPSEO_Import_AIOSEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'All In One SEO Pack'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_aioseop_%'; /** * OpenGraph keys to import. * * @var array */ protected $import_keys = [ 'aioseop_opengraph_settings_title' => 'opengraph-title', 'aioseop_opengraph_settings_desc' => 'opengraph-description', 'aioseop_opengraph_settings_customimg' => 'opengraph-image', 'aioseop_opengraph_settings_customimg_twitter' => 'twitter-image', ]; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_aioseop_title', 'new_key' => 'title', ], [ 'old_key' => '_aioseop_description', 'new_key' => 'metadesc', ], [ 'old_key' => '_aioseop_noindex', 'new_key' => 'meta-robots-noindex', 'convert' => [ 'on' => 1 ], ], [ 'old_key' => '_aioseop_nofollow', 'new_key' => 'meta-robots-nofollow', 'convert' => [ 'on' => 1 ], ], ]; /** * Import All In One SEO meta values. * * @return bool Import success status. */ protected function import() { $status = parent::import(); if ( $status ) { $this->import_opengraph(); } return $status; } /** * Imports the OpenGraph and Twitter settings for all posts. * * @return bool */ protected function import_opengraph() { $query_posts = new WP_Query( 'post_type=any&meta_key=_aioseop_opengraph_settings&order=ASC&fields=ids&nopaging=true' ); if ( ! empty( $query_posts->posts ) ) { foreach ( array_values( $query_posts->posts ) as $post_id ) { $this->import_post_opengraph( $post_id ); } } return true; } /** * Imports the OpenGraph and Twitter settings for a single post. * * @param int $post_id Post ID. * * @return void */ private function import_post_opengraph( $post_id ) { $meta = get_post_meta( $post_id, '_aioseop_opengraph_settings', true ); $meta = maybe_unserialize( $meta ); foreach ( $this->import_keys as $old_key => $new_key ) { $this->maybe_save_post_meta( $new_key, $meta[ $old_key ], $post_id ); } } } import/plugins/class-import-aioseo-v4.php 0000644 00000022156 15150262017 0014476 0 ustar 00 <?php /** * File with the class to handle data from All in One SEO Pack, versions 4 and up. * * @package WPSEO\Admin\Import\Plugins */ use Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Cleanup_Action; use Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Posts_Importing_Action; /** * Class with functionality to import & clean All in One SEO Pack post metadata, versions 4 and up. */ class WPSEO_Import_AIOSEO_V4 extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'All In One SEO Pack'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_aioseo_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_aioseo_title', 'new_key' => 'title', ], [ 'old_key' => '_aioseo_description', 'new_key' => 'metadesc', ], [ 'old_key' => '_aioseo_og_title', 'new_key' => 'opengraph-title', ], [ 'old_key' => '_aioseo_og_description', 'new_key' => 'opengraph-description', ], [ 'old_key' => '_aioseo_twitter_title', 'new_key' => 'twitter-title', ], [ 'old_key' => '_aioseo_twitter_description', 'new_key' => 'twitter-description', ], ]; /** * Mapping between the AiOSEO replace vars and the Yoast replace vars. * * @var array * * @see https://yoast.com/help/list-available-snippet-variables-yoast-seo/ */ protected $replace_vars = [ // They key is the AiOSEO replace var, the value is the Yoast replace var (see class-wpseo-replace-vars). '#author_first_name' => '%%author_first_name%%', '#author_last_name' => '%%author_last_name%%', '#author_name' => '%%name%%', '#categories' => '%%category%%', '#current_date' => '%%currentdate%%', '#current_day' => '%%currentday%%', '#current_month' => '%%currentmonth%%', '#current_year' => '%%currentyear%%', '#permalink' => '%%permalink%%', '#post_content' => '%%post_content%%', '#post_date' => '%%date%%', '#post_day' => '%%post_day%%', '#post_month' => '%%post_month%%', '#post_title' => '%%title%%', '#post_year' => '%%post_year%%', '#post_excerpt_only' => '%%excerpt_only%%', '#post_excerpt' => '%%excerpt%%', '#separator_sa' => '%%sep%%', '#site_title' => '%%sitename%%', '#tagline' => '%%sitedesc%%', '#taxonomy_title' => '%%category_title%%', ]; /** * Replaces the AiOSEO variables in our temporary table with Yoast variables (replace vars). * * @param array $replace_values Key value pair of values to replace with other values. This is only used in the base class but not here. * That is because this class doesn't have any `convert` keys in `$clone_keys`. * For that reason, we're overwriting the base class' `meta_key_clone_replace()` function without executing that base functionality. * * @return void */ protected function meta_key_clone_replace( $replace_values ) { global $wpdb; // At this point we're already looping through all the $clone_keys (this happens in meta_keys_clone() in the abstract class). // Now, we'll also loop through the replace_vars array, which holds the mappings between the AiOSEO variables and the Yoast variables. // We'll replace all the AiOSEO variables in the temporary table with their Yoast equivalents. foreach ( $this->replace_vars as $aioseo_variable => $yoast_variable ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: We need this query and this is done at many other places as well, for example class-import-rankmath. $wpdb->query( $wpdb->prepare( 'UPDATE tmp_meta_table SET meta_value = REPLACE( meta_value, %s, %s )', $aioseo_variable, $yoast_variable ) ); } // The AiOSEO custom fields take the form of `#custom_field-myfield`. // These should be mapped to %%cf_myfield%%. $meta_values_with_custom_fields = $this->get_meta_values_with_custom_field_or_taxonomy( $wpdb, 'custom_field' ); $unique_custom_fields = $this->get_unique_custom_fields_or_taxonomies( $meta_values_with_custom_fields, 'custom_field' ); $this->replace_custom_field_or_taxonomy_replace_vars( $unique_custom_fields, $wpdb, 'custom_field', 'cf' ); // Map `#tax_name-{tax-slug}` to `%%ct_{tax-slug}%%``. $meta_values_with_custom_taxonomies = $this->get_meta_values_with_custom_field_or_taxonomy( $wpdb, 'tax_name' ); $unique_custom_taxonomies = $this->get_unique_custom_fields_or_taxonomies( $meta_values_with_custom_taxonomies, 'tax_name' ); $this->replace_custom_field_or_taxonomy_replace_vars( $unique_custom_taxonomies, $wpdb, 'tax_name', 'ct' ); } /** * Filters out all unique custom fields/taxonomies/etc. used in an AiOSEO replace var. * * @param string[] $meta_values An array of all the meta values that * contain one or more AIOSEO custom field replace vars * (in the form `#custom_field-xyz`). * @param string $aioseo_prefix The AiOSEO prefix to use * (e.g. `custom-field` for custom fields or `tax_name` for custom taxonomies). * * @return string[] An array of all the unique custom fields/taxonomies/etc. used in the replace vars. * E.g. `xyz` in the above example. */ protected function get_unique_custom_fields_or_taxonomies( $meta_values, $aioseo_prefix ) { $unique_custom_fields_or_taxonomies = []; foreach ( $meta_values as $meta_value ) { // Find all custom field replace vars, store them in `$matches`. preg_match_all( "/#$aioseo_prefix-([\w-]+)/", $meta_value, $matches ); /* * `$matches[1]` contain the captured matches of the * first capturing group (the `([\w-]+)` in the regex above). */ $custom_fields_or_taxonomies = $matches[1]; foreach ( $custom_fields_or_taxonomies as $custom_field_or_taxonomy ) { $unique_custom_fields_or_taxonomies[ trim( $custom_field_or_taxonomy ) ] = 1; } } return array_keys( $unique_custom_fields_or_taxonomies ); } /** * Replaces every AIOSEO custom field/taxonomy/etc. replace var with the Yoast version. * * E.g. `#custom_field-xyz` becomes `%%cf_xyz%%`. * * @param string[] $unique_custom_fields_or_taxonomies An array of unique custom fields to replace the replace vars of. * @param wpdb $wpdb The WordPress database object. * @param string $aioseo_prefix The AiOSEO prefix to use * (e.g. `custom-field` for custom fields or `tax_name` for custom taxonomies). * @param string $yoast_prefix The Yoast prefix to use (e.g. `cf` for custom fields). * * @return void */ protected function replace_custom_field_or_taxonomy_replace_vars( $unique_custom_fields_or_taxonomies, $wpdb, $aioseo_prefix, $yoast_prefix ) { foreach ( $unique_custom_fields_or_taxonomies as $unique_custom_field_or_taxonomy ) { $aioseo_variable = "#{$aioseo_prefix}-{$unique_custom_field_or_taxonomy}"; $yoast_variable = "%%{$yoast_prefix}_{$unique_custom_field_or_taxonomy}%%"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( $wpdb->prepare( 'UPDATE tmp_meta_table SET meta_value = REPLACE( meta_value, %s, %s )', $aioseo_variable, $yoast_variable ) ); } } // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching /** * Retrieve all the meta values from the temporary meta table that contain * at least one AiOSEO custom field replace var. * * @param wpdb $wpdb The WordPress database object. * @param string $aioseo_prefix The AiOSEO prefix to use * (e.g. `custom-field` for custom fields or `tax_name` for custom taxonomies). * * @return string[] All meta values that contain at least one AioSEO custom field replace var. */ protected function get_meta_values_with_custom_field_or_taxonomy( $wpdb, $aioseo_prefix ) { return $wpdb->get_col( $wpdb->prepare( 'SELECT meta_value FROM tmp_meta_table WHERE meta_value LIKE %s', "%#$aioseo_prefix-%" ) ); } // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching /** * Detects whether there is AIOSEO data to import by looking whether the AIOSEO data have been cleaned up. * * @return bool Boolean indicating whether there is something to import. */ protected function detect() { $aioseo_cleanup_action = YoastSEO()->classes->get( Aioseo_Cleanup_Action::class ); return ( $aioseo_cleanup_action->get_total_unindexed() > 0 ); } /** * Import AIOSEO post data from their custom indexable table. Not currently used. * * @return void */ protected function import() { // This is overriden from the import.js and never run. $aioseo_posts_import_action = YoastSEO()->classes->get( Aioseo_Posts_Importing_Action::class ); $aioseo_posts_import_action->index(); } } import/plugins/class-importers.php 0000644 00000001634 15150262017 0013402 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Plugin_Importers. * * Object which contains all importers. */ class WPSEO_Plugin_Importers { /** * List of supported importers. * * @var array */ private static $importers = [ 'WPSEO_Import_AIOSEO', 'WPSEO_Import_AIOSEO_V4', 'WPSEO_Import_Greg_SEO', 'WPSEO_Import_HeadSpace', 'WPSEO_Import_Jetpack_SEO', 'WPSEO_Import_WP_Meta_SEO', 'WPSEO_Import_Platinum_SEO', 'WPSEO_Import_Premium_SEO_Pack', 'WPSEO_Import_RankMath', 'WPSEO_Import_SEOPressor', 'WPSEO_Import_SEO_Framework', 'WPSEO_Import_Smartcrawl_SEO', 'WPSEO_Import_Squirrly', 'WPSEO_Import_Ultimate_SEO', 'WPSEO_Import_WooThemes_SEO', 'WPSEO_Import_WPSEO', ]; /** * Returns an array of importers available. * * @return array Available importers. */ public static function get() { return self::$importers; } } import/plugins/class-import-greg-high-performance-seo.php 0000644 00000001371 15150262017 0017610 0 ustar 00 <?php /** * File with the class to handle data from Ultimate SEO. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean Ultimate SEO post metadata. */ class WPSEO_Import_Greg_SEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = "Greg's High Performance SEO"; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_ghpseo_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_ghpseo_alternative_description', 'new_key' => 'metadesc', ], [ 'old_key' => '_ghpseo_secondary_title', 'new_key' => 'title', ], ]; } import/plugins/class-import-headspace.php 0000644 00000001762 15150262017 0014605 0 ustar 00 <?php /** * File with the class to handle data from HeadSpace. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Import_HeadSpace. * * Class with functionality to import & clean HeadSpace SEO post metadata. */ class WPSEO_Import_HeadSpace extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'HeadSpace SEO'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_headspace_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_headspace_description', 'new_key' => 'metadesc', ], [ 'old_key' => '_headspace_page_title', 'new_key' => 'title', ], [ 'old_key' => '_headspace_noindex', 'new_key' => 'meta-robots-noindex', 'convert' => [ 'on' => 1 ], ], [ 'old_key' => '_headspace_nofollow', 'new_key' => 'meta-robots-nofollow', 'convert' => [ 'on' => 1 ], ], ]; } import/plugins/class-import-jetpack.php 0000644 00000001333 15150262017 0014303 0 ustar 00 <?php /** * File with the class to handle data from Jetpack's Advanced SEO settings. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Import_Jetpack_SEO. * * Class with functionality to import & clean Jetpack SEO post metadata. */ class WPSEO_Import_Jetpack_SEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'Jetpack'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = 'advanced_seo_description'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => 'advanced_seo_description', 'new_key' => 'metadesc', ], ]; } import/plugins/class-import-platinum-seo-pack.php 0000644 00000005510 15150262017 0016214 0 ustar 00 <?php /** * File with the class to handle data from Platinum SEO Pack. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean Ultimate SEO post metadata. */ class WPSEO_Import_Platinum_SEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'Platinum SEO Pack'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = 'title'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => 'description', 'new_key' => 'metadesc', ], [ 'old_key' => 'title', 'new_key' => 'title', ], ]; /** * Runs the import of post meta keys stored by Platinum SEO Pack. * * @return bool */ protected function import() { $return = parent::import(); if ( $return ) { $this->import_robots_meta(); } return $return; } /** * Cleans up all the meta values Platinum SEO pack creates. * * @return bool */ protected function cleanup() { $this->meta_key = 'title'; parent::cleanup(); $this->meta_key = 'description'; parent::cleanup(); $this->meta_key = 'metarobots'; parent::cleanup(); return true; } /** * Finds all the robotsmeta fields to import and deals with them. * * There are four potential values that Platinum SEO stores: * - index,folllow * - index,nofollow * - noindex,follow * - noindex,nofollow * * We only have to deal with the latter 3, the first is our default. * * @return void */ protected function import_robots_meta() { $this->import_by_meta_robots( 'index,nofollow', [ 'nofollow' ] ); $this->import_by_meta_robots( 'noindex,follow', [ 'noindex' ] ); $this->import_by_meta_robots( 'noindex,nofollow', [ 'noindex', 'nofollow' ] ); } /** * Imports the values for all index, nofollow posts. * * @param string $value The meta robots value to find posts for. * @param array $metas The meta field(s) to save. * * @return void */ protected function import_by_meta_robots( $value, $metas ) { $posts = $this->find_posts_by_robots_meta( $value ); if ( ! $posts ) { return; } foreach ( $posts as $post_id ) { foreach ( $metas as $meta ) { $this->maybe_save_post_meta( 'meta-robots-' . $meta, 1, $post_id ); } } } /** * Finds posts by a given meta robots value. * * @param string $meta_value Robots meta value. * * @return array|bool Array of Post IDs on success, false on failure. */ protected function find_posts_by_robots_meta( $meta_value ) { $posts = get_posts( [ 'post_type' => 'any', 'meta_key' => 'robotsmeta', 'meta_value' => $meta_value, 'order' => 'ASC', 'fields' => 'ids', 'nopaging' => true, ] ); if ( empty( $posts ) ) { return false; } return $posts; } } import/plugins/class-import-premium-seo-pack.php 0000644 00000001455 15150262017 0016045 0 ustar 00 <?php /** * File with the class to handle data from Premium SEO Pack. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean Premium SEO Pack post metadata. */ class WPSEO_Import_Premium_SEO_Pack extends WPSEO_Import_Squirrly { /** * The plugin name. * * @var string */ protected $plugin_name = 'Premium SEO Pack'; /** * WPSEO_Import_Premium_SEO_Pack constructor. */ public function __construct() { parent::__construct(); global $wpdb; $this->table_name = $wpdb->prefix . 'psp'; $this->meta_key = ''; } /** * Returns the query to return an identifier for the posts to import. * * @return string */ protected function retrieve_posts_query() { return "SELECT URL AS identifier FROM {$this->table_name} WHERE blog_id = %d"; } } import/plugins/class-import-rankmath.php 0000644 00000011255 15150262017 0014473 0 ustar 00 <?php /** * File with the class to handle data from RankMath. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import RankMath post metadata. */ class WPSEO_Import_RankMath extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'RankMath'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = 'rank_math_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => 'rank_math_description', 'new_key' => 'metadesc', ], [ 'old_key' => 'rank_math_title', 'new_key' => 'title', ], [ 'old_key' => 'rank_math_canonical_url', 'new_key' => 'canonical', ], [ 'old_key' => 'rank_math_primary_category', 'new_key' => 'primary_category', ], [ 'old_key' => 'rank_math_facebook_title', 'new_key' => 'opengraph-title', ], [ 'old_key' => 'rank_math_facebook_description', 'new_key' => 'opengraph-description', ], [ 'old_key' => 'rank_math_facebook_image', 'new_key' => 'opengraph-image', ], [ 'old_key' => 'rank_math_facebook_image_id', 'new_key' => 'opengraph-image-id', ], [ 'old_key' => 'rank_math_twitter_title', 'new_key' => 'twitter-title', ], [ 'old_key' => 'rank_math_twitter_description', 'new_key' => 'twitter-description', ], [ 'old_key' => 'rank_math_twitter_image', 'new_key' => 'twitter-image', ], [ 'old_key' => 'rank_math_twitter_image_id', 'new_key' => 'twitter-image-id', ], [ 'old_key' => 'rank_math_focus_keyword', 'new_key' => 'focuskw', ], ]; /** * Handles post meta data to import. * * @return bool Import success status. */ protected function import() { global $wpdb; // Replace % with %% as their variables are the same except for that. $wpdb->query( "UPDATE $wpdb->postmeta SET meta_value = REPLACE( meta_value, '%', '%%' ) WHERE meta_key IN ( 'rank_math_description', 'rank_math_title' )" ); $this->import_meta_robots(); $return = $this->meta_keys_clone( $this->clone_keys ); // Return %% to % so our import is non-destructive. $wpdb->query( "UPDATE $wpdb->postmeta SET meta_value = REPLACE( meta_value, '%%', '%' ) WHERE meta_key IN ( 'rank_math_description', 'rank_math_title' )" ); if ( $return ) { $this->import_settings(); } return $return; } /** * RankMath stores robots meta quite differently, so we have to parse it out. * * @return void */ private function import_meta_robots() { global $wpdb; $post_metas = $wpdb->get_results( "SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = 'rank_math_robots'" ); foreach ( $post_metas as $post_meta ) { // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- Reason: We can't control the form in which Rankmath sends the data. $robots_values = unserialize( $post_meta->meta_value ); foreach ( [ 'noindex', 'nofollow' ] as $directive ) { $directive_key = array_search( $directive, $robots_values, true ); if ( $directive_key !== false ) { update_post_meta( $post_meta->post_id, '_yoast_wpseo_meta-robots-' . $directive, 1 ); unset( $robots_values[ $directive_key ] ); } } if ( count( $robots_values ) > 0 ) { $value = implode( ',', $robots_values ); update_post_meta( $post_meta->post_id, '_yoast_wpseo_meta-robots-adv', $value ); } } } /** * Imports some of the RankMath settings. * * @return void */ private function import_settings() { $settings = [ 'title_separator' => 'separator', 'homepage_title' => 'title-home-wpseo', 'homepage_description' => 'metadesc-home-wpseo', 'author_archive_title' => 'title-author-wpseo', 'date_archive_title' => 'title-archive-wpseo', 'search_title' => 'title-search-wpseo', '404_title' => 'title-404-wpseo', 'pt_post_title' => 'title-post', 'pt_page_title' => 'title-page', ]; $options = get_option( 'rank-math-options-titles' ); foreach ( $settings as $import_setting_key => $setting_key ) { if ( ! empty( $options[ $import_setting_key ] ) ) { $value = $options[ $import_setting_key ]; // Make sure replace vars work. $value = str_replace( '%', '%%', $value ); WPSEO_Options::set( $setting_key, $value ); } } } /** * Removes the plugin data from the database. * * @return bool Cleanup status. */ protected function cleanup() { $return = parent::cleanup(); if ( $return ) { global $wpdb; $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE 'rank-math-%'" ); $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '%rank_math%'" ); } return $return; } } import/plugins/class-import-seo-framework.php 0000644 00000003464 15150262017 0015452 0 ustar 00 <?php /** * File with the class to handle data from SEO Framework. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean SEO Framework post metadata. */ class WPSEO_Import_SEO_Framework extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'The SEO Framework'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_genesis_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_genesis_description', 'new_key' => 'metadesc', ], [ 'old_key' => '_genesis_title', 'new_key' => 'title', ], [ 'old_key' => '_genesis_noindex', 'new_key' => 'meta-robots-noindex', ], [ 'old_key' => '_genesis_nofollow', 'new_key' => 'meta-robots-nofollow', ], [ 'old_key' => '_genesis_canonical_uri', 'new_key' => 'canonical', ], [ 'old_key' => '_open_graph_title', 'new_key' => 'opengraph-title', ], [ 'old_key' => '_open_graph_description', 'new_key' => 'opengraph-description', ], [ 'old_key' => '_social_image_url', 'new_key' => 'opengraph-image', ], [ 'old_key' => '_twitter_title', 'new_key' => 'twitter-title', ], [ 'old_key' => '_twitter_description', 'new_key' => 'twitter-description', ], ]; /** * Removes all the metadata set by the SEO Framework plugin. * * @return bool */ protected function cleanup() { $set1 = parent::cleanup(); $this->meta_key = '_social_image_%'; $set2 = parent::cleanup(); $this->meta_key = '_twitter_%'; $set3 = parent::cleanup(); $this->meta_key = '_open_graph_%'; $set4 = parent::cleanup(); return ( $set1 || $set2 || $set3 || $set4 ); } } import/plugins/class-import-seopressor.php 0000644 00000011445 15150262017 0015073 0 ustar 00 <?php /** * File with the class to handle data from SEOPressor. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Import_SEOPressor. * * Class with functionality to import & clean SEOPressor post metadata. */ class WPSEO_Import_SEOPressor extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'SEOpressor'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_seop_settings'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_seop_settings', ], ]; /** * Imports the post meta values to Yoast SEO. * * @return bool Import success status. */ protected function import() { // Query for all the posts that have an _seop_settings meta set. $query_posts = new WP_Query( 'post_type=any&meta_key=_seop_settings&order=ASC&fields=ids&nopaging=true' ); foreach ( $query_posts->posts as $post_id ) { $this->import_post_focus_keywords( $post_id ); $this->import_seopressor_post_settings( $post_id ); } return true; } /** * Removes all the post meta fields SEOpressor creates. * * @return bool Cleanup status. */ protected function cleanup() { global $wpdb; // If we get to replace the data, let's do some proper cleanup. return $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '_seop_%'" ); } /** * Imports the data. SEOpressor stores most of the data in one post array, this loops over it. * * @param int $post_id Post ID. * * @return void */ private function import_seopressor_post_settings( $post_id ) { $settings = get_post_meta( $post_id, '_seop_settings', true ); foreach ( [ 'fb_description' => 'opengraph-description', 'fb_title' => 'opengraph-title', 'fb_type' => 'og_type', 'fb_img' => 'opengraph-image', 'meta_title' => 'title', 'meta_description' => 'metadesc', 'meta_canonical' => 'canonical', 'tw_description' => 'twitter-description', 'tw_title' => 'twitter-title', 'tw_image' => 'twitter-image', ] as $seopressor_key => $yoast_key ) { $this->import_meta_helper( $seopressor_key, $yoast_key, $settings, $post_id ); } if ( isset( $settings['meta_rules'] ) ) { $this->import_post_robots( $settings['meta_rules'], $post_id ); } } /** * Imports the focus keywords, and stores them for later use. * * @param int $post_id Post ID. * * @return void */ private function import_post_focus_keywords( $post_id ) { // Import the focus keyword. $focuskw = trim( get_post_meta( $post_id, '_seop_kw_1', true ) ); $this->maybe_save_post_meta( 'focuskw', $focuskw, $post_id ); // Import additional focus keywords for use in premium. $focuskw2 = trim( get_post_meta( $post_id, '_seop_kw_2', true ) ); $focuskw3 = trim( get_post_meta( $post_id, '_seop_kw_3', true ) ); $focus_keywords = []; if ( ! empty( $focuskw2 ) ) { $focus_keywords[] = $focuskw2; } if ( ! empty( $focuskw3 ) ) { $focus_keywords[] = $focuskw3; } if ( $focus_keywords !== [] ) { $this->maybe_save_post_meta( 'focuskeywords', WPSEO_Utils::format_json_encode( $focus_keywords ), $post_id ); } } /** * Retrieves the SEOpressor robot value and map this to Yoast SEO values. * * @param string $meta_rules The meta rules taken from the SEOpressor settings array. * @param int $post_id The post id of the current post. * * @return void */ private function import_post_robots( $meta_rules, $post_id ) { $seopressor_robots = explode( '#|#|#', $meta_rules ); $robot_value = $this->get_robot_value( $seopressor_robots ); // Saving the new meta values for Yoast SEO. $this->maybe_save_post_meta( 'meta-robots-noindex', $robot_value['index'], $post_id ); $this->maybe_save_post_meta( 'meta-robots-nofollow', $robot_value['follow'], $post_id ); $this->maybe_save_post_meta( 'meta-robots-adv', $robot_value['advanced'], $post_id ); } /** * Gets the robot config by given SEOpressor robots value. * * @param array $seopressor_robots The value in SEOpressor that needs to be converted to the Yoast format. * * @return array The robots values in Yoast format. */ private function get_robot_value( $seopressor_robots ) { $return = [ 'index' => 2, 'follow' => 0, 'advanced' => '', ]; if ( in_array( 'noindex', $seopressor_robots, true ) ) { $return['index'] = 1; } if ( in_array( 'nofollow', $seopressor_robots, true ) ) { $return['follow'] = 1; } foreach ( [ 'noarchive', 'nosnippet', 'noimageindex' ] as $needle ) { if ( in_array( $needle, $seopressor_robots, true ) ) { $return['advanced'] .= $needle . ','; } } $return['advanced'] = rtrim( $return['advanced'], ',' ); return $return; } } import/plugins/class-import-smartcrawl.php 0000644 00000006221 15150262017 0015042 0 ustar 00 <?php /** * File with the class to handle data from Smartcrawl SEO. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean Smartcrawl SEO post metadata. */ class WPSEO_Import_Smartcrawl_SEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'Smartcrawl SEO'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_wds_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_wds_metadesc', 'new_key' => 'metadesc', ], [ 'old_key' => '_wds_title', 'new_key' => 'title', ], [ 'old_key' => '_wds_canonical', 'new_key' => 'canonical', ], [ 'old_key' => '_wds_focus-keywords', 'new_key' => 'focuskw', ], [ 'old_key' => '_wds_meta-robots-noindex', 'new_key' => 'meta-robots-noindex', ], [ 'old_key' => '_wds_meta-robots-nofollow', 'new_key' => 'meta-robots-nofollow', ], ]; /** * Used for importing Twitter and Facebook meta's. * * @var array */ protected $social_keys = []; /** * Handles post meta data to import. * * @return bool Import success status. */ protected function import() { $return = parent::import(); if ( $return ) { $this->import_opengraph(); $this->import_twitter(); } return $return; } /** * Imports the OpenGraph meta keys saved by Smartcrawl. * * @return bool Import status. */ protected function import_opengraph() { $this->social_keys = [ 'title' => 'opengraph-title', 'description' => 'opengraph-description', 'images' => 'opengraph-image', ]; return $this->post_find_import( '_wds_opengraph' ); } /** * Imports the Twitter meta keys saved by Smartcrawl. * * @return bool Import status. */ protected function import_twitter() { $this->social_keys = [ 'title' => 'twitter-title', 'description' => 'twitter-description', ]; return $this->post_find_import( '_wds_twitter' ); } /** * Imports a post's serialized post meta values. * * @param int $post_id Post ID. * @param string $key The meta key to import. * * @return void */ protected function import_serialized_post_meta( $post_id, $key ) { $data = get_post_meta( $post_id, $key, true ); $data = maybe_unserialize( $data ); foreach ( $this->social_keys as $key => $meta_key ) { if ( ! isset( $data[ $key ] ) ) { return; } $value = $data[ $key ]; if ( is_array( $value ) ) { $value = $value[0]; } $this->maybe_save_post_meta( $meta_key, $value, $post_id ); } } /** * Finds all the posts with a certain meta key and imports its values. * * @param string $key The meta key to search for. * * @return bool Import status. */ protected function post_find_import( $key ) { $query_posts = new WP_Query( 'post_type=any&meta_key=' . $key . '&order=ASC&fields=ids&nopaging=true' ); if ( empty( $query_posts->posts ) ) { return false; } foreach ( array_values( $query_posts->posts ) as $post_id ) { $this->import_serialized_post_meta( $post_id, $key ); } return true; } } import/plugins/class-import-squirrly.php 0000644 00000012054 15150262017 0014556 0 ustar 00 <?php /** * File with the class to handle data from Squirrly. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean Squirrly post metadata. */ class WPSEO_Import_Squirrly extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'Squirrly SEO'; /** * Holds the name of the table Squirrly uses to store data. * * @var string */ protected $table_name; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_sq_post_keyword'; /** * Data to import from (and the target to field) the serialized array stored in the SEO field in the Squirrly table. * * @var array */ protected $seo_field_keys = [ 'noindex' => 'meta-robots-noindex', 'nofollow' => 'meta-robots-nofollow', 'title' => 'title', 'description' => 'metadesc', 'canonical' => 'canonical', 'cornerstone' => '_yst_is_cornerstone', 'tw_media' => 'twitter-image', 'tw_title' => 'twitter-title', 'tw_description' => 'twitter-description', 'og_title' => 'opengraph-title', 'og_description' => 'opengraph-description', 'og_media' => 'opengraph-image', 'focuskw' => 'focuskw', ]; /** * WPSEO_Import_Squirrly constructor. */ public function __construct() { parent::__construct(); global $wpdb; $this->table_name = $wpdb->prefix . 'qss'; } /** * Imports the post meta values to Yoast SEO. * * @return bool Import success status. */ protected function import() { $results = $this->retrieve_posts(); foreach ( $results as $post ) { $return = $this->import_post_values( $post->identifier ); if ( ! $return ) { return false; } } return true; } /** * Retrieve the posts from the Squirrly Database. * * @return array Array of post IDs from the DB. */ protected function retrieve_posts() { global $wpdb; return $wpdb->get_results( $wpdb->prepare( $this->retrieve_posts_query(), get_current_blog_id() ) ); } /** * Returns the query to return an identifier for the posts to import. * * @return string Query to get post ID's from the DB. */ protected function retrieve_posts_query() { return "SELECT post_id AS identifier FROM {$this->table_name} WHERE blog_id = %d"; } /** * Removes the DB table and the post meta field Squirrly creates. * * @return bool Cleanup status. */ protected function cleanup() { global $wpdb; // If we can clean, let's clean. $wpdb->query( "DROP TABLE {$this->table_name}" ); // This removes the post meta field for the focus keyword from the DB. parent::cleanup(); // If we can still see the table, something went wrong. if ( $this->detect() ) { $this->cleanup_error_msg(); return false; } return true; } /** * Detects whether there is post meta data to import. * * @return bool Boolean indicating whether there is something to import. */ protected function detect() { global $wpdb; $result = $wpdb->get_var( "SHOW TABLES LIKE '{$this->table_name}'" ); if ( is_wp_error( $result ) || is_null( $result ) ) { return false; } return true; } /** * Imports the data of a post out of Squirrly's DB table. * * @param mixed $post_identifier Post identifier, can be ID or string. * * @return bool Import status. */ private function import_post_values( $post_identifier ) { $data = $this->retrieve_post_data( $post_identifier ); if ( ! $data ) { return false; } if ( ! is_numeric( $post_identifier ) ) { $post_id = url_to_postid( $post_identifier ); } if ( is_numeric( $post_identifier ) ) { $post_id = (int) $post_identifier; $data['focuskw'] = $this->maybe_add_focus_kw( $post_identifier ); } foreach ( $this->seo_field_keys as $squirrly_key => $yoast_key ) { $this->import_meta_helper( $squirrly_key, $yoast_key, $data, $post_id ); } return true; } /** * Retrieves the Squirrly SEO data for a post from the DB. * * @param int $post_identifier Post ID. * * @return array|bool Array of data or false. */ private function retrieve_post_data( $post_identifier ) { global $wpdb; if ( is_numeric( $post_identifier ) ) { $post_identifier = (int) $post_identifier; $query_where = 'post_id = %d'; } if ( ! is_numeric( $post_identifier ) ) { $query_where = 'URL = %s'; } $replacements = [ get_current_blog_id(), $post_identifier, ]; $data = $wpdb->get_var( $wpdb->prepare( "SELECT seo FROM {$this->table_name} WHERE blog_id = %d AND " . $query_where, $replacements ) ); if ( ! $data || is_wp_error( $data ) ) { return false; } $data = maybe_unserialize( $data ); return $data; } /** * Squirrly stores the focus keyword in post meta. * * @param int $post_id Post ID. * * @return string The focus keyword. */ private function maybe_add_focus_kw( $post_id ) { $focuskw = get_post_meta( $post_id, '_sq_post_keyword', true ); if ( $focuskw ) { $focuskw = json_decode( $focuskw ); return $focuskw->keyword; } return ''; } } import/plugins/class-import-ultimate-seo.php 0000644 00000002262 15150262017 0015274 0 ustar 00 <?php /** * File with the class to handle data from Ultimate SEO. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean Ultimate SEO post metadata. */ class WPSEO_Import_Ultimate_SEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'Ultimate SEO'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_su_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_su_description', 'new_key' => 'metadesc', ], [ 'old_key' => '_su_title', 'new_key' => 'title', ], [ 'old_key' => '_su_og_title', 'new_key' => 'opengraph-title', ], [ 'old_key' => '_su_og_description', 'new_key' => 'opengraph-description', ], [ 'old_key' => '_su_og_image', 'new_key' => 'opengraph-image', ], [ 'old_key' => '_su_meta_robots_noindex', 'new_key' => 'meta-robots-noindex', 'convert' => [ 'on' => 1 ], ], [ 'old_key' => '_su_meta_robots_nofollow', 'new_key' => 'meta-robots-nofollow', 'convert' => [ 'on' => 1 ], ], ]; } import/plugins/class-import-woothemes-seo.php 0000644 00000004751 15150262017 0015467 0 ustar 00 <?php /** * File with the class to handle data from WooThemes SEO. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Import_WooThemes_SEO * * Class with functionality to import & clean WooThemes SEO post metadata. */ class WPSEO_Import_WooThemes_SEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'WooThemes SEO'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = 'seo_title'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => 'seo_description', 'new_key' => 'metadesc', ], [ 'old_key' => 'seo_title', 'new_key' => 'title', ], [ 'old_key' => 'seo_noindex', 'new_key' => 'meta-robots-noindex', ], [ 'old_key' => 'seo_follow', 'new_key' => 'meta-robots-nofollow', ], ]; /** * Holds the meta fields we can delete after import. * * @var array */ protected $cleanup_metas = [ 'seo_follow', 'seo_noindex', 'seo_title', 'seo_description', 'seo_keywords', ]; /** * Holds the options we can delete after import. * * @var array */ protected $cleanup_options = [ 'seo_woo_archive_layout', 'seo_woo_single_layout', 'seo_woo_page_layout', 'seo_woo_wp_title', 'seo_woo_meta_single_desc', 'seo_woo_meta_single_key', 'seo_woo_home_layout', ]; /** * Cleans up the WooThemes SEO settings. * * @return bool Cleanup status. */ protected function cleanup() { $result = $this->cleanup_meta(); if ( $result ) { $this->cleanup_options(); } return $result; } /** * Removes the Woo Options from the database. * * @return void */ private function cleanup_options() { foreach ( $this->cleanup_options as $option ) { delete_option( $option ); } } /** * Removes the post meta fields from the database. * * @return bool Cleanup status. */ private function cleanup_meta() { foreach ( $this->cleanup_metas as $key ) { $result = $this->cleanup_meta_key( $key ); if ( ! $result ) { return false; } } return true; } /** * Removes a single meta field from the postmeta table in the database. * * @param string $key The meta_key to delete. * * @return bool Cleanup status. */ private function cleanup_meta_key( $key ) { global $wpdb; $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", $key ) ); return $wpdb->__get( 'result' ); } } import/plugins/class-import-wp-meta-seo.php 0000644 00000003056 15150262017 0015024 0 ustar 00 <?php /** * File with the class to handle data from WP Meta SEO. * * @package WPSEO\Admin\Import\Plugins */ /** * Class with functionality to import & clean WP Meta SEO post metadata. */ class WPSEO_Import_WP_Meta_SEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'WP Meta SEO'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_metaseo_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_metaseo_metadesc', 'new_key' => 'metadesc', ], [ 'old_key' => '_metaseo_metatitle', 'new_key' => 'title', ], [ 'old_key' => '_metaseo_metaopengraph-title', 'new_key' => 'opengraph-title', ], [ 'old_key' => '_metaseo_metaopengraph-desc', 'new_key' => 'opengraph-description', ], [ 'old_key' => '_metaseo_metaopengraph-image', 'new_key' => 'opengraph-image', ], [ 'old_key' => '_metaseo_metatwitter-title', 'new_key' => 'twitter-title', ], [ 'old_key' => '_metaseo_metatwitter-desc', 'new_key' => 'twitter-description', ], [ 'old_key' => '_metaseo_metatwitter-image', 'new_key' => 'twitter-image', ], [ 'old_key' => '_metaseo_metaindex', 'new_key' => 'meta-robots-noindex', 'convert' => [ 'index' => 0, 'noindex' => 1, ], ], [ 'old_key' => '_metaseo_metafollow', 'new_key' => 'meta-robots-nofollow', 'convert' => [ 'follow' => 0, 'nofollow' => 1, ], ], ]; } import/plugins/class-import-wpseo.php 0000644 00000016366 15150262017 0014033 0 ustar 00 <?php /** * File with the class to handle data from wpSEO.de. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Import_WPSEO. * * Class with functionality to import & clean wpSEO.de post metadata. */ class WPSEO_Import_WPSEO extends WPSEO_Plugin_Importer { /** * The plugin name. * * @var string */ protected $plugin_name = 'wpSEO.de'; /** * Meta key, used in SQL LIKE clause for delete query. * * @var string */ protected $meta_key = '_wpseo_edit_%'; /** * Array of meta keys to detect and import. * * @var array */ protected $clone_keys = [ [ 'old_key' => '_wpseo_edit_description', 'new_key' => 'metadesc', ], [ 'old_key' => '_wpseo_edit_title', 'new_key' => 'title', ], [ 'old_key' => '_wpseo_edit_canonical', 'new_key' => 'canonical', ], [ 'old_key' => '_wpseo_edit_og_title', 'new_key' => 'opengraph-title', ], [ 'old_key' => '_wpseo_edit_og_description', 'new_key' => 'opengraph-description', ], [ 'old_key' => '_wpseo_edit_og_image', 'new_key' => 'opengraph-image', ], [ 'old_key' => '_wpseo_edit_twittercard_title', 'new_key' => 'twitter-title', ], [ 'old_key' => '_wpseo_edit_twittercard_description', 'new_key' => 'twitter-description', ], [ 'old_key' => '_wpseo_edit_twittercard_image', 'new_key' => 'twitter-image', ], ]; /** * The values 1 - 6 are the configured values from wpSEO. This array will map the values of wpSEO to our values. * * There are some double array like 1-6 and 3-4. The reason is they only set the index value. The follow value is * the default we use in the cases there isn't a follow value present. * * @var array */ private $robot_values = [ // In wpSEO: index, follow. 1 => [ 'index' => 2, 'follow' => 0, ], // In wpSEO: index, nofollow. 2 => [ 'index' => 2, 'follow' => 1, ], // In wpSEO: noindex. 3 => [ 'index' => 1, 'follow' => 0, ], // In wpSEO: noindex, follow. 4 => [ 'index' => 1, 'follow' => 0, ], // In wpSEO: noindex, nofollow. 5 => [ 'index' => 1, 'follow' => 1, ], // In wpSEO: index. 6 => [ 'index' => 2, 'follow' => 0, ], ]; /** * Imports wpSEO settings. * * @return bool Import success status. */ protected function import() { $status = parent::import(); if ( $status ) { $this->import_post_robots(); $this->import_taxonomy_metas(); } return $status; } /** * Removes wpseo.de post meta's. * * @return bool Cleanup status. */ protected function cleanup() { $this->cleanup_term_meta(); $result = $this->cleanup_post_meta(); return $result; } /** * Detects whether there is post meta data to import. * * @return bool Boolean indicating whether there is something to import. */ protected function detect() { if ( parent::detect() ) { return true; } global $wpdb; $count = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->options} WHERE option_name LIKE 'wpseo_category_%'" ); if ( $count !== '0' ) { return true; } return false; } /** * Imports the robot values from WPSEO plugin. These have to be converted to the Yoast format. * * @return void */ private function import_post_robots() { $query_posts = new WP_Query( 'post_type=any&meta_key=_wpseo_edit_robots&order=ASC&fields=ids&nopaging=true' ); if ( ! empty( $query_posts->posts ) ) { foreach ( array_values( $query_posts->posts ) as $post_id ) { $this->import_post_robot( $post_id ); } } } /** * Gets the wpSEO robot value and map this to Yoast SEO values. * * @param int $post_id The post id of the current post. * * @return void */ private function import_post_robot( $post_id ) { $wpseo_robots = get_post_meta( $post_id, '_wpseo_edit_robots', true ); $robot_value = $this->get_robot_value( $wpseo_robots ); // Saving the new meta values for Yoast SEO. $this->maybe_save_post_meta( 'meta-robots-noindex', $robot_value['index'], $post_id ); $this->maybe_save_post_meta( 'meta-robots-nofollow', $robot_value['follow'], $post_id ); } /** * Imports the taxonomy metas from wpSEO. * * @return void */ private function import_taxonomy_metas() { $terms = get_terms( [ 'taxonomy' => get_taxonomies(), 'hide_empty' => false, ] ); $tax_meta = get_option( 'wpseo_taxonomy_meta' ); foreach ( $terms as $term ) { $this->import_taxonomy_description( $tax_meta, $term->taxonomy, $term->term_id ); $this->import_taxonomy_robots( $tax_meta, $term->taxonomy, $term->term_id ); } update_option( 'wpseo_taxonomy_meta', $tax_meta ); } /** * Imports the meta description to Yoast SEO. * * @param array $tax_meta The array with the current metadata. * @param string $taxonomy String with the name of the taxonomy. * @param string $term_id The ID of the current term. * * @return void */ private function import_taxonomy_description( &$tax_meta, $taxonomy, $term_id ) { $description = get_option( 'wpseo_' . $taxonomy . '_' . $term_id, false ); if ( $description !== false ) { // Import description. $tax_meta[ $taxonomy ][ $term_id ]['wpseo_desc'] = $description; } } /** * Imports the robot value to Yoast SEO. * * @param array $tax_meta The array with the current metadata. * @param string $taxonomy String with the name of the taxonomy. * @param string $term_id The ID of the current term. * * @return void */ private function import_taxonomy_robots( &$tax_meta, $taxonomy, $term_id ) { $wpseo_robots = get_option( 'wpseo_' . $taxonomy . '_' . $term_id . '_robots', false ); if ( $wpseo_robots === false ) { return; } // The value 1, 2 and 6 are the index values in wpSEO. $new_robot_value = 'noindex'; if ( in_array( (int) $wpseo_robots, [ 1, 2, 6 ], true ) ) { $new_robot_value = 'index'; } $tax_meta[ $taxonomy ][ $term_id ]['wpseo_noindex'] = $new_robot_value; } /** * Deletes the wpSEO taxonomy meta data. * * @param string $taxonomy String with the name of the taxonomy. * @param string $term_id The ID of the current term. * * @return void */ private function delete_taxonomy_metas( $taxonomy, $term_id ) { delete_option( 'wpseo_' . $taxonomy . '_' . $term_id ); delete_option( 'wpseo_' . $taxonomy . '_' . $term_id . '_robots' ); } /** * Gets the robot config by given wpSEO robots value. * * @param string $wpseo_robots The value in wpSEO that needs to be converted to the Yoast format. * * @return string The correct robot value. */ private function get_robot_value( $wpseo_robots ) { if ( array_key_exists( $wpseo_robots, $this->robot_values ) ) { return $this->robot_values[ $wpseo_robots ]; } return $this->robot_values[1]; } /** * Deletes wpSEO postmeta from the database. * * @return bool Cleanup status. */ private function cleanup_post_meta() { global $wpdb; // If we get to replace the data, let's do some proper cleanup. return $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '_wpseo_edit_%'" ); } /** * Cleans up the wpSEO term meta. * * @return void */ private function cleanup_term_meta() { $terms = get_terms( [ 'taxonomy' => get_taxonomies(), 'hide_empty' => false, ] ); foreach ( $terms as $term ) { $this->delete_taxonomy_metas( $term->taxonomy, $term->term_id ); } } } import/class-import-detector.php 0000644 00000001355 15150262017 0013016 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Import_Plugins_Detector. * * Class with functionality to detect whether we should import from another SEO plugin. */ class WPSEO_Import_Plugins_Detector { /** * Plugins we need to import from. * * @var array */ public $needs_import = []; /** * Detects whether we need to import anything. * * @return void */ public function detect() { foreach ( WPSEO_Plugin_Importers::get() as $importer_class ) { $importer = new $importer_class(); $detect = new WPSEO_Import_Plugin( $importer, 'detect' ); if ( $detect->status->status ) { $this->needs_import[ $importer_class ] = $importer->get_plugin_name(); } } } } import/class-import-plugin.php 0000644 00000002667 15150262017 0012512 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Import\Plugins */ /** * Class WPSEO_Import_Plugin. * * Class with functionality to import Yoast SEO settings from other plugins. */ class WPSEO_Import_Plugin { /** * Holds the status of and message about imports. * * @var WPSEO_Import_Status */ public $status; /** * Class with functionality to import meta data from other plugins. * * @var WPSEO_Plugin_Importer */ protected $importer; /** * Import class constructor. * * @param WPSEO_Plugin_Importer $importer The importer that needs to perform this action. * @param string $action The action to perform. */ public function __construct( WPSEO_Plugin_Importer $importer, $action ) { $this->importer = $importer; switch ( $action ) { case 'cleanup': $this->status = $this->importer->run_cleanup(); break; case 'import': $this->status = $this->importer->run_import(); break; case 'detect': default: $this->status = $this->importer->run_detect(); } $this->status->set_msg( $this->complete_msg( $this->status->get_msg() ) ); } /** * Convenience function to replace %s with plugin name in import message. * * @param string $msg Message string. * * @return string Returns message with plugin name instead of replacement variables. */ protected function complete_msg( $msg ) { return sprintf( $msg, $this->importer->get_plugin_name() ); } } import/class-import-settings.php 0000644 00000005714 15150262017 0013050 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Import */ /** * Class WPSEO_Import_Settings. * * Class with functionality to import the Yoast SEO settings. */ class WPSEO_Import_Settings { /** * Nonce action key. * * @var string */ public const NONCE_ACTION = 'wpseo-import-settings'; /** * Holds the import status instance. * * @var WPSEO_Import_Status */ public $status; /** * Holds the old WPSEO version. * * @var string */ private $old_wpseo_version; /** * Class constructor. */ public function __construct() { $this->status = new WPSEO_Import_Status( 'import', false ); } /** * Imports the data submitted by the user. * * @return void */ public function import() { check_admin_referer( self::NONCE_ACTION ); if ( ! WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { return; } if ( ! isset( $_POST['settings_import'] ) || ! is_string( $_POST['settings_import'] ) ) { return; } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: The raw content will be parsed afterwards. $content = wp_unslash( $_POST['settings_import'] ); if ( empty( $content ) ) { return; } $this->parse_options( $content ); } /** * Parse the options. * * @param string $raw_options The content to parse. * * @return void */ protected function parse_options( $raw_options ) { $options = parse_ini_string( $raw_options, true, INI_SCANNER_RAW ); if ( is_array( $options ) && $options !== [] ) { $this->import_options( $options ); return; } $this->status->set_msg( __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . __( 'No settings found.', 'wordpress-seo' ) ); } /** * Parse the option group and import it. * * @param string $name Name string. * @param array $option_group Option group data. * @param array $options Options data. * * @return void */ protected function parse_option_group( $name, $option_group, $options ) { // Make sure that the imported options are cleaned/converted on import. $option_instance = WPSEO_Options::get_option_instance( $name ); if ( is_object( $option_instance ) && method_exists( $option_instance, 'import' ) ) { $option_instance->import( $option_group, $this->old_wpseo_version, $options ); } } /** * Imports the options if found. * * @param array $options The options parsed from the provided settings. * * @return void */ protected function import_options( $options ) { if ( isset( $options['wpseo']['version'] ) && $options['wpseo']['version'] !== '' ) { $this->old_wpseo_version = $options['wpseo']['version']; } foreach ( $options as $name => $option_group ) { $this->parse_option_group( $name, $option_group, $options ); } $this->status->set_msg( __( 'Settings successfully imported.', 'wordpress-seo' ) ); $this->status->set_status( true ); // Reset the cached option values. WPSEO_Options::clear_cache(); } } import/class-import-status.php 0000644 00000005312 15150262017 0012525 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Import */ /** * Class WPSEO_ImportStatus. * * Holds the status of and message about imports. */ class WPSEO_Import_Status { /** * The import status. * * @var bool */ public $status = false; /** * The import message. * * @var string */ private $msg = ''; /** * The type of action performed. * * @var string */ private $action; /** * WPSEO_Import_Status constructor. * * @param string $action The type of import action. * @param bool $status The status of the import. * @param string $msg Extra messages about the status. */ public function __construct( $action, $status, $msg = '' ) { $this->action = $action; $this->status = $status; $this->msg = $msg; } /** * Get the import message. * * @return string Message about current status. */ public function get_msg() { if ( $this->msg !== '' ) { return $this->msg; } if ( $this->status === false ) { /* translators: %s is replaced with the name of the plugin we're trying to find data from. */ return __( '%s data not found.', 'wordpress-seo' ); } return $this->get_default_success_message(); } /** * Get the import action. * * @return string Import action type. */ public function get_action() { return $this->action; } /** * Set the import action, set status to false. * * @param string $action The type of action to set as import action. * * @return void */ public function set_action( $action ) { $this->action = $action; $this->status = false; } /** * Sets the importer status message. * * @param string $msg The message to set. * * @return void */ public function set_msg( $msg ) { $this->msg = $msg; } /** * Sets the importer status. * * @param bool $status The status to set. * * @return WPSEO_Import_Status The current object. */ public function set_status( $status ) { $this->status = (bool) $status; return $this; } /** * Returns a success message depending on the action. * * @return string Returns a success message for the current action. */ private function get_default_success_message() { switch ( $this->action ) { case 'import': /* translators: %s is replaced with the name of the plugin we're importing data from. */ return __( '%s data successfully imported.', 'wordpress-seo' ); case 'cleanup': /* translators: %s is replaced with the name of the plugin we're removing data from. */ return __( '%s data successfully removed.', 'wordpress-seo' ); case 'detect': default: /* translators: %s is replaced with the name of the plugin we've found data from. */ return __( '%s data found.', 'wordpress-seo' ); } } } listeners/class-listener.php 0000644 00000000460 15150262017 0012214 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Listeners */ /** * Dictates the required methods for a Listener implementation. */ interface WPSEO_Listener { /** * Listens to an argument in the request URL and triggers an action. * * @return void */ public function listen(); } menu/class-admin-menu.php 0000644 00000007653 15150262017 0011370 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Menu */ /** * Registers the admin menu on the left of the admin area. */ class WPSEO_Admin_Menu extends WPSEO_Base_Menu { /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { // Needs the lower than default priority so other plugins can hook underneath it without issue. add_action( 'admin_menu', [ $this, 'register_settings_page' ], 5 ); } /** * Registers the menu item submenus. * * @return void */ public function register_settings_page() { $manage_capability = $this->get_manage_capability(); $page_identifier = $this->get_page_identifier(); $admin_page_callback = $this->get_admin_page_callback(); // Get all submenu pages. $submenu_pages = $this->get_submenu_pages(); foreach ( $submenu_pages as $submenu_page ) { if ( WPSEO_Capability_Utils::current_user_can( $submenu_page[3] ) ) { $manage_capability = $submenu_page[3]; $page_identifier = $submenu_page[4]; $admin_page_callback = $submenu_page[5]; break; } } foreach ( $submenu_pages as $index => $submenu_page ) { $submenu_pages[ $index ][0] = $page_identifier; } /* * The current user has the capability to control anything. * This means that all submenus and dashboard can be shown. */ global $admin_page_hooks; add_menu_page( 'Yoast SEO: ' . __( 'Dashboard', 'wordpress-seo' ), 'Yoast SEO ' . $this->get_notification_counter(), $manage_capability, $page_identifier, $admin_page_callback, $this->get_icon_svg(), 99 ); // Wipe notification bits from hooks. // phpcs:ignore WordPress.WP.GlobalVariablesOverride -- This is a deliberate action. $admin_page_hooks[ $page_identifier ] = 'seo'; // Add submenu items to the main menu if possible. $this->register_submenu_pages( $submenu_pages ); } /** * Returns the list of registered submenu pages. * * @return array List of registered submenu pages. */ public function get_submenu_pages() { global $wpseo_admin; $search_console_callback = null; // Account for when the available submenu pages are requested from outside the admin. if ( isset( $wpseo_admin ) ) { $google_search_console = new WPSEO_GSC(); $search_console_callback = [ $google_search_console, 'display' ]; } // Submenu pages. $submenu_pages = [ $this->get_submenu_page( __( 'General', 'wordpress-seo' ), $this->get_page_identifier() ), $this->get_submenu_page( __( 'Search Console', 'wordpress-seo' ), 'wpseo_search_console', $search_console_callback ), $this->get_submenu_page( __( 'Tools', 'wordpress-seo' ), 'wpseo_tools' ), $this->get_submenu_page( $this->get_license_page_title(), 'wpseo_licenses' ), ]; /** * Filter: 'wpseo_submenu_pages' - Collects all submenus that need to be shown. * * @param array $submenu_pages List with all submenu pages. */ return (array) apply_filters( 'wpseo_submenu_pages', $submenu_pages ); } /** * Returns the notification count in HTML format. * * @return string The notification count in HTML format. */ protected function get_notification_counter() { $notification_center = Yoast_Notification_Center::get(); $notification_count = $notification_center->get_notification_count(); // Add main page. /* translators: Hidden accessibility text; %s: number of notifications. */ $notifications = sprintf( _n( '%s notification', '%s notifications', $notification_count, 'wordpress-seo' ), number_format_i18n( $notification_count ) ); return sprintf( '<span class="update-plugins count-%1$d"><span class="plugin-count" aria-hidden="true">%1$d</span><span class="screen-reader-text">%2$s</span></span>', $notification_count, $notifications ); } /** * Returns the capability that is required to manage all options. * * @return string Capability to check against. */ protected function get_manage_capability() { return 'wpseo_manage_options'; } } menu/class-base-menu.php 0000644 00000021106 15150262017 0011177 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Menu */ use Yoast\WP\SEO\Promotions\Application\Promotion_Manager; /** * Admin menu base class. */ abstract class WPSEO_Base_Menu implements WPSEO_WordPress_Integration { /** * A menu. * * @var WPSEO_Menu */ protected $menu; /** * Constructs the Admin Menu. * * @param WPSEO_Menu $menu Menu to use. */ public function __construct( WPSEO_Menu $menu ) { $this->menu = $menu; } /** * Returns the list of registered submenu pages. * * @return array List of registered submenu pages. */ abstract public function get_submenu_pages(); /** * Creates a submenu formatted array. * * @param string $page_title Page title to use. * @param string $page_slug Page slug to use. * @param callable|null $callback Optional. Callback which handles the page request. * @param callable[]|null $hook Optional. Hook to trigger when the page is registered. * * @return array Formatted submenu. */ protected function get_submenu_page( $page_title, $page_slug, $callback = null, $hook = null ) { if ( $callback === null ) { $callback = $this->get_admin_page_callback(); } return [ $this->get_page_identifier(), '', $page_title, $this->get_manage_capability(), $page_slug, $callback, $hook, ]; } /** * Registers submenu pages as menu pages. * * This method should only be used if the user does not have the required capabilities * to access the parent menu page. * * @param array $submenu_pages List of submenu pages to register. * * @return void */ protected function register_menu_pages( $submenu_pages ) { if ( ! is_array( $submenu_pages ) || empty( $submenu_pages ) ) { return; } // Loop through submenu pages and add them. array_walk( $submenu_pages, [ $this, 'register_menu_page' ] ); } /** * Registers submenu pages. * * @param array $submenu_pages List of submenu pages to register. * * @return void */ protected function register_submenu_pages( $submenu_pages ) { if ( ! is_array( $submenu_pages ) || empty( $submenu_pages ) ) { return; } // Loop through submenu pages and add them. array_walk( $submenu_pages, [ $this, 'register_submenu_page' ] ); } /** * Registers a submenu page as a menu page. * * This method should only be used if the user does not have the required capabilities * to access the parent menu page. * * @param array $submenu_page { * Submenu page definition. * * @type string $0 Parent menu page slug. * @type string $1 Page title, currently unused. * @type string $2 Title to display in the menu. * @type string $3 Required capability to access the page. * @type string $4 Page slug. * @type callable $5 Callback to run when the page is rendered. * @type array $6 Optional. List of callbacks to run when the page is loaded. * } * * @return void */ protected function register_menu_page( $submenu_page ) { // If the submenu page requires the general manage capability, it must be added as an actual submenu page. if ( $submenu_page[3] === $this->get_manage_capability() ) { return; } $page_title = 'Yoast SEO: ' . $submenu_page[2]; // Register submenu page as menu page. $hook_suffix = add_menu_page( $page_title, $submenu_page[2], $submenu_page[3], $submenu_page[4], $submenu_page[5], $this->get_icon_svg(), 99 ); // If necessary, add hooks for the submenu page. if ( isset( $submenu_page[6] ) && ( is_array( $submenu_page[6] ) ) ) { $this->add_page_hooks( $hook_suffix, $submenu_page[6] ); } } /** * Registers a submenu page. * * This method will override the capability of the page to automatically use the * general manage capability. Use the `register_menu_page()` method if the submenu * page should actually use a different capability. * * @param array $submenu_page { * Submenu page definition. * * @type string $0 Parent menu page slug. * @type string $1 Page title, currently unused. * @type string $2 Title to display in the menu. * @type string $3 Required capability to access the page. * @type string $4 Page slug. * @type callable $5 Callback to run when the page is rendered. * @type array $6 Optional. List of callbacks to run when the page is loaded. * } * * @return void */ protected function register_submenu_page( $submenu_page ) { $page_title = $submenu_page[2]; // We cannot use $submenu_page[1] because add-ons define that, so hard-code this value. if ( $submenu_page[4] === 'wpseo_licenses' ) { $page_title = $this->get_license_page_title(); } /* * Handle the Google Search Console special case by passing a fake parent * page slug. This way, the sub-page is stil registered and can be accessed * directly. Its menu item won't be displayed. */ if ( $submenu_page[4] === 'wpseo_search_console' ) { // Set the parent page slug to a non-existing one. $submenu_page[0] = 'wpseo_fake_menu_parent_page_slug'; } $page_title .= ' - Yoast SEO'; // Register submenu page. $hook_suffix = add_submenu_page( $submenu_page[0], $page_title, $submenu_page[2], $submenu_page[3], $submenu_page[4], $submenu_page[5] ); // If necessary, add hooks for the submenu page. if ( isset( $submenu_page[6] ) && ( is_array( $submenu_page[6] ) ) ) { $this->add_page_hooks( $hook_suffix, $submenu_page[6] ); } } /** * Adds hook callbacks for a given admin page hook suffix. * * @param string $hook_suffix Admin page hook suffix, as returned by `add_menu_page()` * or `add_submenu_page()`. * @param array $callbacks Callbacks to add. * * @return void */ protected function add_page_hooks( $hook_suffix, array $callbacks ) { foreach ( $callbacks as $callback ) { add_action( 'load-' . $hook_suffix, $callback ); } } /** * Gets the main admin page identifier. * * @return string Admin page identifier. */ protected function get_page_identifier() { return $this->menu->get_page_identifier(); } /** * Checks whether the current user has capabilities to manage all options. * * @return bool True if capabilities are sufficient, false otherwise. */ protected function check_manage_capability() { return WPSEO_Capability_Utils::current_user_can( $this->get_manage_capability() ); } /** * Returns the capability that is required to manage all options. * * @return string Capability to check against. */ abstract protected function get_manage_capability(); /** * Returns the page handler callback. * * @return array Callback page handler. */ protected function get_admin_page_callback() { return [ $this->menu, 'load_page' ]; } /** * Returns the page title to use for the licenses page. * * @return string The title for the license page. */ protected function get_license_page_title() { static $title = null; if ( $title === null ) { $title = __( 'Premium', 'wordpress-seo' ); } if ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) && ! YoastSEO()->helpers->product->is_premium() ) { $title = __( 'Premium', 'wordpress-seo' ) . '<span class="yoast-menu-bf-sale-badge">' . __( '30% OFF', 'wordpress-seo' ) . '</span>'; } return $title; } /** * Returns a base64 URL for the svg for use in the menu. * * @param bool $base64 Whether or not to return base64'd output. * * @return string SVG icon. */ public function get_icon_svg( $base64 = true ) { $svg = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" height="100%" style="fill:#82878c" viewBox="0 0 512 512" role="img" aria-hidden="true" focusable="false"><g><g><g><g><path d="M203.6,395c6.8-17.4,6.8-36.6,0-54l-79.4-204h70.9l47.7,149.4l74.8-207.6H116.4c-41.8,0-76,34.2-76,76V357c0,41.8,34.2,76,76,76H173C189,424.1,197.6,410.3,203.6,395z"/></g><g><path d="M471.6,154.8c0-41.8-34.2-76-76-76h-3L285.7,365c-9.6,26.7-19.4,49.3-30.3,68h216.2V154.8z"/></g></g><path stroke-width="2.974" stroke-miterlimit="10" d="M338,1.3l-93.3,259.1l-42.1-131.9h-89.1l83.8,215.2c6,15.5,6,32.5,0,48c-7.4,19-19,37.3-53,41.9l-7.2,1v76h8.3c81.7,0,118.9-57.2,149.6-142.9L431.6,1.3H338z M279.4,362c-32.9,92-67.6,128.7-125.7,131.8v-45c37.5-7.5,51.3-31,59.1-51.1c7.5-19.3,7.5-40.7,0-60l-75-192.7h52.8l53.3,166.8l105.9-294h58.1L279.4,362z"/></g></g></svg>'; if ( $base64 ) { //phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode -- This encoding is intended. return 'data:image/svg+xml;base64,' . base64_encode( $svg ); } return $svg; } } menu/class-menu.php 0000644 00000004232 15150262017 0010270 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Menu */ /** * Registers the regular admin menu and network admin menu implementations. */ class WPSEO_Menu implements WPSEO_WordPress_Integration { /** * The page identifier used in WordPress to register the admin page. * * !DO NOT CHANGE THIS! * * @var string */ public const PAGE_IDENTIFIER = 'wpseo_dashboard'; /** * List of classes that add admin functionality. * * @var array */ protected $admin_features; /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { $admin_menu = new WPSEO_Admin_Menu( $this ); $admin_menu->register_hooks(); if ( WPSEO_Utils::is_plugin_network_active() ) { $network_admin_menu = new WPSEO_Network_Admin_Menu( $this ); $network_admin_menu->register_hooks(); } $capability_normalizer = new WPSEO_Submenu_Capability_Normalize(); $capability_normalizer->register_hooks(); } /** * Returns the main menu page identifier. * * @return string Page identifier to use. */ public function get_page_identifier() { return self::PAGE_IDENTIFIER; } /** * Loads the requested admin settings page. * * @return void */ public function load_page() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); $this->show_page( $page ); } } /** * Shows an admin settings page. * * @param string $page Page to display. * * @return void */ protected function show_page( $page ) { switch ( $page ) { case 'wpseo_tools': require_once WPSEO_PATH . 'admin/pages/tools.php'; break; case 'wpseo_licenses': require_once WPSEO_PATH . 'admin/pages/licenses.php'; break; case 'wpseo_files': require_once WPSEO_PATH . 'admin/views/tool-file-editor.php'; break; default: require_once WPSEO_PATH . 'admin/pages/dashboard.php'; break; } } } menu/class-network-admin-menu.php 0000644 00000004377 15150262017 0013057 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Menu */ /** * Network Admin Menu handler. */ class WPSEO_Network_Admin_Menu extends WPSEO_Base_Menu { /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { // Needs the lower than default priority so other plugins can hook underneath it without issue. add_action( 'network_admin_menu', [ $this, 'register_settings_page' ], 5 ); } /** * Register the settings page for the Network settings. * * @return void */ public function register_settings_page() { if ( ! $this->check_manage_capability() ) { return; } add_menu_page( __( 'Network Settings', 'wordpress-seo' ) . ' - Yoast SEO', 'Yoast SEO', $this->get_manage_capability(), $this->get_page_identifier(), [ $this, 'network_config_page' ], $this->get_icon_svg() ); $submenu_pages = $this->get_submenu_pages(); $this->register_submenu_pages( $submenu_pages ); } /** * Returns the list of registered submenu pages. * * @return array List of registered submenu pages. */ public function get_submenu_pages() { // Submenu pages. $submenu_pages = [ $this->get_submenu_page( __( 'General', 'wordpress-seo' ), $this->get_page_identifier(), [ $this, 'network_config_page' ] ), ]; if ( WPSEO_Utils::allow_system_file_edit() === true ) { $submenu_pages[] = $this->get_submenu_page( __( 'Edit Files', 'wordpress-seo' ), 'wpseo_files' ); } $submenu_pages[] = $this->get_submenu_page( __( 'Extensions', 'wordpress-seo' ), 'wpseo_licenses' ); return $submenu_pages; } /** * Loads the form for the network configuration page. * * @return void */ public function network_config_page() { require_once WPSEO_PATH . 'admin/pages/network.php'; } /** * Checks whether the current user has capabilities to manage all options. * * @return bool True if capabilities are sufficient, false otherwise. */ protected function check_manage_capability() { return current_user_can( $this->get_manage_capability() ); } /** * Returns the capability that is required to manage all options. * * @return string Capability to check against. */ protected function get_manage_capability() { return 'wpseo_manage_network_options'; } } menu/class-replacevar-editor.php 0000644 00000013702 15150262017 0012736 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Menu */ /** * Renders a replacement variable editor. */ class WPSEO_Replacevar_Editor { /** * Yoast Forms instance. * * @var Yoast_Form */ private $yform; /** * The arguments required for the div to render. * * @var array { * @type string $title The title field id. * @type string $description The description field id. * @type string $page_type_recommended The page type for the context of the recommended replace vars. * @type string $page_type_specific The page type for the context of the editor specific replace vars. * @type bool $paper_style Optional. Whether the editor has paper style. * @type string $label_title Optional. The label to use for the title field. * @type string $label_description Optional. The label to use for the description field. * @type string $description_placeholder Optional. The placeholder text to use for the description field. * @type bool $has_new_badge Optional. Whether to show the "New" badge. * @type bool $has_premium_badge Optional. Whether to show the "Premium" badge. * } */ private $arguments; /** * Constructs the object. * * @param Yoast_Form $yform Yoast forms. * @param array $arguments { * The arguments that can be given. * * @type string $title The title field id. * @type string $description The description field id. * @type string $page_type_recommended The page type for the context of the recommended replace vars. * @type string $page_type_specific The page type for the context of the editor specific replace vars. * @type bool $paper_style Optional. Whether the editor has paper style. * @type string $label_title Optional. The label to use for the title field. * @type string $label_description Optional. The label to use for the description field. * @type string $description_placeholder Optional. The placeholder text to use for the description field. * @type bool $has_new_badge Optional. Whether to show the "New" badge. * @type bool $has_premium_badge Optional. Whether to show the "Premium" badge. * } */ public function __construct( Yoast_Form $yform, $arguments ) { $arguments = wp_parse_args( $arguments, [ 'paper_style' => true, 'label_title' => '', 'label_description' => '', 'description_placeholder' => '', 'has_new_badge' => false, 'is_disabled' => false, 'has_premium_badge' => false, ] ); $this->validate_arguments( $arguments ); $this->yform = $yform; $this->arguments = [ 'title' => (string) $arguments['title'], 'description' => (string) $arguments['description'], 'page_type_recommended' => (string) $arguments['page_type_recommended'], 'page_type_specific' => (string) $arguments['page_type_specific'], 'paper_style' => (bool) $arguments['paper_style'], 'label_title' => (string) $arguments['label_title'], 'label_description' => (string) $arguments['label_description'], 'description_placeholder' => (string) $arguments['description_placeholder'], 'has_new_badge' => (bool) $arguments['has_new_badge'], 'is_disabled' => (bool) $arguments['is_disabled'], 'has_premium_badge' => (bool) $arguments['has_premium_badge'], ]; } /** * Renders a div for the react application to mount to, and hidden inputs where * the app should store it's value so they will be properly saved when the form * is submitted. * * @return void */ public function render() { $this->yform->hidden( $this->arguments['title'], $this->arguments['title'] ); $this->yform->hidden( $this->arguments['description'], $this->arguments['description'] ); printf( '<div data-react-replacevar-editor data-react-replacevar-title-field-id="%1$s" data-react-replacevar-metadesc-field-id="%2$s" data-react-replacevar-page-type-recommended="%3$s" data-react-replacevar-page-type-specific="%4$s" data-react-replacevar-paper-style="%5$s" data-react-replacevar-label-title="%6$s" data-react-replacevar-label-description="%7$s" data-react-replacevar-description-placeholder="%8$s" data-react-replacevar-has-new-badge="%9$s" data-react-replacevar-is-disabled="%10$s" data-react-replacevar-has-premium-badge="%11$s" ></div>', esc_attr( $this->arguments['title'] ), esc_attr( $this->arguments['description'] ), esc_attr( $this->arguments['page_type_recommended'] ), esc_attr( $this->arguments['page_type_specific'] ), esc_attr( $this->arguments['paper_style'] ), esc_attr( $this->arguments['label_title'] ), esc_attr( $this->arguments['label_description'] ), esc_attr( $this->arguments['description_placeholder'] ), esc_attr( $this->arguments['has_new_badge'] ), esc_attr( $this->arguments['is_disabled'] ), esc_attr( $this->arguments['has_premium_badge'] ) ); } /** * Validates the replacement variable editor arguments. * * @param array $arguments The arguments to validate. * * @throws InvalidArgumentException Thrown when not all required arguments are present. * * @return void */ protected function validate_arguments( array $arguments ) { $required_arguments = [ 'title', 'description', 'page_type_recommended', 'page_type_specific', 'paper_style', ]; foreach ( $required_arguments as $field_name ) { if ( ! array_key_exists( $field_name, $arguments ) ) { throw new InvalidArgumentException( sprintf( /* translators: %1$s expands to the missing field name. */ __( 'Not all required fields are given. Missing field %1$s', 'wordpress-seo' ), $field_name ) ); } } } } menu/class-replacevar-field.php 0000644 00000004167 15150262017 0012540 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Menu */ /** * Renders a single replacement variable field. */ class WPSEO_Replacevar_Field { /** * Forms instance. * * @var Yoast_Form Yoast */ private $yform; /** * The id for the hidden field. * * @var string */ private $field_id; /** * The label for the field. * * @var string */ private $label; /** * The page type for the context of the recommended replace vars. * * @var string */ private $page_type_recommended; /** * The page type for the context of the editor specific replace vars. * * @var string */ private $page_type_specific; /** * Constructs the object. * * @param Yoast_Form $yform Yoast forms. * @param string $field_id The field id. * @param string $label The field label. * @param string $page_type_recommended The page type for the context of the recommended replace vars. * @param string $page_type_specific The page type for the context of the editor specific replace vars. */ public function __construct( Yoast_Form $yform, $field_id, $label, $page_type_recommended, $page_type_specific ) { $this->yform = $yform; $this->field_id = $field_id; $this->label = $label; $this->page_type_recommended = $page_type_recommended; $this->page_type_specific = $page_type_specific; } /** * Renders a div for the react application to mount to, and hidden inputs where * the app should store it's value so they will be properly saved when the form * is submitted. * * @return void */ public function render() { $this->yform->hidden( $this->field_id, $this->field_id ); printf( '<div data-react-replacevar-field data-react-replacevar-field-id="%1$s" data-react-replacevar-field-label="%2$s" data-react-replacevar-page-type-recommended="%3$s" data-react-replacevar-page-type-specific="%4$s"></div>', esc_attr( $this->field_id ), esc_attr( $this->label ), esc_attr( $this->page_type_recommended ), esc_attr( $this->page_type_specific ) ); } } menu/class-submenu-capability-normalize.php 0000644 00000001770 15150262017 0015123 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Menu */ /** * Normalize submenu capabilities to `wpseo_manage_options`. */ class WPSEO_Submenu_Capability_Normalize implements WPSEO_WordPress_Integration { /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { add_filter( 'wpseo_submenu_pages', [ $this, 'normalize_submenus_capability' ] ); } /** * Normalizes any `manage_options` to `wpseo_manage_options`. * * This is needed as the module plugins are not updated with the new capabilities directly, * but they should not be shown as main menu items. * * @param array $submenu_pages List of subpages to convert. * * @return array Converted subpages. */ public function normalize_submenus_capability( $submenu_pages ) { foreach ( $submenu_pages as $index => $submenu_page ) { if ( $submenu_page[3] === 'manage_options' ) { $submenu_pages[ $index ][3] = 'wpseo_manage_options'; } } return $submenu_pages; } } metabox/class-abstract-sectioned-metabox-tab.php 0000644 00000004406 15150262017 0016001 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Base class for metabox that consist of multiple sections. */ abstract class WPSEO_Abstract_Metabox_Tab_With_Sections implements WPSEO_Metabox_Section { /** * Holds the name of the tab. * * @var string */ public $name; /** * Holds the HTML of the tab header. * * @var string */ protected $link_content; /** * Holds the name of the tab header. * * @var string */ protected $link_title; /** * Holds the classname of the tab header. * * @var string */ protected $link_class; /** * Holds the aria label of the tab header. * * @var string */ protected $link_aria_label; /** * Constructor. * * @param string $name The name of the section, used as an identifier in the html. * Can only contain URL safe characters. * @param string $link_content The text content of the section link. * @param array $options Optional link attributes. */ public function __construct( $name, $link_content, array $options = [] ) { $default_options = [ 'link_title' => '', 'link_class' => '', 'link_aria_label' => '', ]; $options = array_merge( $default_options, $options ); $this->name = $name; $this->link_content = $link_content; $this->link_title = $options['link_title']; $this->link_class = $options['link_class']; $this->link_aria_label = $options['link_aria_label']; } /** * Outputs the section link if any section has been added. * * @return void */ public function display_link() { if ( $this->has_sections() ) { printf( '<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>%5$s</a></li>', esc_attr( $this->name ), esc_attr( $this->link_class ), ( $this->link_title !== '' ) ? ' title="' . esc_attr( $this->link_title ) . '"' : '', ( $this->link_aria_label !== '' ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', $this->link_content ); } } /** * Checks whether the tab has any sections. * * @return bool Whether the tab has any sections */ abstract protected function has_sections(); } metabox/class-metabox-analysis-inclusive-language.php 0000644 00000003670 15150262017 0017064 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Metabox */ /** * Represents the inclusive language analysis. */ class WPSEO_Metabox_Analysis_Inclusive_Language implements WPSEO_Metabox_Analysis { /** * Whether this analysis is enabled. * * @return bool Whether or not this analysis is enabled. */ public function is_enabled() { return $this->is_globally_enabled() && $this->is_user_enabled() && $this->is_current_version_supported() && YoastSEO()->helpers->language->has_inclusive_language_support( WPSEO_Language_Utils::get_language( get_locale() ) ); } /** * Whether or not this analysis is enabled by the user. * * @return bool Whether or not this analysis is enabled by the user. */ public function is_user_enabled() { return ! get_the_author_meta( 'wpseo_inclusive_language_analysis_disable', get_current_user_id() ); } /** * Whether or not this analysis is enabled globally. * * @return bool Whether or not this analysis is enabled globally. */ public function is_globally_enabled() { return WPSEO_Options::get( 'inclusive_language_analysis_active', false ); } /** * Whether the inclusive language analysis should be loaded in Free. * * It should always be loaded when Premium is not active. If Premium is active, it depends on the version. Some Premium * versions also have inclusive language code (when it was still a Premium only feature) which would result in rendering * the analysis twice. In those cases, the analysis should be only loaded from the Premium side. * * @return bool Whether or not the inclusive language analysis should be loaded. */ private function is_current_version_supported() { $is_premium = YoastSEO()->helpers->product->is_premium(); $premium_version = YoastSEO()->helpers->product->get_premium_version(); return ! $is_premium || version_compare( $premium_version, '19.6-RC0', '>=' ) || version_compare( $premium_version, '19.2', '==' ); } } metabox/class-metabox-analysis-readability.php 0000644 00000001641 15150262017 0015567 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Metabox */ /** * Represents the readability analysis. */ class WPSEO_Metabox_Analysis_Readability implements WPSEO_Metabox_Analysis { /** * Whether this analysis is enabled. * * @return bool Whether or not this analysis is enabled. */ public function is_enabled() { return $this->is_globally_enabled() && $this->is_user_enabled(); } /** * Whether or not this analysis is enabled by the user. * * @return bool Whether or not this analysis is enabled by the user. */ public function is_user_enabled() { return ! get_the_author_meta( 'wpseo_content_analysis_disable', get_current_user_id() ); } /** * Whether or not this analysis is enabled globally. * * @return bool Whether or not this analysis is enabled globally. */ public function is_globally_enabled() { return WPSEO_Options::get( 'content_analysis_active', true ); } } metabox/class-metabox-analysis-seo.php 0000644 00000001621 15150262017 0014062 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Metabox */ /** * Represents the SEO analysis. */ class WPSEO_Metabox_Analysis_SEO implements WPSEO_Metabox_Analysis { /** * Whether this analysis is enabled. * * @return bool Whether or not this analysis is enabled. */ public function is_enabled() { return $this->is_globally_enabled() && $this->is_user_enabled(); } /** * Whether or not this analysis is enabled by the user. * * @return bool Whether or not this analysis is enabled by the user. */ public function is_user_enabled() { return ! get_the_author_meta( 'wpseo_keyword_analysis_disable', get_current_user_id() ); } /** * Whether or not this analysis is enabled globally. * * @return bool Whether or not this analysis is enabled globally. */ public function is_globally_enabled() { return WPSEO_Options::get( 'keyword_analysis_active', true ); } } metabox/class-metabox-collapsible.php 0000644 00000003021 15150262017 0013740 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates the HTML for a metabox tab. */ class WPSEO_Metabox_Collapsible implements WPSEO_Metabox_Tab { /** * The collapsible's unique identifier. * * @var string */ private $name; /** * The content to be displayed inside the collapsible. * * @var string */ private $content; /** * The label. * * @var string */ private $link_content; /** * Constructor. * * @param string $name The name of the tab, used as an identifier in the html. * @param string $content The tab content. * @param string $link_content The text content of the tab link. */ public function __construct( $name, $content, $link_content ) { $this->name = $name; $this->content = $content; $this->link_content = $link_content; } /** * Returns the html for the tab link. * * @return string */ public function link() { return $this->link_content; } /** * Returns the html for the tab content. * * @return string */ public function content() { $collapsible_paper = new WPSEO_Paper_Presenter( $this->link(), null, [ 'content' => $this->content, 'collapsible' => true, 'class' => 'metabox wpseo-form wpseo-collapsible-container', 'paper_id' => 'collapsible-' . $this->name, ] ); return $collapsible_paper->get_output(); } /** * Returns the collapsible's unique identifier. * * @return string */ public function get_name() { return $this->name; } } metabox/class-metabox-collapsibles-section.php 0000644 00000003745 15150262017 0015602 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates and displays a metabox tab that consists of collapsible sections. */ class WPSEO_Metabox_Collapsibles_Sections extends WPSEO_Abstract_Metabox_Tab_With_Sections { /** * Holds the tab's collapsibles. * * @var WPSEO_Metabox_Collapsible[] */ private $collapsibles = []; /** * Constructor. * * @param string $name The name of the section, used as an identifier in the html. * Can only contain URL safe characters. * @param string $link_content The text content of the section link. * @param array $collapsibles The metabox collapsibles (`WPSEO_Metabox_Collapsible[]`) to be included in the section. * @param array $options Optional link attributes. */ public function __construct( $name, $link_content, array $collapsibles = [], array $options = [] ) { parent::__construct( $name, $link_content, $options ); $this->collapsibles = $collapsibles; } /** * Outputs the section content if any tab has been added. * * @return void */ public function display_content() { if ( $this->has_sections() ) { printf( '<div id="%1$s" class="wpseo-meta-section">', esc_attr( 'wpseo-meta-section-' . $this->name ) ); echo '<div class="wpseo_content_wrapper">'; add_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_forms' ] ); add_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_a11y' ] ); foreach ( $this->collapsibles as $collapsible ) { echo wp_kses_post( $collapsible->content() ); } remove_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_forms' ] ); remove_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_a11y' ] ); echo '</div></div>'; } } /** * Checks whether the tab has any sections. * * @return bool Whether the tab has any sections */ protected function has_sections() { return ! empty( $this->collapsibles ); } } metabox/class-metabox-editor.php 0000644 00000004415 15150262017 0012745 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Metabox */ /** * Handles all things with the metabox in combination with the WordPress editor. */ class WPSEO_Metabox_Editor { /** * Registers hooks to WordPress. * * @codeCoverageIgnore * * @return void */ public function register_hooks() { // For the Classic editor. add_filter( 'mce_css', [ $this, 'add_css_inside_editor' ] ); // For the Block/Gutenberg editor. // See https://github.com/danielbachhuber/gutenberg-migration-guide/blob/master/filter-mce-css.md. add_action( 'enqueue_block_editor_assets', [ $this, 'add_editor_styles' ] ); add_filter( 'tiny_mce_before_init', [ $this, 'add_custom_element' ] ); } /** * Adds our inside the editor CSS file to the list of CSS files to be loaded inside the editor. * * @param string $css_files The CSS files that WordPress wants to load inside the editor. * @return string The CSS files WordPress wants to load and our CSS file. */ public function add_css_inside_editor( $css_files ) { $asset_manager = new WPSEO_Admin_Asset_Manager(); $styles = $asset_manager->special_styles(); $inside_editor = $styles['inside-editor']; $asset_location = new WPSEO_Admin_Asset_SEO_Location( WPSEO_FILE ); $url = $asset_location->get_url( $inside_editor, WPSEO_Admin_Asset::TYPE_CSS ); if ( $css_files === '' ) { $css_files = $url; } else { $css_files .= ',' . $url; } return $css_files; } /** * Enqueues the CSS to use in the TinyMCE editor. * * @return void */ public function add_editor_styles() { $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_style( 'inside-editor' ); } /** * Adds a custom element to the tinyMCE editor that we need for marking the content. * * @param array $tinymce_config The tinyMCE config as configured by WordPress. * * @return array The new tinyMCE config with our added custom elements. */ public function add_custom_element( $tinymce_config ) { if ( ! empty( $tinymce_config['custom_elements'] ) ) { $custom_elements = $tinymce_config['custom_elements']; $custom_elements .= ',~yoastmark'; } else { $custom_elements = '~yoastmark'; } $tinymce_config['custom_elements'] = $custom_elements; return $tinymce_config; } } metabox/class-metabox-form-tab.php 0000644 00000005440 15150262017 0013165 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates the HTML for a metabox tab. */ class WPSEO_Metabox_Form_Tab implements WPSEO_Metabox_Tab { /** * The tab identifier. * * @var string */ private $name; /** * The tab content. * * @var string */ private $content; /** * The tab link content. * * @var string */ private $link_content; /** * Additional tab content class. * * @var string */ private $tab_class; /** * Additional tab link class. * * @var string */ private $link_class; /** * Title attribute on the link span. * * @var string */ private $link_title; /** * Arial label attribute on the link span. * * @var string */ private $link_aria_label; /** * Does it contain a single tab. * * @var bool */ private $single; /** * Constructor. * * @param string $name The name of the tab, used as an identifier in the html. * @param string $content The tab content. * @param string $link_content The text content of the tab link. * @param array $options Optional link attributes. */ public function __construct( $name, $content, $link_content, array $options = [] ) { $default_options = [ 'tab_class' => '', 'link_class' => '', 'link_title' => '', 'link_aria_label' => '', 'single' => false, ]; $options = array_merge( $default_options, $options ); $this->name = $name; $this->content = $content; $this->link_content = $link_content; $this->tab_class = $options['tab_class']; $this->link_class = $options['link_class']; $this->link_title = $options['link_title']; $this->link_aria_label = $options['link_aria_label']; $this->single = $options['single']; } /** * Returns the html for the tab link. * * @return string */ public function link() { $html = '<li class="%1$s%2$s"><a class="wpseo_tablink%3$s" href="#wpseo_%1$s"%4$s%5$s>%6$s</a></li>'; if ( $this->single ) { $html = '<li class="%1$s%2$s"><span class="wpseo_tablink%3$s"%4$s%5$s>%6$s</span></li>'; } return sprintf( $html, esc_attr( $this->name ), ( $this->tab_class !== '' ) ? ' ' . esc_attr( $this->tab_class ) : '', ( $this->link_class !== '' ) ? ' ' . esc_attr( $this->link_class ) : '', ( $this->link_title !== '' ) ? ' title="' . esc_attr( $this->link_title ) . '"' : '', ( $this->link_aria_label !== '' ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', $this->link_content ); } /** * Returns the html for the tab content. * * @return string */ public function content() { return sprintf( '<div id="%1$s" class="wpseotab %2$s">%3$s</div>', esc_attr( 'wpseo_' . $this->name ), esc_attr( $this->name ), $this->content ); } } metabox/class-metabox-null-tab.php 0000644 00000000651 15150262017 0013173 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates the HTML for a metabox tab. */ class WPSEO_Metabox_Null_Tab implements WPSEO_Metabox_Tab { /** * Returns the html for the tab link. * * @return string|null */ public function link() { return null; } /** * Returns the html for the tab content. * * @return string|null */ public function content() { return null; } } metabox/class-metabox.php 0000644 00000123720 15150262017 0011462 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Actions\Alert_Dismissal_Action; use Yoast\WP\SEO\Conditionals\Third_Party\Jetpack_Boost_Active_Conditional; use Yoast\WP\SEO\Conditionals\Third_Party\Jetpack_Boost_Not_Premium_Conditional; use Yoast\WP\SEO\Conditionals\WooCommerce_Conditional; use Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository; use Yoast\WP\SEO\Presenters\Admin\Alert_Presenter; use Yoast\WP\SEO\Presenters\Admin\Meta_Fields_Presenter; use Yoast\WP\SEO\Promotions\Application\Promotion_Manager; /** * This class generates the metabox on the edit post / page as well as contains all page analysis functionality. */ class WPSEO_Metabox extends WPSEO_Meta { /** * Whether the social tab is enabled. * * @var bool */ private $social_is_enabled; /** * Helper to determine whether the SEO analysis is enabled. * * @var WPSEO_Metabox_Analysis_SEO */ protected $seo_analysis; /** * Helper to determine whether the readability analysis is enabled. * * @var WPSEO_Metabox_Analysis_Readability */ protected $readability_analysis; /** * Helper to determine whether the inclusive language analysis is enabled. * * @var WPSEO_Metabox_Analysis_Inclusive_Language */ protected $inclusive_language_analysis; /** * The metabox editor object. * * @var WPSEO_Metabox_Editor */ protected $editor; /** * The Metabox post. * * @var WP_Post */ protected $post = null; /** * Whether the advanced metadata is enabled. * * @var bool */ protected $is_advanced_metadata_enabled; /** * Class constructor. */ public function __construct() { if ( $this->is_internet_explorer() ) { add_action( 'add_meta_boxes', [ $this, 'internet_explorer_metabox' ] ); return; } add_action( 'add_meta_boxes', [ $this, 'add_meta_box' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); add_action( 'wp_insert_post', [ $this, 'save_postdata' ] ); add_action( 'edit_attachment', [ $this, 'save_postdata' ] ); add_action( 'add_attachment', [ $this, 'save_postdata' ] ); add_action( 'admin_init', [ $this, 'translate_meta_boxes' ] ); $this->editor = new WPSEO_Metabox_Editor(); $this->editor->register_hooks(); $this->social_is_enabled = WPSEO_Options::get( 'opengraph', false ) || WPSEO_Options::get( 'twitter', false ); $this->is_advanced_metadata_enabled = WPSEO_Capability_Utils::current_user_can( 'wpseo_edit_advanced_metadata' ) || WPSEO_Options::get( 'disableadvanced_meta' ) === false; $this->seo_analysis = new WPSEO_Metabox_Analysis_SEO(); $this->readability_analysis = new WPSEO_Metabox_Analysis_Readability(); $this->inclusive_language_analysis = new WPSEO_Metabox_Analysis_Inclusive_Language(); } /** * Checks whether the request comes from an IE 11 browser. * * @return bool Whether the request comes from an IE 11 browser. */ public static function is_internet_explorer() { if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; } $user_agent = sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); if ( stripos( $user_agent, 'Trident/7.0' ) === false ) { return false; } return true; } /** * Adds an alternative metabox for internet explorer users. * * @return void */ public function internet_explorer_metabox() { $post_types = WPSEO_Post_Type::get_accessible_post_types(); $post_types = array_filter( $post_types, [ $this, 'display_metabox' ] ); if ( ! is_array( $post_types ) || $post_types === [] ) { return; } $product_title = $this->get_product_title(); foreach ( $post_types as $post_type ) { add_filter( "postbox_classes_{$post_type}_wpseo_meta", [ $this, 'wpseo_metabox_class' ] ); add_meta_box( 'wpseo_meta', $product_title, [ $this, 'render_internet_explorer_notice' ], $post_type, 'normal', apply_filters( 'wpseo_metabox_prio', 'high' ), [ '__block_editor_compatible_meta_box' => true ] ); } } /** * Renders the content for the internet explorer metabox. * * @return void */ public function render_internet_explorer_notice() { $content = sprintf( /* translators: 1: Link start tag to the Firefox website, 2: Link start tag to the Chrome website, 3: Link start tag to the Edge website, 4: Link closing tag. */ esc_html__( 'The browser you are currently using is unfortunately rather dated. Since we strive to give you the best experience possible, we no longer support this browser. Instead, please use %1$sFirefox%4$s, %2$sChrome%4$s or %3$sMicrosoft Edge%4$s.', 'wordpress-seo' ), '<a href="https://www.mozilla.org/firefox/new/">', '<a href="https://www.google.com/chrome/">', '<a href="https://www.microsoft.com/windows/microsoft-edge">', '</a>' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped above. echo new Alert_Presenter( $content ); } /** * Translates text strings for use in the meta box. * * IMPORTANT: if you want to add a new string (option) somewhere, make sure you add that array key to * the main meta box definition array in the class WPSEO_Meta() as well!!!! * * @return void */ public static function translate_meta_boxes() { WPSEO_Meta::$meta_fields['general']['title']['title'] = __( 'SEO title', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['general']['metadesc']['title'] = __( 'Meta description', 'wordpress-seo' ); /* translators: %s expands to the post type name. */ WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['title'] = __( 'Allow search engines to show this %s in search results?', 'wordpress-seo' ); if ( (string) get_option( 'blog_public' ) === '0' ) { WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['description'] = '<span class="error-message">' . __( 'Warning: even though you can set the meta robots setting here, the entire site is set to noindex in the sitewide privacy settings, so these settings won\'t have an effect.', 'wordpress-seo' ) . '</span>'; } /* translators: %1$s expands to Yes or No, %2$s expands to the post type name.*/ WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['options']['0'] = __( 'Default for %2$s, currently: %1$s', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['options']['2'] = __( 'Yes', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['options']['1'] = __( 'No', 'wordpress-seo' ); /* translators: %1$s expands to the post type name.*/ WPSEO_Meta::$meta_fields['advanced']['meta-robots-nofollow']['title'] = __( 'Should search engines follow links on this %1$s?', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-nofollow']['options']['0'] = __( 'Yes', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-nofollow']['options']['1'] = __( 'No', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['title'] = __( 'Meta robots advanced', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['description'] = __( 'If you want to apply advanced <code>meta</code> robots settings for this page, please define them in the following field.', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['options']['noimageindex'] = __( 'No Image Index', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['options']['noarchive'] = __( 'No Archive', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['options']['nosnippet'] = __( 'No Snippet', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['bctitle']['title'] = __( 'Breadcrumbs Title', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['bctitle']['description'] = __( 'Title to use for this page in breadcrumb paths', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['canonical']['title'] = __( 'Canonical URL', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['canonical']['description'] = sprintf( /* translators: 1: link open tag; 2: link close tag. */ __( 'The canonical URL that this page should point to. Leave empty to default to permalink. %1$sCross domain canonical%2$s supported too.', 'wordpress-seo' ), '<a href="https://googlewebmastercentral.blogspot.com/2009/12/handling-legitimate-cross-domain.html" target="_blank" rel="noopener">', WPSEO_Admin_Utils::get_new_tab_message() . '</a>' ); /* translators: %s expands to the post type name. */ WPSEO_Meta::$meta_fields['advanced']['wordproof_timestamp']['title'] = __( 'Timestamp this %s', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['wordproof_timestamp']['description'] = __( 'Use WordProof to timestamp this page to comply with legal regulations and join the fight for a more transparant and accountable internet.', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['wordproof_timestamp']['options']['0'] = __( 'Off', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['wordproof_timestamp']['options']['1'] = __( 'On', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['wordproof_timestamp']['type'] = 'hidden'; WPSEO_Meta::$meta_fields['advanced']['redirect']['title'] = __( '301 Redirect', 'wordpress-seo' ); WPSEO_Meta::$meta_fields['advanced']['redirect']['description'] = __( 'The URL that this page should redirect to.', 'wordpress-seo' ); do_action( 'wpseo_tab_translate' ); } /** * Determines whether the metabox should be shown for the passed identifier. * * By default the check is done for post types, but can also be used for taxonomies. * * @param string|null $identifier The identifier to check. * @param string $type The type of object to check. Defaults to post_type. * * @return bool Whether or not the metabox should be displayed. */ public function display_metabox( $identifier = null, $type = 'post_type' ) { return WPSEO_Utils::is_metabox_active( $identifier, $type ); } /** * Adds the Yoast SEO meta box to the edit boxes in the edit post, page, * attachment, and custom post types pages. * * @return void */ public function add_meta_box() { $post_types = WPSEO_Post_Type::get_accessible_post_types(); $post_types = array_filter( $post_types, [ $this, 'display_metabox' ] ); if ( ! is_array( $post_types ) || $post_types === [] ) { return; } $product_title = $this->get_product_title(); foreach ( $post_types as $post_type ) { add_filter( "postbox_classes_{$post_type}_wpseo_meta", [ $this, 'wpseo_metabox_class' ] ); add_meta_box( 'wpseo_meta', $product_title, [ $this, 'meta_box' ], $post_type, 'normal', apply_filters( 'wpseo_metabox_prio', 'high' ), [ '__block_editor_compatible_meta_box' => true ] ); } } /** * Adds CSS classes to the meta box. * * @param array $classes An array of postbox CSS classes. * * @return array List of classes that will be applied to the editbox container. */ public function wpseo_metabox_class( $classes ) { $classes[] = 'yoast wpseo-metabox'; return $classes; } /** * Passes variables to js for use with the post-scraper. * * @return array */ public function get_metabox_script_data() { $permalink = ''; if ( is_object( $this->get_metabox_post() ) ) { $permalink = get_sample_permalink( $this->get_metabox_post()->ID ); $permalink = $permalink[0]; } $post_formatter = new WPSEO_Metabox_Formatter( new WPSEO_Post_Metabox_Formatter( $this->get_metabox_post(), [], $permalink ) ); $values = $post_formatter->get_values(); /** This filter is documented in admin/filters/class-cornerstone-filter.php. */ $post_types = apply_filters( 'wpseo_cornerstone_post_types', WPSEO_Post_Type::get_accessible_post_types() ); if ( $values['cornerstoneActive'] && ! in_array( $this->get_metabox_post()->post_type, $post_types, true ) ) { $values['cornerstoneActive'] = false; } if ( $values['semrushIntegrationActive'] && $this->post->post_type === 'attachment' ) { $values['semrushIntegrationActive'] = 0; } if ( $values['wincherIntegrationActive'] && $this->post->post_type === 'attachment' ) { $values['wincherIntegrationActive'] = 0; } return $values; } /** * Determines whether or not the current post type has registered taxonomies. * * @return bool Whether the current post type has taxonomies. */ private function current_post_type_has_taxonomies() { $post_taxonomies = get_object_taxonomies( get_post_type() ); return ! empty( $post_taxonomies ); } /** * Determines the scope based on the post type. * This can be used by the replacevar plugin to determine if a replacement needs to be executed. * * @return string String describing the current scope. */ private function determine_scope() { if ( $this->get_metabox_post()->post_type === 'page' ) { return 'page'; } return 'post'; } /** * Outputs the meta box. * * @return void */ public function meta_box() { $this->render_hidden_fields(); $this->render_tabs(); } /** * Renders the metabox hidden fields. * * @return void */ protected function render_hidden_fields() { wp_nonce_field( 'yoast_free_metabox', 'yoast_free_metabox_nonce' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in class. echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'general' ); if ( $this->is_advanced_metadata_enabled ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in class. echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'advanced' ); } // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in class. echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'schema', $this->get_metabox_post()->post_type ); if ( $this->social_is_enabled ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in class. echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'social' ); } /** * Filter: 'wpseo_content_meta_section_content' - Allow filtering the metabox content before outputting. * * @param string $post_content The metabox content string. */ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output should be escaped in the filter. echo apply_filters( 'wpseo_content_meta_section_content', '' ); } /** * Renders the metabox tabs. * * @return void */ protected function render_tabs() { echo '<div class="wpseo-metabox-content">'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $this->get_product_title() returns a hard-coded string. printf( '<div class="wpseo-metabox-menu"><ul role="tablist" class="yoast-aria-tabs" aria-label="%s">', $this->get_product_title() ); $tabs = $this->get_tabs(); foreach ( $tabs as $tab ) { if ( $tab->name === 'premium' ) { continue; } $tab->display_link(); } echo '</ul></div>'; foreach ( $tabs as $tab ) { $tab->display_content(); } echo '</div>'; } /** * Returns the relevant metabox tabs for the current view. * * @return WPSEO_Metabox_Section[] */ private function get_tabs() { $tabs = []; $label = __( 'SEO', 'wordpress-seo' ); if ( $this->seo_analysis->is_enabled() ) { $label = '<span class="wpseo-score-icon-container" id="wpseo-seo-score-icon"></span>' . $label; } $tabs[] = new WPSEO_Metabox_Section_React( 'content', $label ); if ( $this->readability_analysis->is_enabled() ) { $tabs[] = new WPSEO_Metabox_Section_Readability(); } if ( $this->inclusive_language_analysis->is_enabled() ) { $tabs[] = new WPSEO_Metabox_Section_Inclusive_Language(); } if ( $this->is_advanced_metadata_enabled ) { $tabs[] = new WPSEO_Metabox_Section_React( 'schema', '<span class="wpseo-schema-icon"></span>' . __( 'Schema', 'wordpress-seo' ), '' ); } if ( $this->social_is_enabled ) { $tabs[] = new WPSEO_Metabox_Section_React( 'social', '<span class="dashicons dashicons-share"></span>' . __( 'Social', 'wordpress-seo' ), '', [ 'html_after' => '<div id="wpseo-section-social"></div>', ] ); } $tabs = array_merge( $tabs, $this->get_additional_tabs() ); return $tabs; } /** * Returns the metabox tabs that have been added by other plugins. * * @return WPSEO_Metabox_Section_Additional[] */ protected function get_additional_tabs() { $tabs = []; /** * Private filter: 'yoast_free_additional_metabox_sections'. * * Meant for internal use only. Allows adding additional tabs to the Yoast SEO metabox. * * @since 11.9 * * @param array[] $tabs { * An array of arrays with tab specifications. * * @type array $tab { * A tab specification. * * @type string $name The name of the tab. Used in the HTML IDs, href and aria properties. * @type string $link_content The content of the tab link. * @type string $content The content of the tab. * @type array $options { * Optional. Extra options. * * @type string $link_class Optional. The class for the tab link. * @type string $link_aria_label Optional. The aria label of the tab link. * } * } * } */ $requested_tabs = apply_filters( 'yoast_free_additional_metabox_sections', [] ); foreach ( $requested_tabs as $tab ) { if ( is_array( $tab ) && array_key_exists( 'name', $tab ) && array_key_exists( 'link_content', $tab ) && array_key_exists( 'content', $tab ) ) { $options = array_key_exists( 'options', $tab ) ? $tab['options'] : []; $tabs[] = new WPSEO_Metabox_Section_Additional( $tab['name'], $tab['link_content'], $tab['content'], $options ); } } return $tabs; } /** * Adds a line in the meta box. * * @todo [JRF] Check if $class is added appropriately everywhere. * * @param array $meta_field_def Contains the vars based on which output is generated. * @param string $key Internal key (without prefix). * * @return string */ public function do_meta_box( $meta_field_def, $key = '' ) { $content = ''; $esc_form_key = esc_attr( WPSEO_Meta::$form_prefix . $key ); $meta_value = WPSEO_Meta::get_value( $key, $this->get_metabox_post()->ID ); $class = ''; if ( isset( $meta_field_def['class'] ) && $meta_field_def['class'] !== '' ) { $class = ' ' . $meta_field_def['class']; } $placeholder = ''; if ( isset( $meta_field_def['placeholder'] ) && $meta_field_def['placeholder'] !== '' ) { $placeholder = $meta_field_def['placeholder']; } $aria_describedby = ''; $description = ''; if ( isset( $meta_field_def['description'] ) ) { $aria_describedby = ' aria-describedby="' . $esc_form_key . '-desc"'; $description = '<p id="' . $esc_form_key . '-desc" class="yoast-metabox__description">' . $meta_field_def['description'] . '</p>'; } // Add a hide_on_pages option that returns nothing when the field is rendered on a page. if ( isset( $meta_field_def['hide_on_pages'] ) && $meta_field_def['hide_on_pages'] && get_post_type() === 'page' ) { return ''; } switch ( $meta_field_def['type'] ) { case 'text': $ac = ''; if ( isset( $meta_field_def['autocomplete'] ) && $meta_field_def['autocomplete'] === false ) { $ac = 'autocomplete="off" '; } if ( $placeholder !== '' ) { $placeholder = ' placeholder="' . esc_attr( $placeholder ) . '"'; } $content .= '<input type="text"' . $placeholder . ' id="' . $esc_form_key . '" ' . $ac . 'name="' . $esc_form_key . '" value="' . esc_attr( $meta_value ) . '" class="large-text' . $class . '"' . $aria_describedby . '/>'; break; case 'url': if ( $placeholder !== '' ) { $placeholder = ' placeholder="' . esc_attr( $placeholder ) . '"'; } $content .= '<input type="url"' . $placeholder . ' id="' . $esc_form_key . '" name="' . $esc_form_key . '" value="' . esc_attr( urldecode( $meta_value ) ) . '" class="large-text' . $class . '"' . $aria_describedby . '/>'; break; case 'textarea': $rows = 3; if ( isset( $meta_field_def['rows'] ) && $meta_field_def['rows'] > 0 ) { $rows = $meta_field_def['rows']; } $content .= '<textarea class="large-text' . $class . '" rows="' . esc_attr( $rows ) . '" id="' . $esc_form_key . '" name="' . $esc_form_key . '"' . $aria_describedby . '>' . esc_textarea( $meta_value ) . '</textarea>'; break; case 'hidden': $default = ''; if ( isset( $meta_field_def['default'] ) ) { $default = sprintf( ' data-default="%s"', esc_attr( $meta_field_def['default'] ) ); } $content .= '<input type="hidden" id="' . $esc_form_key . '" name="' . $esc_form_key . '" value="' . esc_attr( $meta_value ) . '"' . $default . '/>' . "\n"; break; case 'select': if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== [] ) { $content .= '<select name="' . $esc_form_key . '" id="' . $esc_form_key . '" class="yoast' . $class . '">'; foreach ( $meta_field_def['options'] as $val => $option ) { $selected = selected( $meta_value, $val, false ); $content .= '<option ' . $selected . ' value="' . esc_attr( $val ) . '">' . esc_html( $option ) . '</option>'; } unset( $val, $option, $selected ); $content .= '</select>'; } break; case 'multiselect': if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== [] ) { // Set $meta_value as $selected_arr. $selected_arr = $meta_value; // If the multiselect field is 'meta-robots-adv' we should explode on ,. if ( $key === 'meta-robots-adv' ) { $selected_arr = explode( ',', $meta_value ); } if ( ! is_array( $selected_arr ) ) { $selected_arr = (array) $selected_arr; } $options_count = count( $meta_field_def['options'] ); $content .= '<select multiple="multiple" size="' . esc_attr( $options_count ) . '" name="' . $esc_form_key . '[]" id="' . $esc_form_key . '" class="yoast' . $class . '"' . $aria_describedby . '>'; foreach ( $meta_field_def['options'] as $val => $option ) { $selected = ''; if ( in_array( $val, $selected_arr, true ) ) { $selected = ' selected="selected"'; } $content .= '<option ' . $selected . ' value="' . esc_attr( $val ) . '">' . esc_html( $option ) . '</option>'; } $content .= '</select>'; unset( $val, $option, $selected, $selected_arr, $options_count ); } break; case 'checkbox': $checked = checked( $meta_value, 'on', false ); $expl = ( isset( $meta_field_def['expl'] ) ) ? esc_html( $meta_field_def['expl'] ) : ''; $content .= '<input type="checkbox" id="' . $esc_form_key . '" name="' . $esc_form_key . '" ' . $checked . ' value="on" class="yoast' . $class . '"' . $aria_describedby . '/> <label for="' . $esc_form_key . '">' . $expl . '</label>'; unset( $checked, $expl ); break; case 'radio': if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== [] ) { foreach ( $meta_field_def['options'] as $val => $option ) { $checked = checked( $meta_value, $val, false ); $content .= '<input type="radio" ' . $checked . ' id="' . $esc_form_key . '_' . esc_attr( $val ) . '" name="' . $esc_form_key . '" value="' . esc_attr( $val ) . '"/> <label for="' . $esc_form_key . '_' . esc_attr( $val ) . '">' . esc_html( $option ) . '</label> '; } unset( $val, $option, $checked ); } break; case 'upload': $content .= '<input' . ' id="' . $esc_form_key . '"' . ' type="text"' . ' size="36"' . ' class="' . $class . '"' . ' name="' . $esc_form_key . '"' . ' value="' . esc_attr( $meta_value ) . '"' . $aria_describedby . ' readonly="readonly"' . ' /> '; $content .= '<input' . ' id="' . esc_attr( $esc_form_key ) . '_button"' . ' class="wpseo_image_upload_button button"' . ' data-target="' . esc_attr( $esc_form_key ) . '"' . ' data-target-id="' . esc_attr( $esc_form_key ) . '-id"' . ' type="button"' . ' value="' . esc_attr__( 'Upload Image', 'wordpress-seo' ) . '"' . ' /> '; $content .= '<input' . ' class="wpseo_image_remove_button button"' . ' type="button"' . ' value="' . esc_attr__( 'Clear Image', 'wordpress-seo' ) . '"' . ' />'; break; } $html = ''; if ( $content === '' ) { $content = apply_filters( 'wpseo_do_meta_box_field_' . $key, $content, $meta_value, $esc_form_key, $meta_field_def, $key ); } if ( $content !== '' ) { $title = esc_html( $meta_field_def['title'] ); // By default, use the field title as a label element. $label = '<label for="' . $esc_form_key . '">' . $title . '</label>'; // Set the inline help and help panel, if any. $help_button = ''; $help_panel = ''; if ( isset( $meta_field_def['help'] ) && $meta_field_def['help'] !== '' ) { $help = new WPSEO_Admin_Help_Panel( $key, $meta_field_def['help-button'], $meta_field_def['help'] ); $help_button = $help->get_button_html(); $help_panel = $help->get_panel_html(); } // If it's a set of radio buttons, output proper fieldset and legend. if ( $meta_field_def['type'] === 'radio' ) { return '<fieldset><legend>' . $title . '</legend>' . $help_button . $help_panel . $content . $description . '</fieldset>'; } // If it's a single checkbox, ignore the title. if ( $meta_field_def['type'] === 'checkbox' ) { $label = ''; } // Other meta box content or form fields. if ( $meta_field_def['type'] === 'hidden' ) { $html = $content; } else { $html = $label . $description . $help_button . $help_panel . $content; } } return $html; } /** * Saves the WP SEO metadata for posts. * * {@internal $_POST parameters are validated via sanitize_post_meta().}} * * @param int $post_id Post ID. * * @return bool|void Boolean false if invalid save post request. */ public function save_postdata( $post_id ) { // Bail if this is a multisite installation and the site has been switched. if ( is_multisite() && ms_is_switched() ) { return false; } if ( $post_id === null ) { return false; } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized in wp_verify_none. if ( ! isset( $_POST['yoast_free_metabox_nonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['yoast_free_metabox_nonce'] ), 'yoast_free_metabox' ) ) { return false; } if ( wp_is_post_revision( $post_id ) ) { $post_id = wp_is_post_revision( $post_id ); } /** * Determine we're not accidentally updating a different post. * We can't use filter_input here as the ID isn't available at this point, other than in the $_POST data. */ if ( ! isset( $_POST['ID'] ) || $post_id !== (int) $_POST['ID'] ) { return false; } clean_post_cache( $post_id ); $post = get_post( $post_id ); if ( ! is_object( $post ) ) { // Non-existent post. return false; } do_action( 'wpseo_save_compare_data', $post ); $social_fields = []; if ( $this->social_is_enabled ) { $social_fields = WPSEO_Meta::get_meta_field_defs( 'social' ); } $meta_boxes = apply_filters( 'wpseo_save_metaboxes', [] ); $meta_boxes = array_merge( $meta_boxes, WPSEO_Meta::get_meta_field_defs( 'general', $post->post_type ), WPSEO_Meta::get_meta_field_defs( 'advanced' ), $social_fields, WPSEO_Meta::get_meta_field_defs( 'schema', $post->post_type ) ); foreach ( $meta_boxes as $key => $meta_box ) { // If analysis is disabled remove that analysis score value from the DB. if ( $this->is_meta_value_disabled( $key ) ) { WPSEO_Meta::delete( $key, $post_id ); continue; } $data = null; $field_name = WPSEO_Meta::$form_prefix . $key; if ( $meta_box['type'] === 'checkbox' ) { $data = isset( $_POST[ $field_name ] ) ? 'on' : 'off'; } else { if ( isset( $_POST[ $field_name ] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We're preparing to do just that. $data = wp_unslash( $_POST[ $field_name ] ); // For multi-select. if ( is_array( $data ) ) { $data = array_map( [ 'WPSEO_Utils', 'sanitize_text_field' ], $data ); } if ( is_string( $data ) ) { $data = ( $key !== 'canonical' ) ? WPSEO_Utils::sanitize_text_field( $data ) : WPSEO_Utils::sanitize_url( $data ); } } // Reset options when no entry is present with multiselect - only applies to `meta-robots-adv` currently. if ( ! isset( $_POST[ $field_name ] ) && ( $meta_box['type'] === 'multiselect' ) ) { $data = []; } } if ( $data !== null ) { WPSEO_Meta::set_value( $key, $data, $post_id ); } } do_action( 'wpseo_saved_postdata' ); } /** * Determines if the given meta value key is disabled. * * @param string $key The key of the meta value. * * @return bool Whether the given meta value key is disabled. */ public function is_meta_value_disabled( $key ) { if ( $key === 'linkdex' && ! $this->seo_analysis->is_enabled() ) { return true; } if ( $key === 'content_score' && ! $this->readability_analysis->is_enabled() ) { return true; } if ( $key === 'inclusive_language_score' && ! $this->inclusive_language_analysis->is_enabled() ) { return true; } return false; } /** * Enqueues all the needed JS and CSS. * * @todo [JRF => whomever] Create css/metabox-mp6.css file and add it to the below allowed colors array when done. * * @return void */ public function enqueue() { global $pagenow; $asset_manager = new WPSEO_Admin_Asset_Manager(); $is_editor = self::is_post_overview( $pagenow ) || self::is_post_edit( $pagenow ); if ( self::is_post_overview( $pagenow ) ) { $asset_manager->enqueue_style( 'edit-page' ); $asset_manager->enqueue_script( 'edit-page' ); return; } /* Filter 'wpseo_always_register_metaboxes_on_admin' documented in wpseo-main.php */ if ( ( $is_editor === false && apply_filters( 'wpseo_always_register_metaboxes_on_admin', false ) === false ) || $this->display_metabox() === false ) { return; } $post_id = get_queried_object_id(); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( empty( $post_id ) && isset( $_GET['post'] ) && is_string( $_GET['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $post_id = sanitize_text_field( wp_unslash( $_GET['post'] ) ); } if ( $post_id !== 0 ) { // Enqueue files needed for upload functionality. wp_enqueue_media( [ 'post' => $post_id ] ); } $asset_manager->enqueue_style( 'metabox-css' ); $asset_manager->enqueue_style( 'scoring' ); $asset_manager->enqueue_style( 'monorepo' ); $asset_manager->enqueue_style( 'ai-generator' ); $is_block_editor = WP_Screen::get()->is_block_editor(); $post_edit_handle = 'post-edit'; if ( ! $is_block_editor ) { $post_edit_handle = 'post-edit-classic'; } $asset_manager->enqueue_script( $post_edit_handle ); $asset_manager->enqueue_style( 'admin-css' ); /** * Removes the emoji script as it is incompatible with both React and any * contenteditable fields. */ remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); $asset_manager->localize_script( $post_edit_handle, 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() ); $plugins_script_data = [ 'replaceVars' => [ 'no_parent_text' => __( '(no parent)', 'wordpress-seo' ), 'replace_vars' => $this->get_replace_vars(), 'hidden_replace_vars' => $this->get_hidden_replace_vars(), 'recommended_replace_vars' => $this->get_recommended_replace_vars(), 'scope' => $this->determine_scope(), 'has_taxonomies' => $this->current_post_type_has_taxonomies(), ], 'shortcodes' => [ 'wpseo_shortcode_tags' => $this->get_valid_shortcode_tags(), 'wpseo_filter_shortcodes_nonce' => wp_create_nonce( 'wpseo-filter-shortcodes' ), ], ]; $worker_script_data = [ 'url' => YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-analysis-worker' ), 'dependencies' => YoastSEO()->helpers->asset->get_dependency_urls_by_handle( 'yoast-seo-analysis-worker' ), 'keywords_assessment_url' => YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-used-keywords-assessment' ), 'log_level' => WPSEO_Utils::get_analysis_worker_log_level(), ]; $alert_dismissal_action = YoastSEO()->classes->get( Alert_Dismissal_Action::class ); $dismissed_alerts = $alert_dismissal_action->all_dismissed(); $woocommerce_conditional = new WooCommerce_Conditional(); $woocommerce_active = $woocommerce_conditional->is_met(); $wpseo_plugin_availability_checker = new WPSEO_Plugin_Availability(); $woocommerce_seo_file = 'wpseo-woocommerce/wpseo-woocommerce.php'; $woocommerce_seo_active = $wpseo_plugin_availability_checker->is_active( $woocommerce_seo_file ); $script_data = [ // @todo replace this translation with JavaScript translations. 'media' => [ 'choose_image' => __( 'Use Image', 'wordpress-seo' ) ], 'metabox' => $this->get_metabox_script_data(), 'userLanguageCode' => WPSEO_Language_Utils::get_language( get_user_locale() ), 'isPost' => true, 'isBlockEditor' => $is_block_editor, 'postId' => $post_id, 'postStatus' => get_post_status( $post_id ), 'postType' => get_post_type( $post_id ), 'usedKeywordsNonce' => wp_create_nonce( 'wpseo-keyword-usage-and-post-types' ), 'analysis' => [ 'plugins' => $plugins_script_data, 'worker' => $worker_script_data, ], 'dismissedAlerts' => $dismissed_alerts, 'currentPromotions' => YoastSEO()->classes->get( Promotion_Manager::class )->get_current_promotions(), 'webinarIntroBlockEditorUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/webinar-intro-block-editor' ), 'blackFridayBlockEditorUrl' => ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-checklist' ) ) ? WPSEO_Shortlinker::get( 'https://yoa.st/black-friday-checklist' ) : '', 'isJetpackBoostActive' => ( $is_block_editor ) ? YoastSEO()->classes->get( Jetpack_Boost_Active_Conditional::class )->is_met() : false, 'isJetpackBoostNotPremium' => ( $is_block_editor ) ? YoastSEO()->classes->get( Jetpack_Boost_Not_Premium_Conditional::class )->is_met() : false, 'isWooCommerceSeoActive' => $woocommerce_seo_active, 'isWooCommerceActive' => $woocommerce_active, 'woocommerceUpsell' => get_post_type( $post_id ) === 'product' && ! $woocommerce_seo_active && $woocommerce_active, 'linkParams' => WPSEO_Shortlinker::get_query_params(), 'pluginUrl' => plugins_url( '', WPSEO_FILE ), 'wistiaEmbedPermission' => YoastSEO()->classes->get( Wistia_Embed_Permission_Repository::class )->get_value_for_user( get_current_user_id() ), ]; if ( post_type_supports( get_post_type(), 'thumbnail' ) ) { $asset_manager->enqueue_style( 'featured-image' ); // @todo replace this translation with JavaScript translations. $script_data['featuredImage'] = [ 'featured_image_notice' => __( 'SEO issue: The featured image should be at least 200 by 200 pixels to be picked up by Facebook and other social media sites.', 'wordpress-seo' ), ]; } $asset_manager->localize_script( $post_edit_handle, 'wpseoScriptData', $script_data ); $asset_manager->enqueue_user_language_script(); } /** * Returns post in metabox context. * * @return WP_Post|array */ protected function get_metabox_post() { if ( $this->post !== null ) { return $this->post; } // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['post'] ) && is_string( $_GET['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, Sanitization happens in the validate_int function. $post_id = (int) WPSEO_Utils::validate_int( wp_unslash( $_GET['post'] ) ); $this->post = get_post( $post_id ); return $this->post; } if ( isset( $GLOBALS['post'] ) ) { $this->post = $GLOBALS['post']; return $this->post; } return []; } /** * Returns an array with shortcode tags for all registered shortcodes. * * @return array */ private function get_valid_shortcode_tags() { $shortcode_tags = []; foreach ( $GLOBALS['shortcode_tags'] as $tag => $description ) { $shortcode_tags[] = $tag; } return $shortcode_tags; } /** * Prepares the replace vars for localization. * * @return array Replace vars. */ private function get_replace_vars() { $cached_replacement_vars = []; $vars_to_cache = [ 'date', 'id', 'sitename', 'sitedesc', 'sep', 'page', 'currentdate', 'currentyear', 'currentmonth', 'currentday', 'post_year', 'post_month', 'post_day', 'name', 'author_first_name', 'author_last_name', 'permalink', 'post_content', 'category_title', 'tag', 'category', ]; foreach ( $vars_to_cache as $var ) { $cached_replacement_vars[ $var ] = wpseo_replace_vars( '%%' . $var . '%%', $this->get_metabox_post() ); } // Merge custom replace variables with the WordPress ones. return array_merge( $cached_replacement_vars, $this->get_custom_replace_vars( $this->get_metabox_post() ) ); } /** * Returns the list of replace vars that should be hidden inside the editor. * * @return string[] The hidden replace vars. */ protected function get_hidden_replace_vars() { return ( new WPSEO_Replace_Vars() )->get_hidden_replace_vars(); } /** * Prepares the recommended replace vars for localization. * * @return array Recommended replacement variables. */ private function get_recommended_replace_vars() { $recommended_replace_vars = new WPSEO_Admin_Recommended_Replace_Vars(); // What is recommended depends on the current context. $post_type = $recommended_replace_vars->determine_for_post( $this->get_metabox_post() ); return $recommended_replace_vars->get_recommended_replacevars_for( $post_type ); } /** * Gets the custom replace variables for custom taxonomies and fields. * * @param WP_Post $post The post to check for custom taxonomies and fields. * * @return array Array containing all the replacement variables. */ private function get_custom_replace_vars( $post ) { return [ 'custom_fields' => $this->get_custom_fields_replace_vars( $post ), 'custom_taxonomies' => $this->get_custom_taxonomies_replace_vars( $post ), ]; } /** * Gets the custom replace variables for custom taxonomies. * * @param WP_Post $post The post to check for custom taxonomies. * * @return array Array containing all the replacement variables. */ private function get_custom_taxonomies_replace_vars( $post ) { $taxonomies = get_object_taxonomies( $post, 'objects' ); $custom_replace_vars = []; foreach ( $taxonomies as $taxonomy_name => $taxonomy ) { if ( is_string( $taxonomy ) ) { // If attachment, see https://core.trac.wordpress.org/ticket/37368 . $taxonomy_name = $taxonomy; $taxonomy = get_taxonomy( $taxonomy_name ); } if ( $taxonomy->_builtin && $taxonomy->public ) { continue; } $custom_replace_vars[ $taxonomy_name ] = [ 'name' => $taxonomy->name, 'description' => $taxonomy->description, ]; } return $custom_replace_vars; } /** * Gets the custom replace variables for custom fields. * * @param WP_Post $post The post to check for custom fields. * * @return array Array containing all the replacement variables. */ private function get_custom_fields_replace_vars( $post ) { $custom_replace_vars = []; // If no post object is passed, return the empty custom_replace_vars array. if ( ! is_object( $post ) ) { return $custom_replace_vars; } $custom_fields = get_post_custom( $post->ID ); // If $custom_fields is an empty string or generally not an array, return early. if ( ! is_array( $custom_fields ) ) { return $custom_replace_vars; } $meta = YoastSEO()->meta->for_post( $post->ID ); if ( ! $meta ) { return $custom_replace_vars; } // Simply concatenate all fields containing replace vars so we can handle them all with a single regex find. $replace_vars_fields = implode( ' ', [ $meta->presentation->title, $meta->presentation->meta_description, ] ); preg_match_all( '/%%cf_([A-Za-z0-9_]+)%%/', $replace_vars_fields, $matches ); $fields_to_include = $matches[1]; foreach ( $custom_fields as $custom_field_name => $custom_field ) { // Skip private custom fields. if ( substr( $custom_field_name, 0, 1 ) === '_' ) { continue; } // Skip custom fields that are not used, new ones will be fetched dynamically. if ( ! in_array( $custom_field_name, $fields_to_include, true ) ) { continue; } // Skip custom field values that are serialized. if ( is_serialized( $custom_field[0] ) ) { continue; } $custom_replace_vars[ $custom_field_name ] = $custom_field[0]; } return $custom_replace_vars; } /** * Checks if the page is the post overview page. * * @param string $page The page to check for the post overview page. * * @return bool Whether or not the given page is the post overview page. */ public static function is_post_overview( $page ) { return $page === 'edit.php'; } /** * Checks if the page is the post edit page. * * @param string $page The page to check for the post edit page. * * @return bool Whether or not the given page is the post edit page. */ public static function is_post_edit( $page ) { return $page === 'post.php' || $page === 'post-new.php'; } /** * Retrieves the product title. * * @return string The product title. */ protected function get_product_title() { return YoastSEO()->helpers->product->get_product_name(); } } metabox/class-metabox-section-additional.php 0000644 00000005107 15150262017 0015230 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Metabox */ /** * Generates and displays an additional metabox section. */ class WPSEO_Metabox_Section_Additional implements WPSEO_Metabox_Section { /** * Name of the section, used as an identifier in the HTML. * * @var string */ public $name; /** * Content of the tab's section. * * @var string */ public $content; /** * HTML to use in the tab header. * * @var string */ private $link_content; /** * Class to add to the link. * * @var string */ private $link_class; /** * Aria label to use for the link. * * @var string */ private $link_aria_label; /** * Represents the content class. * * @var string */ private $content_class; /** * Constructor. * * @param string $name The name of the section, used as an identifier in the html. * Can only contain URL safe characters. * @param string $link_content The text content of the section link. * @param string $content Optional. Content to use above the React root element. * @param array $options Optional link attributes. */ public function __construct( $name, $link_content, $content = '', array $options = [] ) { $this->name = $name; $this->content = $content; $default_options = [ 'link_class' => '', 'link_aria_label' => '', 'content_class' => 'wpseo-form', ]; $options = wp_parse_args( $options, $default_options ); $this->link_content = $link_content; $this->link_class = $options['link_class']; $this->link_aria_label = $options['link_aria_label']; $this->content_class = $options['content_class']; } /** * Outputs the section link. * * @return void */ public function display_link() { printf( '<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>', esc_attr( $this->name ), esc_attr( $this->link_class ), ( $this->link_aria_label !== '' ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', $this->link_content ); } /** * Outputs the section content. * * @return void */ public function display_content() { $html = sprintf( '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section %2$s">', esc_attr( $this->name ), esc_attr( $this->content_class ) ); $html .= $this->content; $html .= '</div>'; echo $html; } } metabox/class-metabox-section-inclusive-language.php 0000644 00000002316 15150262017 0016701 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates and displays the React root element for a metabox section. */ class WPSEO_Metabox_Section_Inclusive_Language implements WPSEO_Metabox_Section { /** * Name of the section, used as an identifier in the HTML. * * @var string */ public $name = 'inclusive-language'; /** * Outputs the section link. * * @return void */ public function display_link() { printf( '<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"> <div class="wpseo-score-icon-container" id="wpseo-inclusive-language-score-icon"></div><span>%2$s</span></a></li>', esc_attr( $this->name ), esc_html__( 'Inclusive language', 'wordpress-seo' ) ); } /** * Outputs the section content. * * @return void */ public function display_content() { printf( '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section">', esc_attr( $this->name ) ); echo '<div id="wpseo-metabox-inclusive-language-root" class="wpseo-metabox-root"></div>', '</div>'; } } metabox/class-metabox-section-react.php 0000644 00000006034 15150262017 0014216 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates and displays the React root element for a metabox section. */ class WPSEO_Metabox_Section_React implements WPSEO_Metabox_Section { /** * Name of the section, used as an identifier in the HTML. * * @var string */ public $name; /** * Content to use before the React root node. * * @var string */ public $content; /** * Content to use to display the button to open this content block. * * @var string */ private $link_content; /** * Class to add to the link. * * @var string */ private $link_class; /** * Aria label to use for the link. * * @var string */ private $link_aria_label; /** * Additional html content to be displayed within the section. * * @var string */ private $html_after; /** * Constructor. * * @param string $name The name of the section, used as an identifier in the html. * Can only contain URL safe characters. * @param string $link_content The text content of the section link. * @param string $content Optional. Content to use above the React root element. * @param array $options Optional link attributes. */ public function __construct( $name, $link_content, $content = '', array $options = [] ) { $this->name = $name; $this->content = $content; $default_options = [ 'link_class' => '', 'link_aria_label' => '', 'html_after' => '', ]; $options = wp_parse_args( $options, $default_options ); $this->link_content = $link_content; $this->link_class = $options['link_class']; $this->link_aria_label = $options['link_aria_label']; $this->html_after = $options['html_after']; } /** * Outputs the section link. * * @return void */ public function display_link() { printf( '<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>', esc_attr( $this->name ), esc_attr( $this->link_class ), ( $this->link_aria_label !== '' ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', wp_kses_post( $this->link_content ) ); } /** * Outputs the section content. * * @return void */ public function display_content() { add_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_forms' ] ); add_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_a11y' ] ); printf( '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section">', esc_attr( $this->name ) ); echo wp_kses_post( $this->content ); echo '<div id="wpseo-metabox-root" class="wpseo-metabox-root"></div>'; echo wp_kses_post( $this->html_after ); echo '</div>'; remove_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_forms' ] ); remove_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_a11y' ] ); } } metabox/class-metabox-section-readability.php 0000644 00000002253 15150262017 0015410 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates and displays the React root element for a metabox section. */ class WPSEO_Metabox_Section_Readability implements WPSEO_Metabox_Section { /** * Name of the section, used as an identifier in the HTML. * * @var string */ public $name = 'readability'; /** * Outputs the section link. * * @return void */ public function display_link() { printf( '<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"> <div class="wpseo-score-icon-container" id="wpseo-readability-score-icon"></div><span>%2$s</span></a></li>', esc_attr( $this->name ), esc_html__( 'Readability', 'wordpress-seo' ) ); } /** * Outputs the section content. * * @return void */ public function display_content() { printf( '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section">', esc_attr( $this->name ) ); echo '<div id="wpseo-metabox-readability-root" class="wpseo-metabox-root"></div>', '</div>'; } } metabox/interface-metabox-analysis.php 0000644 00000001267 15150262017 0014137 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Metabox */ /** * Describes an interface for an analysis that can either be enabled or disabled. */ interface WPSEO_Metabox_Analysis { /** * Whether this analysis is enabled. * * @return bool Whether or not this analysis is enabled. */ public function is_enabled(); /** * Whether or not this analysis is enabled by the user. * * @return bool Whether or not this analysis is enabled by the user. */ public function is_user_enabled(); /** * Whether or not this analysis is enabled globally. * * @return bool Whether or not this analysis is enabled globally. */ public function is_globally_enabled(); } metabox/interface-metabox-section.php 0000644 00000000552 15150262017 0013754 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates and displays the HTML for a metabox section. */ interface WPSEO_Metabox_Section { /** * Outputs the section link. * * @return void */ public function display_link(); /** * Outputs the section content. * * @return void */ public function display_content(); } metabox/interface-metabox-tab.php 0000644 00000000533 15150262017 0013055 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates the HTML for a metabox tab. */ interface WPSEO_Metabox_Tab { /** * Returns the html for the tab link. * * @return string */ public function link(); /** * Returns the html for the tab content. * * @return string */ public function content(); } notifiers/dismissible-notification.php 0000644 00000006147 15150262017 0014261 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Notifiers */ /** * Abstract class representing a dismissible notification. */ abstract class WPSEO_Dismissible_Notification implements WPSEO_Listener, WPSEO_Notification_Handler { /** * The identifier for the notification. * * @var string */ protected $notification_identifier = ''; /** * Retrieves instance of a notification. * * @return Yoast_Notification The notification. */ abstract protected function get_notification(); /** * Listens to an argument in the request URL and triggers an action. * * @return void */ public function listen() { if ( $this->get_listener_value() !== $this->notification_identifier ) { return; } $this->dismiss(); } /** * Adds the notification if applicable, otherwise removes it. * * @param Yoast_Notification_Center $notification_center The notification center object. * * @return void */ public function handle( Yoast_Notification_Center $notification_center ) { if ( $this->is_applicable() ) { $notification = $this->get_notification(); $notification_center->add_notification( $notification ); return; } $notification_center->remove_notification_by_id( 'wpseo-' . $this->notification_identifier ); } /** * Listens to an argument in the request URL and triggers an action. * * @return void */ protected function dismiss() { $this->set_dismissal_state(); $this->redirect_to_dashboard(); } /** * Checks if a notice is applicable. * * @return bool Whether a notice should be shown or not. */ protected function is_applicable() { return $this->is_notice_dismissed() === false; } /** * Checks whether the notification has been dismissed. * * @codeCoverageIgnore * * @return bool True when notification is dismissed. */ protected function is_notice_dismissed() { return get_user_meta( get_current_user_id(), 'wpseo-remove-' . $this->notification_identifier, true ) === '1'; } /** * Retrieves the value where listener is listening for. * * @codeCoverageIgnore * * @return string|null The listener value or null if not set. */ protected function get_listener_value() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: Normally we would need to check for a nonce here but this class is not used anymore. if ( isset( $_GET['yoast_dismiss'] ) && is_string( $_GET['yoast_dismiss'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: Normally we would need to check for a nonce here but this class is not used anymore. return sanitize_text_field( wp_unslash( $_GET['yoast_dismiss'] ) ); } return null; } /** * Dismisses the notification. * * @codeCoverageIgnore * * @return void */ protected function set_dismissal_state() { update_user_meta( get_current_user_id(), 'wpseo-remove-' . $this->notification_identifier, true ); } /** * Redirects the user back to the dashboard. * * @codeCoverageIgnore * * @return void */ protected function redirect_to_dashboard() { wp_safe_redirect( admin_url( 'admin.php?page=wpseo_dashboard' ) ); exit; } } notifiers/interface-notification-handler.php 0000644 00000000665 15150262017 0015324 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Notifiers */ /** * Dictates the required methods for a Notification Handler implementation. */ interface WPSEO_Notification_Handler { /** * Handles the notification object. * * @param Yoast_Notification_Center $notification_center The notification center object. * * @return void */ public function handle( Yoast_Notification_Center $notification_center ); } pages/dashboard.php 0000644 00000002053 15150262017 0010302 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } if ( isset( $_GET['allow_tracking'] ) && check_admin_referer( 'wpseo_activate_tracking', 'nonce' ) ) { WPSEO_Options::set( 'yoast_tracking', ( $_GET['allow_tracking'] === 'yes' ) ); if ( isset( $_SERVER['HTTP_REFERER'] ) ) { wp_safe_redirect( wp_unslash( $_SERVER['HTTP_REFERER'] ), 307 ); exit; } } $yform = Yoast_Form::get_instance(); $yform->admin_header( true, 'wpseo' ); do_action( 'wpseo_all_admin_notices' ); $dashboard_tabs = new WPSEO_Option_Tabs( 'dashboard' ); $dashboard_tabs->add_tab( new WPSEO_Option_Tab( 'dashboard', __( 'Dashboard', 'wordpress-seo' ), [ 'save_button' => false, ] ) ); /** * Allows the addition of tabs to the dashboard by calling $dashboard_tabs->add_tab(). */ do_action( 'wpseo_settings_tabs_dashboard', $dashboard_tabs ); $dashboard_tabs->display( $yform ); do_action( 'wpseo_dashboard' ); $yform->admin_footer(); pages/licenses.php 0000644 00000000376 15150262017 0010166 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * @since 1.5.0 */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } require WPSEO_PATH . 'admin/views/licenses.php'; pages/network.php 0000644 00000001677 15150262017 0010057 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } $yform = Yoast_Form::get_instance(); $yform->admin_header( true, 'wpseo_ms' ); $network_tabs = new WPSEO_Option_Tabs( 'network' ); $network_tabs->add_tab( new WPSEO_Option_Tab( 'general', __( 'General', 'wordpress-seo' ) ) ); $network_tabs->add_tab( new WPSEO_Option_Tab( 'features', __( 'Features', 'wordpress-seo' ) ) ); $network_tabs->add_tab( new WPSEO_Option_Tab( 'integrations', __( 'Integrations', 'wordpress-seo' ) ) ); $network_tabs->add_tab( new WPSEO_Option_Tab( 'crawl-settings', __( 'Crawl settings', 'wordpress-seo' ), [ 'save_button' => true, ] ) ); $network_tabs->add_tab( new WPSEO_Option_Tab( 'restore-site', __( 'Restore Site', 'wordpress-seo' ), [ 'save_button' => false ] ) ); $network_tabs->display( $yform ); $yform->admin_footer(); pages/redirects.php 0000644 00000000376 15150262017 0010345 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * @since 19.0 */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } require WPSEO_PATH . 'admin/views/redirects.php'; pages/tools.php 0000644 00000005507 15150262017 0007522 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } $tool_page = ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['tool'] ) && is_string( $_GET['tool'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $tool_page = sanitize_text_field( wp_unslash( $_GET['tool'] ) ); } $yform = Yoast_Form::get_instance(); $yform->admin_header( false ); if ( $tool_page === '' ) { $tools = []; $tools['import-export'] = [ 'title' => __( 'Import and Export', 'wordpress-seo' ), 'desc' => __( 'Import settings from other SEO plugins and export your settings for re-use on (another) site.', 'wordpress-seo' ), ]; if ( WPSEO_Utils::allow_system_file_edit() === true && ! is_multisite() ) { $tools['file-editor'] = [ 'title' => __( 'File editor', 'wordpress-seo' ), 'desc' => __( 'This tool allows you to quickly change important files for your SEO, like your robots.txt and, if you have one, your .htaccess file.', 'wordpress-seo' ), ]; } $tools['bulk-editor'] = [ 'title' => __( 'Bulk editor', 'wordpress-seo' ), 'desc' => __( 'This tool allows you to quickly change titles and descriptions of your posts and pages without having to go into the editor for each page.', 'wordpress-seo' ), ]; echo '<p>'; printf( /* translators: %1$s expands to Yoast SEO */ esc_html__( '%1$s comes with some very powerful built-in tools:', 'wordpress-seo' ), 'Yoast SEO' ); echo '</p>'; echo '<ul class="ul-disc">'; $admin_url = admin_url( 'admin.php?page=wpseo_tools' ); foreach ( $tools as $slug => $tool ) { $href = ( ! empty( $tool['href'] ) ) ? $admin_url . $tool['href'] : add_query_arg( [ 'tool' => $slug ], $admin_url ); $attr = ( ! empty( $tool['attr'] ) ) ? $tool['attr'] : ''; echo '<li>'; echo '<strong><a href="', esc_url( $href ), '" ', esc_attr( $attr ), '>', esc_html( $tool['title'] ), '</a></strong><br/>'; echo esc_html( $tool['desc'] ); echo '</li>'; } /** * WARNING: This hook is intended for internal use only. * Don't use it in your code as it will be removed shortly. */ do_action( 'wpseo_tools_overview_list_items_internal' ); echo '</ul>'; } else { echo '<a href="', esc_url( admin_url( 'admin.php?page=wpseo_tools' ) ), '">', esc_html__( '« Back to Tools page', 'wordpress-seo' ), '</a>'; $tool_pages = [ 'bulk-editor', 'import-export' ]; if ( WPSEO_Utils::allow_system_file_edit() === true && ! is_multisite() ) { $tool_pages[] = 'file-editor'; } if ( in_array( $tool_page, $tool_pages, true ) ) { require_once WPSEO_PATH . 'admin/views/tool-' . $tool_page . '.php'; } } $yform->admin_footer( false ); roles/class-abstract-role-manager.php 0000644 00000006607 15150262017 0013666 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Roles */ /** * Abstract Role Manager template. */ abstract class WPSEO_Abstract_Role_Manager implements WPSEO_Role_Manager { /** * Registered roles. * * @var array */ protected $roles = []; /** * Registers a role. * * @param string $role Role to register. * @param string $display_name Display name to use. * @param string|null $template Optional. Role to base the new role on. * * @return void */ public function register( $role, $display_name, $template = null ) { $this->roles[ $role ] = (object) [ 'display_name' => $display_name, 'template' => $template, ]; } /** * Returns the list of registered roles. * * @return string[] List or registered roles. */ public function get_roles() { return array_keys( $this->roles ); } /** * Adds the registered roles. * * @return void */ public function add() { foreach ( $this->roles as $role => $data ) { $capabilities = $this->get_capabilities( $data->template ); $capabilities = $this->filter_existing_capabilties( $role, $capabilities ); $this->add_role( $role, $data->display_name, $capabilities ); } } /** * Removes the registered roles. * * @return void */ public function remove() { $roles = array_keys( $this->roles ); array_map( [ $this, 'remove_role' ], $roles ); } /** * Returns the capabilities for the specified role. * * @param string $role Role to fetch capabilities from. * * @return array List of capabilities. */ protected function get_capabilities( $role ) { if ( ! is_string( $role ) || empty( $role ) ) { return []; } $wp_role = get_role( $role ); if ( ! $wp_role ) { return []; } return $wp_role->capabilities; } /** * Returns true if the capability exists on the role. * * @param WP_Role $role Role to check capability against. * @param string $capability Capability to check. * * @return bool True if the capability is defined for the role. */ protected function capability_exists( WP_Role $role, $capability ) { return ! array_key_exists( $capability, $role->capabilities ); } /** * Filters out capabilities that are already set for the role. * * This makes sure we don't override configurations that have been previously set. * * @param string $role The role to check against. * @param array $capabilities The capabilities that should be set. * * @return array Capabilties that can be safely set. */ protected function filter_existing_capabilties( $role, array $capabilities ) { if ( $capabilities === [] ) { return $capabilities; } $wp_role = get_role( $role ); if ( ! $wp_role ) { return $capabilities; } foreach ( $capabilities as $capability => $grant ) { if ( $this->capability_exists( $wp_role, $capability ) ) { unset( $capabilities[ $capability ] ); } } return $capabilities; } /** * Adds a role to the system. * * @param string $role Role to add. * @param string $display_name Name to display for the role. * @param array $capabilities Capabilities to add to the role. * * @return void */ abstract protected function add_role( $role, $display_name, array $capabilities = [] ); /** * Removes a role from the system. * * @param string $role Role to remove. * * @return void */ abstract protected function remove_role( $role ); } roles/class-register-roles.php 0000644 00000001142 15150262017 0012447 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Roles */ /** * Role registration class. */ class WPSEO_Register_Roles implements WPSEO_WordPress_Integration { /** * Adds hooks. * * @return void */ public function register_hooks() { add_action( 'wpseo_register_roles', [ $this, 'register' ] ); } /** * Registers the roles. * * @return void */ public function register() { $role_manager = WPSEO_Role_Manager_Factory::get(); $role_manager->register( 'wpseo_manager', 'SEO Manager', 'editor' ); $role_manager->register( 'wpseo_editor', 'SEO Editor', 'editor' ); } } roles/class-role-manager-factory.php 0000644 00000000577 15150262017 0013532 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Roles */ /** * Role Manager Factory. */ class WPSEO_Role_Manager_Factory { /** * Retrieves the Role manager to use. * * @return WPSEO_Role_Manager */ public static function get() { static $manager = null; if ( $manager === null ) { $manager = new WPSEO_Role_Manager_WP(); } return $manager; } } roles/class-role-manager.php 0000644 00000001401 15150262017 0012050 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Roles */ /** * Role Manager interface. */ interface WPSEO_Role_Manager { /** * Registers a role. * * @param string $role Role to register. * @param string $display_name Display name to use. * @param string|null $template Optional. Role to base the new role on. * * @return void */ public function register( $role, $display_name, $template = null ); /** * Adds the registered roles. * * @return void */ public function add(); /** * Removes the registered roles. * * @return void */ public function remove(); /** * Returns the list of registered roles. * * @return string[] List or registered roles. */ public function get_roles(); } roles/class-role-manager-wp.php 0000644 00000002657 15150262017 0012512 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Roles */ /** * WordPress' default implementation of the Role Manager. */ final class WPSEO_Role_Manager_WP extends WPSEO_Abstract_Role_Manager { /** * Adds a role to the system. * * @param string $role Role to add. * @param string $display_name Name to display for the role. * @param array $capabilities Capabilities to add to the role. * * @return void */ protected function add_role( $role, $display_name, array $capabilities = [] ) { $wp_role = get_role( $role ); if ( $wp_role ) { foreach ( $capabilities as $capability => $grant ) { $wp_role->add_cap( $capability, $grant ); } return; } add_role( $role, $display_name, $capabilities ); } /** * Removes a role from the system. * * @param string $role Role to remove. * * @return void */ protected function remove_role( $role ) { remove_role( $role ); } /** * Formats the capabilities to the required format. * * @param array $capabilities Capabilities to format. * @param bool $enabled Whether these capabilities should be enabled or not. * * @return array Formatted capabilities. */ protected function format_capabilities( array $capabilities, $enabled = true ) { // Flip keys and values. $capabilities = array_flip( $capabilities ); // Set all values to $enabled. return array_fill_keys( array_keys( $capabilities ), $enabled ); } } services/class-file-size.php 0000644 00000004653 15150262017 0012101 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Services */ /** * Represents the file size service. */ class WPSEO_File_Size_Service { /** * Retrieves an indexable. * * @param WP_REST_Request $request The request object. * * @return WP_REST_Response The response. */ public function get( WP_REST_Request $request ) { try { $file_url = $this->get_file_url( $request ); return new WP_REST_Response( [ 'type' => 'success', 'size_in_bytes' => $this->get_file_size( $file_url ), ], 200 ); } catch ( WPSEO_File_Size_Exception $exception ) { return new WP_REST_Response( [ 'type' => 'failure', 'response' => $exception->getMessage(), ], 404 ); } } /** * Retrieves the file url. * * @param WP_REST_Request $request The request to retrieve file url from. * * @return string The file url. * @throws WPSEO_File_Size_Exception The file is hosted externally. */ protected function get_file_url( WP_REST_Request $request ) { $file_url = rawurldecode( $request->get_param( 'url' ) ); if ( ! $this->is_externally_hosted( $file_url ) ) { return $file_url; } throw WPSEO_File_Size_Exception::externally_hosted( $file_url ); } /** * Checks if the file is hosted externally. * * @param string $file_url The file url. * * @return bool True if it is hosted externally. */ protected function is_externally_hosted( $file_url ) { return wp_parse_url( home_url(), PHP_URL_HOST ) !== wp_parse_url( $file_url, PHP_URL_HOST ); } /** * Returns the file size. * * @param string $file_url The file url to get the size for. * * @return int The file size. * @throws WPSEO_File_Size_Exception Retrieval of file size went wrong for unknown reasons. */ protected function get_file_size( $file_url ) { $file_config = wp_upload_dir(); $file_url = str_replace( $file_config['baseurl'], '', $file_url ); $file_size = $this->calculate_file_size( $file_url ); if ( ! $file_size ) { throw WPSEO_File_Size_Exception::unknown_error( $file_url ); } return $file_size; } /** * Calculates the file size using the Utils class. * * @param string $file_url The file to retrieve the size for. * * @return int|bool The file size or False if it could not be retrieved. */ protected function calculate_file_size( $file_url ) { return WPSEO_Image_Utils::get_file_size( [ 'path' => $file_url, ] ); } } statistics/class-statistics-integration.php 0000644 00000001347 15150262017 0015271 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Statistics */ /** * Class WPSEO_Statistic_Integration. */ class WPSEO_Statistic_Integration implements WPSEO_WordPress_Integration { /** * Adds hooks to clear the cache. * * @return void */ public function register_hooks() { add_action( 'wp_insert_post', [ $this, 'clear_cache' ] ); add_action( 'delete_post', [ $this, 'clear_cache' ] ); } /** * Clears the dashboard widget items cache. * * @return void */ public function clear_cache() { // Bail if this is a multisite installation and the site has been switched. if ( is_multisite() && ms_is_switched() ) { return; } delete_transient( WPSEO_Statistics_Service::CACHE_TRANSIENT_KEY ); } } statistics/class-statistics-service.php 0000644 00000016075 15150262017 0014412 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Statistics */ /** * Class WPSEO_Statistics_Service. */ class WPSEO_Statistics_Service { /** * Cache transient id. * * @var string */ public const CACHE_TRANSIENT_KEY = 'wpseo-statistics-totals'; /** * Class that generates interesting statistics about things. * * @var WPSEO_Statistics */ protected $statistics; /** * Statistics labels. * * @var string[] */ protected $labels; /** * WPSEO_Statistics_Service contructor. * * @param WPSEO_Statistics $statistics The statistics class to retrieve statistics from. */ public function __construct( WPSEO_Statistics $statistics ) { $this->statistics = $statistics; } /** * Fetches statistics by REST request. * * @return WP_REST_Response The response object. */ public function get_statistics() { // Switch to the user locale with fallback to the site locale. switch_to_locale( get_user_locale() ); $this->labels = $this->labels(); $statistics = $this->statistic_items(); $data = [ 'header' => $this->get_header_from_statistics( $statistics ), 'seo_scores' => $statistics['scores'], ]; return new WP_REST_Response( $data ); } /** * Gets a header summarizing the given statistics results. * * @param array $statistics The statistics results. * * @return string The header summing up the statistics results. */ private function get_header_from_statistics( array $statistics ) { // Personal interpretation to allow release, should be looked at later. if ( $statistics['division'] === false ) { return __( 'You don\'t have any published posts, your SEO scores will appear here once you make your first post!', 'wordpress-seo' ); } if ( $statistics['division']['good'] > 0.66 ) { return __( 'Hey, your SEO is doing pretty well! Check out the stats:', 'wordpress-seo' ); } return __( 'Below are your published posts\' SEO scores. Now is as good a time as any to start improving some of your posts!', 'wordpress-seo' ); } /** * An array representing items to be added to the At a Glance dashboard widget. * * @return array The statistics for the current user. */ private function statistic_items() { $transient = $this->get_transient(); $user_id = get_current_user_id(); if ( isset( $transient[ $user_id ] ) ) { return $transient[ $user_id ]; } return $this->set_statistic_items_for_user( $transient, $user_id ); } /** * Gets the statistics transient value. Returns array if transient wasn't set. * * @return array|mixed Returns the transient or an empty array if the transient doesn't exist. */ private function get_transient() { $transient = get_transient( self::CACHE_TRANSIENT_KEY ); if ( $transient === false ) { return []; } return $transient; } /** * Set the statistics transient cache for a specific user. * * @param array $transient The current stored transient with the cached data. * @param int $user The user's ID to assign the retrieved values to. * * @return array The statistics transient for the user. */ private function set_statistic_items_for_user( $transient, $user ) { $scores = $this->get_seo_scores_with_post_count(); $division = $this->get_seo_score_division( $scores ); $transient[ $user ] = [ // Use array_values because array_filter may return non-zero indexed arrays. 'scores' => array_values( array_filter( $scores, [ $this, 'filter_items' ] ) ), 'division' => $division, ]; set_transient( self::CACHE_TRANSIENT_KEY, $transient, DAY_IN_SECONDS ); return $transient[ $user ]; } /** * Gets the division of SEO scores. * * @param array $scores The SEO scores. * * @return array|bool The division of SEO scores, false if there are no posts. */ private function get_seo_score_division( array $scores ) { $total = 0; $division = []; foreach ( $scores as $score ) { $total += $score['count']; } if ( $total === 0 ) { return false; } foreach ( $scores as $score ) { $division[ $score['seo_rank'] ] = ( $score['count'] / $total ); } return $division; } /** * Get all SEO ranks and data associated with them. * * @return array An array of SEO scores and associated data. */ private function get_seo_scores_with_post_count() { $ranks = WPSEO_Rank::get_all_ranks(); return array_map( [ $this, 'map_rank_to_widget' ], $ranks ); } /** * Converts a rank to data usable in the dashboard widget. * * @param WPSEO_Rank $rank The rank to map. * * @return array The mapped rank. */ private function map_rank_to_widget( WPSEO_Rank $rank ) { return [ 'seo_rank' => $rank->get_rank(), 'label' => $this->get_label_for_rank( $rank ), 'count' => $this->statistics->get_post_count( $rank ), 'link' => $this->get_link_for_rank( $rank ), ]; } /** * Returns a dashboard widget label to use for a certain rank. * * @param WPSEO_Rank $rank The rank to return a label for. * * @return string The label for the rank. */ private function get_label_for_rank( WPSEO_Rank $rank ) { return $this->labels[ $rank->get_rank() ]; } /** * Determines the labels for the various scoring ranks that are known within Yoast SEO. * * @return array Array containing the translatable labels. */ private function labels() { return [ WPSEO_Rank::NO_FOCUS => sprintf( /* translators: %1$s expands to an opening strong tag, %2$s expands to a closing strong tag */ __( 'Posts %1$swithout%2$s a focus keyphrase', 'wordpress-seo' ), '<strong>', '</strong>' ), WPSEO_Rank::BAD => sprintf( /* translators: %s expands to the score */ __( 'Posts with the SEO score: %s', 'wordpress-seo' ), '<strong>' . __( 'Needs improvement', 'wordpress-seo' ) . '</strong>' ), WPSEO_Rank::OK => sprintf( /* translators: %s expands to the score */ __( 'Posts with the SEO score: %s', 'wordpress-seo' ), '<strong>' . __( 'OK', 'wordpress-seo' ) . '</strong>' ), WPSEO_Rank::GOOD => sprintf( /* translators: %s expands to the score */ __( 'Posts with the SEO score: %s', 'wordpress-seo' ), '<strong>' . __( 'Good', 'wordpress-seo' ) . '</strong>' ), WPSEO_Rank::NO_INDEX => __( 'Posts that should not show up in search results', 'wordpress-seo' ), ]; } /** * Filter items if they have a count of zero. * * @param array $item The item to potentially filter out. * * @return bool Whether or not the count is zero. */ private function filter_items( $item ) { return $item['count'] !== 0; } /** * Returns a link for the overview of posts of a certain rank. * * @param WPSEO_Rank $rank The rank to return a link for. * * @return string The link that shows an overview of posts with that rank. */ private function get_link_for_rank( WPSEO_Rank $rank ) { if ( current_user_can( 'edit_others_posts' ) === false ) { return esc_url( admin_url( 'edit.php?post_status=publish&post_type=post&seo_filter=' . $rank->get_rank() . '&author=' . get_current_user_id() ) ); } return esc_url( admin_url( 'edit.php?post_status=publish&post_type=post&seo_filter=' . $rank->get_rank() ) ); } } taxonomy/class-taxonomy-columns.php 0000644 00000016007 15150262017 0013575 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Helpers\Score_Icon_Helper; use Yoast\WP\SEO\Repositories\Indexable_Repository; /** * This class adds columns to the taxonomy table. */ class WPSEO_Taxonomy_Columns { /** * The SEO analysis. * * @var WPSEO_Metabox_Analysis_SEO */ private $analysis_seo; /** * The readability analysis. * * @var WPSEO_Metabox_Analysis_Readability */ private $analysis_readability; /** * The current taxonomy. * * @var string */ private $taxonomy; /** * Holds the Indexable_Repository. * * @var Indexable_Repository */ protected $indexable_repository; /** * Holds the Score_Icon_Helper. * * @var Score_Icon_Helper */ protected $score_icon_helper; /** * WPSEO_Taxonomy_Columns constructor. */ public function __construct() { $this->taxonomy = $this->get_taxonomy(); if ( ! empty( $this->taxonomy ) ) { add_filter( 'manage_edit-' . $this->taxonomy . '_columns', [ $this, 'add_columns' ] ); add_filter( 'manage_' . $this->taxonomy . '_custom_column', [ $this, 'parse_column' ], 10, 3 ); } $this->analysis_seo = new WPSEO_Metabox_Analysis_SEO(); $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); $this->indexable_repository = YoastSEO()->classes->get( Indexable_Repository::class ); $this->score_icon_helper = YoastSEO()->helpers->score_icon; } /** * Adds an SEO score column to the terms table, right after the description column. * * @param array $columns Current set columns. * * @return array */ public function add_columns( array $columns ) { if ( $this->display_metabox( $this->taxonomy ) === false ) { return $columns; } $new_columns = []; foreach ( $columns as $column_name => $column_value ) { $new_columns[ $column_name ] = $column_value; if ( $column_name === 'description' && $this->analysis_seo->is_enabled() ) { $new_columns['wpseo-score'] = '<span class="yoast-tooltip yoast-tooltip-n yoast-tooltip-alt" data-label="' . esc_attr__( 'SEO score', 'wordpress-seo' ) . '"><span class="yoast-column-seo-score yoast-column-header-has-tooltip"><span class="screen-reader-text">' . __( 'SEO score', 'wordpress-seo' ) . '</span></span></span>'; } if ( $column_name === 'description' && $this->analysis_readability->is_enabled() ) { $new_columns['wpseo-score-readability'] = '<span class="yoast-tooltip yoast-tooltip-n yoast-tooltip-alt" data-label="' . esc_attr__( 'Readability score', 'wordpress-seo' ) . '"><span class="yoast-column-readability yoast-column-header-has-tooltip"><span class="screen-reader-text">' . __( 'Readability score', 'wordpress-seo' ) . '</span></span></span>'; } } return $new_columns; } /** * Parses the column. * * @param string $content The current content of the column. * @param string $column_name The name of the column. * @param int $term_id ID of requested taxonomy. * * @return string */ public function parse_column( $content, $column_name, $term_id ) { switch ( $column_name ) { case 'wpseo-score': return $this->get_score_value( $term_id ); case 'wpseo-score-readability': return $this->get_score_readability_value( $term_id ); } return $content; } /** * Retrieves the taxonomy from the $_GET or $_POST variable. * * @return string|null The current taxonomy or null when it is not set. */ public function get_current_taxonomy() { // phpcs:disable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( ! empty( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) { if ( isset( $_POST['taxonomy'] ) && is_string( $_POST['taxonomy'] ) ) { return sanitize_text_field( wp_unslash( $_POST['taxonomy'] ) ); } } elseif ( isset( $_GET['taxonomy'] ) && is_string( $_GET['taxonomy'] ) ) { return sanitize_text_field( wp_unslash( $_GET['taxonomy'] ) ); } // phpcs:enable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended return null; } /** * Returns the posted/get taxonomy value if it is set. * * @return string|null */ private function get_taxonomy() { // phpcs:disable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( wp_doing_ajax() ) { if ( isset( $_POST['taxonomy'] ) && is_string( $_POST['taxonomy'] ) ) { return sanitize_text_field( wp_unslash( $_POST['taxonomy'] ) ); } } elseif ( isset( $_GET['taxonomy'] ) && is_string( $_GET['taxonomy'] ) ) { return sanitize_text_field( wp_unslash( $_GET['taxonomy'] ) ); } // phpcs:enable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended return null; } /** * Parses the value for the score column. * * @param int $term_id ID of requested term. * * @return string */ private function get_score_value( $term_id ) { $indexable = $this->indexable_repository->find_by_id_and_type( (int) $term_id, 'term' ); return $this->score_icon_helper->for_seo( $indexable, '', __( 'Term is set to noindex.', 'wordpress-seo' ) ); } /** * Parses the value for the readability score column. * * @param int $term_id ID of the requested term. * * @return string The HTML for the readability score indicator. */ private function get_score_readability_value( $term_id ) { $score = (int) WPSEO_Taxonomy_Meta::get_term_meta( $term_id, $this->taxonomy, 'content_score' ); return $this->score_icon_helper->for_readability( $score ); } /** * Check if the taxonomy is indexable. * * @param mixed $term The current term. * * @return bool Whether the term is indexable. */ private function is_indexable( $term ) { // When the no_index value is not empty and not default, check if its value is index. $no_index = WPSEO_Taxonomy_Meta::get_term_meta( $term->term_id, $this->taxonomy, 'noindex' ); // Check if the default for taxonomy is empty (this will be index). if ( ! empty( $no_index ) && $no_index !== 'default' ) { return ( $no_index === 'index' ); } if ( is_object( $term ) ) { $no_index_key = 'noindex-tax-' . $term->taxonomy; // If the option is false, this means we want to index it. return WPSEO_Options::get( $no_index_key, false ) === false; } return true; } /** * Wraps the WPSEO_Metabox check to determine whether the metabox should be displayed either by * choice of the admin or because the taxonomy is not public. * * @since 7.0 * * @param string|null $taxonomy Optional. The taxonomy to test, defaults to the current taxonomy. * * @return bool Whether the meta box (and associated columns etc) should be hidden. */ private function display_metabox( $taxonomy = null ) { $current_taxonomy = $this->get_current_taxonomy(); if ( ! isset( $taxonomy ) && ! empty( $current_taxonomy ) ) { $taxonomy = $current_taxonomy; } return WPSEO_Utils::is_metabox_active( $taxonomy, 'taxonomy' ); } } taxonomy/class-taxonomy-fields.php 0000644 00000012037 15150262017 0013362 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Class WPSEO_Taxonomy_Tab. * * Contains the basics for each class extending this one. */ class WPSEO_Taxonomy_Fields { /** * Returns the taxonomy fields. * * @param string $field_group The field group. * * @return array */ public function get( $field_group ) { $fields = []; switch ( $field_group ) { case 'content': $fields = $this->get_content_fields(); break; case 'settings': $fields = $this->get_settings_fields(); break; case 'social': $fields = $this->get_social_fields(); break; } return $this->filter_hidden_fields( $fields ); } /** * Returns array with the fields for the general tab. * * @return array */ protected function get_content_fields() { $fields = [ 'title' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'desc' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'linkdex' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'content_score' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'inclusive_language_score' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'focuskw' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'is_cornerstone' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], ]; /** * Filter: 'wpseo_taxonomy_content_fields' - Adds the possibility to register additional content fields. * * @param array $additional_fields The additional fields. */ $additional_fields = apply_filters( 'wpseo_taxonomy_content_fields', [] ); return array_merge( $fields, $additional_fields ); } /** * Returns array with the fields for the settings tab. * * @return array */ protected function get_settings_fields() { return [ 'noindex' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'bctitle' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => ( WPSEO_Options::get( 'breadcrumbs-enable' ) !== true ), ], 'canonical' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], ]; } /** * Returning the fields for the social media tab. * * @return array */ protected function get_social_fields() { $fields = []; if ( WPSEO_Options::get( 'opengraph', false ) === true ) { $fields = [ 'opengraph-title' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'opengraph-description' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'opengraph-image' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'opengraph-image-id' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], ]; } if ( WPSEO_Options::get( 'twitter', false ) === true ) { $fields = array_merge( $fields, [ 'twitter-title' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'twitter-description' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'twitter-image' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], 'twitter-image-id' => [ 'label' => '', 'description' => '', 'type' => 'hidden', 'options' => '', 'hide' => false, ], ] ); } return $fields; } /** * Filter the hidden fields. * * @param array $fields Array with the form fields that has will be filtered. * * @return array */ protected function filter_hidden_fields( array $fields ) { foreach ( $fields as $field_name => $field_options ) { if ( ! empty( $field_options['hide'] ) ) { unset( $fields[ $field_name ] ); } } return $fields; } } taxonomy/class-taxonomy-fields-presenter.php 0000644 00000015664 15150262017 0015400 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Class WPSEO_Taxonomy_Presenter. */ class WPSEO_Taxonomy_Fields_Presenter { /** * The taxonomy meta data for the current term. * * @var array */ private $tax_meta; /** * Constructs the WPSEO_Taxonomy_Fields_Presenter class. * * @param stdClass $term The current term. */ public function __construct( $term ) { $this->tax_meta = WPSEO_Taxonomy_Meta::get_term_meta( (int) $term->term_id, $term->taxonomy ); } /** * Displaying the form fields. * * @param array $fields Array with the fields that will be displayed. * * @return string */ public function html( array $fields ) { $content = ''; foreach ( $fields as $field_name => $field_configuration ) { $content .= $this->form_row( 'wpseo_' . $field_name, $field_configuration ); } return $content; } /** * Create a row in the form table. * * @param string $field_name Variable the row controls. * @param array $field_configuration Array with the field configuration. * * @return string */ private function form_row( $field_name, array $field_configuration ) { $esc_field_name = esc_attr( $field_name ); $options = (array) $field_configuration['options']; if ( ! empty( $field_configuration['description'] ) ) { $options['description'] = $field_configuration['description']; } $label = $this->get_label( $field_configuration['label'], $esc_field_name ); $field = $this->get_field( $field_configuration['type'], $esc_field_name, $this->get_field_value( $field_name ), $options ); $help_content = ( $field_configuration['options']['help'] ?? '' ); $help_button_text = ( $field_configuration['options']['help-button'] ?? '' ); $help = new WPSEO_Admin_Help_Panel( $field_name, $help_button_text, $help_content ); return $this->parse_row( $label, $help, $field ); } /** * Generates the html for the given field config. * * @param string $field_type The fieldtype, e.g: text, checkbox, etc. * @param string $field_name The name of the field. * @param string $field_value The value of the field. * @param array $options Array with additional options. * * @return string */ private function get_field( $field_type, $field_name, $field_value, array $options ) { $class = $this->get_class( $options ); $field = ''; $description = ''; $aria_describedby = ''; if ( ! empty( $options['description'] ) ) { $aria_describedby = ' aria-describedby="' . $field_name . '-desc"'; $description = '<p id="' . $field_name . '-desc" class="yoast-metabox__description">' . $options['description'] . '</p>'; } switch ( $field_type ) { case 'div': $field .= '<div id="' . $field_name . '"></div>'; break; case 'url': $field .= '<input name="' . $field_name . '" id="' . $field_name . '" ' . $class . ' type="url" value="' . esc_attr( urldecode( $field_value ) ) . '" size="40"' . $aria_describedby . '/>'; break; case 'text': $field .= '<input name="' . $field_name . '" id="' . $field_name . '" ' . $class . ' type="text" value="' . esc_attr( $field_value ) . '" size="40"' . $aria_describedby . '/>'; break; case 'checkbox': $field .= '<input name="' . $field_name . '" id="' . $field_name . '" type="checkbox" ' . checked( $field_value ) . $aria_describedby . '/>'; break; case 'textarea': $rows = 3; if ( ! empty( $options['rows'] ) ) { $rows = $options['rows']; } $field .= '<textarea class="large-text" rows="' . esc_attr( $rows ) . '" id="' . $field_name . '" name="' . $field_name . '"' . $aria_describedby . '>' . esc_textarea( $field_value ) . '</textarea>'; break; case 'upload': $field .= '<input' . ' id="' . $field_name . '"' . ' type="text"' . ' size="36"' . ' name="' . $field_name . '"' . ' value="' . esc_attr( $field_value ) . '"' . $aria_describedby . '' . ' readonly="readonly"' . ' /> '; $field .= '<input' . ' id="' . esc_attr( $field_name ) . '_button"' . ' class="wpseo_image_upload_button button"' . ' data-target="' . esc_attr( $field_name ) . '"' . ' data-target-id="hidden_' . esc_attr( $field_name ) . '-id"' . ' type="button"' . ' value="' . esc_attr__( 'Upload Image', 'wordpress-seo' ) . '"' . ' /> '; $field .= '<input' . ' id="' . esc_attr( $field_name ) . '_button"' . ' class="wpseo_image_remove_button button"' . ' type="button"' . ' value="' . esc_attr__( 'Clear Image', 'wordpress-seo' ) . '"' . ' />'; break; case 'select': if ( is_array( $options ) && $options !== [] ) { $field .= '<select name="' . $field_name . '" id="' . $field_name . '"' . $aria_describedby . '>'; $select_options = ( array_key_exists( 'options', $options ) ) ? $options['options'] : $options; foreach ( $select_options as $option => $option_label ) { $selected = selected( $option, $field_value, false ); $field .= '<option ' . $selected . ' value="' . esc_attr( $option ) . '">' . esc_html( $option_label ) . '</option>'; } unset( $option, $option_label, $selected ); $field .= '</select>'; } break; case 'hidden': $field .= '<input name="' . $field_name . '" id="hidden_' . $field_name . '" type="hidden" value="' . esc_attr( $field_value ) . '" />'; break; } return $field . $description; } /** * Getting the value for given field_name. * * @param string $field_name The fieldname to get the value for. * * @return string */ private function get_field_value( $field_name ) { if ( isset( $this->tax_meta[ $field_name ] ) && $this->tax_meta[ $field_name ] !== '' ) { return $this->tax_meta[ $field_name ]; } return ''; } /** * Getting the class attributes if $options contains a class key. * * @param array $options The array with field options. * * @return string */ private function get_class( array $options ) { if ( ! empty( $options['class'] ) ) { return ' class="' . esc_attr( $options['class'] ) . '"'; } return ''; } /** * Getting the label HTML. * * @param string $label The label value. * @param string $field_name The target field. * * @return string */ private function get_label( $label, $field_name ) { if ( $label !== '' ) { return '<label for="' . $field_name . '">' . esc_html( $label ) . '</label>'; } return ''; } /** * Returns the HTML for the row which contains label, help and the field. * * @param string $label The html for the label if there was a label set. * @param WPSEO_Admin_Help_Panel $help The help panel to render in this row. * @param string $field The html for the field. * * @return string */ private function parse_row( $label, WPSEO_Admin_Help_Panel $help, $field ) { if ( $label !== '' || $help !== '' ) { return $label . $help->get_button_html() . $help->get_panel_html() . $field; } return $field; } } taxonomy/class-taxonomy-metabox.php 0000644 00000014060 15150262017 0013551 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * This class generates the metabox on the edit term page. */ class WPSEO_Taxonomy_Metabox { /** * The term currently being edited. * * @var WP_Term */ private $term; /** * The term's taxonomy. * * @var string */ private $taxonomy; /** * Whether or not the social tab is enabled for this metabox. * * @var bool */ private $is_social_enabled; /** * Helper to determine whether or not the SEO analysis is enabled. * * @var WPSEO_Metabox_Analysis_SEO */ protected $seo_analysis; /** * Helper to determine whether or not the readability analysis is enabled. * * @var WPSEO_Metabox_Analysis_Readability */ protected $readability_analysis; /** * Helper to determine whether or not the inclusive language analysis is enabled. * * @var WPSEO_Metabox_Analysis_Inclusive_Language */ protected $inclusive_language_analysis; /** * The constructor. * * @param string $taxonomy The taxonomy. * @param stdClass $term The term. */ public function __construct( $taxonomy, $term ) { $this->term = $term; $this->taxonomy = $taxonomy; $this->is_social_enabled = WPSEO_Options::get( 'opengraph', false ) || WPSEO_Options::get( 'twitter', false ); $this->seo_analysis = new WPSEO_Metabox_Analysis_SEO(); $this->readability_analysis = new WPSEO_Metabox_Analysis_Readability(); $this->inclusive_language_analysis = new WPSEO_Metabox_Analysis_Inclusive_Language(); } /** * Shows the Yoast SEO metabox for the term. * * @return void */ public function display() { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $this->get_product_title() returns a hard-coded string. printf( '<div id="wpseo_meta" class="postbox yoast wpseo-taxonomy-metabox-postbox"><h2><span>%1$s</span></h2>', $this->get_product_title() ); echo '<div class="inside">'; echo '<div id="taxonomy_overall"></div>'; $this->render_hidden_fields(); $this->render_tabs(); echo '</div>'; echo '</div>'; } /** * Renders the metabox hidden fields. * * @return void */ protected function render_hidden_fields() { $fields_presenter = new WPSEO_Taxonomy_Fields_Presenter( $this->term ); $field_definitions = new WPSEO_Taxonomy_Fields(); echo $fields_presenter->html( $field_definitions->get( 'content' ) ); if ( WPSEO_Capability_Utils::current_user_can( 'wpseo_edit_advanced_metadata' ) || WPSEO_Options::get( 'disableadvanced_meta' ) === false ) { echo $fields_presenter->html( $field_definitions->get( 'settings' ) ); } if ( $this->is_social_enabled ) { echo $fields_presenter->html( $field_definitions->get( 'social' ) ); } } /** * Renders the metabox tabs. * * @return void */ protected function render_tabs() { echo '<div class="wpseo-metabox-content">'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $this->get_product_title() returns a hard-coded string. printf( '<div class="wpseo-metabox-menu"><ul role="tablist" class="yoast-aria-tabs" aria-label="%s">', $this->get_product_title() ); $tabs = $this->get_tabs(); foreach ( $tabs as $tab ) { $tab->display_link(); } echo '</ul></div>'; foreach ( $tabs as $tab ) { $tab->display_content(); } echo '</div>'; } /** * Returns the relevant metabox sections for the current view. * * @return WPSEO_Metabox_Section[] */ private function get_tabs() { $tabs = []; $label = __( 'SEO', 'wordpress-seo' ); if ( $this->seo_analysis->is_enabled() ) { $label = '<span class="wpseo-score-icon-container" id="wpseo-seo-score-icon"></span>' . $label; } $tabs[] = new WPSEO_Metabox_Section_React( 'content', $label ); if ( $this->readability_analysis->is_enabled() ) { $tabs[] = new WPSEO_Metabox_Section_Readability(); } if ( $this->inclusive_language_analysis->is_enabled() ) { $tabs[] = new WPSEO_Metabox_Section_Inclusive_Language(); } if ( $this->is_social_enabled ) { $tabs[] = new WPSEO_Metabox_Section_React( 'social', '<span class="dashicons dashicons-share"></span>' . __( 'Social', 'wordpress-seo' ), '', [ 'html_after' => '<div id="wpseo-section-social"></div>', ] ); } $tabs = array_merge( $tabs, $this->get_additional_tabs() ); return $tabs; } /** * Returns the metabox tabs that have been added by other plugins. * * @return WPSEO_Metabox_Section_Additional[] */ protected function get_additional_tabs() { $tabs = []; /** * Private filter: 'yoast_free_additional_taxonomy_metabox_sections'. * * Meant for internal use only. Allows adding additional tabs to the Yoast SEO metabox for taxonomies. * * @param array[] $tabs { * An array of arrays with tab specifications. * * @type array $tab { * A tab specification. * * @type string $name The name of the tab. Used in the HTML IDs, href and aria properties. * @type string $link_content The content of the tab link. * @type string $content The content of the tab. * @type array $options { * Optional. Extra options. * * @type string $link_class Optional. The class for the tab link. * @type string $link_aria_label Optional. The aria label of the tab link. * } * } * } */ $requested_tabs = apply_filters( 'yoast_free_additional_taxonomy_metabox_sections', [] ); foreach ( $requested_tabs as $tab ) { if ( is_array( $tab ) && array_key_exists( 'name', $tab ) && array_key_exists( 'link_content', $tab ) && array_key_exists( 'content', $tab ) ) { $options = array_key_exists( 'options', $tab ) ? $tab['options'] : []; $tabs[] = new WPSEO_Metabox_Section_Additional( $tab['name'], $tab['link_content'], $tab['content'], $options ); } } return $tabs; } /** * Retrieves the product title. * * @return string The product title. */ protected function get_product_title() { return YoastSEO()->helpers->product->get_product_name(); } } taxonomy/class-taxonomy.php 0000644 00000035040 15150262017 0012115 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository; use Yoast\WP\SEO\Presenters\Admin\Alert_Presenter; /** * Class that handles the edit boxes on taxonomy edit pages. */ class WPSEO_Taxonomy { /** * The current active taxonomy. * * @var string */ private $taxonomy = ''; /** * Holds the metabox SEO analysis instance. * * @var WPSEO_Metabox_Analysis_SEO */ private $analysis_seo; /** * Holds the metabox readability analysis instance. * * @var WPSEO_Metabox_Analysis_Readability */ private $analysis_readability; /** * Holds the metabox inclusive language analysis instance. * * @var WPSEO_Metabox_Analysis_Inclusive_Language */ private $analysis_inclusive_language; /** * Class constructor. */ public function __construct() { $this->taxonomy = $this::get_taxonomy(); add_action( 'edit_term', [ $this, 'update_term' ], 99, 3 ); add_action( 'init', [ $this, 'custom_category_descriptions_allow_html' ] ); add_action( 'admin_init', [ $this, 'admin_init' ] ); if ( self::is_term_overview( $GLOBALS['pagenow'] ) ) { new WPSEO_Taxonomy_Columns(); } $this->analysis_seo = new WPSEO_Metabox_Analysis_SEO(); $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); $this->analysis_inclusive_language = new WPSEO_Metabox_Analysis_Inclusive_Language(); } /** * Add hooks late enough for taxonomy object to be available for checks. * * @return void */ public function admin_init() { $taxonomy = get_taxonomy( $this->taxonomy ); if ( empty( $taxonomy ) || empty( $taxonomy->public ) || ! $this->show_metabox() ) { return; } // Adds custom category description editor. Needs a hook that runs before the description field. add_action( "{$this->taxonomy}_term_edit_form_top", [ $this, 'custom_category_description_editor' ] ); add_action( sanitize_text_field( $this->taxonomy ) . '_edit_form', [ $this, 'term_metabox' ], 90, 1 ); add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] ); } /** * Show the SEO inputs for term. * * @param stdClass|WP_Term $term Term to show the edit boxes for. * * @return void */ public function term_metabox( $term ) { if ( WPSEO_Metabox::is_internet_explorer() ) { $this->show_internet_explorer_notice(); return; } $metabox = new WPSEO_Taxonomy_Metabox( $this->taxonomy, $term ); $metabox->display(); } /** * Renders the content for the internet explorer metabox. * * @return void */ private function show_internet_explorer_notice() { $product_title = YoastSEO()->helpers->product->get_product_name(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $product_title is hardcoded. printf( '<div id="wpseo_meta" class="postbox yoast wpseo-taxonomy-metabox-postbox"><h2><span>%1$s</span></h2>', $product_title ); echo '<div class="inside">'; $content = sprintf( /* translators: 1: Link start tag to the Firefox website, 2: Link start tag to the Chrome website, 3: Link start tag to the Edge website, 4: Link closing tag. */ esc_html__( 'The browser you are currently using is unfortunately rather dated. Since we strive to give you the best experience possible, we no longer support this browser. Instead, please use %1$sFirefox%4$s, %2$sChrome%4$s or %3$sMicrosoft Edge%4$s.', 'wordpress-seo' ), '<a href="https://www.mozilla.org/firefox/new/">', '<a href="https://www.google.com/chrome/">', '<a href="https://www.microsoft.com/windows/microsoft-edge">', '</a>' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped above. echo new Alert_Presenter( $content ); echo '</div></div>'; } /** * Queue assets for taxonomy screens. * * @since 1.5.0 * * @return void */ public function admin_enqueue_scripts() { $pagenow = $GLOBALS['pagenow']; if ( ! ( self::is_term_edit( $pagenow ) || self::is_term_overview( $pagenow ) ) ) { return; } $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_style( 'scoring' ); $asset_manager->enqueue_style( 'monorepo' ); $tag_id = $this::get_tag_id(); if ( self::is_term_edit( $pagenow ) && ! is_null( $tag_id ) ) { wp_enqueue_media(); // Enqueue files needed for upload functionality. $asset_manager->enqueue_style( 'metabox-css' ); $asset_manager->enqueue_style( 'ai-generator' ); $asset_manager->enqueue_script( 'term-edit' ); /** * Remove the emoji script as it is incompatible with both React and any * contenteditable fields. */ remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); $asset_manager->localize_script( 'term-edit', 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() ); $script_data = [ 'analysis' => [ 'plugins' => [ 'replaceVars' => [ 'no_parent_text' => __( '(no parent)', 'wordpress-seo' ), 'replace_vars' => $this->get_replace_vars(), 'recommended_replace_vars' => $this->get_recommended_replace_vars(), 'scope' => $this->determine_scope(), ], 'shortcodes' => [ 'wpseo_shortcode_tags' => $this->get_valid_shortcode_tags(), 'wpseo_filter_shortcodes_nonce' => wp_create_nonce( 'wpseo-filter-shortcodes' ), ], ], 'worker' => [ 'url' => YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-analysis-worker' ), 'dependencies' => YoastSEO()->helpers->asset->get_dependency_urls_by_handle( 'yoast-seo-analysis-worker' ), 'keywords_assessment_url' => YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-used-keywords-assessment' ), 'log_level' => WPSEO_Utils::get_analysis_worker_log_level(), ], ], 'media' => [ // @todo replace this translation with JavaScript translations. 'choose_image' => __( 'Use Image', 'wordpress-seo' ), ], 'metabox' => $this->localize_term_scraper_script( $tag_id ), 'userLanguageCode' => WPSEO_Language_Utils::get_language( get_user_locale() ), 'isTerm' => true, 'postId' => $tag_id, 'termType' => $this->get_taxonomy(), 'usedKeywordsNonce' => wp_create_nonce( 'wpseo-keyword-usage' ), 'linkParams' => WPSEO_Shortlinker::get_query_params(), 'pluginUrl' => plugins_url( '', WPSEO_FILE ), 'wistiaEmbedPermission' => YoastSEO()->classes->get( Wistia_Embed_Permission_Repository::class )->get_value_for_user( get_current_user_id() ), ]; $asset_manager->localize_script( 'term-edit', 'wpseoScriptData', $script_data ); $asset_manager->enqueue_user_language_script(); } if ( self::is_term_overview( $pagenow ) ) { $asset_manager->enqueue_script( 'edit-page' ); } } /** * Update the taxonomy meta data on save. * * @param int $term_id ID of the term to save data for. * @param int $tt_id The taxonomy_term_id for the term. * @param string $taxonomy The taxonomy the term belongs to. * * @return void */ public function update_term( $term_id, $tt_id, $taxonomy ) { // Bail if this is a multisite installation and the site has been switched. if ( is_multisite() && ms_is_switched() ) { return; } /* Create post array with only our values. */ $new_meta_data = []; foreach ( WPSEO_Taxonomy_Meta::$defaults_per_term as $key => $default ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: Nonce is already checked by WordPress before executing this action. if ( isset( $_POST[ $key ] ) && is_string( $_POST[ $key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: $data is getting sanitized later. $data = wp_unslash( $_POST[ $key ] ); $new_meta_data[ $key ] = ( $key !== 'wpseo_canonical' ) ? WPSEO_Utils::sanitize_text_field( $data ) : WPSEO_Utils::sanitize_url( $data ); } // If analysis is disabled remove that analysis score value from the DB. if ( $this->is_meta_value_disabled( $key ) ) { $new_meta_data[ $key ] = ''; } } // Saving the values. WPSEO_Taxonomy_Meta::set_values( $term_id, $taxonomy, $new_meta_data ); } /** * Determines if the given meta value key is disabled. * * @param string $key The key of the meta value. * @return bool Whether the given meta value key is disabled. */ public function is_meta_value_disabled( $key ) { if ( $key === 'wpseo_linkdex' && ! $this->analysis_seo->is_enabled() ) { return true; } if ( $key === 'wpseo_content_score' && ! $this->analysis_readability->is_enabled() ) { return true; } if ( $key === 'wpseo_inclusive_language_score' && ! $this->analysis_inclusive_language->is_enabled() ) { return true; } return false; } /** * Allows post-kses-filtered HTML in term descriptions. * * @return void */ public function custom_category_descriptions_allow_html() { remove_filter( 'term_description', 'wp_kses_data' ); remove_filter( 'pre_term_description', 'wp_filter_kses' ); add_filter( 'term_description', 'wp_kses_post' ); add_filter( 'pre_term_description', 'wp_filter_post_kses' ); } /** * Output the WordPress editor. * * @return void */ public function custom_category_description_editor() { wp_editor( '', 'description' ); } /** * Pass variables to js for use with the term-scraper. * * @param int $term_id The ID of the term to localize the script for. * * @return array */ public function localize_term_scraper_script( $term_id ) { $term = get_term_by( 'id', $term_id, $this::get_taxonomy() ); $taxonomy = get_taxonomy( $term->taxonomy ); $term_formatter = new WPSEO_Metabox_Formatter( new WPSEO_Term_Metabox_Formatter( $taxonomy, $term ) ); return $term_formatter->get_values(); } /** * Pass some variables to js for replacing variables. * * @return array */ public function localize_replace_vars_script() { return [ 'no_parent_text' => __( '(no parent)', 'wordpress-seo' ), 'replace_vars' => $this->get_replace_vars(), 'recommended_replace_vars' => $this->get_recommended_replace_vars(), 'scope' => $this->determine_scope(), ]; } /** * Determines the scope based on the current taxonomy. * This can be used by the replacevar plugin to determine if a replacement needs to be executed. * * @return string String decribing the current scope. */ private function determine_scope() { $taxonomy = $this::get_taxonomy(); if ( $taxonomy === 'category' ) { return 'category'; } if ( $taxonomy === 'post_tag' ) { return 'tag'; } return 'term'; } /** * Determines if a given page is the term overview page. * * @param string $page The string to check for the term overview page. * * @return bool */ public static function is_term_overview( $page ) { return $page === 'edit-tags.php'; } /** * Determines if a given page is the term edit page. * * @param string $page The string to check for the term edit page. * * @return bool */ public static function is_term_edit( $page ) { return $page === 'term.php'; } /** * Function to get the labels for the current taxonomy. * * @return object|null Labels for the current taxonomy or null if the taxonomy is not set. */ public static function get_labels() { $term = self::get_taxonomy(); if ( $term !== '' ) { $taxonomy = get_taxonomy( $term ); return $taxonomy->labels; } return null; } /** * Retrieves a template. * Check if metabox for current taxonomy should be displayed. * * @return bool */ private function show_metabox() { $option_key = 'display-metabox-tax-' . $this->taxonomy; return WPSEO_Options::get( $option_key ); } /** * Getting the taxonomy from the URL. * * @return string */ private static function get_taxonomy() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['taxonomy'] ) && is_string( $_GET['taxonomy'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. return sanitize_text_field( wp_unslash( $_GET['taxonomy'] ) ); } return ''; } /** * Get the current tag ID from the GET parameters. * * @return int|null the tag ID if it exists, null otherwise. */ private static function get_tag_id() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['tag_ID'] ) && is_string( $_GET['tag_ID'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, We are casting to an integer. $tag_id = (int) wp_unslash( $_GET['tag_ID'] ); if ( $tag_id > 0 ) { return $tag_id; } } return null; } /** * Prepares the replace vars for localization. * * @return array<string, string> The replacement variables. */ private function get_replace_vars() { $term_id = $this::get_tag_id(); $term = get_term_by( 'id', $term_id, $this::get_taxonomy() ); $cached_replacement_vars = []; $vars_to_cache = [ 'date', 'id', 'sitename', 'sitedesc', 'sep', 'page', 'term_title', 'term_description', 'term_hierarchy', 'category_description', 'tag_description', 'searchphrase', 'currentyear', ]; foreach ( $vars_to_cache as $var ) { $cached_replacement_vars[ $var ] = wpseo_replace_vars( '%%' . $var . '%%', $term ); } return $cached_replacement_vars; } /** * Prepares the recommended replace vars for localization. * * @return array<string> The recommended replacement variables. */ private function get_recommended_replace_vars() { $recommended_replace_vars = new WPSEO_Admin_Recommended_Replace_Vars(); $taxonomy = $this::get_taxonomy(); if ( $taxonomy === '' ) { return []; } // What is recommended depends on the current context. $page_type = $recommended_replace_vars->determine_for_term( $taxonomy ); return $recommended_replace_vars->get_recommended_replacevars_for( $page_type ); } /** * Returns an array with shortcode tags for all registered shortcodes. * * @return array<string> Array with shortcode tags. */ private function get_valid_shortcode_tags() { $shortcode_tags = []; foreach ( $GLOBALS['shortcode_tags'] as $tag => $description ) { $shortcode_tags[] = $tag; } return $shortcode_tags; } } tracking/class-tracking-addon-data.php 0000644 00000010170 15150262017 0013754 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Tracking */ use Yoast\WP\SEO\Conditionals\WooCommerce_Conditional; /** * Represents the addon option data. */ class WPSEO_Tracking_Addon_Data implements WPSEO_Collection { /** * The local options we want to track. * * @var string[] The option_names for the options we want to track. */ private $local_include_list = [ 'use_multiple_locations', 'multiple_locations_same_organization', 'business_type', 'woocommerce_local_pickup_setting', ]; /** * The woo options we want to track. * * @var string[] The option_names for the options we want to track. */ private $woo_include_list = []; /** * The news options we want to track. * * @var string[] The option_names for the options we want to track. */ private $news_include_list = []; /** * The video options we want to track. * * @var string[] The option_names for the options we want to track. */ private $video_include_list = []; /** * Returns the collection data. * * @return array The collection data. */ public function get() { $addon_settings = []; $addon_manager = new WPSEO_Addon_Manager(); if ( $addon_manager->is_installed( WPSEO_Addon_Manager::LOCAL_SLUG ) ) { $addon_settings = $this->get_local_addon_settings( $addon_settings, 'wpseo_local', WPSEO_Addon_Manager::LOCAL_SLUG, $this->local_include_list ); } if ( $addon_manager->is_installed( WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ) ) { $addon_settings = $this->get_addon_settings( $addon_settings, 'wpseo_woo', WPSEO_Addon_Manager::WOOCOMMERCE_SLUG, $this->woo_include_list ); } if ( $addon_manager->is_installed( WPSEO_Addon_Manager::NEWS_SLUG ) ) { $addon_settings = $this->get_addon_settings( $addon_settings, 'wpseo_news', WPSEO_Addon_Manager::NEWS_SLUG, $this->news_include_list ); } if ( $addon_manager->is_installed( WPSEO_Addon_Manager::VIDEO_SLUG ) ) { $addon_settings = $this->get_addon_settings( $addon_settings, 'wpseo_video', WPSEO_Addon_Manager::VIDEO_SLUG, $this->video_include_list ); } return $addon_settings; } /** * Gets the tracked options from the addon * * @param array $addon_settings The current list of addon settings. * @param string $source_name The option key of the addon. * @param string $slug The addon slug. * @param array $option_include_list All the options to be included in tracking. * * @return array */ public function get_addon_settings( array $addon_settings, $source_name, $slug, $option_include_list ) { $source_options = get_option( $source_name, [] ); if ( ! is_array( $source_options ) || empty( $source_options ) ) { return $addon_settings; } $addon_settings[ $slug ] = array_intersect_key( $source_options, array_flip( $option_include_list ) ); return $addon_settings; } /** * Filter business_type in local addon settings. * * Remove the business_type setting when 'multiple_locations_shared_business_info' setting is turned off. * * @param array $addon_settings The current list of addon settings. * @param string $source_name The option key of the addon. * @param string $slug The addon slug. * @param array $option_include_list All the options to be included in tracking. * * @return array */ public function get_local_addon_settings( array $addon_settings, $source_name, $slug, $option_include_list ) { $source_options = get_option( $source_name, [] ); if ( ! is_array( $source_options ) || empty( $source_options ) ) { return $addon_settings; } $addon_settings[ $slug ] = array_intersect_key( $source_options, array_flip( $option_include_list ) ); if ( array_key_exists( 'use_multiple_locations', $source_options ) && array_key_exists( 'business_type', $addon_settings[ $slug ] ) && $source_options['use_multiple_locations'] === 'on' && $source_options['multiple_locations_shared_business_info'] === 'off' ) { $addon_settings[ $slug ]['business_type'] = 'multiple_locations'; } if ( ! ( new WooCommerce_Conditional() )->is_met() ) { unset( $addon_settings[ $slug ]['woocommerce_local_pickup_setting'] ); } return $addon_settings; } } tracking/class-tracking-default-data.php 0000644 00000002644 15150262017 0014322 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Tracking */ /** * Represents the default data. */ class WPSEO_Tracking_Default_Data implements WPSEO_Collection { /** * Returns the collection data. * * @return array The collection data. */ public function get() { return [ 'siteTitle' => get_option( 'blogname' ), '@timestamp' => (int) gmdate( 'Uv' ), 'wpVersion' => $this->get_wordpress_version(), 'homeURL' => home_url(), 'adminURL' => admin_url(), 'isMultisite' => is_multisite(), 'siteLanguage' => get_bloginfo( 'language' ), 'gmt_offset' => get_option( 'gmt_offset' ), 'timezoneString' => get_option( 'timezone_string' ), 'migrationStatus' => get_option( 'yoast_migrations_free' ), 'countPosts' => $this->get_post_count( 'post' ), 'countPages' => $this->get_post_count( 'page' ), ]; } /** * Returns the number of posts of a certain type. * * @param string $post_type The post type return the count for. * * @return int The count for this post type. */ protected function get_post_count( $post_type ) { $count = wp_count_posts( $post_type ); if ( isset( $count->publish ) ) { return $count->publish; } return 0; } /** * Returns the WordPress version. * * @return string The version. */ protected function get_wordpress_version() { global $wp_version; return $wp_version; } } tracking/class-tracking.php 0000644 00000015547 15150262017 0011777 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Tracking */ use Yoast\WP\SEO\Analytics\Application\Missing_Indexables_Collector; use Yoast\WP\SEO\Analytics\Application\To_Be_Cleaned_Indexables_Collector; /** * This class handles the tracking routine. */ class WPSEO_Tracking implements WPSEO_WordPress_Integration { /** * The tracking option name. * * @var string */ protected $option_name = 'wpseo_tracking_last_request'; /** * The limit for the option. * * @var int */ protected $threshold = 0; /** * The endpoint to send the data to. * * @var string */ protected $endpoint = ''; /** * The current time. * * @var int */ private $current_time; /** * WPSEO_Tracking constructor. * * @param string $endpoint The endpoint to send the data to. * @param int $threshold The limit for the option. */ public function __construct( $endpoint, $threshold ) { if ( ! $this->tracking_enabled() ) { return; } $this->endpoint = $endpoint; $this->threshold = $threshold; $this->current_time = time(); } /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { if ( ! $this->tracking_enabled() ) { return; } // Send tracking data on `admin_init`. add_action( 'admin_init', [ $this, 'send' ], 1 ); // Add an action hook that will be triggered at the specified time by `wp_schedule_single_event()`. add_action( 'wpseo_send_tracking_data_after_core_update', [ $this, 'send' ] ); // Call `wp_schedule_single_event()` after a WordPress core update. add_action( 'upgrader_process_complete', [ $this, 'schedule_tracking_data_sending' ], 10, 2 ); } /** * Schedules a new sending of the tracking data after a WordPress core update. * * @param bool|WP_Upgrader $upgrader Optional. WP_Upgrader instance or false. * Depending on context, it might be a Theme_Upgrader, * Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader. * instance. Default false. * @param array $data Array of update data. * * @return void */ public function schedule_tracking_data_sending( $upgrader = false, $data = [] ) { // Return if it's not a WordPress core update. if ( ! $upgrader || ! isset( $data['type'] ) || $data['type'] !== 'core' ) { return; } /* * To uniquely identify the scheduled cron event, `wp_next_scheduled()` * needs to receive the same arguments as those used when originally * scheduling the event otherwise it will always return false. */ if ( ! wp_next_scheduled( 'wpseo_send_tracking_data_after_core_update', [ true ] ) ) { /* * Schedule sending of data tracking 6 hours after a WordPress core * update. Pass a `true` parameter for the callback `$force` argument. */ wp_schedule_single_event( ( time() + ( HOUR_IN_SECONDS * 6 ) ), 'wpseo_send_tracking_data_after_core_update', [ true ] ); } } /** * Sends the tracking data. * * @param bool $force Whether to send the tracking data ignoring the two * weeks time threshold. Default false. * * @return void */ public function send( $force = false ) { if ( ! $this->should_send_tracking( $force ) ) { return; } // Set a 'content-type' header of 'application/json'. $tracking_request_args = [ 'headers' => [ 'content-type:' => 'application/json', ], ]; $collector = $this->get_collector(); $request = new WPSEO_Remote_Request( $this->endpoint, $tracking_request_args ); $request->set_body( $collector->get_as_json() ); $request->send(); update_option( $this->option_name, $this->current_time, 'yes' ); } /** * Determines whether to send the tracking data. * * Returns false if tracking is disabled or the current page is one of the * admin plugins pages. Returns true when there's no tracking data stored or * the data was sent more than two weeks ago. The two weeks interval is set * when instantiating the class. * * @param bool $ignore_time_treshhold Whether to send the tracking data ignoring * the two weeks time treshhold. Default false. * * @return bool True when tracking data should be sent. */ protected function should_send_tracking( $ignore_time_treshhold = false ) { global $pagenow; // Only send tracking on the main site of a multi-site instance. This returns true on non-multisite installs. if ( is_network_admin() || ! is_main_site() ) { return false; } // Because we don't want to possibly block plugin actions with our routines. if ( in_array( $pagenow, [ 'plugins.php', 'plugin-install.php', 'plugin-editor.php' ], true ) ) { return false; } $last_time = get_option( $this->option_name ); // When tracking data haven't been sent yet or when sending data is forced. if ( ! $last_time || $ignore_time_treshhold ) { return true; } return $this->exceeds_treshhold( $this->current_time - $last_time ); } /** * Checks if the given amount of seconds exceeds the set threshold. * * @param int $seconds The amount of seconds to check. * * @return bool True when seconds is bigger than threshold. */ protected function exceeds_treshhold( $seconds ) { return ( $seconds > $this->threshold ); } /** * Returns the collector for collecting the data. * * @return WPSEO_Collector The instance of the collector. */ public function get_collector() { $collector = new WPSEO_Collector(); $collector->add_collection( new WPSEO_Tracking_Default_Data() ); $collector->add_collection( new WPSEO_Tracking_Server_Data() ); $collector->add_collection( new WPSEO_Tracking_Theme_Data() ); $collector->add_collection( new WPSEO_Tracking_Plugin_Data() ); $collector->add_collection( new WPSEO_Tracking_Settings_Data() ); $collector->add_collection( new WPSEO_Tracking_Addon_Data() ); $collector->add_collection( YoastSEO()->classes->get( Missing_Indexables_Collector::class ) ); $collector->add_collection( YoastSEO()->classes->get( To_Be_Cleaned_Indexables_Collector::class ) ); return $collector; } /** * See if we should run tracking at all. * * @return bool True when we can track, false when we can't. */ private function tracking_enabled() { // Check if we're allowing tracking. $tracking = WPSEO_Options::get( 'tracking' ); if ( $tracking === false ) { return false; } // Save this state. if ( $tracking === null ) { /** * Filter: 'wpseo_enable_tracking' - Enables the data tracking of Yoast SEO Premium and add-ons. * * @param string $is_enabled The enabled state. Default is false. */ $tracking = apply_filters( 'wpseo_enable_tracking', false ); WPSEO_Options::set( 'tracking', $tracking ); } if ( $tracking === false ) { return false; } if ( ! YoastSEO()->helpers->environment->is_production_mode() ) { return false; } return true; } } tracking/class-tracking-plugin-data.php 0000644 00000004042 15150262017 0014166 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Tracking */ /** * Represents the plugin data. */ class WPSEO_Tracking_Plugin_Data implements WPSEO_Collection { /** * Plugins with auto updating enabled. * * @var array */ private $auto_update_plugin_list; /** * Returns the collection data. * * @return array The collection data. */ public function get() { return [ 'plugins' => $this->get_plugin_data(), ]; } /** * Returns all plugins. * * @return array The formatted plugins. */ protected function get_plugin_data() { if ( ! function_exists( 'get_plugin_data' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $plugins = wp_get_active_and_valid_plugins(); $plugins = array_map( 'get_plugin_data', $plugins ); $this->set_auto_update_plugin_list(); $plugins = array_map( [ $this, 'format_plugin' ], $plugins ); $plugin_data = []; foreach ( $plugins as $plugin ) { $plugin_key = sanitize_title( $plugin['name'] ); $plugin_data[ $plugin_key ] = $plugin; } return $plugin_data; } /** * Sets all auto updating plugin data so it can be used in the tracking list. * * @return void */ public function set_auto_update_plugin_list() { $auto_update_plugins = []; $auto_update_plugin_files = get_option( 'auto_update_plugins' ); if ( $auto_update_plugin_files ) { foreach ( $auto_update_plugin_files as $auto_update_plugin ) { $data = get_plugin_data( WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $auto_update_plugin ); $auto_update_plugins[ $data['Name'] ] = $data; } } $this->auto_update_plugin_list = $auto_update_plugins; } /** * Formats the plugin array. * * @param array $plugin The plugin details. * * @return array The formatted array. */ protected function format_plugin( array $plugin ) { return [ 'name' => $plugin['Name'], 'version' => $plugin['Version'], 'auto_updating' => array_key_exists( $plugin['Name'], $this->auto_update_plugin_list ), ]; } } tracking/class-tracking-server-data.php 0000644 00000003757 15150262017 0014212 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Tracking */ /** * Represents the server data. */ class WPSEO_Tracking_Server_Data implements WPSEO_Collection { /** * Returns the collection data. * * @return array The collection data. */ public function get() { return [ 'server' => $this->get_server_data(), ]; } /** * Returns the values with server details. * * @return array Array with the value. */ protected function get_server_data() { $server_data = []; // Validate if the server address is a valid IP-address. $ipaddress = isset( $_SERVER['SERVER_ADDR'] ) ? filter_var( wp_unslash( $_SERVER['SERVER_ADDR'] ), FILTER_VALIDATE_IP ) : ''; if ( $ipaddress ) { $server_data['ip'] = $ipaddress; $server_data['Hostname'] = gethostbyaddr( $ipaddress ); } $server_data['os'] = function_exists( 'php_uname' ) ? php_uname() : PHP_OS; $server_data['PhpVersion'] = PHP_VERSION; $server_data['CurlVersion'] = $this->get_curl_info(); $server_data['PhpExtensions'] = $this->get_php_extensions(); return $server_data; } /** * Returns details about the curl version. * * @return array|null The curl info. Or null when curl isn't available.. */ protected function get_curl_info() { if ( ! function_exists( 'curl_version' ) ) { return null; } $curl = curl_version(); $ssl_support = true; if ( ! $curl['features'] && CURL_VERSION_SSL ) { $ssl_support = false; } return [ 'version' => $curl['version'], 'sslSupport' => $ssl_support, ]; } /** * Returns a list with php extensions. * * @return array Returns the state of the php extensions. */ protected function get_php_extensions() { return [ 'imagick' => extension_loaded( 'imagick' ), 'filter' => extension_loaded( 'filter' ), 'bcmath' => extension_loaded( 'bcmath' ), 'pcre' => extension_loaded( 'pcre' ), 'xml' => extension_loaded( 'xml' ), 'pdo_mysql' => extension_loaded( 'pdo_mysql' ), ]; } } tracking/class-tracking-settings-data.php 0000644 00000015377 15150262017 0014545 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Tracking */ /** * Collects anonymized settings data. */ class WPSEO_Tracking_Settings_Data implements WPSEO_Collection { /** * The options that need to be anonymized before they can be sent elsewhere. * * @var array All of the option_names which need to be * anonymized before they can be sent elsewhere. */ private $anonymous_settings = [ 'baiduverify', 'googleverify', 'msverify', 'yandexverify', 'myyoast-oauth', 'website_name', 'alternate_website_name', 'company_logo', 'company_name', 'company_alternate_name', 'person_name', 'person_logo', 'person_logo_id', 'company_logo_id', 'facebook_site', 'instagram_url', 'linkedin_url', 'myspace_url', 'og_default_image', 'og_default_image_id', 'og_frontpage_title', 'og_frontpage_desc', 'og_frontpage_image', 'og_frontpage_image_id', 'open_graph_frontpage_title', 'open_graph_frontpage_desc', 'open_graph_frontpage_image', 'open_graph_frontpage_image_id', 'other_social_urls', 'mastodon_url', 'pinterest_url', 'pinterestverify', 'twitter_site', 'youtube_url', 'wikipedia_url', 'semrush_tokens', 'zapier_api_key', 'wincher_tokens', 'wincher_website_id', 'least_readability_ignore_list', 'least_seo_score_ignore_list', 'most_linked_ignore_list', 'least_linked_ignore_list', 'indexables_page_reading_list', 'publishing_principles_id', 'ownership_funding_info_id', 'actionable_feedback_policy_id', 'corrections_policy_id', 'ethics_policy_id', 'diversity_policy_id', 'diversity_staffing_report_id', ]; /** * The options we want to track. * * @var array The option_names for the options we want to track. */ private $include_list = [ 'ms_defaults_set', 'version', 'disableadvanced_meta', 'ryte_indexability', 'baiduverify', 'googleverify', 'msverify', 'yandexverify', 'site_type', 'has_multiple_authors', 'environment_type', 'content_analysis_active', 'keyword_analysis_active', 'inclusive_language_analysis_active', 'enable_admin_bar_menu', 'enable_cornerstone_content', 'enable_xml_sitemap', 'enable_text_link_counter', 'show_onboarding_notice', 'first_activated_on', 'myyoast-oauth', 'dynamic_permalinks', 'website_name', 'alternate_website_name', 'company_logo', 'company_name', 'company_or_person', 'person_name', 'forcerewritetitle', 'separator', 'title-home-wpseo', 'title-author-wpseo', 'title-archive-wpseo', 'title-search-wpseo', 'title-404-wpseo', 'metadesc-home-wpseo', 'metadesc-author-wpseo', 'metadesc-archive-wpseo', 'rssbefore', 'rssafter', 'noindex-author-wpseo', 'noindex-author-noposts-wpseo', 'noindex-archive-wpseo', 'disable-author', 'disable-date', 'disable-post_format', 'disable-attachment', 'breadcrumbs-404crumb', 'breadcrumbs-display-blog-page', 'breadcrumbs-boldlast', 'breadcrumbs-archiveprefix', 'breadcrumbs-enable', 'breadcrumbs-home', 'breadcrumbs-prefix', 'breadcrumbs-searchprefix', 'breadcrumbs-sep', 'person_logo', 'person_logo_id', 'company_logo_id', 'company_or_person_user_id', 'stripcategorybase', 'noindex-post', 'display-metabox-pt-post', 'noindex-page', 'display-metabox-pt-page', 'noindex-attachment', 'display-metabox-pt-attachment', 'display-metabox-tax-category', 'noindex-tax-category', 'display-metabox-tax-post_tag', 'noindex-tax-post_tag', 'display-metabox-tax-post_format', 'noindex-tax-post_format', 'taxonomy-category-ptparent', 'taxonomy-post_tag-ptparent', 'taxonomy-post_format-ptparent', 'breadcrumbs-blog-remove', 'hideeditbox-post', 'hideeditbox-page', 'hideeditbox-attachment', 'hideeditbox-tax-category', 'hideeditbox-tax-post_tag', 'hideeditbox-tax-post_format', 'facebook_site', 'instagram_url', 'linkedin_url', 'myspace_url', 'og_default_image', 'og_default_image_id', 'og_frontpage_title', 'og_frontpage_desc', 'og_frontpage_image', 'og_frontpage_image_id', 'open_graph_frontpage_title', 'open_graph_frontpage_desc', 'open_graph_frontpage_image', 'open_graph_frontpage_image_id', 'opengraph', 'pinterest_url', 'pinterestverify', 'twitter', 'twitter_site', 'twitter_card_type', 'youtube_url', 'wikipedia_url', 'mastodon_url', 'indexables_indexing_completed', 'semrush_integration_active', 'semrush_tokens', 'semrush_country_code', 'enable_enhanced_slack_sharing', 'zapier_integration_active', 'zapier_api_key', 'enable_metabox_insights', 'enable_link_suggestions', 'enable_index_now', 'enable_ai_generator', 'workouts', 'wincher_integration_active', 'wincher_tokens', 'wincher_website_id', 'wincher_automatically_add_keyphrases', 'first_time_install', 'other_social_urls', 'remove_feed_global', 'remove_feed_global_comments', 'remove_feed_post_comments', 'remove_feed_authors', 'remove_feed_categories', 'remove_feed_tags', 'remove_feed_custom_taxonomies', 'remove_feed_post_types', 'remove_feed_search', 'remove_atom_rdf_feeds', 'remove_shortlinks', 'remove_rest_api_links', 'remove_rsd_wlw_links', 'remove_oembed_links', 'remove_generator', 'remove_emoji_scripts', 'remove_powered_by_header', 'remove_pingback_header', 'clean_campaign_tracking_urls', 'clean_permalinks', 'clean_permalinks_extra_variables', 'search_cleanup', 'search_cleanup_emoji', 'search_cleanup_patterns', 'search_character_limit', 'redirect_search_pretty_urls', 'wordproof_integration_active', 'indexables_overview_state', 'deny_search_crawling', 'deny_wp_json_crawling', 'deny_adsbot_crawling', 'deny_ccbot_crawling', 'deny_google_extended_crawling', 'deny_gptbot_crawling', 'last_known_no_unindexed', ]; /** * Returns the collection data. * * @return array The collection data. */ public function get() { /** * Filter: 'wpseo_tracking_settings_include_list' - Allow filtering the settings included in tracking. * * @param string $include_list The list with included setting names. */ $this->include_list = apply_filters( 'wpseo_tracking_settings_include_list', $this->include_list ); $options = WPSEO_Options::get_all(); // Returns the settings of which the keys intersect with the values of the include list. $options = array_intersect_key( $options, array_flip( $this->include_list ) ); return [ 'settings' => $this->anonymize_settings( $options ), ]; } /** * Anonimizes the WPSEO_Options array by replacing all $anonymous_settings values to 'used'. * * @param array $settings The settings. * * @return array The anonymized settings. */ private function anonymize_settings( $settings ) { foreach ( $this->anonymous_settings as $setting ) { if ( ! empty( $settings[ $setting ] ) ) { $settings[ $setting ] = 'used'; } } return $settings; } } tracking/class-tracking-theme-data.php 0000644 00000002245 15150262017 0013775 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Tracking */ /** * Represents the theme data. */ class WPSEO_Tracking_Theme_Data implements WPSEO_Collection { /** * Returns the collection data. * * @return array The collection data. */ public function get() { $theme = wp_get_theme(); return [ 'theme' => [ 'name' => $theme->get( 'Name' ), 'url' => $theme->get( 'ThemeURI' ), 'version' => $theme->get( 'Version' ), 'author' => [ 'name' => $theme->get( 'Author' ), 'url' => $theme->get( 'AuthorURI' ), ], 'parentTheme' => $this->get_parent_theme( $theme ), 'blockTemplateSupport' => current_theme_supports( 'block-templates' ), 'isBlockTheme' => function_exists( 'wp_is_block_theme' ) && wp_is_block_theme(), ], ]; } /** * Returns the name of the parent theme. * * @param WP_Theme $theme The theme object. * * @return string|null The name of the parent theme or null. */ private function get_parent_theme( WP_Theme $theme ) { if ( is_child_theme() ) { return $theme->get( 'Template' ); } return null; } } views/form/select.php 0000644 00000002115 15150262017 0010632 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * * @uses string $attributes Additional attributes for the select. * @uses string $name Value for the select name attribute. * @uses string $id ID attribute for the select. * @uses array $options Array with the options to show. * @uses string $selected The current set options. */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } ?> <?php /* phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $attributes is properly escaped in parse_attribute via get_attributes in class-yoast-input-select.php. */ ?> <select <?php echo $attributes; ?>name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $id ); ?>"> <?php foreach ( $options as $option_attribute_value => $option_html_value ) : ?> <option value="<?php echo esc_attr( $option_attribute_value ); ?>"<?php echo selected( $selected, $option_attribute_value, false ); ?>><?php echo esc_html( $option_html_value ); ?></option> <?php endforeach; ?> </select> views/tabs/dashboard/dashboard.php 0000644 00000002023 15150262017 0013215 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Notifications template variables. * * @noinspection PhpUnusedLocalVariableInspection * * @var array */ $notifications_data = Yoast_Notifications::get_template_variables(); $wpseo_contributors_phrase = sprintf( /* translators: %1$s expands to Yoast SEO */ __( 'See who contributed to %1$s.', 'wordpress-seo' ), 'Yoast SEO' ); ?> <div class="tab-block"> <div class="yoast-notifications"> <div class="yoast-container yoast-container__error"> <?php require WPSEO_PATH . 'admin/views/partial-notifications-errors.php'; ?> </div> <div class="yoast-container yoast-container__warning"> <?php require WPSEO_PATH . 'admin/views/partial-notifications-warnings.php'; ?> </div> </div> </div> <div class="tab-block"> <h2><?php esc_html_e( 'Credits', 'wordpress-seo' ); ?></h2> <p> <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/yoast-seo-credits' ); ?>" target="_blank"><?php echo esc_html( $wpseo_contributors_phrase ); ?></a> </p> </div> views/tabs/dashboard/first-time-configuration.php 0000644 00000000371 15150262017 0016222 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } echo '<div id="wpseo-first-time-configuration"></div>'; views/tabs/dashboard/site-analysis.php 0000644 00000000653 15150262017 0014062 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views * * @uses Yoast_Form $yform Form object. */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } /** * WARNING: This hook is intended for internal use only. * Don't use it in your code as it will be removed shortly. */ do_action( 'wpseo_settings_tab_site_analysis_internal', $yform ); views/tabs/network/crawl-settings.php 0000644 00000003207 15150262017 0014003 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views * * @uses Yoast_Form $yform Form object. */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } $feature_toggles = Yoast_Feature_Toggles::instance()->get_all(); ?> <h2><?php esc_html_e( 'Crawl settings', 'wordpress-seo' ); ?></h2> <div class="yoast-measure"> <?php printf( /* translators: %s expands to Yoast SEO */ esc_html__( 'This tab allows you to selectively disable %s features for all sites in the network. By default all features are enabled, which allows site admins to choose for themselves if they want to toggle a feature on or off for their site. When you disable a feature here, site admins will not be able to use that feature at all.', 'wordpress-seo' ), 'Yoast SEO' ); echo '<p style="margin: 0.5em 0 1em;">'; printf( /* translators: %1$s opens the link to the Yoast.com article about Crawl settings, %2$s closes the link, */ esc_html__( '%1$sLearn more about crawl settings.%2$s', 'wordpress-seo' ), '<a href="' . esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/crawl-settings' ) ) . '" target="_blank" rel="noopener noreferrer">', '</a>' ); echo '</p>'; /** * Fires when displaying the crawl cleanup network tab. * * @param Yoast_Form $yform The yoast form object. */ do_action( 'wpseo_settings_tab_crawl_cleanup_network', $yform ); ?> </div> <?php /* * Required to prevent our settings framework from saving the default because the field * isn't explicitly set when saving the Dashboard page. */ $yform->hidden( 'show_onboarding_notice', 'wpseo_show_onboarding_notice' ); views/tabs/network/features.php 0000644 00000007300 15150262017 0012651 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views * * @uses Yoast_Form $yform Form object. */ use Yoast\WP\SEO\Presenters\Admin\Beta_Badge_Presenter; use Yoast\WP\SEO\Presenters\Admin\Premium_Badge_Presenter; if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } $feature_toggles = Yoast_Feature_Toggles::instance()->get_all(); ?> <h2><?php esc_html_e( 'Features', 'wordpress-seo' ); ?></h2> <div class="yoast-measure"> <?php printf( /* translators: %s expands to Yoast SEO */ esc_html__( 'This tab allows you to selectively disable %s features for all sites in the network. By default all features are enabled, which allows site admins to choose for themselves if they want to toggle a feature on or off for their site. When you disable a feature here, site admins will not be able to use that feature at all.', 'wordpress-seo' ), 'Yoast SEO' ); foreach ( $feature_toggles as $feature ) { $is_premium = YoastSEO()->helpers->product->is_premium(); $premium_version = YoastSEO()->helpers->product->get_premium_version(); if ( $feature->premium && $feature->premium_version ) { $not_supported_in_current_premium_version = $is_premium && version_compare( $premium_version, $feature->premium_version, '<' ); if ( $not_supported_in_current_premium_version ) { continue; } } $help_text = esc_html( $feature->label ); if ( ! empty( $feature->extra ) ) { $help_text .= ' ' . $feature->extra; } if ( ! empty( $feature->read_more_label ) ) { $url = $feature->read_more_url; if ( ! empty( $feature->premium ) && $feature->premium === true ) { $url = $feature->premium_url; } $help_text .= sprintf( '<a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s</a>', esc_url( WPSEO_Shortlinker::get( $url ) ), esc_html( $feature->read_more_label ) ); } $feature_help = new WPSEO_Admin_Help_Panel( WPSEO_Option::ALLOW_KEY_PREFIX . $feature->setting, /* translators: Hidden accessibility text; %s expands to a feature's name. */ sprintf( esc_html__( 'Help on: %s', 'wordpress-seo' ), esc_html( $feature->name ) ), $help_text ); $name = $feature->name; if ( ! empty( $feature->premium ) && $feature->premium === true ) { $name .= ' ' . new Premium_Badge_Presenter( $feature->name ); } if ( ! empty( $feature->in_beta ) && $feature->in_beta === true ) { $name .= ' ' . new Beta_Badge_Presenter( $feature->name ); } $disabled = false; $show_premium_upsell = false; $premium_upsell_url = ''; $note_when_disabled = ''; if ( $feature->premium === true && YoastSEO()->helpers->product->is_premium() === false ) { $disabled = true; $show_premium_upsell = true; $premium_upsell_url = WPSEO_Shortlinker::get( $feature->premium_upsell_url ); } $preserve_disabled_value = false; if ( $disabled ) { $preserve_disabled_value = true; } $yform->toggle_switch( WPSEO_Option::ALLOW_KEY_PREFIX . $feature->setting, [ 'on' => __( 'Allow Control', 'wordpress-seo' ), 'off' => __( 'Disable', 'wordpress-seo' ), ], $name, $feature_help->get_button_html() . $feature_help->get_panel_html(), [ 'disabled' => $disabled, 'preserve_disabled_value' => $preserve_disabled_value, 'show_premium_upsell' => $show_premium_upsell, 'premium_upsell_url' => $premium_upsell_url, 'note_when_disabled' => $note_when_disabled, ] ); } ?> </div> <?php /* * Required to prevent our settings framework from saving the default because the field * isn't explicitly set when saving the Dashboard page. */ $yform->hidden( 'show_onboarding_notice', 'wpseo_show_onboarding_notice' ); views/tabs/network/general.php 0000644 00000004026 15150262017 0012452 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views * * @uses Yoast_Form $yform Form object. */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } echo '<div class="tab-block">'; /* * {@internal Important: Make sure the options added to the array here are in line with the * options set in the WPSEO_Option_MS::$allowed_access_options property.}} */ $yform->select( 'access', /* translators: %1$s expands to Yoast SEO */ sprintf( __( 'Who should have access to the %1$s settings', 'wordpress-seo' ), 'Yoast SEO' ), [ 'admin' => __( 'Site Admins (default)', 'wordpress-seo' ), 'superadmin' => __( 'Super Admins only', 'wordpress-seo' ), ] ); if ( get_blog_count() <= 100 ) { $network_admin = new Yoast_Network_Admin(); $yform->select( 'defaultblog', __( 'New sites in the network inherit their SEO settings from this site', 'wordpress-seo' ), $network_admin->get_site_choices( true, true ) ); echo '<p>' . esc_html__( 'Choose the site whose settings you want to use as default for all sites that are added to your network. If you choose \'None\', the normal plugin defaults will be used.', 'wordpress-seo' ) . '</p>'; } else { $yform->textinput( 'defaultblog', __( 'New sites in the network inherit their SEO settings from this site', 'wordpress-seo' ) ); echo '<p>'; printf( /* translators: 1: link open tag; 2: link close tag. */ esc_html__( 'Enter the %1$sSite ID%2$s for the site whose settings you want to use as default for all sites that are added to your network. Leave empty for none (i.e. the normal plugin defaults will be used).', 'wordpress-seo' ), '<a href="' . esc_url( network_admin_url( 'sites.php' ) ) . '">', '</a>' ); echo '</p>'; } echo '<p><strong>' . esc_html__( 'Take note:', 'wordpress-seo' ) . '</strong> ' . esc_html__( 'Privacy sensitive (FB admins and such), theme specific (title rewrite) and a few very site specific settings will not be imported to new sites.', 'wordpress-seo' ) . '</p>'; echo '</div>'; views/tabs/network/integrations.php 0000644 00000006621 15150262017 0013546 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views * * @uses Yoast_Form $yform Form object. */ use Yoast\WP\SEO\Presenters\Admin\Badge_Presenter; use Yoast\WP\SEO\Presenters\Admin\Premium_Badge_Presenter; if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } $integration_toggles = Yoast_Integration_Toggles::instance()->get_all(); ?> <h2><?php esc_html_e( 'Integrations', 'wordpress-seo' ); ?></h2> <div class="yoast-measure"> <?php printf( /* translators: %1$s expands to Yoast SEO */ esc_html__( 'This tab allows you to selectively disable %1$s integrations with third-party products for all sites in the network. By default all integrations are enabled, which allows site admins to choose for themselves if they want to toggle an integration on or off for their site. When you disable an integration here, site admins will not be able to use that integration at all.', 'wordpress-seo' ), 'Yoast SEO' ); foreach ( $integration_toggles as $integration ) { $help_text = esc_html( $integration->label ); if ( ! empty( $integration->extra ) ) { $help_text .= ' ' . $integration->extra; } if ( ! empty( $integration->read_more_label ) ) { $help_text .= ' '; $help_text .= sprintf( '<a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s</a>', esc_url( WPSEO_Shortlinker::get( $integration->read_more_url ) ), esc_html( $integration->read_more_label ) ); } $feature_help = new WPSEO_Admin_Help_Panel( WPSEO_Option::ALLOW_KEY_PREFIX . $integration->setting, /* translators: Hidden accessibility text; %s expands to an integration's name. */ sprintf( esc_html__( 'Help on: %s', 'wordpress-seo' ), esc_html( $integration->name ) ), $help_text ); $name = $integration->name; if ( ! empty( $integration->premium ) && $integration->premium === true ) { $name .= ' ' . new Premium_Badge_Presenter( $integration->name ); } if ( ! empty( $integration->new ) && $integration->new === true ) { $name .= ' ' . new Badge_Presenter( $integration->name ); } $disabled = $integration->disabled; $show_premium_upsell = false; $premium_upsell_url = ''; if ( $integration->premium === true && YoastSEO()->helpers->product->is_premium() === false ) { $disabled = true; $show_premium_upsell = true; $premium_upsell_url = WPSEO_Shortlinker::get( $integration->premium_upsell_url ); } $preserve_disabled_value = false; if ( $disabled ) { $preserve_disabled_value = true; } $yform->toggle_switch( WPSEO_Option::ALLOW_KEY_PREFIX . $integration->setting, [ 'on' => __( 'Allow Control', 'wordpress-seo' ), 'off' => __( 'Disable', 'wordpress-seo' ), ], $name, $feature_help->get_button_html() . $feature_help->get_panel_html(), [ 'disabled' => $disabled, 'preserve_disabled_value' => $preserve_disabled_value, 'show_premium_upsell' => $show_premium_upsell, 'premium_upsell_url' => $premium_upsell_url, ] ); do_action( 'Yoast\WP\SEO\admin_network_integration_after', $integration ); } ?> </div> <?php /* * Required to prevent our settings framework from saving the default because the field isn't * explicitly set when saving the Dashboard page. */ $yform->hidden( 'show_onboarding_notice', 'wpseo_show_onboarding_notice' ); views/tabs/network/restore-site.php 0000644 00000001637 15150262017 0013467 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views * * @uses Yoast_Form $yform Form object. */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } echo '<p>' . esc_html__( 'Using this form you can reset a site to the default SEO settings.', 'wordpress-seo' ) . '</p>'; if ( get_blog_count() <= 100 ) { $network_admin = new Yoast_Network_Admin(); $yform->select( 'site_id', __( 'Site ID', 'wordpress-seo' ), $network_admin->get_site_choices( false, true ) ); } else { $yform->textinput( 'site_id', __( 'Site ID', 'wordpress-seo' ) ); } wp_nonce_field( 'wpseo-network-restore', 'restore_site_nonce', false ); echo '<button type="submit" name="action" value="' . esc_attr( Yoast_Network_Admin::RESTORE_SITE_ACTION ) . '" class="button button-primary">' . esc_html__( 'Restore site to defaults', 'wordpress-seo' ) . '</button>'; views/tabs/tool/import-seo.php 0000644 00000011116 15150262017 0012415 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } // Determine if we have plugins we can import from. If so, load that tab. Otherwise, load an empty tab. $import_check = new WPSEO_Import_Plugins_Detector(); $import_check->detect(); if ( count( $import_check->needs_import ) === 0 ) { echo '<h2>', esc_html__( 'Import from other SEO plugins', 'wordpress-seo' ), '</h2>'; echo '<p>'; printf( /* translators: %s expands to Yoast SEO */ esc_html__( '%s did not detect any plugin data from plugins it can import from.', 'wordpress-seo' ), 'Yoast SEO' ); echo '</p>'; return; } /** * Creates a select box given a name and plugins array. * * @param string $name Name field for the select field. * @param array $plugins An array of plugins and classes. * * @return void */ function wpseo_import_external_select( $name, $plugins ) { esc_html_e( 'Plugin: ', 'wordpress-seo' ); echo '<select name="', esc_attr( $name ), '">'; foreach ( $plugins as $class => $plugin ) { /* translators: %s is replaced with the name of the plugin we're importing from. */ echo '<option value="' . esc_attr( $class ) . '">' . esc_html( $plugin ) . '</option>'; } echo '</select>'; } ?> <h2><?php esc_html_e( 'Import from other SEO plugins', 'wordpress-seo' ); ?></h2> <p> <?php esc_html_e( 'We\'ve detected data from one or more SEO plugins on your site. Please follow the following steps to import that data:', 'wordpress-seo' ); ?> </p> <div class="tab-block"> <h3><?php esc_html_e( 'Step 1: Create a backup', 'wordpress-seo' ); ?></h3> <p> <?php esc_html_e( 'Please make a backup of your database before starting this process.', 'wordpress-seo' ); ?> </p> </div> <div class="tab-block"> <h3><?php esc_html_e( 'Step 2: Import', 'wordpress-seo' ); ?></h3> <p class="yoast-import-explanation"> <?php printf( /* translators: 1: expands to Yoast SEO */ esc_html__( 'This will import the post metadata like SEO titles and descriptions into your %1$s metadata. It will only do this when there is no existing %1$s metadata yet. The original data will remain in place.', 'wordpress-seo' ), 'Yoast SEO' ); ?> </p> <form action="<?php echo esc_url( admin_url( 'admin.php?page=wpseo_tools&tool=import-export#top#import-seo' ) ); ?>" method="post" accept-charset="<?php echo esc_attr( get_bloginfo( 'charset' ) ); ?>"> <?php wp_nonce_field( 'wpseo-import-plugins', '_wpnonce', true, true ); wpseo_import_external_select( 'import_external_plugin', $import_check->needs_import ); ?> <?php /** * WARNING: This hook is intended for internal use only. * Don't use it in your code as it will be removed shortly. */ do_action( 'wpseo_import_other_plugins_internal' ); ?> <input type="submit" class="button button-primary" name="import_external" value="<?php esc_attr_e( 'Import', 'wordpress-seo' ); ?>"/> </form> </div> <div class="tab-block"> <h3><?php esc_html_e( 'Step 3: Check your data', 'wordpress-seo' ); ?></h3> <p> <?php esc_html_e( 'Please check your posts and pages and see if the metadata was successfully imported.', 'wordpress-seo' ); ?> </p> </div> <div class="tab-block"> <h3><?php esc_html_e( 'Step 4: Go through the first time configuration', 'wordpress-seo' ); ?></h3> <p> <?php printf( /* translators: 1: Link start tag to the First time configuration tab in the General page, 2: Link closing tag. */ esc_html__( 'You should finish the %1$sfirst time configuration%2$s to make sure your SEO data has been optimized and you’ve set the essential Yoast SEO settings for your site.', 'wordpress-seo' ), '<a href="' . esc_url( admin_url( 'admin.php?page=wpseo_dashboard#top#first-time-configuration' ) ) . '">', '</a>' ); ?> </p> </div> <div class="tab-block"> <h3><?php esc_html_e( 'Step 5: Clean up', 'wordpress-seo' ); ?></h3> <p class="yoast-cleanup-explanation"> <?php esc_html_e( 'Once you\'re certain your site is OK, you can clean up. This will remove all the original data.', 'wordpress-seo' ); ?> </p> <form action="<?php echo esc_url( admin_url( 'admin.php?page=wpseo_tools&tool=import-export#top#import-seo' ) ); ?>" method="post" accept-charset="<?php echo esc_attr( get_bloginfo( 'charset' ) ); ?>"> <?php wp_nonce_field( 'wpseo-clean-plugins', '_wpnonce', true, true ); wpseo_import_external_select( 'clean_external_plugin', $import_check->needs_import ); ?> <input type="submit" class="button button-primary" name="clean_external" value="<?php esc_attr_e( 'Clean', 'wordpress-seo' ); ?>"/> </form> </div> views/tabs/tool/wpseo-export.php 0000644 00000002572 15150262017 0013001 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } /* translators: %1$s expands to Yoast SEO */ $submit_button_value = sprintf( __( 'Export your %1$s settings', 'wordpress-seo' ), 'Yoast SEO' ); // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: The nonce will be verified in WPSEO_Export below, We are only strictly comparing with '1'. if ( isset( $_POST['do_export'] ) && wp_unslash( $_POST['do_export'] ) === '1' ) { $export = new WPSEO_Export(); $export->export(); return; } $wpseo_export_phrase = sprintf( /* translators: %1$s expands to Yoast SEO */ __( 'Export your %1$s settings here, to copy them on another site.', 'wordpress-seo' ), 'Yoast SEO' ); ?> <p><?php echo esc_html( $wpseo_export_phrase ); ?></p> <form action="<?php echo esc_url( admin_url( 'admin.php?page=wpseo_tools&tool=import-export#top#wpseo-export' ) ); ?>" method="post" accept-charset="<?php echo esc_attr( get_bloginfo( 'charset' ) ); ?>"> <?php wp_nonce_field( WPSEO_Export::NONCE_ACTION ); ?> <input type="hidden" name="do_export" value="1" /> <button type="submit" class="button button-primary" id="export-button"><?php echo esc_html( $submit_button_value ); ?></button> </form> views/tabs/tool/wpseo-import.php 0000644 00000002672 15150262017 0012773 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } if ( ! defined( 'WPSEO_NAMESPACES' ) || ! WPSEO_NAMESPACES ) { esc_html_e( 'Import of settings is only supported on servers that run PHP 5.3 or higher.', 'wordpress-seo' ); return; } ?> <p id="settings-import-desc"> <?php printf( /* translators: 1: expands to Yoast SEO, 2: expands to Import settings. */ esc_html__( 'Import settings from another %1$s installation by pasting them here and clicking "%2$s".', 'wordpress-seo' ), 'Yoast SEO', esc_html__( 'Import settings', 'wordpress-seo' ) ); ?> </p> <form action="<?php echo esc_url( admin_url( 'admin.php?page=wpseo_tools&tool=import-export#top#wpseo-import' ) ); ?>" method="post" accept-charset="<?php echo esc_attr( get_bloginfo( 'charset' ) ); ?>"> <?php wp_nonce_field( WPSEO_Import_Settings::NONCE_ACTION ); ?> <label class="yoast-inline-label" for="settings-import"> <?php printf( /* translators: %s expands to Yoast SEO */ esc_html__( '%s settings to import:', 'wordpress-seo' ), 'Yoast SEO' ); ?> </label><br /> <textarea id="settings-import" rows="10" cols="140" name="settings_import" aria-describedby="settings-import-desc"></textarea><br/> <input type="submit" class="button button-primary" value="<?php esc_attr_e( 'Import settings', 'wordpress-seo' ); ?>"/> </form> views/class-yoast-feature-toggle.php 0000644 00000011043 15150262017 0013562 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Class representing a feature toggle. */ class Yoast_Feature_Toggle { /** * Feature toggle identifier. * * @var string */ protected $name = ''; /** * Name of the setting the feature toggle is associated with. * * @var string */ protected $setting = ''; /** * Whether the feature is premium or not. * * @var bool */ protected $premium = false; /** * Whether the feature is in beta or not. * * @var bool */ protected $in_beta = false; /** * The Premium version in which this feature has been added. * * @var string */ protected $premium_version = ''; /** * The languages in which this feature is supported. * E.g. for language specific analysis support. * * If empty, the feature is considered to have support in all languages. * * @var string[] */ protected $supported_languages = []; /** * Feature toggle label. * * @var string */ protected $label = ''; /** * URL to learn more about the feature. * * @var string */ protected $read_more_url = ''; /** * URL to learn more about the premium feature. * * @var string */ protected $premium_url = ''; /** * URL to buy premium. * * @var string */ protected $premium_upsell_url = ''; /** * Label for the learn more link. * * @var string */ protected $read_more_label = ''; /** * Additional help content for the feature. * * @var string */ protected $extra = ''; /** * Additional content to be rendered after the toggle. * * @var string */ protected $after = ''; /** * Value to specify the feature toggle order. * * @var string */ protected $order = 100; /** * Disable the integration toggle. * * @var bool */ protected $disabled = false; /** * Whether the feature is new or not. * * @var bool */ protected $new = false; /** * Constructor. * * Sets the feature toggle arguments. * * @param array $args { * Feature toggle arguments. * * @type string $name Required. Feature toggle identifier. * @type string $setting Required. Name of the setting the feature toggle is associated with. * @type string $disabled Whether the feature is premium or not. * @type string $label Feature toggle label. * @type string $read_more_url URL to learn more about the feature. Default empty string. * @type string $premium_upsell_url URL to buy premium. Default empty string. * @type string $read_more_label Label for the learn more link. Default empty string. * @type string $extra Additional help content for the feature. Default empty string. * @type int $order Value to specify the feature toggle order. A lower value indicates * a higher priority. Default 100. * @type bool $disabled Disable the integration toggle. Default false. * @type string $new Whether the feature is new or not. * @type bool $in_beta Whether the feature is in beta or not. * @type array $supported_languages The languages that this feature supports. * @type string $premium_version The Premium version in which this feature was added. * } * * @throws InvalidArgumentException Thrown when a required argument is missing. */ public function __construct( array $args ) { $required_keys = [ 'name', 'setting' ]; foreach ( $required_keys as $key ) { if ( empty( $args[ $key ] ) ) { /* translators: %s: argument name */ throw new InvalidArgumentException( sprintf( __( '%s is a required feature toggle argument.', 'wordpress-seo' ), $key ) ); } } foreach ( $args as $key => $value ) { if ( property_exists( $this, $key ) ) { $this->$key = $value; } } } /** * Magic isset-er. * * @param string $key Key to check whether a value for it is set. * * @return bool True if set, false otherwise. */ public function __isset( $key ) { return isset( $this->$key ); } /** * Magic getter. * * @param string $key Key to get the value for. * * @return mixed Value for the key, or null if not set. */ public function __get( $key ) { if ( isset( $this->$key ) ) { return $this->$key; } return null; } /** * Checks whether the feature for this toggle is enabled. * * @return bool True if the feature is enabled, false otherwise. */ public function is_enabled() { return (bool) WPSEO_Options::get( $this->setting ); } } views/class-yoast-feature-toggles.php 0000644 00000030470 15150262017 0013752 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Helpers\Language_Helper; use Yoast\WP\SEO\Presenters\Admin\Alert_Presenter; /** * Class for managing feature toggles. */ class Yoast_Feature_Toggles { /** * Available feature toggles. * * @var array */ protected $toggles; /** * Instance holder. * * @var self|null */ protected static $instance = null; /** * Gets the main feature toggles manager instance used. * * This essentially works like a Singleton, but for its drawbacks does not restrict * instantiation otherwise. * * @return self Main instance. */ public static function instance() { if ( self::$instance === null ) { self::$instance = new self(); } return self::$instance; } /** * Gets all available feature toggles. * * @return array List of sorted Yoast_Feature_Toggle instances. */ public function get_all() { if ( $this->toggles === null ) { $this->toggles = $this->load_toggles(); } return $this->toggles; } /** * Loads the available feature toggles. * * Also ensures that the toggles are all Yoast_Feature_Toggle instances and sorted by their order value. * * @return array List of sorted Yoast_Feature_Toggle instances. */ protected function load_toggles() { $xml_sitemap_extra = false; if ( WPSEO_Options::get( 'enable_xml_sitemap' ) ) { $xml_sitemap_extra = '<a href="' . esc_url( WPSEO_Sitemaps_Router::get_base_url( 'sitemap_index.xml' ) ) . '" target="_blank">' . esc_html__( 'See the XML sitemap.', 'wordpress-seo' ) . '</a>'; } $feature_toggles = [ (object) [ 'name' => __( 'SEO analysis', 'wordpress-seo' ), 'setting' => 'keyword_analysis_active', 'label' => __( 'The SEO analysis offers suggestions to improve the SEO of your text.', 'wordpress-seo' ), 'read_more_label' => __( 'Learn how the SEO analysis can help you rank.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/2ak', 'order' => 10, ], (object) [ 'name' => __( 'Readability analysis', 'wordpress-seo' ), 'setting' => 'content_analysis_active', 'label' => __( 'The readability analysis offers suggestions to improve the structure and style of your text.', 'wordpress-seo' ), 'read_more_label' => __( 'Discover why readability is important for SEO.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/2ao', 'order' => 20, ], (object) [ 'name' => __( 'Inclusive language analysis', 'wordpress-seo' ), 'supported_languages' => Language_Helper::$languages_with_inclusive_language_support, 'setting' => 'inclusive_language_analysis_active', 'label' => __( 'The inclusive language analysis offers suggestions to write more inclusive copy.', 'wordpress-seo' ), 'read_more_label' => __( 'Discover why inclusive language is important for SEO.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/inclusive-language-features-free', 'order' => 25, ], (object) [ 'name' => __( 'Cornerstone content', 'wordpress-seo' ), 'setting' => 'enable_cornerstone_content', 'label' => __( 'The cornerstone content feature lets you to mark and filter cornerstone content on your website.', 'wordpress-seo' ), 'read_more_label' => __( 'Find out how cornerstone content can help you improve your site structure.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/dashboard-help-cornerstone', 'order' => 30, ], (object) [ 'name' => __( 'Text link counter', 'wordpress-seo' ), 'setting' => 'enable_text_link_counter', 'label' => __( 'The text link counter helps you improve your site structure.', 'wordpress-seo' ), 'read_more_label' => __( 'Find out how the text link counter can enhance your SEO.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/2aj', 'order' => 40, ], (object) [ 'name' => __( 'Insights', 'wordpress-seo' ), 'setting' => 'enable_metabox_insights', 'label' => __( 'Find relevant data about your content right in the Insights section in the Yoast SEO metabox. You’ll see what words you use most often and if they’re a match with your keywords! ', 'wordpress-seo' ), 'read_more_label' => __( 'Find out how Insights can help you improve your content.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/4ew', 'premium_url' => 'https://yoa.st/2ai', 'order' => 41, ], (object) [ 'name' => __( 'Link suggestions', 'wordpress-seo' ), 'premium' => true, 'setting' => 'enable_link_suggestions', 'label' => __( 'Get relevant internal linking suggestions — while you’re writing! The link suggestions metabox shows a list of posts on your blog with similar content that might be interesting to link to. ', 'wordpress-seo' ), 'read_more_label' => __( 'Read more about how internal linking can improve your site structure.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/4ev', 'premium_url' => 'https://yoa.st/17g', 'premium_upsell_url' => 'https://yoa.st/get-link-suggestions', 'order' => 42, ], (object) [ 'name' => __( 'XML sitemaps', 'wordpress-seo' ), 'setting' => 'enable_xml_sitemap', /* translators: %s: Yoast SEO */ 'label' => sprintf( __( 'Enable the XML sitemaps that %s generates.', 'wordpress-seo' ), 'Yoast SEO' ), 'read_more_label' => __( 'Read why XML Sitemaps are important for your site.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/2a-', 'extra' => $xml_sitemap_extra, 'after' => $this->sitemaps_toggle_after(), 'order' => 60, ], (object) [ 'name' => __( 'Admin bar menu', 'wordpress-seo' ), 'setting' => 'enable_admin_bar_menu', /* translators: 1: Yoast SEO */ 'label' => sprintf( __( 'The %1$s admin bar menu contains useful links to third-party tools for analyzing pages and makes it easy to see if you have new notifications.', 'wordpress-seo' ), 'Yoast SEO' ), 'order' => 80, ], (object) [ 'name' => __( 'Security: no advanced or schema settings for authors', 'wordpress-seo' ), 'setting' => 'disableadvanced_meta', 'label' => sprintf( /* translators: 1: Yoast SEO, 2: translated version of "Off" */ __( 'The advanced section of the %1$s meta box allows a user to remove posts from the search results or change the canonical. The settings in the schema tab allows a user to change schema meta data for a post. These are things you might not want any author to do. That\'s why, by default, only editors and administrators can do this. Setting to "%2$s" allows all users to change these settings.', 'wordpress-seo' ), 'Yoast SEO', __( 'Off', 'wordpress-seo' ) ), 'order' => 90, ], (object) [ 'name' => __( 'Usage tracking', 'wordpress-seo' ), 'label' => __( 'Usage tracking', 'wordpress-seo' ), 'setting' => 'tracking', 'read_more_label' => sprintf( /* translators: 1: Yoast SEO */ __( 'Allow us to track some data about your site to improve our plugin.', 'wordpress-seo' ), 'Yoast SEO' ), 'read_more_url' => 'https://yoa.st/usage-tracking-2', 'order' => 95, ], (object) [ 'name' => __( 'REST API: Head endpoint', 'wordpress-seo' ), 'setting' => 'enable_headless_rest_endpoints', 'label' => sprintf( /* translators: 1: Yoast SEO */ __( 'This %1$s REST API endpoint gives you all the metadata you need for a specific URL. This will make it very easy for headless WordPress sites to use %1$s for all their SEO meta output.', 'wordpress-seo' ), 'Yoast SEO' ), 'order' => 100, ], (object) [ 'name' => __( 'Enhanced Slack sharing', 'wordpress-seo' ), 'setting' => 'enable_enhanced_slack_sharing', 'label' => __( 'This adds an author byline and reading time estimate to the article’s snippet when shared on Slack.', 'wordpress-seo' ), 'read_more_label' => __( 'Find out how a rich snippet can improve visibility and click-through-rate.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/help-slack-share', 'order' => 105, ], (object) [ 'name' => __( 'IndexNow', 'wordpress-seo' ), 'premium' => true, 'setting' => 'enable_index_now', 'label' => __( 'Automatically ping search engines like Bing and Yandex whenever you publish, update or delete a post.', 'wordpress-seo' ), 'read_more_label' => __( 'Find out how IndexNow can help your site.', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/index-now-read-more', 'premium_url' => 'https://yoa.st/index-now-feature', 'premium_upsell_url' => 'https://yoa.st/get-indexnow', 'order' => 110, ], (object) [ 'name' => __( 'AI title & description generator', 'wordpress-seo' ), 'premium' => true, 'setting' => 'enable_ai_generator', 'label' => __( 'Use the power of Yoast AI to automatically generate compelling titles and descriptions for your posts and pages.', 'wordpress-seo' ), 'read_more_label' => __( 'Learn more', 'wordpress-seo' ), 'read_more_url' => 'https://yoa.st/ai-generator-read-more', 'premium_url' => 'https://yoa.st/ai-generator-feature', 'premium_upsell_url' => 'https://yoa.st/get-ai-generator', 'order' => 115, ], ]; /** * Filter to add feature toggles from add-ons. * * @param array $feature_toggles Array with feature toggle objects where each object * should have a `name`, `setting` and `label` property. */ $feature_toggles = apply_filters( 'wpseo_feature_toggles', $feature_toggles ); $feature_toggles = array_map( [ $this, 'ensure_toggle' ], $feature_toggles ); usort( $feature_toggles, [ $this, 'sort_toggles_callback' ] ); return $feature_toggles; } /** * Returns html for a warning that core sitemaps are enabled when yoast seo sitemaps are disabled. * * @return string HTML string for the warning. */ protected function sitemaps_toggle_after() { $out = '<div id="yoast-seo-sitemaps-disabled-warning" style="display:none;">'; $alert = new Alert_Presenter( /* translators: %1$s: expands to an opening anchor tag, %2$s: expands to a closing anchor tag */ sprintf( esc_html__( 'Disabling Yoast SEO\'s XML sitemaps will not disable WordPress\' core sitemaps. In some cases, this %1$s may result in SEO errors on your site%2$s. These may be reported in Google Search Console and other tools.', 'wordpress-seo' ), '<a target="_blank" href="' . WPSEO_Shortlinker::get( 'https://yoa.st/44z' ) . '">', '</a>' ), 'warning' ); $out .= $alert->present(); $out .= '</div>'; return $out; } /** * Ensures that the passed value is a Yoast_Feature_Toggle. * * @param Yoast_Feature_Toggle|object|array $toggle_data Feature toggle instance, or raw object or array * containing feature toggle data. * @return Yoast_Feature_Toggle Feature toggle instance based on $toggle_data. */ protected function ensure_toggle( $toggle_data ) { if ( $toggle_data instanceof Yoast_Feature_Toggle ) { return $toggle_data; } if ( is_object( $toggle_data ) ) { $toggle_data = get_object_vars( $toggle_data ); } return new Yoast_Feature_Toggle( $toggle_data ); } /** * Callback for sorting feature toggles by their order. * * {@internal Once the minimum PHP version goes up to PHP 7.0, the logic in the function * can be replaced with the spaceship operator `<=>`.} * * @param Yoast_Feature_Toggle $feature_a Feature A. * @param Yoast_Feature_Toggle $feature_b Feature B. * * @return int An integer less than, equal to, or greater than zero indicating respectively * that feature A is considered to be less than, equal to, or greater than feature B. */ protected function sort_toggles_callback( Yoast_Feature_Toggle $feature_a, Yoast_Feature_Toggle $feature_b ) { return ( $feature_a->order - $feature_b->order ); } } views/class-yoast-input-select.php 0000644 00000005645 15150262017 0013277 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Class for generating a html select. */ class Yoast_Input_Select { /** * The id attribute value. * * @var string */ private $select_id; /** * The name attribute value. * * @var string */ private $select_name; /** * Additional select attributes. * * @var array */ private $select_attributes = []; /** * Array with the options to parse. * * @var array */ private $select_options; /** * The current selected option. * * @var string */ private $selected_option; /** * Constructor. * * @param string $select_id ID for the select. * @param string $select_name Name for the select. * @param array $select_options Array with the options to parse. * @param string $selected_option The current selected option. */ public function __construct( $select_id, $select_name, array $select_options, $selected_option ) { $this->select_id = $select_id; $this->select_name = $select_name; $this->select_options = $select_options; $this->selected_option = $selected_option; } /** * Print the rendered view. * * @return void */ public function output_html() { // Extract it, because we want each value accessible via a variable instead of accessing it as an array. extract( $this->get_select_values() ); require WPSEO_PATH . 'admin/views/form/select.php'; } /** * Return the rendered view. * * @return string */ public function get_html() { ob_start(); $this->output_html(); $rendered_output = ob_get_contents(); ob_end_clean(); return $rendered_output; } /** * Add an attribute to the attributes property. * * @param string $attribute The name of the attribute to add. * @param string $value The value of the attribute. * * @return void */ public function add_attribute( $attribute, $value ) { $this->select_attributes[ $attribute ] = $value; } /** * Return the set fields for the select. * * @return array */ private function get_select_values() { return [ 'id' => $this->select_id, 'name' => $this->select_name, 'attributes' => $this->get_attributes(), 'options' => $this->select_options, 'selected' => $this->selected_option, ]; } /** * Return the attribute string, when there are attributes set. * * @return string */ private function get_attributes() { $attributes = $this->select_attributes; if ( ! empty( $attributes ) ) { array_walk( $attributes, [ $this, 'parse_attribute' ] ); return implode( ' ', $attributes ) . ' '; } return ''; } /** * Get an attribute from the attributes. * * @param string $value The value of the attribute. * @param string $attribute The attribute to look for. * * @return void */ private function parse_attribute( &$value, $attribute ) { $value = sprintf( '%s="%s"', sanitize_key( $attribute ), esc_attr( $value ) ); } } views/class-yoast-integration-toggles.php 0000644 00000010606 15150262017 0014641 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Class for managing integration toggles. */ class Yoast_Integration_Toggles { /** * Available integration toggles. * * @var array */ protected $toggles; /** * Instance holder. * * @var self|null */ protected static $instance = null; /** * Gets the main integration toggles manager instance used. * * This essentially works like a Singleton, but for its drawbacks does not restrict * instantiation otherwise. * * @return self Main instance. */ public static function instance() { if ( self::$instance === null ) { self::$instance = new self(); } return self::$instance; } /** * Gets all available integration toggles. * * @return array List of sorted Yoast_Feature_Toggle instances. */ public function get_all() { if ( $this->toggles === null ) { $this->toggles = $this->load_toggles(); } return $this->toggles; } /** * Loads the available integration toggles. * * Also ensures that the toggles are all Yoast_Feature_Toggle instances and sorted by their order value. * * @return array List of sorted Yoast_Feature_Toggle instances. */ protected function load_toggles() { $integration_toggles = [ (object) [ /* translators: %s: 'Semrush' */ 'name' => sprintf( __( '%s integration', 'wordpress-seo' ), 'Semrush' ), 'setting' => 'semrush_integration_active', 'label' => sprintf( /* translators: %s: 'Semrush' */ __( 'The %s integration offers suggestions and insights for keywords related to the entered focus keyphrase.', 'wordpress-seo' ), 'Semrush' ), 'order' => 10, ], (object) [ /* translators: %s: Algolia. */ 'name' => sprintf( esc_html__( '%s integration', 'wordpress-seo' ), 'Algolia' ), 'premium' => true, 'setting' => 'algolia_integration_active', 'label' => __( 'Improve the quality of your site search! Automatically helps your users find your cornerstone and most important content in your internal search results. It also removes noindexed posts & pages from your site’s search results.', 'wordpress-seo' ), /* translators: %s: Algolia. */ 'read_more_label' => sprintf( __( 'Find out more about our %s integration.', 'wordpress-seo' ), 'Algolia' ), 'read_more_url' => 'https://yoa.st/4eu', 'premium_url' => 'https://yoa.st/4ex', 'premium_upsell_url' => 'https://yoa.st/get-algolia-integration', 'order' => 25, ], ]; /** * Filter to add integration toggles from add-ons. * * @param array $integration_toggles Array with integration toggle objects where each object * should have a `name`, `setting` and `label` property. */ $integration_toggles = apply_filters( 'wpseo_integration_toggles', $integration_toggles ); $integration_toggles = array_map( [ $this, 'ensure_toggle' ], $integration_toggles ); usort( $integration_toggles, [ $this, 'sort_toggles_callback' ] ); return $integration_toggles; } /** * Ensures that the passed value is a Yoast_Feature_Toggle. * * @param Yoast_Feature_Toggle|object|array $toggle_data Feature toggle instance, or raw object or array * containing integration toggle data. * @return Yoast_Feature_Toggle Feature toggle instance based on $toggle_data. */ protected function ensure_toggle( $toggle_data ) { if ( $toggle_data instanceof Yoast_Feature_Toggle ) { return $toggle_data; } if ( is_object( $toggle_data ) ) { $toggle_data = get_object_vars( $toggle_data ); } return new Yoast_Feature_Toggle( $toggle_data ); } /** * Callback for sorting integration toggles by their order. * * {@internal Once the minimum PHP version goes up to PHP 7.0, the logic in the function * can be replaced with the spaceship operator `<=>`.} * * @param Yoast_Feature_Toggle $feature_a Feature A. * @param Yoast_Feature_Toggle $feature_b Feature B. * * @return int An integer less than, equal to, or greater than zero indicating respectively * that feature A is considered to be less than, equal to, or greater than feature B. */ protected function sort_toggles_callback( Yoast_Feature_Toggle $feature_a, Yoast_Feature_Toggle $feature_b ) { return ( $feature_a->order - $feature_b->order ); } } views/interface-yoast-form-element.php 0000644 00000000373 15150262017 0014101 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generate the HTML for a form element. */ interface Yoast_Form_Element { /** * Return the HTML for the form element. * * @return string */ public function get_html(); } views/js-templates-primary-term.php 0000644 00000002526 15150262017 0013454 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } ?> <script type="text/html" id="tmpl-primary-term-ui"> <?php /* translators: Hidden accessibility text; %1$s expands to the term title, %2$s to the taxonomy title. */ $yoast_free_js_button_label = __( 'Make %1$s primary %2$s', 'wordpress-seo' ); $yoast_free_js_button_label = sprintf( $yoast_free_js_button_label, '{{data.term}}', '{{data.taxonomy.title}}' ); printf( '<button type="button" class="wpseo-make-primary-term" aria-label="%1$s">%2$s</button>', esc_attr( $yoast_free_js_button_label ), esc_html__( 'Make primary', 'wordpress-seo' ) ); ?> <span class="wpseo-is-primary-term" aria-hidden="true"><?php esc_html_e( 'Primary', 'wordpress-seo' ); ?></span> </script> <script type="text/html" id="tmpl-primary-term-screen-reader"> <?php /* translators: %s is the taxonomy title. This will be shown to screenreaders */ $yoast_free_js_taxonomy_title = __( 'Primary %s', 'wordpress-seo' ); $yoast_free_js_taxonomy_title = sprintf( '(' . $yoast_free_js_taxonomy_title . ')', '{{data.taxonomy.title}}' ); ?> <span class="screen-reader-text wpseo-primary-category-label"><?php echo esc_html( $yoast_free_js_taxonomy_title ); ?></span> </script> views/licenses.php 0000644 00000043677 15150262017 0010237 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * @since 5.1 */ use Yoast\WP\SEO\Promotions\Application\Promotion_Manager; if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } do_action( 'wpseo_install_and_activate_addons' ); $premium_extension = [ 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zz' ), 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zy' ), 'title' => 'Yoast SEO Premium', /* translators: %1$s expands to Yoast SEO */ 'desc' => sprintf( __( 'The premium version of %1$s with more features & support.', 'wordpress-seo' ), 'Yoast SEO' ), 'image' => plugin_dir_url( WPSEO_FILE ) . 'packages/js/images/Yoast_SEO_Icon.svg', 'benefits' => [], ]; $extensions = [ WPSEO_Addon_Manager::LOCAL_SLUG => [ 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zt' ), 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zs' ), 'title' => 'Local SEO', 'display_title' => __( 'Stand out for local searches', 'wordpress-seo' ), 'desc' => __( 'Rank better locally and in Google Maps, without breaking a sweat!', 'wordpress-seo' ), 'image' => plugins_url( 'images/local_plugin_assistant.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), 'benefits' => [ __( 'Attract more customers to your site and physical store', 'wordpress-seo' ), __( 'Automatically get technical SEO best practices for local businesses', 'wordpress-seo' ), __( 'Easily add maps, address finders, and opening hours to your content', 'wordpress-seo' ), __( 'Optimize your business for multiple locations', 'wordpress-seo' ), ], ], WPSEO_Addon_Manager::VIDEO_SLUG => [ 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zx/' ), 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zw/' ), 'title' => 'Video SEO', 'display_title' => __( 'Drive more views to your videos', 'wordpress-seo' ), 'desc' => __( 'Optimize your videos to show them off in search results and get more clicks!', 'wordpress-seo' ), 'image' => plugins_url( 'images/video_plugin_assistant.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), 'benefits' => [ __( 'Automatically get technical SEO best practices for video content', 'wordpress-seo' ), __( 'Make sure your videos load quickly for users', 'wordpress-seo' ), __( 'Make your videos responsive for all screen sizes', 'wordpress-seo' ), __( 'Optimize your video previews & thumbnails', 'wordpress-seo' ), ], ], WPSEO_Addon_Manager::NEWS_SLUG => [ 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zv/' ), 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zu/' ), 'title' => 'News SEO', 'display_title' => __( 'Rank higher in Google\'s news carousel', 'wordpress-seo' ), 'desc' => __( 'Are you in Google News? Increase your traffic from Google News by optimizing for it!', 'wordpress-seo' ), 'image' => plugins_url( 'images/news_plugin_assistant.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), 'benefits' => [ __( 'Optimize your site for Google News', 'wordpress-seo' ), __( 'Ping Google on the publication of a new post', 'wordpress-seo' ), __( 'Add all necessary schema.org markup', 'wordpress-seo' ), __( 'Get XML sitemaps', 'wordpress-seo' ), ], ], ]; // Add Yoast WooCommerce SEO when WooCommerce is active. if ( YoastSEO()->helpers->woocommerce->is_active() ) { $extensions[ WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ] = [ 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zr' ), 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zq' ), 'title' => 'Yoast WooCommerce SEO', 'display_title' => __( 'Drive more traffic to your online store', 'wordpress-seo' ), /* translators: %1$s expands to Yoast SEO */ 'desc' => sprintf( __( 'Seamlessly integrate WooCommerce with %1$s and get extra features!', 'wordpress-seo' ), 'Yoast SEO' ), 'image' => plugins_url( 'images/woo_plugin_assistant.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), 'benefits' => [ __( 'Write product pages that rank using the SEO analysis', 'wordpress-seo' ), __( 'Increase Google clicks with rich results', 'wordpress-seo' ), __( 'Add global identifiers for variable products', 'wordpress-seo' ), /* translators: %1$s expands to Yoast SEO, %2$s expands to WooCommerce */ sprintf( __( 'Seamless integration between %1$s and %2$s', 'wordpress-seo' ), 'Yoast SEO', 'WooCommerce' ), __( 'Turn more visitors into customers!', 'wordpress-seo' ), ], 'buy_button' => 'WooCommerce SEO', ]; } // The total number of plugins to consider is the length of the array + 1 for Premium. // @phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound $number_plugins_total = ( count( $extensions ) + 1 ); // @phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound $number_plugins_active = 0; $extensions['yoast-seo-plugin-subscription'] = [ 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/premium-page-bundle-buy' ), 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/premium-page-bundle-info' ), /* translators: used in phrases such as "More information about all the Yoast plugins" */ 'title' => __( 'all the Yoast plugins', 'wordpress-seo' ), 'display_title' => __( 'Cover all your SEO bases', 'wordpress-seo' ), 'desc' => '', 'image' => plugins_url( 'images/plugin_subscription.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), 'benefits' => [ __( 'Get all 5 Yoast plugins for WordPress at a big discount', 'wordpress-seo' ), __( 'Reach new customers who live near your business', 'wordpress-seo' ), __( 'Drive more views to your videos', 'wordpress-seo' ), __( 'Rank higher in Google\'s news carousel', 'wordpress-seo' ), __( 'Drive more traffic to your online store', 'wordpress-seo' ), ], /* translators: used in phrases such as "Buy all the Yoast plugins" */ 'buy_button' => __( 'all the Yoast plugins', 'wordpress-seo' ), ]; $addon_manager = new WPSEO_Addon_Manager(); $has_valid_premium_subscription = YoastSEO()->helpers->product->is_premium() && $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ); /* translators: %1$s expands to Yoast SEO. */ $wpseo_extensions_header = sprintf( __( '%1$s Extensions', 'wordpress-seo' ), 'Yoast SEO' ); $new_tab_message = sprintf( '<span class="screen-reader-text">%1$s</span>', /* translators: Hidden accessibility text. */ esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) ); $sale_badge = ''; $premium_sale_badge = ''; if ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ) { /* translators: %1$s expands to opening span, %2$s expands to closing span */ $sale_badge_span = sprintf( esc_html__( '%1$sSALE 30%% OFF!%2$s', 'wordpress-seo' ), '<span>', '</span>' ); $sale_badge = '<div class="yoast-seo-premium-extension-sale-badge">' . $sale_badge_span . '</div>'; $premium_sale_badge = ( $has_valid_premium_subscription ) ? '' : $sale_badge; } ?> <div class="wrap yoast wpseo_table_page"> <h1 id="wpseo-title" class="yoast-h1"><?php echo esc_html( $wpseo_extensions_header ); ?></h1> <div id="extensions"> <section class="yoast-seo-premium-extension"> <?php echo $premium_sale_badge; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: Output is already escaped ?> <h2> <?php esc_html_e( 'Rank higher in search results', 'wordpress-seo' ); ?> <img alt="" width="100" height="100" src="<?php echo esc_url( $premium_extension['image'] ); ?>"/> </h2> <?php if ( ! $has_valid_premium_subscription ) : ?> <ul class="yoast-seo-premium-benefits yoast-list--usp"> <li class="yoast-seo-premium-benefits__item"> <?php printf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sAI%2$s: Better SEO titles and meta descriptions, faster.', 'wordpress-seo' ), '<strong>', '</strong>' ); ?> </li> <li class="yoast-seo-premium-benefits__item"> <?php printf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sMultiple keywords%2$s: Rank higher for more searches.', 'wordpress-seo' ), '<strong>', '</strong>' ); ?> </li> <li class="yoast-seo-premium-benefits__item"> <?php printf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sSuper fast%2$s internal linking suggestions.', 'wordpress-seo' ), '<strong>', '</strong>' ); ?> </li> <li class="yoast-seo-premium-benefits__item"> <?php printf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sNo more broken links%2$s: Automatic redirect manager.', 'wordpress-seo' ), '<strong>', '</strong>' ); ?> </li> <li class="yoast-seo-premium-benefits__item"> <?php printf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sAppealing social previews%2$s people actually want to click on.', 'wordpress-seo' ), '<strong>', '</strong>' ); ?> </li> <li class="yoast-seo-premium-benefits__item"> <?php printf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$s24/7 support%2$s: Also on evenings and weekends.', 'wordpress-seo' ), '<strong>', '</strong>' ); ?> </li> </ul> <?php endif; ?> <?php if ( $addon_manager->is_installed( WPSEO_Addon_Manager::PREMIUM_SLUG ) ) : ?> <div class="yoast-button yoast-button--noarrow yoast-button--extension yoast-button--extension-installed"><?php esc_html_e( 'Installed', 'wordpress-seo' ); ?></div> <?php if ( $has_valid_premium_subscription ) : ++$number_plugins_active; ?> <div class="yoast-button yoast-button--noarrow yoast-button--extension yoast-button--extension-activated"><?php esc_html_e( 'Activated', 'wordpress-seo' ); ?></div> <a target="_blank" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/13k' ); ?>" class="yoast-link--license"> <?php printf( /* translators: %s expands to the extension title */ esc_html__( 'Manage your %s subscription on MyYoast', 'wordpress-seo' ), esc_html( $premium_extension['title'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped. echo $new_tab_message; ?> </a> <?php else : ?> <div class="yoast-button yoast-button--noarrow yoast-button--extension yoast-button--extension-not-activated"><?php esc_html_e( 'Not activated', 'wordpress-seo' ); ?></div> <a target="_blank" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/13i' ); ?>" class="yoast-link--license"> <?php printf( /* translators: %s expands to the extension title */ esc_html__( 'Activate %s for your site on MyYoast', 'wordpress-seo' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `get_title` value is hardcoded; only passed through the WPSEO_Extensions class. esc_html( $premium_extension['title'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped. echo $new_tab_message; ?> </a> <?php endif; ?> <?php else : ?> <a target="_blank" data-action="load-nfd-ctb" data-ctb-id="f6a84663-465f-4cb5-8ba5-f7a6d72224b2" href="<?php echo esc_url( $premium_extension['buyUrl'] ); ?>" class="yoast-button-upsell"> <?php printf( /* translators: $s expands to Yoast SEO Premium */ esc_html__( 'Buy %s', 'wordpress-seo' ), esc_html( $premium_extension['title'] ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped. echo $new_tab_message; echo '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>'; ?> </a> <a target="_blank" href="<?php echo esc_url( $premium_extension['infoUrl'] ); ?>" class="yoast-link--more-info"> <?php esc_html_e( 'Explore now', 'wordpress-seo' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped. echo $new_tab_message; ?> </a> <?php endif; ?> <?php if ( ! $has_valid_premium_subscription ) { ?> <p> <small class="yoast-money-back-guarantee"><?php esc_html_e( 'With a 30-day money-back guarantee. No questions asked.', 'wordpress-seo' ); ?></small> </p> <?php } ?> </section> <hr class="yoast-hr" aria-hidden="true"/> <section class="yoast-promo-extensions"> <h2> <?php printf( /* translators: %1$s expands to a span opening tag, %2$s expands to a span closing tag, %3$s expands to Yoast SEO */ esc_html__( '%1$sOutrank your competitors even further%2$s with these %3$s plugins', 'wordpress-seo' ), '<span class="yoast-heading-highlight">', '</span>', 'Yoast SEO' ); ?> </h2> <?php foreach ( $extensions as $slug => $extension ) : // Skip the "All the plugins" card if the user has already all the plugins active. if ( $slug === 'yoast-seo-plugin-subscription' && $number_plugins_active === $number_plugins_total ) { continue; } ?> <section class="yoast-promoblock secondary yoast-promo-extension"> <?php if ( ! $addon_manager->has_valid_subscription( $slug ) || ! $addon_manager->is_installed( $slug ) ) : ?> <?php echo $sale_badge; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: Output already escaped ?> <?php endif; ?> <h3> <img alt="" width="100" height="100" src="<?php echo esc_url( $extension['image'] ); ?>"/> <?php echo esc_html( $extension['display_title'] ); ?> </h3> <ul class="yoast-list--usp"> <?php foreach ( $extension['benefits'] as $benefit ) : ?> <li><?php echo esc_html( $benefit ); ?></li> <?php endforeach; ?> </ul> <div class="yoast-button-container"> <?php if ( $addon_manager->is_installed( $slug ) ) : ?> <div class="yoast-button yoast-button--noarrow yoast-button--extension yoast-button--extension-installed"><?php esc_html_e( 'Installed', 'wordpress-seo' ); ?></div> <?php if ( $addon_manager->has_valid_subscription( $slug ) ) : ++$number_plugins_active; ?> <div class="yoast-button yoast-button--noarrow yoast-button--extension yoast-button--extension-activated"><?php esc_html_e( 'Activated', 'wordpress-seo' ); ?></div> <a target="_blank" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/13k' ); ?>" class="yoast-link--license"> <?php printf( /* translators: %s expands to the extension title */ esc_html__( 'Manage your %s subscription on MyYoast', 'wordpress-seo' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `get_title` value is hardcoded; only passed through the WPSEO_Extensions class. $extension['title'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped. echo $new_tab_message; ?> </a> <?php else : ?> <div class="yoast-button yoast-button--noarrow yoast-button--extension yoast-button--extension-not-activated"><?php esc_html_e( 'Not activated', 'wordpress-seo' ); ?></div> <a target="_blank" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/13i' ); ?>" class="yoast-link--license"> <?php printf( /* translators: %s expands to the extension title */ esc_html__( 'Activate %s for your site on MyYoast', 'wordpress-seo' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The `get_title` value is hardcoded; only passed through the WPSEO_Extensions class. $extension['title'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped. echo $new_tab_message; ?> </a> <?php endif; ?> <?php else : ?> <a target="_blank" class="yoast-button-upsell" href="<?php echo esc_url( $extension['buyUrl'] ); ?>"> <?php printf( /* translators: %s expands to the product name, e.g. "News SEO" or "all the Yoast Plugins" */ esc_html__( 'Buy %s', 'wordpress-seo' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: The possible `get_buy_button` values are hardcoded (buy_button or title); only passed through the WPSEO_Extensions class. ( isset( $extension['buy_button'] ) ) ? $extension['buy_button'] : $extension['title'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped. echo $new_tab_message; echo '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>'; ?> </a> <?php if ( $slug === 'yoast-seo-plugin-subscription' ) : ?> <p class="yoast-subscription-discount"> <?php esc_html_e( 'Only $/€/£229 per year (ex VAT). Save over 40% with this subscription!', 'wordpress-seo' ); ?> </p> <?php endif; ?> <a target="_blank" class="yoast-link--more-info" href="<?php echo esc_url( $extension['infoUrl'] ); ?>"> <?php esc_html_e( 'Explore now', 'wordpress-seo' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped. echo $new_tab_message; ?> </a> <?php endif; ?> </div> </section> <?php endforeach; ?> </section> </div> </div> views/paper-collapsible.php 0000644 00000006023 15150262017 0012010 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Views * * @uses string $paper_id The ID of the paper. * @uses string $paper_id_prefix The ID prefix of the paper. * @uses bool $collapsible Whether the collapsible should be rendered. * @uses array $collapsible_config Configuration for the collapsible. * @uses string $collapsible_header_class Class for the collapsible header. * @uses string $title The title. * @uses string $title_after Additional content to render after the title. * @uses string $view_file Path to the view file. * @uses WPSEO_Admin_Help_Panel $help_text The help text. */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } ?> <div class="<?php echo esc_attr( 'paper tab-block ' . $class ); ?>"<?php echo ( $paper_id ) ? ' id="' . esc_attr( $paper_id_prefix . $paper_id ) . '"' : ''; ?>> <?php if ( ! empty( $title ) ) { if ( ! empty( $collapsible ) ) { $button_id_attr = ''; if ( ! empty( $paper_id ) ) { $button_id_attr = sprintf( ' id="%s"', esc_attr( $paper_id_prefix . $paper_id . '-button' ) ); } printf( '<h2 class="%1$s"><button%2$s type="button" class="toggleable-container-trigger" aria-expanded="%3$s">%4$s%5$s <span class="toggleable-container-icon dashicons %6$s" aria-hidden="true"></span></button></h2>', esc_attr( 'collapsible-header ' . $collapsible_header_class ), // phpcs:ignore WordPress.Security.EscapeOutput -- $button_id_attr is escaped above. $button_id_attr, esc_attr( $collapsible_config['expanded'] ), // phpcs:ignore WordPress.Security.EscapeOutput -- $help_text is an instance of WPSEO_Admin_Help_Panel, which escapes it's own output. $help_text->get_button_html(), esc_html( $title ) . wp_kses_post( $title_after ), wp_kses_post( $collapsible_config['toggle_icon'] ) ); } else { echo '<div class="paper-title"><h2 class="help-button-inline">', esc_html( $title ), wp_kses_post( $title_after ), // phpcs:ignore WordPress.Security.EscapeOutput -- $help_text is an instance of WPSEO_Admin_Help_Panel, which escapes it's own output. $help_text->get_button_html(), '</h2></div>'; } } ?> <?php // phpcs:ignore WordPress.Security.EscapeOutput -- $help_text is an instance of WPSEO_Admin_Help_Panel, which escapes it's own output. echo $help_text->get_panel_html(); $container_id_attr = ''; if ( ! empty( $paper_id ) ) { $container_id_attr = sprintf( ' id="%s"', esc_attr( $paper_id_prefix . $paper_id . '-container' ) ); } printf( '<div%1$s class="%2$s">%3$s</div>', // phpcs:ignore WordPress.Security.EscapeOutput -- $container_id_attr is escaped above. $container_id_attr, esc_attr( 'paper-container ' . $collapsible_config['class'] ), $content ); ?> </div> views/partial-notifications-errors.php 0000644 00000002163 15150262017 0014230 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * * @uses array $notifications_data */ $yoast_seo_type = 'errors'; $yoast_seo_dashicon = 'warning'; $yoast_seo_active = $notifications_data['errors']['active']; $yoast_seo_dismissed = $notifications_data['errors']['dismissed']; $yoast_seo_active_total = count( $yoast_seo_active ); $yoast_seo_dismissed_total = count( $yoast_seo_dismissed ); $yoast_seo_total = $notifications_data['metrics']['errors']; $yoast_seo_i18n_title = __( 'Problems', 'wordpress-seo' ); $yoast_seo_i18n_issues = __( 'We have detected the following issues that affect the SEO of your site.', 'wordpress-seo' ); $yoast_seo_i18n_no_issues = __( 'Good job! We could detect no serious SEO problems.', 'wordpress-seo' ); $yoast_seo_i18n_muted_issues_title = sprintf( /* translators: %d expands the amount of hidden problems. */ _n( 'You have %d hidden problem:', 'You have %d hidden problems:', $yoast_seo_dismissed_total, 'wordpress-seo' ), $yoast_seo_dismissed_total ); require WPSEO_PATH . 'admin/views/partial-notifications-template.php'; views/partial-notifications-template.php 0000644 00000007631 15150262017 0014534 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * * @uses string $yoast_seo_type * @uses string $yoast_seo_dashicon * @uses string $yoast_seo_i18n_title * @uses string $yoast_seo_i18n_issues * @uses string $yoast_seo_i18n_no_issues * @uses string $yoast_seo_i18n_muted_issues_title * @uses int $yoast_seo_active_total * @uses int $yoast_seo_dismissed_total * @uses int $yoast_seo_total * @uses array $yoast_seo_active * @uses array $yoast_seo_dismissed */ if ( ! function_exists( '_yoast_display_notifications' ) ) { /** * Create the notifications HTML with restore/dismiss button. * * @param array $notifications_list List of notifications. * @param string $status Status of the notifications (active/dismissed). * * @return string The output to render. */ function _yoast_display_notifications( $notifications_list, $status ) { $notifications = ''; foreach ( $notifications_list as $notification ) { switch ( $status ) { case 'active': $button = sprintf( '<button type="button" class="button dismiss"><span class="screen-reader-text">%1$s</span><span class="dashicons dashicons-hidden"></span></button>', /* translators: Hidden accessibility text. */ esc_html__( 'Hide this item.', 'wordpress-seo' ) ); break; case 'dismissed': $button = sprintf( '<button type="button" class="button restore"><span class="screen-reader-text">%1$s</span><span class="dashicons yoast-svg-icon-eye"></span></button>', /* translators: Hidden accessibility text. */ esc_html__( 'Show this item.', 'wordpress-seo' ) ); break; } $notifications .= sprintf( '<div class="yoast-notification-holder" id="%1$s" data-nonce="%2$s" data-json="%3$s">%4$s%5$s</div>', esc_attr( $notification->get_id() ), esc_attr( $notification->get_nonce() ), esc_attr( $notification->get_json() ), // This needs to be fixed in https://github.com/Yoast/wordpress-seo-premium/issues/2548. $notification, // Note: $button is properly escaped above. $button ); } return $notifications; } } $wpseo_i18n_summary = $yoast_seo_i18n_issues; if ( ! $yoast_seo_active ) { $yoast_seo_dashicon = 'yes'; $wpseo_i18n_summary = $yoast_seo_i18n_no_issues; } ?> <h3 class="yoast-notifications-header" id="<?php echo esc_attr( 'yoast-' . $yoast_seo_type . '-header' ); ?>"> <span class="dashicons <?php echo esc_attr( 'dashicons-' . $yoast_seo_dashicon ); ?>"></span> <?php echo esc_html( $yoast_seo_i18n_title ); ?> (<?php echo (int) $yoast_seo_active_total; ?>) </h3> <div id="<?php echo esc_attr( 'yoast-' . $yoast_seo_type ); ?>"> <?php if ( $yoast_seo_total ) : ?> <p><?php echo esc_html( $wpseo_i18n_summary ); ?></p> <div class="container yoast-notifications-active" id="<?php echo esc_attr( 'yoast-' . $yoast_seo_type . '-active' ); ?>"> <?php // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: _yoast_display_notifications() as declared above is safe. echo _yoast_display_notifications( $yoast_seo_active, 'active' ); ?> </div> <?php if ( $yoast_seo_dismissed ) { $dismissed_paper = new WPSEO_Paper_Presenter( esc_html( $yoast_seo_i18n_muted_issues_title ), null, [ 'paper_id' => esc_attr( $yoast_seo_type . '-dismissed' ), 'paper_id_prefix' => 'yoast-', 'class' => 'yoast-notifications-dismissed', 'content' => _yoast_display_notifications( $yoast_seo_dismissed, 'dismissed' ), 'collapsible' => true, 'collapsible_header_class' => 'yoast-notification', ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: get_output() output is properly escaped. echo $dismissed_paper->get_output(); } ?> <?php else : ?> <p><?php echo esc_html( $yoast_seo_i18n_no_issues ); ?></p> <?php endif; ?> </div> views/partial-notifications-warnings.php 0000644 00000002101 15150262017 0014534 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * * @uses array $notifications_data */ $yoast_seo_type = 'warnings'; $yoast_seo_dashicon = 'flag'; $yoast_seo_active = $notifications_data['warnings']['active']; $yoast_seo_dismissed = $notifications_data['warnings']['dismissed']; $yoast_seo_active_total = count( $notifications_data['warnings']['active'] ); $yoast_seo_dismissed_total = count( $notifications_data['warnings']['dismissed'] ); $yoast_seo_total = $notifications_data['metrics']['warnings']; $yoast_seo_i18n_title = __( 'Notifications', 'wordpress-seo' ); $yoast_seo_i18n_issues = ''; $yoast_seo_i18n_no_issues = __( 'No new notifications.', 'wordpress-seo' ); $yoast_seo_i18n_muted_issues_title = sprintf( /* translators: %d expands the amount of hidden notifications. */ _n( 'You have %d hidden notification:', 'You have %d hidden notifications:', $yoast_seo_dismissed_total, 'wordpress-seo' ), $yoast_seo_dismissed_total ); require WPSEO_PATH . 'admin/views/partial-notifications-template.php'; views/redirects.php 0000644 00000020712 15150262017 0010377 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * @since 19.0 */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } ?> <div class="wrap yoast wpseo-admin-page page-wpseo_redirects"> <h1 id="wpseo-title"><?php echo esc_html( get_admin_page_title() ); ?></h1> <div class="wpseo_content_wrapper" style="position: relative;"> <div style="position: absolute;top: 0;bottom: 0;left: 0;right: 0;z-index: 100; display: flex;justify-content: center;align-items: center;background: radial-gradient(#ffffffcf 20%, #ffffff00 50%);"> <a class="yoast-button-upsell" data-action="load-nfd-ctb" data-ctb-id="f6a84663-465f-4cb5-8ba5-f7a6d72224b2" href="<?php echo esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/redirect-manager-upsell' ) ); ?>" target="_blank"> <?php echo esc_html__( 'Unlock with Premium', 'wordpress-seo' ) // phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly. . WPSEO_Admin_Utils::get_new_tab_message(); ?> <span aria-hidden="true" class="yoast-button-upsell__caret"></span></a> </div> <div class="wpseo_content_cell" id="wpseo_content_top" style="opacity: 0.5;"> <h2 class="nav-tab-wrapper" id="wpseo-tabs"> <a class="nav-tab nav-tab-active" id="tab-url-tab" href="#" tabindex="-1"> <?php esc_html_e( 'Redirects', 'wordpress-seo' ) ?> </a> <a class="nav-tab" id="tab-url-tab" href="" tabindex="-1"> <?php esc_html_e( 'Regex Redirects', 'wordpress-seo' ) ?> </a> <a class="nav-tab" id="tab-url-tab" href="#" tabindex="-1"> <?php esc_html_e( 'Settings', 'wordpress-seo' ) ?> </a> </h2> <div id="table-plain" class="tab-url redirect-table-tab"> <h2> <?php esc_html_e( 'Plain redirects', 'wordpress-seo' ) ?> </h2> <form class="wpseo-new-redirect-form" method="post"> <div class="wpseo_redirect_form"> <div class="redirect_form_row" id="row-wpseo_redirects_type"> <label class="textinput" for="wpseo_redirects_type"> <span class="title"> <?php esc_html_e( 'Type', 'wordpress-seo' ) ?> </span> </label> <select name="wpseo_redirects_type" id="wpseo_redirects_type" class="select select2-hidden-accessible" data-select2-id="wpseo_redirects_type" tabindex="-1" aria-hidden="true"> <option value="301" data-select2-id="2"> <?php esc_html_e( '301 Moved Permanently', 'wordpress-seo' ) ?> </option> </select> <span class="select2 select2-container select2-container--default" dir="ltr" data-select2-id="1" style="width: 400px;"> <span class="selection"> <span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="-1" aria-disabled="false" aria-labelledby="select2-wpseo_redirects_type-container"> <span class="select2-selection__rendered" id="select2-wpseo_redirects_type-container" role="textbox" aria-readonly="true" title="301 Moved Permanently"> <?php esc_html_e( '301 Moved Permanently', 'wordpress-seo' ) ?> </span> <span class="select2-selection__arrow" role="presentation"> <b role="presentation"></b> </span> </span> </span> <span class="dropdown-wrapper" aria-hidden="true"></span> </span> </div> <p class="label desc description wpseo-redirect-clear"> <?php printf( /* translators: 1: opens a link. 2: closes the link. */ esc_html__( 'The redirect type is the HTTP response code sent to the browser telling the browser what type of redirect is served. %1$sLearn more about redirect types%2$s.', 'wordpress-seo' ), '<a href="#" target="_blank">', '</a>' ); ?> <div class="redirect_form_row" id="row-wpseo_redirects_origin"> <label class="textinput" for="wpseo_redirects_origin"> <span class="title"> <?php esc_html_e( 'Old URL', 'wordpress-seo' ) ?> </span> </label> <input type="text" class="textinput" name="wpseo_redirects_origin" id="wpseo_redirects_origin" value="" tabindex="-1"> </div> <br class="clear"> <div class="redirect_form_row wpseo_redirect_target_holder" id="row-wpseo_redirects_target"> <label class="textinput" for="wpseo_redirects_target"> <span class="title"> <?php esc_html_e( 'URL', 'wordpress-seo' ) ?> </span> </label> <input type="text" class="textinput" name="wpseo_redirects_target" id="wpseo_redirects_target" value="" tabindex="-1"> </div> <br class="clear"> <button type="button" class="button button-primary" tabindex="-1"> <?php esc_html_e( 'Add Redirect', 'wordpress-seo' ) ?> </button> </div> </form> <p class="desc"> </p> <form id="plain" class="wpseo-redirects-table-form" method="post" action=""> <input type="hidden" class="wpseo_redirects_ajax_nonce" name="wpseo_redirects_ajax_nonce" value="6ccb86df42"> <input type="hidden" id="_wpnonce" name="_wpnonce" value="4b02cca185"> <input type="hidden" name="_wp_http_referer" value="/wp-admin/admin.php?page=wpseo_redirects"> <div class="tablenav top"> <div class="alignleft actions"> <select name="redirect-type" id="filter-by-redirect" tabindex="-1"> <option selected="selected" value="0"> <?php esc_html_e( 'All redirect types', 'wordpress-seo' ) ?> </option> </select> <input type="button" name="filter_action" id="post-query-submit" class="button" value="<?php esc_attr_e( 'Filter', 'wordpress-seo' ); ?>" tabindex="-1"> </div> <br class="clear"> </div> <table class="wp-list-table widefat fixed striped table-view-list plain"> <thead> <tr> <td id="cb" class="manage-column column-cb check-column"> <input id="cb-select-all-1" type="checkbox" tabindex="-1"> </td> <th scope="col" id="type" class="manage-column column-type column-primary sortable desc"> <a href="#" tabindex="-1"> <span> <?php esc_html_e( 'Type', 'wordpress-seo' ) ?> </span> <span class="sorting-indicator"></span> </a> </th> <th scope="col" id="old" class="manage-column column-old sortable desc"> <a href="#" tabindex="-1"> <span> <?php esc_html_e( 'Old URL', 'wordpress-seo' ) ?> </span> <span class="sorting-indicator"></span> </a> </th> <th scope="col" id="new" class="manage-column column-new sortable desc"> <a href="#" tabindex="-1"> <span> <?php esc_html_e( 'New URL', 'wordpress-seo' ) ?> </span> <span class="sorting-indicator"></span> </a> </th> </tr> </thead> <tbody id="the-list"> <tr class="no-items"> <td class="colspanchange" colspan="4"> <?php esc_html_e( 'No items found.', 'wordpress-seo' ) ?> </td> </tr> </tbody> <tfoot> <tr> <td class="manage-column column-cb check-column"> <input id="cb-select-all-2" type="checkbox" tabindex="-1"> </td> <th scope="col" class="manage-column column-type column-primary sortable desc"> <a href="#" tabindex="-1"> <span> <?php esc_html_e( 'Type', 'wordpress-seo' ) ?> </span> <span class="sorting-indicator"></span></a> </th> <th scope="col" class="manage-column column-old sortable desc"> <a href="#" tabindex="-1"> <span> <?php esc_html_e( 'Old URL', 'wordpress-seo' ) ?> </span> <span class="sorting-indicator"></span> </a> </th> <th scope="col" class="manage-column column-new sortable desc"> <a href="#" tabindex="-1"> <span> <?php esc_html_e( 'New URL', 'wordpress-seo' ) ?> </span> <span class="sorting-indicator"></span></a> </th> </tr> </tfoot> </table> </form> </div> <br class="clear"> </div><!-- end of div wpseo_content_top --></div><!-- end of div wpseo_content_wrapper --> </div> views/tool-bulk-editor.php 0000644 00000006206 15150262017 0011611 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * @since 1.5.0 */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } /** * Sanitizes the parameters that have been sent. * * @return array The sanitized fields. */ function yoast_free_bulk_sanitize_input_fields() { $possible_params = [ 'type', 'paged', 'post_type_filter', 'post_status', 'order', 'orderby', ]; $input_get = []; foreach ( $possible_params as $param_name ) { if ( isset( $_GET[ $param_name ] ) ) { $input_get[ $param_name ] = sanitize_text_field( wp_unslash( $_GET[ $param_name ] ) ); } } return $input_get; } $yoast_free_input_fields = yoast_free_bulk_sanitize_input_fields(); // Verifies the nonce. if ( ! empty( $yoast_free_input_fields ) ) { check_admin_referer( 'bulk-editor-table', 'nonce' ); } // If type is empty, fill it with value of first tab (title). if ( ! isset( $yoast_free_input_fields['type'] ) ) { $yoast_free_input_fields['type'] = 'title'; } $yoast_bulk_editor_arguments = [ 'input_fields' => $yoast_free_input_fields, 'nonce' => wp_create_nonce( 'bulk-editor-table' ), ]; $wpseo_bulk_titles_table = new WPSEO_Bulk_Title_Editor_List_Table( $yoast_bulk_editor_arguments ); $wpseo_bulk_description_table = new WPSEO_Bulk_Description_List_Table( $yoast_bulk_editor_arguments ); $yoast_free_screen_reader_content = [ 'heading_views' => __( 'Filter posts list', 'wordpress-seo' ), 'heading_pagination' => __( 'Posts list navigation', 'wordpress-seo' ), 'heading_list' => __( 'Posts list', 'wordpress-seo' ), ]; get_current_screen()->set_screen_reader_content( $yoast_free_screen_reader_content ); if ( ! empty( $_REQUEST['_wp_http_referer'] ) && isset( $_SERVER['REQUEST_URI'] ) ) { $request_uri = sanitize_file_name( wp_unslash( $_SERVER['REQUEST_URI'] ) ); wp_redirect( remove_query_arg( [ '_wp_http_referer', '_wpnonce' ], $request_uri ) ); exit; } /** * Renders a bulk editor tab. * * @param WPSEO_Bulk_List_Table $table The table to render. * @param string $id The id for the tab. * * @return void */ function wpseo_get_rendered_tab( $table, $id ) { ?> <div id="<?php echo esc_attr( $id ); ?>" class="wpseotab"> <?php $table->show_page(); ?> </div> <?php } ?> <script> <?php /* phpcs:ignore WordPress.Security.EscapeOutput -- WPSEO_Utils::format_json_encode is safe. */ ?> var wpseoBulkEditorNonce = <?php echo WPSEO_Utils::format_json_encode( wp_create_nonce( 'wpseo-bulk-editor' ) ); ?>; // eslint-disable-next-line var wpseo_bulk_editor_nonce = wpseoBulkEditorNonce; </script> <br/><br/> <div class="wpseo_table_page"> <h2 class="nav-tab-wrapper" id="wpseo-tabs"> <a class="nav-tab" id="title-tab" href="#top#title"><?php esc_html_e( 'Title', 'wordpress-seo' ); ?></a> <a class="nav-tab" id="description-tab" href="#top#description"><?php esc_html_e( 'Description', 'wordpress-seo' ); ?></a> </h2> <div class="tabwrapper"> <?php wpseo_get_rendered_tab( $wpseo_bulk_titles_table, 'title' ); ?> <?php wpseo_get_rendered_tab( $wpseo_bulk_description_table, 'description' ); ?> </div> </div> views/tool-file-editor.php 0000644 00000015356 15150262017 0011601 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } $yform = Yoast_Form::get_instance(); $home_path = get_home_path(); if ( ! is_writable( $home_path ) && ! empty( $_SERVER['DOCUMENT_ROOT'] ) ) { $home_path = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR; } $robots_file = $home_path . 'robots.txt'; $ht_access_file = $home_path . '.htaccess'; if ( isset( $_POST['create_robots'] ) ) { if ( ! current_user_can( 'edit_files' ) ) { $die_msg = sprintf( /* translators: %s expands to robots.txt. */ __( 'You cannot create a %s file.', 'wordpress-seo' ), 'robots.txt' ); die( esc_html( $die_msg ) ); } check_admin_referer( 'wpseo_create_robots' ); ob_start(); error_reporting( 0 ); do_robots(); $robots_content = ob_get_clean(); $f = fopen( $robots_file, 'x' ); fwrite( $f, $robots_content ); } if ( isset( $_POST['submitrobots'] ) ) { if ( ! current_user_can( 'edit_files' ) ) { $die_msg = sprintf( /* translators: %s expands to robots.txt. */ __( 'You cannot edit the %s file.', 'wordpress-seo' ), 'robots.txt' ); die( esc_html( $die_msg ) ); } check_admin_referer( 'wpseo-robotstxt' ); if ( isset( $_POST['robotsnew'] ) && file_exists( $robots_file ) ) { $robotsnew = sanitize_textarea_field( wp_unslash( $_POST['robotsnew'] ) ); if ( is_writable( $robots_file ) ) { $f = fopen( $robots_file, 'w+' ); fwrite( $f, $robotsnew ); fclose( $f ); $msg = sprintf( /* translators: %s expands to robots.txt. */ __( 'Updated %s', 'wordpress-seo' ), 'robots.txt' ); } } } if ( isset( $_POST['submithtaccess'] ) ) { if ( ! current_user_can( 'edit_files' ) ) { $die_msg = sprintf( /* translators: %s expands to ".htaccess". */ __( 'You cannot edit the %s file.', 'wordpress-seo' ), '.htaccess' ); die( esc_html( $die_msg ) ); } check_admin_referer( 'wpseo-htaccess' ); if ( isset( $_POST['htaccessnew'] ) && file_exists( $ht_access_file ) ) { $ht_access_new = wp_unslash( $_POST['htaccessnew'] ); if ( is_writable( $ht_access_file ) ) { $f = fopen( $ht_access_file, 'w+' ); fwrite( $f, $ht_access_new ); fclose( $f ); } } } if ( is_multisite() ) { $action_url = network_admin_url( 'admin.php?page=wpseo_files' ); $yform->admin_header( false, 'wpseo_ms' ); } else { $action_url = admin_url( 'admin.php?page=wpseo_tools&tool=file-editor' ); } if ( isset( $msg ) && ! empty( $msg ) ) { echo '<div id="message" class="notice notice-success"><p>', esc_html( $msg ), '</p></div>'; } // N.B.: "robots.txt" is a fixed file name and should not be translatable. echo '<h2>robots.txt</h2>'; if ( ! file_exists( $robots_file ) ) { if ( is_writable( $home_path ) ) { echo '<form action="', esc_url( $action_url ), '" method="post" id="robotstxtcreateform">'; wp_nonce_field( 'wpseo_create_robots', '_wpnonce', true, true ); echo '<p>'; printf( /* translators: %s expands to robots.txt. */ esc_html__( 'You don\'t have a %s file, create one here:', 'wordpress-seo' ), 'robots.txt' ); echo '</p>'; printf( '<input type="submit" class="button" name="create_robots" value="%s">', sprintf( /* translators: %s expands to robots.txt. */ esc_attr__( 'Create %s file', 'wordpress-seo' ), 'robots.txt' ) ); echo '</form>'; } else { echo '<p>'; printf( /* translators: %s expands to robots.txt. */ esc_html__( 'If you had a %s file and it was editable, you could edit it from here.', 'wordpress-seo' ), 'robots.txt' ); echo '</p>'; } } else { $f = fopen( $robots_file, 'r' ); $content = ''; if ( filesize( $robots_file ) > 0 ) { $content = fread( $f, filesize( $robots_file ) ); } if ( ! is_writable( $robots_file ) ) { echo '<p><em>'; printf( /* translators: %s expands to robots.txt. */ esc_html__( 'If your %s were writable, you could edit it from here.', 'wordpress-seo' ), 'robots.txt' ); echo '</em></p>'; echo '<textarea class="large-text code" disabled="disabled" rows="15" name="robotsnew">', esc_textarea( $content ), '</textarea><br/>'; } else { echo '<form action="', esc_url( $action_url ), '" method="post" id="robotstxtform">'; wp_nonce_field( 'wpseo-robotstxt', '_wpnonce', true, true ); echo '<label for="robotsnew" class="yoast-inline-label">'; printf( /* translators: %s expands to robots.txt. */ esc_html__( 'Edit the content of your %s:', 'wordpress-seo' ), 'robots.txt' ); echo '</label>'; echo '<textarea class="large-text code" rows="15" name="robotsnew" id="robotsnew">', esc_textarea( $content ), '</textarea><br/>'; printf( '<div class="submit"><input class="button" type="submit" name="submitrobots" value="%s" /></div>', sprintf( /* translators: %s expands to robots.txt. */ esc_attr__( 'Save changes to %s', 'wordpress-seo' ), 'robots.txt' ) ); echo '</form>'; } } if ( ! WPSEO_Utils::is_nginx() ) { echo '<h2>'; printf( /* translators: %s expands to ".htaccess". */ esc_html__( '%s file', 'wordpress-seo' ), '.htaccess' ); echo '</h2>'; if ( file_exists( $ht_access_file ) ) { $f = fopen( $ht_access_file, 'r' ); $contentht = ''; if ( filesize( $ht_access_file ) > 0 ) { $contentht = fread( $f, filesize( $ht_access_file ) ); } if ( ! is_writable( $ht_access_file ) ) { echo '<p><em>'; printf( /* translators: %s expands to ".htaccess". */ esc_html__( 'If your %s were writable, you could edit it from here.', 'wordpress-seo' ), '.htaccess' ); echo '</em></p>'; echo '<textarea class="large-text code" disabled="disabled" rows="15" name="robotsnew">', esc_textarea( $contentht ), '</textarea><br/>'; } else { echo '<form action="', esc_url( $action_url ), '" method="post" id="htaccessform">'; wp_nonce_field( 'wpseo-htaccess', '_wpnonce', true, true ); echo '<label for="htaccessnew" class="yoast-inline-label">'; printf( /* translators: %s expands to ".htaccess". */ esc_html__( 'Edit the content of your %s:', 'wordpress-seo' ), '.htaccess' ); echo '</label>'; echo '<textarea class="large-text code" rows="15" name="htaccessnew" id="htaccessnew">', esc_textarea( $contentht ), '</textarea><br/>'; printf( '<div class="submit"><input class="button" type="submit" name="submithtaccess" value="%s" /></div>', sprintf( /* translators: %s expands to ".htaccess". */ esc_attr__( 'Save changes to %s', 'wordpress-seo' ), '.htaccess' ) ); echo '</form>'; } } else { echo '<p>'; printf( /* translators: %s expands to ".htaccess". */ esc_html__( 'If you had a %s file and it was editable, you could edit it from here.', 'wordpress-seo' ), '.htaccess' ); echo '</p>'; } } if ( is_multisite() ) { $yform->admin_footer( false ); } views/tool-import-export.php 0000644 00000010236 15150262017 0012217 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } $yform = Yoast_Form::get_instance(); $yoast_seo_import = false; /** * The import method is used to determine if there should be something imported. * * In case of POST the user is on the Yoast SEO import page and in case of the GET the user sees a notice from * Yoast SEO that we can import stuff for that plugin. */ // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only comparing the variable so no need to sanitize. if ( isset( $_POST['import_external'] ) && wp_unslash( $_POST['import_external'] ) === 'Import' ) { check_admin_referer( 'wpseo-import-plugins' ); if ( isset( $_POST['import_external_plugin'] ) && is_string( $_POST['import_external_plugin'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are using the variable as a class name. $yoast_seo_class = wp_unslash( $_POST['import_external_plugin'] ); if ( class_exists( $yoast_seo_class ) ) { $yoast_seo_import = new WPSEO_Import_Plugin( new $yoast_seo_class(), 'import' ); } } } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only comparing the variable so no need to sanitize. elseif ( isset( $_POST['clean_external'] ) && wp_unslash( $_POST['clean_external'] ) === 'Clean up' ) { check_admin_referer( 'wpseo-clean-plugins' ); if ( isset( $_POST['clean_external_plugin'] ) && is_string( $_POST['clean_external_plugin'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are using the variable as a class name. $yoast_seo_class = wp_unslash( $_POST['clean_external_plugin'] ); if ( class_exists( $yoast_seo_class ) ) { $yoast_seo_import = new WPSEO_Import_Plugin( new $yoast_seo_class(), 'cleanup' ); } } } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only comparing to an empty string. elseif ( isset( $_POST['settings_import'] ) && wp_unslash( $_POST['settings_import'] ) !== '' ) { $yoast_seo_import = new WPSEO_Import_Settings(); $yoast_seo_import->import(); } /** * Allow custom import actions. * * @param WPSEO_Import_Status $yoast_seo_import Contains info about the handled import. */ $yoast_seo_import = apply_filters( 'wpseo_handle_import', $yoast_seo_import ); if ( $yoast_seo_import ) { $yoast_seo_message = ''; if ( $yoast_seo_import->status instanceof WPSEO_Import_Status ) { $yoast_seo_message = $yoast_seo_import->status->get_msg(); } /** * Allow customization of import/export message. * * @param string $yoast_seo_msg The message. */ $yoast_seo_msg = apply_filters( 'wpseo_import_message', $yoast_seo_message ); if ( ! empty( $yoast_seo_msg ) ) { $yoast_seo_status = 'error'; if ( $yoast_seo_import->status->status ) { $yoast_seo_status = 'updated'; } $yoast_seo_class = 'message ' . $yoast_seo_status; echo '<div id="message" class="', esc_attr( $yoast_seo_status ), '"><p>', esc_html( $yoast_seo_msg ), '</p></div>'; } } $yoast_seo_tabs = [ 'wpseo-import' => [ 'label' => __( 'Import settings', 'wordpress-seo' ), ], 'wpseo-export' => [ 'label' => __( 'Export settings', 'wordpress-seo' ), ], 'import-seo' => [ 'label' => __( 'Import from other SEO plugins', 'wordpress-seo' ), ], ]; ?> <br/><br/> <h2 class="nav-tab-wrapper" id="wpseo-tabs"> <?php foreach ( $yoast_seo_tabs as $identifier => $tab ) : ?> <a class="nav-tab" id="<?php echo esc_attr( $identifier . '-tab' ); ?>" href="<?php echo esc_url( '#top#' . $identifier ); ?>"><?php echo esc_html( $tab['label'] ); ?></a> <?php endforeach; ?> <?php /** * Allow adding a custom import tab header. */ do_action( 'wpseo_import_tab_header' ); ?> </h2> <?php foreach ( $yoast_seo_tabs as $identifier => $tab ) { printf( '<div id="%s" class="wpseotab">', esc_attr( $identifier ) ); require_once WPSEO_PATH . 'admin/views/tabs/tool/' . $identifier . '.php'; echo '</div>'; } /** * Allow adding a custom import tab. */ do_action( 'wpseo_import_tab_content' ); views/user-profile.php 0000644 00000010322 15150262017 0011023 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * * @uses object $user */ /* translators: %1$s expands to Yoast SEO */ $wpseo_up_settings_header = sprintf( __( '%1$s settings', 'wordpress-seo' ), 'Yoast SEO' ); $wpseo_no_index_author_label = sprintf( /* translators: %s expands to "this author's archives". */ __( 'Do not allow search engines to show %s in search results.', 'wordpress-seo' ), __( 'this author\'s archives', 'wordpress-seo' ) ); ?> <div class="yoast yoast-settings"> <h2 id="wordpress-seo"><?php echo esc_html( $wpseo_up_settings_header ); ?></h2> <?php if ( ! WPSEO_Options::get( 'disable-author' ) ) : ?> <label for="wpseo_author_title"><?php esc_html_e( 'Title to use for Author page', 'wordpress-seo' ); ?></label> <input class="yoast-settings__text regular-text" type="text" id="wpseo_author_title" name="wpseo_author_title" value="<?php echo esc_attr( get_the_author_meta( 'wpseo_title', $user->ID ) ); ?>"/><br> <label for="wpseo_author_metadesc"><?php esc_html_e( 'Meta description to use for Author page', 'wordpress-seo' ); ?></label> <textarea rows="5" cols="30" id="wpseo_author_metadesc" class="yoast-settings__textarea yoast-settings__textarea--medium" name="wpseo_author_metadesc"><?php echo esc_textarea( get_the_author_meta( 'wpseo_metadesc', $user->ID ) ); ?></textarea><br> <input class="yoast-settings__checkbox double" type="checkbox" id="wpseo_noindex_author" name="wpseo_noindex_author" value="on" <?php echo ( get_the_author_meta( 'wpseo_noindex_author', $user->ID ) === 'on' ) ? 'checked' : ''; ?> /> <label class="yoast-label-strong" for="wpseo_noindex_author"><?php echo esc_html( $wpseo_no_index_author_label ); ?></label><br> <?php endif; ?> <?php if ( WPSEO_Options::get( 'keyword_analysis_active', false ) ) : ?> <input class="yoast-settings__checkbox double" type="checkbox" id="wpseo_keyword_analysis_disable" name="wpseo_keyword_analysis_disable" aria-describedby="wpseo_keyword_analysis_disable_desc" value="on" <?php echo ( get_the_author_meta( 'wpseo_keyword_analysis_disable', $user->ID ) === 'on' ) ? 'checked' : ''; ?> /> <label class="yoast-label-strong" for="wpseo_keyword_analysis_disable"><?php esc_html_e( 'Disable SEO analysis', 'wordpress-seo' ); ?></label> <br> <p class="description" id="wpseo_keyword_analysis_disable_desc"> <?php esc_html_e( 'Removes the focus keyphrase section from the metabox and disables all SEO-related suggestions.', 'wordpress-seo' ); ?> </p> <?php endif; ?> <?php if ( WPSEO_Options::get( 'content_analysis_active', false ) ) : ?> <input class="yoast-settings__checkbox double" type="checkbox" id="wpseo_content_analysis_disable" name="wpseo_content_analysis_disable" aria-describedby="wpseo_content_analysis_disable_desc" value="on" <?php echo ( get_the_author_meta( 'wpseo_content_analysis_disable', $user->ID ) === 'on' ) ? 'checked' : ''; ?> /> <label class="yoast-label-strong" for="wpseo_content_analysis_disable"><?php esc_html_e( 'Disable readability analysis', 'wordpress-seo' ); ?></label> <br> <p class="description" id="wpseo_content_analysis_disable_desc"> <?php esc_html_e( 'Removes the readability analysis section from the metabox and disables all readability-related suggestions.', 'wordpress-seo' ); ?> </p> <?php endif; ?> <?php if ( WPSEO_Options::get( 'inclusive_language_analysis_active', false ) ) : ?> <input class="yoast-settings__checkbox double" type="checkbox" id="wpseo_inclusive_language_analysis_disable" name="wpseo_inclusive_language_analysis_disable" aria-describedby="wpseo_inclusive_language_analysis_disable_desc" value="on" <?php echo ( get_the_author_meta( 'wpseo_inclusive_language_analysis_disable', $user->ID ) === 'on' ) ? 'checked' : ''; ?> /> <label class="yoast-label-strong" for="wpseo_inclusive_language_analysis_disable"><?php esc_html_e( 'Disable inclusive language analysis', 'wordpress-seo' ); ?></label> <br> <p class="description" id="wpseo_inclusive_language_analysis_disable_desc"> <?php esc_html_e( 'Removes the inclusive language analysis section from the metabox and disables all inclusive language-related suggestions.', 'wordpress-seo' ); ?> </p> <?php endif; ?> <?php do_action( 'wpseo_render_user_profile', $user ); ?> </div> watchers/class-slug-change-watcher.php 0000644 00000016705 15150262017 0014040 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Watchers */ /** * Class WPSEO_Slug_Change_Watcher. */ class WPSEO_Slug_Change_Watcher implements WPSEO_WordPress_Integration { /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { // If the current plugin is Yoast SEO Premium, stop registering. if ( YoastSEO()->helpers->product->is_premium() ) { return; } add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); // Detect a post trash. add_action( 'wp_trash_post', [ $this, 'detect_post_trash' ] ); // Detect a post delete. add_action( 'before_delete_post', [ $this, 'detect_post_delete' ] ); // Detects deletion of a term. add_action( 'delete_term_taxonomy', [ $this, 'detect_term_delete' ] ); } /** * Enqueues the quick edit handler. * * @return void */ public function enqueue_assets() { global $pagenow; if ( ! in_array( $pagenow, [ 'edit.php', 'edit-tags.php' ], true ) ) { return; } $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_script( 'quick-edit-handler' ); } /** * Shows a message when a post is about to get trashed. * * @param int $post_id The current post ID. * * @return void */ public function detect_post_trash( $post_id ) { if ( ! $this->is_post_viewable( $post_id ) ) { return; } $post_label = $this->get_post_type_label( get_post_type( $post_id ) ); /* translators: %1$s expands to the translated name of the post type. */ $first_sentence = sprintf( __( 'You just trashed a %1$s.', 'wordpress-seo' ), $post_label ); $second_sentence = __( 'Search engines and other websites can still send traffic to your trashed content.', 'wordpress-seo' ); $message = $this->get_message( $first_sentence, $second_sentence ); $this->add_notification( $message ); } /** * Shows a message when a post is about to get trashed. * * @param int $post_id The current post ID. * * @return void */ public function detect_post_delete( $post_id ) { if ( ! $this->is_post_viewable( $post_id ) ) { return; } $post_label = $this->get_post_type_label( get_post_type( $post_id ) ); /* translators: %1$s expands to the translated name of the post type. */ $first_sentence = sprintf( __( 'You just deleted a %1$s.', 'wordpress-seo' ), $post_label ); $second_sentence = __( 'Search engines and other websites can still send traffic to your deleted content.', 'wordpress-seo' ); $message = $this->get_message( $first_sentence, $second_sentence ); $this->add_notification( $message ); } /** * Shows a message when a term is about to get deleted. * * @param int $term_taxonomy_id The term taxonomy ID that will be deleted. * * @return void */ public function detect_term_delete( $term_taxonomy_id ) { if ( ! $this->is_term_viewable( $term_taxonomy_id ) ) { return; } $term = get_term_by( 'term_taxonomy_id', (int) $term_taxonomy_id ); $term_label = $this->get_taxonomy_label_for_term( $term->term_id ); /* translators: %1$s expands to the translated name of the term. */ $first_sentence = sprintf( __( 'You just deleted a %1$s.', 'wordpress-seo' ), $term_label ); $second_sentence = __( 'Search engines and other websites can still send traffic to your deleted content.', 'wordpress-seo' ); $message = $this->get_message( $first_sentence, $second_sentence ); $this->add_notification( $message ); } /** * Checks if the post is viewable. * * @param string $post_id The post id to check. * * @return bool Whether the post is viewable or not. */ protected function is_post_viewable( $post_id ) { $post_type = get_post_type( $post_id ); if ( ! WPSEO_Post_Type::is_post_type_accessible( $post_type ) ) { return false; } $post_status = get_post_status( $post_id ); if ( ! $this->check_visible_post_status( $post_status ) ) { return false; } return true; } /** * Checks if the term is viewable. * * @param int $term_taxonomy_id The term taxonomy ID to check. * * @return bool Whether the term is viewable or not. */ protected function is_term_viewable( $term_taxonomy_id ) { $term = get_term_by( 'term_taxonomy_id', (int) $term_taxonomy_id ); if ( ! $term || is_wp_error( $term ) ) { return false; } $taxonomy = get_taxonomy( $term->taxonomy ); if ( ! $taxonomy ) { return false; } return $taxonomy->publicly_queryable || $taxonomy->public; } /** * Gets the taxonomy label to use for a term. * * @param int $term_id The term ID. * * @return string The taxonomy's singular label. */ protected function get_taxonomy_label_for_term( $term_id ) { $term = get_term( $term_id ); $taxonomy = get_taxonomy( $term->taxonomy ); return $taxonomy->labels->singular_name; } /** * Retrieves the singular post type label. * * @param string $post_type Post type to retrieve label from. * * @return string The singular post type name. */ protected function get_post_type_label( $post_type ) { $post_type_object = get_post_type_object( $post_type ); // If the post type of this post wasn't registered default back to post. if ( $post_type_object === null ) { $post_type_object = get_post_type_object( 'post' ); } return $post_type_object->labels->singular_name; } /** * Checks whether the given post status is visible or not. * * @param string $post_status The post status to check. * * @return bool Whether or not the post is visible. */ protected function check_visible_post_status( $post_status ) { $visible_post_statuses = [ 'publish', 'static', 'private', ]; return in_array( $post_status, $visible_post_statuses, true ); } /** * Returns the message around changed URLs. * * @param string $first_sentence The first sentence of the notification. * @param string $second_sentence The second sentence of the notification. * * @return string The full notification. */ protected function get_message( $first_sentence, $second_sentence ) { return '<h2>' . __( 'Make sure you don\'t miss out on traffic!', 'wordpress-seo' ) . '</h2>' . '<p>' . $first_sentence . ' ' . $second_sentence . ' ' . __( 'You should create a redirect to ensure your visitors do not get a 404 error when they click on the no longer working URL.', 'wordpress-seo' ) /* translators: %s expands to Yoast SEO Premium */ . ' ' . sprintf( __( 'With %s, you can easily create such redirects.', 'wordpress-seo' ), 'Yoast SEO Premium' ) . '</p>' . '<p><a class="yoast-button-upsell" href="' . WPSEO_Shortlinker::get( 'https://yoa.st/1d0' ) . '" target="_blank">' /* translators: %s expands to Yoast SEO Premium */ . sprintf( __( 'Get %s', 'wordpress-seo' ), 'Yoast SEO Premium' ) /* translators: Hidden accessibility text. */ . '<span class="screen-reader-text">' . __( '(Opens in a new browser tab)', 'wordpress-seo' ) . '</span>' . '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>' . '</a></p>'; } /** * Adds a notification to be shown on the next page request since posts are updated in an ajax request. * * @param string $message The message to add to the notification. * * @return void */ protected function add_notification( $message ) { $notification = new Yoast_Notification( $message, [ 'type' => 'notice-warning is-dismissible', 'yoast_branding' => true, ] ); $notification_center = Yoast_Notification_Center::get(); $notification_center->add_notification( $notification ); } } admin-settings-changed-listener.php 0000644 00000004615 15150262017 0013422 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * A WordPress integration that listens for whether the SEO changes have been saved successfully. */ class WPSEO_Admin_Settings_Changed_Listener implements WPSEO_WordPress_Integration { /** * Have the Yoast SEO settings been saved. * * @var bool */ private static $settings_saved = false; /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { add_action( 'admin_init', [ $this, 'intercept_save_update_notification' ] ); } /** * Checks and overwrites the wp_settings_errors global to determine whether the Yoast SEO settings have been saved. * * @return void */ public function intercept_save_update_notification() { global $pagenow; if ( $pagenow !== 'admin.php' || ! YoastSEO()->helpers->current_page->is_yoast_seo_page() ) { return; } // Variable name is the same as the global that is set by get_settings_errors. $wp_settings_errors = get_settings_errors(); foreach ( $wp_settings_errors as $key => $wp_settings_error ) { if ( ! $this->is_settings_updated_notification( $wp_settings_error ) ) { continue; } self::$settings_saved = true; unset( $wp_settings_errors[ $key ] ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride -- Overwrite the global with the list excluding the Changed saved message. $GLOBALS['wp_settings_errors'] = $wp_settings_errors; break; } } /** * Checks whether the settings notification is a settings_updated notification. * * @param array $wp_settings_error The settings object. * * @return bool Whether this is a settings updated settings notification. */ public function is_settings_updated_notification( $wp_settings_error ) { return ! empty( $wp_settings_error['code'] ) && $wp_settings_error['code'] === 'settings_updated'; } /** * Get whether the settings have successfully been saved * * @return bool Whether the settings have successfully been saved. */ public function have_settings_been_saved() { return self::$settings_saved; } /** * Renders a success message if the Yoast SEO settings have been saved. * * @return void */ public function show_success_message() { if ( $this->have_settings_been_saved() ) { echo '<p class="wpseo-message"><span class="dashicons dashicons-yes"></span>', esc_html__( 'Settings saved.', 'wordpress-seo' ), '</p>'; } } } ajax.php 0000644 00000026365 15150262017 0006213 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ if ( ! defined( 'WPSEO_VERSION' ) ) { header( 'Status: 403 Forbidden' ); header( 'HTTP/1.1 403 Forbidden' ); exit(); } /** * Convenience function to JSON encode and echo results and then die. * * @param array $results Results array for encoding. * * @return void */ function wpseo_ajax_json_echo_die( $results ) { // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. echo WPSEO_Utils::format_json_encode( $results ); die(); } /** * Function used from AJAX calls, takes it variables from $_POST, dies on exit. * * @return void */ function wpseo_set_option() { if ( ! current_user_can( 'manage_options' ) ) { die( '-1' ); } check_ajax_referer( 'wpseo-setoption' ); if ( ! isset( $_POST['option'] ) || ! is_string( $_POST['option'] ) ) { die( '-1' ); } $option = sanitize_text_field( wp_unslash( $_POST['option'] ) ); if ( $option !== 'page_comments' ) { die( '-1' ); } update_option( $option, 0 ); die( '1' ); } add_action( 'wp_ajax_wpseo_set_option', 'wpseo_set_option' ); /** * Since 3.2 Notifications are dismissed in the Notification Center. */ add_action( 'wp_ajax_yoast_dismiss_notification', [ 'Yoast_Notification_Center', 'ajax_dismiss_notification' ] ); /** * Function used to remove the admin notices for several purposes, dies on exit. * * @return void */ function wpseo_set_ignore() { if ( ! current_user_can( 'manage_options' ) ) { die( '-1' ); } check_ajax_referer( 'wpseo-ignore' ); if ( ! isset( $_POST['option'] ) || ! is_string( $_POST['option'] ) ) { die( '-1' ); } $ignore_key = sanitize_text_field( wp_unslash( $_POST['option'] ) ); WPSEO_Options::set( 'ignore_' . $ignore_key, true ); die( '1' ); } add_action( 'wp_ajax_wpseo_set_ignore', 'wpseo_set_ignore' ); /** * Save an individual SEO title from the Bulk Editor. * * @return void */ function wpseo_save_title() { wpseo_save_what( 'title' ); } add_action( 'wp_ajax_wpseo_save_title', 'wpseo_save_title' ); /** * Save an individual meta description from the Bulk Editor. * * @return void */ function wpseo_save_description() { wpseo_save_what( 'metadesc' ); } add_action( 'wp_ajax_wpseo_save_metadesc', 'wpseo_save_description' ); /** * Save titles & descriptions. * * @param string $what Type of item to save (title, description). * * @return void */ function wpseo_save_what( $what ) { check_ajax_referer( 'wpseo-bulk-editor' ); if ( ! isset( $_POST['new_value'], $_POST['wpseo_post_id'], $_POST['existing_value'] ) || ! is_string( $_POST['new_value'] ) || ! is_string( $_POST['existing_value'] ) ) { die( '-1' ); } $new = sanitize_text_field( wp_unslash( $_POST['new_value'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are casting the unsafe value to an integer. $post_id = (int) wp_unslash( $_POST['wpseo_post_id'] ); $original = sanitize_text_field( wp_unslash( $_POST['existing_value'] ) ); if ( $post_id === 0 ) { die( '-1' ); } $results = wpseo_upsert_new( $what, $post_id, $new, $original ); wpseo_ajax_json_echo_die( $results ); } /** * Helper function to update a post's meta data, returning relevant information * about the information updated and the results or the meta update. * * @param int $post_id Post ID. * @param string $new_meta_value New meta value to record. * @param string $orig_meta_value Original meta value. * @param string $meta_key Meta key string. * @param string $return_key Return key string to use in results. * * @return array */ function wpseo_upsert_meta( $post_id, $new_meta_value, $orig_meta_value, $meta_key, $return_key ) { $post_id = intval( $post_id ); $sanitized_new_meta_value = wp_strip_all_tags( $new_meta_value ); $orig_meta_value = wp_strip_all_tags( $orig_meta_value ); $upsert_results = [ 'status' => 'success', 'post_id' => $post_id, "new_{$return_key}" => $sanitized_new_meta_value, "original_{$return_key}" => $orig_meta_value, ]; $the_post = get_post( $post_id ); if ( empty( $the_post ) ) { $upsert_results['status'] = 'failure'; $upsert_results['results'] = __( 'Post doesn\'t exist.', 'wordpress-seo' ); return $upsert_results; } $post_type_object = get_post_type_object( $the_post->post_type ); if ( ! $post_type_object ) { $upsert_results['status'] = 'failure'; $upsert_results['results'] = sprintf( /* translators: %s expands to post type. */ __( 'Post has an invalid Content Type: %s.', 'wordpress-seo' ), $the_post->post_type ); return $upsert_results; } if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) { $upsert_results['status'] = 'failure'; $upsert_results['results'] = sprintf( /* translators: %s expands to post type name. */ __( 'You can\'t edit %s.', 'wordpress-seo' ), $post_type_object->label ); return $upsert_results; } if ( ! current_user_can( $post_type_object->cap->edit_others_posts ) && (int) $the_post->post_author !== get_current_user_id() ) { $upsert_results['status'] = 'failure'; $upsert_results['results'] = sprintf( /* translators: %s expands to the name of a post type (plural). */ __( 'You can\'t edit %s that aren\'t yours.', 'wordpress-seo' ), $post_type_object->label ); return $upsert_results; } if ( $sanitized_new_meta_value === $orig_meta_value && $sanitized_new_meta_value !== $new_meta_value ) { $upsert_results['status'] = 'failure'; $upsert_results['results'] = __( 'You have used HTML in your value which is not allowed.', 'wordpress-seo' ); return $upsert_results; } $res = update_post_meta( $post_id, $meta_key, $sanitized_new_meta_value ); $upsert_results['status'] = ( $res !== false ) ? 'success' : 'failure'; $upsert_results['results'] = $res; return $upsert_results; } /** * Save all titles sent from the Bulk Editor. * * @return void */ function wpseo_save_all_titles() { wpseo_save_all( 'title' ); } add_action( 'wp_ajax_wpseo_save_all_titles', 'wpseo_save_all_titles' ); /** * Save all description sent from the Bulk Editor. * * @return void */ function wpseo_save_all_descriptions() { wpseo_save_all( 'metadesc' ); } add_action( 'wp_ajax_wpseo_save_all_descriptions', 'wpseo_save_all_descriptions' ); /** * Utility function to save values. * * @param string $what Type of item so save. * * @return void */ function wpseo_save_all( $what ) { check_ajax_referer( 'wpseo-bulk-editor' ); $results = []; if ( ! isset( $_POST['items'], $_POST['existingItems'] ) ) { wpseo_ajax_json_echo_die( $results ); } $new_values = array_map( [ 'WPSEO_Utils', 'sanitize_text_field' ], wp_unslash( (array) $_POST['items'] ) ); $original_values = array_map( [ 'WPSEO_Utils', 'sanitize_text_field' ], wp_unslash( (array) $_POST['existingItems'] ) ); foreach ( $new_values as $post_id => $new_value ) { $original_value = $original_values[ $post_id ]; $results[] = wpseo_upsert_new( $what, $post_id, $new_value, $original_value ); } wpseo_ajax_json_echo_die( $results ); } /** * Insert a new value. * * @param string $what Item type (such as title). * @param int $post_id Post ID. * @param string $new_value New value to record. * @param string $original Original value. * * @return string */ function wpseo_upsert_new( $what, $post_id, $new_value, $original ) { $meta_key = WPSEO_Meta::$meta_prefix . $what; return wpseo_upsert_meta( $post_id, $new_value, $original, $meta_key, $what ); } /** * Retrieves the post ids where the keyword is used before as well as the types of those posts. * * @return void */ function ajax_get_keyword_usage_and_post_types() { check_ajax_referer( 'wpseo-keyword-usage-and-post-types', 'nonce' ); if ( ! isset( $_POST['post_id'], $_POST['keyword'] ) || ! is_string( $_POST['keyword'] ) ) { die( '-1' ); } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We are casting to an integer. $post_id = (int) wp_unslash( $_POST['post_id'] ); if ( $post_id === 0 || ! current_user_can( 'edit_post', $post_id ) ) { die( '-1' ); } $keyword = sanitize_text_field( wp_unslash( $_POST['keyword'] ) ); $post_ids = WPSEO_Meta::keyword_usage( $keyword, $post_id ); if ( ! empty( $post_ids ) ) { $post_types = WPSEO_Meta::post_types_for_ids( $post_ids ); } else { $post_types = []; } $return_object = [ 'keyword_usage' => $post_ids, 'post_types' => $post_types, ]; wp_die( // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. WPSEO_Utils::format_json_encode( $return_object ) ); } add_action( 'wp_ajax_get_focus_keyword_usage_and_post_types', 'ajax_get_keyword_usage_and_post_types' ); /** * Retrieves the keyword for the keyword doubles of the termpages. * * @return void */ function ajax_get_term_keyword_usage() { check_ajax_referer( 'wpseo-keyword-usage', 'nonce' ); if ( ! isset( $_POST['post_id'], $_POST['keyword'], $_POST['taxonomy'] ) || ! is_string( $_POST['keyword'] ) || ! is_string( $_POST['taxonomy'] ) ) { wp_die( -1 ); } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are casting the unsafe input to an integer. $post_id = (int) wp_unslash( $_POST['post_id'] ); if ( $post_id === 0 ) { wp_die( -1 ); } $keyword = sanitize_text_field( wp_unslash( $_POST['keyword'] ) ); $taxonomy_name = sanitize_text_field( wp_unslash( $_POST['taxonomy'] ) ); $taxonomy = get_taxonomy( $taxonomy_name ); if ( ! $taxonomy ) { wp_die( 0 ); } if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) { wp_die( -1 ); } $usage = WPSEO_Taxonomy_Meta::get_keyword_usage( $keyword, $post_id, $taxonomy_name ); // Normalize the result so it is the same as the post keyword usage AJAX request. $usage = $usage[ $keyword ]; wp_die( // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. WPSEO_Utils::format_json_encode( $usage ) ); } add_action( 'wp_ajax_get_term_keyword_usage', 'ajax_get_term_keyword_usage' ); /** * Registers hooks for all AJAX integrations. * * @return void */ function wpseo_register_ajax_integrations() { $integrations = [ new Yoast_Network_Admin() ]; foreach ( $integrations as $integration ) { $integration->register_ajax_hooks(); } } wpseo_register_ajax_integrations(); new WPSEO_Shortcode_Filter(); new WPSEO_Taxonomy_Columns(); /* ********************* DEPRECATED FUNCTIONS ********************* */ /** * Retrieves the keyword for the keyword doubles. * * @return void */ function ajax_get_keyword_usage() { _deprecated_function( __METHOD__, 'WPSEO 20.4' ); check_ajax_referer( 'wpseo-keyword-usage', 'nonce' ); if ( ! isset( $_POST['post_id'], $_POST['keyword'] ) || ! is_string( $_POST['keyword'] ) ) { die( '-1' ); } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We are casting to an integer. $post_id = (int) wp_unslash( $_POST['post_id'] ); if ( $post_id === 0 || ! current_user_can( 'edit_post', $post_id ) ) { die( '-1' ); } $keyword = sanitize_text_field( wp_unslash( $_POST['keyword'] ) ); wp_die( // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. WPSEO_Utils::format_json_encode( WPSEO_Meta::keyword_usage( $keyword, $post_id ) ) ); } class-admin-asset-analysis-worker-location.php 0000644 00000003471 15150262017 0015527 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Represents a way to determine the analysis worker asset location. */ final class WPSEO_Admin_Asset_Analysis_Worker_Location implements WPSEO_Admin_Asset_Location { /** * Holds the asset's location. * * @var WPSEO_Admin_Asset_Location */ private $asset_location; /** * Holds the asset itself. * * @var WPSEO_Admin_Asset */ private $asset; /** * Constructs the location of the analysis worker asset. * * @param string $flat_version The flat version of the asset. * @param string $name The name of the analysis worker asset. */ public function __construct( $flat_version = '', $name = 'analysis-worker' ) { if ( $flat_version === '' ) { $asset_manager = new WPSEO_Admin_Asset_Manager(); $flat_version = $asset_manager->flatten_version( WPSEO_VERSION ); } $analysis_worker = $name . '-' . $flat_version . '.js'; $this->asset_location = WPSEO_Admin_Asset_Manager::create_default_location(); $this->asset = new WPSEO_Admin_Asset( [ 'name' => $name, 'src' => $analysis_worker, ] ); } /** * Retrieves the analysis worker asset. * * @return WPSEO_Admin_Asset The analysis worker asset. */ public function get_asset() { return $this->asset; } /** * Determines the URL of the asset on the dev server. * * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. * @param string $type The type of asset. Usually JS or CSS. * * @return string The URL of the asset. */ public function get_url( WPSEO_Admin_Asset $asset, $type ) { $scheme = wp_parse_url( $asset->get_src(), PHP_URL_SCHEME ); if ( in_array( $scheme, [ 'http', 'https' ], true ) ) { return $asset->get_src(); } return $this->asset_location->get_url( $asset, $type ); } } class-admin-asset-dev-server-location.php 0000644 00000003210 15150262017 0014446 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Changes the asset paths to dev server paths. */ final class WPSEO_Admin_Asset_Dev_Server_Location implements WPSEO_Admin_Asset_Location { /** * Holds the dev server's default URL. * * @var string */ public const DEFAULT_URL = 'http://localhost:8080'; /** * Holds the url where the server is located. * * @var string */ private $url; /** * Class constructor. * * @param string|null $url Where the dev server is located. */ public function __construct( $url = null ) { if ( $url === null ) { $url = self::DEFAULT_URL; } $this->url = $url; } /** * Determines the URL of the asset on the dev server. * * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. * @param string $type The type of asset. Usually JS or CSS. * * @return string The URL of the asset. */ public function get_url( WPSEO_Admin_Asset $asset, $type ) { if ( $type === WPSEO_Admin_Asset::TYPE_CSS ) { return $this->get_default_url( $asset, $type ); } $path = sprintf( 'js/dist/%s%s.js', $asset->get_src(), $asset->get_suffix() ); return trailingslashit( $this->url ) . $path; } /** * Determines the URL of the asset not using the dev server. * * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. * @param string $type The type of asset. * * @return string The URL of the asset file. */ public function get_default_url( WPSEO_Admin_Asset $asset, $type ) { $default_location = new WPSEO_Admin_Asset_SEO_Location( WPSEO_FILE ); return $default_location->get_url( $asset, $type ); } } class-admin-asset-location.php 0000644 00000000750 15150262017 0012374 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Represents a way to determine an assets location. */ interface WPSEO_Admin_Asset_Location { /** * Determines the URL of the asset on the dev server. * * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. * @param string $type The type of asset. Usually JS or CSS. * * @return string The URL of the asset. */ public function get_url( WPSEO_Admin_Asset $asset, $type ); } class-admin-asset-manager.php 0000644 00000045514 15150262017 0012205 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * This class registers all the necessary styles and scripts. * * Also has methods for the enqueing of scripts and styles. * It automatically adds a prefix to the handle. */ class WPSEO_Admin_Asset_Manager { /** * Prefix for naming the assets. * * @var string */ public const PREFIX = 'yoast-seo-'; /** * Class that manages the assets' location. * * @var WPSEO_Admin_Asset_Location */ protected $asset_location; /** * Prefix for naming the assets. * * @var string */ private $prefix; /** * Constructs a manager of assets. Needs a location to know where to register assets at. * * @param WPSEO_Admin_Asset_Location|null $asset_location The provider of the asset location. * @param string $prefix The prefix for naming assets. */ public function __construct( ?WPSEO_Admin_Asset_Location $asset_location = null, $prefix = self::PREFIX ) { if ( $asset_location === null ) { $asset_location = self::create_default_location(); } $this->asset_location = $asset_location; $this->prefix = $prefix; } /** * Enqueues scripts. * * @param string $script The name of the script to enqueue. * * @return void */ public function enqueue_script( $script ) { wp_enqueue_script( $this->prefix . $script ); } /** * Enqueues styles. * * @param string $style The name of the style to enqueue. * * @return void */ public function enqueue_style( $style ) { wp_enqueue_style( $this->prefix . $style ); } /** * Enqueues the appropriate language for the user. * * @return void */ public function enqueue_user_language_script() { $this->enqueue_script( 'language-' . YoastSEO()->helpers->language->get_researcher_language() ); } /** * Registers scripts based on it's parameters. * * @param WPSEO_Admin_Asset $script The script to register. * * @return void */ public function register_script( WPSEO_Admin_Asset $script ) { $url = $script->get_src() ? $this->get_url( $script, WPSEO_Admin_Asset::TYPE_JS ) : false; wp_register_script( $this->prefix . $script->get_name(), $url, $script->get_deps(), $script->get_version(), $script->is_in_footer() ); if ( in_array( 'wp-i18n', $script->get_deps(), true ) ) { wp_set_script_translations( $this->prefix . $script->get_name(), 'wordpress-seo' ); } } /** * Registers styles based on it's parameters. * * @param WPSEO_Admin_Asset $style The style to register. * * @return void */ public function register_style( WPSEO_Admin_Asset $style ) { wp_register_style( $this->prefix . $style->get_name(), $this->get_url( $style, WPSEO_Admin_Asset::TYPE_CSS ), $style->get_deps(), $style->get_version(), $style->get_media() ); } /** * Calls the functions that register scripts and styles with the scripts and styles to be registered as arguments. * * @return void */ public function register_assets() { $this->register_scripts( $this->scripts_to_be_registered() ); $this->register_styles( $this->styles_to_be_registered() ); } /** * Registers all the scripts passed to it. * * @param array $scripts The scripts passed to it. * * @return void */ public function register_scripts( $scripts ) { foreach ( $scripts as $script ) { $script = new WPSEO_Admin_Asset( $script ); $this->register_script( $script ); } } /** * Registers all the styles it receives. * * @param array $styles Styles that need to be registered. * * @return void */ public function register_styles( $styles ) { foreach ( $styles as $style ) { $style = new WPSEO_Admin_Asset( $style ); $this->register_style( $style ); } } /** * Localizes the script. * * @param string $handle The script handle. * @param string $object_name The object name. * @param array $data The l10n data. * * @return void */ public function localize_script( $handle, $object_name, $data ) { wp_localize_script( $this->prefix . $handle, $object_name, $data ); } /** * Adds an inline script. * * @param string $handle The script handle. * @param string $data The l10n data. * @param string $position Optional. Whether to add the inline script before the handle or after. * * @return void */ public function add_inline_script( $handle, $data, $position = 'after' ) { wp_add_inline_script( $this->prefix . $handle, $data, $position ); } /** * A list of styles that shouldn't be registered but are needed in other locations in the plugin. * * @return array */ public function special_styles() { $flat_version = $this->flatten_version( WPSEO_VERSION ); $asset_args = [ 'name' => 'inside-editor', 'src' => 'inside-editor-' . $flat_version, ]; return [ 'inside-editor' => new WPSEO_Admin_Asset( $asset_args ) ]; } /** * Flattens a version number for use in a filename. * * @param string $version The original version number. * * @return string The flattened version number. */ public function flatten_version( $version ) { $parts = explode( '.', $version ); if ( count( $parts ) === 2 && preg_match( '/^\d+$/', $parts[1] ) === 1 ) { $parts[] = '0'; } return implode( '', $parts ); } /** * Creates a default location object for use in the admin asset manager. * * @return WPSEO_Admin_Asset_Location The location to use in the asset manager. */ public static function create_default_location() { if ( defined( 'YOAST_SEO_DEV_SERVER' ) && YOAST_SEO_DEV_SERVER ) { $url = defined( 'YOAST_SEO_DEV_SERVER_URL' ) ? YOAST_SEO_DEV_SERVER_URL : WPSEO_Admin_Asset_Dev_Server_Location::DEFAULT_URL; return new WPSEO_Admin_Asset_Dev_Server_Location( $url ); } return new WPSEO_Admin_Asset_SEO_Location( WPSEO_FILE, false ); } /** * Checks if the given script is enqueued. * * @param string $script The script to check. * * @return bool True when the script is enqueued. */ public function is_script_enqueued( $script ) { return wp_script_is( $this->prefix . $script ); } /** * Returns the scripts that need to be registered. * * @todo Data format is not self-documenting. Needs explanation inline. R. * * @return array The scripts that need to be registered. */ protected function scripts_to_be_registered() { $header_scripts = [ 'admin-global', 'block-editor', 'classic-editor', 'post-edit', 'help-scout-beacon', 'redirect-old-features-tab', ]; $additional_dependencies = [ 'analysis-worker' => [ self::PREFIX . 'analysis-package' ], 'api-client' => [ 'wp-api' ], 'crawl-settings' => [ 'jquery' ], 'dashboard-widget' => [ self::PREFIX . 'api-client' ], 'wincher-dashboard-widget' => [ self::PREFIX . 'api-client' ], 'editor-modules' => [ 'jquery' ], 'elementor' => [ self::PREFIX . 'api-client', self::PREFIX . 'externals-components', self::PREFIX . 'externals-contexts', self::PREFIX . 'externals-redux', ], 'indexation' => [ 'jquery-ui-core', 'jquery-ui-progressbar', ], 'first-time-configuration' => [ self::PREFIX . 'api-client', self::PREFIX . 'externals-components', self::PREFIX . 'externals-contexts', self::PREFIX . 'externals-redux', ], 'integrations-page' => [ self::PREFIX . 'api-client', self::PREFIX . 'externals-components', self::PREFIX . 'externals-contexts', self::PREFIX . 'externals-redux', ], 'post-edit' => [ self::PREFIX . 'api-client', self::PREFIX . 'block-editor', self::PREFIX . 'externals-components', self::PREFIX . 'externals-contexts', self::PREFIX . 'externals-redux', ], 'reindex-links' => [ 'jquery-ui-core', 'jquery-ui-progressbar', ], 'settings' => [ 'jquery-ui-core', 'jquery-ui-progressbar', self::PREFIX . 'api-client', self::PREFIX . 'externals-components', self::PREFIX . 'externals-contexts', self::PREFIX . 'externals-redux', ], 'term-edit' => [ self::PREFIX . 'api-client', self::PREFIX . 'classic-editor', self::PREFIX . 'externals-components', self::PREFIX . 'externals-contexts', self::PREFIX . 'externals-redux', ], ]; $plugin_scripts = $this->load_generated_asset_file( [ 'asset_file' => __DIR__ . '/../src/generated/assets/plugin.php', 'ext_length' => 3, 'additional_deps' => $additional_dependencies, 'header_scripts' => $header_scripts, ] ); $external_scripts = $this->load_generated_asset_file( [ 'asset_file' => __DIR__ . '/../src/generated/assets/externals.php', 'ext_length' => 3, 'suffix' => '-package', 'base_dir' => 'externals/', 'additional_deps' => $additional_dependencies, 'header_scripts' => $header_scripts, ] ); $language_scripts = $this->load_generated_asset_file( [ 'asset_file' => __DIR__ . '/../src/generated/assets/languages.php', 'ext_length' => 3, 'suffix' => '-language', 'base_dir' => 'languages/', 'additional_deps' => $additional_dependencies, 'header_scripts' => $header_scripts, ] ); $renamed_scripts = $this->load_renamed_scripts(); $scripts = array_merge( $plugin_scripts, $external_scripts, $language_scripts, $renamed_scripts ); $scripts['installation-success'] = [ 'name' => 'installation-success', 'src' => 'installation-success.js', 'deps' => [ 'wp-a11y', 'wp-dom-ready', 'wp-components', 'wp-element', 'wp-i18n', self::PREFIX . 'yoast-components', self::PREFIX . 'externals-components', ], 'version' => $scripts['installation-success']['version'], ]; $scripts['post-edit-classic'] = [ 'name' => 'post-edit-classic', 'src' => $scripts['post-edit']['src'], 'deps' => array_map( static function ( $dep ) { if ( $dep === self::PREFIX . 'block-editor' ) { return self::PREFIX . 'classic-editor'; } return $dep; }, $scripts['post-edit']['deps'] ), 'in_footer' => ! in_array( 'post-edit-classic', $header_scripts, true ), 'version' => $scripts['post-edit']['version'], ]; $scripts['workouts'] = [ 'name' => 'workouts', 'src' => 'workouts.js', 'deps' => [ 'clipboard', 'lodash', 'wp-api-fetch', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n', self::PREFIX . 'externals-components', self::PREFIX . 'externals-contexts', self::PREFIX . 'externals-redux', self::PREFIX . 'analysis', self::PREFIX . 'react-select', self::PREFIX . 'yoast-components', ], 'version' => $scripts['workouts']['version'], ]; // Add the current language to every script that requires the analysis package. foreach ( $scripts as $name => $script ) { if ( substr( $name, -8 ) === 'language' ) { continue; } if ( in_array( self::PREFIX . 'analysis-package', $script['deps'], true ) ) { $scripts[ $name ]['deps'][] = self::PREFIX . YoastSEO()->helpers->language->get_researcher_language() . '-language'; } } return $scripts; } /** * Loads a generated asset file. * * @param array $args { * The arguments. * * @type string $asset_file The asset file to load. * @type int $ext_length The length of the extension, including suffix, of the filename. * @type string $suffix Optional. The suffix of the asset name. * @type array<string, string[]> $additional_deps Optional. The additional dependencies assets may have. * @type string $base_dir Optional. The base directory of the asset. * @type string[] $header_scripts Optional. The script names that should be in the header. * } * * @return array { * The scripts to be registered. * * @type string $name The name of the asset. * @type string $src The src of the asset. * @type string[] $deps The dependenies of the asset. * @type bool $in_footer Whether or not the asset should be in the footer. * } */ protected function load_generated_asset_file( $args ) { $args = wp_parse_args( $args, [ 'suffix' => '', 'additional_deps' => [], 'base_dir' => '', 'header_scripts' => [], ] ); $scripts = []; $assets = require $args['asset_file']; foreach ( $assets as $file => $data ) { $name = substr( $file, 0, -$args['ext_length'] ); $name = strtolower( preg_replace( '/([A-Z])/', '-$1', $name ) ); $name .= $args['suffix']; $deps = $data['dependencies']; if ( isset( $args['additional_deps'][ $name ] ) ) { $deps = array_merge( $deps, $args['additional_deps'][ $name ] ); } $scripts[ $name ] = [ 'name' => $name, 'src' => $args['base_dir'] . $file, 'deps' => $deps, 'in_footer' => ! in_array( $name, $args['header_scripts'], true ), 'version' => $data['version'], ]; } return $scripts; } /** * Loads the scripts that should be renamed for BC. * * @return array { * The scripts to be registered. * * @type string $name The name of the asset. * @type string $src The src of the asset. * @type string[] $deps The dependenies of the asset. * @type bool $in_footer Whether or not the asset should be in the footer. * } */ protected function load_renamed_scripts() { $scripts = []; $renamed_scripts = [ 'admin-global-script' => 'admin-global', 'analysis' => 'analysis-package', 'analysis-report' => 'analysis-report-package', 'api' => 'api-client', 'commons' => 'commons-package', 'edit-page' => 'edit-page-script', 'draft-js' => 'draft-js-package', 'feature-flag' => 'feature-flag-package', 'helpers' => 'helpers-package', 'jed' => 'jed-package', 'chart.js' => 'chart.js-package', 'legacy-components' => 'components-package', 'network-admin-script' => 'network-admin', 'redux' => 'redux-package', 'replacement-variable-editor' => 'replacement-variable-editor-package', 'search-metadata-previews' => 'search-metadata-previews-package', 'social-metadata-forms' => 'social-metadata-forms-package', 'styled-components' => 'styled-components-package', 'style-guide' => 'style-guide-package', 'yoast-components' => 'components-new-package', ]; foreach ( $renamed_scripts as $original => $replacement ) { $scripts[] = [ 'name' => $original, 'src' => false, 'deps' => [ self::PREFIX . $replacement ], ]; } return $scripts; } /** * Returns the styles that need to be registered. * * @todo Data format is not self-documenting. Needs explanation inline. R. * * @return array Styles that need to be registered. */ protected function styles_to_be_registered() { $flat_version = $this->flatten_version( WPSEO_VERSION ); return [ [ 'name' => 'admin-css', 'src' => 'yst_plugin_tools-' . $flat_version, 'deps' => [ self::PREFIX . 'toggle-switch' ], ], [ 'name' => 'toggle-switch', 'src' => 'toggle-switch-' . $flat_version, ], [ 'name' => 'dismissible', 'src' => 'wpseo-dismissible-' . $flat_version, ], [ 'name' => 'notifications', 'src' => 'notifications-' . $flat_version, ], [ 'name' => 'alert', 'src' => 'alerts-' . $flat_version, ], [ 'name' => 'edit-page', 'src' => 'edit-page-' . $flat_version, ], [ 'name' => 'featured-image', 'src' => 'featured-image-' . $flat_version, ], [ 'name' => 'metabox-css', 'src' => 'metabox-' . $flat_version, 'deps' => [ self::PREFIX . 'admin-css', self::PREFIX . 'tailwind', 'wp-components', ], ], [ 'name' => 'ai-generator', 'src' => 'ai-generator-' . $flat_version, 'deps' => [ self::PREFIX . 'tailwind', self::PREFIX . 'introductions', ], ], [ 'name' => 'introductions', 'src' => 'introductions-' . $flat_version, 'deps' => [ self::PREFIX . 'tailwind' ], ], [ 'name' => 'wp-dashboard', 'src' => 'dashboard-' . $flat_version, ], [ 'name' => 'scoring', 'src' => 'yst_seo_score-' . $flat_version, ], [ 'name' => 'adminbar', 'src' => 'adminbar-' . $flat_version, 'deps' => [ 'admin-bar', ], ], [ 'name' => 'primary-category', 'src' => 'metabox-primary-category-' . $flat_version, ], [ 'name' => 'admin-global', 'src' => 'admin-global-' . $flat_version, ], [ 'name' => 'extensions', 'src' => 'yoast-extensions-' . $flat_version, 'deps' => [ 'wp-components', ], ], [ 'name' => 'filter-explanation', 'src' => 'filter-explanation-' . $flat_version, ], [ 'name' => 'monorepo', 'src' => 'monorepo-' . $flat_version, ], [ 'name' => 'structured-data-blocks', 'src' => 'structured-data-blocks-' . $flat_version, 'deps' => [ 'wp-edit-blocks' ], ], [ 'name' => 'elementor', 'src' => 'elementor-' . $flat_version, ], [ 'name' => 'tailwind', 'src' => 'tailwind-' . $flat_version, ], [ 'name' => 'new-settings', 'src' => 'new-settings-' . $flat_version, 'deps' => [ self::PREFIX . 'tailwind' ], ], [ 'name' => 'black-friday-banner', 'src' => 'black-friday-banner-' . $flat_version, 'deps' => [ self::PREFIX . 'tailwind' ], ], [ 'name' => 'academy', 'src' => 'academy-' . $flat_version, 'deps' => [ self::PREFIX . 'tailwind' ], ], [ 'name' => 'support', 'src' => 'support-' . $flat_version, 'deps' => [ self::PREFIX . 'tailwind' ], ], [ 'name' => 'workouts', 'src' => 'workouts-' . $flat_version, 'deps' => [ self::PREFIX . 'monorepo', ], ], [ 'name' => 'first-time-configuration', 'src' => 'first-time-configuration-' . $flat_version, 'deps' => [ self::PREFIX . 'tailwind' ], ], [ 'name' => 'inside-editor', 'src' => 'inside-editor-' . $flat_version, ], ]; } /** * Determines the URL of the asset. * * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. * @param string $type The type of asset. Usually JS or CSS. * * @return string The URL of the asset. */ protected function get_url( WPSEO_Admin_Asset $asset, $type ) { $scheme = wp_parse_url( $asset->get_src(), PHP_URL_SCHEME ); if ( in_array( $scheme, [ 'http', 'https' ], true ) ) { return $asset->get_src(); } return $this->asset_location->get_url( $asset, $type ); } } class-admin-asset-seo-location.php 0000644 00000004116 15150262017 0013160 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Determines the location of an asset within the SEO plugin. */ final class WPSEO_Admin_Asset_SEO_Location implements WPSEO_Admin_Asset_Location { /** * Path to the plugin file. * * @var string */ protected $plugin_file; /** * Whether or not to add the file suffix to the asset. * * @var bool */ protected $add_suffix = true; /** * The plugin file to base the asset location upon. * * @param string $plugin_file The plugin file string. * @param bool $add_suffix Optional. Whether or not a file suffix should be added. */ public function __construct( $plugin_file, $add_suffix = true ) { $this->plugin_file = $plugin_file; $this->add_suffix = $add_suffix; } /** * Determines the URL of the asset on the dev server. * * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. * @param string $type The type of asset. Usually JS or CSS. * * @return string The URL of the asset. */ public function get_url( WPSEO_Admin_Asset $asset, $type ) { $path = $this->get_path( $asset, $type ); if ( empty( $path ) ) { return ''; } return plugins_url( $path, $this->plugin_file ); } /** * Determines the path relative to the plugin folder of an asset. * * @param WPSEO_Admin_Asset $asset The asset to determine the path for. * @param string $type The type of asset. * * @return string The path to the asset file. */ protected function get_path( WPSEO_Admin_Asset $asset, $type ) { $relative_path = ''; $rtl_suffix = ''; switch ( $type ) { case WPSEO_Admin_Asset::TYPE_JS: $relative_path = 'js/dist/' . $asset->get_src(); if ( $this->add_suffix ) { $relative_path .= $asset->get_suffix() . '.js'; } break; case WPSEO_Admin_Asset::TYPE_CSS: // Path and suffix for RTL stylesheets. if ( is_rtl() && $asset->has_rtl() ) { $rtl_suffix = '-rtl'; } $relative_path = 'css/dist/' . $asset->get_src() . $rtl_suffix . $asset->get_suffix() . '.css'; break; } return $relative_path; } } class-admin-editor-specific-replace-vars.php 0000644 00000014537 15150262017 0015112 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Determines the editor specific replacement variables. */ class WPSEO_Admin_Editor_Specific_Replace_Vars { /** * Holds the editor specific replacements variables. * * @var array The editor specific replacement variables. */ protected $replacement_variables = [ // Posts types. 'page' => [ 'id', 'pt_single', 'pt_plural', 'parent_title' ], 'post' => [ 'id', 'term404', 'pt_single', 'pt_plural' ], // Custom post type. 'custom_post_type' => [ 'id', 'term404', 'pt_single', 'pt_plural', 'parent_title' ], // Settings - archive pages. 'custom-post-type_archive' => [ 'pt_single', 'pt_plural' ], // Taxonomies. 'category' => [ 'term_title', 'term_description', 'category_description', 'parent_title', 'term_hierarchy' ], 'post_tag' => [ 'term_title', 'term_description', 'tag_description' ], 'post_format' => [ 'term_title' ], // Custom taxonomy. 'term-in-custom-taxonomy' => [ 'term_title', 'term_description', 'category_description', 'parent_title', 'term_hierarchy' ], // Settings - special pages. 'search' => [ 'searchphrase' ], ]; /** * WPSEO_Admin_Editor_Specific_Replace_Vars constructor. */ public function __construct() { $this->add_for_page_types( [ 'page', 'post', 'custom_post_type' ], WPSEO_Custom_Fields::get_custom_fields() ); $this->add_for_page_types( [ 'post', 'term-in-custom-taxonomy' ], WPSEO_Custom_Taxonomies::get_custom_taxonomies() ); } /** * Retrieves the editor specific replacement variables. * * @return array The editor specific replacement variables. */ public function get() { /** * Filter: Adds the possibility to add extra editor specific replacement variables. * * @param array $replacement_variables Array of editor specific replace vars. */ $replacement_variables = apply_filters( 'wpseo_editor_specific_replace_vars', $this->replacement_variables ); if ( ! is_array( $replacement_variables ) ) { $replacement_variables = $this->replacement_variables; } return array_filter( $replacement_variables, 'is_array' ); } /** * Retrieves the generic replacement variable names. * * Which are the replacement variables without the editor specific ones. * * @param array $replacement_variables Possibly generic replacement variables. * * @return array The generic replacement variable names. */ public function get_generic( $replacement_variables ) { $shared_variables = array_diff( $this->extract_names( $replacement_variables ), $this->get_unique_replacement_variables() ); return array_values( $shared_variables ); } /** * Determines the page type of the current term. * * @param string $taxonomy The taxonomy name. * * @return string The page type. */ public function determine_for_term( $taxonomy ) { $replacement_variables = $this->get(); if ( array_key_exists( $taxonomy, $replacement_variables ) ) { return $taxonomy; } return 'term-in-custom-taxonomy'; } /** * Determines the page type of the current post. * * @param WP_Post $post A WordPress post instance. * * @return string The page type. */ public function determine_for_post( $post ) { if ( $post instanceof WP_Post === false ) { return 'post'; } $replacement_variables = $this->get(); if ( array_key_exists( $post->post_type, $replacement_variables ) ) { return $post->post_type; } return 'custom_post_type'; } /** * Determines the page type for a post type. * * @param string $post_type The name of the post_type. * @param string $fallback The page type to fall back to. * * @return string The page type. */ public function determine_for_post_type( $post_type, $fallback = 'custom_post_type' ) { if ( ! $this->has_for_page_type( $post_type ) ) { return $fallback; } return $post_type; } /** * Determines the page type for an archive page. * * @param string $name The name of the archive. * @param string $fallback The page type to fall back to. * * @return string The page type. */ public function determine_for_archive( $name, $fallback = 'custom-post-type_archive' ) { $page_type = $name . '_archive'; if ( ! $this->has_for_page_type( $page_type ) ) { return $fallback; } return $page_type; } /** * Adds the replavement variables for the given page types. * * @param array $page_types Page types to add variables for. * @param array $replacement_variables_to_add The variables to add. * * @return void */ protected function add_for_page_types( array $page_types, array $replacement_variables_to_add ) { if ( empty( $replacement_variables_to_add ) ) { return; } $replacement_variables_to_add = array_fill_keys( $page_types, $replacement_variables_to_add ); $replacement_variables = $this->replacement_variables; $this->replacement_variables = array_merge_recursive( $replacement_variables, $replacement_variables_to_add ); } /** * Extracts the names from the given replacements variables. * * @param array $replacement_variables Replacement variables to extract the name from. * * @return array Extracted names. */ protected function extract_names( $replacement_variables ) { $extracted_names = []; foreach ( $replacement_variables as $replacement_variable ) { if ( empty( $replacement_variable['name'] ) ) { continue; } $extracted_names[] = $replacement_variable['name']; } return $extracted_names; } /** * Returns whether the given page type has editor specific replace vars. * * @param string $page_type The page type to check. * * @return bool True if there are associated editor specific replace vars. */ protected function has_for_page_type( $page_type ) { $replacement_variables = $this->get(); return ( ! empty( $replacement_variables[ $page_type ] ) && is_array( $replacement_variables[ $page_type ] ) ); } /** * Merges all editor specific replacement variables into one array and removes duplicates. * * @return array The list of unique editor specific replacement variables. */ protected function get_unique_replacement_variables() { $merged_replacement_variables = call_user_func_array( 'array_merge', array_values( $this->get() ) ); return array_unique( $merged_replacement_variables ); } } class-admin-gutenberg-compatibility-notification.php 0000644 00000005062 15150262017 0016765 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Handles the Gutenberg Compatibility notification showing and hiding. */ class WPSEO_Admin_Gutenberg_Compatibility_Notification implements WPSEO_WordPress_Integration { /** * Notification ID to use. * * @var string */ private $notification_id = 'wpseo-outdated-gutenberg-plugin'; /** * Instance of gutenberg compatibility checker. * * @var WPSEO_Gutenberg_Compatibility */ protected $compatibility_checker; /** * Instance of Yoast Notification Center. * * @var Yoast_Notification_Center */ protected $notification_center; /** * WPSEO_Admin_Gutenberg_Compatibility_Notification constructor. */ public function __construct() { $this->compatibility_checker = new WPSEO_Gutenberg_Compatibility(); $this->notification_center = Yoast_Notification_Center::get(); } /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { add_action( 'admin_init', [ $this, 'manage_notification' ] ); } /** * Manages if the notification should be shown or removed. * * @return void */ public function manage_notification() { /** * Filter: 'yoast_display_gutenberg_compat_notification' - Allows developer to disable the Gutenberg compatibility * notification. * * @param bool $display_notification */ $display_notification = apply_filters( 'yoast_display_gutenberg_compat_notification', true ); if ( ! $this->compatibility_checker->is_installed() || $this->compatibility_checker->is_fully_compatible() || ! $display_notification ) { $this->notification_center->remove_notification_by_id( $this->notification_id ); return; } $this->add_notification(); } /** * Adds the notification to the notificaton center. * * @return void */ protected function add_notification() { $level = $this->compatibility_checker->is_below_minimum() ? Yoast_Notification::ERROR : Yoast_Notification::WARNING; $message = sprintf( /* translators: %1$s expands to Yoast SEO, %2$s expands to the installed version, %3$s expands to Gutenberg */ __( '%1$s detected you are using version %2$s of %3$s, please update to the latest version to prevent compatibility issues.', 'wordpress-seo' ), 'Yoast SEO', $this->compatibility_checker->get_installed_version(), 'Gutenberg' ); $notification = new Yoast_Notification( $message, [ 'id' => $this->notification_id, 'type' => $level, 'priority' => 1, ] ); $this->notification_center->add_notification( $notification ); } } class-admin-help-panel.php 0000644 00000005310 15150262017 0011471 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Generates the HTML for an inline Help Button and Panel. */ class WPSEO_Admin_Help_Panel { /** * Unique identifier of the element the inline help refers to, used as an identifier in the html. * * @var string */ private $id; /** * The Help Button text. Needs a properly escaped string. * * @var string */ private $help_button_text; /** * The Help Panel content. Needs a properly escaped string (might contain HTML). * * @var string */ private $help_content; /** * Optional Whether to print out a container div element for the Help Panel, used for styling. * * @var string */ private $wrapper; /** * Constructor. * * @param string $id Unique identifier of the element the inline help refers to, used as * an identifier in the html. * @param string $help_button_text The Help Button text. Needs a properly escaped string. * @param string $help_content The Help Panel content. Needs a properly escaped string (might contain HTML). * @param string $wrapper Optional Whether to print out a container div element for the Help Panel, * used for styling. * Pass a `has-wrapper` value to print out the container. Default: no container. */ public function __construct( $id, $help_button_text, $help_content, $wrapper = '' ) { $this->id = $id; $this->help_button_text = $help_button_text; $this->help_content = $help_content; $this->wrapper = $wrapper; } /** * Returns the html for the Help Button. * * @return string */ public function get_button_html() { if ( ! $this->id || ! $this->help_button_text || ! $this->help_content ) { return ''; } return sprintf( ' <button type="button" class="yoast_help yoast-help-button dashicons" id="%1$s-help-toggle" aria-expanded="false" aria-controls="%1$s-help"><span class="yoast-help-icon" aria-hidden="true"></span><span class="screen-reader-text">%2$s</span></button>', esc_attr( $this->id ), $this->help_button_text ); } /** * Returns the html for the Help Panel. * * @return string */ public function get_panel_html() { if ( ! $this->id || ! $this->help_button_text || ! $this->help_content ) { return ''; } $wrapper_start = ''; $wrapper_end = ''; if ( $this->wrapper === 'has-wrapper' ) { $wrapper_start = '<div class="yoast-seo-help-container">'; $wrapper_end = '</div>'; } return sprintf( '%1$s<p id="%2$s-help" class="yoast-help-panel">%3$s</p>%4$s', $wrapper_start, esc_attr( $this->id ), $this->help_content, $wrapper_end ); } } class-admin-init.php 0000644 00000025315 15150262017 0010416 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Performs the load on admin side. */ class WPSEO_Admin_Init { /** * Holds the global `$pagenow` variable's value. * * @var string */ private $pagenow; /** * Holds the asset manager. * * @var WPSEO_Admin_Asset_Manager */ private $asset_manager; /** * Class constructor. */ public function __construct() { $GLOBALS['wpseo_admin'] = new WPSEO_Admin(); $this->pagenow = $GLOBALS['pagenow']; $this->asset_manager = new WPSEO_Admin_Asset_Manager(); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_dismissible' ] ); add_action( 'admin_init', [ $this, 'unsupported_php_notice' ], 15 ); add_action( 'admin_init', [ $this, 'remove_translations_notification' ], 15 ); add_action( 'admin_init', [ $this->asset_manager, 'register_assets' ] ); add_action( 'admin_init', [ $this, 'show_hook_deprecation_warnings' ] ); add_action( 'admin_init', [ 'WPSEO_Plugin_Conflict', 'hook_check_for_plugin_conflicts' ] ); add_action( 'admin_notices', [ $this, 'permalink_settings_notice' ] ); add_action( 'post_submitbox_misc_actions', [ $this, 'add_publish_box_section' ] ); $this->load_meta_boxes(); $this->load_taxonomy_class(); $this->load_admin_page_class(); $this->load_admin_user_class(); $this->load_xml_sitemaps_admin(); $this->load_plugin_suggestions(); } /** * Enqueue our styling for dismissible yoast notifications. * * @return void */ public function enqueue_dismissible() { $this->asset_manager->enqueue_style( 'dismissible' ); } /** * Removes any notification for incomplete translations. * * @return void */ public function remove_translations_notification() { $notification_center = Yoast_Notification_Center::get(); $notification_center->remove_notification_by_id( 'i18nModuleTranslationAssistance' ); } /** * Creates an unsupported PHP version notification in the notification center. * * @return void */ public function unsupported_php_notice() { $notification_center = Yoast_Notification_Center::get(); $notification_center->remove_notification_by_id( 'wpseo-dismiss-unsupported-php' ); } /** * Gets the latest released major WordPress version from the WordPress stable-check api. * * @return float|int The latest released major WordPress version. 0 when the stable-check API doesn't respond. */ private function get_latest_major_wordpress_version() { $core_updates = get_core_updates( [ 'dismissed' => true ] ); if ( $core_updates === false ) { return 0; } $wp_version_latest = get_bloginfo( 'version' ); foreach ( $core_updates as $update ) { if ( $update->response === 'upgrade' && version_compare( $update->version, $wp_version_latest, '>' ) ) { $wp_version_latest = $update->version; } } // Strip the patch version and convert to a float. return (float) $wp_version_latest; } /** * Helper to verify if the user is currently visiting one of our admin pages. * * @return bool */ private function on_wpseo_admin_page() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( ! isset( $_GET['page'] ) || ! is_string( $_GET['page'] ) ) { return false; } if ( $this->pagenow !== 'admin.php' ) { return false; } // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $current_page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); return strpos( $current_page, 'wpseo' ) === 0; } /** * Whether we should load the meta box classes. * * @return bool true if we should load the meta box classes, false otherwise. */ private function should_load_meta_boxes() { /** * Filter: 'wpseo_always_register_metaboxes_on_admin' - Allow developers to change whether * the WPSEO metaboxes are only registered on the typical pages (lean loading) or always * registered when in admin. * * @param bool $register_metaboxes Whether to always register the metaboxes or not. Defaults to false. */ if ( apply_filters( 'wpseo_always_register_metaboxes_on_admin', false ) ) { return true; } // If we are in a post editor. if ( WPSEO_Metabox::is_post_overview( $this->pagenow ) || WPSEO_Metabox::is_post_edit( $this->pagenow ) ) { return true; } // If we are doing an inline save. if ( check_ajax_referer( 'inlineeditnonce', '_inline_edit', false ) && isset( $_POST['action'] ) && sanitize_text_field( wp_unslash( $_POST['action'] ) ) === 'inline-save' ) { return true; } return false; } /** * Determine whether we should load the meta box class and if so, load it. * * @return void */ private function load_meta_boxes() { if ( $this->should_load_meta_boxes() ) { $GLOBALS['wpseo_metabox'] = new WPSEO_Metabox(); $GLOBALS['wpseo_meta_columns'] = new WPSEO_Meta_Columns(); } } /** * Determine if we should load our taxonomy edit class and if so, load it. * * @return void */ private function load_taxonomy_class() { if ( WPSEO_Taxonomy::is_term_edit( $this->pagenow ) || WPSEO_Taxonomy::is_term_overview( $this->pagenow ) ) { new WPSEO_Taxonomy(); } } /** * Determine if we should load our admin pages class and if so, load it. * * Loads admin page class for all admin pages starting with `wpseo_`. * * @return void */ private function load_admin_user_class() { if ( in_array( $this->pagenow, [ 'user-edit.php', 'profile.php' ], true ) && current_user_can( 'edit_users' ) ) { new WPSEO_Admin_User_Profile(); } } /** * Determine if we should load our admin pages class and if so, load it. * * Loads admin page class for all admin pages starting with `wpseo_`. * * @return void */ private function load_admin_page_class() { if ( $this->on_wpseo_admin_page() ) { // For backwards compatabilty, this still needs a global, for now... $GLOBALS['wpseo_admin_pages'] = new WPSEO_Admin_Pages(); $page = null; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); } // Only renders Yoast SEO Premium upsells when the page is a Yoast SEO page. if ( $page !== null && WPSEO_Utils::is_yoast_seo_free_page( $page ) ) { $this->register_premium_upsell_admin_block(); } } } /** * Loads the plugin suggestions. * * @return void */ private function load_plugin_suggestions() { $suggestions = new WPSEO_Suggested_Plugins( new WPSEO_Plugin_Availability(), Yoast_Notification_Center::get() ); $suggestions->register_hooks(); } /** * Registers the Premium Upsell Admin Block. * * @return void */ private function register_premium_upsell_admin_block() { if ( ! YoastSEO()->helpers->product->is_premium() ) { $upsell_block = new WPSEO_Premium_Upsell_Admin_Block( 'wpseo_admin_promo_footer' ); $upsell_block->register_hooks(); } } /** * See if we should start our XML Sitemaps Admin class. * * @return void */ private function load_xml_sitemaps_admin() { if ( WPSEO_Options::get( 'enable_xml_sitemap', false ) ) { new WPSEO_Sitemaps_Admin(); } } /** * Shows deprecation warnings to the user if a plugin has registered a filter we have deprecated. * * @return void */ public function show_hook_deprecation_warnings() { global $wp_filter; if ( wp_doing_ajax() ) { return; } // WordPress hooks that have been deprecated since a Yoast SEO version. $deprecated_filters = [ 'wpseo_genesis_force_adjacent_rel_home' => [ 'version' => '9.4', 'alternative' => null, ], 'wpseo_opengraph' => [ 'version' => '14.0', 'alternative' => null, ], 'wpseo_twitter' => [ 'version' => '14.0', 'alternative' => null, ], 'wpseo_twitter_taxonomy_image' => [ 'version' => '14.0', 'alternative' => null, ], 'wpseo_twitter_metatag_key' => [ 'version' => '14.0', 'alternative' => null, ], 'wp_seo_get_bc_ancestors' => [ 'version' => '14.0', 'alternative' => 'wpseo_breadcrumb_links', ], 'validate_facebook_app_id_api_response_code' => [ 'version' => '15.5', 'alternative' => null, ], 'validate_facebook_app_id_api_response_body' => [ 'version' => '15.5', 'alternative' => null, ], ]; // Determine which filters have been registered. $deprecated_notices = array_intersect( array_keys( $deprecated_filters ), array_keys( $wp_filter ) ); // Show notice for each deprecated filter or action that has been registered. foreach ( $deprecated_notices as $deprecated_filter ) { $deprecation_info = $deprecated_filters[ $deprecated_filter ]; // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Only uses the hardcoded values from above. _deprecated_hook( $deprecated_filter, 'WPSEO ' . $deprecation_info['version'], $deprecation_info['alternative'] ); // phpcs:enable } } /** * Check if the permalink uses %postname%. * * @return bool */ private function has_postname_in_permalink() { return ( strpos( get_option( 'permalink_structure' ), '%postname%' ) !== false ); } /** * Shows a notice on the permalink settings page. * * @return void */ public function permalink_settings_notice() { global $pagenow; if ( $pagenow === 'options-permalink.php' ) { printf( '<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>', esc_html__( 'WARNING:', 'wordpress-seo' ), sprintf( /* translators: %1$s and %2$s expand to <em> items to emphasize the word in the middle. */ 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' ), '<em>', '</em>' ), esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/why-permalinks/' ) ), // The link's content. esc_html__( 'Learn about why permalinks are important for SEO.', 'wordpress-seo' ) ); } } /** * Adds a custom Yoast section within the Classic Editor publish box. * * @param WP_Post $post The current post object. * * @return void */ public function add_publish_box_section( $post ) { if ( in_array( $this->pagenow, [ 'post.php', 'post-new.php' ], true ) ) { ?> <div id="yoast-seo-publishbox-section"></div> <?php /** * Fires after the post time/date setting in the Publish meta box. * * @param WP_Post $post The current post object. */ do_action( 'wpseo_publishbox_misc_actions', $post ); } } } class-admin.php 0000644 00000032560 15150262017 0007455 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Integrations\Settings_Integration; /** * Class that holds most of the admin functionality for Yoast SEO. */ class WPSEO_Admin { /** * The page identifier used in WordPress to register the admin page. * * !DO NOT CHANGE THIS! * * @var string */ public const PAGE_IDENTIFIER = 'wpseo_dashboard'; /** * Array of classes that add admin functionality. * * @var array */ protected $admin_features; /** * Class constructor. */ public function __construct() { $integrations = []; global $pagenow; $wpseo_menu = new WPSEO_Menu(); $wpseo_menu->register_hooks(); if ( is_multisite() ) { WPSEO_Options::maybe_set_multisite_defaults( false ); } if ( WPSEO_Options::get( 'stripcategorybase' ) === true ) { add_action( 'created_category', [ $this, 'schedule_rewrite_flush' ] ); add_action( 'edited_category', [ $this, 'schedule_rewrite_flush' ] ); add_action( 'delete_category', [ $this, 'schedule_rewrite_flush' ] ); } if ( WPSEO_Options::get( 'disable-attachment' ) === true ) { add_filter( 'wpseo_accessible_post_types', [ 'WPSEO_Post_Type', 'filter_attachment_post_type' ] ); } add_filter( 'plugin_action_links_' . WPSEO_BASENAME, [ $this, 'add_action_link' ], 10, 2 ); add_filter( 'network_admin_plugin_action_links_' . WPSEO_BASENAME, [ $this, 'add_action_link' ], 10, 2 ); add_action( 'admin_enqueue_scripts', [ $this, 'config_page_scripts' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_global_style' ] ); add_filter( 'user_contactmethods', [ $this, 'update_contactmethods' ], 10, 1 ); add_action( 'after_switch_theme', [ $this, 'switch_theme' ] ); add_action( 'switch_theme', [ $this, 'switch_theme' ] ); add_filter( 'set-screen-option', [ $this, 'save_bulk_edit_options' ], 10, 3 ); add_action( 'admin_init', [ 'WPSEO_Plugin_Conflict', 'hook_check_for_plugin_conflicts' ], 10, 1 ); add_action( 'admin_init', [ $this, 'map_manage_options_cap' ] ); WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'wpseo' ); WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'home' ); if ( YoastSEO()->helpers->current_page->is_yoast_seo_page() ) { add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); } $this->set_upsell_notice(); $this->initialize_cornerstone_content(); if ( WPSEO_Utils::is_plugin_network_active() ) { $integrations[] = new Yoast_Network_Admin(); } $this->admin_features = [ 'dashboard_widget' => new Yoast_Dashboard_Widget(), 'wincher_dashboard_widget' => new Wincher_Dashboard_Widget(), ]; if ( WPSEO_Metabox::is_post_overview( $pagenow ) || WPSEO_Metabox::is_post_edit( $pagenow ) ) { $this->admin_features['primary_category'] = new WPSEO_Primary_Term_Admin(); } $integrations[] = new WPSEO_Yoast_Columns(); $integrations[] = new WPSEO_Statistic_Integration(); $integrations[] = new WPSEO_Capability_Manager_Integration( WPSEO_Capability_Manager_Factory::get() ); $integrations[] = new WPSEO_Admin_Gutenberg_Compatibility_Notification(); $integrations[] = new WPSEO_Expose_Shortlinks(); $integrations[] = new WPSEO_MyYoast_Proxy(); $integrations[] = new WPSEO_Schema_Person_Upgrade_Notification(); $integrations[] = new WPSEO_Tracking( 'https://tracking.yoast.com/stats', ( WEEK_IN_SECONDS * 2 ) ); $integrations[] = new WPSEO_Admin_Settings_Changed_Listener(); $integrations = array_merge( $integrations, $this->get_admin_features(), $this->initialize_cornerstone_content() ); foreach ( $integrations as $integration ) { $integration->register_hooks(); } } /** * Schedules a rewrite flush to happen at shutdown. * * @return void */ public function schedule_rewrite_flush() { // Bail if this is a multisite installation and the site has been switched. if ( is_multisite() && ms_is_switched() ) { return; } add_action( 'shutdown', 'flush_rewrite_rules' ); } /** * Returns all the classes for the admin features. * * @return array */ public function get_admin_features() { return $this->admin_features; } /** * Register assets needed on admin pages. * * @return void */ public function enqueue_assets() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form data. $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; if ( $page === 'wpseo_licenses' ) { $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_style( 'extensions' ); } } /** * Returns the manage_options capability. * * @return string The capability to use. */ public function get_manage_options_cap() { /** * Filter: 'wpseo_manage_options_capability' - Allow changing the capability users need to view the settings pages. * * @param string $capability The capability. */ return apply_filters( 'wpseo_manage_options_capability', 'wpseo_manage_options' ); } /** * Maps the manage_options cap on saving an options page to wpseo_manage_options. * * @return void */ public function map_manage_options_cap() { // phpcs:ignore WordPress.Security -- The variable is only used in strpos and thus safe to not unslash or sanitize. $option_page = ! empty( $_POST['option_page'] ) ? $_POST['option_page'] : ''; if ( strpos( $option_page, 'yoast_wpseo' ) === 0 || strpos( $option_page, Settings_Integration::PAGE ) === 0 ) { add_filter( 'option_page_capability_' . $option_page, [ $this, 'get_manage_options_cap' ] ); } } /** * Adds the ability to choose how many posts are displayed per page * on the bulk edit pages. * * @return void */ public function bulk_edit_options() { $option = 'per_page'; $args = [ 'label' => __( 'Posts', 'wordpress-seo' ), 'default' => 10, 'option' => 'wpseo_posts_per_page', ]; add_screen_option( $option, $args ); } /** * Saves the posts per page limit for bulk edit pages. * * @param int $status Status value to pass through. * @param string $option Option name. * @param int $value Count value to check. * * @return int */ public function save_bulk_edit_options( $status, $option, $value ) { if ( $option && ( $value > 0 && $value < 1000 ) === 'wpseo_posts_per_page' ) { return $value; } return $status; } /** * Adds links to Premium Support and FAQ under the plugin in the plugin overview page. * * @param array $links Array of links for the plugins, adapted when the current plugin is found. * @param string $file The filename for the current plugin, which the filter loops through. * * @return array */ public function add_action_link( $links, $file ) { $first_time_configuration_notice_helper = YoastSEO()->helpers->first_time_configuration_notice; if ( $file === WPSEO_BASENAME && WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { if ( is_network_admin() ) { $settings_url = network_admin_url( 'admin.php?page=' . self::PAGE_IDENTIFIER ); } else { $settings_url = admin_url( 'admin.php?page=' . self::PAGE_IDENTIFIER ); } $settings_link = '<a href="' . esc_url( $settings_url ) . '">' . __( 'Settings', 'wordpress-seo' ) . '</a>'; array_unshift( $links, $settings_link ); } // Add link to docs. $faq_link = '<a href="' . esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/1yc' ) ) . '" target="_blank">' . __( 'FAQ', 'wordpress-seo' ) . '</a>'; array_unshift( $links, $faq_link ); if ( $first_time_configuration_notice_helper->first_time_configuration_not_finished() && ! is_network_admin() ) { $configuration_title = ( ! $first_time_configuration_notice_helper->should_show_alternate_message() ) ? 'first-time configuration' : 'SEO configuration'; /* translators: CTA to finish the first time configuration. %s: Either first-time SEO configuration or SEO configuration. */ $message = sprintf( __( 'Finish your %s', 'wordpress-seo' ), $configuration_title ); $ftc_link = '<a href="' . esc_url( admin_url( 'admin.php?page=wpseo_dashboard#top#first-time-configuration' ) ) . '" target="_blank">' . $message . '</a>'; array_unshift( $links, $ftc_link ); } $addon_manager = new WPSEO_Addon_Manager(); if ( YoastSEO()->helpers->product->is_premium() ) { // Remove Free 'deactivate' link if Premium is active as well. We don't want users to deactivate Free when Premium is active. unset( $links['deactivate'] ); $no_deactivation_explanation = '<span style="color: #32373c">' . sprintf( /* translators: %s expands to Yoast SEO Premium. */ __( 'Required by %s', 'wordpress-seo' ), 'Yoast SEO Premium' ) . '</span>'; array_unshift( $links, $no_deactivation_explanation ); if ( $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ) ) { return $links; } // Add link to where premium can be activated. $activation_link = '<a style="font-weight: bold;" href="' . esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/activate-my-yoast' ) ) . '" target="_blank">' . __( 'Activate your subscription', 'wordpress-seo' ) . '</a>'; array_unshift( $links, $activation_link ); return $links; } // Add link to premium landing page. $premium_link = '<a style="font-weight: bold;" href="' . esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/1yb' ) ) . '" target="_blank" data-action="load-nfd-ctb" data-ctb-id="f6a84663-465f-4cb5-8ba5-f7a6d72224b2">' . __( 'Get Premium', 'wordpress-seo' ) . '</a>'; array_unshift( $links, $premium_link ); return $links; } /** * Enqueues the (tiny) global JS needed for the plugin. * * @return void */ public function config_page_scripts() { $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_script( 'admin-global' ); $asset_manager->localize_script( 'admin-global', 'wpseoAdminGlobalL10n', $this->localize_admin_global_script() ); } /** * Enqueues the (tiny) global stylesheet needed for the plugin. * * @return void */ public function enqueue_global_style() { $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_style( 'admin-global' ); } /** * Filter the $contactmethods array and add a set of social profiles. * * These are used with the Facebook author, rel="author" and Twitter cards implementation. * * @param array $contactmethods Currently set contactmethods. * * @return array Contactmethods with added contactmethods. */ public function update_contactmethods( $contactmethods ) { $contactmethods['facebook'] = __( 'Facebook profile URL', 'wordpress-seo' ); $contactmethods['instagram'] = __( 'Instagram profile URL', 'wordpress-seo' ); $contactmethods['linkedin'] = __( 'LinkedIn profile URL', 'wordpress-seo' ); $contactmethods['myspace'] = __( 'MySpace profile URL', 'wordpress-seo' ); $contactmethods['pinterest'] = __( 'Pinterest profile URL', 'wordpress-seo' ); $contactmethods['soundcloud'] = __( 'SoundCloud profile URL', 'wordpress-seo' ); $contactmethods['tumblr'] = __( 'Tumblr profile URL', 'wordpress-seo' ); $contactmethods['twitter'] = __( 'Twitter username (without @)', 'wordpress-seo' ); $contactmethods['youtube'] = __( 'YouTube profile URL', 'wordpress-seo' ); $contactmethods['wikipedia'] = __( 'Wikipedia page about you', 'wordpress-seo' ) . '<br/><small>' . __( '(if one exists)', 'wordpress-seo' ) . '</small>'; return $contactmethods; } /** * Log the updated timestamp for user profiles when theme is changed. * * @return void */ public function switch_theme() { $users = get_users( [ 'capability' => [ 'edit_posts' ] ] ); if ( is_array( $users ) && $users !== [] ) { foreach ( $users as $user ) { update_user_meta( $user->ID, '_yoast_wpseo_profile_updated', time() ); } } } /** * Localization for the dismiss urls. * * @return array */ private function localize_admin_global_script() { return array_merge( [ 'isRtl' => is_rtl(), 'variable_warning' => sprintf( /* translators: %1$s: '%%term_title%%' variable used in titles and meta's template that's not compatible with the given template, %2$s: expands to 'HelpScout beacon' */ __( 'Warning: the variable %1$s cannot be used in this template. See the %2$s for more info.', 'wordpress-seo' ), '<code>%s</code>', 'HelpScout beacon' ), /* translators: %s: expends to Yoast SEO */ 'help_video_iframe_title' => sprintf( __( '%s video tutorial', 'wordpress-seo' ), 'Yoast SEO' ), 'scrollable_table_hint' => __( 'Scroll to see the table content.', 'wordpress-seo' ), 'wincher_is_logged_in' => WPSEO_Options::get( 'wincher_integration_active', true ) ? YoastSEO()->helpers->wincher->login_status() : false, ], YoastSEO()->helpers->wincher->get_admin_global_links() ); } /** * Sets the upsell notice. * * @return void */ protected function set_upsell_notice() { $upsell = new WPSEO_Product_Upsell_Notice(); $upsell->dismiss_notice_listener(); $upsell->initialize(); } /** * Whether we are on the admin dashboard page. * * @return bool */ protected function on_dashboard_page() { return $GLOBALS['pagenow'] === 'index.php'; } /** * Loads the cornerstone filter. * * @return WPSEO_WordPress_Integration[] The integrations to initialize. */ protected function initialize_cornerstone_content() { if ( ! WPSEO_Options::get( 'enable_cornerstone_content' ) ) { return []; } return [ 'cornerstone_filter' => new WPSEO_Cornerstone_Filter(), ]; } } class-admin-recommended-replace-vars.php 0000644 00000013760 15150262017 0014320 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Determines the recommended replacement variables based on the context. */ class WPSEO_Admin_Recommended_Replace_Vars { /** * The recommended replacement variables. * * @var array */ protected $recommended_replace_vars = [ // Posts types. 'page' => [ 'sitename', 'title', 'sep', 'primary_category' ], 'post' => [ 'sitename', 'title', 'sep', 'primary_category' ], // Homepage. 'homepage' => [ 'sitename', 'sitedesc', 'sep' ], // Custom post type. 'custom_post_type' => [ 'sitename', 'title', 'sep' ], // Taxonomies. 'category' => [ 'sitename', 'term_title', 'sep', 'term_hierarchy' ], 'post_tag' => [ 'sitename', 'term_title', 'sep' ], 'post_format' => [ 'sitename', 'term_title', 'sep', 'page' ], // Custom taxonomy. 'term-in-custom-taxonomy' => [ 'sitename', 'term_title', 'sep', 'term_hierarchy' ], // Settings - archive pages. 'author_archive' => [ 'sitename', 'title', 'sep', 'page' ], 'date_archive' => [ 'sitename', 'sep', 'date', 'page' ], 'custom-post-type_archive' => [ 'sitename', 'title', 'sep', 'page' ], // Settings - special pages. 'search' => [ 'sitename', 'searchphrase', 'sep', 'page' ], '404' => [ 'sitename', 'sep' ], ]; /** * Determines the page type of the current term. * * @param string $taxonomy The taxonomy name. * * @return string The page type. */ public function determine_for_term( $taxonomy ) { $recommended_replace_vars = $this->get_recommended_replacevars(); if ( array_key_exists( $taxonomy, $recommended_replace_vars ) ) { return $taxonomy; } return 'term-in-custom-taxonomy'; } /** * Determines the page type of the current post. * * @param WP_Post $post A WordPress post instance. * * @return string The page type. */ public function determine_for_post( $post ) { if ( $post instanceof WP_Post === false ) { return 'post'; } if ( $post->post_type === 'page' && $this->is_homepage( $post ) ) { return 'homepage'; } $recommended_replace_vars = $this->get_recommended_replacevars(); if ( array_key_exists( $post->post_type, $recommended_replace_vars ) ) { return $post->post_type; } return 'custom_post_type'; } /** * Determines the page type for a post type. * * @param string $post_type The name of the post_type. * @param string $fallback The page type to fall back to. * * @return string The page type. */ public function determine_for_post_type( $post_type, $fallback = 'custom_post_type' ) { $page_type = $post_type; $recommended_replace_vars = $this->get_recommended_replacevars(); $has_recommended_replacevars = $this->has_recommended_replace_vars( $recommended_replace_vars, $page_type ); if ( ! $has_recommended_replacevars ) { return $fallback; } return $page_type; } /** * Determines the page type for an archive page. * * @param string $name The name of the archive. * @param string $fallback The page type to fall back to. * * @return string The page type. */ public function determine_for_archive( $name, $fallback = 'custom-post-type_archive' ) { $page_type = $name . '_archive'; $recommended_replace_vars = $this->get_recommended_replacevars(); $has_recommended_replacevars = $this->has_recommended_replace_vars( $recommended_replace_vars, $page_type ); if ( ! $has_recommended_replacevars ) { return $fallback; } return $page_type; } /** * Retrieves the recommended replacement variables for the given page type. * * @param string $page_type The page type. * * @return array The recommended replacement variables. */ public function get_recommended_replacevars_for( $page_type ) { $recommended_replace_vars = $this->get_recommended_replacevars(); $has_recommended_replace_vars = $this->has_recommended_replace_vars( $recommended_replace_vars, $page_type ); if ( ! $has_recommended_replace_vars ) { return []; } return $recommended_replace_vars[ $page_type ]; } /** * Retrieves the recommended replacement variables. * * @return array The recommended replacement variables. */ public function get_recommended_replacevars() { /** * Filter: Adds the possibility to add extra recommended replacement variables. * * @param array $additional_replace_vars Empty array to add the replacevars to. */ $recommended_replace_vars = apply_filters( 'wpseo_recommended_replace_vars', $this->recommended_replace_vars ); if ( ! is_array( $recommended_replace_vars ) ) { return $this->recommended_replace_vars; } return $recommended_replace_vars; } /** * Returns whether the given page type has recommended replace vars. * * @param array $recommended_replace_vars The recommended replace vars * to check in. * @param string $page_type The page type to check. * * @return bool True if there are associated recommended replace vars. */ private function has_recommended_replace_vars( $recommended_replace_vars, $page_type ) { if ( ! isset( $recommended_replace_vars[ $page_type ] ) ) { return false; } if ( ! is_array( $recommended_replace_vars[ $page_type ] ) ) { return false; } return true; } /** * Determines whether or not a post is the homepage. * * @param WP_Post $post The WordPress global post object. * * @return bool True if the given post is the homepage. */ private function is_homepage( $post ) { if ( $post instanceof WP_Post === false ) { return false; } /* * The page on front returns a string with normal WordPress interaction, while the post ID is an int. * This way we make sure we always compare strings. */ $post_id = (int) $post->ID; $page_on_front = (int) get_option( 'page_on_front' ); return get_option( 'show_on_front' ) === 'page' && $page_on_front === $post_id; } } class-admin-user-profile.php 0000644 00000006522 15150262017 0012066 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * @since 1.8.0 */ /** * Customizes user profile. */ class WPSEO_Admin_User_Profile { /** * Class constructor. */ public function __construct() { add_action( 'show_user_profile', [ $this, 'user_profile' ] ); add_action( 'edit_user_profile', [ $this, 'user_profile' ] ); add_action( 'personal_options_update', [ $this, 'process_user_option_update' ] ); add_action( 'edit_user_profile_update', [ $this, 'process_user_option_update' ] ); add_action( 'update_user_meta', [ $this, 'clear_author_sitemap_cache' ], 10, 3 ); } /** * Clear author sitemap cache when settings are changed. * * @since 3.1 * * @param int $meta_id The ID of the meta option changed. * @param int $object_id The ID of the user. * @param string $meta_key The key of the meta field changed. * * @return void */ public function clear_author_sitemap_cache( $meta_id, $object_id, $meta_key ) { if ( $meta_key === '_yoast_wpseo_profile_updated' ) { WPSEO_Sitemaps_Cache::clear( [ 'author' ] ); } } /** * Updates the user metas that (might) have been set on the user profile page. * * @param int $user_id User ID of the updated user. * * @return void */ public function process_user_option_update( $user_id ) { update_user_meta( $user_id, '_yoast_wpseo_profile_updated', time() ); if ( ! check_admin_referer( 'wpseo_user_profile_update', 'wpseo_nonce' ) ) { return; } $wpseo_author_title = isset( $_POST['wpseo_author_title'] ) ? sanitize_text_field( wp_unslash( $_POST['wpseo_author_title'] ) ) : ''; $wpseo_author_metadesc = isset( $_POST['wpseo_author_metadesc'] ) ? sanitize_text_field( wp_unslash( $_POST['wpseo_author_metadesc'] ) ) : ''; $wpseo_noindex_author = isset( $_POST['wpseo_noindex_author'] ) ? sanitize_text_field( wp_unslash( $_POST['wpseo_noindex_author'] ) ) : ''; $wpseo_content_analysis_disable = isset( $_POST['wpseo_content_analysis_disable'] ) ? sanitize_text_field( wp_unslash( $_POST['wpseo_content_analysis_disable'] ) ) : ''; $wpseo_keyword_analysis_disable = isset( $_POST['wpseo_keyword_analysis_disable'] ) ? sanitize_text_field( wp_unslash( $_POST['wpseo_keyword_analysis_disable'] ) ) : ''; $wpseo_inclusive_language_analysis_disable = isset( $_POST['wpseo_inclusive_language_analysis_disable'] ) ? sanitize_text_field( wp_unslash( $_POST['wpseo_inclusive_language_analysis_disable'] ) ) : ''; update_user_meta( $user_id, 'wpseo_title', $wpseo_author_title ); update_user_meta( $user_id, 'wpseo_metadesc', $wpseo_author_metadesc ); update_user_meta( $user_id, 'wpseo_noindex_author', $wpseo_noindex_author ); update_user_meta( $user_id, 'wpseo_content_analysis_disable', $wpseo_content_analysis_disable ); update_user_meta( $user_id, 'wpseo_keyword_analysis_disable', $wpseo_keyword_analysis_disable ); update_user_meta( $user_id, 'wpseo_inclusive_language_analysis_disable', $wpseo_inclusive_language_analysis_disable ); } /** * Add the inputs needed for SEO values to the User Profile page. * * @param WP_User $user User instance to output for. * * @return void */ public function user_profile( $user ) { wp_nonce_field( 'wpseo_user_profile_update', 'wpseo_nonce' ); require_once WPSEO_PATH . 'admin/views/user-profile.php'; } } class-admin-utils.php 0000644 00000004224 15150262017 0010607 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Represents the utils for the admin. */ class WPSEO_Admin_Utils { /** * Gets the install URL for the passed plugin slug. * * @param string $slug The slug to create an install link for. * * @return string The install URL. Empty string if the current user doesn't have the proper capabilities. */ public static function get_install_url( $slug ) { if ( ! current_user_can( 'install_plugins' ) ) { return ''; } return wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . dirname( $slug ) ), 'install-plugin_' . dirname( $slug ) ); } /** * Gets the activation URL for the passed plugin slug. * * @param string $slug The slug to create an activation link for. * * @return string The activation URL. Empty string if the current user doesn't have the proper capabilities. */ public static function get_activation_url( $slug ) { if ( ! current_user_can( 'install_plugins' ) ) { return ''; } return wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin_status=all&paged=1&s&plugin=' . $slug ), 'activate-plugin_' . $slug ); } /** * Creates a link if the passed plugin is deemend a directly-installable plugin. * * @param array $plugin The plugin to create the link for. * * @return string The link to the plugin install. Returns the title if the plugin is deemed a Premium product. */ public static function get_install_link( $plugin ) { $install_url = self::get_install_url( $plugin['slug'] ); if ( $install_url === '' || ( isset( $plugin['premium'] ) && $plugin['premium'] === true ) ) { return $plugin['title']; } return sprintf( '<a href="%s">%s</a>', $install_url, $plugin['title'] ); } /** * Gets a visually hidden accessible message for links that open in a new browser tab. * * @return string The visually hidden accessible message. */ public static function get_new_tab_message() { return sprintf( '<span class="screen-reader-text">%s</span>', /* translators: Hidden accessibility text. */ esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) ); } } class-asset.php 0000644 00000007757 15150262017 0007516 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Represents a WPSEO asset */ class WPSEO_Admin_Asset { /** * Constant used to identify file type as a JS file. * * @var string */ public const TYPE_JS = 'js'; /** * Constant used to identify file type as a CSS file. * * @var string */ public const TYPE_CSS = 'css'; /** * The name option identifier. * * @var string */ public const NAME = 'name'; /** * The source option identifier. * * @var string */ public const SRC = 'src'; /** * The dependencies option identifier. * * @var string */ public const DEPS = 'deps'; /** * The version option identifier. * * @var string */ public const VERSION = 'version'; /* Style specific. */ /** * The media option identifier. * * @var string */ public const MEDIA = 'media'; /** * The rtl option identifier. * * @var string */ public const RTL = 'rtl'; /* Script specific. */ /** * The "in footer" option identifier. * * @var string */ public const IN_FOOTER = 'in_footer'; /** * Asset identifier. * * @var string */ protected $name; /** * Path to the asset. * * @var string */ protected $src; /** * Asset dependencies. * * @var string|array */ protected $deps; /** * Asset version. * * @var string */ protected $version; /** * For CSS Assets. The type of media for which this stylesheet has been defined. * * See https://www.w3.org/TR/CSS2/media.html#media-types. * * @var string */ protected $media; /** * For JS Assets. Whether or not the script should be loaded in the footer. * * @var bool */ protected $in_footer; /** * For CSS Assets. Whether this stylesheet is a right-to-left stylesheet. * * @var bool */ protected $rtl; /** * File suffix. * * @var string */ protected $suffix; /** * Default asset arguments. * * @var array */ private $defaults = [ 'deps' => [], 'in_footer' => true, 'rtl' => true, 'media' => 'all', 'version' => '', 'suffix' => '', ]; /** * Constructs an instance of the WPSEO_Admin_Asset class. * * @param array $args The arguments for this asset. * * @throws InvalidArgumentException Throws when no name or src has been provided. */ public function __construct( array $args ) { if ( ! isset( $args['name'] ) ) { throw new InvalidArgumentException( 'name is a required argument' ); } if ( ! isset( $args['src'] ) ) { throw new InvalidArgumentException( 'src is a required argument' ); } $args = array_merge( $this->defaults, $args ); $this->name = $args['name']; $this->src = $args['src']; $this->deps = $args['deps']; $this->version = $args['version']; $this->media = $args['media']; $this->in_footer = $args['in_footer']; $this->rtl = $args['rtl']; $this->suffix = $args['suffix']; } /** * Returns the asset identifier. * * @return string */ public function get_name() { return $this->name; } /** * Returns the path to the asset. * * @return string */ public function get_src() { return $this->src; } /** * Returns the asset dependencies. * * @return array|string */ public function get_deps() { return $this->deps; } /** * Returns the asset version. * * @return string|null */ public function get_version() { if ( ! empty( $this->version ) ) { return $this->version; } return null; } /** * Returns the media type for CSS assets. * * @return string */ public function get_media() { return $this->media; } /** * Returns whether a script asset should be loaded in the footer of the page. * * @return bool */ public function is_in_footer() { return $this->in_footer; } /** * Returns whether this CSS has a RTL counterpart. * * @return bool */ public function has_rtl() { return $this->rtl; } /** * Returns the file suffix. * * @return string */ public function get_suffix() { return $this->suffix; } } class-bulk-description-editor-list-table.php 0000644 00000004064 15150262017 0015163 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Bulk Editor * @since 1.5.0 */ /** * Implements table for bulk description editing. */ class WPSEO_Bulk_Description_List_Table extends WPSEO_Bulk_List_Table { /** * Current type for this class will be (meta) description. * * @var string */ protected $page_type = 'description'; /** * Settings with are used in __construct. * * @var array */ protected $settings = [ 'singular' => 'wpseo_bulk_description', 'plural' => 'wpseo_bulk_descriptions', 'ajax' => true, ]; /** * The field in the database where meta field is saved. * * @var string */ protected $target_db_field = 'metadesc'; /** * The columns shown on the table. * * @return array */ public function get_columns() { $columns = [ 'col_existing_yoast_seo_metadesc' => __( 'Existing Yoast Meta Description', 'wordpress-seo' ), 'col_new_yoast_seo_metadesc' => __( 'New Yoast Meta Description', 'wordpress-seo' ), ]; return $this->merge_columns( $columns ); } /** * Parse the metadescription. * * @param string $column_name Column name. * @param object $record Data object. * @param string $attributes HTML attributes. * * @return string */ protected function parse_page_specific_column( $column_name, $record, $attributes ) { switch ( $column_name ) { case 'col_new_yoast_seo_metadesc': return sprintf( '<textarea id="%1$s" name="%1$s" class="wpseo-new-metadesc" data-id="%2$s" aria-labelledby="col_new_yoast_seo_metadesc"></textarea>', esc_attr( 'wpseo-new-metadesc-' . $record->ID ), esc_attr( $record->ID ) ); case 'col_existing_yoast_seo_metadesc': // @todo Inconsistent return/echo behavior R. // I traced the escaping of the attributes to WPSEO_Bulk_List_Table::column_attributes. Alexander. // The output of WPSEO_Bulk_List_Table::parse_meta_data_field is properly escaped. // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo $this->parse_meta_data_field( $record->ID, $attributes ); break; } } } class-bulk-editor-list-table.php 0000644 00000072631 15150262017 0012647 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Bulk Editor * @since 1.5.0 */ /** * Implements table for bulk editing. */ class WPSEO_Bulk_List_Table extends WP_List_Table { /** * The nonce that was passed with the request. * * @var string */ private $nonce; /** * Array of post types for which the current user has `edit_others_posts` capabilities. * * @var array */ private $all_posts; /** * Array of post types for which the current user has `edit_posts` capabilities, but not `edit_others_posts`. * * @var array */ private $own_posts; /** * Saves all the metadata into this array. * * @var array */ protected $meta_data = []; /** * The current requested page_url. * * @var string */ private $request_url = ''; /** * The current page (depending on $_GET['paged']) if current tab is for current page_type, else it will be 1. * * @var int */ private $current_page; /** * The current post filter, if is used (depending on $_GET['post_type_filter']). * * @var string */ private $current_filter; /** * The current post status, if is used (depending on $_GET['post_status']). * * @var string */ private $current_status; /** * The current sorting, if used (depending on $_GET['order'] and $_GET['orderby']). * * @var string */ private $current_order; /** * The page_type for current class instance (for example: title / description). * * @var string */ protected $page_type; /** * Based on the page_type ($this->page_type) there will be constructed an url part, for subpages and * navigation. * * @var string */ protected $page_url; /** * The settings which will be used in the __construct. * * @var array */ protected $settings; /** * Holds the pagination config. * * @var array */ protected $pagination = []; /** * Holds the sanitized data from the user input. * * @var array */ protected $input_fields = []; /** * The field in the database where meta field is saved. * * Should be set in the child class. * * @var string */ protected $target_db_field = ''; /** * Class constructor. * * @param array $args The arguments. */ public function __construct( $args = [] ) { parent::__construct( $this->settings ); $args = wp_parse_args( $args, [ 'nonce' => '', 'input_fields' => [], ] ); $this->input_fields = $args['input_fields']; if ( isset( $_SERVER['REQUEST_URI'] ) ) { $this->request_url = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ); } $this->current_page = ( ! empty( $this->input_fields['paged'] ) ) ? $this->input_fields['paged'] : 1; $this->current_filter = ( ! empty( $this->input_fields['post_type_filter'] ) ) ? $this->input_fields['post_type_filter'] : 1; $this->current_status = ( ! empty( $this->input_fields['post_status'] ) ) ? $this->input_fields['post_status'] : 1; $this->current_order = [ 'order' => ( ! empty( $this->input_fields['order'] ) ) ? $this->input_fields['order'] : 'asc', 'orderby' => ( ! empty( $this->input_fields['orderby'] ) ) ? $this->input_fields['orderby'] : 'post_title', ]; $this->nonce = $args['nonce']; $this->page_url = "&nonce={$this->nonce}&type={$this->page_type}#top#{$this->page_type}"; $this->populate_editable_post_types(); } /** * Prepares the data and renders the page. * * @return void */ public function show_page() { $this->prepare_page_navigation(); $this->prepare_items(); $this->views(); $this->display(); } /** * Used in the constructor to build a reference list of post types the current user can edit. * * @return void */ protected function populate_editable_post_types() { $post_types = get_post_types( [ 'public' => true, 'exclude_from_search' => false, ], 'object' ); $this->all_posts = []; $this->own_posts = []; if ( is_array( $post_types ) && $post_types !== [] ) { foreach ( $post_types as $post_type ) { if ( ! current_user_can( $post_type->cap->edit_posts ) ) { continue; } if ( current_user_can( $post_type->cap->edit_others_posts ) ) { $this->all_posts[] = esc_sql( $post_type->name ); } else { $this->own_posts[] = esc_sql( $post_type->name ); } } } } /** * Will show the navigation for the table like page navigation and page filter. * * @param string $which Table nav location (such as top). * * @return void */ public function display_tablenav( $which ) { // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $post_status = isset( $_GET['post_status'] ) && is_string( $_GET['post_status'] ) ? sanitize_text_field( wp_unslash( $_GET['post_status'] ) ) : ''; $order_by = isset( $_GET['orderby'] ) && is_string( $_GET['orderby'] ) ? sanitize_text_field( wp_unslash( $_GET['orderby'] ) ) : ''; $order = isset( $_GET['order'] ) && is_string( $_GET['order'] ) ? sanitize_text_field( wp_unslash( $_GET['order'] ) ) : ''; $post_type_filter = isset( $_GET['post_type_filter'] ) && is_string( $_GET['post_type_filter'] ) ? sanitize_text_field( wp_unslash( $_GET['post_type_filter'] ) ) : ''; // phpcs:enable WordPress.Security.NonceVerification.Recommended; ?> <div class="tablenav <?php echo esc_attr( $which ); ?>"> <?php if ( $which === 'top' ) { ?> <form id="posts-filter" action="" method="get"> <input type="hidden" name="nonce" value="<?php echo esc_attr( $this->nonce ); ?>"/> <input type="hidden" name="page" value="wpseo_tools"/> <input type="hidden" name="tool" value="bulk-editor"/> <input type="hidden" name="type" value="<?php echo esc_attr( $this->page_type ); ?>"/> <input type="hidden" name="orderby" value="<?php echo esc_attr( $order_by ); ?>"/> <input type="hidden" name="order" value="<?php echo esc_attr( $order ); ?>"/> <input type="hidden" name="post_type_filter" value="<?php echo esc_attr( $post_type_filter ); ?>"/> <?php if ( ! empty( $post_status ) ) { ?> <input type="hidden" name="post_status" value="<?php echo esc_attr( $post_status ); ?>"/> <?php } ?> <?php } ?> <?php $this->extra_tablenav( $which ); $this->pagination( $which ); ?> <br class="clear"/> <?php if ( $which === 'top' ) { ?> </form> <?php } ?> </div> <?php } /** * This function builds the base sql subquery used in this class. * * This function takes into account the post types in which the current user can * edit all posts, and the ones the current user can only edit his/her own. * * @return string The subquery, which should always be used in $wpdb->prepare(), * passing the current user_id in as the first parameter. */ public function get_base_subquery() { global $wpdb; $all_posts_string = "'" . implode( "', '", $this->all_posts ) . "'"; $own_posts_string = "'" . implode( "', '", $this->own_posts ) . "'"; $post_author = esc_sql( (int) get_current_user_id() ); $subquery = "( SELECT * FROM {$wpdb->posts} WHERE post_type IN ({$all_posts_string}) UNION ALL SELECT * FROM {$wpdb->posts} WHERE post_type IN ({$own_posts_string}) AND post_author = {$post_author} ) sub_base"; return $subquery; } /** * Gets the views. * * @return array The views. */ public function get_views() { global $wpdb; $status_links = []; $states = get_post_stati( [ 'show_in_admin_all_list' => true ] ); $subquery = $this->get_base_subquery(); $total_posts = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM {$subquery} WHERE post_status IN (" . implode( ', ', array_fill( 0, count( $states ), '%s' ) ) . ')', $states ) ); $post_status = isset( $_GET['post_status'] ) && is_string( $_GET['post_status'] ) ? sanitize_text_field( wp_unslash( $_GET['post_status'] ) ) : ''; $current_link_attributes = empty( $post_status ) ? ' class="current" aria-current="page"' : ''; $localized_text = sprintf( /* translators: %s expands to the number of posts in localized format. */ _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_posts, 'posts', 'wordpress-seo' ), number_format_i18n( $total_posts ) ); $status_links['all'] = '<a href="' . esc_url( admin_url( 'admin.php?page=wpseo_tools&tool=bulk-editor' . $this->page_url ) ) . '"' . $current_link_attributes . '>' . $localized_text . '</a>'; $post_stati = get_post_stati( [ 'show_in_admin_all_list' => true ], 'objects' ); if ( is_array( $post_stati ) && $post_stati !== [] ) { foreach ( $post_stati as $status ) { $status_name = esc_sql( $status->name ); $total = (int) $wpdb->get_var( $wpdb->prepare( " SELECT COUNT(ID) FROM {$subquery} WHERE post_status = %s ", $status_name ) ); if ( $total === 0 ) { continue; } $current_link_attributes = ''; if ( $status_name === $post_status ) { $current_link_attributes = ' class="current" aria-current="page"'; } $status_links[ $status_name ] = '<a href="' . esc_url( add_query_arg( [ 'post_status' => $status_name ], admin_url( 'admin.php?page=wpseo_tools&tool=bulk-editor' . $this->page_url ) ) ) . '"' . $current_link_attributes . '>' . sprintf( translate_nooped_plural( $status->label_count, $total ), number_format_i18n( $total ) ) . '</a>'; } } unset( $post_stati, $status, $status_name, $total, $current_link_attributes ); $trashed_posts = $wpdb->get_var( "SELECT COUNT(ID) FROM {$subquery} WHERE post_status IN ('trash') " ); $current_link_attributes = ''; if ( $post_status === 'trash' ) { $current_link_attributes = 'class="current" aria-current="page"'; } $localized_text = sprintf( /* translators: %s expands to the number of trashed posts in localized format. */ _nx( 'Trash <span class="count">(%s)</span>', 'Trash <span class="count">(%s)</span>', $trashed_posts, 'posts', 'wordpress-seo' ), number_format_i18n( $trashed_posts ) ); $status_links['trash'] = '<a href="' . esc_url( admin_url( 'admin.php?page=wpseo_tools&tool=bulk-editor&post_status=trash' . $this->page_url ) ) . '"' . $current_link_attributes . '>' . $localized_text . '</a>'; return $status_links; } /** * Outputs extra table navigation. * * @param string $which Table nav location (such as top). * * @return void */ public function extra_tablenav( $which ) { if ( $which === 'top' ) { $post_types = get_post_types( [ 'public' => true, 'exclude_from_search' => false, ] ); $instance_type = esc_attr( $this->page_type ); if ( is_array( $post_types ) && $post_types !== [] ) { global $wpdb; echo '<div class="alignleft actions">'; $post_types = esc_sql( $post_types ); $post_types = "'" . implode( "', '", $post_types ) . "'"; $states = get_post_stati( [ 'show_in_admin_all_list' => true ] ); $states['trash'] = 'trash'; $subquery = $this->get_base_subquery(); $post_types = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT post_type FROM {$subquery} WHERE post_status IN (" . implode( ', ', array_fill( 0, count( $states ), '%s' ) ) . ') ORDER BY post_type ASC', $states ) ); $post_type_filter = isset( $_GET['post_type_filter'] ) && is_string( $_GET['post_type_filter'] ) ? sanitize_text_field( wp_unslash( $_GET['post_type_filter'] ) ) : ''; $selected = ( ! empty( $post_type_filter ) ) ? $post_type_filter : '-1'; $options = '<option value="-1">' . esc_html__( 'Show All Content Types', 'wordpress-seo' ) . '</option>'; if ( is_array( $post_types ) && $post_types !== [] ) { foreach ( $post_types as $post_type ) { $obj = get_post_type_object( $post_type->post_type ); $options .= sprintf( '<option value="%2$s" %3$s>%1$s</option>', esc_html( $obj->labels->name ), esc_attr( $post_type->post_type ), selected( $selected, $post_type->post_type, false ) ); } } printf( '<label for="%1$s" class="screen-reader-text">%2$s</label>', esc_attr( 'post-type-filter-' . $instance_type ), /* translators: Hidden accessibility text. */ esc_html__( 'Filter by content type', 'wordpress-seo' ) ); printf( '<select name="post_type_filter" id="%2$s">%1$s</select>', // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $options is properly escaped above. $options, esc_attr( 'post-type-filter-' . $instance_type ) ); submit_button( esc_html__( 'Filter', 'wordpress-seo' ), 'button', false, false, [ 'id' => 'post-query-submit' ] ); echo '</div>'; } } } /** * Gets a list of sortable columns. * * The format is: 'internal-name' => array( 'orderby', bool ). * * @return array */ public function get_sortable_columns() { return [ 'col_page_title' => [ 'post_title', true ], 'col_post_type' => [ 'post_type', false ], 'col_post_date' => [ 'post_date', false ], ]; } /** * Sets the correct pagenumber and pageurl for the navigation. * * @return void */ public function prepare_page_navigation() { $request_url = $this->request_url . $this->page_url; $current_page = $this->current_page; $current_filter = $this->current_filter; $current_status = $this->current_status; $current_order = $this->current_order; /* * If current type doesn't compare with objects page_type, then we have to unset * some vars in the requested url (which will be used for internal table urls). */ if ( isset( $this->input_fields['type'] ) && $this->input_fields['type'] !== $this->page_type ) { $request_url = remove_query_arg( 'paged', $request_url ); // Page will be set with value 1 below. $request_url = remove_query_arg( 'post_type_filter', $request_url ); $request_url = remove_query_arg( 'post_status', $request_url ); $request_url = remove_query_arg( 'orderby', $request_url ); $request_url = remove_query_arg( 'order', $request_url ); $request_url = add_query_arg( 'pages', 1, $request_url ); $current_page = 1; $current_filter = '-1'; $current_status = ''; $current_order = [ 'orderby' => 'post_title', 'order' => 'asc', ]; } $_SERVER['REQUEST_URI'] = $request_url; $_GET['paged'] = $current_page; $_REQUEST['paged'] = $current_page; $_REQUEST['post_type_filter'] = $current_filter; $_GET['post_type_filter'] = $current_filter; $_GET['post_status'] = $current_status; $_GET['orderby'] = $current_order['orderby']; $_GET['order'] = $current_order['order']; } /** * Preparing the requested pagerows and setting the needed variables. * * @return void */ public function prepare_items() { $post_type_clause = $this->get_post_type_clause(); $all_states = $this->get_all_states(); $subquery = $this->get_base_subquery(); // Setting the column headers. $this->set_column_headers(); // Count the total number of needed items and setting pagination given $total_items. $total_items = $this->count_items( $subquery, $all_states, $post_type_clause ); $this->set_pagination( $total_items ); // Getting items given $query. $query = $this->parse_item_query( $subquery, $all_states, $post_type_clause ); $this->get_items( $query ); // Get the metadata for the current items ($this->items). $this->get_meta_data(); } /** * Getting the columns for first row. * * @return array */ public function get_columns() { return $this->merge_columns(); } /** * Setting the column headers. * * @return void */ protected function set_column_headers() { $columns = $this->get_columns(); $hidden = []; $sortable = $this->get_sortable_columns(); $this->_column_headers = [ $columns, $hidden, $sortable ]; } /** * Counting total items. * * @param string $subquery SQL FROM part. * @param string $all_states SQL IN part. * @param string $post_type_clause SQL post type part. * * @return mixed */ protected function count_items( $subquery, $all_states, $post_type_clause ) { global $wpdb; return (int) $wpdb->get_var( "SELECT COUNT(ID) FROM {$subquery} WHERE post_status IN ({$all_states}) {$post_type_clause} " ); } /** * Getting the post_type_clause filter. * * @return string */ protected function get_post_type_clause() { // Filter Block. $post_type_clause = ''; $post_type_filter = isset( $_GET['post_type_filter'] ) && is_string( $_GET['post_type_filter'] ) ? sanitize_text_field( wp_unslash( $_GET['post_type_filter'] ) ) : ''; if ( ! empty( $post_type_filter ) && get_post_type_object( $post_type_filter ) ) { $post_types = esc_sql( $post_type_filter ); $post_type_clause = "AND post_type IN ('{$post_types}')"; } return $post_type_clause; } /** * Setting the pagination. * * Total items is the number of all visible items. * * @param int $total_items Total items counts. * * @return void */ protected function set_pagination( $total_items ) { // Calculate items per page. $per_page = $this->get_items_per_page( 'wpseo_posts_per_page', 10 ); $paged = isset( $_GET['paged'] ) && is_string( $_GET['paged'] ) ? esc_sql( sanitize_text_field( wp_unslash( $_GET['paged'] ) ) ) : ''; if ( empty( $paged ) || ! is_numeric( $paged ) ) { $paged = 1; } else { $paged = (int) $paged; } if ( $paged <= 0 ) { $paged = 1; } $this->set_pagination_args( [ 'total_items' => $total_items, 'total_pages' => ceil( $total_items / $per_page ), 'per_page' => $per_page, ] ); $this->pagination = [ 'per_page' => $per_page, 'offset' => ( ( $paged - 1 ) * $per_page ), ]; } /** * Parse the query to get items from database. * * Based on given parameters there will be parse a query which will get all the pages/posts and other post_types * from the database. * * @param string $subquery SQL FROM part. * @param string $all_states SQL IN part. * @param string $post_type_clause SQL post type part. * * @return string */ protected function parse_item_query( $subquery, $all_states, $post_type_clause ) { // Order By block. $orderby = isset( $_GET['orderby'] ) && is_string( $_GET['orderby'] ) ? sanitize_text_field( wp_unslash( $_GET['orderby'] ) ) : ''; $orderby = ! empty( $orderby ) ? esc_sql( $orderby ) : 'post_title'; $orderby = $this->sanitize_orderby( $orderby ); // Order clause. $order = isset( $_GET['order'] ) && is_string( $_GET['order'] ) ? sanitize_text_field( wp_unslash( $_GET['order'] ) ) : ''; $order = ! empty( $order ) ? esc_sql( strtoupper( $order ) ) : 'ASC'; $order = $this->sanitize_order( $order ); // Get all needed results. $query = " SELECT ID, post_title, post_type, post_status, post_modified, post_date FROM {$subquery} WHERE post_status IN ({$all_states}) $post_type_clause ORDER BY {$orderby} {$order} LIMIT %d,%d "; return $query; } /** * Heavily restricts the possible columns by which a user can order the table * in the bulk editor, thereby preventing a possible CSRF vulnerability. * * @param string $orderby The column by which we want to order. * * @return string */ protected function sanitize_orderby( $orderby ) { $valid_column_names = [ 'post_title', 'post_type', 'post_date', ]; if ( in_array( $orderby, $valid_column_names, true ) ) { return $orderby; } return 'post_title'; } /** * Makes sure the order clause is always ASC or DESC for the bulk editor table, * thereby preventing a possible CSRF vulnerability. * * @param string $order Whether we want to sort ascending or descending. * * @return string SQL order string (ASC, DESC). */ protected function sanitize_order( $order ) { if ( in_array( strtoupper( $order ), [ 'ASC', 'DESC' ], true ) ) { return $order; } return 'ASC'; } /** * Getting all the items. * * @param string $query SQL query to use. * * @return void */ protected function get_items( $query ) { global $wpdb; $this->items = $wpdb->get_results( $wpdb->prepare( $query, $this->pagination['offset'], $this->pagination['per_page'] ) ); } /** * Getting all the states. * * @return string */ protected function get_all_states() { global $wpdb; $states = get_post_stati( [ 'show_in_admin_all_list' => true ] ); $states['trash'] = 'trash'; if ( ! empty( $this->input_fields['post_status'] ) ) { $requested_state = $this->input_fields['post_status']; if ( in_array( $requested_state, $states, true ) ) { $states = [ $requested_state ]; } if ( $requested_state !== 'trash' ) { unset( $states['trash'] ); } } return $wpdb->prepare( implode( ', ', array_fill( 0, count( $states ), '%s' ) ), $states ); } /** * Based on $this->items and the defined columns, the table rows will be displayed. * * @return void */ public function display_rows() { $records = $this->items; list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); if ( ( is_array( $records ) && $records !== [] ) && ( is_array( $columns ) && $columns !== [] ) ) { foreach ( $records as $record ) { echo '<tr id="', esc_attr( 'record_' . $record->ID ), '">'; foreach ( $columns as $column_name => $column_display_name ) { $classes = ''; if ( $primary === $column_name ) { $classes .= ' has-row-actions column-primary'; } $attributes = $this->column_attributes( $column_name, $hidden, $classes, $column_display_name ); $column_value = $this->parse_column( $column_name, $record ); if ( method_exists( $this, 'parse_page_specific_column' ) && empty( $column_value ) ) { $column_value = $this->parse_page_specific_column( $column_name, $record, $attributes ); } if ( ! empty( $column_value ) ) { printf( '<td %2$s>%1$s</td>', $column_value, $attributes ); } } echo '</tr>'; } } } /** * Getting the attributes for each table cell. * * @param string $column_name Column name string. * @param array $hidden Set of hidden columns. * @param string $classes Additional CSS classes. * @param string $column_display_name Column display name string. * * @return string */ protected function column_attributes( $column_name, $hidden, $classes, $column_display_name ) { $attributes = ''; $class = [ $column_name, "column-$column_name$classes" ]; if ( in_array( $column_name, $hidden, true ) ) { $class[] = 'hidden'; } if ( ! empty( $class ) ) { $attributes = 'class="' . esc_attr( implode( ' ', $class ) ) . '"'; } $attributes .= ' data-colname="' . esc_attr( $column_display_name ) . '"'; return $attributes; } /** * Parsing the title. * * @param WP_Post $rec Post object. * * @return string */ protected function parse_page_title_column( $rec ) { $title = empty( $rec->post_title ) ? __( '(no title)', 'wordpress-seo' ) : $rec->post_title; $return = sprintf( '<strong>%1$s</strong>', stripslashes( wp_strip_all_tags( $title ) ) ); $post_type_object = get_post_type_object( $rec->post_type ); $can_edit_post = current_user_can( $post_type_object->cap->edit_post, $rec->ID ); $actions = []; if ( $can_edit_post && $rec->post_status !== 'trash' ) { $actions['edit'] = sprintf( '<a href="%s" aria-label="%s">%s</a>', esc_url( get_edit_post_link( $rec->ID, true ) ), /* translators: Hidden accessibility text; %s: post title. */ esc_attr( sprintf( __( 'Edit “%s”', 'wordpress-seo' ), $title ) ), __( 'Edit', 'wordpress-seo' ) ); } if ( $post_type_object->public ) { if ( in_array( $rec->post_status, [ 'pending', 'draft', 'future' ], true ) ) { if ( $can_edit_post ) { $actions['view'] = sprintf( '<a href="%s" aria-label="%s">%s</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink( $rec->ID ) ) ), /* translators: Hidden accessibility text; %s: post title. */ esc_attr( sprintf( __( 'Preview “%s”', 'wordpress-seo' ), $title ) ), __( 'Preview', 'wordpress-seo' ) ); } } elseif ( $rec->post_status !== 'trash' ) { $actions['view'] = sprintf( '<a href="%s" aria-label="%s" rel="bookmark">%s</a>', esc_url( get_permalink( $rec->ID ) ), /* translators: Hidden accessibility text; %s: post title. */ esc_attr( sprintf( __( 'View “%s”', 'wordpress-seo' ), $title ) ), __( 'View', 'wordpress-seo' ) ); } } $return .= $this->row_actions( $actions ); return $return; } /** * Parsing the column based on the $column_name. * * @param string $column_name Column name. * @param WP_Post $rec Post object. * * @return string */ protected function parse_column( $column_name, $rec ) { static $date_format; if ( ! isset( $date_format ) ) { $date_format = get_option( 'date_format' ); } switch ( $column_name ) { case 'col_page_title': $column_value = $this->parse_page_title_column( $rec ); break; case 'col_page_slug': $permalink = get_permalink( $rec->ID ); $display_slug = str_replace( get_bloginfo( 'url' ), '', $permalink ); $column_value = sprintf( '<a href="%2$s" target="_blank">%1$s</a>', stripslashes( rawurldecode( $display_slug ) ), esc_url( $permalink ) ); break; case 'col_post_type': $post_type = get_post_type_object( $rec->post_type ); $column_value = $post_type->labels->singular_name; break; case 'col_post_status': $post_status = get_post_status_object( $rec->post_status ); $column_value = $post_status->label; break; case 'col_post_date': $column_value = date_i18n( $date_format, strtotime( $rec->post_date ) ); break; case 'col_row_action': $column_value = sprintf( '<a href="#" role="button" class="wpseo-save" data-id="%1$s">%2$s</a> <span aria-hidden="true">|</span> <a href="#" role="button" class="wpseo-save-all">%3$s</a>', $rec->ID, esc_html__( 'Save', 'wordpress-seo' ), esc_html__( 'Save all', 'wordpress-seo' ) ); break; } if ( ! empty( $column_value ) ) { return $column_value; } } /** * Parse the field where the existing meta-data value is displayed. * * @param int $record_id Record ID. * @param string $attributes HTML attributes. * @param bool|array $values Optional values data array. * * @return string */ protected function parse_meta_data_field( $record_id, $attributes, $values = false ) { // Fill meta data if exists in $this->meta_data. $meta_data = ( ! empty( $this->meta_data[ $record_id ] ) ) ? $this->meta_data[ $record_id ] : []; $meta_key = WPSEO_Meta::$meta_prefix . $this->target_db_field; $meta_value = ( ! empty( $meta_data[ $meta_key ] ) ) ? $meta_data[ $meta_key ] : ''; if ( ! empty( $values ) ) { $meta_value = $values[ $meta_value ]; } $id = "wpseo-existing-$this->target_db_field-$record_id"; // $attributes correctly escaped, verified by Alexander. See WPSEO_Bulk_Description_List_Table::parse_page_specific_column. return sprintf( '<td %2$s id="%3$s">%1$s</td>', esc_html( $meta_value ), $attributes, esc_attr( $id ) ); } /** * Method for setting the meta data, which belongs to the records that will be shown on the current page. * * This method will loop through the current items ($this->items) for getting the post_id. With this data * ($needed_ids) the method will query the meta-data table for getting the title. * * @return void */ protected function get_meta_data() { $post_ids = $this->get_post_ids(); $meta_data = $this->get_meta_data_result( $post_ids ); $this->parse_meta_data( $meta_data ); // Little housekeeping. unset( $post_ids, $meta_data ); } /** * Getting all post_ids from to $this->items. * * @return array */ protected function get_post_ids() { $post_ids = []; foreach ( $this->items as $item ) { $post_ids[] = $item->ID; } return $post_ids; } /** * Getting the meta_data from database. * * @param array $post_ids Post IDs for SQL IN part. * * @return mixed */ protected function get_meta_data_result( array $post_ids ) { global $wpdb; $where = $wpdb->prepare( 'post_id IN (' . implode( ', ', array_fill( 0, count( $post_ids ), '%d' ) ) . ')', $post_ids ); $where .= $wpdb->prepare( ' AND meta_key = %s', WPSEO_Meta::$meta_prefix . $this->target_db_field ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- They are prepared on the lines above. return $wpdb->get_results( "SELECT * FROM {$wpdb->postmeta} WHERE {$where}" ); } /** * Setting $this->meta_data. * * @param array $meta_data Meta data set. * * @return void */ protected function parse_meta_data( $meta_data ) { foreach ( $meta_data as $row ) { $this->meta_data[ $row->post_id ][ $row->meta_key ] = $row->meta_value; } } /** * This method will merge general array with given parameter $columns. * * @param array $columns Optional columns set. * * @return array */ protected function merge_columns( $columns = [] ) { $columns = array_merge( [ 'col_page_title' => __( 'WP Page Title', 'wordpress-seo' ), 'col_post_type' => __( 'Content Type', 'wordpress-seo' ), 'col_post_status' => __( 'Post Status', 'wordpress-seo' ), 'col_post_date' => __( 'Publication date', 'wordpress-seo' ), 'col_page_slug' => __( 'Page URL/Slug', 'wordpress-seo' ), ], $columns ); $columns['col_row_action'] = __( 'Action', 'wordpress-seo' ); return $columns; } } class-bulk-title-editor-list-table.php 0000644 00000004356 15150262017 0013765 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Bulk Editor * @since 1.5.0 */ /** * Implements table for bulk title editing. */ class WPSEO_Bulk_Title_Editor_List_Table extends WPSEO_Bulk_List_Table { /** * Current type for this class will be title. * * @var string */ protected $page_type = 'title'; /** * Settings with are used in __construct. * * @var array */ protected $settings = [ 'singular' => 'wpseo_bulk_title', 'plural' => 'wpseo_bulk_titles', 'ajax' => true, ]; /** * The field in the database where meta field is saved. * * @var string */ protected $target_db_field = 'title'; /** * The columns shown on the table. * * @return array */ public function get_columns() { $columns = [ /* translators: %1$s expands to Yoast SEO */ 'col_existing_yoast_seo_title' => sprintf( __( 'Existing %1$s Title', 'wordpress-seo' ), 'Yoast SEO' ), /* translators: %1$s expands to Yoast SEO */ 'col_new_yoast_seo_title' => sprintf( __( 'New %1$s Title', 'wordpress-seo' ), 'Yoast SEO' ), ]; return $this->merge_columns( $columns ); } /** * Parse the title columns. * * @param string $column_name Column name. * @param object $record Data object. * @param string $attributes HTML attributes. * * @return string */ protected function parse_page_specific_column( $column_name, $record, $attributes ) { // Fill meta data if exists in $this->meta_data. $meta_data = ( ! empty( $this->meta_data[ $record->ID ] ) ) ? $this->meta_data[ $record->ID ] : []; switch ( $column_name ) { case 'col_existing_yoast_seo_title': // @todo Inconsistent return/echo behavior R. // I traced the escaping of the attributes to WPSEO_Bulk_List_Table::column_attributes. // The output of WPSEO_Bulk_List_Table::parse_meta_data_field is properly escaped. // phpcs:ignore WordPress.Security.EscapeOutput echo $this->parse_meta_data_field( $record->ID, $attributes ); break; case 'col_new_yoast_seo_title': return sprintf( '<input type="text" id="%1$s" name="%1$s" class="wpseo-new-title" data-id="%2$s" aria-labelledby="col_new_yoast_seo_title" />', 'wpseo-new-title-' . $record->ID, $record->ID ); } unset( $meta_data ); } } class-collector.php 0000644 00000001755 15150262017 0010355 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Collects the data from the added collection objects. */ class WPSEO_Collector { /** * Holds the collections. * * @var WPSEO_Collection[] */ protected $collections = []; /** * Adds a collection object to the collections. * * @param WPSEO_Collection $collection The collection object to add. * * @return void */ public function add_collection( WPSEO_Collection $collection ) { $this->collections[] = $collection; } /** * Collects the data from the collection objects. * * @return array The collected data. */ public function collect() { $data = []; foreach ( $this->collections as $collection ) { $data = array_merge( $data, $collection->get() ); } return $data; } /** * Returns the collected data as a JSON encoded string. * * @return false|string The encode string. */ public function get_as_json() { return WPSEO_Utils::format_json_encode( $this->collect() ); } } class-config.php 0000644 00000014504 15150262017 0007630 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Actions\Alert_Dismissal_Action; use Yoast\WP\SEO\Conditionals\WooCommerce_Conditional; use Yoast\WP\SEO\Integrations\Academy_Integration; use Yoast\WP\SEO\Integrations\Settings_Integration; use Yoast\WP\SEO\Integrations\Support_Integration; use Yoast\WP\SEO\Promotions\Application\Promotion_Manager; /** * Class WPSEO_Admin_Pages. * * Class with functionality for the Yoast SEO admin pages. */ class WPSEO_Admin_Pages { /** * The option in use for the current admin page. * * @var string */ public $currentoption = 'wpseo'; /** * Holds the asset manager. * * @var WPSEO_Admin_Asset_Manager */ private $asset_manager; /** * Class constructor, which basically only hooks the init function on the init hook. */ public function __construct() { add_action( 'init', [ $this, 'init' ], 20 ); $this->asset_manager = new WPSEO_Admin_Asset_Manager(); } /** * Make sure the needed scripts are loaded for admin pages. * * @return void */ public function init() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; if ( in_array( $page, [ Settings_Integration::PAGE, Academy_Integration::PAGE, Support_Integration::PAGE ], true ) ) { // Bail, this is managed in the applicable integration. return; } add_action( 'admin_enqueue_scripts', [ $this, 'config_page_scripts' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'config_page_styles' ] ); } /** * Loads the required styles for the config page. * * @return void */ public function config_page_styles() { wp_enqueue_style( 'dashboard' ); wp_enqueue_style( 'thickbox' ); wp_enqueue_style( 'global' ); wp_enqueue_style( 'wp-admin' ); $this->asset_manager->enqueue_style( 'admin-css' ); $this->asset_manager->enqueue_style( 'monorepo' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; if ( $page === 'wpseo_licenses' ) { $this->asset_manager->enqueue_style( 'tailwind' ); } } /** * Loads the required scripts for the config page. * * @return void */ public function config_page_scripts() { $this->asset_manager->enqueue_script( 'settings' ); wp_enqueue_script( 'dashboard' ); wp_enqueue_script( 'thickbox' ); $alert_dismissal_action = YoastSEO()->classes->get( Alert_Dismissal_Action::class ); $dismissed_alerts = $alert_dismissal_action->all_dismissed(); $woocommerce_conditional = new WooCommerce_Conditional(); $script_data = [ 'userLanguageCode' => WPSEO_Language_Utils::get_language( get_user_locale() ), 'dismissedAlerts' => $dismissed_alerts, 'isRtl' => is_rtl(), 'isPremium' => YoastSEO()->helpers->product->is_premium(), 'isWooCommerceActive' => $woocommerce_conditional->is_met(), 'currentPromotions' => YoastSEO()->classes->get( Promotion_Manager::class )->get_current_promotions(), 'webinarIntroSettingsUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/webinar-intro-settings' ), 'webinarIntroFirstTimeConfigUrl' => $this->get_webinar_shortlink(), 'linkParams' => WPSEO_Shortlinker::get_query_params(), 'pluginUrl' => plugins_url( '', WPSEO_FILE ), ]; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; if ( in_array( $page, [ WPSEO_Admin::PAGE_IDENTIFIER, 'wpseo_workouts' ], true ) ) { wp_enqueue_media(); $script_data['media'] = [ 'choose_image' => __( 'Use Image', 'wordpress-seo' ), ]; $script_data['userEditUrl'] = add_query_arg( 'user_id', '{user_id}', admin_url( 'user-edit.php' ) ); } if ( $page === 'wpseo_tools' ) { $this->enqueue_tools_scripts(); } $this->asset_manager->localize_script( 'settings', 'wpseoScriptData', $script_data ); $this->asset_manager->enqueue_user_language_script(); } /** * Retrieves some variables that are needed for replacing variables in JS. * * @deprecated 20.3 * @codeCoverageIgnore * * @return array The replacement and recommended replacement variables. */ public function get_replace_vars_script_data() { _deprecated_function( __METHOD__, 'Yoast SEO 20.3' ); $replace_vars = new WPSEO_Replace_Vars(); $recommended_replace_vars = new WPSEO_Admin_Recommended_Replace_Vars(); $editor_specific_replace_vars = new WPSEO_Admin_Editor_Specific_Replace_Vars(); $replace_vars_list = $replace_vars->get_replacement_variables_list(); return [ 'replace_vars' => $replace_vars_list, 'recommended_replace_vars' => $recommended_replace_vars->get_recommended_replacevars(), 'editor_specific_replace_vars' => $editor_specific_replace_vars->get(), 'shared_replace_vars' => $editor_specific_replace_vars->get_generic( $replace_vars_list ), 'hidden_replace_vars' => $replace_vars->get_hidden_replace_vars(), ]; } /** * Enqueues and handles all the tool dependencies. * * @return void */ private function enqueue_tools_scripts() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $tool = isset( $_GET['tool'] ) && is_string( $_GET['tool'] ) ? sanitize_text_field( wp_unslash( $_GET['tool'] ) ) : ''; if ( empty( $tool ) ) { $this->asset_manager->enqueue_script( 'yoast-seo' ); } if ( $tool === 'bulk-editor' ) { $this->asset_manager->enqueue_script( 'bulk-editor' ); } } /** * Returns the appropriate shortlink for the Webinar. * * @return string The shortlink for the Webinar. */ private function get_webinar_shortlink() { if ( YoastSEO()->helpers->product->is_premium() ) { return WPSEO_Shortlinker::get( 'https://yoa.st/webinar-intro-first-time-config-premium' ); } return WPSEO_Shortlinker::get( 'https://yoa.st/webinar-intro-first-time-config' ); } } class-customizer.php 0000644 00000014633 15150262017 0010572 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Customizer */ /** * Class with functionality to support WP SEO settings in WordPress Customizer. */ class WPSEO_Customizer { /** * Holds the customize manager. * * @var WP_Customize_Manager */ protected $wp_customize; /** * Template for the setting IDs used for the customizer. * * @var string */ private $setting_template = 'wpseo_titles[%s]'; /** * Default arguments for the breadcrumbs customizer settings object. * * @var array */ private $default_setting_args = [ 'default' => '', 'type' => 'option', 'transport' => 'refresh', ]; /** * Default arguments for the breadcrumbs customizer control object. * * @var array */ private $default_control_args = [ 'label' => '', 'type' => 'text', 'section' => 'wpseo_breadcrumbs_customizer_section', 'settings' => '', 'context' => '', ]; /** * Construct Method. */ public function __construct() { add_action( 'customize_register', [ $this, 'wpseo_customize_register' ] ); } /** * Function to support WordPress Customizer. * * @param WP_Customize_Manager $wp_customize Manager class instance. * * @return void */ public function wpseo_customize_register( $wp_customize ) { if ( ! WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { return; } $this->wp_customize = $wp_customize; $this->breadcrumbs_section(); $this->breadcrumbs_blog_show_setting(); $this->breadcrumbs_separator_setting(); $this->breadcrumbs_home_setting(); $this->breadcrumbs_prefix_setting(); $this->breadcrumbs_archiveprefix_setting(); $this->breadcrumbs_searchprefix_setting(); $this->breadcrumbs_404_setting(); } /** * Add the breadcrumbs section to the customizer. * * @return void */ private function breadcrumbs_section() { $section_args = [ /* translators: %s is the name of the plugin */ 'title' => sprintf( __( '%s Breadcrumbs', 'wordpress-seo' ), 'Yoast SEO' ), 'priority' => 999, 'active_callback' => [ $this, 'breadcrumbs_active_callback' ], ]; $this->wp_customize->add_section( 'wpseo_breadcrumbs_customizer_section', $section_args ); } /** * Returns whether or not the breadcrumbs are active. * * @return bool */ public function breadcrumbs_active_callback() { return current_theme_supports( 'yoast-seo-breadcrumbs' ) || WPSEO_Options::get( 'breadcrumbs-enable' ); } /** * Adds the breadcrumbs show blog checkbox. * * @return void */ private function breadcrumbs_blog_show_setting() { $index = 'breadcrumbs-display-blog-page'; $control_args = [ 'label' => __( 'Show blog page in breadcrumbs', 'wordpress-seo' ), 'type' => 'checkbox', 'active_callback' => [ $this, 'breadcrumbs_blog_show_active_cb' ], ]; $this->add_setting_and_control( $index, $control_args ); } /** * Returns whether or not to show the breadcrumbs blog show option. * * @return bool */ public function breadcrumbs_blog_show_active_cb() { return get_option( 'show_on_front' ) === 'page'; } /** * Adds the breadcrumbs separator text field. * * @return void */ private function breadcrumbs_separator_setting() { $index = 'breadcrumbs-sep'; $control_args = [ 'label' => __( 'Breadcrumbs separator:', 'wordpress-seo' ), ]; $id = 'wpseo-breadcrumbs-separator'; $this->add_setting_and_control( $index, $control_args, $id ); } /** * Adds the breadcrumbs home anchor text field. * * @return void */ private function breadcrumbs_home_setting() { $index = 'breadcrumbs-home'; $control_args = [ 'label' => __( 'Anchor text for the homepage:', 'wordpress-seo' ), ]; $this->add_setting_and_control( $index, $control_args ); } /** * Adds the breadcrumbs prefix text field. * * @return void */ private function breadcrumbs_prefix_setting() { $index = 'breadcrumbs-prefix'; $control_args = [ 'label' => __( 'Prefix for breadcrumbs:', 'wordpress-seo' ), ]; $this->add_setting_and_control( $index, $control_args ); } /** * Adds the breadcrumbs archive prefix text field. * * @return void */ private function breadcrumbs_archiveprefix_setting() { $index = 'breadcrumbs-archiveprefix'; $control_args = [ 'label' => __( 'Prefix for archive pages:', 'wordpress-seo' ), ]; $this->add_setting_and_control( $index, $control_args ); } /** * Adds the breadcrumbs search prefix text field. * * @return void */ private function breadcrumbs_searchprefix_setting() { $index = 'breadcrumbs-searchprefix'; $control_args = [ 'label' => __( 'Prefix for search result pages:', 'wordpress-seo' ), ]; $this->add_setting_and_control( $index, $control_args ); } /** * Adds the breadcrumb 404 prefix text field. * * @return void */ private function breadcrumbs_404_setting() { $index = 'breadcrumbs-404crumb'; $control_args = [ 'label' => __( 'Breadcrumb for 404 pages:', 'wordpress-seo' ), ]; $this->add_setting_and_control( $index, $control_args ); } /** * Adds the customizer setting and control. * * @param string $index Array key index to use for the customizer setting. * @param array $control_args Customizer control object arguments. * Only those different from the default need to be passed. * @param string|null $id Optional. Customizer control object ID. * Will default to 'wpseo-' . $index. * @param array $custom_settings Optional. Customizer setting arguments. * Only those different from the default need to be passed. * * @return void */ private function add_setting_and_control( $index, $control_args, $id = null, $custom_settings = [] ) { $setting = sprintf( $this->setting_template, $index ); $control_args = array_merge( $this->default_control_args, $control_args ); $control_args['settings'] = $setting; $settings_args = $this->default_setting_args; if ( ! empty( $custom_settings ) ) { $settings_args = array_merge( $settings_args, $custom_settings ); } if ( ! isset( $id ) ) { $id = 'wpseo-' . $index; } $this->wp_customize->add_setting( $setting, $settings_args ); $control = new WP_Customize_Control( $this->wp_customize, $id, $control_args ); $this->wp_customize->add_control( $control ); } } class-database-proxy.php 0000644 00000017004 15150262017 0011304 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Represents the proxy for communicating with the database. */ class WPSEO_Database_Proxy { /** * Holds the table name. * * @var string */ protected $table_name; /** * Determines whether to suppress errors or not. * * @var bool */ protected $suppress_errors = true; /** * Determines if this table is multisite. * * @var bool */ protected $is_multisite_table = false; /** * Holds the last suppressed state. * * @var bool */ protected $last_suppressed_state; /** * Holds the WordPress database object. * * @var wpdb */ protected $database; /** * Holds the table prefix. * * @var string */ protected $table_prefix; /** * Sets the class attributes and registers the table. * * @param wpdb $database The database object. * @param string $table_name The table name that is represented. * @param bool $suppress_errors Should the errors be suppressed. * @param bool $is_multisite_table Should the table be global in multisite. */ public function __construct( $database, $table_name, $suppress_errors = true, $is_multisite_table = false ) { $this->table_name = $table_name; $this->suppress_errors = (bool) $suppress_errors; $this->is_multisite_table = (bool) $is_multisite_table; $this->database = $database; // If the table prefix was provided, strip it as it's handled automatically. $table_prefix = $this->get_table_prefix(); if ( ! empty( $table_prefix ) && strpos( $this->table_name, $table_prefix ) === 0 ) { $this->table_prefix = substr( $this->table_name, strlen( $table_prefix ) ); } if ( ! $this->is_table_registered() ) { $this->register_table(); } } /** * Inserts data into the database. * * @param array $data Data to insert. * @param array|string|null $format Formats for the data. * * @return false|int Total amount of inserted rows or false on error. */ public function insert( array $data, $format = null ) { $this->pre_execution(); $result = $this->database->insert( $this->get_table_name(), $data, $format ); $this->post_execution(); return $result; } /** * Updates data in the database. * * @param array $data Data to update on the table. * @param array $where Where condition as key => value array. * @param array|string|null $format Optional. Data prepare format. * @param array|string|null $where_format Optional. Where prepare format. * * @return false|int False when the update request is invalid, int on number of rows changed. */ public function update( array $data, array $where, $format = null, $where_format = null ) { $this->pre_execution(); $result = $this->database->update( $this->get_table_name(), $data, $where, $format, $where_format ); $this->post_execution(); return $result; } /** * Upserts data in the database. * * Performs an insert into and if key is duplicate it will update the existing record. * * @param array $data Data to update on the table. * @param array|null $where Unused. Where condition as key => value array. * @param array|string|null $format Optional. Data prepare format. * @param array|string|null $where_format Optional. Where prepare format. * * @return false|int False when the upsert request is invalid, int on number of rows changed. */ public function upsert( array $data, ?array $where = null, $format = null, $where_format = null ) { if ( $where_format !== null ) { _deprecated_argument( __METHOD__, '7.7.0', 'The where_format argument is deprecated' ); } $this->pre_execution(); $update = []; $keys = []; $columns = array_keys( $data ); foreach ( $columns as $column ) { $keys[] = '`' . $column . '`'; $update[] = sprintf( '`%1$s` = VALUES(`%1$s`)', $column ); } $query = sprintf( 'INSERT INTO `%1$s` (%2$s) VALUES ( %3$s ) ON DUPLICATE KEY UPDATE %4$s', $this->get_table_name(), implode( ', ', $keys ), implode( ', ', array_fill( 0, count( $data ), '%s' ) ), implode( ', ', $update ) ); $result = $this->database->query( $this->database->prepare( $query, array_values( $data ) ) ); $this->post_execution(); return $result; } /** * Deletes a record from the database. * * @param array $where Where clauses for the query. * @param array|string|null $format Formats for the data. * * @return false|int */ public function delete( array $where, $format = null ) { $this->pre_execution(); $result = $this->database->delete( $this->get_table_name(), $where, $format ); $this->post_execution(); return $result; } /** * Executes the given query and returns the results. * * @param string $query The query to execute. * * @return array|object|null The resultset */ public function get_results( $query ) { $this->pre_execution(); $results = $this->database->get_results( $query ); $this->post_execution(); return $results; } /** * Creates a table to the database. * * @param array $columns The columns to create. * @param array $indexes The indexes to use. * * @return bool True when creation is successful. */ public function create_table( array $columns, array $indexes = [] ) { $create_table = sprintf( 'CREATE TABLE IF NOT EXISTS %1$s ( %2$s ) %3$s', $this->get_table_name(), implode( ',', array_merge( $columns, $indexes ) ), $this->database->get_charset_collate() ); $this->pre_execution(); $is_created = (bool) $this->database->query( $create_table ); $this->post_execution(); return $is_created; } /** * Checks if there is an error. * * @return bool Returns true when there is an error. */ public function has_error() { return ( $this->database->last_error !== '' ); } /** * Executed before a query will be ran. * * @return void */ protected function pre_execution() { if ( $this->suppress_errors ) { $this->last_suppressed_state = $this->database->suppress_errors(); } } /** * Executed after a query has been ran. * * @return void */ protected function post_execution() { if ( $this->suppress_errors ) { $this->database->suppress_errors( $this->last_suppressed_state ); } } /** * Returns the full table name. * * @return string Full table name including prefix. */ public function get_table_name() { return $this->get_table_prefix() . $this->table_name; } /** * Returns the prefix to use for the table. * * @return string The table prefix depending on the database context. */ protected function get_table_prefix() { if ( $this->is_multisite_table ) { return $this->database->base_prefix; } return $this->database->get_blog_prefix(); } /** * Registers the table with WordPress. * * @return void */ protected function register_table() { $table_name = $this->table_name; $full_table_name = $this->get_table_name(); $this->database->$table_name = $full_table_name; if ( $this->is_multisite_table ) { $this->database->ms_global_tables[] = $table_name; return; } $this->database->tables[] = $table_name; } /** * Checks if the table has been registered with WordPress. * * @return bool True if the table is registered, false otherwise. */ protected function is_table_registered() { if ( $this->is_multisite_table ) { return in_array( $this->table_name, $this->database->ms_global_tables, true ); } return in_array( $this->table_name, $this->database->tables, true ); } } class-export.php 0000644 00000006725 15150262017 0007712 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Export */ /** * Class WPSEO_Export. * * Class with functionality to export the WP SEO settings. */ class WPSEO_Export { /** * Holds the nonce action. * * @var string */ public const NONCE_ACTION = 'wpseo_export'; /** * Holds the export data. * * @var string */ private $export = ''; /** * Holds whether the export was a success. * * @var bool */ public $success; /** * Handles the export request. * * @return void */ public function export() { check_admin_referer( self::NONCE_ACTION ); $this->export_settings(); $this->output(); } /** * Outputs the export. * * @return void */ public function output() { if ( ! WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { esc_html_e( 'You do not have the required rights to export settings.', 'wordpress-seo' ); return; } echo '<p id="wpseo-settings-export-desc">'; printf( /* translators: %1$s expands to Import settings */ esc_html__( 'Copy all these settings to another site\'s %1$s tab and click "%1$s" there.', 'wordpress-seo' ), esc_html__( 'Import settings', 'wordpress-seo' ) ); echo '</p>'; /* translators: %1$s expands to Yoast SEO */ echo '<label for="wpseo-settings-export" class="yoast-inline-label">' . sprintf( __( 'Your %1$s settings:', 'wordpress-seo' ), 'Yoast SEO' ) . '</label><br />'; echo '<textarea id="wpseo-settings-export" rows="20" cols="100" aria-describedby="wpseo-settings-export-desc">' . esc_textarea( $this->export ) . '</textarea>'; } /** * Exports the current site's WP SEO settings. * * @return void */ private function export_settings() { $this->export_header(); foreach ( WPSEO_Options::get_option_names() as $opt_group ) { $this->write_opt_group( $opt_group ); } } /** * Writes the header of the export. * * @return void */ private function export_header() { $header = sprintf( /* translators: %1$s expands to Yoast SEO, %2$s expands to Yoast.com */ esc_html__( 'These are settings for the %1$s plugin by %2$s', 'wordpress-seo' ), 'Yoast SEO', 'Yoast.com' ); $this->write_line( '; ' . $header ); } /** * Writes a line to the export. * * @param string $line Line string. * @param bool $newline_first Boolean flag whether to prepend with new line. * * @return void */ private function write_line( $line, $newline_first = false ) { if ( $newline_first ) { $this->export .= PHP_EOL; } $this->export .= $line . PHP_EOL; } /** * Writes an entire option group to the export. * * @param string $opt_group Option group name. * * @return void */ private function write_opt_group( $opt_group ) { $this->write_line( '[' . $opt_group . ']', true ); $options = get_option( $opt_group ); if ( ! is_array( $options ) ) { return; } foreach ( $options as $key => $elem ) { if ( is_array( $elem ) ) { $count = count( $elem ); for ( $i = 0; $i < $count; $i++ ) { $elem_check = ( $elem[ $i ] ?? null ); $this->write_setting( $key . '[]', $elem_check ); } } else { $this->write_setting( $key, $elem ); } } } /** * Writes a settings line to the export. * * @param string $key Key string. * @param string $val Value string. * * @return void */ private function write_setting( $key, $val ) { if ( is_string( $val ) ) { $val = '"' . $val . '"'; } $this->write_line( $key . ' = ' . $val ); } } class-expose-shortlinks.php 0000644 00000021127 15150262017 0012063 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Exposes shortlinks in a global, so that we can pass them to our Javascript components. */ class WPSEO_Expose_Shortlinks implements WPSEO_WordPress_Integration { /** * Array containing the keys and shortlinks. * * @var array */ private $shortlinks = [ 'shortlinks.advanced.allow_search_engines' => 'https://yoa.st/allow-search-engines', 'shortlinks.advanced.follow_links' => 'https://yoa.st/follow-links', 'shortlinks.advanced.meta_robots' => 'https://yoa.st/meta-robots-advanced', 'shortlinks.advanced.breadcrumbs_title' => 'https://yoa.st/breadcrumbs-title', 'shortlinks.metabox.schema.explanation' => 'https://yoa.st/400', 'shortlinks.metabox.schema.page_type' => 'https://yoa.st/402', 'shortlinks.sidebar.schema.explanation' => 'https://yoa.st/401', 'shortlinks.sidebar.schema.page_type' => 'https://yoa.st/403', 'shortlinks.focus_keyword_info' => 'https://yoa.st/focus-keyword', 'shortlinks.nofollow_sponsored' => 'https://yoa.st/nofollow-sponsored', 'shortlinks.snippet_preview_info' => 'https://yoa.st/snippet-preview', 'shortlinks.cornerstone_content_info' => 'https://yoa.st/1i9', 'shortlinks.upsell.social_preview.social' => 'https://yoa.st/social-preview-facebook', 'shortlinks.upsell.social_preview.twitter' => 'https://yoa.st/social-preview-twitter', 'shortlinks.upsell.sidebar.news' => 'https://yoa.st/get-news-sidebar', 'shortlinks.upsell.sidebar.focus_keyword_synonyms_button' => 'https://yoa.st/keyword-synonyms-popup-sidebar', 'shortlinks.upsell.sidebar.premium_seo_analysis_button' => 'https://yoa.st/premium-seo-analysis-sidebar', 'shortlinks.upsell.sidebar.focus_keyword_additional_button' => 'https://yoa.st/add-keywords-popup-sidebar', 'shortlinks.upsell.sidebar.additional_link' => 'https://yoa.st/textlink-keywords-sidebar', 'shortlinks.upsell.sidebar.additional_button' => 'https://yoa.st/add-keywords-sidebar', 'shortlinks.upsell.sidebar.keyphrase_distribution' => 'https://yoa.st/keyphrase-distribution-sidebar', 'shortlinks.upsell.sidebar.word_complexity' => 'https://yoa.st/word-complexity-sidebar', 'shortlinks.upsell.sidebar.internal_linking_suggestions' => 'https://yoa.st/internal-linking-suggestions-sidebar', 'shortlinks.upsell.sidebar.highlighting_seo_analysis' => 'https://yoa.st/highlighting-seo-analysis', 'shortlinks.upsell.sidebar.highlighting_readability_analysis' => 'https://yoa.st/highlighting-readability-analysis', 'shortlinks.upsell.sidebar.highlighting_inclusive_analysis' => 'https://yoa.st/highlighting-inclusive-analysis', 'shortlinks.upsell.metabox.news' => 'https://yoa.st/get-news-metabox', 'shortlinks.upsell.metabox.go_premium' => 'https://yoa.st/pe-premium-page', 'shortlinks.upsell.metabox.focus_keyword_synonyms_button' => 'https://yoa.st/keyword-synonyms-popup', 'shortlinks.upsell.metabox.premium_seo_analysis_button' => 'https://yoa.st/premium-seo-analysis-metabox', 'shortlinks.upsell.metabox.focus_keyword_additional_button' => 'https://yoa.st/add-keywords-popup', 'shortlinks.upsell.metabox.additional_link' => 'https://yoa.st/textlink-keywords-metabox', 'shortlinks.upsell.metabox.additional_button' => 'https://yoa.st/add-keywords-metabox', 'shortlinks.upsell.metabox.keyphrase_distribution' => 'https://yoa.st/keyphrase-distribution-metabox', 'shortlinks.upsell.metabox.word_complexity' => 'https://yoa.st/word-complexity-metabox', 'shortlinks.upsell.metabox.internal_linking_suggestions' => 'https://yoa.st/internal-linking-suggestions-metabox', 'shortlinks.upsell.gsc.create_redirect_button' => 'https://yoa.st/redirects', 'shortlinks.readability_analysis_info' => 'https://yoa.st/readability-analysis', 'shortlinks.inclusive_language_analysis_info' => 'https://yoa.st/inclusive-language-analysis', 'shortlinks.activate_premium_info' => 'https://yoa.st/activate-subscription', 'shortlinks.upsell.sidebar.morphology_upsell_metabox' => 'https://yoa.st/morphology-upsell-metabox', 'shortlinks.upsell.sidebar.morphology_upsell_sidebar' => 'https://yoa.st/morphology-upsell-sidebar', 'shortlinks.semrush.volume_help' => 'https://yoa.st/3-v', 'shortlinks.semrush.trend_help' => 'https://yoa.st/3-v', 'shortlinks.semrush.prices' => 'https://yoa.st/semrush-prices', 'shortlinks.semrush.premium_landing_page' => 'https://yoa.st/413', 'shortlinks.wincher.seo_performance' => 'https://yoa.st/wincher-integration', 'shortlinks-insights-estimated_reading_time' => 'https://yoa.st/4fd', 'shortlinks-insights-flesch_reading_ease' => 'https://yoa.st/34r', 'shortlinks-insights-flesch_reading_ease_sidebar' => 'https://yoa.st/4mf', 'shortlinks-insights-flesch_reading_ease_metabox' => 'https://yoa.st/4mg', 'shortlinks-insights-flesch_reading_ease_article' => 'https://yoa.st/34s', 'shortlinks-insights-keyword_research_link' => 'https://yoa.st/keyword-research-metabox', 'shortlinks-insights-upsell-sidebar-prominent_words' => 'https://yoa.st/prominent-words-upsell-sidebar', 'shortlinks-insights-upsell-metabox-prominent_words' => 'https://yoa.st/prominent-words-upsell-metabox', 'shortlinks-insights-upsell-elementor-prominent_words' => 'https://yoa.st/prominent-words-upsell-elementor', 'shortlinks-insights-word_count' => 'https://yoa.st/word-count', 'shortlinks-insights-upsell-sidebar-text_formality' => 'https://yoa.st/formality-upsell-sidebar', 'shortlinks-insights-upsell-metabox-text_formality' => 'https://yoa.st/formality-upsell-metabox', 'shortlinks-insights-upsell-elementor-text_formality' => 'https://yoa.st/formality-upsell-elementor', 'shortlinks-insights-text_formality_info_free' => 'https://yoa.st/formality-free', 'shortlinks-insights-text_formality_info_premium' => 'https://yoa.st/formality', ]; /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { add_filter( 'wpseo_admin_l10n', [ $this, 'expose_shortlinks' ] ); } /** * Adds shortlinks to the passed array. * * @param array $input The array to add shortlinks to. * * @return array The passed array with the additional shortlinks. */ public function expose_shortlinks( $input ) { foreach ( $this->get_shortlinks() as $key => $shortlink ) { $input[ $key ] = WPSEO_Shortlinker::get( $shortlink ); } $input['default_query_params'] = WPSEO_Shortlinker::get_query_params(); return $input; } /** * Retrieves the shortlinks. * * @return array The shortlinks. */ private function get_shortlinks() { if ( ! $this->is_term_edit() ) { return $this->shortlinks; } $shortlinks = $this->shortlinks; $shortlinks['shortlinks.upsell.metabox.focus_keyword_synonyms_button'] = 'https://yoa.st/keyword-synonyms-popup-term'; $shortlinks['shortlinks.upsell.metabox.focus_keyword_additional_button'] = 'https://yoa.st/add-keywords-popup-term'; $shortlinks['shortlinks.upsell.metabox.additional_link'] = 'https://yoa.st/textlink-keywords-metabox-term'; $shortlinks['shortlinks.upsell.metabox.additional_button'] = 'https://yoa.st/add-keywords-metabox-term'; $shortlinks['shortlinks.upsell.sidebar.morphology_upsell_metabox'] = 'https://yoa.st/morphology-upsell-metabox-term'; $shortlinks['shortlinks.upsell.metabox.keyphrase_distribution'] = 'https://yoa.st/keyphrase-distribution-metabox-term'; $shortlinks['shortlinks.upsell.metabox.word_complexity'] = 'https://yoa.st/word-complexity-metabox-term'; $shortlinks['shortlinks.upsell.metabox.internal_linking_suggestions'] = 'https://yoa.st/internal-linking-suggestions-metabox-term'; return $shortlinks; } /** * Checks if the current page is a term edit page. * * @return bool True when page is term edit. */ private function is_term_edit() { global $pagenow; return WPSEO_Taxonomy::is_term_edit( $pagenow ); } } class-gutenberg-compatibility.php 0000644 00000004741 15150262017 0013216 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Gutenberg_Compatibility */ /** * Class WPSEO_Gutenberg_Compatibility */ class WPSEO_Gutenberg_Compatibility { /** * The currently released version of Gutenberg. * * @var string */ public const CURRENT_RELEASE = '17.9.0'; /** * The minimally supported version of Gutenberg by the plugin. * * @var string */ public const MINIMUM_SUPPORTED = '17.9.0'; /** * Holds the current version. * * @var string */ protected $current_version = ''; /** * WPSEO_Gutenberg_Compatibility constructor. */ public function __construct() { $this->current_version = $this->detect_installed_gutenberg_version(); } /** * Determines whether or not Gutenberg is installed. * * @return bool Whether or not Gutenberg is installed. */ public function is_installed() { return $this->current_version !== ''; } /** * Determines whether or not the currently installed version of Gutenberg is below the minimum supported version. * * @return bool True if the currently installed version is below the minimum supported version. False otherwise. */ public function is_below_minimum() { return version_compare( $this->current_version, $this->get_minimum_supported_version(), '<' ); } /** * Gets the currently installed version. * * @return string The currently installed version. */ public function get_installed_version() { return $this->current_version; } /** * Determines whether or not the currently installed version of Gutenberg is the latest, fully compatible version. * * @return bool Whether or not the currently installed version is fully compatible. */ public function is_fully_compatible() { return version_compare( $this->current_version, $this->get_latest_release(), '>=' ); } /** * Gets the latest released version of Gutenberg. * * @return string The latest release. */ protected function get_latest_release() { return self::CURRENT_RELEASE; } /** * Gets the minimum supported version of Gutenberg. * * @return string The minumum supported release. */ protected function get_minimum_supported_version() { return self::MINIMUM_SUPPORTED; } /** * Detects the currently installed Gutenberg version. * * @return string The currently installed Gutenberg version. Empty if the version couldn't be detected. */ protected function detect_installed_gutenberg_version() { if ( defined( 'GUTENBERG_VERSION' ) ) { return GUTENBERG_VERSION; } return ''; } } class-meta-columns.php 0000644 00000061602 15150262017 0010770 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Context\Meta_Tags_Context; use Yoast\WP\SEO\Helpers\Score_Icon_Helper; use Yoast\WP\SEO\Integrations\Admin\Admin_Columns_Cache_Integration; use Yoast\WP\SEO\Surfaces\Values\Meta; /** * Class WPSEO_Meta_Columns. */ class WPSEO_Meta_Columns { /** * Holds the context objects for each indexable. * * @var Meta_Tags_Context[] */ protected $context = []; /** * Holds the SEO analysis. * * @var WPSEO_Metabox_Analysis_SEO */ private $analysis_seo; /** * Holds the readability analysis. * * @var WPSEO_Metabox_Analysis_Readability */ private $analysis_readability; /** * Admin columns cache. * * @var Admin_Columns_Cache_Integration */ private $admin_columns_cache; /** * Holds the Score_Icon_Helper. * * @var Score_Icon_Helper */ private $score_icon_helper; /** * When page analysis is enabled, just initialize the hooks. */ public function __construct() { if ( apply_filters( 'wpseo_use_page_analysis', true ) === true ) { add_action( 'admin_init', [ $this, 'setup_hooks' ] ); } $this->analysis_seo = new WPSEO_Metabox_Analysis_SEO(); $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); $this->admin_columns_cache = YoastSEO()->classes->get( Admin_Columns_Cache_Integration::class ); $this->score_icon_helper = YoastSEO()->helpers->score_icon; } /** * Sets up up the hooks. * * @return void */ public function setup_hooks() { $this->set_post_type_hooks(); if ( $this->analysis_seo->is_enabled() ) { add_action( 'restrict_manage_posts', [ $this, 'posts_filter_dropdown' ] ); } if ( $this->analysis_readability->is_enabled() ) { add_action( 'restrict_manage_posts', [ $this, 'posts_filter_dropdown_readability' ] ); } add_filter( 'request', [ $this, 'column_sort_orderby' ] ); add_filter( 'default_hidden_columns', [ $this, 'column_hidden' ], 10, 1 ); } /** * Adds the column headings for the SEO plugin for edit posts / pages overview. * * @param array $columns Already existing columns. * * @return array Array containing the column headings. */ public function column_heading( $columns ) { if ( $this->display_metabox() === false ) { return $columns; } $added_columns = []; if ( $this->analysis_seo->is_enabled() ) { $added_columns['wpseo-score'] = '<span class="yoast-column-seo-score yoast-column-header-has-tooltip" data-tooltip-text="' . esc_attr__( 'SEO score', 'wordpress-seo' ) . '"><span class="screen-reader-text">' . __( 'SEO score', 'wordpress-seo' ) . '</span></span></span>'; } if ( $this->analysis_readability->is_enabled() ) { $added_columns['wpseo-score-readability'] = '<span class="yoast-column-readability yoast-column-header-has-tooltip" data-tooltip-text="' . esc_attr__( 'Readability score', 'wordpress-seo' ) . '"><span class="screen-reader-text">' . __( 'Readability score', 'wordpress-seo' ) . '</span></span></span>'; } $added_columns['wpseo-title'] = __( 'SEO Title', 'wordpress-seo' ); $added_columns['wpseo-metadesc'] = __( 'Meta Desc.', 'wordpress-seo' ); if ( $this->analysis_seo->is_enabled() ) { $added_columns['wpseo-focuskw'] = __( 'Keyphrase', 'wordpress-seo' ); } return array_merge( $columns, $added_columns ); } /** * Displays the column content for the given column. * * @param string $column_name Column to display the content for. * @param int $post_id Post to display the column content for. * * @return void */ public function column_content( $column_name, $post_id ) { if ( $this->display_metabox() === false ) { return; } switch ( $column_name ) { case 'wpseo-score': // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in render_score_indicator() method. echo $this->parse_column_score( $post_id ); return; case 'wpseo-score-readability': // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in render_score_indicator() method. echo $this->parse_column_score_readability( $post_id ); return; case 'wpseo-title': $meta = $this->get_meta( $post_id ); if ( $meta ) { echo esc_html( $meta->title ); } return; case 'wpseo-metadesc': $metadesc_val = ''; $meta = $this->get_meta( $post_id ); if ( $meta ) { $metadesc_val = $meta->meta_description; } if ( $metadesc_val === '' ) { echo '<span aria-hidden="true">—</span><span class="screen-reader-text">', /* translators: Hidden accessibility text. */ esc_html__( 'Meta description not set.', 'wordpress-seo' ), '</span>'; return; } echo esc_html( $metadesc_val ); return; case 'wpseo-focuskw': $focuskw_val = WPSEO_Meta::get_value( 'focuskw', $post_id ); if ( $focuskw_val === '' ) { echo '<span aria-hidden="true">—</span><span class="screen-reader-text">', /* translators: Hidden accessibility text. */ esc_html__( 'Focus keyphrase not set.', 'wordpress-seo' ), '</span>'; return; } echo esc_html( $focuskw_val ); return; } } /** * Indicates which of the SEO columns are sortable. * * @param array $columns Appended with their orderby variable. * * @return array Array containing the sortable columns. */ public function column_sort( $columns ) { if ( $this->display_metabox() === false ) { return $columns; } $columns['wpseo-metadesc'] = 'wpseo-metadesc'; if ( $this->analysis_seo->is_enabled() ) { $columns['wpseo-focuskw'] = 'wpseo-focuskw'; $columns['wpseo-score'] = 'wpseo-score'; } if ( $this->analysis_readability->is_enabled() ) { $columns['wpseo-score-readability'] = 'wpseo-score-readability'; } return $columns; } /** * Hides the SEO title, meta description and focus keyword columns if the user hasn't chosen which columns to hide. * * @param array $hidden The hidden columns. * * @return array Array containing the columns to hide. */ public function column_hidden( $hidden ) { if ( ! is_array( $hidden ) ) { $hidden = []; } array_push( $hidden, 'wpseo-title', 'wpseo-metadesc' ); if ( $this->analysis_seo->is_enabled() ) { $hidden[] = 'wpseo-focuskw'; } return $hidden; } /** * Adds a dropdown that allows filtering on the posts SEO Quality. * * @return void */ public function posts_filter_dropdown() { if ( ! $this->can_display_filter() ) { return; } $ranks = WPSEO_Rank::get_all_ranks(); /* translators: Hidden accessibility text. */ echo '<label class="screen-reader-text" for="wpseo-filter">' . esc_html__( 'Filter by SEO Score', 'wordpress-seo' ) . '</label>'; echo '<select name="seo_filter" id="wpseo-filter">'; // phpcs:ignore WordPress.Security.EscapeOutput -- Output is correctly escaped in the generate_option() method. echo $this->generate_option( '', __( 'All SEO Scores', 'wordpress-seo' ) ); foreach ( $ranks as $rank ) { $selected = selected( $this->get_current_seo_filter(), $rank->get_rank(), false ); // phpcs:ignore WordPress.Security.EscapeOutput -- Output is correctly escaped in the generate_option() method. echo $this->generate_option( $rank->get_rank(), $rank->get_drop_down_label(), $selected ); } echo '</select>'; } /** * Adds a dropdown that allows filtering on the posts Readability Quality. * * @return void */ public function posts_filter_dropdown_readability() { if ( ! $this->can_display_filter() ) { return; } $ranks = WPSEO_Rank::get_all_readability_ranks(); /* translators: Hidden accessibility text. */ echo '<label class="screen-reader-text" for="wpseo-readability-filter">' . esc_html__( 'Filter by Readability Score', 'wordpress-seo' ) . '</label>'; echo '<select name="readability_filter" id="wpseo-readability-filter">'; // phpcs:ignore WordPress.Security.EscapeOutput -- Output is correctly escaped in the generate_option() method. echo $this->generate_option( '', __( 'All Readability Scores', 'wordpress-seo' ) ); foreach ( $ranks as $rank ) { $selected = selected( $this->get_current_readability_filter(), $rank->get_rank(), false ); // phpcs:ignore WordPress.Security.EscapeOutput -- Output is correctly escaped in the generate_option() method. echo $this->generate_option( $rank->get_rank(), $rank->get_drop_down_readability_labels(), $selected ); } echo '</select>'; } /** * Generates an <option> element. * * @param string $value The option's value. * @param string $label The option's label. * @param string $selected HTML selected attribute for an option. * * @return string The generated <option> element. */ protected function generate_option( $value, $label, $selected = '' ) { return '<option ' . $selected . ' value="' . esc_attr( $value ) . '">' . esc_html( $label ) . '</option>'; } /** * Returns the meta object for a given post ID. * * @param int $post_id The post ID. * * @return Meta The meta object. */ protected function get_meta( $post_id ) { $indexable = $this->admin_columns_cache->get_indexable( $post_id ); return YoastSEO()->meta->for_indexable( $indexable, 'Post_Type' ); } /** * Determines the SEO score filter to be later used in the meta query, based on the passed SEO filter. * * @param string $seo_filter The SEO filter to use to determine what further filter to apply. * * @return array The SEO score filter. */ protected function determine_seo_filters( $seo_filter ) { if ( $seo_filter === WPSEO_Rank::NO_FOCUS ) { return $this->create_no_focus_keyword_filter(); } if ( $seo_filter === WPSEO_Rank::NO_INDEX ) { return $this->create_no_index_filter(); } $rank = new WPSEO_Rank( $seo_filter ); return $this->create_seo_score_filter( $rank->get_starting_score(), $rank->get_end_score() ); } /** * Determines the Readability score filter to the meta query, based on the passed Readability filter. * * @param string $readability_filter The Readability filter to use to determine what further filter to apply. * * @return array The Readability score filter. */ protected function determine_readability_filters( $readability_filter ) { $rank = new WPSEO_Rank( $readability_filter ); return $this->create_readability_score_filter( $rank->get_starting_score(), $rank->get_end_score() ); } /** * Creates a keyword filter for the meta query, based on the passed Keyword filter. * * @param string $keyword_filter The keyword filter to use. * * @return array The keyword filter. */ protected function get_keyword_filter( $keyword_filter ) { return [ 'post_type' => get_query_var( 'post_type', 'post' ), 'key' => WPSEO_Meta::$meta_prefix . 'focuskw', 'value' => sanitize_text_field( $keyword_filter ), ]; } /** * Determines whether the passed filter is considered to be valid. * * @param mixed $filter The filter to check against. * * @return bool Whether the filter is considered valid. */ protected function is_valid_filter( $filter ) { return ! empty( $filter ) && is_string( $filter ); } /** * Collects the filters and merges them into a single array. * * @return array Array containing all the applicable filters. */ protected function collect_filters() { $active_filters = []; $seo_filter = $this->get_current_seo_filter(); $readability_filter = $this->get_current_readability_filter(); $current_keyword_filter = $this->get_current_keyword_filter(); if ( $this->is_valid_filter( $seo_filter ) ) { $active_filters = array_merge( $active_filters, $this->determine_seo_filters( $seo_filter ) ); } if ( $this->is_valid_filter( $readability_filter ) ) { $active_filters = array_merge( $active_filters, $this->determine_readability_filters( $readability_filter ) ); } if ( $this->is_valid_filter( $current_keyword_filter ) ) { /** * Adapt the meta query used to filter the post overview on keyphrase. * * @internal * * @param array $keyphrase The keyphrase used in the filter. * @param array $keyword_filter The current keyword filter. */ $keyphrase_filter = apply_filters( 'wpseo_change_keyphrase_filter_in_request', $this->get_keyword_filter( $current_keyword_filter ), $current_keyword_filter ); if ( is_array( $keyphrase_filter ) ) { $active_filters = array_merge( $active_filters, [ $keyphrase_filter ] ); } } /** * Adapt the active applicable filters on the posts overview. * * @internal * * @param array $active_filters The current applicable filters. */ return apply_filters( 'wpseo_change_applicable_filters', $active_filters ); } /** * Modify the query based on the filters that are being passed. * * @param array $vars Query variables that need to be modified based on the filters. * * @return array Array containing the meta query to use for filtering the posts overview. */ public function column_sort_orderby( $vars ) { $collected_filters = $this->collect_filters(); $order_by_column = $vars['orderby']; if ( isset( $order_by_column ) ) { // Based on the selected column, create a meta query. $order_by = $this->filter_order_by( $order_by_column ); /** * Adapt the order by part of the query on the posts overview. * * @internal * * @param array $order_by The current order by. * @param string $order_by_column The current order by column. */ $order_by = apply_filters( 'wpseo_change_order_by', $order_by, $order_by_column ); $vars = array_merge( $vars, $order_by ); } return $this->build_filter_query( $vars, $collected_filters ); } /** * Retrieves the meta robots query values to be used within the meta query. * * @return array Array containing the query parameters regarding meta robots. */ protected function get_meta_robots_query_values() { return [ 'relation' => 'OR', [ 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', 'compare' => 'NOT EXISTS', ], [ 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', 'value' => '1', 'compare' => '!=', ], ]; } /** * Determines the score filters to be used. If more than one is passed, it created an AND statement for the query. * * @param array $score_filters Array containing the score filters. * * @return array Array containing the score filters that need to be applied to the meta query. */ protected function determine_score_filters( $score_filters ) { if ( count( $score_filters ) > 1 ) { return array_merge( [ 'relation' => 'AND' ], $score_filters ); } return $score_filters; } /** * Retrieves the post type from the $_GET variable. * * @return string|null The sanitized current post type or null when the variable is not set in $_GET. */ public function get_current_post_type() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['post_type'] ) && is_string( $_GET['post_type'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. return sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); } return null; } /** * Retrieves the SEO filter from the $_GET variable. * * @return string|null The sanitized seo filter or null when the variable is not set in $_GET. */ public function get_current_seo_filter() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['seo_filter'] ) && is_string( $_GET['seo_filter'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. return sanitize_text_field( wp_unslash( $_GET['seo_filter'] ) ); } return null; } /** * Retrieves the Readability filter from the $_GET variable. * * @return string|null The sanitized readability filter or null when the variable is not set in $_GET. */ public function get_current_readability_filter() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['readability_filter'] ) && is_string( $_GET['readability_filter'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. return sanitize_text_field( wp_unslash( $_GET['readability_filter'] ) ); } return null; } /** * Retrieves the keyword filter from the $_GET variable. * * @return string|null The sanitized seo keyword filter or null when the variable is not set in $_GET. */ public function get_current_keyword_filter() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['seo_kw_filter'] ) && is_string( $_GET['seo_kw_filter'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. return sanitize_text_field( wp_unslash( $_GET['seo_kw_filter'] ) ); } return null; } /** * Uses the vars to create a complete filter query that can later be executed to filter out posts. * * @param array $vars Array containing the variables that will be used in the meta query. * @param array $filters Array containing the filters that we need to apply in the meta query. * * @return array Array containing the complete filter query. */ protected function build_filter_query( $vars, $filters ) { // If no filters were applied, just return everything. if ( count( $filters ) === 0 ) { return $vars; } $result = [ 'meta_query' => [] ]; $result['meta_query'] = array_merge( $result['meta_query'], [ $this->determine_score_filters( $filters ) ] ); $current_seo_filter = $this->get_current_seo_filter(); // This only applies for the SEO score filter because it can because the SEO score can be altered by the no-index option. if ( $this->is_valid_filter( $current_seo_filter ) && ! in_array( $current_seo_filter, [ WPSEO_Rank::NO_INDEX, WPSEO_Rank::NO_FOCUS ], true ) ) { $result['meta_query'] = array_merge( $result['meta_query'], [ $this->get_meta_robots_query_values() ] ); } return array_merge( $vars, $result ); } /** * Creates a Readability score filter. * * @param number $low The lower boundary of the score. * @param number $high The higher boundary of the score. * * @return array The Readability Score filter. */ protected function create_readability_score_filter( $low, $high ) { return [ [ 'key' => WPSEO_Meta::$meta_prefix . 'content_score', 'value' => [ $low, $high ], 'type' => 'numeric', 'compare' => 'BETWEEN', ], ]; } /** * Creates an SEO score filter. * * @param number $low The lower boundary of the score. * @param number $high The higher boundary of the score. * * @return array The SEO score filter. */ protected function create_seo_score_filter( $low, $high ) { return [ [ 'key' => WPSEO_Meta::$meta_prefix . 'linkdex', 'value' => [ $low, $high ], 'type' => 'numeric', 'compare' => 'BETWEEN', ], ]; } /** * Creates a filter to retrieve posts that were set to no-index. * * @return array Array containin the no-index filter. */ protected function create_no_index_filter() { return [ [ 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', 'value' => '1', 'compare' => '=', ], ]; } /** * Creates a filter to retrieve posts that have no keyword set. * * @return array Array containing the no focus keyword filter. */ protected function create_no_focus_keyword_filter() { return [ [ 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', 'value' => 'needs-a-value-anyway', 'compare' => 'NOT EXISTS', ], [ 'key' => WPSEO_Meta::$meta_prefix . 'linkdex', 'value' => 'needs-a-value-anyway', 'compare' => 'NOT EXISTS', ], ]; } /** * Determines whether a particular post_id is of an indexable post type. * * @param string $post_id The post ID to check. * * @return bool Whether or not it is indexable. */ protected function is_indexable( $post_id ) { if ( ! empty( $post_id ) && ! $this->uses_default_indexing( $post_id ) ) { return WPSEO_Meta::get_value( 'meta-robots-noindex', $post_id ) === '2'; } $post = get_post( $post_id ); if ( is_object( $post ) ) { // If the option is false, this means we want to index it. return WPSEO_Options::get( 'noindex-' . $post->post_type, false ) === false; } return true; } /** * Determines whether the given post ID uses the default indexing settings. * * @param int $post_id The post ID to check. * * @return bool Whether or not the default indexing is being used for the post. */ protected function uses_default_indexing( $post_id ) { return WPSEO_Meta::get_value( 'meta-robots-noindex', $post_id ) === '0'; } /** * Returns filters when $order_by is matched in the if-statement. * * @param string $order_by The ID of the column by which to order the posts. * * @return array Array containing the order filters. */ private function filter_order_by( $order_by ) { switch ( $order_by ) { case 'wpseo-metadesc': return [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. 'meta_key' => WPSEO_Meta::$meta_prefix . 'metadesc', 'orderby' => 'meta_value', ]; case 'wpseo-focuskw': return [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. 'meta_key' => WPSEO_Meta::$meta_prefix . 'focuskw', 'orderby' => 'meta_value', ]; case 'wpseo-score': return [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. 'meta_key' => WPSEO_Meta::$meta_prefix . 'linkdex', 'orderby' => 'meta_value_num', ]; case 'wpseo-score-readability': return [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. 'meta_key' => WPSEO_Meta::$meta_prefix . 'content_score', 'orderby' => 'meta_value_num', ]; } return []; } /** * Parses the score column. * * @param int $post_id The ID of the post for which to show the score. * * @return string The HTML for the SEO score indicator. */ private function parse_column_score( $post_id ) { $meta = $this->get_meta( $post_id ); if ( $meta ) { return $this->score_icon_helper->for_seo( $meta->indexable, '', __( 'Post is set to noindex.', 'wordpress-seo' ) ); } } /** * Parsing the readability score column. * * @param int $post_id The ID of the post for which to show the readability score. * * @return string The HTML for the readability score indicator. */ private function parse_column_score_readability( $post_id ) { $meta = $this->get_meta( $post_id ); if ( $meta ) { return $this->score_icon_helper->for_readability( $meta->indexable->readability_score ); } } /** * Sets up the hooks for the post_types. * * @return void */ private function set_post_type_hooks() { $post_types = WPSEO_Post_Type::get_accessible_post_types(); if ( ! is_array( $post_types ) || $post_types === [] ) { return; } foreach ( $post_types as $post_type ) { if ( $this->display_metabox( $post_type ) === false ) { continue; } add_filter( 'manage_' . $post_type . '_posts_columns', [ $this, 'column_heading' ], 10, 1 ); add_action( 'manage_' . $post_type . '_posts_custom_column', [ $this, 'column_content' ], 10, 2 ); add_action( 'manage_edit-' . $post_type . '_sortable_columns', [ $this, 'column_sort' ], 10, 2 ); } unset( $post_type ); } /** * Wraps the WPSEO_Metabox check to determine whether the metabox should be displayed either by * choice of the admin or because the post type is not a public post type. * * @since 7.0 * * @param string|null $post_type Optional. The post type to test, defaults to the current post post_type. * * @return bool Whether or not the meta box (and associated columns etc) should be hidden. */ private function display_metabox( $post_type = null ) { $current_post_type = $this->get_current_post_type(); if ( ! isset( $post_type ) && ! empty( $current_post_type ) ) { $post_type = $current_post_type; } return WPSEO_Utils::is_metabox_active( $post_type, 'post_type' ); } /** * Determines whether or not filter dropdowns should be displayed. * * @return bool Whether or the current page can display the filter drop downs. */ public function can_display_filter() { if ( $GLOBALS['pagenow'] === 'upload.php' ) { return false; } if ( $this->display_metabox() === false ) { return false; } $screen = get_current_screen(); if ( $screen === null ) { return false; } return WPSEO_Post_Type::is_post_type_accessible( $screen->post_type ); } } class-my-yoast-proxy.php 0000644 00000014217 15150262017 0011325 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Loads the MyYoast proxy. * * This class registers a proxy page on `admin.php`. Which is reached with the `page=PAGE_IDENTIFIER` parameter. * It will read external files and serves them like they are located locally. */ class WPSEO_MyYoast_Proxy implements WPSEO_WordPress_Integration { /** * The page identifier used in WordPress to register the MyYoast proxy page. * * @var string */ public const PAGE_IDENTIFIER = 'wpseo_myyoast_proxy'; /** * The cache control's max age. Used in the header of a successful proxy response. * * @var int */ public const CACHE_CONTROL_MAX_AGE = DAY_IN_SECONDS; /** * Registers the hooks when the user is on the right page. * * @codeCoverageIgnore * * @return void */ public function register_hooks() { if ( ! $this->is_proxy_page() ) { return; } // Register the page for the proxy. add_action( 'admin_menu', [ $this, 'add_proxy_page' ] ); add_action( 'admin_init', [ $this, 'handle_proxy_page' ] ); } /** * Registers the proxy page. It does not actually add a link to the dashboard. * * @codeCoverageIgnore * * @return void */ public function add_proxy_page() { add_dashboard_page( '', '', 'read', self::PAGE_IDENTIFIER, '' ); } /** * Renders the requested proxy page and exits to prevent the WordPress UI from loading. * * @codeCoverageIgnore * * @return void */ public function handle_proxy_page() { $this->render_proxy_page(); // Prevent the WordPress UI from loading. exit; } /** * Renders the requested proxy page. * * This is separated from the exits to be able to test it. * * @return void */ public function render_proxy_page() { $proxy_options = $this->determine_proxy_options(); if ( $proxy_options === [] ) { // Do not accept any other file than implemented. $this->set_header( 'HTTP/1.0 501 Requested file not implemented' ); return; } // Set the headers before serving the remote file. $this->set_header( 'Content-Type: ' . $proxy_options['content_type'] ); $this->set_header( 'Cache-Control: max-age=' . self::CACHE_CONTROL_MAX_AGE ); try { echo $this->get_remote_url_body( $proxy_options['url'] ); } catch ( Exception $e ) { /* * Reset the file headers because the loading failed. * * Note: Due to supporting PHP 5.2 `header_remove` can not be used here. * Overwrite the headers instead. */ $this->set_header( 'Content-Type: text/plain' ); $this->set_header( 'Cache-Control: max-age=0' ); $this->set_header( 'HTTP/1.0 500 ' . $e->getMessage() ); } } /** * Tries to load the given url via `wp_remote_get`. * * @codeCoverageIgnore * * @param string $url The url to load. * * @return string The body of the response. * * @throws Exception When `wp_remote_get` returned an error. * @throws Exception When the response code is not 200. */ protected function get_remote_url_body( $url ) { $response = wp_remote_get( $url ); if ( $response instanceof WP_Error ) { throw new Exception( 'Unable to retrieve file from MyYoast' ); } if ( wp_remote_retrieve_response_code( $response ) !== 200 ) { throw new Exception( 'Received unexpected response from MyYoast' ); } return wp_remote_retrieve_body( $response ); } /** * Determines the proxy options based on the file and plugin version arguments. * * When the file is known it returns an array like this: * <code> * $array = array( * 'content_type' => 'the content type' * 'url' => 'the url, possibly with the plugin version' * ) * </code> * * @return array Empty for an unknown file. See format above for known files. */ protected function determine_proxy_options() { if ( $this->get_proxy_file() === 'research-webworker' ) { return [ 'content_type' => 'text/javascript; charset=UTF-8', 'url' => 'https://my.yoast.com/api/downloads/file/analysis-worker?plugin_version=' . $this->get_plugin_version(), ]; } return []; } /** * Checks if the current page is the MyYoast proxy page. * * @codeCoverageIgnore * * @return bool True when the page request parameter equals the proxy page. */ protected function is_proxy_page() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; return $page === self::PAGE_IDENTIFIER; } /** * Returns the proxy file from the HTTP request parameters. * * @codeCoverageIgnore * * @return string The sanitized file request parameter or an empty string if it does not exist. */ protected function get_proxy_file() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['file'] ) && is_string( $_GET['file'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. return sanitize_text_field( wp_unslash( $_GET['file'] ) ); } return ''; } /** * Returns the plugin version from the HTTP request parameters. * * @codeCoverageIgnore * * @return string The sanitized plugin_version request parameter or an empty string if it does not exist. */ protected function get_plugin_version() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['plugin_version'] ) && is_string( $_GET['plugin_version'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $plugin_version = sanitize_text_field( wp_unslash( $_GET['plugin_version'] ) ); // Replace slashes to secure against requiring a file from another path. return str_replace( [ '/', '\\' ], '_', $plugin_version ); } return ''; } /** * Sets the HTTP header. * * This is a tiny helper function to enable better testing. * * @codeCoverageIgnore * * @param string $header The header to set. * * @return void */ protected function set_header( $header ) { header( $header ); } } class-option-tab.php 0000644 00000004334 15150262017 0010437 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Options\Tabs */ /** * Class WPSEO_Option_Tab. */ class WPSEO_Option_Tab { /** * Name of the tab. * * @var string */ private $name; /** * Label of the tab. * * @var string */ private $label; /** * Optional arguments. * * @var array */ private $arguments; /** * WPSEO_Option_Tab constructor. * * @param string $name Name of the tab. * @param string $label Localized label of the tab. * @param array $arguments Optional arguments. */ public function __construct( $name, $label, array $arguments = [] ) { $this->name = sanitize_title( $name ); $this->label = $label; $this->arguments = $arguments; } /** * Gets the name. * * @return string The name. */ public function get_name() { return $this->name; } /** * Gets the label. * * @return string The label. */ public function get_label() { return $this->label; } /** * Retrieves whether the tab needs a save button. * * @return bool True whether the tabs needs a save button. */ public function has_save_button() { return (bool) $this->get_argument( 'save_button', true ); } /** * Retrieves whether the tab hosts beta functionalities. * * @return bool True whether the tab hosts beta functionalities. */ public function is_beta() { return (bool) $this->get_argument( 'beta', false ); } /** * Retrieves whether the tab hosts premium functionalities. * * @return bool True whether the tab hosts premium functionalities. */ public function is_premium() { return (bool) $this->get_argument( 'premium', false ); } /** * Gets the option group. * * @return string The option group. */ public function get_opt_group() { return $this->get_argument( 'opt_group' ); } /** * Retrieves the variable from the supplied arguments. * * @param string $variable Variable to retrieve. * @param string|mixed $default_value Default to use when variable not found. * * @return mixed|string The retrieved variable. */ protected function get_argument( $variable, $default_value = '' ) { return array_key_exists( $variable, $this->arguments ) ? $this->arguments[ $variable ] : $default_value; } } class-option-tabs-formatter.php 0000644 00000005531 15150262017 0012623 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Options\Tabs */ use Yoast\WP\SEO\Presenters\Admin\Beta_Badge_Presenter; use Yoast\WP\SEO\Presenters\Admin\Premium_Badge_Presenter; /** * Class WPSEO_Option_Tabs_Formatter. */ class WPSEO_Option_Tabs_Formatter { /** * Retrieves the path to the view of the tab. * * @param WPSEO_Option_Tabs $option_tabs Option Tabs to get base from. * @param WPSEO_Option_Tab $tab Tab to get name from. * * @return string */ public function get_tab_view( WPSEO_Option_Tabs $option_tabs, WPSEO_Option_Tab $tab ) { return WPSEO_PATH . 'admin/views/tabs/' . $option_tabs->get_base() . '/' . $tab->get_name() . '.php'; } /** * Outputs the option tabs. * * @param WPSEO_Option_Tabs $option_tabs Option Tabs to get tabs from. * * @return void */ public function run( WPSEO_Option_Tabs $option_tabs ) { echo '<h2 class="nav-tab-wrapper" id="wpseo-tabs">'; foreach ( $option_tabs->get_tabs() as $tab ) { $label = esc_html( $tab->get_label() ); if ( $tab->is_beta() ) { $label = '<span style="margin-right:4px;">' . $label . '</span>' . new Beta_Badge_Presenter( $tab->get_name() ); } elseif ( $tab->is_premium() ) { $label = '<span style="margin-right:4px;">' . $label . '</span>' . new Premium_Badge_Presenter( $tab->get_name() ); } printf( '<a class="nav-tab" id="%1$s" href="%2$s">%3$s</a>', esc_attr( $tab->get_name() . '-tab' ), esc_url( '#top#' . $tab->get_name() ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: we do this on purpose $label ); } echo '</h2>'; foreach ( $option_tabs->get_tabs() as $tab ) { $identifier = $tab->get_name(); $class = 'wpseotab ' . ( $tab->has_save_button() ? 'save' : 'nosave' ); printf( '<div id="%1$s" class="%2$s">', esc_attr( $identifier ), esc_attr( $class ) ); $tab_filter_name = sprintf( '%s_%s', $option_tabs->get_base(), $tab->get_name() ); /** * Allows to override the content that is display on the specific option tab. * * @internal For internal Yoast SEO use only. * * @param string|null $tab_contents The content that should be displayed for this tab. Leave empty for default behaviour. * @param WPSEO_Option_Tabs $option_tabs The registered option tabs. * @param WPSEO_Option_Tab $tab The tab that is being displayed. */ $option_tab_content = apply_filters( 'wpseo_option_tab-' . $tab_filter_name, null, $option_tabs, $tab ); if ( ! empty( $option_tab_content ) ) { echo wp_kses_post( $option_tab_content ); } if ( empty( $option_tab_content ) ) { // Output the settings view for all tabs. $tab_view = $this->get_tab_view( $option_tabs, $tab ); if ( is_file( $tab_view ) ) { $yform = Yoast_Form::get_instance(); require $tab_view; } } echo '</div>'; } } } class-option-tabs.php 0000644 00000004407 15150262017 0010623 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Options\Tabs */ /** * Class WPSEO_Option_Tabs. */ class WPSEO_Option_Tabs { /** * Tabs base. * * @var string */ private $base; /** * The tabs in this group. * * @var array */ private $tabs = []; /** * Name of the active tab. * * @var string */ private $active_tab = ''; /** * WPSEO_Option_Tabs constructor. * * @codeCoverageIgnore * * @param string $base Base of the tabs. * @param string $active_tab Currently active tab. */ public function __construct( $base, $active_tab = '' ) { $this->base = sanitize_title( $base ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $tab = isset( $_GET['tab'] ) && is_string( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : ''; $this->active_tab = empty( $tab ) ? $active_tab : $tab; } /** * Get the base. * * @return string */ public function get_base() { return $this->base; } /** * Add a tab. * * @param WPSEO_Option_Tab $tab Tab to add. * * @return $this */ public function add_tab( WPSEO_Option_Tab $tab ) { $this->tabs[] = $tab; return $this; } /** * Get active tab. * * @return WPSEO_Option_Tab|null Get the active tab. */ public function get_active_tab() { if ( empty( $this->active_tab ) ) { return null; } $active_tabs = array_filter( $this->tabs, [ $this, 'is_active_tab' ] ); if ( ! empty( $active_tabs ) ) { $active_tabs = array_values( $active_tabs ); if ( count( $active_tabs ) === 1 ) { return $active_tabs[0]; } } return null; } /** * Is the tab the active tab. * * @param WPSEO_Option_Tab $tab Tab to check for active tab. * * @return bool */ public function is_active_tab( WPSEO_Option_Tab $tab ) { return ( $tab->get_name() === $this->active_tab ); } /** * Get all tabs. * * @return WPSEO_Option_Tab[] */ public function get_tabs() { return $this->tabs; } /** * Display the tabs. * * @param Yoast_Form $yform Yoast Form needed in the views. * * @return void */ public function display( Yoast_Form $yform ) { $formatter = new WPSEO_Option_Tabs_Formatter(); $formatter->run( $this, $yform ); } } class-paper-presenter.php 0000644 00000007020 15150262017 0011472 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Class WPSEO_presenter_paper. */ class WPSEO_Paper_Presenter { /** * Title of the paper. * * @var string */ private $title; /** * The view variables. * * @var array */ private $settings; /** * The path to the view file. * * @var string */ private $view_file; /** * WPSEO_presenter_paper constructor. * * @param string $title The title of the paper. * @param string|null $view_file Optional. The path to the view file. Use the content setting * if do not wish to use a view file. * @param array $settings Optional. Settings for the paper. */ public function __construct( $title, $view_file = null, array $settings = [] ) { $defaults = [ 'paper_id' => null, 'paper_id_prefix' => 'wpseo-', 'collapsible' => false, 'collapsible_header_class' => '', 'expanded' => false, 'help_text' => '', 'title_after' => '', 'class' => '', 'content' => '', 'view_data' => [], ]; $this->settings = wp_parse_args( $settings, $defaults ); $this->title = $title; $this->view_file = $view_file; } /** * Renders the collapsible paper and returns it as a string. * * @return string The rendered paper. */ public function get_output() { $view_variables = $this->get_view_variables(); extract( $view_variables, EXTR_SKIP ); $content = $this->settings['content']; if ( $this->view_file !== null ) { ob_start(); require $this->view_file; $content = ob_get_clean(); } ob_start(); require WPSEO_PATH . 'admin/views/paper-collapsible.php'; $rendered_output = ob_get_clean(); return $rendered_output; } /** * Retrieves the view variables. * * @return array The view variables. */ private function get_view_variables() { if ( $this->settings['help_text'] instanceof WPSEO_Admin_Help_Panel === false ) { $this->settings['help_text'] = new WPSEO_Admin_Help_Panel( '', '', '' ); } $view_variables = [ 'class' => $this->settings['class'], 'collapsible' => $this->settings['collapsible'], 'collapsible_config' => $this->collapsible_config(), 'collapsible_header_class' => $this->settings['collapsible_header_class'], 'title_after' => $this->settings['title_after'], 'help_text' => $this->settings['help_text'], 'view_file' => $this->view_file, 'title' => $this->title, 'paper_id' => $this->settings['paper_id'], 'paper_id_prefix' => $this->settings['paper_id_prefix'], 'yform' => Yoast_Form::get_instance(), ]; return array_merge( $this->settings['view_data'], $view_variables ); } /** * Retrieves the collapsible config based on the settings. * * @return array The config. */ protected function collapsible_config() { if ( empty( $this->settings['collapsible'] ) ) { return [ 'toggle_icon' => '', 'class' => '', 'expanded' => '', ]; } if ( ! empty( $this->settings['expanded'] ) ) { return [ 'toggle_icon' => 'dashicons-arrow-up-alt2', 'class' => 'toggleable-container', 'expanded' => 'true', ]; } return [ 'toggle_icon' => 'dashicons-arrow-down-alt2', 'class' => 'toggleable-container toggleable-container-hidden', 'expanded' => 'false', ]; } } class-plugin-availability.php 0000644 00000020467 15150262017 0012336 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Plugin_Availability */ /** * Class WPSEO_Plugin_Availability */ class WPSEO_Plugin_Availability { /** * Holds the plugins. * * @var array */ protected $plugins = []; /** * Registers the plugins so we can access them. * * @return void */ public function register() { $this->register_yoast_plugins(); $this->register_yoast_plugins_status(); } /** * Registers all the available Yoast SEO plugins. * * @return void */ protected function register_yoast_plugins() { $this->plugins = [ 'yoast-seo-premium' => [ 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y7' ), 'title' => 'Yoast SEO Premium', 'description' => sprintf( /* translators: %1$s expands to Yoast SEO */ __( 'The premium version of %1$s with more features & support.', 'wordpress-seo' ), 'Yoast SEO' ), 'installed' => false, 'slug' => 'wordpress-seo-premium/wp-seo-premium.php', 'version_sync' => true, 'premium' => true, ], 'video-seo-for-wordpress-seo-by-yoast' => [ 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y8' ), 'title' => 'Video SEO', 'description' => __( 'Optimize your videos to show them off in search results and get more clicks!', 'wordpress-seo' ), 'installed' => false, 'slug' => 'wpseo-video/video-seo.php', 'version_sync' => true, 'premium' => true, ], 'yoast-news-seo' => [ 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y9' ), 'title' => 'News SEO', 'description' => __( 'Are you in Google News? Increase your traffic from Google News by optimizing for it!', 'wordpress-seo' ), 'installed' => false, 'slug' => 'wpseo-news/wpseo-news.php', 'version_sync' => true, 'premium' => true, ], 'local-seo-for-yoast-seo' => [ 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1ya' ), 'title' => 'Local SEO', 'description' => __( 'Rank better locally and in Google Maps, without breaking a sweat!', 'wordpress-seo' ), 'installed' => false, 'slug' => 'wordpress-seo-local/local-seo.php', 'version_sync' => true, 'premium' => true, ], 'yoast-woocommerce-seo' => [ 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1o0' ), 'title' => 'Yoast WooCommerce SEO', 'description' => sprintf( /* translators: %1$s expands to Yoast SEO */ __( 'Seamlessly integrate WooCommerce with %1$s and get extra features!', 'wordpress-seo' ), 'Yoast SEO' ), '_dependencies' => [ 'WooCommerce' => [ 'slug' => 'woocommerce/woocommerce.php', ], ], 'installed' => false, 'slug' => 'wpseo-woocommerce/wpseo-woocommerce.php', 'version_sync' => true, 'premium' => true, ], ]; } /** * Sets certain plugin properties based on WordPress' status. * * @return void */ protected function register_yoast_plugins_status() { foreach ( $this->plugins as $name => $plugin ) { $plugin_slug = $plugin['slug']; $plugin_path = WP_PLUGIN_DIR . '/' . $plugin_slug; if ( file_exists( $plugin_path ) ) { $plugin_data = get_plugin_data( $plugin_path, false, false ); $this->plugins[ $name ]['installed'] = true; $this->plugins[ $name ]['version'] = $plugin_data['Version']; $this->plugins[ $name ]['active'] = is_plugin_active( $plugin_slug ); } } } /** * Checks whether or not a plugin is known within the Yoast SEO collection. * * @param string $plugin The plugin to search for. * * @return bool Whether or not the plugin is exists. */ protected function plugin_exists( $plugin ) { return isset( $this->plugins[ $plugin ] ); } /** * Gets all the possibly available plugins. * * @return array Array containing the information about the plugins. */ public function get_plugins() { return $this->plugins; } /** * Gets a specific plugin. Returns an empty array if it cannot be found. * * @param string $plugin The plugin to search for. * * @return array The plugin properties. */ public function get_plugin( $plugin ) { if ( ! $this->plugin_exists( $plugin ) ) { return []; } return $this->plugins[ $plugin ]; } /** * Gets the version of the plugin. * * @param array $plugin The information available about the plugin. * * @return string The version associated with the plugin. */ public function get_version( $plugin ) { if ( ! isset( $plugin['version'] ) ) { return ''; } return $plugin['version']; } /** * Checks if there are dependencies available for the plugin. * * @param array $plugin The information available about the plugin. * * @return bool Whether or not there is a dependency present. */ public function has_dependencies( $plugin ) { return ( isset( $plugin['_dependencies'] ) && ! empty( $plugin['_dependencies'] ) ); } /** * Gets the dependencies for the plugin. * * @param array $plugin The information available about the plugin. * * @return array Array containing all the dependencies associated with the plugin. */ public function get_dependencies( $plugin ) { if ( ! $this->has_dependencies( $plugin ) ) { return []; } return $plugin['_dependencies']; } /** * Checks if all dependencies are satisfied. * * @param array $plugin The information available about the plugin. * * @return bool Whether or not the dependencies are satisfied. */ public function dependencies_are_satisfied( $plugin ) { if ( ! $this->has_dependencies( $plugin ) ) { return true; } $dependencies = $this->get_dependencies( $plugin ); $installed_dependencies = array_filter( $dependencies, [ $this, 'is_dependency_available' ] ); return count( $installed_dependencies ) === count( $dependencies ); } /** * Checks whether or not one of the plugins is properly installed and usable. * * @param array $plugin The information available about the plugin. * * @return bool Whether or not the plugin is properly installed. */ public function is_installed( $plugin ) { if ( empty( $plugin ) ) { return false; } return $this->is_available( $plugin ); } /** * Gets all installed plugins. * * @return array The installed plugins. */ public function get_installed_plugins() { $installed = []; foreach ( $this->plugins as $plugin_key => $plugin ) { if ( $this->is_installed( $plugin ) ) { $installed[ $plugin_key ] = $plugin; } } return $installed; } /** * Checks for the availability of the plugin. * * @param array $plugin The information available about the plugin. * * @return bool Whether or not the plugin is available. */ public function is_available( $plugin ) { return isset( $plugin['installed'] ) && $plugin['installed'] === true; } /** * Checks whether a dependency is available. * * @param array $dependency The information about the dependency to look for. * * @return bool Whether or not the dependency is available. */ public function is_dependency_available( $dependency ) { return isset( get_plugins()[ $dependency['slug'] ] ); } /** * Gets the names of the dependencies. * * @param array $plugin The plugin to get the dependency names from. * * @return array Array containing the names of the associated dependencies. */ public function get_dependency_names( $plugin ) { if ( ! $this->has_dependencies( $plugin ) ) { return []; } return array_keys( $plugin['_dependencies'] ); } /** * Gets an array of plugins that have defined dependencies. * * @return array Array of the plugins that have dependencies. */ public function get_plugins_with_dependencies() { return array_filter( $this->plugins, [ $this, 'has_dependencies' ] ); } /** * Determines whether or not a plugin is active. * * @param string $plugin The plugin slug to check. * * @return bool Whether or not the plugin is active. */ public function is_active( $plugin ) { return is_plugin_active( $plugin ); } /** * Determines whether or not a plugin is a Premium product. * * @param array $plugin The plugin to check. * * @return bool Whether or not the plugin is a Premium product. */ public function is_premium( $plugin ) { return isset( $plugin['premium'] ) && $plugin['premium'] === true; } } class-plugin-conflict.php 0000644 00000010063 15150262017 0011454 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * @since 1.7.0 */ use Yoast\WP\SEO\Config\Conflicting_Plugins; /** * Contains list of conflicting plugins. */ class WPSEO_Plugin_Conflict extends Yoast_Plugin_Conflict { /** * The plugins must be grouped per section. * * It's possible to check for each section if there are conflicting plugin. * * NOTE: when changing this array, be sure to update the array in Conflicting_Plugins_Service too. * * @var array<string, array<string>> */ protected $plugins = [ // The plugin which are writing OG metadata. 'open_graph' => Conflicting_Plugins::OPEN_GRAPH_PLUGINS, 'xml_sitemaps' => Conflicting_Plugins::XML_SITEMAPS_PLUGINS, 'cloaking' => Conflicting_Plugins::CLOAKING_PLUGINS, 'seo' => Conflicting_Plugins::SEO_PLUGINS, ]; /** * Overrides instance to set with this class as class. * * @param string $class_name Optional class name. * * @return Yoast_Plugin_Conflict */ public static function get_instance( $class_name = self::class ) { return parent::get_instance( $class_name ); } /** * After activating any plugin, this method will be executed by a hook. * * If the activated plugin is conflicting with ours a notice will be shown. * * @param string|bool $plugin Optional plugin basename to check. * * @return void */ public static function hook_check_for_plugin_conflicts( $plugin = false ) { // The instance of the plugin. $instance = self::get_instance(); // Only add the plugin as an active plugin if $plugin isn't false. if ( $plugin && is_string( $plugin ) ) { $instance->add_active_plugin( $instance->find_plugin_category( $plugin ), $plugin ); } $plugin_sections = []; // Only check for open graph problems when they are enabled. if ( WPSEO_Options::get( 'opengraph' ) ) { /* translators: %1$s expands to Yoast SEO, %2$s: 'Facebook' plugin name of possibly conflicting plugin with regard to creating OpenGraph output. */ $plugin_sections['open_graph'] = __( 'Both %1$s and %2$s create Open Graph output, which might make Facebook, Twitter, LinkedIn and other social networks use the wrong texts and images when your pages are being shared.', 'wordpress-seo' ) . '<br/><br/>' . '<a class="button" href="' . admin_url( 'admin.php?page=wpseo_page_settings#/site-features#card-wpseo_social-opengraph' ) . '">' /* translators: %1$s expands to Yoast SEO. */ . sprintf( __( 'Configure %1$s\'s Open Graph settings', 'wordpress-seo' ), 'Yoast SEO' ) . '</a>'; } // Only check for XML conflicts if sitemaps are enabled. if ( WPSEO_Options::get( 'enable_xml_sitemap' ) ) { /* translators: %1$s expands to Yoast SEO, %2$s: 'Google XML Sitemaps' plugin name of possibly conflicting plugin with regard to the creation of sitemaps. */ $plugin_sections['xml_sitemaps'] = __( 'Both %1$s and %2$s can create XML sitemaps. Having two XML sitemaps is not beneficial for search engines and might slow down your site.', 'wordpress-seo' ) . '<br/><br/>' . '<a class="button" href="' . admin_url( 'admin.php?page=wpseo_page_settings#/site-features#card-wpseo-enable_xml_sitemap' ) . '">' /* translators: %1$s expands to Yoast SEO. */ . sprintf( __( 'Toggle %1$s\'s XML Sitemap', 'wordpress-seo' ), 'Yoast SEO' ) . '</a>'; } /* translators: %2$s expands to 'RS Head Cleaner' plugin name of possibly conflicting plugin with regard to differentiating output between search engines and normal users. */ $plugin_sections['cloaking'] = __( 'The plugin %2$s changes your site\'s output and in doing that differentiates between search engines and normal users, a process that\'s called cloaking. We highly recommend that you disable it.', 'wordpress-seo' ); /* translators: %1$s expands to Yoast SEO, %2$s: 'SEO' plugin name of possibly conflicting plugin with regard to the creation of duplicate SEO meta. */ $plugin_sections['seo'] = __( 'Both %1$s and %2$s manage the SEO of your site. Running two SEO plugins at the same time is detrimental.', 'wordpress-seo' ); $instance->check_plugin_conflicts( $plugin_sections ); } } class-premium-popup.php 0000644 00000005472 15150262017 0011206 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Class WPSEO_Premium_popup. */ class WPSEO_Premium_Popup { /** * An unique identifier for the popup * * @var string */ private $identifier = ''; /** * The heading level of the title of the popup. * * @var string */ private $heading_level = ''; /** * The title of the popup. * * @var string */ private $title = ''; /** * The content of the popup. * * @var string */ private $content = ''; /** * The URL for where the button should link to. * * @var string */ private $url = ''; /** * Wpseo_Premium_Popup constructor. * * @param string $identifier An unique identifier for the popup. * @param string $heading_level The heading level for the title of the popup. * @param string $title The title of the popup. * @param string $content The content of the popup. * @param string $url The URL for where the button should link to. */ public function __construct( $identifier, $heading_level, $title, $content, $url ) { $this->identifier = $identifier; $this->heading_level = $heading_level; $this->title = $title; $this->content = $content; $this->url = $url; } /** * Returns the premium popup as an HTML string. * * @param bool $popup Show this message as a popup show it straight away. * * @return string */ public function get_premium_message( $popup = true ) { // Don't show in Premium. if ( defined( 'WPSEO_PREMIUM_FILE' ) ) { return ''; } $assets_uri = trailingslashit( plugin_dir_url( WPSEO_FILE ) ); /* translators: %s expands to Yoast SEO Premium */ $cta_text = esc_html( sprintf( __( 'Get %s', 'wordpress-seo' ), 'Yoast SEO Premium' ) ); /* translators: Hidden accessibility text. */ $new_tab_message = '<span class="screen-reader-text">' . esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) . '</span>'; $caret_icon = '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>'; $classes = ''; if ( $popup ) { $classes = ' hidden'; } $micro_copy = __( '1 year free support and updates included!', 'wordpress-seo' ); $popup = <<<EO_POPUP <div id="wpseo-{$this->identifier}-popup" class="wpseo-premium-popup wp-clearfix$classes"> <img class="alignright wpseo-premium-popup-icon" src="{$assets_uri}packages/js/images/Yoast_SEO_Icon.svg" width="150" height="150" alt="Yoast SEO"/> <{$this->heading_level} id="wpseo-contact-support-popup-title" class="wpseo-premium-popup-title">{$this->title}</{$this->heading_level}> {$this->content} <a id="wpseo-{$this->identifier}-popup-button" class="yoast-button-upsell" href="{$this->url}" target="_blank"> {$cta_text} {$new_tab_message} {$caret_icon} </a><br/> <small>{$micro_copy}</small> </div> EO_POPUP; return $popup; } } class-premium-upsell-admin-block.php 0000644 00000012200 15150262017 0013510 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Promotions\Application\Promotion_Manager; /** * Class WPSEO_Premium_Upsell_Admin_Block */ class WPSEO_Premium_Upsell_Admin_Block { /** * Hook to display the block on. * * @var string */ protected $hook; /** * Identifier to use in the dismissal functionality. * * @var string */ protected $identifier = 'premium_upsell'; /** * Registers which hook the block will be displayed on. * * @param string $hook Hook to display the block on. */ public function __construct( $hook ) { $this->hook = $hook; } /** * Registers WordPress hooks. * * @return void */ public function register_hooks() { add_action( $this->hook, [ $this, 'render' ] ); } /** * Renders the upsell block. * * @return void */ public function render() { $url = WPSEO_Shortlinker::get( 'https://yoa.st/17h' ); $arguments = [ sprintf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sAI%2$s: Better SEO titles and meta descriptions, faster.', 'wordpress-seo' ), '<strong>', '</strong>' ), sprintf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sMultiple keywords%2$s: Rank higher for more searches.', 'wordpress-seo' ), '<strong>', '</strong>' ), sprintf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sSuper fast%2$s internal linking suggestions.', 'wordpress-seo' ), '<strong>', '</strong>' ), sprintf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sNo more broken links%2$s: Automatic redirect manager.', 'wordpress-seo' ), '<strong>', '</strong>' ), sprintf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$sAppealing social previews%2$s people actually want to click on.', 'wordpress-seo' ), '<strong>', '</strong>' ), sprintf( /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ esc_html__( '%1$s24/7 support%2$s: Also on evenings and weekends.', 'wordpress-seo' ), '<strong>', '</strong>' ), '<strong>' . esc_html__( 'No ads!', 'wordpress-seo' ) . '</strong>', ]; $arguments_html = implode( '', array_map( [ $this, 'get_argument_html' ], $arguments ) ); $class = $this->get_html_class(); /* translators: %s expands to Yoast SEO Premium */ $button_text = YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ? esc_html__( 'Claim your 30% off now!', 'wordpress-seo' ) : sprintf( esc_html__( 'Explore %s now!', 'wordpress-seo' ), 'Yoast SEO Premium' ); /* translators: Hidden accessibility text. */ $button_text .= '<span class="screen-reader-text">' . esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) . '</span>' . '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>'; $upgrade_button = sprintf( '<a id="%1$s" class="yoast-button-upsell" data-action="load-nfd-ctb" data-ctb-id="f6a84663-465f-4cb5-8ba5-f7a6d72224b2" href="%2$s" target="_blank">%3$s</a>', esc_attr( 'wpseo-' . $this->identifier . '-popup-button' ), esc_url( $url ), $button_text ); echo '<div class="' . esc_attr( $class ) . '">'; if ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ) { $bf_label = esc_html__( 'BLACK FRIDAY', 'wordpress-seo' ); $sale_label = esc_html__( '30% OFF', 'wordpress-seo' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Already escaped above. echo "<div class='black-friday-container'><span>$bf_label</span> <span style='margin-left: auto;'>$sale_label</span> </div>"; } echo '<div class="' . esc_attr( $class . '--container' ) . '">'; echo '<h2 class="' . esc_attr( $class . '--header' ) . '">' . sprintf( /* translators: %s expands to Yoast SEO Premium */ esc_html__( 'Upgrade to %s', 'wordpress-seo' ), 'Yoast SEO Premium' ) . '</h2>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in $this->get_argument_html() method. echo '<ul class="' . esc_attr( $class . '--motivation' ) . '">' . $arguments_html . '</ul>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in $upgrade_button and $button_text above. echo '<p>' . $upgrade_button . '</p>'; echo '</div>'; echo '</div>'; } /** * Formats the argument to a HTML list item. * * @param string $argument The argument to format. * * @return string Formatted argument in HTML. */ protected function get_argument_html( $argument ) { $class = $this->get_html_class(); return sprintf( '<li><div class="%1$s">%2$s</div></li>', esc_attr( $class . '--argument' ), $argument ); } /** * Returns the HTML base class to use. * * @return string The HTML base class. */ protected function get_html_class() { return 'yoast_' . $this->identifier; } } class-primary-term-admin.php 0000644 00000016544 15150262017 0012107 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Adds the UI to change the primary term for a post. */ class WPSEO_Primary_Term_Admin implements WPSEO_WordPress_Integration { /** * Constructor. * * @return void */ public function register_hooks() { add_filter( 'wpseo_content_meta_section_content', [ $this, 'add_input_fields' ] ); add_action( 'admin_footer', [ $this, 'wp_footer' ], 10 ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); } /** * Gets the current post ID. * * @return int The post ID. */ protected function get_current_id() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, We are casting to an integer. $post_id = isset( $_GET['post'] ) && is_string( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : 0; if ( $post_id === 0 && isset( $GLOBALS['post_ID'] ) ) { $post_id = (int) $GLOBALS['post_ID']; } return $post_id; } /** * Adds hidden fields for primary taxonomies. * * @param string $content The metabox content. * * @return string The HTML content. */ public function add_input_fields( $content ) { $taxonomies = $this->get_primary_term_taxonomies(); foreach ( $taxonomies as $taxonomy ) { $content .= $this->primary_term_field( $taxonomy->name ); $content .= wp_nonce_field( 'save-primary-term', WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_nonce', false, false ); } return $content; } /** * Generates the HTML for a hidden field for a primary taxonomy. * * @param string $taxonomy_name The taxonomy's slug. * * @return string The HTML for a hidden primary taxonomy field. */ protected function primary_term_field( $taxonomy_name ) { return sprintf( '<input class="yoast-wpseo-primary-term" type="hidden" id="%1$s" name="%2$s" value="%3$s" />', esc_attr( $this->generate_field_id( $taxonomy_name ) ), esc_attr( $this->generate_field_name( $taxonomy_name ) ), esc_attr( $this->get_primary_term( $taxonomy_name ) ) ); } /** * Generates an id for a primary taxonomy's hidden field. * * @param string $taxonomy_name The taxonomy's slug. * * @return string The field id. */ protected function generate_field_id( $taxonomy_name ) { return 'yoast-wpseo-primary-' . $taxonomy_name; } /** * Generates a name for a primary taxonomy's hidden field. * * @param string $taxonomy_name The taxonomy's slug. * * @return string The field id. */ protected function generate_field_name( $taxonomy_name ) { return WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy_name . '_term'; } /** * Adds primary term templates. * * @return void */ public function wp_footer() { $taxonomies = $this->get_primary_term_taxonomies(); if ( ! empty( $taxonomies ) ) { $this->include_js_templates(); } } /** * Enqueues all the assets needed for the primary term interface. * * @return void */ public function enqueue_assets() { global $pagenow; if ( ! WPSEO_Metabox::is_post_edit( $pagenow ) ) { return; } $taxonomies = $this->get_primary_term_taxonomies(); // Only enqueue if there are taxonomies that need a primary term. if ( empty( $taxonomies ) ) { return; } $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_style( 'primary-category' ); $mapped_taxonomies = $this->get_mapped_taxonomies_for_js( $taxonomies ); $data = [ 'taxonomies' => $mapped_taxonomies, ]; $asset_manager->localize_script( 'post-edit', 'wpseoPrimaryCategoryL10n', $data ); $asset_manager->localize_script( 'post-edit-classic', 'wpseoPrimaryCategoryL10n', $data ); } /** * Gets the id of the primary term. * * @param string $taxonomy_name Taxonomy name for the term. * * @return int primary term id */ protected function get_primary_term( $taxonomy_name ) { $primary_term = new WPSEO_Primary_Term( $taxonomy_name, $this->get_current_id() ); return $primary_term->get_primary_term(); } /** * Returns all the taxonomies for which the primary term selection is enabled. * * @param int|null $post_id Default current post ID. * @return array */ protected function get_primary_term_taxonomies( $post_id = null ) { if ( $post_id === null ) { $post_id = $this->get_current_id(); } $taxonomies = wp_cache_get( 'primary_term_taxonomies_' . $post_id, 'wpseo' ); if ( $taxonomies !== false ) { return $taxonomies; } $taxonomies = $this->generate_primary_term_taxonomies( $post_id ); wp_cache_set( 'primary_term_taxonomies_' . $post_id, $taxonomies, 'wpseo' ); return $taxonomies; } /** * Includes templates file. * * @return void */ protected function include_js_templates() { include_once WPSEO_PATH . 'admin/views/js-templates-primary-term.php'; } /** * Generates the primary term taxonomies. * * @param int $post_id ID of the post. * * @return array */ protected function generate_primary_term_taxonomies( $post_id ) { $post_type = get_post_type( $post_id ); $all_taxonomies = get_object_taxonomies( $post_type, 'objects' ); $all_taxonomies = array_filter( $all_taxonomies, [ $this, 'filter_hierarchical_taxonomies' ] ); /** * Filters which taxonomies for which the user can choose the primary term. * * @param array $taxonomies An array of taxonomy objects that are primary_term enabled. * @param string $post_type The post type for which to filter the taxonomies. * @param array $all_taxonomies All taxonomies for this post types, even ones that don't have primary term * enabled. */ $taxonomies = (array) apply_filters( 'wpseo_primary_term_taxonomies', $all_taxonomies, $post_type, $all_taxonomies ); return $taxonomies; } /** * Creates a map of taxonomies for localization. * * @param array $taxonomies The taxononmies that should be mapped. * * @return array The mapped taxonomies. */ protected function get_mapped_taxonomies_for_js( $taxonomies ) { return array_map( [ $this, 'map_taxonomies_for_js' ], $taxonomies ); } /** * Returns an array suitable for use in the javascript. * * @param stdClass $taxonomy The taxonomy to map. * * @return array The mapped taxonomy. */ private function map_taxonomies_for_js( $taxonomy ) { $primary_term = $this->get_primary_term( $taxonomy->name ); if ( empty( $primary_term ) ) { $primary_term = ''; } $terms = get_terms( [ 'taxonomy' => $taxonomy->name, 'update_term_meta_cache' => false, 'fields' => 'id=>name', ] ); $mapped_terms_for_js = []; foreach ( $terms as $id => $name ) { $mapped_terms_for_js[] = [ 'id' => $id, 'name' => $name, ]; } return [ 'title' => $taxonomy->labels->singular_name, 'name' => $taxonomy->name, 'primary' => $primary_term, 'singularLabel' => $taxonomy->labels->singular_name, 'fieldId' => $this->generate_field_id( $taxonomy->name ), 'restBase' => ( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name, 'terms' => $mapped_terms_for_js, ]; } /** * Returns whether or not a taxonomy is hierarchical. * * @param stdClass $taxonomy Taxonomy object. * * @return bool */ private function filter_hierarchical_taxonomies( $taxonomy ) { return (bool) $taxonomy->hierarchical; } } class-product-upsell-notice.php 0000644 00000013376 15150262017 0012632 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Represents the upsell notice. */ class WPSEO_Product_Upsell_Notice { /** * Holds the name of the user meta key. * * The value of this database field holds whether the user has dismissed this notice or not. * * @var string */ public const USER_META_DISMISSED = 'wpseo-remove-upsell-notice'; /** * Holds the option name. * * @var string */ public const OPTION_NAME = 'wpseo'; /** * Holds the options. * * @var array */ protected $options; /** * Sets the options, because they always have to be there on instance. */ public function __construct() { $this->options = $this->get_options(); } /** * Checks if the notice should be added or removed. * * @return void */ public function initialize() { $this->remove_notification(); } /** * Sets the upgrade notice. * * @return void */ public function set_upgrade_notice() { if ( $this->has_first_activated_on() ) { return; } $this->set_first_activated_on(); $this->add_notification(); } /** * Listener for the upsell notice. * * @return void */ public function dismiss_notice_listener() { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are validating a nonce here. if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], 'dismiss-5star-upsell' ) ) { return; } $dismiss_upsell = isset( $_GET['yoast_dismiss'] ) && is_string( $_GET['yoast_dismiss'] ) ? sanitize_text_field( wp_unslash( $_GET['yoast_dismiss'] ) ) : ''; if ( $dismiss_upsell !== 'upsell' ) { return; } $this->dismiss_notice(); if ( wp_safe_redirect( admin_url( 'admin.php?page=wpseo_dashboard' ) ) ) { exit; } } /** * When the notice should be shown. * * @return bool */ protected function should_add_notification() { return ( $this->options['first_activated_on'] < strtotime( '-2weeks' ) ); } /** * Checks if the options has a first activated on date value. * * @return bool */ protected function has_first_activated_on() { return $this->options['first_activated_on'] !== false; } /** * Sets the first activated on. * * @return void */ protected function set_first_activated_on() { $this->options['first_activated_on'] = strtotime( '-2weeks' ); $this->save_options(); } /** * Adds a notification to the notification center. * * @return void */ protected function add_notification() { $notification_center = Yoast_Notification_Center::get(); $notification_center->add_notification( $this->get_notification() ); } /** * Removes a notification to the notification center. * * @return void */ protected function remove_notification() { $notification_center = Yoast_Notification_Center::get(); $notification_center->remove_notification( $this->get_notification() ); } /** * Returns a premium upsell section if using the free plugin. * * @return string */ protected function get_premium_upsell_section() { if ( ! YoastSEO()->helpers->product->is_premium() ) { return sprintf( /* translators: %1$s expands anchor to premium plugin page, %2$s expands to </a> */ __( 'By the way, did you know we also have a %1$sPremium plugin%2$s? It offers advanced features, like a redirect manager and support for multiple keyphrases. It also comes with 24/7 personal support.', 'wordpress-seo' ), "<a href='" . WPSEO_Shortlinker::get( 'https://yoa.st/premium-notification' ) . "'>", '</a>' ); } return ''; } /** * Gets the notification value. * * @return Yoast_Notification */ protected function get_notification() { $message = sprintf( /* translators: %1$s expands to Yoast SEO, %2$s is a link start tag to the plugin page on WordPress.org, %3$s is the link closing tag. */ __( 'We\'ve noticed you\'ve been using %1$s for some time now; we hope you love it! We\'d be thrilled if you could %2$sgive us a 5 stars rating on WordPress.org%3$s!', 'wordpress-seo' ), 'Yoast SEO', '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/rate-yoast-seo' ) . '">', '</a>' ) . "\n\n"; $message .= sprintf( /* translators: %1$s is a link start tag to the bugreport guidelines on the Yoast help center, %2$s is the link closing tag. */ __( 'If you are experiencing issues, %1$splease file a bug report%2$s and we\'ll do our best to help you out.', 'wordpress-seo' ), '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/bugreport' ) . '">', '</a>' ) . "\n\n"; $message .= $this->get_premium_upsell_section() . "\n\n"; $message .= '<a class="button" href="' . wp_nonce_url( admin_url( '?page=' . WPSEO_Admin::PAGE_IDENTIFIER . '&yoast_dismiss=upsell' ), 'dismiss-5star-upsell' ) . '">' . __( 'Please don\'t show me this notification anymore', 'wordpress-seo' ) . '</a>'; $notification = new Yoast_Notification( $message, [ 'type' => Yoast_Notification::WARNING, 'id' => 'wpseo-upsell-notice', 'capabilities' => 'wpseo_manage_options', 'priority' => 0.8, ] ); return $notification; } /** * Dismisses the notice. * * @return bool */ protected function is_notice_dismissed() { return get_user_meta( get_current_user_id(), self::USER_META_DISMISSED, true ) === '1'; } /** * Dismisses the notice. * * @return void */ protected function dismiss_notice() { update_user_meta( get_current_user_id(), self::USER_META_DISMISSED, true ); } /** * Returns the set options. * * @return mixed */ protected function get_options() { return get_option( self::OPTION_NAME ); } /** * Saves the options to the database. * * @return void */ protected function save_options() { update_option( self::OPTION_NAME, $this->options ); } } class-remote-request.php 0000644 00000006203 15150262017 0011341 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * This class handles a post request being send to a given endpoint. */ class WPSEO_Remote_Request { /** * Holds the post method. * * @var string */ public const METHOD_POST = 'post'; /** * Holds the get method. * * @var string */ public const METHOD_GET = 'get'; /** * Holds the endpoint to send the request to. * * @var string */ protected $endpoint = ''; /** * Holds the arguments to use in this request. * * @var array */ protected $args = [ 'blocking' => false, 'timeout' => 2, ]; /** * Holds the response error. * * @var WP_Error|null */ protected $response_error; /** * Holds the response body. * * @var mixed */ protected $response_body; /** * Sets the endpoint and arguments. * * @param string $endpoint The endpoint to send the request to. * @param array $args The arguments to use in this request. */ public function __construct( $endpoint, array $args = [] ) { $this->endpoint = $endpoint; $this->args = wp_parse_args( $this->args, $args ); } /** * Sets the request body. * * @param mixed $body The body to set. * * @return void */ public function set_body( $body ) { $this->args['body'] = $body; } /** * Sends the data to the given endpoint. * * @param string $method The type of request to send. * * @return bool True when sending data has been successful. */ public function send( $method = self::METHOD_POST ) { switch ( $method ) { case self::METHOD_POST: $response = $this->post(); break; case self::METHOD_GET: $response = $this->get(); break; default: /* translators: %1$s expands to the request method */ $response = new WP_Error( 1, sprintf( __( 'Request method %1$s is not valid.', 'wordpress-seo' ), $method ) ); break; } return $this->process_response( $response ); } /** * Returns the value of the response error. * * @return WP_Error|null The response error. */ public function get_response_error() { return $this->response_error; } /** * Returns the response body. * * @return mixed The response body. */ public function get_response_body() { return $this->response_body; } /** * Processes the given response. * * @param mixed $response The response to process. * * @return bool True when response is valid. */ protected function process_response( $response ) { if ( $response instanceof WP_Error ) { $this->response_error = $response; return false; } $this->response_body = wp_remote_retrieve_body( $response ); return ( wp_remote_retrieve_response_code( $response ) === 200 ); } /** * Performs a post request to the specified endpoint with set arguments. * * @return WP_Error|array The response or WP_Error on failure. */ protected function post() { return wp_remote_post( $this->endpoint, $this->args ); } /** * Performs a post request to the specified endpoint with set arguments. * * @return WP_Error|array The response or WP_Error on failure. */ protected function get() { return wp_remote_get( $this->endpoint, $this->args ); } } class-schema-person-upgrade-notification.php 0000644 00000004354 15150262017 0015242 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Notifies the user to update the Search Appearance settings when the site is set to represent a Person, * but no person (name) has been chosen. */ class WPSEO_Schema_Person_Upgrade_Notification implements WPSEO_WordPress_Integration { /** * Registers all hooks to WordPress * * @return void */ public function register_hooks() { add_action( 'admin_init', [ $this, 'handle_notification' ] ); } /** * Handles if the notification should be added or removed. * * @return void */ public function handle_notification() { $company_or_person_user_id = WPSEO_Options::get( 'company_or_person_user_id', false ); if ( WPSEO_Options::get( 'company_or_person' ) === 'person' && empty( $company_or_person_user_id ) ) { $this->add_notification(); return; } $this->remove_notification(); } /** * Adds a notification to the notification center. * * @return void */ protected function add_notification() { $notification_center = Yoast_Notification_Center::get(); $notification_center->add_notification( $this->get_notification() ); } /** * Removes a notification to the notification center. * * @return void */ protected function remove_notification() { $notification_center = Yoast_Notification_Center::get(); $notification_center->remove_notification( $this->get_notification() ); } /** * Gets the notification object. * * @return Yoast_Notification */ protected function get_notification() { $message = sprintf( /* translators: %1$s is a link start tag to the Search Appearance settings, %2$s is the link closing tag. */ __( 'You have previously set your site to represent a person. We’ve improved our functionality around Schema and the Knowledge Graph, so you should go in and %1$scomplete those settings%2$s.', 'wordpress-seo' ), '<a href="' . esc_url( admin_url( 'admin.php?page=wpseo_page_settings#/site-representation' ) ) . '">', '</a>' ); $notification = new Yoast_Notification( $message, [ 'type' => Yoast_Notification::WARNING, 'id' => 'wpseo-schema-person-upgrade', 'capabilities' => 'wpseo_manage_options', 'priority' => 0.8, ] ); return $notification; } } class-suggested-plugins.php 0000644 00000010257 15150262017 0012035 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Suggested_Plugins */ /** * Class WPSEO_Suggested_Plugins */ class WPSEO_Suggested_Plugins implements WPSEO_WordPress_Integration { /** * Holds the availability checker. * * @var WPSEO_Plugin_Availability */ protected $availability_checker; /** * Holds the notification center. * * @var Yoast_Notification_Center */ protected $notification_center; /** * WPSEO_Suggested_Plugins constructor. * * @param WPSEO_Plugin_Availability $availability_checker The availability checker to use. * @param Yoast_Notification_Center $notification_center The notification center to add notifications to. */ public function __construct( WPSEO_Plugin_Availability $availability_checker, Yoast_Notification_Center $notification_center ) { $this->availability_checker = $availability_checker; $this->notification_center = $notification_center; } /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { add_action( 'admin_init', [ $this->availability_checker, 'register' ] ); add_action( 'admin_init', [ $this, 'add_notifications' ] ); } /** * Adds notifications (when necessary). * * @return void */ public function add_notifications() { $checker = $this->availability_checker; // Get all Yoast plugins that have dependencies. $plugins = $checker->get_plugins_with_dependencies(); foreach ( $plugins as $plugin_name => $plugin ) { if ( ! $checker->dependencies_are_satisfied( $plugin ) ) { continue; } $notification = $this->get_yoast_seo_suggested_plugins_notification( $plugin_name, $plugin ); if ( ! $checker->is_installed( $plugin ) ) { $this->notification_center->add_notification( $notification ); continue; } $this->notification_center->remove_notification( $notification ); } } /** * Build Yoast SEO suggested plugins notification. * * @param string $name The plugin name to use for the unique ID. * @param array $plugin The plugin to retrieve the data from. * * @return Yoast_Notification The notification containing the suggested plugin. */ protected function get_yoast_seo_suggested_plugins_notification( $name, $plugin ) { $message = $this->create_install_suggested_plugin_message( $plugin ); if ( $this->availability_checker->is_installed( $plugin ) && ! $this->availability_checker->is_active( $plugin['slug'] ) ) { $message = ''; } return new Yoast_Notification( $message, [ 'id' => 'wpseo-suggested-plugin-' . $name, 'type' => Yoast_Notification::WARNING, 'capabilities' => [ 'install_plugins' ], ] ); } /** * Creates a message to suggest the installation of a particular plugin. * * @param array $suggested_plugin The suggested plugin. * * @return string The install suggested plugin message. */ protected function create_install_suggested_plugin_message( $suggested_plugin ) { /* translators: %1$s expands to an opening strong tag, %2$s expands to the dependency name, %3$s expands to a closing strong tag, %4$s expands to an opening anchor tag, %5$s expands to a closing anchor tag. */ $message = __( 'It looks like you aren\'t using our %1$s%2$s addon%3$s. %4$sUpgrade today%5$s to unlock more tools and SEO features to make your products stand out in search results.', 'wordpress-seo' ); $install_link = WPSEO_Admin_Utils::get_install_link( $suggested_plugin ); return sprintf( $message, '<strong>', $install_link, '</strong>', $this->create_more_information_link( $suggested_plugin['url'], $suggested_plugin['title'] ), '</a>' ); } /** * Creates a more information link that directs the user to WordPress.org Plugin repository. * * @param string $url The URL to the plugin's page. * @param string $name The name of the plugin. * * @return string The more information link. */ protected function create_more_information_link( $url, $name ) { return sprintf( '<a href="%s" aria-label="%s" target="_blank" rel="noopener noreferrer">', $url, /* translators: Hidden accessibility text; %1$s expands to the dependency name */ sprintf( __( 'More information about %1$s', 'wordpress-seo' ), $name ) ); } } class-wincher-dashboard-widget.php 0000644 00000007037 15150262017 0013233 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Wincher dashboard widget. */ class Wincher_Dashboard_Widget implements WPSEO_WordPress_Integration { /** * Holds an instance of the admin asset manager. * * @var WPSEO_Admin_Asset_Manager */ protected $asset_manager; /** * Wincher_Dashboard_Widget constructor. */ public function __construct() { $this->asset_manager = new WPSEO_Admin_Asset_Manager(); } /** * Register WordPress hooks. * * @return void */ public function register_hooks() { add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_wincher_dashboard_assets' ] ); add_action( 'admin_init', [ $this, 'queue_wincher_dashboard_widget' ] ); } /** * Adds the Wincher dashboard widget if it should be shown. * * @return void */ public function queue_wincher_dashboard_widget() { if ( $this->show_widget() ) { add_action( 'wp_dashboard_setup', [ $this, 'add_wincher_dashboard_widget' ] ); } } /** * Adds the Wincher dashboard widget to WordPress. * * @return void */ public function add_wincher_dashboard_widget() { add_filter( 'postbox_classes_dashboard_wpseo-wincher-dashboard-overview', [ $this, 'wpseo_wincher_dashboard_overview_class' ] ); wp_add_dashboard_widget( 'wpseo-wincher-dashboard-overview', /* translators: %1$s expands to Yoast SEO, %2$s to Wincher */ sprintf( __( '%1$s / %2$s: Top Keyphrases', 'wordpress-seo' ), 'Yoast SEO', 'Wincher' ), [ $this, 'display_wincher_dashboard_widget' ] ); } /** * Adds CSS classes to the dashboard widget. * * @param array $classes An array of postbox CSS classes. * * @return array */ public function wpseo_wincher_dashboard_overview_class( $classes ) { $classes[] = 'yoast wpseo-wincherdashboard-overview'; return $classes; } /** * Displays the Wincher dashboard widget. * * @return void */ public function display_wincher_dashboard_widget() { echo '<div id="yoast-seo-wincher-dashboard-widget"></div>'; } /** * Enqueues assets for the dashboard if the current page is the dashboard. * * @return void */ public function enqueue_wincher_dashboard_assets() { if ( ! $this->is_dashboard_screen() ) { return; } $this->asset_manager->localize_script( 'wincher-dashboard-widget', 'wpseoWincherDashboardWidgetL10n', $this->localize_wincher_dashboard_script() ); $this->asset_manager->enqueue_script( 'wincher-dashboard-widget' ); $this->asset_manager->enqueue_style( 'wp-dashboard' ); $this->asset_manager->enqueue_style( 'monorepo' ); } /** * Translates strings used in the Wincher dashboard widget. * * @return array The translated strings. */ public function localize_wincher_dashboard_script() { return [ 'wincher_is_logged_in' => YoastSEO()->helpers->wincher->login_status(), 'wincher_website_id' => WPSEO_Options::get( 'wincher_website_id', '' ), ]; } /** * Checks if the current screen is the dashboard screen. * * @return bool Whether or not this is the dashboard screen. */ private function is_dashboard_screen() { $current_screen = get_current_screen(); return ( $current_screen instanceof WP_Screen && $current_screen->id === 'dashboard' ); } /** * Returns true when the Wincher dashboard widget should be shown. * * @return bool */ private function show_widget() { $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); $user_can_edit = $analysis_seo->is_enabled() && current_user_can( 'edit_posts' ); $is_wincher_active = YoastSEO()->helpers->wincher->is_active(); return $user_can_edit && $is_wincher_active; } } class-yoast-columns.php 0000644 00000007022 15150262017 0011175 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Represents the yoast columns. */ class WPSEO_Yoast_Columns implements WPSEO_WordPress_Integration { /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { add_action( 'load-edit.php', [ $this, 'add_help_tab' ] ); } /** * Adds the help tab to the help center for current screen. * * @return void */ public function add_help_tab() { $link_columns_present = $this->display_links(); $meta_columns_present = $this->display_meta_columns(); if ( ! ( $link_columns_present || $meta_columns_present ) ) { return; } $help_tab_content = sprintf( /* translators: %1$s: Yoast SEO */ __( '%1$s adds several columns to this page.', 'wordpress-seo' ), 'Yoast SEO' ); if ( $meta_columns_present ) { $help_tab_content .= ' ' . sprintf( /* translators: %1$s: Link to article about content analysis, %2$s: Anchor closing */ __( 'We\'ve written an article about %1$show to use the SEO score and Readability score%2$s.', 'wordpress-seo' ), '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/16p' ) . '">', '</a>' ); } if ( $link_columns_present ) { $help_tab_content .= ' ' . sprintf( /* translators: %1$s: Link to article about text links, %2$s: Anchor closing tag, %3$s: Emphasis open tag, %4$s: Emphasis close tag */ __( 'The links columns show the number of articles on this site linking %3$sto%4$s this article and the number of URLs linked %3$sfrom%4$s this article. Learn more about %1$show to use these features to improve your internal linking%2$s, which greatly enhances your SEO.', 'wordpress-seo' ), '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/16p' ) . '">', '</a>', '<em>', '</em>' ); } $screen = get_current_screen(); $screen->add_help_tab( [ /* translators: %s expands to Yoast */ 'title' => sprintf( __( '%s Columns', 'wordpress-seo' ), 'Yoast' ), 'id' => 'yst-columns', 'content' => '<p>' . $help_tab_content . '</p>', 'priority' => 15, ] ); } /** * Retrieves the post type from the $_GET variable. * * @return string The current post type. */ private function get_current_post_type() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['post_type'] ) && is_string( $_GET['post_type'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. return sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); } return ''; } /** * Whether we are showing link columns on this overview page. * This depends on the post being accessible or not. * * @return bool Whether the linking columns are shown */ private function display_links() { $current_post_type = $this->get_current_post_type(); if ( empty( $current_post_type ) ) { return false; } return WPSEO_Post_Type::is_post_type_accessible( $current_post_type ); } /** * Wraps the WPSEO_Metabox check to determine whether the metabox should be displayed either by * choice of the admin or because the post type is not a public post type. * * @return bool Whether the meta box (and associated columns etc) should be hidden. */ private function display_meta_columns() { $current_post_type = $this->get_current_post_type(); if ( empty( $current_post_type ) ) { return false; } return WPSEO_Utils::is_metabox_active( $current_post_type, 'post_type' ); } } class-yoast-dashboard-widget.php 0000644 00000007727 15150262017 0012741 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Class to change or add WordPress dashboard widgets. */ class Yoast_Dashboard_Widget implements WPSEO_WordPress_Integration { /** * Holds the cache transient key. * * @var string */ public const CACHE_TRANSIENT_KEY = 'wpseo-dashboard-totals'; /** * Holds an instance of the admin asset manager. * * @var WPSEO_Admin_Asset_Manager */ protected $asset_manager; /** * Holds the dashboard statistics. * * @var WPSEO_Statistics */ protected $statistics; /** * Yoast_Dashboard_Widget constructor. * * @param WPSEO_Statistics|null $statistics WPSEO_Statistics instance. */ public function __construct( ?WPSEO_Statistics $statistics = null ) { if ( $statistics === null ) { $statistics = new WPSEO_Statistics(); } $this->statistics = $statistics; $this->asset_manager = new WPSEO_Admin_Asset_Manager(); } /** * Register WordPress hooks. * * @return void */ public function register_hooks() { add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_dashboard_assets' ] ); add_action( 'admin_init', [ $this, 'queue_dashboard_widget' ] ); } /** * Adds the dashboard widget if it should be shown. * * @return void */ public function queue_dashboard_widget() { if ( $this->show_widget() ) { add_action( 'wp_dashboard_setup', [ $this, 'add_dashboard_widget' ] ); } } /** * Adds dashboard widget to WordPress. * * @return void */ public function add_dashboard_widget() { add_filter( 'postbox_classes_dashboard_wpseo-dashboard-overview', [ $this, 'wpseo_dashboard_overview_class' ] ); wp_add_dashboard_widget( 'wpseo-dashboard-overview', /* translators: %s is the plugin name */ sprintf( __( '%s Posts Overview', 'wordpress-seo' ), 'Yoast SEO' ), [ $this, 'display_dashboard_widget' ] ); } /** * Adds CSS classes to the dashboard widget. * * @param array $classes An array of postbox CSS classes. * * @return array */ public function wpseo_dashboard_overview_class( $classes ) { $classes[] = 'yoast wpseo-dashboard-overview'; return $classes; } /** * Displays the dashboard widget. * * @return void */ public function display_dashboard_widget() { echo '<div id="yoast-seo-dashboard-widget"></div>'; } /** * Enqueues assets for the dashboard if the current page is the dashboard. * * @return void */ public function enqueue_dashboard_assets() { if ( ! $this->is_dashboard_screen() ) { return; } $this->asset_manager->localize_script( 'dashboard-widget', 'wpseoDashboardWidgetL10n', $this->localize_dashboard_script() ); $this->asset_manager->enqueue_script( 'dashboard-widget' ); $this->asset_manager->enqueue_style( 'wp-dashboard' ); $this->asset_manager->enqueue_style( 'monorepo' ); } /** * Translates strings used in the dashboard widget. * * @return array The translated strings. */ public function localize_dashboard_script() { return [ 'feed_header' => sprintf( /* translators: %1$s resolves to Yoast.com */ __( 'Latest blog posts on %1$s', 'wordpress-seo' ), 'Yoast.com' ), 'feed_footer' => __( 'Read more like this on our SEO blog', 'wordpress-seo' ), 'wp_version' => substr( $GLOBALS['wp_version'], 0, 3 ) . '-' . ( is_plugin_active( 'classic-editor/classic-editor.php' ) ? '1' : '0' ), 'php_version' => PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION, ]; } /** * Checks if the current screen is the dashboard screen. * * @return bool Whether or not this is the dashboard screen. */ private function is_dashboard_screen() { $current_screen = get_current_screen(); return ( $current_screen instanceof WP_Screen && $current_screen->id === 'dashboard' ); } /** * Returns true when the dashboard widget should be shown. * * @return bool */ private function show_widget() { $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); return $analysis_seo->is_enabled() && current_user_can( 'edit_posts' ); } } class-yoast-form.php 0000644 00000111326 15150262017 0010463 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ use Yoast\WP\SEO\Presenters\Admin\Light_Switch_Presenter; use Yoast\WP\SEO\Presenters\Admin\Sidebar_Presenter; /** * Admin form class. * * @since 2.0 */ class Yoast_Form { /** * Instance of this class * * @var Yoast_Form * @since 2.0 */ public static $instance; /** * The short name of the option to use for the current page. * * @var string * @since 2.0 */ public $option_name; /** * Option instance. * * @since 8.4 * @var WPSEO_Option|null */ protected $option_instance = null; /** * Get the singleton instance of this class. * * @since 2.0 * * @return Yoast_Form */ public static function get_instance() { if ( ! ( self::$instance instanceof self ) ) { self::$instance = new self(); } return self::$instance; } /** * Generates the header for admin pages. * * @since 2.0 * * @param bool $form Whether or not the form start tag should be included. * @param string $option The short name of the option to use for the current page. * @param bool $contains_files Whether the form should allow for file uploads. * @param bool $option_long_name Group name of the option. * * @return void */ public function admin_header( $form = true, $option = 'wpseo', $contains_files = false, $option_long_name = false ) { if ( ! $option_long_name ) { $option_long_name = WPSEO_Options::get_group_name( $option ); } ?> <div class="wrap yoast wpseo-admin-page <?php echo esc_attr( 'page-' . $option ); ?>"> <?php /** * Display the updated/error messages. * Only needed as our settings page is not under options, otherwise it will automatically be included. * * @see settings_errors() */ require_once ABSPATH . 'wp-admin/options-head.php'; ?> <h1 id="wpseo-title"><?php echo esc_html( get_admin_page_title() ); ?></h1> <div id="yst-settings-header-root"></div> <div class="wpseo_content_wrapper"> <div class="wpseo_content_cell" id="wpseo_content_top"> <?php if ( $form === true ) { $enctype = ( $contains_files ) ? ' enctype="multipart/form-data"' : ''; $network_admin = new Yoast_Network_Admin(); if ( $network_admin->meets_requirements() ) { $action_url = network_admin_url( 'settings.php' ); $hidden_fields_cb = [ $network_admin, 'settings_fields' ]; } else { $action_url = admin_url( 'options.php' ); $hidden_fields_cb = 'settings_fields'; } echo '<form action="' . esc_url( $action_url ) . '" method="post" id="wpseo-conf"' . $enctype . ' accept-charset="' // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- nothing to escape. . esc_attr( get_bloginfo( 'charset' ) ) . '" novalidate="novalidate">'; call_user_func( $hidden_fields_cb, $option_long_name ); } $this->set_option( $option ); } /** * Set the option used in output for form elements. * * @since 2.0 * * @param string $option_name Option key. * * @return void */ public function set_option( $option_name ) { $this->option_name = $option_name; $this->option_instance = WPSEO_Options::get_option_instance( $option_name ); if ( ! $this->option_instance ) { $this->option_instance = null; } } /** * Generates the footer for admin pages. * * @since 2.0 * * @param bool $submit Whether or not a submit button and form end tag should be shown. * @param bool $show_sidebar Whether or not to show the banner sidebar - used by premium plugins to disable it. * * @return void */ public function admin_footer( $submit = true, $show_sidebar = true ) { if ( $submit ) { $settings_changed_listener = new WPSEO_Admin_Settings_Changed_Listener(); echo '<div id="wpseo-submit-container">'; echo '<div id="wpseo-submit-container-float" class="wpseo-admin-submit">'; submit_button( __( 'Save changes', 'wordpress-seo' ) ); $settings_changed_listener->show_success_message(); echo '</div>'; echo '<div id="wpseo-submit-container-fixed" class="wpseo-admin-submit wpseo-admin-submit-fixed" style="display: none;">'; submit_button( __( 'Save changes', 'wordpress-seo' ) ); $settings_changed_listener->show_success_message(); echo '</div>'; echo '</div>'; echo ' </form>'; } /** * Apply general admin_footer hooks. */ do_action( 'wpseo_admin_footer', $this ); /** * Run possibly set actions to add for example an i18n box. */ do_action( 'wpseo_admin_promo_footer' ); echo ' </div><!-- end of div wpseo_content_top -->'; if ( $show_sidebar ) { $this->admin_sidebar(); } echo '</div><!-- end of div wpseo_content_wrapper -->'; do_action( 'wpseo_admin_below_content', $this ); echo ' </div><!-- end of wrap -->'; } /** * Generates the sidebar for admin pages. * * @since 2.0 * * @return void */ public function admin_sidebar() { // No banners in Premium. $addon_manager = new WPSEO_Addon_Manager(); if ( YoastSEO()->helpers->product->is_premium() && $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ) ) { return; } $sidebar_presenter = new Sidebar_Presenter(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in presenter. echo $sidebar_presenter->present(); } /** * Output a label element. * * @since 2.0 * * @param string $text Label text string, which can contain escaped html. * @param array $attr HTML attributes set. * * @return void */ public function label( $text, $attr ) { $defaults = [ 'class' => 'checkbox', 'close' => true, 'for' => '', 'aria_label' => '', ]; $attr = wp_parse_args( $attr, $defaults ); $aria_label = ''; if ( $attr['aria_label'] !== '' ) { $aria_label = ' aria-label="' . esc_attr( $attr['aria_label'] ) . '"'; } // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. Specifically, the $text variable can contain escaped html. echo "<label class='" . esc_attr( $attr['class'] ) . "' for='" . esc_attr( $attr['for'] ) . "'$aria_label>$text"; if ( $attr['close'] ) { echo '</label>'; } } /** * Output a legend element. * * @since 3.4 * * @param string $text Legend text string. * @param array $attr HTML attributes set. * * @return void */ public function legend( $text, $attr ) { $defaults = [ 'id' => '', 'class' => '', ]; $attr = wp_parse_args( $attr, $defaults ); $id = ( $attr['id'] === '' ) ? '' : ' id="' . esc_attr( $attr['id'] ) . '"'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. echo '<legend class="' . esc_attr( 'yoast-form-legend ' . $attr['class'] ) . '"' . $id . '>' . $text . '</legend>'; } /** * Create a Checkbox input field. * * @since 2.0 * * @param string $variable The variable within the option to create the checkbox for. * @param string $label The label to show for the variable. * @param bool $label_left Whether the label should be left (true) or right (false). * @param array $attr Extra attributes to add to the checkbox. * * @return void */ public function checkbox( $variable, $label, $label_left = false, $attr = [] ) { $val = $this->get_field_value( $variable, false ); $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); if ( $val === true ) { $val = 'on'; } $class = ''; if ( $label_left !== false ) { $this->label( $label_left, [ 'for' => $variable ] ); } else { $class = 'double'; } $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. echo '<input class="', esc_attr( 'checkbox ' . $class ), '" type="checkbox" id="', esc_attr( $variable ), '" name="', esc_attr( $this->option_name . '[' . $variable . ']' ), '" value="on"', checked( $val, 'on', false ), $disabled_attribute, '/>'; if ( ! empty( $label ) ) { $this->label( $label, [ 'for' => $variable ] ); } echo '<br class="clear" />'; } /** * Creates a Checkbox input field list. * * @since 12.8 * * @param string $variable The variables within the option to create the checkbox list for. * @param string $labels The labels to show for the variable. * @param array $attr Extra attributes to add to the checkbox list. * * @return void */ public function checkbox_list( $variable, $labels, $attr = [] ) { $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); $values = $this->get_field_value( $variable, [] ); foreach ( $labels as $name => $label ) { printf( '<input class="checkbox double" id="%1$s" type="checkbox" name="%2$s" %3$s %5$s value="%4$s"/>', esc_attr( $variable . '-' . $name ), esc_attr( $this->option_name . '[' . $variable . '][' . $name . ']' ), checked( ! empty( $values[ $name ] ), true, false ), esc_attr( $name ), disabled( ( isset( $attr['disabled'] ) && $attr['disabled'] ), true, false ) ); printf( '<label class="checkbox" for="%1$s">%2$s</label>', esc_attr( $variable . '-' . $name ), // #1 esc_html( $label ) ); echo '<br class="clear">'; } } /** * Create a light switch input field using a single checkbox. * * @since 3.1 * * @param string $variable The variable within the option to create the checkbox for. * @param string $label The visual label text for the toggle. * @param array $buttons Array of two visual labels for the buttons (defaults Disabled/Enabled). * @param bool $reverse Reverse order of buttons (default true). * @param string $help Inline Help that will be printed out before the toggle. * @param bool $strong Whether the visual label is displayed in strong text. Default is false. * Starting from Yoast SEO 16.5, the visual label is forced to bold via CSS. * @param array $attr Extra attributes to add to the light switch. * * @return void */ public function light_switch( $variable, $label, $buttons = [], $reverse = true, $help = '', $strong = false, $attr = [] ) { $val = $this->get_field_value( $variable, false ); $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); if ( $val === true ) { $val = 'on'; } $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); $output = new Light_Switch_Presenter( $variable, $label, $buttons, $this->option_name . '[' . $variable . ']', $val, $reverse, $help, $strong, $disabled_attribute ); // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: All output is properly escaped or hardcoded in the presenter. echo $output; } /** * Create a Text input field. * * @since 2.0 * @since 2.1 Introduced the `$attr` parameter. * * @param string $variable The variable within the option to create the text input field for. * @param string $label The label to show for the variable. * @param array|string $attr Extra attributes to add to the input field. Can be class, disabled, autocomplete. * * @return void */ public function textinput( $variable, $label, $attr = [] ) { $type = 'text'; if ( ! is_array( $attr ) ) { $attr = [ 'class' => $attr, 'disabled' => false, ]; } $defaults = [ 'placeholder' => '', 'class' => '', ]; $attr = wp_parse_args( $attr, $defaults ); $val = $this->get_field_value( $variable, '' ); if ( isset( $attr['type'] ) && $attr['type'] === 'url' ) { $val = urldecode( $val ); $type = 'url'; } $attributes = isset( $attr['autocomplete'] ) ? ' autocomplete="' . esc_attr( $attr['autocomplete'] ) . '"' : ''; $this->label( $label, [ 'for' => $variable, 'class' => 'textinput', ] ); $aria_attributes = Yoast_Input_Validation::get_the_aria_invalid_attribute( $variable ); Yoast_Input_Validation::set_error_descriptions(); $aria_attributes .= Yoast_Input_Validation::get_the_aria_describedby_attribute( $variable ); $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. echo '<input', $attributes, $aria_attributes, ' class="', esc_attr( 'textinput ' . $attr['class'] ), '" placeholder="', esc_attr( $attr['placeholder'] ), '" type="', $type, '" id="', esc_attr( $variable ), '" name="', esc_attr( $this->option_name . '[' . $variable . ']' ), '" value="', esc_attr( $val ), '"', $disabled_attribute, '/>', '<br class="clear" />'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in getter. echo Yoast_Input_Validation::get_the_error_description( $variable ); } /** * Create a Number input field. * * @param string $variable The variable within the option to create the text input field for. * @param string $label The label to show for the variable. * @param array|string $attr Extra attributes to add to the input field. Can be class, disabled, autocomplete. * * @return void */ public function number( $variable, $label, $attr = [] ) { $type = 'number'; $defaults = [ 'placeholder' => '', 'class' => 'number', 'disabled' => false, 'min' => 0, 'max' => 100, ]; $attr = wp_parse_args( $attr, $defaults ); $val = $this->get_field_value( $variable, 0 ); $this->label( $label, [ 'for' => $variable, 'class' => 'textinput ' . $attr['class'], ] ); $aria_attributes = Yoast_Input_Validation::get_the_aria_invalid_attribute( $variable ); Yoast_Input_Validation::set_error_descriptions(); $aria_attributes .= Yoast_Input_Validation::get_the_aria_describedby_attribute( $variable ); $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. echo '<input' . $aria_attributes . ' class="' . esc_attr( $attr['class'] ) . '" type="' . $type . '" id="', esc_attr( $variable ), '" min="', esc_attr( $attr['min'] ), '" max="', esc_attr( $attr['max'] ), '" name="', esc_attr( $this->option_name . '[' . $variable . ']' ), '" value="', esc_attr( $val ), '"', $disabled_attribute, '/>', '<br class="clear" />'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in getter. echo Yoast_Input_Validation::get_the_error_description( $variable ); } /** * Creates a text input field with with the ability to add content after the label. * * @param string $variable The variable within the option to create the text input field for. * @param string $label The label to show for the variable. * @param array $attr Extra attributes to add to the input field. * * @return void */ public function textinput_extra_content( $variable, $label, $attr = [] ) { $type = 'text'; $defaults = [ 'class' => 'yoast-field-group__inputfield', 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); $val = $this->get_field_value( $variable, '' ); if ( isset( $attr['type'] ) && $attr['type'] === 'url' ) { $val = urldecode( $val ); $type = 'url'; } echo '<div class="yoast-field-group__title">'; $this->label( $label, [ 'for' => $variable, 'class' => $attr['class'] . '--label', ] ); if ( isset( $attr['extra_content'] ) ) { // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: may contain HTML that should not be escaped. echo $attr['extra_content']; } echo '</div>'; $has_input_error = Yoast_Input_Validation::yoast_form_control_has_error( $variable ); $aria_attributes = Yoast_Input_Validation::get_the_aria_invalid_attribute( $variable ); Yoast_Input_Validation::set_error_descriptions(); $aria_attributes .= Yoast_Input_Validation::get_the_aria_describedby_attribute( $variable ); // phpcs:disable WordPress.Security.EscapeOutput -- Reason: output is properly escaped or hardcoded. printf( '<input type="%1$s" name="%2$s" id="%3$s" class="%4$s"%5$s%6$s%7$s value="%8$s"%9$s>', $type, esc_attr( $this->option_name . '[' . $variable . ']' ), esc_attr( $variable ), esc_attr( $attr['class'] ), isset( $attr['placeholder'] ) ? ' placeholder="' . esc_attr( $attr['placeholder'] ) . '"' : '', isset( $attr['autocomplete'] ) ? ' autocomplete="' . esc_attr( $attr['autocomplete'] ) . '"' : '', $aria_attributes, esc_attr( $val ), $this->get_disabled_attribute( $variable, $attr ) ); // phpcs:enable // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: output is properly escaped. echo Yoast_Input_Validation::get_the_error_description( $variable ); } /** * Create a textarea. * * @since 2.0 * * @param string $variable The variable within the option to create the textarea for. * @param string $label The label to show for the variable. * @param string|array $attr The CSS class or an array of attributes to assign to the textarea. * * @return void */ public function textarea( $variable, $label, $attr = [] ) { if ( ! is_array( $attr ) ) { $attr = [ 'class' => $attr, ]; } $defaults = [ 'cols' => '', 'rows' => '', 'class' => '', 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); $val = $this->get_field_value( $variable, '' ); $this->label( $label, [ 'for' => $variable, 'class' => 'textinput', ] ); $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. echo '<textarea cols="' . esc_attr( $attr['cols'] ) . '" rows="' . esc_attr( $attr['rows'] ) . '" class="' . esc_attr( 'textinput ' . $attr['class'] ) . '" id="' . esc_attr( $variable ) . '" name="' . esc_attr( $this->option_name . '[' . $variable . ']' ), '"', $disabled_attribute, '>' . esc_textarea( $val ) . '</textarea><br class="clear" />'; } /** * Create a hidden input field. * * @since 2.0 * * @param string $variable The variable within the option to create the hidden input for. * @param string $id The ID of the element. * @param mixed $val Optional. The value to set in the input field. Otherwise the value from the options will be used. * * @return void */ public function hidden( $variable, $id = '', $val = null ) { if ( is_null( $val ) ) { $val = $this->get_field_value( $variable, '' ); } if ( is_bool( $val ) ) { $val = ( $val === true ) ? 'true' : 'false'; } if ( $id === '' ) { $id = 'hidden_' . $variable; } echo '<input type="hidden" id="' . esc_attr( $id ) . '" name="' . esc_attr( $this->option_name . '[' . $variable . ']' ), '" value="' . esc_attr( $val ) . '"/>'; } /** * Create a Select Box. * * @since 2.0 * * @param string $variable The variable within the option to create the select for. * @param string $label The label to show for the variable. * @param array $select_options The select options to choose from. * @param string $styled The select style. Use 'styled' to get a styled select. Default 'unstyled'. * @param bool $show_label Whether or not to show the label, if not, it will be applied as an aria-label. * @param array $attr Extra attributes to add to the select. * @param string $help Optional. Inline Help HTML that will be printed after the label. Default is empty. * * @return void */ public function select( $variable, $label, array $select_options, $styled = 'unstyled', $show_label = true, $attr = [], $help = '' ) { if ( empty( $select_options ) ) { return; } $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); if ( $show_label ) { $this->label( $label, [ 'for' => $variable, 'class' => 'select', ] ); echo $help; // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: The help contains HTML. } $select_name = esc_attr( $this->option_name ) . '[' . esc_attr( $variable ) . ']'; $active_option = $this->get_field_value( $variable, '' ); $wrapper_start_tag = ''; $wrapper_end_tag = ''; $select = new Yoast_Input_Select( $variable, $select_name, $select_options, $active_option ); $select->add_attribute( 'class', 'select' ); if ( $this->is_control_disabled( $variable ) || ( isset( $attr['disabled'] ) && $attr['disabled'] ) ) { $select->add_attribute( 'disabled', 'disabled' ); } if ( ! $show_label ) { $select->add_attribute( 'aria-label', $label ); } if ( $styled === 'styled' ) { $wrapper_start_tag = '<span class="yoast-styled-select">'; $wrapper_end_tag = '</span>'; } // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. echo $wrapper_start_tag; $select->output_html(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. echo $wrapper_end_tag; echo '<br class="clear"/>'; } /** * Create a File upload field. * * @since 2.0 * * @param string $variable The variable within the option to create the file upload field for. * @param string $label The label to show for the variable. * @param array $attr Extra attributes to add to the file upload input. * * @return void */ public function file_upload( $variable, $label, $attr = [] ) { $val = $this->get_field_value( $variable, '' ); if ( is_array( $val ) ) { $val = $val['url']; } $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); $var_esc = esc_attr( $variable ); $this->label( $label, [ 'for' => $variable, 'class' => 'select', ] ); $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. echo '<input type="file" value="' . esc_attr( $val ) . '" class="textinput" name="' . esc_attr( $this->option_name ) . '[' . $var_esc . ']" id="' . $var_esc . '"', $disabled_attribute, '/>'; // Need to save separate array items in hidden inputs, because empty file inputs type will be deleted by settings API. if ( ! empty( $val ) ) { $this->hidden( 'file', $this->option_name . '_file' ); $this->hidden( 'url', $this->option_name . '_url' ); $this->hidden( 'type', $this->option_name . '_type' ); } echo '<br class="clear"/>'; } /** * Media input. * * @since 2.0 * * @param string $variable Option name. * @param string $label Label message. * @param array $attr Extra attributes to add to the media input and buttons. * * @return void */ public function media_input( $variable, $label, $attr = [] ) { $val = $this->get_field_value( $variable, '' ); $id_value = $this->get_field_value( $variable . '_id', '' ); $var_esc = esc_attr( $variable ); $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); $this->label( $label, [ 'for' => 'wpseo_' . $variable, 'class' => 'select', ] ); $id_field_id = 'wpseo_' . $var_esc . '_id'; $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); echo '<span>'; echo '<input', ' class="textinput"', ' id="wpseo_', $var_esc, '"', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. ' type="text" size="36"', ' name="', esc_attr( $this->option_name ), '[', $var_esc, ']"', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. ' value="', esc_attr( $val ), '"', ' readonly="readonly"', ' /> '; echo '<input', ' id="wpseo_', $var_esc, '_button"', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. ' class="wpseo_image_upload_button button"', ' type="button"', ' value="', esc_attr__( 'Upload Image', 'wordpress-seo' ), '"', ' data-target-id="', esc_attr( $id_field_id ), '"', // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded. $disabled_attribute, ' /> '; echo '<input', ' class="wpseo_image_remove_button button"', ' type="button"', ' value="', esc_attr__( 'Clear Image', 'wordpress-seo' ), '"', // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded. $disabled_attribute, ' />'; echo '<input', ' type="hidden"', ' id="', esc_attr( $id_field_id ), '"', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. ' name="', esc_attr( $this->option_name ), '[', $var_esc, '_id]"', ' value="', esc_attr( $id_value ), '"', ' />'; echo '</span>'; echo '<br class="clear"/>'; } /** * Create a Radio input field. * * @since 2.0 * * @param string $variable The variable within the option to create the radio button for. * @param array $values The radio options to choose from. * @param string $legend Optional. The legend to show for the field set, if any. * @param array $legend_attr Optional. The attributes for the legend, if any. * @param array $attr Extra attributes to add to the radio button. * * @return void */ public function radio( $variable, $values, $legend = '', $legend_attr = [], $attr = [] ) { if ( ! is_array( $values ) || $values === [] ) { return; } $val = $this->get_field_value( $variable, false ); $var_esc = esc_attr( $variable ); $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. echo '<fieldset class="yoast-form-fieldset wpseo_radio_block" id="' . $var_esc . '">'; if ( is_string( $legend ) && $legend !== '' ) { $legend_defaults = [ 'id' => '', 'class' => 'radiogroup', ]; $legend_attr = wp_parse_args( $legend_attr, $legend_defaults ); $this->legend( $legend, $legend_attr ); } foreach ( $values as $key => $value ) { $label = $value; $aria_label = ''; if ( is_array( $value ) ) { $label = ( $value['label'] ?? '' ); $aria_label = ( $value['aria_label'] ?? '' ); } $key_esc = esc_attr( $key ); $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. echo '<input type="radio" class="radio" id="' . $var_esc . '-' . $key_esc . '" name="' . esc_attr( $this->option_name ) . '[' . $var_esc . ']" value="' . $key_esc . '" ' . checked( $val, $key_esc, false ) . $disabled_attribute . ' />'; $this->label( $label, [ 'for' => $var_esc . '-' . $key_esc, 'class' => 'radio', 'aria_label' => $aria_label, ] ); } echo '</fieldset>'; } /** * Create a toggle switch input field using two radio buttons. * * @since 3.1 * * @param string $variable The variable within the option to create the radio buttons for. * @param array $values Associative array of on/off keys and their values to be used as * the label elements text for the radio buttons. Optionally, each * value can be an array of visible label text and screen reader text. * @param string $label The visual label for the radio buttons group, used as the fieldset legend. * @param string $help Inline Help that will be printed out before the visible toggles text. * @param array $attr Extra attributes to add to the toggle switch. * * @return void */ public function toggle_switch( $variable, $values, $label, $help = '', $attr = [] ) { if ( ! is_array( $values ) || $values === [] ) { return; } $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); if ( isset( $attr['preserve_disabled_value'] ) && $attr['preserve_disabled_value'] ) { $this->hidden( $variable ); $variable .= '_disabled'; } $val = $this->get_field_value( $variable, false ); if ( $val === true ) { $val = 'on'; } if ( $val === false ) { $val = 'off'; } $help_class = ! empty( $help ) ? ' switch-container__has-help' : ''; $has_premium_upsell = ( isset( $attr['show_premium_upsell'] ) && $attr['show_premium_upsell'] && isset( $attr['premium_upsell_url'] ) && ! empty( $attr['premium_upsell_url'] ) ); $upsell_class = ( $has_premium_upsell ) ? ' premium-upsell' : ''; $var_esc = esc_attr( $variable ); printf( '<div class="%s">', esc_attr( 'switch-container' . $help_class . $upsell_class ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. echo '<fieldset id="', $var_esc, '" class="fieldset-switch-toggle"><legend>', $label, '</legend>', $help; // Show disabled note if attribute does not exists or does exist and is set to true. if ( ! isset( $attr['show_disabled_note'] ) || ( $attr['show_disabled_note'] === true ) ) { if ( isset( $attr['note_when_disabled'] ) ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. echo $this->get_disabled_note( $variable, $attr['note_when_disabled'] ); } else { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. echo $this->get_disabled_note( $variable ); } } echo '<div class="switch-toggle switch-candy switch-yoast-seo">'; foreach ( $values as $key => $value ) { $screen_reader_text_html = ''; if ( is_array( $value ) ) { $screen_reader_text = $value['screen_reader_text']; $screen_reader_text_html = '<span class="screen-reader-text"> ' . esc_html( $screen_reader_text ) . '</span>'; $value = $value['text']; } $key_esc = esc_attr( $key ); $for = $var_esc . '-' . $key_esc; $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. echo '<input type="radio" id="' . $for . '" name="' . esc_attr( $this->option_name ) . '[' . $var_esc . ']" value="' . $key_esc . '" ' . checked( $val, $key_esc, false ) . $disabled_attribute . ' />', // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. '<label for="', $for, '">', esc_html( $value ), $screen_reader_text_html, '</label>'; } $upsell_button = ''; if ( $has_premium_upsell ) { $upsell_button = '<a class="yoast-button yoast-button--buy yoast-button--small" data-action="load-nfd-ctb" data-ctb-id="f6a84663-465f-4cb5-8ba5-f7a6d72224b2" href=' . esc_url( $attr['premium_upsell_url'] ) . ' target="_blank">' . esc_html__( 'Unlock with Premium!', 'wordpress-seo' ) /* translators: Hidden accessibility text. */ . '<span class="screen-reader-text">' . esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) . '</span>' . '<span aria-hidden="true" class="yoast-button--buy__caret"></span></a>'; } // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- All variable output is escaped above. echo '<a></a></div></fieldset><div class="clear"></div>' . $upsell_button . '</div>' . PHP_EOL . PHP_EOL; } /** * Creates a toggle switch to define whether an indexable should be indexed or not. * * @param string $variable The variable within the option to create the radio buttons for. * @param string $label The visual label for the radio buttons group, used as the fieldset legend. * @param string $help Inline Help that will be printed out before the visible toggles text. * @param array $attr Extra attributes to add to the index switch. * * @return void */ public function index_switch( $variable, $label, $help = '', $attr = [] ) { $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); $index_switch_values = [ 'off' => __( 'On', 'wordpress-seo' ), 'on' => __( 'Off', 'wordpress-seo' ), ]; $is_disabled = ( isset( $attr['disabled'] ) && $attr['disabled'] ); $this->toggle_switch( $variable, $index_switch_values, sprintf( /* translators: %s expands to an indexable object's name, like a post type or taxonomy */ esc_html__( 'Show %s in search results?', 'wordpress-seo' ), $label ), $help, [ 'disabled' => $is_disabled ] ); } /** * Creates a toggle switch to show hide certain options. * * @param string $variable The variable within the option to create the radio buttons for. * @param string $label The visual label for the radio buttons group, used as the fieldset legend. * @param bool $inverse_keys Whether or not the option keys need to be inverted to support older functions. * @param string $help Inline Help that will be printed out before the visible toggles text. * @param array $attr Extra attributes to add to the show-hide switch. * * @return void */ public function show_hide_switch( $variable, $label, $inverse_keys = false, $help = '', $attr = [] ) { $defaults = [ 'disabled' => false, ]; $attr = wp_parse_args( $attr, $defaults ); $on_key = ( $inverse_keys ) ? 'off' : 'on'; $off_key = ( $inverse_keys ) ? 'on' : 'off'; $show_hide_switch = [ $on_key => __( 'On', 'wordpress-seo' ), $off_key => __( 'Off', 'wordpress-seo' ), ]; $is_disabled = ( isset( $attr['disabled'] ) && $attr['disabled'] ); $this->toggle_switch( $variable, $show_hide_switch, $label, $help, [ 'disabled' => $is_disabled ] ); } /** * Retrieves the value for the form field. * * @param string $field_name The field name to retrieve the value for. * @param string|null $default_value The default value, when field has no value. * * @return mixed|null The retrieved value. */ protected function get_field_value( $field_name, $default_value = null ) { // On multisite subsites, the Usage tracking feature should always be set to Off. if ( $this->is_tracking_on_subsite( $field_name ) ) { return false; } return WPSEO_Options::get( $field_name, $default_value ); } /** * Checks whether a given control should be disabled. * * @param string $variable The variable within the option to check whether its control should be disabled. * * @return bool True if control should be disabled, false otherwise. */ protected function is_control_disabled( $variable ) { if ( $this->option_instance === null ) { return false; } // Disable the Usage tracking feature for multisite subsites. if ( $this->is_tracking_on_subsite( $variable ) ) { return true; } return $this->option_instance->is_disabled( $variable ); } /** * Gets the explanation note to print if a given control is disabled. * * @param string $variable The variable within the option to print a disabled note for. * @param string $custom_note An optional custom note to print instead. * * @return string Explanation note HTML string, or empty string if no note necessary. */ protected function get_disabled_note( $variable, $custom_note = '' ) { if ( $custom_note === '' && ! $this->is_control_disabled( $variable ) ) { return ''; } $disabled_message = esc_html__( 'This feature has been disabled by the network admin.', 'wordpress-seo' ); // The explanation to show when disabling the Usage tracking feature for multisite subsites. if ( $this->is_tracking_on_subsite( $variable ) ) { $disabled_message = esc_html__( 'This feature has been disabled since subsites never send tracking data.', 'wordpress-seo' ); } if ( $custom_note ) { $disabled_message = esc_html( $custom_note ); } return '<p class="disabled-note">' . $disabled_message . '</p>'; } /** * Determines whether we are dealing with the Usage tracking feature on a multisite subsite. * This feature requires specific behavior for the toggle switch. * * @param string $feature_setting The feature setting. * * @return bool True if we are dealing with the Usage tracking feature on a multisite subsite. */ protected function is_tracking_on_subsite( $feature_setting ) { return ( $feature_setting === 'tracking' && ! is_network_admin() && ! is_main_site() ); } /** * Returns the disabled attribute HTML. * * @param string $variable The variable within the option of the related form element. * @param array $attr Extra attributes added to the form element. * * @return string The disabled attribute HTML. */ protected function get_disabled_attribute( $variable, $attr ) { if ( $this->is_control_disabled( $variable ) || ( isset( $attr['disabled'] ) && $attr['disabled'] ) ) { return ' disabled'; } return ''; } } class-yoast-input-validation.php 0000644 00000024765 15150262017 0013021 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Implements server-side user input validation. * * @since 12.0 */ class Yoast_Input_Validation { /** * The error descriptions. * * @since 12.1 * * @var array */ private static $error_descriptions = []; /** * Check whether an option group is a Yoast SEO setting. * * The normal pattern is 'yoast' . $option_name . 'options'. * * @since 12.0 * * @param string $group_name The option group name. * * @return bool Whether or not it's an Yoast SEO option group. */ public static function is_yoast_option_group_name( $group_name ) { return ( strpos( $group_name, 'yoast' ) !== false ); } /** * Adds an error message to the document title when submitting a settings * form and errors are returned. * * Uses the WordPress `admin_title` filter in the WPSEO_Option subclasses. * * @since 12.0 * * @param string $admin_title The page title, with extra context added. * * @return string The modified or original admin title. */ public static function add_yoast_admin_document_title_errors( $admin_title ) { $errors = get_settings_errors(); $error_count = 0; foreach ( $errors as $error ) { // For now, filter the admin title only in the Yoast SEO settings pages. if ( self::is_yoast_option_group_name( $error['setting'] ) && $error['code'] !== 'settings_updated' ) { ++$error_count; } } if ( $error_count > 0 ) { return sprintf( /* translators: %1$s: amount of errors, %2$s: the admin page title */ _n( 'The form contains %1$s error. %2$s', 'The form contains %1$s errors. %2$s', $error_count, 'wordpress-seo' ), number_format_i18n( $error_count ), $admin_title ); } return $admin_title; } /** * Checks whether a specific form input field was submitted with an invalid value. * * @since 12.1 * * @param string $error_code Must be the same slug-name used for the field variable and for `add_settings_error()`. * * @return bool Whether or not the submitted input field contained an invalid value. */ public static function yoast_form_control_has_error( $error_code ) { $errors = get_settings_errors(); foreach ( $errors as $error ) { if ( $error['code'] === $error_code ) { return true; } } return false; } /** * Sets the error descriptions. * * @since 12.1 * * @param array $descriptions An associative array of error descriptions. * For each entry, the key must be the setting variable. * * @return void */ public static function set_error_descriptions( $descriptions = [] ) { $defaults = [ 'baiduverify' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Baidu verification codes can only contain letters, numbers, hyphens, and underscores. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'baiduverify' ) ), 'facebook_site' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Please check the format of the Facebook Page URL you entered. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'facebook_site' ) ), 'googleverify' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Google verification codes can only contain letters, numbers, hyphens, and underscores. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'googleverify' ) ), 'instagram_url' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Please check the format of the Instagram URL you entered. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'instagram_url' ) ), 'linkedin_url' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Please check the format of the LinkedIn URL you entered. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'linkedin_url' ) ), 'msverify' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Bing confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'msverify' ) ), 'myspace_url' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Please check the format of the MySpace URL you entered. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'myspace_url' ) ), 'pinterest_url' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Please check the format of the Pinterest URL you entered. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'pinterest_url' ) ), 'pinterestverify' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Pinterest confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'pinterestverify' ) ), 'twitter_site' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Twitter usernames can only contain letters, numbers, and underscores. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'twitter_site' ) ), 'wikipedia_url' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Please check the format of the Wikipedia URL you entered. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'wikipedia_url' ) ), 'yandexverify' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Yandex confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'yandexverify' ) ), 'youtube_url' => sprintf( /* translators: %s: additional message with the submitted invalid value */ esc_html__( 'Please check the format of the YouTube URL you entered. %s', 'wordpress-seo' ), self::get_dirty_value_message( 'youtube_url' ) ), ]; $descriptions = wp_parse_args( $descriptions, $defaults ); self::$error_descriptions = $descriptions; } /** * Gets all the error descriptions. * * @since 12.1 * * @return array An associative array of error descriptions. */ public static function get_error_descriptions() { return self::$error_descriptions; } /** * Gets a specific error description. * * @since 12.1 * * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. * * @return string|null The error description. */ public static function get_error_description( $error_code ) { if ( ! isset( self::$error_descriptions[ $error_code ] ) ) { return null; } return self::$error_descriptions[ $error_code ]; } /** * Gets the aria-invalid HTML attribute based on the submitted invalid value. * * @since 12.1 * * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. * * @return string The aria-invalid HTML attribute or empty string. */ public static function get_the_aria_invalid_attribute( $error_code ) { if ( self::yoast_form_control_has_error( $error_code ) ) { return ' aria-invalid="true"'; } return ''; } /** * Gets the aria-describedby HTML attribute based on the submitted invalid value. * * @since 12.1 * * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. * * @return string The aria-describedby HTML attribute or empty string. */ public static function get_the_aria_describedby_attribute( $error_code ) { if ( self::yoast_form_control_has_error( $error_code ) && self::get_error_description( $error_code ) ) { return ' aria-describedby="' . esc_attr( $error_code ) . '-error-description"'; } return ''; } /** * Gets the error description wrapped in a HTML paragraph. * * @since 12.1 * * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. * * @return string The error description HTML or empty string. */ public static function get_the_error_description( $error_code ) { $error_description = self::get_error_description( $error_code ); if ( self::yoast_form_control_has_error( $error_code ) && $error_description ) { return '<p id="' . esc_attr( $error_code ) . '-error-description" class="yoast-input-validation__error-description">' . $error_description . '</p>'; } return ''; } /** * Adds the submitted invalid value to the WordPress `$wp_settings_errors` global. * * @since 12.1 * * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. * @param string $dirty_value The submitted invalid value. * * @return void */ public static function add_dirty_value_to_settings_errors( $error_code, $dirty_value ) { global $wp_settings_errors; if ( ! is_array( $wp_settings_errors ) ) { return; } foreach ( $wp_settings_errors as $index => $error ) { if ( $error['code'] === $error_code ) { // phpcs:ignore WordPress.WP.GlobalVariablesOverride -- This is a deliberate action. $wp_settings_errors[ $index ]['yoast_dirty_value'] = $dirty_value; } } } /** * Gets an invalid submitted value. * * @since 12.1 * * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. * * @return string The submitted invalid input field value. */ public static function get_dirty_value( $error_code ) { $errors = get_settings_errors(); foreach ( $errors as $error ) { if ( $error['code'] === $error_code && isset( $error['yoast_dirty_value'] ) ) { return $error['yoast_dirty_value']; } } return ''; } /** * Gets a specific invalid value message. * * @since 12.1 * * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. * * @return string The error invalid value message or empty string. */ public static function get_dirty_value_message( $error_code ) { $dirty_value = self::get_dirty_value( $error_code ); if ( $dirty_value ) { return sprintf( /* translators: %s: form value as submitted. */ esc_html__( 'The submitted value was: %s', 'wordpress-seo' ), esc_html( $dirty_value ) ); } return ''; } } class-yoast-network-admin.php 0000644 00000023740 15150262017 0012301 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Internals */ /** * Multisite utility class for network admin functionality. */ class Yoast_Network_Admin implements WPSEO_WordPress_AJAX_Integration, WPSEO_WordPress_Integration { /** * Action identifier for updating plugin network options. * * @var string */ public const UPDATE_OPTIONS_ACTION = 'yoast_handle_network_options'; /** * Action identifier for restoring a site. * * @var string */ public const RESTORE_SITE_ACTION = 'yoast_restore_site'; /** * Gets the available sites as choices, e.g. for a dropdown. * * @param bool $include_empty Optional. Whether to include an initial placeholder choice. * Default false. * @param bool $show_title Optional. Whether to show the title for each site. This requires * switching through the sites, so has performance implications for * sites that do not use a persistent cache. * Default false. * * @return array Choices as $site_id => $site_label pairs. */ public function get_site_choices( $include_empty = false, $show_title = false ) { $choices = []; if ( $include_empty ) { $choices['-'] = __( 'None', 'wordpress-seo' ); } $criteria = [ 'deleted' => 0, 'network_id' => get_current_network_id(), ]; $sites = get_sites( $criteria ); foreach ( $sites as $site ) { $site_name = $site->domain . $site->path; if ( $show_title ) { $site_name = $site->blogname . ' (' . $site->domain . $site->path . ')'; } $choices[ $site->blog_id ] = $site->blog_id . ': ' . $site_name; $site_states = $this->get_site_states( $site ); if ( ! empty( $site_states ) ) { $choices[ $site->blog_id ] .= ' [' . implode( ', ', $site_states ) . ']'; } } return $choices; } /** * Gets the states of a site. * * @param WP_Site $site Site object. * * @return array Array of $state_slug => $state_label pairs. */ public function get_site_states( $site ) { $available_states = [ 'public' => __( 'public', 'wordpress-seo' ), 'archived' => __( 'archived', 'wordpress-seo' ), 'mature' => __( 'mature', 'wordpress-seo' ), 'spam' => __( 'spam', 'wordpress-seo' ), 'deleted' => __( 'deleted', 'wordpress-seo' ), ]; $site_states = []; foreach ( $available_states as $state_slug => $state_label ) { if ( $site->$state_slug === '1' ) { $site_states[ $state_slug ] = $state_label; } } return $site_states; } /** * Handles a request to update plugin network options. * * This method works similar to how option updates are handled in `wp-admin/options.php` and * `wp-admin/network/settings.php`. * * @return void */ public function handle_update_options_request() { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: Nonce verification will happen in verify_request below. if ( ! isset( $_POST['network_option_group'] ) || ! is_string( $_POST['network_option_group'] ) ) { return; } // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: Nonce verification will happen in verify_request below. $option_group = sanitize_text_field( wp_unslash( $_POST['network_option_group'] ) ); if ( empty( $option_group ) ) { return; } $this->verify_request( "{$option_group}-network-options" ); $whitelist_options = Yoast_Network_Settings_API::get()->get_whitelist_options( $option_group ); if ( empty( $whitelist_options ) ) { add_settings_error( $option_group, 'settings_updated', __( 'You are not allowed to modify unregistered network settings.', 'wordpress-seo' ), 'error' ); $this->terminate_request(); return; } // phpcs:disable WordPress.Security.NonceVerification -- Nonce verified via `verify_request()` above. foreach ( $whitelist_options as $option_name ) { $value = null; if ( isset( $_POST[ $option_name ] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: Adding sanitize_text_field around this will break the saving of settings because it expects a string: https://github.com/Yoast/wordpress-seo/issues/12440. $value = wp_unslash( $_POST[ $option_name ] ); } WPSEO_Options::update_site_option( $option_name, $value ); } // phpcs:enable WordPress.Security.NonceVerification $settings_errors = get_settings_errors(); if ( empty( $settings_errors ) ) { add_settings_error( $option_group, 'settings_updated', __( 'Settings Updated.', 'wordpress-seo' ), 'updated' ); } $this->terminate_request(); } /** * Handles a request to restore a site's default settings. * * @return void */ public function handle_restore_site_request() { $this->verify_request( 'wpseo-network-restore', 'restore_site_nonce' ); $option_group = 'wpseo_ms'; // phpcs:ignore WordPress.Security.NonceVerification -- Nonce verified via `verify_request()` above. $site_id = ! empty( $_POST[ $option_group ]['site_id'] ) ? (int) $_POST[ $option_group ]['site_id'] : 0; if ( ! $site_id ) { add_settings_error( $option_group, 'settings_updated', __( 'No site has been selected to restore.', 'wordpress-seo' ), 'error' ); $this->terminate_request(); return; } $site = get_site( $site_id ); if ( ! $site ) { /* translators: %s expands to the ID of a site within a multisite network. */ add_settings_error( $option_group, 'settings_updated', sprintf( __( 'Site with ID %d not found.', 'wordpress-seo' ), $site_id ), 'error' ); } else { WPSEO_Options::reset_ms_blog( $site_id ); /* translators: %s expands to the name of a site within a multisite network. */ add_settings_error( $option_group, 'settings_updated', sprintf( __( '%s restored to default SEO settings.', 'wordpress-seo' ), esc_html( $site->blogname ) ), 'updated' ); } $this->terminate_request(); } /** * Outputs nonce, action and option group fields for a network settings page in the plugin. * * @param string $option_group Option group name for the current page. * * @return void */ public function settings_fields( $option_group ) { ?> <input type="hidden" name="network_option_group" value="<?php echo esc_attr( $option_group ); ?>" /> <input type="hidden" name="action" value="<?php echo esc_attr( self::UPDATE_OPTIONS_ACTION ); ?>" /> <?php wp_nonce_field( "$option_group-network-options" ); } /** * Enqueues network admin assets. * * @return void */ public function enqueue_assets() { $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_script( 'network-admin' ); $translations = [ /* translators: %s: success message */ 'success_prefix' => __( 'Success: %s', 'wordpress-seo' ), /* translators: %s: error message */ 'error_prefix' => __( 'Error: %s', 'wordpress-seo' ), ]; $asset_manager->localize_script( 'network-admin', 'wpseoNetworkAdminGlobalL10n', $translations ); } /** * Hooks in the necessary actions and filters. * * @return void */ public function register_hooks() { if ( ! $this->meets_requirements() ) { return; } add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); add_action( 'admin_action_' . self::UPDATE_OPTIONS_ACTION, [ $this, 'handle_update_options_request' ] ); add_action( 'admin_action_' . self::RESTORE_SITE_ACTION, [ $this, 'handle_restore_site_request' ] ); } /** * Hooks in the necessary AJAX actions. * * @return void */ public function register_ajax_hooks() { add_action( 'wp_ajax_' . self::UPDATE_OPTIONS_ACTION, [ $this, 'handle_update_options_request' ] ); add_action( 'wp_ajax_' . self::RESTORE_SITE_ACTION, [ $this, 'handle_restore_site_request' ] ); } /** * Checks whether the requirements to use this class are met. * * @return bool True if requirements are met, false otherwise. */ public function meets_requirements() { return is_multisite() && is_network_admin(); } /** * Verifies that the current request is valid. * * @param string $action Nonce action. * @param string $query_arg Optional. Nonce query argument. Default '_wpnonce'. * * @return void */ public function verify_request( $action, $query_arg = '_wpnonce' ) { $has_access = current_user_can( 'wpseo_manage_network_options' ); if ( wp_doing_ajax() ) { check_ajax_referer( $action, $query_arg ); if ( ! $has_access ) { wp_die( -1, 403 ); } return; } check_admin_referer( $action, $query_arg ); if ( ! $has_access ) { wp_die( esc_html__( 'You are not allowed to perform this action.', 'wordpress-seo' ) ); } } /** * Terminates the current request by either redirecting back or sending an AJAX response. * * @return void */ public function terminate_request() { if ( wp_doing_ajax() ) { $settings_errors = get_settings_errors(); if ( ! empty( $settings_errors ) && $settings_errors[0]['type'] === 'updated' ) { wp_send_json_success( $settings_errors, 200 ); } wp_send_json_error( $settings_errors, 400 ); } $this->persist_settings_errors(); $this->redirect_back( [ 'settings-updated' => 'true' ] ); } /** * Persists settings errors. * * Settings errors are stored in a transient for 30 seconds so that this transient * can be retrieved on the next page load. * * @return void */ protected function persist_settings_errors() { /* * A regular transient is used here, since it is automatically cleared right after the redirect. * A network transient would be cleaner, but would require a lot of copied code from core for * just a minor adjustment when displaying settings errors. */ set_transient( 'settings_errors', get_settings_errors(), 30 ); } /** * Redirects back to the referer URL, with optional query arguments. * * @param array $query_args Optional. Query arguments to add to the redirect URL. Default none. * * @return void */ protected function redirect_back( $query_args = [] ) { $sendback = wp_get_referer(); if ( ! empty( $query_args ) ) { $sendback = add_query_arg( $query_args, $sendback ); } wp_safe_redirect( $sendback ); exit; } } class-yoast-network-settings-api.php 0000644 00000010264 15150262017 0013615 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Network */ /** * Implements a network settings API for the plugin's multisite settings. */ class Yoast_Network_Settings_API { /** * Registered network settings. * * @var array */ private $registered_settings = []; /** * Options whitelist, keyed by option group. * * @var array */ private $whitelist_options = []; /** * The singleton instance of this class. * * @var Yoast_Network_Settings_API */ private static $instance = null; /** * Registers a network setting and its data. * * @param string $option_group The group the network option is part of. * @param string $option_name The name of the network option to sanitize and save. * @param array $args { * Optional. Data used to describe the network setting when registered. * * @type callable $sanitize_callback A callback function that sanitizes the network option's value. * @type mixed $default Default value when calling `get_network_option()`. * } * * @return void */ public function register_setting( $option_group, $option_name, $args = [] ) { $defaults = [ 'group' => $option_group, 'sanitize_callback' => null, ]; $args = wp_parse_args( $args, $defaults ); if ( ! isset( $this->whitelist_options[ $option_group ] ) ) { $this->whitelist_options[ $option_group ] = []; } $this->whitelist_options[ $option_group ][] = $option_name; if ( ! empty( $args['sanitize_callback'] ) ) { add_filter( "sanitize_option_{$option_name}", [ $this, 'filter_sanitize_option' ], 10, 2 ); } if ( array_key_exists( 'default', $args ) ) { add_filter( "default_site_option_{$option_name}", [ $this, 'filter_default_option' ], 10, 2 ); } $this->registered_settings[ $option_name ] = $args; } /** * Gets the registered settings and their data. * * @return array Array of $option_name => $data pairs. */ public function get_registered_settings() { return $this->registered_settings; } /** * Gets the whitelisted options for a given option group. * * @param string $option_group Option group. * * @return array List of option names, or empty array if unknown option group. */ public function get_whitelist_options( $option_group ) { if ( ! isset( $this->whitelist_options[ $option_group ] ) ) { return []; } return $this->whitelist_options[ $option_group ]; } /** * Filters sanitization for a network option value. * * This method is added as a filter to `sanitize_option_{$option}` for network options that are * registered with a sanitize callback. * * @param string $value The sanitized option value. * @param string $option The option name. * * @return string The filtered sanitized option value. */ public function filter_sanitize_option( $value, $option ) { if ( empty( $this->registered_settings[ $option ] ) ) { return $value; } return call_user_func( $this->registered_settings[ $option ]['sanitize_callback'], $value ); } /** * Filters the default value for a network option. * * This function is added as a filter to `default_site_option_{$option}` for network options that * are registered with a default. * * @param mixed $default_value Existing default value to return. * @param string $option The option name. * * @return mixed The filtered default value. */ public function filter_default_option( $default_value, $option ) { // If a default value was manually passed to the function, allow it to override. if ( $default_value !== false ) { return $default_value; } if ( empty( $this->registered_settings[ $option ] ) ) { return $default_value; } return $this->registered_settings[ $option ]['default']; } /** * Checks whether the requirements to use this class are met. * * @return bool True if requirements are met, false otherwise. */ public function meets_requirements() { return is_multisite(); } /** * Gets the singleton instance of this class. * * @return Yoast_Network_Settings_API The singleton instance. */ public static function get() { if ( self::$instance === null ) { self::$instance = new self(); } return self::$instance; } } class-yoast-notification-center.php 0000644 00000063462 15150262017 0013473 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Notifications */ use Yoast\WP\SEO\Presenters\Abstract_Presenter; /** * Handles notifications storage and display. */ class Yoast_Notification_Center { /** * Option name to store notifications on. * * @var string */ public const STORAGE_KEY = 'yoast_notifications'; /** * The singleton instance of this object. * * @var Yoast_Notification_Center */ private static $instance = null; /** * Holds the notifications. * * @var Yoast_Notification[][] */ private $notifications = []; /** * Notifications there are newly added. * * @var array */ private $new = []; /** * Notifications that were resolved this execution. * * @var int */ private $resolved = 0; /** * Internal storage for transaction before notifications have been retrieved from storage. * * @var array */ private $queued_transactions = []; /** * Internal flag for whether notifications have been retrieved from storage. * * @var bool */ private $notifications_retrieved = false; /** * Internal flag for whether notifications need to be updated in storage. * * @var bool */ private $notifications_need_storage = false; /** * Construct. */ private function __construct() { add_action( 'init', [ $this, 'setup_current_notifications' ], 1 ); add_action( 'all_admin_notices', [ $this, 'display_notifications' ] ); add_action( 'wp_ajax_yoast_get_notifications', [ $this, 'ajax_get_notifications' ] ); add_action( 'wpseo_deactivate', [ $this, 'deactivate_hook' ] ); add_action( 'shutdown', [ $this, 'update_storage' ] ); } /** * Singleton getter. * * @return Yoast_Notification_Center */ public static function get() { if ( self::$instance === null ) { self::$instance = new self(); } return self::$instance; } /** * Dismiss a notification. * * @return void */ public static function ajax_dismiss_notification() { $notification_center = self::get(); if ( ! isset( $_POST['notification'] ) || ! is_string( $_POST['notification'] ) ) { die( '-1' ); } $notification_id = sanitize_text_field( wp_unslash( $_POST['notification'] ) ); if ( empty( $notification_id ) ) { die( '-1' ); } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are using the variable as a nonce. if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['nonce'] ), $notification_id ) ) { die( '-1' ); } $notification = $notification_center->get_notification_by_id( $notification_id ); if ( ( $notification instanceof Yoast_Notification ) === false ) { // Permit legacy. $options = [ 'id' => $notification_id, 'dismissal_key' => $notification_id, ]; $notification = new Yoast_Notification( '', $options ); } if ( self::maybe_dismiss_notification( $notification ) ) { die( '1' ); } die( '-1' ); } /** * Check if the user has dismissed a notification. * * @param Yoast_Notification $notification The notification to check for dismissal. * @param int|null $user_id User ID to check on. * * @return bool */ public static function is_notification_dismissed( Yoast_Notification $notification, $user_id = null ) { $user_id = self::get_user_id( $user_id ); $dismissal_key = $notification->get_dismissal_key(); // This checks both the site-specific user option and the meta value. $current_value = get_user_option( $dismissal_key, $user_id ); // Migrate old user meta to user option on-the-fly. if ( ! empty( $current_value ) && metadata_exists( 'user', $user_id, $dismissal_key ) && update_user_option( $user_id, $dismissal_key, $current_value ) ) { delete_user_meta( $user_id, $dismissal_key ); } return ! empty( $current_value ); } /** * Checks if the notification is being dismissed. * * @param Yoast_Notification $notification Notification to check dismissal of. * @param string $meta_value Value to set the meta value to if dismissed. * * @return bool True if dismissed. */ public static function maybe_dismiss_notification( Yoast_Notification $notification, $meta_value = 'seen' ) { // Only persistent notifications are dismissible. if ( ! $notification->is_persistent() ) { return false; } // If notification is already dismissed, we're done. if ( self::is_notification_dismissed( $notification ) ) { return true; } $dismissal_key = $notification->get_dismissal_key(); $notification_id = $notification->get_id(); $is_dismissing = ( $dismissal_key === self::get_user_input( 'notification' ) ); if ( ! $is_dismissing ) { $is_dismissing = ( $notification_id === self::get_user_input( 'notification' ) ); } // Fallback to ?dismissal_key=1&nonce=bla when JavaScript fails. if ( ! $is_dismissing ) { $is_dismissing = ( self::get_user_input( $dismissal_key ) === '1' ); } if ( ! $is_dismissing ) { return false; } $user_nonce = self::get_user_input( 'nonce' ); if ( wp_verify_nonce( $user_nonce, $notification_id ) === false ) { return false; } return self::dismiss_notification( $notification, $meta_value ); } /** * Dismisses a notification. * * @param Yoast_Notification $notification Notification to dismiss. * @param string $meta_value Value to save in the dismissal. * * @return bool True if dismissed, false otherwise. */ public static function dismiss_notification( Yoast_Notification $notification, $meta_value = 'seen' ) { // Dismiss notification. return update_user_option( get_current_user_id(), $notification->get_dismissal_key(), $meta_value ) !== false; } /** * Restores a notification. * * @param Yoast_Notification $notification Notification to restore. * * @return bool True if restored, false otherwise. */ public static function restore_notification( Yoast_Notification $notification ) { $user_id = get_current_user_id(); $dismissal_key = $notification->get_dismissal_key(); // Restore notification. $restored = delete_user_option( $user_id, $dismissal_key ); // Delete unprefixed user meta too for backward-compatibility. if ( metadata_exists( 'user', $user_id, $dismissal_key ) ) { $restored = delete_user_meta( $user_id, $dismissal_key ) && $restored; } return $restored; } /** * Clear dismissal information for the specified Notification. * * When a cause is resolved, the next time it is present we want to show * the message again. * * @param string|Yoast_Notification $notification Notification to clear the dismissal of. * * @return bool */ public function clear_dismissal( $notification ) { global $wpdb; if ( $notification instanceof Yoast_Notification ) { $dismissal_key = $notification->get_dismissal_key(); } if ( is_string( $notification ) ) { $dismissal_key = $notification; } if ( empty( $dismissal_key ) ) { return false; } // Remove notification dismissal for all users. $deleted = delete_metadata( 'user', 0, $wpdb->get_blog_prefix() . $dismissal_key, '', true ); // Delete unprefixed user meta too for backward-compatibility. $deleted = delete_metadata( 'user', 0, $dismissal_key, '', true ) || $deleted; return $deleted; } /** * Retrieves notifications from the storage and merges in previous notification changes. * * The current user in WordPress is not loaded shortly before the 'init' hook, but the plugin * sometimes needs to add or remove notifications before that. In such cases, the transactions * are not actually executed, but added to a queue. That queue is then handled in this method, * after notifications for the current user have been set up. * * @return void */ public function setup_current_notifications() { $this->retrieve_notifications_from_storage( get_current_user_id() ); foreach ( $this->queued_transactions as $transaction ) { list( $callback, $args ) = $transaction; call_user_func_array( $callback, $args ); } $this->queued_transactions = []; } /** * Add notification to the cookie. * * @param Yoast_Notification $notification Notification object instance. * * @return void */ public function add_notification( Yoast_Notification $notification ) { $callback = [ $this, __FUNCTION__ ]; $args = func_get_args(); if ( $this->queue_transaction( $callback, $args ) ) { return; } // Don't add if the user can't see it. if ( ! $notification->display_for_current_user() ) { return; } $notification_id = $notification->get_id(); $user_id = $notification->get_user_id(); // Empty notifications are always added. if ( $notification_id !== '' ) { // If notification ID exists in notifications, don't add again. $present_notification = $this->get_notification_by_id( $notification_id, $user_id ); if ( ! is_null( $present_notification ) ) { $this->remove_notification( $present_notification, false ); } if ( is_null( $present_notification ) ) { $this->new[] = $notification_id; } } // Add to list. $this->notifications[ $user_id ][] = $notification; $this->notifications_need_storage = true; } /** * Get the notification by ID and user ID. * * @param string $notification_id The ID of the notification to search for. * @param int|null $user_id The ID of the user. * * @return Yoast_Notification|null */ public function get_notification_by_id( $notification_id, $user_id = null ) { $user_id = self::get_user_id( $user_id ); $notifications = $this->get_notifications_for_user( $user_id ); foreach ( $notifications as $notification ) { if ( $notification_id === $notification->get_id() ) { return $notification; } } return null; } /** * Display the notifications. * * @param bool $echo_as_json True when notifications should be printed directly. * * @return void */ public function display_notifications( $echo_as_json = false ) { // Never display notifications for network admin. if ( is_network_admin() ) { return; } $sorted_notifications = $this->get_sorted_notifications(); $notifications = array_filter( $sorted_notifications, [ $this, 'is_notification_persistent' ] ); if ( empty( $notifications ) ) { return; } array_walk( $notifications, [ $this, 'remove_notification' ] ); $notifications = array_unique( $notifications ); if ( $echo_as_json ) { $notification_json = []; foreach ( $notifications as $notification ) { $notification_json[] = $notification->render(); } // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. echo WPSEO_Utils::format_json_encode( $notification_json ); return; } foreach ( $notifications as $notification ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: Temporarily disabled, see: https://github.com/Yoast/wordpress-seo-premium/issues/2510 and https://github.com/Yoast/wordpress-seo-premium/issues/2511. echo $notification; } } /** * Remove notification after it has been displayed. * * @param Yoast_Notification $notification Notification to remove. * @param bool $resolve Resolve as fixed. * * @return void */ public function remove_notification( Yoast_Notification $notification, $resolve = true ) { $callback = [ $this, __FUNCTION__ ]; $args = func_get_args(); if ( $this->queue_transaction( $callback, $args ) ) { return; } $index = false; // ID of the user to show the notification for, defaults to current user id. $user_id = $notification->get_user_id(); $notifications = $this->get_notifications_for_user( $user_id ); // Match persistent Notifications by ID, non persistent by item in the array. if ( $notification->is_persistent() ) { foreach ( $notifications as $current_index => $present_notification ) { if ( $present_notification->get_id() === $notification->get_id() ) { $index = $current_index; break; } } } else { $index = array_search( $notification, $notifications, true ); } if ( $index === false ) { return; } if ( $notification->is_persistent() && $resolve ) { ++$this->resolved; $this->clear_dismissal( $notification ); } unset( $notifications[ $index ] ); $this->notifications[ $user_id ] = array_values( $notifications ); $this->notifications_need_storage = true; } /** * Removes a notification by its ID. * * @param string $notification_id The notification id. * @param bool $resolve Resolve as fixed. * * @return void */ public function remove_notification_by_id( $notification_id, $resolve = true ) { $notification = $this->get_notification_by_id( $notification_id ); if ( $notification === null ) { return; } $this->remove_notification( $notification, $resolve ); $this->notifications_need_storage = true; } /** * Get the notification count. * * @param bool $dismissed Count dismissed notifications. * * @return int Number of notifications */ public function get_notification_count( $dismissed = false ) { $notifications = $this->get_notifications_for_user( get_current_user_id() ); $notifications = array_filter( $notifications, [ $this, 'filter_persistent_notifications' ] ); if ( ! $dismissed ) { $notifications = array_filter( $notifications, [ $this, 'filter_dismissed_notifications' ] ); } return count( $notifications ); } /** * Get the number of notifications resolved this execution. * * These notifications have been resolved and should be counted when active again. * * @return int */ public function get_resolved_notification_count() { return $this->resolved; } /** * Return the notifications sorted on type and priority. * * @return array|Yoast_Notification[] Sorted Notifications */ public function get_sorted_notifications() { $notifications = $this->get_notifications_for_user( get_current_user_id() ); if ( empty( $notifications ) ) { return []; } // Sort by severity, error first. usort( $notifications, [ $this, 'sort_notifications' ] ); return $notifications; } /** * AJAX display notifications. * * @return void */ public function ajax_get_notifications() { $echo = false; // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form data. if ( isset( $_POST['version'] ) && is_string( $_POST['version'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only comparing the variable in a condition. $echo = wp_unslash( $_POST['version'] ) === '2'; } // Display the notices. $this->display_notifications( $echo ); // AJAX die. exit; } /** * Remove storage when the plugin is deactivated. * * @return void */ public function deactivate_hook() { $this->clear_notifications(); } /** * Returns the given user ID if it exists. * Otherwise, this function returns the ID of the current user. * * @param int $user_id The user ID to check. * * @return int The user ID to use. */ private static function get_user_id( $user_id ) { if ( $user_id ) { return $user_id; } return get_current_user_id(); } /** * Splits the notifications on user ID. * * In other terms, it returns an associative array, * mapping user ID to a list of notifications for this user. * * @param array|Yoast_Notification[] $notifications The notifications to split. * * @return array The notifications, split on user ID. */ private function split_on_user_id( $notifications ) { $split_notifications = []; foreach ( $notifications as $notification ) { $split_notifications[ $notification->get_user_id() ][] = $notification; } return $split_notifications; } /** * Save persistent notifications to storage. * * We need to be able to retrieve these so they can be dismissed at any time during the execution. * * @since 3.2 * * @return void */ public function update_storage() { $notifications = $this->notifications; /** * One array of Yoast_Notifications, merged from multiple arrays. * * @var Yoast_Notification[] $merged_notifications */ $merged_notifications = []; if ( ! empty( $notifications ) ) { $merged_notifications = array_merge( ...$notifications ); } /** * Filter: 'yoast_notifications_before_storage' - Allows developer to filter notifications before saving them. * * @param Yoast_Notification[] $notifications */ $filtered_merged_notifications = apply_filters( 'yoast_notifications_before_storage', $merged_notifications ); // The notifications were filtered and therefore need to be stored. if ( $merged_notifications !== $filtered_merged_notifications ) { $merged_notifications = $filtered_merged_notifications; $this->notifications_need_storage = true; } $notifications = $this->split_on_user_id( $merged_notifications ); // No notifications to store, clear storage if it was previously present. if ( empty( $notifications ) ) { $this->remove_storage(); return; } // Only store notifications if changes are made. if ( $this->notifications_need_storage ) { array_walk( $notifications, [ $this, 'store_notifications_for_user' ] ); } } /** * Stores the notifications to its respective user's storage. * * @param array|Yoast_Notification[] $notifications The notifications to store. * @param int $user_id The ID of the user for which to store the notifications. * * @return void */ private function store_notifications_for_user( $notifications, $user_id ) { $notifications_as_arrays = array_map( [ $this, 'notification_to_array' ], $notifications ); update_user_option( $user_id, self::STORAGE_KEY, $notifications_as_arrays ); } /** * Provide a way to verify present notifications. * * @return array|Yoast_Notification[] Registered notifications. */ public function get_notifications() { if ( ! $this->notifications ) { return []; } return array_merge( ...$this->notifications ); } /** * Returns the notifications for the given user. * * @param int $user_id The id of the user to check. * * @return Yoast_Notification[] The notifications for the user with the given ID. */ public function get_notifications_for_user( $user_id ) { if ( array_key_exists( $user_id, $this->notifications ) ) { return $this->notifications[ $user_id ]; } return []; } /** * Get newly added notifications. * * @return array */ public function get_new_notifications() { return array_map( [ $this, 'get_notification_by_id' ], $this->new ); } /** * Get information from the User input. * * Note that this function does not handle nonce verification. * * @param string $key Key to retrieve. * * @return string non-sanitized value of key if set, an empty string otherwise. */ private static function get_user_input( $key ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information and only using this variable in a comparison. $request_method = isset( $_SERVER['REQUEST_METHOD'] ) && is_string( $_SERVER['REQUEST_METHOD'] ) ? strtoupper( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) : ''; // phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: This function does not sanitize variables. // phpcs:disable WordPress.Security.NonceVerification.Recommended,WordPress.Security.NonceVerification.Missing -- Reason: This function does not verify a nonce. if ( $request_method === 'POST' ) { if ( isset( $_POST[ $key ] ) && is_string( $_POST[ $key ] ) ) { return wp_unslash( $_POST[ $key ] ); } } elseif ( isset( $_GET[ $key ] ) && is_string( $_GET[ $key ] ) ) { return wp_unslash( $_GET[ $key ] ); } // phpcs:enable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized return ''; } /** * Retrieve the notifications from storage and fill the relevant property. * * @param int $user_id The ID of the user to retrieve notifications for. * * @return void */ private function retrieve_notifications_from_storage( $user_id ) { if ( $this->notifications_retrieved ) { return; } $this->notifications_retrieved = true; $stored_notifications = get_user_option( self::STORAGE_KEY, $user_id ); // Check if notifications are stored. if ( empty( $stored_notifications ) ) { return; } if ( is_array( $stored_notifications ) ) { $notifications = array_map( [ $this, 'array_to_notification' ], $stored_notifications ); // Apply array_values to ensure we get a 0-indexed array. $notifications = array_values( array_filter( $notifications, [ $this, 'filter_notification_current_user' ] ) ); $this->notifications[ $user_id ] = $notifications; } } /** * Sort on type then priority. * * @param Yoast_Notification $a Compare with B. * @param Yoast_Notification $b Compare with A. * * @return int 1, 0 or -1 for sorting offset. */ private function sort_notifications( Yoast_Notification $a, Yoast_Notification $b ) { $a_type = $a->get_type(); $b_type = $b->get_type(); if ( $a_type === $b_type ) { return WPSEO_Utils::calc( $b->get_priority(), 'compare', $a->get_priority() ); } if ( $a_type === 'error' ) { return -1; } if ( $b_type === 'error' ) { return 1; } return 0; } /** * Clear local stored notifications. * * @return void */ private function clear_notifications() { $this->notifications = []; $this->notifications_retrieved = false; } /** * Filter out non-persistent notifications. * * @since 3.2 * * @param Yoast_Notification $notification Notification to test for persistent. * * @return bool */ private function filter_persistent_notifications( Yoast_Notification $notification ) { return $notification->is_persistent(); } /** * Filter out dismissed notifications. * * @param Yoast_Notification $notification Notification to check. * * @return bool */ private function filter_dismissed_notifications( Yoast_Notification $notification ) { return ! self::maybe_dismiss_notification( $notification ); } /** * Convert Notification to array representation. * * @since 3.2 * * @param Yoast_Notification $notification Notification to convert. * * @return array */ private function notification_to_array( Yoast_Notification $notification ) { $notification_data = $notification->to_array(); if ( isset( $notification_data['nonce'] ) ) { unset( $notification_data['nonce'] ); } return $notification_data; } /** * Convert stored array to Notification. * * @param array $notification_data Array to convert to Notification. * * @return Yoast_Notification */ private function array_to_notification( $notification_data ) { if ( isset( $notification_data['options']['nonce'] ) ) { unset( $notification_data['options']['nonce'] ); } if ( isset( $notification_data['message'] ) && is_subclass_of( $notification_data['message'], Abstract_Presenter::class, false ) ) { $notification_data['message'] = $notification_data['message']->present(); } if ( isset( $notification_data['options']['user'] ) ) { $notification_data['options']['user_id'] = $notification_data['options']['user']->ID; unset( $notification_data['options']['user'] ); $this->notifications_need_storage = true; } return new Yoast_Notification( $notification_data['message'], $notification_data['options'] ); } /** * Filter notifications that should not be displayed for the current user. * * @param Yoast_Notification $notification Notification to test. * * @return bool */ private function filter_notification_current_user( Yoast_Notification $notification ) { return $notification->display_for_current_user(); } /** * Checks if given notification is persistent. * * @param Yoast_Notification $notification The notification to check. * * @return bool True when notification is not persistent. */ private function is_notification_persistent( Yoast_Notification $notification ) { return ! $notification->is_persistent(); } /** * Queues a notification transaction for later execution if notifications are not yet set up. * * @param callable $callback Callback that performs the transaction. * @param array $args Arguments to pass to the callback. * * @return bool True if transaction was queued, false if it can be performed immediately. */ private function queue_transaction( $callback, $args ) { if ( $this->notifications_retrieved ) { return false; } $this->add_transaction_to_queue( $callback, $args ); return true; } /** * Adds a notification transaction to the queue for later execution. * * @param callable $callback Callback that performs the transaction. * @param array $args Arguments to pass to the callback. * * @return void */ private function add_transaction_to_queue( $callback, $args ) { $this->queued_transactions[] = [ $callback, $args ]; } /** * Removes all notifications from storage. * * @return bool True when notifications got removed. */ protected function remove_storage() { if ( ! $this->has_stored_notifications() ) { return false; } delete_user_option( get_current_user_id(), self::STORAGE_KEY ); return true; } /** * Checks if there are stored notifications. * * @return bool True when there are stored notifications. */ protected function has_stored_notifications() { $stored_notifications = $this->get_stored_notifications(); return ! empty( $stored_notifications ); } /** * Retrieves the stored notifications. * * @codeCoverageIgnore * * @return array|false Array with notifications or false when not set. */ protected function get_stored_notifications() { return get_user_option( self::STORAGE_KEY, get_current_user_id() ); } } class-yoast-notification.php 0000644 00000023245 15150262017 0012210 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Notifications * @since 1.5.3 */ /** * Implements individual notification. */ class Yoast_Notification { /** * Type of capability check. * * @var string */ public const MATCH_ALL = 'all'; /** * Type of capability check. * * @var string */ public const MATCH_ANY = 'any'; /** * Notification type. * * @var string */ public const ERROR = 'error'; /** * Notification type. * * @var string */ public const WARNING = 'warning'; /** * Notification type. * * @var string */ public const UPDATED = 'updated'; /** * Options of this Notification. * * Contains optional arguments: * * - type: The notification type, i.e. 'updated' or 'error' * - id: The ID of the notification * - nonce: Security nonce to use in case of dismissible notice. * - priority: From 0 to 1, determines the order of Notifications. * - dismissal_key: Option name to save dismissal information in, ID will be used if not supplied. * - capabilities: Capabilities that a user must have for this Notification to show. * - capability_check: How to check capability pass: all or any. * - wpseo_page_only: Only display on wpseo page or on every page. * * @var array */ private $options = []; /** * Contains default values for the optional arguments. * * @var array */ private $defaults = [ 'type' => self::UPDATED, 'id' => '', 'user_id' => null, 'nonce' => null, 'priority' => 0.5, 'data_json' => [], 'dismissal_key' => null, 'capabilities' => [], 'capability_check' => self::MATCH_ALL, 'yoast_branding' => false, ]; /** * The message for the notification. * * @var string */ private $message; /** * Notification class constructor. * * @param string $message Message string. * @param array $options Set of options. */ public function __construct( $message, $options = [] ) { $this->message = $message; $this->options = $this->normalize_options( $options ); } /** * Retrieve notification ID string. * * @return string */ public function get_id() { return $this->options['id']; } /** * Retrieve the user to show the notification for. * * @deprecated 21.6 * @codeCoverageIgnore * * @return WP_User The user to show this notification for. */ public function get_user() { _deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); return null; } /** * Retrieve the id of the user to show the notification for. * * Returns the id of the current user if not user has been sent. * * @return int The user id */ public function get_user_id() { return ( $this->options['user_id'] ?? get_current_user_id() ); } /** * Retrieve nonce identifier. * * @return string|null Nonce for this Notification. */ public function get_nonce() { if ( $this->options['id'] && empty( $this->options['nonce'] ) ) { $this->options['nonce'] = wp_create_nonce( $this->options['id'] ); } return $this->options['nonce']; } /** * Make sure the nonce is up to date. * * @return void */ public function refresh_nonce() { if ( $this->options['id'] ) { $this->options['nonce'] = wp_create_nonce( $this->options['id'] ); } } /** * Get the type of the notification. * * @return string */ public function get_type() { return $this->options['type']; } /** * Priority of the notification. * * Relative to the type. * * @return float Returns the priority between 0 and 1. */ public function get_priority() { return $this->options['priority']; } /** * Get the User Meta key to check for dismissal of notification. * * @return string User Meta Option key that registers dismissal. */ public function get_dismissal_key() { if ( empty( $this->options['dismissal_key'] ) ) { return $this->options['id']; } return $this->options['dismissal_key']; } /** * Is this Notification persistent. * * @return bool True if persistent, False if fire and forget. */ public function is_persistent() { $id = $this->get_id(); return ! empty( $id ); } /** * Check if the notification is relevant for the current user. * * @return bool True if a user needs to see this notification, false if not. */ public function display_for_current_user() { // If the notification is for the current page only, always show. if ( ! $this->is_persistent() ) { return true; } // If the current user doesn't match capabilities. return $this->match_capabilities(); } /** * Does the current user match required capabilities. * * @return bool */ public function match_capabilities() { // Super Admin can do anything. if ( is_multisite() && is_super_admin( $this->options['user_id'] ) ) { return true; } /** * Filter capabilities that enable the displaying of this notification. * * @param array $capabilities The capabilities that must be present for this notification. * @param Yoast_Notification $notification The notification object. * * @return array Array of capabilities or empty for no restrictions. * * @since 3.2 */ $capabilities = apply_filters( 'wpseo_notification_capabilities', $this->options['capabilities'], $this ); // Should be an array. if ( ! is_array( $capabilities ) ) { $capabilities = (array) $capabilities; } /** * Filter capability check to enable all or any capabilities. * * @param string $capability_check The type of check that will be used to determine if an capability is present. * @param Yoast_Notification $notification The notification object. * * @return string self::MATCH_ALL or self::MATCH_ANY. * * @since 3.2 */ $capability_check = apply_filters( 'wpseo_notification_capability_check', $this->options['capability_check'], $this ); if ( ! in_array( $capability_check, [ self::MATCH_ALL, self::MATCH_ANY ], true ) ) { $capability_check = self::MATCH_ALL; } if ( ! empty( $capabilities ) ) { $has_capabilities = array_filter( $capabilities, [ $this, 'has_capability' ] ); switch ( $capability_check ) { case self::MATCH_ALL: return $has_capabilities === $capabilities; case self::MATCH_ANY: return ! empty( $has_capabilities ); } } return true; } /** * Array filter function to find matched capabilities. * * @param string $capability Capability to test. * * @return bool */ private function has_capability( $capability ) { $user_id = $this->options['user_id']; if ( ! is_numeric( $user_id ) ) { return false; } $user = get_user_by( 'id', $user_id ); if ( ! $user ) { return false; } return $user->has_cap( $capability ); } /** * Return the object properties as an array. * * @return array */ public function to_array() { return [ 'message' => $this->message, 'options' => $this->options, ]; } /** * Adds string (view) behaviour to the notification. * * @return string */ public function __toString() { return $this->render(); } /** * Renders the notification as a string. * * @return string The rendered notification. */ public function render() { $attributes = []; // Default notification classes. $classes = [ 'yoast-notification', ]; // Maintain WordPress visualisation of notifications when they are not persistent. if ( ! $this->is_persistent() ) { $classes[] = 'notice'; $classes[] = $this->get_type(); } if ( ! empty( $classes ) ) { $attributes['class'] = implode( ' ', $classes ); } // Combined attribute key and value into a string. array_walk( $attributes, [ $this, 'parse_attributes' ] ); $message = null; if ( $this->options['yoast_branding'] ) { $message = $this->wrap_yoast_seo_icon( $this->message ); } if ( $message === null ) { $message = wpautop( $this->message ); } // Build the output DIV. return '<div ' . implode( ' ', $attributes ) . '>' . $message . '</div>' . PHP_EOL; } /** * Wraps the message with a Yoast SEO icon. * * @param string $message The message to wrap. * * @return string The wrapped message. */ private function wrap_yoast_seo_icon( $message ) { $out = sprintf( '<img src="%1$s" height="%2$d" width="%3$d" class="yoast-seo-icon" />', esc_url( plugin_dir_url( WPSEO_FILE ) . 'packages/js/images/Yoast_SEO_Icon.svg' ), 60, 60 ); $out .= '<div class="yoast-seo-icon-wrap">'; $out .= $message; $out .= '</div>'; return $out; } /** * Get the JSON if provided. * * @return false|string */ public function get_json() { if ( empty( $this->options['data_json'] ) ) { return ''; } return WPSEO_Utils::format_json_encode( $this->options['data_json'] ); } /** * Make sure we only have values that we can work with. * * @param array $options Options to normalize. * * @return array */ private function normalize_options( $options ) { $options = wp_parse_args( $options, $this->defaults ); // Should not exceed 0 or 1. $options['priority'] = min( 1, max( 0, $options['priority'] ) ); // Set default capabilities when not supplied. if ( empty( $options['capabilities'] ) || $options['capabilities'] === [] ) { $options['capabilities'] = [ 'wpseo_manage_options' ]; } // Set to the id of the current user if not supplied. if ( $options['user_id'] === null ) { $options['user_id'] = get_current_user_id(); } return $options; } /** * Format HTML element attributes. * * @param string $value Attribute value. * @param string $key Attribute name. * * @return void */ private function parse_attributes( &$value, $key ) { $value = sprintf( '%s="%s"', sanitize_key( $key ), esc_attr( $value ) ); } } class-yoast-notifications.php 0000644 00000017204 15150262017 0012371 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Notifications */ /** * Class Yoast_Notifications. */ class Yoast_Notifications { /** * Holds the admin page's ID. * * @var string */ public const ADMIN_PAGE = 'wpseo_dashboard'; /** * Total notifications count. * * @var int */ private static $notification_count = 0; /** * All error notifications. * * @var array */ private static $errors = []; /** * Active errors. * * @var array */ private static $active_errors = []; /** * Dismissed errors. * * @var array */ private static $dismissed_errors = []; /** * All warning notifications. * * @var array */ private static $warnings = []; /** * Active warnings. * * @var array */ private static $active_warnings = []; /** * Dismissed warnings. * * @var array */ private static $dismissed_warnings = []; /** * Yoast_Notifications constructor. */ public function __construct() { $this->add_hooks(); } /** * Add hooks * * @return void */ private function add_hooks() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. $page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); if ( $page === self::ADMIN_PAGE ) { add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); } } // Needed for adminbar and Notifications page. add_action( 'admin_init', [ self::class, 'collect_notifications' ], 99 ); // Add AJAX hooks. add_action( 'wp_ajax_yoast_dismiss_notification', [ $this, 'ajax_dismiss_notification' ] ); add_action( 'wp_ajax_yoast_restore_notification', [ $this, 'ajax_restore_notification' ] ); } /** * Enqueue assets. * * @return void */ public function enqueue_assets() { $asset_manager = new WPSEO_Admin_Asset_Manager(); $asset_manager->enqueue_style( 'notifications' ); } /** * Handle ajax request to dismiss a notification. * * @return void */ public function ajax_dismiss_notification() { $notification = $this->get_notification_from_ajax_request(); if ( $notification ) { $notification_center = Yoast_Notification_Center::get(); $notification_center->maybe_dismiss_notification( $notification ); $this->output_ajax_response( $notification->get_type() ); } wp_die(); } /** * Handle ajax request to restore a notification. * * @return void */ public function ajax_restore_notification() { $notification = $this->get_notification_from_ajax_request(); if ( $notification ) { $notification_center = Yoast_Notification_Center::get(); $notification_center->restore_notification( $notification ); $this->output_ajax_response( $notification->get_type() ); } wp_die(); } /** * Create AJAX response data. * * @param string $type Notification type. * * @return void */ private function output_ajax_response( $type ) { $html = $this->get_view_html( $type ); // phpcs:disable WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. echo WPSEO_Utils::format_json_encode( [ 'html' => $html, 'total' => self::get_active_notification_count(), ] ); // phpcs:enable -- Reason: WPSEO_Utils::format_json_encode is safe. } /** * Get the HTML to return in the AJAX request. * * @param string $type Notification type. * * @return bool|string */ private function get_view_html( $type ) { switch ( $type ) { case 'error': $view = 'errors'; break; case 'warning': default: $view = 'warnings'; break; } // Re-collect notifications. self::collect_notifications(); /** * Stops PHPStorm from nagging about this variable being unused. The variable is used in the view. * * @noinspection PhpUnusedLocalVariableInspection */ $notifications_data = self::get_template_variables(); ob_start(); include WPSEO_PATH . 'admin/views/partial-notifications-' . $view . '.php'; $html = ob_get_clean(); return $html; } /** * Extract the Yoast Notification from the AJAX request. * * This function does not handle nonce verification. * * @return Yoast_Notification|null A Yoast_Notification on success, null on failure. */ private function get_notification_from_ajax_request() { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: This function does not handle nonce verification. if ( ! isset( $_POST['notification'] ) || ! is_string( $_POST['notification'] ) ) { return null; } // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: This function does not handle nonce verification. $notification_id = sanitize_text_field( wp_unslash( $_POST['notification'] ) ); if ( empty( $notification_id ) ) { return null; } $notification_center = Yoast_Notification_Center::get(); return $notification_center->get_notification_by_id( $notification_id ); } /** * Collect the notifications and group them together. * * @return void */ public static function collect_notifications() { $notification_center = Yoast_Notification_Center::get(); $notifications = $notification_center->get_sorted_notifications(); self::$notification_count = count( $notifications ); self::$errors = array_filter( $notifications, [ self::class, 'filter_error_notifications' ] ); self::$dismissed_errors = array_filter( self::$errors, [ self::class, 'filter_dismissed_notifications' ] ); self::$active_errors = array_diff( self::$errors, self::$dismissed_errors ); self::$warnings = array_filter( $notifications, [ self::class, 'filter_warning_notifications' ] ); self::$dismissed_warnings = array_filter( self::$warnings, [ self::class, 'filter_dismissed_notifications' ] ); self::$active_warnings = array_diff( self::$warnings, self::$dismissed_warnings ); } /** * Get the variables needed in the views. * * @return array */ public static function get_template_variables() { return [ 'metrics' => [ 'total' => self::$notification_count, 'active' => self::get_active_notification_count(), 'errors' => count( self::$errors ), 'warnings' => count( self::$warnings ), ], 'errors' => [ 'dismissed' => self::$dismissed_errors, 'active' => self::$active_errors, ], 'warnings' => [ 'dismissed' => self::$dismissed_warnings, 'active' => self::$active_warnings, ], ]; } /** * Get the number of active notifications. * * @return int */ public static function get_active_notification_count() { return ( count( self::$active_errors ) + count( self::$active_warnings ) ); } /** * Filter out any non-errors. * * @param Yoast_Notification $notification Notification to test. * * @return bool */ private static function filter_error_notifications( Yoast_Notification $notification ) { return $notification->get_type() === 'error'; } /** * Filter out any non-warnings. * * @param Yoast_Notification $notification Notification to test. * * @return bool */ private static function filter_warning_notifications( Yoast_Notification $notification ) { return $notification->get_type() !== 'error'; } /** * Filter out any dismissed notifications. * * @param Yoast_Notification $notification Notification to test. * * @return bool */ private static function filter_dismissed_notifications( Yoast_Notification $notification ) { return Yoast_Notification_Center::is_notification_dismissed( $notification ); } } class_alias( Yoast_Notifications::class, 'Yoast_Alerts' ); class-yoast-plugin-conflict.php 0000644 00000024520 15150262017 0012614 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin * @since 1.7.0 */ /** * Base class for handling plugin conflicts. */ class Yoast_Plugin_Conflict { /** * The plugins must be grouped per section. * * It's possible to check for each section if there are conflicting plugins. * * @var array */ protected $plugins = []; /** * All the current active plugins will be stored in this private var. * * @var array */ protected $all_active_plugins = []; /** * After searching for active plugins that are in $this->plugins the active plugins will be stored in this * property. * * @var array */ protected $active_conflicting_plugins = []; /** * Property for holding instance of itself. * * @var Yoast_Plugin_Conflict */ protected static $instance; /** * For the use of singleton pattern. Create instance of itself and return this instance. * * @param string $class_name Give the classname to initialize. If classname is * false (empty) it will use it's own __CLASS__. * * @return Yoast_Plugin_Conflict */ public static function get_instance( $class_name = '' ) { if ( is_null( self::$instance ) ) { if ( ! is_string( $class_name ) || $class_name === '' ) { $class_name = self::class; } self::$instance = new $class_name(); } return self::$instance; } /** * Setting instance, all active plugins and search for active plugins. * * Protected constructor to prevent creating a new instance of the * *Singleton* via the `new` operator from outside this class. */ protected function __construct() { // Set active plugins. $this->all_active_plugins = get_option( 'active_plugins' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. if ( isset( $_GET['action'] ) && is_string( $_GET['action'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information and only comparing the variable in a condition. $action = wp_unslash( $_GET['action'] ); if ( $action === 'deactivate' ) { $this->remove_deactivated_plugin(); } } // Search for active plugins. $this->search_active_plugins(); } /** * Check if there are conflicting plugins for given $plugin_section. * * @param string $plugin_section Type of plugin conflict (such as Open Graph or sitemap). * * @return bool */ public function check_for_conflicts( $plugin_section ) { static $sections_checked; // Return early if there are no active conflicting plugins at all. if ( empty( $this->active_conflicting_plugins ) ) { return false; } if ( $sections_checked === null ) { $sections_checked = []; } if ( ! in_array( $plugin_section, $sections_checked, true ) ) { $sections_checked[] = $plugin_section; return ( ! empty( $this->active_conflicting_plugins[ $plugin_section ] ) ); } return false; } /** * Checks for given $plugin_sections for conflicts. * * @param array $plugin_sections Set of sections. * * @return void */ public function check_plugin_conflicts( $plugin_sections ) { foreach ( $plugin_sections as $plugin_section => $readable_plugin_section ) { // Check for conflicting plugins and show error if there are conflicts. if ( $this->check_for_conflicts( $plugin_section ) ) { $this->set_error( $plugin_section, $readable_plugin_section ); } } // List of all active sections. $sections = array_keys( $plugin_sections ); // List of all sections. $all_plugin_sections = array_keys( $this->plugins ); /* * Get all sections that are inactive. * These plugins need to be cleared. * * This happens when Sitemaps or OpenGraph implementations toggle active/disabled. */ $inactive_sections = array_diff( $all_plugin_sections, $sections ); if ( ! empty( $inactive_sections ) ) { foreach ( $inactive_sections as $section ) { array_walk( $this->plugins[ $section ], [ $this, 'clear_error' ] ); } } // For active sections clear errors for inactive plugins. foreach ( $sections as $section ) { // By default, clear errors for all plugins of the section. $inactive_plugins = $this->plugins[ $section ]; // If there are active plugins, filter them from being cleared. if ( isset( $this->active_conflicting_plugins[ $section ] ) ) { $inactive_plugins = array_diff( $this->plugins[ $section ], $this->active_conflicting_plugins[ $section ] ); } array_walk( $inactive_plugins, [ $this, 'clear_error' ] ); } } /** * Setting an error on the screen. * * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). * @param string $readable_plugin_section This is the value for the translation. * * @return void */ protected function set_error( $plugin_section, $readable_plugin_section ) { $notification_center = Yoast_Notification_Center::get(); foreach ( $this->active_conflicting_plugins[ $plugin_section ] as $plugin_file ) { $plugin_name = $this->get_plugin_name( $plugin_file ); $error_message = ''; /* translators: %1$s: 'Facebook & Open Graph' plugin name(s) of possibly conflicting plugin(s), %2$s to Yoast SEO */ $error_message .= '<p>' . sprintf( __( 'The %1$s plugin might cause issues when used in conjunction with %2$s.', 'wordpress-seo' ), '<em>' . $plugin_name . '</em>', 'Yoast SEO' ) . '</p>'; $error_message .= '<p>' . sprintf( $readable_plugin_section, 'Yoast SEO', $plugin_name ) . '</p>'; /* translators: %s: 'Facebook' plugin name of possibly conflicting plugin */ $error_message .= '<a class="button button-primary" href="' . wp_nonce_url( 'plugins.php?action=deactivate&plugin=' . $plugin_file . '&plugin_status=all', 'deactivate-plugin_' . $plugin_file ) . '">' . sprintf( __( 'Deactivate %s', 'wordpress-seo' ), $this->get_plugin_name( $plugin_file ) ) . '</a> '; $identifier = $this->get_notification_identifier( $plugin_file ); // Add the message to the notifications center. $notification_center->add_notification( new Yoast_Notification( $error_message, [ 'type' => Yoast_Notification::ERROR, 'id' => 'wpseo-conflict-' . $identifier, ] ) ); } } /** * Clear the notification for a plugin. * * @param string $plugin_file Clear the optional notification for this plugin. * * @return void */ public function clear_error( $plugin_file ) { $identifier = $this->get_notification_identifier( $plugin_file ); $notification_center = Yoast_Notification_Center::get(); $notification_center->remove_notification_by_id( 'wpseo-conflict-' . $identifier ); } /** * Loop through the $this->plugins to check if one of the plugins is active. * * This method will store the active plugins in $this->active_plugins. * * @return void */ protected function search_active_plugins() { foreach ( $this->plugins as $plugin_section => $plugins ) { $this->check_plugins_active( $plugins, $plugin_section ); } } /** * Loop through plugins and check if each plugin is active. * * @param array $plugins Set of plugins. * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). * * @return void */ protected function check_plugins_active( $plugins, $plugin_section ) { foreach ( $plugins as $plugin ) { if ( $this->check_plugin_is_active( $plugin ) ) { $this->add_active_plugin( $plugin_section, $plugin ); } } } /** * Check if given plugin exists in array with all_active_plugins. * * @param string $plugin Plugin basename string. * * @return bool */ protected function check_plugin_is_active( $plugin ) { return in_array( $plugin, $this->all_active_plugins, true ); } /** * Add plugin to the list of active plugins. * * This method will check first if key $plugin_section exists, if not it will create an empty array * If $plugin itself doesn't exist it will be added. * * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). * @param string $plugin Plugin basename string. * * @return void */ protected function add_active_plugin( $plugin_section, $plugin ) { if ( ! array_key_exists( $plugin_section, $this->active_conflicting_plugins ) ) { $this->active_conflicting_plugins[ $plugin_section ] = []; } if ( ! in_array( $plugin, $this->active_conflicting_plugins[ $plugin_section ], true ) ) { $this->active_conflicting_plugins[ $plugin_section ][] = $plugin; } } /** * Search in $this->plugins for the given $plugin. * * If there is a result it will return the plugin category. * * @param string $plugin Plugin basename string. * * @return int|string */ protected function find_plugin_category( $plugin ) { foreach ( $this->plugins as $plugin_section => $plugins ) { if ( in_array( $plugin, $plugins, true ) ) { return $plugin_section; } } } /** * Get plugin name from file. * * @param string $plugin Plugin path relative to plugins directory. * * @return string|bool Plugin name or false when no name is set. */ protected function get_plugin_name( $plugin ) { $plugin_details = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); if ( $plugin_details['Name'] !== '' ) { return $plugin_details['Name']; } return false; } /** * When being in the deactivation process the currently deactivated plugin has to be removed. * * @return void */ private function remove_deactivated_plugin() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: On the deactivation screen the nonce is already checked by WordPress itself. if ( ! isset( $_GET['plugin'] ) || ! is_string( $_GET['plugin'] ) ) { return; } // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: On the deactivation screen the nonce is already checked by WordPress itself. $deactivated_plugin = sanitize_text_field( wp_unslash( $_GET['plugin'] ) ); $key_to_remove = array_search( $deactivated_plugin, $this->all_active_plugins, true ); if ( $key_to_remove !== false ) { unset( $this->all_active_plugins[ $key_to_remove ] ); } } /** * Get the identifier from the plugin file. * * @param string $plugin_file Plugin file to get Identifier from. * * @return string */ private function get_notification_identifier( $plugin_file ) { return md5( $plugin_file ); } } index.php 0000644 00000000046 15150262017 0006363 0 ustar 00 <?php /** * Nothing to see here. */ interface-collection.php 0000644 00000000401 15150262017 0011340 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Interface that represents a collection. */ interface WPSEO_Collection { /** * Returns the collection data. * * @return array The collection data. */ public function get(); } interface-installable.php 0000644 00000000376 15150262017 0011512 0 ustar 00 <?php /** * WPSEO plugin file. * * @package WPSEO\Admin */ /** * Represents the interface for an installable object. */ interface WPSEO_Installable { /** * Runs the installation routine. * * @return void */ public function install(); } assets/build/dashboard-app-rtl.css 0000644 00000157724 15150276715 0013214 0 ustar 00 /* ! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com *//* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ *, ::before, ::after { box-sizing: border-box; /* 1 */ border-width: 0; /* 2 */ border-style: solid; /* 2 */ border-color: #e5e7eb; /* 2 */ } ::before, ::after { --tw-content: ''; } /* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. */ html { line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -moz-tab-size: 4; /* 3 */ -o-tab-size: 4; tab-size: 4; /* 3 */ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */ } /* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ body { margin: 0; /* 1 */ line-height: inherit; /* 2 */ } /* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ hr { height: 0; /* 1 */ color: inherit; /* 2 */ border-top-width: 1px; /* 3 */ } /* Add the correct text decoration in Chrome, Edge, and Safari. */ abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } /* Remove the default font size and weight for headings. */ h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } /* Reset links to optimize for opt-in styling instead of opt-out. */ a { color: inherit; text-decoration: inherit; } /* Add the correct font weight in Edge and Safari. */ b, strong { font-weight: bolder; } /* 1. Use the user's configured `mono` font family by default. 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ font-size: 1em; /* 2 */ } /* Add the correct font size in all browsers. */ small { font-size: 80%; } /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ table { text-indent: 0; /* 1 */ border-color: inherit; /* 2 */ border-collapse: collapse; /* 3 */ } /* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 1 */ font-weight: inherit; /* 1 */ line-height: inherit; /* 1 */ color: inherit; /* 1 */ margin: 0; /* 2 */ padding: 0; /* 3 */ } /* Remove the inheritance of text transform in Edge and Firefox. */ button, select { text-transform: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ button, [type='button'], [type='reset'], [type='submit'] { -webkit-appearance: button; /* 1 */ background-color: transparent; /* 2 */ background-image: none; /* 2 */ } /* Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { outline: auto; } /* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ :-moz-ui-invalid { box-shadow: none; } /* Add the correct vertical alignment in Chrome and Firefox. */ progress { vertical-align: baseline; } /* Correct the cursor style of increment and decrement buttons in Safari. */ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } /* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /* Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { -webkit-appearance: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Add the correct display in Chrome and Safari. */ summary { display: list-item; } /* Removes the default spacing and border for appropriate elements. */ blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0; } fieldset { margin: 0; padding: 0; } legend { padding: 0; } ol, ul, menu { list-style: none; margin: 0; padding: 0; } /* Prevent resizing textareas horizontally by default. */ textarea { resize: vertical; } /* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } /* Set the default cursor for buttons. */ button, [role="button"] { cursor: pointer; } /* Make sure disabled buttons don't get the pointer cursor. */ :disabled { cursor: default; } /* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ img, svg, video, canvas, audio, iframe, embed, object { display: block; /* 1 */ vertical-align: middle; /* 2 */ } /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ img, video { max-width: 100%; height: auto; } [type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: #fff; border-color: #6b7280; border-width: 1px; border-radius: 0px; padding-top: 0.5rem; padding-left: 0.75rem; padding-bottom: 0.5rem; padding-right: 0.75rem; font-size: 1rem; line-height: 1.5rem; --tw-shadow: 0 0 #0000; } [type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus { outline: 2px solid transparent; outline-offset: 2px; --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: #2563eb; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); border-color: #2563eb; } input::-moz-placeholder, textarea::-moz-placeholder { color: #6b7280; opacity: 1; } input::placeholder,textarea::placeholder { color: #6b7280; opacity: 1; } ::-webkit-datetime-edit-fields-wrapper { padding: 0; } ::-webkit-date-and-time-value { min-height: 1.5em; } ::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field { padding-top: 0; padding-bottom: 0; } select { background-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27none%27 viewBox=%270 0 20 20%27%3e%3cpath stroke=%27%236b7280%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%271.5%27 d=%27M6 8l4 4 4-4%27/%3e%3c/svg%3e"); background-position: left 0.5rem center; background-repeat: no-repeat; background-size: 1.5em 1.5em; padding-left: 2.5rem; -webkit-print-color-adjust: exact; color-adjust: exact; } [multiple] { background-image: initial; background-position: initial; background-repeat: unset; background-size: initial; padding-left: 0.75rem; -webkit-print-color-adjust: unset; color-adjust: unset; } [type='checkbox'],[type='radio'] { -webkit-appearance: none; -moz-appearance: none; appearance: none; padding: 0; -webkit-print-color-adjust: exact; color-adjust: exact; display: inline-block; vertical-align: middle; background-origin: border-box; -webkit-user-select: none; -moz-user-select: none; user-select: none; flex-shrink: 0; height: 1rem; width: 1rem; color: #2563eb; background-color: #fff; border-color: #6b7280; border-width: 1px; --tw-shadow: 0 0 #0000; } [type='checkbox'] { border-radius: 0px; } [type='radio'] { border-radius: 100%; } [type='checkbox']:focus,[type='radio']:focus { outline: 2px solid transparent; outline-offset: 2px; --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); --tw-ring-offset-width: 2px; --tw-ring-offset-color: #fff; --tw-ring-color: #2563eb; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } [type='checkbox']:checked,[type='radio']:checked { border-color: transparent; background-color: currentColor; background-size: 100% 100%; background-position: center; background-repeat: no-repeat; } [type='checkbox']:checked { background-image: url("data:image/svg+xml,%3csvg viewBox=%270 0 16 16%27 fill=%27white%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z%27/%3e%3c/svg%3e"); } [type='radio']:checked { background-image: url("data:image/svg+xml,%3csvg viewBox=%270 0 16 16%27 fill=%27white%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3ccircle cx=%278%27 cy=%278%27 r=%273%27/%3e%3c/svg%3e"); } [type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { border-color: transparent; background-color: currentColor; } [type='checkbox']:indeterminate { background-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27none%27 viewBox=%270 0 16 16%27%3e%3cpath stroke=%27white%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%272%27 d=%27M4 8h8%27/%3e%3c/svg%3e"); border-color: transparent; background-color: currentColor; background-size: 100% 100%; background-position: center; background-repeat: no-repeat; } [type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { border-color: transparent; background-color: currentColor; } [type='file'] { background: unset; border-color: inherit; border-width: 0; border-radius: 0; padding: 0; font-size: unset; line-height: inherit; } [type='file']:focus { outline: 1px auto -webkit-focus-ring-color; } *, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; } ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; }.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; }.pointer-events-none { pointer-events: none; }.pointer-events-auto { pointer-events: auto; }.invisible { visibility: hidden; }.fixed { position: fixed; }.absolute { position: absolute; }.relative { position: relative; }.inset-0 { top: 0px; left: 0px; bottom: 0px; right: 0px; }.inset-10 { top: 2.5rem; left: 2.5rem; bottom: 2.5rem; right: 2.5rem; }.inset-3 { top: 0.75rem; left: 0.75rem; bottom: 0.75rem; right: 0.75rem; }.inset-y-0 { top: 0px; bottom: 0px; }.right-0 { left: 0px; }.top-8 { top: 2rem; }.bottom-2 { bottom: 0.5rem; }.top-1\/2 { top: 50%; }.left-4 { right: 1rem; }.top-7 { top: 1.75rem; }.right-6 { left: 1.5rem; }.top-4 { top: 1rem; }.right-4 { left: 1rem; }.left-0 { right: 0px; }.top-0 { top: 0px; }.top-\[150\%\] { top: 150%; }.-top-\[2\.8rem\] { top: -2.8rem; }.right-2\.5 { left: 0.625rem; }.-top-\[1\.75rem\] { top: -1.75rem; }.right-2 { left: 0.5rem; }.z-50 { z-index: 50; }.z-10 { z-index: 10; }.z-0 { z-index: 0; }.z-\[10000\] { z-index: 10000; }.m-auto { margin: auto; }.m-0 { margin: 0px; }.mx-auto { margin-right: auto; margin-left: auto; }.-my-2 { margin-top: -0.5rem; margin-bottom: -0.5rem; }.-mx-4 { margin-right: -1rem; margin-left: -1rem; }.my-\[2\.43rem\] { margin-top: 2.43rem; margin-bottom: 2.43rem; }.mx-0 { margin-right: 0px; margin-left: 0px; }.-mb-px { margin-bottom: -1px; }.mb-1 { margin-bottom: 0.25rem; }.mt-3 { margin-top: 0.75rem; }.ml-4 { margin-right: 1rem; }.mb-4 { margin-bottom: 1rem; }.ml-auto { margin-right: auto; }.mr-1 { margin-left: 0.25rem; }.ml-1 { margin-right: 0.25rem; }.mr-8 { margin-left: 2rem; }.ml-3 { margin-right: 0.75rem; }.mt-2 { margin-top: 0.5rem; }.mt-5 { margin-top: 1.25rem; }.mt-4 { margin-top: 1rem; }.mr-3 { margin-left: 0.75rem; }.mb-5 { margin-bottom: 1.25rem; }.mb-8 { margin-bottom: 2rem; }.mt-10 { margin-top: 2.5rem; }.mr-2 { margin-left: 0.5rem; }.ml-2 { margin-right: 0.5rem; }.mb-1\.5 { margin-bottom: 0.375rem; }.mb-3 { margin-bottom: 0.75rem; }.mt-8 { margin-top: 2rem; }.mt-6 { margin-top: 1.5rem; }.mb-7 { margin-bottom: 1.75rem; }.-mr-1 { margin-left: -0.25rem; }.mr-16 { margin-left: 4rem; }.mr-4 { margin-left: 1rem; }.mb-2 { margin-bottom: 0.5rem; }.mt-7 { margin-top: 1.75rem; }.mt-12 { margin-top: 3rem; }.mt-16 { margin-top: 4rem; }.mt-20 { margin-top: 5rem; }.mb-6 { margin-bottom: 1.5rem; }.mt-\[0\.1875rem\] { margin-top: 0.1875rem; }.-ml-px { margin-right: -1px; }.ml-1\.5 { margin-right: 0.375rem; }.ml-8 { margin-right: 2rem; }.mr-auto { margin-left: auto; }.-mt-1 { margin-top: -0.25rem; }.ml-2\.5 { margin-right: 0.625rem; }.mt-\[32px\] { margin-top: 32px; }.box-border { box-sizing: border-box; }.block { display: block; }.inline-block { display: inline-block; }.flex { display: flex; }.inline-flex { display: inline-flex; }.table { display: table; }.grid { display: grid; }.h-8 { height: 2rem; }.h-full { height: 100%; }.h-16 { height: 4rem; }.h-6 { height: 1.5rem; }.h-28 { height: 7rem; }.h-\[2\.6rem\] { height: 2.6rem; }.h-5 { height: 1.25rem; }.h-max { height: -moz-max-content; height: max-content; }.h-4 { height: 1rem; }.h-\[36rem\] { height: 36rem; }.h-9 { height: 2.25rem; }.h-20 { height: 5rem; }.h-fit { height: -moz-fit-content; height: fit-content; }.h-2 { height: 0.5rem; }.h-\[14rem\] { height: 14rem; }.max-h-4 { max-height: 1rem; }.min-h-screen { min-height: 100vh; }.min-h-\[36rem\] { min-height: 36rem; }.min-h-full { min-height: 100%; }.w-8 { width: 2rem; }.w-screen { width: 100vw; }.w-6 { width: 1.5rem; }.w-full { width: 100%; }.w-auto { width: auto; }.w-0 { width: 0px; }.w-5 { width: 1.25rem; }.w-9 { width: 2.25rem; }.w-9\/12 { width: 75%; }.w-11\/12 { width: 91.666667%; }.w-\[35\%\] { width: 35%; }.w-\[45\%\] { width: 45%; }.w-fit { width: -moz-fit-content; width: fit-content; }.w-max { width: -moz-max-content; width: max-content; }.w-2 { width: 0.5rem; }.w-\[24rem\] { width: 24rem; }.min-w-full { min-width: 100%; }.min-w-0 { min-width: 0px; }.max-w-full { max-width: 100%; }.max-w-md { max-width: 28rem; }.max-w-3xl { max-width: 48rem; }.max-w-sm { max-width: 24rem; }.max-w-\[39rem\] { max-width: 39rem; }.max-w-5xl { max-width: 64rem; }.max-w-2xl { max-width: 42rem; }.max-w-\[80rem\] { max-width: 80rem; }.max-w-\[45rem\] { max-width: 45rem; }.max-w-\[17\.125rem\] { max-width: 17.125rem; }.flex-1 { flex: 1 1 0%; }.flex-shrink-0 { flex-shrink: 0; }.translate-x-full { --tw-translate-x: 100%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-x-0 { --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-y-4 { --tw-translate-y: 1rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-y-0 { --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-y-2 { --tw-translate-y: 0.5rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.-translate-y-1\/2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-x-5 { --tw-translate-x: 1.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.rotate-0 { --tw-rotate: 0deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.-rotate-90 { --tw-rotate: -90deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.rotate-45 { --tw-rotate: 45deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }@keyframes spin { to { transform: rotate(-360deg); } }.animate-spin { animation: spin 1s linear infinite; }.cursor-pointer { cursor: pointer; }.snap-start { scroll-snap-align: start; }.grid-flow-row { grid-auto-flow: row; }.auto-rows-min { grid-auto-rows: min-content; }.grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }.grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }.flex-row { flex-direction: row; }.flex-col { flex-direction: column; }.items-start { align-items: flex-start; }.items-end { align-items: flex-end; }.items-center { align-items: center; }.justify-start { justify-content: flex-start; }.justify-center { justify-content: center; }.justify-between { justify-content: space-between; }.gap-3 { gap: 0.75rem; }.gap-8 { gap: 2rem; }.gap-12 { gap: 3rem; }.gap-4 { gap: 1rem; }.gap-\[32px\] { gap: 32px; }.gap-y-4 { row-gap: 1rem; }.gap-x-8 { -moz-column-gap: 2rem; column-gap: 2rem; }.gap-x-4 { -moz-column-gap: 1rem; column-gap: 1rem; }.space-x-8 > :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-left: calc(2rem * var(--tw-space-x-reverse)); margin-right: calc(2rem * calc(1 - var(--tw-space-x-reverse))); }.space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); }.space-y-1 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); }.space-x-3 > :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-left: calc(0.75rem * var(--tw-space-x-reverse)); margin-right: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); }.divide-y > :not([hidden]) ~ :not([hidden]) { --tw-divide-y-reverse: 0; border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); }.divide-x > :not([hidden]) ~ :not([hidden]) { --tw-divide-x-reverse: 0; border-left-width: calc(1px * var(--tw-divide-x-reverse)); border-right-width: calc(1px * calc(1 - var(--tw-divide-x-reverse))); }.divide-gray-200 > :not([hidden]) ~ :not([hidden]) { --tw-divide-opacity: 1; border-color: rgb(229 231 235 / var(--tw-divide-opacity)); }.divide-slate-200 > :not([hidden]) ~ :not([hidden]) { --tw-divide-opacity: 1; border-color: rgb(226 232 240 / var(--tw-divide-opacity)); }.self-start { align-self: flex-start; }.self-center { align-self: center; }.overflow-hidden { overflow: hidden; }.overflow-x-auto { overflow-x: auto; }.overflow-y-auto { overflow-y: auto; }.truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.whitespace-nowrap { white-space: nowrap; }.rounded-full { border-radius: 9999px; }.rounded-md { border-radius: 0.375rem; }.rounded-\[0\.2rem\] { border-radius: 0.2rem; }.rounded-\[0\.1875rem\] { border-radius: 0.1875rem; }.rounded-lg { border-radius: 0.5rem; }.rounded { border-radius: 0.25rem; }.rounded-sm { border-radius: 0.125rem; }.rounded-l-md { border-top-right-radius: 0.375rem; border-bottom-right-radius: 0.375rem; }.rounded-r-md { border-top-left-radius: 0.375rem; border-bottom-left-radius: 0.375rem; }.border { border-width: 1px; }.border-0 { border-width: 0px; }.border-b { border-bottom-width: 1px; }.border-b-2 { border-bottom-width: 2px; }.border-r { border-left-width: 1px; }.border-t { border-top-width: 1px; }.border-l { border-right-width: 1px; }.border-l-4 { border-right-width: 4px; }.border-solid { border-style: solid; }.border-slate-200 { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity)); }.border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity)); }.border-astra { --tw-border-opacity: 1; border-color: rgb(4 107 210 / var(--tw-border-opacity)); }.border-transparent { border-color: transparent; }.border-slate-400 { --tw-border-opacity: 1; border-color: rgb(148 163 184 / var(--tw-border-opacity)); }.border-slate-800 { --tw-border-opacity: 1; border-color: rgb(30 41 59 / var(--tw-border-opacity)); }.border-sky-500 { --tw-border-opacity: 1; border-color: rgb(14 165 233 / var(--tw-border-opacity)); }.border-white { --tw-border-opacity: 1; border-color: rgb(255 255 255 / var(--tw-border-opacity)); }.border-blue-50 { --tw-border-opacity: 1; border-color: rgb(239 246 255 / var(--tw-border-opacity)); }.border-t-slate-200 { --tw-border-opacity: 1; border-top-color: rgb(226 232 240 / var(--tw-border-opacity)); }.bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); }.bg-slate-800 { --tw-bg-opacity: 1; background-color: rgb(30 41 59 / var(--tw-bg-opacity)); }.bg-astra { --tw-bg-opacity: 1; background-color: rgb(4 107 210 / var(--tw-bg-opacity)); }.bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); }.bg-blue-50 { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity)); }.bg-slate-200 { --tw-bg-opacity: 1; background-color: rgb(226 232 240 / var(--tw-bg-opacity)); }.bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity)); }.bg-slate-50 { --tw-bg-opacity: 1; background-color: rgb(248 250 252 / var(--tw-bg-opacity)); }.bg-opacity-90 { --tw-bg-opacity: 0.9; }.fill-astra { fill: #046BD2; }.fill-slate-800 { fill: #1e293b; }.stroke-astra { stroke: #046BD2; }.stroke-slate-800 { stroke: #1e293b; }.stroke-inherit { stroke: inherit; }.p-4 { padding: 1rem; }.p-8 { padding: 2rem; }.p-6 { padding: 1.5rem; }.p-2 { padding: 0.5rem; }.p-0 { padding: 0px; }.p-\[2rem\] { padding: 2rem; }.px-4 { padding-right: 1rem; padding-left: 1rem; }.px-6 { padding-right: 1.5rem; padding-left: 1.5rem; }.py-4 { padding-top: 1rem; padding-bottom: 1rem; }.px-1 { padding-right: 0.25rem; padding-left: 0.25rem; }.py-5 { padding-top: 1.25rem; padding-bottom: 1.25rem; }.px-3 { padding-right: 0.75rem; padding-left: 0.75rem; }.py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }.py-\[0rem\] { padding-top: 0rem; padding-bottom: 0rem; }.px-1\.5 { padding-right: 0.375rem; padding-left: 0.375rem; }.py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; }.px-\[2\.9375rem\] { padding-right: 2.9375rem; padding-left: 2.9375rem; }.py-\[0\.6875rem\] { padding-top: 0.6875rem; padding-bottom: 0.6875rem; }.py-\[2\.43rem\] { padding-top: 2.43rem; padding-bottom: 2.43rem; }.py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }.py-3\.5 { padding-top: 0.875rem; padding-bottom: 0.875rem; }.py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; }.px-8 { padding-right: 2rem; padding-left: 2rem; }.py-8 { padding-top: 2rem; padding-bottom: 2rem; }.px-0 { padding-right: 0px; padding-left: 0px; }.py-\[0\.5625rem\] { padding-top: 0.5625rem; padding-bottom: 0.5625rem; }.px-\[0\.8125rem\] { padding-right: 0.8125rem; padding-left: 0.8125rem; }.px-5 { padding-right: 1.25rem; padding-left: 1.25rem; }.py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }.px-2\.5 { padding-right: 0.625rem; padding-left: 0.625rem; }.py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; }.px-2 { padding-right: 0.5rem; padding-left: 0.5rem; }.py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; }.py-0 { padding-top: 0px; padding-bottom: 0px; }.pl-10 { padding-right: 2.5rem; }.pr-2 { padding-left: 0.5rem; }.pr-3 { padding-left: 0.75rem; }.pl-1 { padding-right: 0.25rem; }.pl-3 { padding-right: 0.75rem; }.pt-0\.5 { padding-top: 0.125rem; }.pt-0 { padding-top: 0px; }.pt-\[4rem\] { padding-top: 4rem; }.pb-\[17\.5rem\] { padding-bottom: 17.5rem; }.pt-10 { padding-top: 2.5rem; }.pb-2 { padding-bottom: 0.5rem; }.pb-5 { padding-bottom: 1.25rem; }.pr-12 { padding-left: 3rem; }.pl-0 { padding-right: 0px; }.pl-4 { padding-right: 1rem; }.pr-10 { padding-left: 2.5rem; }.pl-5 { padding-right: 1.25rem; }.pb-14 { padding-bottom: 3.5rem; }.pt-20 { padding-top: 5rem; }.pb-\[25\.375rem\] { padding-bottom: 25.375rem; }.pb-\[0\.1875rem\] { padding-bottom: 0.1875rem; }.pt-6 { padding-top: 1.5rem; }.pb-4 { padding-bottom: 1rem; }.pb-3 { padding-bottom: 0.75rem; }.pb-7 { padding-bottom: 1.75rem; }.pl-6 { padding-right: 1.5rem; }.pb-2\.5 { padding-bottom: 0.625rem; }.text-left { text-align: right; }.text-center { text-align: center; }.align-top { vertical-align: top; }.align-middle { vertical-align: middle; }.align-text-bottom { vertical-align: text-bottom; }.text-lg { font-size: 1.125rem; line-height: 1.75rem; }.text-sm { font-size: 0.875rem; line-height: 1.25rem; }.text-xs { font-size: 0.75rem; line-height: 1rem; }.text-\[0\.625rem\] { font-size: 0.625rem; }.text-2xl { font-size: 1.5rem; line-height: 2rem; }.text-base { font-size: 1rem; line-height: 1.5rem; }.text-xl { font-size: 1.25rem; line-height: 1.75rem; }.text-4xl { font-size: 2.25rem; line-height: 2.5rem; }.text-\[1em\] { font-size: 1em; }.text-\[2rem\] { font-size: 2rem; }.text-\[10px\] { font-size: 10px; }.text-\[0\.75rem\] { font-size: 0.75rem; }.font-medium { font-weight: 500; }.font-semibold { font-weight: 600; }.uppercase { text-transform: uppercase; }.capitalize { text-transform: capitalize; }.leading-\[0\.875rem\] { line-height: 0.875rem; }.leading-6 { line-height: 1.5rem; }.leading-\[1\.375rem\] { line-height: 1.375rem; }.leading-\[1rem\] { line-height: 1rem; }.leading-7 { line-height: 1.75rem; }.leading-4 { line-height: 1rem; }.leading-\[1\.625rem\] { line-height: 1.625rem; }.leading-5 { line-height: 1.25rem; }.leading-8 { line-height: 2rem; }.leading-\[1em\] { line-height: 1em; }.leading-10 { line-height: 2.5rem; }.leading-\[0\.0625rem\] { line-height: 0.0625rem; }.leading-\[10px\] { line-height: 10px; }.leading-none { line-height: 1; }.leading-\[0\.7rem\] { line-height: 0.7rem; }.tracking-\[0\.0125rem\] { letter-spacing: 0.0125rem; }.text-gray-900 { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity)); }.text-gray-400 { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity)); }.text-astra { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.text-gray-500 { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); }.text-slate-800 { --tw-text-opacity: 1; color: rgb(30 41 59 / var(--tw-text-opacity)); }.text-slate-500 { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity)); }.text-slate-600 { --tw-text-opacity: 1; color: rgb(71 85 105 / var(--tw-text-opacity)); }.text-slate-400 { --tw-text-opacity: 1; color: rgb(148 163 184 / var(--tw-text-opacity)); }.text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }.text-green-400 { --tw-text-opacity: 1; color: rgb(74 222 128 / var(--tw-text-opacity)); }.text-\[\#4AB866\] { --tw-text-opacity: 1; color: rgb(74 184 102 / var(--tw-text-opacity)); }.text-\[\#475569\] { --tw-text-opacity: 1; color: rgb(71 85 105 / var(--tw-text-opacity)); }.text-\[\#CBD5E1\] { --tw-text-opacity: 1; color: rgb(203 213 225 / var(--tw-text-opacity)); }.text-gray-50 { --tw-text-opacity: 1; color: rgb(249 250 251 / var(--tw-text-opacity)); }.no-underline { -webkit-text-decoration-line: none; text-decoration-line: none; }.opacity-0 { opacity: 0; }.opacity-100 { opacity: 1; }.opacity-25 { opacity: 0.25; }.opacity-75 { opacity: 0.75; }.opacity-40 { opacity: 0.4; }.opacity-30 { opacity: 0.3; }.shadow-overlay-left { --tw-shadow: -16px 0px 80px -24px rgba(0, 0, 0, 0.16); --tw-shadow-colored: -16px 0px 80px -24px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-xl { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow { --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-overlay-modal { --tw-shadow: 0px 32px 64px -24px rgba(0, 0, 0, 0.24); --tw-shadow-colored: 0px 32px 64px -24px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-sm { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-overlay-light { --tw-shadow: 0px 2px 4px -2px rgba(16, 24, 40, 0.06); --tw-shadow-colored: 0px 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.ring-1 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); }.ring-0 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); }.ring-black { --tw-ring-opacity: 1; --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity)); }.ring-opacity-5 { --tw-ring-opacity: 0.05; }.blur-md { --tw-blur: blur(12px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }.blur-sm { --tw-blur: blur(4px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }.filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }.transition { transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.transition-colors { transition-property: color, background-color, border-color, fill, stroke, -webkit-text-decoration-color; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, -webkit-text-decoration-color; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.duration-150 { transition-duration: 150ms; }.duration-300 { transition-duration: 300ms; }.duration-200 { transition-duration: 200ms; }.duration-100 { transition-duration: 100ms; }.ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }.ease-out { transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }.ease-in { transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }:root{--accent-color: #2271b1;--accent-hv-color: #0a4b78;--background-light-color: #f0f0f1;--heading-color: #1d2327;--content-color: #3c434a;--link-color: #2271b1;--link-hv-color: #0a4b78;--metabox-background-color: #fff}.wp-admin{overflow-y:scroll}#wpbody-content>.notice,#wpbody-content>.error{display:none !important}.ast-menu-page-wrapper,.ast-menu-page-wrapper *{box-sizing:border-box}.ast-menu-page-wrapper a:focus,.ast-menu-page-wrapper button:focus,.ast-menu-page-wrapper input:focus{box-shadow:none;outline:none}.toplevel_page_astra #wpcontent{padding-right:0}#wpwrap{background-color:#f8fafc}#wpwrap .astra-admin__input-field{color:#64748b;background-color:#fff;border:1px solid #e2e8f0;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.25rem}#wpwrap .astra-admin__input-field:focus{outline:none;border-color:#94a3b8;box-shadow:none}#wpwrap .astra-admin__input-field:focus+.astra-admin__input-field--end-display{border-color:#94a3b8;box-shadow:none}#wpwrap .astra-admin__dropdown{padding-left:2rem}#wpwrap .astra-admin__dropdown:hover{color:#2c3338}#wpwrap .astra-admin__block-label{box-sizing:content-box}.astra-dep-field-false{pointer-events:none;opacity:.4}.ast-menu-page-wrapper,.ast-kb-section{font-family:Inter,sans-serif}.astra-video-container{position:relative;width:100%;padding-bottom:56.25%}.astra-video-container .astra-video{position:absolute;top:0;right:0;width:100%;height:100%;border:0}.astra-icon-transition svg,.astra-icon-transition path{transition-property:stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.astra-changelog-description strong{font-weight:500;font-size:.875rem;line-height:1.25rem;color:#1e293b}.astra-changelog-description ul{margin-top:.25rem;margin-bottom:.75rem}.astra-changelog-description ul:last-child{margin-top:0}.astra-changelog-description li{font-weight:400;font-size:.75rem;line-height:1rem;color:#64748b}.ast-welcome-screen .ast-licensing-wrap{padding-right:2rem;padding-left:2rem}.ast-kb-inner-wrap .ast-box-shadow-none{box-shadow:none}.ast-kb-inner-wrap .ast-docs-search-fields{padding:9px 0;padding-right:2.875rem;border:1px solid #cbd5e1;box-shadow:0px 1px 2px rgba(0,0,0,.05);border-radius:6px;line-height:1.625rem}.ast-docs-search-fields[type=search]::-webkit-search-cancel-button{height:1em;width:1em;font-size:2em;opacity:0;position:absolute;right:1rem;pointer-events:all;z-index:999}.astra-changelog-description *{margin-bottom:15px;line-height:1.8}[dir=rtl] .astra-dashboard-app button.bg-astra[aria-checked=false] span{left:0}.translate-x-5.toggle-bubble{--tw-translate-x: 1.02rem}[dir=rtl] .astra-dashboard-app button.bg-astra[aria-checked=true] .toggle-bubble{transform:translateX(-18px)}.ab-top-menu img,#adminmenumain img{display:initial;vertical-align:initial}#wpfooter,#wpbody-content{background:#fff}.ast-admin-settings-page #wpfooter,.ast-admin-settings-page #wpbody-content{background:inherit}div.shadow-overlay-modal{--tw-shadow: 0px 32px 60px -20px rgba(0, 0, 0, 0.5);--tw-shadow-colored: 0px 32px 64px -24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--tw-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--tw-shadow)}.ast-footer-thankyou a{color:#2271b1;text-decoration:underline}@media(max-width: 781px){div.ast-changelog-popup-wrap{margin-top:46px}div .tablet\:w-full{width:100%}div .tablet\:my-2{margin-top:.5rem;margin-bottom:.5rem}div .tablet\:my-4{margin-top:1rem;margin-bottom:1rem}div .tablet\:my-16{margin-top:4rem;margin-bottom:4rem}div .tablet\:block{display:block}div .tablet\:mr-2{margin-left:.5rem}div .-tablet\:mt\:10{margin-top:-2.5rem}div .tablet\:none{display:none}}@media(max-width: 600px){.ast-kb-section{margin-top:20px}.ast-kb-inner-wrap{padding:0}.ast-kb-caret{align-items:flex-start}.ast-kb-caret svg{margin-top:3px}}:root{--heading-font-family: "Inter";--heading-font-style: normal;--heading-weight-500: 500;--heading-weight-400: 400;--heading-font-size: 18px;--heading-line-height: 24px}.shadow-focused:focus.shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05) !important}.shadow-focused:focus.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1) !important}.shadow-focused:focus.shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1) !important}.shadow-focused:focus.shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1) !important}.shadow-focused:focus.shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1) !important}.shadow-focused:focus.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25) !important}.shadow-focused:focus.shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05) !important}.hover\:border-gray-300:hover { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity)); }.hover\:border-slate-300:hover { --tw-border-opacity: 1; border-color: rgb(203 213 225 / var(--tw-border-opacity)); }.hover\:border-slate-200:hover { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity)); }.hover\:bg-astra-hover:hover { --tw-bg-opacity: 1; background-color: rgb(4 92 180 / var(--tw-bg-opacity)); }.hover\:bg-gray-50:hover { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); }.hover\:bg-indigo-50:hover { --tw-bg-opacity: 1; background-color: rgb(238 242 255 / var(--tw-bg-opacity)); }.hover\:bg-\[\#F8FAFC\]:hover { --tw-bg-opacity: 1; background-color: rgb(248 250 252 / var(--tw-bg-opacity)); }.hover\:fill-astra:hover { fill: #046BD2; }.hover\:fill-slate-900:hover { fill: #0f172a; }.hover\:stroke-astra:hover { stroke: #046BD2; }.hover\:stroke-slate-900:hover { stroke: #0f172a; }.hover\:text-gray-500:hover { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); }.hover\:text-gray-700:hover { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity)); }.hover\:text-astra-hover:hover { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.hover\:text-slate-800:hover { --tw-text-opacity: 1; color: rgb(30 41 59 / var(--tw-text-opacity)); }.hover\:text-slate-900:hover { --tw-text-opacity: 1; color: rgb(15 23 42 / var(--tw-text-opacity)); }.hover\:text-white:hover { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }.hover\:text-astra:hover { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.hover\:shadow-hover:hover { --tw-shadow: 0px 12px 24px -12px rgba(0, 0, 0, 0.12); --tw-shadow-colored: 0px 12px 24px -12px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.hover\:shadow-md:hover { --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.focus\:z-10:focus { z-index: 10; }.focus\:border-slate-200:focus { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity)); }.focus\:bg-astra-hover:focus { --tw-bg-opacity: 1; background-color: rgb(4 92 180 / var(--tw-bg-opacity)); }.focus\:bg-indigo-50:focus { --tw-bg-opacity: 1; background-color: rgb(238 242 255 / var(--tw-bg-opacity)); }.focus\:fill-astra:focus { fill: #046BD2; }.focus\:fill-slate-900:focus { fill: #0f172a; }.focus\:stroke-astra:focus { stroke: #046BD2; }.focus\:stroke-slate-900:focus { stroke: #0f172a; }.focus\:text-astra:focus { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.focus\:text-astra-hover:focus { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.focus\:text-slate-900:focus { --tw-text-opacity: 1; color: rgb(15 23 42 / var(--tw-text-opacity)); }.focus\:text-white:focus { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }.focus\:text-slate-500:focus { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity)); }.focus\:text-slate-400:focus { --tw-text-opacity: 1; color: rgb(148 163 184 / var(--tw-text-opacity)); }.focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; }.focus\:outline-0:focus { outline-width: 0px; }.focus\:ring-2:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); }.focus\:ring-indigo-500:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); }.focus\:ring-astra-hover:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(4 92 180 / var(--tw-ring-opacity)); }.focus\:ring-astra:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(4 107 210 / var(--tw-ring-opacity)); }.focus\:ring-offset-2:focus { --tw-ring-offset-width: 2px; }.focus-visible\:border-slate-300:focus-visible { --tw-border-opacity: 1; border-color: rgb(203 213 225 / var(--tw-border-opacity)); }.focus-visible\:bg-astra-hover:focus-visible { --tw-bg-opacity: 1; background-color: rgb(4 92 180 / var(--tw-bg-opacity)); }.focus-visible\:text-astra-hover:focus-visible { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.focus-visible\:text-slate-800:focus-visible { --tw-text-opacity: 1; color: rgb(30 41 59 / var(--tw-text-opacity)); }.focus-visible\:text-astra:focus-visible { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.focus-visible\:text-slate-500:focus-visible { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity)); }.active\:text-astra:active { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.active\:text-astra-hover:active { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.active\:text-white:active { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }.active\:text-slate-500:active { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity)); }.group:hover .group-hover\:visible { visibility: visible; }.group:hover .group-hover\:text-astra-hover { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.group:hover .group-hover\:text-slate-300 { --tw-text-opacity: 1; color: rgb(203 213 225 / var(--tw-text-opacity)); }.group:hover .group-hover\:opacity-100 { opacity: 1; }@media (min-width: 640px) { .sm\:static { position: static; } .sm\:inset-auto { top: auto; left: auto; bottom: auto; right: auto; } .sm\:inset-0 { top: 0px; left: 0px; bottom: 0px; right: 0px; } .sm\:top-0 { top: 0px; } .sm\:-mx-6 { margin-right: -1.5rem; margin-left: -1.5rem; } .sm\:mx-\[4\.5rem\] { margin-right: 4.5rem; margin-left: 4.5rem; } .sm\:mt-\[2rem\] { margin-top: 2rem; } .sm\:ml-8 { margin-right: 2rem; } .sm\:mb-0 { margin-bottom: 0px; } .sm\:mr-3 { margin-left: 0.75rem; } .sm\:ml-2 { margin-right: 0.5rem; } .sm\:ml-6 { margin-right: 1.5rem; } .sm\:mt-5 { margin-top: 1.25rem; } .sm\:mt-0 { margin-top: 0px; } .sm\:mt-6 { margin-top: 1.5rem; } .sm\:flex { display: flex; } .sm\:inline-flex { display: inline-flex; } .sm\:h-10 { height: 2.5rem; } .sm\:w-10 { width: 2.5rem; } .sm\:w-auto { width: auto; } .sm\:max-w-5xl { max-width: 64rem; } .sm\:translate-y-0 { --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:translate-x-2 { --tw-translate-x: 0.5rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:translate-x-0 { --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:scale-95 { --tw-scale-x: .95; --tw-scale-y: .95; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:scale-100 { --tw-scale-x: 1; --tw-scale-y: 1; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sm\:flex-row { flex-direction: row; } .sm\:items-start { align-items: flex-start; } .sm\:items-end { align-items: flex-end; } .sm\:items-center { align-items: center; } .sm\:items-stretch { align-items: stretch; } .sm\:justify-start { justify-content: flex-start; } .sm\:justify-center { justify-content: center; } .sm\:justify-between { justify-content: space-between; } .sm\:p-0 { padding: 0px; } .sm\:p-6 { padding: 1.5rem; } .sm\:px-6 { padding-right: 1.5rem; padding-left: 1.5rem; } .sm\:px-8 { padding-right: 2rem; padding-left: 2rem; } .sm\:pr-0 { padding-left: 0px; } .sm\:pl-3 { padding-right: 0.75rem; } .sm\:pl-8 { padding-right: 2rem; } .sm\:text-sm { font-size: 0.875rem; line-height: 1.25rem; } .sm\:text-2xl { font-size: 1.5rem; line-height: 2rem; } .sm\:text-\[2\.5rem\] { font-size: 2.5rem; } .sm\:leading-\[0\.875rem\] { line-height: 0.875rem; } .sm\:duration-150 { transition-duration: 150ms; } .sm\:duration-300 { transition-duration: 300ms; } }@media (min-width: 768px) { .md\:mr-\[5\.25rem\] { margin-left: 5.25rem; } .md\:h-\[19rem\] { height: 19rem; } .md\:w-9\/12 { width: 75%; } .md\:w-\[34rem\] { width: 34rem; } .md\:rounded-lg { border-radius: 0.5rem; } .md\:px-6 { padding-right: 1.5rem; padding-left: 1.5rem; } }@media (min-width: 1024px) { .lg\:inset-y-0 { top: 0px; bottom: 0px; } .lg\:col-span-9 { grid-column: span 9 / span 9; } .lg\:col-span-3 { grid-column: span 3 / span 3; } .lg\:col-span-2 { grid-column: span 2 / span 2; } .lg\:-mx-8 { margin-right: -2rem; margin-left: -2rem; } .lg\:ml-40 { margin-right: 10rem; } .lg\:ml-6 { margin-right: 1.5rem; } .lg\:block { display: block; } .lg\:flex { display: flex; } .lg\:grid { display: grid; } .lg\:h-16 { height: 4rem; } .lg\:h-\[34rem\] { height: 34rem; } .lg\:w-2\/3 { width: 66.666667%; } .lg\:w-1\/3 { width: 33.333333%; } .lg\:w-\[60rem\] { width: 60rem; } .lg\:max-w-full { max-width: 100%; } .lg\:max-w-7xl { max-width: 80rem; } .lg\:max-w-\[80rem\] { max-width: 80rem; } .lg\:flex-1 { flex: 1 1 0%; } .lg\:flex-shrink-0 { flex-shrink: 0; } .lg\:grid-cols-12 { grid-template-columns: repeat(12, minmax(0, 1fr)); } .lg\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .lg\:flex-row { flex-direction: row; } .lg\:items-center { align-items: center; } .lg\:justify-between { justify-content: space-between; } .lg\:gap-0 { gap: 0px; } .lg\:gap-\[32px\] { gap: 32px; } .lg\:p-0 { padding: 0px; } .lg\:py-0 { padding-top: 0px; padding-bottom: 0px; } .lg\:px-0 { padding-right: 0px; padding-left: 0px; } .lg\:px-8 { padding-right: 2rem; padding-left: 2rem; } .lg\:py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; } .lg\:px-5 { padding-right: 1.25rem; padding-left: 1.25rem; } }@media (min-width: 1280px) { .xl\:gap-0 { gap: 0px; } .xl\:gap-\[32px\] { gap: 32px; } }@media (max-width: 782px) { .tablet\:my-16 { margin-top: 4rem; margin-bottom: 4rem; } .tablet\:w-full { width: 100%; } .tablet\:pr-2 { padding-left: 0.5rem; } } .ast-skeleton-base{display:block}.ast-skeleton{height:1.2em;display:block;background-color:rgba(0,0,0,.11)}.ast-skeleton-pulse{animation:ast-skeleton-keyframes-pulse 1.5s ease-in-out .5s infinite}@keyframes ast-skeleton-keyframes-pulse{0%{opacity:1}50%{opacity:.4}100%{opacity:1}}.ast-skeleton--wave{overflow:hidden;position:relative}.ast-skeleton--wave::after{top:0;right:0;left:0;bottom:0;content:"";position:absolute;animation:ast-skeleton-keyframes-wave 1.6s linear .5s infinite;transform:translateX(100%);background:linear-gradient(-90deg, transparent, rgba(0, 0, 0, 0.04), transparent)}@keyframes ast-skeleton-keyframes-wave{0%{transform:translateX(100%)}60%{transform:translateX(-100%)}100%{transform:translateX(-100%)}} @keyframes shine-lines{0%{background-position:-100px}40%,100%{background-position:340px}} .ast-skeleton--text{height:auto;transform:scale(1, 0.6);margin-top:0;border-radius:4px;margin-bottom:0;transform-origin:100% 60%;font-size:12px;line-height:1.5em}.ast-skeleton--text:empty::before{content:" "} .ast-skeleton--spacer{height:25px} .ast-skeleton--rect{height:20px} assets/build/dashboard-app.asset.php 0000644 00000000221 15150276715 0013505 0 ustar 00 <?php return array('dependencies' => array('react', 'react-dom', 'wp-api-fetch', 'wp-element', 'wp-i18n'), 'version' => '9cdaa515f54a60c6cc67'); assets/build/dashboard-app.css 0000644 00000157712 15150276715 0012412 0 ustar 00 /* ! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com *//* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ *, ::before, ::after { box-sizing: border-box; /* 1 */ border-width: 0; /* 2 */ border-style: solid; /* 2 */ border-color: #e5e7eb; /* 2 */ } ::before, ::after { --tw-content: ''; } /* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. */ html { line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -moz-tab-size: 4; /* 3 */ -o-tab-size: 4; tab-size: 4; /* 3 */ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */ } /* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ body { margin: 0; /* 1 */ line-height: inherit; /* 2 */ } /* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ hr { height: 0; /* 1 */ color: inherit; /* 2 */ border-top-width: 1px; /* 3 */ } /* Add the correct text decoration in Chrome, Edge, and Safari. */ abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } /* Remove the default font size and weight for headings. */ h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } /* Reset links to optimize for opt-in styling instead of opt-out. */ a { color: inherit; text-decoration: inherit; } /* Add the correct font weight in Edge and Safari. */ b, strong { font-weight: bolder; } /* 1. Use the user's configured `mono` font family by default. 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ font-size: 1em; /* 2 */ } /* Add the correct font size in all browsers. */ small { font-size: 80%; } /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ table { text-indent: 0; /* 1 */ border-color: inherit; /* 2 */ border-collapse: collapse; /* 3 */ } /* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 1 */ font-weight: inherit; /* 1 */ line-height: inherit; /* 1 */ color: inherit; /* 1 */ margin: 0; /* 2 */ padding: 0; /* 3 */ } /* Remove the inheritance of text transform in Edge and Firefox. */ button, select { text-transform: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ button, [type='button'], [type='reset'], [type='submit'] { -webkit-appearance: button; /* 1 */ background-color: transparent; /* 2 */ background-image: none; /* 2 */ } /* Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { outline: auto; } /* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ :-moz-ui-invalid { box-shadow: none; } /* Add the correct vertical alignment in Chrome and Firefox. */ progress { vertical-align: baseline; } /* Correct the cursor style of increment and decrement buttons in Safari. */ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } /* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /* Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { -webkit-appearance: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Add the correct display in Chrome and Safari. */ summary { display: list-item; } /* Removes the default spacing and border for appropriate elements. */ blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0; } fieldset { margin: 0; padding: 0; } legend { padding: 0; } ol, ul, menu { list-style: none; margin: 0; padding: 0; } /* Prevent resizing textareas horizontally by default. */ textarea { resize: vertical; } /* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } /* Set the default cursor for buttons. */ button, [role="button"] { cursor: pointer; } /* Make sure disabled buttons don't get the pointer cursor. */ :disabled { cursor: default; } /* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ img, svg, video, canvas, audio, iframe, embed, object { display: block; /* 1 */ vertical-align: middle; /* 2 */ } /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ img, video { max-width: 100%; height: auto; } [type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: #fff; border-color: #6b7280; border-width: 1px; border-radius: 0px; padding-top: 0.5rem; padding-right: 0.75rem; padding-bottom: 0.5rem; padding-left: 0.75rem; font-size: 1rem; line-height: 1.5rem; --tw-shadow: 0 0 #0000; } [type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus { outline: 2px solid transparent; outline-offset: 2px; --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: #2563eb; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); border-color: #2563eb; } input::-moz-placeholder, textarea::-moz-placeholder { color: #6b7280; opacity: 1; } input::placeholder,textarea::placeholder { color: #6b7280; opacity: 1; } ::-webkit-datetime-edit-fields-wrapper { padding: 0; } ::-webkit-date-and-time-value { min-height: 1.5em; } ::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field { padding-top: 0; padding-bottom: 0; } select { background-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27none%27 viewBox=%270 0 20 20%27%3e%3cpath stroke=%27%236b7280%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%271.5%27 d=%27M6 8l4 4 4-4%27/%3e%3c/svg%3e"); background-position: right 0.5rem center; background-repeat: no-repeat; background-size: 1.5em 1.5em; padding-right: 2.5rem; -webkit-print-color-adjust: exact; color-adjust: exact; } [multiple] { background-image: initial; background-position: initial; background-repeat: unset; background-size: initial; padding-right: 0.75rem; -webkit-print-color-adjust: unset; color-adjust: unset; } [type='checkbox'],[type='radio'] { -webkit-appearance: none; -moz-appearance: none; appearance: none; padding: 0; -webkit-print-color-adjust: exact; color-adjust: exact; display: inline-block; vertical-align: middle; background-origin: border-box; -webkit-user-select: none; -moz-user-select: none; user-select: none; flex-shrink: 0; height: 1rem; width: 1rem; color: #2563eb; background-color: #fff; border-color: #6b7280; border-width: 1px; --tw-shadow: 0 0 #0000; } [type='checkbox'] { border-radius: 0px; } [type='radio'] { border-radius: 100%; } [type='checkbox']:focus,[type='radio']:focus { outline: 2px solid transparent; outline-offset: 2px; --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); --tw-ring-offset-width: 2px; --tw-ring-offset-color: #fff; --tw-ring-color: #2563eb; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } [type='checkbox']:checked,[type='radio']:checked { border-color: transparent; background-color: currentColor; background-size: 100% 100%; background-position: center; background-repeat: no-repeat; } [type='checkbox']:checked { background-image: url("data:image/svg+xml,%3csvg viewBox=%270 0 16 16%27 fill=%27white%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3cpath d=%27M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z%27/%3e%3c/svg%3e"); } [type='radio']:checked { background-image: url("data:image/svg+xml,%3csvg viewBox=%270 0 16 16%27 fill=%27white%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3ccircle cx=%278%27 cy=%278%27 r=%273%27/%3e%3c/svg%3e"); } [type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { border-color: transparent; background-color: currentColor; } [type='checkbox']:indeterminate { background-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27none%27 viewBox=%270 0 16 16%27%3e%3cpath stroke=%27white%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%272%27 d=%27M4 8h8%27/%3e%3c/svg%3e"); border-color: transparent; background-color: currentColor; background-size: 100% 100%; background-position: center; background-repeat: no-repeat; } [type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { border-color: transparent; background-color: currentColor; } [type='file'] { background: unset; border-color: inherit; border-width: 0; border-radius: 0; padding: 0; font-size: unset; line-height: inherit; } [type='file']:focus { outline: 1px auto -webkit-focus-ring-color; } *, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; } ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; }.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; }.pointer-events-none { pointer-events: none; }.pointer-events-auto { pointer-events: auto; }.invisible { visibility: hidden; }.fixed { position: fixed; }.absolute { position: absolute; }.relative { position: relative; }.inset-0 { top: 0px; right: 0px; bottom: 0px; left: 0px; }.inset-10 { top: 2.5rem; right: 2.5rem; bottom: 2.5rem; left: 2.5rem; }.inset-3 { top: 0.75rem; right: 0.75rem; bottom: 0.75rem; left: 0.75rem; }.inset-y-0 { top: 0px; bottom: 0px; }.right-0 { right: 0px; }.top-8 { top: 2rem; }.bottom-2 { bottom: 0.5rem; }.top-1\/2 { top: 50%; }.left-4 { left: 1rem; }.top-7 { top: 1.75rem; }.right-6 { right: 1.5rem; }.top-4 { top: 1rem; }.right-4 { right: 1rem; }.left-0 { left: 0px; }.top-0 { top: 0px; }.top-\[150\%\] { top: 150%; }.-top-\[2\.8rem\] { top: -2.8rem; }.right-2\.5 { right: 0.625rem; }.-top-\[1\.75rem\] { top: -1.75rem; }.right-2 { right: 0.5rem; }.z-50 { z-index: 50; }.z-10 { z-index: 10; }.z-0 { z-index: 0; }.z-\[10000\] { z-index: 10000; }.m-auto { margin: auto; }.m-0 { margin: 0px; }.mx-auto { margin-left: auto; margin-right: auto; }.-my-2 { margin-top: -0.5rem; margin-bottom: -0.5rem; }.-mx-4 { margin-left: -1rem; margin-right: -1rem; }.my-\[2\.43rem\] { margin-top: 2.43rem; margin-bottom: 2.43rem; }.mx-0 { margin-left: 0px; margin-right: 0px; }.-mb-px { margin-bottom: -1px; }.mb-1 { margin-bottom: 0.25rem; }.mt-3 { margin-top: 0.75rem; }.ml-4 { margin-left: 1rem; }.mb-4 { margin-bottom: 1rem; }.ml-auto { margin-left: auto; }.mr-1 { margin-right: 0.25rem; }.ml-1 { margin-left: 0.25rem; }.mr-8 { margin-right: 2rem; }.ml-3 { margin-left: 0.75rem; }.mt-2 { margin-top: 0.5rem; }.mt-5 { margin-top: 1.25rem; }.mt-4 { margin-top: 1rem; }.mr-3 { margin-right: 0.75rem; }.mb-5 { margin-bottom: 1.25rem; }.mb-8 { margin-bottom: 2rem; }.mt-10 { margin-top: 2.5rem; }.mr-2 { margin-right: 0.5rem; }.ml-2 { margin-left: 0.5rem; }.mb-1\.5 { margin-bottom: 0.375rem; }.mb-3 { margin-bottom: 0.75rem; }.mt-8 { margin-top: 2rem; }.mt-6 { margin-top: 1.5rem; }.mb-7 { margin-bottom: 1.75rem; }.-mr-1 { margin-right: -0.25rem; }.mr-16 { margin-right: 4rem; }.mr-4 { margin-right: 1rem; }.mb-2 { margin-bottom: 0.5rem; }.mt-7 { margin-top: 1.75rem; }.mt-12 { margin-top: 3rem; }.mt-16 { margin-top: 4rem; }.mt-20 { margin-top: 5rem; }.mb-6 { margin-bottom: 1.5rem; }.mt-\[0\.1875rem\] { margin-top: 0.1875rem; }.-ml-px { margin-left: -1px; }.ml-1\.5 { margin-left: 0.375rem; }.ml-8 { margin-left: 2rem; }.mr-auto { margin-right: auto; }.-mt-1 { margin-top: -0.25rem; }.ml-2\.5 { margin-left: 0.625rem; }.mt-\[32px\] { margin-top: 32px; }.box-border { box-sizing: border-box; }.block { display: block; }.inline-block { display: inline-block; }.flex { display: flex; }.inline-flex { display: inline-flex; }.table { display: table; }.grid { display: grid; }.h-8 { height: 2rem; }.h-full { height: 100%; }.h-16 { height: 4rem; }.h-6 { height: 1.5rem; }.h-28 { height: 7rem; }.h-\[2\.6rem\] { height: 2.6rem; }.h-5 { height: 1.25rem; }.h-max { height: -moz-max-content; height: max-content; }.h-4 { height: 1rem; }.h-\[36rem\] { height: 36rem; }.h-9 { height: 2.25rem; }.h-20 { height: 5rem; }.h-fit { height: -moz-fit-content; height: fit-content; }.h-2 { height: 0.5rem; }.h-\[14rem\] { height: 14rem; }.max-h-4 { max-height: 1rem; }.min-h-screen { min-height: 100vh; }.min-h-\[36rem\] { min-height: 36rem; }.min-h-full { min-height: 100%; }.w-8 { width: 2rem; }.w-screen { width: 100vw; }.w-6 { width: 1.5rem; }.w-full { width: 100%; }.w-auto { width: auto; }.w-0 { width: 0px; }.w-5 { width: 1.25rem; }.w-9 { width: 2.25rem; }.w-9\/12 { width: 75%; }.w-11\/12 { width: 91.666667%; }.w-\[35\%\] { width: 35%; }.w-\[45\%\] { width: 45%; }.w-fit { width: -moz-fit-content; width: fit-content; }.w-max { width: -moz-max-content; width: max-content; }.w-2 { width: 0.5rem; }.w-\[24rem\] { width: 24rem; }.min-w-full { min-width: 100%; }.min-w-0 { min-width: 0px; }.max-w-full { max-width: 100%; }.max-w-md { max-width: 28rem; }.max-w-3xl { max-width: 48rem; }.max-w-sm { max-width: 24rem; }.max-w-\[39rem\] { max-width: 39rem; }.max-w-5xl { max-width: 64rem; }.max-w-2xl { max-width: 42rem; }.max-w-\[80rem\] { max-width: 80rem; }.max-w-\[45rem\] { max-width: 45rem; }.max-w-\[17\.125rem\] { max-width: 17.125rem; }.flex-1 { flex: 1 1 0%; }.flex-shrink-0 { flex-shrink: 0; }.translate-x-full { --tw-translate-x: 100%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-x-0 { --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-y-4 { --tw-translate-y: 1rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-y-0 { --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-y-2 { --tw-translate-y: 0.5rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.-translate-y-1\/2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.translate-x-5 { --tw-translate-x: 1.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.rotate-0 { --tw-rotate: 0deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.-rotate-90 { --tw-rotate: -90deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.rotate-45 { --tw-rotate: 45deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }.transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); }@keyframes spin { to { transform: rotate(360deg); } }.animate-spin { animation: spin 1s linear infinite; }.cursor-pointer { cursor: pointer; }.snap-start { scroll-snap-align: start; }.grid-flow-row { grid-auto-flow: row; }.auto-rows-min { grid-auto-rows: min-content; }.grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }.grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }.flex-row { flex-direction: row; }.flex-col { flex-direction: column; }.items-start { align-items: flex-start; }.items-end { align-items: flex-end; }.items-center { align-items: center; }.justify-start { justify-content: flex-start; }.justify-center { justify-content: center; }.justify-between { justify-content: space-between; }.gap-3 { gap: 0.75rem; }.gap-8 { gap: 2rem; }.gap-12 { gap: 3rem; }.gap-4 { gap: 1rem; }.gap-\[32px\] { gap: 32px; }.gap-y-4 { row-gap: 1rem; }.gap-x-8 { -moz-column-gap: 2rem; column-gap: 2rem; }.gap-x-4 { -moz-column-gap: 1rem; column-gap: 1rem; }.space-x-8 > :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-right: calc(2rem * var(--tw-space-x-reverse)); margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); }.space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); }.space-y-1 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); }.space-x-3 > :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-right: calc(0.75rem * var(--tw-space-x-reverse)); margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); }.divide-y > :not([hidden]) ~ :not([hidden]) { --tw-divide-y-reverse: 0; border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); }.divide-x > :not([hidden]) ~ :not([hidden]) { --tw-divide-x-reverse: 0; border-right-width: calc(1px * var(--tw-divide-x-reverse)); border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse))); }.divide-gray-200 > :not([hidden]) ~ :not([hidden]) { --tw-divide-opacity: 1; border-color: rgb(229 231 235 / var(--tw-divide-opacity)); }.divide-slate-200 > :not([hidden]) ~ :not([hidden]) { --tw-divide-opacity: 1; border-color: rgb(226 232 240 / var(--tw-divide-opacity)); }.self-start { align-self: flex-start; }.self-center { align-self: center; }.overflow-hidden { overflow: hidden; }.overflow-x-auto { overflow-x: auto; }.overflow-y-auto { overflow-y: auto; }.truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.whitespace-nowrap { white-space: nowrap; }.rounded-full { border-radius: 9999px; }.rounded-md { border-radius: 0.375rem; }.rounded-\[0\.2rem\] { border-radius: 0.2rem; }.rounded-\[0\.1875rem\] { border-radius: 0.1875rem; }.rounded-lg { border-radius: 0.5rem; }.rounded { border-radius: 0.25rem; }.rounded-sm { border-radius: 0.125rem; }.rounded-l-md { border-top-left-radius: 0.375rem; border-bottom-left-radius: 0.375rem; }.rounded-r-md { border-top-right-radius: 0.375rem; border-bottom-right-radius: 0.375rem; }.border { border-width: 1px; }.border-0 { border-width: 0px; }.border-b { border-bottom-width: 1px; }.border-b-2 { border-bottom-width: 2px; }.border-r { border-right-width: 1px; }.border-t { border-top-width: 1px; }.border-l { border-left-width: 1px; }.border-l-4 { border-left-width: 4px; }.border-solid { border-style: solid; }.border-slate-200 { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity)); }.border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity)); }.border-astra { --tw-border-opacity: 1; border-color: rgb(4 107 210 / var(--tw-border-opacity)); }.border-transparent { border-color: transparent; }.border-slate-400 { --tw-border-opacity: 1; border-color: rgb(148 163 184 / var(--tw-border-opacity)); }.border-slate-800 { --tw-border-opacity: 1; border-color: rgb(30 41 59 / var(--tw-border-opacity)); }.border-sky-500 { --tw-border-opacity: 1; border-color: rgb(14 165 233 / var(--tw-border-opacity)); }.border-white { --tw-border-opacity: 1; border-color: rgb(255 255 255 / var(--tw-border-opacity)); }.border-blue-50 { --tw-border-opacity: 1; border-color: rgb(239 246 255 / var(--tw-border-opacity)); }.border-t-slate-200 { --tw-border-opacity: 1; border-top-color: rgb(226 232 240 / var(--tw-border-opacity)); }.bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); }.bg-slate-800 { --tw-bg-opacity: 1; background-color: rgb(30 41 59 / var(--tw-bg-opacity)); }.bg-astra { --tw-bg-opacity: 1; background-color: rgb(4 107 210 / var(--tw-bg-opacity)); }.bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); }.bg-blue-50 { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity)); }.bg-slate-200 { --tw-bg-opacity: 1; background-color: rgb(226 232 240 / var(--tw-bg-opacity)); }.bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity)); }.bg-slate-50 { --tw-bg-opacity: 1; background-color: rgb(248 250 252 / var(--tw-bg-opacity)); }.bg-opacity-90 { --tw-bg-opacity: 0.9; }.fill-astra { fill: #046BD2; }.fill-slate-800 { fill: #1e293b; }.stroke-astra { stroke: #046BD2; }.stroke-slate-800 { stroke: #1e293b; }.stroke-inherit { stroke: inherit; }.p-4 { padding: 1rem; }.p-8 { padding: 2rem; }.p-6 { padding: 1.5rem; }.p-2 { padding: 0.5rem; }.p-0 { padding: 0px; }.p-\[2rem\] { padding: 2rem; }.px-4 { padding-left: 1rem; padding-right: 1rem; }.px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }.py-4 { padding-top: 1rem; padding-bottom: 1rem; }.px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }.py-5 { padding-top: 1.25rem; padding-bottom: 1.25rem; }.px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }.py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }.py-\[0rem\] { padding-top: 0rem; padding-bottom: 0rem; }.px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; }.py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; }.px-\[2\.9375rem\] { padding-left: 2.9375rem; padding-right: 2.9375rem; }.py-\[0\.6875rem\] { padding-top: 0.6875rem; padding-bottom: 0.6875rem; }.py-\[2\.43rem\] { padding-top: 2.43rem; padding-bottom: 2.43rem; }.py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }.py-3\.5 { padding-top: 0.875rem; padding-bottom: 0.875rem; }.py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; }.px-8 { padding-left: 2rem; padding-right: 2rem; }.py-8 { padding-top: 2rem; padding-bottom: 2rem; }.px-0 { padding-left: 0px; padding-right: 0px; }.py-\[0\.5625rem\] { padding-top: 0.5625rem; padding-bottom: 0.5625rem; }.px-\[0\.8125rem\] { padding-left: 0.8125rem; padding-right: 0.8125rem; }.px-5 { padding-left: 1.25rem; padding-right: 1.25rem; }.py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }.px-2\.5 { padding-left: 0.625rem; padding-right: 0.625rem; }.py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; }.px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }.py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; }.py-0 { padding-top: 0px; padding-bottom: 0px; }.pl-10 { padding-left: 2.5rem; }.pr-2 { padding-right: 0.5rem; }.pr-3 { padding-right: 0.75rem; }.pl-1 { padding-left: 0.25rem; }.pl-3 { padding-left: 0.75rem; }.pt-0\.5 { padding-top: 0.125rem; }.pt-0 { padding-top: 0px; }.pt-\[4rem\] { padding-top: 4rem; }.pb-\[17\.5rem\] { padding-bottom: 17.5rem; }.pt-10 { padding-top: 2.5rem; }.pb-2 { padding-bottom: 0.5rem; }.pb-5 { padding-bottom: 1.25rem; }.pr-12 { padding-right: 3rem; }.pl-0 { padding-left: 0px; }.pl-4 { padding-left: 1rem; }.pr-10 { padding-right: 2.5rem; }.pl-5 { padding-left: 1.25rem; }.pb-14 { padding-bottom: 3.5rem; }.pt-20 { padding-top: 5rem; }.pb-\[25\.375rem\] { padding-bottom: 25.375rem; }.pb-\[0\.1875rem\] { padding-bottom: 0.1875rem; }.pt-6 { padding-top: 1.5rem; }.pb-4 { padding-bottom: 1rem; }.pb-3 { padding-bottom: 0.75rem; }.pb-7 { padding-bottom: 1.75rem; }.pl-6 { padding-left: 1.5rem; }.pb-2\.5 { padding-bottom: 0.625rem; }.text-left { text-align: left; }.text-center { text-align: center; }.align-top { vertical-align: top; }.align-middle { vertical-align: middle; }.align-text-bottom { vertical-align: text-bottom; }.text-lg { font-size: 1.125rem; line-height: 1.75rem; }.text-sm { font-size: 0.875rem; line-height: 1.25rem; }.text-xs { font-size: 0.75rem; line-height: 1rem; }.text-\[0\.625rem\] { font-size: 0.625rem; }.text-2xl { font-size: 1.5rem; line-height: 2rem; }.text-base { font-size: 1rem; line-height: 1.5rem; }.text-xl { font-size: 1.25rem; line-height: 1.75rem; }.text-4xl { font-size: 2.25rem; line-height: 2.5rem; }.text-\[1em\] { font-size: 1em; }.text-\[2rem\] { font-size: 2rem; }.text-\[10px\] { font-size: 10px; }.text-\[0\.75rem\] { font-size: 0.75rem; }.font-medium { font-weight: 500; }.font-semibold { font-weight: 600; }.uppercase { text-transform: uppercase; }.capitalize { text-transform: capitalize; }.leading-\[0\.875rem\] { line-height: 0.875rem; }.leading-6 { line-height: 1.5rem; }.leading-\[1\.375rem\] { line-height: 1.375rem; }.leading-\[1rem\] { line-height: 1rem; }.leading-7 { line-height: 1.75rem; }.leading-4 { line-height: 1rem; }.leading-\[1\.625rem\] { line-height: 1.625rem; }.leading-5 { line-height: 1.25rem; }.leading-8 { line-height: 2rem; }.leading-\[1em\] { line-height: 1em; }.leading-10 { line-height: 2.5rem; }.leading-\[0\.0625rem\] { line-height: 0.0625rem; }.leading-\[10px\] { line-height: 10px; }.leading-none { line-height: 1; }.leading-\[0\.7rem\] { line-height: 0.7rem; }.tracking-\[0\.0125rem\] { letter-spacing: 0.0125rem; }.text-gray-900 { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity)); }.text-gray-400 { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity)); }.text-astra { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.text-gray-500 { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); }.text-slate-800 { --tw-text-opacity: 1; color: rgb(30 41 59 / var(--tw-text-opacity)); }.text-slate-500 { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity)); }.text-slate-600 { --tw-text-opacity: 1; color: rgb(71 85 105 / var(--tw-text-opacity)); }.text-slate-400 { --tw-text-opacity: 1; color: rgb(148 163 184 / var(--tw-text-opacity)); }.text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }.text-green-400 { --tw-text-opacity: 1; color: rgb(74 222 128 / var(--tw-text-opacity)); }.text-\[\#4AB866\] { --tw-text-opacity: 1; color: rgb(74 184 102 / var(--tw-text-opacity)); }.text-\[\#475569\] { --tw-text-opacity: 1; color: rgb(71 85 105 / var(--tw-text-opacity)); }.text-\[\#CBD5E1\] { --tw-text-opacity: 1; color: rgb(203 213 225 / var(--tw-text-opacity)); }.text-gray-50 { --tw-text-opacity: 1; color: rgb(249 250 251 / var(--tw-text-opacity)); }.no-underline { -webkit-text-decoration-line: none; text-decoration-line: none; }.opacity-0 { opacity: 0; }.opacity-100 { opacity: 1; }.opacity-25 { opacity: 0.25; }.opacity-75 { opacity: 0.75; }.opacity-40 { opacity: 0.4; }.opacity-30 { opacity: 0.3; }.shadow-overlay-left { --tw-shadow: -16px 0px 80px -24px rgba(0, 0, 0, 0.16); --tw-shadow-colored: -16px 0px 80px -24px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-xl { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow { --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-overlay-modal { --tw-shadow: 0px 32px 64px -24px rgba(0, 0, 0, 0.24); --tw-shadow-colored: 0px 32px 64px -24px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-sm { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.shadow-overlay-light { --tw-shadow: 0px 2px 4px -2px rgba(16, 24, 40, 0.06); --tw-shadow-colored: 0px 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.ring-1 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); }.ring-0 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); }.ring-black { --tw-ring-opacity: 1; --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity)); }.ring-opacity-5 { --tw-ring-opacity: 0.05; }.blur-md { --tw-blur: blur(12px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }.blur-sm { --tw-blur: blur(4px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }.filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); }.transition { transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.transition-colors { transition-property: color, background-color, border-color, fill, stroke, -webkit-text-decoration-color; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, -webkit-text-decoration-color; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }.duration-150 { transition-duration: 150ms; }.duration-300 { transition-duration: 300ms; }.duration-200 { transition-duration: 200ms; }.duration-100 { transition-duration: 100ms; }.ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }.ease-out { transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }.ease-in { transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }:root{--accent-color: #2271b1;--accent-hv-color: #0a4b78;--background-light-color: #f0f0f1;--heading-color: #1d2327;--content-color: #3c434a;--link-color: #2271b1;--link-hv-color: #0a4b78;--metabox-background-color: #fff}.wp-admin{overflow-y:scroll}#wpbody-content>.notice,#wpbody-content>.error{display:none !important}.ast-menu-page-wrapper,.ast-menu-page-wrapper *{box-sizing:border-box}.ast-menu-page-wrapper a:focus,.ast-menu-page-wrapper button:focus,.ast-menu-page-wrapper input:focus{box-shadow:none;outline:none}.toplevel_page_astra #wpcontent{padding-left:0}#wpwrap{background-color:#f8fafc}#wpwrap .astra-admin__input-field{color:#64748b;background-color:#fff;border:1px solid #e2e8f0;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.25rem}#wpwrap .astra-admin__input-field:focus{outline:none;border-color:#94a3b8;box-shadow:none}#wpwrap .astra-admin__input-field:focus+.astra-admin__input-field--end-display{border-color:#94a3b8;box-shadow:none}#wpwrap .astra-admin__dropdown{padding-right:2rem}#wpwrap .astra-admin__dropdown:hover{color:#2c3338}#wpwrap .astra-admin__block-label{box-sizing:content-box}.astra-dep-field-false{pointer-events:none;opacity:.4}.ast-menu-page-wrapper,.ast-kb-section{font-family:Inter,sans-serif}.astra-video-container{position:relative;width:100%;padding-bottom:56.25%}.astra-video-container .astra-video{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.astra-icon-transition svg,.astra-icon-transition path{transition-property:stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.astra-changelog-description strong{font-weight:500;font-size:.875rem;line-height:1.25rem;color:#1e293b}.astra-changelog-description ul{margin-top:.25rem;margin-bottom:.75rem}.astra-changelog-description ul:last-child{margin-top:0}.astra-changelog-description li{font-weight:400;font-size:.75rem;line-height:1rem;color:#64748b}.ast-welcome-screen .ast-licensing-wrap{padding-left:2rem;padding-right:2rem}.ast-kb-inner-wrap .ast-box-shadow-none{box-shadow:none}.ast-kb-inner-wrap .ast-docs-search-fields{padding:9px 0;padding-left:2.875rem;border:1px solid #cbd5e1;box-shadow:0px 1px 2px rgba(0,0,0,.05);border-radius:6px;line-height:1.625rem}.ast-docs-search-fields[type=search]::-webkit-search-cancel-button{height:1em;width:1em;font-size:2em;opacity:0;position:absolute;left:1rem;pointer-events:all;z-index:999}.astra-changelog-description *{margin-bottom:15px;line-height:1.8}[dir=rtl] .astra-dashboard-app button.bg-astra[aria-checked=false] span{right:0}.translate-x-5.toggle-bubble{--tw-translate-x: 1.02rem}[dir=rtl] .astra-dashboard-app button.bg-astra[aria-checked=true] .toggle-bubble{transform:translateX(18px)}.ab-top-menu img,#adminmenumain img{display:initial;vertical-align:initial}#wpfooter,#wpbody-content{background:#fff}.ast-admin-settings-page #wpfooter,.ast-admin-settings-page #wpbody-content{background:inherit}div.shadow-overlay-modal{--tw-shadow: 0px 32px 60px -20px rgba(0, 0, 0, 0.5);--tw-shadow-colored: 0px 32px 64px -24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--tw-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--tw-shadow)}.ast-footer-thankyou a{color:#2271b1;text-decoration:underline}@media(max-width: 781px){div.ast-changelog-popup-wrap{margin-top:46px}div .tablet\:w-full{width:100%}div .tablet\:my-2{margin-top:.5rem;margin-bottom:.5rem}div .tablet\:my-4{margin-top:1rem;margin-bottom:1rem}div .tablet\:my-16{margin-top:4rem;margin-bottom:4rem}div .tablet\:block{display:block}div .tablet\:mr-2{margin-right:.5rem}div .-tablet\:mt\:10{margin-top:-2.5rem}div .tablet\:none{display:none}}@media(max-width: 600px){.ast-kb-section{margin-top:20px}.ast-kb-inner-wrap{padding:0}.ast-kb-caret{align-items:flex-start}.ast-kb-caret svg{margin-top:3px}}:root{--heading-font-family: "Inter";--heading-font-style: normal;--heading-weight-500: 500;--heading-weight-400: 400;--heading-font-size: 18px;--heading-line-height: 24px}.shadow-focused:focus.shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05) !important}.shadow-focused:focus.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1) !important}.shadow-focused:focus.shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1) !important}.shadow-focused:focus.shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1) !important}.shadow-focused:focus.shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1) !important}.shadow-focused:focus.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25) !important}.shadow-focused:focus.shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05) !important}.hover\:border-gray-300:hover { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity)); }.hover\:border-slate-300:hover { --tw-border-opacity: 1; border-color: rgb(203 213 225 / var(--tw-border-opacity)); }.hover\:border-slate-200:hover { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity)); }.hover\:bg-astra-hover:hover { --tw-bg-opacity: 1; background-color: rgb(4 92 180 / var(--tw-bg-opacity)); }.hover\:bg-gray-50:hover { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); }.hover\:bg-indigo-50:hover { --tw-bg-opacity: 1; background-color: rgb(238 242 255 / var(--tw-bg-opacity)); }.hover\:bg-\[\#F8FAFC\]:hover { --tw-bg-opacity: 1; background-color: rgb(248 250 252 / var(--tw-bg-opacity)); }.hover\:fill-astra:hover { fill: #046BD2; }.hover\:fill-slate-900:hover { fill: #0f172a; }.hover\:stroke-astra:hover { stroke: #046BD2; }.hover\:stroke-slate-900:hover { stroke: #0f172a; }.hover\:text-gray-500:hover { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); }.hover\:text-gray-700:hover { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity)); }.hover\:text-astra-hover:hover { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.hover\:text-slate-800:hover { --tw-text-opacity: 1; color: rgb(30 41 59 / var(--tw-text-opacity)); }.hover\:text-slate-900:hover { --tw-text-opacity: 1; color: rgb(15 23 42 / var(--tw-text-opacity)); }.hover\:text-white:hover { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }.hover\:text-astra:hover { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.hover\:shadow-hover:hover { --tw-shadow: 0px 12px 24px -12px rgba(0, 0, 0, 0.12); --tw-shadow-colored: 0px 12px 24px -12px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.hover\:shadow-md:hover { --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); }.focus\:z-10:focus { z-index: 10; }.focus\:border-slate-200:focus { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity)); }.focus\:bg-astra-hover:focus { --tw-bg-opacity: 1; background-color: rgb(4 92 180 / var(--tw-bg-opacity)); }.focus\:bg-indigo-50:focus { --tw-bg-opacity: 1; background-color: rgb(238 242 255 / var(--tw-bg-opacity)); }.focus\:fill-astra:focus { fill: #046BD2; }.focus\:fill-slate-900:focus { fill: #0f172a; }.focus\:stroke-astra:focus { stroke: #046BD2; }.focus\:stroke-slate-900:focus { stroke: #0f172a; }.focus\:text-astra:focus { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.focus\:text-astra-hover:focus { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.focus\:text-slate-900:focus { --tw-text-opacity: 1; color: rgb(15 23 42 / var(--tw-text-opacity)); }.focus\:text-white:focus { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }.focus\:text-slate-500:focus { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity)); }.focus\:text-slate-400:focus { --tw-text-opacity: 1; color: rgb(148 163 184 / var(--tw-text-opacity)); }.focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; }.focus\:outline-0:focus { outline-width: 0px; }.focus\:ring-2:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); }.focus\:ring-indigo-500:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); }.focus\:ring-astra-hover:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(4 92 180 / var(--tw-ring-opacity)); }.focus\:ring-astra:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(4 107 210 / var(--tw-ring-opacity)); }.focus\:ring-offset-2:focus { --tw-ring-offset-width: 2px; }.focus-visible\:border-slate-300:focus-visible { --tw-border-opacity: 1; border-color: rgb(203 213 225 / var(--tw-border-opacity)); }.focus-visible\:bg-astra-hover:focus-visible { --tw-bg-opacity: 1; background-color: rgb(4 92 180 / var(--tw-bg-opacity)); }.focus-visible\:text-astra-hover:focus-visible { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.focus-visible\:text-slate-800:focus-visible { --tw-text-opacity: 1; color: rgb(30 41 59 / var(--tw-text-opacity)); }.focus-visible\:text-astra:focus-visible { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.focus-visible\:text-slate-500:focus-visible { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity)); }.active\:text-astra:active { --tw-text-opacity: 1; color: rgb(4 107 210 / var(--tw-text-opacity)); }.active\:text-astra-hover:active { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.active\:text-white:active { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); }.active\:text-slate-500:active { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity)); }.group:hover .group-hover\:visible { visibility: visible; }.group:hover .group-hover\:text-astra-hover { --tw-text-opacity: 1; color: rgb(4 92 180 / var(--tw-text-opacity)); }.group:hover .group-hover\:text-slate-300 { --tw-text-opacity: 1; color: rgb(203 213 225 / var(--tw-text-opacity)); }.group:hover .group-hover\:opacity-100 { opacity: 1; }@media (min-width: 640px) { .sm\:static { position: static; } .sm\:inset-auto { top: auto; right: auto; bottom: auto; left: auto; } .sm\:inset-0 { top: 0px; right: 0px; bottom: 0px; left: 0px; } .sm\:top-0 { top: 0px; } .sm\:-mx-6 { margin-left: -1.5rem; margin-right: -1.5rem; } .sm\:mx-\[4\.5rem\] { margin-left: 4.5rem; margin-right: 4.5rem; } .sm\:mt-\[2rem\] { margin-top: 2rem; } .sm\:ml-8 { margin-left: 2rem; } .sm\:mb-0 { margin-bottom: 0px; } .sm\:mr-3 { margin-right: 0.75rem; } .sm\:ml-2 { margin-left: 0.5rem; } .sm\:ml-6 { margin-left: 1.5rem; } .sm\:mt-5 { margin-top: 1.25rem; } .sm\:mt-0 { margin-top: 0px; } .sm\:mt-6 { margin-top: 1.5rem; } .sm\:flex { display: flex; } .sm\:inline-flex { display: inline-flex; } .sm\:h-10 { height: 2.5rem; } .sm\:w-10 { width: 2.5rem; } .sm\:w-auto { width: auto; } .sm\:max-w-5xl { max-width: 64rem; } .sm\:translate-y-0 { --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:translate-x-2 { --tw-translate-x: 0.5rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:translate-x-0 { --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:scale-95 { --tw-scale-x: .95; --tw-scale-y: .95; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:scale-100 { --tw-scale-x: 1; --tw-scale-y: 1; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .sm\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sm\:flex-row { flex-direction: row; } .sm\:items-start { align-items: flex-start; } .sm\:items-end { align-items: flex-end; } .sm\:items-center { align-items: center; } .sm\:items-stretch { align-items: stretch; } .sm\:justify-start { justify-content: flex-start; } .sm\:justify-center { justify-content: center; } .sm\:justify-between { justify-content: space-between; } .sm\:p-0 { padding: 0px; } .sm\:p-6 { padding: 1.5rem; } .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } .sm\:px-8 { padding-left: 2rem; padding-right: 2rem; } .sm\:pr-0 { padding-right: 0px; } .sm\:pl-3 { padding-left: 0.75rem; } .sm\:pl-8 { padding-left: 2rem; } .sm\:text-sm { font-size: 0.875rem; line-height: 1.25rem; } .sm\:text-2xl { font-size: 1.5rem; line-height: 2rem; } .sm\:text-\[2\.5rem\] { font-size: 2.5rem; } .sm\:leading-\[0\.875rem\] { line-height: 0.875rem; } .sm\:duration-150 { transition-duration: 150ms; } .sm\:duration-300 { transition-duration: 300ms; } }@media (min-width: 768px) { .md\:mr-\[5\.25rem\] { margin-right: 5.25rem; } .md\:h-\[19rem\] { height: 19rem; } .md\:w-9\/12 { width: 75%; } .md\:w-\[34rem\] { width: 34rem; } .md\:rounded-lg { border-radius: 0.5rem; } .md\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } }@media (min-width: 1024px) { .lg\:inset-y-0 { top: 0px; bottom: 0px; } .lg\:col-span-9 { grid-column: span 9 / span 9; } .lg\:col-span-3 { grid-column: span 3 / span 3; } .lg\:col-span-2 { grid-column: span 2 / span 2; } .lg\:-mx-8 { margin-left: -2rem; margin-right: -2rem; } .lg\:ml-40 { margin-left: 10rem; } .lg\:ml-6 { margin-left: 1.5rem; } .lg\:block { display: block; } .lg\:flex { display: flex; } .lg\:grid { display: grid; } .lg\:h-16 { height: 4rem; } .lg\:h-\[34rem\] { height: 34rem; } .lg\:w-2\/3 { width: 66.666667%; } .lg\:w-1\/3 { width: 33.333333%; } .lg\:w-\[60rem\] { width: 60rem; } .lg\:max-w-full { max-width: 100%; } .lg\:max-w-7xl { max-width: 80rem; } .lg\:max-w-\[80rem\] { max-width: 80rem; } .lg\:flex-1 { flex: 1 1 0%; } .lg\:flex-shrink-0 { flex-shrink: 0; } .lg\:grid-cols-12 { grid-template-columns: repeat(12, minmax(0, 1fr)); } .lg\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .lg\:flex-row { flex-direction: row; } .lg\:items-center { align-items: center; } .lg\:justify-between { justify-content: space-between; } .lg\:gap-0 { gap: 0px; } .lg\:gap-\[32px\] { gap: 32px; } .lg\:p-0 { padding: 0px; } .lg\:py-0 { padding-top: 0px; padding-bottom: 0px; } .lg\:px-0 { padding-left: 0px; padding-right: 0px; } .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; } .lg\:py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; } .lg\:px-5 { padding-left: 1.25rem; padding-right: 1.25rem; } }@media (min-width: 1280px) { .xl\:gap-0 { gap: 0px; } .xl\:gap-\[32px\] { gap: 32px; } }@media (max-width: 782px) { .tablet\:my-16 { margin-top: 4rem; margin-bottom: 4rem; } .tablet\:w-full { width: 100%; } .tablet\:pr-2 { padding-right: 0.5rem; } } .ast-skeleton-base{display:block}.ast-skeleton{height:1.2em;display:block;background-color:rgba(0,0,0,.11)}.ast-skeleton-pulse{animation:ast-skeleton-keyframes-pulse 1.5s ease-in-out .5s infinite}@keyframes ast-skeleton-keyframes-pulse{0%{opacity:1}50%{opacity:.4}100%{opacity:1}}.ast-skeleton--wave{overflow:hidden;position:relative}.ast-skeleton--wave::after{top:0;left:0;right:0;bottom:0;content:"";position:absolute;animation:ast-skeleton-keyframes-wave 1.6s linear .5s infinite;transform:translateX(-100%);background:linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.04), transparent)}@keyframes ast-skeleton-keyframes-wave{0%{transform:translateX(-100%)}60%{transform:translateX(100%)}100%{transform:translateX(100%)}} @keyframes shine-lines{0%{background-position:-100px}40%,100%{background-position:340px}} .ast-skeleton--text{height:auto;transform:scale(1, 0.6);margin-top:0;border-radius:4px;margin-bottom:0;transform-origin:0 60%;font-size:12px;line-height:1.5em}.ast-skeleton--text:empty::before{content:" "} .ast-skeleton--spacer{height:25px} .ast-skeleton--rect{height:20px} assets/build/dashboard-app.js 0000644 00004164513 15150276715 0012237 0 ustar 00 !function(){var t={6738:function(){window.astWpMenuClassChange=function(t){const e=astra_admin.home_slug;let n="admin.php?page="+e;"custom-layouts"===t?n="admin.php?page="+e+"&path=custom-layouts":"spectra"===t&&(n="admin.php?page="+e+"&path=spectra"),document.querySelector("body").classList.remove("ast-admin-settings-page"),"settings"===t&&document.querySelector("body").classList.add("ast-admin-settings-page");const r=`.wp-submenu-wrap li > a[href$="${n}"]`,a=document.querySelectorAll(r);Array.from(document.getElementsByClassName("current")).forEach((function(t){t.parentElement.classList.contains("wp-submenu")&&t.classList.remove("current")})),Array.from(a).forEach((function(t){t.parentElement.classList.add("current")}))}},9742:function(t,e){"use strict";e.byteLength=function(t){var e=l(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){var e,n,i=l(t),s=i[0],o=i[1],u=new a(function(t,e,n){return 3*(e+n)/4-n}(0,s,o)),c=0,d=o>0?s-4:s;for(n=0;n<d;n+=4)e=r[t.charCodeAt(n)]<<18|r[t.charCodeAt(n+1)]<<12|r[t.charCodeAt(n+2)]<<6|r[t.charCodeAt(n+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===o&&(e=r[t.charCodeAt(n)]<<2|r[t.charCodeAt(n+1)]>>4,u[c++]=255&e),1===o&&(e=r[t.charCodeAt(n)]<<10|r[t.charCodeAt(n+1)]<<4|r[t.charCodeAt(n+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,r=t.length,a=r%3,i=[],s=16383,o=0,l=r-a;o<l;o+=s)i.push(u(t,o,o+s>l?l:o+s));return 1===a?(e=t[r-1],i.push(n[e>>2]+n[e<<4&63]+"==")):2===a&&(e=(t[r-2]<<8)+t[r-1],i.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"=")),i.join("")};for(var n=[],r=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,o=i.length;s<o;++s)n[s]=i[s],r[i.charCodeAt(s)]=s;function l(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function u(t,e,r){for(var a,i,s=[],o=e;o<r;o+=3)a=(t[o]<<16&16711680)+(t[o+1]<<8&65280)+(255&t[o+2]),s.push(n[(i=a)>>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return s.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},8764:function(t,e,n){"use strict";var r=n(9742),a=n(645),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=l,e.SlowBuffer=function(t){return+t!=t&&(t=0),l.alloc(+t)},e.INSPECT_MAX_BYTES=50;var s=2147483647;function o(t){if(t>s)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,l.prototype),e}function l(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return d(t)}return u(t,e,n)}function u(t,e,n){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!l.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var n=0|m(t,e),r=o(n),a=r.write(t,e);return a!==n&&(r=r.slice(0,a)),r}(t,e);if(ArrayBuffer.isView(t))return function(t){if(D(t,Uint8Array)){var e=new Uint8Array(t);return p(e.buffer,e.byteOffset,e.byteLength)}return f(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(D(t,ArrayBuffer)||t&&D(t.buffer,ArrayBuffer))return p(t,e,n);if("undefined"!=typeof SharedArrayBuffer&&(D(t,SharedArrayBuffer)||t&&D(t.buffer,SharedArrayBuffer)))return p(t,e,n);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var r=t.valueOf&&t.valueOf();if(null!=r&&r!==t)return l.from(r,e,n);var a=function(t){if(l.isBuffer(t)){var e=0|v(t.length),n=o(e);return 0===n.length||t.copy(n,0,0,e),n}return void 0!==t.length?"number"!=typeof t.length||Z(t.length)?o(0):f(t):"Buffer"===t.type&&Array.isArray(t.data)?f(t.data):void 0}(t);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return l.from(t[Symbol.toPrimitive]("string"),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function c(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function d(t){return c(t),o(t<0?0:0|v(t))}function f(t){for(var e=t.length<0?0:0|v(t.length),n=o(e),r=0;r<e;r+=1)n[r]=255&t[r];return n}function p(t,e,n){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(n||0))throw new RangeError('"length" is outside of buffer bounds');var r;return r=void 0===e&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,e):new Uint8Array(t,e,n),Object.setPrototypeOf(r,l.prototype),r}function v(t){if(t>=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|t}function m(t,e){if(l.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||D(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var n=t.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;for(var a=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return j(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return S(t).length;default:if(a)return r?-1:j(t).length;e=(""+e).toLowerCase(),a=!0}}function h(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,n);case"utf8":case"utf-8":return L(this,e,n);case"ascii":return z(this,e,n);case"latin1":case"binary":return N(this,e,n);case"base64":return R(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function A(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function b(t,e,n,r,a){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),Z(n=+n)&&(n=a?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(a)return-1;n=t.length-1}else if(n<0){if(!a)return-1;n=0}if("string"==typeof e&&(e=l.from(e,r)),l.isBuffer(e))return 0===e.length?-1:g(t,e,n,r,a);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):g(t,[e],n,r,a);throw new TypeError("val must be string, number or Buffer")}function g(t,e,n,r,a){var i,s=1,o=t.length,l=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;s=2,o/=2,l/=2,n/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(a){var c=-1;for(i=n;i<o;i++)if(u(t,i)===u(e,-1===c?0:i-c)){if(-1===c&&(c=i),i-c+1===l)return c*s}else-1!==c&&(i-=i-c),c=-1}else for(n+l>o&&(n=o-l),i=n;i>=0;i--){for(var d=!0,f=0;f<l;f++)if(u(t,i+f)!==u(e,f)){d=!1;break}if(d)return i}return-1}function y(t,e,n,r){n=Number(n)||0;var a=t.length-n;r?(r=Number(r))>a&&(r=a):r=a;var i=e.length;r>i/2&&(r=i/2);for(var s=0;s<r;++s){var o=parseInt(e.substr(2*s,2),16);if(Z(o))return s;t[n+s]=o}return s}function x(t,e,n,r){return H(j(e,t.length-n),t,n,r)}function w(t,e,n,r){return H(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,r)}function E(t,e,n,r){return H(S(e),t,n,r)}function X(t,e,n,r){return H(function(t,e){for(var n,r,a,i=[],s=0;s<t.length&&!((e-=2)<0);++s)r=(n=t.charCodeAt(s))>>8,a=n%256,i.push(a),i.push(r);return i}(e,t.length-n),t,n,r)}function R(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function L(t,e,n){n=Math.min(t.length,n);for(var r=[],a=e;a<n;){var i,s,o,l,u=t[a],c=null,d=u>239?4:u>223?3:u>191?2:1;if(a+d<=n)switch(d){case 1:u<128&&(c=u);break;case 2:128==(192&(i=t[a+1]))&&(l=(31&u)<<6|63&i)>127&&(c=l);break;case 3:i=t[a+1],s=t[a+2],128==(192&i)&&128==(192&s)&&(l=(15&u)<<12|(63&i)<<6|63&s)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:i=t[a+1],s=t[a+2],o=t[a+3],128==(192&i)&&128==(192&s)&&128==(192&o)&&(l=(15&u)<<18|(63&i)<<12|(63&s)<<6|63&o)>65535&&l<1114112&&(c=l)}null===c?(c=65533,d=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),a+=d}return function(t){var e=t.length;if(e<=V)return String.fromCharCode.apply(String,t);for(var n="",r=0;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=V));return n}(r)}e.kMaxLength=s,l.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),l.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(l.prototype,"parent",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,"offset",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(t,e,n){return u(t,e,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(t,e,n){return function(t,e,n){return c(t),t<=0?o(t):void 0!==e?"string"==typeof n?o(t).fill(e,n):o(t).fill(e):o(t)}(t,e,n)},l.allocUnsafe=function(t){return d(t)},l.allocUnsafeSlow=function(t){return d(t)},l.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==l.prototype},l.compare=function(t,e){if(D(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),D(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(t)||!l.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var n=t.length,r=e.length,a=0,i=Math.min(n,r);a<i;++a)if(t[a]!==e[a]){n=t[a],r=e[a];break}return n<r?-1:r<n?1:0},l.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},l.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return l.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=l.allocUnsafe(e),a=0;for(n=0;n<t.length;++n){var i=t[n];if(D(i,Uint8Array))a+i.length>r.length?l.from(i).copy(r,a):Uint8Array.prototype.set.call(r,i,a);else{if(!l.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(r,a)}a+=i.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)A(this,e,e+1);return this},l.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)A(this,e,e+3),A(this,e+1,e+2);return this},l.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)A(this,e,e+7),A(this,e+1,e+6),A(this,e+2,e+5),A(this,e+3,e+4);return this},l.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?L(this,0,t):h.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(t){if(!l.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===l.compare(this,t)},l.prototype.inspect=function(){var t="",n=e.INSPECT_MAX_BYTES;return t=this.toString("hex",0,n).replace(/(.{2})/g,"$1 ").trim(),this.length>n&&(t+=" ... "),"<Buffer "+t+">"},i&&(l.prototype[i]=l.prototype.inspect),l.prototype.compare=function(t,e,n,r,a){if(D(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===a&&(a=this.length),e<0||n>t.length||r<0||a>this.length)throw new RangeError("out of range index");if(r>=a&&e>=n)return 0;if(r>=a)return-1;if(e>=n)return 1;if(this===t)return 0;for(var i=(a>>>=0)-(r>>>=0),s=(n>>>=0)-(e>>>=0),o=Math.min(i,s),u=this.slice(r,a),c=t.slice(e,n),d=0;d<o;++d)if(u[d]!==c[d]){i=u[d],s=c[d];break}return i<s?-1:s<i?1:0},l.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},l.prototype.indexOf=function(t,e,n){return b(this,t,e,n,!0)},l.prototype.lastIndexOf=function(t,e,n){return b(this,t,e,n,!1)},l.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var a=this.length-e;if((void 0===n||n>a)&&(n=a),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return y(this,t,e,n);case"utf8":case"utf-8":return x(this,t,e,n);case"ascii":case"latin1":case"binary":return w(this,t,e,n);case"base64":return E(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return X(this,t,e,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var V=4096;function z(t,e,n){var r="";n=Math.min(t.length,n);for(var a=e;a<n;++a)r+=String.fromCharCode(127&t[a]);return r}function N(t,e,n){var r="";n=Math.min(t.length,n);for(var a=e;a<n;++a)r+=String.fromCharCode(t[a]);return r}function P(t,e,n){var r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);for(var a="",i=e;i<n;++i)a+=M[t[i]];return a}function O(t,e,n){for(var r=t.slice(e,n),a="",i=0;i<r.length-1;i+=2)a+=String.fromCharCode(r[i]+256*r[i+1]);return a}function q(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function W(t,e,n,r,a,i){if(!l.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>a||e<i)throw new RangeError('"value" argument is out of bounds');if(n+r>t.length)throw new RangeError("Index out of range")}function T(t,e,n,r,a,i){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function C(t,e,n,r,i){return e=+e,n>>>=0,i||T(t,0,n,4),a.write(t,e,n,r,23,4),n+4}function I(t,e,n,r,i){return e=+e,n>>>=0,i||T(t,0,n,8),a.write(t,e,n,r,52,8),n+8}l.prototype.slice=function(t,e){var n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t);var r=this.subarray(t,e);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(t,e,n){t>>>=0,e>>>=0,n||q(t,e,this.length);for(var r=this[t],a=1,i=0;++i<e&&(a*=256);)r+=this[t+i]*a;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(t,e,n){t>>>=0,e>>>=0,n||q(t,e,this.length);for(var r=this[t+--e],a=1;e>0&&(a*=256);)r+=this[t+--e]*a;return r},l.prototype.readUint8=l.prototype.readUInt8=function(t,e){return t>>>=0,e||q(t,1,this.length),this[t]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(t,e){return t>>>=0,e||q(t,2,this.length),this[t]|this[t+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(t,e){return t>>>=0,e||q(t,2,this.length),this[t]<<8|this[t+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(t,e){return t>>>=0,e||q(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(t,e){return t>>>=0,e||q(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},l.prototype.readIntLE=function(t,e,n){t>>>=0,e>>>=0,n||q(t,e,this.length);for(var r=this[t],a=1,i=0;++i<e&&(a*=256);)r+=this[t+i]*a;return r>=(a*=128)&&(r-=Math.pow(2,8*e)),r},l.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||q(t,e,this.length);for(var r=e,a=1,i=this[t+--r];r>0&&(a*=256);)i+=this[t+--r]*a;return i>=(a*=128)&&(i-=Math.pow(2,8*e)),i},l.prototype.readInt8=function(t,e){return t>>>=0,e||q(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},l.prototype.readInt16LE=function(t,e){t>>>=0,e||q(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(t,e){t>>>=0,e||q(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(t,e){return t>>>=0,e||q(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},l.prototype.readInt32BE=function(t,e){return t>>>=0,e||q(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},l.prototype.readFloatLE=function(t,e){return t>>>=0,e||q(t,4,this.length),a.read(this,t,!0,23,4)},l.prototype.readFloatBE=function(t,e){return t>>>=0,e||q(t,4,this.length),a.read(this,t,!1,23,4)},l.prototype.readDoubleLE=function(t,e){return t>>>=0,e||q(t,8,this.length),a.read(this,t,!0,52,8)},l.prototype.readDoubleBE=function(t,e){return t>>>=0,e||q(t,8,this.length),a.read(this,t,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(t,e,n,r){t=+t,e>>>=0,n>>>=0,r||W(this,t,e,n,Math.pow(2,8*n)-1,0);var a=1,i=0;for(this[e]=255&t;++i<n&&(a*=256);)this[e+i]=t/a&255;return e+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=function(t,e,n,r){t=+t,e>>>=0,n>>>=0,r||W(this,t,e,n,Math.pow(2,8*n)-1,0);var a=n-1,i=1;for(this[e+a]=255&t;--a>=0&&(i*=256);)this[e+a]=t/i&255;return e+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,1,255,0),this[e]=255&t,e+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},l.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var a=Math.pow(2,8*n-1);W(this,t,e,n,a-1,-a)}var i=0,s=1,o=0;for(this[e]=255&t;++i<n&&(s*=256);)t<0&&0===o&&0!==this[e+i-1]&&(o=1),this[e+i]=(t/s>>0)-o&255;return e+n},l.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e>>>=0,!r){var a=Math.pow(2,8*n-1);W(this,t,e,n,a-1,-a)}var i=n-1,s=1,o=0;for(this[e+i]=255&t;--i>=0&&(s*=256);)t<0&&0===o&&0!==this[e+i+1]&&(o=1),this[e+i]=(t/s>>0)-o&255;return e+n},l.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},l.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},l.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},l.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},l.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||W(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},l.prototype.writeFloatLE=function(t,e,n){return C(this,t,e,!0,n)},l.prototype.writeFloatBE=function(t,e,n){return C(this,t,e,!1,n)},l.prototype.writeDoubleLE=function(t,e,n){return I(this,t,e,!0,n)},l.prototype.writeDoubleBE=function(t,e,n){return I(this,t,e,!1,n)},l.prototype.copy=function(t,e,n,r){if(!l.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var a=r-n;return this===t&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,n,r):Uint8Array.prototype.set.call(t,this.subarray(n,r),e),a},l.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!l.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===t.length){var a=t.charCodeAt(0);("utf8"===r&&a<128||"latin1"===r)&&(t=a)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var i;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(i=e;i<n;++i)this[i]=t;else{var s=l.isBuffer(t)?t:l.from(t,r),o=s.length;if(0===o)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(i=0;i<n-e;++i)this[i+e]=s[i%o]}return this};var F=/[^+/0-9A-Za-z-_]/g;function j(t,e){var n;e=e||1/0;for(var r=t.length,a=null,i=[],s=0;s<r;++s){if((n=t.charCodeAt(s))>55295&&n<57344){if(!a){if(n>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&i.push(239,191,189);continue}a=n;continue}if(n<56320){(e-=3)>-1&&i.push(239,191,189),a=n;continue}n=65536+(a-55296<<10|n-56320)}else a&&(e-=3)>-1&&i.push(239,191,189);if(a=null,n<128){if((e-=1)<0)break;i.push(n)}else if(n<2048){if((e-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function S(t){return r.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(F,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function H(t,e,n,r){for(var a=0;a<r&&!(a+n>=e.length||a>=t.length);++a)e[a+n]=t[a];return a}function D(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function Z(t){return t!=t}var M=function(){for(var t="0123456789abcdef",e=new Array(256),n=0;n<16;++n)for(var r=16*n,a=0;a<16;++a)e[r+a]=t[n]+t[a];return e}()},6138:function(t,e,n){var r=n(3850),a=n(3661),i=n(9933);i.elementNames.__proto__=null,i.attributeNames.__proto__=null;var s={__proto__:null,style:!0,script:!0,xmp:!0,iframe:!0,noembed:!0,noframes:!0,plaintext:!0,noscript:!0},o={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},l=t.exports=function(t,e){Array.isArray(t)||t.cheerio||(t=[t]),e=e||{};for(var n="",a=0;a<t.length;a++){var i=t[a];"root"===i.type?n+=l(i.children,e):r.isTag(i)?n+=c(i,e):i.type===r.Directive?n+=d(i):i.type===r.Comment?n+=v(i):i.type===r.CDATA?n+=p(i):n+=f(i,e)}return n},u=["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"];function c(t,e){"foreign"===e.xmlMode&&(t.name=i.elementNames[t.name]||t.name,t.parent&&u.indexOf(t.parent.name)>=0&&(e=Object.assign({},e,{xmlMode:!1}))),!e.xmlMode&&["svg","math"].indexOf(t.name)>=0&&(e=Object.assign({},e,{xmlMode:"foreign"}));var n="<"+t.name,r=function(t,e){if(t){var n,r="";for(var s in t)n=t[s],r&&(r+=" "),"foreign"===e.xmlMode&&(s=i.attributeNames[s]||s),r+=s,(null!==n&&""!==n||e.xmlMode)&&(r+='="'+(e.decodeEntities?a.encodeXML(n):n.replace(/\"/g,"""))+'"');return r}}(t.attribs,e);return r&&(n+=" "+r),!e.xmlMode||t.children&&0!==t.children.length?(n+=">",t.children&&(n+=l(t.children,e)),o[t.name]&&!e.xmlMode||(n+="</"+t.name+">")):n+="/>",n}function d(t){return"<"+t.data+">"}function f(t,e){var n=t.data||"";return!e.decodeEntities||t.parent&&t.parent.name in s||(n=a.encodeXML(n)),n}function p(t){return"<![CDATA["+t.children[0].data+"]]>"}function v(t){return"\x3c!--"+t.data+"--\x3e"}},3850:function(t,e){"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.Doctype=e.CDATA=e.Tag=e.Style=e.Script=e.Comment=e.Directive=e.Text=e.Root=e.isTag=e.ElementType=void 0,function(t){t.Root="root",t.Text="text",t.Directive="directive",t.Comment="comment",t.Script="script",t.Style="style",t.Tag="tag",t.CDATA="cdata",t.Doctype="doctype"}(n=e.ElementType||(e.ElementType={})),e.isTag=function(t){return t.type===n.Tag||t.type===n.Script||t.type===n.Style},e.Root=n.Root,e.Text=n.Text,e.Directive=n.Directive,e.Comment=n.Comment,e.Script=n.Script,e.Style=n.Style,e.Tag=n.Tag,e.CDATA=n.CDATA,e.Doctype=n.Doctype},901:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.decodeHTML=e.decodeHTMLStrict=e.decodeXML=void 0;var a=r(n(1363)),i=r(n(8611)),s=r(n(4204)),o=r(n(6312)),l=/&(?:[a-zA-Z0-9]+|#[xX][\da-fA-F]+|#\d+);/g;function u(t){var e=d(t);return function(t){return String(t).replace(l,e)}}e.decodeXML=u(s.default),e.decodeHTMLStrict=u(a.default);var c=function(t,e){return t<e?1:-1};function d(t){return function(e){if("#"===e.charAt(1)){var n=e.charAt(2);return"X"===n||"x"===n?o.default(parseInt(e.substr(3),16)):o.default(parseInt(e.substr(2),10))}return t[e.slice(1,-1)]||e}}e.decodeHTML=function(){for(var t=Object.keys(i.default).sort(c),e=Object.keys(a.default).sort(c),n=0,r=0;n<e.length;n++)t[r]===e[n]?(e[n]+=";?",r++):e[n]+=";";var s=new RegExp("&(?:"+e.join("|")+"|#[xX][\\da-fA-F]+;?|#\\d+;?)","g"),o=d(a.default);function l(t){return";"!==t.substr(-1)&&(t+=";"),o(t)}return function(t){return String(t).replace(s,l)}}()},6312:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=r(n(9451)),i=String.fromCodePoint||function(t){var e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+String.fromCharCode(t)};e.default=function(t){return t>=55296&&t<=57343||t>1114111?"�":(t in a.default&&(t=a.default[t]),i(t))}},5278:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.escapeUTF8=e.escape=e.encodeNonAsciiHTML=e.encodeHTML=e.encodeXML=void 0;var a=c(r(n(4204)).default),i=d(a);e.encodeXML=h(a);var s,o,l=c(r(n(1363)).default),u=d(l);function c(t){return Object.keys(t).sort().reduce((function(e,n){return e[t[n]]="&"+n+";",e}),{})}function d(t){for(var e=[],n=[],r=0,a=Object.keys(t);r<a.length;r++){var i=a[r];1===i.length?e.push("\\"+i):n.push(i)}e.sort();for(var s=0;s<e.length-1;s++){for(var o=s;o<e.length-1&&e[o].charCodeAt(1)+1===e[o+1].charCodeAt(1);)o+=1;var l=1+o-s;l<3||e.splice(s,l,e[s]+"-"+e[o])}return n.unshift("["+e.join("")+"]"),new RegExp(n.join("|"),"g")}e.encodeHTML=(s=l,o=u,function(t){return t.replace(o,(function(t){return s[t]})).replace(f,v)}),e.encodeNonAsciiHTML=h(l);var f=/(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g,p=null!=String.prototype.codePointAt?function(t){return t.codePointAt(0)}:function(t){return 1024*(t.charCodeAt(0)-55296)+t.charCodeAt(1)-56320+65536};function v(t){return"&#x"+(t.length>1?p(t):t.charCodeAt(0)).toString(16).toUpperCase()+";"}var m=new RegExp(i.source+"|"+f.source,"g");function h(t){return function(e){return e.replace(m,(function(e){return t[e]||v(e)}))}}e.escape=function(t){return t.replace(m,v)},e.escapeUTF8=function(t){return t.replace(i,v)}},3661:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decodeXMLStrict=e.decodeHTML5Strict=e.decodeHTML4Strict=e.decodeHTML5=e.decodeHTML4=e.decodeHTMLStrict=e.decodeHTML=e.decodeXML=e.encodeHTML5=e.encodeHTML4=e.escapeUTF8=e.escape=e.encodeNonAsciiHTML=e.encodeHTML=e.encodeXML=e.encode=e.decodeStrict=e.decode=void 0;var r=n(901),a=n(5278);e.decode=function(t,e){return(!e||e<=0?r.decodeXML:r.decodeHTML)(t)},e.decodeStrict=function(t,e){return(!e||e<=0?r.decodeXML:r.decodeHTMLStrict)(t)},e.encode=function(t,e){return(!e||e<=0?a.encodeXML:a.encodeHTML)(t)};var i=n(5278);Object.defineProperty(e,"encodeXML",{enumerable:!0,get:function(){return i.encodeXML}}),Object.defineProperty(e,"encodeHTML",{enumerable:!0,get:function(){return i.encodeHTML}}),Object.defineProperty(e,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return i.encodeNonAsciiHTML}}),Object.defineProperty(e,"escape",{enumerable:!0,get:function(){return i.escape}}),Object.defineProperty(e,"escapeUTF8",{enumerable:!0,get:function(){return i.escapeUTF8}}),Object.defineProperty(e,"encodeHTML4",{enumerable:!0,get:function(){return i.encodeHTML}}),Object.defineProperty(e,"encodeHTML5",{enumerable:!0,get:function(){return i.encodeHTML}});var s=n(901);Object.defineProperty(e,"decodeXML",{enumerable:!0,get:function(){return s.decodeXML}}),Object.defineProperty(e,"decodeHTML",{enumerable:!0,get:function(){return s.decodeHTML}}),Object.defineProperty(e,"decodeHTMLStrict",{enumerable:!0,get:function(){return s.decodeHTMLStrict}}),Object.defineProperty(e,"decodeHTML4",{enumerable:!0,get:function(){return s.decodeHTML}}),Object.defineProperty(e,"decodeHTML5",{enumerable:!0,get:function(){return s.decodeHTML}}),Object.defineProperty(e,"decodeHTML4Strict",{enumerable:!0,get:function(){return s.decodeHTMLStrict}}),Object.defineProperty(e,"decodeHTML5Strict",{enumerable:!0,get:function(){return s.decodeHTMLStrict}}),Object.defineProperty(e,"decodeXMLStrict",{enumerable:!0,get:function(){return s.decodeXML}})},4431:function(t){t.exports={Text:"text",Directive:"directive",Comment:"comment",Script:"script",Style:"style",Tag:"tag",CDATA:"cdata",Doctype:"doctype",isTag:function(t){return"tag"===t.type||"script"===t.type||"style"===t.type}}},8753:function(t,e,n){var r=n(4431),a=/\s+/g,i=n(7790),s=n(4407);function o(t,e,n){"object"==typeof t?(n=e,e=t,t=null):"function"==typeof e&&(n=e,e=l),this._callback=t,this._options=e||l,this._elementCB=n,this.dom=[],this._done=!1,this._tagStack=[],this._parser=this._parser||null}var l={normalizeWhitespace:!1,withStartIndices:!1,withEndIndices:!1};o.prototype.onparserinit=function(t){this._parser=t},o.prototype.onreset=function(){o.call(this,this._callback,this._options,this._elementCB)},o.prototype.onend=function(){this._done||(this._done=!0,this._parser=null,this._handleCallback(null))},o.prototype._handleCallback=o.prototype.onerror=function(t){if("function"==typeof this._callback)this._callback(t,this.dom);else if(t)throw t},o.prototype.onclosetag=function(){var t=this._tagStack.pop();this._options.withEndIndices&&t&&(t.endIndex=this._parser.endIndex),this._elementCB&&this._elementCB(t)},o.prototype._createDomElement=function(t){if(!this._options.withDomLvl1)return t;var e;for(var n in e="tag"===t.type?Object.create(s):Object.create(i),t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},o.prototype._addDomElement=function(t){var e=this._tagStack[this._tagStack.length-1],n=e?e.children:this.dom,r=n[n.length-1];t.next=null,this._options.withStartIndices&&(t.startIndex=this._parser.startIndex),this._options.withEndIndices&&(t.endIndex=this._parser.endIndex),r?(t.prev=r,r.next=t):t.prev=null,n.push(t),t.parent=e||null},o.prototype.onopentag=function(t,e){var n={type:"script"===t?r.Script:"style"===t?r.Style:r.Tag,name:t,attribs:e,children:[]},a=this._createDomElement(n);this._addDomElement(a),this._tagStack.push(a)},o.prototype.ontext=function(t){var e,n=this._options.normalizeWhitespace||this._options.ignoreWhitespace;if(!this._tagStack.length&&this.dom.length&&(e=this.dom[this.dom.length-1]).type===r.Text)n?e.data=(e.data+t).replace(a," "):e.data+=t;else if(this._tagStack.length&&(e=this._tagStack[this._tagStack.length-1])&&(e=e.children[e.children.length-1])&&e.type===r.Text)n?e.data=(e.data+t).replace(a," "):e.data+=t;else{n&&(t=t.replace(a," "));var i=this._createDomElement({data:t,type:r.Text});this._addDomElement(i)}},o.prototype.oncomment=function(t){var e=this._tagStack[this._tagStack.length-1];if(e&&e.type===r.Comment)e.data+=t;else{var n={data:t,type:r.Comment},a=this._createDomElement(n);this._addDomElement(a),this._tagStack.push(a)}},o.prototype.oncdatastart=function(){var t={children:[{data:"",type:r.Text}],type:r.CDATA},e=this._createDomElement(t);this._addDomElement(e),this._tagStack.push(e)},o.prototype.oncommentend=o.prototype.oncdataend=function(){this._tagStack.pop()},o.prototype.onprocessinginstruction=function(t,e){var n=this._createDomElement({name:t,data:e,type:r.Directive});this._addDomElement(n)},t.exports=o},4407:function(t,e,n){var r=n(7790),a=t.exports=Object.create(r),i={tagName:"name"};Object.keys(i).forEach((function(t){var e=i[t];Object.defineProperty(a,t,{get:function(){return this[e]||null},set:function(t){return this[e]=t,t}})}))},7790:function(t){var e=t.exports={get firstChild(){var t=this.children;return t&&t[0]||null},get lastChild(){var t=this.children;return t&&t[t.length-1]||null},get nodeType(){return r[this.type]||r.element}},n={tagName:"name",childNodes:"children",parentNode:"parent",previousSibling:"prev",nextSibling:"next",nodeValue:"data"},r={element:1,text:3,cdata:4,comment:8};Object.keys(n).forEach((function(t){var r=n[t];Object.defineProperty(e,t,{get:function(){return this[r]||null},set:function(t){return this[r]=t,t}})}))},2417:function(t,e,n){var r=t.exports;[n(3346),n(5010),n(6765),n(8043),n(3905),n(4975)].forEach((function(t){Object.keys(t).forEach((function(e){r[e]=t[e].bind(r)}))}))},4975:function(t,e){e.removeSubsets=function(t){for(var e,n,r,a=t.length;--a>-1;){for(e=n=t[a],t[a]=null,r=!0;n;){if(t.indexOf(n)>-1){r=!1,t.splice(a,1);break}n=n.parent}r&&(t[a]=e)}return t};var n=e.compareDocumentPosition=function(t,e){var n,r,a,i,s,o,l=[],u=[];if(t===e)return 0;for(n=t;n;)l.unshift(n),n=n.parent;for(n=e;n;)u.unshift(n),n=n.parent;for(o=0;l[o]===u[o];)o++;return 0===o?1:(a=(r=l[o-1]).children,i=l[o],s=u[o],a.indexOf(i)>a.indexOf(s)?r===e?20:4:r===t?10:2)};e.uniqueSort=function(t){var e,r,a=t.length;for(t=t.slice();--a>-1;)e=t[a],(r=t.indexOf(e))>-1&&r<a&&t.splice(a,1);return t.sort((function(t,e){var r=n(t,e);return 2&r?-1:4&r?1:0})),t}},3905:function(t,e,n){var r=n(4431),a=e.isTag=r.isTag;e.testElement=function(t,e){for(var n in t)if(t.hasOwnProperty(n))if("tag_name"===n){if(!a(e)||!t.tag_name(e.name))return!1}else if("tag_type"===n){if(!t.tag_type(e.type))return!1}else if("tag_contains"===n){if(a(e)||!t.tag_contains(e.data))return!1}else if(!e.attribs||!t[n](e.attribs[n]))return!1;return!0};var i={tag_name:function(t){return"function"==typeof t?function(e){return a(e)&&t(e.name)}:"*"===t?a:function(e){return a(e)&&e.name===t}},tag_type:function(t){return"function"==typeof t?function(e){return t(e.type)}:function(e){return e.type===t}},tag_contains:function(t){return"function"==typeof t?function(e){return!a(e)&&t(e.data)}:function(e){return!a(e)&&e.data===t}}};function s(t,e){return"function"==typeof e?function(n){return n.attribs&&e(n.attribs[t])}:function(n){return n.attribs&&n.attribs[t]===e}}function o(t,e){return function(n){return t(n)||e(n)}}e.getElements=function(t,e,n,r){var a=Object.keys(t).map((function(e){var n=t[e];return e in i?i[e](n):s(e,n)}));return 0===a.length?[]:this.filter(a.reduce(o),e,n,r)},e.getElementById=function(t,e,n){return Array.isArray(e)||(e=[e]),this.findOne(s("id",t),e,!1!==n)},e.getElementsByTagName=function(t,e,n,r){return this.filter(i.tag_name(t),e,n,r)},e.getElementsByTagType=function(t,e,n,r){return this.filter(i.tag_type(t),e,n,r)}},6765:function(t,e){e.removeElement=function(t){if(t.prev&&(t.prev.next=t.next),t.next&&(t.next.prev=t.prev),t.parent){var e=t.parent.children;e.splice(e.lastIndexOf(t),1)}},e.replaceElement=function(t,e){var n=e.prev=t.prev;n&&(n.next=e);var r=e.next=t.next;r&&(r.prev=e);var a=e.parent=t.parent;if(a){var i=a.children;i[i.lastIndexOf(t)]=e}},e.appendChild=function(t,e){if(e.parent=t,1!==t.children.push(e)){var n=t.children[t.children.length-2];n.next=e,e.prev=n,e.next=null}},e.append=function(t,e){var n=t.parent,r=t.next;if(e.next=r,e.prev=t,t.next=e,e.parent=n,r){if(r.prev=e,n){var a=n.children;a.splice(a.lastIndexOf(r),0,e)}}else n&&n.children.push(e)},e.prepend=function(t,e){var n=t.parent;if(n){var r=n.children;r.splice(r.lastIndexOf(t),0,e)}t.prev&&(t.prev.next=e),e.parent=n,e.prev=t.prev,e.next=t,t.prev=e}},8043:function(t,e,n){var r=n(4431).isTag;function a(t,e,n,r){for(var i,s=[],o=0,l=e.length;o<l&&!(t(e[o])&&(s.push(e[o]),--r<=0))&&(i=e[o].children,!(n&&i&&i.length>0&&(i=a(t,i,n,r),s=s.concat(i),(r-=i.length)<=0)));o++);return s}t.exports={filter:function(t,e,n,r){return Array.isArray(e)||(e=[e]),"number"==typeof r&&isFinite(r)||(r=1/0),a(t,e,!1!==n,r)},find:a,findOneChild:function(t,e){for(var n=0,r=e.length;n<r;n++)if(t(e[n]))return e[n];return null},findOne:function t(e,n){for(var a=null,i=0,s=n.length;i<s&&!a;i++)r(n[i])&&(e(n[i])?a=n[i]:n[i].children.length>0&&(a=t(e,n[i].children)));return a},existsOne:function t(e,n){for(var a=0,i=n.length;a<i;a++)if(r(n[a])&&(e(n[a])||n[a].children.length>0&&t(e,n[a].children)))return!0;return!1},findAll:function(t,e){for(var n=[],a=e.slice();a.length;){var i=a.shift();r(i)&&(i.children&&i.children.length>0&&a.unshift.apply(a,i.children),t(i)&&n.push(i))}return n}}},3346:function(t,e,n){var r=n(4431),a=n(6138),i=r.isTag;t.exports={getInnerHTML:function(t,e){return t.children?t.children.map((function(t){return a(t,e)})).join(""):""},getOuterHTML:a,getText:function t(e){return Array.isArray(e)?e.map(t).join(""):i(e)?"br"===e.name?"\n":t(e.children):e.type===r.CDATA?t(e.children):e.type===r.Text?e.data:""}}},5010:function(t,e){var n=e.getChildren=function(t){return t.children},r=e.getParent=function(t){return t.parent};e.getSiblings=function(t){var e=r(t);return e?n(e):[t]},e.getAttributeValue=function(t,e){return t.attribs&&t.attribs[e]},e.hasAttrib=function(t,e){return!!t.attribs&&hasOwnProperty.call(t.attribs,e)},e.getName=function(t){return t.name}},26:function(t,e,n){var r=n(9545);t.exports=function(t){if(t>=55296&&t<=57343||t>1114111)return"�";t in r&&(t=r[t]);var e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|1023&t),e+String.fromCharCode(t)}},7187:function(t){"use strict";var e,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(t,e,n){return Function.prototype.apply.call(t,e,n)};e=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var a=Number.isNaN||function(t){return t!=t};function i(){i.init.call(this)}t.exports=i,t.exports.once=function(t,e){return new Promise((function(n,r){function a(n){t.removeListener(e,i),r(n)}function i(){"function"==typeof t.removeListener&&t.removeListener("error",a),n([].slice.call(arguments))}m(t,e,i,{once:!0}),"error"!==e&&function(t,e,n){"function"==typeof t.on&&m(t,"error",e,{once:!0})}(t,a)}))},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var s=10;function o(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function l(t){return void 0===t._maxListeners?i.defaultMaxListeners:t._maxListeners}function u(t,e,n,r){var a,i,s,u;if(o(n),void 0===(i=t._events)?(i=t._events=Object.create(null),t._eventsCount=0):(void 0!==i.newListener&&(t.emit("newListener",e,n.listener?n.listener:n),i=t._events),s=i[e]),void 0===s)s=i[e]=n,++t._eventsCount;else if("function"==typeof s?s=i[e]=r?[n,s]:[s,n]:r?s.unshift(n):s.push(n),(a=l(t))>0&&s.length>a&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=t,c.type=e,c.count=s.length,u=c,console&&console.warn&&console.warn(u)}return t}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(t,e,n){var r={fired:!1,wrapFn:void 0,target:t,type:e,listener:n},a=c.bind(r);return a.listener=n,r.wrapFn=a,a}function f(t,e,n){var r=t._events;if(void 0===r)return[];var a=r[e];return void 0===a?[]:"function"==typeof a?n?[a.listener||a]:[a]:n?function(t){for(var e=new Array(t.length),n=0;n<e.length;++n)e[n]=t[n].listener||t[n];return e}(a):v(a,a.length)}function p(t){var e=this._events;if(void 0!==e){var n=e[t];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function v(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t[r];return n}function m(t,e,n,r){if("function"==typeof t.on)r.once?t.once(e,n):t.on(e,n);else{if("function"!=typeof t.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof t);t.addEventListener(e,(function a(i){r.once&&t.removeEventListener(e,a),n(i)}))}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return s},set:function(t){if("number"!=typeof t||t<0||a(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");s=t}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||a(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(t){for(var e=[],n=1;n<arguments.length;n++)e.push(arguments[n]);var a="error"===t,i=this._events;if(void 0!==i)a=a&&void 0===i.error;else if(!a)return!1;if(a){var s;if(e.length>0&&(s=e[0]),s instanceof Error)throw s;var o=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw o.context=s,o}var l=i[t];if(void 0===l)return!1;if("function"==typeof l)r(l,this,e);else{var u=l.length,c=v(l,u);for(n=0;n<u;++n)r(c[n],this,e)}return!0},i.prototype.addListener=function(t,e){return u(this,t,e,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(t,e){return u(this,t,e,!0)},i.prototype.once=function(t,e){return o(e),this.on(t,d(this,t,e)),this},i.prototype.prependOnceListener=function(t,e){return o(e),this.prependListener(t,d(this,t,e)),this},i.prototype.removeListener=function(t,e){var n,r,a,i,s;if(o(e),void 0===(r=this._events))return this;if(void 0===(n=r[t]))return this;if(n===e||n.listener===e)0==--this._eventsCount?this._events=Object.create(null):(delete r[t],r.removeListener&&this.emit("removeListener",t,n.listener||e));else if("function"!=typeof n){for(a=-1,i=n.length-1;i>=0;i--)if(n[i]===e||n[i].listener===e){s=n[i].listener,a=i;break}if(a<0)return this;0===a?n.shift():function(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}(n,a),1===n.length&&(r[t]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",t,s||e)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(t){var e,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[t]),this;if(0===arguments.length){var a,i=Object.keys(n);for(r=0;r<i.length;++r)"removeListener"!==(a=i[r])&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(e=n[t]))this.removeListener(t,e);else if(void 0!==e)for(r=e.length-1;r>=0;r--)this.removeListener(t,e[r]);return this},i.prototype.listeners=function(t){return f(this,t,!0)},i.prototype.rawListeners=function(t){return f(this,t,!1)},i.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]}},8679:function(t,e,n){"use strict";var r=n(1296),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},s={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},o={};function l(t){return r.isMemo(t)?s:o[t.$$typeof]||a}o[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},o[r.Memo]=s;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,v=Object.prototype;t.exports=function t(e,n,r){if("string"!=typeof n){if(v){var a=p(n);a&&a!==v&&t(e,a,r)}var s=c(n);d&&(s=s.concat(d(n)));for(var o=l(e),m=l(n),h=0;h<s.length;++h){var A=s[h];if(!(i[A]||r&&r[A]||m&&m[A]||o&&o[A])){var b=f(n,A);try{u(e,A,b)}catch(t){}}}}return e}},6103:function(t,e){"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,i=n?Symbol.for("react.fragment"):60107,s=n?Symbol.for("react.strict_mode"):60108,o=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,v=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,A=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,g=n?Symbol.for("react.responder"):60118,y=n?Symbol.for("react.scope"):60119;function x(t){if("object"==typeof t&&null!==t){var e=t.$$typeof;switch(e){case r:switch(t=t.type){case c:case d:case i:case o:case s:case p:return t;default:switch(t=t&&t.$$typeof){case u:case f:case h:case m:case l:return t;default:return e}}case a:return e}}}function w(t){return x(t)===d}e.AsyncMode=c,e.ConcurrentMode=d,e.ContextConsumer=u,e.ContextProvider=l,e.Element=r,e.ForwardRef=f,e.Fragment=i,e.Lazy=h,e.Memo=m,e.Portal=a,e.Profiler=o,e.StrictMode=s,e.Suspense=p,e.isAsyncMode=function(t){return w(t)||x(t)===c},e.isConcurrentMode=w,e.isContextConsumer=function(t){return x(t)===u},e.isContextProvider=function(t){return x(t)===l},e.isElement=function(t){return"object"==typeof t&&null!==t&&t.$$typeof===r},e.isForwardRef=function(t){return x(t)===f},e.isFragment=function(t){return x(t)===i},e.isLazy=function(t){return x(t)===h},e.isMemo=function(t){return x(t)===m},e.isPortal=function(t){return x(t)===a},e.isProfiler=function(t){return x(t)===o},e.isStrictMode=function(t){return x(t)===s},e.isSuspense=function(t){return x(t)===p},e.isValidElementType=function(t){return"string"==typeof t||"function"==typeof t||t===i||t===d||t===o||t===s||t===p||t===v||"object"==typeof t&&null!==t&&(t.$$typeof===h||t.$$typeof===m||t.$$typeof===l||t.$$typeof===u||t.$$typeof===f||t.$$typeof===b||t.$$typeof===g||t.$$typeof===y||t.$$typeof===A)},e.typeOf=x},1296:function(t,e,n){"use strict";t.exports=n(6103)},5449:function(t,e,n){function r(t){this._cbs=t||{},this.events=[]}t.exports=r;var a=n(3719).EVENTS;Object.keys(a).forEach((function(t){if(0===a[t])t="on"+t,r.prototype[t]=function(){this.events.push([t]),this._cbs[t]&&this._cbs[t]()};else if(1===a[t])t="on"+t,r.prototype[t]=function(e){this.events.push([t,e]),this._cbs[t]&&this._cbs[t](e)};else{if(2!==a[t])throw Error("wrong number of arguments");t="on"+t,r.prototype[t]=function(e,n){this.events.push([t,e,n]),this._cbs[t]&&this._cbs[t](e,n)}}})),r.prototype.onreset=function(){this.events=[],this._cbs.onreset&&this._cbs.onreset()},r.prototype.restart=function(){this._cbs.onreset&&this._cbs.onreset();for(var t=0,e=this.events.length;t<e;t++)if(this._cbs[this.events[t][0]]){var n=this.events[t].length;1===n?this._cbs[this.events[t][0]]():2===n?this._cbs[this.events[t][0]](this.events[t][1]):this._cbs[this.events[t][0]](this.events[t][1],this.events[t][2])}}},3870:function(t,e,n){var r=n(8753),a=n(2417);function i(t,e){this.init(t,e)}function s(t,e){return a.getElementsByTagName(t,e,!0)}function o(t,e){return a.getElementsByTagName(t,e,!0,1)[0]}function l(t,e,n){return a.getText(a.getElementsByTagName(t,e,n,1)).trim()}function u(t,e,n,r,a){var i=l(n,r,a);i&&(t[e]=i)}n(5717)(i,r),i.prototype.init=r;var c=function(t){return"rss"===t||"feed"===t||"rdf:RDF"===t};i.prototype.onend=function(){var t,e,n={},a=o(c,this.dom);a&&("feed"===a.name?(e=a.children,n.type="atom",u(n,"id","id",e),u(n,"title","title",e),(t=o("link",e))&&(t=t.attribs)&&(t=t.href)&&(n.link=t),u(n,"description","subtitle",e),(t=l("updated",e))&&(n.updated=new Date(t)),u(n,"author","email",e,!0),n.items=s("entry",e).map((function(t){var e,n={};return u(n,"id","id",t=t.children),u(n,"title","title",t),(e=o("link",t))&&(e=e.attribs)&&(e=e.href)&&(n.link=e),(e=l("summary",t)||l("content",t))&&(n.description=e),(e=l("updated",t))&&(n.pubDate=new Date(e)),n}))):(e=o("channel",a.children).children,n.type=a.name.substr(0,3),n.id="",u(n,"title","title",e),u(n,"link","link",e),u(n,"description","description",e),(t=l("lastBuildDate",e))&&(n.updated=new Date(t)),u(n,"author","managingEditor",e,!0),n.items=s("item",a.children).map((function(t){var e,n={};return u(n,"id","guid",t=t.children),u(n,"title","title",t),u(n,"link","link",t),u(n,"description","description",t),(e=l("pubDate",t))&&(n.pubDate=new Date(e)),n})))),this.dom=n,r.prototype._handleCallback.call(this,a?null:Error("couldn't find root of feed"))},t.exports=i},763:function(t,e,n){var r=n(9889),a={input:!0,option:!0,optgroup:!0,select:!0,button:!0,datalist:!0,textarea:!0},i={tr:{tr:!0,th:!0,td:!0},th:{th:!0},td:{thead:!0,th:!0,td:!0},body:{head:!0,link:!0,script:!0},li:{li:!0},p:{p:!0},h1:{p:!0},h2:{p:!0},h3:{p:!0},h4:{p:!0},h5:{p:!0},h6:{p:!0},select:a,input:a,output:a,button:a,datalist:a,textarea:a,option:{option:!0},optgroup:{optgroup:!0}},s={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},o={__proto__:null,math:!0,svg:!0},l={__proto__:null,mi:!0,mo:!0,mn:!0,ms:!0,mtext:!0,"annotation-xml":!0,foreignObject:!0,desc:!0,title:!0},u=/\s|\//;function c(t,e){this._options=e||{},this._cbs=t||{},this._tagname="",this._attribname="",this._attribvalue="",this._attribs=null,this._stack=[],this._foreignContext=[],this.startIndex=0,this.endIndex=null,this._lowerCaseTagNames="lowerCaseTags"in this._options?!!this._options.lowerCaseTags:!this._options.xmlMode,this._lowerCaseAttributeNames="lowerCaseAttributeNames"in this._options?!!this._options.lowerCaseAttributeNames:!this._options.xmlMode,this._options.Tokenizer&&(r=this._options.Tokenizer),this._tokenizer=new r(this._options,this),this._cbs.onparserinit&&this._cbs.onparserinit(this)}n(5717)(c,n(7187).EventEmitter),c.prototype._updatePosition=function(t){null===this.endIndex?this._tokenizer._sectionStart<=t?this.startIndex=0:this.startIndex=this._tokenizer._sectionStart-t:this.startIndex=this.endIndex+1,this.endIndex=this._tokenizer.getAbsoluteIndex()},c.prototype.ontext=function(t){this._updatePosition(1),this.endIndex--,this._cbs.ontext&&this._cbs.ontext(t)},c.prototype.onopentagname=function(t){if(this._lowerCaseTagNames&&(t=t.toLowerCase()),this._tagname=t,!this._options.xmlMode&&t in i)for(var e;(e=this._stack[this._stack.length-1])in i[t];this.onclosetag(e));!this._options.xmlMode&&t in s||(this._stack.push(t),t in o?this._foreignContext.push(!0):t in l&&this._foreignContext.push(!1)),this._cbs.onopentagname&&this._cbs.onopentagname(t),this._cbs.onopentag&&(this._attribs={})},c.prototype.onopentagend=function(){this._updatePosition(1),this._attribs&&(this._cbs.onopentag&&this._cbs.onopentag(this._tagname,this._attribs),this._attribs=null),!this._options.xmlMode&&this._cbs.onclosetag&&this._tagname in s&&this._cbs.onclosetag(this._tagname),this._tagname=""},c.prototype.onclosetag=function(t){if(this._updatePosition(1),this._lowerCaseTagNames&&(t=t.toLowerCase()),(t in o||t in l)&&this._foreignContext.pop(),!this._stack.length||t in s&&!this._options.xmlMode)this._options.xmlMode||"br"!==t&&"p"!==t||(this.onopentagname(t),this._closeCurrentTag());else{var e=this._stack.lastIndexOf(t);if(-1!==e)if(this._cbs.onclosetag)for(e=this._stack.length-e;e--;)this._cbs.onclosetag(this._stack.pop());else this._stack.length=e;else"p"!==t||this._options.xmlMode||(this.onopentagname(t),this._closeCurrentTag())}},c.prototype.onselfclosingtag=function(){this._options.xmlMode||this._options.recognizeSelfClosing||this._foreignContext[this._foreignContext.length-1]?this._closeCurrentTag():this.onopentagend()},c.prototype._closeCurrentTag=function(){var t=this._tagname;this.onopentagend(),this._stack[this._stack.length-1]===t&&(this._cbs.onclosetag&&this._cbs.onclosetag(t),this._stack.pop())},c.prototype.onattribname=function(t){this._lowerCaseAttributeNames&&(t=t.toLowerCase()),this._attribname=t},c.prototype.onattribdata=function(t){this._attribvalue+=t},c.prototype.onattribend=function(){this._cbs.onattribute&&this._cbs.onattribute(this._attribname,this._attribvalue),this._attribs&&!Object.prototype.hasOwnProperty.call(this._attribs,this._attribname)&&(this._attribs[this._attribname]=this._attribvalue),this._attribname="",this._attribvalue=""},c.prototype._getInstructionName=function(t){var e=t.search(u),n=e<0?t:t.substr(0,e);return this._lowerCaseTagNames&&(n=n.toLowerCase()),n},c.prototype.ondeclaration=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction("!"+e,"!"+t)}},c.prototype.onprocessinginstruction=function(t){if(this._cbs.onprocessinginstruction){var e=this._getInstructionName(t);this._cbs.onprocessinginstruction("?"+e,"?"+t)}},c.prototype.oncomment=function(t){this._updatePosition(4),this._cbs.oncomment&&this._cbs.oncomment(t),this._cbs.oncommentend&&this._cbs.oncommentend()},c.prototype.oncdata=function(t){this._updatePosition(1),this._options.xmlMode||this._options.recognizeCDATA?(this._cbs.oncdatastart&&this._cbs.oncdatastart(),this._cbs.ontext&&this._cbs.ontext(t),this._cbs.oncdataend&&this._cbs.oncdataend()):this.oncomment("[CDATA["+t+"]]")},c.prototype.onerror=function(t){this._cbs.onerror&&this._cbs.onerror(t)},c.prototype.onend=function(){if(this._cbs.onclosetag)for(var t=this._stack.length;t>0;this._cbs.onclosetag(this._stack[--t]));this._cbs.onend&&this._cbs.onend()},c.prototype.reset=function(){this._cbs.onreset&&this._cbs.onreset(),this._tokenizer.reset(),this._tagname="",this._attribname="",this._attribs=null,this._stack=[],this._cbs.onparserinit&&this._cbs.onparserinit(this)},c.prototype.parseComplete=function(t){this.reset(),this.end(t)},c.prototype.write=function(t){this._tokenizer.write(t)},c.prototype.end=function(t){this._tokenizer.end(t)},c.prototype.pause=function(){this._tokenizer.pause()},c.prototype.resume=function(){this._tokenizer.resume()},c.prototype.parseChunk=c.prototype.write,c.prototype.done=c.prototype.end,t.exports=c},6321:function(t,e,n){function r(t){this._cbs=t||{}}t.exports=r;var a=n(3719).EVENTS;Object.keys(a).forEach((function(t){if(0===a[t])t="on"+t,r.prototype[t]=function(){this._cbs[t]&&this._cbs[t]()};else if(1===a[t])t="on"+t,r.prototype[t]=function(e){this._cbs[t]&&this._cbs[t](e)};else{if(2!==a[t])throw Error("wrong number of arguments");t="on"+t,r.prototype[t]=function(e,n){this._cbs[t]&&this._cbs[t](e,n)}}}))},9924:function(t,e,n){t.exports=a;var r=n(3621);function a(t){r.call(this,new i(this),t)}function i(t){this.scope=t}n(5717)(a,r),a.prototype.readable=!0;var s=n(3719).EVENTS;Object.keys(s).forEach((function(t){if(0===s[t])i.prototype["on"+t]=function(){this.scope.emit(t)};else if(1===s[t])i.prototype["on"+t]=function(e){this.scope.emit(t,e)};else{if(2!==s[t])throw Error("wrong number of arguments!");i.prototype["on"+t]=function(e,n){this.scope.emit(t,e,n)}}}))},9889:function(t,e,n){t.exports=ht;var r=n(26),a=n(9489),i=n(490),s=n(1344),o=0,l=o++,u=o++,c=o++,d=o++,f=o++,p=o++,v=o++,m=o++,h=o++,A=o++,b=o++,g=o++,y=o++,x=o++,w=o++,E=o++,X=o++,R=o++,L=o++,V=o++,z=o++,N=o++,P=o++,O=o++,q=o++,W=o++,T=o++,C=o++,I=o++,F=o++,j=o++,S=o++,H=o++,D=o++,Z=o++,M=o++,k=o++,B=o++,G=o++,Y=o++,U=o++,K=o++,J=o++,Q=o++,_=o++,$=o++,tt=o++,et=o++,nt=o++,rt=o++,at=o++,it=o++,st=o++,ot=o++,lt=o++,ut=0,ct=ut++,dt=ut++,ft=ut++;function pt(t){return" "===t||"\n"===t||"\t"===t||"\f"===t||"\r"===t}function vt(t,e,n){var r=t.toLowerCase();return t===r?function(t){t===r?this._state=e:(this._state=n,this._index--)}:function(a){a===r||a===t?this._state=e:(this._state=n,this._index--)}}function mt(t,e){var n=t.toLowerCase();return function(r){r===n||r===t?this._state=e:(this._state=c,this._index--)}}function ht(t,e){this._state=l,this._buffer="",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=l,this._special=ct,this._cbs=e,this._running=!0,this._ended=!1,this._xmlMode=!(!t||!t.xmlMode),this._decodeEntities=!(!t||!t.decodeEntities)}ht.prototype._stateText=function(t){"<"===t?(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._state=u,this._sectionStart=this._index):this._decodeEntities&&this._special===ct&&"&"===t&&(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._baseState=l,this._state=at,this._sectionStart=this._index)},ht.prototype._stateBeforeTagName=function(t){"/"===t?this._state=f:"<"===t?(this._cbs.ontext(this._getSection()),this._sectionStart=this._index):">"===t||this._special!==ct||pt(t)?this._state=l:"!"===t?(this._state=w,this._sectionStart=this._index+1):"?"===t?(this._state=X,this._sectionStart=this._index+1):(this._state=this._xmlMode||"s"!==t&&"S"!==t?c:j,this._sectionStart=this._index)},ht.prototype._stateInTagName=function(t){("/"===t||">"===t||pt(t))&&(this._emitToken("onopentagname"),this._state=m,this._index--)},ht.prototype._stateBeforeCloseingTagName=function(t){pt(t)||(">"===t?this._state=l:this._special!==ct?"s"===t||"S"===t?this._state=S:(this._state=l,this._index--):(this._state=p,this._sectionStart=this._index))},ht.prototype._stateInCloseingTagName=function(t){(">"===t||pt(t))&&(this._emitToken("onclosetag"),this._state=v,this._index--)},ht.prototype._stateAfterCloseingTagName=function(t){">"===t&&(this._state=l,this._sectionStart=this._index+1)},ht.prototype._stateBeforeAttributeName=function(t){">"===t?(this._cbs.onopentagend(),this._state=l,this._sectionStart=this._index+1):"/"===t?this._state=d:pt(t)||(this._state=h,this._sectionStart=this._index)},ht.prototype._stateInSelfClosingTag=function(t){">"===t?(this._cbs.onselfclosingtag(),this._state=l,this._sectionStart=this._index+1):pt(t)||(this._state=m,this._index--)},ht.prototype._stateInAttributeName=function(t){("="===t||"/"===t||">"===t||pt(t))&&(this._cbs.onattribname(this._getSection()),this._sectionStart=-1,this._state=A,this._index--)},ht.prototype._stateAfterAttributeName=function(t){"="===t?this._state=b:"/"===t||">"===t?(this._cbs.onattribend(),this._state=m,this._index--):pt(t)||(this._cbs.onattribend(),this._state=h,this._sectionStart=this._index)},ht.prototype._stateBeforeAttributeValue=function(t){'"'===t?(this._state=g,this._sectionStart=this._index+1):"'"===t?(this._state=y,this._sectionStart=this._index+1):pt(t)||(this._state=x,this._sectionStart=this._index,this._index--)},ht.prototype._stateInAttributeValueDoubleQuotes=function(t){'"'===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=m):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=at,this._sectionStart=this._index)},ht.prototype._stateInAttributeValueSingleQuotes=function(t){"'"===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=m):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=at,this._sectionStart=this._index)},ht.prototype._stateInAttributeValueNoQuotes=function(t){pt(t)||">"===t?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=m,this._index--):this._decodeEntities&&"&"===t&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=at,this._sectionStart=this._index)},ht.prototype._stateBeforeDeclaration=function(t){this._state="["===t?N:"-"===t?R:E},ht.prototype._stateInDeclaration=function(t){">"===t&&(this._cbs.ondeclaration(this._getSection()),this._state=l,this._sectionStart=this._index+1)},ht.prototype._stateInProcessingInstruction=function(t){">"===t&&(this._cbs.onprocessinginstruction(this._getSection()),this._state=l,this._sectionStart=this._index+1)},ht.prototype._stateBeforeComment=function(t){"-"===t?(this._state=L,this._sectionStart=this._index+1):this._state=E},ht.prototype._stateInComment=function(t){"-"===t&&(this._state=V)},ht.prototype._stateAfterComment1=function(t){this._state="-"===t?z:L},ht.prototype._stateAfterComment2=function(t){">"===t?(this._cbs.oncomment(this._buffer.substring(this._sectionStart,this._index-2)),this._state=l,this._sectionStart=this._index+1):"-"!==t&&(this._state=L)},ht.prototype._stateBeforeCdata1=vt("C",P,E),ht.prototype._stateBeforeCdata2=vt("D",O,E),ht.prototype._stateBeforeCdata3=vt("A",q,E),ht.prototype._stateBeforeCdata4=vt("T",W,E),ht.prototype._stateBeforeCdata5=vt("A",T,E),ht.prototype._stateBeforeCdata6=function(t){"["===t?(this._state=C,this._sectionStart=this._index+1):(this._state=E,this._index--)},ht.prototype._stateInCdata=function(t){"]"===t&&(this._state=I)},ht.prototype._stateAfterCdata1=function(t){this._state="]"===t?F:C},ht.prototype._stateAfterCdata2=function(t){">"===t?(this._cbs.oncdata(this._buffer.substring(this._sectionStart,this._index-2)),this._state=l,this._sectionStart=this._index+1):"]"!==t&&(this._state=C)},ht.prototype._stateBeforeSpecial=function(t){"c"===t||"C"===t?this._state=H:"t"===t||"T"===t?this._state=J:(this._state=c,this._index--)},ht.prototype._stateBeforeSpecialEnd=function(t){this._special!==dt||"c"!==t&&"C"!==t?this._special!==ft||"t"!==t&&"T"!==t?this._state=l:this._state=tt:this._state=B},ht.prototype._stateBeforeScript1=mt("R",D),ht.prototype._stateBeforeScript2=mt("I",Z),ht.prototype._stateBeforeScript3=mt("P",M),ht.prototype._stateBeforeScript4=mt("T",k),ht.prototype._stateBeforeScript5=function(t){("/"===t||">"===t||pt(t))&&(this._special=dt),this._state=c,this._index--},ht.prototype._stateAfterScript1=vt("R",G,l),ht.prototype._stateAfterScript2=vt("I",Y,l),ht.prototype._stateAfterScript3=vt("P",U,l),ht.prototype._stateAfterScript4=vt("T",K,l),ht.prototype._stateAfterScript5=function(t){">"===t||pt(t)?(this._special=ct,this._state=p,this._sectionStart=this._index-6,this._index--):this._state=l},ht.prototype._stateBeforeStyle1=mt("Y",Q),ht.prototype._stateBeforeStyle2=mt("L",_),ht.prototype._stateBeforeStyle3=mt("E",$),ht.prototype._stateBeforeStyle4=function(t){("/"===t||">"===t||pt(t))&&(this._special=ft),this._state=c,this._index--},ht.prototype._stateAfterStyle1=vt("Y",et,l),ht.prototype._stateAfterStyle2=vt("L",nt,l),ht.prototype._stateAfterStyle3=vt("E",rt,l),ht.prototype._stateAfterStyle4=function(t){">"===t||pt(t)?(this._special=ct,this._state=p,this._sectionStart=this._index-5,this._index--):this._state=l},ht.prototype._stateBeforeEntity=vt("#",it,st),ht.prototype._stateBeforeNumericEntity=vt("X",lt,ot),ht.prototype._parseNamedEntityStrict=function(){if(this._sectionStart+1<this._index){var t=this._buffer.substring(this._sectionStart+1,this._index),e=this._xmlMode?s:a;e.hasOwnProperty(t)&&(this._emitPartial(e[t]),this._sectionStart=this._index+1)}},ht.prototype._parseLegacyEntity=function(){var t=this._sectionStart+1,e=this._index-t;for(e>6&&(e=6);e>=2;){var n=this._buffer.substr(t,e);if(i.hasOwnProperty(n))return this._emitPartial(i[n]),void(this._sectionStart+=e+1);e--}},ht.prototype._stateInNamedEntity=function(t){";"===t?(this._parseNamedEntityStrict(),this._sectionStart+1<this._index&&!this._xmlMode&&this._parseLegacyEntity(),this._state=this._baseState):(t<"a"||t>"z")&&(t<"A"||t>"Z")&&(t<"0"||t>"9")&&(this._xmlMode||this._sectionStart+1===this._index||(this._baseState!==l?"="!==t&&this._parseNamedEntityStrict():this._parseLegacyEntity()),this._state=this._baseState,this._index--)},ht.prototype._decodeNumericEntity=function(t,e){var n=this._sectionStart+t;if(n!==this._index){var a=this._buffer.substring(n,this._index),i=parseInt(a,e);this._emitPartial(r(i)),this._sectionStart=this._index}else this._sectionStart--;this._state=this._baseState},ht.prototype._stateInNumericEntity=function(t){";"===t?(this._decodeNumericEntity(2,10),this._sectionStart++):(t<"0"||t>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(2,10),this._index--)},ht.prototype._stateInHexEntity=function(t){";"===t?(this._decodeNumericEntity(3,16),this._sectionStart++):(t<"a"||t>"f")&&(t<"A"||t>"F")&&(t<"0"||t>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(3,16),this._index--)},ht.prototype._cleanup=function(){this._sectionStart<0?(this._buffer="",this._bufferOffset+=this._index,this._index=0):this._running&&(this._state===l?(this._sectionStart!==this._index&&this._cbs.ontext(this._buffer.substr(this._sectionStart)),this._buffer="",this._bufferOffset+=this._index,this._index=0):this._sectionStart===this._index?(this._buffer="",this._bufferOffset+=this._index,this._index=0):(this._buffer=this._buffer.substr(this._sectionStart),this._index-=this._sectionStart,this._bufferOffset+=this._sectionStart),this._sectionStart=0)},ht.prototype.write=function(t){this._ended&&this._cbs.onerror(Error(".write() after done!")),this._buffer+=t,this._parse()},ht.prototype._parse=function(){for(;this._index<this._buffer.length&&this._running;){var t=this._buffer.charAt(this._index);this._state===l?this._stateText(t):this._state===u?this._stateBeforeTagName(t):this._state===c?this._stateInTagName(t):this._state===f?this._stateBeforeCloseingTagName(t):this._state===p?this._stateInCloseingTagName(t):this._state===v?this._stateAfterCloseingTagName(t):this._state===d?this._stateInSelfClosingTag(t):this._state===m?this._stateBeforeAttributeName(t):this._state===h?this._stateInAttributeName(t):this._state===A?this._stateAfterAttributeName(t):this._state===b?this._stateBeforeAttributeValue(t):this._state===g?this._stateInAttributeValueDoubleQuotes(t):this._state===y?this._stateInAttributeValueSingleQuotes(t):this._state===x?this._stateInAttributeValueNoQuotes(t):this._state===w?this._stateBeforeDeclaration(t):this._state===E?this._stateInDeclaration(t):this._state===X?this._stateInProcessingInstruction(t):this._state===R?this._stateBeforeComment(t):this._state===L?this._stateInComment(t):this._state===V?this._stateAfterComment1(t):this._state===z?this._stateAfterComment2(t):this._state===N?this._stateBeforeCdata1(t):this._state===P?this._stateBeforeCdata2(t):this._state===O?this._stateBeforeCdata3(t):this._state===q?this._stateBeforeCdata4(t):this._state===W?this._stateBeforeCdata5(t):this._state===T?this._stateBeforeCdata6(t):this._state===C?this._stateInCdata(t):this._state===I?this._stateAfterCdata1(t):this._state===F?this._stateAfterCdata2(t):this._state===j?this._stateBeforeSpecial(t):this._state===S?this._stateBeforeSpecialEnd(t):this._state===H?this._stateBeforeScript1(t):this._state===D?this._stateBeforeScript2(t):this._state===Z?this._stateBeforeScript3(t):this._state===M?this._stateBeforeScript4(t):this._state===k?this._stateBeforeScript5(t):this._state===B?this._stateAfterScript1(t):this._state===G?this._stateAfterScript2(t):this._state===Y?this._stateAfterScript3(t):this._state===U?this._stateAfterScript4(t):this._state===K?this._stateAfterScript5(t):this._state===J?this._stateBeforeStyle1(t):this._state===Q?this._stateBeforeStyle2(t):this._state===_?this._stateBeforeStyle3(t):this._state===$?this._stateBeforeStyle4(t):this._state===tt?this._stateAfterStyle1(t):this._state===et?this._stateAfterStyle2(t):this._state===nt?this._stateAfterStyle3(t):this._state===rt?this._stateAfterStyle4(t):this._state===at?this._stateBeforeEntity(t):this._state===it?this._stateBeforeNumericEntity(t):this._state===st?this._stateInNamedEntity(t):this._state===ot?this._stateInNumericEntity(t):this._state===lt?this._stateInHexEntity(t):this._cbs.onerror(Error("unknown _state"),this._state),this._index++}this._cleanup()},ht.prototype.pause=function(){this._running=!1},ht.prototype.resume=function(){this._running=!0,this._index<this._buffer.length&&this._parse(),this._ended&&this._finish()},ht.prototype.end=function(t){this._ended&&this._cbs.onerror(Error(".end() after done!")),t&&this.write(t),this._ended=!0,this._running&&this._finish()},ht.prototype._finish=function(){this._sectionStart<this._index&&this._handleTrailingData(),this._cbs.onend()},ht.prototype._handleTrailingData=function(){var t=this._buffer.substr(this._sectionStart);this._state===C||this._state===I||this._state===F?this._cbs.oncdata(t):this._state===L||this._state===V||this._state===z?this._cbs.oncomment(t):this._state!==st||this._xmlMode?this._state!==ot||this._xmlMode?this._state!==lt||this._xmlMode?this._state!==c&&this._state!==m&&this._state!==b&&this._state!==A&&this._state!==h&&this._state!==y&&this._state!==g&&this._state!==x&&this._state!==p&&this._cbs.ontext(t):(this._decodeNumericEntity(3,16),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData())):(this._decodeNumericEntity(2,10),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData())):(this._parseLegacyEntity(),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData()))},ht.prototype.reset=function(){ht.call(this,{xmlMode:this._xmlMode,decodeEntities:this._decodeEntities},this._cbs)},ht.prototype.getAbsoluteIndex=function(){return this._bufferOffset+this._index},ht.prototype._getSection=function(){return this._buffer.substring(this._sectionStart,this._index)},ht.prototype._emitToken=function(t){this._cbs[t](this._getSection()),this._sectionStart=-1},ht.prototype._emitPartial=function(t){this._baseState!==l?this._cbs.onattribdata(t):this._cbs.ontext(t)}},3621:function(t,e,n){t.exports=o;var r=n(763),a=n(247).Writable,i=n(2553).s,s=n(8764).Buffer;function o(t,e){var n=this._parser=new r(t,e),s=this._decoder=new i;a.call(this,{decodeStrings:!1}),this.once("finish",(function(){n.end(s.end())}))}n(5717)(o,a),o.prototype._write=function(t,e,n){t instanceof s&&(t=this._decoder.write(t)),this._parser.write(t),n()}},3719:function(t,e,n){var r=n(763),a=n(8753);function i(e,n){return delete t.exports[e],t.exports[e]=n,n}t.exports={Parser:r,Tokenizer:n(9889),ElementType:n(4431),DomHandler:a,get FeedHandler(){return i("FeedHandler",n(3870))},get Stream(){return i("Stream",n(9924))},get WritableStream(){return i("WritableStream",n(3621))},get ProxyHandler(){return i("ProxyHandler",n(6321))},get DomUtils(){return i("DomUtils",n(2417))},get CollectingHandler(){return i("CollectingHandler",n(5449))},DefaultHandler:a,get RssHandler(){return i("RssHandler",this.FeedHandler)},parseDOM:function(t,e){var n=new a(e);return new r(n,e).end(t),n.dom},parseFeed:function(e,n){var a=new t.exports.FeedHandler(n);return new r(a,n).end(e),a.dom},createDomStream:function(t,e,n){var i=new a(t,e,n);return new r(i,e)},EVENTS:{attribute:2,cdatastart:0,cdataend:0,text:1,processinginstruction:2,comment:1,commentend:0,closetag:1,opentag:2,opentagname:1,error:1,end:0}}},645:function(t,e){e.read=function(t,e,n,r,a){var i,s,o=8*a-r-1,l=(1<<o)-1,u=l>>1,c=-7,d=n?a-1:0,f=n?-1:1,p=t[e+d];for(d+=f,i=p&(1<<-c)-1,p>>=-c,c+=o;c>0;i=256*i+t[e+d],d+=f,c-=8);for(s=i&(1<<-c)-1,i>>=-c,c+=r;c>0;s=256*s+t[e+d],d+=f,c-=8);if(0===i)i=1-u;else{if(i===l)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,r),i-=u}return(p?-1:1)*s*Math.pow(2,i-r)},e.write=function(t,e,n,r,a,i){var s,o,l,u=8*i-a-1,c=(1<<u)-1,d=c>>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,v=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-s))<1&&(s--,l*=2),(e+=s+d>=1?f/l:f*Math.pow(2,1-d))*l>=2&&(s++,l/=2),s+d>=c?(o=0,s=c):s+d>=1?(o=(e*l-1)*Math.pow(2,a),s+=d):(o=e*Math.pow(2,d-1)*Math.pow(2,a),s=0));a>=8;t[n+p]=255&o,p+=v,o/=256,a-=8);for(s=s<<a|o,u+=a;u>0;t[n+p]=255&s,p+=v,s/=256,u-=8);t[n+p-v]|=128*m}},5717:function(t){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}}},5826:function(t){t.exports=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)}},4779:function(t,e,n){var r=n(5826);t.exports=function t(e,n,a){return r(n)||(a=n||a,n=[]),a=a||{},e instanceof RegExp?function(t,e){var n=t.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)e.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(t,e)}(e,n):r(e)?function(e,n,r){for(var a=[],i=0;i<e.length;i++)a.push(t(e[i],n,r).source);return c(new RegExp("(?:"+a.join("|")+")",d(r)),n)}(e,n,a):function(t,e,n){return f(i(t,n),e,n)}(e,n,a)},t.exports.parse=i,t.exports.compile=function(t,e){return o(i(t,e),e)},t.exports.tokensToFunction=o,t.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(t,e){for(var n,r=[],i=0,s=0,o="",c=e&&e.delimiter||"/";null!=(n=a.exec(t));){var d=n[0],f=n[1],p=n.index;if(o+=t.slice(s,p),s=p+d.length,f)o+=f[1];else{var v=t[s],m=n[2],h=n[3],A=n[4],b=n[5],g=n[6],y=n[7];o&&(r.push(o),o="");var x=null!=m&&null!=v&&v!==m,w="+"===g||"*"===g,E="?"===g||"*"===g,X=n[2]||c,R=A||b;r.push({name:h||i++,prefix:m||"",delimiter:X,optional:E,repeat:w,partial:x,asterisk:!!y,pattern:R?u(R):y?".*":"[^"+l(X)+"]+?"})}}return s<t.length&&(o+=t.substr(s)),o&&r.push(o),r}function s(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function o(t,e){for(var n=new Array(t.length),a=0;a<t.length;a++)"object"==typeof t[a]&&(n[a]=new RegExp("^(?:"+t[a].pattern+")$",d(e)));return function(e,a){for(var i="",o=e||{},l=(a||{}).pretty?s:encodeURIComponent,u=0;u<t.length;u++){var c=t[u];if("string"!=typeof c){var d,f=o[c.name];if(null==f){if(c.optional){c.partial&&(i+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=l(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");i+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):l(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');i+=c.prefix+d}}else i+=c}return i}}function l(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function c(t,e){return t.keys=e,t}function d(t){return t&&t.sensitive?"":"i"}function f(t,e,n){r(e)||(n=e||n,e=[]);for(var a=(n=n||{}).strict,i=!1!==n.end,s="",o=0;o<t.length;o++){var u=t[o];if("string"==typeof u)s+=l(u);else{var f=l(u.prefix),p="(?:"+u.pattern+")";e.push(u),u.repeat&&(p+="(?:"+f+p+")*"),s+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var v=l(n.delimiter||"/"),m=s.slice(-v.length)===v;return a||(s=(m?s.slice(0,-v.length):s)+"(?:"+v+"(?=$))?"),s+=i?"$":a&&m?"":"(?="+v+"|$)",c(new RegExp("^"+s,d(n)),e)}},2703:function(t,e,n){"use strict";var r=n(414);function a(){}function i(){}i.resetWarningCache=a,t.exports=function(){function t(t,e,n,a,i,s){if(s!==r){var o=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function e(){return t}t.isRequired=t;var n={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:i,resetWarningCache:a};return n.PropTypes=n,n}},5697:function(t,e,n){t.exports=n(2703)()},414:function(t){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4887:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.decodeEntities,i=void 0===n||n,s=e.transform,o=e.preprocessNodes,l=void 0===o?function(t){return t}:o,u=l(r.default.parseDOM(t,{decodeEntities:i}));return(0,a.default)(u,s)};var r=i(n(3719)),a=i(n(6630));function i(t){return t&&t.__esModule?t:{default:t}}},5324:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,n){return a.default[t.type](t,e,n)};var r,a=(r=n(532))&&r.__esModule?r:{default:r}},5888:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=["allowfullScreen","async","autoplay","capture","checked","controls","default","defer","disabled","formnovalidate","hidden","loop","multiple","muted","novalidate","open","playsinline","readonly","required","reversed","scoped","seamless","selected","itemscope"]},5260:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={accept:"accept","accept-charset":"acceptCharset",accesskey:"accessKey",action:"action",allowfullscreen:"allowFullScreen",allowtransparency:"allowTransparency",alt:"alt",as:"as",async:"async",autocomplete:"autoComplete",autoplay:"autoPlay",capture:"capture",cellpadding:"cellPadding",cellspacing:"cellSpacing",charset:"charSet",challenge:"challenge",checked:"checked",cite:"cite",classid:"classID",class:"className",cols:"cols",colspan:"colSpan",content:"content",contenteditable:"contentEditable",contextmenu:"contextMenu",controls:"controls",controlsList:"controlsList",coords:"coords",crossorigin:"crossOrigin",data:"data",datetime:"dateTime",default:"default",defer:"defer",dir:"dir",disabled:"disabled",download:"download",draggable:"draggable",enctype:"encType",form:"form",formaction:"formAction",formenctype:"formEncType",formmethod:"formMethod",formnovalidate:"formNoValidate",formtarget:"formTarget",frameborder:"frameBorder",headers:"headers",height:"height",hidden:"hidden",high:"high",href:"href",hreflang:"hrefLang",for:"htmlFor","http-equiv":"httpEquiv",icon:"icon",id:"id",inputmode:"inputMode",integrity:"integrity",is:"is",keyparams:"keyParams",keytype:"keyType",kind:"kind",label:"label",lang:"lang",list:"list",loop:"loop",low:"low",manifest:"manifest",marginheight:"marginHeight",marginwidth:"marginWidth",max:"max",maxlength:"maxLength",media:"media",mediagroup:"mediaGroup",method:"method",min:"min",minlength:"minLength",multiple:"multiple",muted:"muted",name:"name",nonce:"nonce",novalidate:"noValidate",open:"open",optimum:"optimum",pattern:"pattern",placeholder:"placeholder",playsinline:"playsInline",poster:"poster",preload:"preload",profile:"profile",radiogroup:"radioGroup",readonly:"readOnly",referrerpolicy:"referrerPolicy",rel:"rel",required:"required",reversed:"reversed",role:"role",rows:"rows",rowspan:"rowSpan",sandbox:"sandbox",scope:"scope",scoped:"scoped",scrolling:"scrolling",seamless:"seamless",selected:"selected",shape:"shape",size:"size",sizes:"sizes",slot:"slot",span:"span",spellcheck:"spellCheck",src:"src",srcdoc:"srcDoc",srclang:"srcLang",srcset:"srcSet",start:"start",step:"step",style:"style",summary:"summary",tabindex:"tabIndex",target:"target",title:"title",type:"type",usemap:"useMap",value:"value",width:"width",wmode:"wmode",wrap:"wrap",about:"about",datatype:"datatype",inlist:"inlist",prefix:"prefix",property:"property",resource:"resource",typeof:"typeof",vocab:"vocab",autocapitalize:"autoCapitalize",autocorrect:"autoCorrect",autosave:"autoSave",color:"color",itemprop:"itemProp",itemscope:"itemScope",itemtype:"itemType",itemid:"itemID",itemref:"itemRef",results:"results",security:"security",unselectable:"unselectable"}},3662:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]},5961:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){var n=void 0;t.children.length>0&&(n=t.children[0].data);var i=(0,a.default)(t.attribs,e);return r.default.createElement("style",i,n)};var r=i(n(9196)),a=i(n(8024));function i(t){return t&&t.__esModule?t:{default:t}}},2593:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,n){var l=t.name;if(!(0,o.default)(l))return null;var u=(0,i.default)(t.attribs,e),c=null;return-1===s.default.indexOf(l)&&(c=(0,a.default)(t.children,n)),r.default.createElement(l,u,c)};var r=l(n(9196)),a=l(n(6630)),i=l(n(8024)),s=l(n(3662)),o=l(n(2536));function l(t){return t&&t.__esModule?t:{default:t}}},3180:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return t.data}},5639:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){return null}},532:function(t,e,n){"use strict";var r;Object.defineProperty(e,"__esModule",{value:!0});var a=n(3719),i=u(n(3180)),s=u(n(2593)),o=u(n(5961)),l=u(n(5639));function u(t){return t&&t.__esModule?t:{default:t}}function c(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.default=(c(r={},a.ElementType.Text,i.default),c(r,a.ElementType.Tag,s.default),c(r,a.ElementType.Style,o.default),c(r,a.ElementType.Directive,l.default),c(r,a.ElementType.Comment,l.default),c(r,a.ElementType.Script,l.default),c(r,a.ElementType.CDATA,l.default),c(r,a.ElementType.Doctype,l.default),r)},653:function(t,e,n){"use strict";n(6630),n(5324),n(3719);var r,a=(r=n(4887))&&r.__esModule?r:{default:r};e.ZP=a.default},6630:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){return t.filter((function(t){return!(0,r.default)(t)})).map((function(t,n){var r=void 0;return"function"!=typeof e||null!==(r=e(t,n))&&!r?(0,a.default)(t,n,e):r}))};var r=i(n(2057)),a=i(n(5324));function i(t){return t&&t.__esModule?t:{default:t}}},8024:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t};e.default=function(t,e){var n=r({},(0,a.default)(t),{key:e});return"string"==typeof n.style||n.style instanceof String?n.style=(0,i.default)(n.style):delete n.style,n};var a=s(n(4381)),i=s(n(3083));function s(t){return t&&t.__esModule?t:{default:t}}},4381:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return Object.keys(t).filter((function(t){return(0,i.default)(t)})).reduce((function(e,n){var i=n.toLowerCase(),s=a.default[i]||i;return e[s]=function(t,e){return r.default.map((function(t){return t.toLowerCase()})).indexOf(t.toLowerCase())>=0&&(e=t),e}(s,t[n]),e}),{})};var r=s(n(5888)),a=s(n(5260)),i=s(n(2536));function s(t){return t&&t.__esModule?t:{default:t}}},3083:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var n=[],_n=!0,r=!1,a=void 0;try{for(var i,s=t[Symbol.iterator]();!(_n=(i=s.next()).done)&&(n.push(i.value),!e||n.length!==e);_n=!0);}catch(t){r=!0,a=t}finally{try{!_n&&s.return&&s.return()}finally{if(r)throw a}}return n}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")};e.default=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return""===t?{}:t.split(";").reduce((function(t,e){var r=e.split(/^([^:]+):/).filter((function(t,e){return e>0})).map((function(t){return t.trim().toLowerCase()})),a=n(r,2),i=a[0],s=a[1];return void 0===s||(t[i=i.replace(/^-ms-/,"ms-").replace(/-(.)/g,(function(t,e){return e.toUpperCase()}))]=s),t}),{})}},2057:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return"text"===t.type&&/\r?\n/.test(t.data)&&""===t.data.trim()}},2536:function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return r.hasOwnProperty(t)||(r[t]=n.test(t)),r[t]};var n=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,r={}},9921:function(t,e){"use strict";if("function"==typeof Symbol&&Symbol.for){var n=Symbol.for;n("react.element"),n("react.portal"),n("react.fragment"),n("react.strict_mode"),n("react.profiler"),n("react.provider"),n("react.context"),n("react.forward_ref"),n("react.suspense"),n("react.suspense_list"),n("react.memo"),n("react.lazy"),n("react.block"),n("react.server.block"),n("react.fundamental"),n("react.debug_trace_mode"),n("react.legacy_hidden")}},9864:function(t,e,n){"use strict";n(9921)},86:function(t,e){"use strict";var n="function"==typeof Symbol&&Symbol.for;n&&Symbol.for("react.element"),n&&Symbol.for("react.portal"),n&&Symbol.for("react.fragment"),n&&Symbol.for("react.strict_mode"),n&&Symbol.for("react.profiler"),n&&Symbol.for("react.provider"),n&&Symbol.for("react.context"),n&&Symbol.for("react.async_mode"),n&&Symbol.for("react.concurrent_mode"),n&&Symbol.for("react.forward_ref"),n&&Symbol.for("react.suspense"),n&&Symbol.for("react.suspense_list"),n&&Symbol.for("react.memo"),n&&Symbol.for("react.lazy"),n&&Symbol.for("react.block"),n&&Symbol.for("react.fundamental"),n&&Symbol.for("react.responder"),n&&Symbol.for("react.scope")},663:function(t,e,n){"use strict";n(86)},9509:function(t,e,n){var r=n(8764),a=r.Buffer;function i(t,e){for(var n in t)e[n]=t[n]}function s(t,e,n){return a(t,e,n)}a.from&&a.alloc&&a.allocUnsafe&&a.allocUnsafeSlow?t.exports=r:(i(r,e),e.Buffer=s),s.prototype=Object.create(a.prototype),i(a,s),s.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return a(t,e,n)},s.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=a(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return a(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return r.SlowBuffer(t)}},2553:function(t,e,n){"use strict";var r=n(9509).Buffer,a=r.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(r.isEncoding===a||!a(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=l,this.end=u,e=4;break;case"utf8":this.fillLast=o,e=4;break;case"base64":this.text=c,this.end=d,e=3;break;default:return this.write=f,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(e)}function s(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function o(t){var e=this.lastTotal-this.lastNeed,n=function(t,e,n){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==n?n:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function l(t,e){if((t.length-e)%2==0){var n=t.toString("utf16le",e);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,n)}return e}function c(t,e){var n=(t.length-e)%3;return 0===n?t.toString("base64",e):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-n))}function d(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function f(t){return t.toString(this.encoding)}function p(t){return t&&t.length?this.write(t):""}e.s=i,i.prototype.write=function(t){if(0===t.length)return"";var e,n;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n<t.length?e?e+this.text(t,n):this.text(t,n):e||""},i.prototype.end=function(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"�":e},i.prototype.text=function(t,e){var n=function(t,e,n){var r=e.length-1;if(r<n)return 0;var a=s(e[r]);return a>=0?(a>0&&(t.lastNeed=a-1),a):--r<n||-2===a?0:(a=s(e[r]))>=0?(a>0&&(t.lastNeed=a-2),a):--r<n||-2===a?0:(a=s(e[r]))>=0?(a>0&&(2===a?a=0:t.lastNeed=a-3),a):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=n;var r=t.length-(n-this.lastNeed);return t.copy(this.lastChar,0,r),t.toString("utf8",e,r)},i.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},9196:function(t){"use strict";t.exports=window.React},247:function(){},9933:function(t){"use strict";t.exports=JSON.parse('{"elementNames":{"altglyph":"altGlyph","altglyphdef":"altGlyphDef","altglyphitem":"altGlyphItem","animatecolor":"animateColor","animatemotion":"animateMotion","animatetransform":"animateTransform","clippath":"clipPath","feblend":"feBlend","fecolormatrix":"feColorMatrix","fecomponenttransfer":"feComponentTransfer","fecomposite":"feComposite","feconvolvematrix":"feConvolveMatrix","fediffuselighting":"feDiffuseLighting","fedisplacementmap":"feDisplacementMap","fedistantlight":"feDistantLight","fedropshadow":"feDropShadow","feflood":"feFlood","fefunca":"feFuncA","fefuncb":"feFuncB","fefuncg":"feFuncG","fefuncr":"feFuncR","fegaussianblur":"feGaussianBlur","feimage":"feImage","femerge":"feMerge","femergenode":"feMergeNode","femorphology":"feMorphology","feoffset":"feOffset","fepointlight":"fePointLight","fespecularlighting":"feSpecularLighting","fespotlight":"feSpotLight","fetile":"feTile","feturbulence":"feTurbulence","foreignobject":"foreignObject","glyphref":"glyphRef","lineargradient":"linearGradient","radialgradient":"radialGradient","textpath":"textPath"},"attributeNames":{"definitionurl":"definitionURL","attributename":"attributeName","attributetype":"attributeType","basefrequency":"baseFrequency","baseprofile":"baseProfile","calcmode":"calcMode","clippathunits":"clipPathUnits","diffuseconstant":"diffuseConstant","edgemode":"edgeMode","filterunits":"filterUnits","glyphref":"glyphRef","gradienttransform":"gradientTransform","gradientunits":"gradientUnits","kernelmatrix":"kernelMatrix","kernelunitlength":"kernelUnitLength","keypoints":"keyPoints","keysplines":"keySplines","keytimes":"keyTimes","lengthadjust":"lengthAdjust","limitingconeangle":"limitingConeAngle","markerheight":"markerHeight","markerunits":"markerUnits","markerwidth":"markerWidth","maskcontentunits":"maskContentUnits","maskunits":"maskUnits","numoctaves":"numOctaves","pathlength":"pathLength","patterncontentunits":"patternContentUnits","patterntransform":"patternTransform","patternunits":"patternUnits","pointsatx":"pointsAtX","pointsaty":"pointsAtY","pointsatz":"pointsAtZ","preservealpha":"preserveAlpha","preserveaspectratio":"preserveAspectRatio","primitiveunits":"primitiveUnits","refx":"refX","refy":"refY","repeatcount":"repeatCount","repeatdur":"repeatDur","requiredextensions":"requiredExtensions","requiredfeatures":"requiredFeatures","specularconstant":"specularConstant","specularexponent":"specularExponent","spreadmethod":"spreadMethod","startoffset":"startOffset","stddeviation":"stdDeviation","stitchtiles":"stitchTiles","surfacescale":"surfaceScale","systemlanguage":"systemLanguage","tablevalues":"tableValues","targetx":"targetX","targety":"targetY","textlength":"textLength","viewbox":"viewBox","viewtarget":"viewTarget","xchannelselector":"xChannelSelector","ychannelselector":"yChannelSelector","zoomandpan":"zoomAndPan"}}')},9451:function(t){"use strict";t.exports=JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}')},1363:function(t){"use strict";t.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"ℋ","HARDcy":"Ъ","hardcy":"ъ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"ℏ","Hcirc":"Ĥ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","Hfr":"ℌ","HilbertSpace":"ℋ","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","Hopf":"ℍ","horbar":"―","HorizontalLine":"─","hscr":"𝒽","Hscr":"ℋ","hslash":"ℏ","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"≏","hybull":"⁃","hyphen":"‐","Iacute":"Í","iacute":"í","ic":"","Icirc":"Î","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"𝔦","Ifr":"ℑ","Igrave":"Ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"ī","image":"ℑ","ImaginaryI":"ⅈ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","Im":"ℑ","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"℅","in":"∈","infin":"∞","infintie":"⧝","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"⋂","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"","InvisibleTimes":"","IOcy":"Ё","iocy":"ё","Iogon":"Į","iogon":"į","Iopf":"𝕀","iopf":"𝕚","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"𝒾","Iscr":"ℐ","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"","Itilde":"Ĩ","itilde":"ĩ","Iukcy":"І","iukcy":"і","Iuml":"Ï","iuml":"ï","Jcirc":"Ĵ","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"𝔍","jfr":"𝔧","jmath":"ȷ","Jopf":"𝕁","jopf":"𝕛","Jscr":"𝒥","jscr":"𝒿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"є","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"ķ","Kcy":"К","kcy":"к","Kfr":"𝔎","kfr":"𝔨","kgreen":"ĸ","KHcy":"Х","khcy":"х","KJcy":"Ќ","kjcy":"ќ","Kopf":"𝕂","kopf":"𝕜","Kscr":"𝒦","kscr":"𝓀","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"ℒ","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"←","Larr":"↞","lArr":"⇐","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ļ","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"←","LeftArrow":"←","Leftarrow":"⇐","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"⋋","LeftTriangleBar":"⧏","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"𝔏","lfr":"𝔩","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","LJcy":"Љ","ljcy":"љ","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"◺","Lmidot":"Ŀ","lmidot":"ŀ","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"𝕃","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","Lscr":"ℒ","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Ł","lstrok":"ł","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"","NegativeThickSpace":"","NegativeThinSpace":"","NegativeVeryThinSpace":"","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":" ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"","zwnj":""}')},8611:function(t){"use strict";t.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Å","aring":"å","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Í","iacute":"í","Icirc":"Î","icirc":"î","iexcl":"¡","Igrave":"Ì","igrave":"ì","iquest":"¿","Iuml":"Ï","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ò","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ý","yacute":"ý","yen":"¥","yuml":"ÿ"}')},4204:function(t){"use strict";t.exports=JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}')},9545:function(t){"use strict";t.exports=JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}')},9489:function(t){"use strict";t.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"ℋ","HARDcy":"Ъ","hardcy":"ъ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"ℏ","Hcirc":"Ĥ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","Hfr":"ℌ","HilbertSpace":"ℋ","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","Hopf":"ℍ","horbar":"―","HorizontalLine":"─","hscr":"𝒽","Hscr":"ℋ","hslash":"ℏ","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"≏","hybull":"⁃","hyphen":"‐","Iacute":"Í","iacute":"í","ic":"","Icirc":"Î","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"𝔦","Ifr":"ℑ","Igrave":"Ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"ī","image":"ℑ","ImaginaryI":"ⅈ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","Im":"ℑ","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"℅","in":"∈","infin":"∞","infintie":"⧝","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"⋂","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"","InvisibleTimes":"","IOcy":"Ё","iocy":"ё","Iogon":"Į","iogon":"į","Iopf":"𝕀","iopf":"𝕚","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"𝒾","Iscr":"ℐ","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"","Itilde":"Ĩ","itilde":"ĩ","Iukcy":"І","iukcy":"і","Iuml":"Ï","iuml":"ï","Jcirc":"Ĵ","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"𝔍","jfr":"𝔧","jmath":"ȷ","Jopf":"𝕁","jopf":"𝕛","Jscr":"𝒥","jscr":"𝒿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"є","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"ķ","Kcy":"К","kcy":"к","Kfr":"𝔎","kfr":"𝔨","kgreen":"ĸ","KHcy":"Х","khcy":"х","KJcy":"Ќ","kjcy":"ќ","Kopf":"𝕂","kopf":"𝕜","Kscr":"𝒦","kscr":"𝓀","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"ℒ","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"←","Larr":"↞","lArr":"⇐","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ļ","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"←","LeftArrow":"←","Leftarrow":"⇐","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"⋋","LeftTriangleBar":"⧏","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"𝔏","lfr":"𝔩","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","LJcy":"Љ","ljcy":"љ","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"◺","Lmidot":"Ŀ","lmidot":"ŀ","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"𝕃","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","Lscr":"ℒ","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Ł","lstrok":"ł","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"","NegativeThickSpace":"","NegativeThinSpace":"","NegativeVeryThinSpace":"","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":" ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"","zwnj":""}')},490:function(t){"use strict";t.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Å","aring":"å","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Í","iacute":"í","Icirc":"Î","icirc":"î","iexcl":"¡","Igrave":"Ì","igrave":"ì","iquest":"¿","Iuml":"Ï","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ò","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ý","yacute":"ý","yen":"¥","yuml":"ÿ"}')},1344:function(t){"use strict";t.exports=JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}')}},e={};function n(r){var a=e[r];if(void 0!==a)return a.exports;var i=e[r]={exports:{}};return t[r].call(i.exports,i,i.exports,n),i.exports}n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,{a:e}),e},n.d=function(t,e){for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},function(){"use strict";var t=window.wp.element,e=n(9196),r=n.n(e),a=window.ReactDOM,i=n.n(a);function s(t,e,...n){if(t in e){let r=e[t];return"function"==typeof r?r(...n):r}let r=new Error(`Tried to handle "${t}" but there is no handler defined. Only defined handlers are: ${Object.keys(e).map((t=>`"${t}"`)).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,s),r}n(6738);var o,l=((o=l||{})[o.None=0]="None",o[o.RenderStrategy=1]="RenderStrategy",o[o.Static=2]="Static",o),u=(t=>(t[t.Unmount=0]="Unmount",t[t.Hidden=1]="Hidden",t))(u||{});function c({ourProps:t,theirProps:e,slot:n,defaultTag:r,features:a,visible:i=!0,name:o}){let l=f(e,t);if(i)return d(l,n,r,o);let u=null!=a?a:0;if(2&u){let{static:t=!1,...e}=l;if(t)return d(e,n,r,o)}if(1&u){let{unmount:t=!0,...e}=l;return s(t?0:1,{0(){return null},1(){return d({...e,hidden:!0,style:{display:"none"}},n,r,o)}})}return d(l,n,r,o)}function d(t,n={},r,a){let{as:i=r,children:s,refName:o="ref",...l}=m(t,["unmount","static"]),u=void 0!==t.ref?{[o]:t.ref}:{},c="function"==typeof s?s(n):s;l.className&&"function"==typeof l.className&&(l.className=l.className(n));let d={};if(n){let t=!1,e=[];for(let[r,a]of Object.entries(n))"boolean"==typeof a&&(t=!0),!0===a&&e.push(r);t&&(d["data-headlessui-state"]=e.join(" "))}if(i===e.Fragment&&Object.keys(v(l)).length>0){if(!(0,e.isValidElement)(c)||Array.isArray(c)&&c.length>1)throw new Error(['Passing props on "Fragment"!',"",`The current component <${a} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(l).map((t=>` - ${t}`)).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map((t=>` - ${t}`)).join("\n")].join("\n"));return(0,e.cloneElement)(c,Object.assign({},f(c.props,v(m(l,["ref"]))),d,u,function(...t){return{ref:t.every((t=>null==t))?void 0:e=>{for(let n of t)null!=n&&("function"==typeof n?n(e):n.current=e)}}}(c.ref,u.ref)))}return(0,e.createElement)(i,Object.assign({},m(l,["ref"]),i!==e.Fragment&&u,i!==e.Fragment&&d),c)}function f(...t){if(0===t.length)return{};if(1===t.length)return t[0];let e={},n={};for(let r of t)for(let t in r)t.startsWith("on")&&"function"==typeof r[t]?(null!=n[t]||(n[t]=[]),n[t].push(r[t])):e[t]=r[t];if(e.disabled||e["aria-disabled"])return Object.assign(e,Object.fromEntries(Object.keys(n).map((t=>[t,void 0]))));for(let t in n)Object.assign(e,{[t](e,...r){let a=n[t];for(let t of a){if((e instanceof Event||(null==e?void 0:e.nativeEvent)instanceof Event)&&e.defaultPrevented)return;t(e,...r)}}});return e}function p(t){var n;return Object.assign((0,e.forwardRef)(t),{displayName:null!=(n=t.displayName)?n:t.name})}function v(t){let e=Object.assign({},t);for(let t in e)void 0===e[t]&&delete e[t];return e}function m(t,e=[]){let n=Object.assign({},t);for(let t of e)t in n&&delete n[t];return n}const h="undefined"==typeof window||"undefined"==typeof document;let A=h?e.useEffect:e.useLayoutEffect;function b(t){let n=(0,e.useRef)(t);return A((()=>{n.current=t}),[t]),n}let g=function(t){let n=b(t);return e.useCallback(((...t)=>n.current(...t)),[n])},y=Symbol();function x(t,e=!0){return Object.assign(t,{[y]:e})}function w(...t){let n=(0,e.useRef)(t);(0,e.useEffect)((()=>{n.current=t}),[t]);let r=g((t=>{for(let e of n.current)null!=e&&("function"==typeof e?e(t):e.current=t)}));return t.every((t=>null==t||(null==t?void 0:t[y])))?void 0:r}let E={serverHandoffComplete:!1};function X(){let[t,n]=(0,e.useState)(E.serverHandoffComplete);return(0,e.useEffect)((()=>{!0!==t&&n(!0)}),[t]),(0,e.useEffect)((()=>{!1===E.serverHandoffComplete&&(E.serverHandoffComplete=!0)}),[]),t}var R;let L=0;function V(){return++L}let z=null!=(R=e.useId)?R:function(){let t=X(),[n,r]=e.useState(t?V:null);return A((()=>{null===n&&r(V())}),[n]),null!=n?""+n:void 0};var N=(t=>(t.Space=" ",t.Enter="Enter",t.Escape="Escape",t.Backspace="Backspace",t.Delete="Delete",t.ArrowLeft="ArrowLeft",t.ArrowUp="ArrowUp",t.ArrowRight="ArrowRight",t.ArrowDown="ArrowDown",t.Home="Home",t.End="End",t.PageUp="PageUp",t.PageDown="PageDown",t.Tab="Tab",t))(N||{});function P(t){let e=t.parentElement,n=null;for(;e&&!(e instanceof HTMLFieldSetElement);)e instanceof HTMLLegendElement&&(n=e),e=e.parentElement;let r=""===(null==e?void 0:e.getAttribute("disabled"));return(!r||!function(t){if(!t)return!1;let e=t.previousElementSibling;for(;null!==e;){if(e instanceof HTMLLegendElement)return!1;e=e.previousElementSibling}return!0}(n))&&r}let O=(0,e.createContext)(null);O.displayName="OpenClosedContext";var q=(t=>(t[t.Open=0]="Open",t[t.Closed=1]="Closed",t))(q||{});function W(){return(0,e.useContext)(O)}function T({value:t,children:n}){return e.createElement(O.Provider,{value:t},n)}function C(t){var e;if(t.type)return t.type;let n=null!=(e=t.as)?e:"button";return"string"==typeof n&&"button"===n.toLowerCase()?"button":void 0}function I(t,n){let[r,a]=(0,e.useState)((()=>C(t)));return A((()=>{a(C(t))}),[t.type,t.as]),A((()=>{r||!n.current||n.current instanceof HTMLButtonElement&&!n.current.hasAttribute("type")&&a("button")}),[r,n]),r}function F(t){return h?null:t instanceof Node?t.ownerDocument:null!=t&&t.hasOwnProperty("current")&&t.current instanceof Node?t.current.ownerDocument:document}var j,S=(t=>(t[t.Open=0]="Open",t[t.Closed=1]="Closed",t))(S||{}),H=((j=H||{})[j.ToggleDisclosure=0]="ToggleDisclosure",j[j.CloseDisclosure=1]="CloseDisclosure",j[j.SetButtonId=2]="SetButtonId",j[j.SetPanelId=3]="SetPanelId",j[j.LinkPanel=4]="LinkPanel",j[j.UnlinkPanel=5]="UnlinkPanel",j);let D={0:t=>({...t,disclosureState:s(t.disclosureState,{0:1,1:0})}),1:t=>1===t.disclosureState?t:{...t,disclosureState:1},4(t){return!0===t.linkedPanel?t:{...t,linkedPanel:!0}},5(t){return!1===t.linkedPanel?t:{...t,linkedPanel:!1}},2(t,e){return t.buttonId===e.buttonId?t:{...t,buttonId:e.buttonId}},3(t,e){return t.panelId===e.panelId?t:{...t,panelId:e.panelId}}},Z=(0,e.createContext)(null);function M(t){let n=(0,e.useContext)(Z);if(null===n){let e=new Error(`<${t} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,M),e}return n}Z.displayName="DisclosureContext";let k=(0,e.createContext)(null);function B(t){let n=(0,e.useContext)(k);if(null===n){let e=new Error(`<${t} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,B),e}return n}k.displayName="DisclosureAPIContext";let G=(0,e.createContext)(null);function Y(t,e){return s(e.type,D,t,e)}G.displayName="DisclosurePanelContext";let U=e.Fragment,K=p((function(t,n){let{defaultOpen:r=!1,...a}=t,i=`headlessui-disclosure-button-${z()}`,o=`headlessui-disclosure-panel-${z()}`,l=(0,e.useRef)(null),u=w(n,x((t=>{l.current=t}),void 0===t.as||t.as===e.Fragment)),d=(0,e.useRef)(null),f=(0,e.useRef)(null),p=(0,e.useReducer)(Y,{disclosureState:r?0:1,linkedPanel:!1,buttonRef:f,panelRef:d,buttonId:i,panelId:o}),[{disclosureState:v},m]=p;(0,e.useEffect)((()=>m({type:2,buttonId:i})),[i,m]),(0,e.useEffect)((()=>m({type:3,panelId:o})),[o,m]);let h=g((t=>{m({type:1});let e=F(l);if(!e)return;let n=t?t instanceof HTMLElement?t:t.current instanceof HTMLElement?t.current:e.getElementById(i):e.getElementById(i);null==n||n.focus()})),A=(0,e.useMemo)((()=>({close:h})),[h]),b=(0,e.useMemo)((()=>({open:0===v,close:h})),[v,h]),y={ref:u};return e.createElement(Z.Provider,{value:p},e.createElement(k.Provider,{value:A},e.createElement(T,{value:s(v,{0:q.Open,1:q.Closed})},c({ourProps:y,theirProps:a,slot:b,defaultTag:U,name:"Disclosure"}))))})),J=p((function(t,n){let[r,a]=M("Disclosure.Button"),i=(0,e.useContext)(G),s=null!==i&&i===r.panelId,o=(0,e.useRef)(null),l=w(o,n,s?null:r.buttonRef),u=g((t=>{var e;if(s){if(1===r.disclosureState)return;switch(t.key){case N.Space:case N.Enter:t.preventDefault(),t.stopPropagation(),a({type:0}),null==(e=r.buttonRef.current)||e.focus()}}else switch(t.key){case N.Space:case N.Enter:t.preventDefault(),t.stopPropagation(),a({type:0})}})),d=g((t=>{t.key===N.Space&&t.preventDefault()})),f=g((e=>{var n;P(e.currentTarget)||t.disabled||(s?(a({type:0}),null==(n=r.buttonRef.current)||n.focus()):a({type:0}))})),p=(0,e.useMemo)((()=>({open:0===r.disclosureState})),[r]),v=I(t,o),m=t;return c({ourProps:s?{ref:l,type:v,onKeyDown:u,onClick:f}:{ref:l,id:r.buttonId,type:v,"aria-expanded":t.disabled?void 0:0===r.disclosureState,"aria-controls":r.linkedPanel?r.panelId:void 0,onKeyDown:u,onKeyUp:d,onClick:f},theirProps:m,slot:p,defaultTag:"button",name:"Disclosure.Button"})})),Q=l.RenderStrategy|l.Static,_=p((function(t,n){let[r,a]=M("Disclosure.Panel"),{close:i}=B("Disclosure.Panel"),s=w(n,r.panelRef,(t=>{a({type:t?4:5})})),o=W(),l=null!==o?o===q.Open:0===r.disclosureState,u=(0,e.useMemo)((()=>({open:0===r.disclosureState,close:i})),[r,i]),d=t,f={ref:s,id:r.panelId};return e.createElement(G.Provider,{value:r.panelId},c({ourProps:f,theirProps:d,slot:u,defaultTag:"div",features:Q,visible:l,name:"Disclosure.Panel"}))})),$=Object.assign(K,{Button:J,Panel:_});function tt(t,e){return tt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},tt(t,e)}function et(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,tt(t,e)}var nt=n(5697),rt=n.n(nt);function at(){return at=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},at.apply(this,arguments)}function it(t){return"/"===t.charAt(0)}function st(t,e){for(var n=e,r=n+1,a=t.length;r<a;n+=1,r+=1)t[n]=t[r];t.pop()}function ot(t,e){if(!t)throw new Error("Invariant failed")}function lt(t){return"/"===t.charAt(0)?t:"/"+t}function ut(t,e){return function(t,e){return 0===t.toLowerCase().indexOf(e.toLowerCase())&&-1!=="/?#".indexOf(t.charAt(e.length))}(t,e)?t.substr(e.length):t}function ct(t){return"/"===t.charAt(t.length-1)?t.slice(0,-1):t}function dt(t){var e=t.pathname,n=t.search,r=t.hash,a=e||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function ft(t,e,n,r){var a;"string"==typeof t?(a=function(t){var e=t||"/",n="",r="",a=e.indexOf("#");-1!==a&&(r=e.substr(a),e=e.substr(0,a));var i=e.indexOf("?");return-1!==i&&(n=e.substr(i),e=e.substr(0,i)),{pathname:e,search:"?"===n?"":n,hash:"#"===r?"":r}}(t),a.state=e):(void 0===(a=at({},t)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==e&&void 0===a.state&&(a.state=e));try{a.pathname=decodeURI(a.pathname)}catch(t){throw t instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):t}return n&&(a.key=n),r?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=function(t,e){void 0===e&&(e="");var n,r=t&&t.split("/")||[],a=e&&e.split("/")||[],i=t&&it(t),s=e&&it(e),o=i||s;if(t&&it(t)?a=r:r.length&&(a.pop(),a=a.concat(r)),!a.length)return"/";if(a.length){var l=a[a.length-1];n="."===l||".."===l||""===l}else n=!1;for(var u=0,c=a.length;c>=0;c--){var d=a[c];"."===d?st(a,c):".."===d?(st(a,c),u++):u&&(st(a,c),u--)}if(!o)for(;u--;u)a.unshift("..");!o||""===a[0]||a[0]&&it(a[0])||a.unshift("");var f=a.join("/");return n&&"/"!==f.substr(-1)&&(f+="/"),f}(a.pathname,r.pathname)):a.pathname=r.pathname:a.pathname||(a.pathname="/"),a}function pt(){var t=null,e=[];return{setPrompt:function(e){return t=e,function(){t===e&&(t=null)}},confirmTransitionTo:function(e,n,r,a){if(null!=t){var i="function"==typeof t?t(e,n):t;"string"==typeof i?"function"==typeof r?r(i,a):a(!0):a(!1!==i)}else a(!0)},appendListener:function(t){var n=!0;function r(){n&&t.apply(void 0,arguments)}return e.push(r),function(){n=!1,e=e.filter((function(t){return t!==r}))}},notifyListeners:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];e.forEach((function(t){return t.apply(void 0,n)}))}}}var vt=!("undefined"==typeof window||!window.document||!window.document.createElement);function mt(t,e){e(window.confirm(t))}var ht="popstate",At="hashchange";function bt(){try{return window.history.state||{}}catch(t){return{}}}function gt(t){void 0===t&&(t={}),vt||ot(!1);var e,n=window.history,r=(-1===(e=window.navigator.userAgent).indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=t,s=i.forceRefresh,o=void 0!==s&&s,l=i.getUserConfirmation,u=void 0===l?mt:l,c=i.keyLength,d=void 0===c?6:c,f=t.basename?ct(lt(t.basename)):"";function p(t){var e=t||{},n=e.key,r=e.state,a=window.location,i=a.pathname+a.search+a.hash;return f&&(i=ut(i,f)),ft(i,r,n)}function v(){return Math.random().toString(36).substr(2,d)}var m=pt();function h(t){at(z,t),z.length=n.length,m.notifyListeners(z.location,z.action)}function A(t){(function(t){return void 0===t.state&&-1===navigator.userAgent.indexOf("CriOS")})(t)||y(p(t.state))}function b(){y(p(bt()))}var g=!1;function y(t){g?(g=!1,h()):m.confirmTransitionTo(t,"POP",u,(function(e){e?h({action:"POP",location:t}):function(t){var e=z.location,n=w.indexOf(e.key);-1===n&&(n=0);var r=w.indexOf(t.key);-1===r&&(r=0);var a=n-r;a&&(g=!0,X(a))}(t)}))}var x=p(bt()),w=[x.key];function E(t){return f+dt(t)}function X(t){n.go(t)}var R=0;function L(t){1===(R+=t)&&1===t?(window.addEventListener(ht,A),a&&window.addEventListener(At,b)):0===R&&(window.removeEventListener(ht,A),a&&window.removeEventListener(At,b))}var V=!1,z={length:n.length,action:"POP",location:x,createHref:E,push:function(t,e){var a="PUSH",i=ft(t,e,v(),z.location);m.confirmTransitionTo(i,a,u,(function(t){if(t){var e=E(i),s=i.key,l=i.state;if(r)if(n.pushState({key:s,state:l},null,e),o)window.location.href=e;else{var u=w.indexOf(z.location.key),c=w.slice(0,u+1);c.push(i.key),w=c,h({action:a,location:i})}else window.location.href=e}}))},replace:function(t,e){var a="REPLACE",i=ft(t,e,v(),z.location);m.confirmTransitionTo(i,a,u,(function(t){if(t){var e=E(i),s=i.key,l=i.state;if(r)if(n.replaceState({key:s,state:l},null,e),o)window.location.replace(e);else{var u=w.indexOf(z.location.key);-1!==u&&(w[u]=i.key),h({action:a,location:i})}else window.location.replace(e)}}))},go:X,goBack:function(){X(-1)},goForward:function(){X(1)},block:function(t){void 0===t&&(t=!1);var e=m.setPrompt(t);return V||(L(1),V=!0),function(){return V&&(V=!1,L(-1)),e()}},listen:function(t){var e=m.appendListener(t);return L(1),function(){L(-1),e()}}};return z}var yt=n(4779),xt=n.n(yt);function wt(t,e){if(null==t)return{};var n,r,a={},i=Object.keys(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||(a[n]=t[n]);return a}n(663),n(8679);var Et=1073741823,Xt="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function Rt(t){var e=[];return{on:function(t){e.push(t)},off:function(t){e=e.filter((function(e){return e!==t}))},get:function(){return t},set:function(n,r){t=n,e.forEach((function(e){return e(t,r)}))}}}var Lt=r().createContext||function(t,e){var n,a,i,s="__create-react-context-"+((Xt[i="__global_unique_id__"]=(Xt[i]||0)+1)+"__"),o=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).emitter=Rt(e.props.value),e}et(n,t);var r=n.prototype;return r.getChildContext=function(){var t;return(t={})[s]=this.emitter,t},r.componentWillReceiveProps=function(t){if(this.props.value!==t.value){var n,r=this.props.value,a=t.value;!function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}(r,a)?(n="function"==typeof e?e(r,a):Et,0!=(n|=0)&&this.emitter.set(t.value,n)):n=0}},r.render=function(){return this.props.children},n}(r().Component);o.childContextTypes=((n={})[s]=rt().object.isRequired,n);var l=function(e){function n(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).observedBits=void 0,t.state={value:t.getValue()},t.onUpdate=function(e,n){0!=((0|t.observedBits)&n)&&t.setState({value:t.getValue()})},t}et(n,e);var r=n.prototype;return r.componentWillReceiveProps=function(t){var e=t.observedBits;this.observedBits=null==e?Et:e},r.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var t=this.props.observedBits;this.observedBits=null==t?Et:t},r.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},r.getValue=function(){return this.context[s]?this.context[s].get():t},r.render=function(){return(t=this.props.children,Array.isArray(t)?t[0]:t)(this.state.value);var t},n}(r().Component);return l.contextTypes=((a={})[s]=rt().object,a),{Provider:o,Consumer:l}},Vt=function(t){var e=Lt();return e.displayName=t,e},zt=Vt("Router-History"),Nt=Vt("Router"),Pt=function(t){function e(e){var n;return(n=t.call(this,e)||this).state={location:e.history.location},n._isMounted=!1,n._pendingLocation=null,e.staticContext||(n.unlisten=e.history.listen((function(t){n._pendingLocation=t}))),n}et(e,t),e.computeRootMatch=function(t){return{path:"/",url:"/",params:{},isExact:"/"===t}};var n=e.prototype;return n.componentDidMount=function(){var t=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(e){t._isMounted&&t.setState({location:e})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return r().createElement(Nt.Provider,{value:{history:this.props.history,location:this.state.location,match:e.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},r().createElement(zt.Provider,{children:this.props.children||null,value:this.props.history}))},e}(r().Component);r().Component,r().Component;var Ot={},qt=0;function Wt(t,e){void 0===e&&(e={}),("string"==typeof e||Array.isArray(e))&&(e={path:e});var n=e,r=n.path,a=n.exact,i=void 0!==a&&a,s=n.strict,o=void 0!==s&&s,l=n.sensitive,u=void 0!==l&&l;return[].concat(r).reduce((function(e,n){if(!n&&""!==n)return null;if(e)return e;var r=function(t,e){var n=""+e.end+e.strict+e.sensitive,r=Ot[n]||(Ot[n]={});if(r[t])return r[t];var a=[],i={regexp:xt()(t,a,e),keys:a};return qt<1e4&&(r[t]=i,qt++),i}(n,{end:i,strict:o,sensitive:u}),a=r.regexp,s=r.keys,l=a.exec(t);if(!l)return null;var c=l[0],d=l.slice(1),f=t===c;return i&&!f?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:f,params:s.reduce((function(t,e,n){return t[e.name]=d[n],t}),{})}}),null)}var Tt=function(t){function e(){return t.apply(this,arguments)||this}return et(e,t),e.prototype.render=function(){var t=this;return r().createElement(Nt.Consumer,null,(function(e){e||ot(!1);var n=t.props.location||e.location,a=at({},e,{location:n,match:t.props.computedMatch?t.props.computedMatch:t.props.path?Wt(n.pathname,t.props):e.match}),i=t.props,s=i.children,o=i.component,l=i.render;return Array.isArray(s)&&function(t){return 0===r().Children.count(t)}(s)&&(s=null),r().createElement(Nt.Provider,{value:a},a.match?s?"function"==typeof s?s(a):s:o?r().createElement(o,a):l?l(a):null:"function"==typeof s?s(a):null)}))},e}(r().Component);r().Component;var Ct=function(t){function e(){return t.apply(this,arguments)||this}return et(e,t),e.prototype.render=function(){var t=this;return r().createElement(Nt.Consumer,null,(function(e){e||ot(!1);var n,a,i=t.props.location||e.location;return r().Children.forEach(t.props.children,(function(t){if(null==a&&r().isValidElement(t)){n=t;var s=t.props.path||t.props.from;a=s?Wt(i.pathname,at({},t.props,{path:s})):e.match}})),a?r().cloneElement(n,{location:i,computedMatch:a}):null}))},e}(r().Component),It=r().useContext;function Ft(){return It(Nt).location}var jt=function(t){function e(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).history=gt(e.props),e}return et(e,t),e.prototype.render=function(){return r().createElement(Pt,{history:this.history,children:this.props.children})},e}(r().Component);r().Component;var St=function(t,e){return"function"==typeof t?t(e):t},Ht=function(t,e){return"string"==typeof t?ft(t,null,null,e):t},Dt=function(t){return t},Zt=r().forwardRef;void 0===Zt&&(Zt=Dt);var Mt=Zt((function(t,e){var n=t.innerRef,a=t.navigate,i=t.onClick,s=wt(t,["innerRef","navigate","onClick"]),o=s.target,l=at({},s,{onClick:function(t){try{i&&i(t)}catch(e){throw t.preventDefault(),e}t.defaultPrevented||0!==t.button||o&&"_self"!==o||function(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}(t)||(t.preventDefault(),a())}});return l.ref=Dt!==Zt&&e||n,r().createElement("a",l)})),kt=Zt((function(t,e){var n=t.component,a=void 0===n?Mt:n,i=t.replace,s=t.to,o=t.innerRef,l=wt(t,["component","replace","to","innerRef"]);return r().createElement(Nt.Consumer,null,(function(t){t||ot(!1);var n=t.history,u=Ht(St(s,t.location),t.location),c=u?n.createHref(u):"",d=at({},l,{href:c,navigate:function(){var e=St(s,t.location),r=dt(t.location)===dt(Ht(e));(i||r?n.replace:n.push)(e)}});return Dt!==Zt?d.ref=e||o:d.innerRef=o,r().createElement(a,d)}))})),Bt=function(t){return t},Gt=r().forwardRef;void 0===Gt&&(Gt=Bt),Gt((function(t,e){var n=t["aria-current"],a=void 0===n?"page":n,i=t.activeClassName,s=void 0===i?"active":i,o=t.activeStyle,l=t.className,u=t.exact,c=t.isActive,d=t.location,f=t.sensitive,p=t.strict,v=t.style,m=t.to,h=t.innerRef,A=wt(t,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return r().createElement(Nt.Consumer,null,(function(t){t||ot(!1);var n=d||t.location,i=Ht(St(m,n),n),b=i.pathname,g=b&&b.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),y=g?Wt(n.pathname,{path:g,exact:u,sensitive:f,strict:p}):null,x=!!(c?c(y,n):y),w="function"==typeof l?l(x):l,E="function"==typeof v?v(x):v;x&&(w=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter((function(t){return t})).join(" ")}(w,s),E=at({},E,o));var X=at({"aria-current":x&&a||null,className:w,style:E,to:i},A);return Bt!==Gt?X.ref=e||h:X.innerRef=h,r().createElement(kt,X)}))}));var Yt=window.wp.i18n;function Ut(){let t=(0,e.useRef)(!1);return A((()=>(t.current=!0,()=>{t.current=!1})),[]),t}function Kt(t){"function"==typeof queueMicrotask?queueMicrotask(t):Promise.resolve().then(t).catch((t=>setTimeout((()=>{throw t}))))}function Jt(){let t=[],e=[],n={enqueue(t){e.push(t)},addEventListener(t,e,r,a){return t.addEventListener(e,r,a),n.add((()=>t.removeEventListener(e,r,a)))},requestAnimationFrame(...t){let e=requestAnimationFrame(...t);return n.add((()=>cancelAnimationFrame(e)))},nextFrame(...t){return n.requestAnimationFrame((()=>n.requestAnimationFrame(...t)))},setTimeout(...t){let e=setTimeout(...t);return n.add((()=>clearTimeout(e)))},microTask(...t){let e={current:!0};return Kt((()=>{e.current&&t[0]()})),n.add((()=>{e.current=!1}))},add(e){return t.push(e),()=>{let n=t.indexOf(e);if(n>=0){let[e]=t.splice(n,1);e()}}},dispose(){for(let e of t.splice(0))e()},async workQueue(){for(let t of e.splice(0))await t()}};return n}function Qt(t,...e){t&&e.length>0&&t.classList.add(...e)}function _t(t,...e){t&&e.length>0&&t.classList.remove(...e)}var $t=(t=>(t.Ended="ended",t.Cancelled="cancelled",t))($t||{});function te(){let[t]=(0,e.useState)(Jt);return(0,e.useEffect)((()=>()=>t.dispose()),[t]),t}function ee({container:t,direction:e,classes:n,onStart:r,onStop:a}){let i=Ut(),o=te(),l=b(e);A((()=>{let e=Jt();o.add(e.dispose);let u=t.current;if(u&&"idle"!==l.current&&i.current)return e.dispose(),r.current(l.current),e.add(function(t,e,n,r){let a=n?"enter":"leave",i=Jt(),o=void 0!==r?function(t){let e={called:!1};return(...n)=>{if(!e.called)return e.called=!0,t(...n)}}(r):()=>{};"enter"===a&&(t.removeAttribute("hidden"),t.style.display="");let l=s(a,{enter:()=>e.enter,leave:()=>e.leave}),u=s(a,{enter:()=>e.enterTo,leave:()=>e.leaveTo}),c=s(a,{enter:()=>e.enterFrom,leave:()=>e.leaveFrom});return _t(t,...e.enter,...e.enterTo,...e.enterFrom,...e.leave,...e.leaveFrom,...e.leaveTo,...e.entered),Qt(t,...l,...c),i.nextFrame((()=>{_t(t,...c),Qt(t,...u),function(t,e){let n=Jt();if(!t)return n.dispose;let{transitionDuration:r,transitionDelay:a}=getComputedStyle(t),[i,s]=[r,a].map((t=>{let[e=0]=t.split(",").filter(Boolean).map((t=>t.includes("ms")?parseFloat(t):1e3*parseFloat(t))).sort(((t,e)=>e-t));return e}));if(i+s!==0){let r=[];r.push(n.addEventListener(t,"transitionrun",(a=>{a.target===a.currentTarget&&(r.splice(0).forEach((t=>t())),r.push(n.addEventListener(t,"transitionend",(t=>{t.target===t.currentTarget&&(e("ended"),r.splice(0).forEach((t=>t())))})),n.addEventListener(t,"transitioncancel",(t=>{t.target===t.currentTarget&&(e("cancelled"),r.splice(0).forEach((t=>t())))}))))})))}else e("ended");n.add((()=>e("cancelled"))),n.dispose}(t,(n=>("ended"===n&&(_t(t,...l),Qt(t,...e.entered)),o(n))))})),i.dispose}(u,n.current,"enter"===l.current,(t=>{e.dispose(),s(t,{[$t.Ended](){a.current(l.current)},[$t.Cancelled]:()=>{}})}))),e.dispose}),[e])}function ne(t=""){return t.split(" ").filter((t=>t.trim().length>1))}let re=(0,e.createContext)(null);re.displayName="TransitionContext";var ae,ie=((ae=ie||{}).Visible="visible",ae.Hidden="hidden",ae);let se=(0,e.createContext)(null);function oe(t){return"children"in t?oe(t.children):t.current.filter((({el:t})=>null!==t.current)).filter((({state:t})=>"visible"===t)).length>0}function le(t,n){let r=b(t),a=(0,e.useRef)([]),i=Ut(),o=te(),l=g(((t,e=u.Hidden)=>{let n=a.current.findIndex((({el:e})=>e===t));-1!==n&&(s(e,{[u.Unmount](){a.current.splice(n,1)},[u.Hidden](){a.current[n].state="hidden"}}),o.microTask((()=>{var t;!oe(a)&&i.current&&(null==(t=r.current)||t.call(r))})))})),c=g((t=>{let e=a.current.find((({el:e})=>e===t));return e?"visible"!==e.state&&(e.state="visible"):a.current.push({el:t,state:"visible"}),()=>l(t,u.Unmount)})),d=(0,e.useRef)([]),f=(0,e.useRef)(Promise.resolve()),p=(0,e.useRef)({enter:[],leave:[],idle:[]}),v=g(((t,e,r)=>{d.current.splice(0),n&&(n.chains.current[e]=n.chains.current[e].filter((([e])=>e!==t))),null==n||n.chains.current[e].push([t,new Promise((t=>{d.current.push(t)}))]),null==n||n.chains.current[e].push([t,new Promise((t=>{Promise.all(p.current[e].map((([t,e])=>e))).then((()=>t()))}))]),"enter"===e?f.current=f.current.then((()=>null==n?void 0:n.wait.current)).then((()=>r(e))):r(e)})),m=g(((t,e,n)=>{Promise.all(p.current[e].splice(0).map((([t,e])=>e))).then((()=>{var t;null==(t=d.current.shift())||t()})).then((()=>n(e)))}));return(0,e.useMemo)((()=>({children:a,register:c,unregister:l,onStart:v,onStop:m,wait:f,chains:p})),[c,l,a,v,m,p,f])}function ue(){}se.displayName="NestingContext";let ce=["beforeEnter","afterEnter","beforeLeave","afterLeave"];function de(t){var e;let n={};for(let r of ce)n[r]=null!=(e=t[r])?e:ue;return n}let fe=l.RenderStrategy,pe=p((function(t,n){let{beforeEnter:r,afterEnter:a,beforeLeave:i,afterLeave:o,enter:l,enterFrom:d,enterTo:f,entered:p,leave:v,leaveFrom:m,leaveTo:h,...A}=t,y=(0,e.useRef)(null),x=w(y,n),E=A.unmount?u.Unmount:u.Hidden,{show:R,appear:L,initial:V}=function(){let t=(0,e.useContext)(re);if(null===t)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return t}(),[z,N]=(0,e.useState)(R?"visible":"hidden"),P=function(){let t=(0,e.useContext)(se);if(null===t)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return t}(),{register:O,unregister:W}=P,C=(0,e.useRef)(null);(0,e.useEffect)((()=>O(y)),[O,y]),(0,e.useEffect)((()=>{if(E===u.Hidden&&y.current)return R&&"visible"!==z?void N("visible"):s(z,{hidden:()=>W(y),visible:()=>O(y)})}),[z,y,O,W,R,E]);let I=b({enter:ne(l),enterFrom:ne(d),enterTo:ne(f),entered:ne(p),leave:ne(v),leaveFrom:ne(m),leaveTo:ne(h)}),F=function(t){let n=(0,e.useRef)(de(t));return(0,e.useEffect)((()=>{n.current=de(t)}),[t]),n}({beforeEnter:r,afterEnter:a,beforeLeave:i,afterLeave:o}),j=X();(0,e.useEffect)((()=>{if(j&&"visible"===z&&null===y.current)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")}),[y,z,j]);let S=V&&!L,H=!j||S||C.current===R?"idle":R?"enter":"leave",D=g((t=>s(t,{enter:()=>F.current.beforeEnter(),leave:()=>F.current.beforeLeave(),idle:()=>{}}))),Z=g((t=>s(t,{enter:()=>F.current.afterEnter(),leave:()=>F.current.afterLeave(),idle:()=>{}}))),M=le((()=>{N("hidden"),W(y)}),P);ee({container:y,classes:I,direction:H,onStart:b((t=>{M.onStart(y,t,D)})),onStop:b((t=>{M.onStop(y,t,Z),"leave"===t&&!oe(M)&&(N("hidden"),W(y))}))}),(0,e.useEffect)((()=>{!S||(E===u.Hidden?C.current=null:C.current=R)}),[R,S,z]);let k=A,B={ref:x};return e.createElement(se.Provider,{value:M},e.createElement(T,{value:s(z,{visible:q.Open,hidden:q.Closed})},c({ourProps:B,theirProps:k,defaultTag:"div",features:fe,visible:"visible"===z,name:"Transition.Child"})))})),ve=p((function(t,n){let{show:r,appear:a=!1,unmount:i,...o}=t,l=(0,e.useRef)(null),u=w(l,n);X();let d=W();if(void 0===r&&null!==d&&(r=s(d,{[q.Open]:!0,[q.Closed]:!1})),![!0,!1].includes(r))throw new Error("A <Transition /> is used but it is missing a `show={true | false}` prop.");let[f,p]=(0,e.useState)(r?"visible":"hidden"),v=le((()=>{p("hidden")})),[m,h]=(0,e.useState)(!0),b=(0,e.useRef)([r]);A((()=>{!1!==m&&b.current[b.current.length-1]!==r&&(b.current.push(r),h(!1))}),[b,r]);let g=(0,e.useMemo)((()=>({show:r,appear:a,initial:m})),[r,a,m]);(0,e.useEffect)((()=>{if(r)p("visible");else if(oe(v)){let t=l.current;if(!t)return;let e=t.getBoundingClientRect();0===e.x&&0===e.y&&0===e.width&&0===e.height&&p("hidden")}else p("hidden")}),[r,v]);let y={unmount:i};return e.createElement(se.Provider,{value:v},e.createElement(re.Provider,{value:g},c({ourProps:{...y,as:e.Fragment,children:e.createElement(pe,{ref:u,...y,...o})},theirProps:{},defaultTag:e.Fragment,features:fe,visible:"visible"===f,name:"Transition"})))})),me=p((function(t,n){let r=null!==(0,e.useContext)(re),a=null!==W();return e.createElement(e.Fragment,null,!r&&a?e.createElement(ve,{ref:n,...t}):e.createElement(pe,{ref:n,...t}))})),he=Object.assign(ve,{Child:me,Root:ve});var Ae=(t=>(t[t.None=1]="None",t[t.Focusable=2]="Focusable",t[t.Hidden=4]="Hidden",t))(Ae||{});let be=p((function(t,e){let{features:n=1,...r}=t;return c({ourProps:{ref:e,"aria-hidden":2==(2&n)||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...4==(4&n)&&2!=(2&n)&&{display:"none"}}},theirProps:r,slot:{},defaultTag:"div",name:"Hidden"})})),ge=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map((t=>`${t}:not([tabindex='-1'])`)).join(",");var ye=(t=>(t[t.First=1]="First",t[t.Previous=2]="Previous",t[t.Next=4]="Next",t[t.Last=8]="Last",t[t.WrapAround=16]="WrapAround",t[t.NoScroll=32]="NoScroll",t))(ye||{}),xe=(t=>(t[t.Error=0]="Error",t[t.Overflow=1]="Overflow",t[t.Success=2]="Success",t[t.Underflow=3]="Underflow",t))(xe||{}),we=(t=>(t[t.Previous=-1]="Previous",t[t.Next=1]="Next",t))(we||{});var Ee=(t=>(t[t.Strict=0]="Strict",t[t.Loose=1]="Loose",t))(Ee||{});function Xe(t){null==t||t.focus({preventScroll:!0})}let Re=["textarea","input"].join(",");function Le(t,e,n=!0,r=null){let a=Array.isArray(t)?t.length>0?t[0].ownerDocument:document:t.ownerDocument,i=Array.isArray(t)?n?function(t,e=(t=>t)){return t.slice().sort(((t,n)=>{let r=e(t),a=e(n);if(null===r||null===a)return 0;let i=r.compareDocumentPosition(a);return i&Node.DOCUMENT_POSITION_FOLLOWING?-1:i&Node.DOCUMENT_POSITION_PRECEDING?1:0}))}(t):t:function(t=document.body){return null==t?[]:Array.from(t.querySelectorAll(ge))}(t);r=null!=r?r:a.activeElement;let s,o=(()=>{if(5&e)return 1;if(10&e)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),l=(()=>{if(1&e)return 0;if(2&e)return Math.max(0,i.indexOf(r))-1;if(4&e)return Math.max(0,i.indexOf(r))+1;if(8&e)return i.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),u=32&e?{preventScroll:!0}:{},c=0,d=i.length;do{if(c>=d||c+d<=0)return 0;let t=l+c;if(16&e)t=(t+d)%d;else{if(t<0)return 3;if(t>=d)return 1}s=i[t],null==s||s.focus(u),c+=o}while(s!==a.activeElement);return 6&e&&function(t){var e,n;return null!=(n=null==(e=null==t?void 0:t.matches)?void 0:e.call(t,Re))&&n}(s)&&s.select(),s.hasAttribute("tabindex")||s.setAttribute("tabindex","0"),2}var Ve=(t=>(t[t.Forwards=0]="Forwards",t[t.Backwards=1]="Backwards",t))(Ve||{});function ze(...t){return(0,e.useMemo)((()=>F(...t)),[...t])}function Ne(t,n,r,a){let i=b(r);(0,e.useEffect)((()=>{function e(t){i.current(t)}return(t=null!=t?t:window).addEventListener(n,e,a),()=>t.removeEventListener(n,e,a)}),[t,n,a])}function Pe(t,n){let r=(0,e.useRef)([]),a=g(t);(0,e.useEffect)((()=>{let t=[...r.current];for(let[e,i]of n.entries())if(r.current[e]!==i){let e=a(n,t);return r.current=n,e}}),[a,...n])}var Oe=(t=>(t[t.None=1]="None",t[t.InitialFocus=2]="InitialFocus",t[t.TabLock=4]="TabLock",t[t.FocusLock=8]="FocusLock",t[t.RestoreFocus=16]="RestoreFocus",t[t.All=30]="All",t))(Oe||{});let qe=Object.assign(p((function(t,n){let r=(0,e.useRef)(null),a=w(r,n),{initialFocus:i,containers:o,features:l=30,...u}=t;X()||(l=1);let d=ze(r);!function({ownerDocument:t},n){let r=(0,e.useRef)(null);Ne(null==t?void 0:t.defaultView,"focusout",(t=>{!n||r.current||(r.current=t.target)}),!0),Pe((()=>{n||((null==t?void 0:t.activeElement)===(null==t?void 0:t.body)&&Xe(r.current),r.current=null)}),[n]);let a=(0,e.useRef)(!1);(0,e.useEffect)((()=>(a.current=!1,()=>{a.current=!0,Kt((()=>{!a.current||(Xe(r.current),r.current=null)}))})),[])}({ownerDocument:d},Boolean(16&l));let f=function({ownerDocument:t,container:n,initialFocus:r},a){let i=(0,e.useRef)(null),s=Ut();return Pe((()=>{if(!a)return;let e=n.current;!e||Kt((()=>{if(!s.current)return;let n=null==t?void 0:t.activeElement;if(null!=r&&r.current){if((null==r?void 0:r.current)===n)return void(i.current=n)}else if(e.contains(n))return void(i.current=n);null!=r&&r.current?Xe(r.current):Le(e,ye.First)===xe.Error&&console.warn("There are no focusable elements inside the <FocusTrap />"),i.current=null==t?void 0:t.activeElement}))}),[a]),i}({ownerDocument:d,container:r,initialFocus:i},Boolean(2&l));!function({ownerDocument:t,container:e,containers:n,previousActiveElement:r},a){let i=Ut();Ne(null==t?void 0:t.defaultView,"focus",(t=>{if(!a||!i.current)return;let s=new Set(null==n?void 0:n.current);s.add(e);let o=r.current;if(!o)return;let l=t.target;l&&l instanceof HTMLElement?function(t,e){var n;for(let r of t)if(null!=(n=r.current)&&n.contains(e))return!0;return!1}(s,l)?(r.current=l,Xe(l)):(t.preventDefault(),t.stopPropagation(),Xe(o)):Xe(r.current)}),!0)}({ownerDocument:d,container:r,containers:o,previousActiveElement:f},Boolean(8&l));let p=function(){let t=(0,e.useRef)(0);return function(t,n,r){let a=b(n);(0,e.useEffect)((()=>{function e(t){a.current(t)}return window.addEventListener(t,e,r),()=>window.removeEventListener(t,e,r)}),[t,r])}("keydown",(e=>{"Tab"===e.key&&(t.current=e.shiftKey?1:0)}),!0),t}(),v=g((()=>{let t=r.current;!t||s(p.current,{[Ve.Forwards]:()=>Le(t,ye.First),[Ve.Backwards]:()=>Le(t,ye.Last)})})),m={ref:a};return e.createElement(e.Fragment,null,Boolean(4&l)&&e.createElement(be,{as:"button",type:"button",onFocus:v,features:Ae.Focusable}),c({ourProps:m,theirProps:u,defaultTag:"div",name:"FocusTrap"}),Boolean(4&l)&&e.createElement(be,{as:"button",type:"button",onFocus:v,features:Ae.Focusable}))})),{features:Oe}),We=new Set,Te=new Map;function Ce(t){t.setAttribute("aria-hidden","true"),t.inert=!0}function Ie(t){let e=Te.get(t);!e||(null===e["aria-hidden"]?t.removeAttribute("aria-hidden"):t.setAttribute("aria-hidden",e["aria-hidden"]),t.inert=e.inert)}let Fe=(0,e.createContext)(!1);function je(){return(0,e.useContext)(Fe)}function Se(t){return e.createElement(Fe.Provider,{value:t.force},t.children)}let He=e.Fragment,De=p((function(t,n){let r=t,i=(0,e.useRef)(null),s=w(x((t=>{i.current=t})),n),o=ze(i),l=function(t){let n=je(),r=(0,e.useContext)(Me),a=ze(t),[i,s]=(0,e.useState)((()=>{if(!n&&null!==r||h)return null;let t=null==a?void 0:a.getElementById("headlessui-portal-root");if(t)return t;if(null===a)return null;let e=a.createElement("div");return e.setAttribute("id","headlessui-portal-root"),a.body.appendChild(e)}));return(0,e.useEffect)((()=>{null!==i&&(null!=a&&a.body.contains(i)||null==a||a.body.appendChild(i))}),[i,a]),(0,e.useEffect)((()=>{n||null!==r&&s(r.current)}),[r,s,n]),i}(i),[u]=(0,e.useState)((()=>{var t;return h?null:null!=(t=null==o?void 0:o.createElement("div"))?t:null})),d=X(),f=(0,e.useRef)(!1);return A((()=>{if(f.current=!1,l&&u)return l.contains(u)||(u.setAttribute("data-headlessui-portal",""),l.appendChild(u)),()=>{f.current=!0,Kt((()=>{var t;!f.current||!l||!u||(l.removeChild(u),l.childNodes.length<=0&&(null==(t=l.parentElement)||t.removeChild(l)))}))}}),[l,u]),d&&l&&u?(0,a.createPortal)(c({ourProps:{ref:s},theirProps:r,defaultTag:He,name:"Portal"}),u):null})),Ze=e.Fragment,Me=(0,e.createContext)(null),ke=p((function(t,n){let{target:r,...a}=t,i={ref:w(n)};return e.createElement(Me.Provider,{value:r},c({ourProps:i,theirProps:a,defaultTag:Ze,name:"Popover.Group"}))})),Be=Object.assign(De,{Group:ke}),Ge=(0,e.createContext)(null);function Ye(){let t=(0,e.useContext)(Ge);if(null===t){let t=new Error("You used a <Description /> component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,Ye),t}return t}function Ue(){let[t,n]=(0,e.useState)([]);return[t.length>0?t.join(" "):void 0,(0,e.useMemo)((()=>function(t){let r=g((t=>(n((e=>[...e,t])),()=>n((e=>{let n=e.slice(),r=n.indexOf(t);return-1!==r&&n.splice(r,1),n}))))),a=(0,e.useMemo)((()=>({register:r,slot:t.slot,name:t.name,props:t.props})),[r,t.slot,t.name,t.props]);return e.createElement(Ge.Provider,{value:a},t.children)}),[n])]}let Ke=p((function(t,e){let n=Ye(),r=`headlessui-description-${z()}`,a=w(e);A((()=>n.register(r)),[r,n.register]);let i=t;return c({ourProps:{ref:a,...n.props,id:r},theirProps:i,slot:n.slot||{},defaultTag:"p",name:n.name||"Description"})})),Je=(0,e.createContext)((()=>{}));Je.displayName="StackContext";var Qe=(t=>(t[t.Add=0]="Add",t[t.Remove=1]="Remove",t))(Qe||{});function _e({children:t,onUpdate:n,type:r,element:a,enabled:i}){let s=(0,e.useContext)(Je),o=g(((...t)=>{null==n||n(...t),s(...t)}));return A((()=>{let t=void 0===i||!0===i;return t&&o(0,r,a),()=>{t&&o(1,r,a)}}),[o,r,a,i]),e.createElement(Je.Provider,{value:o},t)}function $e(t,n,r){let a=b(n);(0,e.useEffect)((()=>{function e(t){a.current(t)}return document.addEventListener(t,e,r),()=>document.removeEventListener(t,e,r)}),[t,r])}var tn=(t=>(t[t.Open=0]="Open",t[t.Closed=1]="Closed",t))(tn||{}),en=(t=>(t[t.SetTitleId=0]="SetTitleId",t))(en||{});let nn={0(t,e){return t.titleId===e.id?t:{...t,titleId:e.id}}},rn=(0,e.createContext)(null);function an(t){let n=(0,e.useContext)(rn);if(null===n){let e=new Error(`<${t} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,an),e}return n}function sn(t,e){return s(e.type,nn,t,e)}rn.displayName="DialogContext";let on=l.RenderStrategy|l.Static,ln=p((function(t,n){let{open:r,onClose:a,initialFocus:i,__demoMode:o=!1,...l}=t,[u,d]=(0,e.useState)(0),f=W();void 0===r&&null!==f&&(r=s(f,{[q.Open]:!0,[q.Closed]:!1}));let p=(0,e.useRef)(new Set),v=(0,e.useRef)(null),m=w(v,n),h=(0,e.useRef)(null),b=ze(v),y=t.hasOwnProperty("open")||null!==f,x=t.hasOwnProperty("onClose");if(!y&&!x)throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");if(!y)throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");if(!x)throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");if("boolean"!=typeof r)throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${r}`);if("function"!=typeof a)throw new Error(`You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${a}`);let E=r?0:1,[R,L]=(0,e.useReducer)(sn,{titleId:null,descriptionId:null,panelRef:(0,e.createRef)()}),V=g((()=>a(!1))),P=g((t=>L({type:0,id:t}))),O=!!X()&&!o&&0===E,T=u>1,C=null!==(0,e.useContext)(rn),I=T?"parent":"leaf";(function(t,e=!0){A((()=>{if(!e||!t.current)return;let n=t.current,r=F(n);if(r){We.add(n);for(let t of Te.keys())t.contains(n)&&(Ie(t),Te.delete(t));return r.querySelectorAll("body > *").forEach((t=>{if(t instanceof HTMLElement){for(let e of We)if(t.contains(e))return;1===We.size&&(Te.set(t,{"aria-hidden":t.getAttribute("aria-hidden"),inert:t.inert}),Ce(t))}})),()=>{if(We.delete(n),We.size>0)r.querySelectorAll("body > *").forEach((t=>{if(t instanceof HTMLElement&&!Te.has(t)){for(let e of We)if(t.contains(e))return;Te.set(t,{"aria-hidden":t.getAttribute("aria-hidden"),inert:t.inert}),Ce(t)}}));else for(let t of Te.keys())Ie(t),Te.delete(t)}}}),[e])})(v,!!T&&O),function(t,n,r=!0){let a=(0,e.useRef)(!1);function i(e,r){if(!a.current||e.defaultPrevented)return;let i=function t(e){return"function"==typeof e?t(e()):Array.isArray(e)||e instanceof Set?e:[e]}(t),o=r(e);if(null!==o&&o.ownerDocument.documentElement.contains(o)){for(let t of i){if(null===t)continue;let e=t instanceof HTMLElement?t:t.current;if(null!=e&&e.contains(o))return}return!function(t,e=0){var n;return t!==(null==(n=F(t))?void 0:n.body)&&s(e,{0(){return t.matches(ge)},1(){let e=t;for(;null!==e;){if(e.matches(ge))return!0;e=e.parentElement}return!1}})}(o,Ee.Loose)&&-1!==o.tabIndex&&e.preventDefault(),n(e,o)}}(0,e.useEffect)((()=>{requestAnimationFrame((()=>{a.current=r}))}),[r]);let o=(0,e.useRef)(null);$e("mousedown",(t=>{var e,n;a.current&&(o.current=(null==(n=null==(e=t.composedPath)?void 0:e.call(t))?void 0:n[0])||t.target)}),!0),$e("click",(t=>{!o.current||(i(t,(()=>o.current)),o.current=null)}),!0),$e("blur",(t=>i(t,(()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null))),!0)}((()=>{var t,e;return[...Array.from(null!=(t=null==b?void 0:b.querySelectorAll("body > *, [data-headlessui-portal]"))?t:[]).filter((t=>!(!(t instanceof HTMLElement)||t.contains(h.current)||R.panelRef.current&&t.contains(R.panelRef.current)))),null!=(e=R.panelRef.current)?e:v.current]}),V,O&&!T),Ne(null==b?void 0:b.defaultView,"keydown",(t=>{t.defaultPrevented||t.key===N.Escape&&0===E&&(T||(t.preventDefault(),t.stopPropagation(),V()))})),function(t,n){(0,e.useEffect)((()=>{var e;if(!n||!t)return;let r=Jt();function a(t,e,n){let a=t.style.getPropertyValue(e);return Object.assign(t.style,{[e]:n}),r.add((()=>{Object.assign(t.style,{[e]:a})}))}let i=t.documentElement,s=(null!=(e=t.defaultView)?e:window).innerWidth-i.clientWidth;if(a(i,"overflow","hidden"),s>0&&a(i,"paddingRight",s-(i.clientWidth-i.offsetWidth)+"px"),/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0){let t=window.pageYOffset;a(i,"position","fixed"),a(i,"marginTop",`-${t}px`),a(i,"width","100%"),r.add((()=>window.scrollTo(0,t)))}return r.dispose}),[t,n])}(b,0===E&&!C),(0,e.useEffect)((()=>{if(0!==E||!v.current)return;let t=new IntersectionObserver((t=>{for(let e of t)0===e.boundingClientRect.x&&0===e.boundingClientRect.y&&0===e.boundingClientRect.width&&0===e.boundingClientRect.height&&V()}));return t.observe(v.current),()=>t.disconnect()}),[E,v,V]);let[j,S]=Ue(),H=`headlessui-dialog-${z()}`,D=(0,e.useMemo)((()=>[{dialogState:E,close:V,setTitleId:P},R]),[E,R,V,P]),Z=(0,e.useMemo)((()=>({open:0===E})),[E]),M={ref:m,id:H,role:"dialog","aria-modal":0===E||void 0,"aria-labelledby":R.titleId,"aria-describedby":j};return e.createElement(_e,{type:"Dialog",enabled:0===E,element:v,onUpdate:g(((t,e,n)=>{"Dialog"===e&&s(t,{[Qe.Add](){p.current.add(n),d((t=>t+1))},[Qe.Remove](){p.current.add(n),d((t=>t-1))}})}))},e.createElement(Se,{force:!0},e.createElement(Be,null,e.createElement(rn.Provider,{value:D},e.createElement(Be.Group,{target:v},e.createElement(Se,{force:!1},e.createElement(S,{slot:Z,name:"Dialog.Description"},e.createElement(qe,{initialFocus:i,containers:p,features:O?s(I,{parent:qe.features.RestoreFocus,leaf:qe.features.All&~qe.features.FocusLock}):qe.features.None},c({ourProps:M,theirProps:l,slot:Z,defaultTag:"div",features:on,visible:0===E,name:"Dialog"})))))))),e.createElement(be,{features:Ae.Hidden,ref:h}))})),un=p((function(t,n){let[{dialogState:r,close:a}]=an("Dialog.Overlay");return c({ourProps:{ref:w(n),id:`headlessui-dialog-overlay-${z()}`,"aria-hidden":!0,onClick:g((t=>{if(t.target===t.currentTarget){if(P(t.currentTarget))return t.preventDefault();t.preventDefault(),t.stopPropagation(),a()}}))},theirProps:t,slot:(0,e.useMemo)((()=>({open:0===r})),[r]),defaultTag:"div",name:"Dialog.Overlay"})})),cn=p((function(t,n){let[{dialogState:r},a]=an("Dialog.Backdrop"),i=w(n),s=`headlessui-dialog-backdrop-${z()}`;(0,e.useEffect)((()=>{if(null===a.panelRef.current)throw new Error("A <Dialog.Backdrop /> component is being used, but a <Dialog.Panel /> component is missing.")}),[a.panelRef]);let o=(0,e.useMemo)((()=>({open:0===r})),[r]);return e.createElement(Se,{force:!0},e.createElement(Be,null,c({ourProps:{ref:i,id:s,"aria-hidden":!0},theirProps:t,slot:o,defaultTag:"div",name:"Dialog.Backdrop"})))})),dn=p((function(t,n){let[{dialogState:r},a]=an("Dialog.Panel"),i=w(n,a.panelRef),s=`headlessui-dialog-panel-${z()}`,o=(0,e.useMemo)((()=>({open:0===r})),[r]);return c({ourProps:{ref:i,id:s,onClick:g((t=>{t.stopPropagation()}))},theirProps:t,slot:o,defaultTag:"div",name:"Dialog.Panel"})})),fn=p((function(t,n){let[{dialogState:r,setTitleId:a}]=an("Dialog.Title"),i=`headlessui-dialog-title-${z()}`,s=w(n);(0,e.useEffect)((()=>(a(i),()=>a(null))),[i,a]);let o=(0,e.useMemo)((()=>({open:0===r})),[r]);return c({ourProps:{ref:s,id:i},theirProps:t,slot:o,defaultTag:"h2",name:"Dialog.Title"})})),pn=Object.assign(ln,{Backdrop:cn,Panel:dn,Overlay:un,Title:fn,Description:Ke});var vn=e.forwardRef((function(t,n){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:n},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))})),mn={play:(0,t.createElement)("svg",{width:20,height:20,viewBox:"0 0 20 20",fill:"none"},(0,t.createElement)("path",{d:"M12.7519 9.16795L9.5547 7.03647C8.89015 6.59343 8 7.06982 8 7.86852V12.1315C8 12.9302 8.89015 13.4066 9.5547 12.9635L12.7519 10.8321C13.3457 10.4362 13.3457 9.56377 12.7519 9.16795Z",stroke:"#046BD2",strokeWidth:2}),(0,t.createElement)("path",{d:"M19 10C19 14.9706 14.9706 19 10 19C5.02944 19 1 14.9706 1 10C1 5.02944 5.02944 1 10 1C14.9706 1 19 5.02944 19 10Z",stroke:"#046BD2",strokeWidth:2})),horn:(0,t.createElement)("svg",{width:18,height:18,viewBox:"0 0 18 18",fill:"none"},(0,t.createElement)("path",{d:"M8.16667 3.90182V15.0335C8.16667 15.8434 7.51008 16.5 6.70015 16.5C6.08038 16.5 5.52752 16.1104 5.31907 15.5267L3.53039 10.4024M14 9.83333C15.3807 9.83333 16.5 8.71404 16.5 7.33333C16.5 5.95262 15.3807 4.83333 14 4.83333M3.53039 10.4024C2.33691 9.89508 1.5 8.71194 1.5 7.33333C1.5 5.49238 2.99238 4 4.83333 4H6.36007C9.77727 4 12.7141 2.97159 14 1.5L14 13.1667C12.7141 11.6951 9.77727 10.6667 6.36007 10.6667L4.83331 10.6667C4.37098 10.6667 3.93064 10.5725 3.53039 10.4024Z",stroke:"#475569",strokeWidth:1.4,strokeLinecap:"round",strokeLinejoin:"round"})),close:(0,t.createElement)("svg",{width:20,height:20,viewBox:"0 0 20 20",fill:"none"},(0,t.createElement)("path",{d:"M5 15L15 5M5 5L15 15",stroke:"#9CA3AF",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),search:(0,t.createElement)("svg",{width:20,height:20,viewBox:"0 0 20 20",fill:"none"},(0,t.createElement)("path",{d:"M17.5 17.5L12.5 12.5M14.1667 8.33333C14.1667 11.555 11.555 14.1667 8.33333 14.1667C5.11167 14.1667 2.5 11.555 2.5 8.33333C2.5 5.11167 5.11167 2.5 8.33333 2.5C11.555 2.5 14.1667 5.11167 14.1667 8.33333Z",stroke:"#9CA3AF",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),popupclose:(0,t.createElement)("svg",{width:44,height:44,viewBox:"0 0 44 44",fill:"none"},(0,t.createElement)("path",{d:"M16 28L28 16M16 16L28 28",stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),support:(0,t.createElement)("svg",{width:32,height:32,viewBox:"0 0 32 32",fill:"none"},(0,t.createElement)("path",{d:"M27 16C27 22.0751 22.0751 27 16 27V29C23.1797 29 29 23.1797 29 16H27ZM16 27C9.92487 27 5 22.0751 5 16H3C3 23.1797 8.8203 29 16 29V27ZM5 16C5 9.92487 9.92487 5 16 5V3C8.8203 3 3 8.8203 3 16H5ZM16 5C22.0751 5 27 9.92487 27 16H29C29 8.8203 23.1797 3 16 3V5ZM20.3333 16C20.3333 18.3932 18.3932 20.3333 16 20.3333V22.3333C19.4978 22.3333 22.3333 19.4978 22.3333 16H20.3333ZM16 20.3333C13.6068 20.3333 11.6667 18.3932 11.6667 16H9.66667C9.66667 19.4978 12.5022 22.3333 16 22.3333V20.3333ZM11.6667 16C11.6667 13.6068 13.6068 11.6667 16 11.6667V9.66667C12.5022 9.66667 9.66667 12.5022 9.66667 16H11.6667ZM16 11.6667C18.3932 11.6667 20.3333 13.6068 20.3333 16H22.3333C22.3333 12.5022 19.4978 9.66667 16 9.66667V11.6667ZM23.7782 6.80761L19.0641 11.5217L20.4783 12.9359L25.1924 8.22183L23.7782 6.80761ZM19.0641 20.4783L23.7782 25.1924L25.1924 23.7782L20.4783 19.0641L19.0641 20.4783ZM12.9359 11.5217L8.22183 6.80761L6.80761 8.22183L11.5217 12.9359L12.9359 11.5217ZM11.5217 19.0641L6.80761 23.7782L8.22183 25.1924L12.9359 20.4783L11.5217 19.0641Z",fill:"#4B5563"})),book:(0,t.createElement)("svg",{width:32,height:32,viewBox:"0 0 32 32",fill:"none"},(0,t.createElement)("path",{d:"M16 8.33639V25.6697M16 8.33639C14.4428 7.30183 12.3287 6.66602 10 6.66602C7.67134 6.66602 5.55719 7.30183 4 8.33639V25.6697C5.55719 24.6352 7.67134 23.9993 10 23.9993C12.3287 23.9993 14.4428 24.6352 16 25.6697M16 8.33639C17.5572 7.30183 19.6713 6.66602 22 6.66602C24.3287 6.66602 26.4428 7.30183 28 8.33639V25.6697C26.4428 24.6352 24.3287 23.9993 22 23.9993C19.6713 23.9993 17.5572 24.6352 16 25.6697",stroke:"#4B5563",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),expand:(0,t.createElement)("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none"},(0,t.createElement)("path",{d:"M19 9L12 16L5 9",stroke:"#4B5563",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),customize:(0,t.createElement)("svg",{width:15,height:16,viewBox:"0 0 15 16",fill:"none"},(0,t.createElement)("path",{d:"M3.79815 1.63672H13.6976M13.6976 1.63672V11.5362M13.6976 1.63672L0.969727 14.3646",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round",strokeLinejoin:"round"})),checkbadge:(0,t.createElement)("svg",{width:48,height:48,viewBox:"0 0 48 48",fill:"none"},(0,t.createElement)("path",{d:"M17.9993 23.9993L21.9993 27.9993L29.9993 19.9993M15.6687 9.39336C17.1038 9.27884 18.4662 8.71453 19.5619 7.78076C22.1189 5.60172 25.8797 5.60172 28.4366 7.78076C29.5324 8.71453 30.8947 9.27884 32.3298 9.39336C35.6787 9.6606 38.3379 12.3199 38.6052 15.6687C38.7197 17.1038 39.284 18.4662 40.2178 19.5619C42.3968 22.1189 42.3968 25.8797 40.2178 28.4366C39.284 29.5324 38.7197 30.8947 38.6052 32.3298C38.3379 35.6787 35.6787 38.3379 32.3298 38.6052C30.8947 38.7197 29.5324 39.284 28.4366 40.2178C25.8797 42.3968 22.1189 42.3968 19.5619 40.2178C18.4662 39.284 17.1038 38.7197 15.6687 38.6052C12.3199 38.3379 9.6606 35.6787 9.39336 32.3298C9.27884 30.8947 8.71453 29.5324 7.78076 28.4366C5.60172 25.8797 5.60172 22.1189 7.78076 19.5619C8.71453 18.4662 9.27884 17.1038 9.39336 15.6687C9.6606 12.3199 12.3199 9.6606 15.6687 9.39336Z",stroke:"#007ABD",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),spectraBackgroundLogo:(0,t.createElement)("svg",{width:629,height:807,viewBox:"0 0 629 807",fill:"none"},(0,t.createElement)("path",{d:"M155.35 384.598C22.04 384.731 -50.5339 218.96 41.6946 124.989L370.474 -210.002L405.115 4.20929L235.903 176.068C222.848 189.37 232.348 212.283 250.911 212.265L473.541 212.041C606.852 211.907 679.425 377.679 587.197 471.65L258.418 806.641L223.777 592.429L392.988 420.571C406.044 407.269 396.544 384.356 377.981 384.374L155.35 384.598Z",fill:"url(#paint0_linear_3240_66110)",fillOpacity:.48,fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}),(0,t.createElement)("linearGradient",{id:"paint0_linear_3240_66110",x1:"240.999",y1:"-289",x2:"252.522",y2:"770.375",gradientUnits:"userSpaceOnUse"},(0,t.createElement)("stop",{stopColor:"#F4E3CC"}),(0,t.createElement)("stop",{offset:"1",stopColor:"#F4E3CC",stopOpacity:"0"}))),redirect:(0,t.createElement)("svg",{width:20,height:20,viewBox:"0 0 20 20",fill:"none"},(0,t.createElement)("path",{d:"M8.33301 4.9987H4.99967C4.0792 4.9987 3.33301 5.74489 3.33301 6.66536V14.9987C3.33301 15.9192 4.0792 16.6654 4.99967 16.6654H13.333C14.2535 16.6654 14.9997 15.9192 14.9997 14.9987V11.6654M11.6663 3.33203H16.6663M16.6663 3.33203V8.33203M16.6663 3.33203L8.33301 11.6654",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round",strokeLinejoin:"round"})),download:(0,t.createElement)("svg",{width:20,height:20,viewBox:"0 0 20 20",fill:"none"},(0,t.createElement)("path",{d:"M3.8335 13.3346L3.8335 14.168C3.8335 15.5487 4.95278 16.668 6.3335 16.668L14.6668 16.668C16.0475 16.668 17.1668 15.5487 17.1668 14.168L17.1668 13.3346M13.8335 10.0013L10.5002 13.3346M10.5002 13.3346L7.16683 10.0013M10.5002 13.3346L10.5002 3.33464",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),superfast:(0,t.createElement)("svg",{width:21,height:21,viewBox:"0 0 21 21",fill:"none"},(0,t.createElement)("path",{d:"M13 10V3L4 14H11L11 21L20 10L13 10Z",stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),(0,t.createElement)("circle",{cx:8,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),secure:(0,t.createElement)("svg",{width:22,height:22,viewBox:"0 0 22 22",fill:"none"},(0,t.createElement)("path",{d:"M9 12.001L11 14.001L15 10.001M20.6179 5.98531C20.4132 5.99569 20.2072 6.00095 20 6.00095C16.9265 6.00095 14.123 4.84551 11.9999 2.94531C9.87691 4.84544 7.07339 6.00083 4 6.00083C3.79277 6.00083 3.58678 5.99557 3.38213 5.98519C3.1327 6.94881 3 7.9594 3 9.00099C3 14.5925 6.82432 19.2908 12 20.6229C17.1757 19.2908 21 14.5925 21 9.00099C21 7.95944 20.8673 6.94889 20.6179 5.98531Z",stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),(0,t.createElement)("circle",{cx:8.33,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),nativewp:(0,t.createElement)("svg",{width:23,height:21,viewBox:"0 0 23 21",fill:"none"},(0,t.createElement)("path",{d:"M12 5H7C5.89543 5 5 5.89543 5 7V18C5 19.1046 5.89543 20 7 20H18C19.1046 20 20 19.1046 20 18V13M18.5858 3.58579C19.3668 2.80474 20.6332 2.80474 21.4142 3.58579C22.1953 4.36683 22.1953 5.63316 21.4142 6.41421L12.8284 15H10L10 12.1716L18.5858 3.58579Z",stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),(0,t.createElement)("circle",{cx:8.66,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),googlelove:(0,t.createElement)("svg",{width:22,height:22,viewBox:"0 0 22 22",fill:"none"},(0,t.createElement)("path",{d:"M4 4V3H3V4H4ZM20 4H21V3H20V4ZM6.29289 11.2929C5.90237 11.6834 5.90237 12.3166 6.29289 12.7071C6.68342 13.0976 7.31658 13.0976 7.70711 12.7071L6.29289 11.2929ZM10 9L10.7071 8.29289C10.3166 7.90237 9.68342 7.90237 9.29289 8.29289L10 9ZM13 12L12.2929 12.7071C12.6834 13.0976 13.3166 13.0976 13.7071 12.7071L13 12ZM17.7071 8.70711C18.0976 8.31658 18.0976 7.68342 17.7071 7.29289C17.3166 6.90237 16.6834 6.90237 16.2929 7.29289L17.7071 8.70711ZM7.29289 20.2929C6.90237 20.6834 6.90237 21.3166 7.29289 21.7071C7.68342 22.0976 8.31658 22.0976 8.70711 21.7071L7.29289 20.2929ZM12 17L12.7071 16.2929C12.3166 15.9024 11.6834 15.9024 11.2929 16.2929L12 17ZM15.2929 21.7071C15.6834 22.0976 16.3166 22.0976 16.7071 21.7071C17.0976 21.3166 17.0976 20.6834 16.7071 20.2929L15.2929 21.7071ZM3 3C2.44772 3 2 3.44772 2 4C2 4.55228 2.44772 5 3 5V3ZM21 5C21.5523 5 22 4.55228 22 4C22 3.44772 21.5523 3 21 3V5ZM4 5H20V3H4V5ZM19 4V16H21V4H19ZM19 16H5V18H19V16ZM5 16V4H3V16H5ZM5 16H3C3 17.1046 3.89543 18 5 18V16ZM19 16V18C20.1046 18 21 17.1046 21 16H19ZM7.70711 12.7071L10.7071 9.70711L9.29289 8.29289L6.29289 11.2929L7.70711 12.7071ZM9.29289 9.70711L12.2929 12.7071L13.7071 11.2929L10.7071 8.29289L9.29289 9.70711ZM13.7071 12.7071L17.7071 8.70711L16.2929 7.29289L12.2929 11.2929L13.7071 12.7071ZM8.70711 21.7071L12.7071 17.7071L11.2929 16.2929L7.29289 20.2929L8.70711 21.7071ZM11.2929 17.7071L15.2929 21.7071L16.7071 20.2929L12.7071 16.2929L11.2929 17.7071ZM3 5H21V3H3V5Z",fill:"#334155"}),(0,t.createElement)("circle",{cx:8,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),zerobloat:(0,t.createElement)("svg",{width:21,height:22,viewBox:"0 0 21 22",fill:"none"},(0,t.createElement)("path",{d:"M12 3L12.4472 2.10557C12.1657 1.96481 11.8343 1.96481 11.5528 2.10557L12 3ZM20 7H21C21 6.62123 20.786 6.27496 20.4472 6.10557L20 7ZM4 7L3.55279 6.10557C3.214 6.27496 3 6.62123 3 7H4ZM20 17L20.4472 17.8944C20.786 17.725 21 17.3788 21 17H20ZM12 21L11.5528 21.8944C11.8343 22.0352 12.1657 22.0352 12.4472 21.8944L12 21ZM4 17H3C3 17.3788 3.214 17.725 3.55279 17.8944L4 17ZM11.5528 3.89443L19.5528 7.89443L20.4472 6.10557L12.4472 2.10557L11.5528 3.89443ZM19.5528 6.10557L11.5528 10.1056L12.4472 11.8944L20.4472 7.89443L19.5528 6.10557ZM12.4472 10.1056L4.44721 6.10557L3.55279 7.89443L11.5528 11.8944L12.4472 10.1056ZM4.44721 7.89443L12.4472 3.89443L11.5528 2.10557L3.55279 6.10557L4.44721 7.89443ZM19.5528 16.1056L11.5528 20.1056L12.4472 21.8944L20.4472 17.8944L19.5528 16.1056ZM12.4472 20.1056L4.44721 16.1056L3.55279 17.8944L11.5528 21.8944L12.4472 20.1056ZM5 17V7H3V17H5ZM21 17V7H19V17H21ZM11 11V21H13V11H11Z",fill:"#334155"}),(0,t.createElement)("circle",{cx:8.33,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),compiler:(0,t.createElement)("svg",{width:23,height:22,viewBox:"0 0 23 22",fill:"none"},(0,t.createElement)("path",{d:"M13 8V12L16 15M22 12C22 16.9706 17.9706 21 13 21C8.02944 21 4 16.9706 4 12C4 7.02944 8.02944 3 13 3C17.9706 3 22 7.02944 22 12Z",stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),(0,t.createElement)("circle",{cx:8.66,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),check:(0,t.createElement)("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none"},(0,t.createElement)("path",{d:"M18.3602 6.35938L10.2002 14.5194L6.84016 11.1594L5.16016 12.8394L10.2002 17.8794L20.0402 8.03937L18.3602 6.35938Z",fill:"#22C55E"})),xclose:(0,t.createElement)("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none"},(0,t.createElement)("path",{d:"M17.9396 7.75255L13.6916 12.0005L17.9396 16.2485L16.2476 17.9405L11.9996 13.7045L7.76357 17.9405L6.05957 16.2365L10.2956 12.0005L6.05957 7.76455L7.76357 6.06055L11.9996 10.2965L16.2476 6.06055L17.9396 7.75255Z",fill:"#F87171"})),"starter-logo":(0,t.createElement)("svg",{width:48,height:48,viewBox:"0 0 48 48",fill:"none"},(0,t.createElement)("rect",{width:48,height:48,fill:"url(#pattern0)"}),(0,t.createElement)("pattern",{id:"pattern0",patternContentUnits:"objectBoundingBox",width:"1",height:"1"}),(0,t.createElement)("image",{id:"image0_2738_58191",className:"w-full",href:"data:image/png;base64,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"})),"heart-logo":(0,t.createElement)("svg",{width:30,height:30,viewBox:"0 0 122.88 107.39",fill:"none",className:"inline-block"},(0,t.createElement)("path",{d:"M60.83,17.18c8-8.35,13.62-15.57,26-17C110-2.46,131.27,21.26,119.57,44.61c-3.33,6.65-10.11,14.56-17.61,22.32-8.23,8.52-17.34,16.87-23.72,23.2l-17.4,17.26L46.46,93.55C29.16,76.89,1,55.92,0,29.94-.63,11.74,13.73.08,30.25.29c14.76.2,21,7.54,30.58,16.89Z",fill:"#1e293b",fillRule:"evenodd"})),"astra-logo":(0,t.createElement)("svg",{width:40,height:40,viewBox:"0 0 40 40",fill:"none"},(0,t.createElement)("rect",{width:40,height:40,fill:"url(#paint0_linear_2971_69719)",rx:"19.9999"}),(0,t.createElement)("path",{id:"pattern0",fillRule:"evenodd",clipRule:"evenodd",fill:"white",d:"M21.4952 11.3394C20.9235 10.2236 20.3519 9.1077 19.7647 8C18.8281 9.91771 17.8915 11.8354 16.9549 13.7532C14.6364 18.5003 12.3178 23.2475 10 27.9951C10.5404 27.9966 11.0808 27.9959 11.6214 27.9952C12.475 27.9941 13.3286 27.993 14.182 28.0003C15.6282 25.1883 17.0646 22.3713 18.501 19.5543C19.698 17.2067 20.8951 14.8591 22.0979 12.5143C21.8965 12.1229 21.6959 11.7312 21.4952 11.3394ZM27.9861 23.9851C26.6931 21.4095 25.4001 18.8341 24.1035 16.2602C22.7358 19.0199 21.3667 21.7797 19.9945 24.5372C20.5591 24.5368 21.1236 24.5369 21.6881 24.537C22.4409 24.5371 23.1936 24.5373 23.9466 24.5364C24.1569 24.9967 24.3625 25.4589 24.568 25.9212C24.8774 26.6167 25.1867 27.3123 25.5118 28.0008C26.4201 27.9926 27.3285 27.9938 28.2368 27.995C28.8245 27.9958 29.4121 27.9966 29.9998 27.9948C29.3282 26.6584 28.6572 25.3217 27.9861 23.9851Z"}),(0,t.createElement)("linearGradient",{id:"paint0_linear_2971_69719",x1:"39.9998",y1:"-1.19212e-06",x2:"-0.0009992",y2:"39.9998",gradientUnits:"userSpaceOnUse"},(0,t.createElement)("stop",{stopColor:"#E976FD"}),(0,t.createElement)("stop",{offset:"1",stopColor:"#583EDE"}))),"starter-canvas":(0,t.createElement)("svg",{viewBox:"0 0 1916 872",fill:"none",x:"0px",y:"0px",enableBackground:"new 0 0 1916 872"},(0,t.createElement)("image",{href:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB3wAAANoCAMAAAAcVGsfAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\n\t\t\tAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAADAFBMVEXt7u/q6uvm5ufFx8rO\n\t\t\tz9Hw8PLV1tfy8vT19ff29vj39/l6iYxeXm10dYK4wcP19vvj4+FygYVkYXKytba+wsNnanlscYCI\n\t\t\tkJSXnJ+orLCDjZHc3d4eKjaMk5ckM0BLTlrl6OyfoZ9TVGFFS1GbqamSl5olOkiwv780PEyEhok6\n\t\t\tRFXQ1ttYWGfc5eU/SV31+fjf6Ojx9fT////09vX//v/+///9/f3n7fD+/Pf5/v799O4+RUdcYWD1\n\t\t\t04+UxczXlV5ip7zmvYRSkqPw/Pr36cWdaV1KUWfB3ea/lltkenz86t212eK6gWf24aq/1M2Ed2pJ\n\t\t\tc3rSroyFgnlxm6HY6O65sKSTsrTq0rTmxaCUjYKlz9bX49CimYxbX3XRuKCHucHCmHbB09bYzcKp\n\t\t\tvL3O4upVWnFbb22Mo6DR3d7TpXjksmKihGNsbGZPVWx8aFdPZWa4po7/wQebuLmXtraiursyMjI3\n\t\t\tODgpLS8lKCobJycgISMZHB4qOTY0Pz9FTGKqqKFYNyxPKRtDIBI7GQ4xEgpQOBNtOx93ZTxnX1Vr\n\t\t\tVT1uSzJkURRYQx82LSILBwUMDQ0CAgJnVk4mDAcZCgYnGRE+NygXFhIoKB8OFRikubBePzRfDwlt\n\t\t\tHxBfTCpGJhxCPT1XU1ZRMCVANw8OHiEtQ09xWiZKRkdzd3LQN13rDFP+AVExLQtPSA4rMyWjOg7I\n\t\t\tuTTwmxmHeBGpnhvfexRqcSPQXg0OXgxMBxC6ShDt9fJ+UUUQJShRQzO90stSTVD8zAm3bSH6v8/O\n\t\t\tETXtkKXbc21fRj2OIw+0ycDX4eFjTUZIPirBu7H3+fVzYw25zsUUM0Lj2M7Qw7bq5eDw9Op2eE5R\n\t\t\tTjsNLTGzzJ/A1LB0mk+DjWOJq2iZtnynwo6FnYpcflTM3MFJWltJYkWgs5qBfTV+p645TTEZNjId\n\t\t\tYGpYXSyMZEQER1KCZyaTdkqmnHGQTiOWdiuhhC2zfkiZi0r+2jf1ukPPjjiyIyGzUTfIakvYVjDj\n\t\t\t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\n\t\t\t2cZax8j5hv1jWFyEBb6BAM418sD9nnQ6IgCtYCza8zem3s5l9Wff/ta3bDQuOCwj22La4ErXfCV7\n\t\t\tG/quHD58QS75In3fefF58KrPPg/APE0tJo/qVb5Iz7PI1zlCb5l6oxw12pjGRd8XTp385teeP3nx\n\t\t\thdNyyRepi2evTeeOTaPvnctRNa+IO2fVoUaq9aXyoFkqx5UDenEWLyZh5eFxV06dunjq3VxuLke9\n\t\t\tNHBXedGHEicOSnQDdRMYaM6LjCukb14MPdImHellvmob5+xVaYjFdEKisGhvJbpgiXznewbfYbWr\n\t\t\txp5R627MYd5D+bzDuB6s8wcTpkQl0u3R90aRz3seslprZQaVde/OvVV7pXbu3b0TcL5HPG4XbLxz\n\t\t\tD35V7X5Qw84gfFl7927ae33nzt17d+7ay/C9CzWWhe8jP/pTynY+eAi86J/eekyWEu039tUoXOFd\n\t\t\ticctG4YWceYDpuyqwiwr1f4aJvrKKQoFMWcsM1JTnMWco3GZZ6VWHx0y5VrJVhyHxk0lSHppr3GK\n\t\t\toGp6BXItev5ym4GoRsq+La8NibDz2/pqb7Ng9Srg67l8eSExR343FgumUkGALvjg+cmJqSkabJSK\n\t\t\tx1KplA++gh4bsNfl83kUZ8D1piuYmnC6nM64y+2P+AZdg6GVel/zHCR1AVh1sMuBtAjEhnLhO7CX\n\t\t\telQBa0OLwN/AIk7rTYeombPoq4HgDav0bbVRxw3cHP0xdpOEy36/H7tNkn0NpH2KbzAQ8rfCxnhC\n\t\t\tc4zw/Kbn8k240qrJBt9jYvCgDG3D01AbrfaVOd9GDb6EXo296H2fR+v74slTFw4fPy76Ox9Ri45o\n\t\t\tNFEuM5cXQwVLZzwfE7MEj58+jdb35DdPvvrCCydwtsIxan51SeRu5c6eyYmsqzOAUow509xezfUS\n\t\t\tH2dpCi9dkIW9IkNqNpc/e/Y47vscuWcs9QUCwwWaCCxHFFGyVT6Rm0PewgntbiKfiOazWoONTEbL\n\t\t\tvpIDjKh5JM36lWjOUF40DhSUC74yBP0pwPdO9DU02dgjyohEwRC1uhoxwZfKazBzee/oo+8BfWXK\n\t\t\ts3VUTbgCYFtFIY51dOcoVeUI0wieee9eWaMz+mDWGlG2896972E8YOfOvdiJ07r2H9EGhG/JsPN/\n\t\t\t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\n\t\t\t54+7CN9/qvFsfb6tgWsxhfe4xeN7FYTv8W/u3fv6nnZ/R5LkxMnfHLtT/JvDxRLF8eM5x0x37pV0\n\t\t\tHz/+we8+/vjj/SCDc1Z1r/L95/Sc05lb0OIsigLlCwIY62qMjMPV+PgjgO4jvBpBB/AjkMAw9/KF\n\t\t\tgZoLNeN/fitaJG3WKNkS9xfmd9DxdMo3aQqDv1f5fv+YSOudo8LV3DHP1tYJgN3bNNpKN/ddFt56\n\t\t\tTw24IndKUpeuX2DA1eP+XNuAhNt3OjtNnSZy7uzk1U3jbtAsL5s5b0qq7yJ8v2fMW/mWWVKMrPQl\n\t\t\t+P0LB9ONvtWmcF6kZK+EQJcHWhHNtFqMuOJZFDHQ12td6sqV21IjV26LBPZipBayd68qz9iZn29d\n\t\t\tUhYm9RqrquqL6qtkOd3dZTndum6UvSCCFfVteap8rKxR0Ympv+dN5eL+0z396dHpw13newYfPDhQ\n\t\t\t3lvQS+pYkShn0XBXeflw3/Bwf0UbzGmHeZOpRkT5YhcF0kNBqcBKGx2k0CT2V+jg0DpS9PDxBTw+\n\t\t\t8JYnlKglCF9BrlCg1gokai5PIES/tjpHIVNJeEJBLl8o0AqFQik/VyDl6dmKxYCrf8nxjCtc/fS3\n\t\t\tBL1W+paV7Td9/eW9r+6YFI23tR8fvdN56bbx8L6snFVXr2K27/HOO1eP//a3Hxy/+jlsHau6X5L/\n\t\t\tU1qdN7BA+IrSRT1DgN6Q6PCTJw8AfC9ggtHoWPWj0dHqh+MDCN/RGrRAP6oZrbkwAs/401vx0VJh\n\t\t\t6TpPF9sN86LvQpXvrJo36bFQq2nK9/tzfGf4e6cK4knwzp1wZA2s8t6VSlNKPKzonRbqjM0VvGt3\n\t\t\tlfgvEL6TqncyOhnhC/tWHaIXbjtvT0hfC06neogDZpkXNGmFxiodi/Cdc42b52+y73jZ1c+n1JY8\n\t\t\tQzh8pgPh+6LWZ/ny5agQtRKr4OW9iALYR+DDI/NhvAgYc/OKdN0WuS0TyYvwfX1z0uakrcI2AOpE\n\t\t\tP19dka4op8hUZNIhbXU6XU437GSoOwpdYVt/fpvZ3Gk+bzJXmevbIsR5fxjujxYjZU8NDRYcOhgx\n\t\t\tVN7b1dc3HDEMind4qA9LSg535SF6u/q68tqmBFxhLq+CKiupxNsOckYaI4M5HR2g2jHASog1nVUS\n\t\t\t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\n\t\t\tggAAAABJRU5ErkJggg=="})),spectra:(0,t.createElement)("svg",{width:40,height:40,viewBox:"0 0 84 85",fill:"none"},(0,t.createElement)("path",{d:"M41.7849 0C33.5206 0 25.4419 2.49258 18.5705 7.16254C11.699 11.8325 6.34331 18.4701 3.18071 26.236C0.0181112 34.0018 -0.809377 42.5471 0.802901 50.7913C2.41518 59.0355 6.3948 66.6083 12.2385 72.552C18.0822 78.4958 25.5276 82.5435 33.633 84.1834C41.7385 85.8232 50.1401 84.9816 57.7753 81.7649C65.4105 78.5482 71.9363 73.1008 76.5277 66.1117C81.1191 59.1226 83.5697 50.9057 83.5697 42.5C83.565 31.2298 79.1612 20.4225 71.326 12.4533C63.4908 4.48402 52.8655 0.0048112 41.7849 0ZM57.5278 49.0175C57.5278 49.1264 57.5278 49.2354 57.5278 49.3443V49.6529V49.8526C57.3161 51.0856 56.8673 52.2639 56.207 53.3201L55.8143 53.8829L55.2431 54.5546C55.0482 54.8082 54.8268 55.0396 54.5827 55.2445V55.3353L54.4578 55.4261L54.2079 55.6258C54.1249 55.7007 54.0353 55.7675 53.9402 55.8255L53.6724 56.0071L34.3061 69.0602C34.1479 69.1683 33.9612 69.2253 33.7706 69.2236H33.5743C33.447 69.1967 33.3262 69.1443 33.2189 69.0695C33.1117 68.9947 33.0201 68.899 32.9495 68.7879C32.9495 68.7879 32.5033 67.9891 32.4676 67.9347V67.7531V67.6623V67.5534V67.4263V67.2811C31.7014 65.262 31.6378 63.0371 32.2872 60.9761C32.9366 58.9152 34.2601 57.1424 36.0375 55.9526L45.0691 49.8708C45.2101 49.7754 45.3201 49.6398 45.3853 49.4809C45.4505 49.322 45.4679 49.147 45.4355 48.9781C45.403 48.8091 45.3221 48.6537 45.2029 48.5315C45.0837 48.4093 44.9316 48.3257 44.7657 48.2913L34.1633 46.1128H33.8599H33.7706H33.485H33.1816H33.0567H32.896H32.8068L32.5212 46.0038H32.4319H32.2534L31.9679 45.8586L31.6823 45.7134L31.4145 45.55L31.1468 45.3866C30.3041 44.8521 29.5509 44.1841 28.9156 43.4077L28.6836 43.0809L28.4159 42.6634C27.73 41.6278 27.255 40.4629 27.0189 39.2375C26.7828 38.012 26.7905 36.751 27.0415 35.5286C27.228 34.6884 27.5221 33.8766 27.9161 33.1141C28.0232 32.9144 28.1124 32.7328 28.2195 32.5694L28.3802 32.3153C28.4948 32.1207 28.6199 31.9329 28.755 31.7525L28.9156 31.5528L29.112 31.3167L29.3083 31.0989L29.4333 30.9718L29.6475 30.754L29.8259 30.5906L30.0223 30.4272L30.2365 30.2456H30.3257L30.4685 30.1185H30.5578L30.7898 29.9551L50.049 16.9746C50.1725 16.8912 50.3113 16.8338 50.457 16.806C50.6027 16.7782 50.7524 16.7804 50.8973 16.8126C51.0421 16.8448 51.1791 16.9062 51.3002 16.9933C51.4212 17.0804 51.5238 17.1913 51.6019 17.3195L51.7626 17.5918L51.8875 17.846C51.8875 17.9368 51.9768 18.0094 52.0125 18.082C52.0125 18.082 52.0125 18.082 52.0125 18.191C52.0239 18.2325 52.0239 18.2765 52.0125 18.318L52.1195 18.5904C52.1292 18.6383 52.1292 18.6877 52.1195 18.7356C52.1195 18.7356 52.1195 18.7356 52.1195 18.8445C52.8288 20.8305 52.8625 23.0011 52.2153 25.0089C51.5681 27.0166 50.2774 28.7455 48.5497 29.9188L39.6251 35.9462C39.4842 36.0415 39.3742 36.1772 39.309 36.3361C39.2438 36.495 39.2263 36.6699 39.2588 36.8389C39.2912 37.0078 39.3722 37.1632 39.4914 37.2854C39.6106 37.4077 39.7627 37.4912 39.9286 37.5256L50.4417 39.686C52.5458 40.1281 54.4361 41.2935 55.7948 42.9862C57.1536 44.679 57.8979 46.796 57.9027 48.9812C57.5635 48.4003 57.5278 48.9812 57.5278 48.9812V49.0175Z",fill:"url(#paint0_linear_619_170)"}),(0,t.createElement)("linearGradient",{id:"paint0_linear_619_170",x1:"1.17098e-05",y1:"1.49716e-06",x2:"84.02",y2:"71.3596",gradientUnits:"userSpaceOnUse"},(0,t.createElement)("stop",{stopColor:"#4E01D1"}),(0,t.createElement)("stop",{offset:"1",stopColor:"#6104FF"}))),surecart:(0,t.createElement)("svg",{width:40,height:40,viewBox:"0 0 40 40",fill:"none"},(0,t.createElement)("image",{id:"image0_3424_45969",className:"w-full",href:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAABGdBTUEAALGPC/xhBQAAACBjSFJN AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA7EAAAOxAGVKw4bAAARNklEQVR42u2df2xd5XnHP8/rg0kjK7KitmIhdbPM87IsjSKI UsYYcSgdwdwEK+XH6MavqmtBkylZy1g2zfdcIxTB1kGVMQLVRijaIqDL0vjGwEiJx9JAmUFeakWe iTI3ChnKUORFnus5N+fZH+c6thP/uPY957z3HJ+PdIVz7z3nfc65X573Oe/7vM8rzFfc5mpkpF7E 1KG6HJErQetArgAWA7XAIsAp/j2eQWC4+N8zxddJ4BTKz4FTCn2ocxx3b8H2pdpAbBsQCe7mhSLn VyOyCrgaWAOsBBYAZtwrCLxxryGgF+gBfopqt2rVUdx9Q7ZvSdgkU1ju5gUi3mqEa4EvAevwvU81 wQlotniMebn3gIMoh1Tpxs2P2L5lQZMcYbVlakW5FuFm4EZgKbAQe0KaiVGPdhI4gPKawrtk82ds GxYE8RaWm1kowlpgE0IGWIbfvcWRIeAUkAdeVc/rwu2IrSeLpbAkd0sdIhngTvx4aZFtmwLmLH5c 9qJgOrzWfSdtGzRb4iOstiYjKitA7kW4Dd87VWo3FxQe0I/yQ0R3K3qE1g7PtlGlUPnCamtyBFkF PAiSAZbYNskSp0H3As8q2kNrR0UPY1SusNyMEWEFoi0gW4DP2japQjgNugd4rpIFVnnCcpsRKSwD HkT4Kv7TXcqlfAI8D/KcelUncfdWVBdZUcKSXKYG4Q7g2/gDmCkz0wu6HWSPtuYHbRszSmUIy80Y MXIV6GPADfgDmSml4wGvg2YV7a6E7rHKtgGS21QjhhbgOeALlWBTDBHgV0HuEOQyGn/t3+nsG7Zt kB3cZow5v0rRZ4DrSP7QQVR4wCGBP/A8pw93rxUjrP2YYgr3KfqvwPU27UggBrhe4X0xhftsGRG9 x8ptrhHxdgDWLnqesUvVtJDdF2lgH6mwTFtmhcJLwNoo202hS+BurzXfG1WD0QjLbTZiChuBZ/Cn YlKi5xjoVvUu64hizCv8JzC3yRGjdwHPA78UenspU7EYpEnEO8n6+qN0fhiquEIVlmnLLBCR7wBP krwMhDiyANgoIp7Z0PBverAvtPGu0IRl2jILFVqBbcQ3RyqJXAb8NnC52dDwjh7sOxdGI6EIqyiq PwceBi4P7RalzJUq/Aeo0MQVuLAuElXqqSoXhxDFFaiwTFtmQbH7e5hUVHFgvLh+EmTMFZyw3Can GKhvI+3+4oSDv4pphPX17wT1tBiMsNxmUxxSeJLUU8WRKuA3RaSf9St76OzVck8YyBydmEITsAN/ uVVKPFkIfE+k8DtBnKzskffiNE07UG/7zqQEQr/AzeVO/5QnLH9C+SDp3F/S6FI1G8qZuC6rKyxm KaSiSh5ri7/tnJmbx3KbKeb6vGD7DqSEyv3qObvmkiw4J49lTKEBP1hPSTZPGVNYNZcDZy+s3KZa he8DNbavOiV0ahWekdzGWf/WsxvHarswCHoPlbLCJyVsPoeYAdY3vEtnX8njW7PyWELVGmDrbI9L iTUG2CZGr5rNQSV7LGnL1OBngH7B9pWmRM6nQOqkseFHdPaVVFqpNM/jNhvQLcBG21eYYo0bEO7A bSzpy04pXxI5vxRkG/OnC/TwC9aeAj5WOI5yBrC+wnguCCxH+F1K/L2noBr4tkjNWwr9JbQ5A21N jmBywJ/avkEhM4x/w95FeUOhF/VOQPVApRXcmA2S27Qc0VeBWcVIU6I8qco23Py092RGBRdrU33D 9g0KkTNAJ7BbVQ6hVafjLKQLuM2InF+G6D/iVz0MBuGrAi8qHJ3+a9PhFz3bAfKA7fsUAqeBVxRe wuMD3Hwsu7lJmSiqYDzVBHSnoi3TFR+Z1mP53kq22L5PATME7FVkO17V0UR4p/GMiSq47u8SZIvA cwrdU35jymPbmowgz4IkqRvsQXWrqvcW7mvJEhRcLKqQkwP0eUUfnKom6pQeS5DVIM0271OAFIBX 1DvfgvtaIuqoX0KkogKQjCjfmyrWmnr4QOUuklH3c0SVP1PPuTexooLxMVVUaUxLQO6d0p7J3jS5 zXXqJ/Att3CPgmRYlUfI5v/atiFhUhxSCPbprzSOq3obyHacuPiDST2WireR+BfvGFLlEeBvbBsS JpLbVF/s/tZYaH6Z+Bs5XMKlwnKbq4F7ifco+xDwKLCTbD55QXqRoqh2E9rT34wYkDtxMwsn+eAi Y6WwDphTcleFMAg8qspOsgkam7oIyW1qQPTvsZ8avkZEL7HhUq8k3E58K8MMAtvmiahewl9oaptF IJsufnOisHKZxUCTbUvnyKionk9FFbVRZGi7uXb8W2bi51xDPPeqGS+q2G7FNhPFmKqyROWzTLTq 2vFvTPRY/iaScVvNPJ9EtZvKExXAgqJ2LjAmLDdTjb8zaZwYYiymSrKoliP6MvYD9em4EfemC3U7 xqZ0hDXEa0OkIZL+9BdW6ks4LEWc1fj7XY95LBGuIz7d4LBqKqoKY6GIXIizxk9CbyAug6LKAdAT wEZyt9i2JiTOVSOyDXuDn7PFAF8CnobRucLcrQtFzv8nyZh0TrHHadWqXyb7oyHfQ8n5laQrm1PK ZxEUVkOx6xO/D08r8aWUS7WIrIKxmOqLxCW+SqlkDHD16B8Q70nnlMpiDYDgNjtiCv8N1Nq2KCUR nFXP+YxBCsuJz/hVSuWzABmpN0ADaXyVEhwGpM6IsIRUWCnBYURkuQN8nsoQ1iCqT4P8zLYh8UNr FFkMfE6EZfiLYOqxM4RkgCsdKiP/yk99QRKd+hIF6mYMop8VpB70dkTuAK6I2Iw6kbbMm9hNl0l+ loJFJHfLGkQex69tFlXPdMAAn7Z43amoQkaz+7tVuRt4N8JmFxvsjV8NAS2pqCIgmz+jyuP4NcCi oNZgZ/J5BGhRZFcqqohQPsCPZaNgkUP0Tw4FVd1Gdv/fRdzuPEc8KHu3uFJxbHisfWT3/1XEbc57 xGgD0TmR2qjHr06r8q2I20zxuZUInUiUwvJAd5DNn4ywzRTAtGXq8HcTia7NCNsaVEw+yotLAdxm R+EpIk47N8BARG0N4f3iaPmnSZkNxhQeAjZH3OygQ3RF8b00rT46qh7bbFS9exS2U97GAXNh2ABn I2qsRsRPtE8JF/NYxqjqPervfVRtwYTBKLvCGoRtuE02LnTeYNoyjioPKLoDewmcZwz+zgyRXDPQ LMb8rWnbXAkZFYnDtGUc9XcR+Qvsxh1nHODjKK8d+H3FWydtmReA19XzTgADuB2JLekYBaYtU63w deAJ7Kean3SAE2WfZvY04AeVj4oxx4FjtGX6Ff1IlAGQqCZLE4P6+0g+TGU8IZ1yUD5C8LCTRVqL X5vgKgBB0g2B44+H8nOjwnH8/flSUoLAU/SUwe8KU2GlBIUH9Bk85xjRJYClJJ8h9H+PG9y9I8yw qWFKyizoxe0sjAbs3batSUkMPTD2JPg+aZyVUj4e8FMoCktVe/Dz0FNSymFY1euGUY+lVUeIbjI6 JbkMos5RGDccKblMO0Jm7ueMnC5V3U6yPa0R+BYiN9g2pETy2prfBBPrvP8Yfx+dSqjjMBMfoHI7 6vTj7rVtSyiYtlsc4DuKXGfblhLxgIMX7B/9Q5XD+ItIK51uVL6iWpVkUVXjiyqLnXyquTCkqodG /zHmsdQcQbyTwArbFk7DB6jcrtn2ftuGhEVRVH9UFFWcCg6fRKX7wnVceNvdNwwcsG3dNHShcqdm 24/bNiQsiqJ6OIaiAvQA7liloInxlPIalTm98x4qd2m2/ZhtQ8Ii3qJiSH3tjF3P+H+ocBjot23l ODzgXVTunkeisp2kNxdOgUyoZjPRY7XmB1AqZe2fBxwqdn99to0JiwSICtAOsvkJKe6TDS20Y3+w 1AMOFz2VjQzXSBgXqOeIrag4q8jLl1zbxW+o0oX9SenDqPxewkXlEM+nv4vpwfO6Lrm+S77m5oeA l7E3KX24GKgnWVSGsXGqOIvKA30Rt+OS2Y9JR9lVJY+dIP5wcZwq6YVD/qTY/cVZVAD9SlXHZB9U Tfr1zr7/kcaGKxF+K0IjD6Fym2bb/8vGHYoEt7labqj/S5BHiM+I+tQo3yfbvmeyj6aZF9QXgVMR meg//WlVlGscI8U8lrlCTOFV4CGSICo4jejuqT6csliEqvYK5BH5RsgGjorqVBLn/vw6CjSr8hRQ Z9ue4NC9ih6Z6tNpV/EVa4S/QXi1lZIrKjdjRFiH8Ah+1kjc46nxnAa9SVv3d0/1hWnL26hqj8Ae RB4IwbhkisrNOEVBteAX7a+1bVLw6B5Fe6b7xozrjiWXWYnwBrA0QMsOF1NfPk6EqNxmA+eWipHr gfvxN4NcbNuskPgE9MvTeSsooSCXKr0C/4DwxwEZNjqkEN9A3W02SOHTIiwFVkPhZpC1+DFU1EXO oub5mbwVlFopIZdZJsJ+YGWZRhVQfqAQy3EqERbge6I6fA9+Bcn1TJPRq8hNtM48eF3a/13q9COF 7wLPUt6jsoPwtbTuRyzxQLfjOSU5hdLy2929oLwCvGX76lKs8TrIHty9JU31zc555DJrxQ/k55P7 T4EBVf0y2f1dpR4wuxU5ygco20lXTc8nPOApRLtnc9Cswx3JbapBdD9wve0rTomEt1XlVrLtA7M5 aG5xdC6zWoR/IZGDfynjGFTlarL5WWfwzm1xqjpHgK22rzoldFpQZ05p4WU9+Usu8wLCfbavPiUM dJe27r9/rkeXtZxe1bQAJT8ppMSGLtWqlnJOUF6dBnffYHEj637bdyIlMI6pcjfZfWVt81tVzsEA dPZ9Io0N/4HQBHzK9l1JKYsB4Jtk84fLPVEglWVUnX/G3zk1DkVFUiZnCGhRz+ko+0wE4bEAOnuV xvqjxQ0ArgvsvClRMQI8rp63E7f9fBAnDE4AnR96bGjoEqEaWEvy00eSwjDwlCpP4O7/v6BOGqxn 6ew7R2PDOyJcTiquODAMPK3KY2TzgYYxwXdZqbjiQmiigrBioYniWhdaOylzZQS/+wtFVBDmDz4q LjiHcA1wWWhtpcyGIeBxVZ4IS1QQtifp7DtHY/1hQfoRbiBZS6DiyBngD/2nv+AC9ckIv4vq/NCj cWWP4PUgrCNNErRFP8rXVZ1/CmpIYTqiTT/PZVaI8BJ+UJ8SHV3+NE2+N6oGow2qO/s+Yf2K3YIu QVgTadvzFt2lWnUn2fao6nAAFjfKlbbMfcAOKmMP4yQyAGzV1vwuG41b24VCPWeXKlcDb5Pm0AeJ B7ytquvVc3bZMsL+Ej93U62IPoSwlTTVuVzOoLodzE7NtpeV9lIu9gcuO/uGaaz/CcibxSXrv0Il CD5ejABvqurXUNmDmw91KKEUKuoHlFymBnQLItuo7K1XKomjwHdVeYVs3qqXGo99jzWezr4RGn/j Z6D7BH6B8OvEt0x12JxE2anoVvSyg7j7Kmp7vYryWBNwmxwRWQV8E5EthFf8LW6cBt2jKjtQenHz FfngU7nCGmVMYA8i0sz8Fdgp0DzwrKI9tHYUbBs0HZUvrFHcJiMiq0HuQrgNWEY8Nu0sBw9/KuaH ir6IaC+tHRXpoS4mPsIaT25zneBtRLgXWAUssm1SwJzF3x3kZVXNk90fu80U4imsUdymasSsE+Er QAZYQnyD/WF875QH2lXpKu4SEkviLazxuJnFCNeIcDNwI37FvYVUbnfp4edGnQQOqPIawmFa8wO2 DQuC5AhrPG6mGmGNwHXAhmK6Tg1+PpgtoXn4A5lngfeAH6tyGDVHirvbJopkCuti3FsXIudXirAG 5YsIq/AHYEc92ugrCLxxr2H8Acxu4H1V7UGrjuDui20XVyrzQ1iT4TY7SGE50AAsEeHz+DHaUvxk xMWMebmLMzAGgAK+9xnAz8z8GDihqh8hchzlBOocw91bUQOXUfH/iirS9h3+z0QAAAAldEVYdGRh dGU6Y3JlYXRlADIwMjItMTEtMTlUMDY6MDE6MzYrMDA6MDBo7FfLAAAAJXRFWHRkYXRlOm1vZGlm eQAyMDIyLTExLTE5VDA2OjAxOjM2KzAwOjAwGbHvdwAAACh0RVh0ZGF0ZTp0aW1lc3RhbXAAMjAy Mi0xMS0xOVQwNjowMTozNiswMDowME6kzqgAAAAASUVORK5CYII="})),"cart-flows":(0,t.createElement)("svg",{x:0,y:0,width:35,height:35,viewBox:"0 0 95 95",enableBackground:"0 0 95 95"},(0,t.createElement)("path",{d:"M58.942,5.609c-3.444,3.354-5.587,8.036-5.587,13.22v30.718c0,4.521-3.668,8.188-8.188,8.188H24.574 c-4.52,0-8.188-3.668-8.188-8.188c0-4.52,3.668-8.188,8.188-8.188h22.583V24.974H24.574c-1.399,0-2.763,0.115-4.099,0.34 C8.86,27.26,0,37.377,0,49.547c0,10.7,6.843,19.803,16.386,23.176c1.318,0.466,2.681,0.825,4.09,1.058 c1.336,0.225,2.699,0.341,4.099,0.341h20.592c1.399,0,2.763-0.116,4.099-0.341c1.409-0.232,2.771-0.592,4.09-1.058 C62.897,69.35,69.74,60.247,69.74,49.547v-8.188c9.05,0,16.386-7.337,16.386-16.386H69.74v-6.145c0-1.13,0.915-2.044,2.045-2.044 h4.098c4.996,0,9.525-1.982,12.843-5.212c2.987-2.905,4.996-6.807,5.471-11.174H71.786C66.799,0.399,62.261,2.381,58.942,5.609",fill:"#f06335"}),(0,t.createElement)("path",{d:"M24.575,78.218c-4.523,0-8.191,3.667-8.191,8.191c0,4.523,3.667,8.191,8.191,8.191s8.191-3.668,8.191-8.191 C32.766,81.885,29.098,78.218,24.575,78.218",fill:"#f06335"}),(0,t.createElement)("path",{d:"M49.149,78.218c-4.524,0-8.192,3.667-8.192,8.191c0,4.523,3.667,8.191,8.192,8.191 c4.523,0,8.191-3.668,8.191-8.191C57.34,81.885,53.672,78.218,49.149,78.218",fill:"#f06335"})),suretriggers:(0,t.createElement)("svg",{width:40,height:40,viewBox:"0 0 64 64",fill:"none"},(0,t.createElement)("path",{d:"M32 64C49.6731 64 64 49.6731 64 32C64 14.3269 49.6731 0 32 0C14.3269 0 0 14.3269 0 32C0 49.6731 14.3269 64 32 64ZM32.1378 16C29.5683 16 26.0125 17.4694 24.1956 19.2821L19.261 24.2051H43.8572L52.0815 16H32.1378ZM39.7629 44.7179C37.946 46.5306 34.3902 48 31.8207 48H11.877L20.1014 39.7949H44.6975L39.7629 44.7179ZM47.7568 28.3077H15.1577L13.6179 29.8462C9.97174 33.1282 11.0531 35.6923 16.1594 35.6923H48.8467L50.3871 34.1539C53.9978 30.8911 52.8631 28.3077 47.7568 28.3077Z",fill:"#2D64FB",fillRule:"evenodd",clipRule:"evenodd"})),"custom-layout":(0,t.createElement)("svg",{viewBox:"0 0 1736 660",fill:"none",x:"0px",y:"0px",enableBackground:"new 0 0 1736 660"},(0,t.createElement)("image",{href:"data:image/png;base64,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\n\t\t\tj474Skt/Ha4mJa6q6QEAAAAAAAAAQD5mREVdNK8/GxR6tn364Z5B+jSsvT7/6yN1LJHXBcpbjd5Z\n\t\t\toV3v353XxSiwQl5frC2j2+V1MQAAAAAAAAAAt6ibM4IMt7yEjXP042kpeMD9alUir0sDAAAAAAAA\n\t\t\tAACQNQJkuH5mhP763x+KMMrrse6s1QUAAAAAAAAAAPI3a14XAAWUacphOmfnPDXrPX26zlCpbi/q\n\t\t\tnjp5XTAAAAAAAAAAAIDsESDDtdn+gx79dJk8I45pU3iSjGoPacobbeWf1+XKR0xJRl4XogBiUUQA\n\t\t\tAAAAAAAAQG4jQIZrY03U6X0HFeEbqLb9n9JLz/RWVd+8LlT+UaVUUS3ffU7tagfndVEKnBV7w1Wl\n\t\t\tVNG8LgYAAAAAAAAA4BZmREVdZMAGcINtOBaljxcd0rHwuLwuSoFTObioXu1aXU0rl8jrogAAAAAA\n\t\t\tAAAAblEEyAAAAAAAAAAAAFCoWPK6AAAAAAAAAAAAAMDNRIAMAAAAAAAAAAAAhQoBMgAAAAAAAAAA\n\t\t\tABQqBMgAAAAAAAAAAABQqBAgAwAAAAAAAAAAQKFCgAwAAAAAAAAAAACFCgEyAAAAAAAAAAAAFCoE\n\t\t\tyAAAAAAAAAAAAFCoECADAAAAAAAAAABAoUKADAAAAAAAAAAAAIUKATIAAAAAAAAAAAAUKgTIAAAA\n\t\t\tAAAAAAAAUKgQIAMAAAAAAAAAAEChQoAMAAAAAAAAAAAAhQoBMgAAAAAAAAAAABQqBMgAAAAAAAAA\n\t\t\tAABQqBAgAwAAAAAAAAAAQKFCgAwAAAAAAAAAAACFCgEyAAAAAAAAAAAAFCoEyAAAAAAAAAAAAFCo\n\t\t\tECADAAAAAAAAAABAoUKADAAAAAAAAAAAAIUKATIAAAAAAAAAAAAUKgTIAAAAAAAAAAAAUKgQIAMA\n\t\t\tAAAAAAAAAEChQoAMAAAAAAAAAAAAhQoBMgAAAAAAAAAAABQqBMgAAAAAAAAAAABQqBAgAwAAAAAA\n\t\t\tAAAAQKFCgAwAAAAAAAAAAACFCgEyAAAAAAAAAAAAFCoEyAAAAAAAAAAAAFCoECADAAAAAAAAAABA\n\t\t\toUKADAAAAAAAAAAAAIUKATIAAAAAAAAAAAAUKgTIAAAAAAAAAAAAUKgQIAMAAAAAAAAAAEChQoAM\n\t\t\t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\n\t\t\t64a4DhWaq2/IJv26fbq+jG2m9k0qSKc2acXfR+UT1EZdGjjXB2rYvo0WH1utRd99r3MdmimkSIJ2\n\t\t\thS7Vlos+qt+/uWvNIalYsZLysJzQpsULVT7OV2aJjmraqplKHlyvhd9N0rkOzRVS0kcx53Zrc9Kd\n\t\t\tGtalcl63wM1tS0tddWy/QodXLNPYSRHq3ryWfC7t15pl2xVdpK4GtqpwWba+1bromR5h+mTun/pm\n\t\t\tfrBe7l1NyZt+0Y9hNdSqRgn5JkZo074kefjUUYWAayj3jVakslp3q5x+24UNOr7xH/3jPjL0rg6q\n\t\t\tummh/vrpJyW3b66AMys1d49UsnVrNSwiZ4ArQ99KGbVXrVkX9bnmRZ485e1vkXFmvf5aV0IhRc9r\n\t\t\t69atbsuklVDd5jU17+QBzZjwkyLbN1fAxS1adeiiiklKnVSzQmN1rbpJM92ut39ilI7sPq2yPfup\n\t\t\tSf6ZXzEbV35GqkqIWgVs1Ir1P2tcYke1rmro6IbVOmErIemCK5GPQq6hn1fqNFj3nPxWs3bP0cd7\n\t\t\tFimoWi1VK2GV4iN04KSX2j/+oO7K4TMqZ/xVPNBDlhPbNH9+abX2NlWyS6Mb9HzPLO+mrEUGAAAA\n\t\t\tAACAAqeAjGtJ0LoFk3XIp5KGP9AxfXBMknxaqdezd8on+lvNXRkjWazy8fGRl0fKlFQWWX185OPl\n\t\t\tkffrFqUwLLJ6esrTI7MSGfLw9JSnNWUqLquqdfmXht5dU8Gx+7RgznT9MnOFtl4qrSolJclHDXv3\n\t\t\tV7NyPjq9br5+m7dL3p36qnMpT3mmrF1UoZOef6SFqhaJ0va/5uu39TGq/0BftSrmluaK55FkeMjT\n\t\t\t01NWS75pybRW83DWJfOi+anh/cM0uH01+ZzdpDnTpmvOxggFN+qlZ55qlxr4UoV2eu6JXmpWKV67\n\t\t\t/5qvX+as0AFVU6dHhunhemkvqK2122tgwzLyPL9dcxYeUqKPZK3SRS8P7qC6QbHOY6fN0pLt8Spb\n\t\t\tqUSBbjvD4ix32q2as7as1OEJPXPPnap2yXkvzVhxUGb1Nhr83H1q6J964nRtUrJJX/Wq5qOEbX/o\n\t\t\t540X5Vu6nPwPr9CMadP1y5w1OlXqTvV/oqczsJQfZdavSzTWY090053+EQpdMF0L9koNegzRy50q\n\t\t\t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\n\t\t\tTGkSRUREREREREREREREpDloVV8RERERERERERERERFpUxQgExERERERERERERERkTZFATIRERER\n\t\t\tERERERERERFpUxQgExERERERERERERERkTZFATIRERERERERERERERFpUxQgExERERERERERERER\n\t\t\tkTZFATIRERERERERERERERFpUxQgExERERERERERERERkTZFATIRERERERERERERERFpUxQgExER\n\t\t\tERERERERERERkTbF3JyFe73elm6fiIiIiIiIiIiIiIiIXIAsFkuzld2sAbLNW7Y1Z/EiIiIiIiIi\n\t\t\tIiIiIiLyLTVq5PBmK7tZA2QDB/ZvzuJFREREREREREREREREzpjWIBMREREREREREREREZE2RQEy\n\t\t\tERERERERERERERERaVMUIBMREREREREREREREZE2RQEyERERERERERERERERaVMUIBMRERERERER\n\t\t\tEREREZE2RQEyERERERERERERERERaVMUIBMREREREREREREREZE2RQEyERERERERERERERERaVMU\n\t\t\tIBMREREREREREREREZE2RQEyERERERERERERERERaVPMLV2Bxni9Xnw+P8FgsEnHGwwGzGYTFoul\n\t\t\tpasuIiIiIiIiIiIiIiIirVyrC5C53W42b95Gbm4eVc7qJp0TZg8lMbEzQ4cOwmaztXQTRERERERE\n\t\t\tREREREREpBVrVQEyr9fL/K8XExcXy5TJ4wkLC8VgMJzynGAwSFVVNfvSM5n/9WIunXGxZpKJiIiI\n\t\t\tiIi0kDPNCCIibY8yAYmIiEhr0KoCZOvXbyI2NoYRwwZjNpsxGAxNCpCFhIQwIiqS9Ru3sH79JsaN\n\t\t\tG908FQwG8Hj8OL0BvLXf9QwGA/YQC6Fmw9mVLSIiIiIicoFzu91s3bqDA7kHcVQ1LSOIiLQ9YXa7\n\t\t\tMgGJiIhIi2tVAbKMzGwuv+wSrFbrGQXIgsEgRqORvr178cVXXzdLgCzo81JRXMjKFVm8v7eaXV4D\n\t\t\tRoLYrRaumTmM+wdHnP1F/D4c7gBBs5kIq7G5ullEREREROSc83q9LFi4hJ49uzNwQD9MJlNLV0lE\n\t\t\tWqmKigr27ktn3vxFXHbpNM0kExERkRbRqgJkjqoqoqOjsFgsGI3G0wbH6gSDQQwGA9HRUTiqqs59\n\t\t\t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\n\t\t\tRERERERERJqJAjQiIiItLT42hmuuuJStO3azY+duyssr2bB5O4FAgGAgQPDsL3FKBsBgNGI0GjGb\n\t\t\tTMTFRjOgf18GD+jb0l0jbZwCZCIiIiIiIiIiIiIi33KDB9QEpTKycsg9eIjComIcjiq8Pl+zXtdi\n\t\t\tNhMeHka7+DgSu3Sie9fklu4KEUABMhERERERERERERGRNqN712QFqUQALY0rIiIiIiIiIiIiIiIi\n\t\t\tbYoCZCIiIiIiInLWDAZDS1dBRC4wgUBAfztERESkxShAJiIiIiIiImctOioSj8fT0tUQkQtISUkp\n\t\t\t0VGRLV0NERERaaMUIBMREREREZGzltqrJ5nZ2fiaeZF3EbnwBQIBPB4Pe9L2k9qrZ0tXR0RERNoo\n\t\t\tc0tXQERERERERC58Q4cOYt78RZiMJhI6dsRgVNo0EWmco9JBelY2Xq+XoUMHtXR1REREpI1SgExE\n\t\t\tRERERETOiRnTp7J58zaWLFuBo6qqpasjIq1UeFgYXVOSGTppfEtXRURERNowBchERERERETknBk6\n\t\t\tdJBmhIiIiIiISKunNchERERERERERERERESkTVGATERERERERERERERERNoUBchERERERERERERE\n\t\t\tRESkTVGATERERERERERERERERNoUBchERERERERERERERESkTVGATERERERERERERERERNoUBchE\n\t\t\tRERERERERERERESkTVGATERERERERERERERERNoUBchERERERERERERERESkTVGATERERERERERE\n\t\t\tRERERNoUBchERERERERERERERESkTVGATERERERERERERERERNoUc3MWbjAYWrp9IiIiIiIiIiIi\n\t\t\tIiIiIsdo1gBZiM3W0u0TEREREREREREREREROYZSLIqIiIiIiIiIiIiIiEibogCZiIiIiIiIiIiI\n\t\t\tiIiItCkKkImIiIiIiIiIiIiIiEibogCZiIiIiIiIiIiIiIiItCkKkImIiIiIiIiIiIiIiEibogCZ\n\t\t\tiIiIiIiIiIiIiIiItCkKkImIiIiIiIiIiIiIiEibogCZiIiIiIiIiIiIiIiItCkKkImIiIiIiIiI\n\t\t\tiIiIiEibogCZiIiIiIiIiIiIiIiItCkKkImIiIiIiIiIiIiIiEibYm7pCjTG7fbg83kJBIJNOt5o\n\t\t\t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\n\t\t\tIBMREREREREREREREZE2RQEyERERERERERERERERaVMUIBMREREREREREREREZE2RQEyERERERER\n\t\t\tERERERERaVMUIBMREREREREREREREZE2RQEyERERERERERERERERaVMUIBMREREREREREREREZE2\n\t\t\tRQEyERERERERERERERERaVMUIBMREREREREREREREZE2RQEyERERERERERERERERaVPMzVl4MBhs\n\t\t\t6faJiIiIiIiIiIiIiIjIBchgMDRb2c0aIHO53c1ZvIiIiIiIiIiIiIiIiHxL2UNCmq1spVgUERER\n\t\t\tERERERERERGRNkUBMhEREREREREREREREWlTFCATERERERERERERERGRNkUBMhERERERERERERER\n\t\t\tEWlTFCATERERERERERERERGRNkUBMhEREREREREREREREWlTFCATERERERERERERERGRNkUBMhER\n\t\t\tEREREREREREREWlTFCATERERERERERERERGRNkUBMhEREREREREREREREWlTFCATERERERERERER\n\t\t\tERGRNsXc0hVojNvtxuv1EggEm3S80WjAYrFgs9lauuoiIiIiIiIiIiIiIiLSyrW6AFlVdTXbt+0k\n\t\t\t79BhnE5nk86x2+107tSRgYP6ExYa2tJNaCZeykt8VJpMJERZMbV0dURERERERBpxpgMeRaTt0UBn\n\t\t\tERERaQ1aVYDM7XazaPFy2sfHMXniWEJD7RgMhlOeEwwGqa52kp6RxaLFy5k+bcq5/4DlcXPQESDE\n\t\t\tbiPeflxWSr+HonI/LquZLuGWZuydXF75Wzqvt0tg6QMDiG/GK4mIiIiIiHwTxwx4dDVtwKOItD32\n\t\t\tkLYw0FlERERau1YVIFu/fhPxcTEMHTIQs9mMwWBoUoAsJCSEoZERbNy8lfXrNzFhwthzW7H0rcx4\n\t\t\ts5wJFw/nxYtij91XksZvns5nRf8e7LylW0t3oYiIiIiISItwu90sXbqSmNhoJk8cR2RkREtXSURa\n\t\t\tqYqKSvZlZLBo0TKmX3KRZpKJiIhIizCefRHnTmZWDr179cRms2G1Ws/oP5vNRu9ePcnMymnpZoiI\n\t\t\tiIiIiLQ569dvomfPbgwfMljBMRE5pcjICIYPGUxsbAzr129q6eqIiIhIG9WqZpBVVVcTHR2F2WzG\n\t\t\taDSedvZYnWAwiMFgIDo6iqrq6pZuBhDA6/RQ6griCdbk1g4PtRJprYlHBv1eHFU+HD7wc+J+gIDX\n\t\t\tQ1mVn+pAzf7I8OAZX8fvdJHvDBJhNxN0+3AEDMREhRCmBcxEREREROQcy8zKYfiwIS1dDRG5gPTu\n\t\t\t1ZMv53597jMBiYiIiDRBqwqQAZhMpvrUik0NkAEYDAZMptYQ+QniqShh9Yp9vL7DRU4AbAYzF03s\n\t\t\tzfdHtCPKasCVt5+35hUwryRIuT+AMWhh+pTe3Du6PeEmwOska8tunllUwkafiTh7CNfOiMJxhtcp\n\t\t\tXbOWGQs9zBrTmbDcEpZUW/npd0cxI/abtUxERERERORkqqqrW8l3MhG5UERGRrSSgc4iIiLSFrW6\n\t\t\tABnwjYJjZ3L8N+VyusktOe6DW7kfV8Of/ZWsmbOVXxyyc9u4FB5oDwe2H+CJL7fjDRvDI4PDcOVV\n\t\t\tkR3fgZ9OCCXWW82ShXn8+8sdtE+cwneSDLjSdvDjT8qpjI3grsntGUQlH319mKVneJ06n20r48/f\n\t\t\tG8tD7fVlVUREREREREREREREpNUFyM4m0NXcQbIta3dx48bjNgaDNAyZ+fPSeW5fgKFTenHtgJog\n\t\t\tVewkJ1O25fHOllx+Nrg3MSMH85g7gNMbwB2AK4cX8+951ezKdUCShZVryzhgsvH4rSO5JqEmXeKI\n\t\t\tlO1899nDrD+D69TpN7InMxQcExERERERERERERERAVphgKw1S+wSzfVJtmM3VpfxwSYnWbU/lmZV\n\t\t\tsAcIX7+Hu7c2OC4mhM4BcAV9eA4fZtGGw+wvcrK/Go5UegBwuH1AKbuzgZhYRiYcXZOMhHD6Qn2A\n\t\t\t7LTXabBpcJf2Ld11IiIiIiIiIiIiItLCvIEgTk8Aly+A1x8kEIRgM1/TABgNYDEZCDEbsVuNWIzN\n\t\t\tnxFO5HQUIDsDXXp2446LjlvAq3AHaxoEyEwGI2Zg2pSB/HKwhWN+zQ1WwqoO8MR/0vnYHsXDU5KZ\n\t\t\tER9O18NpjP20boWxYM1fjGCAYACoi5F5AzgbFHXa6wBFLd1hIiIiIiIiIiIiItLivIEgFU4/aYUu\n\t\t\tlmdXsjXPQXaJh3K3H3+geUNkJqOBKJuJlFgrgzuHMzElgtR2IUTaTQqUSYtSgOwci0mOItXkYs3e\n\t\t\tI5T0TyE+xIgxGMTtDmAJs8C+Qj5wwtBhKcwYEIvJ5+fALneDEqLpl2jAkF3O4oMurmlvwhL0U763\n\t\t\thLVnch0RERERERERERERafMcHj/b8538d2MhizMqzvv1/YEgJU4fJXk+NudV85/1BVzUPZI7hrdj\n\t\t\tYIKdcKuWB5KWoQDZuZaczA96lPGHrAM88N9KrhoSRqzXzd40FwOvG80loXb6h1Sya0s6b0fF0qm0\n\t\t\tnFXpDSP00YweHkXikQqeeWM9JaPb0dVfzvwDHjoAOU29TlxLd4SIiIiIiIiIiIiItKQKl5+3txTx\n\t\t\tj1VHjs4UM9T+TzBY+8O5m0EWZjVhtxixmAwYDQYCwSBePzi9fqq8gZprBWFxRgXLsir56bgO3DIk\n\t\t\tnsgQBcnk/FOArCmsISTGemlnN564z2SlXWwoieF1s7aimXJbf8K/zOTfmS7eWeMCs4FBHWLpHgHE\n\t\t\t9eJPk3w8saWaOWuK6dMtgYemO9jyZWV9+WFDB/Iv9x6eWVfF/G3FxLSL4pc3dmbDKznkR1kxNeU6\n\t\t\tgMluJzHWTLS1pTtQRERERERERERERM4nh8fPC2sL+M/6gpoNdbGwIBwNip2b4Fi4zUR0iJnL+8Yy\n\t\t\tMjmSrrE2wq0mHB4/WSVu1udU8MXuEspcPhxuPxhqZpY9teIwZe4APxrbXjPJ5LxrVQEyo9GI3+/H\n\t\t\tYvlmKQL9fj9Go/EbnXtKPQYx98GT7ItN5Q8Pph67zRTHiCvjGNHoCSEkTRrKS5OO3Tq3z3HHjBnC\n\t\t\tU2OOPWbQg4nc3eTrQMyYUcwdg4iIiIiIiIiIiIi0Id5AkDc3Fx0NjsG5nCh2jJhQMzcNac/dozrS\n\t\t\tPvzEZ/s94u1M6xXNPWMS+Pe6w7y7pYDSal/9/v+sLyA6xMhdI9trTTI5r5ohmvTNRUdFUVRUDEAw\n\t\t\t2PTf1rpji4qKiY6KaulmiIiIND+PgyMFDjzn7YJ+nKWFVJ6/C4qIiIiIiHyLBPF7q3FUlFNSVEBB\n\t\t\tYQEFRSWUV1bh9gaaK24hbdiuw07+sfJIs18n2m7m0WlJPDI1sdHgWEPtwy08MjWRR6clEW0/du7O\n\t\t\tP1YeYddhZ4v2mbQ9rWoGWe/UHuzak0ZMTAx2ewhmc9Oq5/f7cTpd7NqTRu/UHi3dDBERkea3/wse\n\t\t\t+D/49es30e+8XLCUlc89ysFrX2L2+bmgiIiItEp+XBUVOP1WwmPC+Gb5X1qaH1dlTRvCosKwnmyg\n\t\t\tureKUocHkz1S66KIyFkI4K2qoKy8gvzMtaxbl056+l4OVxswRnQitXd/ho4cRu8u8URFRxERamld\n\t\t\tMxrkguQNBPnXmto1x87tEmPHCLEY+cXkLtwwqN0ZnXfDoHa4PAEeX3gAlzdQn27xX2uO8Ow1KZpF\n\t\t\tJudNqwqQDR48kAWLlrJm3QZ69ehOVFRkk84rL69gX3oGXp+PwYMHtnQzRERERERE5BvyuyqocPpr\n\t\t\tfrCGExN2YYZgvr1K2fTuyywvTuXah2eRevYFtkgbNn/wCstKUrnqp9fS92Qvsax5/OujNOInfI97\n\t\t\txsef8VW8VaU4jp99b7ITGRlCXbgt4HVS5XTj8wfBYMBksmEPs2OpfzoewOeqptrlxR8Eg9GE1R5O\n\t\t\tqLXB4/NgAI/TgdPjJxAEg8lCSGgYIWYD4KWq9GjWAWt4DPqVEjmPAh4qCg+yZ8GbvDFvF4WVFVR5\n\t\t\tAAzYY7qQHO4ia/VHrJg3h7CYzoy48lZmTexDl3aRWBUlk7Owr9DF4oyKmh+acXrilB5R3DGiwzc6\n\t\t\t944RHViZXc7cPaX1dVycUcG+Qhf9OtjPc49JW9WqAmQA06ZOZuvW7axZtwFHVXWTzgkPCyUlOZEJ\n\t\t\t47XgloiItDF+JyXFDrwA2IlpH4716E6cpSVUeGt/tIQTH2OvfyDjqSyktD57gYXIuGjspsbPtUQE\n\t\t\tTnNtsETEEms31Z/rDInG7iqjwnt82SIiIidXuvFdXllRTmhUKJbul3Lv9G5nV6DfjaPaRdASTsQF\n\t\t\tOwsogNdZhdNjwh4VeoHO2jpPmnS/TYRFxRFjjiW82QaoB9g/70U+3WfEbDUfnQ0SO57vzB5NHIC3\n\t\t\tmsO7ljBvdRplXhOmoB9LVCrjpk+hX6dQzATxOg6zb+1ilu04jBsjmMLpOuZSpg3uQpjFAPhxleWx\n\t\t\tfek81mQ7CBAgaO3IoKkzGNcznhBTLivemUumt5ryai+psx7h2l4tfZNE2oiAh4rslbz+91dY74mj\n\t\t\t7yU303vjS8zbD2BlzH3/4MFxdpyr/o9bnvdx2eV29n79LI8uHcG9v5jNyCQFyeSb+3p/ec0/mnH2\n\t\t\tmNlo4K6RHc+qjLtGdmRBWhm+BjPdvt5frgCZnDetLkAGNTPJNBNMRETkdJyUZq9l/suLycWPs6Qn\n\t\t\ttz11K+MjrICf6pJ0Fr36BouLah4OeaJHct+PptM3wgp42PHx33hzV004zV8dzqT7f8LV3e2Yas+d\n\t\t\t+9J/WFlWsz/x4qtJ9ja4tN9Jyf6lvPTv1RSYADzEjfouP7k8lUhrTTrGJf2+x5SDn/BVXiLX/ep7\n\t\t\tjItp6f4SEZELRzJTvnM5PUy2sy/q8FY+nbsGX9/buHPsmc8Cah2qyFryPov3dWTK/TMv0Flb50mT\n\t\t\t7ncMg2Z9j0HNWpFySssAczt6Dk0mom5zWCfqHvn5sxfy7tydBNr1Z+yUPsSW7WHlmm189b6f8B9d\n\t\t\tSXdjFWlfv8PnmSY6dR/MqMRQDu3bQNqi93Fb7+a6QVGYvPms/PBNNlXGkNJ7ND3aV5O1fTubPp1D\n\t\t\t8JbZXJyYzJTvzGbi/i/4x1fpLX13RNoQP1V5q3j5Dy+TlnINjz54I72ynuf6d+r2GzEHHJSWu/AF\n\t\t\tzBhLV1Cc9CF/eTqT9//2d55/7GW8j/+QiYlhXKhDO6RlbTzgqP1X80XIkmNDGJXctAxwJzMqOZLk\n\t\t\t2BAyipz1dT1ad5Hm1yoDZCIiItIUm3jzyz488dfHiaOUVU//nuffHsrI7w/C6slj7vMvk3PRozxd\n\t\t\tG5na/+HP+ePbSbzy/UFYOUh2xPd5+q81o/KLl/+Dn72xirF/uJgETx5zn3mRxUN+wvPX1O5f9SK/\n\t\t\tzodRtVf25C3kH88f5JI/PF4b+Mrk/R8/xf9SnuK+oTXHZC9YQ+ifHudpBcZEROSMmbCFhhJa+1PQ\n\t\t\t78ZZ7cLjCxAEDAYT1tCjaeaCPhdVThc+X7BmvzmEiAg7gapSHEeyOFBYTUxVBaWlppr1pExOSh1e\n\t\t\tTDY7Zp8Ttx8s4TGEW45NZwdgtNgJCwvB3JSZRgEfrupqXD4/wWBNPW3hkVh9NWkja65Re6zfRUWF\n\t\t\tE3+DNJIBT3VNur3aidtGaxgRIQEcFYUcyDlCqTMMR2kppVgIjwnHAgQDHpxVzmP6xmwPJcxmxgDg\n\t\t\tddS01R6BPVBNldtPEDCHRBBuN+KtclDtqdlm+v/27js8qipx4/h3ZtL7pBAgJCQkIfQqHemioLKK\n\t\t\tDbCXVXdd3d9a1rWsuq4ru66u7mLZtTcU69oWlSZIld5JSEICIYX0PpNkZvL7YyYhgQChhInk/TxP\n\t\t\tnoe5c++559yZ4c7c955zvAMI9PPkpDtV1dupsVRjrbXhcFYCk6cfAf5eGO0WysqtODz9CAnwbiy7\n\t\t\tvraS0qo6TH7BBHkbT9yOFo7X4fnQnMeDY73eR/Uka76d6+hTZ6miusbZBoOHDwGndT2xDkcdENyL\n\t\t\tsRPH0FJUV15cRB0QN+wiRvb2wujojvXATr7NLKKoAuLtm1mbUoMpaQazLu+HNzC0fwS8+gk712yh\n\t\t\toP8EIvatZ0MhhI2ayTUTnENcDY335+1Xf2DDuhQmRPfD288PdeUXObscFXv54rl/s6vnHTzz4CQi\n\t\t\tTFB6IIPGATywsOgfj1I2tgu5q37CAqzfkwGjenH1H58m4m8P8J/n/kuXP8+hV6C6kcnJSy+ucf6j\n\t\t\tvu3GVxzc1f+MlZNeaGmsa2PdRc4CBWQiIiI/W3Fcc71riB7MjJk6kpf+vofUOwbSa8+PfFY3gUcT\n\t\t\t6ziUnw9AUL8JRP11B3tuG8hAUw+umGGhOD/fOURipx5EHSikGOi050c+yx3DY08eHtIqbMxVXLFs\n\t\t\tKwcBsLNnyTfUTbyXhLp8DuUDBNBvYmee2rqXO4c4h1jwPP9C9RoTEZEzou7QVpYv286+0mocdjt2\n\t\t\tAogdPY2LhkTja6ihKHUdS9dtJ7+8nnoMGIL6c+XNE6n+8V3+t8d5kaVs25e8t8dI6MjruS7kB/79\n\t\t\tWQrm/mOILUkms8pBjwt/xdS4cvatXsza1EOU1dpx2Ovw7DSIyReNIynM6/jBkd1KeV4a65evZndh\n\t\t\tNfUGA0aTH71n3M6g/Qt4bWVh8+HtSjfx0asrKOx1BQ9dngR11RzctoSlGzMoqwMj4BU9iWsnWPjq\n\t\t\tvdXkWQAOsOK9d1lNAhffczHxdiulB7ez6odNpJfVYKQeh8GfLgPHMWlEIhE+Jsj4nn9/lkLo8CsY\n\t\t\tU7eOFXsLqbLYCO9/GZeO8WP/j0v4KbOEaksdgb0u4qqLBhDmdZIRWW0+235YzPbMEqrt9djtDgJi\n\t\t\tx3LR1KFEWzbyyRsrKeh2Ab+dMww/A0A91h1f8O9FuXS/+C7m9DWeuB1HHi/gyPnQPI71eg8PPaLC\n\t\t\tR8+jZqvMY/eP37JiTzEOD1+8wxOYGFd3VFNbnFesQbP5xaoprwZ8LZSXlGDi6LDVHJtElH8h2clb\n\t\t\tye2WiJ81lZQ8TwK6JtE9GNhXRDEQHBp+eAht7zi6R8LO9EwOVoFXUbGzrE5hh+sREkf3wB/IzdrP\n\t\t\tQfoR21YfTBE5por1C/giuy+/fXwCEa582jvIjHMsDxfrAX5acsD1wEhYsKuvqSmC8b++jVW/fIHP\n\t\t\tNl3KIxOC3d0c+Rkqs7rmc23DHmRdgrxOv5Bm5TjrerjuIm1PAZmIiMjPVhSdjhFAFeVnQ+4W/v3c\n\t\t\t+uZDckRGU1kOdu8SCg+s482GIRLt1RQz7PC2PUYTccz9lpCfDdlb3uGvPzW/GzkyppJS179jI5SO\n\t\t\tiYjImVGVc4CK0L6MGxmBb10Be1auZteSL/Hr+msu9N/KV1+toSB8AFOmJhFEORlbSrAAXYZMZ5rP\n\t\t\tOj5dl4V/wngu7BeId1gwFDjLLUneTdxlN3JnQkNftWKysk10O28yo0M8sGStYen69fx3UQS/mz0Q\n\t\t\tn2PWsJ7a3HV89MFayvy6ED/gPHpH+1G1bxsVjhM2DwBH5hI+XbITj+5jmDS8K77VeWzLrMUWmMi4\n\t\t\t6R5s+f47dpd3YdD0kUQTRBfqqc1ZxacLNlIZHEvfMQOJ868mY9tP7Fz7OV/UXc9NU6Ib5yur2vMj\n\t\t\tO/sOZ+qEEjav3MC+bd/wRW4QHpF9mTwFUletZueu//F9dBJzBvu0rtINqnM4UBFGn/NHEeFno2D3\n\t\t\tctbsWsJX/lH8ampveoevoeBACrurz+M8fwPUW0hOOYDBpw/D+vhSm7O01e04nmO+3idSX0P6kg9Z\n\t\t\tmGLA3H0AwwbGQNY2lq/PPGrVrFUf8F36Mcoxj2T27KE4vwHVYa/3wbduF1+9vRWbzYFv1yFMnjqW\n\t\t\txAhXiBY+hCljDvDBkh/5ZP5ajPV1WOqjmXLBEMKNQGAEZtMeirL3UVARgL/RQH1dFln5ALXU1LrC\n\t\t\tM0M++RlplMdEYzLU46jaR04F4LCie/BF3CN49Gwu+/pv/LRhP/3HdyfY24hv75EM8l/D+qqjTwxG\n\t\t\t/yjGD+gKgKOmjP0bN5EddTn/N0LhmJwak8GAva0mHzsLdRc5WxSQiYiInINMHh7QZRoPPTmFLkc9\n\t\t\tayfr65f409JO3Py4a4jEwh94/P5Dh7cNDTo8V4ZrG1vjTdQmPDwgavpveXpaZAt7L3R380VE5Bxj\n\t\t\tHjyTy2qt1Nls2B3hmPvvY9fyA+TlVEGnEsoAn4hYuneJxMcnlvgkT4wAkYkklm0HwDs8hsQE10B3\n\t\t\troDM1ON8pjSGYwBxTLymK9a6Omx2B47wEfTc8Tnbcw+Sx8Dj9MSpYc/KNRTWBzPw4tlMj3PNnZbQ\n\t\t\tG4DCrBO3sbKsAocBQrolEBMRhJdPD+L7mTAawZxgJ2sZgB9RCYkkAmBl68r1FNKJ8y+fxVjXKTkx\n\t\t\tKQLDy++zcdNaUidE08dVvq3TKC6f6Bymr4chn2e+SaPY0YtbLxlNONDLK589H+8mLzcPBseeuMJN\n\t\t\tBQ/m8strXMetnohRA8nYtZwDeblUcR6Dh3Vj7f/2k7LHwtDz/KB6F7v3Gwg4bwiJHjUn1Y7j8TvW\n\t\t\t630i1h1s3FODMWIcl189lkgj0Ls33bz+w5tri5qt2n3Czdx0/jHKMXhz+N1kpseQkcRGR0DBfg7u\n\t\t\tTyf14Hr++4WRG26eRJSHM+D8esl+jN2GMmlEd3yr9/PT8k0s+noVna6fTHRkX4bGbWHl/h9Z8MkB\n\t\t\tuoZ4YCs9RJ4VwIDBAKaEIQyK3M+23V/zYWksYb4OLIW5FBgAg+Hkh8sUkTPDtxfXPnw9f/nDU7zF\n\t\t\tI1w7IorQ8HHMuuJrMr7KorzcQo2jHoPRG9+gIKIvvpcZiXZqyorJ/mk+Ty+o5Nq//pZevqdfFemY\n\t\t\twv09yCmvpa16jwHklteefiHNyqlvrLvI2aJ3m4iIyDkorFsiQblZpFfU0iWwYbiCWsorICiwirSd\n\t\t\tWQy+4feuIRDtVJdVUte4bQ/83tnMluv7McLP2UOstiKDfQdwXfQx0y0xgOwDGZTXRtI4GkJtJeUE\n\t\t\tcIZGWRAREXGqr6PqUCbbt+8gu7iIUquN2grn5O21NTUQPZgR0Rls2b+Y99/1p0vvoYwckkTX0AA8\n\t\t\tT5AOmDt1btbT2m4t5eDuTezMyKe41ILVVk2lhVb0xMnjYC4Q0JtBDeHYSQrqPZw+O0vZt2UBb+40\n\t\t\tkzjofIb0jaZzsA8tzx6VzYEsIDiRXk3vVzHGEBMFG5NLKSlr0taunWmomcnbWaJ/j/jDc2OFRGAG\n\t\t\tCmtOts9RPXXVeWRu38rOnCKKymqx1VVQCWCtoQYI7zOcxKUH2J2yC8vQ82BPCgeMQQxPigHST6od\n\t\t\tbSL7IAcAc1IvZzjmEtk1HGgekDlsNdQcc4hFI96+JtfrFU6/ia6jm5DIgFHns+vzF/gqZTu7cycR\n\t\t\tFV1Hypr1FNKNCy+bwgB/gESi7DnM+249q1PGMWugmaEzroalS9h8sITCQg/MPScx0v+//JDph78P\n\t\t\t4BHD5CunY1q8ktT8Qgqr/YgZMoGIDQvZYgvgzMwOIyKnpNMk7n2ogL8/8yR/S57DDVcMoOv0R3k4\n\t\t\t8gu+/HI9yeV1eAb1ZtgvfsFlg8Ioy97Fjs/e4YMdQUx76PdM7OTuBsjPWa8IH2dAZjC02Txk23Or\n\t\t\tqLXX42U69dsxau31bM+tcj5w1bVXxEn2ZBc5DQrIREREzkWJ53P9oL/y1gebSby8YS6xLBb9aOb6\n\t\t\tK3vQrVcI8zds5lC3HkAl279aTrZriEUSBzIt8j8s/i6N2LHOQYIO/vAVOzxhREPxk69iyJ8W8N6G\n\t\t\tHlyZ6FqYsYIVoVdxdeJJ1FNERORELKl8+/EX7PPpwejRExgYaqZz/mJe/D7D+byhE6Nm3U7v/VvZ\n\t\t\tsH4zabuW8MGuVKbfcjUDg4wnsSM7+es+4YO1ZXQZMomRAyMwRzjYPv8DNp4woLFjtwMGO/U2jvql\n\t\t\tbTI5IxOb7fCT9XY7zQbZ8ktg+vVRHNq7iTUb95C59lN27hrO9TdOpluLN584e3TjqKPWDodTNBs2\n\t\t\tG2DwwHSC5nt7n4m7WqykLvqQL9N86TFqDOMHhWOOPMSSF78jo2EVj0QG9wtkz8YUdlf1xpFyAFP4\n\t\t\teAbGnEw7jM6nbDYaj2K9HXsrh7A8LoNrt7Y6HDjnfwOoq7MdtWrrh1g8kgfmkCCgnOpagArKywH/\n\t\t\trkQ26SHi06krARykoqICCAPvSIZOv5ahipHWpwAAYBBJREFUrufra9P57t9gCutOVEN3tcBEJsxM\n\t\t\tZILrob1iHQsWG/DsG0vnM3B4ROTU+SZew2PP9ObjF1/mn49/SpeBUxk5dDBX3DWxcZ3Swj0sn/8u\n\t\t\ti7bmYIq9iHufuYb+Gq1eTtOo2ECWpZfTlj3I9hZY2HywkpHdA0+5jM0HK9lbYHE9qm+su8jZooBM\n\t\t\tRETk58grgMhI8DrmMjNj7rqDvAff4q/PNawQzZV/uB2AxMvvYFrjc9FcedtVDMkrdG3bgyv+dgef\n\t\t\tPfgWf/3JueXY2x7g+sJ/kNewQ/NIfntXIb97fR5/bSg+5mIevQvAhF9oJ0L9Wr7fXURE5KRkJ5Nm\n\t\t\tgZD+YzivVyQGew15KU0SK2s5xTZP/KP6M+HyvvRf8y5vr81gZ7qVgYP9wGjECNhrqrHUWAFPWh6x\n\t\t\tqpSM1EKgB4PP70cPj3ps1XsoqWxNJbvQI9ab3WkpbE0bTlCMN94eYK+tpd47CHNYOCYOkZuxj8oe\n\t\t\t3fGkjqrsHKqalGCvKqXK4EtI/Agu7jGI1IWv8lXyTnblTaZbjBGjEaAOS5WVGgMY/ToRE+PNjrRU\n\t\t\tdu4fTlBXb7wM9dRaMtmXa8AjJI6uwTQOJ9l2skjZWwMhgxk9rDeRBjs1eSkcmSnG9O5N4OafSPlp\n\t\t\tHTUHTHSdPtjVe62V7SCUcA84lJvJvsp4untCXWU2udVH7Kil19v7BN9JwrsR5bGbA+kp5J0XTKi3\n\t\t\tCWqtpKblHLVqq4dYrKmitKYeLy9PTNiotRxiZ0oJBq9oosIAPPH298RQuI+0vApCw7wxOmooSt9H\n\t\t\tucGT7r7OWdfqqsupqffEw8OAo66Wij0b2GP1pdvovq7j56Cmsoo6oyeepnrqamvJX7eFLK9QBvWP\n\t\t\tR9/GRNoB8wCu/uO/uTw/mVXLvmPlJ0v4orxx/Ho8g2JIGjGZu58cRf8ojakoZ8bkhCBeWJlLVe2Z\n\t\t\tuJPk2N5an8eALn74eZ38Gae61s5b6/MOL6gHfy8jkxOCzvbhkg5MAZmIiMjPUeIlPP+3Ey3rwRV/\n\t\t\t+zNXtFjA0c+NOdG2iX9uYX+XtFC2mTF3/Zkx7j5GIiJybvA1E+bjQdGu1awK6kFA6X727W8yxl32\n\t\t\tShasctCvb2d8qSYruRRv/wi6d3FFFYGdCPfeS8GOH1jm2w1Pn0FMDWhxRwSF+eFZfID1yzZR09lG\n\t\t\tUXIaRd5A9Ykq6Ue/UUNZf2gLe755m/yeA+nbBYrS0zAOv40Lo2KJ9U8jc+ci/uc1hBhTHinJOTTt\n\t\t\tn1S64ys+P9iNfrGBmOoKSTnowDc4lqhwgGDMkX54FmWw+vt1WLw8iLxkLP1GDWdTwUa2f/EBJf0H\n\t\t\tEOdfTcaObWRjptf5I4g5mQ50p8yfkDAfPEp2sGZlAD0CS8nct5+jRiHsNpBB4Rv5ceN68OzO9Ma5\n\t\t\t3/xa2Y5oYmP9ScvYzuJvvBkSYyIvdQ859iP209LrPSTs+E0I7sPAhLUUpK9jwUflDB0YjiMrhewy\n\t\t\tP8DSbFWTtx9+tELWMt5cVk5iXBzhZJOccoAieyAR/cfQPwQgiP6jBrCteDcbPvucyqG9CS3bw6bd\n\t\t\tlQREDmBkP+fFwaxVn/BTZWe6dvamPDOd1DwrPnHjmDakoXtJBbu+/Zw0n2iig2o4kJFBVlk9Ef0v\n\t\t\tZmKc4jGR9sSzUy8mzurFxFnurol0BN2Cvbi8r5n3txSBgTbrSLZwTzGj44K4ZlAEPh6t/+JhtTn4\n\t\t\tZHshC/cUOxe46nh5XzPdgjVvg5w9Z+XrsoiIiIiIiMgp6TaaGSMTiPQtIW3TNvbW9WbahCTMZjNB\n\t\t\tPiYIjqar5yH2bNrE5k17KA5MYPj0qxnbMLZc5HlcMKw7YX7VZO3ch83XFzwDDm/fyI9+F1zIgG5m\n\t\t\t7Ae3sXlrDoHjLmZ4pBmzOQDPE9ZzAtdeOYkBPQKx5exh86ZU8uhCVCjgP5CLpg+le5iJkvRt7CwI\n\t\t\tZczFY+luNmP2d5bs27U75up9bNu0ic3bs7FFDWDSzIvo5wdgotfYKfTpGo4pfw87S4zOuaW6nc+s\n\t\t\tmZMYEOtFefo2Nm9PpTwgjuHT53BpX1eM01JbW1pm8iGoSX2OzYRPUNNjEsXoS0eSEOlHSfomtqbW\n\t\t\t0XvaBJLMZsxBTedPC2fggHBwGPDuOZx+TSfHak078GPARdMZ0j0cU2kq23YfwjzmEsZGH/H6tPR6\n\t\t\tn7ANfvSbfjXn9+lCoC2bPVt2kR86lhnnx7bwPmml4EhifKrJTt/GtvRCbIExDJg4k9lTejTOBecd\n\t\t\tdyGzLx9Hn9BasrZvYltWLaHxI/nFNRfSw7WSf6A/dcUH2LM9lezqAOKGTee6mUMxN17N8cQvwEhV\n\t\t\tXirb9hyg3BB51H5ERKRjumV4JyICPNtylEUAnvz+AAv3FFNRY2/V+hU1dhbuKebJ7w8cXlgPEQGe\n\t\t\t3DJck+/J2WUoLS074x8Rh8PBrt3JDB06yN3tExERERERkbPg5X+/wW03X3/a5RSuepXXVoZy+YMz\n\t\t\t6WkwYDSc+sTvZ5TdSnm5hZYu/Zh8g04tRGmn7NZyyi0tthTfoCBOral2ila9waurahk25zdMiXF3\n\t\t\tKzuKeuod9dSnfs7fPt9L0hUPM7Onu+vU3Otvvcev77zV3dUQETknLUwu5YnF2ZRabKdf2AncN6Eb\n\t\t\t1wyKIMDbhK+nEQ/j4e9wNkc9ljoHlTV2PtpawHPLDzbbNsTXgycuiGJ6rxB3HzJph3x9fFi1eh19\n\t\t\t+/TCaDyzfb40xKKIiIiIiIi0M1ZKcnPJ9Q0lKrSdzMdSsYtvP1pPSQtPmc+bxTXnmU+6yPaqfOdC\n\t\t\tPtrYYksZNmsWQ0NOpjQbNRYbdlsuW3YU4Rk2kt7d3N3CjsRKSW4xliKruysiIiJuML1XCKVWO/NW\n\t\t\t5VFUbWvT4RafW36Q75KLubh3KCO7BxEZ5IXRAI56OFRey7r95fxvTzG78lxjV7vqEubnwd1jOysc\n\t\t\tE7dQQCYiIiIiIiLthsknCLO5hG1ff8W2Hhdy59Qe7q6SU8hQrrlzqLtrcVaYz5vFneedqdJy2fpD\n\t\t\tCvmHdpNSG86AC0YTpckezqJcNn79PfsAs9lMwAnHChURkXPNnEFhhPiYeO7HXIqrbVTVOpzhFAao\n\t\t\tr+dMpma78qobA7AgHxN+Xiaqa+2UWx3OfRgMjbvz9zQS6ufBfeO6KBwTt1FAJiIiIiIiIu3GmQ1n\n\t\t\txP1slB1II9sjhD6TL2VqgmbGOrt6MPXOX7m7EiIi4mbTe4UwoIsf720qYNHecqrqHFjrHNQ5wO5o\n\t\t\tmy5l5VY75dbDQzabjAY8jQZ8PE34exqZ2jOI64dG0C3Yy92HRzowBWQiIiIiIiIi0kbimHrnne6u\n\t\t\thIiISIfXLdiLhyZFcf3QCH7MqGBbThWZxbWU1dhxtFFI1sBoNBDsbSI21IuBXf0ZFxeoYEzaBQVk\n\t\t\tIiIiIiIiIiIiIiIdQLdgL+YMCmPOoDB3V0XE7TTyt4iIiIiIiIiIiIiIiHQoCshERERERERERERE\n\t\t\tRESkQ1FAJiIiIiIiIqfNaNTPSxE5OQ6HQ/93iIiIiNvoW4iIiIiIiIictpDgYKw1Ne6uhoj8jBQW\n\t\t\tFhESHOzuaoiIiEgHpYBMRERERERETluvpEQyMjOpq6tzd1VEpJ1zOBxYrFaSU9PolZTo7uqIiIhI\n\t\t\tB+Xh7gqIiIiIiIjIz9+gQf1ZsmQ5JpOJyIhOGAwGd1dJRNqpyspKMg5kgaOeQYP6u7s6IiIi0kEp\n\t\t\tIBMREREREZEzYsqUCWzduoPVa9dTVV3l7uqISDvl7+dPbPdohWMiIiLiVgrIRERERERE5IwZNKi/\n\t\t\tLnqLiIiIiEi7pznIREREREREREREREREpENRQCYiIiIiIiIiIiIiIiIdigIyERERERERERERERER\n\t\t\t6VAUkImIiIiIiIiIiIiIiEiHooBMREREREREREREREREOhQFZCIiIiIiIiIiIiIiItKhKCATERER\n\t\t\tERERERERERGRDkUBmYiIiIiIiIiIiIiIiHQoCshERERERERERERERESkQ1FAJiIiIiIiIiIiIiIi\n\t\t\tIh2KAjIRERERERERERERERHpUBSQiYiIiIiIiIiIiIiISIfi0ZaFGwwGd7dPRERERERERERERERE\n\t\t\tpJk2Dch8vL3d3T4RERERERERERERERGRZjTEooiIiIiIiIiIiIiIiHQoCshERERERERERERERESk\n\t\t\tQ1FAJiIiIiIiIiIiIiIiIh2KAjIRERERERERERERERHpUBSQiYiIiIiIiIiIiIiISIeigExERERE\n\t\t\tREREREREREQ6FAVkIiIiIiIiIiIiIiIi0qEoIBMREREREREREREREZEORQGZiIiIiIiIiIiIiIiI\n\t\t\tdCgKyERERERERERERERERKRD8XB3BVpisViora3D7nC0an2T0YiXlye+vr7urrqIiIiIiIiIiIiI\n\t\t\tiIi0c+0uIKuoqGTzlm1kZ+dSZanGcIL16wF/Xz+iorowZPBAAgMD3N0EERERERERERERERERacfa\n\t\t\tVUBmsVj4btFSIsLDOH/sSPz8fDEYjh+R1dfXU11tIX1fJt8tWsol06eqJ5mIiIiIiIibWCwWamrr\n\t\t\tcLRyRBAR6XiMRiPeGglIRERE3KxdBWRr1q4nPCyUwYP64+HhgcFgaFVA5uPjQ1BQIJu3bGfN2vVM\n\t\t\tnjT+zFasppr0shZ+3Jk8iA3zweTuAyciIiIiItIOlFdUsGPHLg5k5VBdXe3u6ohIO+Xj40O3qC4M\n\t\t\tHjyAoMBAd1dHREREOqh2FZClpWdw6cUX4u3tjclkanVAVl9fj8lkIqlnAl//7/szH5Dt3cTUt0rw\n\t\t\t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\n\t\t\tZ9/F5Bh3t/IcV1+Po76ANa+/zkrG88vbxxDu7jodw+tvvcd9/3eXu6shInJOumXBXpamltDGIy0C\n\t\t\t8H/jorh6UARBPib8vUx4GA9/h7M56qmqtVNutfPx1gJe+DG72bZGA0xONPPmrJ4nu1vpIFatXkff\n\t\t\tPr0wGs9s6KshFkVERERERKSdsVB08CAH/cKJCW8n87FUpLD0vxsoaeEp89CruHLIuTPkXXnyEv67\n\t\t\tqcWWct5VVzE45GRKs2GtqsVuy2XLzmK8wkbTu5u7W3jus1fkk116iNI6wNPdtREREXd5aEoMGcVW\n\t\t\t9hVZ2jwke+HHbBallDCtdyjDYwKJDPTCaABHPRyqqGX9gQq+3VPM7kPNx642GqBHmC8PTdHdM3L2\n\t\t\tKSATERERERGRdsPkZyY8vITd33/H7rgL+OWUOHdXySlkMFf+crC7a3FWmIdcxS+HnKnSctm6PJn8\n\t\t\tQ3tIrevEgKkj6arJHtpcedqPfL+pBLzCCQ/x49zp3ygiIicjMdyHZ2fE8ftvMjlQbMVqc5x+ocex\n\t\t\t+1B1YwAW6GPCz9NEdZ2dCqu9xfV9PIzEhPrwzCWxJIb7uPtwSQekgExERERERETajTMbzoj72ajI\n\t\t\tyeCQKZS+ky/mgnjv0y9STkifIxERaTC0WyD/vjKR55cfZO3+ckosNuyu7mQGg4F6Rz20wYjWFdYm\n\t\t\twVg9GIwG6uud+zUZDZh9PRjVPYjfTeimcEzcRgGZiIiIiIiIiLSROC745e3uroSIiEiHlhjuw8tX\n\t\t\tJvDhlnw+2VpAVmkt1XV2rHUObNDmwy8ajeBhBB9PZ6+y6BAvrhoUwezBndx9aKSDU0AmIiIiIiIi\n\t\t\tIiIiInKOmz24E7MHd2JZainrD1SQUmAhv7IOS5399As/Dl9PE50CPEmK8GV4TCCTEkPcfShEAAVk\n\t\t\tIiIiIiIiIiIiIiIdxqTEEIVUIoCmxhUREREREREREREREZEORQGZiIiIiIiInDajUT8vReTk2O0O\n\t\t\t/d8hIiIibqNvISIiIiIiInLaQs1mrFaru6shIj8jhYWFhJrN7q6GiIiIdFAKyEREREREROS09evb\n\t\t\ti32ZmdTW1rq7KiLSztntDqotFvampdOvby93V0dEREQ6KA93V0BERERERER+/oYOGcTC7xaTeSCL\n\t\t\tiPAwDBjcXSURaacqq6rIOpiN0Whk6JBB7q6OiIiIdFAKyEREREREROSMmH7RBWzavI0NG7dSVV3l\n\t\t\t7uqISDvl7+dPj7juDB0y0N1VERERkQ5MAZmIiIiIiIicMUOHDNRFbxERERERafc0B5mIiIiIiIiI\n\t\t\tiIiIiIh0KArIREREREREREREREREpENRQCYiIiIiIiIiIiIiIiIdigIyERERERERERERERER6VAU\n\t\t\tkImIiIiIiIiIiIiIiEiHooBMREREREREREREREREOhQFZCIiIiIiIiIiIiIiItKhKCATERERERER\n\t\t\tERERERGRDkUBmYiIiIiIiIiIiIiIiHQoCshERERERERERERERESkQ1FAJiIiIiIiIiIiIiIiIh2K\n\t\t\tAjIRERERERERERERERHpUDzasvDq6mp3t09ERERERERERERERER+hvz8/Nqs7DYNyJJT0tqyeBER\n\t\t\tERERERERERERETlHDRk8oM3KbtOArC0rLiIiIiIiIiIiIiIiInIqNAeZiIiIiIiIiIiIiIiIdCgK\n\t\t\tyERERERERERERERERKRDUUAmIiIiIiIiIiIiIiIiHYoCMhEREREREREREREREelQFJCJiIiIiIiI\n\t\t\tiIiIiIhIh6KATERERERERERERERERDoUBWQiIiIiIiIiIiIiIiLSoSggExERERERERERERERkQ5F\n\t\t\tAZmIiIiIiIiIiIiIiIh0KB7urkBLqqqqqamtwWF3tGp9o8mIt5c3/v5+7q66iIiIiIiIiIiIiIiI\n\t\t\ttHPtLiArKytn67Yd5OTmYbFYWrWNr68vXbt0ZtDA/gQHB7m7CSIiIiIiIiIiIiIiItKOtauArKqq\n\t\t\tmsVLfyAiIpzzx4zAz88Pg8Fw3G3q6+uprq4mPWM/i5f+wLQLL1BPMhERERERERERERERETmmdjUH\n\t\t\t2dp16wkPC2PQgH6YzWZ8fHxa9Wc2mxk0oB/hYWGsXbf+7FXYWkVKbiVlthOtU0Xr+sKJiIi0A9Yi\n\t\t\tUtNyKbedflEiIiLNWItITSvC6u56nJGmpJNadC60RERETpa1KJ3UnHJa85Oprc4XJ1MHkTbTmu92\n\t\t\ttnJyzvo1BjvlOWfos9du2yhnQrsKyNL3ZdIzMR5vb+/GPy8vr+P+NV23Z2I86fsyz0hdLCXlpOQe\n\t\t\t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\n\t\t\tT6Dn2vlNvrc5t33+w/eOCJFNBHdNcIVg4BO+l7ea1G/IHa/wyATnHs56G6VdMZSWltWf6UIdDge7\n\t\t\tdiczdszIk9pu85Zt5B3KZ/So4fj7+ePp2br8rq7ORlV1FWvWrqdzZCeGDB54do6eiIiIiIiIiIiI\n\t\t\t/GylfHA9D3/t/PeQO+Y1XjQXkbPPuvcN7rjLyMOLb9aQn9LMqtXr6NunF8YzPIJgu+pBNmTwQL5f\n\t\t\ttIyNG7cQF9udwMCAVm1XUVFJRuZ+TEaTwjERERERERERERFplaQ57/HZHHfXQkQA9m9cTuXNjysc\n\t\t\tk7OmXQVkABdOncTmLdvYun0nVVVVrdrG39+fuNgYhWMiIiIiIiIiIiIiIj9DSXPe4zN3V0I6lHYX\n\t\t\tkIGzJ5nCLhEREREREREREREREWkLZ3bARhEREREREREREREREZF2TgGZiIiIiIiIiIiIiIiIdCgK\n\t\t\tyERERERERERERERERKRDUUAmIiIiIiIiIiIiIiIiHYoCMhEREREREREREREREelQFJCJiIiIiIiI\n\t\t\tiIiIiIhIh6KATERERERERERERERERDoUBWQiIiIiIiIiIiIiIiLSoSggExERERERERERERERkQ7F\n\t\t\toy0Lr6qqdnf7RERERERERERERERERJpps4DM29uL3XuS3d0+ERERERERERERERER+Zny9vZqk3IN\n\t\t\tpaVl9We6UIfDgc1mo77e0eYHRkRERERERERERERERM5NBoMRDw8PjMYzO2tYm/QgMxqdlRURERER\n\t\t\tERERERERERE5HWc6HIM2HGKxLSorIiIiIiIiIiIiIiIicrqUYomIiIiIiIiIiIiIiEiHooBMRERE\n\t\t\tREREREREREREOhQFZCIiIiIiIiIiIiIiItKhKCATERERERERERERERGRDkUBmYiIiIiIiIiIiIiI\n\t\t\tiHQoCshERERERERERERERESkQ1FAJiIiIiIiIiIiIiIiIh2KAjIRERERERERERERERHpUBSQiYiI\n\t\t\tiIiIiIiIiIiISIfi0dY7sFqtWK012B0Od7dV2gmT0YiPjzc+Pj4nXLekuo6Sqjrq7Of2+8fTZMTs\n\t\t\t74nZz9PdVREREREREREREREROee1aUBmtVrZvWcvBYWF1NTUuLut0k54e3sTER5On949jxuSlVTX\n\t\t\t8dH6g2w9UE651ebuarepIB8PBsUEcc3wbgrJRERERERERERERETamKG0tKy+rQrfuGkr1ZZqxowe\n\t\t\tSag5xN1tlXaiuKSU1WvW4efrx3lDBx1zvZeW7SOrtIZ7LkggNtzf3dVuU5mFVfxrcRrRId7cNamH\n\t\t\tu6sjIiIiIiIiIiIiInJOa9M5yFLT9ykck6OEmkMYM3okqen7jrve11sPdYhwDCA23J97Lkjg662H\n\t\t\t3F0VEREREREREREREZFzXpsGZFVVVQrHpEWh5hCqqqqOu05+RU2HCMcaxIb7k1+hoUhFRERERERE\n\t\t\tRERERNpamwZkIiIiIiIiIiIiIiIiIu2NAjIRERERERERERERERHpUBSQiYiIiIiIiIiIiIiISIei\n\t\t\tgExEREREREREREREREQ6FAVkIiIiIiIiIiIiIiIi0qF4uLsCIiIiIiIiIiIiIiIichZYitiXV9H4\n\t\t\t0C+sG52DWo6K7OW57C+CiOguBJ6DadI51yRLwV72E0OvCB/ARunBfVQE9iA62E1NtZWRlX4I75ie\n\t\t\tdPJ199HpWCwlFWRajMR29efMH/oa8nNqITSQTj7ubqmIiIiIiIiIiIiIyIlYKfrpW577Zhcm1+PO\n\t\t\tA2/gjisHE9bCRfSq7V/wwhcw++FfMSoUZ7hW4kX3roGu7X/e2s0Qi7aybJJT9jb/K7CedDl7P7yR\n\t\t\tqz5Mcz0qY9kzNzJ3RZn7Glb8I3OvvZF3U9xXhY6phk3/XcfN/97GppN/G7VCNu++uJZ397m7nSIi\n\t\t\tIiIiIiIiIiIirZHNyh3xzH12Lv96di7/evY3JK38J29vafkietDYX/GvZ13hGMDer7hn3lrK3d2M\n\t\t\tM6Td9CArXfEPrnouncRuwY3JZX7ijbz/u6nu6/110qzkpxyApr3FPIKJTvr59x6z2WxUV1cTFBR0\n\t\t\t3PXKy8vx8/PDw8PNr5l1PwsP+jO9axULd9Uwdqi3e+sjIiIiIiIiIiIiIuJW8Vx2d3yzx5Mui+H6\n\t\t\tnencN7rv0atbitiXB13jwqAwk5y8CqgpYn9GJiWBnekR7hxezVqYSU7jqI2BdI0Lw/UMRRl50Lkz\n\t\t\t5OVR1uR5z/Jc9hfVuDY5XFbDNo3dnpo9d2a1r+Rp4K28+q9LCQcgjTcvuZNHFg/h3Ss7u7tmrZTG\n\t\t\tu9f+El5fy/2DXItCx/HQ/HHurthpcTgc7Ny5k507d3LRRRcRHh7e4nqFhYV8++239O/fnwEDBmA0\n\t\t\tuq+DomVXIav6d+erzhlctC2D0oG9CGl8tzcMj+iHV3k1uTbn0oBAP6IDnfGsraKSVIuJxCAHqcUO\n\t\t\t13bHGK7RZiEr305gp4Am+3AO8VjocbhMEREREREREREREZH2w0Z1ZQ1+nseIivZ+xT1Pwt8/uxmf\n\t\t\tH//DC0uLoMSL117ajmn0bfxrZjzWwkxWff5PvtrrDLHs5bFc/sQcJnYNxEQ6X9z/FKW330vU4s9Z\n\t\t\tg42KnGiu/csMwrf/lzdX5oOtgrxul/PKXZMJ87VRkbOaT+Z+x+4gD8BGRd+beOvmvq1v0kloXwFZ\n\t\t\tMwlMuymB53MKgc40zCdWG9a8N5atLJu0igASugW3qjGWgr3sL4bQY84J5uwFVtz42Ez3pIjmoYil\n\t\t\tgOQDJYcf+0eSEFZL2gHXdgf2kuzr2odnGVnplQTGRzUJT47chz+dmz5va9gmjNr0w+v5d24+l1pD\n\t\t\tWxqEttE8ZzU1NXz00UdkZGSQk5PDLbfcclRIVlhYyBtvvMGWLVvYvXs3SUlJ+Pq6qduczcKabRau\n\t\t\tnRBFiLmCcd/m8kVOIjfFNARV2bz7YhrF0/syNP0ACyoAaomKjue+SV2IDjRRumEjV20K4rVJ9fxj\n\t\t\tba2z2Aq46cYBTD0yJKvYz7x/59LntnFN9uEc4vGr3sN5ZlSwe46DiIiIiIiIiIiIiMgxWAt3sHxL\n\t\t\tFRMu7nTCdeNmzuVf8W9xyYIonpo7FTOArYItbz/NJz0e5D+3O3umla96nl8/u4Tez1xOlCvO2PJV\n\t\t\tLjNfmsssSlj7zIP85f6dRF37IP95Nh6K1/LP+/7FJ7vGc+d5Jayd9zrFV73Mvy4wAyWsXVV8wrqd\n\t\t\tqvYbkFkK2LDzAN2TGrrOOecT23dLk95ZuIZmXDKBHxp7nh2brSybxS/9H6+mRnD1Y+9wQ1JL62zl\n\t\t\to8de4UePhmrEc/ubv2W6K4CzlWWTtmIB98zfjjOrslHWdRYf3FbFH5/8L/kAb/+FVF+49LF3uMH8\n\t\t\tI3OvXc6Uhc8xsxOu8Gs17943n60NYZelKxMeuJmrBrkCruIfmXvt/+g77yY8XnyFJa7j4XvRs/zr\n\t\t\tlj6EeLja8vbveXura0hKSwEjHlvY7NicKb6+vtx9993MmzePzZs3AzQLyZqGY3Fxcdx9993uC8cA\n\t\t\tW04ybx8M4Y89ALowuWsW7+8o5LqYyGZv+GUrDzL5zlF8YgbI5s25u3nYw5O3Lo50rlBSwl/ye/HN\n\t\t\tb6IAKN2whhkvbiPssdGMbdqj09zCPqz7WZjpy+TLFY6JiIiIiIiIiIiISHtioyLnID99/gZrul7L\n\t\t\t3LHmUyvm0I98sbYfV11hYl9GpnNZ1AAG71/ElkOXE+W8tM7E22cQB4CZUReOgq2ePDDTNdRj6Cim\n\t\t\tjvoXH+eXAB74BXjj7ShjX44H3buaGXWqdWuF9hWQVR0iNWUvhQApC5i7cQ7vPJFwRoq2lWWz4aN/\n\t\t\t8OKeG3jxo1n0PMZ6lVsz6fvKO9ztmnRu75vTueLxvgx74wq6YGXfR3/mju968vjr7zApFKCMZR9u\n\t\t\twyPpUj6Z349nz/slPPbO4aAqv3n5lvRPeOTuxfR+5FU+Ge8KT1IWcMndN5L92A883Zi8bOPjv2fy\n\t\t\t2ufvcAdAyvtMvf1ffHnBi9wY50HB4j/zSP6vWDn/QkJcZbzbhi9N165dWwzJgKPCsa5du7ZhTU7E\n\t\t\tzsEdpezv39P1GgczYqAvj6/K4eCFkcQ2ecePHNuLyY2frShmjk3nHxvzKW0IyDyCeGZaVOP6IcOi\n\t\t\tuPLrFNbtg7F9mu7zyH3YKd1ayKrunfl92312RUREREREREREREROkpWijD38+MEH/BB0LXPvHkXQ\n\t\t\tqRZVmM8udlL6Ui7eTZfHGYmvOs523TsR1uITZgaMH8HHX/yHv60ZwK9uGkXnsG50DmqbKKt9BWRp\n\t\t\t3/D3J1fSMEjdBTdNw3GwDFsrh088popDbPjoDR5fGsUfXjl2OAYQMn4W48qySU5xvXrhI2FbDvlA\n\t\t\tF9tuPnn1AHPm/9sVjgEEM2l2a+cYs7HjqzfYP+s93h3fpGdR0iz+Metdrli7myfHDnG11Z8r/9yk\n\t\t\trknTuHPgSyzZUcaNcWFUWPII8LeTl5IN8VGEJM3ihjZ+eVoKyerr69tROAbYClm+u46xo4LY0zAr\n\t\t\tYJAfiSWlLM+xNxkCEbqFNe/dFRLm3bwssw/NO5YGEmWGjBZ2G9KrMxcszmJtAcRGFPLFSgvXXpHg\n\t\t\tDC9FRERERERERERERNzOOcfXF88uwTb7Yf51ur2zPD3xYyi//usdDDxDaVPQ2F/xr7GQ8flDPP/P\n\t\t\t1YQN/T8evD4Bn9Mv+ijtKyAbeCuvNhkqce97l3Hj49fw4X9mN+v5c7Iqf3qDe9dUcc+X9zYJtlri\n\t\t\tnBssfeN8/r4ws3HoQpjmfLo4m2ymcUnSCXd5DGUczIJLLzi6V1zPIdPgzWxKGeJq/0CiIo5dUs+L\n\t\t\t72XG3W/wx4dWMuGBm5kcesQ8Zm2kpZCs3YRjgC0nh6UWb6xbd/LY1iZPhDpYuiWfa2K6cKzBH211\n\t\t\tDvAwOofSbHENO7U2A14tHWNzAtf338/bOTVcVZfDUkvDEI8iIiIiIiIiIiIiIu2AJZOv5v2XkN++\n\t\t\tyBU9T7GMmjrqGv7dOZ4xQV+wM7mCfv0CXZ2fbFQUWvALD8R00oVbKSqEsHAf55xnI/7Hg/esJOP6\n\t\t\tBHq3weFoXwHZEXpeeCuD/7mczcWziXV15amptTWrdl1t1QnLSQ2MZEbMcnZs2svkUNc8Xy2xbOWF\n\t\t\ta59k+9V/4P3545y9f7bOo/9tDUfLC29KqLAApzTFlgfe3lBcaYUj8k5LZQl492z9CxI6jofmj4OU\n\t\t\tBVz15J/48mAg177tHH6xrTUNyYB2E45BDfu2OIdX/PHyqOZP7dvEuNcz2HRhl8b5w4qLq7Dg73wp\n\t\t\tbRb2ZNbQJTaEEHAO82mrI7fCTnig82NsKSlkh8WfyccILnsODGHV8gz2RDYd4lFERERERERERERE\n\t\t\tpB3Yu5IPa8bwlGcm+5oNleZNRHQXAk8UL/gGE5GXzvaMTHoEdqZH+ChmXPo5T87/hr63NwzVWMLu\n\t\t\tNVbGXXsqQzfuZ+GCg4y52DU/2d58SuPC2qT3GLTzgMxSkkelfyABHs6qBgT6k7IlA8vwRGeoYSlg\n\t\t\t/c5twMXHLWfwiFt56IYYrn7odzzPP/i/C5KIbCng2reNH5jMP+91hWNYOHSgGHB1OwtNYECXv/O/\n\t\t\txQfpN72bq7eWjdKCKgIigvHAE29/KD8ixDssmMQBnXlqyTKy+k8lOti1jqWARUt+pMuAa1s9JJ+l\n\t\t\toAAiIvBNmsUn8y/g83suaRx+8WxoCMka/t0uWPfz1k8Orr0t6ujnenTmWt9d/G9XDWOHOhetXpfM\n\t\t\tph6JzrFOS9J4IzWQP9zaZNuKMj7ekIdHr0AA9i7JI3l4T54+Vq/THp25dv5enimDm38RhYiIiIiI\n\t\t\tiIiIiIhIu+EbRrxpHW+9vOOIJ6KZ/dCvGBnawvo9mnT36TmRO0b9nQ9ffhVG3co/Z8YTN/Nh7sj+\n\t\t\te7MyJ/7yaVc45kNYj7jmHY58w4jvGtSsd5lPeBxdgjyATiTWv8M/X17qemYkf3h2BnFtdDjaV0BW\n\t\t\tlUdqcgoFrod7Fy3BesldDA8FCGb41At59rEPWDTeNTdX4Vre2eRPq45O0iw+ngsz77+LF3iJG0bF\n\t\t\t0DviiJSsS2+md/mSDetTCAwFKObHt9cDF7lWiOfy+y/mlmefZ3747a7hGstYv7ySX9w5iRA603dS\n\t\t\tKG9v2cyeoGBCuycReUQ1el78O2b8+nnmLgjn7oZ5yPYu4vW0i/nDPfGtPlR7P3yZzKkNc5SVUREY\n\t\t\tfzhwO0vaTTDWIKeWtK6R3Nzi0IZRTByWxSMFhY1LLp3emYzPd/NP1+MZM0cyuWn4ZQ5ndmAej32e\n\t\t\t5XoczZsXNQRf3kR2DTqiI2AUI+N38VZ5DPM0vKKIiIiIiIiIiIiItCc9Z/DPv884yfWbLjAz8u6n\n\t\t\tGcmJljWI57K/P310mUcMvxY382lud/372GWdee0mIPMI7kbvmtU8/9TqwwsvfpqPZx8OjULG384f\n\t\t\tLvkt/35qruv5P/Lm/SXcvj64sSG+EUn0bowjPQiJTjocHCXN4s37c7n9tbk8XvXHZmUDEDqOu+/f\n\t\t\txO0vz2UFABfx1NzrWfrnwwFnyPjf8SbPN1kHBv/yn66eX8FMmnU9//7zyzy+Ei7949tcHxFMdK9u\n\t\t\th+cGCx3HQy/D3Huc6+Daz3Pvzzo8JJ/HEdu00BbfiAzmNxwHYPAvX+KhhsCto+rRj09+c+yne140\n\t\t\tkk8A2OdaEsX1v4ni+uMU2WnYUD4Z1tIzzm2bsVaRaTEwbmDXVvcEFBERERERERERERGRs89QWlpW\n\t\t\t31aFv/7We9z3f3e5u43STj33wkvcdvOx46khf1rOzqentsGe9/Hsw2lw3VTu79PyGoXLljNhWxjL\n\t\t\tf9ef8BMVZ7OQlV9H5b5d3LPRiz/cOLR5T7ST0O/hRWx+fEIbtFlERERERERERERERBq0mx5kImdP\n\t\t\tS8MjNucRGEjvTr6t+4BUZPPe54Vs4fTCMREREREREREREREROTsUkEkH1MLwiEcIOebQii0wJ/Dw\n\t\t\tbxLc3SgREREREREREREREWklo7srICIiIiIiIiIiIiIiInI2KSATERERERERERERERGRDkUBmYiI\n\t\t\tiIiIiIiIiIiIiHQobRqQmUwmbDabu9so7ZDNZsNkMh13HU+TEWud3d1VPWusdXY8TcqsRURERERE\n\t\t\tRERERETaWptejQ8LDWX/gYMKyaQZm83G/gMHCQsNPe56SZ39WZde3CFCMmudnXXpxSR19nd3VURE\n\t\t\tREREREREREREznkebVl4395JbNm6HYfDQXBQoLvbKu1EWXkF27bvpG/vpOOuN3tENxasO4DN7iDK\n\t\t\t7Ovuarep7BILn244yOwR3dxdFRERERERERERERGRc56htLSsvi13kJ6ewb6M/VRVV7m7rdJO+Pv5\n\t\t\t0yOuO/HxcSdc99sdh/h+Zz75FbXurnab6hToxYX9OjGtf6S7qyIiIiIiIiIiIiIics5r84BMRERE\n\t\t\tREREREREREREpD1p0znIRERERERERERERERERNobBWQiIiIiIiIiIiIiIiLSoSggExERERERERER\n\t\t\tERERkQ5FAZmIiIiIiIiIiIiIiIh0KArIREREREREREREREREpENRQCYiIiIiIiIiIiIiIiIdyv8D\n\t\t\tw4q4ff0hPhQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMTAtMDNUMDk6NDA6MTMrMDA6MDCkbUOv\n\t\t\tAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTEwLTAzVDA5OjQwOjEzKzAwOjAw1TD7EwAAACh0RVh0\n\t\t\tZGF0ZTp0aW1lc3RhbXAAMjAyMi0xMC0wM1QwOTo0MDoxMyswMDowMIIl2swAAAAASUVORK5CYII="})),bookmark:(0,t.createElement)("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none"},(0,t.createElement)("path",{d:"M5 5C5 3.89543 5.89543 3 7 3H17C18.1046 3 19 3.89543 19 5V21L12 17.5L5 21V5Z",stroke:"#4B5563",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})),caret:(0,t.createElement)("svg",{width:20,height:20,viewBox:"0 0 20 20",fill:"none"},(0,t.createElement)("path",{d:"M8 6L14 10.03L8 14V6Z",fill:"#9CA3AF"})),"variation-swatches":(0,t.createElement)("svg",{width:40,height:40,viewBox:"0 0 256 256",fill:"none"},(0,t.createElement)("g",{clipPath:"url(#clip0_78_588)"},(0,t.createElement)("path",{fillRule:"evenodd",d:"M5.30015 201.594L5.30014 3.99998L103.743 3.99997L103.743 201.594L103.743 204.072L103.681 204.072C102.39 230.105 80.8745 250.815 54.5215 250.815C28.1685 250.815 6.65266 230.105 5.36148 204.072L5.30015 204.072L5.30015 201.594Z",fill:"white"}),(0,t.createElement)("path",{fillRule:"evenodd",d:"M5.36148 204.072C6.65266 230.105 28.1685 250.815 54.5215 250.815C80.8745 250.815 102.39 230.105 103.681 204.072L103.743 204.072L103.743 3.99997L5.30014 3.99998L5.30015 204.072L5.36148 204.072ZM11.6741 202.678L11.7276 203.757C12.8514 226.413 31.583 244.441 54.5215 244.441C77.46 244.441 96.1916 226.413 97.3153 203.757L97.3688 202.678L97.3688 10.374L11.6741 10.374L11.6741 202.678Z",fill:"#183650"}),(0,t.createElement)("path",{fillRule:"evenodd",d:"M85.3211 200.177C85.3264 200.412 85.3291 200.648 85.3291 200.885C85.3291 217.9 71.5361 231.693 54.5215 231.693C37.5069 231.693 23.7139 217.9 23.7139 200.885C23.7139 200.648 23.7166 200.412 23.7219 200.177L23.7139 200.177L23.7139 23.1217L85.3291 23.1217L85.3291 200.177L85.3211 200.177Z",fill:"#E83D62"}),(0,t.createElement)("path",{fillRule:"evenodd",d:"M25.0647 164.673L173.857 34.6567L238.632 108.786L89.8397 238.802L87.9731 240.433L87.9328 240.387C67.4802 256.544 37.7277 253.969 20.3875 234.125C3.04733 214.281 4.48504 184.452 23.2385 166.35L23.1981 166.304L25.0647 164.673Z",fill:"white"}),(0,t.createElement)("path",{fillRule:"evenodd",d:"M23.2385 166.35C4.48504 184.452 3.04733 214.281 20.3875 234.125C37.7277 253.969 67.4802 256.544 87.9328 240.387L87.9731 240.433L238.632 108.786L173.857 34.6567L23.1981 166.304L23.2385 166.35ZM28.4423 170.186L27.6652 170.936C11.344 186.69 10.0938 212.658 25.1872 229.931C40.2807 247.204 66.1817 249.447 83.9816 235.385L84.8291 234.716L229.638 108.18L173.251 43.6506L28.4423 170.186Z",fill:"#183650"}),(0,t.createElement)("path",{fillRule:"evenodd",d:"M78.7849 223.998C78.6111 224.157 78.435 224.314 78.2568 224.47C65.4445 235.666 45.9823 234.355 34.7867 221.543C23.5912 208.73 24.9018 189.268 37.7142 178.073C37.8924 177.917 38.0719 177.763 38.2527 177.613L38.2475 177.607L171.574 61.1047L212.116 107.502L78.7901 224.004L78.7849 223.998Z",fill:"#50BF9F"}),(0,t.createElement)("path",{fillRule:"evenodd",d:"M57.8981 156.02H246.784V248.965H57.8981H55.5286V248.907C30.6432 247.688 10.8458 227.374 10.8458 202.492C10.8458 177.611 30.6432 157.297 55.5286 156.077V156.02H57.8981Z",fill:"white"}),(0,t.createElement)("path",{fillRule:"evenodd",d:"M51.2668 154.204C25.3225 155.499 4.68256 177.072 4.68256 203.495C4.68256 229.918 25.3225 251.491 51.2668 252.786V252.847H250.662V154.142H51.2668V154.204ZM52.6566 160.533L51.5815 160.587C29.0021 161.714 11.035 180.495 11.035 203.495C11.035 226.495 29.0021 245.276 51.5815 246.403L52.6566 246.456H244.309V160.533H52.6566Z",fill:"#183650"}),(0,t.createElement)("path",{fillRule:"evenodd",d:"M57.703 237.179C57.4676 237.185 57.2315 237.18 56.9948 237.18C39.9802 237.195 23.792 221.031 23.7771 204.016C23.7623 187.001 39.9265 170.813 56.9411 170.798C57.1778 170.798 57.4139 170.793 57.6493 170.798L234.704 170.643L234.758 237.025L57.703 237.179Z",fill:"#f1f1f1"}),(0,t.createElement)("path",{d:"M62.9233 202.193C62.9233 208.683 57.6624 213.944 51.1727 213.944C44.6831 213.944 39.4221 208.683 39.4221 202.193C39.4221 195.704 44.6831 190.443 51.1727 190.443C57.6624 190.443 62.9233 195.704 62.9233 202.193Z",fill:"#183650"}),(0,t.createElement)("path",{d:"M116.744 201.819C116.744 212.635 107.976 221.404 97.1601 221.404C86.344 221.404 77.5758 212.635 77.5758 201.819C77.5758 191.003 86.344 182.235 97.1601 182.235C107.976 182.235 116.744 191.003 116.744 201.819Z",fill:"#F26051"}),(0,t.createElement)("path",{d:"M169.187 201.819C169.187 212.635 160.416 221.404 149.597 221.404C138.777 221.404 130.007 212.635 130.007 201.819C130.007 191.003 138.777 182.235 149.597 182.235C160.416 182.235 169.187 191.003 169.187 201.819Z",fill:"#F26051"}),(0,t.createElement)("path",{d:"M219.234 201.819C219.234 212.635 210.464 221.404 199.644 221.404C188.825 221.404 180.054 212.635 180.054 201.819C180.054 191.003 188.825 182.235 199.644 182.235C210.464 182.235 219.234 191.003 219.234 201.819Z",fill:"#F26051"}),(0,t.createElement)("path",{d:"M96.6177 208.736C93.885 208.736 91.7321 207.894 90.1592 206.21L91.7083 204.065C93.0747 205.527 94.7509 206.258 96.7369 206.258C97.8014 206.258 98.5958 206.043 99.1201 205.614C99.6603 205.185 99.9304 204.677 99.9304 204.089C99.9304 203.485 99.6126 203.008 98.9771 202.659C98.3416 202.293 97.571 202.007 96.6654 201.801C95.7598 201.594 94.8462 201.348 93.9247 201.062C93.0191 200.776 92.2485 200.292 91.613 199.608C90.9774 198.925 90.6597 198.043 90.6597 196.963C90.6597 195.628 91.1919 194.524 92.2564 193.65C93.3368 192.761 94.735 192.316 96.4509 192.316C98.8977 192.316 100.884 193.054 102.409 194.532L100.812 196.605C99.6047 195.398 98.0715 194.794 96.2126 194.794C95.3864 194.794 94.727 194.977 94.2345 195.342C93.7579 195.692 93.5195 196.169 93.5195 196.772C93.5195 197.169 93.6864 197.503 94.02 197.773C94.3696 198.043 94.8144 198.266 95.3546 198.441C95.8948 198.599 96.4906 198.758 97.142 198.917C97.8093 199.076 98.4687 199.275 99.1201 199.513C99.7874 199.735 100.391 200.013 100.931 200.347C101.472 200.681 101.908 201.142 102.242 201.729C102.592 202.317 102.766 203.016 102.766 203.827C102.766 205.257 102.25 206.432 101.217 207.354C100.185 208.275 98.6514 208.736 96.6177 208.736Z",fill:"white"}),(0,t.createElement)("path",{d:"M157.747 208.45H154.959V196.653L150.073 208.45H148.882L144.02 196.653V208.45H141.232V192.554H145.164L149.478 203.017L153.815 192.554H157.747V208.45Z",fill:"white"}),(0,t.createElement)("path",{d:"M205.841 208.45H196.046V192.554H198.834V205.996H205.841V208.45Z",fill:"white"})),(0,t.createElement)("defs",{},(0,t.createElement)("clipPath",{id:"clip0_78_588"},(0,t.createElement)("rect",{width:256,height:256,fill:"white"})))),"cart-abandonment":(0,t.createElement)("svg",{viewBox:"0 0 128 128",fill:"none",width:"40px",height:"40px",x:"0px",y:"0px",enableBackground:"new 0 0 128 128"},(0,t.createElement)("image",{width:"128px",height:"128px",x:"0",y:"0",href:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAACBjSFJN\n\t\t\tAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACl1BMVEX////zXjPzXjPzXjPz\n\t\t\tXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPz\n\t\t\tXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjPzXjP0aED6vaz+6uX+7+v8\n\t\t\t3dT2gmH6wbD939f0bET+7ur+7un4lXj7zsL6v6383NP81Mn80sf6vKn0bUfzYDX95t/0bEb2gF78\n\t\t\t1sv4qZP4rJb808j2hGP2f1z5t6X939b+7en94dn6vKr3imv96OLzYjj5sp36w7P5taH4mn/2gWD1\n\t\t\tcUv6vav82tD94tv7x7j1fFn1eVX3iWr3jG74noT82M32gV/70ML5sZzzXzX3kXL3jG393dT+7Ob2\n\t\t\th2f95d73jm/7ybv5r5r2flv0bEP4l3vzYzn4rJX83NT7yLj818z3jW/+6uTzYTb95+H0bkj4nIL1\n\t\t\tdVH0ZTz95+D949z95N393tX70cT5rZj+7ej0Zj30Zj77zL/80sb6wbH4pIz4mn74o4v80cX6vqz4\n\t\t\tmH394tr1e1j1e1f3i2z4n4X82tH6wrL949vzXzT2f134o4r6uqjzYzr2h2b3kXX5sJv4nYP4oon0\n\t\t\takH0aUH4qJH+7ef+6+b6wK/0akL7zL77yLn4l3r4p4/0bkf7y771c071dlLzYzj4lXn82c74nIH5\n\t\t\ttJ/4oIf2hWT96eP4po/6v671ckz829L0Zz/5sZ32flz7zcD4p5D70MP7y730bEX7z8L6uab4oYj0\n\t\t\ta0P3j3H4qpP1c034pIv1d1P2iGj5rZf6u6j4oIb1cEr2hmX3iGn2g2L4mX34pY37yrz3lHj4qZL9\n\t\t\t4935tqT94Nf0b0n5uKX2fVr3k3b///9QNTsLAAAAJXRSTlMAAAE4bndZFCzM+IICLfCeTjy5b+54\n\t\t\t+lrb9o1/7BgD6TlPuIsWnMbZmQAAAAFiS0dEAIgFHUgAAAAHdElNRQfnAQIGMwyprDUIAAHqw3pU\n\t\t\tWHRSYXcgcHJvZmlsZSB0eXBlIHhtcAAAeJyUvU2W5UaurNv3UdwhkAToJIdTVZJ6b63XvMO/m/YZ\n\t\t\tGJHxC51aR0plRm5uku4OwMxgGP/3//v/x//5P7FGrHPE/+Kf4zyWuc6Y/537kdsyt7nPY17z7/hr\n\t\t\t2/7+57///e8/2/b6/Wvm/Tv7EXv+FUv+dSwZr5895zXyPP5zvP7iHsd/8u895+vfrw+MeP2lbYt/\n\t\t\t4u9tif8dZ/znOOfrL86/7ovNdVvu/57/m38fcf/ZuK/w+jY5/7m/R/yHP3h+XN/k7WNev/ff+2/k\n\t\t\t8ze2ZT/zr30Z2/3l/jn0W7Fvf0dsf72+z/K689dV43W/r99bI2O/f/36vf+9fnfTn2/bP69/8885\n\t\t\ttr/0Y//RD/7n9SPHtnz43+bb217f4vUz+5aZ88OtbUN/eN/eeeTrf0v853U7/xz6v+3v4/VT29/6\n\t\t\txsfrymtc9/+eb7K9/vkXF3h9oyOO1/u5n8hxvm7rdYX7z//8Fq+v8HpVrxexzUtP6no9oddP1J/P\n\t\t\tdbwe2D/H68He34oH+/5d3A/48/fVxf5+e0WvX8d4/fKv162cr++z3F/+9WiXeldvH/n6K/HFA1he\n\t\t\tX2Gb/7tvfnD39w++/rm//uJ+v/r7Vl9X5YPXzx/8Wk/n605e3+h1w/evltH74v7en/762z2Mr59L\n\t\t\t/vXaAv/mEuf489m8PvCvL24kjsz9mLySrz98fPXpf374vUOP10t//cw/+6Zl8I8e8mu73h/PEx33\n\t\t\tmvl8/fsvfLVQv7+58W+uz8e/Xfr++LwX6f66Nb2Dbb+v8M/836ed/fk9Lff+fW3lZTt3nVn3Tx/H\n\t\t\teH3V66srvP7ynsm/74/3jr9em/w+Jf56/fe5p3bff16/c4zXv/L1Xf97//Hr168D5I+P/Wvei/Wa\n\t\t\t87h+/tjx7nM3HSRrnD98rI67yUeu7z96/PiVv/1o7b3/zKkD5q/749gi1/0fr+N+1zb4+7X7nu+h\n\t\t\tNf6fvA+a0Lf5W+vndaP33+RnXovgGooMr/Mx93h91dcfH6/vssT5+h47B+7rT658/dfrS7z+nZGv\n\t\t\tJ3R/odefv37v/pPX4beND1e+X3wczwnw6cr55YVfNz/+7ZU/XPh+RtcdA8e8F/z/ut/kPrZetz1f\n\t\t\tH533To77O533lxj6Yq+v9vqjNebrW0Wcef+bb3O+/uL9TusM/7TS63GMd9/Cb0Rv5/WVXxv4zwBw\n\t\t\tB9Ljz997bfQrXns0Xidk3l/0/rv5Wj6vZzP1la87dsXrvxUa72e3Zehtvtbd6883/d7/tn/qIwef\n\t\t\t+fVVXrc99RJeH/r6y/djv2PV+brk6xm9/n/V5bb7NY3Xn99r+8r7n/PPq/x0kfuDXx9yf/x9FzHu\n\t\t\t13x/1fv3494ar1uL+9WHvsO8r/z6i6k188NFxh9Xub/yqifxesX3R+t7XvcOu7OC138dcb/uQz83\n\t\t\t9av7Xb/25Gjeynp/xOsv3C/kXkWbXsv9EalV/lrZix7XK33TXvfq1l778Vb+uMhr5Q29YD0fb4cr\n\t\t\tdR29/KlHuer/l3uJ3t/k9V+v3/14kfHdVV4//Npzei6vU1rP5ojVb2nX7YS+/f3+XvcztEHvHXT/\n\t\t\tr3kr9zNh9egdv55cvA624772vbd0r/eaDV33fh/3ycSb3H+7yPBVNt3CzoPTTYX296YPvoPdvYHv\n\t\t\t1X5v6entfWhJLvdFRuNWNr0NbRV91Osvew+uWq73wfJ6RnEfWlrdbJHz3rC/38pzkXs3vt7m0C7b\n\t\t\t9MjuF86K1Ql5P1SdlKElkTo5Q6fXFxcZX19FW/neFPct3ZeZ2o/syHvn7VrG9783bcMc2jv3g+zd\n\t\t\tyr3rUvvwfvWnvu9yb/OhhaYHp++w6usrZN6X8BZuXGToKvcVDi3Lewns2nOrX/rula3tkemNeurN\n\t\t\t3d/HFxm/3sqpVTy1pnZd6NKT2n20bTpU9sGe0XO61++uO24+r3ux3K/ivszQOr5f9qllcP8qtCSm\n\t\t\tzuV75d67aupP7z/85iLj01Wmtou+sGLJ6jV0r7Pl9V9aWXo+d/w59N5ez+6+tdm8Fc6s7X4ir0vc\n\t\t\tz+t+IcHpObQ17ge56vRZKenuJZn3N2tfZOhEWZ/lv2hlp3INbm139XjoG5xeLvfPtAOkno8W6h1f\n\t\t\t7teR97dU6rB7Z6ZW2Ov1DKV0ux7v/c9v38qni4S+W2q/vb6zHvZ96r4+5NJz2rSqVy24U7tJW1jn\n\t\t\tZTNAKpg6KG3aCJc/blXyMLWS7u/+ei1ahpc2z32Crd0AeX/LJTnX7yvev5psEG307b410pj78aXO\n\t\t\t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\n\t\t\tZWFkeXHJZTwAAAAASUVORK5CYII="})),"stripe-checkout":(0,t.createElement)("svg",{viewBox:"0 0 128 128",fill:"none",width:"40px",height:"40px",x:"0px",y:"0px",enableBackground:"new 0 0 128 128"},(0,t.createElement)("image",{width:"128px",height:"128px",x:"0",y:"0",href:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\n\t\t\tAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAA\n\t\t\tCXBIWXMAABJ0AAASdAHeZh94AAAARnRFWHRSYXcgcHJvZmlsZSB0eXBlIGFwcDEyAAphcHAxMgog\n\t\t\tICAgICAxNQo0NDc1NjM2Yjc5MDAwMTAwMDQwMDAwMDA2NDAwMDAKj3ticwAAAsZ6VFh0UmF3IHBy\n\t\t\tb2ZpbGUgdHlwZSB4bXAAADiNjVVLshshDNxzihyBkYSA44zNsEtVljl+usXz829exZ6yGSMhtVof\n\t\t\t0t/ff9IvflqvSa86a6vZN1e/eKkm2cWLV+9+6BA55uVymSLY727cKVWLDc02ajaFbvOerNW94mDR\n\t\t\tuttRzLHCoCoOiejUI4+867U23WtzHPVBd75J5n+/+lFV9wQF+AAe80kkui/Bt3pguZvB3oUn7PuE\n\t\t\t5NJspJKF8GaNLa1y6CYDiDIf7miXA/BhVMVF1Z00yBUyUX7hTLe0FhgY/NUdAuDBe5f88sgKM3cE\n\t\t\tKjDsuhcxMyfidI/yS8hAWzU8WXcENmt85KhQAjZir+G888EbUMlMQCAylhGsWpErclMbAoQDim9I\n\t\t\tHrEACJKH1Ih3MpeQ0ukHwH0pIH6BVxBNbIvoB9RBuA0k/wV5khl+j3ve8A7yfSCoBmSZYSAFWGFw\n\t\t\t3LL4YFyrFUnIxwkvnxtnbVYEB0Myi0S8DEhwoPA/GNPzwM7dps/83kx+8bMbc9dXG+H81UD2BPOF\n\t\t\tdcxsWbcgeR2CYYv+2tW04gBcIu0s1MFC1Yw2GpC59sTkawOSLTZVN3AmWoCQK9EW4HpFZK8A0jkC\n\t\t\tKwpBNEAzeIB/kGjEs1mBpHEPVV2wRy1JwMBDblBRf/PM8lQWqJO/8hZ6vzlOT563/3v+yXGCNZZ5\n\t\t\tQZaMfVQY/fTr26jIGF8zdDTecnS/xrTI0pKNmI2rw0JJ+mN3RX8901yiv5yjxdC/UTA5rQKP+t79\n\t\t\tQ0aQyxJD0BCmx/wydn/TVQ2sB7xhgDWY7bKwcpSVGGpkJ0O7BDOPABBLOivHp8EbFbOQ1DeegK4G\n\t\t\tqrKaFlUb4xUN5SxQD9iNpQqlRvCQWeDRGLCZta4cuRhqZDTdBpbMn0bWmlj3MXvXXIN2SVII3q6a\n\t\t\t2yV0cueBhLjdOH4rr6v0D4dJpUpNGWKqAAAAAW9yTlQBz6J3mgAAO0lJREFUeNrtvXeYZFdxNv5W\n\t\t\tnXPu7e7pmc05SVrljEBCCEkEATJJZJAN2IANJhiDjTHB+AMMWESbYMDIIhnQB5hsgsj8sEAC5Zx3\n\t\t\tFTZotXl2pvuGU1W/P87tnl4FjMOs0Peonn7u09PTfUPViVVvvUVPXPA+kCGJEcAAA5GoBgALABgC\n\t\t\tRJABCkAJ0NyIFc6ZeoERSsdG6lE4UwUbnBIDyCSd2QkDMCMFALCTHACZgqJxrQQYG3G6BMAYihHu\n\t\t\tVcgApfR9Y8DBGCSgEhQBhgVoDoCpBhRgGOteJxu91j2uu9d3fjshRaM3B/NsDCSVppMYSEfOywCY\n\t\t\tYM2zAAQDlEzv8cQ6OKmDOdaQPmVTwBg2tCAZAcxGZAxjNjZSQI1sRPsAoKSAgjRdm615+OZOTAGd\n\t\t\tuSuyeznaTMsZ1UHzzMYjd8/JwHofpvyNwv+1ryctNe2YRn5+N+034hmqBjZWgKGpnWCgDtjgoQCY\n\t\t\tB4iMjQBSMgOEU8siJiRb+KatgdkcoDpQsYEBVUq6Bigqgc1AMf0k2YoBhfLgLGq/8ZguOnxCMAyA\n\t\t\tB2BksHTn6Yt+b+3Tb3x/N8P+1jawwUMYYdDG73EFRdIhACMPKIMBYjMQGLrXtzFUBQME8waGKYbt\n\t\t\t14bfJ1CyAQMA0UArnC6ZzsamAKg5J5SanyersPFQo2wKKI8ogIcPY4MjmAEFp6az93Bx97GGBx8M\n\t\t\t+o2N3Bia5mlupIHyyK/vKTONZOQ4PMPg5zQYfJK6GrXr8OR+5pcgGIMGdqM4uDkPYzSa0uFwlmyo\n\t\t\tBGG15kpp6B8+nijA8FCi1DPSHTTHaDODIyt4oFm69xbXKIjTRGQjWmEo2fA3OqotpeHdNp+zjcwp\n\t\t\tNKLo5r00Gh+1zX2K3uOIYfMHSdMNhiccinHzDzKvxDMDDtWDDqIEGClBDSCDDe6ShvYcWG6gRyWA\n\t\t\t4GDMUCUAkcGDAbH56lC5jcaBmUFpRgs00gB15qZJ06MNjgxATTl9YgBUqRlqydjAbOnhoU332rs5\n\t\t\t20gb/8/VPSp8H8d0+8PnuZtthhcdfpm8wTejBxQcm+eg4XwgSsKWuoVjA6PGcOFhDnBkbCTOIpqR\n\t\t\tRAnGiDBoozID6qZFGsPY4Ib6ZdM0+bOl+3Z7331j+DTcU7LjYAAFmbAKAPNMgA3HHYZ5Z4POZOLA\n\t\t\tZGTESjQyxA+6Pvju3c7uodb/XO45f4yu5XjYaNIDMBiA18Zi2vxy8ATNEsQ0NRwGYAqywXHQSNOY\n\t\t\tsHeH3Xu1AyA2U6sNb0vTtD/oHAJw00xHxsR7k5F/7r0GUoDT7aXGPtA+2XDwdGTKgNJwDJrpenv/\n\t\t\tOXr9u62c7jY/33Ndpfc4yX0tqRUAgyrnxaTwrAwEyrSizLU8MamRsQkxPNRMa0IUkMIpQQlipo7M\n\t\t\tQzmtdVwEKbtaxJgUXs2JqjEZkyiMiT1F7bOTqHu8qxk1mUBBAm9OowAKp9HqNJ0rqZIaG0gNAjYj\n\t\t\tVY2AcmDV6JRRmwexmjfyzFqByQNQjWYRDIWATZ0KC0gcYDE2nRdqUUgNIp7hQKQWHEGjxsozHKB1\n\t\t\t7YkcABFH5sjIBBodGammf5FqOjKUTBjqGWbCDGt6NpnBMRHMVAjCpEDFnnxd1J12LjFaZBHyHGIV\n\t\t\tNSoZEXmmDAKI5SHUde1DbmBRRDGw1VoWOinoM4OZjVytEvKWGokIEQWXOfIxRgCqqNVCyGOsWq1M\n\t\t\tpIxSgMRnQUwr1bzVVrJY1cwsInVRBg4ao0VzcBbNkZc6trI2wP2pPrM3o3bWhihEmcgE7XysrpWI\n\t\t\tyHO0qByVNMLKuiCHaBGkzjlVJTIRyfOciHzgsiyJ2Ax1XbfbeZ7nMUYz897HGJ1z7IbaRJZlMUbn\n\t\t\tSS2KiPceABEBzMwiRkREVFUV82DaU62qyjlyjtQiKHpP7kD/uDy0YqWegyNvxg6OyQjRuwAJTK6q\n\t\t\tizzPTBGydlnWYFaRTqcjqlH7vXjX5PRduc8y16oFYC9Se8dMxOS0Noh65hCcqqqAODNwLbWYjI2P\n\t\t\tCaRflsgyIV9E8Y7YDGZMnIesrurgMwKbsuMAJQdflaWJToyN15V6hKKomeGcM0OMZuaYfV1XPvPE\n\t\t\tqhDAC9Aey/tFPw/eAGJvgEJExbl2HUVQhSyIOHZeLBZVQeyIvRrYOSNEFWISVSP1mS+qIuRBxIjZ\n\t\t\tyKJEAxGzgYk9MatBRNvtTlVVRBRCSK3KOYZGhhGZxMoH56EGS6YlrZUyUjOiUIt573rFHnN7tk5O\n\t\t\tM7XGu/PJeyIKIZ+amgohnzd/4jtfe2u+DGc+4j27tlc+dMFOpS7LqtPKYxkDBVUYalPvQ7u2CHIG\n\t\t\tOA7O+12Tu8lzPtYuqt6u/mQIbnJqutNq1XVkg4hlPlT96L1XRWpT5KCqzrmd2+8MIaT79somBtFY\n\t\t\to5PPzfN2aPm6LkExy7J+EUPI+1NlHnJRq6qynQeFmEjeakkt5Jjg1UhVjcDM5IKIkTNmrmNkIoXF\n\t\t\tStpjraooy6ry3tcxMlwVazK44KVWcmxCSsTwZV14xwoxsxBCUfSZXQjBDGZExAR2TF5sOs9bWkNF\n\t\t\tnXNZO6tiWauEkBdVP3BR+93Pff6jXvXGJ627Es99xivmd1dT9HkrIGQxyty5C/LlgKEsajZvIlVZ\n\t\t\ttjLujI8Xe3qeHZERGfms1y/IkRExNHiCkRpaeUcoTvV3LFox59tffr+FtORFXcExmOAIRPAe3EIx\n\t\t\tCWbECGaIwXvECJcBirJA5uEJgfD6137qV7+8YjxfQMyeUfZ7bT/m4CHE5NRXeaddlaXAOnm7jDVE\n\t\t\tyTuL8D6Ao7GpgDi4QFWMgVkJ3jkQM3NRV86xGIg5Ssy9I6bMZZXEkPt+Wee+U4t5Vg6e2fpVP8uy\n\t\t\tftlrtTtVWYN8jJGRNYsDIk+Op/vTIe8wu7KOQF3ZrlL2lGXJ3pVT8K3y2JMPxhxsmry5yu+yztyt\n\t\t\tm3bZVNHOsxhRbdrw5MdecNMNNy8fP2p6Ws2ZsZKI7JaMxhbPXx7rWKPaNXnXwYcf4kJ2xeXXLlq4\n\t\t\tIkZvIk7hPDFQFr0/e9Wbdk9i/cbNq/ZfUMZ+5jIiFythCq3gL7ross9//tyPfOR9vZ52u6w1BCj3\n\t\t\tRLVapJyYmOsMRYWqhEW8/V0vefTJL87DROBcUCuXvaoPyzI/YdCinCpjrzPWyn0etarrAiQkzrlW\n\t\t\tlLKMU4EC4Bx0uugDKMTmzZs3OTkJKBH54CKgFndPV61WVsSiKIpOpxtjrICxzkRZFBxcWfXEaljt\n\t\t\tM9er9wSfTxWlA7MZQKrkXDAlNfNKmct8hEUpjR2HkrPt5333ExP7AwYIznz627b2tiMcePIzDrzy\n\t\t\tjK++7uUf/sB7z8IYLv/lbceeuOZDH/jCa97yfEQct+YZl971dQT85PtXPPZJxyDim5+56m/f+O5F\n\t\t\t85YXsvvXV59NXSADBM981Nu3rN8zRvNaIbNYiNUt88sm5r7zDf/6w/O/e8nVX9y2SyGh1XbZGIoC\n\t\t\t3RwfeOdHt23bgT4Wdflz5/5kw8Y7Tj311BNP3H9qyodWe8cmO/dz3xkb65555qPbLbTbaI91nGuV\n\t\t\tdSyq3U96ymMWL5t7xeVXX3Hpbe2s85Snn9Zq08//4yfr192ah3kHHnTg3Pm+3y+vvuL2FStWLV2x\n\t\t\t2Dm6+NfXxuiOOPbgENz0dP+aa6459NBDO50WgCuvvHzt2rXjE926rrvd7i233HLkqsNU1cxuuXnd\n\t\t\ttp3r581dfNe2rYccvPbEkx6mUv7igvOXL1tZFpKF9s7tkxvv2NbKx6UihTjnmdhHJYDJK3siuLt2\n\t\t\tbf7VdZ8ISwaLV8HaA9fASbPedaC27iowdw6OPXUNBC4jIbgcJU/BAR6PfeoxqICAp/3JUTdsfMY5\n\t\t\tH/n8BRd+gxYAhn7Zb+ftr/3srccsfcn42JyY1oIgMqhixdL9OtmcDbfF7kRrvINvfuPCf/74OT/6\n\t\t\t0Tkbb8X2bb3fe/xTFi7Ds578tzfddJML9O9f/+6b3/zmJzzhmC2b8Zxnv9DRBBF94bOf/slPP6sK\n\t\t\t4rpf71q1cv9Pfe6txAjj+OLnJjbcufVrX3k7Gwx4xetOfd+7vvRvX/r+a173ssOPZN/BcYe9+E9e\n\t\t\t+abHPGYud/G8J5514403/8OH382MbdvwuNOe/e73f2TePPgujj3kzD/4w7867bQ1xEAb73v7N1//\n\t\t\txqfFEr4FGD559s8+9JGPveMdZ51xxlpVuDmIf1e85rVneAZa+Mqn1n3oA59wXGc+U40iwuQ5cDCD\n\t\t\t4yAiVkdHEhYCAW96w/tWzD/xNS88e8P1mzJVCM774lVr553+rS//OPcAcPnPb330IS+54ue3pZ2r\n\t\t\tS/vZiHe+8Zy1859w6Y93wuG1f/vsOYv9gv0Aw+oVh++3+tC0BT7t9x7Wr3bDMTgoe2UqFfsdvFK5\n\t\t\tvPGG6ybGQBX+6f2f7U/SnZtw4YU3gdqPe9wTvvb5q9ev2/j4Jzzl3776f8mFsz/+qTnz8KbX/307\n\t\t\tH3/3e978yle9IHDrs5/8ietArdcrN33inFdWNX76kztf9oJPfOWL333r2/+6qPAvZ1/xl6/7/FQf\n\t\t\tr3nT8wrdNXcx75pC2cfCVeMHHjV32zR2bcWKlfu5wJxhZx/zlyJ0dc5C7JpCNYXxueOTva2l4CMf\n\t\t\t+umLnvfBX19yUVFgwyY8+Umv3T2FP/rTRz/9Oaed/qS1uyfx1rd+40+f/8nJySoafvDja5//tPd+\n\t\t\t9cvntfNFjrtRKliVeSITRqw80J8ux1sTgUBCOgUoznrP6y+95MLMu8suuqDTyhCxcHx1t7XEWwsC\n\t\t\tKH71i8umd/DUNoPBBFBFBACrsjntVR/94GfACB2cdvojwJAeLr3s2iuvvFkKADj66KPruiSiGKOq\n\t\t\t1nUtaocfeQAQb19/e8fjs+f80lkncxM3XD11+7rNJOGYY1Z+7WtfJaJ3veMFa1bhlJNO3rx5y+QW\n\t\t\t3HLz7Y846eTH/97K5zz3EbXQxg3bIFCrjj/hqLyF6Wn8xWv/+obrb791/R1HHTnmPM4999yf/ez8\n\t\t\tHTtRClbtv3zJCqy/bWM0nHLaCd352Lh5p8+xYMGClStXljVu33jHdInnPf9ZZY1bb99SC9YcsKqS\n\t\t\tPhzmzB9buXrZ7sk9mrzgXqdLTBc4+dEPj8A5n/rpt7/z44suvrZXGIBut7127QFgirUW/aqV5aqq\n\t\t\tqszMgYqO564f6+2qnNHCiaXHH/Hyi38iqLBkFd73qT/+01c/d7rowzBVFGJKRJ6BiHY2AcmgHhFE\n\t\t\tYGYwEBFCiDGWZR81KKI7HsBwY1i4CEuWBueBGtCuaQDMOWLmLMum90wddjBi2bv2imu9x6c/+ZkF\n\t\t\tcxezhosvuHTb5h0ktmQ1brjxqmOOPsgUHiimptpZuOraaaX4yFNPmuyhMvTLmriDDGUtc+aOOY9N\n\t\t\td9SdfDxQnnlPgGMYKhHZsX3KEQ499PBY48Ybbrvp5p1nnvkcA7773fNgWLJ80aIlS/IM//6tH4QM\n\t\t\tTz3jjJDjO+d937cwf/Ec8m5yGme+8IR3fvx5Pmuxh2/hq1//8Pg4XvOaN4515jhg0x0b21l7zth8\n\t\t\tq7mYxkMesv/ffezZxx53kFExMafT79WEjJCZOlZCURRm1Gq1iEgsLl+24tnPeeYBax93ya9vB/C8\n\t\t\tFzxruowIaM+n6XiXofAeYIgIBe9DDgMMYgYFMmyf3DQdN575wjPSLPKTH56fvCOrVz109fITVy99\n\t\t\t1EErz/jYRz4xMTFR17VzDrBYVa1WlmVYu3bt+ps3/stHf+kDv/q1Lz/i8EN+9IMf3rZuw8J5ixAA\n\t\t\tZ71er92FVLjgF7865tgj2VVmUvaKOWP40XlXTHQ7Rx97CAoE3123frMR1h4cWl3eOb1lsj/ZryCA\n\t\t\ty6NSb+XKbq+HEAIRdm7vXXzRVePjeaeD733veyFgzX7LFy2ZYMb27dsvv+K25cvHr7hy14Y7tjiP\n\t\t\tA9au7PV6ExN4y9vef/xhz+gX03WNLVv2/PKCW3wGA9+1easpTj31xF6xc9euTabl3Pn45rd+/LC1\n\t\t\tz/rBD77daruy1ydyzmUqUIUX6lhGEVE1Zk637dp0yfpPb9jU/9HPzzvkyJXIsHHblqmyhsNDT138\n\t\t\t80u+8q63/ONkD3PGIb4qrKwQU6gmOqAFA973sde99vUvXHHAYitw9RW7Nq2vUABt3L75kvN/+uvx\n\t\t\tfPExx+131NIXLGwTIsRiVCHnqqqIkh955JE/+/5FX/jc1zrj/vRnzdk1+cirrrpi106/39pVKHHw\n\t\t\toYdcd+WG//uZ9d/6+vdyv/CZz33qoYfPy8n922e/2aGJj/7jv9TlXU9/2kFSwVF3/c17LrvUjnoY\n\t\t\t/etXPnj++Zded90N3/zBr5/65BPedtbr77j1tvYYtu/A9u3bOx3s2l1vvvG2P/jDUy+5ZMOeyWl2\n\t\t\tWLFmzoJFAQ47d9118cW/Pv74NVdfdeuuXVUtWLZywfSe2C/wmNMee/gRR130q+s4YGJi/B1/f9bx\n\t\t\tD//7N77xjX/8wlc84+lf+L3TD5y34C2TO6avuvrS/jSOOuLg1/3lqy+7eP0lF64LCExBhRnsvWdR\n\t\t\tS14RwETEUYYaK1e2X/SCZ3Q7jBpv/PO/P+cj5yLCM1atmpjfXTpnHFDMaS9CjZbvogam4TWHghhg\n\t\t\trDhgMQRE+NMX/PW4X/b4h78OEShw8iknHPOw/VDDWVaXkdmrgpxn7+BQRBz/8GOdz6b7vT955R9O\n\t\t\t7sKznnPw2ISVcXdrzNcV3vK2N4Pl3e8/66Z1N576mEc+5vTDkeElL/2D9Xfc8K6z3lFJ8U8fe68A\n\t\t\tZvCUBzfxF3/+NxdfsGP/Ve6FLzr+uGNOeOdbPrRxHU45afUfnHlKOYlXvuQvTznhcTBI31/yyys7\n\t\t\t83D1RTdJn0PAwfu3TnzoydxFb6dde9n6fByXX3htsRvthTj2sBMnWgvnjeGJjz3uRS85/YCVh451\n\t\t\tsHQ+brx6w647cdgxE4982GNf/uIPmuBRJ6956rMPnzd3cbuDIw5Z9fsve/Rxxx6vdWRnzpP3HGMl\n\t\t\tEumJc9+R5+2qFEfeQ2vrb+1vPf2Mxy1aOueO9bef/6NfjbXGCyoqLZ535jOnp8offudna9ce0O3y\n\t\t\t5k3bJrchz/MV+4+3uvLzC39yyR1fhcOb/vwfrD9nIiz5+pe+M3difsg6RTU9Xe049PCDl6/c/47b\n\t\t\t77zmsusXzl3iLEDMkSdvd2677aPnnHXosWO14rEn/cHixYvP+9kHt2wtPPJbbtj4qle86ehjj/rI\n\t\t\t2X/dLyARF5x/1bJFK447Yf7WndFlGB/zt902fc1VVx9//PET4xwLLF2Ik45/9Xh7CeC2b9u8YN6c\n\t\t\tJYtXbN2yPYSwZcvm1SuXdMY711x3/YL5i0QsVjHPxhRSVDuzdujkY9u27SCDRWOftcc6ZjLVL7qt\n\t\t\tOSG47TvuAlXz5nene7sBEEK3s2R6qlDV8Xnd3Tu3CKTTnqilkliuWrMa0rpjw0bvAKho3el0ctdW\n\t\t\thSMWQRbGJBo9ZcE7iZypJ2OvAqbSpB+LOvbbeaeFNhFxboWU/V7pyOe+RYQovRByQsvMYj2lvGdH\n\t\t\tseHiTV8E4/1v+cYXP/2jjls4vzWmUZRhDpVURK6qDeTzkDmGRXHOiVitNVz5+y962h+99NjpAj/4\n\t\t\t9vWnnHJoaEEYDuh28IPzbu5OzD3qIQvrCOdg1rzYQwQC5HkTU4sFxtu4+Xq89A9fvWDuMtJARqRm\n\t\t\tkQlgBpFFiwCyvFVVlRkxs3NOpCbWMpa5z0UkuMwUMC+mzpOIOOeIkn9XwaVZbUaOs6p03mUho6oq\n\t\t\tnacqRhd8NAUiwHXFeTYGqFrFzlQrR6QqwXkzk8jOBV8zA8mjJ6CYcCKt4Fo2zymTKYAYwQhj7RYG\n\t\t\t0XPvxg0wY5BmWcfYuBiTLfjVxeVVl21ptxe13RjMSI2ZTZFxAOCzwe5OlWCOOUokgg+tT539BQAn\n\t\t\tnHjsEYcduv0uiEBNjStmv2a/A5mxcR06Y1ixBjsnETKsX7cluHlaU2AnIiEEE5DJlRu2nvWOD82b\n\t\t\tWEbqyAAIMShQ2qQMMABcSQ1HBDJoDYUDzHnfURg5RMgwiCIAHAQCA9gMCgsgB1IBucwZpBKDg5g5\n\t\t\t56DswAmT4DIGCgCOFAqHAGMmqEbA2MFM6PSF701BVDY40xRWNSLSjA2ECFIDK3yK93PybCc4EZig\n\t\t\tzsS4jr7Ysn2Ly8fGuguk5LHQ8lV0quZ5GAVSYBjsZoe6rrPQKuuKGQLpl0XUWKs00ReoukrJQJ4M\n\t\t\t0GgWH/34R7zl/7x4Yj5e8+f/9B8/uSz3Y1JWWZYV/ardygBz8GPthY78SOBpEPtEVLIBasgnYMUQ\n\t\t\tKAZzTQyQZRAwb8AiKWqtpAMMgRuaZhDRi0rK5gc4FBogpXSv22iCdEpDoBhAA2RcBODUY4AkMGKy\n\t\t\t5qaNABA0T1E/hijpMO7oTEGmTiKkhsJ8FsasQpdDrGplHbnpFPtlkKZoEbOPMdZ12el0+6WCSFkA\n\t\t\teHMMFVJhURhBc8d1XUeLO3Ztf/HL/vh5z3v4GU/8s3nd+Y5bGi1kKMuS4Jiddy2pS2ZgpN0YDdoM\n\t\t\tABCrB6lSPUCIsFMaQOfUWMjARgCTqbEQogGUUDl7xS8JJITaCKTOiHWo7hkDuJFAvIIEVAGWPqcn\n\t\t\tLXifkVGzi/VspEj4g8YqINUUBLaMLfVlNY5IgByDMwCoVSiwoGYXNAJKuXkRIU9GqX0xqB4aAFAi\n\t\t\tq0vNMu88VWUMvltLVBKgOacBwqqU4nzwxAIyYKrsm8ncbpeMpGTnOEoPZMF3CK6qKh/YTABWuAFY\n\t\t\taiSMa5zuQbk0UgWzsbMGT6ikxjUAMsfGjcoa/WRDYEijZgNIMIRxGusM1GUARbEA8wPtKzD8fg5z\n\t\t\tns0UYGuAY5owA8YEaXAfCYkFgCoMEQXGSszqAFZjNmREdV2yd4hKUfIsq3p1a6xTxTKdv2l6g9i9\n\t\t\tmSlRu9OtqspibRCJfSL2rNZgjhLKkNUckTcxAYjNBR5vdYic1gRpojQiNjbWrivEGEPIYx2dywf6\n\t\t\tHsxtg2eEpdi9CYtRikYpDGTa/IPTeABtIGDcoBlAQFKxpT5tlAaigATJIcDCCARIBgiypPoBDJAU\n\t\t\tFtLLg5T3gsTMQBjJ2DAEUOwNLUrgSzKYGryCAihDXlYVeXJOY6zyvF2WpfkBGMuYRxEFDqpWxEjk\n\t\t\tQQhZiJXABJKQLZriq2aWxuIQcjMxxKIoch80PR17Yi7r0udZGYXMpwCv6gClwXH0ztNQ3iD4ADYS\n\t\t\tMKEZapCiJKOY0pnBZHjUAaSOZr4zRMOlizZdfBQplBq+7vU1AFA/BEgBDeyJGpQSwxyI2bRBElo2\n\t\t\teIbUOBUoQQwF4CVW3vt2nldV4TMCKEoEG0MAJTg236AXE9ABSt7VlWUhjwJJsV8CJCF2vRLIwEj+\n\t\t\tY6qiiokPnGUZ1BgRIVOTKkqr3RItRGpm7Vc958hAjbWpBkDqB1BZY4AMXgEjtQwNqgtupnVZau/O\n\t\t\tmAyWgNbqACgJoC51jAHCFWC2AGNQBGQwQA3c9zPv07kHY1G6N6rvA/440tipQW2CjRIuFyAYpd5B\n\t\t\tUJCBInkyaFWUWZZJ1BhjWmKnM7AZSO8GZrZoIYSqqohcCDmIRDQNemJQTa/hnWiCKRAcACJSjQb1\n\t\t\tnquqSpcDkOcBpM41I+lMf220QCMgRpARqSNjMgbSEWxInwxw2iNKgDKUDWyj73lUUSPoTZpBys40\n\t\t\t/AF4O32Toh+5xXugvUmpweomxPrMvxssdBr7DIAZIDD2VEkNChiANAlhiNq0wUKPATUmABIzB5iY\n\t\t\tzfRkbhCi6Z6ae3cEiZVnB2mQxANoV+T0XQUDJuLgYNaseYZwxIEiNC1UaKjaAWC26QnpSXnmaQkK\n\t\t\tZpr5fG9hJPQxaVqwDr5jQ63e2/vBnwaPe5FRwPdvFJv5+Qwmd68zgO3ezmYDrMx9XILv5WOb+XBw\n\t\t\tzvSJknJafhgP39/H8W53O3MD95ITQTPaGPnvvYL27F7P8FsIe6L/TMv/M7H/zm39Fx4AAMiZEYj+\n\t\t\t0+NgK/BfSXqZZfGqAyj2A/BoA8w6MFwf3/tRR/DrzSrjd+D+QerF4mCIfGAe77M97zVWWALaNxPM\n\t\t\t/X3PI0d/0MFr7+9eeE8ZZsD850edSYK4b+2PvKfBnup3RHyt8f6+h3vKPVN/fsPx3vOH7ju1kuX+\n\t\t\tfrxR8USzO0v+10V/++Y/WFbfTdLMjHvN4aKUy/c7I/5ujqoHhBDRECZO5u/9OzPJIKNHtXsfsu43\n\t\t\t8f/zU+x7GWofAA2acwPvnsnO1HtoH417+Xepz/tZ3gbMupjZqD3MDGRDM6Ss2KGkvdLv1CM/IHvA\n\t\t\t3YVHdpNNzCvJjCO2ifqNJk//bsgD3gAKs2ZqBTB0UiqDUugUlLK99/al/87IA9gAZmZgkEsB00F6\n\t\t\tMAbRksHiZybhdJjy/zskfu9ozP++/LdcVL+lpNFmlARiprGbNSlzAHQktDLbz/tflVnvAWw64qQd\n\t\t\tiZc2/x0wRuBu30Gi7wCgZEOfjzMiCKMk9AKmGf1Y9gmRIWRDLgKnyDgfj9apaUIQBlfZS/UpgXlw\n\t\t\tD3uF2pNFU4hmtpdMXmdzH8AGYrMYObSZuSh2O+e8a9USiQVque8WReEzExhry8yEhRlkTAqIA0BB\n\t\t\tjC2a5j7TXvRW524nVTcv6tx56CosHe/Pn5CJFsgiRYjku6doyx5/63a+eXt3Ox3s8pWo4TiPpgIS\n\t\t\tiXneLuvIGQkJqVlNpBnIAawUQTZwqTdxz9nsxLPcA5SURYhMYhSi3OdEpqQ+cyAt+kWO3GdU23SW\n\t\t\tteK0OOeJXRVLz8E7V9fI87wve0QrY4v93fPddFZvWbMgHrE2rJhocf+mLu7s0B4upxHBCuLOgs6c\n\t\t\tJa05h65YuQOLLr1t27W3b6mlG7GIw5Kp2rXanT3T0+1Wq66qyLUnDi4zmBmUhiwUDedCY4jZFPrT\n\t\t\tEz47qyZglRBCVRMRB+d65Z7d/T2+5cSq4Hxd1MGDvJD5BfmqslCXobJajZzzUEdkVd1vtVmpyvrX\n\t\t\tH9y68jFHZovbk5lt87SLZLJtAqtACT6QCHVy5VDD97WVja/ZUS645Ob60ls7u9uP3GNLKivbedZW\n\t\t\tSFlQ5qsYA7EZKTsbAKrIyJkl9guh/x7N028rsz0HMDz36+h9Rqq7p3Yf+7DD1h61qhcnxTQPAWaq\n\t\t\t0ee46PzLN167ZW5ncaXR+WAiquoIorHlzZV3+eqW4w8sTjswdHpXjutuRg8mKcYPs8bBYzBTo76z\n\t\t\tAhpbmSt33jGfF5580GFrVi76yi8uQX541Vne61dOrOWyWEvus6oqslYuqjagMSJjSug/0tneN8xu\n\t\t\tDzACyFUSgyNC1S93vugVz37s8/bHALMDQWJrQYW/OvOcXZsj+RxATsRCVUTIiHW6U13xe0dtOnr5\n\t\t\tdte/ra2T3krypFoCYAowAakaYJ7IESlYjFBVmjuAcnXzt5fzp/LDvvHLqRt6x2Vzjy339HLnwCJa\n\t\t\tg5kc1wZJQBZDEAUgDLtvX9P/lsz6miyauuCdc6oStTYW+JHLBoCAoAh42nOf0NM9xgawJXAKG+tk\n\t\t\tu7r+EQcVhy/ckO+5ZIInvfbIk0gdDZxlorURzHn4jJ0jZ7BaoxJRcAkTVdbTm+dnGxbKZU97eGtZ\n\t\t\tWJ/HO1oZRXDyWDD7uk54UOWGh473woE8oA3gA6QstFKpHOsYx7kpWQM10AdKwKCRQDj+pNW9YoqN\n\t\t\tHUJtXBpi7sw2HbPsppP3v71Dm9qZoTdF7E0ieXLelVXlPACVaBpVpYRUSERmlbJywqZwBrHpUG1c\n\t\t\tEm575iPBkz9W3WY+TEd1WUfFOc4xAKQ4DbBg8Aa/D/wWsz0HqFQxD4GFstZYkHD2xz//ng9uNBcp\n\t\t\tcubd7t62d/7jm0556kEAWksR2jATjeK8E+2x7J7wd558OOX9qxx2GyJ5h7qijEzUiDLPME17LiJi\n\t\t\tG2zOuKEYhFZgLkJb1CYC+tO3Lhnjxxy74nvXbFJakOV5r6haPh/uop026KAB29QAljlr4h624hmz\n\t\t\td3aCESsZWF2iRghZ1hmbM96eOy9fONGa220vKKupRz7hyLQ523DLrs3r7sw5J1DL9fPyhkcdTgeM\n\t\t\t3TymmxnqQEgpaTAicOJuVICIPbNZjMYDFHZtABMT+mhtsEV7dCJXabE47O5OzL/trrE95biygwtm\n\t\t\tBtMEMmIjAsEciIQbwPSsDkL7aF9upEZQSn08dzLm6lamY0HGLr3wOiQGroCHPuIItdrBMTz6u1a3\n\t\t\t7zxy8W7qbfKo/JBHbtTXaUYcNBqpgcw7AJCE6SaqLOzkBetlySGveNdhbz97Ys2xBdhrrytbj9u/\n\t\t\tnVe3eyqMzVgS1SABIDVKIE5lM5790M3sG6DhNBv1KHhW75ilkkB51Zfd2yBiQjjpMQfv3r2H0CLJ\n\t\t\tWlo+bHU9UVwxx/VhCqqNohkpOWOWlGPBBlQ+DzFKrBU0WFN59uCS5tyMgw9/x1ex36MQVtDzX7G1\n\t\t\tylRbrVgesbBc7DdlmDLUSmWCQwNQisqVJdSmRTKd7eDBbBuAmxVF49RRMnWJ2TjRv8C3szlXXXKT\n\t\t\tJ3KE0MW8xRP9asoHcrr7gMX1HLeFMY0oKeKVlupCQ5rEBEUmZvItD4YUcDn3K96FObfHece/6UPo\n\t\t\trkHowBFuvD7PAqDBemNx3SFLKq57ZgSYQkeRpEoNoJr+H+gBTtkpO1NGdKbO1Ft0FlWj996MSLKL\n\t\t\t/+Na1A2x4iMfe1zPNta6edEizv0uk51wlYaGF9PYiCXhfEk9YkBkLaIyKWu/hMtgpZY875b8oKP/\n\t\t\t/lws2A9siFtxyy+v/+LHFtDu4CeJtwa54eAVylXhpUPIiFIGAMM8LAO8wvO9IyQfaAZIPUAHAamh\n\t\t\tN1ggAlGzdmvs8ktvSPwTIBz90INcqyTa2cmmGX0eOPCZ4QmO4AjeyGEQXfSeHfvc9/vabpNRZzct\n\t\t\t3oClD/2bj6G9HHUN3YNLz7v0429b2Yk59T2gWraynfO6JaRgeFJv2sCCOSXPzETuZ10/sz4EKUiI\n\t\t\tlFiIBZnCGzgy1HP0VnmRgM13bovTTRDl4Y9bs31qcyy2rF7UDWrJG0kGqLPorAYqRu0hHk7gomkh\n\t\t\tFut+1QmIPdtZtda3Dj3ynV9CZzXgYNO45HvXfeEfD8qngkyamSmIQK7n/VTwAq05uV3Nw9ipcwaQ\n\t\t\taJODNesy6xY2GtCUNn+SEBuxOhdN2amZZtS69qo9iEAAWjj18Q9hf1cVNwEl2Flh5LIC+U4b36hL\n\t\t\t77QlpY3DMjNTgDwcIxAE7T1+7tZ85UPe+lFkywAPmcKF37niU+9d6XZ3ZdJrkRzdwbGUwj7mLWcm\n\t\t\tzjHTMCeKYTTCz/sA7wFGaiwgYYXTRM0qgFMLpMTGwSwTdNC98lfXQpEon97wvj/76E8/ccrph4j2\n\t\t\tEJWCq8ztQHfuw56y8j3fWvrKD99Oi0o/JtGzUTN2RZ6S7i3ZAYf83afRWgnn0d+MX339pi/9w0Gt\n\t\t\tXS1MqUXnkDLAENUTODqFqtMy9omEjGC+Zq6Z0SRo+Ae8AQCkxY9rkikVzWKDHYeqKJ2i4/NuPv6z\n\t\t\tH5/f7MoZ8NPwezSUkSJgMCG4KMxPORNuOQ561EF/8e7rei3JF6asKXFhq47v6h74sHd8Em4pTCE7\n\t\t\tcPF3rvjse/bvFB1MBWcNYbGZRAM7qFOlWtQFnyUCqiY5Tgdr5mHnnV0V3V8BUq3rutsZK4qiqqos\n\t\t\tyzZt2AyF1AN+b2qPLVheakP9zVR1TXHtNQDgu1j18GPf+M+3TOaCMcDvQWfLgmP2e/O/wK2Bn4Bs\n\t\t\t1R+cc9OX33fEnJLqXXWMiEZgIBh5auWlmnAWLVS1xShFXyEgKKFm1A41o2LE0SXDA9gAjXNxlKaf\n\t\t\tGqdjXUur1TElEe20x6/61XbXZBt6hHZr9cH92ogCGBpjh4p1X/4UNlyL2EM+gZVHHf6Kv722N77Z\n\t\t\tL9vS2f/IN38E2VKAUW6vvvfZm77/mTVhypc7nJYh9wATXB1rcq6K0TirXGfbdKSQl7W08janMgQU\n\t\t\tCTEtd1MoGrO/Et03y1AkP8SMSUidcxBlZiIHpcy1Lrvo6kEqp4PLsXINWRdVAFpkmmFyIbbc8OHX\n\t\t\tYcOFiJPIujj68Ye+/L0Xd48/5K2fQ74SElFtwvf+eeP3P73WT2eo0MpB0DrCs0FcRnUsM6dRbYrH\n\t\t\tb9utk/2Y520FVTKCVxwNks8+cPZ+GYKaijJZllVVpapMWeY6l19ybeJfSNn8yCfmrjx4OrbMgmOw\n\t\t\twwRPLZct13/4bzG5DjoNCeGhpz/1bWeDFqNWYLr4xj/f9pPPr8p6rr8DWkNqc+COq8tKCVALDKrN\n\t\t\tyG+p8yd/7F8Xr1ijdWUmTdUIYyMYGnZ9IwVsVkEL+8QA1tQusr0gHkZkRVFkWcv7jJQy17rmshuS\n\t\t\tASIM5MHt+Sc/fnsYL8mIUJcAdNz1luqdl7/lxdh1A5yCM1AXCKh3Tp374Y0XfHNhtse7gsYc8hBB\n\t\t\tylyWojmUjdmhABmUcl10ENx8hHasC0HtMoY5QxBkQl7IK7ySKs168sQsBzzvbQClBjhlIYS6riUa\n\t\t\tEVukbjb39utGijBQwPGP2za2uI/MgNBxImpWznXFwWHq2re9GtUW1DsQJ1Fv73/5n7Ze9O1VeX+M\n\t\t\t+lJVUkutIgxidg4gkJlWgsyB/E5pHf2kM5HPLaJ5kuAQY5W0YUSGtGRLSQY627uxfTME0T3+Vmau\n\t\t\t65rJO+cSH0E7m3PZhVegRkhJrC5Ha9lxv/+qO/tqLhODOEaeR6l8PbXKTV/z1pdh+mr0r9r6r/9n\n\t\t\t+xVfW9na6evtqGvnAsPBsZiqRETkgFcYUFFrt19YzNkfR5wEh34dHcHDOHk9jRUsxIOM6n0h+3YO\n\t\t\tGK3tpUregSmqEJFzISC79MIrAaBONagc/ASOOGXO4adskW6NFtSqctq7mPmqVW1fUNyx/QOvx5c/\n\t\t\tVN/yi4n6ziA72ARsMAGTmXk2H9gB6AEK4qxPY+vK7qGv+TvwHBBqkUTqnztmDDg99m36xr4xQIP3\n\t\t\t0xH3rlmD4jez5AjIfOuKy6+FAuwgICFDgJ+//KXvvN2tKbWVscvJoCViGXh6fl5kk7ftufyHc/p3\n\t\t\tjre4iUQSxFQpkkVWoFbKkpcpiHa2V92HPO/VmHswsjEAMO/IO2bESFQRlQwhCEGcyWAf8P/mRqxJ\n\t\t\tMxIYHAtMVYNvx8ruuKVo0r+8MwPcBMKyh7/1E+vqBZM2FwgogRY0GhWT464a52Isi6BYNdhnIgfn\n\t\t\tyDO7RMAzDaBVaHezzVv5yDNw4hnAHLUAYLroO59xA4+wxqcxaCf7Jo9j9jdizWh699I2yQCJNwtQ\n\t\t\tMyOl8e68yy+7Tg0xWE2RkRZRXbRXPeT9X706P3SXzocPqMBtDo5jVYK9GUrVCERz0GDitHJSGZE3\n\t\t\tJW53+tq5Q+etPuOV2bNeA7/I8nFiBlBW0ZyvIjDA7ZKBTJMNLFU3e6Ab4L7EzMAEJjE1M2au69gK\n\t\t\t7V+ffxkDBGKwigGAy+HnISw76R3n2CGPvU0W76AFe8rcuO3Zw0DkMsd5IDKDWVPpxHcKzXvZ4tvK\n\t\t\tuTfaioNe826c8nTkC+HHilpTuIuIalFh1GnKmckjA8BDqOisyj5I0LhnakripBtWLzPnhmx42dUX\n\t\t\tX4cCrgV4Vlax6JyDEMIEXJj3infPu/XKyz7/j2O7b19YbpvvYXWPfKpbCVidqmwxUal8V53vtGVr\n\t\t\tH/fMNU/8I2Rz4RhgaN12rtTKcdavyvG2wXsigzgYjJvlEADjxIvHszoW3S8ZMomPZlC2xpTYiWrm\n\t\t\tM3BAL+zZjPE1AECsSJVFOQMBLoDbOLD7kDfuh/WXV/9x3k1XXtB2FVOUyM6R8yoiFq1Ubi9evfrE\n\t\t\tx68+5ZnIliBfXhCzScYGM5Bm7CHQOmbjodKSnONUClaZoM2qwHgfrEVn3QDWEF/poIAiGbElxiwo\n\t\t\tGQhkAmauURmUMXbZJZtPXbNMrGISqDWAoCZkEsATaAOHLMjWPuYgKbHtVty5YWrH9lrMOZe32/nS\n\t\t\tlVi+EqENzuHGwB0weyCVAksY3tT1nAHRgncmAjAPiMsiwQisjoSGVZQfqAagGaA9RqobW6oYnMKw\n\t\t\tacBNQeEFE0t+8dNfnfqsp4tGcmAOMDdALSdUhHc0Bh6Dz6ERKxZi+dFds4a3mhic6nIwyKUPbYQ1\n\t\t\tkyiNfoAlKi81w4C8QJ1CGEamBA9NFYUe0PD0Js8kFX6GepCChBAJgoYOkAfpu56EY6yuufxqxKdn\n\t\t\t7SAgg28igzxEicTUe0AMR0AA53td0GAi5MOgmPCQdasxoSW/FLH5BIE2o4HDalDpddDnHvDY0FG9\n\t\t\tpCKtSqYg5dEa4zPhV844TPYK7QO5A7MAvmGMVIMCPtGxMgA4gNV5gyWy34aEjIk47HVxG3lDqki0\n\t\t\tZgBbgkAMiTKH+WuDDO8BIfws6mW2xVjBhmBwaZPJgFMmDbCgpEMvKUGcxUCQgi74+U3cUJSpkRpk\n\t\t\tb+qBoAiKIU0tEZhATYK8porgOnhFUARFIALREJt9icLYFLXdY7k5Qr836zLrBtCmBSVPRGREapgG\n\t\t\tvc4A8FMCqRKggnnzF112ybUmQ2CyJK0Nq84O0PuJvRCuYQ6CyUB3du9uWBA4sajDpwK5qeR9431L\n\t\t\tpphhUOS9YnkPRAMY2BLXLwmh5iFtMDjBdQ2sREMGbQNHCqXg5z//JQGe4MBAopC0NG2SgRCpAceB\n\t\t\tpMkPYwIxBt/QoY1k8DIw4GGezDeeN2KM8HsArMQN3WTiSZ3l9BjM+hxAas0CJIKU1I8kBs/kIJJx\n\t\t\tw8hOsXbV1h23f/yf39VwNjNQZfB3K/3rgRl2zmYRM0JymBp7w506TA8eEvYNKF1ZPRKt6V4Lfk4M\n\t\t\tnM3GgPiBvQwFCZoSu8Ag4A0CnKlUwYeqFPaZkRRaVbZ7d7Xh2z//gJ8APCCDVz1QMQ2YmjBiwdEa\n\t\t\t2UNd35PKafgrBgy3XKs5t8lYxZxLm8Jmi46R08+2zK4BaGYyTKs/VuJUtVVFHLEzNRXiWKOcjttb\n\t\t\t8+tvffMDzTAfAcNnPvy9z5/zzdxPEBEgxolw3qVsFgDCapT60N39l0YzEYhB5pc6b1GjqXbC3IXj\n\t\t\t+wXu9Hq9LHMxRh6WHE8E/mCafWfQrPcA18BSvBIn8I0SAZ6NPFFdVhOdfE+1e1e5+cBjl737Ey9H\n\t\t\tmGn4b3v1Zy678MbVC4/JfSvGmCj6jBSIhCadSIm1yaueoRm+J8QhzfxKKiQuc6RWV0ba6k8X7Xar\n\t\t\tLgrnacCCNhgeyVtTaP2BbACytAMgDPSSnorga4khoFft2Dm14fRnPeplf/PkNDikYf2Vzz1r5yas\n\t\t\tWHCoRqr76l0bafDgZn3plWFMxMP44Qi1rqKh4m9Q2QMbINVtLIpecJkZZ1krFYNueipBSSkxm6Vi\n\t\t\t9LMcFZj9OWBI7Q6kbaozgOCcq+rKqN64c91f/s2LTnvusc1yUhC34fef9qYszu22Fmqkqiraecsk\n\t\t\tUkq2USg3Y07TwEfVRKqYgZdbUxRBB52DPbWk0uBaBHbOFUVRiflAI35aHvSbfUFVsA+ccQ2FEgOa\n\t\t\tWD7JzGCm4so7d6/78CfPWntCGwwrQQEbrqhe9eI3LBzbrztnYVmpmbF3VSwz+KFXhhq/3oCFdSgj\n\t\t\tvDUYmU6bTbgmLyyJxizLRLVf9kIWQvBV2U8lT0ZDArZPyIVmPU01Ae1T+ROHmqFQFkavKnaWmz75\n\t\t\tpfcuOQQp+5EcfvqV29/7lo+uXHhI27XLqaJScXnOvgWNJo0riAEZTLCDmMnehRGGLqDR0cOaxW5d\n\t\t\t913gKvZDCHkIZtYvpoPzgz7kQDbgZR8q54G8DDVSJKb6JujaEFkJFU965mlLDgJcqoWBs9/9w38/\n\t\t\t9/9bveQQL1nZKzqdFplFFWOBmTaDjo6Smqd9LA36wTCnZe/l0CDTNBFxOGZmgOtafKYxxjzPYyVM\n\t\t\tTRdQI8CPdKwH+iSsvtE9gcECVvLqit29bU9+xqOaWVfwVy/9h5svuWvpnNUkWkmfA/YUPVBOjut+\n\t\t\tzwdUqgwiciASqVU1y1p1VXuXOETTtMlNxScDsUE0hFxiTOWojZSZjWBRId55qos9zpNW7OAG80ia\n\t\t\tAQjgpt7LLAMjZp8tJZkBGJRbaXadeSs09G6AVti2Y+vqA5Z4pUqm8+AJnshJrJjZHKnWzlOMNSHE\n\t\t\tGDtZBrBIv5U0OkBwNn5NIwcws4rFejpzjpwXkdAKRdVnZphnY2jtfGT1e3ZEh2A6uk9rrLgPOOb2\n\t\t\tgTu6eYBU8oRNnbGArcSN19yy6oi1RqAuPvn1sxw1Y9GMdyGN9y4VBhxEVYZio+Rn95Ch8zRlPqU3\n\t\t\tftAc4sx/T3/IG5bNOzTjQJammQEaAwHGOqjrNrvamT2xAZfSUMhAxvO6Cz77L+eiBBmIwBngYQHm\n\t\t\tmjfIgWDoKDJgDGgB2aAkl0clQIA5WADu7dV8nkHbiqxGqNAGMiCDsCEDAsAKQ95uZa0xITIa7nwV\n\t\t\tpDT7qKxZN0Dy7wpDKYX6ki+IWIOPbZlq/fXLzsE0UIIqoG68m6hAApRoYmBmGi1lz5CCaiAiVWmk\n\t\t\tqvmzSTOuBscIMqCGCbiJifk02aCCE0IJVA3JopShmIpkflBzZ5BPmCwxy7IPhqCmLlgznFjjOch9\n\t\t\tdwyyZd2ep570hhNPPmHx8gW19h0BqiLis2yyt+m1b/pDPwY4T9TgFaH4p/efO39sqRSW+ZyIalRE\n\t\t\txsaUmK7IBFZZVdr0S1/7DHJQEeZUUojvuHHnl/71e/PGFsVSRGK3G5yNz+vMb4cMKkMH6sClKjr7\n\t\t\tsIjZd8ZRTITBCjCxMBIepexPhTwEGu/Mad9y8Yb1fmNR9okshFBHjcCeetNfvd03qkhLRAYE11y6\n\t\t\tbtvtNwbpeAWgyjAiVkvxfSPUkL7tOuaRa60CpQgmObCHYNV+877/b79Y2j3AcW6oTUuAx7NFDrU2\n\t\t\tHLzJh5GuGmeM8QA1AKDOtCkIQNwUQiJVwGeOjGIdM58THAm1whiYY4xZCJVg0eqFzSggDbxBajjD\n\t\t\tgQcctWv9zRP5YlSV9742NQKrkTHBg6mU2sgdcuARFACAiEXFsU9L3v2WHOzKeWQUgq/qqZA5idAY\n\t\t\tKcWFmuW/T6FQzKyFZktmPd7mTDNRr+oFZKl8FytDCBHmXBAjx4HJGzkzci6oAs5t3HRnGrXZwwhR\n\t\t\txXkg4prrbg75WFVL3uooDOzADuyJPbFXMHuf5e3rb7wJBlUIwByiNIP61u3bo0UXXBVL9i4VriSX\n\t\t\t6vtBSZVSOea7obkfmAbATCG+NEY3RXoH0eAUJkwuZbaUHEFORHLvTehn31wHBfpggTeHiCt+Pb11\n\t\t\twx6Asizr9/t3C9gOeOzNGf/6/Msn7wRHeAlWsVcg4hPvP6/dHnPBK2kqoafEYiTDWjSj2Zz7xBc0\n\t\t\ty4xZRkaO4JQS00nCuJlRs/iEeYMzghIpkxGxUR6CSGzl4cff/1nLFh527BJEIOLH/3bD373+o8vm\n\t\t\trXVCDtbKWiKSEusoAa5IGWowNlowZ/Gnz/7ykQc+fMmiPK2IPvGuH5/3jfPH20s8t1IwnpkMZOZB\n\t\t\t3CyHKUWXhxG1WU/Unm3iVh5gfpotloKVm4qXbMQ6WG80dZ9BtWTOiwhnEKuLes+OXRvJK7Qe7y7q\n\t\t\ttlZDMoKYiVTSbrdrrVNEjG2QfUYQM1U1Hyd726t6Sq2G2IJ5K5jywGMwr2pm5tI8Lo6ZDRXQMM3R\n\t\t\tSLXsB7YvyABhD8CZUVPKWQixQWURg4xNE9iNwUrsvAHaarX6/T4Fl9HY6iVHiNaZRxVRFzHPcxHz\n\t\t\t3hObpKLHwxrFg2CWI2bybNmi8VYde0SSeV9XxgisqhphRKlTWpMSM7M5NiSf6MCF9wAPyg/cxZpg\n\t\t\tP2yjT5M89EoJlEnsDCltppqeJqJ2aFXGUsK5bl1EIm3nThHNTMScC1VVOdeA4EYp2BlgZhNYJM+d\n\t\t\tuu5rK3eMupbMM6BEzEymKeilZoRhSGbf1hmbdVgKoWaos8oZSLNhle5hxDwVDQYACwAEznlG5pmx\n\t\t\tZ3rae+98q6olhKyOhXGlUHAQU7JsUDY7jTwzBjCQaSR2MApZizhUdWTPnHkxGBtIhGCaUljF0BQm\n\t\t\tTVQFA1/QaO2B2ZJ94OvQphQshkUuGujZADPL6ZUyIxz7qopEFGMMeUbOl3Xlgq9inbXyNCo451LZ\n\t\t\t7NFqwzOPM4iXERsRlWVp5LzPUiqCwtKOy0zMYARuKrsOcCw0qDxzn1Xi/jdlH8BSUml0L02g6u5l\n\t\t\tjRiQQa1dJYHBOTIT5gSstuAdLHrHUkeCJ8AkQam06U7A3nksicrVSQrUOFarMXSJGwguBeuJYGbW\n\t\t\trAkGVQNsUOhnn2QK75v8gN/0SLp3IPfe5H9Yf+feax3e/eL3SCPcN3K/Jek9KEkeNMD9LA8a4H6W\n\t\t\tBw1wP8uDBrif5UED3M/yoAHuZ3nQAPezPGiA+1keNMD9LA8a4H6WBw1wP8uDBrif5UED3M/y/wM8\n\t\t\tbBb9Lo4MIQAAABplWElmTU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAATwHXnAAAAJXRFWHRkYXRl\n\t\t\tOmNyZWF0ZQAyMDIzLTAxLTAyVDA2OjU3OjIwKzAwOjAwFO0BEgAAACV0RVh0ZGF0ZTptb2RpZnkA\n\t\t\tMjAyMy0wMS0wMlQwNjo1NzoyMCswMDowMGWwua4AAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjMt\n\t\t\tMDEtMDJUMDY6NTc6MjArMDA6MDAypZhxAAAAAElFTkSuQmCC"})),"presto-player":(0,t.createElement)("svg",{viewBox:"0 0 128 129",fill:"none",width:"40px",height:"40px",x:"0px",y:"0px",enableBackground:"new 0 0 128 129"},(0,t.createElement)("image",{width:"128px",height:"129px",x:"0",y:"0",href:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACBCAMAAAA/vEJcAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\n\t\t\tAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACZFBMVEX////////////////z\n\t\t\t9f6gtPi6yP23xvhMce9CafBHbvl1kvro7f7P2fpwjfJAZ+6MpPuIoPRegPquv/ygs/ZYevCXrfyU\n\t\t\tqfWsvfjR2v7n7P2jtvz09v58l/NSd/nM1vk6YepFbPZVd/CxwPXL1fgwWOUyWuY+Ze1GbfhDavM6\n\t\t\tYetKbejl6vw2XuhEa/RBaO9+l+4xWeY4YOk9YueYrPJCafE0XOdxjO1Ea/U5YOpDavK+y/c3X+k8\n\t\t\tY+vY3/s/Zu1GbfdXd+pAZ+88VOlwcfOTqfUyTuWDgu8zV+ZPT/BiSvaJd/iHoPQxU+U3OuU6MOWD\n\t\t\tfu9JUe5fS/W3xvkxVuU1ROVcTPSrvPg0RuU5MuU5VehVTfJMUO82POVGUuyfs/czSeU4NeU2Vuc2\n\t\t\tP+VSTvExUOXDz/o2QuVDUus4OOXO1PlScu3g0f11SvZmSva6r/tlVPBFO+U8MuWBSvZ9SvZvSvb/\n\t\t\t/v/X0P1aSe9PRuVMQ+VCOOVuSvbq5/6Tgvk+NOX08/6wpPpsVfdHPeVzSvbOxvx2YPdoSvammfpL\n\t\t\tQuX+/v9xSvZJP+V/bPdBN+V3SvbEu/x9YfedjvlNROWJgu9/Q/KdbPJ2YfdbUuaopPL09P6ARvN9\n\t\t\tPO58Ou2ca/H19P6xpftjS/ZQR+V8devp6PyASPV9Pu/r6P5iS/ZxaurT0fiASfV+QvHY0v13Yfey\n\t\t\trvR9O+6cl/Cnmvp+P/BmXuino/J/RfO7sPt+QfGJePjIxvdsVveGgO19Pe7n3P19P++imPXv5v2U\n\t\t\tYPDOtfiMU++9nfZ8O+2thPTm2vzWwvmkefPWwfkMbt9nAAAAA3RSTlO//kDIl/BQAAAAAWJLR0QA\n\t\t\tiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cBAgcEOBndC74AAAWKSURBVHja7dr5\n\t\t\tVxZVAMZx6r4l71t4W3xbsEWqAQKSMinbF4roktw0sIjKtH3DYAgYykQqK20xiyTglqBggRGV7StF\n\t\t\ttv1T3XF433eWe2fugszpnHd+vec98znn+3DneI4FBXE/IOYnD8gD8oA84P8ISJxwYqyAJYXJ1Ekn\n\t\t\txwYoWgphMpVKnbJQBDlA4lQIHUDqtNMXH5BYVgizAEpYkClIAIrSELoBC9NBGGDH9wNSqTO0CYKA\n\t\t\txJkQsgD6HcQAZxVCDoASzj7mgGx8JkBzCtGA4qUQhgNSqeXnHDNAYhmE0QCNKUQAvPH5AEpQ7BAK\n\t\t\tKFoKoShAdQohgOJzIZQBpM5bvpCAzL0rAVCaAg+wJA2hPCAl/6FmAzjxBQDSU2ACzl8B1QElF1yo\n\t\t\tDbjIKC1TBJRfDCuMyiptgGFcUqYCWFkNKcAwLhUmcAHGZaukASXV9rENMC5frQ0wjNIVUoDyGue4\n\t\t\twvl1pdgUwgCGcUWZMKB8Zea4IvPrK0U6hAPYU2AB1lTDAEBoClEAo/QqAUBJjevYBRDoEAlgTMEP\n\t\t\tKL/ac1zh+XXlNdqAQIekL341DAFEdRACGMa1ZTzAGt/rgwDDWF2lDfB0SHLicwFhUxAFUMJ1AYAv\n\t\t\tPh9ACddrA3JTSHLihwG4U5ABGMaqG3KAEvbruQA6BX2AMwUbcGMNhLIA5hQkAYb9oU7aH12oADCM\n\t\t\tm6q0AXQKNwf/9EQBwSkoAGpvuRWqA+pu0wTU344aQPEdioC1jfhOLUD9uvWIAgC4K60AaGrGWA9Q\n\t\t\tuwEhBwDA3WlZwD0tWA9wbytCOQC3AwdQ14ixFqD+PoQ8ANa/3LmAtfdjrAd4YD0KANhTYACamluw\n\t\t\tHsCJHwQAsLEwGvDgJoy1AJtbEeIBglPwAzLxlQH16xAKAVBCOgTQ9BDGegBXfA7ANwU3wB1fDVDb\n\t\t\tilA0ACQ2MgF1mzDWAmx+GCEhgHsKWcAjjRhrAY7eu6IAAB5NewBNj2GsB3h8A0IygMwUKlz3rgaA\n\t\t\tFT8K4HSwAXVPYKwFyN27UoCjhAr7o4u1AE9y4gsAaIenmluwJuDpZ9rUAVuebe/QBpidz6kBurob\n\t\t\tUI/V+7w2wDQ7X1AAbH2RHvdYltW7TRtgmtwOPEDf9n40D7Cslzq0Aab5cpsEoOuVHc6xA7Csdn0A\n\t\t\tpwMTQOMjL4AzBSkAJbwqBOh7LXecBVjW6x3aANYUAoCdTvwggDUFaYBp7goHdHXv8Bx7AFZvuz7A\n\t\t\tPwUvYGuDz+cFBKagAqCENg7AHZ8DsKw3OrQBninkADu39CMBgGcKqgCzc5cf0NX9JuuvlAVwdVAG\n\t\t\t5KbQwIkfBqCEt7QBpvl2WxbQt70fSQEyHbQAzhQooGs37/UhAHo7d2gD7A4NrntXDmBPQRdACe/s\n\t\t\tQUgRYFnvvqcNGHh/915lwOAHQ5qA4RHyIfho36gSYGz/Af+7JAHjE4RQAAAH93wsD/hkMvguKcDU\n\t\t\tIULmAQB8Oi0JGPyM9S4ZwMAMcQEA4EyBDRj7fAjoAYYnCPECwMEvRgUBjPiSgPEvCQkA7CkIAQ5P\n\t\t\tAqAFmDo0Q5gA2mE6EjD41RDQA3w9QggPAMA3e0MBvPjigFx8NoB2GOUD9k8CoAWY+paQCAAlfMcB\n\t\t\tHP4eAC2ANz4X4JlCj1h8IcDwCCFiAAD2/eADjP14AEQ/YYDxCULEAdkp9IjFjwQw4ocDKGE6C2Df\n\t\t\tuzKAgRkiDXBuZwoYE4gfDhj+iRAVgP2h7uHfu6KAn38hRBFAO/wqFj8MAGZ/UwdIPrz/yvX7XMwA\n\t\t\tAP44EjMAzP55JF4AAH/NxQzgTGExAWCWMYVFBbCmsMgAAP6eixngn0IMAG+HOACU8E/MAFeHuAD0\n\t\t\tdp6LGTA/hRgBzoc6VoA9hZgBAPwbN2BBnzwgD8gD4gccF/NTcHzMz39UZTfnk+OtigAAACV0RVh0\n\t\t\tZGF0ZTpjcmVhdGUAMjAyMy0wMS0wMlQwNzowNDo1NiswMDowMDoO8/UAAAAldEVYdGRhdGU6bW9k\n\t\t\taWZ5ADIwMjMtMDEtMDJUMDc6MDQ6NTYrMDA6MDBLU0tJAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAy\n\t\t\tMDIzLTAxLTAyVDA3OjA0OjU2KzAwOjAwHEZqlgAAAABJRU5ErkJggg=="})),"spectra-logo":(0,t.createElement)("svg",{x:0,y:0,width:160,height:40,viewBox:"0 0 316 70"},(0,t.createElement)("path",{fillRule:"evenodd",d:"M35 70C54.33 70 70 54.33 70 35C70 15.67 54.33 0 35 0C15.67 0 0 15.67 0 35C0 54.33 15.67 70 35 70ZM45.763 45.255C47.7866 43.9757 48.9999 41.8352 49 39.5446C49.0001 36.3616 46.6761 33.5935 43.3799 32.8506L33.504 30.3992C32.573 30.1894 32.3499 29.0415 33.1419 28.5363L40.8361 23.6287C44.4175 21.3443 45.3487 16.7662 42.9159 13.4032C42.6119 12.9828 42.0024 12.8735 41.5547 13.1591L24.1734 24.8834C22.1884 26.1495 21 28.2566 21 30.5098C21 33.6548 23.2961 36.3896 26.5529 37.1236L36.5897 39.6113C37.5228 39.8216 37.744 40.9733 36.948 41.4765L29.1973 46.3764C25.6058 48.6468 24.6544 53.2212 27.0723 56.5936C27.3746 57.0152 27.9835 57.1269 28.4325 56.843L45.763 45.255Z",fill:"#5733FF"}),(0,t.createElement)("path",{d:"M100.898 51.964C97.6317 51.964 94.7238 51.4295 92.1738 50.3605C89.6237 49.2915 87.5658 47.7772 86 45.8174L91.7711 40.9401C93.1132 42.41 94.6343 43.479 96.3343 44.1471C98.0344 44.7707 99.7567 45.0824 101.502 45.0824C102.888 45.0824 104.007 44.7707 104.857 44.1471C105.707 43.5235 106.132 42.655 106.132 41.5414C106.132 40.5615 105.729 39.7821 104.924 39.203C104.119 38.6686 102.195 38.0004 99.1528 37.1987C94.6343 36.0406 91.4356 34.4594 89.5566 32.4551C87.9013 30.6735 87.0737 28.4687 87.0737 25.8408C87.0737 23.7474 87.7 21.9212 88.9527 20.3623C90.2053 18.7588 91.8606 17.5116 93.9185 16.6208C95.9764 15.73 98.2133 15.2846 100.629 15.2846C103.403 15.2846 106.02 15.7746 108.481 16.7545C110.941 17.7343 112.999 19.0706 114.654 20.7631L109.688 26.1748C108.436 25.0168 106.982 24.0591 105.327 23.302C103.716 22.5002 102.217 22.0994 100.83 22.0994C97.6094 22.0994 95.9988 23.2129 95.9988 25.4399C96.0435 26.5089 96.5357 27.3552 97.4751 27.9787C98.3699 28.6023 100.405 29.3372 103.582 30.1835C107.832 31.297 110.829 32.7669 112.574 34.5931C114.095 36.152 114.856 38.2231 114.856 40.8065C114.856 42.9445 114.229 44.8597 112.977 46.5523C111.769 48.2448 110.113 49.5811 108.011 50.561C105.908 51.4963 103.537 51.964 100.898 51.964Z",fill:"black"}),(0,t.createElement)("path",{d:"M119.377 63V16.0195H127.234L128.369 20.2954C129.533 18.8701 131.121 17.6898 133.134 16.7545C135.147 15.8191 137.272 15.3514 139.509 15.3514C142.596 15.3514 145.347 16.1309 147.763 17.6898C150.179 19.2487 152.08 21.409 153.467 24.1705C154.854 26.932 155.547 30.0722 155.547 33.5909C155.547 37.1096 154.854 40.2498 153.467 43.0113C152.08 45.7728 150.179 47.9553 147.763 49.5588C145.347 51.1177 142.596 51.8972 139.509 51.8972C137.406 51.8972 135.371 51.474 133.402 50.6278C131.434 49.737 129.846 48.6234 128.638 47.2872V59.0113L119.377 63ZM137.496 44.0135C140.225 44.0135 142.439 43.0558 144.139 41.1406C145.839 39.1808 146.689 36.6642 146.689 33.5909C146.689 30.5621 145.839 28.0901 144.139 26.1748C142.439 24.215 140.225 23.2351 137.496 23.2351C134.767 23.2351 132.552 24.1928 130.852 26.108C129.152 28.0233 128.302 30.5176 128.302 33.5909C128.302 36.6642 129.152 39.1808 130.852 41.1406C132.552 43.0558 134.767 44.0135 137.496 44.0135Z",fill:"black"}),(0,t.createElement)("path",{d:"M178.26 51.964C174.457 51.964 171.125 51.1845 168.261 49.6256C165.398 48.0667 163.161 45.9287 161.551 43.2117C159.985 40.4947 159.202 37.3769 159.202 33.8581C159.202 30.2058 159.963 26.9988 161.484 24.2373C163.049 21.4312 165.174 19.2265 167.859 17.623C170.588 16.0195 173.719 15.2178 177.254 15.2178C180.43 15.2178 183.271 15.9973 185.776 17.5562C188.326 19.0706 190.295 21.1417 191.681 23.7696C193.113 26.3975 193.784 29.4041 193.695 32.7892L193.627 35.662H168.127C168.619 38.2009 169.827 40.2052 171.751 41.6751C173.719 43.1449 176.202 43.8798 179.2 43.8798C180.81 43.8798 182.264 43.6349 183.562 43.1449C184.904 42.655 186.335 41.7864 187.856 40.5393L192.285 46.6859C190.362 48.3785 188.147 49.6924 185.642 50.6278C183.181 51.5186 180.721 51.964 178.26 51.964ZM177.321 23.1015C172.265 23.1015 169.223 25.3731 168.194 29.9163H184.971V29.649C184.837 27.7338 184.031 26.1748 182.555 24.9722C181.123 23.7251 179.379 23.1015 177.321 23.1015Z",fill:"black"}),(0,t.createElement)("path",{d:"M214.829 51.964C211.473 51.964 208.454 51.1623 205.769 49.5588C203.13 47.9553 201.027 45.7728 199.461 43.0113C197.94 40.2498 197.18 37.1096 197.18 33.5909C197.18 30.1167 197.94 26.9988 199.461 24.2373C201.027 21.4758 203.13 19.2933 205.769 17.6898C208.454 16.0863 211.473 15.2846 214.829 15.2846C218.005 15.2846 220.891 15.8636 223.485 17.0217C226.125 18.1798 228.183 19.8055 229.659 21.8989L224.626 27.9119C223.687 26.6202 222.389 25.529 220.734 24.6382C219.079 23.7028 217.401 23.2351 215.701 23.2351C213.822 23.2351 212.145 23.7028 210.668 24.6382C209.237 25.529 208.096 26.7539 207.246 28.3128C206.441 29.8717 206.038 31.6311 206.038 33.5909C206.038 35.5507 206.463 37.3101 207.313 38.869C208.163 40.4279 209.326 41.6751 210.802 42.6104C212.279 43.5012 213.934 43.9466 215.768 43.9466C217.513 43.9466 219.124 43.568 220.6 42.8108C222.076 42.0091 223.418 40.8956 224.626 39.4703L229.659 45.4833C228.138 47.4431 226.035 49.0243 223.351 50.2269C220.667 51.385 217.826 51.964 214.829 51.964Z",fill:"black"}),(0,t.createElement)("path",{d:"M241.975 51.2959C237.557 51.2959 233.975 47.7142 233.975 43.2959V24.2373V16.0195V10.9887L243.102 7V16.0195H250V24.2373H243.102V41C243.102 42.1046 243.997 43 245.102 43H250V51.2959H241.975Z",fill:"black"}),(0,t.createElement)("path",{d:"M255.355 51.2959V16.0195H263.212L264.347 21.8321C265.511 19.9169 267.032 18.3579 268.911 17.1553C270.834 15.9082 272.848 15.2846 274.95 15.2846C275.755 15.2846 276.494 15.3514 277.165 15.485C277.88 15.5741 278.484 15.7077 278.977 15.8859L276.494 25.9076C276.001 25.6403 275.375 25.4176 274.615 25.2395C273.854 25.0613 273.094 24.9722 272.333 24.9722C270.141 24.9722 268.284 25.7294 266.763 27.2438C265.287 28.7137 264.549 30.5844 264.549 32.856V51.2959H255.355Z",fill:"black"}),(0,t.createElement)("path",{d:"M295.398 51.964C292.446 51.964 289.784 51.1623 287.413 49.5588C285.042 47.9553 283.14 45.7728 281.709 43.0113C280.322 40.2498 279.628 37.1096 279.628 33.5909C279.628 29.9831 280.322 26.8207 281.709 24.1037C283.14 21.3422 285.064 19.1819 287.48 17.623C289.94 16.0641 292.714 15.2846 295.801 15.2846C298.306 15.2846 300.498 15.7968 302.377 16.8213C304.256 17.8012 305.755 19.0928 306.874 20.6963V16.0195H316V51.2959H307.808L306.806 46.5523C305.554 48.1112 303.921 49.4029 301.908 50.4273C299.939 51.4518 297.77 51.964 295.398 51.964ZM297.881 44.0135C300.61 44.0135 302.825 43.0558 304.525 41.1406C306.225 39.2253 307.075 36.7088 307.075 33.5909C307.075 30.473 306.225 27.9565 304.525 26.0412C302.825 24.126 300.61 23.1683 297.881 23.1683C295.197 23.1683 293.005 24.126 291.305 26.0412C289.65 27.9565 288.822 30.473 288.822 33.5909C288.822 36.7088 289.65 39.2253 291.305 41.1406C293.005 43.0558 295.197 44.0135 297.881 44.0135Z",fill:"black"}))};(0,t.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 36 36"},(0,t.createElement)("path",{fill:"#DD2E44",d:"M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"}));const hn=wp.hooks.applyFilters("astra_dashboard.changelog_products",[{name:"Astra Theme",value:"astra-theme"}]);var An=()=>{const[n,r]=(0,e.useState)(!1),[a,i]=(0,e.useState)("astra-theme"),[s,o]=(0,e.useState)(astra_admin.astra_changelog_data);return(0,t.createElement)(e.Fragment,null,(0,t.createElement)("button",{onClick:()=>r(!0),title:(0,Yt.__)("What's New?","astra"),className:"w-8 sm:w-10 h-8 sm:h-10 flex items-center whitespace-nowrap justify-center cursor-pointer rounded-full border border-slate-200"},mn.horn),(0,t.createElement)(he.Root,{show:n,as:e.Fragment},(0,t.createElement)(pn,{as:"div",className:"fixed inset-0 overflow-hidden",onClose:r},(0,t.createElement)("div",{className:"absolute inset-0 overflow-hidden"},(0,t.createElement)(pn.Overlay,{className:"absolute inset-0"}),(0,t.createElement)("div",{className:"fixed inset-y-0 right-0 pl-10 max-w-full flex sm:mt-[2rem] ast-changelog-popup-wrap"},(0,t.createElement)(he.Child,{as:e.Fragment,enter:"transform transition ease-in-out duration-150 sm:duration-150",enterFrom:"translate-x-full",enterTo:"translate-x-0",leave:"transform transition ease-in-out duration-300 sm:duration-300",leaveFrom:"translate-x-0",leaveTo:"translate-x-full"},(0,t.createElement)("div",{className:"w-screen max-w-md shadow-overlay-left"},(0,t.createElement)("div",{className:"h-full flex flex-col bg-white shadow-xl"},(0,t.createElement)("div",{className:"px-4 sm:px-6 h-16 shadow flex items-center justify-between z-50"},(0,t.createElement)(pn.Title,{className:"text-lg font-medium text-gray-900"}," ",(0,Yt.__)("What's New?","astra")," "),(0,t.createElement)("div",{className:"flex items-center"},(0,t.createElement)("button",{type:"button",className:"bg-white rounded-md text-gray-400 hover:text-gray-500 focus:outline-none",onClick:()=>r(!1)},(0,t.createElement)(vn,{className:"h-6 w-6","aria-hidden":"true"})))),astra_admin.pro_available&&(0,t.createElement)("div",{className:"block"},(0,t.createElement)("div",{className:"border-b border-gray-200"},(0,t.createElement)("nav",{className:"-mb-px flex space-x-8 px-6","aria-label":"Tabs"},hn.map((e=>(0,t.createElement)("button",{key:e.name,className:(a===e.value?"border-astra text-astra":"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300")+"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twhitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm",onClick:()=>{return t=e.value,i(t),void o("astra-pro"===t?astra_addon_admin.astra_pro_changelog_data:astra_admin.astra_changelog_data);var t}},e.name)))))),(0,t.createElement)("div",{className:"relative flex-1 overflow-y-auto"},(0,t.createElement)("div",{className:"relative grid bg-white divide-y divide-gray-200"},s.map(((e,n)=>{const r=s[n].title,a=s[n].description,i=97===e.product?"https://wpastra.com/product/astra-theme/?utm_source=wp&utm_medium=dashboard":"https://wpastra.com/product/astra-pro-addon/?utm_source=wp&utm_medium=dashboard",o=s[n].date;return(0,t.createElement)("a",{key:r,href:i,className:"px-6 py-5 block rounded-[0.2rem] transition ease-in-out duration-150",target:"_blank",rel:"noreferrer noopener"},(0,t.createElement)("p",{className:"text-sm mb-1 font-medium text-slate-800",dangerouslySetInnerHTML:{__html:r}}),(0,t.createElement)("p",{className:"text-xs text-slate-500",dangerouslySetInnerHTML:{__html:o}}),(0,t.createElement)("p",{className:"mt-3 astra-changelog-description",dangerouslySetInnerHTML:{__html:a}}))}))))))))))))},bn=n(653),gn=n=>{let{item:r}=n;const[a,i]=(0,e.useState)(!1),s=astra_admin.astra_docs_data.docs.filter((t=>t.category.includes(r[0])));return(0,t.createElement)("div",{className:"py-5 border-t border-slate-200"},(0,t.createElement)("button",{onClick:()=>{i(!a)},className:"w-full flex justify-between items-center"},(0,t.createElement)("div",{className:"flex items-center"},mn.bookmark,(0,t.createElement)("h4",{className:"text-base font-medium leading-[1.625rem] text-slate-800 ml-2"},(0,bn.ZP)(r[1].name))),(0,t.createElement)("div",{className:` ${a?"rotate-0":"-rotate-90"} transition-rotate duration-300 ease-in-out`},mn.expand)),a&&(0,t.createElement)("div",{className:"mt-5"},(0,t.createElement)("div",{className:"space-y-1 mb-5"},s.splice(0,5).map(((e,n)=>(0,t.createElement)("a",{href:e.url+"?utm_source=dashboard&utm_medium=free-theme&utm_campaign=knowledge",target:"_blank",className:"flex items-center justify-between text-slate-800 rounded-md p-2 pl-0 hover:bg-gray-50 group cursor-pointer focus:outline-0",key:n},(0,t.createElement)("div",{className:"flex items-center ast-kb-caret"},(0,t.createElement)("span",null,mn.caret),(0,t.createElement)("div",{className:"text-base leading-[1.625rem] text-slate-800 ml-2"},(0,bn.ZP)(e.title))),(0,t.createElement)("div",{className:"text-slate-600 invisible group-hover:visible"},mn.redirect))))),(0,t.createElement)("a",{href:`https://wpastra.com/docs-category/${r[0]}/?utm_source=dashboard&utm_medium=free-theme&utm_campaign=knowledge`,target:"_blank",className:"text-base font-medium leading-4 text-astra flex items-center"},(0,t.createElement)("span",{className:"mr-2"},`View all ${(0,bn.ZP)(r[1].name)} docs`),mn.redirect)))},yn=n=>{let{item:r}=n;const[a,i]=(0,e.useState)(!1),s=Object.entries(astra_admin.astra_docs_data.categories).map((t=>t[1].subcategories));return(0,t.createElement)("div",{className:"py-5 border-t border-slate-200"},(0,t.createElement)("button",{onClick:()=>{i(!a)},className:"w-full flex justify-between items-center"},(0,t.createElement)("div",{className:"flex items-center"},mn.bookmark,(0,t.createElement)("h4",{className:"text-base font-medium leading-[1.625rem] text-slate-800 ml-2"},(0,bn.ZP)(r[1].name))),(0,t.createElement)("div",{className:` ${a?"rotate-0":"-rotate-90"} transition-rotate duration-300 ease-in-out`},mn.expand)),a&&(0,t.createElement)("div",{className:"mt-5"},(0,t.createElement)("div",{className:"space-y-1 mb-5"},s.splice(0,5).map(((e,n)=>{return"colors-background-pro"in e&&(r=e,Object.entries(r).map(((e,n)=>n<5&&(0,t.createElement)("a",{href:`https://wpastra.com/docs-category/astra-pro-modules/${e[0]}?utm_source=wp&utm_medium=dashboard`,target:"_blank",className:"flex items-center justify-between text-slate-800 rounded-md p-2 pl-0 hover:bg-gray-50 group cursor-pointer focus:outline-0",key:n},(0,t.createElement)("div",{className:"flex items-center ast-kb-caret"},(0,t.createElement)("span",null,mn.caret),(0,t.createElement)("div",{className:"text-base leading-[1.625rem] text-slate-800 ml-2"},(0,bn.ZP)(e[1].name))),(0,t.createElement)("div",{className:"text-slate-600 invisible group-hover:visible"},mn.redirect)))));var r}))),(0,t.createElement)("a",{href:`https://wpastra.com/docs-category/${r[0]}/?utm_source=wp&utm_medium=dashboard`,target:"_blank",className:"text-base font-medium leading-4 text-astra flex items-center"},(0,t.createElement)("span",{className:"mr-2"},`View all ${(0,bn.ZP)(r[1].name)} categories`),mn.redirect)))},xn=window.wp.apiFetch,wn=n.n(xn),En=()=>(0,t.createElement)("div",{className:"relative flex bg-blue-50 py-5 pl-4 pr-10 border border-sky-500 rounded-md"},(0,t.createElement)("div",{className:"mr-3"},mn.checkbadge),(0,t.createElement)("div",null,(0,t.createElement)("h4",{className:"text-base font-semibold leading-5 text-slate-800 mb-1.5"},(0,Yt.__)("Upgrade to Astra Pro","astra")),(0,t.createElement)("p",{className:"text-sm text-slate-600 mb-3"},(0,Yt.__)("Get access to powerful features for painless WordPress designing, without the high costs. With all the time you will save, it’s a product that pays for itself!","astra")),(0,t.createElement)("button",{onClick:t=>{if(astra_admin.pro_installed_status){const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init","astra-addon/astra-addon.php"),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((t=>{t.success&&window.open(astra_admin.astra_base_url,"_self")}))}else window.open(astra_admin.upgrade_url,"_blank")},className:"text-sm text-astra text-medium"},astra_admin.pro_installed_status?(0,Yt.__)("Activate Now →","astra"):(0,Yt.__)("Upgrade Now →","astra"))),(0,t.createElement)("div",{className:"absolute top-4 right-4 leading-[1rem] font-medium text-[0.625rem] text-white bg-slate-800 rounded-[0.1875rem] py-[0rem] px-1.5"},(0,Yt.__)("PRO","astra"))),Xn=e=>{let{data:n}=e;return(0,t.createElement)("div",null,n&&n.map(((e,n)=>(0,t.createElement)("a",{href:e.url+"?utm_source=dashboard&utm_medium=free-theme&utm_campaign=knowledge",target:"blank",className:"flex items-center justify-between text-slate-800 rounded-md p-2 pl-0 hover:bg-gray-50 group cursor-pointer",key:n},(0,t.createElement)("div",{className:"flex items-center ast-kb-caret"},mn.caret,(0,t.createElement)("div",{className:"text-base leading-[1.625rem] text-slate-800 ml-2"},(0,bn.ZP)(e.title))),(0,t.createElement)("div",{className:"text-slate-600 invisible group-hover:visible"},mn.redirect)))))},Rn=n=>{let{setOpen:r}=n;const[a,i]=(0,e.useState)(""),[s,o]=(0,e.useState)(null);return(0,e.useEffect)((()=>{!function(){if(""===a)o(null);else{const t=astra_admin.astra_docs_data.docs.filter((t=>t.title.toLowerCase().includes(a)));o(t)}}()}),[a]),(0,t.createElement)("main",{className:"bg-white"},(0,t.createElement)("div",{className:""},(0,t.createElement)("h1",{className:"sr-only"}," ",(0,Yt.__)("Welcome to KB Docs","astra")," "),(0,t.createElement)("div",{className:"w-full flex justify-between items-center bg-gray-50 py-5 px-6"},(0,t.createElement)("a",{href:astra_admin.astra_base_url,className:"flex-shrink-0 flex items-center ast-box-shadow-none"},(0,t.createElement)("img",{className:"lg:block mr-3 h-[2.6rem] w-auto ast-box-shadow-none",src:astra_admin.logo_url,alt:"Workflow"})),(0,t.createElement)("div",{className:"max-w-5xl mx-auto w-full relative"},(0,t.createElement)("input",{type:"search",placeholder:(0,Yt.__)("Search","astra"),className:"w-full ast-docs-search-fields text-base",onChange:t=>i(t.target.value)}),(0,t.createElement)("div",{className:"absolute top-1/2 -translate-y-1/2 left-4"},a?mn.close:mn.search)),(0,t.createElement)("div",null,(0,t.createElement)("button",{onClick:()=>r(!1)},mn.popupclose))),(0,t.createElement)("div",{className:"sm:max-w-5xl mx-auto w-full flex flex-col"},(0,t.createElement)("div",{className:"flex flex-col lg:flex-row gap-8 pt-10"},(0,t.createElement)("div",{className:"w-full px-6 lg:px-0 lg:w-2/3 mb-5"},s&&s.length>0&&(0,t.createElement)("div",{className:"mb-8"},(0,t.createElement)(Xn,{data:s})),Object.entries(astra_admin.astra_docs_data.categories).map(((e,n)=>function(e,n){return astra_admin.astra_docs_data.docs.filter((t=>t.category.includes(e[0]))).length?(0,t.createElement)(gn,{item:e,key:n}):"astra-pro-modules"===e[0]?(0,t.createElement)(yn,{item:e,key:n}):""}(e,n))),!astra_admin.pro_available&&astra_admin.upgrade_notice&&(0,t.createElement)("div",{className:"mt-10"},(0,t.createElement)(En,null))),(0,t.createElement)("div",{className:"w-full px-6 lg:px-0 lg:w-1/3"},(0,t.createElement)("section",{"aria-labelledby":"section-2-title"},(0,t.createElement)("h2",{className:"sr-only",id:"section-2-title"},(0,Yt.__)("Pro Support","astra")),(0,t.createElement)("div",{className:"relative box-border border border-sky-500 rounded-md bg-white shadow-sm overflow-hidden transition hover:shadow-hover mb-5"},(0,t.createElement)("div",{className:"p-6"},mn.support,(0,t.createElement)("div",{className:"absolute top-7 right-6 text-[0.625rem] leading-[1rem] text-white bg-slate-800 font-medium rounded-[0.1875rem] py-[0rem] px-1.5 self-start"},(0,Yt.__)("PRO","astra")),(0,t.createElement)("h3",{className:"relative flex items-center text-slate-800 text-base font-medium pb-2 mt-4"},(0,t.createElement)("span",{className:"flex-1"},(0,Yt.__)("Priority Support","astra"))),(0,t.createElement)("p",{className:"text-slate-500 text-sm pb-5 pr-12"},(0,Yt.__)("We aim to answer all priority support requests within 2-3 hours.","astra")),(0,t.createElement)("a",{className:"text-sm text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",href:"https://wpastra.com/support/?utm_source=dashboard&utm_medium=free-theme&utm_campaign=priority-support",target:"_blank",rel:"noreferrer"},(0,Yt.__)("Learn More →","astra"))))),(0,t.createElement)("section",{"aria-labelledby":"section-2-title"},(0,t.createElement)("h2",{className:"sr-only",id:"section-2-title"},(0,Yt.__)("View Documentation","astra")),(0,t.createElement)("div",{className:"box-border rounded-md bg-white border border-slate-200 shadow-sm overflow-hidden transition hover:shadow-hover mb-5"},(0,t.createElement)("div",{className:"p-6"},mn.book,(0,t.createElement)("h3",{className:"text-slate-800 text-base font-medium pb-2 mt-4"},(0,Yt.__)("View Documentation","astra")),(0,t.createElement)("p",{className:"text-slate-500 text-sm pb-5"},(0,Yt.__)(`Browse documentation, reference material, and tutorials for ${astra_admin.theme_name} Theme.`,"astra")),(0,t.createElement)("a",{className:"flex items-center text-sm text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",href:"https://wpastra.com/docs/?utm_source=dashboard&utm_medium=free-theme&utm_campaign=knowledge",target:"_blank",rel:"noreferrer"},(0,t.createElement)("span",{className:"mr-2"},(0,Yt.__)("View All Documentation","astra")),mn.redirect)))))))))},Ln=()=>{const[n,r]=(0,e.useState)(!1),a=astra_admin.astra_docs_data;return(0,t.createElement)("div",null,(0,t.createElement)("button",{onClick:()=>{a?r(!0):window.open("https://wpastra.com/docs/","_blank")},className:"text-xs sm:text-sm font-medium sm:leading-[0.875rem] text-slate-600"},(0,Yt.__)("Knowledge Base","astra")),a&&(0,t.createElement)(he.Root,{show:n,as:e.Fragment},(0,t.createElement)(pn,{as:"div",className:"relative z-10",onClose:r},(0,t.createElement)("div",{className:"fixed inset-0 top-8 z-10 overflow-y-auto ast-kb-section"},(0,t.createElement)("div",{className:"flex min-h-screen h-full items-end justify-center p-4 text-center sm:items-center sm:p-0 ast-kb-inner-wrap"},(0,t.createElement)(he.Child,{as:e.Fragment,enter:"ease-out duration-300",enterFrom:"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",enterTo:"opacity-100 translate-y-0 sm:scale-100",leave:"ease-in duration-200",leaveFrom:"opacity-100 translate-y-0 sm:scale-100",leaveTo:"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"},(0,t.createElement)(pn.Panel,{className:"relative transform bg-white text-left transition-all min-h-screen w-full h-full lg:ml-40"},(0,t.createElement)(Rn,{setOpen:r}))))))))};function Vn(){var n;let r=[];r=astra_admin.is_whitelabel?[{name:(0,Yt.__)("Welcome","astra"),slug:astra_admin.home_slug,path:""},{name:(0,Yt.__)("Settings","astra"),slug:astra_admin.home_slug,path:"settings"},{name:(0,Yt.__)("Free vs Pro","astra"),slug:astra_admin.home_slug,path:"free-vs-pro"}]:[{name:(0,Yt.__)("Welcome","astra"),slug:astra_admin.home_slug,path:""},{name:(0,Yt.__)("Settings","astra"),slug:astra_admin.home_slug,path:"settings"},{name:astra_admin.starter_templates_data.title,slug:astra_admin.home_slug,path:"starter-templates"},{name:(0,Yt.__)("Free vs Pro","astra"),slug:astra_admin.home_slug,path:"free-vs-pro"}];const a=wp.hooks.applyFilters("astra_dashboard.main_navigation",r),i=new URLSearchParams(null===(n=Ft())||void 0===n?void 0:n.search),s=i.get("page")?i.get("page"):astra_admin.home_slug,o=i.get("path")?i.get("path"):"";return"spectra"===o?(0,t.createElement)(e.Fragment,null):(0,t.createElement)($,{as:"nav",className:"bg-white border-b border-slate-200"},(0,t.createElement)("div",{className:"max-w-3xl mx-auto px-3 sm:px-6 lg:max-w-full"},(0,t.createElement)("div",{className:"relative flex flex-col lg:flex-row justify-between h-28 lg:h-16 py-3 lg:py-0"},(0,t.createElement)("div",{className:"lg:flex-1 flex items-start justify-center sm:items-stretch sm:justify-start"},(0,t.createElement)("a",{href:astra_admin.astra_base_url,className:"flex-shrink-0 flex items-center"},(0,t.createElement)("img",{className:"lg:block h-[2.6rem] w-auto",src:astra_admin.logo_url,alt:"Workflow"})),(0,t.createElement)("div",{className:"ml-4 sm:ml-8 sm:flex gap-y-4 gap-x-8"},a.map(((n,r)=>(0,t.createElement)(e.Fragment,{key:`?page=${n.slug}&path=${n.path}`},"starter-templates"===n.path&&astra_admin.starter_templates_data.is_available?(0,t.createElement)("a",{index:r,href:astra_admin.starter_templates_data.redirection,target:"_self",className:s===n.slug&&o===n.path?"mb-4 sm:mb-0 border-astra text-astra active:text-astra focus:text-astra focus-visible:text-astra-hover hover:text-astra-hover inline-flex items-center px-1 border-b-2 text-sm leading-[0.875rem] font-medium":"mb-4 sm:mb-0 border-transparent text-slate-500 active:text-astra focus-visible:border-slate-300 focus-visible:text-slate-800 hover:border-slate-300 hover:text-slate-800 inline-flex items-center px-1 border-b-2 text-sm leading-[0.875rem] font-medium"},n.name):(0,t.createElement)(kt,{index:r,to:{pathname:"admin.php",search:`?page=${n.slug}${""!==n.path?"&path="+n.path:""}`},className:s===n.slug&&o===n.path?"mb-4 sm:mb-0 border-astra text-astra active:text-astra focus:text-astra focus-visible:text-astra-hover hover:text-astra-hover inline-flex items-center px-1 border-b-2 text-sm leading-[0.875rem] font-medium":"mb-4 sm:mb-0 border-transparent text-slate-600 active:text-astra focus-visible:border-slate-300 focus-visible:text-slate-800 hover:border-slate-300 hover:text-slate-800 inline-flex items-center px-1 border-b-2 text-sm leading-[0.875rem] font-medium"},n.name)))))),astra_admin.show_self_branding&&(0,t.createElement)("div",{className:"absolute bottom-2 lg:inset-y-0 right-0 flex items-center pr-2 sm:static sm:inset-auto ml-auto lg:ml-6 sm:pr-0"},(0,t.createElement)("div",{className:"text-sm font-medium leading-6 text-slate-600 pr-3 tablet:pr-2 border-r"},(0,t.createElement)(Ln,null)),(0,t.createElement)("div",{className:"flex items-center text-[0.625rem] sm:text-sm font-medium leading-[1.375rem] text-slate-400 mr-1 sm:mr-3 divide-x divide-slate-200 gap-3 pl-1 sm:pl-3"},(0,t.createElement)("div",{className:"flex items-center"},(0,t.createElement)("span",null,astra_admin.version),(0,t.createElement)("span",{className:"ml-1 sm:ml-2 text-[0.625rem] leading-[1rem] font-medium border border-slate-400 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5"}," ",(0,Yt.__)("CORE","astra")," ")),astra_admin.pro_available&&(0,t.createElement)("div",{className:"flex items-center pl-3"},(0,t.createElement)("span",null,astra_admin.plugin_ver),(0,t.createElement)("span",{className:"ml-1 sm:ml-2 text-[0.625rem] leading-[1rem] font-medium text-white border border-slate-800 bg-slate-800 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5"}," ",(0,Yt.__)("PRO","astra")," ")),wp.hooks.applyFilters("astra_dashboard.after_navigation_version",(0,t.createElement)("span",null))),(0,t.createElement)(An,null)),!astra_admin.show_self_branding&&(0,t.createElement)("div",{className:"absolute inset-y-0 right-0 flex items-center pr-2 sm:static sm:inset-auto sm:ml-6 sm:pr-0"},(0,t.createElement)("div",{className:"flex items-center whitespace-nowrap text-sm font-medium leading-[1.375rem] text-slate-400 mr-8 divide-x divide-slate-200 gap-3"},(0,t.createElement)("div",{className:"flex items-center"},(0,t.createElement)("span",null,astra_admin.version),(0,t.createElement)("span",{className:"ml-1 sm:ml-2 text-[0.625rem] leading-[1rem] font-medium border border-slate-400 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5"}," ",(0,Yt.__)("CORE","astra")," ")),astra_admin.pro_available&&(0,t.createElement)("div",{className:"flex items-center pl-3"},(0,t.createElement)("span",null,astra_admin.plugin_ver),(0,t.createElement)("span",{className:"ml-1 sm:ml-2 text-[0.625rem] leading-[1rem] font-medium text-white border border-slate-800 bg-slate-800 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5"}," ",(0,Yt.__)("PRO","astra")," ")),wp.hooks.applyFilters("astra_dashboard.after_navigation_version",(0,t.createElement)("span",null)))))))}const zn=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter(Boolean).join(" ")};var Nn=()=>{const e=astra_admin.quick_settings,n=Object.entries(e).map((e=>{let[n,r]=e;return(0,t.createElement)("div",{key:n,"data-redirection":r.quick_url,onClick:()=>{return t=r.quick_url,void window.open(t,"_blank");var t},className:zn(r.isPro?"bg-slate-50":"bg-white","box-border relative border rounded-md cursor-pointer h-20 px-3 py-3 flex items-start gap-x-4 snap-start hover:shadow-md transition astra-icon-transition group")},(0,t.createElement)("div",{className:"flex-1 min-w-0"},(0,t.createElement)("div",{className:"text-base font-medium text-slate-800 leading-7"},r.title),(0,t.createElement)("a",{className:zn(r.isPro?"pointer-events-none":"","focus:text-slate-400 text-slate-400 text-base truncate leading-[1.625rem] focus-visible:text-slate-400-hover active:text-astra-hover group-hover:text-astra-hover"),href:r.quick_url,rel:"noreferrer",target:"_blank"},(0,Yt.__)("Customize","astra"))),(0,t.createElement)("div",{className:"relative inline-flex flex-shrink-0 py-0.5 px-1 text-[0.625rem] leading-[0.7rem] text-gray-50 rounded-[0.1875rem] group-hover:text-slate-300"},mn.customize))}));return(0,t.createElement)("div",{className:"grid grid-flow-row auto-rows-min grid-cols-1 gap-4 sm:grid-cols-3 pt-6"},n)};let Pn=(0,e.createContext)(null);function On(){let t=(0,e.useContext)(Pn);if(null===t){let t=new Error("You used a <Label /> component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,On),t}return t}let qn=p((function(t,e){let{passive:n=!1,...r}=t,a=On(),i=`headlessui-label-${z()}`,s=w(e);A((()=>a.register(i)),[i,a.register]);let o={ref:s,...a.props,id:i};return n&&("onClick"in o&&delete o.onClick,"onClick"in r&&delete r.onClick),c({ourProps:o,theirProps:r,slot:a.slot||{},defaultTag:"label",name:a.name||"Label"})})),Wn=(0,e.createContext)(null);Wn.displayName="GroupContext";let Tn=e.Fragment,Cn=p((function(t,n){let{checked:r,defaultChecked:a=!1,onChange:i,name:s,value:o,...l}=t,u=`headlessui-switch-${z()}`,d=(0,e.useContext)(Wn),f=(0,e.useRef)(null),p=w(f,n,null===d?null:d.setSwitch),[m,h]=function(t,n,r){let[a,i]=(0,e.useState)(r),s=void 0!==t;return[s?t:a,g((t=>(s||i(t),null==n?void 0:n(t))))]}(r,i,a),A=g((()=>null==h?void 0:h(!m))),b=g((t=>{if(P(t.currentTarget))return t.preventDefault();t.preventDefault(),A()})),y=g((t=>{t.key===N.Space?(t.preventDefault(),A()):t.key===N.Enter&&function(t){var e;let n=null!=(e=null==t?void 0:t.form)?e:t.closest("form");if(n)for(let t of n.elements)if("INPUT"===t.tagName&&"submit"===t.type||"BUTTON"===t.tagName&&"submit"===t.type||"INPUT"===t.nodeName&&"image"===t.type)return void t.click()}(t.currentTarget)})),x=g((t=>t.preventDefault())),E=(0,e.useMemo)((()=>({checked:m})),[m]),X={id:u,ref:p,role:"switch",type:I(t,f),tabIndex:0,"aria-checked":m,"aria-labelledby":null==d?void 0:d.labelledby,"aria-describedby":null==d?void 0:d.describedby,onClick:b,onKeyUp:y,onKeyPress:x};return e.createElement(e.Fragment,null,null!=s&&m&&e.createElement(be,{features:Ae.Hidden,...v({as:"input",type:"checkbox",hidden:!0,readOnly:!0,checked:m,name:s,value:o})}),c({ourProps:X,theirProps:l,slot:E,defaultTag:"button",name:"Switch"}))})),In=Object.assign(Cn,{Group:function(t){let[n,r]=(0,e.useState)(null),[a,i]=function(){let[t,n]=(0,e.useState)([]);return[t.length>0?t.join(" "):void 0,(0,e.useMemo)((()=>function(t){let r=g((t=>(n((e=>[...e,t])),()=>n((e=>{let n=e.slice(),r=n.indexOf(t);return-1!==r&&n.splice(r,1),n}))))),a=(0,e.useMemo)((()=>({register:r,slot:t.slot,name:t.name,props:t.props})),[r,t.slot,t.name,t.props]);return e.createElement(Pn.Provider,{value:a},t.children)}),[n])]}(),[s,o]=Ue(),l=(0,e.useMemo)((()=>({switch:n,setSwitch:r,labelledby:a,describedby:s})),[n,r,a,s]),u=t;return e.createElement(o,{name:"Switch.Description"},e.createElement(i,{name:"Switch.Label",props:{onClick(){!n||(n.click(),n.focus({preventScroll:!0}))}}},e.createElement(Wn.Provider,{value:l},c({ourProps:{},theirProps:u,defaultTag:Tn,name:"Switch.Group"}))))},Label:qn,Description:Ke});var Fn=()=>(0,t.createElement)("div",{className:"absolute right-2.5 -top-[1.75rem] opacity-0 group-hover:opacity-100 invisible group-hover:visible transition-opacity duration-300 ease-in-out"},(0,t.createElement)("div",{id:"tooltip-top",role:"tooltip",className:"inline-block z-10 px-2.5 py-1.5 text-[0.75rem] leading-[1rem] text-white bg-slate-800 rounded-sm shadow-sm opacity-1 tooltip"},(0,Yt.__)("This option only available on Astra Pro.","astra")),(0,t.createElement)("div",{className:"ml-auto w-2 h-2 flex -mt-1 rotate-45 bg-slate-800 mr-4 overflow-hidden"})),jn=r().createContext(null),Sn=function(t){t()},Hn=function(){return Sn},Dn={notify:function(){},get:function(){return[]}};function Zn(t,e){var n,r=Dn;function a(){s.onStateChange&&s.onStateChange()}function i(){n||(n=e?e.addNestedSub(a):t.subscribe(a),r=function(){var t=Hn(),e=null,n=null;return{clear:function(){e=null,n=null},notify:function(){t((function(){for(var t=e;t;)t.callback(),t=t.next}))},get:function(){for(var t=[],n=e;n;)t.push(n),n=n.next;return t},subscribe:function(t){var r=!0,a=n={callback:t,next:null,prev:n};return a.prev?a.prev.next=a:e=a,function(){r&&null!==e&&(r=!1,a.next?a.next.prev=a.prev:n=a.prev,a.prev?a.prev.next=a.next:e=a.next)}}}}())}var s={addNestedSub:function(t){return i(),r.subscribe(t)},notifyNestedSubs:function(){r.notify()},handleChangeWrapper:a,isSubscribed:function(){return Boolean(n)},trySubscribe:i,tryUnsubscribe:function(){n&&(n(),n=void 0,r.clear(),r=Dn)},getListeners:function(){return r}};return s}var Mn="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?e.useLayoutEffect:e.useEffect;function kn(){return(0,e.useContext)(jn)}function Bn(t){void 0===t&&(t=jn);var n=t===jn?kn:function(){return(0,e.useContext)(t)};return function(){return n().store}}n(9864);var Gn=Bn();function Yn(t){void 0===t&&(t=jn);var e=t===jn?Gn:Bn(t);return function(){return e().dispatch}}var Un=Yn(),Kn=function(t,e){return t===e};function Jn(t){void 0===t&&(t=jn);var n=t===jn?kn:function(){return(0,e.useContext)(t)};return function(t,r){void 0===r&&(r=Kn);var a=n(),i=function(t,n,r,a){var i,s=(0,e.useReducer)((function(t){return t+1}),0),o=s[1],l=(0,e.useMemo)((function(){return Zn(r,a)}),[r,a]),u=(0,e.useRef)(),c=(0,e.useRef)(),d=(0,e.useRef)(),f=(0,e.useRef)(),p=r.getState();try{if(t!==c.current||p!==d.current||u.current){var v=t(p);i=void 0!==f.current&&n(v,f.current)?f.current:v}else i=f.current}catch(t){throw u.current&&(t.message+="\nThe error may be correlated with this previous error:\n"+u.current.stack+"\n\n"),t}return Mn((function(){c.current=t,d.current=p,f.current=i,u.current=void 0})),Mn((function(){function t(){try{var t=r.getState();if(t===d.current)return;var e=c.current(t);if(n(e,f.current))return;f.current=e,d.current=t}catch(t){u.current=t}o()}return l.onStateChange=t,l.trySubscribe(),t(),function(){return l.tryUnsubscribe()}}),[r,l]),i}(t,r,a.store,a.subscription);return(0,e.useDebugValue)(i),i}}var Qn,$n=Jn();Qn=a.unstable_batchedUpdates,Sn=Qn;const tr=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter(Boolean).join(" ")};var er=e=>{const{title:n,title_url:r,links:a,condition:i=!0,deprecated:s=!1}=e.moduleInfo,o=e.slug,l=Un(),u=$n((t=>t.blocksStatuses)),c=!(!u||void 0===u[o]||o!=u[o]);function d(t,e){return t||!astra_admin.pro_available?e:"text-[#CBD5E1] "+e}return(0,t.createElement)("div",{key:o,className:tr(astra_admin.pro_available&&i?`bg-white ${function(t,e){return t||"white-label"===e?"ast-addon-active":"ast-addon-inactive"}(c,o)} `:tr(astra_admin.pro_available?"":"group","bg-slate-50"),"box-border relative border rounded-md h-20 z-0 px-4 py-3 flex items-start gap-x-4 snap-start hover:shadow-md transition astra-icon-transition")},(0,t.createElement)("div",{className:"flex-1 min-w-0"},(0,t.createElement)("div",{className:`flex items-center text-base font-medium leading-7 ${function(t){return t||!astra_admin.pro_available?"text-slate-800":"text-[#475569]"}(i)}`},n,s&&(0,t.createElement)("div",{className:"inline-block align-top max-h-4 px-1.5 py-1 ml-1.5 text-[10px] leading-[10px] border border-slate-200 text-slate-400 rounded"},(0,Yt.__)("Legacy","astra")),(0,t.createElement)("div",{className:"group"},astra_admin.pro_available&&!i&&(0,t.createElement)("span",{className:"group inline-block align-middle ml-1 leading-none opacity-30 text-base dashicons dashicons-info"}),astra_admin.pro_available&&!i&&(0,t.createElement)("div",{className:"w-max max-w-[17.125rem] absolute -top-[2.8rem] left-4 rounded-[0.1875rem] z-10 opacity-0 group-hover:opacity-100 invisible group-hover:visible transition-opacity duration-300 ease-in-out"},(0,t.createElement)("div",{id:"pro-tooltip-top",role:"tooltip",className:"text-left inline-block z-10 h-fit px-2.5 py-1.5 text-[0.75rem] leading-[1rem] text-white bg-slate-800 rounded-sm shadow-sm opacity-1 tooltip"},(0,Yt.__)(`${n} plugin needs to be installed / activated to enable this module.`,"astra")),(0,t.createElement)("div",{className:"ml-8 mr-auto w-2 h-2 flex -mt-1 rotate-45 bg-slate-800 overflow-hidden"})))),a.map((e=>(0,t.createElement)("a",{key:Math.floor(1e5*Math.random()),className:tr(d(i,e.link_class),astra_admin.pro_available&&!i?"focus-visible:text-slate-500 active:text-slate-500 focus:text-slate-400 text-slate-400 text-base truncate pointer-events-none":"focus-visible:text-slate-500 active:text-slate-500 focus:text-slate-400 text-slate-400 text-base truncate"),href:e.link_url,target:e.target_blank?"_blank":"_self",rel:"noreferrer"},e.link_text)))),(0,t.createElement)("div",{className:tr(astra_admin.pro_available?"self-center":"text-[0.625rem] leading-[1rem] font-medium text-white bg-slate-800 border border-slate-800 rounded-[0.1875rem]",astra_admin.pro_available&&!i?"relative inline-flex flex-shrink-0 py-[0rem] px-1.5 opacity-30 pointer-events-none":"relative inline-flex flex-shrink-0 py-[0rem] px-1.5")},!astra_admin.pro_available&&(0,Yt.__)("PRO","astra"),astra_admin.pro_available&&"white-label"!==o&&(0,t.createElement)(In,{checked:c,onChange:()=>{let t=!1,e=o,n=c?"deactivate":"activate";c||(t=o);const r={...u};r[o]=t,l({type:"UPDATE_BLOCK_STATUSES",payload:r});const a=new window.FormData;a.append("action","astra_addon_update_module_status"),a.append("security",astra_addon_admin.update_nonce),a.append("module_status",n),a.append("module_id",e),wn()({url:astra_admin.ajax_url,method:"POST",body:a}).then((t=>{if(t.success){l({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:"activate"===n?(0,Yt.__)("Successfully Activated!","astra"):(0,Yt.__)("Successfully Deactivated!","astra")});const t=new window.FormData;t.append("action","astra_refresh_assets_files"),t.append("security",astra_addon_admin.update_nonce),wn()({url:astra_admin.ajax_url,method:"POST",body:t}).then((t=>{"advanced-hooks"===o&&location.reload()}))}}))},className:tr(c?"bg-astra":"bg-slate-200","group relative inline-flex h-4 w-9 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-astra focus:ring-offset-2")},(0,t.createElement)("span",{"aria-hidden":"true",className:"pointer-events-none absolute h-full w-full rounded-md bg-white"}),(0,t.createElement)("span",{"aria-hidden":"true",className:tr(c?"bg-astra":"bg-gray-200","pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out")}),(0,t.createElement)("span",{"aria-hidden":"true",className:tr(c?"translate-x-5":"translate-x-0","toggle-bubble pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out")}))),!astra_admin.pro_available&&(0,t.createElement)(Fn,null))},nr=()=>{const e=astra_admin.extensions,n=Object.entries(e).map((e=>{let[n,r]=e;return(0,t.createElement)(er,{key:n,slug:n,moduleInfo:r})}));return(0,t.createElement)("div",{className:"grid grid-flow-row auto-rows-min grid-cols-1 gap-4 sm:grid-cols-2 pt-6"},n)},rr=()=>{const e=t=>{let e=t.target.dataset.action;const r=new window.FormData;switch(e){case"astra_recommended_plugin_activate":n(t);break;case"astra_recommended_plugin_install":r.append("action","astra_recommended_plugin_install"),r.append("_ajax_nonce",astra_admin.plugin_installer_nonce),r.append("slug",t.target.dataset.slug),t.target.innerText=astra_admin.plugin_installing_text,wn()({url:astra_admin.ajax_url,method:"POST",body:r}).then((e=>{e.success&&(t.target.innerText=astra_admin.plugin_installed_text,n(t))}))}},n=t=>{const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init",t.target.dataset.init),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((e=>{t.target.className="",t.target.className="text-[#4AB866] pointer-events-none capitalize text-sm leading-[0.875rem] font-medium rounded-md",t.target.innerText=astra_admin.plugin_activated_text,window.location=t.target.dataset.redirection}))};return(0,t.createElement)("div",null,astra_admin.useful_plugins.map(((n,r)=>{return(0,t.createElement)("div",{className:("activated"===n.status?"":"hover:bg-[#F8FAFC] hover:shadow-hover")+" flex justify-between items-start p-4 border-t border-slate-200 bg-white transition ",key:r},(0,t.createElement)("div",{className:"flex"},(0,t.createElement)("div",null,n.logoPath.internal_icon&&mn[n.logoPath.icon_path],!n.logoPath.internal_icon&&(0,t.createElement)("img",{src:n.logoPath.icon_path,width:"40px",height:"40px"})),(0,t.createElement)("div",{className:"ml-2.5"},(0,t.createElement)("div",{className:"text-sm leading-[1.375rem] font-medium text-slate-800"},n.title),(0,t.createElement)("p",{className:"text-sm leading-[1.375rem] text-slate-400"},n.subtitle))),(0,t.createElement)("button",{"data-slug":n.slug,"data-init":n.path,"data-redirection":n.redirection,"data-action":(i=n.status,"activated"===i?"":"installed"===i?"astra_recommended_plugin_activate":"astra_recommended_plugin_install"),className:` ${a=n.status,"activated"===a?"text-[#4AB866] pointer-events-none":"text-astra"} p-0 m-0 capitalize text-sm leading-4 font-medium cursor-pointer`,onClick:e},"installed"==n.status?astra_admin.plugin_activate_text:n.status));var a,i})))};const ar=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter(Boolean).join(" ")};var ir=()=>{const e=t=>{let e=t.target.dataset.action;const r=new window.FormData;switch(e){case"astra_recommended_plugin_activate":n(t);break;case"astra_recommended_plugin_install":r.append("action","astra_recommended_plugin_install"),r.append("_ajax_nonce",astra_admin.plugin_installer_nonce),r.append("slug",t.target.dataset.slug),t.target.innerText=astra_admin.plugin_installing_text,wn()({url:astra_admin.ajax_url,method:"POST",body:r}).then((e=>{e.success&&(t.target.innerText=astra_admin.plugin_installed_text,n(t))}))}},n=t=>{const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init",t.target.dataset.init),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((e=>{e.success&&(t.target.className="",t.target.className="text-[#4AB866] pointer-events-none capitalize mt-3 text-sm leading-[0.875rem] font-medium rounded-md py-[0.5625rem]",t.target.innerText=astra_admin.plugin_activated_text,window.location=t.target.dataset.redirection)}))},r=astra_admin.integrations.map(((n,r)=>{return(0,t.createElement)("div",{key:r,className:ar(n.isPro?"bg-slate-50":"bg-white","box-border relative border rounded-md px-5 py-4 flex items-start gap-x-4 snap-start")},(0,t.createElement)("div",{className:"flex flex-col"},(0,t.createElement)("div",{className:"flex justify-between"},(0,t.createElement)("div",null,n.logoPath.internal_icon&&mn[n.logoPath.icon_path],!n.logoPath.internal_icon&&(0,t.createElement)("img",{src:n.logoPath.icon_path,width:"40px",height:"40px"})),(0,t.createElement)("div",null,n.isPro?(0,t.createElement)("span",null,(0,Yt.__)("Pro","astra")):(0,t.createElement)("span",{className:"text-astra uppercase text-[0.625rem] leading-[0.0625rem] font-semibold bg-blue-50 px-1 pt-0.5 pb-[0.1875rem] rounded-[0.1875rem]"},(0,Yt.__)("Free","astra")))),(0,t.createElement)("div",{className:"mt-2"},(0,t.createElement)("div",{className:"text-base leading-[1.625rem] font-medium text-slate-800"},n.title),(0,t.createElement)("p",{className:"text-sm leading-[1.375rem] text-slate-400 mt-[0.1875rem]"},n.subtitle),(0,t.createElement)("button",{"data-slug":n.slug,"data-redirection":n.redirection,"data-action":(i=n.status,"activated"===i?"":"installed"===i?"astra_recommended_plugin_activate":"astra_recommended_plugin_install"),"data-init":n.path,onClick:e,className:` ${a=n.status,"activated"===a?"text-[#4AB866] pointer-events-none":"text-astra bg-slate-50 px-[0.8125rem]"} capitalize mt-3 text-sm leading-[0.875rem] font-medium rounded-md py-[0.5625rem]`},"installed"==n.status?astra_admin.plugin_activate_text:n.status))));var a,i}));return(0,t.createElement)("div",{className:"grid grid-flow-row auto-rows-min grid-cols-1 gap-4 sm:grid-cols-3 pt-6"},r)},sr=()=>{const e=Un(),n=$n((t=>t.blocksStatuses));return(0,t.createElement)("span",{className:"z-0 flex shadow-sm rounded-[0.2rem] sm:justify-center w-fit sm:w-auto"},(0,t.createElement)("button",{type:"button",className:"focus:bg-indigo-50 focus:text-slate-500 focus-visible:text-astra hover:bg-indigo-50 hover:text-astra -ml-px relative inline-flex items-center px-4 py-2 border border-slate-200 bg-white text-sm font-medium text-slate-500 focus:z-10 focus:outline-none rounded-l-md transition",onClick:()=>{const t={...n};for(const e in n)t[e]=e;e({type:"UPDATE_BLOCK_STATUSES",payload:t});const r=new window.FormData;r.append("action","astra_addon_bulk_activate_modules"),r.append("security",astra_addon_admin.update_nonce),wn()({url:astra_admin.ajax_url,method:"POST",body:r}).then((t=>{if(t.success){e({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Successfully Activated!","astra")});const t=new window.FormData;t.append("action","astra_refresh_assets_files"),t.append("security",astra_addon_admin.update_nonce),wn()({url:astra_admin.ajax_url,method:"POST",body:t}).then((t=>{e({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Cache Cleared!","astra")}),location.reload()}))}}))}},(0,Yt.__)("Activate all","astra")),(0,t.createElement)("button",{type:"button",className:"focus:bg-indigo-50 focus:text-slate-500 focus-visible:text-astra hover:bg-indigo-50 hover:text-astra -ml-px relative inline-flex items-center px-4 py-2 border border-slate-200 bg-white text-sm font-medium text-slate-500 focus:z-10 focus:outline-none rounded-r-md transition",onClick:()=>{const t={...n};for(const e in n)t[e]="";e({type:"UPDATE_BLOCK_STATUSES",payload:t});const r=new window.FormData;r.append("action","astra_addon_bulk_deactivate_modules"),r.append("security",astra_addon_admin.update_nonce),wn()({url:astra_admin.ajax_url,method:"POST",body:r}).then((t=>{if(t.success){e({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Successfully Deactivated!","astra")});const t=new window.FormData;t.append("action","astra_refresh_assets_files"),t.append("security",astra_addon_admin.update_nonce),wn()({url:astra_admin.ajax_url,method:"POST",body:t}).then((t=>{e({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Cache Cleared!","astra")}),location.reload()}))}}))}},(0,Yt.__)("Deactivate all","astra")))},or=n=>{let{allowAutoPlay:r,videoPopup:a,toggleVideoPopup:i}=n;return(0,t.createElement)(he.Root,{show:a,as:e.Fragment},(0,t.createElement)(pn,{as:"div",className:"relative z-[10000]",onClick:i,onClose:i},(0,t.createElement)(he.Child,{as:e.Fragment,enter:"ease-out duration-300",enterFrom:"opacity-0",enterTo:"opacity-100",leave:"ease-in duration-200",leaveFrom:"opacity-100",leaveTo:"opacity-0"},(0,t.createElement)("div",{className:"fixed inset-0 bg-slate-800 bg-opacity-90 transition-opacity"})),(0,t.createElement)("div",{className:"fixed inset-0 z-[10000] overflow-y-auto"},(0,t.createElement)("div",{className:"flex min-h-full justify-center p-4 text-center items-center lg:p-0"},(0,t.createElement)(he.Child,{as:e.Fragment,enter:"ease-out duration-300",enterFrom:"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",enterTo:"opacity-100 translate-y-0 sm:scale-100",leave:"ease-in duration-200",leaveFrom:"opacity-100 translate-y-0 sm:scale-100",leaveTo:"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"},(0,t.createElement)("div",{className:"relative w-[24rem] md:w-[34rem] lg:w-[60rem] h-[14rem] md:h-[19rem] lg:h-[34rem]"},(0,t.createElement)("iframe",{className:"absolute inset-0 w-full h-full border-0 rounded-md",src:`https://www.youtube-nocookie.com/embed/TBZd9oligCw?showinfo=0&autoplay=${a?1:0}&rel=0`,allow:"autoplay",title:"YouTube video player",frameBorder:"0",allowFullScreen:!0})))))))};const lr=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter(Boolean).join(" ")};var ur=()=>{var n;const r=new URLSearchParams(null===(n=Ft())||void 0===n?void 0:n.search),a=!!astra_admin.show_banner_video,i="1"===r.get("astra-activation-redirect")?1:0,[s,o]=(0,e.useState)(!1),l=()=>{o(!s)};return(0,t.createElement)("main",{className:"py-[2.43rem]"},(0,t.createElement)("div",{className:"max-w-3xl mx-auto px-6 lg:max-w-7xl"},(0,t.createElement)("h1",{className:"sr-only"}," Astra "),astra_admin.show_self_branding&&(0,t.createElement)("div",{className:"grid grid-cols-1 gap-4 items-start lg:grid-cols-5 lg:gap-0 xl:gap-0 rounded-md bg-white overflow-hidden shadow-sm px-8 py-8"},(0,t.createElement)("div",{className:"grid grid-cols-1 gap-4 lg:col-span-3 h-full md:mr-[5.25rem]"},(0,t.createElement)("section",{"aria-labelledby":"section-1-title h-full"},(0,t.createElement)("h2",{className:"sr-only",id:"section-1-title"},"Welcome Banner"),(0,t.createElement)("div",{className:"flex flex-col justify-center h-full"},(0,t.createElement)("div",{className:""},(0,t.createElement)("p",{className:"pb-4 font-medium text-base text-slate-800"},(0,Yt.__)("Hello ","astra")+astra_admin.current_user+","),(0,t.createElement)("div",{className:"flex"},(0,t.createElement)("h2",{className:"text-slate-800 text-[2rem] leading-10 pb-3 font-semibold text-left"},(0,Yt.__)(`Welcome to ${astra_admin.theme_name}`,"astra")),astra_admin.pro_available?(0,t.createElement)("span",{className:"ml-2 h-full inline-flex leading-[1rem] font-medium flex-shrink-0 py-[0rem] px-1.5 text-[0.625rem] text-white bg-slate-800 border border-slate-800 rounded-[0.1875rem] -tablet:mt:10"},(0,Yt.__)("PRO","astra")):(0,t.createElement)("span",{className:"ml-2 h-full inline-flex leading-[1rem] flex-shrink-0 py-[0rem] px-1.5 text-[0.625rem] text-astra bg-blue-50 border border-blue-50 rounded-[0.1875rem] font-medium -tablet:mt:10"},(0,Yt.__)("FREE","astra"))),(0,t.createElement)("p",{className:"text-base leading-[1.625rem] text-slate-600 pb-7"},(0,Yt.__)(`${astra_admin.theme_name} is fast, fully customizable & beautiful WordPress theme suitable for blog, personal portfolio, business website and WooCommerce storefront. It is very lightweight and offers unparalleled speed.`,"astra")),(0,t.createElement)("span",{className:"relative z-0 inline-flex flex-col sm:flex-row justify-start w-full"},(0,t.createElement)("button",{type:"button",className:"sm:inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover focus:outline-none mr-4 mb-2 sm:mb-0",onClick:()=>{window.open(astra_admin.customize_url,"_self")}},(0,Yt.__)("Start Customising","astra")),a&&(0,t.createElement)("button",{className:"inline-flex items-center text-base font-medium text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover",onClick:l},(0,t.createElement)("span",{className:"pt-0.5 pl-4 pr-3"}," ",mn.play," "),(0,Yt.__)("Watch the Quick Starter Guide","astra"))))))),(0,t.createElement)("div",{className:"grid grid-cols-1 gap-4 lg:col-span-2 h-full"},(0,t.createElement)("div",{className:"astra-video-container"},a&&(0,t.createElement)("iframe",{className:"astra-video rounded-md",src:`https://www.youtube-nocookie.com/embed/TBZd9oligCw?showinfo=0&autoplay=${i}&mute=${i}&rel=0`,allow:"autoplay",title:"YouTube video player",frameBorder:"0",allowFullScreen:!0})))),(0,t.createElement)("div",{className:"grid grid-cols-1 gap-[32px] items-start lg:grid-cols-3 lg:gap-[32px] xl:gap-[32px] mt-[32px]"},(0,t.createElement)("div",{className:lr(astra_admin.show_self_branding?"lg:col-span-2":"lg:col-span-3","grid grid-cols-1 gap-[32px]")},(0,t.createElement)("section",{"aria-labelledby":"section-1-title h-full"},(0,t.createElement)("h2",{className:"sr-only",id:"section-1-title"},"Quick Links"),(0,t.createElement)("div",{className:"p-[2rem] rounded-md bg-white overflow-hidden shadow-sm flex flex-col justify-center h-full"},(0,t.createElement)("div",{className:"relative w-full flex items-center justify-between"},(0,t.createElement)("span",{className:"font-semibold text-xl leading-6 text-slate-800"}," ",(0,Yt.__)("Quick Settings","astra")," "),(0,t.createElement)("a",{className:"lg:flex-shrink-0 text-sm font-medium text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",href:astra_admin.customize_url,target:"_self",rel:"noreferrer"},(0,Yt.__)("Go to Customizer","astra"))),(0,t.createElement)(Nn,null))),(0,t.createElement)("section",{"aria-labelledby":"section-1-title h-full"},(0,t.createElement)("h2",{className:"sr-only",id:"section-1-title"},"Do more with Astra Pro Modules"),(0,t.createElement)("div",{className:"p-[2rem] rounded-md bg-white overflow-hidden shadow-sm flex flex-col justify-center h-full"},(0,t.createElement)("div",{className:"relative w-full flex flex-col sm:flex-row sm:items-center sm:justify-between"},(0,t.createElement)("span",{className:"font-semibold text-xl leading-6 text-slate-800 mb-4 sm:mb-0"},astra_admin.pro_available?(0,Yt.__)(`${astra_admin.plugin_name} Modules`,"astra"):(0,Yt.__)(`Do more with ${astra_admin.plugin_name} Modules`,"astra")),astra_admin.pro_available&&(0,t.createElement)(sr,null),!astra_admin.pro_available&&(0,t.createElement)("a",{className:"lg:flex-shrink-0 text-sm font-medium text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",href:astra_admin.upgrade_url,target:"_blank",rel:"noreferrer",onClick:t=>{if(t.preventDefault(),t.stopPropagation(),astra_admin.pro_installed_status){const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init","astra-addon/astra-addon.php"),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((t=>{t.success&&window.open(astra_admin.astra_base_url,"_self")}))}else window.open(astra_admin.upgrade_url,"_blank")}}," ",astra_admin.pro_installed_status?(0,Yt.__)("Activate Now","astra"):(0,Yt.__)("Upgrade Now","astra")," ")),wp.hooks.applyFilters("astra_dashboard.pro_extensions",(0,t.createElement)(nr,null)))),astra_admin.show_plugins&&astra_admin.show_self_branding&&(0,t.createElement)("section",{"aria-labelledby":"section-1-title h-full"},(0,t.createElement)("h2",{className:"sr-only",id:"section-1-title"},"Astra Integrations"),(0,t.createElement)("div",{className:"p-[2rem] rounded-md bg-white overflow-hidden shadow-sm flex flex-col justify-center h-full"},(0,t.createElement)("div",{className:"relative w-full lg:flex lg:items-center lg:justify-between"},(0,t.createElement)("span",{className:"font-semibold text-xl leading-6 text-slate-800"}," ",(0,Yt.__)(`${astra_admin.theme_name} Integrations`,"astra")," ")),(0,t.createElement)(ir,null))),(0,t.createElement)("section",{"aria-labelledby":"section-1-title h-full"},(0,t.createElement)("h2",{className:"sr-only",id:"section-1-title"},"Your License"),(0,t.createElement)("div",{className:"ast-welcome-screen rounded-md bg-white overflow-hidden shadow-sm flex flex-col justify-center h-full"},wp.hooks.applyFilters("astra_dashboard.welcome_screen_after_integrations",(0,t.createElement)("span",null))))),astra_admin.show_self_branding&&(0,t.createElement)("div",{className:"grid grid-cols-1 gap-[32px]"},astra_admin.show_plugins&&(0,t.createElement)("section",{"aria-labelledby":"section-2-title"},(0,t.createElement)("h2",{className:"sr-only",id:"section-2-title"},"Useful Plugins"),(0,t.createElement)("div",{className:"box-border rounded-md shadow-sm overflow-hidden"},(0,t.createElement)("div",{className:""},(0,t.createElement)("h3",{className:"text-slate-800 text-base font-semibold leading-5 tracking-[0.0125rem] bg-white pt-6 pl-6 pb-4"},(0,Yt.__)("Useful Plugins","astra")),(0,t.createElement)(rr,null)))),(0,t.createElement)("section",{"aria-labelledby":"section-2-title"},(0,t.createElement)("h2",{className:"sr-only",id:"section-2-title"},"Section title"),(0,t.createElement)("div",{className:"relative box-border border border-sky-500 rounded-md bg-white shadow-sm overflow-hidden transition hover:shadow-hover"},(0,t.createElement)("div",{className:"p-6"},(0,t.createElement)("h3",{className:"relative flex items-center text-slate-800 text-base font-semibold pb-2"},(0,t.createElement)("span",{className:"flex-1"},(0,Yt.__)("Priority Support","astra")),(0,t.createElement)("span",{className:"text-[0.625rem] leading-[1rem] font-medium text-white bg-slate-800 border border-slate-800 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5 self-start"},(0,Yt.__)("PRO","astra"))),(0,t.createElement)("p",{className:"text-slate-500 text-sm pb-5 pr-12"},(0,Yt.__)("We aim to answer all priority support requests within 2-3 hours.","astra")),(0,t.createElement)("a",{className:"text-sm text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",href:"https://wpastra.com/support/?utm_source=dashboard&utm_medium=free-theme&utm_campaign=priority-support",target:"_blank",rel:"noreferrer"},(0,Yt.__)("Learn More →","astra"))))),(0,t.createElement)("section",{"aria-labelledby":"section-2-title"},(0,t.createElement)("h2",{className:"sr-only",id:"section-2-title"},"Section title"),(0,t.createElement)("div",{className:"box-border rounded-md bg-white shadow-sm overflow-hidden transition hover:shadow-hover"},(0,t.createElement)("div",{className:"p-6"},(0,t.createElement)("h3",{className:"text-slate-800 text-base font-semibold pb-2"},(0,Yt.__)("Join the Community","astra")),(0,t.createElement)("p",{className:"text-slate-500 text-sm pb-5"},(0,Yt.__)("Got a question about the plugin, want to share your awesome project or just say hi? Join our wonderful community!","astra")),(0,t.createElement)("a",{className:"text-sm text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",href:"https://www.facebook.com/groups/wpastra",target:"_blank",rel:"noreferrer"},(0,Yt.__)("Join Now →","astra"))))),(0,t.createElement)("section",{"aria-labelledby":"section-2-title"},(0,t.createElement)("h2",{className:"sr-only",id:"section-2-title"},"Section title"),(0,t.createElement)("div",{className:"box-border rounded-md bg-white shadow-sm overflow-hidden transition hover:shadow-hover"},(0,t.createElement)("div",{className:"p-6"},(0,t.createElement)("h3",{className:"text-slate-800 text-base font-semibold pb-2"},(0,Yt.__)("Rate Us","astra")),(0,t.createElement)("p",{className:"text-slate-500 text-sm pb-2.5 pr-12 flex items-center"},(0,t.createElement)("span",{className:"text-xl text-slate-800 flex mr-2"},[1,2,3,4,5].map(((e,n)=>(0,t.createElement)("svg",{key:n,width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,t.createElement)("g",{clipPath:"url(#clip0_2358_55923)"},(0,t.createElement)("path",{d:"M9.04894 2.92705C9.3483 2.00574 10.6517 2.00574 10.9511 2.92705L12.0206 6.21885C12.1545 6.63087 12.5385 6.90983 12.9717 6.90983H16.4329C17.4016 6.90983 17.8044 8.14945 17.0207 8.71885L14.2205 10.7533C13.87 11.0079 13.7234 11.4593 13.8572 11.8713L14.9268 15.1631C15.2261 16.0844 14.1717 16.8506 13.388 16.2812L10.5878 14.2467C10.2373 13.9921 9.7627 13.9921 9.41221 14.2467L6.61204 16.2812C5.82833 16.8506 4.77385 16.0844 5.0732 15.1631L6.14277 11.8713C6.27665 11.4593 6.12999 11.0079 5.7795 10.7533L2.97933 8.71885C2.19562 8.14945 2.59839 6.90983 3.56712 6.90983H7.02832C7.46154 6.90983 7.8455 6.63087 7.97937 6.21885L9.04894 2.92705Z",fill:"#334155"})),(0,t.createElement)("defs",null,(0,t.createElement)("clipPath",{id:"clip0_2358_55923"},(0,t.createElement)("rect",{width:"20",height:"20",fill:"white"}))))))),(0,t.createElement)("span",{className:"text-xs leading-4 align-text-bottom text-slate-400"}," ",(0,Yt.__)("Based on 5k+ reviews","astra")," ")),(0,t.createElement)("p",{className:"text-slate-500 text-sm pb-5"},(0,Yt.__)("We love to hear from you, we would appreciate every single review.","astra")),(0,t.createElement)("a",{className:"text-sm text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",href:"https://wordpress.org/support/theme/astra/reviews/?rate=5#new-post",target:"_blank",rel:"noreferrer"},(0,Yt.__)("Submit a Review →","astra")))))))),a&&(0,t.createElement)(or,{allowAutoPlay:i,videoPopup:s,toggleVideoPopup:l}))};const cr=[{name:(0,Yt.__)("24/7 Premium Support","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Access To Pro Updates","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("CSS File Generation For Speed Optimization","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("White Label","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Page Background Styling","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Sidebar Designing Styles","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Colors and Backgrounds","astra"),free:(0,Yt.__)("Limited Features","astra"),pro:(0,Yt.__)("All Features","astra")},{name:(0,Yt.__)("Typography","astra"),free:(0,Yt.__)("Limited Features","astra"),pro:(0,Yt.__)("All Features","astra")},{name:(0,Yt.__)("Spacing","astra"),free:(0,Yt.__)("Limited Features","astra"),pro:(0,Yt.__)("All Features","astra")},{name:(0,Yt.__)("Full Width Site Layout","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Max Width Site Layout","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Padded Site Layout","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Fluid Site Layout","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Multiple Page Headers","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Custom Header","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Custom Footer","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Custom 404 Page","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Hooks Support to Add Custom Code","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Sticky When Scroll Up","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Shrink When Scroll Up","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Hide Sticky When Scroll Down","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Sticky Header Animations","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Mega Menu","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Multiple HTML Elements","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Multiple Button Elements","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Divider Elements","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Color & Typography Options","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Archive Page - Post Content Layouts","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Archive Page - Post Grid Control","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Archive Page - Post Readtime Meta Option","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Single Post Page - Post Readtime Meta Option\t","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Single Post Page - Author Info Box","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Single Post Page - Post Navigation Visibility Control","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Breadcrumbs Shortcode","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("Search Box Shortcode","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("WooCommerce Mini-Cart Shortcode","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("EDD Mini-Cart Shortcode","astra"),free:"no",pro:"yes"},{name:(0,Yt.__)("WooCommerce","astra"),free:(0,Yt.__)("Limited Features","astra"),pro:(0,Yt.__)("All Features","astra")},{name:(0,Yt.__)("LifterLMS","astra"),free:(0,Yt.__)("Limited Features","astra"),pro:(0,Yt.__)("All Features","astra")},{name:(0,Yt.__)("LearnDash","astra"),free:(0,Yt.__)("Limited Features","astra"),pro:(0,Yt.__)("All Features","astra")},{name:(0,Yt.__)("Easy Digital Downloads","astra"),free:(0,Yt.__)("Limited Features","astra"),pro:(0,Yt.__)("All Features","astra")}];var dr=()=>{const e=t=>"yes"===t?mn.check:"no"===t?mn.xclose:t,n=()=>astra_admin.pro_installed_status?(0,Yt.__)("Activate Now","astra"):(0,Yt.__)("Upgrade Now","astra"),r=()=>{window.open(astra_admin.upgrade_url,"_blank")},a=t=>{if(astra_admin.pro_installed_status){const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init","astra-addon/astra-addon.php"),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((t=>{t.success&&window.open(astra_admin.astra_base_url,"_self")}))}else r()};return(0,t.createElement)("main",{className:"py-[2.43rem]"},(0,t.createElement)("div",{className:"max-w-3xl mx-auto px-6 lg:max-w-7xl"},(0,t.createElement)("h1",{className:"sr-only"}," ",(0,Yt.__)("Astra Free Vs Pro","astra")," "),(0,t.createElement)("div",{className:"flex flex-row justify-between items-center"},(0,t.createElement)("h2",{className:"text-lg sm:text-2xl font-semibold capitalize"},(0,Yt.__)("Astra Free vs Pro","astra")),(0,t.createElement)("button",{onClick:a,className:"inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover focus:outline-none"},n())),(0,t.createElement)("div",{className:"mt-8 flex flex-col"},(0,t.createElement)("div",{className:"-my-2 -mx-4 overflow-x-auto sm:-mx-6 lg:-mx-8"},(0,t.createElement)("div",{className:"inline-block min-w-full py-2 align-middle md:px-6 lg:px-8"},(0,t.createElement)("div",{className:"overflow-hidden shadow-overlay-light md:rounded-lg"},(0,t.createElement)("table",{className:"min-w-full divide-y divide-slate-200"},(0,t.createElement)("thead",{className:"bg-white"},(0,t.createElement)("tr",null,(0,t.createElement)("th",{scope:"col",className:"py-3.5 pl-4 pr-3 text-left text-base font-medium text-slate-800 sm:pl-8"},(0,Yt.__)("Features","astra")),(0,t.createElement)("th",{scope:"col",className:"px-3 py-3.5 text-center text-base font-medium text-slate-800"},(0,Yt.__)("Free","astra")),(0,t.createElement)("th",{scope:"col",className:"px-3 py-3.5 text-center text-base font-medium text-slate-800"},(0,Yt.__)("Pro","astra")))),(0,t.createElement)("tbody",{className:"divide-y divide-slate-200 bg-white"},cr.map(((n,r)=>(0,t.createElement)("tr",{key:r},(0,t.createElement)("td",{className:"whitespace-nowrap py-4 pl-4 pr-3 text-base text-slate-600 sm:pl-8"},n.name),(0,t.createElement)("td",{className:"whitespace-nowrap capitalize px-3 py-4 text-base text-center text-slate-600"},(0,t.createElement)("div",{className:"flex justify-center font-medium"},e(n.free))),(0,t.createElement)("td",{className:"whitespace-nowrap capitalize px-3 py-4 text-base text-center text-slate-600"},(0,t.createElement)("div",{className:"flex justify-center font-medium"},e(n.pro)))))))),(0,t.createElement)("div",{className:"flex items-center justify-center text-astra hover:text-astra-hover text-base font-medium text-center bg-white py-4 border-t border-t-slate-200"},(0,t.createElement)("button",{onClick:r,className:"flex items-center justify-center"},(0,t.createElement)("span",{className:"mr-2"},(0,Yt.__)("See all Astra Pro features","astra")),mn.redirect)))))),(0,t.createElement)("section",{className:"mt-6 py-10 flex flex-col bg-slate-200 items-center justify-center shadow-overlay-light rounded-md"},(0,t.createElement)("div",{className:"mb-3"},(0,t.createElement)("span",{className:"ml-1 sm:ml-2 text-[0.625rem] leading-[1rem] font-medium text-white border border-slate-800 bg-slate-800 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5"},(0,Yt.__)("PRO","astra"))),(0,t.createElement)("h4",{className:"text-2xl font-semibold text-slate-800 mb-3"},(0,Yt.__)("Do More with Astra Pro","astra")),(0,t.createElement)("div",{className:"max-w-2xl text-center text-base text-slate-600 mb-7"},(0,Yt.__)("Get access to powerful features for painless WordPress designing, without the high costs. With all the time you will save, it’s a product that pays for itself!","astra")),(0,t.createElement)("button",{onClick:a,className:"inline-flex items-center px-4 py-2 border border-transparent text-base font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover focus:outline-none"},n()))))},fr={"fonts-performance":(0,t.createElement)("svg",{className:"flex-shrink-0 mr-4 stroke-inherit",width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,t.createElement)("path",{d:"M9 3V1M9 3C7.89543 3 7 3.89543 7 5C7 6.10457 7.89543 7 9 7M9 3C10.1046 3 11 3.89543 11 5C11 6.10457 10.1046 7 9 7M3 15C4.10457 15 5 14.1046 5 13C5 11.8954 4.10457 11 3 11M3 15C1.89543 15 1 14.1046 1 13C1 11.8954 1.89543 11 3 11M3 15V17M3 11V1M9 7V17M15 15C16.1046 15 17 14.1046 17 13C17 11.8954 16.1046 11 15 11M15 15C13.8954 15 13 14.1046 13 13C13 11.8954 13.8954 11 15 11M15 15V17M15 11V1",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})),"global-settings":(0,t.createElement)("svg",{className:"flex-shrink-0 mr-4 stroke-inherit",fill:"none",width:"20",height:"20",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},(0,t.createElement)("path",{d:"M8.32463 2.31731C8.75103 0.560897 11.249 0.560897 11.6754 2.31731C11.9508 3.45193 13.2507 3.99038 14.2478 3.38285C15.7913 2.44239 17.5576 4.2087 16.6172 5.75218C16.0096 6.74925 16.5481 8.04918 17.6827 8.32463C19.4391 8.75103 19.4391 11.249 17.6827 11.6754C16.5481 11.9508 16.0096 13.2507 16.6172 14.2478C17.5576 15.7913 15.7913 17.5576 14.2478 16.6172C13.2507 16.0096 11.9508 16.5481 11.6754 17.6827C11.249 19.4391 8.75103 19.4391 8.32463 17.6827C8.04918 16.5481 6.74926 16.0096 5.75219 16.6172C4.2087 17.5576 2.44239 15.7913 3.38285 14.2478C3.99038 13.2507 3.45193 11.9508 2.31731 11.6754C0.560897 11.249 0.560897 8.75103 2.31731 8.32463C3.45193 8.04918 3.99037 6.74926 3.38285 5.75218C2.44239 4.2087 4.2087 2.44239 5.75219 3.38285C6.74926 3.99037 8.04918 3.45193 8.32463 2.31731Z",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),(0,t.createElement)("path",{d:"M13 10C13 11.6569 11.6569 13 10 13C8.34315 13 7 11.6569 7 10C7 8.34315 8.34315 7 10 7C11.6569 7 13 8.34315 13 10Z",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}))};function pr(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter(Boolean).join(" ")}var vr=()=>{const e=Un(),n=$n((t=>t.enableLoadFontsLocally)),r=!1!==n;return(0,t.createElement)("section",{className:"block border-b border-solid border-slate-200 px-8 py-8 justify-between"},(0,t.createElement)("div",{className:"mr-16 w-full flex items-center"},(0,t.createElement)("h3",{className:"p-0 flex-1 justify-right inline-flex text-xl leading-6 font-semibold text-slate-800"},(0,Yt.__)("Load Google Fonts Locally","astra")),(0,t.createElement)(In,{checked:r,onChange:()=>{let t;t=!1===n,e({type:"UPDATE_ENABLE_LOAD_FONTS_LOCALLY",payload:t});const r=new window.FormData;r.append("action","astra_update_admin_setting"),r.append("security",astra_admin.update_nonce),r.append("key","self_hosted_gfonts"),r.append("value",t),wn()({url:astra_admin.ajax_url,method:"POST",body:r}).then((()=>{e({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Successfully saved!","astra")})}))},className:pr(r?"bg-astra":"bg-slate-200","group relative inline-flex h-4 w-9 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-astra focus:ring-offset-2")},(0,t.createElement)("span",{"aria-hidden":"true",className:"pointer-events-none absolute h-full w-full rounded-md bg-white"}),(0,t.createElement)("span",{"aria-hidden":"true",className:pr(r?"bg-astra":"bg-gray-200","pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out")}),(0,t.createElement)("span",{"aria-hidden":"true",className:pr(r?"translate-x-5":"translate-x-0","toggle-bubble pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out")}))),(0,t.createElement)("p",{className:"mt-2 w-9/12 text-sm text-slate-500 tablet:w-full"},(0,Yt.__)("Enable this option to download Google fonts and save them on your server. This can be great for improving speed of your website and to comply with GDPR laws.","astra")))};function mr(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter(Boolean).join(" ")}var hr=()=>{const e=Un(),n=$n((t=>t.enableLoadFontsLocally)),r=$n((t=>t.enablePreloadLocalFonts)),a=!1!==r;return(0,t.createElement)("section",{className:`astra-dep-field-${n} block border-b border-solid border-slate-200 px-8 py-8 justify-between`},(0,t.createElement)("div",{className:"mr-16 w-full flex items-center"},(0,t.createElement)("h3",{className:"p-0 flex-1 justify-right inline-flex text-xl leading-6 font-semibold text-slate-800"},(0,Yt.__)("Preload Local Fonts","astra")),(0,t.createElement)(In,{checked:a,onChange:()=>{let t;t=!1===r,e({type:"UPDATE_ENABLE_PRELOAD_LOCAL_FONTS",payload:t});const n=new window.FormData;n.append("action","astra_update_admin_setting"),n.append("security",astra_admin.update_nonce),n.append("key","preload_local_fonts"),n.append("value",t),wn()({url:astra_admin.ajax_url,method:"POST",body:n}).then((()=>{e({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Successfully saved!","astra")})}))},className:mr(a?"bg-astra":"bg-slate-200","group relative inline-flex h-4 w-9 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-astra focus:ring-offset-2")},(0,t.createElement)("span",{"aria-hidden":"true",className:"pointer-events-none absolute h-full w-full rounded-md bg-white"}),(0,t.createElement)("span",{"aria-hidden":"true",className:mr(a?"bg-astra":"bg-gray-200","pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out")}),(0,t.createElement)("span",{"aria-hidden":"true",className:mr(a?"translate-x-5":"translate-x-0","toggle-bubble pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out")}))),(0,t.createElement)("p",{className:"mt-2 w-9/12 text-sm text-slate-500 tablet:w-full"},(0,Yt.__)("This option will load the font files right away on page load. Preloading Local Fonts can speeds up your website even further.","astra")))},Ar=()=>{const n=Un(),r=$n((t=>t.enableLoadFontsLocally)),[a,i]=(0,e.useState)(!1);return(0,t.createElement)("section",{className:`astra-dep-field-${r} block border-b border-solid border-slate-200 px-8 py-8 justify-between`},(0,t.createElement)("div",{className:"w-full flex flex-col sm:flex-row justify-between"},(0,t.createElement)("div",null,(0,t.createElement)("h3",{className:"p-0 text-xl leading-6 font-semibold text-slate-800"},(0,Yt.__)("Flush Local Fonts Cache","astra")),(0,t.createElement)("p",{className:"mt-2 text-sm text-slate-600"},(0,Yt.__)("Click the button to reset the local fonts cache.","astra"))),(0,t.createElement)("div",{className:"mt-2 sm:mt-0"},(0,t.createElement)("button",{type:"button",className:"inline-flex px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover focus:outline-none",onClick:()=>{i("loading");const t=new window.FormData;t.append("action","astra_regenerate_fonts_folder"),t.append("security",astra_admin.update_nonce),wn()({url:astra_admin.ajax_url,method:"POST",body:t}).then((t=>{t.success?n({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Assets Regenerated!","astra")}):n({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:t.data.message}),i(!1)}))}},(0,Yt.__)("Flush Local Font Files","astra"),"loading"===a&&(0,t.createElement)("svg",{className:"animate-spin -mr-1 ml-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},(0,t.createElement)("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),(0,t.createElement)("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"}))))))};function br(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter(Boolean).join(" ")}var gr=()=>{if(astra_admin.show_builder_migration)return"";const e=Un(),n=$n((t=>t.useOldHeaderFooter)),r=!1!==n;return(0,t.createElement)("section",{className:br(astra_admin.pro_available?"border-t":"","block border-b border-solid border-slate-200 px-8 py-8 justify-between")},(0,t.createElement)("div",{className:"mr-16 w-full flex items-center"},(0,t.createElement)("h3",{className:"p-0 flex-1 justify-right inline-flex text-xl leading-8 font-semibold text-slate-800"},(0,Yt.__)("Use New Header/Footer Builder","astra")),(0,t.createElement)(In,{checked:r,onChange:()=>{let t;t=!1===n,e({type:"USE_OLD_HEADER_FOOTER",payload:t});const r=new window.FormData;r.append("action","ast_migrate_to_builder"),r.append("security",astra_admin.update_nonce),r.append("status",t),wn()({url:astra_admin.ajax_url,method:"POST",body:r}).then((()=>{e({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Successfully saved!","astra")})}))},className:br(r?"bg-astra":"bg-slate-200","group relative inline-flex h-4 w-9 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-astra focus:ring-offset-2")},(0,t.createElement)("span",{"aria-hidden":"true",className:"pointer-events-none absolute h-full w-full rounded-md bg-white"}),(0,t.createElement)("span",{"aria-hidden":"true",className:br(r?"bg-astra":"bg-gray-200","pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out")}),(0,t.createElement)("span",{"aria-hidden":"true",className:br(r?"translate-x-5":"translate-x-0","toggle-bubble pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out")}))),(0,t.createElement)("p",{className:"mt-2 w-11/12 text-sm text-slate-500"},(0,Yt.__)(`${astra_admin.theme_name} Header/Footer Builder is a new and powerful way to design header and footer for your website. With this, you can give a creative look to your header/footer with less effort. Activating this feature will add advanced options to ${astra_admin.theme_name} customizer where you can create awesome new designs.`,"astra")),(0,t.createElement)("p",{className:"mt-2 w-full text-sm text-slate-500"},(0,Yt.__)("After years of evolution and updates, the old header footer builder is at the point where it can no longer handle all of the new features. We recommend that you upgrade to the new header footer builder which has an assortment of new features and provides a more seamless experience.","astra")))},yr=()=>{if(astra_admin.pro_available)return"";const n=Un(),r=$n((t=>t.useUpgradeNotices)),[a,i]=(0,e.useState)(!1);return(0,t.createElement)("section",{className:"block px-8 py-8 justify-between"},(0,t.createElement)("div",{className:"mr-16 w-full flex flex-col sm:flex-row sm:items-center"},(0,t.createElement)("h3",{className:"p-0 flex-1 justify-right inline-flex text-xl leading-8 font-semibold text-slate-800"},(0,Yt.__)("Build Better Websites with Astra Pro","astra")),(0,t.createElement)("button",{type:"button",className:"inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra transition focus:bg-astra-hover hover:bg-astra-hover focus:outline-none h-9",onClick:t=>{if(astra_admin.pro_installed_status){const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init","astra-addon/astra-addon.php"),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((t=>{t.success&&window.open(astra_admin.astra_base_url,"_self")}))}else window.open(astra_admin.upgrade_url,"_blank")}},astra_admin.pro_installed_status?(0,Yt.__)("Activate Now","astra"):(0,Yt.__)("Upgrade Now","astra"))),(0,t.createElement)("p",{className:"mt-2 w-full md:w-9/12 text-sm text-slate-500 tablet:w-full"},(0,Yt.__)("Access powerful features for painless WordPress design without the high costs. Powerful tools, premium support, limitless opportunity with Pro! Toggle upgrade notices on or off ","astra"),(0,t.createElement)("span",{onClick:()=>{let t;i("updating"),t=!1===r,n({type:"UPGRADE_NOTICES",payload:t});const e=new window.FormData;e.append("action","ast_disable_pro_notices"),e.append("security",astra_admin.update_nonce),e.append("status",t),wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((e=>{if(e.success){let e=(0,Yt.__)("Deactivated!","astra");t&&(e=(0,Yt.__)("Activated!","astra")),n({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:e}),i(!1)}}))},className:"cursor-pointer text-astra focus:text-astra-hover active:text-astra-hover hover:text-astra-hover",rel:"noreferrer"},"updating"===a?(0,Yt.__)("updating...","astra"):(0,Yt.__)("here.","astra"))))};function xr(e){let{state:n}=e;const r=wp.hooks.applyFilters("astra_dashboard.settings_tab_wrappers",{"global-settings":(0,t.createElement)(t.Fragment,null," ",(0,t.createElement)(gr,null)," ",(0,t.createElement)(yr,null)," "),"fonts-performance":(0,t.createElement)(t.Fragment,null," ",(0,t.createElement)(vr,null)," ",(0,t.createElement)(hr,null)," ",(0,t.createElement)(Ar,null)," ")});return(0,t.createElement)("div",null,r[n])}var wr=()=>{const e=$n((t=>t.activeSettingsNavigationTab));return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{className:"lg:col-span-9 border-l"},wp.hooks.applyFilters(`astra_dashboard.settings_screen_before_${e}`,(0,t.createElement)("span",null)),(0,t.createElement)(xr,{state:e}),wp.hooks.applyFilters(`astra_dashboard.settings_screen_after_${e}`,(0,t.createElement)("span",null))))},Er=function(e){const{fontSize:n,width:r,style:a}=e;return(0,t.createElement)("div",{className:"ast-skeleton ast-skeleton--text ast-skeleton--wave",style:{fontSize:n,width:r,...a}})},Xr=function(e){const{width:n,height:r,style:a}=e;return(0,t.createElement)("div",{className:"ast-skeleton ast-skeleton--rect ast-skeleton--wave",style:{width:n,height:r,...a}})},Rr=()=>(0,t.createElement)("div",{className:"px-6 w-full"},(0,t.createElement)("div",{className:"max-w-3xl mx-auto lg:max-w-[80rem] mt-10 mb-8 font-semibold text-2xl"},(0,t.createElement)(Xr,{width:"100px",height:"32px"})),(0,t.createElement)("main",{className:"max-w-[80rem] mx-auto my-[2.43rem] bg-white rounded-md shadow overflow-hidden h-[36rem]"},(0,t.createElement)("div",{className:"lg:grid lg:grid-cols-12 h-full"},(0,t.createElement)("aside",{className:"py-6 sm:px-6 lg:py-6 lg:px-5 lg:col-span-3"},(0,t.createElement)("nav",{className:"space-y-1"},Array(7).fill().map(((e,n)=>(0,t.createElement)("div",{key:`setting${n}`,className:"flex justify-left items-center py-3 space-x-3"},(0,t.createElement)(Xr,{key:`icon${n}`,width:"24px",height:"24px"}),(0,t.createElement)(Er,{key:n,width:"120px",fontSize:"16px"})))))),(0,t.createElement)("div",{className:"border-l lg:col-span-9 p-8"},(0,t.createElement)(Er,{fontSize:"35px",width:"225px"}),(0,t.createElement)(Er,{width:"80%"}),(0,t.createElement)("div",{className:"h-8"}),(0,t.createElement)(Er,{fontSize:"35px",width:"300px"}),(0,t.createElement)(Er,{width:"60%"}),(0,t.createElement)("div",{className:"h-8"}),(0,t.createElement)(Er,{fontSize:"35px",width:"210px"}),(0,t.createElement)(Er,{width:"65%"})))));function Lr(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.filter(Boolean).join(" ")}var Vr=()=>{var n;const r=new URLSearchParams(null===(n=Ft())||void 0===n?void 0:n.search),a=Un(),i=$n((t=>t.activeSettingsNavigationTab)),s=$n((t=>t.initialStateSetFlag)),o=wp.hooks.applyFilters("astra_dashboard.settings_navigation",[{name:(0,Yt.__)("General","astra"),slug:"global-settings",icon:fr["global-settings"]},{name:(0,Yt.__)("Performance","astra"),slug:"fonts-performance",icon:fr["fonts-performance"]}]);return(0,e.useEffect)((()=>{const t=r.get("path"),e=r.get("settings");a({type:"UPDATE_SETTINGS_ACTIVE_NAVIGATION_TAB",payload:e&&"settings"===t?e:"global-settings"})}),[s]),s?(0,t.createElement)("div",{className:"px-6 w-full"},(0,t.createElement)("div",{className:"mx-auto mt-10 mb-8 font-semibold text-2xl lg:max-w-[80rem]"},(0,Yt.__)("Settings","astra")),(0,t.createElement)("main",{className:"mx-auto my-[2.43rem] bg-white rounded-md shadow overflow-hidden min-h-[36rem] lg:max-w-[80rem]"},(0,t.createElement)("div",{className:"lg:grid lg:grid-cols-12 min-h-[36rem] h-full"},(0,t.createElement)("aside",{className:"py-6 sm:px-6 lg:py-6 lg:px-0 lg:col-span-3"},(0,t.createElement)("nav",{className:"space-y-1"},o.map((e=>(0,t.createElement)(kt,{to:{pathname:"admin.php",search:`?page=${astra_admin.home_slug}&path=settings&settings=${e.slug}`},key:e.name,className:Lr(i===e.slug?"border-astra text-astra focus:text-astra-hover active:text-astra hover:text-astra-hover stroke-astra fill-astra focus:stroke-astra focus:fill-astra hover:stroke-astra hover:fill-astra":"border-white text-slate-800 stroke-slate-800 fill-slate-800 focus:text-slate-900 focus:border-slate-200 focus:stroke-slate-900 focus:fill-slate-900 hover:text-slate-900 hover:border-slate-200 hover:stroke-slate-900 hover:fill-slate-900","border-l-4 group cursor-pointer py-3 pl-5 flex items-center text-base font-medium"),onClick:()=>{a({type:"UPDATE_SETTINGS_ACTIVE_NAVIGATION_TAB",payload:e.slug})}},e.icon,(0,t.createElement)("span",{className:"truncate"},e.name)))))),(0,t.createElement)(wr,null)))):(0,t.createElement)(Rr,null)},zr=()=>{if(astra_admin.starter_templates_data.is_available)return void window.open(astra_admin.starter_templates_data.redirection,"_self");const e=t=>{const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init",t.target.dataset.init),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((e=>{e.success&&(t.target.className="",t.target.className="text-[#4AB866] pointer-events-none capitalize text-sm leading-[0.875rem] font-medium rounded-md",t.target.innerText=astra_admin.plugin_activated_text,window.location=astra_admin.starter_templates_data.redirection)}))};return(0,t.createElement)("main",{className:"relative tablet:my-16"},(0,t.createElement)("div",{className:"w-full blur-sm opacity-40"},mn["starter-canvas"]),(0,t.createElement)("div",null,(0,t.createElement)("div",{className:"max-w-[39rem] h-max bg-white m-auto shadow-overlay-modal text-center rounded-lg p-8 absolute inset-3 top-[150%] sm:top-0 sm:inset-0"},(0,t.createElement)("div",null,(0,t.createElement)("div",{className:"mx-auto flex items-center justify-center"},mn["starter-logo"]),(0,t.createElement)("div",{className:"mt-3 text-center sm:mt-6"},(0,t.createElement)("h4",{className:"text-2xl font-semibold leading-7 text-slate-800",id:"modal-title"},astra_admin.starter_templates_data.title),(0,t.createElement)("div",{className:"mt-2"},(0,t.createElement)("p",{className:"text-sm text-slate-500"},(0,Yt.__)("Create professional designed pixel perfect websites in minutes. Get access to 280+ pre-made full website templates for your favorite page builder.","astra"))))),(0,t.createElement)("div",{className:"text-center mt-5 sm:mt-6"},(0,t.createElement)("button",{type:"button",className:"w-auto justify-center rounded-md border border-transparent bg-astra px-4 py-2 text-base font-medium text-white shadow-sm hover:bg-astra-hover focus:outline-none focus:ring-2 focus:ring-astra-hover focus:ring-offset-2 sm:text-sm","data-slug":astra_admin.starter_templates_data.slug,"data-init":astra_admin.starter_templates_data.path,"data-action":(n=astra_admin.starter_templates_data.status,"activated"===n?"":"installed"===n?"astra_recommended_plugin_activate":"astra_recommended_plugin_install"),onClick:t=>{let n=t.target.dataset.action;const r=new window.FormData;switch(n){case"astra_recommended_plugin_activate":e(t);break;case"astra_recommended_plugin_install":r.append("action","astra_recommended_plugin_install"),r.append("_ajax_nonce",astra_admin.plugin_installer_nonce),r.append("slug",t.target.dataset.slug),t.target.innerText=astra_admin.plugin_installing_text,wn()({url:astra_admin.ajax_url,method:"POST",body:r}).then((n=>{n.success&&(t.target.innerText=astra_admin.plugin_installed_text,e(t))}))}}},(t=>"activated"===t?(0,Yt.__)("Activated","astra"):"installed"===t?(0,Yt.__)("Activate","astra"):(0,Yt.__)("Install & Activate","astra"))(astra_admin.starter_templates_data.status)),(0,t.createElement)("div",null,(0,t.createElement)("button",{className:"w-auto justify-center mt-4 text-astra",onClick:()=>{window.open("https://wpastra.com/website-templates/?utm_source=dashboard&utm_medium=free-theme&utm_campaign=starter-templates","_blank")}},(0,Yt.__)("Learn More","astra")))))));var n},Nr=()=>{var e;const n="1"===new URLSearchParams(null===(e=Ft())||void 0===e?void 0:e.search).get("astra-activation-redirect")?1:0;return(0,t.createElement)("main",{className:"relative"},(0,t.createElement)("div",{className:"w-full absolute inset-0 blur-md"},mn["custom-layout"]),(0,t.createElement)("div",{className:"relative z-10 pt-[4rem]"},(0,t.createElement)("div",{className:"max-w-[39rem] h-max bg-white m-auto shadow-overlay-modal text-center rounded-lg p-8"},(0,t.createElement)("div",null,(0,t.createElement)("div",{className:"mx-auto flex items-center justify-center"},mn["astra-logo"]),(0,t.createElement)("div",{className:"mt-3 text-center sm:mt-5"},(0,t.createElement)("h4",{className:"text-2xl font-semibold leading-7 text-slate-800",id:"modal-title"},(0,Yt.__)("Site Builder","astra")),(0,t.createElement)("div",{className:"mt-2"},(0,t.createElement)("p",{className:"text-sm leading-[1.375rem] text-slate-500 text-center"},(0,Yt.__)("Upgrade to Astra Pro to get access to the Site Builder, which allow you to create a unique header, footer, 404 pages, and custom content.","astra"))),astra_admin.show_banner_video&&(0,t.createElement)("div",{className:"relative pb-[17.5rem] mt-5"},(0,t.createElement)("iframe",{className:"absolute inset-0 w-full h-full rounded-md",src:`https://www.youtube-nocookie.com/embed/FWRkzJQwcKU?showinfo=0&autoplay=${n}&mute=${n}&rel=0`,allow:"autoplay",title:"YouTube video player",frameBorder:"0",allowFullScreen:!0})))),(0,t.createElement)("div",{className:"text-center mt-5"},(0,t.createElement)("button",{type:"button",className:"w-auto justify-center rounded-md border border-transparent bg-astra px-[2.9375rem] py-[0.6875rem] text-base leading-4 font-medium text-white shadow-sm hover:bg-astra-hover focus:outline-none focus:ring-2 focus:ring-astra-hover focus:ring-offset-2",onClick:t=>{if(astra_admin.pro_installed_status){const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init","astra-addon/astra-addon.php"),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((t=>{t.success&&window.open(astra_admin.astra_base_url,"_self")}))}else window.open(astra_admin.upgrade_url,"_blank")}},astra_admin.pro_installed_status?(0,Yt.__)("Activate Now","astra"):(0,Yt.__)("Upgrade Now","astra")),(0,t.createElement)("div",null,(0,t.createElement)("button",{className:"w-auto justify-center mt-4 text-base leading-4 text-astra font-medium",onClick:()=>{window.open(astra_admin.free_vs_pro_link,"_self")}},(0,Yt.__)("Free vs Pro","astra")))))))};const Pr=[{title:(0,Yt.__)("Super Fast and Stable","astra"),description:(0,Yt.__)("Spectra works with the native WordPress editor with no dependency on external code. So, it is fast and stable.","astra"),icon:"superfast"},{title:(0,Yt.__)("Secure and Integrated","astra"),description:(0,Yt.__)("Clean code written using the latest standards to maximize security and work flawlessly with any WordPress plugin.","astra"),icon:"secure"},{title:(0,Yt.__)("Native WordPress Interface","astra"),description:(0,Yt.__)("Spectra Integrates into the same WordPress editor, making it super intuitive website builder.","astra"),icon:"nativewp"},{title:(0,Yt.__)("Google Will Love and Rank","astra"),description:(0,Yt.__)("Score 100% in CWV. Clean code output and lightning-fast load times keep visitors and search engines happy.","astra"),icon:"googlelove"},{title:(0,Yt.__)("Zero Bloat, No Dependencies","astra"),description:(0,Yt.__)("Fewer external scripts and dependencies keep the code clean, resulting in small file sizes and faster loading times.","astra"),icon:"zerobloat"},{title:(0,Yt.__)("Just-in-time Compiler","astra"),description:(0,Yt.__)("Loads assets dynamically on demand. Assets are loaded for only those blocks that are used on a page.","astra"),icon:"compiler"}];var Or=()=>{var e;const n="1"===new URLSearchParams(null===(e=Ft())||void 0===e?void 0:e.search).get("astra-activation-redirect")?1:0,r=t=>{let e=astra_admin.spectra_plugin_status;const n=new window.FormData;"install"===e?(n.append("action","astra_recommended_plugin_install"),n.append("slug","ultimate-addons-for-gutenberg"),n.append("init","ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php"),n.append("_ajax_nonce",astra_admin.plugin_installer_nonce),t.target.innerText=astra_admin.plugin_installing_text,wn()({url:astra_admin.ajax_url,method:"POST",body:n}).then((e=>{e.success&&(t.target.innerText=astra_admin.plugin_installed_text,a(t))}))):"installed"===e&&a(t)},a=t=>{const e=new window.FormData;e.append("action","astra_recommended_plugin_activate"),e.append("security",astra_admin.plugin_manager_nonce),e.append("init","ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php"),t.target.innerText=astra_admin.plugin_activating_text,wn()({url:astra_admin.ajax_url,method:"POST",body:e}).then((e=>{e.success&&(t.target.innerText=astra_admin.plugin_activated_text,window.location=`${astra_admin.admin_base_url}options-general.php?page=spectra`)}))},i=()=>"install"===astra_admin.spectra_plugin_status?(0,t.createElement)(t.Fragment,null," ",(0,t.createElement)("span",{className:"mr-3"}," ",(0,Yt.__)("Install Spectra - It’s free","astra")," ")," ",mn.download," "):"installed"===astra_admin.spectra_plugin_status?(0,Yt.__)("Activate Spectra","astra"):(0,Yt.__)("Explore Spectra","astra");return(0,t.createElement)("main",{className:"bg-white pb-14 pt-20"},(0,t.createElement)("div",{className:"mx-auto px-6 max-w-[45rem]"},(0,t.createElement)("h1",{className:"sr-only"}," ",(0,Yt.__)("Spectra - WordPress Free Page Builder","astra")," "),(0,t.createElement)("div",{className:"flex flex-col items-center"},(0,t.createElement)("div",{className:"absolute top-0 tablet:none"},mn.spectraBackgroundLogo)),(0,t.createElement)("div",{className:"relative flex flex-col items-center"},mn["spectra-logo"],(0,t.createElement)("h2",{className:"text-4xl sm:text-[2.5rem] text-slate-800 font-semibold capitalize mb-2 mt-7"},`${astra_admin.theme_name} + Spectra = `,(0,t.createElement)("span",{className:"text-[1em] leading-[1em]"},mn["heart-logo"])),(0,t.createElement)("p",{className:"text-base leading-[1.625rem] mb-7"},(0,Yt.__)("Spectra is 100% beginner friendly and enhances the default WordPress block editor.","astra")),(0,t.createElement)("button",{className:"inline-flex w-[35%] justify-center items-center px-4 py-3 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover hover:text-white focus:text-white active:text-white focus:outline-none mr-4",onClick:r},i()),astra_admin.show_banner_video&&(0,t.createElement)("div",{className:"relative pb-[25.375rem] mt-12 w-full"},(0,t.createElement)("iframe",{className:"absolute inset-0 w-full h-full rounded-md",src:`https://www.youtube-nocookie.com/embed/GLNzTxArR6Y?showinfo=0&autoplay=${n}&mute=${n}&rel=0`,allow:"autoplay",title:"YouTube video player",frameBorder:"0",allowFullScreen:!0}))),(0,t.createElement)("div",{className:"grid grid-cols-2 gap-12 mt-16 px-0 sm:px-8"},Pr.map(((e,n)=>(0,t.createElement)("div",{key:n},(0,t.createElement)("div",null," ",mn[e.icon]," "),(0,t.createElement)("h4",{className:"text-base leading-[1.625rem] text-slate-800 font-medium mt-4 mb-1"},e.title),(0,t.createElement)("p",{className:"text-sm leading-[1.375rem] text-slate-600"},e.description))))),(0,t.createElement)("div",{className:"flex flex-col items-center justify-center mt-20 mx-0 sm:mx-[4.5rem]"},(0,t.createElement)("h3",{className:"text-[2rem] leading-10 font-semibold text-slate-800 mb-6 text-center"},(0,Yt.__)("Build Ultra High Performance Websites, Without Coding","astra")),(0,t.createElement)("button",{className:"inline-flex w-[45%] justify-center items-center px-4 py-3 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover hover:text-white focus:text-white active:text-white focus:outline-none mr-4",onClick:r},i()))))},qr=function(){const e=new URLSearchParams(Ft().search),n=e.get("page"),r=e.get("path"),a=e.get("event");let i=(0,t.createElement)("p",null," Fallback Route Page ");if(astra_admin.home_slug===n){if("getting-started"===a)i=(0,t.createElement)(ur,null);else switch(r){case"starter-templates":i=(0,t.createElement)(zr,null);break;case"settings":i=(0,t.createElement)(Vr,null);break;case"free-vs-pro":i=(0,t.createElement)(dr,null);break;case"custom-layouts":i=(0,t.createElement)(Nr,null);break;case"spectra":i=(0,t.createElement)(Or,null);break;case"docs":i=(0,t.createElement)(Rn,null);break;default:i=(0,t.createElement)(ur,null)}astWpMenuClassChange(r)}return(0,t.createElement)(t.Fragment,null,i)},Wr=e.forwardRef((function(t,n){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:n},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"}))})),Tr=e.forwardRef((function(t,n){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:n},t),e.createElement("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"}))}));function Cr(){var n;const r=Un(),a=$n((t=>t.settingsSavedNotification)),i=new URLSearchParams(null===(n=Ft())||void 0===n?void 0:n.search),s=i.get("status")?i.get("status"):"";return""!==s&&"imported"===s&&(r({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:(0,Yt.__)("Successfully imported!","astra")}),setTimeout((()=>{window.location=astra_admin.astra_base_url}),1e3)),(0,e.useEffect)((()=>{""!==a&&setTimeout((()=>{r({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:""})}),2e3)}),[a]),(0,t.createElement)(e.Fragment,null,(0,t.createElement)("div",{"aria-live":"assertive",className:"fixed inset-10 z-10 flex px-4 py-6 pointer-events-none sm:p-6 sm:items-start"},(0,t.createElement)("div",{className:"w-full flex flex-col items-center space-y-4 sm:items-end"},(0,t.createElement)(he,{show:""!==a,as:e.Fragment,enter:"transform ease-out duration-300 transition",enterFrom:"translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2",enterTo:"translate-y-0 opacity-100 sm:translate-x-0",leave:"transition ease-in duration-100",leaveFrom:"opacity-100",leaveTo:"opacity-0"},(0,t.createElement)("div",{className:"max-w-sm w-full bg-white shadow-lg rounded-lg pointer-events-auto ring-1 ring-black ring-opacity-5 overflow-hidden"},(0,t.createElement)("div",{className:"p-4"},(0,t.createElement)("div",{className:"flex items-start"},(0,t.createElement)("div",{className:"flex-shrink-0"},(0,t.createElement)(Wr,{className:"h-6 w-6 text-green-400","aria-hidden":"true"})),(0,t.createElement)("div",{className:"ml-3 w-0 flex-1 pt-0.5"},(0,t.createElement)("p",{className:"text-sm font-medium text-gray-900"},a)),(0,t.createElement)("div",{className:"ml-4 flex-shrink-0 flex"},(0,t.createElement)("button",{className:"bg-white rounded-md inline-flex text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500",onClick:()=>{r({type:"UPDATE_SETTINGS_SAVED_NOTIFICATION",payload:""})}},(0,t.createElement)("span",{className:"sr-only"}," ",(0,Yt.__)("Close ","astra")," "),(0,t.createElement)(Tr,{className:"h-5 w-5","aria-hidden":"true"}))))))))))}function Ir(t){return"Minified Redux error #"+t+"; visit https://redux.js.org/Errors?code="+t+" for the full message or use the non-minified dev environment for full errors. "}var Fr="function"==typeof Symbol&&Symbol.observable||"@@observable",jr=function(){return Math.random().toString(36).substring(7).split("").join(".")},Sr={INIT:"@@redux/INIT"+jr(),REPLACE:"@@redux/REPLACE"+jr(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+jr()}};function Hr(t){if("object"!=typeof t||null===t)return!1;for(var e=t;null!==Object.getPrototypeOf(e);)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}var Dr,Zr=function t(e,n,r){var a;if("function"==typeof n&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(Ir(0));if("function"==typeof n&&void 0===r&&(r=n,n=void 0),void 0!==r){if("function"!=typeof r)throw new Error(Ir(1));return r(t)(e,n)}if("function"!=typeof e)throw new Error(Ir(2));var i=e,s=n,o=[],l=o,u=!1;function c(){l===o&&(l=o.slice())}function d(){if(u)throw new Error(Ir(3));return s}function f(t){if("function"!=typeof t)throw new Error(Ir(4));if(u)throw new Error(Ir(5));var e=!0;return c(),l.push(t),function(){if(e){if(u)throw new Error(Ir(6));e=!1,c();var n=l.indexOf(t);l.splice(n,1),o=null}}}function p(t){if(!Hr(t))throw new Error(Ir(7));if(void 0===t.type)throw new Error(Ir(8));if(u)throw new Error(Ir(9));try{u=!0,s=i(s,t)}finally{u=!1}for(var e=o=l,n=0;n<e.length;n++)(0,e[n])();return t}function v(t){if("function"!=typeof t)throw new Error(Ir(10));i=t,p({type:Sr.REPLACE})}function m(){var t,e=f;return(t={subscribe:function(t){if("object"!=typeof t||null===t)throw new Error(Ir(11));function n(){t.next&&t.next(d())}return n(),{unsubscribe:e(n)}}})[Fr]=function(){return this},t}return p({type:Sr.INIT}),(a={dispatch:p,subscribe:f,getState:d,replaceReducer:v})[Fr]=m,a}((function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,n=wp.hooks.applyFilters("astra_dashboard/data_reducer_action",e.type);switch(n){case"UPDATE_INITIAL_STATE":return{...e.payload};case"UPDATE_BLOCK_STATUSES":return{...t,blocksStatuses:e.payload};case"UPDATE_INITIAL_STATE_FLAG":return{...t,initialStateSetFlag:e.payload};case"UPDATE_SETTINGS_ACTIVE_NAVIGATION_TAB":return{...t,activeSettingsNavigationTab:e.payload};case"UPDATE_ENABLE_LOAD_FONTS_LOCALLY":return{...t,enableLoadFontsLocally:e.payload};case"UPDATE_ENABLE_PRELOAD_LOCAL_FONTS":return{...t,enablePreloadLocalFonts:e.payload};case"UPDATE_ENABLE_WHITE_LABEL":return{...t,enableWhiteLabel:e.payload};case"UPDATE_PLUGIN_DESCRIPTION":return{...t,pluginDescription:e.payload};case"UPDATE_PLUGIN_NAME":return{...t,pluginName:e.payload};case"UPDATE_THEME_SCREENSHOT_URL":return{...t,themeScreenshotURL:e.payload};case"UPDATE_THEME_DESCRIPTION":return{...t,themeDescription:e.payload};case"UPDATE_THEME_NAME":return{...t,themeName:e.payload};case"UPDATE_AGENCY_LICENSE_LINK":return{...t,agencyLicenseLink:e.payload};case"UPDATE_AGENCY_AUTHOR_URL":return{...t,agencyAuthorURL:e.payload};case"UPDATE_AGENCY_AUTHOR_NAME":return{...t,agencyAuthorName:e.payload};case"UPDATE_FILE_GENERATION":return{...t,enableFileGeneration:e.payload};case"UPDATE_BETA":return{...t,enableBeta:e.payload};case"USE_OLD_HEADER_FOOTER":return{...t,useOldHeaderFooter:e.payload};case"UPGRADE_NOTICES":return{...t,useUpgradeNotices:e.payload};case"UPDATE_SETTINGS_SAVED_NOTIFICATION":return{...t,settingsSavedNotification:e.payload};default:return t}}),wp.hooks.applyFilters("astra_dashboard/datastore",{initialStateSetFlag:!1,enableLoadFontsLocally:!1,enablePreloadLocalFonts:!1,useOldHeaderFooter:!1,useUpgradeNotices:!1,enableWhiteLabel:!1,enableBeta:"disable",settingsSavedNotification:"",blocksStatuses:[],enableFileGeneration:"disable",activeSettingsNavigationTab:"",pluginDescription:"",pluginName:"",themeScreenshotURL:"",themeDescription:"",themeName:"",agencyLicenseLink:"",agencyAuthorURL:"",agencyAuthorName:""}),window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__());Zr.getState().initialStateSetFlag||(Dr=Zr,wn()({path:"/astra/v1/admin/settings/"}).then((t=>{const e={settingsSavedNotification:"",initialStateSetFlag:!0,activeSettingsNavigationTab:"global-settings",enableLoadFontsLocally:t.self_hosted_gfonts,enablePreloadLocalFonts:t.preload_local_fonts,useOldHeaderFooter:t.use_old_header_footer,useUpgradeNotices:t.use_upgrade_notices,blocksStatuses:t.pro_addons};Dr.dispatch({type:"UPDATE_INITIAL_STATE",payload:e})}))),i().render((0,t.createElement)((function(t){var n=t.store,a=t.context,i=t.children,s=(0,e.useMemo)((function(){var t=Zn(n);return{store:n,subscription:t}}),[n]),o=(0,e.useMemo)((function(){return n.getState()}),[n]);Mn((function(){var t=s.subscription;return t.onStateChange=t.notifyNestedSubs,t.trySubscribe(),o!==n.getState()&&t.notifyNestedSubs(),function(){t.tryUnsubscribe(),t.onStateChange=null}}),[s,o]);var l=a||jn;return r().createElement(l.Provider,{value:s},i)}),{store:Zr},(0,t.createElement)((()=>(0,t.createElement)(jt,null,(0,t.createElement)(Vn,null),(0,t.createElement)(Cr,null),(0,t.createElement)(Ct,null,(0,t.createElement)(Tt,{path:"/"},(0,t.createElement)(qr,null))))),null)),document.getElementById("astra-dashboard-app"))}()}(); assets/theme-builder/build/index.asset.php 0000644 00000000163 15150276715 0014642 0 ustar 00 <?php return array('dependencies' => array('react', 'react-dom', 'wp-i18n'), 'version' => 'd2de54ff3e1c4112bc76'); assets/theme-builder/build/index.css 0000644 00000012010 15150276715 0013517 0 ustar 00 .ast-theme-builder #adminmenuback,.ast-theme-builder #adminmenumain,.ast-theme-builder #adminmenuwrap,.ast-theme-builder #wpfooter{display:none}.ast-theme-builder #wpbody-content{position:relative;z-index:9999999}.ast-theme-builder #wpcontent{margin:0;padding:0}.ast-tb-app{border-radius:0;flex-direction:column;height:100vh;position:absolute}.ast-tb-app,.ast-tb-main{display:flex;max-width:100%;overflow:hidden;width:100%}.ast-tb-main{flex-grow:1;height:100%}.ast-tb-header{align-items:center;background-color:#fff;border-bottom:1px solid var(--dashboard-border-primary,#dce0e6);display:flex;min-height:64px;padding-left:24px;padding-right:24px}.ast-tb-header-items{align-items:center;display:flex;gap:20px;justify-content:flex-start;width:99%}.ast-tb-main-title{border-left:1px solid #e2e8f0;border-right:1px solid #e2e8f0;font-size:20px;font-style:normal;font-weight:600;line-height:24px;padding:0 20px}.ast-tb-breadcrumbs{color:#4b5563;font-size:13.081px;font-style:normal;font-weight:500;line-height:23.546px}.ast-tb-crumb-icon{padding:0 8px}.ast-tb-sidebar{background:#fff;background-color:#fff;border-right:1px solid #e5e7eb;height:100%;min-width:280px;padding:40px 20px;top:65px}.ast-tb-sidebar-header{align-items:center;cursor:pointer;display:flex;gap:16px;justify-content:space-between;margin-bottom:40px;padding-left:10px}.ast-tb-sidebar-header-left{gap:8px}.ast-tb-sidebar-header-left,.ast-tb-sidebar-header-right{align-items:center;display:flex}.ast-tb-sidebar-header-right>svg{position:relative;right:20px;width:14px}.ast-tb-sidebar-header:hover{background:#eff6ff}.ast-tb-sidebar-header>h2{color:#1e293b;font-size:16px;font-style:normal;font-weight:600;line-height:24px}.ast-tb-sidebar-subtitle{margin-bottom:30px}.ast-tb-sidebar-subtitle>h3{color:#1e293b;font-size:14px;font-style:normal;font-weight:500;line-height:24px}.ast-tb-sidebar-item{align-items:center;cursor:pointer;display:flex;gap:8px;justify-content:space-between;max-height:28px;padding:12px 8px 10px}.ast-tb-sidebar-item-selected,.ast-tb-sidebar-item:hover{background:#eff6ff}.ast-tb-sidebar-item-label{color:#1e293b;font-size:14px;font-style:normal;font-weight:400;line-height:20px;padding-bottom:2px}.ast-tb-sidebar-item-svg{position:relative;right:30px}.ast-tb-all-layouts-btn{cursor:pointer}.ast-tb-canvas{flex-grow:1;height:100%;overflow-y:auto;padding:40px;position:relative}.ast-tb-canvas-header>h2{color:#000;font-size:20px;font-style:normal;font-weight:500;letter-spacing:-.4px;line-height:28px}.ast-tb-canvas-header{align-items:center;border-bottom:1px solid #d1d5db;display:flex;justify-content:space-between;width:100%}.ast-tb-card{align-items:center;background-color:#fff;border:1px solid #f9fafb;border-radius:4px;box-shadow:0 6px 15px -2px rgba(16,24,40,.05);display:flex;flex-direction:column;max-height:240px;max-width:200px;padding:15px 20px 20px}.ast-tb-card-title-wrapper{align-items:center;gap:8px}h3.ast-tb-create-new-card-title{margin-left:5%}.ast-tb-canvas-content-row{grid-gap:24px;display:flex;flex-wrap:wrap;margin-top:32px}.ast-tb-canvas-body{margin-bottom:100px}.ast-tb-card-svg-icon{height:200px}.ast-tb-card-title{color:#1e293b;font-size:14px;font-style:normal;font-weight:500;margin:0}.ast-tb-card-title-wrapper{border-top:1px solid #e9e9e9;display:flex;margin-top:15px;padding-top:10px;width:120%}.ast-tb-card-title-wrapper>svg{margin-left:5%}.ast-tb-canvas-content-row-flex{display:flex;flex-wrap:wrap;gap:32px;margin-top:32px}.ast-tb-category-parent{margin-bottom:32px;margin-top:32px}.ast-tb-category-parent:last-child{margin-bottom:100px}.ast-tb-btn{border:1px #046bd2;border-radius:6px;box-shadow:0 1px 2px 0 rgba(16,24,40,.05);cursor:pointer;gap:8px;padding:8px 14px}.ast-tb-btn,.ast-tb-card-hover-btn{align-items:center;background:#046bd2;color:#fff;display:flex;height:35px;justify-content:center}.ast-tb-card-hover-btn{border:1px solid #046bd2;border-radius:4px;box-shadow:0 2px 4px -2px rgba(0,0,0,.06),0 4px 8px -2px rgba(0,0,0,.1);font-size:12px;font-style:normal;font-weight:500;gap:2px;line-height:150%;padding:8px 20px 8px 12px;width:150px}.ast-tb-btn:hover,.ast-tb-card-hover-btn:hover{background:#035fbc}.ast-tb-card-parent{position:relative}.ast-tb-link,.ast-tb-link:active,.ast-tb-link:focus,.ast-tb-link:hover{box-shadow:none;outline:none;text-decoration:none}.ast-tb-locked{align-items:center;cursor:pointer;display:flex;flex-direction:column;gap:12px;left:35%;position:absolute;top:30%;z-index:3}.ast-tb-locked>svg{width:25px}.ast-tb-locked button{cursor:pointer;padding:8px;width:80px}.ast-tb-sidebar-item-left{align-items:center;display:flex;gap:8px;justify-content:center}.ast-tb-sidebar-item-right svg{color:#3c434a;position:relative;right:20px;width:14px}.ast-tb-sidebar-help{align-items:center;bottom:40px;cursor:pointer;display:flex;gap:8px;justify-content:flex-start;min-width:265px;padding:12px 8px 10px}.ast-tb-card-blur-on-hover{filter:blur(2.5px)}.ast-tb-breadcrumb-icon{position:relative;top:2px}.ast-tb-card-icon-wrapper-hover{filter:blur(2.5px)}.ast-tb-help-divider{border-top:1px solid #e2e8f0;margin-bottom:16px;margin-top:24px;width:100%}.ast-tb-header-close{cursor:pointer} assets/theme-builder/build/index.js 0000644 00000157565 15150276715 0013374 0 ustar 00 !function(){var e={679:function(e,t,r){"use strict";var n=r(864),i={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},l={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},o={};function c(e){return n.isMemo(e)?l:o[e.$$typeof]||i}o[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},o[n.Memo]=l;var s=Object.defineProperty,h=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,m=Object.getOwnPropertyDescriptor,u=Object.getPrototypeOf,d=Object.prototype;e.exports=function e(t,r,n){if("string"!=typeof r){if(d){var i=u(r);i&&i!==d&&e(t,i,n)}var l=h(r);f&&(l=l.concat(f(r)));for(var o=c(t),p=c(r),E=0;E<l.length;++E){var w=l[E];if(!(a[w]||n&&n[w]||p&&p[w]||o&&o[w])){var g=m(r,w);try{s(t,w,g)}catch(e){}}}}return t}},703:function(e,t,r){"use strict";var n=r(414);function i(){}function a(){}a.resetWarningCache=i,e.exports=function(){function e(e,t,r,i,a,l){if(l!==n){var o=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:i};return r.PropTypes=r,r}},697:function(e,t,r){e.exports=r(703)()},414:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},921:function(e,t){"use strict";var r="function"==typeof Symbol&&Symbol.for,n=r?Symbol.for("react.element"):60103,i=r?Symbol.for("react.portal"):60106,a=r?Symbol.for("react.fragment"):60107,l=r?Symbol.for("react.strict_mode"):60108,o=r?Symbol.for("react.profiler"):60114,c=r?Symbol.for("react.provider"):60109,s=r?Symbol.for("react.context"):60110,h=r?Symbol.for("react.async_mode"):60111,f=r?Symbol.for("react.concurrent_mode"):60111,m=r?Symbol.for("react.forward_ref"):60112,u=r?Symbol.for("react.suspense"):60113,d=r?Symbol.for("react.suspense_list"):60120,p=r?Symbol.for("react.memo"):60115,E=r?Symbol.for("react.lazy"):60116,w=r?Symbol.for("react.block"):60121,g=r?Symbol.for("react.fundamental"):60117,x=r?Symbol.for("react.responder"):60118,v=r?Symbol.for("react.scope"):60119;function y(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case h:case f:case a:case o:case l:case u:return e;default:switch(e=e&&e.$$typeof){case s:case m:case E:case p:case c:return e;default:return t}}case i:return t}}}function C(e){return y(e)===f}t.AsyncMode=h,t.ConcurrentMode=f,t.ContextConsumer=s,t.ContextProvider=c,t.Element=n,t.ForwardRef=m,t.Fragment=a,t.Lazy=E,t.Memo=p,t.Portal=i,t.Profiler=o,t.StrictMode=l,t.Suspense=u,t.isAsyncMode=function(e){return C(e)||y(e)===h},t.isConcurrentMode=C,t.isContextConsumer=function(e){return y(e)===s},t.isContextProvider=function(e){return y(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===n},t.isForwardRef=function(e){return y(e)===m},t.isFragment=function(e){return y(e)===a},t.isLazy=function(e){return y(e)===E},t.isMemo=function(e){return y(e)===p},t.isPortal=function(e){return y(e)===i},t.isProfiler=function(e){return y(e)===o},t.isStrictMode=function(e){return y(e)===l},t.isSuspense=function(e){return y(e)===u},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===f||e===o||e===l||e===u||e===d||"object"==typeof e&&null!==e&&(e.$$typeof===E||e.$$typeof===p||e.$$typeof===c||e.$$typeof===s||e.$$typeof===m||e.$$typeof===g||e.$$typeof===x||e.$$typeof===v||e.$$typeof===w)},t.typeOf=y},864:function(e,t,r){"use strict";e.exports=r(921)},585:function(e){e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},658:function(e,t,r){var n=r(585);e.exports=function e(t,r,i){return n(r)||(i=r||i,r=[]),i=i||{},t instanceof RegExp?function(e,t){var r=e.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)t.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return h(e,t)}(t,r):n(t)?function(t,r,n){for(var i=[],a=0;a<t.length;a++)i.push(e(t[a],r,n).source);return h(new RegExp("(?:"+i.join("|")+")",f(n)),r)}(t,r,i):function(e,t,r){return m(a(e,r),t,r)}(t,r,i)},e.exports.parse=a,e.exports.compile=function(e,t){return o(a(e,t),t)},e.exports.tokensToFunction=o,e.exports.tokensToRegExp=m;var i=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var r,n=[],a=0,l=0,o="",h=t&&t.delimiter||"/";null!=(r=i.exec(e));){var f=r[0],m=r[1],u=r.index;if(o+=e.slice(l,u),l=u+f.length,m)o+=m[1];else{var d=e[l],p=r[2],E=r[3],w=r[4],g=r[5],x=r[6],v=r[7];o&&(n.push(o),o="");var y=null!=p&&null!=d&&d!==p,C="+"===x||"*"===x,b="?"===x||"*"===x,F=r[2]||h,D=w||g;n.push({name:E||a++,prefix:p||"",delimiter:F,optional:b,repeat:C,partial:y,asterisk:!!v,pattern:D?s(D):v?".*":"[^"+c(F)+"]+?"})}}return l<e.length&&(o+=e.substr(l)),o&&n.push(o),n}function l(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function o(e,t){for(var r=new Array(e.length),i=0;i<e.length;i++)"object"==typeof e[i]&&(r[i]=new RegExp("^(?:"+e[i].pattern+")$",f(t)));return function(t,i){for(var a="",o=t||{},c=(i||{}).pretty?l:encodeURIComponent,s=0;s<e.length;s++){var h=e[s];if("string"!=typeof h){var f,m=o[h.name];if(null==m){if(h.optional){h.partial&&(a+=h.prefix);continue}throw new TypeError('Expected "'+h.name+'" to be defined')}if(n(m)){if(!h.repeat)throw new TypeError('Expected "'+h.name+'" to not repeat, but received `'+JSON.stringify(m)+"`");if(0===m.length){if(h.optional)continue;throw new TypeError('Expected "'+h.name+'" to not be empty')}for(var u=0;u<m.length;u++){if(f=c(m[u]),!r[s].test(f))throw new TypeError('Expected all "'+h.name+'" to match "'+h.pattern+'", but received `'+JSON.stringify(f)+"`");a+=(0===u?h.prefix:h.delimiter)+f}}else{if(f=h.asterisk?encodeURI(m).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):c(m),!r[s].test(f))throw new TypeError('Expected "'+h.name+'" to match "'+h.pattern+'", but received "'+f+'"');a+=h.prefix+f}}else a+=h}return a}}function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function s(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function h(e,t){return e.keys=t,e}function f(e){return e&&e.sensitive?"":"i"}function m(e,t,r){n(t)||(r=t||r,t=[]);for(var i=(r=r||{}).strict,a=!1!==r.end,l="",o=0;o<e.length;o++){var s=e[o];if("string"==typeof s)l+=c(s);else{var m=c(s.prefix),u="(?:"+s.pattern+")";t.push(s),s.repeat&&(u+="(?:"+m+u+")*"),l+=u=s.optional?s.partial?m+"("+u+")?":"(?:"+m+"("+u+"))?":m+"("+u+")"}}var d=c(r.delimiter||"/"),p=l.slice(-d.length)===d;return i||(l=(p?l.slice(0,-d.length):l)+"(?:"+d+"(?=$))?"),l+=a?"$":i&&p?"":"(?="+d+"|$)",h(new RegExp("^"+l,f(r)),t)}}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){"use strict";var e=window.React,t=r.n(e),n=window.ReactDOM,i=r.n(n),a=window.wp.i18n,l=()=>{let t=[(0,a.__)("Dashboard","astra"),(0,a.__)("Site Builder","astra")];return(0,e.createElement)("nav",{className:"ast-tb-breadcrumbs"},t.map(((r,n)=>(0,e.createElement)("span",{className:"ast-tb-crumb",key:n},r,n<t.length-1&&(0,e.createElement)("span",{className:"ast-tb-crumb-icon"},(0,e.createElement)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-breadcrumb-icon"},(0,e.createElement)("path",{d:"M4.90625 10.2734L8.17578 7.0039L4.90625 3.73438",stroke:"#4B5563",strokeWidth:"1.08984",strokeLinecap:"round",strokeLinejoin:"round"})))))))},o=()=>(0,e.createElement)("div",{className:"ast-tb-header"},(0,e.createElement)("div",{className:"ast-tb-header-items"},(0,e.createElement)("svg",{width:"40",height:"40",viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("rect",{width:"40",height:"40",rx:"20",fill:"url(#paint0_linear_6786_60902)"}),(0,e.createElement)("path",{d:"M19.7688 8.00063C19.7679 7.99979 19.7688 7.99979 19.7688 8.00063C16.5122 14.6651 13.2557 21.333 10 27.9975C11.3949 27.9975 12.7907 27.9975 14.1865 27.9975C16.8208 22.8376 19.4568 17.6759 22.0919 12.5126L19.7688 8.00063Z",fill:"white"}),(0,e.createElement)("path",{d:"M24.1092 16.2694C22.7652 18.976 21.4213 21.6833 20.0774 24.3899L19.9996 24.5408H20.0774C21.3695 24.5408 22.6615 24.5408 23.9536 24.5408C24.4704 25.6933 24.9873 26.8475 25.5041 28C27.0027 28 28.5014 28 30 28C28.0364 24.0881 26.0719 20.1788 24.1092 16.2694Z",fill:"white"}),(0,e.createElement)("defs",null,(0,e.createElement)("linearGradient",{id:"paint0_linear_6786_60902",x1:"-5.96046e-07",y1:"40",x2:"47.0588",y2:"28.2353",gradientUnits:"userSpaceOnUse"},(0,e.createElement)("stop",{stopColor:"#492CDD"}),(0,e.createElement)("stop",{offset:"1",stopColor:"#AD38E2"})))),(0,e.createElement)("h2",{className:"ast-tb-main-title"},astra_theme_builder.title),(0,e.createElement)(l,null)),(0,e.createElement)("div",{className:"ast-tb-header-close",onClick:()=>window.location.href=astra_theme_builder.admin_url},(0,e.createElement)("div",null,(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M6 18L18 6M6 6L18 18",stroke:"#475569",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})))));function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function s(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,c(e,t)}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},h.apply(this,arguments)}function f(e){return"/"===e.charAt(0)}function m(e,t){for(var r=t,n=r+1,i=e.length;n<i;r+=1,n+=1)e[r]=e[n];e.pop()}var u=function(e,t){void 0===t&&(t="");var r,n=e&&e.split("/")||[],i=t&&t.split("/")||[],a=e&&f(e),l=t&&f(t),o=a||l;if(e&&f(e)?i=n:n.length&&(i.pop(),i=i.concat(n)),!i.length)return"/";if(i.length){var c=i[i.length-1];r="."===c||".."===c||""===c}else r=!1;for(var s=0,h=i.length;h>=0;h--){var u=i[h];"."===u?m(i,h):".."===u?(m(i,h),s++):s&&(m(i,h),s--)}if(!o)for(;s--;s)i.unshift("..");!o||""===i[0]||i[0]&&f(i[0])||i.unshift("");var d=i.join("/");return r&&"/"!==d.substr(-1)&&(d+="/"),d},d=!0,p="Invariant failed";function E(e,t){if(!e){if(d)throw new Error(p);var r="function"==typeof t?t():t,n=r?"".concat(p,": ").concat(r):p;throw new Error(n)}}function w(e){return"/"===e.charAt(0)?e:"/"+e}function g(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function x(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function v(e){var t=e.pathname,r=e.search,n=e.hash,i=t||"/";return r&&"?"!==r&&(i+="?"===r.charAt(0)?r:"?"+r),n&&"#"!==n&&(i+="#"===n.charAt(0)?n:"#"+n),i}function y(e,t,r,n){var i;"string"==typeof e?(i=function(e){var t=e||"/",r="",n="",i=t.indexOf("#");-1!==i&&(n=t.substr(i),t=t.substr(0,i));var a=t.indexOf("?");return-1!==a&&(r=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===r?"":r,hash:"#"===n?"":n}}(e),i.state=t):(void 0===(i=h({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return r&&(i.key=r),n?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=u(i.pathname,n.pathname)):i.pathname=n.pathname:i.pathname||(i.pathname="/"),i}function C(){var e=null,t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,r,n,i){if(null!=e){var a="function"==typeof e?e(t,r):e;"string"==typeof a?"function"==typeof n?n(a,i):i(!0):i(!1!==a)}else i(!0)},appendListener:function(e){var r=!0;function n(){r&&e.apply(void 0,arguments)}return t.push(n),function(){r=!1,t=t.filter((function(e){return e!==n}))}},notifyListeners:function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];t.forEach((function(e){return e.apply(void 0,r)}))}}}var b=!("undefined"==typeof window||!window.document||!window.document.createElement);function F(e,t){t(window.confirm(e))}var D="popstate",_="hashchange";function k(){try{return window.history.state||{}}catch(e){return{}}}var L=r(697),M=r.n(L),H=1073741823,N="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==r.g?r.g:{},S=t().createContext||function(t,r){var n,i,a,l="__create-react-context-"+((N[a="__global_unique_id__"]=(N[a]||0)+1)+"__"),o=function(e){function t(){var t,r,n;return(t=e.apply(this,arguments)||this).emitter=(r=t.props.value,n=[],{on:function(e){n.push(e)},off:function(e){n=n.filter((function(t){return t!==e}))},get:function(){return r},set:function(e,t){r=e,n.forEach((function(e){return e(r,t)}))}}),t}s(t,e);var n=t.prototype;return n.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},n.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var t,n=this.props.value,i=e.value;((a=n)===(l=i)?0!==a||1/a==1/l:a!=a&&l!=l)?t=0:(t="function"==typeof r?r(n,i):H,0!=(t|=0)&&this.emitter.set(e.value,t))}var a,l},n.render=function(){return this.props.children},t}(e.Component);o.childContextTypes=((n={})[l]=M().object.isRequired,n);var c=function(e){function r(){var t;return(t=e.apply(this,arguments)||this).state={value:t.getValue()},t.onUpdate=function(e,r){0!=((0|t.observedBits)&r)&&t.setState({value:t.getValue()})},t}s(r,e);var n=r.prototype;return n.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?H:t},n.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?H:e},n.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},n.getValue=function(){return this.context[l]?this.context[l].get():t},n.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},r}(e.Component);return c.contextTypes=((i={})[l]=M().object,i),{Provider:o,Consumer:c}},V=S,B=r(658),O=r.n(B);function P(e,t){if(null==e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}r(864),r(679);var R=function(e){var t=V();return t.displayName=e,t},$=R("Router-History"),A=function(e){var t=V();return t.displayName=e,t},T=A("Router"),j=function(e){function r(t){var r;return(r=e.call(this,t)||this).state={location:t.history.location},r._isMounted=!1,r._pendingLocation=null,t.staticContext||(r.unlisten=t.history.listen((function(e){r._isMounted?r.setState({location:e}):r._pendingLocation=e}))),r}s(r,e),r.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=r.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&this.unlisten()},n.render=function(){return t().createElement(T.Provider,{value:{history:this.props.history,location:this.state.location,match:r.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},t().createElement($.Provider,{children:this.props.children||null,value:this.props.history}))},r}(t().Component);t().Component,t().Component;var Z={},W=0;function U(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var r=t,n=r.path,i=r.exact,a=void 0!==i&&i,l=r.strict,o=void 0!==l&&l,c=r.sensitive,s=void 0!==c&&c;return[].concat(n).reduce((function(t,r){if(!r&&""!==r)return null;if(t)return t;var n=function(e,t){var r=""+t.end+t.strict+t.sensitive,n=Z[r]||(Z[r]={});if(n[e])return n[e];var i=[],a={regexp:O()(e,i,t),keys:i};return W<1e4&&(n[e]=a,W++),a}(r,{end:a,strict:o,sensitive:s}),i=n.regexp,l=n.keys,c=i.exec(e);if(!c)return null;var h=c[0],f=c.slice(1),m=e===h;return a&&!m?null:{path:r,url:"/"===r&&""===h?"/":h,isExact:m,params:l.reduce((function(e,t,r){return e[t.name]=f[r],e}),{})}}),null)}var I=function(e){function r(){return e.apply(this,arguments)||this}return s(r,e),r.prototype.render=function(){var e=this;return t().createElement(T.Consumer,null,(function(r){r||E(!1);var n=e.props.location||r.location,i=h({},r,{location:n,match:e.props.computedMatch?e.props.computedMatch:e.props.path?U(n.pathname,e.props):r.match}),a=e.props,l=a.children,o=a.component,c=a.render;return Array.isArray(l)&&0===l.length&&(l=null),t().createElement(T.Provider,{value:i},i.match?l?"function"==typeof l?l(i):l:o?t().createElement(o,i):c?c(i):null:"function"==typeof l?l(i):null)}))},r}(t().Component);t().Component;var z=function(e){function r(){return e.apply(this,arguments)||this}return s(r,e),r.prototype.render=function(){var e=this;return t().createElement(T.Consumer,null,(function(r){r||E(!1);var n,i,a=e.props.location||r.location;return t().Children.forEach(e.props.children,(function(e){if(null==i&&t().isValidElement(e)){n=e;var l=e.props.path||e.props.from;i=l?U(a.pathname,h({},e.props,{path:l})):r.match}})),i?t().cloneElement(n,{location:a,computedMatch:i}):null}))},r}(t().Component),q=t().useContext;function K(){return q(T).location}var J=({label:t,icon:r,layout:n,template:i})=>{const a=K(),[l,o]=(0,e.useState)(!1),c=new URLSearchParams(a.search),s=c.get("page"),h=c.get("path"),f="theme-builder"===s&&n===h;(0,e.useEffect)((()=>{o(f)}),[h,n]);const m=l?"ast-tb-sidebar-item-selected":"",[u,d]=(0,e.useState)(!1);return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:`ast-tb-sidebar-item ${m}`,onMouseEnter:()=>{d(!0)},onMouseLeave:()=>{d(!1)}},(0,e.createElement)("div",{className:"ast-tb-sidebar-item-left"},(0,e.createElement)("span",{className:"ast-tb-sidebar-item-icon"},r),(0,e.createElement)("span",{className:`ast-tb-sidebar-item-label ${"404 Page"===t||"Archive"===t?"ast-tb-sidebar-item-svg":""} `},t)),(0,e.createElement)("div",{className:"ast-tb-sidebar-item-right"},u&&(0,e.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-6 h-6"},(0,e.createElement)("path",{fillRule:"evenodd",d:"M12 1.5a5.25 5.25 0 00-5.25 5.25v3a3 3 0 00-3 3v6.75a3 3 0 003 3h10.5a3 3 0 003-3v-6.75a3 3 0 00-3-3v-3c0-2.9-2.35-5.25-5.25-5.25zm3.75 8.25v-3a3.75 3.75 0 10-7.5 0v3h7.5z",clipRule:"evenodd"})))))},G=({items:t})=>{const r=K(),[n,i]=(0,e.useState)(!1),l=new URLSearchParams(r.search),o=l.get("page"),c=l.get("path"),s="theme-builder"===o&&"all-layouts"===c;(0,e.useEffect)((()=>{i(s)}),[c]);const h=n?"ast-tb-sidebar-item-selected":"",[f,m]=(0,e.useState)(!1);return(0,e.createElement)("div",{className:"ast-tb-sidebar"},(0,e.createElement)("div",{className:`ast-tb-sidebar-header ${h}`,onMouseEnter:()=>{m(!0)},onMouseLeave:()=>{m(!1)}},(0,e.createElement)("div",{className:"ast-tb-sidebar-header-left"},(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M2.39844 9.24418C2.39844 8.85015 2.59899 8.4805 2.93665 8.25215L11.2566 2.62564C11.7008 2.32531 12.2961 2.32531 12.7402 2.62564L21.0602 8.25216C21.3979 8.4805 21.5984 8.85015 21.5984 9.24418V19.7745C21.5984 20.7829 20.7388 21.6004 19.6784 21.6004H4.31844C3.25805 21.6004 2.39844 20.7829 2.39844 19.7745V9.24418Z",stroke:"#4B5563",strokeWidth:"2"})),(0,e.createElement)("h2",null,(0,a.__)("All Layouts","astra"))),(0,e.createElement)("div",{className:"ast-tb-sidebar-header-right"},f&&(0,e.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-6 h-6"},(0,e.createElement)("path",{fillRule:"evenodd",d:"M12 1.5a5.25 5.25 0 00-5.25 5.25v3a3 3 0 00-3 3v6.75a3 3 0 003 3h10.5a3 3 0 003-3v-6.75a3 3 0 00-3-3v-3c0-2.9-2.35-5.25-5.25-5.25zm3.75 8.25v-3a3.75 3.75 0 10-7.5 0v3h7.5z",clipRule:"evenodd"})))),(0,e.createElement)("div",{className:"ast-tb-sidebar-subtitle"},(0,e.createElement)("h3",null,(0,a.__)("Website Parts","astra"))),t.map(((t,r)=>(0,e.createElement)(J,{key:r,label:t.label,icon:t.icon,layout:t.layout,template:t.template}))),(0,e.createElement)("div",{className:"ast-tb-help-divider"}),(0,e.createElement)("div",{className:"ast-tb-sidebar-help ast-tb-sidebar-item",onClick:()=>window.open(astra_theme_builder.astra_docs_page_url,"_blank")},(0,e.createElement)("svg",{width:"24",height:"25",viewBox:"0 0 24 25",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M11.9974 17.3004V17.3426M9.59844 9.54572C9.59844 8.1952 10.673 7.10039 11.9984 7.10039C13.3239 7.10039 14.3984 8.1952 14.3984 9.54572C14.3984 10.8962 13.3239 11.991 11.9984 11.991C11.9984 11.991 11.9974 12.7209 11.9974 13.6213M21.5984 12.5004C21.5984 17.8023 17.3004 22.1004 11.9984 22.1004C6.6965 22.1004 2.39844 17.8023 2.39844 12.5004C2.39844 7.19846 6.6965 2.90039 11.9984 2.90039C17.3004 2.90039 21.5984 7.19846 21.5984 12.5004Z",stroke:"#4B5563",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})),(0,e.createElement)("span",null,(0,a.__)("Help","astra"))))},Y=[{label:(0,a.__)("Header","astra"),layout:"header",template:"",icon:(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M2.99844 9.00039H20.9984M5.99844 21.6004H17.9984C19.9867 21.6004 21.5984 19.9886 21.5984 18.0004V6.00039C21.5984 4.01217 19.9867 2.40039 17.9984 2.40039H5.99844C4.01021 2.40039 2.39844 4.01217 2.39844 6.00039V18.0004C2.39844 19.9886 4.01021 21.6004 5.99844 21.6004Z",stroke:"#4B5563",strokeWidth:"2"}))},{label:(0,a.__)("Footer","astra"),layout:"footer",template:"",icon:(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M21.0016 15.0004L3.00156 15.0004M18.0016 2.40039L6.00156 2.40039C4.01334 2.40039 2.40156 4.01217 2.40156 6.00039L2.40156 18.0004C2.40156 19.9886 4.01334 21.6004 6.00156 21.6004L18.0016 21.6004C19.9898 21.6004 21.6016 19.9886 21.6016 18.0004L21.6016 6.00039C21.6016 4.01217 19.9898 2.40039 18.0016 2.40039Z",stroke:"#4B5563",strokeWidth:"2"}))},{label:(0,a.__)("Hooks","astra"),layout:"hooks",template:"",icon:(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M9.59844 15.0004L6.59844 12.0004L9.59844 9.00039M14.3984 9.00039L17.3984 12.0004L14.3984 15.0004M4.79844 21.6004C3.47295 21.6004 2.39844 20.5259 2.39844 19.2004V4.80039C2.39844 3.47491 3.47295 2.40039 4.79844 2.40039H19.1984C20.5239 2.40039 21.5984 3.47491 21.5984 4.80039V19.2004C21.5984 20.5259 20.5239 21.6004 19.1984 21.6004H4.79844Z",stroke:"#4B5563",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}))},{label:(0,a.__)("Inside Post/Page","astra"),layout:"content",template:"",icon:(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M2.99844 7.80039H20.9984M17.9984 12.0004H5.99844M13.1984 16.8004H5.99844M5.99844 21.6004H17.9984C19.9867 21.6004 21.5984 19.9886 21.5984 18.0004V6.00039C21.5984 4.01217 19.9867 2.40039 17.9984 2.40039H5.99844C4.01021 2.40039 2.39844 4.01217 2.39844 6.00039V18.0004C2.39844 19.9886 4.01021 21.6004 5.99844 21.6004Z",stroke:"#4B5563",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}))},{label:(0,a.__)("Single","astra"),layout:"template",template:"single",icon:(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M8.99844 2.40039V21.6004M13.1984 6.00039H16.7984M13.1984 9.60039H16.7984M13.1984 13.2004H13.7984M5.99844 21.6004H17.9984C19.9867 21.6004 21.5984 19.9886 21.5984 18.0004V6.00039C21.5984 4.01217 19.9867 2.40039 17.9984 2.40039H5.99844C4.01021 2.40039 2.39844 4.01217 2.39844 6.00039V18.0004C2.39844 19.9886 4.01021 21.6004 5.99844 21.6004Z",stroke:"#4B5563",strokeWidth:"2",strokeLinecap:"round"}))},{label:(0,a.__)("Archive","astra"),layout:"template",template:"archive",icon:(0,e.createElement)("svg",{width:"54",height:"35",viewBox:"0 0 54 35",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-sidebar-item-svg"},(0,e.createElement)("path",{d:"M-31 25.0004L-36 20.002M-28.5 11.002H-23M-18.5 21.502H-21.5M-31 1.50195L-18.5 2.50195M-18.5 23.502L-21.5 6.00195M-24 33.502L-26.5 30.502M32.3984 13.0004V25.0004C32.3984 26.9886 34.0102 28.6004 35.9984 28.6004C37.9867 28.6004 46.0102 28.6004 47.9984 28.6004C49.9867 28.6004 51.5984 26.9886 51.5984 25.0004V13.0004C51.5984 11.0122 49.9867 9.40039 47.9984 9.40039H35.9984C34.0102 9.40039 32.3984 11.0122 32.3984 13.0004Z",stroke:"#4B5563",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("mask",{id:"path-2-inside-1_6833_64713",fill:"white"},(0,e.createElement)("rect",{x:"35.7031",y:"12",width:"6",height:"6",rx:"0.3"})),(0,e.createElement)("rect",{x:"35.7031",y:"12",width:"6",height:"6",rx:"0.3",stroke:"#4B5563",strokeWidth:"3",mask:"url(#path-2-inside-1_6833_64713)"}),(0,e.createElement)("rect",{x:"42.7031",y:"13",width:"6",height:"1.5",rx:"0.75",fill:"#4B5563"}),(0,e.createElement)("rect",{x:"42.7031",y:"15.5",width:"5",height:"1.5",rx:"0.75",fill:"#4B5563"}),(0,e.createElement)("mask",{id:"path-5-inside-2_6833_64713",fill:"white"},(0,e.createElement)("rect",{x:"35.7031",y:"20",width:"6",height:"6",rx:"0.3"})),(0,e.createElement)("rect",{x:"35.7031",y:"20",width:"6",height:"6",rx:"0.3",stroke:"#4B5563",strokeWidth:"3",mask:"url(#path-5-inside-2_6833_64713)"}),(0,e.createElement)("rect",{x:"42.7031",y:"21",width:"6",height:"1.5",rx:"0.75",fill:"#4B5563"}),(0,e.createElement)("rect",{x:"42.7031",y:"23.5",width:"5",height:"1.5",rx:"0.75",fill:"#4B5563"}))},{label:(0,a.__)("404 Page","astra"),layout:"404-page",template:"",icon:(0,e.createElement)("svg",{width:"54",height:"24",viewBox:"0 0 54 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-sidebar-item-svg"},(0,e.createElement)("path",{d:"M-4.2 4.50195H-9M32.3969 6.00039V18.0004C32.3969 19.9886 34.0086 21.6004 35.9969 21.6004H47.9969C49.9851 21.6004 51.5969 19.9886 51.5969 18.0004V6.00039C51.5969 4.01217 49.9851 2.40039 47.9969 2.40039H35.9969C34.0086 2.40039 32.3969 4.01217 32.3969 6.00039Z",stroke:"#4B5563",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M38.0231 14.9167C37.8902 14.9167 37.7785 14.8694 37.6881 14.775C37.5977 14.675 37.5525 14.5528 37.5525 14.4083V10.4917L37.72 10.5333L36.1805 12.525L36.1406 12.4167H38.9643C39.092 12.4167 39.1983 12.4611 39.2834 12.55C39.3685 12.6389 39.411 12.75 39.411 12.8833C39.411 13.0111 39.3685 13.1194 39.2834 13.2083C39.1983 13.2917 39.092 13.3333 38.9643 13.3333H35.4786C35.3669 13.3333 35.2579 13.2861 35.1516 13.1917C35.0505 13.0972 35 12.9806 35 12.8417C35 12.7194 35.0399 12.6083 35.1196 12.5083L37.6402 9.28333C37.6828 9.22222 37.7386 9.175 37.8077 9.14167C37.8769 9.10278 37.954 9.08333 38.0391 9.08333C38.1773 9.08333 38.289 9.13333 38.3741 9.23333C38.4645 9.32778 38.5097 9.44722 38.5097 9.59167V14.4083C38.5097 14.5528 38.4618 14.675 38.3661 14.775C38.2757 14.8694 38.1614 14.9167 38.0231 14.9167Z",fill:"#4B5563"}),(0,e.createElement)("path",{d:"M42.0584 15C41.601 15 41.2128 14.875 40.8938 14.625C40.58 14.3694 40.3407 14.0167 40.1759 13.5667C40.011 13.1111 39.9286 12.5889 39.9286 12C39.9286 11.4056 40.011 10.8833 40.1759 10.4333C40.3407 9.98333 40.58 9.63333 40.8938 9.38333C41.2128 9.12778 41.601 9 42.0584 9C42.5157 9 42.9012 9.12778 43.215 9.38333C43.534 9.63333 43.776 9.98333 43.9408 10.4333C44.1057 10.8833 44.1881 11.4056 44.1881 12C44.1881 12.5889 44.1057 13.1111 43.9408 13.5667C43.776 14.0167 43.534 14.3694 43.215 14.625C42.9012 14.875 42.5157 15 42.0584 15ZM42.0584 14C42.2817 14 42.4731 13.9278 42.6327 13.7833C42.7975 13.6333 42.9251 13.4111 43.0155 13.1167C43.1059 12.8167 43.1511 12.4444 43.1511 12C43.1511 11.55 43.1059 11.1778 43.0155 10.8833C42.9251 10.5889 42.7975 10.3694 42.6327 10.225C42.4731 10.075 42.2817 10 42.0584 10C41.8403 10 41.6489 10.075 41.484 10.225C41.3192 10.3694 41.1916 10.5889 41.1012 10.8833C41.0108 11.1778 40.9656 11.55 40.9656 12C40.9656 12.4444 41.0108 12.8167 41.1012 13.1167C41.1916 13.4111 41.3192 13.6333 41.484 13.7833C41.6489 13.9278 41.8403 14 42.0584 14Z",fill:"#4B5563"}),(0,e.createElement)("path",{d:"M47.6121 14.9167C47.4791 14.9167 47.3675 14.8694 47.2771 14.775C47.1867 14.675 47.1415 14.5528 47.1415 14.4083V10.4917L47.309 10.5333L45.7695 12.525L45.7296 12.4167H48.5533C48.6809 12.4167 48.7873 12.4611 48.8724 12.55C48.9575 12.6389 49 12.75 49 12.8833C49 13.0111 48.9575 13.1194 48.8724 13.2083C48.7873 13.2917 48.6809 13.3333 48.5533 13.3333H45.0676C44.9559 13.3333 44.8469 13.2861 44.7405 13.1917C44.6395 13.0972 44.589 12.9806 44.589 12.8417C44.589 12.7194 44.6289 12.6083 44.7086 12.5083L47.2292 9.28333C47.2718 9.22222 47.3276 9.175 47.3967 9.14167C47.4658 9.10278 47.543 9.08333 47.628 9.08333C47.7663 9.08333 47.878 9.13333 47.9631 9.23333C48.0535 9.32778 48.0987 9.44722 48.0987 9.59167V14.4083C48.0987 14.5528 48.0508 14.675 47.9551 14.775C47.8647 14.8694 47.7503 14.9167 47.6121 14.9167Z",fill:"#4B5563"}))}],Q={Header:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{width:"323.5",height:"56",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"20",y:"19",width:"48",height:"18",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"149",y:"24",width:"26",height:"8",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"117",y:"24",width:"26",height:"8",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"181",y:"24",width:"25",height:"8",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"212",y:"24",width:"26",height:"8",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"259",y:"24",width:"26",height:"8",rx:"2",fill:"#F5F9FE"})),Footer:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{x:"0.5",width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"0.5",y:"248",width:"323.5",height:"56",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"20.5",y:"263",width:"48",height:"18",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"163.5",y:"263",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"117.5",y:"263",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"117.5",y:"273",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"163.5",y:"273",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"209.5",y:"273",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"254.5",y:"273",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"117.5",y:"283",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"163.5",y:"283",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"209.5",y:"283",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"254.5",y:"283",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"209.5",y:"263",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"254.5",y:"263",width:"26",height:"6",rx:"2",fill:"#F5F9FE"})),Hooks:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{x:"0.5",width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"49.25",y:"50.5",width:"226",height:"103",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("path",{d:"M145.417 88.3327L131.75 101.999L145.417 115.666M179.583 88.3327L193.25 101.999L179.583 115.666M169.333 74.666L155.667 129.333",stroke:"white",strokeWidth:"6.83333",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("rect",{x:"49.25",y:"173.5",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"191.5",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"209.5",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"227.5",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"245.5",width:"154",height:"8",rx:"4",fill:"#D6DCE4"})),Archive:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"49.75",y:"29",width:"107",height:"63",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"102",width:"107",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"119",width:"62",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"29",width:"107",height:"63",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"102",width:"107",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"119",width:"62",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"146",width:"107",height:"63",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"219",width:"107",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"236",width:"62",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"146",width:"107",height:"63",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"219",width:"107",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"236",width:"62",height:"7",rx:"3.5",fill:"#D6DCE4"})),Single:(0,e.createElement)("svg",{width:"324",height:"308",viewBox:"0 0 324 308",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{x:"0.5",width:"323.5",height:"308",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"49.25",y:"30",width:"25",height:"25",rx:"12.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"79.25",y:"36",width:"38",height:"4",rx:"2",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"79.25",y:"45",width:"68",height:"4",rx:"2",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"75",width:"226",height:"103",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"198",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"216",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"234",width:"226",height:"8",rx:"4",fill:"#D6DCE4"})),Content:(0,e.createElement)("svg",{width:"324",height:"308",viewBox:"0 0 324 308",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{x:"0.5",width:"323.5",height:"308",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"49.25",y:"30",width:"25",height:"25",rx:"12.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"79.25",y:"36",width:"38",height:"4",rx:"2",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"79.25",y:"45",width:"68",height:"4",rx:"2",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"75",width:"226",height:"103",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"198",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"216",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"234",width:"226",height:"8",rx:"4",fill:"#D6DCE4"})),Page_404:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("path",{d:"M85.7235 125.175C84.7431 123.322 81.6945 123.322 80.7141 125.175L55.2141 173.342C54.9846 173.773 54.8708 174.257 54.8838 174.746C54.8969 175.235 55.0363 175.712 55.2885 176.131C55.5407 176.549 55.8972 176.896 56.3231 177.136C56.749 177.376 57.2299 177.502 57.7188 177.501H108.719C109.207 177.502 109.688 177.376 110.114 177.136C110.539 176.896 110.895 176.55 111.147 176.131C111.399 175.713 111.539 175.236 111.551 174.748C111.564 174.259 111.45 173.776 111.221 173.344L85.7235 125.175ZM86.0521 169.001H80.3855V163.334H86.0521V169.001ZM80.3855 157.668V143.501H86.0521L86.055 157.668H80.3855Z",fill:"#D6DCE4"}),(0,e.createElement)("path",{d:"M134.008 168.752V161.012L156.806 124.992H163.259V136.011H159.324L143.977 160.33V160.75H175.8V168.752H134.008ZM159.639 178.721V166.391L159.744 162.928V124.992H168.926V178.721H159.639Z",fill:"#D6DCE4"}),(0,e.createElement)("path",{d:"M204.041 179.744C199.721 179.744 196.013 178.651 192.918 176.465C189.839 174.261 187.47 171.087 185.808 166.941C184.164 162.779 183.342 157.768 183.342 151.909C183.359 146.05 184.19 141.065 185.834 136.955C187.496 132.828 189.866 129.68 192.944 127.511C196.039 125.342 199.739 124.258 204.041 124.258C208.344 124.258 212.043 125.342 215.138 127.511C218.234 129.68 220.604 132.828 222.248 136.955C223.909 141.083 224.74 146.067 224.74 151.909C224.74 157.786 223.909 162.805 222.248 166.968C220.604 171.113 218.234 174.278 215.138 176.465C212.06 178.651 208.361 179.744 204.041 179.744ZM204.041 171.533C207.399 171.533 210.049 169.88 211.99 166.574C213.949 163.251 214.928 158.363 214.928 151.909C214.928 147.642 214.482 144.056 213.59 141.153C212.698 138.25 211.439 136.063 209.813 134.594C208.186 133.108 206.262 132.364 204.041 132.364C200.7 132.364 198.06 134.026 196.118 137.349C194.177 140.654 193.197 145.508 193.18 151.909C193.162 156.194 193.591 159.797 194.465 162.718C195.357 165.638 196.617 167.842 198.243 169.329C199.87 170.798 201.802 171.533 204.041 171.533Z",fill:"#D6DCE4"}),(0,e.createElement)("path",{d:"M232.486 168.752V161.012L255.284 124.992H261.737V136.011H257.802L242.455 160.33V160.75H274.278V168.752H232.486ZM258.117 178.721V166.391L258.222 162.928V124.992H267.404V178.721H258.117Z",fill:"#D6DCE4"}))},X=function({title:t,icon:r,layout:n,template:i,enabled:l}){const[o,c]=(0,e.useState)(!1);return(0,e.createElement)("div",{className:"ast-tb-card-parent",onMouseEnter:()=>{c(!0)},onMouseLeave:()=>{c(!1)}},r&&o&&(0,e.createElement)("div",{className:"ast-tb-locked"},(0,e.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-6 h-6"},(0,e.createElement)("path",{fillRule:"evenodd",d:"M12 1.5a5.25 5.25 0 00-5.25 5.25v3a3 3 0 00-3 3v6.75a3 3 0 003 3h10.5a3 3 0 003-3v-6.75a3 3 0 00-3-3v-3c0-2.9-2.35-5.25-5.25-5.25zm3.75 8.25v-3a3.75 3.75 0 10-7.5 0v3h7.5z",clipRule:"evenodd"})),(0,e.createElement)("button",{className:"ast-tb-card-hover-btn",onClick:()=>window.open(astra_theme_builder.astra_pricing_page_url)},(0,a.__)("Upgrade","astra"))),(0,e.createElement)("div",{className:"ast-tb-card"},(0,e.createElement)("div",{className:"ast-tb-card-icon-wrapper "+(o?"ast-tb-card-icon-wrapper-hover":"")},r||(()=>{switch(n){case"header":return Q.Header;case"footer":return Q.Footer;case"404-page":return Q.Page_404;case"hooks":return Q.Hooks;case"content":return Q.Content;case"template":return i&&"single"===i?Q.Single:Q.Archive}})()),(0,e.createElement)("div",{className:"ast-tb-card-title-wrapper"},(0,e.createElement)("h3",{className:"ast-tb-card-title ast-tb-create-new-card-title"},t))))},ee=[{label:(0,a.__)("Header","astra"),layout:"header",template:"",icon:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{width:"323.5",height:"56",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"20",y:"19",width:"48",height:"18",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"149",y:"24",width:"26",height:"8",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"117",y:"24",width:"26",height:"8",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"181",y:"24",width:"25",height:"8",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"212",y:"24",width:"26",height:"8",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"259",y:"24",width:"26",height:"8",rx:"2",fill:"#F5F9FE"}))},{label:(0,a.__)("Footer","astra"),layout:"footer",template:"",icon:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{x:"0.5",width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"0.5",y:"248",width:"323.5",height:"56",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"20.5",y:"263",width:"48",height:"18",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"163.5",y:"263",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"117.5",y:"263",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"117.5",y:"273",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"163.5",y:"273",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"209.5",y:"273",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"254.5",y:"273",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"117.5",y:"283",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"163.5",y:"283",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"209.5",y:"283",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"254.5",y:"283",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"209.5",y:"263",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"254.5",y:"263",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}))},{label:(0,a.__)("Hooks","astra"),layout:"hooks",template:"",icon:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{x:"0.5",width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"49.25",y:"50.5",width:"226",height:"103",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("path",{d:"M145.417 88.3327L131.75 101.999L145.417 115.666M179.583 88.3327L193.25 101.999L179.583 115.666M169.333 74.666L155.667 129.333",stroke:"white",strokeWidth:"6.83333",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("rect",{x:"49.25",y:"173.5",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"191.5",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"209.5",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"227.5",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"245.5",width:"154",height:"8",rx:"4",fill:"#D6DCE4"}))},{label:(0,a.__)("Inside Post/Page","astra"),layout:"content",template:"",icon:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 306",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{y:"2",width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"135.75",y:"46.5",width:"52",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"103.75",y:"59.5",width:"116",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"48.75",y:"77.5",width:"226",height:"87",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"180.5",width:"170",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"198.5",width:"170",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"229.75",y:"174.5",width:"44",height:"38",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{y:"250",width:"323.5",height:"56",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"20",y:"265",width:"48",height:"18",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"141",y:"265",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"100",y:"265",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"100",y:"275",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"141",y:"275",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"100",y:"285",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"141",y:"285",width:"26",height:"6",rx:"2",fill:"#F5F9FE"}),(0,e.createElement)("rect",{x:"245",y:"266",width:"22",height:"12",rx:"2",fill:"#C4CBD5"}),(0,e.createElement)("rect",{x:"181",y:"266",width:"60",height:"12",rx:"2",fill:"#F5F9FE"}))},{label:(0,a.__)("Single","astra"),layout:"template",template:"single",icon:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 308",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{x:"0.5",width:"323.5",height:"308",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"49.25",y:"30",width:"25",height:"25",rx:"12.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"79.25",y:"36",width:"38",height:"4",rx:"2",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"79.25",y:"45",width:"68",height:"4",rx:"2",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"75",width:"226",height:"103",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"198",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"216",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.25",y:"234",width:"226",height:"8",rx:"4",fill:"#D6DCE4"}))},{label:(0,a.__)("Archive","astra"),layout:"template",template:"archive",icon:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("rect",{x:"49.75",y:"29",width:"107",height:"63",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"102",width:"107",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"119",width:"62",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"29",width:"107",height:"63",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"102",width:"107",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"119",width:"62",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"146",width:"107",height:"63",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"219",width:"107",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"49.75",y:"236",width:"62",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"146",width:"107",height:"63",rx:"5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"219",width:"107",height:"7",rx:"3.5",fill:"#D6DCE4"}),(0,e.createElement)("rect",{x:"166.75",y:"236",width:"62",height:"7",rx:"3.5",fill:"#D6DCE4"}))},{label:(0,a.__)("404 Page","astra"),layout:"404-page",template:"",icon:(0,e.createElement)("svg",{width:"324",height:"304",viewBox:"0 0 324 304",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ast-tb-card-svg-icon"},(0,e.createElement)("rect",{width:"323.5",height:"304",rx:"5",fill:"#ECEFF3"}),(0,e.createElement)("path",{d:"M85.7235 125.175C84.7431 123.322 81.6945 123.322 80.7141 125.175L55.2141 173.342C54.9846 173.773 54.8708 174.257 54.8838 174.746C54.8969 175.235 55.0363 175.712 55.2885 176.131C55.5407 176.549 55.8972 176.896 56.3231 177.136C56.749 177.376 57.2299 177.502 57.7188 177.501H108.719C109.207 177.502 109.688 177.376 110.114 177.136C110.539 176.896 110.895 176.55 111.147 176.131C111.399 175.713 111.539 175.236 111.551 174.748C111.564 174.259 111.45 173.776 111.221 173.344L85.7235 125.175ZM86.0521 169.001H80.3855V163.334H86.0521V169.001ZM80.3855 157.668V143.501H86.0521L86.055 157.668H80.3855Z",fill:"#D6DCE4"}),(0,e.createElement)("path",{d:"M134.008 168.752V161.012L156.806 124.992H163.259V136.011H159.324L143.977 160.33V160.75H175.8V168.752H134.008ZM159.639 178.721V166.391L159.744 162.928V124.992H168.926V178.721H159.639Z",fill:"#D6DCE4"}),(0,e.createElement)("path",{d:"M204.041 179.744C199.721 179.744 196.013 178.651 192.918 176.465C189.839 174.261 187.47 171.087 185.808 166.941C184.164 162.779 183.342 157.768 183.342 151.909C183.359 146.05 184.19 141.065 185.834 136.955C187.496 132.828 189.866 129.68 192.944 127.511C196.039 125.342 199.739 124.258 204.041 124.258C208.344 124.258 212.043 125.342 215.138 127.511C218.234 129.68 220.604 132.828 222.248 136.955C223.909 141.083 224.74 146.067 224.74 151.909C224.74 157.786 223.909 162.805 222.248 166.968C220.604 171.113 218.234 174.278 215.138 176.465C212.06 178.651 208.361 179.744 204.041 179.744ZM204.041 171.533C207.399 171.533 210.049 169.88 211.99 166.574C213.949 163.251 214.928 158.363 214.928 151.909C214.928 147.642 214.482 144.056 213.59 141.153C212.698 138.25 211.439 136.063 209.813 134.594C208.186 133.108 206.262 132.364 204.041 132.364C200.7 132.364 198.06 134.026 196.118 137.349C194.177 140.654 193.197 145.508 193.18 151.909C193.162 156.194 193.591 159.797 194.465 162.718C195.357 165.638 196.617 167.842 198.243 169.329C199.87 170.798 201.802 171.533 204.041 171.533Z",fill:"#D6DCE4"}),(0,e.createElement)("path",{d:"M232.486 168.752V161.012L255.284 124.992H261.737V136.011H257.802L242.455 160.33V160.75H274.278V168.752H232.486ZM258.117 178.721V166.391L258.222 162.928V124.992H267.404V178.721H258.117Z",fill:"#D6DCE4"}))}],te=()=>(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"ast-tb-canvas-content-row"},ee.map(((t,r)=>(0,e.createElement)(X,{key:r,title:t.label,icon:t.icon,layout:t.layout,template:t.template}))))),re=()=>(0,e.createElement)("div",{className:"ast-tb-canvas"},(0,e.createElement)("div",{className:"ast-tb-canvas-body"},(0,e.createElement)("div",{className:"ast-tb-canvas-header"},(0,e.createElement)("h2",null,(0,a.__)("Start customizing every part of your website.","astra")),(0,e.createElement)("button",{className:"ast-tb-btn ast-tb-btn-primary",onClick:()=>window.open(astra_theme_builder.astra_pricing_page_url,"_blank")},(0,a.__)("Upgrade","astra"))),(0,e.createElement)("div",{className:"ast-tb-canvas-content"},(0,e.createElement)(z,null,(0,e.createElement)(I,{path:"/"},(0,e.createElement)(te,null)))))),ne=function(e){function r(){for(var t,r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(t=e.call.apply(e,[this].concat(n))||this).history=function(e){void 0===e&&(e={}),b||E(!1);var t,r=window.history,n=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,i=!(-1===window.navigator.userAgent.indexOf("Trident")),a=e,l=a.forceRefresh,o=void 0!==l&&l,c=a.getUserConfirmation,s=void 0===c?F:c,f=a.keyLength,m=void 0===f?6:f,u=e.basename?x(w(e.basename)):"";function d(e){var t=e||{},r=t.key,n=t.state,i=window.location,a=i.pathname+i.search+i.hash;return u&&(a=g(a,u)),y(a,n,r)}function p(){return Math.random().toString(36).substr(2,m)}var L=C();function M(e){h(j,e),j.length=r.length,L.notifyListeners(j.location,j.action)}function H(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||V(d(e.state))}function N(){V(d(k()))}var S=!1;function V(e){S?(S=!1,M()):L.confirmTransitionTo(e,"POP",s,(function(t){t?M({action:"POP",location:e}):function(e){var t=j.location,r=O.indexOf(t.key);-1===r&&(r=0);var n=O.indexOf(e.key);-1===n&&(n=0);var i=r-n;i&&(S=!0,R(i))}(e)}))}var B=d(k()),O=[B.key];function P(e){return u+v(e)}function R(e){r.go(e)}var $=0;function A(e){1===($+=e)&&1===e?(window.addEventListener(D,H),i&&window.addEventListener(_,N)):0===$&&(window.removeEventListener(D,H),i&&window.removeEventListener(_,N))}var T=!1,j={length:r.length,action:"POP",location:B,createHref:P,push:function(e,t){var i="PUSH",a=y(e,t,p(),j.location);L.confirmTransitionTo(a,i,s,(function(e){if(e){var t=P(a),l=a.key,c=a.state;if(n)if(r.pushState({key:l,state:c},null,t),o)window.location.href=t;else{var s=O.indexOf(j.location.key),h=O.slice(0,s+1);h.push(a.key),O=h,M({action:i,location:a})}else window.location.href=t}}))},replace:function(e,t){var i="REPLACE",a=y(e,t,p(),j.location);L.confirmTransitionTo(a,i,s,(function(e){if(e){var t=P(a),l=a.key,c=a.state;if(n)if(r.replaceState({key:l,state:c},null,t),o)window.location.replace(t);else{var s=O.indexOf(j.location.key);-1!==s&&(O[s]=a.key),M({action:i,location:a})}else window.location.replace(t)}}))},go:R,goBack:function(){R(-1)},goForward:function(){R(1)},block:function(e){void 0===e&&(e=!1);var t=L.setPrompt(e);return T||(A(1),T=!0),function(){return T&&(T=!1,A(-1)),t()}},listen:function(e){var t=L.appendListener(e);return A(1),function(){A(-1),t()}}};return j}(t.props),t}return s(r,e),r.prototype.render=function(){return t().createElement(j,{history:this.history,children:this.props.children})},r}(t().Component);t().Component;var ie=function(e,t){return"function"==typeof e?e(t):e},ae=function(e,t){return"string"==typeof e?y(e,null,null,t):e},le=function(e){return e},oe=t().forwardRef;void 0===oe&&(oe=le);var ce=oe((function(e,r){var n=e.innerRef,i=e.navigate,a=e.onClick,l=P(e,["innerRef","navigate","onClick"]),o=l.target,c=h({},l,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||o&&"_self"!==o||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),i())}});return c.ref=le!==oe&&r||n,t().createElement("a",c)})),se=oe((function(e,r){var n=e.component,i=void 0===n?ce:n,a=e.replace,l=e.to,o=e.innerRef,c=P(e,["component","replace","to","innerRef"]);return t().createElement(T.Consumer,null,(function(e){e||E(!1);var n=e.history,s=ae(ie(l,e.location),e.location),f=s?n.createHref(s):"",m=h({},c,{href:f,navigate:function(){var t=ie(l,e.location);(a?n.replace:n.push)(t)}});return le!==oe?m.ref=r||o:m.innerRef=o,t().createElement(i,m)}))})),he=function(e){return e},fe=t().forwardRef;void 0===fe&&(fe=he),fe((function(e,r){var n=e["aria-current"],i=void 0===n?"page":n,a=e.activeClassName,l=void 0===a?"active":a,o=e.activeStyle,c=e.className,s=e.exact,f=e.isActive,m=e.location,u=e.sensitive,d=e.strict,p=e.style,w=e.to,g=e.innerRef,x=P(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return t().createElement(T.Consumer,null,(function(e){e||E(!1);var n=m||e.location,a=ae(ie(w,n),n),v=a.pathname,y=v&&v.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=y?U(n.pathname,{path:y,exact:s,sensitive:u,strict:d}):null,b=!!(f?f(C,n):C),F=b?function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((function(e){return e})).join(" ")}(c,l):c,D=b?h({},p,{},o):p,_=h({"aria-current":b&&i||null,className:F,style:D,to:a},x);return he!==fe?_.ref=r||g:_.innerRef=g,t().createElement(se,_)}))}));document.getElementById("ast-tb-app-root")&&i().render((0,e.createElement)((()=>((0,e.useEffect)((()=>{document.querySelector("html.wp-toolbar").style.paddingTop=0}),[]),(0,e.createElement)(ne,null,(0,e.createElement)("div",{className:"ast-tb-app"},(0,e.createElement)(o,null),(0,e.createElement)("div",{className:"ast-tb-main"},(0,e.createElement)(G,{items:Y}),(0,e.createElement)(re,null)))))),null),document.getElementById("ast-tb-app-root"))}()}(); assets/theme-builder/build/index.rtl.css 0000644 00000012010 15150276715 0014317 0 ustar 00 .ast-theme-builder #adminmenuback,.ast-theme-builder #adminmenumain,.ast-theme-builder #adminmenuwrap,.ast-theme-builder #wpfooter{display:none}.ast-theme-builder #wpbody-content{position:relative;z-index:9999999}.ast-theme-builder #wpcontent{margin:0;padding:0}.ast-tb-app{border-radius:0;flex-direction:column;height:100vh;position:absolute}.ast-tb-app,.ast-tb-main{display:flex;max-width:100%;overflow:hidden;width:100%}.ast-tb-main{flex-grow:1;height:100%}.ast-tb-header{align-items:center;background-color:#fff;border-bottom:1px solid var(--dashboard-border-primary,#dce0e6);display:flex;min-height:64px;padding-right:24px;padding-left:24px}.ast-tb-header-items{align-items:center;display:flex;gap:20px;justify-content:flex-start;width:99%}.ast-tb-main-title{border-right:1px solid #e2e8f0;border-left:1px solid #e2e8f0;font-size:20px;font-style:normal;font-weight:600;line-height:24px;padding:0 20px}.ast-tb-breadcrumbs{color:#4b5563;font-size:13.081px;font-style:normal;font-weight:500;line-height:23.546px}.ast-tb-crumb-icon{padding:0 8px}.ast-tb-sidebar{background:#fff;background-color:#fff;border-left:1px solid #e5e7eb;height:100%;min-width:280px;padding:40px 20px;top:65px}.ast-tb-sidebar-header{align-items:center;cursor:pointer;display:flex;gap:16px;justify-content:space-between;margin-bottom:40px;padding-right:10px}.ast-tb-sidebar-header-left{gap:8px}.ast-tb-sidebar-header-left,.ast-tb-sidebar-header-right{align-items:center;display:flex}.ast-tb-sidebar-header-right>svg{position:relative;left:20px;width:14px}.ast-tb-sidebar-header:hover{background:#eff6ff}.ast-tb-sidebar-header>h2{color:#1e293b;font-size:16px;font-style:normal;font-weight:600;line-height:24px}.ast-tb-sidebar-subtitle{margin-bottom:30px}.ast-tb-sidebar-subtitle>h3{color:#1e293b;font-size:14px;font-style:normal;font-weight:500;line-height:24px}.ast-tb-sidebar-item{align-items:center;cursor:pointer;display:flex;gap:8px;justify-content:space-between;max-height:28px;padding:12px 8px 10px}.ast-tb-sidebar-item-selected,.ast-tb-sidebar-item:hover{background:#eff6ff}.ast-tb-sidebar-item-label{color:#1e293b;font-size:14px;font-style:normal;font-weight:400;line-height:20px;padding-bottom:2px}.ast-tb-sidebar-item-svg{position:relative;left:30px}.ast-tb-all-layouts-btn{cursor:pointer}.ast-tb-canvas{flex-grow:1;height:100%;overflow-y:auto;padding:40px;position:relative}.ast-tb-canvas-header>h2{color:#000;font-size:20px;font-style:normal;font-weight:500;letter-spacing:-.4px;line-height:28px}.ast-tb-canvas-header{align-items:center;border-bottom:1px solid #d1d5db;display:flex;justify-content:space-between;width:100%}.ast-tb-card{align-items:center;background-color:#fff;border:1px solid #f9fafb;border-radius:4px;box-shadow:0 6px 15px -2px rgba(16,24,40,.05);display:flex;flex-direction:column;max-height:240px;max-width:200px;padding:15px 20px 20px}.ast-tb-card-title-wrapper{align-items:center;gap:8px}h3.ast-tb-create-new-card-title{margin-right:5%}.ast-tb-canvas-content-row{grid-gap:24px;display:flex;flex-wrap:wrap;margin-top:32px}.ast-tb-canvas-body{margin-bottom:100px}.ast-tb-card-svg-icon{height:200px}.ast-tb-card-title{color:#1e293b;font-size:14px;font-style:normal;font-weight:500;margin:0}.ast-tb-card-title-wrapper{border-top:1px solid #e9e9e9;display:flex;margin-top:15px;padding-top:10px;width:120%}.ast-tb-card-title-wrapper>svg{margin-right:5%}.ast-tb-canvas-content-row-flex{display:flex;flex-wrap:wrap;gap:32px;margin-top:32px}.ast-tb-category-parent{margin-bottom:32px;margin-top:32px}.ast-tb-category-parent:last-child{margin-bottom:100px}.ast-tb-btn{border:1px #046bd2;border-radius:6px;box-shadow:0 1px 2px 0 rgba(16,24,40,.05);cursor:pointer;gap:8px;padding:8px 14px}.ast-tb-btn,.ast-tb-card-hover-btn{align-items:center;background:#046bd2;color:#fff;display:flex;height:35px;justify-content:center}.ast-tb-card-hover-btn{border:1px solid #046bd2;border-radius:4px;box-shadow:0 2px 4px -2px rgba(0,0,0,.06),0 4px 8px -2px rgba(0,0,0,.1);font-size:12px;font-style:normal;font-weight:500;gap:2px;line-height:150%;padding:8px 12px 8px 20px;width:150px}.ast-tb-btn:hover,.ast-tb-card-hover-btn:hover{background:#035fbc}.ast-tb-card-parent{position:relative}.ast-tb-link,.ast-tb-link:active,.ast-tb-link:focus,.ast-tb-link:hover{box-shadow:none;outline:none;text-decoration:none}.ast-tb-locked{align-items:center;cursor:pointer;display:flex;flex-direction:column;gap:12px;right:35%;position:absolute;top:30%;z-index:3}.ast-tb-locked>svg{width:25px}.ast-tb-locked button{cursor:pointer;padding:8px;width:80px}.ast-tb-sidebar-item-left{align-items:center;display:flex;gap:8px;justify-content:center}.ast-tb-sidebar-item-right svg{color:#3c434a;position:relative;left:20px;width:14px}.ast-tb-sidebar-help{align-items:center;bottom:40px;cursor:pointer;display:flex;gap:8px;justify-content:flex-start;min-width:265px;padding:12px 8px 10px}.ast-tb-card-blur-on-hover{filter:blur(2.5px)}.ast-tb-breadcrumb-icon{position:relative;top:2px}.ast-tb-card-icon-wrapper-hover{filter:blur(2.5px)}.ast-tb-help-divider{border-top:1px solid #e2e8f0;margin-bottom:16px;margin-top:24px;width:100%}.ast-tb-header-close{cursor:pointer} includes/class-astra-admin-ajax.php 0000644 00000026520 15150276715 0013325 0 ustar 00 <?php /** * Astra Admin Ajax Base. * * @package Astra * @since 4.0.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Class Astra_Admin_Ajax. * * @since 4.0.0 */ class Astra_Admin_Ajax { /** * Ajax action prefix. * * @var string * @since 4.0.0 */ private $prefix = 'astra'; /** * Instance * * @access private * @var null $instance * @since 4.0.0 */ private static $instance; /** * Initiator * * @since 4.0.0 * @return object initialized object of class. */ public static function get_instance() { if ( ! isset( self::$instance ) ) { /** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort self::$instance = new self(); /** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort } return self::$instance; } /** * Errors class instance. * * @var array * @since 4.0.0 */ private $errors = array(); /** * Constructor * * @since 4.0.0 */ public function __construct() { $this->errors = array( 'permission' => __( 'Sorry, you are not allowed to do this operation.', 'astra' ), 'nonce' => __( 'Nonce validation failed', 'astra' ), 'default' => __( 'Sorry, something went wrong.', 'astra' ), 'invalid' => __( 'No post data found!', 'astra' ), ); add_action( 'wp_ajax_ast_disable_pro_notices', array( $this, 'disable_astra_pro_notices' ) ); add_action( 'wp_ajax_astra_recommended_plugin_install', 'wp_ajax_install_plugin' ); add_action( 'wp_ajax_ast_migrate_to_builder', array( $this, 'migrate_to_builder' ) ); add_action( 'wp_ajax_astra_update_admin_setting', array( $this, 'astra_update_admin_setting' ) ); add_action( 'wp_ajax_astra_recommended_plugin_activate', array( $this, 'required_plugin_activate' ) ); add_action( 'wp_ajax_astra_recommended_plugin_deactivate', array( $this, 'required_plugin_deactivate' ) ); } /** * Return boolean settings for admin dashboard app. * * @return array * @since 4.0.0 */ public function astra_admin_settings_typewise() { return apply_filters( 'astra_admin_settings_datatypes', array( 'self_hosted_gfonts' => 'bool', 'preload_local_fonts' => 'bool', 'use_old_header_footer' => 'bool', ) ); } /** * Disable pro upgrade notice from all over in Astra. * * @since 4.0.0 */ public function disable_astra_pro_notices() { $response_data = array( 'message' => $this->get_error_msg( 'permission' ) ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'message' => $this->get_error_msg( 'invalid' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification. */ if ( ! check_ajax_referer( 'astra_update_admin_setting', 'security', false ) ) { $response_data = array( 'message' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( __( 'You don\'t have the access', 'astra' ) ); } /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $migrate = isset( $_POST['status'] ) ? sanitize_key( $_POST['status'] ) : ''; /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $migrate = ( 'true' === $migrate ) ? true : false; astra_update_option( 'ast-disable-upgrade-notices', $migrate ); wp_send_json_success(); } /** * Migrate to New Header Builder * * @since 4.0.0 */ public function migrate_to_builder() { $response_data = array( 'message' => $this->get_error_msg( 'permission' ) ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'message' => $this->get_error_msg( 'invalid' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification. */ if ( ! check_ajax_referer( 'astra_update_admin_setting', 'security', false ) ) { $response_data = array( 'message' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $migrate = isset( $_POST['status'] ) ? sanitize_key( $_POST['status'] ) : ''; /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $migrate = ( 'true' === $migrate ) ? true : false; /** @psalm-suppress InvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $migration_flag = astra_get_option( 'v3-option-migration', false ); astra_update_option( 'is-header-footer-builder', $migrate ); if ( $migrate && false === $migration_flag ) { require_once ASTRA_THEME_DIR . 'inc/theme-update/astra-builder-migration-updater.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound astra_header_builder_migration(); } wp_send_json_success(); } /** * Save settings. * * @return void * @since 4.0.0 */ public function astra_update_admin_setting() { $response_data = array( 'message' => $this->get_error_msg( 'permission' ) ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'message' => $this->get_error_msg( 'invalid' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification. */ if ( ! check_ajax_referer( 'astra_update_admin_setting', 'security', false ) ) { $response_data = array( 'message' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $get_bool_settings = $this->astra_admin_settings_typewise(); /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $sub_option_key = isset( $_POST['key'] ) ? sanitize_text_field( wp_unslash( $_POST['key'] ) ) : ''; /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $sub_option_value = ''; // @codingStandardsIgnoreStart if ( isset( $get_bool_settings[ $sub_option_key ] ) ) { if ( 'bool' === $get_bool_settings[ $sub_option_key ] ) { /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $val = isset( $_POST['value'] ) && 'true' === sanitize_text_field( $_POST['value'] ) ? true : false; /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $sub_option_value = $val; } else { /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $val = isset( $_POST['value'] ) ? sanitize_text_field( wp_unslash( $_POST['value'] ) ) : ''; /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $sub_option_value = $val; } } // @codingStandardsIgnoreEnd Astra_API_Init::update_admin_settings_option( $sub_option_key, $sub_option_value ); $response_data = array( 'message' => __( 'Successfully saved data!', 'astra' ), ); wp_send_json_success( $response_data ); } /** * Get ajax error message. * * @param string $type Message type. * @return string * @since 4.0.0 */ public function get_error_msg( $type ) { if ( ! isset( $this->errors[ $type ] ) ) { $type = 'default'; } return $this->errors[ $type ]; } /** * Required Plugin Activate * * @since 1.2.4 */ public function required_plugin_activate() { $response_data = array( 'message' => $this->get_error_msg( 'permission' ) ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'message' => $this->get_error_msg( 'invalid' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification. */ if ( ! check_ajax_referer( 'astra_plugin_manager_nonce', 'security', false ) ) { $response_data = array( 'message' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( ! current_user_can( 'install_plugins' ) || ! isset( $_POST['init'] ) || ! sanitize_text_field( wp_unslash( $_POST['init'] ) ) ) { /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort wp_send_json_error( array( 'success' => false, 'message' => __( 'No plugin specified', 'astra' ), ) ); } /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $plugin_init = ( isset( $_POST['init'] ) ) ? sanitize_text_field( wp_unslash( $_POST['init'] ) ) : ''; /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $activate = activate_plugin( $plugin_init, '', false, true ); if ( is_wp_error( $activate ) ) { /** @psalm-suppress PossiblyNullReference */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort wp_send_json_error( array( 'success' => false, 'message' => $activate->get_error_message(), ) ); /** @psalm-suppress PossiblyNullReference */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort } wp_send_json_success( array( 'success' => true, 'message' => __( 'Plugin Successfully Activated', 'astra' ), ) ); } /** * Required Plugin Activate * * @since 1.2.4 */ public function required_plugin_deactivate() { $response_data = array( 'message' => $this->get_error_msg( 'permission' ) ); if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'message' => $this->get_error_msg( 'invalid' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification. */ if ( ! check_ajax_referer( 'astra_plugin_manager_nonce', 'security', false ) ) { $response_data = array( 'message' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( ! current_user_can( 'install_plugins' ) || ! isset( $_POST['init'] ) || ! sanitize_text_field( wp_unslash( $_POST['init'] ) ) ) { /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort wp_send_json_error( array( 'success' => false, 'message' => __( 'No plugin specified', 'astra' ), ) ); } /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $plugin_init = ( isset( $_POST['init'] ) ) ? sanitize_text_field( wp_unslash( $_POST['init'] ) ) : ''; /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $deactivate = deactivate_plugins( $plugin_init, true, false ); if ( is_wp_error( $deactivate ) ) { wp_send_json_error( array( 'success' => false, 'message' => $deactivate->get_error_message(), ) ); } wp_send_json_success( array( 'success' => true, 'message' => __( 'Plugin Successfully Deactivated', 'astra' ), ) ); } } Astra_Admin_Ajax::get_instance(); includes/class-astra-api-init.php 0000644 00000010523 15150276715 0013022 0 ustar 00 <?php /** * Class Astra_API_Init. * * @package Astra * @since 4.0.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } // Bail if WP_REST_Controller class does not exist. if ( ! class_exists( 'WP_REST_Controller' ) ) { return; } /** * Astra_API_Init. * * @since 4.1.0 */ class Astra_API_Init extends WP_REST_Controller { /** * Instance * * @access private * @var null $instance * @since 4.0.0 */ private static $instance; /** * Initiator * * @since 4.0.0 * @return object initialized object of class. */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Namespace. * * @var string */ protected $namespace = 'astra/v1'; /** * Route base. * * @var string */ protected $rest_base = '/admin/settings/'; /** * Option name * * @access private * @var string $option_name DB option name. * @since 4.0.0 */ private static $option_name = 'astra_admin_settings'; /** * Admin settings dataset * * @access private * @var array $astra_admin_settings Settings array. * @since 4.0.0 */ private static $astra_admin_settings = array(); /** * Constructor * * @since 4.0.0 */ public function __construct() { self::$astra_admin_settings = get_option( self::$option_name, array() ); // REST API extensions init. add_action( 'rest_api_init', array( $this, 'register_routes' ) ); } /** * Register API routes. * * @since 4.0.0 */ public function register_routes() { register_rest_route( $this->namespace, $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_admin_settings' ), 'permission_callback' => array( $this, 'get_permissions_check' ), 'args' => array(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Get common settings. * * @param WP_REST_Request $request Full details about the request. * @return array $updated_option defaults + set DB option data. * * @since 4.0.0 */ public function get_admin_settings( $request ) { $db_option = get_option( 'astra_admin_settings', array() ); $defaults = apply_filters( 'astra_dashboard_rest_options', array( 'self_hosted_gfonts' => self::get_admin_settings_option( 'self_hosted_gfonts', false ), 'preload_local_fonts' => self::get_admin_settings_option( 'preload_local_fonts', false ), 'use_old_header_footer' => astra_get_option( 'is-header-footer-builder', false ), 'use_upgrade_notices' => astra_showcase_upgrade_notices(), ) ); $updated_option = wp_parse_args( $db_option, $defaults ); return $updated_option; } /** * Check whether a given request has permission to read notes. * * @param WP_REST_Request $request Full details about the request. * @return WP_Error|boolean * @since 4.0.0 */ public function get_permissions_check( $request ) { if ( ! current_user_can( 'edit_theme_options' ) ) { return new WP_Error( 'astra_rest_cannot_view', __( 'Sorry, you cannot list resources.', 'astra' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Returns an value, * based on the settings database option for the admin settings page. * * @param string $key The sub-option key. * @param mixed $default Option default value if option is not available. * @return mixed Return the option value based on provided key * @since 4.0.0 */ public static function get_admin_settings_option( $key, $default = false ) { $value = isset( self::$astra_admin_settings[ $key ] ) ? self::$astra_admin_settings[ $key ] : $default; return $value; } /** * Update an value of a key, * from the settings database option for the admin settings page. * * @param string $key The option key. * @param mixed $value The value to update. * @return mixed Return the option value based on provided key * @since 4.0.0 */ public static function update_admin_settings_option( $key, $value ) { $astra_admin_updated_settings = get_option( self::$option_name, array() ); $astra_admin_updated_settings[ $key ] = $value; update_option( self::$option_name, $astra_admin_updated_settings ); } } Astra_API_Init::get_instance(); includes/class-astra-menu.php 0000644 00000125612 15150276715 0012262 0 ustar 00 <?php /** * Class Astra_Menu. * * @package Astra * @since 4.0.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Astra_Menu. * * @since 4.1.0 */ class Astra_Menu { /** * Instance * * @access private * @var null $instance * @since 4.0.0 */ private static $instance; /** * Initiator * * @since 4.0.0 * @return object initialized object of class. */ public static function get_instance() { if ( ! isset( self::$instance ) ) { /** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort self::$instance = new self(); /** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort } return self::$instance; } /** * Page title * * @since 4.0.0 * @var string $page_title */ public static $page_title = 'Astra'; /** * Plugin slug * * @since 4.0.0 * @var string $plugin_slug */ public static $plugin_slug = 'astra'; /** * Constructor * * @since 4.0.0 */ public function __construct() { $this->initialize_hooks(); } /** * Init Hooks. * * @since 4.0.0 * @return void */ public function initialize_hooks() { self::$page_title = apply_filters( 'astra_page_title', __( 'Astra', 'astra' ) ); self::$plugin_slug = self::get_theme_page_slug(); add_action( 'admin_menu', array( $this, 'setup_menu' ) ); add_action( 'admin_init', array( $this, 'settings_admin_scripts' ) ); } /** * Theme options page Slug getter including White Label string. * * @since 4.0.0 * @return string Theme Options Page Slug. */ public static function get_theme_page_slug() { return apply_filters( 'astra_theme_page_slug', self::$plugin_slug ); } /** * Initialize after Astra gets loaded. * * @since 4.0.0 */ public function settings_admin_scripts() { // Enqueue admin scripts. /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( ! empty( $_GET['page'] ) && ( self::$plugin_slug === $_GET['page'] || false !== strpos( $_GET['page'], self::$plugin_slug . '_' ) ) ) { //phpcs:ignore /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort add_action( 'admin_enqueue_scripts', array( $this, 'styles_scripts' ) ); add_filter( 'admin_footer_text', array( $this, 'astra_admin_footer_link' ), 99 ); } } /** * Add submenu to admin menu. * * @since 4.0.0 */ public function setup_menu() { global $submenu; $capability = 'manage_options'; if ( ! current_user_can( $capability ) ) { return; } $astra_icon = apply_filters( 'astra_menu_icon', 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzcyIiBoZWlnaHQ9Ijc3MiIgdmlld0JveD0iMCAwIDc3MiA3NzIiIGZpbGw9IiNhN2FhYWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM4NiA3NzJDNTk5LjE4MiA3NzIgNzcyIDU5OS4xODIgNzcyIDM4NkM3NzIgMTcyLjgxOCA1OTkuMTgyIDAgMzg2IDBDMTcyLjgxOCAwIDAgMTcyLjgxOCAwIDM4NkMwIDU5OS4xODIgMTcyLjgxOCA3NzIgMzg2IDc3MlpNMjYxLjcxMyAzNDMuODg2TDI2MS42NzUgMzQzLjk2OEMyMjIuNDE3IDQyNi45OTQgMTgzLjE1OSA1MTAuMDE5IDE0My45MDIgNTkyLjk1MkgyNDQuODQ3QzI3Ni42MjcgNTI4LjczOSAzMDguNDA3IDQ2NC40MzQgMzQwLjE4NyA0MDAuMTI4QzM3MS45NjUgMzM1LjgyNyA0MDMuNzQyIDI3MS41MjcgNDM1LjUyIDIwNy4zMkwzNzkuNDQgOTVDMzQwLjE5NyAxNzcuOSAzMDAuOTU1IDI2MC44OTMgMjYxLjcxMyAzNDMuODg2Wk00MzYuNjczIDQwNC4wNzVDNDUyLjkwNiAzNzAuNzQ1IDQ2OS4xMzkgMzM3LjQxNSA0ODUuNDY3IDMwNC4wODVDNTA5LjMwMSAzNTIuMjI5IDUzMy4wNDIgNDAwLjM3NCA1NTYuNzgyIDQ0OC41MThDNTgwLjUyMyA0OTYuNjYzIDYwNC4yNjQgNTQ0LjgwNyA2MjguMDk4IDU5Mi45NTJINTE5LjI0OEM1MTMuMDU0IDU3OC42OTMgNTA2Ljc2NyA1NjQuNTI3IDUwMC40OCA1NTAuMzYyQzQ5NC4xOTMgNTM2LjE5NiA0ODcuOTA2IDUyMi4wMzEgNDgxLjcxMyA1MDcuNzczSDM4NkwzODcuODc3IDUwNC4wNjlDNDA0LjIwNSA0NzAuNzM4IDQyMC40MzkgNDM3LjQwNiA0MzYuNjczIDQwNC4wNzVaIiBmaWxsPSIjYTdhYWFkIi8+DQo8L3N2Zz4=' ); $priority = apply_filters( 'astra_menu_priority', 59 ); add_menu_page( // phpcs:ignore WPThemeReview.PluginTerritory.NoAddAdminPages.add_menu_pages_add_menu_page -- Taken the menu on top level self::$page_title, self::$page_title, $capability, self::$plugin_slug, array( $this, 'render_admin_dashboard' ), $astra_icon, $priority ); // Add Customize submenu. add_submenu_page( // phpcs:ignore WPThemeReview.PluginTerritory.NoAddAdminPages.add_menu_pages_add_submenu_page -- Taken the menu on top level self::$plugin_slug, __( 'Customize', 'astra' ), __( 'Customize', 'astra' ), $capability, 'customize.php' ); // Add Custom Layout submenu. /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $show_custom_layout_submenu = ( defined( 'ASTRA_EXT_VER' ) && ! Astra_Ext_Extension::is_active( 'advanced-hooks' ) ) ? false : true; /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( $show_custom_layout_submenu && defined( 'ASTRA_EXT_VER' ) && version_compare( ASTRA_EXT_VER, '4.5.0', '<' ) ) { add_submenu_page( // phpcs:ignore WPThemeReview.PluginTerritory.NoAddAdminPages.add_menu_pages_add_submenu_page -- Taken the menu on top level self::$plugin_slug, __( 'Custom Layouts', 'astra' ), __( 'Custom Layouts', 'astra' ), $capability, /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort ( defined( 'ASTRA_EXT_VER' ) && Astra_Ext_Extension::is_active( 'advanced-hooks' ) ) ? 'edit.php?post_type=astra-advanced-hook' : 'admin.php?page=' . self::$plugin_slug . '&path=custom-layouts' /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort ); } if ( ! $this->spectra_has_top_level_menu() && ! astra_is_white_labelled() ) { // Add Spectra submenu. add_submenu_page( // phpcs:ignore WPThemeReview.PluginTerritory.NoAddAdminPages.add_menu_pages_add_submenu_page -- Taken the menu on top level self::$plugin_slug, __( 'Spectra', 'astra' ), __( 'Spectra', 'astra' ), $capability, $this->get_spectra_page_admin_link() ); } // Rename to Home menu. $submenu[ self::$plugin_slug ][0][0] = __( 'Dashboard', 'astra' ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Required to rename the home menu. } /** * In version 2.4.1 Spectra introduces top level admin menu so there is no meaning to show Spectra submenu from Astra menu. * * @since 4.1.4 * @return bool true|false. */ public function spectra_has_top_level_menu() { return defined( 'UAGB_VER' ) && version_compare( UAGB_VER, '2.4.1', '>=' ) ? true : false; } /** * Provide the Spectra admin page URL. * * @since 4.1.1 * @return string url. */ public function get_spectra_page_admin_link() { $spectra_admin_url = defined( 'UAGB_VER' ) ? ( $this->spectra_has_top_level_menu() ? admin_url( 'admin.php?page=' . UAGB_SLUG ) : admin_url( 'options-general.php?page=' . UAGB_SLUG ) ) : 'admin.php?page=' . self::$plugin_slug . '&path=spectra'; return apply_filters( 'astra_dashboard_spectra_admin_link', $spectra_admin_url ); } /** * Renders the admin settings. * * @since 4.0.0 * @return void */ public function render_admin_dashboard() { $page_action = ''; if ( isset( $_GET['action'] ) ) { //phpcs:ignore /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $page_action = sanitize_text_field( wp_unslash( $_GET['action'] ) ); //phpcs:ignore /** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $page_action = str_replace( '_', '-', $page_action ); } ?> <div class="ast-menu-page-wrapper"> <div id="ast-menu-page"> <div class="ast-menu-page-content"> <div id="astra-dashboard-app" class="astra-dashboard-app"> </div> </div> </div> </div> <?php } /** * Enqueues the needed CSS/JS for the builder's admin settings page. * * @since 4.0.0 */ public function styles_scripts() { if ( is_customize_preview() ) { return; } wp_enqueue_style( 'astra-admin-font', 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap', array(), ASTRA_THEME_VERSION ); // Styles. wp_enqueue_style( 'wp-components' ); /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $show_self_branding = defined( 'ASTRA_EXT_VER' ) && is_callable( 'Astra_Ext_White_Label_Markup::show_branding' ) ? Astra_Ext_White_Label_Markup::show_branding() : true; /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $user_firstname = wp_get_current_user()->user_firstname; $localize = array( 'current_user' => ! empty( $user_firstname ) ? ucfirst( $user_firstname ) : ucfirst( wp_get_current_user()->display_name ), 'admin_base_url' => admin_url(), 'plugin_dir' => ASTRA_THEME_URI, 'plugin_ver' => defined( 'ASTRA_EXT_VER' ) ? ASTRA_EXT_VER : '', 'version' => ASTRA_THEME_VERSION, 'pro_available' => defined( 'ASTRA_EXT_VER' ) ? true : false, 'pro_installed_status' => 'installed' === self::get_plugin_status( 'astra-addon/astra-addon.php' ) ? true : false, 'spectra_plugin_status' => self::get_plugin_status( 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php' ), 'theme_name' => astra_get_theme_name(), 'plugin_name' => astra_get_addon_name(), 'quick_settings' => self::astra_get_quick_links(), 'ajax_url' => admin_url( 'admin-ajax.php' ), 'is_whitelabel' => astra_is_white_labelled(), 'show_self_branding' => $show_self_branding, 'admin_url' => admin_url( 'admin.php' ), 'home_slug' => self::$plugin_slug, 'upgrade_url' => ASTRA_PRO_UPGRADE_URL, 'customize_url' => admin_url( 'customize.php' ), 'astra_base_url' => admin_url( 'admin.php?page=' . self::$plugin_slug ), 'astra_changelog_data' => self::astra_get_theme_changelog_feed_data(), 'logo_url' => apply_filters( 'astra_admin_menu_icon', ASTRA_THEME_URI . 'inc/assets/images/astra-logo.svg' ), 'update_nonce' => wp_create_nonce( 'astra_update_admin_setting' ), 'integrations' => self::astra_get_integrations(), 'show_plugins' => apply_filters( 'astra_show_free_extend_plugins', true ), // Legacy filter support. 'useful_plugins' => self::astra_get_useful_plugins(), 'extensions' => self::astra_get_pro_extensions(), 'plugin_manager_nonce' => wp_create_nonce( 'astra_plugin_manager_nonce' ), 'plugin_installer_nonce' => wp_create_nonce( 'updates' ), 'free_vs_pro_link' => admin_url( 'admin.php?page=' . self::$plugin_slug . '&path=free-vs-pro' ), 'show_builder_migration' => Astra_Builder_Helper::is_header_footer_builder_active(), 'plugin_installing_text' => __( 'Installing', 'astra' ), 'plugin_installed_text' => __( 'Installed', 'astra' ), 'plugin_activating_text' => __( 'Activating', 'astra' ), 'plugin_activated_text' => __( 'Activated', 'astra' ), 'plugin_activate_text' => __( 'Activate', 'astra' ), 'starter_templates_data' => self::get_starter_template_plugin_data(), 'astra_docs_data' => astra_remote_docs_data(), 'upgrade_notice' => astra_showcase_upgrade_notices(), 'show_banner_video' => apply_filters( 'astra_show_banner_video', true ), ); $this->settings_app_scripts( apply_filters( 'astra_react_admin_localize', $localize ) ); } /** * Get customizer quick links for easy navigation. * * @return array * @since 4.0.0 */ public static function astra_get_quick_links() { return apply_filters( 'astra_quick_settings', array( 'logo-favicon' => array( 'title' => __( 'Site Identity', 'astra' ), 'quick_url' => admin_url( 'customize.php?autofocus[control]=site_icon' ), ), 'header' => array( 'title' => __( 'Header Settings', 'astra' ), 'quick_url' => admin_url( 'customize.php?autofocus[panel]=panel-header-group' ), ), 'footer' => array( 'title' => __( 'Footer Settings', 'astra' ), 'quick_url' => admin_url( 'customize.php?autofocus[section]=section-footer-group' ), ), 'colors' => array( 'title' => __( 'Color', 'astra' ), 'quick_url' => admin_url( 'customize.php?autofocus[section]=section-colors-background' ), ), 'typography' => array( 'title' => __( 'Typography', 'astra' ), 'quick_url' => admin_url( 'customize.php?autofocus[section]=section-typography' ), ), 'button' => array( 'title' => __( 'Button', 'astra' ), 'quick_url' => admin_url( 'customize.php?autofocus[section]=section-buttons' ), ), 'blog-options' => array( 'title' => __( 'Blog Options', 'astra' ), 'quick_url' => admin_url( 'customize.php?autofocus[section]=section-blog-group' ), ), 'layout' => array( 'title' => __( 'Layout', 'astra' ), 'quick_url' => admin_url( 'customize.php?autofocus[section]=section-container-layout' ), ), 'menus' => array( 'title' => __( 'Menus', 'astra' ), 'quick_url' => admin_url( 'nav-menus.php' ), ), ) ); } /** * Get Starter Templates plugin data. * * @return array * @since 4.0.0 */ public static function get_starter_template_plugin_data() { /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $st_data = array( 'title' => is_callable( 'Astra_Ext_White_Label_Markup::get_whitelabel_string' ) ? Astra_Ext_White_Label_Markup::get_whitelabel_string( 'astra-sites', 'name', __( 'Starter Templates', 'astra' ) ) : __( 'Starter Templates', 'astra' ), 'description' => is_callable( 'Astra_Ext_White_Label_Markup::get_whitelabel_string' ) ? Astra_Ext_White_Label_Markup::get_whitelabel_string( 'astra-sites', 'description', __( 'Create professional designed pixel perfect websites in minutes. Get access to 280+ pre-made full website templates for your favorite page builder.', 'astra' ) ) : __( 'Create professional designed pixel perfect websites in minutes. Get access to 280+ pre-made full website templates for your favorite page builder.', 'astra' ), 'is_available' => defined( 'ASTRA_PRO_SITES_VER' ) || defined( 'ASTRA_SITES_VER' ) ? true : false, 'redirection' => admin_url( 'themes.php?page=starter-templates' ), ); /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $skip_free_version = false; $pro_plugin_status = self::get_plugin_status( 'astra-pro-sites/astra-pro-sites.php' ); if ( 'installed' === $pro_plugin_status || 'activated' === $pro_plugin_status ) { $skip_free_version = true; $st_data['slug'] = 'astra-pro-sites'; $st_data['status'] = $pro_plugin_status; $st_data['path'] = 'astra-pro-sites/astra-pro-sites.php'; } $free_plugin_status = self::get_plugin_status( 'astra-sites/astra-sites.php' ); if ( ! $skip_free_version ) { $st_data['slug'] = 'astra-sites'; $st_data['status'] = $free_plugin_status; $st_data['path'] = 'astra-sites/astra-sites.php'; } return $st_data; } /** * Get plugin status * * @since 4.0.0 * * @param string $plugin_init_file Plguin init file. * @return mixed */ public static function get_plugin_status( $plugin_init_file ) { $installed_plugins = get_plugins(); if ( ! isset( $installed_plugins[ $plugin_init_file ] ) ) { return 'install'; } elseif ( is_plugin_active( $plugin_init_file ) ) { return 'activated'; } else { return 'installed'; } } /** * Get Astra's pro extension list. * * @since 4.0.0 * @return array * @access public */ public static function astra_get_pro_extensions() { return apply_filters( 'astra_addon_list', array( 'colors-and-background' => array( 'title' => __( 'Colors & Background', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/colors-background-module/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/colors-background-module/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'typography' => array( 'title' => __( 'Typography', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/typography-module/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/typography-module/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'spacing' => array( 'title' => __( 'Spacing', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/spacing-addon-overview/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/spacing-addon-overview/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'blog-pro' => array( 'title' => __( 'Blog Pro', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/blog-pro-overview/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/blog-pro-overview/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'mobile-header' => array( 'title' => __( 'Mobile Header', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/mobile-header-with-astra/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/mobile-header-with-astra/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'header-sections' => array( 'title' => __( 'Header Sections', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/header-sections-pro/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/header-sections-pro/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'sticky-header' => array( 'title' => __( 'Sticky Header', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/sticky-header-pro/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/sticky-header-pro/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'site-layouts' => array( 'title' => __( 'Site Layouts', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/site-layout-overview/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/site-layout-overview/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'advanced-footer' => array( 'title' => __( 'Footer Widgets', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/footer-widgets-astra-pro/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/footer-widgets-astra-pro/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'nav-menu' => array( 'title' => __( 'Nav Menu', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/nav-menu-addon/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/nav-menu-addon/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'advanced-hooks' => array( 'title' => ( defined( 'ASTRA_EXT_VER' ) && version_compare( ASTRA_EXT_VER, '4.5.0', '<' ) ) ? __( 'Custom Layouts', 'astra' ) : __( 'Site Builder', 'astra' ), 'description' => __( 'Add content conditionally in the various hook areas of the theme.', 'astra' ), 'manage_settings' => true, 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/custom-layouts-pro/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/custom-layouts-pro/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'advanced-headers' => array( 'title' => __( 'Page Headers', 'astra' ), 'description' => __( 'Make your header layouts look more appealing and sexy!', 'astra' ), 'manage_settings' => true, 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/page-headers-overview/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/page-headers-overview/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'woocommerce' => array( 'title' => __( 'WooCommerce', 'astra' ), 'class' => 'ast-addon', 'condition' => defined( 'ASTRA_EXT_VER' ) && class_exists( 'WooCommerce' ) ? true : false, 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/woocommerce-module-overview/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/woocommerce-module-overview/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'edd' => array( 'title' => __( 'Easy Digital Downloads', 'astra' ), 'class' => 'ast-addon', 'condition' => defined( 'ASTRA_EXT_VER' ) && class_exists( 'Easy_Digital_Downloads' ) ? true : false, 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/easy-digital-downloads-module-overview/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/easy-digital-downloads-module-overview/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'learndash' => array( 'title' => __( 'LearnDash', 'astra' ), 'condition' => defined( 'ASTRA_EXT_VER' ) && class_exists( 'SFWD_LMS' ) ? true : false, 'description' => __( 'Supercharge your LearnDash website with amazing design features.', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/learndash-integration-in-astra-pro/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/learndash-integration-in-astra-pro/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'lifterlms' => array( 'title' => __( 'LifterLMS', 'astra' ), 'class' => 'ast-addon', 'condition' => defined( 'ASTRA_EXT_VER' ) && class_exists( 'LifterLMS' ) ? true : false, 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/lifterlms-module-pro/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/lifterlms-module-pro/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), 'white-label' => array( 'title' => __( 'White Label', 'astra' ), 'class' => 'ast-addon', 'title_url' => astra_get_pro_url( 'https://wpastra.com/docs/how-to-white-label-astra/', 'dashboard', 'free-theme', 'documentation' ), 'links' => array( array( 'link_class' => 'ast-learn-more', 'link_url' => astra_get_pro_url( 'https://wpastra.com/docs/how-to-white-label-astra/', 'dashboard', 'free-theme', 'documentation' ), 'link_text' => __( 'Documentation', 'astra' ), 'target_blank' => true, ), ), ), ) ); } /** * Get Astra's useful plugins. * Extend this in following way - * * // array( * // 'title' => "Plugin Name", * // 'subtitle' => "Plugin description goes here.", * // 'path' => 'plugin-slug/plugin-slug.php', * // 'redirection' => admin_url( 'admin.php?page=sc-dashboard' ), * // 'status' => self::get_plugin_status( 'plugin-slug/plugin-slug.php' ), * // 'logoPath' => array( * // 'internal_icon' => true, // true = will take internal Astra's any icon. false = provide next custom icon link. * // 'icon_path' => "spectra", // If internal_icon false then - example custom SVG URL: ASTRA_THEME_URI . 'inc/assets/images/astra.svg'. * // ), * // ), * * @since 4.0.0 * @return array * @access public */ public static function astra_get_useful_plugins() { $st_plugin_data = self::get_starter_template_plugin_data(); /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $st_plugin_title = isset( $st_plugin_data['title'] ) ? $st_plugin_data['title'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $st_plugin_status = isset( $st_plugin_data['status'] ) ? $st_plugin_data['status'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $st_plugin_slug = isset( $st_plugin_data['slug'] ) ? $st_plugin_data['slug'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $st_plugin_path = isset( $st_plugin_data['path'] ) ? $st_plugin_data['path'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $st_plugin_redirection = isset( $st_plugin_data['redirection'] ) ? $st_plugin_data['redirection'] : ''; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $sc_api_token = get_option( 'sc_api_token', '' ); $surecart_redirection = empty( $sc_api_token ) ? 'sc-getting-started' : 'sc-dashboard'; // Making useful plugin section dynamic. if ( class_exists( 'WooCommerce' ) ) { $setup_type = 'woocommerce'; } elseif ( class_exists( 'SFWD_LMS' ) ) { $setup_type = 'learndash'; } else { $setup_type = 'default'; } switch ( $setup_type ) { case 'woocommerce': $useful_plugins = array( array( 'title' => __( 'CartFlows', 'astra' ), 'subtitle' => __( '#1 Sales Funnel WordPress Builder.', 'astra' ), 'status' => self::get_plugin_status( 'cartflows/cartflows.php' ), 'slug' => 'cartflows', 'path' => 'cartflows/cartflows.php', 'redirection' => ( false === get_option( 'wcf_setup_complete', false ) && ! get_option( 'wcf_setup_skipped', false ) ) ? admin_url( 'index.php?page=cartflow-setup' ) : admin_url( 'admin.php?page=cartflows' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'cart-flows', ), ), array( 'title' => __( 'Stripe Payments For Woo', 'astra' ), 'subtitle' => __( 'Simple, secure way to accept credit card payments.', 'astra' ), 'status' => self::get_plugin_status( 'checkout-plugins-stripe-woo/checkout-plugins-stripe-woo.php' ), 'slug' => 'checkout-plugins-stripe-woo', 'path' => 'checkout-plugins-stripe-woo/checkout-plugins-stripe-woo.php', 'redirection' => ( false === get_option( 'cpsw_setup_status', false ) ) ? admin_url( 'index.php?page=cpsw-onboarding' ) : admin_url( 'admin.php?page=wc-settings&tab=cpsw_api_settings' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'stripe-checkout', ), ), array( 'title' => __( 'Cart Abandonment Recovery', 'astra' ), 'subtitle' => __( 'Recover lost revenue automatically.', 'astra' ), 'status' => self::get_plugin_status( 'woo-cart-abandonment-recovery/woo-cart-abandonment-recovery.php' ), 'slug' => 'woo-cart-abandonment-recovery', 'path' => 'woo-cart-abandonment-recovery/woo-cart-abandonment-recovery.php', 'redirection' => admin_url( 'admin.php?page=woo-cart-abandonment-recovery' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'cart-abandonment', ), ), array( 'title' => __( 'Variations by CartFlows', 'astra' ), 'subtitle' => __( 'Beautiful store variation swatches.', 'astra' ), 'status' => self::get_plugin_status( 'variation-swatches-woo/variation-swatches-woo.php' ), 'slug' => 'variation-swatches-woo', 'path' => 'variation-swatches-woo/variation-swatches-woo.php', 'redirection' => admin_url( 'admin.php?page=cfvsw_settings' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'variation-swatches', ), ), array( 'title' => __( 'SureTriggers', 'astra' ), 'subtitle' => __( 'Automate your WordPress setup.', 'astra' ), 'status' => self::get_plugin_status( 'suretriggers/suretriggers.php' ), 'slug' => 'suretriggers', 'path' => 'suretriggers/suretriggers.php', 'redirection' => admin_url( 'admin.php?page=suretriggers' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'suretriggers', ), ), ); break; case 'learndash': $useful_plugins = array( array( 'title' => __( 'SureCart', 'astra' ), 'subtitle' => __( 'The new way to sell on WordPress.', 'astra' ), 'status' => self::get_plugin_status( 'surecart/surecart.php' ), 'slug' => 'surecart', 'path' => 'surecart/surecart.php', 'redirection' => admin_url( 'admin.php?page=' . esc_attr( $surecart_redirection ) ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'surecart', ), ), array( 'title' => __( 'Presto Player', 'astra' ), 'subtitle' => __( 'Ultimate Video Player For WordPress.', 'astra' ), 'status' => self::get_plugin_status( 'presto-player/presto-player.php' ), 'slug' => 'presto-player', 'path' => 'presto-player/presto-player.php', 'redirection' => admin_url( 'edit.php?post_type=pp_video_block' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'presto-player', ), ), array( 'title' => __( 'Spectra', 'astra' ), 'subtitle' => __( 'Free WordPress Page Builder.', 'astra' ), 'status' => self::get_plugin_status( 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php' ), 'slug' => 'ultimate-addons-for-gutenberg', 'path' => 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php', 'redirection' => admin_url( 'options-general.php?page=spectra' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'spectra', ), ), array( 'title' => __( 'SureTriggers', 'astra' ), 'subtitle' => __( 'Automate your WordPress setup.', 'astra' ), 'status' => self::get_plugin_status( 'suretriggers/suretriggers.php' ), 'slug' => 'suretriggers', 'path' => 'suretriggers/suretriggers.php', 'redirection' => admin_url( 'admin.php?page=suretriggers' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'suretriggers', ), ), ); break; default: $useful_plugins = array( array( 'title' => $st_plugin_title, 'subtitle' => __( '280+ Ready to Import Templates.', 'astra' ), 'status' => $st_plugin_status, 'slug' => $st_plugin_slug, 'path' => $st_plugin_path, 'redirection' => $st_plugin_redirection, 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'starter-logo', ), ), array( 'title' => __( 'Spectra', 'astra' ), 'subtitle' => __( 'Free WordPress Page Builder.', 'astra' ), 'status' => self::get_plugin_status( 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php' ), 'slug' => 'ultimate-addons-for-gutenberg', 'path' => 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php', 'redirection' => admin_url( 'options-general.php?page=spectra' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'spectra', ), ), array( 'title' => __( 'SureCart', 'astra' ), 'subtitle' => __( 'The new way to sell on WordPress.', 'astra' ), 'status' => self::get_plugin_status( 'surecart/surecart.php' ), 'slug' => 'surecart', 'path' => 'surecart/surecart.php', 'redirection' => admin_url( 'admin.php?page=' . esc_attr( $surecart_redirection ) ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'surecart', ), ), array( 'title' => __( 'SureTriggers', 'astra' ), 'subtitle' => __( 'Automate your WordPress setup.', 'astra' ), 'status' => self::get_plugin_status( 'suretriggers/suretriggers.php' ), 'slug' => 'suretriggers', 'path' => 'suretriggers/suretriggers.php', 'redirection' => admin_url( 'admin.php?page=suretriggers' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'suretriggers', ), ), ); break; } return apply_filters( 'astra_useful_plugins', $useful_plugins ); } /** * Get Astra's recommended integrations. * Extend this in following way - * * // array( * // 'title' => "Plugin Name", * // 'subtitle' => "Plugin description goes here.", * // 'isPro' => false, * // 'status' => self::get_plugin_status( 'plugin-slug/plugin-slug.php' ), * // 'path' => 'plugin-slug/plugin-slug.php', * // 'redirection' => admin_url( 'admin.php?page=sc-dashboard' ), * // 'logoPath' => array( * // 'internal_icon' => true, // true = will take internal Astra's any icon. false = provide next custom icon link. * // 'icon_path' => "spectra", // If internal_icon false then - example custom SVG URL: ASTRA_THEME_URI . 'inc/assets/images/astra.svg'. * // ), * // ), * * @since 4.0.0 * @return array * @access public */ public static function astra_get_integrations() { $sc_api_token = get_option( 'sc_api_token', '' ); $surecart_redirection = empty( $sc_api_token ) ? 'sc-getting-started' : 'sc-dashboard'; return apply_filters( 'astra_integrated_plugins', array( array( 'title' => __( 'Spectra', 'astra' ), 'subtitle' => __( 'Free WordPress Page Builder Plugin.', 'astra' ), 'isPro' => false, 'status' => self::get_plugin_status( 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php' ), 'slug' => 'ultimate-addons-for-gutenberg', 'path' => 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php', 'redirection' => admin_url( 'options-general.php?page=spectra' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'spectra', ), ), array( 'title' => __( 'SureCart', 'astra' ), 'subtitle' => __( 'Simplifying selling online with WordPress.', 'astra' ), 'isPro' => false, 'status' => self::get_plugin_status( 'surecart/surecart.php' ), 'redirection' => admin_url( 'admin.php?page=' . esc_attr( $surecart_redirection ) ), 'slug' => 'surecart', 'path' => 'surecart/surecart.php', 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'surecart', ), ), array( 'title' => __( 'CartFlows', 'astra' ), 'subtitle' => __( '#1 Sales Funnel Builder for WordPress.', 'astra' ), 'isPro' => false, 'status' => self::get_plugin_status( 'cartflows/cartflows.php' ), 'slug' => 'cartflows', 'path' => 'cartflows/cartflows.php', 'redirection' => ( false === get_option( 'wcf_setup_complete', false ) && ! get_option( 'wcf_setup_skipped', false ) ) ? admin_url( 'index.php?page=cartflow-setup' ) : admin_url( 'admin.php?page=cartflows' ), 'logoPath' => array( 'internal_icon' => true, 'icon_path' => 'cart-flows', ), ), ) ); } /** * Get Changelogs from API. * * @since 4.0.0 * @return array $changelog_data Changelog Data. */ public static function astra_get_theme_changelog_feed_data() { $changelog_data = array(); $posts = json_decode( wp_remote_retrieve_body( wp_remote_get( 'https://wpastra.com/wp-json/wp/v2/changelog?product=97&per_page=3' ) ) ); // Astra theme. if ( isset( $posts ) && is_array( $posts ) ) { foreach ( $posts as $post ) { $changelog_data[] = array( 'title' => $post->title->rendered, 'date' => gmdate( 'l F j, Y', strtotime( $post->date ) ), 'description' => $post->content->rendered, 'link' => $post->link, 'product' => isset( $post->product[0] ) ? $post->product[0] : 0, ); } } return $changelog_data; } /** * Settings app scripts * * @since 4.0.0 * @param array $localize Variable names. */ public function settings_app_scripts( $localize ) { $handle = 'astra-admin-dashboard-app'; $build_path = ASTRA_THEME_ADMIN_DIR . 'assets/build/'; $build_url = ASTRA_THEME_ADMIN_URL . 'assets/build/'; $script_asset_path = $build_path . 'dashboard-app.asset.php'; /** @psalm-suppress MissingFile */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $script_info = file_exists( $script_asset_path ) ? include $script_asset_path : array( // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound -- Not a template file so loading in a normal way. 'dependencies' => array(), 'version' => ASTRA_THEME_VERSION, ); /** @psalm-suppress MissingFile */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $script_dep = array_merge( $script_info['dependencies'], array( 'updates', 'wp-hooks' ) ); wp_register_script( $handle, $build_url . 'dashboard-app.js', $script_dep, $script_info['version'], true ); wp_register_style( $handle, $build_url . 'dashboard-app.css', array(), ASTRA_THEME_VERSION ); wp_register_style( 'astra-admin-google-fonts', 'https://fonts.googleapis.com/css2?family=Inter:wght@200&display=swap', array(), ASTRA_THEME_VERSION ); wp_enqueue_script( $handle ); wp_set_script_translations( $handle, 'astra' ); wp_enqueue_style( 'astra-admin-google-fonts' ); wp_enqueue_style( $handle ); wp_style_add_data( $handle, 'rtl', 'replace' ); wp_localize_script( $handle, 'astra_admin', $localize ); } /** * Add footer link. * * @since 4.0.0 */ public function astra_admin_footer_link() { $theme_name = astra_get_theme_name(); if ( astra_is_white_labelled() ) { $footer_text = '<span id="footer-thankyou">' . __( 'Thank you for using', 'astra' ) . '<span class="focus:text-astra-hover active:text-astra-hover hover:text-astra-hover"> ' . esc_html( $theme_name ) . '.</span></span>'; } else { $footer_text = sprintf( /* translators: 1: Astra, 2: Theme rating link */ __( 'Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!', 'astra' ), '<span class="ast-footer-thankyou"><strong>' . esc_html( $theme_name ) . '</strong>', '<a href="https://wordpress.org/support/theme/astra/reviews/?rate=5#new-post" target="_blank">★★★★★</a></span>' ); } return $footer_text; } } Astra_Menu::get_instance(); includes/class-astra-theme-builder-free.php 0000644 00000012677 15150276715 0014771 0 ustar 00 <?php /** * Site Builder Free Version Preview. * * @package Astra */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } if ( ! class_exists( 'Astra_Theme_Builder_Free' ) ) { define( 'ASTRA_THEME_BUILDER_FREE_DIR', ASTRA_THEME_DIR . 'admin/assets/theme-builder/' ); define( 'ASTRA_THEME_BUILDER_FREE_URI', ASTRA_THEME_URI . 'admin/assets/theme-builder/' ); /** * Site Builder initial setup. * * @since 4.5.0 */ class Astra_Theme_Builder_Free { /** * Member Variable * * @var null $instance */ private static $instance; /** * Initiator * * @since 4.5.0 */ public static function get_instance() { if ( ! isset( self::$instance ) ) { /** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort self::$instance = new self(); /** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort } return self::$instance; } /** * Constructor * * @since 4.5.0 * @return void */ public function __construct() { $is_astra_addon_active = ( defined( 'ASTRA_EXT_VER' ) ); if ( ! $is_astra_addon_active ) { add_action( 'admin_enqueue_scripts', array( $this, 'theme_builder_admin_enqueue_scripts' ) ); add_action( 'admin_body_class', array( $this, 'admin_body_class' ) ); add_action( 'admin_menu', array( $this, 'setup_menu' ) ); add_action( 'admin_init', array( $this, 'astra_theme_builder_disable_notices' ) ); } add_action( 'admin_page_access_denied', array( $this, 'astra_theme_builder_access_denied_redirect' ) ); } /** * Enqueue scripts and styles. * * @since 4.5.0 * @return void */ public function theme_builder_admin_enqueue_scripts() { $file_prefix = ''; if ( is_rtl() ) { $file_prefix .= '.rtl'; } wp_enqueue_style( 'astra-theme-builder-style', ASTRA_THEME_BUILDER_FREE_URI . 'build/index' . $file_prefix . '.css', array(), ASTRA_THEME_VERSION ); wp_enqueue_script( 'astra-theme-builder-script', ASTRA_THEME_BUILDER_FREE_URI . 'build/index.js', array( 'wp-element' ), ASTRA_THEME_VERSION, true ); wp_enqueue_style( 'dashicons' ); $localized_data = array( 'title' => __( 'Site Builder', 'astra' ), 'rest_url' => '/wp-json/astra-addon/v1/custom-layouts/', 'new_custom_layout_base_url' => admin_url( 'post-new.php?post_type=astra-advanced-hook' ), 'astra_pricing_page_url' => 'https://wpastra.com/pricing/', 'astra_docs_page_url' => 'https://wpastra.com/docs/custom-layouts-pro/', 'admin_url' => admin_url(), ); wp_localize_script( 'astra-theme-builder-script', 'astra_theme_builder', $localized_data ); } /** * Admin Body Classes * * @since 4.5.0 * @param string $classes Space separated class string. */ public function admin_body_class( $classes = '' ) { $theme_builder_class = isset( $_GET['page'] ) && 'theme-builder-free' === $_GET['page'] ? 'ast-theme-builder' : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Fetching a $_GET value, no nonce available to validate. $classes .= ' ' . $theme_builder_class . ' '; return $classes; } /** * Renders the admin settings. * * @since 4.5.0 * @return void */ public function render_theme_builder() { ?> <div class="ast-tb-menu-page-wrapper"> <div id="ast-tb-menu-page"> <div class="ast-tb-menu-page-content"> <div id="ast-tb-app-root" class="ast-tb-app-root"></div> </div> </div> </div> <?php } /** * Setup menu. * * @since 4.5.0 * @return void */ public function setup_menu() { add_submenu_page( // phpcs:ignore WPThemeReview.PluginTerritory.NoAddAdminPages.add_menu_pages_add_submenu_page -- Taken the menu on top level 'astra', __( 'Site Builder', 'astra' ), __( 'Site Builder', 'astra' ), 'manage_options', 'theme-builder-free', array( $this, 'render_theme_builder' ), 2 ); } /** * Disable notices for Site Builder page. * * @since 4.5.0 * @return void */ public function astra_theme_builder_disable_notices() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Fetching a $_GET value, no nonce available to validate. if ( isset( $_GET['page'] ) && 'theme-builder-free' === $_GET['page'] ) { remove_all_actions( 'admin_notices' ); remove_all_actions( 'all_admin_notices' ); // For older versions of WordPress } } /** * Redirect to Site Builder pro from free preview if pro module is active. * * @since 4.5.0 * @return void */ public function astra_theme_builder_access_denied_redirect() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Fetching a $_GET value, no nonce available to validate. if ( isset( $_GET['page'] ) && 'theme-builder-free' === $_GET['page'] ) { /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort $is_astra_addon_active = ( defined( 'ASTRA_EXT_VER' ) && Astra_Ext_Extension::is_active( 'advanced-hooks' ) ); /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( $is_astra_addon_active ) { wp_redirect( admin_url( 'admin.php?page=theme-builder' ) ); exit; } } } } /** * Kicking this off by calling 'get_instance()' method */ Astra_Theme_Builder_Free::get_instance(); } class-astra-admin-loader.php 0000644 00000003633 15150276715 0012042 0 ustar 00 <?php /** * Astra Admin Loader * * @package Astra * @since 4.0.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } if ( ! class_exists( 'Astra_Admin_Loader' ) ) : /** * Astra_Admin_Loader * * @since 4.0.0 */ class Astra_Admin_Loader { /** * Instance * * @access private * @var null $instance * @since 4.0.0 */ private static $instance; /** * Initiator * * @since 4.0.0 * @return object initialized object of class. */ public static function get_instance() { if ( ! isset( self::$instance ) ) { /** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort self::$instance = new self(); /** @psalm-suppress InvalidPropertyAssignmentValue */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort } return self::$instance; } /** * Constructor * * @since 4.0.0 */ public function __construct() { define( 'ASTRA_THEME_ADMIN_DIR', ASTRA_THEME_DIR . 'admin/' ); define( 'ASTRA_THEME_ADMIN_URL', ASTRA_THEME_URI . 'admin/' ); $this->includes(); } /** * Include required classes. * * @since 4.0.0 */ public function includes() { /* Ajax init */ require_once ASTRA_THEME_ADMIN_DIR . 'includes/class-astra-admin-ajax.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound -- Not a template file so loading in a normal way. /* Setup Menu */ require_once ASTRA_THEME_ADMIN_DIR . 'includes/class-astra-menu.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound -- Not a template file so loading in a normal way. require_once ASTRA_THEME_ADMIN_DIR . 'includes/class-astra-theme-builder-free.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound -- Not a template file so loading in a normal way. } } endif; Astra_Admin_Loader::get_instance();
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server.isorus.org
Server IP: 159.223.142.74
PHP Version: 7.4.33
Server Software: Apache
System: Linux server.isorus.org 4.18.0-477.27.2.el8_8.x86_64 #1 SMP Fri Sep 29 08:21:01 EDT 2023 x86_64
HDD Total: 319.99 GB
HDD Free: 212.35 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
Off
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Disabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: inceptionblue
User ID (UID): 1042
Group ID (GID): 1043
Script Owner UID:
Current Dir Owner: 1042