diff --git a/autodescription.php b/autodescription.php index 999232de..3bd9a399 100644 --- a/autodescription.php +++ b/autodescription.php @@ -3,7 +3,7 @@ * Plugin Name: The SEO Framework * Plugin URI: https://theseoframework.com/ * Description: An automated, advanced, accessible, unbranded and extremely fast SEO solution for any WordPress website. - * Version: 3.0.4-dev2018.2.23.0 + * Version: 3.0.4-dev2018.2.23.1 * Author: Sybre Waaijer * Author URI: https://theseoframework.com/ * License: GPLv3 diff --git a/inc/classes/admin-init.class.php b/inc/classes/admin-init.class.php index acd98296..43f95b56 100644 --- a/inc/classes/admin-init.class.php +++ b/inc/classes/admin-init.class.php @@ -212,6 +212,7 @@ public function _localize_admin_javascript() { * 3. Removed unused caching. * 4. Added dynamic output control. * @since 2.9.0 Added boolean $returnValue['states']['isSettingsPage'] + * @since 3.0.4 `descPixelGuideline` has been increased from "920 and 820" to "1820 and 1720" respectively. * * @return array $strings The l10n strings. */ @@ -369,7 +370,7 @@ protected function get_javascript_l10n() { 'descriptionSeparator' => $description_separator, 'titleLocation' => $title_location, 'titlePixelGuideline' => 600, - 'descPixelGuideline' => $is_post_edit ? ( $this->is_page() ? 920 : 820 ) : 920, + 'descPixelGuideline' => $is_post_edit ? ( $this->is_page() ? 1820 : 1720 ) : 1820, ), 'other' => $this->additional_js_l10n( null, array(), true ), ); diff --git a/inc/classes/admin-pages.class.php b/inc/classes/admin-pages.class.php index ed9a69c7..28238b01 100644 --- a/inc/classes/admin-pages.class.php +++ b/inc/classes/admin-pages.class.php @@ -871,18 +871,30 @@ public function get_logo_uploader_form( $input_id ) { } /** - * Outputs floating title HTML for JavaScript. + * Outputs floating and reference title HTML elements for JavaScript. * - * @since 3.0.0 + * @since 3.0.4 */ - public function output_floating_title_elements() { + public function output_js_title_elements() { ?> + + + 155 && $desc_len < 175 ) { + } elseif ( $desc_len > 300 && $desc_len < 330 ) { $notice = $i18n['length_too_long']; // Don't make it okay if it's already bad. $class = $bad === $class ? $class : $okay; - } elseif ( $desc_len >= 175 ) { + } elseif ( $desc_len >= 330 ) { $notice = $i18n['length_far_too_long']; $class = $bad; } else { diff --git a/inc/classes/generate-description.class.php b/inc/classes/generate-description.class.php index 6de0a4a4..a370599a 100644 --- a/inc/classes/generate-description.class.php +++ b/inc/classes/generate-description.class.php @@ -39,6 +39,87 @@ protected function __construct() { parent::__construct(); } + /** + * Returns the Twitter meta description. Falls back to Open Graph description. + * + * @since 3.0.4 + * @uses $this->get_open_graph_description() + * + * @param int|null $id The post or term ID. Falls back to queried ID. + * @param bool $escape Whether to escape the description. + * @return string Twitter Description. + */ + public function get_twitter_description( $id = null, $escape = true ) { + + if ( is_null( $id ) ) + $id = $this->get_the_real_ID(); + + $desc = $this->get_custom_field( '_twitter_description', $id ) + ?: $this->get_open_graph_description( $id, false ); + + return $escape ? $this->escape_description( $desc ) : $desc; + } + + /** + * Returns the Open Graph meta description. Falls back to meta description. + * + * @since 3.0.4 + * @uses $this->get_generated_open_graph_description() + * + * @param int|null $id The post or term ID. Falls back to queried ID. + * @param bool $escape Whether to escape the description. + * @return string Open Graph Description. + */ + public function get_open_graph_description( $id = null, $escape = true ) { + + if ( is_null( $id ) ) + $id = $this->get_the_real_ID(); + + $desc = $this->get_custom_field( '_open_graph_description', $id ) + ?: $this->get_generated_open_graph_description( $id, false ); + + return $escape ? $this->escape_description( $desc ) : $desc; + } + + /** + * Returns the autogenerated open graph meta description. Falls back to meta description. + * + * @since 3.0.4 + * @uses $this->get_generated_open_graph_description() + * + * @param int|null $id The post or term ID. Falls back to queried ID. + * @param bool $escape Whether to escape the description. + * @return string Autogenerated Twitter Description. + */ + public function get_generated_twitter_description( $id = null, $escape = true ) { + return $this->get_generated_open_graph_description( $id, $escape ); + } + + /** + * Returns the autogenerated open graph meta description. Falls back to meta description. + * + * @since 3.0.4 + * @uses $this->generate_description() + * @staticvar array $cache + * + * @param int|null $id The post or term ID. Falls back to queried ID. + * @param bool $escape Whether to escape the description. + * @return string Autogenerated Open Graph Description. + */ + public function get_generated_open_graph_description( $id = null, $escape = true ) { + + if ( is_null( $id ) ) + $id = $this->get_the_real_ID(); + + static $cache = array(); + + $desc = isset( $cache[ $id ] ) + ? $cache[ $id ] + : $cache[ $id ] = $this->generate_description( '', array( 'id' => $id, 'social' => true, 'escape' => false ) ); + + return $escape ? $this->escape_description( $desc ) : $desc; + } + /** * Creates description. Base function. * @@ -107,7 +188,10 @@ public function generate_description( $description = '', $args = array() ) { if ( \apply_filters( 'the_seo_framework_do_shortcodes_in_description', false ) ) $description = \do_shortcode( $description ); - return $this->escape_description( $description ); + if ( $args['escape'] ) + $description = $this->escape_description( $description ); + + return $description; } /** @@ -130,6 +214,7 @@ public function parse_description_args( $args = array(), $defaults = array(), $g 'is_home' => false, 'get_custom_field' => true, 'social' => false, + 'escape' => true, ); /** @@ -139,9 +224,11 @@ public function parse_description_args( $args = array(), $defaults = array(), $g * @param bool $is_home We're generating for the home page. * @param bool $get_custom_field Do not fetch custom title when false. * @param bool $social Generate Social Description when true. + * @param bool $escape Whether to escape the description. * } * * @since 2.5.0 + * @since 3.0.4 Added escape parameter. * * @param array $defaults The description defaults. * @param array $args The input args. @@ -159,6 +246,7 @@ public function parse_description_args( $args = array(), $defaults = array(), $g $args['is_home'] = isset( $args['is_home'] ) ? (bool) $args['is_home'] : $defaults['is_home']; $args['get_custom_field'] = isset( $args['get_custom_field'] ) ? (bool) $args['get_custom_field'] : $defaults['get_custom_field']; $args['social'] = isset( $args['social'] ) ? (bool) $args['social'] : $defaults['social']; + $args['escape'] = isset( $args['escape'] ) ? (bool) $args['escape'] : $defaults['escape']; return $args; } @@ -473,6 +561,7 @@ protected function generate_the_description( $args, $escape = true ) { * Returns the generated description excerpt array for the normal description tag. * * @since 2.8.0 + * @since 3.0.4 Now uses 300 characters instead of 155. * * @param int $id The post/term ID. * @param bool|object The term object. @@ -506,12 +595,13 @@ public function get_description_excerpt_normal( $id = 0, $term = false ) { * Determine if the title is far too long (72+, rather than 75 in the Title guidelines). * If this is the case, trim the "title on blogname" part from the description. * @since 2.8.0 + * @since 3.0.4 Increased to basis 300, from 155. */ if ( $additions_length > 71 ) { - $max_char_length = 155; + $max_char_length = 300; $trim = true; } else { - $max_char_length = 155 - $additions_length; + $max_char_length = 300 - $additions_length; $trim = false; } @@ -815,6 +905,7 @@ public function generate_description_title( $id = '', $term = '', $page_on_front * * @since 2.3.4 * @since 2.8.2 Now no longer escapes excerpt by accident in processing, preventing "too short" output. + * @since 3.0.4 The default $max_char_length has been increased from 155 to 300. * @staticvar array $excerpt_cache Holds the excerpt * @staticvar array $excerptlength_cache Holds the excerpt length * @@ -823,7 +914,7 @@ public function generate_description_title( $id = '', $term = '', $page_on_front * @param int $max_char_length The maximum excerpt char length. * @return string $excerpt The excerpt, not escaped. */ - public function generate_excerpt( $page_id, $term = '', $max_char_length = 155 ) { + public function generate_excerpt( $page_id, $term = '', $max_char_length = 300 ) { static $excerpt_cache = array(); static $excerptlength_cache = array(); diff --git a/inc/classes/generate-title.class.php b/inc/classes/generate-title.class.php index 0ef29180..156a4b8f 100644 --- a/inc/classes/generate-title.class.php +++ b/inc/classes/generate-title.class.php @@ -41,6 +41,87 @@ protected function __construct() { parent::__construct(); } + /** + * Returns the Twitter meta title. Falls back to Open Graph title. + * + * @since 3.0.4 + * @uses $this->get_open_graph_title() + * + * @param int|null $id The post or term ID. Falls back to queried ID. + * @param bool $escape Whether to escape the title. + * @return string Twitter Title. + */ + public function get_twitter_title( $id = null, $escape = true ) { + + if ( is_null( $id ) ) + $id = $this->get_the_real_ID(); + + $title = $this->get_custom_field( '_twitter_title', $id ) + ?: $this->get_open_graph_title( $id, false ); + + return $escape ? $this->escape_title( $title ) : $title; + } + + /** + * Returns the Open Graph meta title. Falls back to meta title. + * + * @since 3.0.4 + * @uses $this->get_generated_open_graph_title() + * + * @param int|null $id The post or term ID. Falls back to queried ID. + * @param bool $escape Whether to escape the title. + * @return string Open Graph Title. + */ + public function get_open_graph_title( $id = null, $escape = true ) { + + if ( is_null( $id ) ) + $id = $this->get_the_real_ID(); + + $title = $this->get_custom_field( '_open_graph_title', $id ) + ?: $this->get_generated_open_graph_title( $id, false ); + + return $escape ? $this->escape_title( $title ) : $title; + } + + /** + * Returns the autogenerated open graph meta title. Falls back to meta title. + * + * @since 3.0.4 + * @uses $this->get_generated_open_graph_title() + * + * @param int|null $id The post or term ID. Falls back to queried ID. + * @param bool $escape Whether to escape the title. + * @return string Autogenerated Twitter Title. + */ + public function get_generated_twitter_title( $id = null, $escape = true ) { + return $this->get_generated_open_graph_title( $id, $escape ); + } + + /** + * Returns the autogenerated open graph meta title. Falls back to meta title. + * + * @since 3.0.4 + * @uses $this->build_title() + * @staticvar array $cache + * + * @param int|null $id The post or term ID. Falls back to queried ID. + * @param bool $escape Whether to escape the title. + * @return string Autogenerated Open Graph Title. + */ + public function get_generated_open_graph_title( $id = null, $escape = true ) { + + if ( is_null( $id ) ) + $id = $this->get_the_real_ID(); + + static $cache = array(); + + $title = isset( $cache[ $id ] ) + ? $cache[ $id ] + : $cache[ $id ] = $this->build_title( '', '', array( 'meta' => true, 'term_id' => $id, 'escape' => false ) ); + + return $escape ? $this->escape_title( $title ) : $title; + } + /** * Gets the title. Main function. * Always use this function for the title unless you're absolutely sure what you're doing. diff --git a/inc/classes/inpost.class.php b/inc/classes/inpost.class.php index 4654d9fb..ff7d9cd4 100644 --- a/inc/classes/inpost.class.php +++ b/inc/classes/inpost.class.php @@ -418,7 +418,9 @@ public function _include_primary_term_selector_template() { * Do not use. It will take a little too much time to perfect this. * * @since 2.9.0 + * @since 3.0.4 Added caching. * @access private + * @staticvar $cache * @ignore * @todo Remove and refactor caller. * @@ -426,9 +428,20 @@ public function _include_primary_term_selector_template() { * @param string $doctitle_placeholder. Passed by reference. * @param string $desc_len_parsed. Passed by reference. * @param string $description_placeholder. Passed by reference. + * @return void */ public function _get_inpost_general_tab_vars( &$tit_len_parsed, &$doctitle_placeholder, &$desc_len_parsed, &$description_placeholder ) { + static $cache = array(); + + if ( ! empty( $cache ) ) { + //! Overwrites variables passed by reference via variable variables. + foreach ( $cache as $k => $v ) { + $$k = $v; + } + return; + } + $post_id = $this->get_the_real_ID(); $is_static_frontpage = $this->is_static_frontpage( $post_id ); @@ -551,5 +564,7 @@ public function _get_inpost_general_tab_vars( &$tit_len_parsed, &$doctitle_place */ $doctitle_placeholder = $generated_doctitle; $description_placeholder = $generated_description; + + $cache = compact( 'tit_len_parsed', 'doctitle_placeholder', 'desc_len_parsed', 'description_placeholder' ); } } diff --git a/inc/classes/post-data.class.php b/inc/classes/post-data.class.php index 409ec175..678a86d1 100644 --- a/inc/classes/post-data.class.php +++ b/inc/classes/post-data.class.php @@ -98,17 +98,21 @@ public function inpost_seo_save( $post_id, $post ) { return; $defaults = array( - '_genesis_title' => '', - '_genesis_description' => '', - '_genesis_canonical_uri' => '', - 'redirect' => '', // Will be displayed in custom fields when set... - '_social_image_url' => '', - '_social_image_id' => 0, - '_genesis_noindex' => 0, - '_genesis_nofollow' => 0, - '_genesis_noarchive' => 0, - 'exclude_local_search' => 0, // Will be displayed in custom fields when set... - 'exclude_from_archive' => 0, // Will be displayed in custom fields when set... + '_genesis_title' => '', + '_genesis_description' => '', + '_genesis_canonical_uri' => '', + 'redirect' => '', // Will be displayed in custom fields when set... + '_social_image_url' => '', + '_social_image_id' => 0, + '_genesis_noindex' => 0, + '_genesis_nofollow' => 0, + '_genesis_noarchive' => 0, + 'exclude_local_search' => 0, // Will be displayed in custom fields when set... + 'exclude_from_archive' => 0, // Will be displayed in custom fields when set... + '_open_graph_title' => '', + '_open_graph_description' => '', + '_twitter_title' => '', + '_twitter_description' => '', ); /** @@ -120,10 +124,14 @@ public function inpost_seo_save( $post_id, $post ) { foreach ( (array) $data as $key => $value ) : switch ( $key ) : case '_genesis_title' : + case '_open_graph_title' : + case '_twitter_title' : $data[ $key ] = $this->s_title_raw( $value ); continue 2; case '_genesis_description' : + case '_open_graph_description' : + case '_twitter_description' : $data[ $key ] = $this->s_description_raw( $value ); continue 2; diff --git a/inc/classes/render.class.php b/inc/classes/render.class.php index 61c544a9..ea838b0b 100644 --- a/inc/classes/render.class.php +++ b/inc/classes/render.class.php @@ -230,7 +230,8 @@ public function the_description() { * Renders og:description meta tag * * @since 1.3.0 - * @uses $this->description_from_cache() + * @since 3.0.4 No longer uses $this->description_from_cache() + * @uses $this->get_open_graph_title() * * @return string The Open Graph description meta tag. */ @@ -244,7 +245,7 @@ public function og_description() { * @since 2.3.0 * @since 2.7.0 Added output within filter. */ - $description = (string) \apply_filters( 'the_seo_framework_ogdescription_output', $this->description_from_cache( true ), $this->get_the_real_ID() ); + $description = (string) \apply_filters( 'the_seo_framework_ogdescription_output', $this->get_open_graph_description(), $this->get_the_real_ID() ); if ( $description ) return '' . "\r\n"; @@ -280,8 +281,9 @@ public function og_locale() { /** * Renders the Open Graph title meta tag. * - * @uses $this->title_from_cache() * @since 2.0.3 + * @since 3.0.4 No longer uses $this->title_from_cache() + * @uses $this->get_open_graph_title() * * @return string The Open Graph title meta tag. */ @@ -295,7 +297,7 @@ public function og_title() { * @since 2.3.0 * @since 2.7.0 Added output within filter. */ - $title = (string) \apply_filters( 'the_seo_framework_ogtitle_output', $this->title_from_cache( '', '', '', true ), $this->get_the_real_ID() ); + $title = (string) \apply_filters( 'the_seo_framework_ogtitle_output', $this->get_open_graph_title(), $this->get_the_real_ID() ); if ( $title ) return '' . "\r\n"; @@ -567,8 +569,9 @@ public function twitter_creator() { /** * Renders Twitter Title meta tag. * - * @uses $this->title_from_cache() + * @uses $this->get_twitter_title() * @since 2.2.2 + * @since 3.0.4 No longer uses $this->title_from_cache() * * @return string The Twitter Title meta tag. */ @@ -582,7 +585,7 @@ public function twitter_title() { * @since 2.3.0 * @since 2.7.0 Added output within filter. */ - $title = (string) \apply_filters( 'the_seo_framework_twittertitle_output', $this->title_from_cache( '', '', '', true ), $this->get_the_real_ID() ); + $title = (string) \apply_filters( 'the_seo_framework_twittertitle_output', $this->get_twitter_title(), $this->get_the_real_ID() ); if ( $title ) return '' . "\r\n"; @@ -593,8 +596,9 @@ public function twitter_title() { /** * Renders Twitter Description meta tag. * - * @uses $this->description_from_cache() * @since 2.2.2 + * @since 3.0.4 No longer uses $this->description_from_cache() + * @uses $this->get_twitter_description() * * @return string The Twitter Descritpion meta tag. */ @@ -608,7 +612,7 @@ public function twitter_description() { * @since 2.3.0 * @since 2.7.0 Added output within filter. */ - $description = (string) \apply_filters( 'the_seo_framework_twitterdescription_output', $this->description_from_cache( true ), $this->get_the_real_ID() ); + $description = (string) \apply_filters( 'the_seo_framework_twitterdescription_output', $this->get_twitter_description(), $this->get_the_real_ID() ); if ( $description ) return '' . "\r\n"; @@ -1159,7 +1163,7 @@ public function output_published_time() { } /** - * Determines whether we can use Open Graph tags. + * Determines whether we can use Open Graph tags on the front-end. * * @since 2.6.0 * @staticvar bool $cache @@ -1177,7 +1181,7 @@ public function use_og_tags() { } /** - * Determines whether we can use Facebook tags. + * Determines whether we can use Facebook tags on the front-end. * * @since 2.6.0 * @staticvar bool $cache @@ -1195,7 +1199,7 @@ public function use_facebook_tags() { } /** - * Determines whether we can use Twitter tags. + * Determines whether we can use Twitter tags on the front-end. * * @since 2.6.0 * @since 2.8.2 : Now also considers Twitter card type output. @@ -1214,7 +1218,7 @@ public function use_twitter_tags() { } /** - * Determines whether we can use Google+ tags. + * Determines whether we can use Google+ tags on the front-end. * * @since 2.6.0 * @staticvar bool $cache diff --git a/inc/classes/site-options.class.php b/inc/classes/site-options.class.php index b3bf7050..f81fbcc1 100644 --- a/inc/classes/site-options.class.php +++ b/inc/classes/site-options.class.php @@ -122,7 +122,7 @@ public function get_default_site_options() { 'display_seo_bar_metabox' => 0, // SEO Bar post SEO Settings. 'display_pixel_counter' => 1, // Pixel counter. - 'display_character_counter' => 0, // Character counter. + 'display_character_counter' => 1, // Character counter. // General. Canonical. 'canonical_scheme' => 'automatic', // Canonical URL scheme. diff --git a/inc/compat/plugin-bbpress.php b/inc/compat/plugin-bbpress.php index c27d2715..411c8e1f 100644 --- a/inc/compat/plugin-bbpress.php +++ b/inc/compat/plugin-bbpress.php @@ -144,6 +144,7 @@ function _bbpress_filter_url_path( $path, $id = 0, $external = false ) { * This function fixes the Excerpt part. * * @since 2.9.0 + * @since 3.0.4 : Default value for $max_char_length has been increased from 155 to 300. * @access private * * @param string $excerpt The excerpt to use. @@ -152,7 +153,7 @@ function _bbpress_filter_url_path( $path, $id = 0, $external = false ) { * @param int $max_char_length Determines the maximum length of excerpt after trimming. * @return string The excerpt. */ -function _bbpress_filter_excerpt_generation( $excerpt = '', $page_id = 0, $term = '', $max_char_length = 155 ) { +function _bbpress_filter_excerpt_generation( $excerpt = '', $page_id = 0, $term = '', $max_char_length = 300 ) { if ( \is_bbpress() ) { if ( \bbp_is_topic_tag() ) { diff --git a/inc/compat/plugin-wpml.php b/inc/compat/plugin-wpml.php index 02c64324..68735c46 100644 --- a/inc/compat/plugin-wpml.php +++ b/inc/compat/plugin-wpml.php @@ -16,7 +16,7 @@ \add_action( 'current_screen', __NAMESPACE__ . '\\_wpml_do_current_screen_action' ); /** - * Adds WPML filters only on SEO plugin page. + * Adds WPML filters based on current screen. * * @since 2.8.0 * @access private diff --git a/inc/views/inpost/seo-settings-singular.php b/inc/views/inpost/seo-settings-singular.php index ea820e5a..2eb92aea 100644 --- a/inc/views/inpost/seo-settings-singular.php +++ b/inc/views/inpost/seo-settings-singular.php @@ -40,18 +40,18 @@ 'dashicon' => 'admin-generic', 'args' => array( $type ), ), - 'visibility' => array( - 'name' => __( 'Visibility', 'autodescription' ), - 'callback' => array( $this, 'singular_inpost_box_visibility_tab' ), - 'dashicon' => 'visibility', - 'args' => array( $type ), - ), 'social' => array( 'name' => __( 'Social', 'autodescription' ), 'callback' => array( $this, 'singular_inpost_box_social_tab' ), 'dashicon' => 'share', 'args' => array( $type ), ), + 'visibility' => array( + 'name' => __( 'Visibility', 'autodescription' ), + 'callback' => array( $this, 'singular_inpost_box_visibility_tab' ), + 'dashicon' => 'visibility', + 'args' => array( $type ), + ), ); /** @@ -120,7 +120,7 @@
- output_floating_title_elements(); ?> + output_js_title_elements(); ?>
+ output_js_description_elements(); ?>
description( __( 'The meta description can be used to determine the text used under the title on Search Engine results pages.', 'autodescription' ) ); diff --git a/lib/css/tsf-rtl.css b/lib/css/tsf-rtl.css index 12487e5d..5dda62d5 100644 --- a/lib/css/tsf-rtl.css +++ b/lib/css/tsf-rtl.css @@ -412,7 +412,7 @@ body.no-js .tsf-seo-bar-item { } a.tsf-tooltip-item { - cursor: auto; + cursor: pointer; } .tsf-tooltip { diff --git a/lib/css/tsf-rtl.min.css b/lib/css/tsf-rtl.min.css index a2b0b504..a6bded87 100644 --- a/lib/css/tsf-rtl.min.css +++ b/lib/css/tsf-rtl.min.css @@ -1 +1 @@ -.tsf-top-buttons,.tsf-top-wrap>h1,.tsf-top-wrap>h2{float:left}.tsf-notice{position:relative;clear:both}.tsf-notice.tsf-show-icon p:before{content:'';margin-left:12px;background:0 0;display:inline-block;font:400 14px/16px dashicons;speak:none;height:16px;text-align:center;vertical-align:middle;width:16px;line-height:14px;-webkit-font-smoothing:antialiased}.error.tsf-notice.tsf-show-icon p:before{color:#dd3811;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffa01b;content:"\f227"}.updated.tsf-notice.tsf-show-icon p:before{color:#0cc34b;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;left:1px;border:none;margin:0;padding:9px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none}a.tsf-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a.tsf-dismiss:hover{color:#c00}table.wp-list-table .column-name{width:15%}table.wp-list-table .column-icl_translations,table.wp-list-table .column-is_in_stock,table.wp-list-table .column-price,table.wp-list-table .column-sku,th.column-tsf-seo-bar-wrap~th{width:8%}.tsf-seo-bar-item{text-decoration:none;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#tsf-title-wrap{position:relative;display:block;padding:0;height:auto;width:auto;overflow:hidden}#tsf-title-offset{visibility:hidden;height:0;display:inline-block;position:absolute;right:0;color:transparent;white-space:pre}#tsf-title-placeholder,#tsf-title-placeholder-prefix{position:absolute;color:#777;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box;top:0;right:0;overflow:hidden;white-space:pre;text-overflow:ellipsis;will-change:left,right}.tsf-counter-wrap{margin-top:15px}.tsf-counter{font-weight:400;color:#666;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:contents}.tsf-count-bad{color:#dd3811}.tsf-count-okay{color:#ffa700}.tsf-count-good{color:#0cc34b}.tsf-counter-one{color:#fff;border-radius:4em;padding:0 .5em;min-width:2em;display:inline-block;text-align:center;vertical-align:baseline}.tsf-counter-one.tsf-count-bad{background-color:#dd3811}.tsf-counter-one.tsf-count-okay{background-color:#ffa700}.tsf-counter-one.tsf-count-good{background-color:#0cc34b}.tsf-tabs-content .tsf-pixel-counter-wrap{margin-right:1px;max-width:99%}.tsf-pixel-shadow-wrap{position:relative;overflow:hidden;width:0;height:0}.tsf-pixel-counter-wrap{border-bottom:1px solid #ccc;margin-top:12px;margin-bottom:3px}.tsf-pixel-counter-bar{padding-top:7px;display:block;height:3px;width:100%}.tsf-pixel-counter-fluid{display:block;pointer-events:none;height:3px;width:0;max-width:100%;background:#007bd2;box-shadow:0 1px 3px 0 #ccc;-webkit-transition:width .15s cubic-bezier(.4,0,.75,1);-o-transition:width .15s cubic-bezier(.4,0,.75,1);transition:width .15s cubic-bezier(.4,0,.75,1)}.tsf-pixel-counter-overflown .tsf-pixel-counter-fluid{background-color:#dd3811}.tsf-pixel-counter-fit .tsf-pixel-counter-fluid{background-color:#0cc34b}.tsf-description-pixel-counter-shadow,.tsf-title-pixel-counter-shadow{position:absolute;right:0;top:0;z-index:-100;overflow:visible;visibility:hidden;padding:0;margin:0;border:0;display:inline;text-decoration:none;white-space:nowrap;word-wrap:normal;zoom:1;text-overflow:clip;-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none;font-family:arial,helvetica,sans-serif;font-size:18px;font-weight:400}.tsf-description-pixel-counter-shadow{font-size:13px}#tsf-seo-bar-wrap{width:18%}th:last-of-type#tsf-seo-bar-wrap{width:160px}.tsf-seo-bar{display:block;width:95%;max-width:220px;border-radius:0;padding:3px;text-shadow:0 0 3px rgba(0,0,0,.3)}.tsf-seo-bar.tsf-100{width:100%}.tsf-seo-bar-inner-wrap{display:table;width:100%;border-radius:0;margin:0 auto;border-collapse:separate;border-spacing:0;vertical-align:middle}.tsf-seo-bar-section-wrap{display:table-cell;border-collapse:collapse}.tsf-seo-bar-item{display:table;width:100%;color:#fff;text-align:center;height:100%;min-width:12px;vertical-align:top;line-height:1.625em;box-shadow:2px 0 0 -1px rgba(0,0,0,.1) inset,-2px 0 0 -1px rgba(0,0,0,.1) inset}body.no-js .tsf-seo-bar-item{cursor:default}.tsf-seo-bar.pill,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap{border-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-item{box-shadow:2px 6px 3px -2px rgba(255,255,255,.2) inset,-2px -6px 3px -2px rgba(41,41,41,.2) inset,0 0 1px rgba(41,41,41,.6)}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:last-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:last-of-type a{border-top-left-radius:30px;border-bottom-left-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type a{border-top-right-radius:30px;border-bottom-right-radius:30px}.tsf-100{width:100%}.tsf-60{width:60%}.tsf-50{width:50%}.tsf-40{width:40%}.tsf-33{width:33.333%}.tsf-25{width:25%}.tsf-20{width:20%}.tsf-16{width:16.666%}.tsf-12-5{width:12.5%}.tsf-11{width:11.333%}.tsf-10{width:10%}.tsf-seo-bar-bad{background-color:#dd3811}.tsf-seo-bar-okay{background-color:#ffa700}.tsf-seo-bar-good{background-color:#0cc34b}.tsf-seo-bar-unknown{background-color:#007bd2}.tsf-tooltip-wrap{position:relative}.tsf-tooltip-item{cursor:help}a.tsf-tooltip-item{cursor:auto}.tsf-tooltip{position:absolute;padding:0;margin:0;bottom:0;left:0;z-index:900142;text-align:right;pointer-events:none;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.tsf-tooltip-down{bottom:auto;top:0}.tsf-tooltip-text-wrap{padding:10px 12px;font-size:1em;font-weight:500;line-height:1.625em;border-radius:3px;background:#007bd2;color:#fdfdfd;box-shadow:0 0 2px rgba(0,0,0,.6);text-shadow:none;word-wrap:break-word;overflow-wrap:break-word;word-break:break-word;white-space:pre-line;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 0 150px;flex:1 0 150px;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.tsf-is-primary-term,.tsf-nav-tab{font-weight:600}.tsf-tooltip-text span{text-decoration:underline}.tsf-tooltip-text br{display:block;width:100%;content:"\A"}.tsf-ajax:before,.tsf-tooltip-arrow:after,.tsf-tooltip-arrow:before{content:""}.tsf-tooltip-arrow{position:absolute;bottom:-8px;z-index:9999999;left:0;width:0;height:0}.tsf-tooltip-down .tsf-tooltip-arrow{bottom:auto;top:-8px}.tsf-tooltip-arrow:before{border-left:9px solid transparent;border-right:9px solid transparent;border-top:9px solid rgba(0,0,0,.25);position:absolute;bottom:-1px;left:-1px}.tsf-tooltip-arrow:after{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #007bd2;position:absolute;bottom:0;left:0}.tsf-tooltip-down .tsf-tooltip-arrow:before{bottom:auto;top:0;border-top:0;border-bottom:9px solid rgba(0,0,0,.25)}.tsf-tooltip-down .tsf-tooltip-arrow:after{bottom:auto;top:1px;border-top:0;border-bottom:8px solid #007bd2}.tsf-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-metaboxes{box-sizing:border-box;max-width:690px;padding-bottom:20px}.tsf-top-wrap{width:100%;display:inline-block;vertical-align:top}.tsf-metaboxes .metabox-holder{clear:both}.tsf-bottom-buttons{text-align:left}.tsf-metaboxes .tsf-bottom-buttons input,.tsf-metaboxes .tsf-top-buttons input{margin-left:10px}#tsf-description-separator,#tsf-title-separator{display:table;width:100%;border-collapse:collapse;border-spacing:0}#tsf-description-separator input,#tsf-title-separator input{display:none;float:left;width:0;min-width:0;opacity:0}#tsf-description-separator label,#tsf-title-separator label{display:inline-block;width:auto;min-width:28px;min-height:28px;margin:3px;-moz-margin-end:1.5px;-moz-margin-start:1.5px;padding:0 4px;border:1px solid #ccc;line-height:28px;text-align:center;cursor:pointer;box-shadow:-1px -1px 1px #aaa inset;font-size:16px}#tsf-description-separator label.tsf-recommended,#tsf-title-separator label.tsf-recommended{border:1px solid #0cc34b;box-shadow:-1px -1px 1px #0cc34b inset}#tsf-description-separator input:hover+label,#tsf-description-separator label:hover,#tsf-title-separator input:hover+label,#tsf-title-separator label:hover{box-shadow:1px 1px 1px #aaa inset;background-color:#fff}#tsf-description-separator input:checked+label,#tsf-title-separator input:checked+label{box-shadow:1px 1px 1px #333 inset;background-color:#fff}#tsf-home-title-location,#tsf-title-location{display:block}#tsf-home-title-location label span,#tsf-title-location label span,#tsf-twitter-cards label span{display:inline-block;min-width:60px;vertical-align:baseline}#tsf-twitter-cards label span{min-width:150px}#tsf-home-title-location label .tsf-sep-js,#tsf-home-title-location label span.tsf-custom-blogname-js,#tsf-home-title-location label span.tsf-custom-tagline-js,#tsf-home-title-location label span.tsf-custom-title-js,#tsf-title-location label .tsf-sep-js{display:inline;min-width:0;white-space:pre}.tsf-nav-tab-wrapper,.tsf-tab-no-js{position:relative;clear:both;width:100%;display:inline-block;border-bottom:1px solid #ccc;line-height:inherit;padding:8px 12px 0;margin:-4px -12px}.tsf-nav-tab{float:right;border:1px solid #ccc;margin-right:.5em;margin-bottom:-1px;padding:5px 14px;font-size:12px;line-height:16px;background:#f1f1f1;color:#555}.tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}input.tsf-tabs-radio{display:none;width:0;height:0;position:absolute;left:-9001px}.tsf-active-tab,.tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-tabs-content{margin:1.33em auto 0}.tsf-content-no-js{margin:1.33em auto}body.js .tsf-tabs-content{display:none}body.js .tsf-tabs-content.tsf-active-tab-content{display:block}#tsf-inpost-box .inside,.tsf-flex{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start}#tsf-inpost-box.closed .inside,body.js .tsf-flex-tab-content{display:none}#tsf-inpost-box .inside{margin:0;padding:0;-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tsf-flex-inside-wrap{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto}.tsf-flex-setting{width:100%;-webkit-flex-direction:row;flex-direction:row}.tsf-flex-setting-input,.tsf-flex-setting-label{background-color:#fff;padding:15px 12px;-webkit-flex:10 1 350px;flex:10 1 350px;box-shadow:0 0 0 1px #e9e9e9}.tsf-flex-setting-label{background-color:#f9f9f9;-webkit-flex:1 1 200px;flex:1 1 200px}.tsf-flex-setting-input{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-grow:0;flex-grow:0}.tsf-flex-setting-label-inner-wrap{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item>*{margin-right:4px}.tsf-flex-setting-label-item>:last-child{margin-right:0}.tsf-social-image-buttons{margin-top:15px;margin-left:1px}.tsf-flex-setting-input textarea{max-height:250px}input[type=radio].tsf-flex-nav-tab-radio{display:none;width:0;height:0;margin:0;padding:0;position:absolute;left:-9001px}.tsf-flex-nav-tab-wrapper{background-color:#fcfcfc;border-bottom:2px solid #dadada;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-width:100%}.tsf-flex-nav-tab-inner{-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 0 auto;flex:1 0 auto}.tsf-flex-nav-tab{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto;max-width:125px}.tsf-flex-nav-tab-label{padding:12px;text-align:center;-webkit-flex-direction:row;flex-direction:row;box-shadow:0 0 0 0 transparent inset;-webkit-transition:box-shadow .15s ease-out;-o-transition:box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-align-items:center;align-items:center;-webkit-align-content:space-around;align-content:space-around}.tsf-flex-nav-dashicon,.tsf-flex-nav-name{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked+.tsf-flex-nav-tab-label{box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-transition:box-shadow .25s ease-in;-o-transition:box-shadow .25s ease-in;transition:box-shadow .25s ease-in}.tsf-flex-tab-content{-webkit-flex:1 0 100%;flex:1 0 100%;max-width:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}body.js .tsf-flex-tab-content.tsf-flex-tab-content-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tsf-flex-tabs-content-no-js{background-color:#f3f3f3;border-bottom:1px solid #dadada;box-shadow:0 2px 0 0 #dadada inset}.tsf-flex-tab-no-js{-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;flex:1 1 100%}.tsf-flex-tab-no-js .tsf-flex-nav-tab{padding:12px;min-width:125px;box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:0 1 auto;flex:0 1 auto}#tsf-inpost-box .hndle .tsf-tooltip-wrap a{font-size:14px;line-height:1em}.tsf-primary-term-selector{margin:0;padding:0;float:left;line-height:inherit;display:inline-block}.tsf-primary-term-selector input{vertical-align:middle;height:14px;width:14px;min-width:14px;line-height:inherit;margin:0;padding:0;pointer-events:none}.tsf-primary-term-selector input:checked:before{width:6px;height:6px;margin:3px;line-height:inherit}.tsf-primary-term-selector-help-wrap{position:absolute;top:0;left:25px}input.tsf-default-selected{border-color:#1c9d38}input.tsf-default-selected:checked:before{color:#1c9d38}input.tsf-warning-selected{border-color:#dd3811}input.tsf-warning-selected:checked:before{color:#dd3811}label.tsf-disabled{color:#999}input.tsf-disabled,label.tsf-disabled{cursor:default}.tsf-fields{font-size:13px;line-height:1.5;margin:1em 0}.tsf-fields .tsf-toblock{display:block;width:100%;margin-bottom:4px}.tsf-fields p.description{margin:7px 0 5px;color:#666}.tsf-option-spacer{margin:1em 0}.tsf-checkbox-wrapper{margin-top:15px}.tsf-checkbox-wrapper:first-child{margin-top:0}.tsf-metaboxes legend h4{margin:2px 0}.tsf-metaboxes legend p:last-of-type{margin-bottom:0}.tsf-counter .tsf-ajax{margin-right:3px}.tsf-ajax:before{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;font-size:1.225em;vertical-align:middle}.tsf-ajax.tsf-loading:before{content:"\f463";color:#007bd2;-webkit-animation:tsf-spin 1.5s linear infinite;-moz-animation:tsf-spin 1.5s linear infinite;-o-animation:tsf-spin 1.5s linear infinite;animation:tsf-spin 1.5s linear infinite}.tsf-ajax.tsf-error:before{content:"\f158";color:#dd3811}.tsf-ajax.tsf-success:before{content:"\f147";color:#0cc34b}a.tsf-set-social-image.button{margin-left:7px}#tsf-inpost-box input[type=text]::-webkit-input-placeholder,#tsf-inpost-box textarea::-webkit-input-placeholder,.tsf-metaboxes input[type=text]::-webkit-input-placeholder,.tsf-metaboxes textarea::-webkit-input-placeholder{-webkit-transition:color .33s ease-in,text-shadow .33s ease-in;-o-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]::-moz-placeholder,#tsf-inpost-box textarea::-moz-placeholder,.tsf-metaboxes input[type=text]::-moz-placeholder,.tsf-metaboxes textarea::-moz-placeholder{-moz-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:-ms-input-placeholder,#tsf-inpost-box textarea:-ms-input-placeholder,.tsf-metaboxes input[type=text]:-ms-input-placeholder,.tsf-metaboxes textarea:-ms-input-placeholder{transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:focus::-webkit-input-placeholder,#tsf-inpost-box textarea:focus::-webkit-input-placeholder,.tsf-metaboxes input[type=text]:focus::-webkit-input-placeholder,.tsf-metaboxes textarea:focus::-webkit-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus::-moz-placeholder,#tsf-inpost-box textarea:focus::-moz-placeholder,.tsf-metaboxe textarea:focus::-moz-placeholder,.tsf-metaboxes input[type=text]:focus::-moz-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus:-ms-input-placeholder,#tsf-inpost-box textarea:focus:-ms-input-placeholder,.tsf-metaboxes input[type=text]:focus:-ms-input-placeholder,.tsf-metaboxes textarea:focus:-ms-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}@-webkit-keyframes tsf-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes tsf-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media screen and (max-width:782px){.tsf-inpost-box p.tsf-fields,.tsf-metaboxes p.tsf-fields{line-height:2.8}#tsf-home-title-location label span,#tsf-title-location label span{min-width:40px}.wp-list-table .is-expanded td.tsf-seo-bar-wrap:not(.hidden){overflow:initial!important}.tsf-primary-term-selector input{height:18px;width:18px;min-width:18px}.tsf-primary-term-selector input:checked:before{width:8px;height:8px;margin:4px}}@media screen and (max-width:642px){.tsf-nav-desktop{display:none}}@media screen and (max-width:510px){.tsf-seo-bar.tsf-100{width:inherit}}@-moz-document url-prefix(){#tsf-description-separator label,#tsf-title-separator label{margin:3px 1px}@media only screen and (min-width:768px){.widefat tr td.column-title:nth-child(2):nth-last-child(n+6),.widefat tr td.title:nth-child(2):nth-last-child(n+6),.widefat tr th.column-title:nth-child(2):nth-last-child(n+6),.widefat tr th.title:nth-child(2):nth-last-child(n+6){min-width:1em;width:25%;max-width:100%;white-space:unset}}.tsf-default-selected{box-shadow:0 0 2px 0 #1c9d38}.tsf-warning-selected{box-shadow:0 0 2px 0 #dd3811}}.tsf-flex-hide-if-no-js,body.js .tsf-flex-hide-if-js{display:none}body.js .tsf-flex-hide-if-no-js{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex} +.tsf-top-buttons,.tsf-top-wrap>h1,.tsf-top-wrap>h2{float:left}.tsf-notice{position:relative;clear:both}.tsf-notice.tsf-show-icon p:before{content:'';margin-left:12px;background:0 0;display:inline-block;font:400 14px/16px dashicons;speak:none;height:16px;text-align:center;vertical-align:middle;width:16px;line-height:14px;-webkit-font-smoothing:antialiased}.error.tsf-notice.tsf-show-icon p:before{color:#dd3811;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffa01b;content:"\f227"}.updated.tsf-notice.tsf-show-icon p:before{color:#0cc34b;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;left:1px;border:none;margin:0;padding:9px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none}a.tsf-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a.tsf-dismiss:hover{color:#c00}table.wp-list-table .column-name{width:15%}table.wp-list-table .column-icl_translations,table.wp-list-table .column-is_in_stock,table.wp-list-table .column-price,table.wp-list-table .column-sku,th.column-tsf-seo-bar-wrap~th{width:8%}.tsf-seo-bar-item{text-decoration:none;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#tsf-title-wrap{position:relative;display:block;padding:0;height:auto;width:auto;overflow:hidden}#tsf-title-offset{visibility:hidden;height:0;display:inline-block;position:absolute;right:0;color:transparent;white-space:pre}#tsf-title-placeholder,#tsf-title-placeholder-prefix{position:absolute;color:#777;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box;top:0;right:0;overflow:hidden;white-space:pre;text-overflow:ellipsis;will-change:left,right}.tsf-counter-wrap{margin-top:15px}.tsf-counter{font-weight:400;color:#666;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:contents}.tsf-count-bad{color:#dd3811}.tsf-count-okay{color:#ffa700}.tsf-count-good{color:#0cc34b}.tsf-counter-one{color:#fff;border-radius:4em;padding:0 .5em;min-width:2em;display:inline-block;text-align:center;vertical-align:baseline}.tsf-counter-one.tsf-count-bad{background-color:#dd3811}.tsf-counter-one.tsf-count-okay{background-color:#ffa700}.tsf-counter-one.tsf-count-good{background-color:#0cc34b}.tsf-tabs-content .tsf-pixel-counter-wrap{margin-right:1px;max-width:99%}.tsf-pixel-shadow-wrap{position:relative;overflow:hidden;width:0;height:0}.tsf-pixel-counter-wrap{border-bottom:1px solid #ccc;margin-top:12px;margin-bottom:3px}.tsf-pixel-counter-bar{padding-top:7px;display:block;height:3px;width:100%}.tsf-pixel-counter-fluid{display:block;pointer-events:none;height:3px;width:0;max-width:100%;background:#007bd2;box-shadow:0 1px 3px 0 #ccc;-webkit-transition:width .15s cubic-bezier(.4,0,.75,1);-o-transition:width .15s cubic-bezier(.4,0,.75,1);transition:width .15s cubic-bezier(.4,0,.75,1)}.tsf-pixel-counter-overflown .tsf-pixel-counter-fluid{background-color:#dd3811}.tsf-pixel-counter-fit .tsf-pixel-counter-fluid{background-color:#0cc34b}.tsf-description-pixel-counter-shadow,.tsf-title-pixel-counter-shadow{position:absolute;right:0;top:0;z-index:-100;overflow:visible;visibility:hidden;padding:0;margin:0;border:0;display:inline;text-decoration:none;white-space:nowrap;word-wrap:normal;zoom:1;text-overflow:clip;-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none;font-family:arial,helvetica,sans-serif;font-size:18px;font-weight:400}.tsf-description-pixel-counter-shadow{font-size:13px}#tsf-seo-bar-wrap{width:18%}th:last-of-type#tsf-seo-bar-wrap{width:160px}.tsf-seo-bar{display:block;width:95%;max-width:220px;border-radius:0;padding:3px;text-shadow:0 0 3px rgba(0,0,0,.3)}.tsf-seo-bar.tsf-100{width:100%}.tsf-seo-bar-inner-wrap{display:table;width:100%;border-radius:0;margin:0 auto;border-collapse:separate;border-spacing:0;vertical-align:middle}.tsf-seo-bar-section-wrap{display:table-cell;border-collapse:collapse}.tsf-seo-bar-item{display:table;width:100%;color:#fff;text-align:center;height:100%;min-width:12px;vertical-align:top;line-height:1.625em;box-shadow:2px 0 0 -1px rgba(0,0,0,.1) inset,-2px 0 0 -1px rgba(0,0,0,.1) inset}body.no-js .tsf-seo-bar-item{cursor:default}.tsf-seo-bar.pill,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap{border-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-item{box-shadow:2px 6px 3px -2px rgba(255,255,255,.2) inset,-2px -6px 3px -2px rgba(41,41,41,.2) inset,0 0 1px rgba(41,41,41,.6)}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:last-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:last-of-type a{border-top-left-radius:30px;border-bottom-left-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap span.tsf-seo-bar-section-wrap:first-of-type a{border-top-right-radius:30px;border-bottom-right-radius:30px}.tsf-100{width:100%}.tsf-60{width:60%}.tsf-50{width:50%}.tsf-40{width:40%}.tsf-33{width:33.333%}.tsf-25{width:25%}.tsf-20{width:20%}.tsf-16{width:16.666%}.tsf-12-5{width:12.5%}.tsf-11{width:11.333%}.tsf-10{width:10%}.tsf-seo-bar-bad{background-color:#dd3811}.tsf-seo-bar-okay{background-color:#ffa700}.tsf-seo-bar-good{background-color:#0cc34b}.tsf-seo-bar-unknown{background-color:#007bd2}.tsf-tooltip-wrap{position:relative}.tsf-tooltip-item{cursor:help}a.tsf-tooltip-item{cursor:pointer}.tsf-tooltip{position:absolute;padding:0;margin:0;bottom:0;left:0;z-index:900142;text-align:right;pointer-events:none;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.tsf-tooltip-down{bottom:auto;top:0}.tsf-tooltip-text-wrap{padding:10px 12px;font-size:1em;font-weight:500;line-height:1.625em;border-radius:3px;background:#007bd2;color:#fdfdfd;box-shadow:0 0 2px rgba(0,0,0,.6);text-shadow:none;word-wrap:break-word;overflow-wrap:break-word;word-break:break-word;white-space:pre-line;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 0 150px;flex:1 0 150px;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.tsf-is-primary-term,.tsf-nav-tab{font-weight:600}.tsf-tooltip-text span{text-decoration:underline}.tsf-tooltip-text br{display:block;width:100%;content:"\A"}.tsf-ajax:before,.tsf-tooltip-arrow:after,.tsf-tooltip-arrow:before{content:""}.tsf-tooltip-arrow{position:absolute;bottom:-8px;z-index:9999999;left:0;width:0;height:0}.tsf-tooltip-down .tsf-tooltip-arrow{bottom:auto;top:-8px}.tsf-tooltip-arrow:before{border-left:9px solid transparent;border-right:9px solid transparent;border-top:9px solid rgba(0,0,0,.25);position:absolute;bottom:-1px;left:-1px}.tsf-tooltip-arrow:after{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #007bd2;position:absolute;bottom:0;left:0}.tsf-tooltip-down .tsf-tooltip-arrow:before{bottom:auto;top:0;border-top:0;border-bottom:9px solid rgba(0,0,0,.25)}.tsf-tooltip-down .tsf-tooltip-arrow:after{bottom:auto;top:1px;border-top:0;border-bottom:8px solid #007bd2}.tsf-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-metaboxes{box-sizing:border-box;max-width:690px;padding-bottom:20px}.tsf-top-wrap{width:100%;display:inline-block;vertical-align:top}.tsf-metaboxes .metabox-holder{clear:both}.tsf-bottom-buttons{text-align:left}.tsf-metaboxes .tsf-bottom-buttons input,.tsf-metaboxes .tsf-top-buttons input{margin-left:10px}#tsf-description-separator,#tsf-title-separator{display:table;width:100%;border-collapse:collapse;border-spacing:0}#tsf-description-separator input,#tsf-title-separator input{display:none;float:left;width:0;min-width:0;opacity:0}#tsf-description-separator label,#tsf-title-separator label{display:inline-block;width:auto;min-width:28px;min-height:28px;margin:3px;-moz-margin-end:1.5px;-moz-margin-start:1.5px;padding:0 4px;border:1px solid #ccc;line-height:28px;text-align:center;cursor:pointer;box-shadow:-1px -1px 1px #aaa inset;font-size:16px}#tsf-description-separator label.tsf-recommended,#tsf-title-separator label.tsf-recommended{border:1px solid #0cc34b;box-shadow:-1px -1px 1px #0cc34b inset}#tsf-description-separator input:hover+label,#tsf-description-separator label:hover,#tsf-title-separator input:hover+label,#tsf-title-separator label:hover{box-shadow:1px 1px 1px #aaa inset;background-color:#fff}#tsf-description-separator input:checked+label,#tsf-title-separator input:checked+label{box-shadow:1px 1px 1px #333 inset;background-color:#fff}#tsf-home-title-location,#tsf-title-location{display:block}#tsf-home-title-location label span,#tsf-title-location label span,#tsf-twitter-cards label span{display:inline-block;min-width:60px;vertical-align:baseline}#tsf-twitter-cards label span{min-width:150px}#tsf-home-title-location label .tsf-sep-js,#tsf-home-title-location label span.tsf-custom-blogname-js,#tsf-home-title-location label span.tsf-custom-tagline-js,#tsf-home-title-location label span.tsf-custom-title-js,#tsf-title-location label .tsf-sep-js{display:inline;min-width:0;white-space:pre}.tsf-nav-tab-wrapper,.tsf-tab-no-js{position:relative;clear:both;width:100%;display:inline-block;border-bottom:1px solid #ccc;line-height:inherit;padding:8px 12px 0;margin:-4px -12px}.tsf-nav-tab{float:right;border:1px solid #ccc;margin-right:.5em;margin-bottom:-1px;padding:5px 14px;font-size:12px;line-height:16px;background:#f1f1f1;color:#555}.tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}input.tsf-tabs-radio{display:none;width:0;height:0;position:absolute;left:-9001px}.tsf-active-tab,.tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-tabs-content{margin:1.33em auto 0}.tsf-content-no-js{margin:1.33em auto}body.js .tsf-tabs-content{display:none}body.js .tsf-tabs-content.tsf-active-tab-content{display:block}#tsf-inpost-box .inside,.tsf-flex{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start}#tsf-inpost-box.closed .inside,body.js .tsf-flex-tab-content{display:none}#tsf-inpost-box .inside{margin:0;padding:0;-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tsf-flex-inside-wrap{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto}.tsf-flex-setting{width:100%;-webkit-flex-direction:row;flex-direction:row}.tsf-flex-setting-input,.tsf-flex-setting-label{background-color:#fff;padding:15px 12px;-webkit-flex:10 1 350px;flex:10 1 350px;box-shadow:0 0 0 1px #e9e9e9}.tsf-flex-setting-label{background-color:#f9f9f9;-webkit-flex:1 1 200px;flex:1 1 200px}.tsf-flex-setting-input{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-grow:0;flex-grow:0}.tsf-flex-setting-label-inner-wrap{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item>*{margin-right:4px}.tsf-flex-setting-label-item>:last-child{margin-right:0}.tsf-social-image-buttons{margin-top:15px;margin-left:1px}.tsf-flex-setting-input textarea{max-height:250px}input[type=radio].tsf-flex-nav-tab-radio{display:none;width:0;height:0;margin:0;padding:0;position:absolute;left:-9001px}.tsf-flex-nav-tab-wrapper{background-color:#fcfcfc;border-bottom:2px solid #dadada;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-width:100%}.tsf-flex-nav-tab-inner{-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 0 auto;flex:1 0 auto}.tsf-flex-nav-tab{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto;max-width:125px}.tsf-flex-nav-tab-label{padding:12px;text-align:center;-webkit-flex-direction:row;flex-direction:row;box-shadow:0 0 0 0 transparent inset;-webkit-transition:box-shadow .15s ease-out;-o-transition:box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-align-items:center;align-items:center;-webkit-align-content:space-around;align-content:space-around}.tsf-flex-nav-dashicon,.tsf-flex-nav-name{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked+.tsf-flex-nav-tab-label{box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-transition:box-shadow .25s ease-in;-o-transition:box-shadow .25s ease-in;transition:box-shadow .25s ease-in}.tsf-flex-tab-content{-webkit-flex:1 0 100%;flex:1 0 100%;max-width:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}body.js .tsf-flex-tab-content.tsf-flex-tab-content-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tsf-flex-tabs-content-no-js{background-color:#f3f3f3;border-bottom:1px solid #dadada;box-shadow:0 2px 0 0 #dadada inset}.tsf-flex-tab-no-js{-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;flex:1 1 100%}.tsf-flex-tab-no-js .tsf-flex-nav-tab{padding:12px;min-width:125px;box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:0 1 auto;flex:0 1 auto}#tsf-inpost-box .hndle .tsf-tooltip-wrap a{font-size:14px;line-height:1em}.tsf-primary-term-selector{margin:0;padding:0;float:left;line-height:inherit;display:inline-block}.tsf-primary-term-selector input{vertical-align:middle;height:14px;width:14px;min-width:14px;line-height:inherit;margin:0;padding:0;pointer-events:none}.tsf-primary-term-selector input:checked:before{width:6px;height:6px;margin:3px;line-height:inherit}.tsf-primary-term-selector-help-wrap{position:absolute;top:0;left:25px}input.tsf-default-selected{border-color:#1c9d38}input.tsf-default-selected:checked:before{color:#1c9d38}input.tsf-warning-selected{border-color:#dd3811}input.tsf-warning-selected:checked:before{color:#dd3811}label.tsf-disabled{color:#999}input.tsf-disabled,label.tsf-disabled{cursor:default}.tsf-fields{font-size:13px;line-height:1.5;margin:1em 0}.tsf-fields .tsf-toblock{display:block;width:100%;margin-bottom:4px}.tsf-fields p.description{margin:7px 0 5px;color:#666}.tsf-option-spacer{margin:1em 0}.tsf-checkbox-wrapper{margin-top:15px}.tsf-checkbox-wrapper:first-child{margin-top:0}.tsf-metaboxes legend h4{margin:2px 0}.tsf-metaboxes legend p:last-of-type{margin-bottom:0}.tsf-counter .tsf-ajax{margin-right:3px}.tsf-ajax:before{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;font-size:1.225em;vertical-align:middle}.tsf-ajax.tsf-loading:before{content:"\f463";color:#007bd2;-webkit-animation:tsf-spin 1.5s linear infinite;-moz-animation:tsf-spin 1.5s linear infinite;-o-animation:tsf-spin 1.5s linear infinite;animation:tsf-spin 1.5s linear infinite}.tsf-ajax.tsf-error:before{content:"\f158";color:#dd3811}.tsf-ajax.tsf-success:before{content:"\f147";color:#0cc34b}a.tsf-set-social-image.button{margin-left:7px}#tsf-inpost-box input[type=text]::-webkit-input-placeholder,#tsf-inpost-box textarea::-webkit-input-placeholder,.tsf-metaboxes input[type=text]::-webkit-input-placeholder,.tsf-metaboxes textarea::-webkit-input-placeholder{-webkit-transition:color .33s ease-in,text-shadow .33s ease-in;-o-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]::-moz-placeholder,#tsf-inpost-box textarea::-moz-placeholder,.tsf-metaboxes input[type=text]::-moz-placeholder,.tsf-metaboxes textarea::-moz-placeholder{-moz-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:-ms-input-placeholder,#tsf-inpost-box textarea:-ms-input-placeholder,.tsf-metaboxes input[type=text]:-ms-input-placeholder,.tsf-metaboxes textarea:-ms-input-placeholder{transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:focus::-webkit-input-placeholder,#tsf-inpost-box textarea:focus::-webkit-input-placeholder,.tsf-metaboxes input[type=text]:focus::-webkit-input-placeholder,.tsf-metaboxes textarea:focus::-webkit-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus::-moz-placeholder,#tsf-inpost-box textarea:focus::-moz-placeholder,.tsf-metaboxe textarea:focus::-moz-placeholder,.tsf-metaboxes input[type=text]:focus::-moz-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus:-ms-input-placeholder,#tsf-inpost-box textarea:focus:-ms-input-placeholder,.tsf-metaboxes input[type=text]:focus:-ms-input-placeholder,.tsf-metaboxes textarea:focus:-ms-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}@-webkit-keyframes tsf-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes tsf-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media screen and (max-width:782px){.tsf-inpost-box p.tsf-fields,.tsf-metaboxes p.tsf-fields{line-height:2.8}#tsf-home-title-location label span,#tsf-title-location label span{min-width:40px}.wp-list-table .is-expanded td.tsf-seo-bar-wrap:not(.hidden){overflow:initial!important}.tsf-primary-term-selector input{height:18px;width:18px;min-width:18px}.tsf-primary-term-selector input:checked:before{width:8px;height:8px;margin:4px}}@media screen and (max-width:642px){.tsf-nav-desktop{display:none}}@media screen and (max-width:510px){.tsf-seo-bar.tsf-100{width:inherit}}@-moz-document url-prefix(){#tsf-description-separator label,#tsf-title-separator label{margin:3px 1px}@media only screen and (min-width:768px){.widefat tr td.column-title:nth-child(2):nth-last-child(n+6),.widefat tr td.title:nth-child(2):nth-last-child(n+6),.widefat tr th.column-title:nth-child(2):nth-last-child(n+6),.widefat tr th.title:nth-child(2):nth-last-child(n+6){min-width:1em;width:25%;max-width:100%;white-space:unset}}.tsf-default-selected{box-shadow:0 0 2px 0 #1c9d38}.tsf-warning-selected{box-shadow:0 0 2px 0 #dd3811}}.tsf-flex-hide-if-no-js,body.js .tsf-flex-hide-if-js{display:none}body.js .tsf-flex-hide-if-no-js{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex} diff --git a/lib/css/tsf.css b/lib/css/tsf.css index 9c268938..964cf037 100644 --- a/lib/css/tsf.css +++ b/lib/css/tsf.css @@ -412,7 +412,7 @@ body.no-js .tsf-seo-bar-item { } a.tsf-tooltip-item { - cursor: auto; + cursor: pointer; } .tsf-tooltip { diff --git a/lib/css/tsf.min.css b/lib/css/tsf.min.css index c9f2962f..20abdb6b 100644 --- a/lib/css/tsf.min.css +++ b/lib/css/tsf.min.css @@ -1 +1 @@ -.tsf-notice{position:relative;clear:both}.tsf-notice.tsf-show-icon p:before{content:'';margin-right:12px;background:0 0;display:inline-block;font:400 14px/16px dashicons;speak:none;height:16px;text-align:center;vertical-align:middle;width:16px;line-height:14px;-webkit-font-smoothing:antialiased}.error.tsf-notice.tsf-show-icon p:before{color:#dd3811;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffa01b;content:"\f227"}.updated.tsf-notice.tsf-show-icon p:before{color:#0cc34b;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;right:1px;border:none;margin:0;padding:9px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none}a.tsf-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a.tsf-dismiss:hover{color:#c00}table.wp-list-table .column-name{width:15%}table.wp-list-table .column-icl_translations,table.wp-list-table .column-is_in_stock,table.wp-list-table .column-price,table.wp-list-table .column-sku,th.column-tsf-seo-bar-wrap~th{width:8%}.tsf-seo-bar-item{text-decoration:none;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#tsf-title-wrap{position:relative;display:block;padding:0;height:auto;width:auto;overflow:hidden}#tsf-title-offset{visibility:hidden;height:0;display:inline-block;position:absolute;left:0;color:transparent;white-space:pre}#tsf-title-placeholder,#tsf-title-placeholder-prefix{position:absolute;color:#777;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box;top:0;left:0;overflow:hidden;white-space:pre;text-overflow:ellipsis;will-change:left,right}.tsf-counter-wrap{margin-top:15px}.tsf-counter{font-weight:400;color:#666;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:contents}.tsf-count-bad{color:#dd3811}.tsf-count-okay{color:#ffa700}.tsf-count-good{color:#0cc34b}.tsf-counter-one{color:#fff;border-radius:4em;padding:0 .5em;min-width:2em;display:inline-block;text-align:center;vertical-align:baseline}.tsf-counter-one.tsf-count-bad{background-color:#dd3811}.tsf-counter-one.tsf-count-okay{background-color:#ffa700}.tsf-counter-one.tsf-count-good{background-color:#0cc34b}.tsf-tabs-content .tsf-pixel-counter-wrap{margin-left:1px;max-width:99%}.tsf-pixel-shadow-wrap{position:relative;overflow:hidden;width:0;height:0}.tsf-pixel-counter-wrap{border-bottom:1px solid #ccc;margin-top:12px;margin-bottom:3px}.tsf-pixel-counter-bar{padding-top:7px;display:block;height:3px;width:100%}.tsf-pixel-counter-fluid{display:block;pointer-events:none;height:3px;width:0;max-width:100%;background:#007bd2;box-shadow:0 1px 3px 0 #ccc;-webkit-transition:width .15s cubic-bezier(.4,0,.75,1);-o-transition:width .15s cubic-bezier(.4,0,.75,1);transition:width .15s cubic-bezier(.4,0,.75,1)}.tsf-pixel-counter-overflown .tsf-pixel-counter-fluid{background-color:#dd3811}.tsf-pixel-counter-fit .tsf-pixel-counter-fluid{background-color:#0cc34b}.tsf-description-pixel-counter-shadow,.tsf-title-pixel-counter-shadow{position:absolute;left:0;top:0;z-index:-100;overflow:visible;visibility:hidden;padding:0;margin:0;border:0;display:inline;text-decoration:none;white-space:nowrap;word-wrap:normal;zoom:1;text-overflow:clip;-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none;font-family:arial,helvetica,sans-serif;font-size:18px;font-weight:400}.tsf-description-pixel-counter-shadow{font-size:13px}#tsf-seo-bar-wrap{width:18%}th:last-of-type#tsf-seo-bar-wrap{width:160px}.tsf-seo-bar{display:block;width:95%;max-width:220px;border-radius:0;padding:3px;text-shadow:0 0 3px rgba(0,0,0,.3)}.tsf-seo-bar.tsf-100{width:100%}.tsf-seo-bar-inner-wrap{display:table;width:100%;border-radius:0;margin:0 auto;border-collapse:separate;border-spacing:0;vertical-align:middle}.tsf-seo-bar-section-wrap{display:table-cell;border-collapse:collapse}.tsf-seo-bar-item{display:table;width:100%;color:#fff;text-align:center;height:100%;min-width:12px;vertical-align:top;line-height:1.625em;box-shadow:2px 0 0 -1px rgba(0,0,0,.1) inset,-2px 0 0 -1px rgba(0,0,0,.1) inset}body.no-js .tsf-seo-bar-item{cursor:default}.tsf-seo-bar.pill,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap{border-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-item{box-shadow:2px 6px 3px -2px rgba(255,255,255,.2) inset,-2px -6px 3px -2px rgba(41,41,41,.2) inset,0 0 1px rgba(41,41,41,.6)}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:first-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:first-of-type .tsf-seo-bar-item{border-top-left-radius:30px;border-bottom-left-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:last-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:last-of-type .tsf-seo-bar-item{border-top-right-radius:30px;border-bottom-right-radius:30px}.tsf-100{width:100%}.tsf-60{width:60%}.tsf-50{width:50%}.tsf-40{width:40%}.tsf-33{width:33.333%}.tsf-25{width:25%}.tsf-20{width:20%}.tsf-16{width:16.666%}.tsf-12-5{width:12.5%}.tsf-11{width:11.333%}.tsf-10{width:10%}.tsf-seo-bar-bad{background-color:#dd3811}.tsf-seo-bar-okay{background-color:#ffa700}.tsf-seo-bar-good{background-color:#0cc34b}.tsf-seo-bar-unknown{background-color:#007bd2}.tsf-tooltip-wrap{position:relative}.tsf-tooltip-item{cursor:help}a.tsf-tooltip-item{cursor:auto}.tsf-tooltip{position:absolute;padding:0;margin:0;bottom:0;left:0;z-index:900142;text-align:left;pointer-events:none;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.tsf-tooltip-down{bottom:auto;top:0}.tsf-tooltip-text-wrap{padding:10px 12px;font-size:1em;font-weight:500;line-height:1.625em;border-radius:3px;background:#007bd2;color:#fdfdfd;box-shadow:0 0 2px rgba(0,0,0,.6);text-shadow:none;word-wrap:break-word;overflow-wrap:break-word;word-break:break-word;white-space:pre-line;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 0 150px;flex:1 0 150px;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.tsf-is-primary-term,.tsf-nav-tab{font-weight:600}.tsf-tooltip-text span{text-decoration:underline}.tsf-tooltip-text br{display:block;width:100%;content:"\A"}.tsf-ajax:before,.tsf-tooltip-arrow:after,.tsf-tooltip-arrow:before{content:""}.tsf-tooltip-arrow{position:absolute;bottom:-8px;z-index:9999999;left:0;width:0;height:0}.tsf-tooltip-down .tsf-tooltip-arrow{bottom:auto;top:-8px}.tsf-tooltip-arrow:before{border-left:9px solid transparent;border-right:9px solid transparent;border-top:9px solid rgba(0,0,0,.25);position:absolute;bottom:-1px;left:-1px}.tsf-tooltip-arrow:after{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #007bd2;position:absolute;bottom:0;left:0}.tsf-tooltip-down .tsf-tooltip-arrow:before{bottom:auto;top:0;border-top:0;border-bottom:9px solid rgba(0,0,0,.25)}.tsf-tooltip-down .tsf-tooltip-arrow:after{bottom:auto;top:1px;border-top:0;border-bottom:8px solid #007bd2}.tsf-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-metaboxes{box-sizing:border-box;max-width:690px;padding-bottom:20px}.tsf-top-wrap{width:100%;display:inline-block;vertical-align:top}.tsf-top-wrap>h1,.tsf-top-wrap>h2{float:left}.tsf-metaboxes .metabox-holder{clear:both}.tsf-top-buttons{float:right}.tsf-bottom-buttons{text-align:right}.tsf-metaboxes .tsf-bottom-buttons input,.tsf-metaboxes .tsf-top-buttons input{margin-left:10px}#tsf-description-separator,#tsf-title-separator{display:table;width:100%;border-collapse:collapse;border-spacing:0}#tsf-description-separator input,#tsf-title-separator input{display:none;float:left;width:0;min-width:0;opacity:0}#tsf-description-separator label,#tsf-title-separator label{display:inline-block;width:auto;min-width:28px;min-height:28px;margin:3px;-moz-margin-end:1.5px;-moz-margin-start:1.5px;padding:0 4px;border:1px solid #ccc;line-height:28px;text-align:center;cursor:pointer;box-shadow:-1px -1px 1px #aaa inset;font-size:16px}#tsf-description-separator label.tsf-recommended,#tsf-title-separator label.tsf-recommended{border:1px solid #0cc34b;box-shadow:-1px -1px 1px #0cc34b inset}#tsf-description-separator input:hover+label,#tsf-description-separator label:hover,#tsf-title-separator input:hover+label,#tsf-title-separator label:hover{box-shadow:1px 1px 1px #aaa inset;background-color:#fff}#tsf-description-separator input:checked+label,#tsf-title-separator input:checked+label{box-shadow:1px 1px 1px #333 inset;background-color:#fff}#tsf-home-title-location,#tsf-title-location{display:block}#tsf-home-title-location label span,#tsf-title-location label span,#tsf-twitter-cards label span{display:inline-block;min-width:60px;vertical-align:baseline}#tsf-twitter-cards label span{min-width:150px}#tsf-home-title-location label .tsf-sep-js,#tsf-home-title-location label span.tsf-custom-blogname-js,#tsf-home-title-location label span.tsf-custom-tagline-js,#tsf-home-title-location label span.tsf-custom-title-js,#tsf-title-location label .tsf-sep-js{display:inline;min-width:0;white-space:pre}.tsf-nav-tab-wrapper,.tsf-tab-no-js{position:relative;clear:both;width:100%;display:inline-block;border-bottom:1px solid #ccc;line-height:inherit;padding:8px 12px 0;margin:-4px -12px}.tsf-nav-tab{float:left;border:1px solid #ccc;margin-left:.5em;margin-bottom:-1px;padding:5px 14px;font-size:12px;line-height:16px;background:#f1f1f1;color:#555}.tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}input.tsf-tabs-radio{display:none;width:0;height:0;position:absolute;left:-9001px}.tsf-active-tab,.tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-tabs-content{margin:1.33em auto 0}.tsf-content-no-js{margin:1.33em auto}body.js .tsf-tabs-content{display:none}body.js .tsf-tabs-content.tsf-active-tab-content{display:block}#tsf-inpost-box .inside,.tsf-flex{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start}#tsf-inpost-box.closed .inside,body.js .tsf-flex-tab-content{display:none}#tsf-inpost-box .inside{margin:0;padding:0;-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tsf-flex-inside-wrap{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto}.tsf-flex-setting{width:100%;-webkit-flex-direction:row;flex-direction:row}.tsf-flex-setting-input,.tsf-flex-setting-label{background-color:#fff;padding:15px 12px;-webkit-flex:10 1 350px;flex:10 1 350px;box-shadow:0 0 0 1px #e9e9e9}.tsf-flex-setting-label{background-color:#f9f9f9;-webkit-flex:1 1 200px;flex:1 1 200px}.tsf-flex-setting-input{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-grow:0;flex-grow:0}.tsf-flex-setting-label-inner-wrap{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item>*{margin-right:4px}.tsf-flex-setting-label-item>:last-child{margin-right:0}.tsf-social-image-buttons{margin-top:15px;margin-left:1px}.tsf-flex-setting-input textarea{max-height:250px}input[type=radio].tsf-flex-nav-tab-radio{display:none;width:0;height:0;margin:0;padding:0;position:absolute;left:-9001px}.tsf-flex-nav-tab-wrapper{background-color:#fcfcfc;border-bottom:2px solid #dadada;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-width:100%}.tsf-flex-nav-tab-inner{-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 0 auto;flex:1 0 auto}.tsf-flex-nav-tab{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto;max-width:125px}.tsf-flex-nav-tab-label{padding:12px;text-align:center;-webkit-flex-direction:row;flex-direction:row;box-shadow:0 0 0 0 transparent inset;-webkit-transition:box-shadow .15s ease-out;-o-transition:box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-align-items:center;align-items:center;-webkit-align-content:space-around;align-content:space-around}.tsf-flex-nav-dashicon,.tsf-flex-nav-name{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked+.tsf-flex-nav-tab-label{box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-transition:box-shadow .25s ease-in;-o-transition:box-shadow .25s ease-in;transition:box-shadow .25s ease-in}.tsf-flex-tab-content{-webkit-flex:1 0 100%;flex:1 0 100%;max-width:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}body.js .tsf-flex-tab-content.tsf-flex-tab-content-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tsf-flex-tabs-content-no-js{background-color:#f3f3f3;border-bottom:1px solid #dadada;box-shadow:0 2px 0 0 #dadada inset}.tsf-flex-tab-no-js{-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;flex:1 1 100%}.tsf-flex-tab-no-js .tsf-flex-nav-tab{padding:12px;min-width:125px;box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:0 1 auto;flex:0 1 auto}#tsf-inpost-box .hndle .tsf-tooltip-wrap a{font-size:14px;line-height:1em}.tsf-primary-term-selector{margin:0;padding:0;float:right;line-height:inherit;display:inline-block}.tsf-primary-term-selector input{vertical-align:middle;height:14px;width:14px;min-width:14px;line-height:inherit;margin:0;padding:0;pointer-events:none}.tsf-primary-term-selector input:checked:before{width:6px;height:6px;margin:3px;line-height:inherit}.tsf-primary-term-selector-help-wrap{position:absolute;top:0;right:25px}input.tsf-default-selected{border-color:#1c9d38}input.tsf-default-selected:checked:before{color:#1c9d38}input.tsf-warning-selected{border-color:#dd3811}input.tsf-warning-selected:checked:before{color:#dd3811}label.tsf-disabled{color:#999}input.tsf-disabled,label.tsf-disabled{cursor:default}.tsf-fields{font-size:13px;line-height:1.5;margin:1em 0}.tsf-fields .tsf-toblock{display:block;width:100%;margin-bottom:4px}.tsf-fields p.description{margin:7px 0 5px;color:#666}.tsf-option-spacer{margin:1em 0}.tsf-checkbox-wrapper{margin-top:15px}.tsf-checkbox-wrapper:first-child{margin-top:0}.tsf-metaboxes legend h4{margin:2px 0}.tsf-metaboxes legend p:last-of-type{margin-bottom:0}.tsf-counter .tsf-ajax{margin-left:3px}.tsf-ajax:before{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;font-size:1.225em;vertical-align:middle}.tsf-ajax.tsf-loading:before{content:"\f463";color:#007bd2;-webkit-animation:tsf-spin 1.5s linear infinite;-moz-animation:tsf-spin 1.5s linear infinite;-o-animation:tsf-spin 1.5s linear infinite;animation:tsf-spin 1.5s linear infinite}.tsf-ajax.tsf-error:before{content:"\f158";color:#dd3811}.tsf-ajax.tsf-success:before{content:"\f147";color:#0cc34b}a.tsf-set-social-image.button{margin-right:7px}#tsf-inpost-box input[type=text]::-webkit-input-placeholder,#tsf-inpost-box textarea::-webkit-input-placeholder,.tsf-metaboxes input[type=text]::-webkit-input-placeholder,.tsf-metaboxes textarea::-webkit-input-placeholder{-webkit-transition:color .33s ease-in,text-shadow .33s ease-in;-o-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]::-moz-placeholder,#tsf-inpost-box textarea::-moz-placeholder,.tsf-metaboxes input[type=text]::-moz-placeholder,.tsf-metaboxes textarea::-moz-placeholder{-moz-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:-ms-input-placeholder,#tsf-inpost-box textarea:-ms-input-placeholder,.tsf-metaboxes input[type=text]:-ms-input-placeholder,.tsf-metaboxes textarea:-ms-input-placeholder{transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:focus::-webkit-input-placeholder,#tsf-inpost-box textarea:focus::-webkit-input-placeholder,.tsf-metaboxes input[type=text]:focus::-webkit-input-placeholder,.tsf-metaboxes textarea:focus::-webkit-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus::-moz-placeholder,#tsf-inpost-box textarea:focus::-moz-placeholder,.tsf-metaboxe textarea:focus::-moz-placeholder,.tsf-metaboxes input[type=text]:focus::-moz-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus:-ms-input-placeholder,#tsf-inpost-box textarea:focus:-ms-input-placeholder,.tsf-metaboxes input[type=text]:focus:-ms-input-placeholder,.tsf-metaboxes textarea:focus:-ms-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}@-webkit-keyframes tsf-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes tsf-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media screen and (max-width:782px){.tsf-inpost-box p.tsf-fields,.tsf-metaboxes p.tsf-fields{line-height:2.8}#tsf-home-title-location label span,#tsf-title-location label span{min-width:40px}.wp-list-table .is-expanded td.tsf-seo-bar-wrap:not(.hidden){overflow:initial!important}.tsf-primary-term-selector input{height:18px;width:18px;min-width:18px}.tsf-primary-term-selector input:checked:before{width:8px;height:8px;margin:4px}}@media screen and (max-width:642px){.tsf-nav-desktop{display:none}}@media screen and (max-width:510px){.tsf-seo-bar.tsf-100{width:inherit}}@-moz-document url-prefix(){#tsf-description-separator label,#tsf-title-separator label{margin:3px 1px}@media only screen and (min-width:768px){.widefat tr td.column-title:nth-child(2):nth-last-child(n+6),.widefat tr td.title:nth-child(2):nth-last-child(n+6),.widefat tr th.column-title:nth-child(2):nth-last-child(n+6),.widefat tr th.title:nth-child(2):nth-last-child(n+6){min-width:1em;width:25%;max-width:100%;white-space:unset}}.tsf-default-selected{box-shadow:0 0 2px 0 #1c9d38}.tsf-warning-selected{box-shadow:0 0 2px 0 #dd3811}}.tsf-flex-hide-if-no-js,body.js .tsf-flex-hide-if-js{display:none}body.js .tsf-flex-hide-if-no-js{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex} +.tsf-notice{position:relative;clear:both}.tsf-notice.tsf-show-icon p:before{content:'';margin-right:12px;background:0 0;display:inline-block;font:400 14px/16px dashicons;speak:none;height:16px;text-align:center;vertical-align:middle;width:16px;line-height:14px;-webkit-font-smoothing:antialiased}.error.tsf-notice.tsf-show-icon p:before{color:#dd3811;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffa01b;content:"\f227"}.updated.tsf-notice.tsf-show-icon p:before{color:#0cc34b;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;right:1px;border:none;margin:0;padding:9px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none}a.tsf-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a.tsf-dismiss:hover{color:#c00}table.wp-list-table .column-name{width:15%}table.wp-list-table .column-icl_translations,table.wp-list-table .column-is_in_stock,table.wp-list-table .column-price,table.wp-list-table .column-sku,th.column-tsf-seo-bar-wrap~th{width:8%}.tsf-seo-bar-item{text-decoration:none;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#tsf-title-wrap{position:relative;display:block;padding:0;height:auto;width:auto;overflow:hidden}#tsf-title-offset{visibility:hidden;height:0;display:inline-block;position:absolute;left:0;color:transparent;white-space:pre}#tsf-title-placeholder,#tsf-title-placeholder-prefix{position:absolute;color:#777;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box;top:0;left:0;overflow:hidden;white-space:pre;text-overflow:ellipsis;will-change:left,right}.tsf-counter-wrap{margin-top:15px}.tsf-counter{font-weight:400;color:#666;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:contents}.tsf-count-bad{color:#dd3811}.tsf-count-okay{color:#ffa700}.tsf-count-good{color:#0cc34b}.tsf-counter-one{color:#fff;border-radius:4em;padding:0 .5em;min-width:2em;display:inline-block;text-align:center;vertical-align:baseline}.tsf-counter-one.tsf-count-bad{background-color:#dd3811}.tsf-counter-one.tsf-count-okay{background-color:#ffa700}.tsf-counter-one.tsf-count-good{background-color:#0cc34b}.tsf-tabs-content .tsf-pixel-counter-wrap{margin-left:1px;max-width:99%}.tsf-pixel-shadow-wrap{position:relative;overflow:hidden;width:0;height:0}.tsf-pixel-counter-wrap{border-bottom:1px solid #ccc;margin-top:12px;margin-bottom:3px}.tsf-pixel-counter-bar{padding-top:7px;display:block;height:3px;width:100%}.tsf-pixel-counter-fluid{display:block;pointer-events:none;height:3px;width:0;max-width:100%;background:#007bd2;box-shadow:0 1px 3px 0 #ccc;-webkit-transition:width .15s cubic-bezier(.4,0,.75,1);-o-transition:width .15s cubic-bezier(.4,0,.75,1);transition:width .15s cubic-bezier(.4,0,.75,1)}.tsf-pixel-counter-overflown .tsf-pixel-counter-fluid{background-color:#dd3811}.tsf-pixel-counter-fit .tsf-pixel-counter-fluid{background-color:#0cc34b}.tsf-description-pixel-counter-shadow,.tsf-title-pixel-counter-shadow{position:absolute;left:0;top:0;z-index:-100;overflow:visible;visibility:hidden;padding:0;margin:0;border:0;display:inline;text-decoration:none;white-space:nowrap;word-wrap:normal;zoom:1;text-overflow:clip;-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none;font-family:arial,helvetica,sans-serif;font-size:18px;font-weight:400}.tsf-description-pixel-counter-shadow{font-size:13px}#tsf-seo-bar-wrap{width:18%}th:last-of-type#tsf-seo-bar-wrap{width:160px}.tsf-seo-bar{display:block;width:95%;max-width:220px;border-radius:0;padding:3px;text-shadow:0 0 3px rgba(0,0,0,.3)}.tsf-seo-bar.tsf-100{width:100%}.tsf-seo-bar-inner-wrap{display:table;width:100%;border-radius:0;margin:0 auto;border-collapse:separate;border-spacing:0;vertical-align:middle}.tsf-seo-bar-section-wrap{display:table-cell;border-collapse:collapse}.tsf-seo-bar-item{display:table;width:100%;color:#fff;text-align:center;height:100%;min-width:12px;vertical-align:top;line-height:1.625em;box-shadow:2px 0 0 -1px rgba(0,0,0,.1) inset,-2px 0 0 -1px rgba(0,0,0,.1) inset}body.no-js .tsf-seo-bar-item{cursor:default}.tsf-seo-bar.pill,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap{border-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-item{box-shadow:2px 6px 3px -2px rgba(255,255,255,.2) inset,-2px -6px 3px -2px rgba(41,41,41,.2) inset,0 0 1px rgba(41,41,41,.6)}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:first-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:first-of-type .tsf-seo-bar-item{border-top-left-radius:30px;border-bottom-left-radius:30px}.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:last-of-type,.tsf-seo-bar.pill .tsf-seo-bar-inner-wrap .tsf-seo-bar-section-wrap:last-of-type .tsf-seo-bar-item{border-top-right-radius:30px;border-bottom-right-radius:30px}.tsf-100{width:100%}.tsf-60{width:60%}.tsf-50{width:50%}.tsf-40{width:40%}.tsf-33{width:33.333%}.tsf-25{width:25%}.tsf-20{width:20%}.tsf-16{width:16.666%}.tsf-12-5{width:12.5%}.tsf-11{width:11.333%}.tsf-10{width:10%}.tsf-seo-bar-bad{background-color:#dd3811}.tsf-seo-bar-okay{background-color:#ffa700}.tsf-seo-bar-good{background-color:#0cc34b}.tsf-seo-bar-unknown{background-color:#007bd2}.tsf-tooltip-wrap{position:relative}.tsf-tooltip-item{cursor:help}a.tsf-tooltip-item{cursor:pointer}.tsf-tooltip{position:absolute;padding:0;margin:0;bottom:0;left:0;z-index:900142;text-align:left;pointer-events:none;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.tsf-tooltip-down{bottom:auto;top:0}.tsf-tooltip-text-wrap{padding:10px 12px;font-size:1em;font-weight:500;line-height:1.625em;border-radius:3px;background:#007bd2;color:#fdfdfd;box-shadow:0 0 2px rgba(0,0,0,.6);text-shadow:none;word-wrap:break-word;overflow-wrap:break-word;word-break:break-word;white-space:pre-line;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 0 150px;flex:1 0 150px;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.tsf-is-primary-term,.tsf-nav-tab{font-weight:600}.tsf-tooltip-text span{text-decoration:underline}.tsf-tooltip-text br{display:block;width:100%;content:"\A"}.tsf-ajax:before,.tsf-tooltip-arrow:after,.tsf-tooltip-arrow:before{content:""}.tsf-tooltip-arrow{position:absolute;bottom:-8px;z-index:9999999;left:0;width:0;height:0}.tsf-tooltip-down .tsf-tooltip-arrow{bottom:auto;top:-8px}.tsf-tooltip-arrow:before{border-left:9px solid transparent;border-right:9px solid transparent;border-top:9px solid rgba(0,0,0,.25);position:absolute;bottom:-1px;left:-1px}.tsf-tooltip-arrow:after{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #007bd2;position:absolute;bottom:0;left:0}.tsf-tooltip-down .tsf-tooltip-arrow:before{bottom:auto;top:0;border-top:0;border-bottom:9px solid rgba(0,0,0,.25)}.tsf-tooltip-down .tsf-tooltip-arrow:after{bottom:auto;top:1px;border-top:0;border-bottom:8px solid #007bd2}.tsf-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-metaboxes{box-sizing:border-box;max-width:690px;padding-bottom:20px}.tsf-top-wrap{width:100%;display:inline-block;vertical-align:top}.tsf-top-wrap>h1,.tsf-top-wrap>h2{float:left}.tsf-metaboxes .metabox-holder{clear:both}.tsf-top-buttons{float:right}.tsf-bottom-buttons{text-align:right}.tsf-metaboxes .tsf-bottom-buttons input,.tsf-metaboxes .tsf-top-buttons input{margin-left:10px}#tsf-description-separator,#tsf-title-separator{display:table;width:100%;border-collapse:collapse;border-spacing:0}#tsf-description-separator input,#tsf-title-separator input{display:none;float:left;width:0;min-width:0;opacity:0}#tsf-description-separator label,#tsf-title-separator label{display:inline-block;width:auto;min-width:28px;min-height:28px;margin:3px;-moz-margin-end:1.5px;-moz-margin-start:1.5px;padding:0 4px;border:1px solid #ccc;line-height:28px;text-align:center;cursor:pointer;box-shadow:-1px -1px 1px #aaa inset;font-size:16px}#tsf-description-separator label.tsf-recommended,#tsf-title-separator label.tsf-recommended{border:1px solid #0cc34b;box-shadow:-1px -1px 1px #0cc34b inset}#tsf-description-separator input:hover+label,#tsf-description-separator label:hover,#tsf-title-separator input:hover+label,#tsf-title-separator label:hover{box-shadow:1px 1px 1px #aaa inset;background-color:#fff}#tsf-description-separator input:checked+label,#tsf-title-separator input:checked+label{box-shadow:1px 1px 1px #333 inset;background-color:#fff}#tsf-home-title-location,#tsf-title-location{display:block}#tsf-home-title-location label span,#tsf-title-location label span,#tsf-twitter-cards label span{display:inline-block;min-width:60px;vertical-align:baseline}#tsf-twitter-cards label span{min-width:150px}#tsf-home-title-location label .tsf-sep-js,#tsf-home-title-location label span.tsf-custom-blogname-js,#tsf-home-title-location label span.tsf-custom-tagline-js,#tsf-home-title-location label span.tsf-custom-title-js,#tsf-title-location label .tsf-sep-js{display:inline;min-width:0;white-space:pre}.tsf-nav-tab-wrapper,.tsf-tab-no-js{position:relative;clear:both;width:100%;display:inline-block;border-bottom:1px solid #ccc;line-height:inherit;padding:8px 12px 0;margin:-4px -12px}.tsf-nav-tab{float:left;border:1px solid #ccc;margin-left:.5em;margin-bottom:-1px;padding:5px 14px;font-size:12px;line-height:16px;background:#f1f1f1;color:#555}.tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}input.tsf-tabs-radio{display:none;width:0;height:0;position:absolute;left:-9001px}.tsf-active-tab,.tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-tabs-content{margin:1.33em auto 0}.tsf-content-no-js{margin:1.33em auto}body.js .tsf-tabs-content{display:none}body.js .tsf-tabs-content.tsf-active-tab-content{display:block}#tsf-inpost-box .inside,.tsf-flex{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1 1 auto;flex:1 1 auto;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start}#tsf-inpost-box.closed .inside,body.js .tsf-flex-tab-content{display:none}#tsf-inpost-box .inside{margin:0;padding:0;-webkit-flex:1 0 100%;flex:1 0 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tsf-flex-inside-wrap{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto}.tsf-flex-setting{width:100%;-webkit-flex-direction:row;flex-direction:row}.tsf-flex-setting-input,.tsf-flex-setting-label{background-color:#fff;padding:15px 12px;-webkit-flex:10 1 350px;flex:10 1 350px;box-shadow:0 0 0 1px #e9e9e9}.tsf-flex-setting-label{background-color:#f9f9f9;-webkit-flex:1 1 200px;flex:1 1 200px}.tsf-flex-setting-input{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-grow:0;flex-grow:0}.tsf-flex-setting-label-inner-wrap{-webkit-justify-content:center;justify-content:center}.tsf-flex-setting-label-item>*{margin-right:4px}.tsf-flex-setting-label-item>:last-child{margin-right:0}.tsf-social-image-buttons{margin-top:15px;margin-left:1px}.tsf-flex-setting-input textarea{max-height:250px}input[type=radio].tsf-flex-nav-tab-radio{display:none;width:0;height:0;margin:0;padding:0;position:absolute;left:-9001px}.tsf-flex-nav-tab-wrapper{background-color:#fcfcfc;border-bottom:2px solid #dadada;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 100%;flex:1 1 100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-width:100%}.tsf-flex-nav-tab-inner{-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 0 auto;flex:1 0 auto}.tsf-flex-nav-tab{-webkit-flex-direction:row;flex-direction:row;-webkit-flex:1 1 auto;flex:1 1 auto;max-width:125px}.tsf-flex-nav-tab-label{padding:12px;text-align:center;-webkit-flex-direction:row;flex-direction:row;box-shadow:0 0 0 0 transparent inset;-webkit-transition:box-shadow .15s ease-out;-o-transition:box-shadow .15s ease-out;transition:box-shadow .15s ease-out;-webkit-align-items:center;align-items:center;-webkit-align-content:space-around;align-content:space-around}.tsf-flex-nav-dashicon,.tsf-flex-nav-name{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked+.tsf-flex-nav-tab-label{box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-transition:box-shadow .25s ease-in;-o-transition:box-shadow .25s ease-in;transition:box-shadow .25s ease-in}.tsf-flex-tab-content{-webkit-flex:1 0 100%;flex:1 0 100%;max-width:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}body.js .tsf-flex-tab-content.tsf-flex-tab-content-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tsf-flex-tabs-content-no-js{background-color:#f3f3f3;border-bottom:1px solid #dadada;box-shadow:0 2px 0 0 #dadada inset}.tsf-flex-tab-no-js{-webkit-align-items:baseline;align-items:baseline;-webkit-flex-direction:row;flex-direction:row;flex:1 1 100%}.tsf-flex-tab-no-js .tsf-flex-nav-tab{padding:12px;min-width:125px;box-shadow:0 -2px 0 0 #007bd2 inset;-webkit-flex-direction:row;flex-direction:row;-webkit-flex:0 1 auto;flex:0 1 auto}#tsf-inpost-box .hndle .tsf-tooltip-wrap a{font-size:14px;line-height:1em}.tsf-primary-term-selector{margin:0;padding:0;float:right;line-height:inherit;display:inline-block}.tsf-primary-term-selector input{vertical-align:middle;height:14px;width:14px;min-width:14px;line-height:inherit;margin:0;padding:0;pointer-events:none}.tsf-primary-term-selector input:checked:before{width:6px;height:6px;margin:3px;line-height:inherit}.tsf-primary-term-selector-help-wrap{position:absolute;top:0;right:25px}input.tsf-default-selected{border-color:#1c9d38}input.tsf-default-selected:checked:before{color:#1c9d38}input.tsf-warning-selected{border-color:#dd3811}input.tsf-warning-selected:checked:before{color:#dd3811}label.tsf-disabled{color:#999}input.tsf-disabled,label.tsf-disabled{cursor:default}.tsf-fields{font-size:13px;line-height:1.5;margin:1em 0}.tsf-fields .tsf-toblock{display:block;width:100%;margin-bottom:4px}.tsf-fields p.description{margin:7px 0 5px;color:#666}.tsf-option-spacer{margin:1em 0}.tsf-checkbox-wrapper{margin-top:15px}.tsf-checkbox-wrapper:first-child{margin-top:0}.tsf-metaboxes legend h4{margin:2px 0}.tsf-metaboxes legend p:last-of-type{margin-bottom:0}.tsf-counter .tsf-ajax{margin-left:3px}.tsf-ajax:before{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;font-size:1.225em;vertical-align:middle}.tsf-ajax.tsf-loading:before{content:"\f463";color:#007bd2;-webkit-animation:tsf-spin 1.5s linear infinite;-moz-animation:tsf-spin 1.5s linear infinite;-o-animation:tsf-spin 1.5s linear infinite;animation:tsf-spin 1.5s linear infinite}.tsf-ajax.tsf-error:before{content:"\f158";color:#dd3811}.tsf-ajax.tsf-success:before{content:"\f147";color:#0cc34b}a.tsf-set-social-image.button{margin-right:7px}#tsf-inpost-box input[type=text]::-webkit-input-placeholder,#tsf-inpost-box textarea::-webkit-input-placeholder,.tsf-metaboxes input[type=text]::-webkit-input-placeholder,.tsf-metaboxes textarea::-webkit-input-placeholder{-webkit-transition:color .33s ease-in,text-shadow .33s ease-in;-o-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]::-moz-placeholder,#tsf-inpost-box textarea::-moz-placeholder,.tsf-metaboxes input[type=text]::-moz-placeholder,.tsf-metaboxes textarea::-moz-placeholder{-moz-transition:color .33s ease-in,text-shadow .33s ease-in;transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:-ms-input-placeholder,#tsf-inpost-box textarea:-ms-input-placeholder,.tsf-metaboxes input[type=text]:-ms-input-placeholder,.tsf-metaboxes textarea:-ms-input-placeholder{transition:color .33s ease-in,text-shadow .33s ease-in}#tsf-inpost-box input[type=text]:focus::-webkit-input-placeholder,#tsf-inpost-box textarea:focus::-webkit-input-placeholder,.tsf-metaboxes input[type=text]:focus::-webkit-input-placeholder,.tsf-metaboxes textarea:focus::-webkit-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus::-moz-placeholder,#tsf-inpost-box textarea:focus::-moz-placeholder,.tsf-metaboxe textarea:focus::-moz-placeholder,.tsf-metaboxes input[type=text]:focus::-moz-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}#tsf-inpost-box input[type=text]:focus:-ms-input-placeholder,#tsf-inpost-box textarea:focus:-ms-input-placeholder,.tsf-metaboxes input[type=text]:focus:-ms-input-placeholder,.tsf-metaboxes textarea:focus:-ms-input-placeholder{color:transparent;text-shadow:0 0 1px rgba(114,119,124,.75)}@-webkit-keyframes tsf-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes tsf-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media screen and (max-width:782px){.tsf-inpost-box p.tsf-fields,.tsf-metaboxes p.tsf-fields{line-height:2.8}#tsf-home-title-location label span,#tsf-title-location label span{min-width:40px}.wp-list-table .is-expanded td.tsf-seo-bar-wrap:not(.hidden){overflow:initial!important}.tsf-primary-term-selector input{height:18px;width:18px;min-width:18px}.tsf-primary-term-selector input:checked:before{width:8px;height:8px;margin:4px}}@media screen and (max-width:642px){.tsf-nav-desktop{display:none}}@media screen and (max-width:510px){.tsf-seo-bar.tsf-100{width:inherit}}@-moz-document url-prefix(){#tsf-description-separator label,#tsf-title-separator label{margin:3px 1px}@media only screen and (min-width:768px){.widefat tr td.column-title:nth-child(2):nth-last-child(n+6),.widefat tr td.title:nth-child(2):nth-last-child(n+6),.widefat tr th.column-title:nth-child(2):nth-last-child(n+6),.widefat tr th.title:nth-child(2):nth-last-child(n+6){min-width:1em;width:25%;max-width:100%;white-space:unset}}.tsf-default-selected{box-shadow:0 0 2px 0 #1c9d38}.tsf-warning-selected{box-shadow:0 0 2px 0 #dd3811}}.tsf-flex-hide-if-no-js,body.js .tsf-flex-hide-if-js{display:none}body.js .tsf-flex-hide-if-no-js{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex} diff --git a/lib/js/tsf.js b/lib/js/tsf.js index 30434ff1..2ff3494d 100644 --- a/lib/js/tsf.js +++ b/lib/js/tsf.js @@ -165,7 +165,7 @@ window.tsf = { if ( ! str.length ) return ''; - var map = { + let map = { '&': '&', '<': '<', '>': '>', @@ -173,11 +173,46 @@ window.tsf = { "'": ''' }; - return str.replace( /[&<>"']/g, function( m ) { + return str.replace( /[&<>"']/g, m => { return map[ m ]; } ); }, + /** + * Undoes what tsf.escapeString has done. + * + * @since 3.0.4 + * + * @function + * @param {string} str The escaped str via tsf.escapeString + * @return {string} + */ + unescapeString: function( str ) { + + if ( ! str.length ) + return ''; + + let map = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + let regex = new RegExp( + Object.values( map ).map( v => { + return v.replace( /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&' ); + } ).join('|'), + 'g' + ); + + return str.replace( regex, m => { + return Object.keys( map ).find( k => { + return map[ k ] === m; + } ); + } ); + }, + /** * Gets string length. * We do not trim whitespace in JavaScript; that should be self-taught by the user. @@ -607,27 +642,59 @@ window.tsf = { ie11killswitch = false; }, 0 ); } + const setReferenceTitle = function( event ) { + let reference = document.getElementById( 'tsf-title-reference' ), + text = ''; + + if ( ! reference ) return; + + if ( event.target.value.length < 1 ) { + text = event.target.placeholder; + } else { + //= We must determine the position as trailing whitespace is rendered 0. + text = event.target.value; + + if ( hoverPrefixValue.length ) { + switch ( hoverPrefixPlacement ) { + case 'before' : + text = hoverPrefixValue + text; + break; + + case 'after' : + text = text + hoverPrefixValue; + break; + } + } + if ( hoverAdditionsValue.length ) { + switch ( hoverAdditionsPlacement ) { + case 'before' : + text = hoverAdditionsValue + text; + break; + + case 'after' : + text = text + hoverAdditionsValue; + break; + } + } + } + + reference.innerHTML = tsf.escapeString( text ); + // Fires change event. Defered. + setTimeout( () => { jQuery( reference ).change() }, 0 ); + } const updateCounter = function( event ) { - let counter = document.getElementById( event.target.id + '_chars' ); + let counter = document.getElementById( event.target.id + '_chars' ), + reference = document.getElementById( 'tsf-title-reference' ); - if ( ! counter ) - return; + if ( ! counter || ! reference ) return; - let titLen = 0, + let titLen = tsf.getStringLength( tsf.unescapeString( reference.innerHTML ) ), target = event.target, counterClass = '', counterType = tsf.counterType, counterName = '', output = ''; - if ( target.value.length < 1 ) { - titLen = tsf.getStringLength( target.placeholder ); - } else { - titLen = ( hoverPrefixValue ? tsf.getStringLength( hoverPrefixValue ) : 0 ) - + tsf.getStringLength( target.value ) - + ( hoverAdditionsValue ? tsf.getStringLength( hoverAdditionsValue ) : 0 ); - } - if ( titLen < 25 || titLen >= 75 ) { counterClass += 'tsf-count-bad'; counterName = tsf.i18n.bad; @@ -656,46 +723,15 @@ window.tsf = { counter.className = counterClass; } const updatePixels = function( event ) { - let pixels = document.getElementById( event.target.id + '_pixels' ); + let pixels = document.getElementById( event.target.id + '_pixels' ), + reference = document.getElementById( 'tsf-title-reference' ); - if ( ! pixels ) + if ( ! pixels || ! reference ) return; - let text = ''; - - if ( event.target.value.length < 1 ) { - text = event.target.placeholder; - } else { - //= We must determine the position as trailing whitespace is rendered 0. - text = event.target.value; - - if ( hoverPrefixValue.length ) { - switch ( hoverPrefixPlacement ) { - case 'before' : - text = hoverPrefixValue + text; - break; - - case 'after' : - text = text + hoverPrefixValue; - break; - } - } - if ( hoverAdditionsValue.length ) { - switch ( hoverAdditionsPlacement ) { - case 'before' : - text = hoverAdditionsValue + text; - break; - - case 'after' : - text = text + hoverAdditionsValue; - break; - } - } - } - let test = { 'e': pixels, - 'text' : text, + 'text' : tsf.unescapeString( reference.innerHTML ), 'guideline' : tsf.params.titlePixelGuideline, }; @@ -713,6 +749,7 @@ window.tsf = { if ( ie11killswitch ) return false; updateHoverPlacement( event ); updatePlaceholder(); + setReferenceTitle( event ); updateCounter( event ); updatePixels( event ); } @@ -726,6 +763,7 @@ window.tsf = { * @return {undefined} */ const updateCounterTrigger = function( event ) { + setReferenceTitle( event ); updateCounter( event ); updatePixels( event ); } @@ -893,9 +931,7 @@ window.tsf = { */ const enqueueUnregisteredInputTrigger = function() { clearTimeout( unregisteredTriggerBuffer ); - unregisteredTriggerBuffer = setTimeout( function() { - triggerUnregisteredInput(); - }, 50 ); + unregisteredTriggerBuffer = setTimeout( triggerUnregisteredInput, 50 ); } //= Defer to prevent early trigger. jQuery( window ).one( 'tsf-ready', function() { @@ -1190,6 +1226,9 @@ window.tsf = { /** * Updates used separator and all examples thereof. * + * @since 3.0.4 : 1. Threshold "too long" has been increased from 155 to 300. + * 2. Threshold "far too long" has been increased to 330 from 175. + * * @function * @param {!jQuery.Event} event * @return {undefined} @@ -1214,10 +1253,10 @@ window.tsf = { descLen = tsf.getStringLength( target.value ); } - if ( descLen < 100 || descLen >= 175 ) { + if ( descLen < 100 || descLen >= 330 ) { counterClass += 'tsf-count-bad'; counterName = tsf.i18n.bad; - } else if ( descLen < 137 || descLen > 155 ) { + } else if ( descLen < 137 || descLen > 300 ) { counterClass += 'tsf-count-okay'; counterName = tsf.i18n.okay; } else { @@ -1241,13 +1280,11 @@ window.tsf = { if ( counter.className !== counterClass ) counter.className = counterClass; } - const updatePixels = function( event ) { - let element = document.getElementById( event.target.id + '_pixels' ); - - if ( ! element ) - return; + const setReferenceDescription = function( event ) { + let reference = document.getElementById( 'tsf-description-reference' ), + text = ''; - let text = ''; + if ( ! reference ) return; if ( event.target.value.length < 1 ) { text = event.target.placeholder; @@ -1255,9 +1292,20 @@ window.tsf = { text = event.target.value; } + reference.innerHTML = tsf.escapeString( text ); + // Fires change event. Defered. + setTimeout( () => { jQuery( reference ).change() }, 0 ); + } + const updatePixels = function( event ) { + let pixels = document.getElementById( event.target.id + '_pixels' ), + reference = document.getElementById( 'tsf-description-reference' ); + + if ( ! pixels || ! reference ) + return; + let test = { - 'e': element, - 'text' : text, + 'e': pixels, + 'text' : tsf.unescapeString( reference.innerHTML ), 'guideline' : tsf.params.descPixelGuideline } @@ -1272,6 +1320,7 @@ window.tsf = { * @return {undefined} */ const updateDescriptionsTrigger = function( event ) { + setReferenceDescription( event ); updateCounter( event ); updatePixels( event ); } @@ -1334,6 +1383,194 @@ window.tsf = { jQuery( document ).on( 'postbox-toggled', triggerPostboxSynchronousUnregisteredInput ); }, + /** + * Initializes social titles. + * + * @since 3.0.4 + * + * @function + * @return {undefined} + */ + _initSocialTitleInputs: function() { + + if ( ! tsf.hasInput ) + return; + + let $ogTitle = jQuery( "#autodescription_og_title" ), + $twTitle = jQuery( "#autodescription_twitter_title" ), + $reference = jQuery( "#tsf-title-reference" ); + + if ( ! $ogTitle.length || ! $twTitle.length || ! $reference.length ) + return; + + let ogTitleValue = tsf.escapeString( $ogTitle.val() ), + twTitleValue = tsf.escapeString( $twTitle.val() ), + referenceValue = $reference.text(); // already escaped. + + const getActiveValue = ( what ) => { + let val = ''; + switch ( what ) { + case 'twitter' : + val = twTitleValue; + // get next if not set. + case 'og' : + val = val.length ? val : ogTitleValue; + // get next if not set. + case 'reference' : + val = val.length ? val : referenceValue; + } + return val; + }; + const setPlaceholders = () => { + $ogTitle.attr( 'placeholder', getActiveValue( 'reference' ) ); + $twTitle.attr( 'placeholder', getActiveValue( 'og' ) ); + }; + const updateCounter = ( target, value, threshold ) => { + if ( ! target || ! value || ! threshold ) { + $ogTitle.each( ( i, el ) => updateCounter( el, getActiveValue( 'og' ), 88 ) ); + $twTitle.each( ( i, el ) => updateCounter( el, getActiveValue( 'twitter' ), 70 ) ); + } else { + tsf.updateSocialCounter( target, value, threshold ); + } + }; + $reference.on( 'change', () => { + referenceValue = $reference.text(); + setPlaceholders(); + updateCounter(); + } ); + + const updateOgTitle = ( event ) => { + ogTitleValue = event.target.value.length ? tsf.escapeString( event.target.value ) : ''; + setPlaceholders(); + updateCounter(); + }; + const updateTwTitle = ( event ) => { + twTitleValue = event.target.value.length ? tsf.escapeString( event.target.value ) : ''; + setPlaceholders(); + updateCounter(); + }; + $ogTitle.on( 'input.tsfUpdateOgTitle', updateOgTitle ); + $twTitle.on( 'input.tsfUpdateOgTitle', updateTwTitle ); + }, + + /** + * Initializes social descriptions. + * + * @since 3.0.0 + * + * @function + * @return {undefined} + */ + _initSocialDescInputs: function() { + + if ( ! tsf.hasInput ) + return; + + let $ogDesc = jQuery( "#autodescription_og_description" ), + $twDesc = jQuery( "#autodescription_twitter_description" ), + $reference = jQuery( "#tsf-description-reference" ); + + if ( ! $ogDesc.length || ! $twDesc.length || ! $reference.length ) + return; + + let ogDescValue = tsf.escapeString( $ogDesc.val() ), + twDescValue = tsf.escapeString( $twDesc.val() ), + referenceValue = $reference.text(); // already escaped. + + const getActiveValue = ( what ) => { + let val = ''; + switch ( what ) { + case 'twitter' : + val = twDescValue; + // get next if not set. + case 'og' : + val = val.length ? val : ogDescValue; + // get next if not set. + case 'reference' : + val = val.length ? val : referenceValue; + } + return val; + }; + const setPlaceholders = () => { + $ogDesc.attr( 'placeholder', getActiveValue( 'reference' ) ); + $twDesc.attr( 'placeholder', getActiveValue( 'og' ) ); + }; + const updateCounter = ( target, value, threshold ) => { + if ( ! target || ! value || ! threshold ) { + $ogDesc.each( ( i, el ) => updateCounter( el, getActiveValue( 'og' ), 300 ) ); + $twDesc.each( ( i, el ) => updateCounter( el, getActiveValue( 'twitter' ), 200 ) ); + } else { + tsf.updateSocialCounter( target, value, threshold ); + } + }; + $reference.on( 'change', () => { + referenceValue = $reference.text(); + setPlaceholders(); + updateCounter(); + } ); + + const updateOgDesc = ( event ) => { + ogDescValue = event.target.value.length ? tsf.escapeString( event.target.value ) : ''; + setPlaceholders(); + updateCounter(); + }; + const updateTwDesc = ( event ) => { + twDescValue = event.target.value.length ? tsf.escapeString( event.target.value ) : ''; + setPlaceholders(); + updateCounter(); + }; + $ogDesc.on( 'input.tsfUpdateOgDesc', updateOgDesc ); + $twDesc.on( 'input.tsfUpdateOgDesc', updateTwDesc ); + }, + + /** + * Updates normalized counters for social input. + * + * @since 3.0.4 + * + * @function + * @param {!Element} target The HMTL eleent. + * @param {string} value Must be escaped. + * @param {integer} threshold The "bad" threshold. + */ + updateSocialCounter: function( target, value, threshold ) { + + let counter = document.getElementById( target.id + '_chars' ); + + if ( ! counter ) + return; + + let strLen = tsf.getStringLength( tsf.unescapeString( value ) ), + counterClass = '', + counterType = tsf.counterType, + counterName = '', + output = ''; + + if ( strLen > threshold ) { + counterClass += 'tsf-count-bad'; + counterName = tsf.i18n.bad; + } else { + counterClass += 'tsf-count-good'; + counterName = tsf.i18n.good; + } + + if ( ! counterType || 1 == counterType ) { + output = strLen.toString(); + } else if ( 2 == counterType ) { + output = counterName; + } else if ( 3 == counterType ) { + output = strLen.toString() + ' - ' + counterName; + } + + counter.innerHTML = output; + + if ( tsf.additionsClass ) + counterClass += ' ' + tsf.additionsClass; + + if ( counter.className !== counterClass ) + counter.className = counterClass; + }, + /** * Initializes counters. * @@ -3174,9 +3411,11 @@ window.tsf = { // Add title prop listeners. Must load before setTabsOnload to work. tsf._initTitleInputs(); tsf._initUnboundTitleSettings(); + tsf._initSocialTitleInputs(); // Add description prop listeners. Must load before setTabsOnload to work. tsf._initDescInputs(); + tsf._initSocialDescInputs(); // Set primary term listeners. tsf._initPrimaryTerm(); diff --git a/lib/js/tsf.min.js b/lib/js/tsf.min.js index 57c6edc5..217fa95b 100644 --- a/lib/js/tsf.min.js +++ b/lib/js/tsf.min.js @@ -1 +1 @@ -'use strict';window.tsf={nonces:tsfL10n.nonces,i18n:tsfL10n.i18n,states:tsfL10n.states,params:tsfL10n.params,other:tsfL10n.other,settingsChanged:!1,counterType:0,hasInput:!1,additionsClass:'',cropper:{},confirm:function(t){function s(){return t.apply(this,arguments)}return s.toString=function(){return t.toString()},s}(function(t){return confirm(t)}),escapeString:function escapeString(t){if(!t.length)return'';var s={'&':'&','<':'<','>':'>','"':'"','\'':'''};return t.replace(/[&<>"']/g,function(a){return s[a]})},getStringLength:function getStringLength(t){var s,a=0;return t.length&&(s=document.createElement('span'),s.innerHTML=tsf.escapeString(t),a=s.childNodes[0].nodeValue.length),+a},updatePixelCounter:function updatePixelCounter(t){var s=t.e,a=t.text,o=t.guideline,n=s.parentElement;if(n){var r=n.querySelector('.tsf-pixel-counter-bar'),l=n.querySelector('.tsf-pixel-counter-shadow');if(r&&l){l.innerHTML=tsf.escapeString(a);var d=l.offsetWidth,c='',g='',f='tsf-pixel-counter-fit',u='tsf-pixel-counter-overflown';d>o?(g=100*(o/(d+2*(d-o)/3))+'%',c=u):(g=100*(d/o)+'%',c=f);var x,y=r.querySelector('.tsf-pixel-counter-fluid');x=tsf.i18n.pixelsUsed.replace(/%1\$d/g,d),x=x.replace(/%2\$d/g,o),r.classList.remove(f,u),r.classList.add(c),r.dataset.desc=x,r.setAttribute('aria-label',x),y.style.width=g,tsf._triggerTooltipUpdate(r)}}},_initTitleInputs:function _initTitleInputs(){if(tsf.hasInput){var t=jQuery('#autodescription_title, #autodescription-meta\\[doctitle\\], #autodescription-site-settings\\[homepage_title\\]');if(t.length){var o,n,r,d,s=!1,a=!!navigator.userAgent.match(/Trident\/7\./),l='',c='',g=tsf.params.titleSeparator,f=tsf.params.objectTitle,u=tsf.states.useTagline,y=tsf.states.isRTL,x=tsf.states.isPrivate,v=tsf.states.isPasswordProtected;o=y?'after':'before';var b=function(){var G='before';tsf.states.isSettingsPage?y?'right'===jQuery('#tsf-home-title-location input:checked').val()&&(G='after'):'left'===jQuery('#tsf-home-title-location input:checked').val()&&(G='after'):tsf.states.isHome?y?'right'===tsf.params.titleLocation&&(G='after'):'left'===tsf.params.titleLocation&&(G='after'):y?'left'===tsf.params.titleLocation&&(G='after'):'right'===tsf.params.titleLocation&&(G='after'),n=G};b();var k=function(){var G='';if(!tsf.states.isSettingsPage)tsf.states.isHome?u&&(G=tsf.params.titleAdditions):u&&(G=tsf.params.titleAdditions);else if(u){var J=document.getElementById('autodescription-site-settings[homepage_title_tagline]'),K=J?J.value:'';G=K.length?K:tsf.params.blogDescription}G.length&&(G=tsf.escapeString(G),'before'===n?G=G+' '+g+' ':'after'===n?G=' '+g+' '+G:void 0),c=G.length?G:'',d=document.getElementById('tsf-title-placeholder'),c.length&&d&&(d.innerHTML=c)};k();var C=function(){var G='';x?G=tsf.i18n.privateTitle:v&&(G=tsf.i18n.protectedTitle),G.length&&(G=tsf.escapeString(G),'before'===o?G+=' ':'after'===o?G=' '+G:void 0),l=G.length?G:'',l.length&&r&&(r.innerHTML=l),r=document.getElementById('tsf-title-placeholder-prefix'),l.length&&r&&(r.innerHTML=l)};C();var T=function(G){if(d||r){var J=jQuery(G.target),K=J.val(),Y=!!c.length,Z=!!l.length;if(!Y&&d&&(d.style.display='none'),!Z&&r&&(r.style.display='none'),!Y&&!Z)return void J.css('text-indent','initial');if(!K.length)return J.css('text-indent','initial'),d&&(d.style.display='none'),void(r&&(r.style.display='none'));var Q=J.outerWidth(!0),tt=(J.outerHeight(!0)-J.height())/2,et=(Q-J.innerWidth())/2,it=y?'right':'left',st=(J.outerWidth(!0)-J.width())/2,at={display:J.css('display'),lineHeight:J.css('lineHeight'),fontFamily:J.css('fontFamily'),fontWeight:J.css('fontWeight'),fontSize:J.css('fontSize'),letterSpacing:J.css('letterSpacing'),paddingTop:tt+'px',paddingBottom:tt+'px'},ot=jQuery(r),nt=jQuery(d),rt=0,lt=0,pt=0,dt=0,ct=0,gt=0;if(Z&&(ot.css(at),ot.css({maxWidth:'initial'}),ct=ot[0].getBoundingClientRect().width,ct