Version Description
- Illustrious =
Release date:
- February 25th, 2017
Did you know?
- We're working on an extension for keyword and subject analysis, named Focus.
- In its current state, it's already on par with other solutions, but we are going to take it even further.
- More details will follow in a blog post, which we'll link to on our Twitter page when the features are ready.
Summarized:
- This is a maintenance release with over 10 bugs fixed. Most notoriously were pixel guideline calculation errors and home page title errors.
- Open Graph and Twitter custom title and description options have been added to every post, page, and CPT.
- The description character count and pixel length guidelines have been updated.
- All publicly queryable CPT posts and pages now support SEO settings and are included in the sitemap. No more messing with filters is needed.
About the new description guidelines:
- Google increased their SERP's description length a few months ago, so we've updated the upper-limit guidelines.
- We recommend enforcing these new guidelines for new pages, cornerstone pages, and the home page.
- Although the description lengths have been updated, the transient cache isn't invalidated.
- Over time the cache will refresh itself, this is done automatically by WordPress, or via your caching plugin's transients handler (if applicable).
About the social meta input:
- There are new Open Graph and Twitter inputs in the SEO Settings.
- The Twitter settings, when left empty, will use the Open Graph output.
- The Open Graph settings, when left empty, will use the SEO meta output.
- As always, auto-generated Open Graph and Twitter descriptions won't use prefixes.
Found unwanted links in the sitemap?
- If you find posts in the sitemap that shouldn't be there, please refer to our renewed FAQ.
- The FAQ entry title is "The sitemap contains unwanted links".
View the detailed log.
Download this release
Release Info
Developer | Cybr |
Plugin | The SEO Framework |
Version | 3.0.4 |
Comparing to | |
See all releases |
Code changes from version 3.0.3 to 3.0.4
- autodescription.php +3 -3
- inc/classes/admin-init.class.php +27 -20
- inc/classes/admin-pages.class.php +16 -4
- inc/classes/cache.class.php +1 -1
- inc/classes/compat.class.php +1 -1
- inc/classes/core.class.php +36 -34
- inc/classes/debug.class.php +3 -3
- inc/classes/deprecated.class.php +1 -1
- inc/classes/detect.class.php +17 -16
- inc/classes/doing-it-right.class.php +71 -11
- inc/classes/feed.class.php +1 -1
- inc/classes/generate-description.class.php +97 -6
- inc/classes/generate-image.class.php +2 -1
- inc/classes/generate-ldjson.class.php +4 -3
- inc/classes/generate-title.class.php +118 -34
- inc/classes/generate-url.class.php +3 -5
- inc/classes/generate.class.php +1 -1
- inc/classes/init.class.php +4 -1
- inc/classes/inpost.class.php +18 -3
- inc/classes/load.class.php +1 -1
- inc/classes/metaboxes.class.php +8 -8
- inc/classes/post-data.class.php +20 -12
- inc/classes/profile.class.php +1 -1
- inc/classes/query.class.php +1 -1
- inc/classes/render.class.php +17 -13
- inc/classes/sanitize.class.php +3 -2
- inc/classes/site-options.class.php +2 -2
- inc/classes/sitemaps.class.php +141 -131
- inc/classes/term-data.class.php +17 -11
- inc/classes/user-data.class.php +1 -1
- inc/compat/plugin-bbpress.php +2 -1
- inc/compat/plugin-wpml.php +1 -1
- inc/functions/deprecated.php +1 -1
- inc/functions/optionsapi.php +1 -1
- inc/functions/plugin-activation.php +1 -1
- inc/functions/plugin-deactivation.php +1 -1
- inc/functions/plugin-test-server.php +4 -4
- inc/functions/upgrade.php +1 -1
- inc/interfaces/debug.interface.php +1 -1
- inc/views/inpost/seo-settings-singular.php +119 -7
- inc/views/inpost/seo-settings-tt.php +2 -1
- inc/views/metaboxes/homepage-metabox.php +2 -1
- inc/views/metaboxes/schema-metabox.php +1 -0
- language/autodescription.pot +217 -199
- lib/css/tsf-rtl.css +7 -6
- lib/css/tsf-rtl.min.css +1 -1
- lib/css/tsf.css +7 -6
- lib/css/tsf.min.css +1 -1
- lib/js/externs/tsf.externs.js +2 -2
- lib/js/externs/tsf.externs.protected.js +2 -2
- lib/js/tsf.js +365 -73
- lib/js/tsf.min.js +1 -1
- load.php +1 -1
- readme.txt +79 -32
- wpml-config.xml +13 -0
autodescription.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: The SEO Framework
|
4 |
* Plugin URI: https://theseoframework.com/
|
5 |
* Description: An automated, advanced, accessible, unbranded and extremely fast SEO solution for any WordPress website.
|
6 |
-
* Version: 3.0.
|
7 |
* Author: Sybre Waaijer
|
8 |
* Author URI: https://theseoframework.com/
|
9 |
* License: GPLv3
|
@@ -15,7 +15,7 @@ defined( 'ABSPATH' ) or die;
|
|
15 |
|
16 |
/**
|
17 |
* The SEO Framework plugin
|
18 |
-
* Copyright (C) 2015 -
|
19 |
*
|
20 |
* This program is free software: you can redistribute it and/or modify
|
21 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -51,7 +51,7 @@ defined( 'ABSPATH' ) or die;
|
|
51 |
*
|
52 |
* @since 1.0.0
|
53 |
*/
|
54 |
-
define( 'THE_SEO_FRAMEWORK_VERSION', '3.0.
|
55 |
|
56 |
/**
|
57 |
* The plugin Database version.
|
3 |
* Plugin Name: The SEO Framework
|
4 |
* Plugin URI: https://theseoframework.com/
|
5 |
* Description: An automated, advanced, accessible, unbranded and extremely fast SEO solution for any WordPress website.
|
6 |
+
* Version: 3.0.4
|
7 |
* Author: Sybre Waaijer
|
8 |
* Author URI: https://theseoframework.com/
|
9 |
* License: GPLv3
|
15 |
|
16 |
/**
|
17 |
* The SEO Framework plugin
|
18 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
19 |
*
|
20 |
* This program is free software: you can redistribute it and/or modify
|
21 |
* it under the terms of the GNU General Public License version 3 as published
|
51 |
*
|
52 |
* @since 1.0.0
|
53 |
*/
|
54 |
+
define( 'THE_SEO_FRAMEWORK_VERSION', '3.0.4' );
|
55 |
|
56 |
/**
|
57 |
* The plugin Database version.
|
inc/classes/admin-init.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -207,11 +207,12 @@ class Admin_Init extends Init {
|
|
207 |
* @since 2.6.0
|
208 |
* @staticvar array $strings : The l10n strings.
|
209 |
* @since 2.7.0 Added AJAX nonce: 'autodescription-ajax-nonce'
|
210 |
-
* @since 2.8.0 1
|
211 |
-
* 2
|
212 |
-
* 3
|
213 |
-
* 4
|
214 |
* @since 2.9.0 Added boolean $returnValue['states']['isSettingsPage']
|
|
|
215 |
*
|
216 |
* @return array $strings The l10n strings.
|
217 |
*/
|
@@ -265,7 +266,7 @@ class Admin_Init extends Init {
|
|
265 |
$ishome = true;
|
266 |
|
267 |
if ( $use_additions ) {
|
268 |
-
$additions = $home_tagline
|
269 |
} else {
|
270 |
$additions = '';
|
271 |
}
|
@@ -369,7 +370,7 @@ class Admin_Init extends Init {
|
|
369 |
'descriptionSeparator' => $description_separator,
|
370 |
'titleLocation' => $title_location,
|
371 |
'titlePixelGuideline' => 600,
|
372 |
-
'descPixelGuideline' => $is_post_edit ? ( $this->is_page() ?
|
373 |
),
|
374 |
'other' => $this->additional_js_l10n( null, array(), true ),
|
375 |
);
|
@@ -555,18 +556,22 @@ class Admin_Init extends Init {
|
|
555 |
|
556 |
$_colors = $GLOBALS['_wp_admin_css_colors'];
|
557 |
|
558 |
-
if (
|
559 |
-
|
|
|
|
|
|
|
560 |
|
561 |
-
$
|
562 |
|
563 |
-
$bg = $
|
564 |
-
$bg_accent = $
|
565 |
-
$color = $
|
566 |
-
$color_accent = $
|
567 |
|
568 |
-
|
569 |
-
// $
|
|
|
570 |
|
571 |
$css = array(
|
572 |
'.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked + .tsf-flex-nav-tab-label' => array(
|
@@ -574,7 +579,7 @@ class Admin_Init extends Init {
|
|
574 |
),
|
575 |
'.tsf-tooltip-text-wrap' => array(
|
576 |
"background-color:$bg_accent",
|
577 |
-
"color:$
|
578 |
),
|
579 |
'.tsf-tooltip-arrow:after' => array(
|
580 |
"border-top-color:$bg_accent",
|
@@ -588,10 +593,12 @@ class Admin_Init extends Init {
|
|
588 |
* Applies filters 'the_seo_framework_admin_color_css'
|
589 |
*
|
590 |
* @since 3.0.0
|
591 |
-
* @
|
592 |
-
* @param
|
|
|
|
|
593 |
*/
|
594 |
-
$css = (array) \apply_filters( 'the_seo_framework_admin_color_css', $css, $scheme );
|
595 |
|
596 |
$out = '';
|
597 |
foreach ( $css as $attr => $style )
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
207 |
* @since 2.6.0
|
208 |
* @staticvar array $strings : The l10n strings.
|
209 |
* @since 2.7.0 Added AJAX nonce: 'autodescription-ajax-nonce'
|
210 |
+
* @since 2.8.0 1 : Added input detection: 'hasInput'
|
211 |
+
* 2 : Reworked output.
|
212 |
+
* 3 : Removed unused caching.
|
213 |
+
* 4 : Added dynamic output control.
|
214 |
* @since 2.9.0 Added boolean $returnValue['states']['isSettingsPage']
|
215 |
+
* @since 3.0.4 `descPixelGuideline` has been increased from "920 and 820" to "1820 and 1720" respectively.
|
216 |
*
|
217 |
* @return array $strings The l10n strings.
|
218 |
*/
|
266 |
$ishome = true;
|
267 |
|
268 |
if ( $use_additions ) {
|
269 |
+
$additions = $home_tagline ?: $description;
|
270 |
} else {
|
271 |
$additions = '';
|
272 |
}
|
370 |
'descriptionSeparator' => $description_separator,
|
371 |
'titleLocation' => $title_location,
|
372 |
'titlePixelGuideline' => 600,
|
373 |
+
'descPixelGuideline' => $is_post_edit ? ( $this->is_page() ? 1820 : 1720 ) : 1820,
|
374 |
),
|
375 |
'other' => $this->additional_js_l10n( null, array(), true ),
|
376 |
);
|
556 |
|
557 |
$_colors = $GLOBALS['_wp_admin_css_colors'];
|
558 |
|
559 |
+
if (
|
560 |
+
! isset( $_colors[ $scheme ]->colors )
|
561 |
+
|| ! is_array( $_colors[ $scheme ]->colors )
|
562 |
+
|| count( $_colors[ $scheme ]->colors ) < 4
|
563 |
+
) return '';
|
564 |
|
565 |
+
$colors = $_colors[ $scheme ]->colors;
|
566 |
|
567 |
+
$bg = $colors[0];
|
568 |
+
$bg_accent = $colors[1];
|
569 |
+
$color = $colors[2];
|
570 |
+
$color_accent = $colors[3];
|
571 |
|
572 |
+
// TODO fix this.
|
573 |
+
// $bg_alt_font = '#' . $this->get_relative_fontcolor( $bg );
|
574 |
+
$bg_accent_alt_font = '#' . $this->get_relative_fontcolor( $bg_accent );
|
575 |
|
576 |
$css = array(
|
577 |
'.tsf-flex-nav-tab .tsf-flex-nav-tab-radio:checked + .tsf-flex-nav-tab-label' => array(
|
579 |
),
|
580 |
'.tsf-tooltip-text-wrap' => array(
|
581 |
"background-color:$bg_accent",
|
582 |
+
"color:$bg_accent_alt_font",
|
583 |
),
|
584 |
'.tsf-tooltip-arrow:after' => array(
|
585 |
"border-top-color:$bg_accent",
|
593 |
* Applies filters 'the_seo_framework_admin_color_css'
|
594 |
*
|
595 |
* @since 3.0.0
|
596 |
+
* @since 3.0.4 Now passes $colors.
|
597 |
+
* @param array $css The current styles. Empty it to disable conditional styling.
|
598 |
+
* @param string $scheme The current admin scheme name.
|
599 |
+
* @param array $colors The current admin scheme values.
|
600 |
*/
|
601 |
+
$css = (array) \apply_filters( 'the_seo_framework_admin_color_css', $css, $scheme, $colors );
|
602 |
|
603 |
$out = '';
|
604 |
foreach ( $css as $attr => $style )
|
inc/classes/admin-pages.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -871,18 +871,30 @@ class Admin_Pages extends Inpost {
|
|
871 |
}
|
872 |
|
873 |
/**
|
874 |
-
* Outputs floating title HTML for JavaScript.
|
875 |
*
|
876 |
-
* @since 3.0.
|
877 |
*/
|
878 |
-
public function
|
879 |
?>
|
|
|
880 |
<span id="tsf-title-offset" class="hide-if-no-js"></span>
|
881 |
<span id="tsf-title-placeholder" class="hide-if-no-js"></span>
|
882 |
<span id="tsf-title-placeholder-prefix" class="hide-if-no-js"></span>
|
883 |
<?php
|
884 |
}
|
885 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
886 |
/**
|
887 |
* Outputs character counter wrap for both JavaScript and no-Javascript.
|
888 |
*
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
871 |
}
|
872 |
|
873 |
/**
|
874 |
+
* Outputs floating and reference title HTML elements for JavaScript.
|
875 |
*
|
876 |
+
* @since 3.0.4
|
877 |
*/
|
878 |
+
public function output_js_title_elements() {
|
879 |
?>
|
880 |
+
<span id="tsf-title-reference" style="display:none"></span>
|
881 |
<span id="tsf-title-offset" class="hide-if-no-js"></span>
|
882 |
<span id="tsf-title-placeholder" class="hide-if-no-js"></span>
|
883 |
<span id="tsf-title-placeholder-prefix" class="hide-if-no-js"></span>
|
884 |
<?php
|
885 |
}
|
886 |
|
887 |
+
/**
|
888 |
+
* Outputs reference description HTML elements for JavaScript.
|
889 |
+
*
|
890 |
+
* @since 3.0.4
|
891 |
+
*/
|
892 |
+
public function output_js_description_elements() {
|
893 |
+
?>
|
894 |
+
<span id="tsf-description-reference" style="display:none"></span>
|
895 |
+
<?php
|
896 |
+
}
|
897 |
+
|
898 |
/**
|
899 |
* Outputs character counter wrap for both JavaScript and no-Javascript.
|
900 |
*
|
inc/classes/cache.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/compat.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/core.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -820,6 +820,9 @@ class Core {
|
|
820 |
* @since 2.8.0
|
821 |
* @since 2.9.0 Now adds a little more relative softness based on rel_lum.
|
822 |
* @since 2.9.2 (Typo): Renamed from 'get_relatitve_fontcolor' to 'get_relative_fontcolor'.
|
|
|
|
|
|
|
823 |
*
|
824 |
* @param string $hex The 3 to 6 character RGB hex. '#' prefix is supported.
|
825 |
* @return string The hexadecimal RGB relative font color, without '#' prefix.
|
@@ -839,41 +842,41 @@ class Core {
|
|
839 |
$g = hexdec( $hex[1] );
|
840 |
$b = hexdec( $hex[2] );
|
841 |
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
//*
|
855 |
-
$
|
856 |
-
$
|
857 |
-
$
|
858 |
-
$
|
859 |
-
|
860 |
-
|
861 |
if ( $rel_lum < 0.5 ) {
|
862 |
-
//* Build dark
|
863 |
-
$gr =
|
864 |
-
$gg =
|
865 |
-
$gb =
|
866 |
} else {
|
867 |
-
//* Build light
|
868 |
-
$gr =
|
869 |
-
$gg =
|
870 |
-
$gb =
|
871 |
}
|
872 |
|
873 |
-
//*
|
874 |
-
$retr = str_pad( dechex( $gr ), 2, '0', STR_PAD_LEFT );
|
875 |
-
$retg = str_pad( dechex( $gg ), 2, '0', STR_PAD_LEFT );
|
876 |
-
$retb = str_pad( dechex( $gb ), 2, '0', STR_PAD_LEFT );
|
877 |
|
878 |
return $retr . $retg . $retb;
|
879 |
}
|
@@ -888,8 +891,7 @@ class Core {
|
|
888 |
* @since 2.9.0 : 1. Removed word boundary requirement for strong.
|
889 |
* 2. Now accepts regex count their numeric values in string.
|
890 |
* 3. Fixed header 1~6 calculation.
|
891 |
-
* @since 2.9.3 :
|
892 |
-
* 2. TODO It now uses substr_replace instead of str_replace to prevent duplicated replacements.
|
893 |
* @link https://wordpress.org/plugins/about/readme.txt
|
894 |
*
|
895 |
* @param string $text The text that might contain markdown. Expected to be escaped.
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
820 |
* @since 2.8.0
|
821 |
* @since 2.9.0 Now adds a little more relative softness based on rel_lum.
|
822 |
* @since 2.9.2 (Typo): Renamed from 'get_relatitve_fontcolor' to 'get_relative_fontcolor'.
|
823 |
+
* @since 3.0.4 : Now uses WCAG's relative luminance formula
|
824 |
+
* @link https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast
|
825 |
+
* @link https://www.w3.org/WAI/GL/wiki/Relative_luminance
|
826 |
*
|
827 |
* @param string $hex The 3 to 6 character RGB hex. '#' prefix is supported.
|
828 |
* @return string The hexadecimal RGB relative font color, without '#' prefix.
|
842 |
$g = hexdec( $hex[1] );
|
843 |
$b = hexdec( $hex[2] );
|
844 |
|
845 |
+
$get_relative_luminance = function( $v ) {
|
846 |
+
//= Convert to 0~1 value.
|
847 |
+
$v = $v / 255;
|
848 |
+
|
849 |
+
if ( $v > .03928 ) {
|
850 |
+
$lum = pow( ( $v + .055 ) / 1.055, 2.4 );
|
851 |
+
} else {
|
852 |
+
$lum = $v / 12.92;
|
853 |
+
}
|
854 |
+
return $lum;
|
855 |
+
};
|
856 |
+
|
857 |
+
//* Use sRGB for relative luminance.
|
858 |
+
$sr = 0.2126 * $get_relative_luminance( $r );
|
859 |
+
$sg = 0.7152 * $get_relative_luminance( $g );
|
860 |
+
$sb = 0.0722 * $get_relative_luminance( $b );
|
861 |
+
$rel_lum = ( $sr + $sg + $sb );
|
862 |
+
|
863 |
+
//= Invert colors if they hit luminance boundaries.
|
864 |
if ( $rel_lum < 0.5 ) {
|
865 |
+
//* Build dark greyscale.
|
866 |
+
$gr = 255 - ( $r * 0.2989 / 8 ) * $rel_lum;
|
867 |
+
$gg = 255 - ( $g * 0.5870 / 8 ) * $rel_lum;
|
868 |
+
$gb = 255 - ( $b * 0.1140 / 8 ) * $rel_lum;
|
869 |
} else {
|
870 |
+
//* Build light greyscale.
|
871 |
+
$gr = ( $r * 0.2989 / 8 ) * $rel_lum;
|
872 |
+
$gg = ( $g * 0.5870 / 8 ) * $rel_lum;
|
873 |
+
$gb = ( $b * 0.1140 / 8 ) * $rel_lum;
|
874 |
}
|
875 |
|
876 |
+
//* Build RGB hex.
|
877 |
+
$retr = str_pad( dechex( round( $gr ) ), 2, '0', STR_PAD_LEFT );
|
878 |
+
$retg = str_pad( dechex( round( $gg ) ), 2, '0', STR_PAD_LEFT );
|
879 |
+
$retb = str_pad( dechex( round( $gb ) ), 2, '0', STR_PAD_LEFT );
|
880 |
|
881 |
return $retr . $retg . $retb;
|
882 |
}
|
891 |
* @since 2.9.0 : 1. Removed word boundary requirement for strong.
|
892 |
* 2. Now accepts regex count their numeric values in string.
|
893 |
* 3. Fixed header 1~6 calculation.
|
894 |
+
* @since 2.9.3 : Added $args parameter.
|
|
|
895 |
* @link https://wordpress.org/plugins/about/readme.txt
|
896 |
*
|
897 |
* @param string $text The text that might contain markdown. Expected to be escaped.
|
inc/classes/debug.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -228,7 +228,7 @@ final class Debug implements Debug_Interface {
|
|
228 |
/**
|
229 |
* Filter whether to trigger an error for _doing_it_wrong() calls.
|
230 |
*
|
231 |
-
* @since 3.1.0
|
232 |
*
|
233 |
* @param bool $trigger Whether to trigger the error for _doing_it_wrong() calls. Default true.
|
234 |
*/
|
@@ -280,7 +280,7 @@ final class Debug implements Debug_Interface {
|
|
280 |
/**
|
281 |
* Filter whether to trigger an error for _doing_it_wrong() calls.
|
282 |
*
|
283 |
-
* @since 3.1.0
|
284 |
*
|
285 |
* @param bool $trigger Whether to trigger the error for _doing_it_wrong() calls. Default true.
|
286 |
*/
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
228 |
/**
|
229 |
* Filter whether to trigger an error for _doing_it_wrong() calls.
|
230 |
*
|
231 |
+
* @since WP Core 3.1.0
|
232 |
*
|
233 |
* @param bool $trigger Whether to trigger the error for _doing_it_wrong() calls. Default true.
|
234 |
*/
|
280 |
/**
|
281 |
* Filter whether to trigger an error for _doing_it_wrong() calls.
|
282 |
*
|
283 |
+
* @since WP Core 3.1.0
|
284 |
*
|
285 |
* @param bool $trigger Whether to trigger the error for _doing_it_wrong() calls. Default true.
|
286 |
*/
|
inc/classes/deprecated.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/detect.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -249,7 +249,7 @@ class Detect extends Render {
|
|
249 |
}
|
250 |
}
|
251 |
|
252 |
-
//* No
|
253 |
return false;
|
254 |
}
|
255 |
|
@@ -799,7 +799,7 @@ class Detect extends Render {
|
|
799 |
static $sep_output = null;
|
800 |
static $seplocation_output = null;
|
801 |
|
802 |
-
if ( ! isset( $title_output
|
803 |
//* Initiate caches, set up variables.
|
804 |
|
805 |
if ( '' === $title )
|
@@ -889,12 +889,13 @@ class Detect extends Render {
|
|
889 |
public function post_type_supports_inpost( $post_type = null ) {
|
890 |
|
891 |
if ( isset( $post_type ) && $post_type ) {
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
|
|
898 |
|
899 |
foreach ( $supports as $support ) {
|
900 |
if ( ! \post_type_supports( $post_type, $support ) ) {
|
@@ -922,23 +923,23 @@ class Detect extends Render {
|
|
922 |
*/
|
923 |
public function post_type_supports_custom_seo( $post_type = '' ) {
|
924 |
|
925 |
-
$post_type = $this->get_supported_post_type( true, $post_type );
|
926 |
-
|
927 |
-
if ( empty( $post_type ) )
|
928 |
-
return false;
|
929 |
-
|
930 |
static $supported = array();
|
931 |
|
932 |
if ( isset( $supported[ $post_type ] ) )
|
933 |
return $supported[ $post_type ];
|
934 |
|
|
|
|
|
|
|
|
|
|
|
935 |
/**
|
936 |
* We now support all posts that allow a title, content editor and excerpt.
|
937 |
* To ease the flow, we have our basic list to check first.
|
938 |
*
|
939 |
* @since 2.3.5
|
940 |
*/
|
941 |
-
if (
|
942 |
return $supported[ $post_type ] = true;
|
943 |
|
944 |
return $supported[ $post_type ] = false;
|
@@ -991,7 +992,7 @@ class Detect extends Render {
|
|
991 |
* Applies filters 'the_seo_framework_supported_post_type' : string
|
992 |
* @since 2.6.2
|
993 |
*
|
994 |
-
* @param string $post_type The supported post type. Is boolean false if not supported.
|
995 |
* @param string $post_type_evaluated The evaluated post type.
|
996 |
*/
|
997 |
$post_type = (string) \apply_filters( 'the_seo_framework_supported_post_type', $post_type, $post_type_evaluated );
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
249 |
}
|
250 |
}
|
251 |
|
252 |
+
//* No globals, constant, function, or class found to exist
|
253 |
return false;
|
254 |
}
|
255 |
|
799 |
static $sep_output = null;
|
800 |
static $seplocation_output = null;
|
801 |
|
802 |
+
if ( ! isset( $title_output, $sep_output, $seplocation_output ) ) {
|
803 |
//* Initiate caches, set up variables.
|
804 |
|
805 |
if ( '' === $title )
|
889 |
public function post_type_supports_inpost( $post_type = null ) {
|
890 |
|
891 |
if ( isset( $post_type ) && $post_type ) {
|
892 |
+
/**
|
893 |
+
* Applies filters 'the_seo_framework_custom_post_type_support'
|
894 |
+
* @since 2.3.5
|
895 |
+
* @since 3.0.4 Default parameter now is `[]` instead of `['title','editor']`.
|
896 |
+
* @param array $supports The required post type support, like 'title', 'editor'.
|
897 |
+
*/
|
898 |
+
$supports = (array) \apply_filters( 'the_seo_framework_custom_post_type_support', array() );
|
899 |
|
900 |
foreach ( $supports as $support ) {
|
901 |
if ( ! \post_type_supports( $post_type, $support ) ) {
|
923 |
*/
|
924 |
public function post_type_supports_custom_seo( $post_type = '' ) {
|
925 |
|
|
|
|
|
|
|
|
|
|
|
926 |
static $supported = array();
|
927 |
|
928 |
if ( isset( $supported[ $post_type ] ) )
|
929 |
return $supported[ $post_type ];
|
930 |
|
931 |
+
$post_type = $this->get_supported_post_type( true, $post_type );
|
932 |
+
|
933 |
+
if ( empty( $post_type ) )
|
934 |
+
return $supported[ $post_type ] = false;
|
935 |
+
|
936 |
/**
|
937 |
* We now support all posts that allow a title, content editor and excerpt.
|
938 |
* To ease the flow, we have our basic list to check first.
|
939 |
*
|
940 |
* @since 2.3.5
|
941 |
*/
|
942 |
+
if ( $this->post_type_supports_inpost( $post_type ) )
|
943 |
return $supported[ $post_type ] = true;
|
944 |
|
945 |
return $supported[ $post_type ] = false;
|
992 |
* Applies filters 'the_seo_framework_supported_post_type' : string
|
993 |
* @since 2.6.2
|
994 |
*
|
995 |
+
* @param string|bool $post_type The supported post type. Is boolean false if not supported.
|
996 |
* @param string $post_type_evaluated The evaluated post type.
|
997 |
*/
|
998 |
$post_type = (string) \apply_filters( 'the_seo_framework_supported_post_type', $post_type, $post_type_evaluated );
|
inc/classes/doing-it-right.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -207,7 +207,7 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
207 |
|
208 |
if ( $id ) {
|
209 |
//* Everything but inline-save-tax action.
|
210 |
-
\add_filter( 'manage_' . $id . '_columns', array( $this, 'add_column' ), 1 );
|
211 |
|
212 |
/**
|
213 |
* Always load pages and posts.
|
@@ -217,11 +217,11 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
217 |
\add_action( 'manage_pages_custom_column', array( $this, 'seo_bar_ajax' ), 1, 3 );
|
218 |
} elseif ( $taxonomy ) {
|
219 |
//* Action: inline-save-tax does not POST screen.
|
220 |
-
\add_filter( 'manage_edit-' . $taxonomy . '_columns', array( $this, 'add_column' ), 1 );
|
221 |
}
|
222 |
|
223 |
if ( $taxonomy )
|
224 |
-
\
|
225 |
|
226 |
} else {
|
227 |
$id = isset( $screen->id ) ? $screen->id : '';
|
@@ -232,7 +232,7 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
232 |
$taxonomy = isset( $screen->taxonomy ) ? $screen->taxonomy : '';
|
233 |
|
234 |
if ( $taxonomy )
|
235 |
-
\
|
236 |
|
237 |
/**
|
238 |
* Always load pages and posts.
|
@@ -306,7 +306,7 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
306 |
}
|
307 |
|
308 |
/**
|
309 |
-
*
|
310 |
*
|
311 |
* @since 2.6.0
|
312 |
* @staticvar string $type
|
@@ -316,6 +316,34 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
316 |
* @param string $tax_id this is empty : If it's a taxonomy, this is the taxonomy id
|
317 |
*/
|
318 |
public function seo_bar( $column, $post_id, $tax_id = '' ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
319 |
|
320 |
static $type = null;
|
321 |
|
@@ -340,12 +368,13 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
340 |
}
|
341 |
|
342 |
if ( 'tsf-seo-bar-wrap' === $column )
|
343 |
-
$this->post_status( $post_id, $type
|
344 |
|
|
|
345 |
}
|
346 |
|
347 |
/**
|
348 |
-
*
|
349 |
*
|
350 |
* @since 2.1.9
|
351 |
*
|
@@ -354,6 +383,33 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
354 |
* @param string $tax_id this is empty : If it's a taxonomy, this is the taxonomy id
|
355 |
*/
|
356 |
public function seo_bar_ajax( $column, $post_id, $tax_id = '' ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
357 |
|
358 |
$is_term = false;
|
359 |
|
@@ -372,8 +428,10 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
372 |
|
373 |
$ajax_id = $column . $post_id;
|
374 |
|
375 |
-
$this->post_status_special( $context, '?', 'unknown', $is_term, $ajax_id
|
376 |
}
|
|
|
|
|
377 |
}
|
378 |
|
379 |
/**
|
@@ -981,6 +1039,8 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
981 |
* Description Length notices.
|
982 |
*
|
983 |
* @since 2.6.0
|
|
|
|
|
984 |
*
|
985 |
* @param int $desc_len The Title length
|
986 |
* @param string $class The current color class.
|
@@ -1006,12 +1066,12 @@ class Doing_It_Right extends Generate_Ldjson {
|
|
1006 |
|
1007 |
// Don't make it okay if it's already bad.
|
1008 |
$class = $bad === $class ? $class : $okay;
|
1009 |
-
} elseif ( $desc_len >
|
1010 |
$notice = $i18n['length_too_long'];
|
1011 |
|
1012 |
// Don't make it okay if it's already bad.
|
1013 |
$class = $bad === $class ? $class : $okay;
|
1014 |
-
} elseif ( $desc_len >=
|
1015 |
$notice = $i18n['length_far_too_long'];
|
1016 |
$class = $bad;
|
1017 |
} else {
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
207 |
|
208 |
if ( $id ) {
|
209 |
//* Everything but inline-save-tax action.
|
210 |
+
\add_filter( 'manage_' . $id . '_columns', array( $this, 'add_column' ), 10, 1 );
|
211 |
|
212 |
/**
|
213 |
* Always load pages and posts.
|
217 |
\add_action( 'manage_pages_custom_column', array( $this, 'seo_bar_ajax' ), 1, 3 );
|
218 |
} elseif ( $taxonomy ) {
|
219 |
//* Action: inline-save-tax does not POST screen.
|
220 |
+
\add_filter( 'manage_edit-' . $taxonomy . '_columns', array( $this, 'add_column' ), 1, 1 );
|
221 |
}
|
222 |
|
223 |
if ( $taxonomy )
|
224 |
+
\add_filter( 'manage_' . $taxonomy . '_custom_column', array( $this, 'get_taxonomy_seo_bar_ajax' ), 1, 3 );
|
225 |
|
226 |
} else {
|
227 |
$id = isset( $screen->id ) ? $screen->id : '';
|
232 |
$taxonomy = isset( $screen->taxonomy ) ? $screen->taxonomy : '';
|
233 |
|
234 |
if ( $taxonomy )
|
235 |
+
\add_filter( 'manage_' . $taxonomy . '_custom_column', array( $this, 'get_taxonomy_seo_bar' ), 1, 3 );
|
236 |
|
237 |
/**
|
238 |
* Always load pages and posts.
|
306 |
}
|
307 |
|
308 |
/**
|
309 |
+
* Echos the SEO Bar.
|
310 |
*
|
311 |
* @since 2.6.0
|
312 |
* @staticvar string $type
|
316 |
* @param string $tax_id this is empty : If it's a taxonomy, this is the taxonomy id
|
317 |
*/
|
318 |
public function seo_bar( $column, $post_id, $tax_id = '' ) {
|
319 |
+
echo $this->get_seo_bar( $column, $post_id, $tax_id );
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Returns the SEO Bar for taxonomies.
|
324 |
+
*
|
325 |
+
* @since 3.0.4
|
326 |
+
* @staticvar string $type
|
327 |
+
*
|
328 |
+
* @param string $string The current column string.
|
329 |
+
* @param string $column_name Name of the column.
|
330 |
+
* @param string $term_id Term ID.
|
331 |
+
*/
|
332 |
+
public function get_taxonomy_seo_bar( $string, $column_name, $term_id ) {
|
333 |
+
return $string . $this->get_seo_bar( '', $column_name, $term_id );
|
334 |
+
}
|
335 |
+
|
336 |
+
/**
|
337 |
+
* Returns the SEO Bar.
|
338 |
+
*
|
339 |
+
* @since 3.0.4
|
340 |
+
* @staticvar string $type
|
341 |
+
*
|
342 |
+
* @param string $column the current column : If it's a taxonomy, this is empty
|
343 |
+
* @param int $post_id the post id : If it's a taxonomy, this is the column name
|
344 |
+
* @param string $tax_id this is empty : If it's a taxonomy, this is the taxonomy id
|
345 |
+
*/
|
346 |
+
public function get_seo_bar( $column, $post_id, $tax_id = '' ) {
|
347 |
|
348 |
static $type = null;
|
349 |
|
368 |
}
|
369 |
|
370 |
if ( 'tsf-seo-bar-wrap' === $column )
|
371 |
+
return $this->post_status( $post_id, $type );
|
372 |
|
373 |
+
return '';
|
374 |
}
|
375 |
|
376 |
/**
|
377 |
+
* Echos the SEO column in edit screens on AJAX.
|
378 |
*
|
379 |
* @since 2.1.9
|
380 |
*
|
383 |
* @param string $tax_id this is empty : If it's a taxonomy, this is the taxonomy id
|
384 |
*/
|
385 |
public function seo_bar_ajax( $column, $post_id, $tax_id = '' ) {
|
386 |
+
echo $this->get_seo_bar_ajax( $column, $post_id, $tax_id );
|
387 |
+
}
|
388 |
+
|
389 |
+
/**
|
390 |
+
* Returns the SEO Bar for taxonomies on AJAX.
|
391 |
+
*
|
392 |
+
* @since 3.0.4
|
393 |
+
* @staticvar string $type
|
394 |
+
*
|
395 |
+
* @param string $string The current column string.
|
396 |
+
* @param string $column_name Name of the column.
|
397 |
+
* @param string $term_id Term ID.
|
398 |
+
*/
|
399 |
+
public function get_taxonomy_seo_bar_ajax( $string, $column_name, $term_id ) {
|
400 |
+
return $string . $this->get_seo_bar_ajax( '', $column_name, $term_id );
|
401 |
+
}
|
402 |
+
|
403 |
+
/**
|
404 |
+
* Returns the SEO column in edit screens on AJAX.
|
405 |
+
*
|
406 |
+
* @since 3.0.4
|
407 |
+
*
|
408 |
+
* @param string $column the current column : If it's a taxonomy, this is empty
|
409 |
+
* @param int $post_id the post id : If it's a taxonomy, this is the column name
|
410 |
+
* @param string $tax_id this is empty : If it's a taxonomy, this is the taxonomy id
|
411 |
+
*/
|
412 |
+
public function get_seo_bar_ajax( $column, $post_id, $tax_id = '' ) {
|
413 |
|
414 |
$is_term = false;
|
415 |
|
428 |
|
429 |
$ajax_id = $column . $post_id;
|
430 |
|
431 |
+
return $this->post_status_special( $context, '?', 'unknown', $is_term, $ajax_id );
|
432 |
}
|
433 |
+
|
434 |
+
return '';
|
435 |
}
|
436 |
|
437 |
/**
|
1039 |
* Description Length notices.
|
1040 |
*
|
1041 |
* @since 2.6.0
|
1042 |
+
* @since 3.0.4 : 1. Threshold "too long" has been increased from 155 to 300.
|
1043 |
+
* 2. Threshold "far too long" has been increased to 330 from 175.
|
1044 |
*
|
1045 |
* @param int $desc_len The Title length
|
1046 |
* @param string $class The current color class.
|
1066 |
|
1067 |
// Don't make it okay if it's already bad.
|
1068 |
$class = $bad === $class ? $class : $okay;
|
1069 |
+
} elseif ( $desc_len > 300 && $desc_len < 330 ) {
|
1070 |
$notice = $i18n['length_too_long'];
|
1071 |
|
1072 |
// Don't make it okay if it's already bad.
|
1073 |
$class = $bad === $class ? $class : $okay;
|
1074 |
+
} elseif ( $desc_len >= 330 ) {
|
1075 |
$notice = $i18n['length_far_too_long'];
|
1076 |
$class = $bad;
|
1077 |
} else {
|
inc/classes/feed.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/generate-description.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -39,6 +39,87 @@ class Generate_Description extends Generate {
|
|
39 |
parent::__construct();
|
40 |
}
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
/**
|
43 |
* Creates description. Base function.
|
44 |
*
|
@@ -107,7 +188,10 @@ class Generate_Description extends Generate {
|
|
107 |
if ( \apply_filters( 'the_seo_framework_do_shortcodes_in_description', false ) )
|
108 |
$description = \do_shortcode( $description );
|
109 |
|
110 |
-
|
|
|
|
|
|
|
111 |
}
|
112 |
|
113 |
/**
|
@@ -130,6 +214,7 @@ class Generate_Description extends Generate {
|
|
130 |
'is_home' => false,
|
131 |
'get_custom_field' => true,
|
132 |
'social' => false,
|
|
|
133 |
);
|
134 |
|
135 |
/**
|
@@ -139,9 +224,11 @@ class Generate_Description extends Generate {
|
|
139 |
* @param bool $is_home We're generating for the home page.
|
140 |
* @param bool $get_custom_field Do not fetch custom title when false.
|
141 |
* @param bool $social Generate Social Description when true.
|
|
|
142 |
* }
|
143 |
*
|
144 |
* @since 2.5.0
|
|
|
145 |
*
|
146 |
* @param array $defaults The description defaults.
|
147 |
* @param array $args The input args.
|
@@ -159,6 +246,7 @@ class Generate_Description extends Generate {
|
|
159 |
$args['is_home'] = isset( $args['is_home'] ) ? (bool) $args['is_home'] : $defaults['is_home'];
|
160 |
$args['get_custom_field'] = isset( $args['get_custom_field'] ) ? (bool) $args['get_custom_field'] : $defaults['get_custom_field'];
|
161 |
$args['social'] = isset( $args['social'] ) ? (bool) $args['social'] : $defaults['social'];
|
|
|
162 |
|
163 |
return $args;
|
164 |
}
|
@@ -473,6 +561,7 @@ class Generate_Description extends Generate {
|
|
473 |
* Returns the generated description excerpt array for the normal description tag.
|
474 |
*
|
475 |
* @since 2.8.0
|
|
|
476 |
*
|
477 |
* @param int $id The post/term ID.
|
478 |
* @param bool|object The term object.
|
@@ -506,12 +595,13 @@ class Generate_Description extends Generate {
|
|
506 |
* Determine if the title is far too long (72+, rather than 75 in the Title guidelines).
|
507 |
* If this is the case, trim the "title on blogname" part from the description.
|
508 |
* @since 2.8.0
|
|
|
509 |
*/
|
510 |
if ( $additions_length > 71 ) {
|
511 |
-
$max_char_length =
|
512 |
$trim = true;
|
513 |
} else {
|
514 |
-
$max_char_length =
|
515 |
$trim = false;
|
516 |
}
|
517 |
|
@@ -761,7 +851,7 @@ class Generate_Description extends Generate {
|
|
761 |
$id = $this->get_the_real_ID();
|
762 |
|
763 |
if ( $page_on_front || $this->is_front_page_by_id( $id ) ) :
|
764 |
-
$title = $this->
|
765 |
else :
|
766 |
/**
|
767 |
* No need to parse these when generating social description.
|
@@ -815,6 +905,7 @@ class Generate_Description extends Generate {
|
|
815 |
*
|
816 |
* @since 2.3.4
|
817 |
* @since 2.8.2 Now no longer escapes excerpt by accident in processing, preventing "too short" output.
|
|
|
818 |
* @staticvar array $excerpt_cache Holds the excerpt
|
819 |
* @staticvar array $excerptlength_cache Holds the excerpt length
|
820 |
*
|
@@ -823,7 +914,7 @@ class Generate_Description extends Generate {
|
|
823 |
* @param int $max_char_length The maximum excerpt char length.
|
824 |
* @return string $excerpt The excerpt, not escaped.
|
825 |
*/
|
826 |
-
public function generate_excerpt( $page_id, $term = '', $max_char_length =
|
827 |
|
828 |
static $excerpt_cache = array();
|
829 |
static $excerptlength_cache = array();
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
39 |
parent::__construct();
|
40 |
}
|
41 |
|
42 |
+
/**
|
43 |
+
* Returns the Twitter meta description. Falls back to Open Graph description.
|
44 |
+
*
|
45 |
+
* @since 3.0.4
|
46 |
+
* @uses $this->get_open_graph_description()
|
47 |
+
*
|
48 |
+
* @param int|null $id The post or term ID. Falls back to queried ID.
|
49 |
+
* @param bool $escape Whether to escape the description.
|
50 |
+
* @return string Twitter Description.
|
51 |
+
*/
|
52 |
+
public function get_twitter_description( $id = null, $escape = true ) {
|
53 |
+
|
54 |
+
if ( is_null( $id ) )
|
55 |
+
$id = $this->get_the_real_ID();
|
56 |
+
|
57 |
+
$desc = $this->get_custom_field( '_twitter_description', $id )
|
58 |
+
?: $this->get_open_graph_description( $id, false );
|
59 |
+
|
60 |
+
return $escape ? $this->escape_description( $desc ) : $desc;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Returns the Open Graph meta description. Falls back to meta description.
|
65 |
+
*
|
66 |
+
* @since 3.0.4
|
67 |
+
* @uses $this->get_generated_open_graph_description()
|
68 |
+
*
|
69 |
+
* @param int|null $id The post or term ID. Falls back to queried ID.
|
70 |
+
* @param bool $escape Whether to escape the description.
|
71 |
+
* @return string Open Graph Description.
|
72 |
+
*/
|
73 |
+
public function get_open_graph_description( $id = null, $escape = true ) {
|
74 |
+
|
75 |
+
if ( is_null( $id ) )
|
76 |
+
$id = $this->get_the_real_ID();
|
77 |
+
|
78 |
+
$desc = $this->get_custom_field( '_open_graph_description', $id )
|
79 |
+
?: $this->get_generated_open_graph_description( $id, false );
|
80 |
+
|
81 |
+
return $escape ? $this->escape_description( $desc ) : $desc;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Returns the autogenerated open graph meta description. Falls back to meta description.
|
86 |
+
*
|
87 |
+
* @since 3.0.4
|
88 |
+
* @uses $this->get_generated_open_graph_description()
|
89 |
+
*
|
90 |
+
* @param int|null $id The post or term ID. Falls back to queried ID.
|
91 |
+
* @param bool $escape Whether to escape the description.
|
92 |
+
* @return string Autogenerated Twitter Description.
|
93 |
+
*/
|
94 |
+
public function get_generated_twitter_description( $id = null, $escape = true ) {
|
95 |
+
return $this->get_generated_open_graph_description( $id, $escape );
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Returns the autogenerated open graph meta description. Falls back to meta description.
|
100 |
+
*
|
101 |
+
* @since 3.0.4
|
102 |
+
* @uses $this->generate_description()
|
103 |
+
* @staticvar array $cache
|
104 |
+
*
|
105 |
+
* @param int|null $id The post or term ID. Falls back to queried ID.
|
106 |
+
* @param bool $escape Whether to escape the description.
|
107 |
+
* @return string Autogenerated Open Graph Description.
|
108 |
+
*/
|
109 |
+
public function get_generated_open_graph_description( $id = null, $escape = true ) {
|
110 |
+
|
111 |
+
if ( is_null( $id ) )
|
112 |
+
$id = $this->get_the_real_ID();
|
113 |
+
|
114 |
+
static $cache = array();
|
115 |
+
|
116 |
+
$desc = isset( $cache[ $id ] )
|
117 |
+
? $cache[ $id ]
|
118 |
+
: $cache[ $id ] = $this->generate_description( '', array( 'id' => $id, 'social' => true, 'escape' => false ) );
|
119 |
+
|
120 |
+
return $escape ? $this->escape_description( $desc ) : $desc;
|
121 |
+
}
|
122 |
+
|
123 |
/**
|
124 |
* Creates description. Base function.
|
125 |
*
|
188 |
if ( \apply_filters( 'the_seo_framework_do_shortcodes_in_description', false ) )
|
189 |
$description = \do_shortcode( $description );
|
190 |
|
191 |
+
if ( $args['escape'] )
|
192 |
+
$description = $this->escape_description( $description );
|
193 |
+
|
194 |
+
return $description;
|
195 |
}
|
196 |
|
197 |
/**
|
214 |
'is_home' => false,
|
215 |
'get_custom_field' => true,
|
216 |
'social' => false,
|
217 |
+
'escape' => true,
|
218 |
);
|
219 |
|
220 |
/**
|
224 |
* @param bool $is_home We're generating for the home page.
|
225 |
* @param bool $get_custom_field Do not fetch custom title when false.
|
226 |
* @param bool $social Generate Social Description when true.
|
227 |
+
* @param bool $escape Whether to escape the description.
|
228 |
* }
|
229 |
*
|
230 |
* @since 2.5.0
|
231 |
+
* @since 3.0.4 Added escape parameter.
|
232 |
*
|
233 |
* @param array $defaults The description defaults.
|
234 |
* @param array $args The input args.
|
246 |
$args['is_home'] = isset( $args['is_home'] ) ? (bool) $args['is_home'] : $defaults['is_home'];
|
247 |
$args['get_custom_field'] = isset( $args['get_custom_field'] ) ? (bool) $args['get_custom_field'] : $defaults['get_custom_field'];
|
248 |
$args['social'] = isset( $args['social'] ) ? (bool) $args['social'] : $defaults['social'];
|
249 |
+
$args['escape'] = isset( $args['escape'] ) ? (bool) $args['escape'] : $defaults['escape'];
|
250 |
|
251 |
return $args;
|
252 |
}
|
561 |
* Returns the generated description excerpt array for the normal description tag.
|
562 |
*
|
563 |
* @since 2.8.0
|
564 |
+
* @since 3.0.4 Now uses 300 characters instead of 155.
|
565 |
*
|
566 |
* @param int $id The post/term ID.
|
567 |
* @param bool|object The term object.
|
595 |
* Determine if the title is far too long (72+, rather than 75 in the Title guidelines).
|
596 |
* If this is the case, trim the "title on blogname" part from the description.
|
597 |
* @since 2.8.0
|
598 |
+
* @since 3.0.4 Increased to basis 300, from 155.
|
599 |
*/
|
600 |
if ( $additions_length > 71 ) {
|
601 |
+
$max_char_length = 300;
|
602 |
$trim = true;
|
603 |
} else {
|
604 |
+
$max_char_length = 300 - $additions_length;
|
605 |
$trim = false;
|
606 |
}
|
607 |
|
851 |
$id = $this->get_the_real_ID();
|
852 |
|
853 |
if ( $page_on_front || $this->is_front_page_by_id( $id ) ) :
|
854 |
+
$title = $this->get_home_page_tagline();
|
855 |
else :
|
856 |
/**
|
857 |
* No need to parse these when generating social description.
|
905 |
*
|
906 |
* @since 2.3.4
|
907 |
* @since 2.8.2 Now no longer escapes excerpt by accident in processing, preventing "too short" output.
|
908 |
+
* @since 3.0.4 The default $max_char_length has been increased from 155 to 300.
|
909 |
* @staticvar array $excerpt_cache Holds the excerpt
|
910 |
* @staticvar array $excerptlength_cache Holds the excerpt length
|
911 |
*
|
914 |
* @param int $max_char_length The maximum excerpt char length.
|
915 |
* @return string $excerpt The excerpt, not escaped.
|
916 |
*/
|
917 |
+
public function generate_excerpt( $page_id, $term = '', $max_char_length = 300 ) {
|
918 |
|
919 |
static $excerpt_cache = array();
|
920 |
static $excerptlength_cache = array();
|
inc/classes/generate-image.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -118,6 +118,7 @@ class Generate_Image extends Generate_Url {
|
|
118 |
/**
|
119 |
* Applies filters 'the_seo_framework_ld_json_breadcrumb_image' : string
|
120 |
* @since 2.7.0
|
|
|
121 |
* @param string $image The current image.
|
122 |
* @param int $id The page, post, product or term ID.
|
123 |
* @param bool $singular Whether the ID is singular.
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
118 |
/**
|
119 |
* Applies filters 'the_seo_framework_ld_json_breadcrumb_image' : string
|
120 |
* @since 2.7.0
|
121 |
+
* TODO deprecate filter and exchange with a suiting name.
|
122 |
* @param string $image The current image.
|
123 |
* @param int $id The page, post, product or term ID.
|
124 |
* @param bool $singular Whether the ID is singular.
|
inc/classes/generate-ldjson.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -447,7 +447,7 @@ class Generate_Ldjson extends Generate_Image {
|
|
447 |
$taxonomies = $this->get_hierarchical_taxonomies_as( 'names', \get_post_type( $post_id ) );
|
448 |
|
449 |
/**
|
450 |
-
* Applies filters '
|
451 |
*
|
452 |
* @since 3.0.0
|
453 |
* @param array|string $taxonomies The assigned hierarchical taxonomies.
|
@@ -471,7 +471,7 @@ class Generate_Ldjson extends Generate_Image {
|
|
471 |
* Applies filter 'the_seo_framework_ld_json_breadcrumb_terms' : array
|
472 |
* @since 2.8.0
|
473 |
*
|
474 |
-
* @param array $terms The
|
475 |
* @param int $post_id The current Post ID.
|
476 |
* @param string $taxonomy The current taxonomy (either category or product_cat).
|
477 |
*/
|
@@ -865,6 +865,7 @@ class Generate_Ldjson extends Generate_Image {
|
|
865 |
/**
|
866 |
* Applies filters the_seo_framework_json_breadcrumb_output
|
867 |
* @since 2.4.2
|
|
|
868 |
*/
|
869 |
$filter = (bool) \apply_filters( 'the_seo_framework_json_breadcrumb_output', true );
|
870 |
$option = $this->is_option_checked( 'ld_json_breadcrumbs' );
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
447 |
$taxonomies = $this->get_hierarchical_taxonomies_as( 'names', \get_post_type( $post_id ) );
|
448 |
|
449 |
/**
|
450 |
+
* Applies filters 'the_seo_framework_ld_json_breadcrumb_taxonomies'
|
451 |
*
|
452 |
* @since 3.0.0
|
453 |
* @param array|string $taxonomies The assigned hierarchical taxonomies.
|
471 |
* Applies filter 'the_seo_framework_ld_json_breadcrumb_terms' : array
|
472 |
* @since 2.8.0
|
473 |
*
|
474 |
+
* @param array $terms The candidate terms.
|
475 |
* @param int $post_id The current Post ID.
|
476 |
* @param string $taxonomy The current taxonomy (either category or product_cat).
|
477 |
*/
|
865 |
/**
|
866 |
* Applies filters the_seo_framework_json_breadcrumb_output
|
867 |
* @since 2.4.2
|
868 |
+
* @param bool $output
|
869 |
*/
|
870 |
$filter = (bool) \apply_filters( 'the_seo_framework_json_breadcrumb_output', true );
|
871 |
$option = $this->is_option_checked( 'ld_json_breadcrumbs' );
|
inc/classes/generate-title.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -41,6 +41,87 @@ class Generate_Title extends Generate_Description {
|
|
41 |
parent::__construct();
|
42 |
}
|
43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
/**
|
45 |
* Gets the title. Main function.
|
46 |
* Always use this function for the title unless you're absolutely sure what you're doing.
|
@@ -584,6 +665,7 @@ class Generate_Title extends Generate_Description {
|
|
584 |
* Generate the title based on conditions for the home page.
|
585 |
*
|
586 |
* @since 2.3.4
|
|
|
587 |
* @access private
|
588 |
*
|
589 |
* @param bool $get_custom_field Fetch Title from Custom Fields.
|
@@ -592,8 +674,8 @@ class Generate_Title extends Generate_Description {
|
|
592 |
* @param bool $escape Parse Title through saninitation calls.
|
593 |
* @param bool $get_option Whether to fetch the SEO Settings option.
|
594 |
* @return array {
|
595 |
-
* 'title' => (string) $title : The Generated Title
|
596 |
-
* 'blogname' => (string) $blogname : The Generated Blogname
|
597 |
* 'add_tagline' => (bool) $add_tagline : Whether to add the tagline
|
598 |
* 'seplocation' => (string) $seplocation : The Separator Location
|
599 |
* }
|
@@ -601,22 +683,7 @@ class Generate_Title extends Generate_Description {
|
|
601 |
public function generate_home_title( $get_custom_field = true, $seplocation = '', $deprecated = '', $escape = true, $get_option = true ) {
|
602 |
|
603 |
$add_tagline = $this->home_page_add_title_tagline();
|
604 |
-
|
605 |
-
/**
|
606 |
-
* Add tagline or not based on option
|
607 |
-
*
|
608 |
-
* @since 2.2.2
|
609 |
-
*/
|
610 |
-
if ( $add_tagline ) {
|
611 |
-
/**
|
612 |
-
* Tagline based on option.
|
613 |
-
* @since 2.3.8
|
614 |
-
*/
|
615 |
-
$blogname = $this->get_option( 'homepage_title_tagline' );
|
616 |
-
$blogname = $blogname ? $blogname : $this->get_blogdescription();
|
617 |
-
} else {
|
618 |
-
$blogname = '';
|
619 |
-
}
|
620 |
|
621 |
/**
|
622 |
* Render from function
|
@@ -638,17 +705,17 @@ class Generate_Title extends Generate_Description {
|
|
638 |
);
|
639 |
|
640 |
/**
|
641 |
-
* Applies filters 'the_seo_framework_home_title_args'
|
642 |
-
* @param string $title : NOTE: This is the blogname
|
643 |
-
* @param string $blogname : NOTE: This is the tagline.
|
644 |
-
* @param bool $add_tagline
|
645 |
-
* @param string $seplocation : 'left' or 'right'
|
646 |
-
* }
|
647 |
*
|
648 |
* @since 2.8.0
|
649 |
*
|
650 |
* @param array $args
|
651 |
-
* @param array $defaults
|
|
|
|
|
|
|
|
|
|
|
652 |
*/
|
653 |
$args = (array) \apply_filters( 'the_seo_framework_home_title_args', array(), $defaults );
|
654 |
|
@@ -799,12 +866,15 @@ class Generate_Title extends Generate_Description {
|
|
799 |
/**
|
800 |
* Gets the archive Title, including filter. Also works in admin.
|
801 |
*
|
802 |
-
* @NOTE Taken from WordPress core. Altered to work
|
|
|
803 |
*
|
804 |
* @since 2.6.0
|
805 |
* @since 2.9.2 : Added WordPress core filter 'get_the_archive_title'
|
|
|
|
|
806 |
*
|
807 |
-
* @param
|
808 |
* @param array $args The Title arguments.
|
809 |
* @return string The Archive Title, not escaped.
|
810 |
*/
|
@@ -904,11 +974,12 @@ class Generate_Title extends Generate_Description {
|
|
904 |
/**
|
905 |
* Filters the archive title.
|
906 |
*
|
907 |
-
* @since
|
908 |
*
|
909 |
* @param string $title Archive title to be displayed.
|
|
|
910 |
*/
|
911 |
-
return \apply_filters( '
|
912 |
}
|
913 |
|
914 |
/**
|
@@ -932,7 +1003,7 @@ class Generate_Title extends Generate_Description {
|
|
932 |
/**
|
933 |
* Filter the category archive page title.
|
934 |
*
|
935 |
-
* @since 2.0.10
|
936 |
*
|
937 |
* @param string $term_name Category name for archive being displayed.
|
938 |
*/
|
@@ -941,7 +1012,7 @@ class Generate_Title extends Generate_Description {
|
|
941 |
/**
|
942 |
* Filter the tag archive page title.
|
943 |
*
|
944 |
-
* @since 2.3.0
|
945 |
*
|
946 |
* @param string $term_name Tag name for archive being displayed.
|
947 |
*/
|
@@ -950,7 +1021,7 @@ class Generate_Title extends Generate_Description {
|
|
950 |
/**
|
951 |
* Filter the custom taxonomy archive page title.
|
952 |
*
|
953 |
-
* @since 3.1.0
|
954 |
*
|
955 |
* @param string $term_name Term name for archive being displayed.
|
956 |
*/
|
@@ -1376,14 +1447,27 @@ class Generate_Title extends Generate_Description {
|
|
1376 |
return $title;
|
1377 |
}
|
1378 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1379 |
/**
|
1380 |
* Determines whether to add home page tagline.
|
1381 |
*
|
1382 |
* @since 2.6.0
|
|
|
1383 |
*
|
1384 |
* @return bool
|
1385 |
*/
|
1386 |
public function home_page_add_title_tagline() {
|
1387 |
-
return $this->is_option_checked( 'homepage_tagline' );
|
1388 |
}
|
1389 |
}
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
41 |
parent::__construct();
|
42 |
}
|
43 |
|
44 |
+
/**
|
45 |
+
* Returns the Twitter meta title. Falls back to Open Graph title.
|
46 |
+
*
|
47 |
+
* @since 3.0.4
|
48 |
+
* @uses $this->get_open_graph_title()
|
49 |
+
*
|
50 |
+
* @param int|null $id The post or term ID. Falls back to queried ID.
|
51 |
+
* @param bool $escape Whether to escape the title.
|
52 |
+
* @return string Twitter Title.
|
53 |
+
*/
|
54 |
+
public function get_twitter_title( $id = null, $escape = true ) {
|
55 |
+
|
56 |
+
if ( is_null( $id ) )
|
57 |
+
$id = $this->get_the_real_ID();
|
58 |
+
|
59 |
+
$title = $this->get_custom_field( '_twitter_title', $id )
|
60 |
+
?: $this->get_open_graph_title( $id, false );
|
61 |
+
|
62 |
+
return $escape ? $this->escape_title( $title ) : $title;
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Returns the Open Graph meta title. Falls back to meta title.
|
67 |
+
*
|
68 |
+
* @since 3.0.4
|
69 |
+
* @uses $this->get_generated_open_graph_title()
|
70 |
+
*
|
71 |
+
* @param int|null $id The post or term ID. Falls back to queried ID.
|
72 |
+
* @param bool $escape Whether to escape the title.
|
73 |
+
* @return string Open Graph Title.
|
74 |
+
*/
|
75 |
+
public function get_open_graph_title( $id = null, $escape = true ) {
|
76 |
+
|
77 |
+
if ( is_null( $id ) )
|
78 |
+
$id = $this->get_the_real_ID();
|
79 |
+
|
80 |
+
$title = $this->get_custom_field( '_open_graph_title', $id )
|
81 |
+
?: $this->get_generated_open_graph_title( $id, false );
|
82 |
+
|
83 |
+
return $escape ? $this->escape_title( $title ) : $title;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Returns the autogenerated open graph meta title. Falls back to meta title.
|
88 |
+
*
|
89 |
+
* @since 3.0.4
|
90 |
+
* @uses $this->get_generated_open_graph_title()
|
91 |
+
*
|
92 |
+
* @param int|null $id The post or term ID. Falls back to queried ID.
|
93 |
+
* @param bool $escape Whether to escape the title.
|
94 |
+
* @return string Autogenerated Twitter Title.
|
95 |
+
*/
|
96 |
+
public function get_generated_twitter_title( $id = null, $escape = true ) {
|
97 |
+
return $this->get_generated_open_graph_title( $id, $escape );
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Returns the autogenerated open graph meta title. Falls back to meta title.
|
102 |
+
*
|
103 |
+
* @since 3.0.4
|
104 |
+
* @uses $this->build_title()
|
105 |
+
* @staticvar array $cache
|
106 |
+
*
|
107 |
+
* @param int|null $id The post or term ID. Falls back to queried ID.
|
108 |
+
* @param bool $escape Whether to escape the title.
|
109 |
+
* @return string Autogenerated Open Graph Title.
|
110 |
+
*/
|
111 |
+
public function get_generated_open_graph_title( $id = null, $escape = true ) {
|
112 |
+
|
113 |
+
if ( is_null( $id ) )
|
114 |
+
$id = $this->get_the_real_ID();
|
115 |
+
|
116 |
+
static $cache = array();
|
117 |
+
|
118 |
+
$title = isset( $cache[ $id ] )
|
119 |
+
? $cache[ $id ]
|
120 |
+
: $cache[ $id ] = $this->build_title( '', '', array( 'meta' => true, 'term_id' => $id, 'escape' => false ) );
|
121 |
+
|
122 |
+
return $escape ? $this->escape_title( $title ) : $title;
|
123 |
+
}
|
124 |
+
|
125 |
/**
|
126 |
* Gets the title. Main function.
|
127 |
* Always use this function for the title unless you're absolutely sure what you're doing.
|
665 |
* Generate the title based on conditions for the home page.
|
666 |
*
|
667 |
* @since 2.3.4
|
668 |
+
* @since 2.3.8 Now checks tagline option.
|
669 |
* @access private
|
670 |
*
|
671 |
* @param bool $get_custom_field Fetch Title from Custom Fields.
|
674 |
* @param bool $escape Parse Title through saninitation calls.
|
675 |
* @param bool $get_option Whether to fetch the SEO Settings option.
|
676 |
* @return array {
|
677 |
+
* 'title' => (string) $title : The Generated "Title"
|
678 |
+
* 'blogname' => (string) $blogname : The Generated "Blogname"
|
679 |
* 'add_tagline' => (bool) $add_tagline : Whether to add the tagline
|
680 |
* 'seplocation' => (string) $seplocation : The Separator Location
|
681 |
* }
|
683 |
public function generate_home_title( $get_custom_field = true, $seplocation = '', $deprecated = '', $escape = true, $get_option = true ) {
|
684 |
|
685 |
$add_tagline = $this->home_page_add_title_tagline();
|
686 |
+
$blogname = $add_tagline ? $this->get_home_page_tagline() : '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
687 |
|
688 |
/**
|
689 |
* Render from function
|
705 |
);
|
706 |
|
707 |
/**
|
708 |
+
* Applies filters 'the_seo_framework_home_title_args'
|
|
|
|
|
|
|
|
|
|
|
709 |
*
|
710 |
* @since 2.8.0
|
711 |
*
|
712 |
* @param array $args
|
713 |
+
* @param array $defaults : {
|
714 |
+
* string $title : NOTE: This is the blogname or homepage title option.
|
715 |
+
* string $blogname : NOTE: This is the tagline.
|
716 |
+
* bool $add_tagline
|
717 |
+
* string $seplocation : 'left' or 'right'
|
718 |
+
* }
|
719 |
*/
|
720 |
$args = (array) \apply_filters( 'the_seo_framework_home_title_args', array(), $defaults );
|
721 |
|
866 |
/**
|
867 |
* Gets the archive Title, including filter. Also works in admin.
|
868 |
*
|
869 |
+
* @NOTE Taken from WordPress core. Altered to work for metadata.
|
870 |
+
* @see WP Core get_the_archive_title()
|
871 |
*
|
872 |
* @since 2.6.0
|
873 |
* @since 2.9.2 : Added WordPress core filter 'get_the_archive_title'
|
874 |
+
* @since 3.0.4 : 1. Removed WordPress core filter 'get_the_archive_title'
|
875 |
+
* 2. Added filter 'the_seo_framework_generated_archive_title'
|
876 |
*
|
877 |
+
* @param \WP_Term|null $term The Term object.
|
878 |
* @param array $args The Title arguments.
|
879 |
* @return string The Archive Title, not escaped.
|
880 |
*/
|
974 |
/**
|
975 |
* Filters the archive title.
|
976 |
*
|
977 |
+
* @since 3.0.4
|
978 |
*
|
979 |
* @param string $title Archive title to be displayed.
|
980 |
+
* @param \WP_Term $term The term object.
|
981 |
*/
|
982 |
+
return \apply_filters( 'the_seo_framework_generated_archive_title', $title, $term );
|
983 |
}
|
984 |
|
985 |
/**
|
1003 |
/**
|
1004 |
* Filter the category archive page title.
|
1005 |
*
|
1006 |
+
* @since WP Core 2.0.10
|
1007 |
*
|
1008 |
* @param string $term_name Category name for archive being displayed.
|
1009 |
*/
|
1012 |
/**
|
1013 |
* Filter the tag archive page title.
|
1014 |
*
|
1015 |
+
* @since WP Core 2.3.0
|
1016 |
*
|
1017 |
* @param string $term_name Tag name for archive being displayed.
|
1018 |
*/
|
1021 |
/**
|
1022 |
* Filter the custom taxonomy archive page title.
|
1023 |
*
|
1024 |
+
* @since WP Core 3.1.0
|
1025 |
*
|
1026 |
* @param string $term_name Term name for archive being displayed.
|
1027 |
*/
|
1447 |
return $title;
|
1448 |
}
|
1449 |
|
1450 |
+
/**
|
1451 |
+
* Returns the home page tagline from option or bloginfo, when set.
|
1452 |
+
*
|
1453 |
+
* @since 3.0.4
|
1454 |
+
* @uses $this->get_blogdescription(), this method already trims.
|
1455 |
+
*
|
1456 |
+
* @return string The trimmed tagline.
|
1457 |
+
*/
|
1458 |
+
public function get_home_page_tagline() {
|
1459 |
+
return trim( $this->get_option( 'homepage_title_tagline' ) ) ?: $this->get_blogdescription() ?: '';
|
1460 |
+
}
|
1461 |
+
|
1462 |
/**
|
1463 |
* Determines whether to add home page tagline.
|
1464 |
*
|
1465 |
* @since 2.6.0
|
1466 |
+
* @since 3.0.4 Now checks for custom tagline or blogname existence.
|
1467 |
*
|
1468 |
* @return bool
|
1469 |
*/
|
1470 |
public function home_page_add_title_tagline() {
|
1471 |
+
return $this->is_option_checked( 'homepage_tagline' ) && $this->get_home_page_tagline();
|
1472 |
}
|
1473 |
}
|
inc/classes/generate-url.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -374,14 +374,12 @@ class Generate_Url extends Generate_Title {
|
|
374 |
case 'day' :
|
375 |
$_day = \get_query_var( 'day' );
|
376 |
$_paginate = $_paginate && $_day == $day;
|
377 |
-
|
378 |
-
// Continue switch.
|
379 |
|
380 |
case 'month' :
|
381 |
$_month = \get_query_var( 'monthnum' );
|
382 |
$_paginate = $_paginate && $_month == $month;
|
383 |
-
|
384 |
-
// Continue switch.
|
385 |
|
386 |
case 'year' :
|
387 |
$_year = \get_query_var( 'year' );
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
374 |
case 'day' :
|
375 |
$_day = \get_query_var( 'day' );
|
376 |
$_paginate = $_paginate && $_day == $day;
|
377 |
+
// No break. Get month too.
|
|
|
378 |
|
379 |
case 'month' :
|
380 |
$_month = \get_query_var( 'monthnum' );
|
381 |
$_paginate = $_paginate && $_month == $month;
|
382 |
+
// No break. Get year too.
|
|
|
383 |
|
384 |
case 'year' :
|
385 |
$_year = \get_query_var( 'year' );
|
inc/classes/generate.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/init.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -79,6 +79,9 @@ class Init extends Query {
|
|
79 |
/**
|
80 |
* Runs the plugin on the front-end.
|
81 |
*
|
|
|
|
|
|
|
82 |
* @since 1.0.0
|
83 |
* @since 2.8.0 Silently deprecated. Displaying legacy roots.
|
84 |
* @deprecated
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
79 |
/**
|
80 |
* Runs the plugin on the front-end.
|
81 |
*
|
82 |
+
* To overwrite any of the filters, use (n>0):
|
83 |
+
* `add_action( 'init', callback, n );`
|
84 |
+
*
|
85 |
* @since 1.0.0
|
86 |
* @since 2.8.0 Silently deprecated. Displaying legacy roots.
|
87 |
* @deprecated
|
inc/classes/inpost.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -281,7 +281,7 @@ class Inpost extends Profile {
|
|
281 |
$is_term = false;
|
282 |
|
283 |
// Args are passed.
|
284 |
-
if (
|
285 |
$args_split = $args['args'];
|
286 |
|
287 |
//* The post type callback arg (translated)
|
@@ -418,7 +418,9 @@ class Inpost extends Profile {
|
|
418 |
* Do not use. It will take a little too much time to perfect this.
|
419 |
*
|
420 |
* @since 2.9.0
|
|
|
421 |
* @access private
|
|
|
422 |
* @ignore
|
423 |
* @todo Remove and refactor caller.
|
424 |
*
|
@@ -426,9 +428,20 @@ class Inpost extends Profile {
|
|
426 |
* @param string $doctitle_placeholder. Passed by reference.
|
427 |
* @param string $desc_len_parsed. Passed by reference.
|
428 |
* @param string $description_placeholder. Passed by reference.
|
|
|
429 |
*/
|
430 |
public function _get_inpost_general_tab_vars( &$tit_len_parsed, &$doctitle_placeholder, &$desc_len_parsed, &$description_placeholder ) {
|
431 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
432 |
$post_id = $this->get_the_real_ID();
|
433 |
$is_static_frontpage = $this->is_static_frontpage( $post_id );
|
434 |
|
@@ -473,7 +486,7 @@ class Inpost extends Profile {
|
|
473 |
);
|
474 |
}
|
475 |
$generated_doctitle = $this->title( '', '', '', $generated_doctitle_args );
|
476 |
-
$generated_description = $this->
|
477 |
|
478 |
/**
|
479 |
* Start Title vars
|
@@ -551,5 +564,7 @@ class Inpost extends Profile {
|
|
551 |
*/
|
552 |
$doctitle_placeholder = $generated_doctitle;
|
553 |
$description_placeholder = $generated_description;
|
|
|
|
|
554 |
}
|
555 |
}
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
281 |
$is_term = false;
|
282 |
|
283 |
// Args are passed.
|
284 |
+
if ( isset( $args['args'] ) ) {
|
285 |
$args_split = $args['args'];
|
286 |
|
287 |
//* The post type callback arg (translated)
|
418 |
* Do not use. It will take a little too much time to perfect this.
|
419 |
*
|
420 |
* @since 2.9.0
|
421 |
+
* @since 3.0.4 Added caching.
|
422 |
* @access private
|
423 |
+
* @staticvar $cache
|
424 |
* @ignore
|
425 |
* @todo Remove and refactor caller.
|
426 |
*
|
428 |
* @param string $doctitle_placeholder. Passed by reference.
|
429 |
* @param string $desc_len_parsed. Passed by reference.
|
430 |
* @param string $description_placeholder. Passed by reference.
|
431 |
+
* @return void
|
432 |
*/
|
433 |
public function _get_inpost_general_tab_vars( &$tit_len_parsed, &$doctitle_placeholder, &$desc_len_parsed, &$description_placeholder ) {
|
434 |
|
435 |
+
static $cache = array();
|
436 |
+
|
437 |
+
if ( ! empty( $cache ) ) {
|
438 |
+
//! Overwrites variables passed by reference via variable variables.
|
439 |
+
foreach ( $cache as $k => $v ) {
|
440 |
+
$$k = $v;
|
441 |
+
}
|
442 |
+
return;
|
443 |
+
}
|
444 |
+
|
445 |
$post_id = $this->get_the_real_ID();
|
446 |
$is_static_frontpage = $this->is_static_frontpage( $post_id );
|
447 |
|
486 |
);
|
487 |
}
|
488 |
$generated_doctitle = $this->title( '', '', '', $generated_doctitle_args );
|
489 |
+
$generated_description = $this->generate_description( '', $generated_description_args );
|
490 |
|
491 |
/**
|
492 |
* Start Title vars
|
564 |
*/
|
565 |
$doctitle_placeholder = $generated_doctitle;
|
566 |
$description_placeholder = $generated_description;
|
567 |
+
|
568 |
+
$cache = compact( 'tit_len_parsed', 'doctitle_placeholder', 'desc_len_parsed', 'description_placeholder' );
|
569 |
}
|
570 |
}
|
inc/classes/load.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/metaboxes.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -48,13 +48,13 @@ class Metaboxes extends Site_Options {
|
|
48 |
*
|
49 |
* @param string $id The Nav Tab ID
|
50 |
* @param array $tabs the tab content {
|
51 |
-
*
|
52 |
-
*
|
53 |
-
*
|
54 |
-
*
|
55 |
-
*
|
56 |
-
*
|
57 |
-
*
|
58 |
* @param string $version the The SEO Framework version for debugging. May be emptied.
|
59 |
* @param bool $use_tabs Whether to output tabs, only works when $tabs is greater than 1.
|
60 |
*/
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
48 |
*
|
49 |
* @param string $id The Nav Tab ID
|
50 |
* @param array $tabs the tab content {
|
51 |
+
* $tabs = tab ID key = array(
|
52 |
+
* $tabs['name'] => tab name
|
53 |
+
* $tabs['callback'] => string|array callback function
|
54 |
+
* $tabs['dashicon'] => string Dashicon
|
55 |
+
* $tabs['args'] => mixed optional callback function args
|
56 |
+
* )
|
57 |
+
* }
|
58 |
* @param string $version the The SEO Framework version for debugging. May be emptied.
|
59 |
* @param bool $use_tabs Whether to output tabs, only works when $tabs is greater than 1.
|
60 |
*/
|
inc/classes/post-data.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -98,17 +98,21 @@ class Post_Data extends Detect {
|
|
98 |
return;
|
99 |
|
100 |
$defaults = array(
|
101 |
-
'_genesis_title'
|
102 |
-
'_genesis_description'
|
103 |
-
'_genesis_canonical_uri'
|
104 |
-
'redirect'
|
105 |
-
'_social_image_url'
|
106 |
-
'_social_image_id'
|
107 |
-
'_genesis_noindex'
|
108 |
-
'_genesis_nofollow'
|
109 |
-
'_genesis_noarchive'
|
110 |
-
'exclude_local_search'
|
111 |
-
'exclude_from_archive'
|
|
|
|
|
|
|
|
|
112 |
);
|
113 |
|
114 |
/**
|
@@ -120,10 +124,14 @@ class Post_Data extends Detect {
|
|
120 |
foreach ( (array) $data as $key => $value ) :
|
121 |
switch ( $key ) :
|
122 |
case '_genesis_title' :
|
|
|
|
|
123 |
$data[ $key ] = $this->s_title_raw( $value );
|
124 |
continue 2;
|
125 |
|
126 |
case '_genesis_description' :
|
|
|
|
|
127 |
$data[ $key ] = $this->s_description_raw( $value );
|
128 |
continue 2;
|
129 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
98 |
return;
|
99 |
|
100 |
$defaults = array(
|
101 |
+
'_genesis_title' => '',
|
102 |
+
'_genesis_description' => '',
|
103 |
+
'_genesis_canonical_uri' => '',
|
104 |
+
'redirect' => '', // Will be displayed in custom fields when set...
|
105 |
+
'_social_image_url' => '',
|
106 |
+
'_social_image_id' => 0,
|
107 |
+
'_genesis_noindex' => 0,
|
108 |
+
'_genesis_nofollow' => 0,
|
109 |
+
'_genesis_noarchive' => 0,
|
110 |
+
'exclude_local_search' => 0, // Will be displayed in custom fields when set...
|
111 |
+
'exclude_from_archive' => 0, // Will be displayed in custom fields when set...
|
112 |
+
'_open_graph_title' => '',
|
113 |
+
'_open_graph_description' => '',
|
114 |
+
'_twitter_title' => '',
|
115 |
+
'_twitter_description' => '',
|
116 |
);
|
117 |
|
118 |
/**
|
124 |
foreach ( (array) $data as $key => $value ) :
|
125 |
switch ( $key ) :
|
126 |
case '_genesis_title' :
|
127 |
+
case '_open_graph_title' :
|
128 |
+
case '_twitter_title' :
|
129 |
$data[ $key ] = $this->s_title_raw( $value );
|
130 |
continue 2;
|
131 |
|
132 |
case '_genesis_description' :
|
133 |
+
case '_open_graph_description' :
|
134 |
+
case '_twitter_description' :
|
135 |
$data[ $key ] = $this->s_description_raw( $value );
|
136 |
continue 2;
|
137 |
|
inc/classes/profile.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/query.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/classes/render.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -230,7 +230,8 @@ class Render extends Admin_Init {
|
|
230 |
* Renders og:description meta tag
|
231 |
*
|
232 |
* @since 1.3.0
|
233 |
-
* @uses $this->description_from_cache()
|
|
|
234 |
*
|
235 |
* @return string The Open Graph description meta tag.
|
236 |
*/
|
@@ -244,7 +245,7 @@ class Render extends Admin_Init {
|
|
244 |
* @since 2.3.0
|
245 |
* @since 2.7.0 Added output within filter.
|
246 |
*/
|
247 |
-
$description = (string) \apply_filters( 'the_seo_framework_ogdescription_output', $this->
|
248 |
|
249 |
if ( $description )
|
250 |
return '<meta property="og:description" content="' . \esc_attr( $description ) . '" />' . "\r\n";
|
@@ -280,8 +281,9 @@ class Render extends Admin_Init {
|
|
280 |
/**
|
281 |
* Renders the Open Graph title meta tag.
|
282 |
*
|
283 |
-
* @uses $this->title_from_cache()
|
284 |
* @since 2.0.3
|
|
|
|
|
285 |
*
|
286 |
* @return string The Open Graph title meta tag.
|
287 |
*/
|
@@ -295,7 +297,7 @@ class Render extends Admin_Init {
|
|
295 |
* @since 2.3.0
|
296 |
* @since 2.7.0 Added output within filter.
|
297 |
*/
|
298 |
-
$title = (string) \apply_filters( 'the_seo_framework_ogtitle_output', $this->
|
299 |
|
300 |
if ( $title )
|
301 |
return '<meta property="og:title" content="' . \esc_attr( $title ) . '" />' . "\r\n";
|
@@ -567,8 +569,9 @@ class Render extends Admin_Init {
|
|
567 |
/**
|
568 |
* Renders Twitter Title meta tag.
|
569 |
*
|
570 |
-
* @uses $this->
|
571 |
* @since 2.2.2
|
|
|
572 |
*
|
573 |
* @return string The Twitter Title meta tag.
|
574 |
*/
|
@@ -582,7 +585,7 @@ class Render extends Admin_Init {
|
|
582 |
* @since 2.3.0
|
583 |
* @since 2.7.0 Added output within filter.
|
584 |
*/
|
585 |
-
$title = (string) \apply_filters( 'the_seo_framework_twittertitle_output', $this->
|
586 |
|
587 |
if ( $title )
|
588 |
return '<meta name="twitter:title" content="' . \esc_attr( $title ) . '" />' . "\r\n";
|
@@ -593,8 +596,9 @@ class Render extends Admin_Init {
|
|
593 |
/**
|
594 |
* Renders Twitter Description meta tag.
|
595 |
*
|
596 |
-
* @uses $this->description_from_cache()
|
597 |
* @since 2.2.2
|
|
|
|
|
598 |
*
|
599 |
* @return string The Twitter Descritpion meta tag.
|
600 |
*/
|
@@ -608,7 +612,7 @@ class Render extends Admin_Init {
|
|
608 |
* @since 2.3.0
|
609 |
* @since 2.7.0 Added output within filter.
|
610 |
*/
|
611 |
-
$description = (string) \apply_filters( 'the_seo_framework_twitterdescription_output', $this->
|
612 |
|
613 |
if ( $description )
|
614 |
return '<meta name="twitter:description" content="' . \esc_attr( $description ) . '" />' . "\r\n";
|
@@ -1159,7 +1163,7 @@ class Render extends Admin_Init {
|
|
1159 |
}
|
1160 |
|
1161 |
/**
|
1162 |
-
* Determines whether we can use Open Graph tags.
|
1163 |
*
|
1164 |
* @since 2.6.0
|
1165 |
* @staticvar bool $cache
|
@@ -1177,7 +1181,7 @@ class Render extends Admin_Init {
|
|
1177 |
}
|
1178 |
|
1179 |
/**
|
1180 |
-
* Determines whether we can use Facebook tags.
|
1181 |
*
|
1182 |
* @since 2.6.0
|
1183 |
* @staticvar bool $cache
|
@@ -1195,7 +1199,7 @@ class Render extends Admin_Init {
|
|
1195 |
}
|
1196 |
|
1197 |
/**
|
1198 |
-
* Determines whether we can use Twitter tags.
|
1199 |
*
|
1200 |
* @since 2.6.0
|
1201 |
* @since 2.8.2 : Now also considers Twitter card type output.
|
@@ -1214,7 +1218,7 @@ class Render extends Admin_Init {
|
|
1214 |
}
|
1215 |
|
1216 |
/**
|
1217 |
-
* Determines whether we can use Google+ tags.
|
1218 |
*
|
1219 |
* @since 2.6.0
|
1220 |
* @staticvar bool $cache
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
230 |
* Renders og:description meta tag
|
231 |
*
|
232 |
* @since 1.3.0
|
233 |
+
* @since 3.0.4 No longer uses $this->description_from_cache()
|
234 |
+
* @uses $this->get_open_graph_title()
|
235 |
*
|
236 |
* @return string The Open Graph description meta tag.
|
237 |
*/
|
245 |
* @since 2.3.0
|
246 |
* @since 2.7.0 Added output within filter.
|
247 |
*/
|
248 |
+
$description = (string) \apply_filters( 'the_seo_framework_ogdescription_output', $this->get_open_graph_description(), $this->get_the_real_ID() );
|
249 |
|
250 |
if ( $description )
|
251 |
return '<meta property="og:description" content="' . \esc_attr( $description ) . '" />' . "\r\n";
|
281 |
/**
|
282 |
* Renders the Open Graph title meta tag.
|
283 |
*
|
|
|
284 |
* @since 2.0.3
|
285 |
+
* @since 3.0.4 No longer uses $this->title_from_cache()
|
286 |
+
* @uses $this->get_open_graph_title()
|
287 |
*
|
288 |
* @return string The Open Graph title meta tag.
|
289 |
*/
|
297 |
* @since 2.3.0
|
298 |
* @since 2.7.0 Added output within filter.
|
299 |
*/
|
300 |
+
$title = (string) \apply_filters( 'the_seo_framework_ogtitle_output', $this->get_open_graph_title(), $this->get_the_real_ID() );
|
301 |
|
302 |
if ( $title )
|
303 |
return '<meta property="og:title" content="' . \esc_attr( $title ) . '" />' . "\r\n";
|
569 |
/**
|
570 |
* Renders Twitter Title meta tag.
|
571 |
*
|
572 |
+
* @uses $this->get_twitter_title()
|
573 |
* @since 2.2.2
|
574 |
+
* @since 3.0.4 No longer uses $this->title_from_cache()
|
575 |
*
|
576 |
* @return string The Twitter Title meta tag.
|
577 |
*/
|
585 |
* @since 2.3.0
|
586 |
* @since 2.7.0 Added output within filter.
|
587 |
*/
|
588 |
+
$title = (string) \apply_filters( 'the_seo_framework_twittertitle_output', $this->get_twitter_title(), $this->get_the_real_ID() );
|
589 |
|
590 |
if ( $title )
|
591 |
return '<meta name="twitter:title" content="' . \esc_attr( $title ) . '" />' . "\r\n";
|
596 |
/**
|
597 |
* Renders Twitter Description meta tag.
|
598 |
*
|
|
|
599 |
* @since 2.2.2
|
600 |
+
* @since 3.0.4 No longer uses $this->description_from_cache()
|
601 |
+
* @uses $this->get_twitter_description()
|
602 |
*
|
603 |
* @return string The Twitter Descritpion meta tag.
|
604 |
*/
|
612 |
* @since 2.3.0
|
613 |
* @since 2.7.0 Added output within filter.
|
614 |
*/
|
615 |
+
$description = (string) \apply_filters( 'the_seo_framework_twitterdescription_output', $this->get_twitter_description(), $this->get_the_real_ID() );
|
616 |
|
617 |
if ( $description )
|
618 |
return '<meta name="twitter:description" content="' . \esc_attr( $description ) . '" />' . "\r\n";
|
1163 |
}
|
1164 |
|
1165 |
/**
|
1166 |
+
* Determines whether we can use Open Graph tags on the front-end.
|
1167 |
*
|
1168 |
* @since 2.6.0
|
1169 |
* @staticvar bool $cache
|
1181 |
}
|
1182 |
|
1183 |
/**
|
1184 |
+
* Determines whether we can use Facebook tags on the front-end.
|
1185 |
*
|
1186 |
* @since 2.6.0
|
1187 |
* @staticvar bool $cache
|
1199 |
}
|
1200 |
|
1201 |
/**
|
1202 |
+
* Determines whether we can use Twitter tags on the front-end.
|
1203 |
*
|
1204 |
* @since 2.6.0
|
1205 |
* @since 2.8.2 : Now also considers Twitter card type output.
|
1218 |
}
|
1219 |
|
1220 |
/**
|
1221 |
+
* Determines whether we can use Google+ tags on the front-end.
|
1222 |
*
|
1223 |
* @since 2.6.0
|
1224 |
* @staticvar bool $cache
|
inc/classes/sanitize.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -932,14 +932,15 @@ class Sanitize extends Admin_Pages {
|
|
932 |
* @return string 'in_query' or 'post_query'
|
933 |
*/
|
934 |
public function s_alter_query_type( $new_value ) {
|
935 |
-
|
936 |
switch ( $new_value ) {
|
937 |
case 'in_query' :
|
938 |
case 'post_query' :
|
939 |
return (string) $new_value;
|
|
|
940 |
|
941 |
default :
|
942 |
return 'in_query';
|
|
|
943 |
}
|
944 |
}
|
945 |
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
932 |
* @return string 'in_query' or 'post_query'
|
933 |
*/
|
934 |
public function s_alter_query_type( $new_value ) {
|
|
|
935 |
switch ( $new_value ) {
|
936 |
case 'in_query' :
|
937 |
case 'post_query' :
|
938 |
return (string) $new_value;
|
939 |
+
break;
|
940 |
|
941 |
default :
|
942 |
return 'in_query';
|
943 |
+
break;
|
944 |
}
|
945 |
}
|
946 |
|
inc/classes/site-options.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -122,7 +122,7 @@ class Site_Options extends Sanitize {
|
|
122 |
'display_seo_bar_metabox' => 0, // SEO Bar post SEO Settings.
|
123 |
|
124 |
'display_pixel_counter' => 1, // Pixel counter.
|
125 |
-
'display_character_counter' =>
|
126 |
|
127 |
// General. Canonical.
|
128 |
'canonical_scheme' => 'automatic', // Canonical URL scheme.
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
122 |
'display_seo_bar_metabox' => 0, // SEO Bar post SEO Settings.
|
123 |
|
124 |
'display_pixel_counter' => 1, // Pixel counter.
|
125 |
+
'display_character_counter' => 1, // Character counter.
|
126 |
|
127 |
// General. Canonical.
|
128 |
'canonical_scheme' => 'automatic', // Canonical URL scheme.
|
inc/classes/sitemaps.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -541,6 +541,7 @@ class Sitemaps extends Metaboxes {
|
|
541 |
* @since 2.2.9
|
542 |
* @since 2.8.0 Now adjusts memory limit when possible.
|
543 |
* @since 2.9.3 No longer crashes on WordPress sites below WP 4.6.
|
|
|
544 |
*
|
545 |
* @return string The sitemap content.
|
546 |
*/
|
@@ -552,20 +553,6 @@ class Sitemaps extends Metaboxes {
|
|
552 |
|
553 |
$content = '';
|
554 |
|
555 |
-
/**
|
556 |
-
* Applies filters the_seo_framework_sitemap_exclude_ids : array of id's
|
557 |
-
*
|
558 |
-
* @since 2.5.2
|
559 |
-
* @since 2.8.0 : No longer accepts '0' as entry.
|
560 |
-
*/
|
561 |
-
$excluded = (array) \apply_filters( 'the_seo_framework_sitemap_exclude_ids', array() );
|
562 |
-
|
563 |
-
if ( empty( $excluded ) ) {
|
564 |
-
$excluded = '';
|
565 |
-
} else {
|
566 |
-
$excluded = array_flip( $excluded );
|
567 |
-
}
|
568 |
-
|
569 |
/**
|
570 |
* Maximum pages and posts to fetch.
|
571 |
* A total of 2100, consisting of 3 times $max_posts
|
@@ -594,9 +581,7 @@ class Sitemaps extends Metaboxes {
|
|
594 |
* We can't get specific on the home page, unfortunately.
|
595 |
*/
|
596 |
$sitemaps_modified = $this->is_option_checked( 'sitemaps_modified' );
|
597 |
-
|
598 |
-
$page_lastmod = $post_lastmod = $home_lastmod = true;
|
599 |
-
}
|
600 |
|
601 |
/**
|
602 |
* Generation time output
|
@@ -655,21 +640,28 @@ class Sitemaps extends Metaboxes {
|
|
655 |
unset( $latest_pages[ $key_on_front ] );
|
656 |
}
|
657 |
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
665 |
$content .= "\t<url>\n";
|
666 |
-
$content .= "\t\t<loc>" . $
|
667 |
|
668 |
// Keep it consistent. Only parse if page_lastmod is true.
|
669 |
if ( $home_lastmod ) {
|
670 |
if ( $page_on_front ) {
|
671 |
-
$
|
672 |
-
$front_modified_gmt = isset( $front_object->post_modified_gmt ) ? $front_object->post_modified_gmt : '0000-00-00 00:00:00';
|
673 |
} else {
|
674 |
$args = array(
|
675 |
'numberposts' => 1,
|
@@ -680,10 +672,9 @@ class Sitemaps extends Metaboxes {
|
|
680 |
'order' => 'DESC',
|
681 |
'offset' => 0,
|
682 |
);
|
683 |
-
$
|
684 |
-
$
|
685 |
-
|
686 |
-
$front_modified_gmt = isset( $front_object->post_date_gmt ) ? $front_object->post_date_gmt : '0000-00-00 00:00:00';
|
687 |
}
|
688 |
|
689 |
if ( '0000-00-00 00:00:00' !== $front_modified_gmt )
|
@@ -693,27 +684,29 @@ class Sitemaps extends Metaboxes {
|
|
693 |
$content .= "\t\t<priority>1.0</priority>\n";
|
694 |
$content .= "\t</url>\n";
|
695 |
}
|
696 |
-
|
|
|
|
|
697 |
|
698 |
-
|
699 |
if ( $page_on_front && $page_for_posts_id ) :
|
700 |
-
|
701 |
//* Remove ID for blog from list and add frontpage to list.
|
702 |
if ( false !== $key_for_posts = array_search( $page_for_posts_id, $latest_pages, true ) ) {
|
703 |
unset( $latest_pages[ $key_for_posts ] );
|
704 |
}
|
705 |
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
|
711 |
-
|
712 |
-
|
|
|
713 |
$content .= "\t<url>\n";
|
714 |
-
$content .= "\t\t<loc>" . $
|
715 |
|
716 |
-
// Keep it consistent. Only parse if page_lastmod is true.
|
717 |
if ( $page_lastmod ) {
|
718 |
$args = array(
|
719 |
'numberposts' => 1,
|
@@ -724,10 +717,10 @@ class Sitemaps extends Metaboxes {
|
|
724 |
'order' => 'DESC',
|
725 |
'offset' => 0,
|
726 |
);
|
727 |
-
$
|
728 |
-
$lastest_post = isset( $
|
729 |
$latest_post_published_gmt = isset( $lastest_post->post_date_gmt ) ? $lastest_post->post_date_gmt : '0000-00-00 00:00:00';
|
730 |
-
$page_for_posts_modified_gmt = $
|
731 |
|
732 |
if ( strtotime( $latest_post_published_gmt ) > strtotime( $page_for_posts_modified_gmt ) ) {
|
733 |
$page_modified_gmt = $latest_post_published_gmt;
|
@@ -742,44 +735,38 @@ class Sitemaps extends Metaboxes {
|
|
742 |
$content .= "\t\t<priority>0.9</priority>\n";
|
743 |
$content .= "\t</url>\n";
|
744 |
}
|
745 |
-
|
746 |
|
|
|
|
|
747 |
endif;
|
748 |
|
749 |
-
/**
|
750 |
-
* This can be heavy.
|
751 |
-
*/
|
752 |
foreach ( $latest_pages as $page_id ) :
|
753 |
$page = \get_post( $page_id );
|
|
|
|
|
754 |
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
//* Fetch the noindex option, per page.
|
759 |
-
$indexed = ! $this->get_custom_field( '_genesis_noindex', $page_id );
|
760 |
|
761 |
-
|
762 |
-
|
763 |
-
$content .= "\t<url>\n";
|
764 |
-
$content .= "\t\t<loc>" . $this->create_canonical_url( array( 'id' => $page_id ) ) . "</loc>\n";
|
765 |
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
|
774 |
-
|
775 |
-
|
776 |
-
}
|
777 |
-
}
|
778 |
-
endif;
|
779 |
endforeach;
|
780 |
|
781 |
//* Free memory.
|
782 |
-
unset( $latest_pages );
|
783 |
endif;
|
784 |
|
785 |
if ( $totalposts ) {
|
@@ -842,43 +829,37 @@ class Sitemaps extends Metaboxes {
|
|
842 |
*/
|
843 |
foreach ( $latest_posts as $post_id ) :
|
844 |
$post = \get_post( $post_id );
|
|
|
|
|
845 |
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
//* Fetch the noindex option, per page.
|
850 |
-
$indexed = ! $this->get_custom_field( '_genesis_noindex', $post_id );
|
851 |
-
|
852 |
-
//* Continue if indexed
|
853 |
-
if ( $indexed ) {
|
854 |
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
|
867 |
-
|
868 |
-
|
869 |
|
870 |
-
|
871 |
-
|
872 |
|
873 |
-
|
874 |
-
|
875 |
-
}
|
876 |
-
}
|
877 |
-
endif;
|
878 |
endforeach;
|
879 |
|
880 |
//* Free memory.
|
881 |
-
unset( $latest_posts );
|
882 |
endif;
|
883 |
|
884 |
if ( $total_cpt_posts ) :
|
@@ -956,48 +937,38 @@ class Sitemaps extends Metaboxes {
|
|
956 |
* This can be heavy.
|
957 |
*/
|
958 |
foreach ( $latest_cpt_posts as $ctp_post_id ) :
|
959 |
-
|
960 |
$ctp_post = \get_post( $ctp_post_id );
|
|
|
|
|
961 |
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
if ( '' === $excluded || empty( $excluded[ $cpt_id ] ) ) {
|
966 |
-
|
967 |
-
//* Fetch the noindex option, per page.
|
968 |
-
$indexed = ! $this->get_custom_field( '_genesis_noindex', $cpt_id );
|
969 |
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
//* Some CPT don't set modified time.
|
982 |
-
if ( '0000-00-00 00:00:00' !== $cpt_modified_gmt )
|
983 |
-
$content .= "\t\t<lastmod>" . $this->gmt2date( $timestamp_format, $cpt_modified_gmt ) . "</lastmod>\n";
|
984 |
-
}
|
985 |
|
986 |
-
|
987 |
-
|
988 |
|
989 |
-
|
990 |
-
|
991 |
|
992 |
-
|
993 |
-
|
994 |
-
}
|
995 |
-
}
|
996 |
-
endif;
|
997 |
endforeach;
|
998 |
|
999 |
//* Free memory.
|
1000 |
-
unset( $latest_cpt_posts );
|
1001 |
endif;
|
1002 |
|
1003 |
/**
|
@@ -1061,6 +1032,45 @@ class Sitemaps extends Metaboxes {
|
|
1061 |
return $content;
|
1062 |
}
|
1063 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1064 |
/**
|
1065 |
* Ping search engines on post publish.
|
1066 |
*
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
541 |
* @since 2.2.9
|
542 |
* @since 2.8.0 Now adjusts memory limit when possible.
|
543 |
* @since 2.9.3 No longer crashes on WordPress sites below WP 4.6.
|
544 |
+
* @since 3.0.4 No longer outputs empty URL entries.
|
545 |
*
|
546 |
* @return string The sitemap content.
|
547 |
*/
|
553 |
|
554 |
$content = '';
|
555 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
556 |
/**
|
557 |
* Maximum pages and posts to fetch.
|
558 |
* A total of 2100, consisting of 3 times $max_posts
|
581 |
* We can't get specific on the home page, unfortunately.
|
582 |
*/
|
583 |
$sitemaps_modified = $this->is_option_checked( 'sitemaps_modified' );
|
584 |
+
$page_lastmod = $post_lastmod = $home_lastmod = (bool) $sitemaps_modified;
|
|
|
|
|
585 |
|
586 |
/**
|
587 |
* Generation time output
|
640 |
unset( $latest_pages[ $key_on_front ] );
|
641 |
}
|
642 |
|
643 |
+
//= Render frontpage.
|
644 |
+
$front_page = $page_on_front ? \get_post( $id_on_front ) : null;
|
645 |
+
$render_front = false;
|
646 |
+
if ( ! $this->get_option( 'homepage_noindex' ) ) {
|
647 |
+
if ( $page_on_front ) {
|
648 |
+
$render_front = isset( $front_page->ID )
|
649 |
+
&& $this->is_post_included_in_sitemap( $front_page->ID )
|
650 |
+
&& ! $this->is_protected( $front_page->ID );
|
651 |
+
} else {
|
652 |
+
$render_front = $this->is_post_included_in_sitemap( $id_on_front );
|
653 |
+
}
|
654 |
+
}
|
655 |
+
if ( $render_front ) {
|
656 |
+
$_url = $this->get_homepage_permalink();
|
657 |
+
if ( $_url ) {
|
658 |
$content .= "\t<url>\n";
|
659 |
+
$content .= "\t\t<loc>" . $_url . "</loc>\n";
|
660 |
|
661 |
// Keep it consistent. Only parse if page_lastmod is true.
|
662 |
if ( $home_lastmod ) {
|
663 |
if ( $page_on_front ) {
|
664 |
+
$front_modified_gmt = isset( $front_page->post_modified_gmt ) ? $front_page->post_modified_gmt : '0000-00-00 00:00:00';
|
|
|
665 |
} else {
|
666 |
$args = array(
|
667 |
'numberposts' => 1,
|
672 |
'order' => 'DESC',
|
673 |
'offset' => 0,
|
674 |
);
|
675 |
+
$latests_posts = \wp_get_recent_posts( $args, OBJECT );
|
676 |
+
$latest_post = isset( $latests_posts[0] ) ? $latests_posts[0] : null;
|
677 |
+
$front_modified_gmt = isset( $latest_post->post_date_gmt ) ? $latest_post->post_date_gmt : '0000-00-00 00:00:00';
|
|
|
678 |
}
|
679 |
|
680 |
if ( '0000-00-00 00:00:00' !== $front_modified_gmt )
|
684 |
$content .= "\t\t<priority>1.0</priority>\n";
|
685 |
$content .= "\t</url>\n";
|
686 |
}
|
687 |
+
//* Free memory.
|
688 |
+
unset( $latests_posts, $latest_post, $front_page );
|
689 |
+
}
|
690 |
|
691 |
+
//= Render the page for posts.
|
692 |
if ( $page_on_front && $page_for_posts_id ) :
|
|
|
693 |
//* Remove ID for blog from list and add frontpage to list.
|
694 |
if ( false !== $key_for_posts = array_search( $page_for_posts_id, $latest_pages, true ) ) {
|
695 |
unset( $latest_pages[ $key_for_posts ] );
|
696 |
}
|
697 |
|
698 |
+
$blog_page = \get_post( $page_for_posts_id );
|
699 |
+
$render_blog = isset( $blog_page->ID )
|
700 |
+
&& $this->is_post_included_in_sitemap( $blog_page->ID )
|
701 |
+
&& ! $this->is_protected( $blog_page->ID );
|
702 |
|
703 |
+
if ( $render_blog ) {
|
704 |
+
$_url = $this->create_canonical_url( array( 'id' => $blog_page->ID ) );
|
705 |
+
if ( $_url ) {
|
706 |
$content .= "\t<url>\n";
|
707 |
+
$content .= "\t\t<loc>" . $_url . "</loc>\n";
|
708 |
|
709 |
+
// Keep it consistent. Only parse if $page_lastmod is true.
|
710 |
if ( $page_lastmod ) {
|
711 |
$args = array(
|
712 |
'numberposts' => 1,
|
717 |
'order' => 'DESC',
|
718 |
'offset' => 0,
|
719 |
);
|
720 |
+
$lastest_posts = \wp_get_recent_posts( $args, OBJECT );
|
721 |
+
$lastest_post = isset( $lastest_posts[0] ) ? $lastest_posts[0] : null;
|
722 |
$latest_post_published_gmt = isset( $lastest_post->post_date_gmt ) ? $lastest_post->post_date_gmt : '0000-00-00 00:00:00';
|
723 |
+
$page_for_posts_modified_gmt = $blog_page->post_modified_gmt;
|
724 |
|
725 |
if ( strtotime( $latest_post_published_gmt ) > strtotime( $page_for_posts_modified_gmt ) ) {
|
726 |
$page_modified_gmt = $latest_post_published_gmt;
|
735 |
$content .= "\t\t<priority>0.9</priority>\n";
|
736 |
$content .= "\t</url>\n";
|
737 |
}
|
738 |
+
}
|
739 |
|
740 |
+
//* Free memory.
|
741 |
+
unset( $latest_posts, $latest_post, $blog_page );
|
742 |
endif;
|
743 |
|
|
|
|
|
|
|
744 |
foreach ( $latest_pages as $page_id ) :
|
745 |
$page = \get_post( $page_id );
|
746 |
+
if ( empty( $page->ID ) || ! $this->is_post_included_in_sitemap( $page->ID ) )
|
747 |
+
continue;
|
748 |
|
749 |
+
$_url = $this->create_canonical_url( array( 'id' => $page->ID ) );
|
750 |
+
if ( ! $_url )
|
751 |
+
continue;
|
|
|
|
|
752 |
|
753 |
+
$content .= "\t<url>\n";
|
754 |
+
$content .= "\t\t<loc>" . $_url . "</loc>\n";
|
|
|
|
|
755 |
|
756 |
+
// Keep it consistent. Only parse if page_lastmod is true.
|
757 |
+
if ( $page_lastmod ) {
|
758 |
+
$page_modified_gmt = $page->post_modified_gmt;
|
759 |
|
760 |
+
if ( '0000-00-00 00:00:00' !== $page_modified_gmt )
|
761 |
+
$content .= "\t\t<lastmod>" . $this->gmt2date( $timestamp_format, $page_modified_gmt ) . "</lastmod>\n";
|
762 |
+
}
|
763 |
|
764 |
+
$content .= "\t\t<priority>0.9</priority>\n";
|
765 |
+
$content .= "\t</url>\n";
|
|
|
|
|
|
|
766 |
endforeach;
|
767 |
|
768 |
//* Free memory.
|
769 |
+
unset( $latest_pages, $page );
|
770 |
endif;
|
771 |
|
772 |
if ( $totalposts ) {
|
829 |
*/
|
830 |
foreach ( $latest_posts as $post_id ) :
|
831 |
$post = \get_post( $post_id );
|
832 |
+
if ( empty( $post->ID ) || ! $this->is_post_included_in_sitemap( $post->ID ) )
|
833 |
+
continue;
|
834 |
|
835 |
+
$_url = $this->create_canonical_url( array( 'id' => $post->ID ) );
|
836 |
+
if ( ! $_url )
|
837 |
+
continue;
|
|
|
|
|
|
|
|
|
|
|
838 |
|
839 |
+
$content .= "\t<url>\n";
|
840 |
+
// No need to use static vars
|
841 |
+
$content .= "\t\t<loc>" . $_url . "</loc>\n";
|
842 |
|
843 |
+
// Keep it consistent. Only parse if page_lastmod is true.
|
844 |
+
if ( $post_lastmod ) {
|
845 |
+
$post_modified_gmt = $post->post_modified_gmt;
|
846 |
|
847 |
+
if ( '0000-00-00 00:00:00' !== $post_modified_gmt )
|
848 |
+
$content .= "\t\t<lastmod>" . $this->gmt2date( $timestamp_format, $post_modified_gmt ) . "</lastmod>\n";
|
849 |
+
}
|
850 |
|
851 |
+
$content .= "\t\t<priority>" . number_format( $priority, 1 ) . "</priority>\n";
|
852 |
+
$content .= "\t</url>\n";
|
853 |
|
854 |
+
// Lower the priority for the next pass.
|
855 |
+
$priority = $priority - $prioritydiff;
|
856 |
|
857 |
+
// Cast away negative numbers.
|
858 |
+
$priority = $priority <= 0 ? 0 : (float) $priority;
|
|
|
|
|
|
|
859 |
endforeach;
|
860 |
|
861 |
//* Free memory.
|
862 |
+
unset( $latest_posts, $post );
|
863 |
endif;
|
864 |
|
865 |
if ( $total_cpt_posts ) :
|
937 |
* This can be heavy.
|
938 |
*/
|
939 |
foreach ( $latest_cpt_posts as $ctp_post_id ) :
|
|
|
940 |
$ctp_post = \get_post( $ctp_post_id );
|
941 |
+
if ( empty( $ctp_post->ID ) || ! $this->is_post_included_in_sitemap( $ctp_post->ID ) )
|
942 |
+
continue;
|
943 |
|
944 |
+
$_url = $this->create_canonical_url( array( 'id' => $ctp_post->ID ) );
|
945 |
+
if ( ! $_url )
|
946 |
+
continue;
|
|
|
|
|
|
|
|
|
947 |
|
948 |
+
$content .= "\t<url>\n";
|
949 |
+
//* No need to use static vars
|
950 |
+
$content .= "\t\t<loc>" . $_url . "</loc>\n";
|
951 |
+
|
952 |
+
//* Keep it consistent. Only parse if $post_lastmod is true.
|
953 |
+
if ( $post_lastmod ) {
|
954 |
+
$cpt_modified_gmt = $ctp_post->post_modified_gmt;
|
955 |
+
//* Some CPT don't set modified time.
|
956 |
+
if ( '0000-00-00 00:00:00' !== $cpt_modified_gmt )
|
957 |
+
$content .= "\t\t<lastmod>" . $this->gmt2date( $timestamp_format, $cpt_modified_gmt ) . "</lastmod>\n";
|
958 |
+
}
|
|
|
|
|
|
|
|
|
959 |
|
960 |
+
$content .= "\t\t<priority>" . number_format( $priority_cpt, 1 ) . "</priority>\n";
|
961 |
+
$content .= "\t</url>\n";
|
962 |
|
963 |
+
// Lower the priority for the next pass.
|
964 |
+
$priority_cpt = $priority_cpt - $prioritydiff_cpt;
|
965 |
|
966 |
+
// Cast away negative numbers.
|
967 |
+
$priority_cpt = $priority_cpt <= 0 ? 0 : (float) $priority_cpt;
|
|
|
|
|
|
|
968 |
endforeach;
|
969 |
|
970 |
//* Free memory.
|
971 |
+
unset( $latest_cpt_posts, $ctp_post );
|
972 |
endif;
|
973 |
|
974 |
/**
|
1032 |
return $content;
|
1033 |
}
|
1034 |
|
1035 |
+
/**
|
1036 |
+
* Determines if post is possibly included in the sitemap.
|
1037 |
+
*
|
1038 |
+
* This is a weak check, as the filter might not be present outside of the
|
1039 |
+
* sitemap's scope.
|
1040 |
+
* The URL also isn't checked, nor the position.
|
1041 |
+
*
|
1042 |
+
* @since 3.0.4
|
1043 |
+
*
|
1044 |
+
* @param int $id The post ID to check. When 0, the custom field will not be checked.
|
1045 |
+
* @return bool True if included, false otherwise.
|
1046 |
+
*/
|
1047 |
+
public function is_post_included_in_sitemap( $id ) {
|
1048 |
+
|
1049 |
+
static $excluded = null;
|
1050 |
+
if ( null === $excluded ) {
|
1051 |
+
/**
|
1052 |
+
* Applies filters the_seo_framework_sitemap_exclude_ids : array of id's
|
1053 |
+
*
|
1054 |
+
* @since 2.5.2
|
1055 |
+
* @since 2.8.0 : No longer accepts '0' as entry.
|
1056 |
+
*/
|
1057 |
+
$excluded = (array) \apply_filters( 'the_seo_framework_sitemap_exclude_ids', array() );
|
1058 |
+
|
1059 |
+
if ( empty( $excluded ) ) {
|
1060 |
+
$excluded = array();
|
1061 |
+
} else {
|
1062 |
+
$excluded = array_flip( $excluded );
|
1063 |
+
}
|
1064 |
+
}
|
1065 |
+
|
1066 |
+
$included = empty( $excluded[ $id ] );
|
1067 |
+
if ( $included && $id ) {
|
1068 |
+
$included = ! $this->get_custom_field( '_genesis_noindex', $id );
|
1069 |
+
}
|
1070 |
+
|
1071 |
+
return $included;
|
1072 |
+
}
|
1073 |
+
|
1074 |
/**
|
1075 |
* Ping search engines on post publish.
|
1076 |
*
|
inc/classes/term-data.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -91,6 +91,7 @@ class Term_Data extends Post_Data {
|
|
91 |
*
|
92 |
* @since 2.7.0
|
93 |
* @since 2.8.0 : Added filter.
|
|
|
94 |
* @staticvar array $cache
|
95 |
*
|
96 |
* @param int $term_id The Term ID.
|
@@ -311,6 +312,8 @@ class Term_Data extends Post_Data {
|
|
311 |
*
|
312 |
* @since 2.6.0
|
313 |
* @since 2.9.4 Added $term->label and $term->labels->singular_name as additional fallbacks.
|
|
|
|
|
314 |
* @staticvar string $term_name : Caution: This function only runs once per screen and doesn't check the term type more than once.
|
315 |
*
|
316 |
* @param object $term The Taxonomy Term object.
|
@@ -330,6 +333,8 @@ class Term_Data extends Post_Data {
|
|
330 |
$term_name = array();
|
331 |
}
|
332 |
|
|
|
|
|
333 |
if ( isset( $term->taxonomy ) ) {
|
334 |
$tax_type = $term->taxonomy;
|
335 |
|
@@ -344,26 +349,27 @@ class Term_Data extends Post_Data {
|
|
344 |
|
345 |
if ( $singular ) {
|
346 |
if ( isset( $term_labels[ $tax_type ]->singular_name ) )
|
347 |
-
|
348 |
} else {
|
349 |
if ( isset( $term_labels->name ) )
|
350 |
-
|
351 |
}
|
352 |
} elseif ( isset( $term->label ) ) {
|
353 |
-
|
354 |
} elseif ( isset( $term->labels->singular_name ) ) {
|
355 |
-
|
356 |
}
|
357 |
|
358 |
-
if ( $fallback ) {
|
359 |
//* Fallback to Page as it is generic.
|
360 |
-
if ( $singular )
|
361 |
-
return
|
362 |
-
|
363 |
-
|
|
|
364 |
}
|
365 |
|
366 |
-
return $term_name[ $singular ] =
|
367 |
}
|
368 |
|
369 |
/**
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
91 |
*
|
92 |
* @since 2.7.0
|
93 |
* @since 2.8.0 : Added filter.
|
94 |
+
* @since 3.0.0 : Added filter.
|
95 |
* @staticvar array $cache
|
96 |
*
|
97 |
* @param int $term_id The Term ID.
|
312 |
*
|
313 |
* @since 2.6.0
|
314 |
* @since 2.9.4 Added $term->label and $term->labels->singular_name as additional fallbacks.
|
315 |
+
* @since 3.0.4 : 1. Now caches ->label and ->singular_name.
|
316 |
+
* 2. No longer caches fallbacks.
|
317 |
* @staticvar string $term_name : Caution: This function only runs once per screen and doesn't check the term type more than once.
|
318 |
*
|
319 |
* @param object $term The Taxonomy Term object.
|
333 |
$term_name = array();
|
334 |
}
|
335 |
|
336 |
+
$ret = '';
|
337 |
+
|
338 |
if ( isset( $term->taxonomy ) ) {
|
339 |
$tax_type = $term->taxonomy;
|
340 |
|
349 |
|
350 |
if ( $singular ) {
|
351 |
if ( isset( $term_labels[ $tax_type ]->singular_name ) )
|
352 |
+
$ret = $term_labels[ $tax_type ]->singular_name;
|
353 |
} else {
|
354 |
if ( isset( $term_labels->name ) )
|
355 |
+
$ret = $term_labels[ $tax_type ]->name;
|
356 |
}
|
357 |
} elseif ( isset( $term->label ) ) {
|
358 |
+
$ret = $term->label;
|
359 |
} elseif ( isset( $term->labels->singular_name ) ) {
|
360 |
+
$ret = $term->labels->singular_name;
|
361 |
}
|
362 |
|
363 |
+
if ( $fallback && ! $ret ) {
|
364 |
//* Fallback to Page as it is generic.
|
365 |
+
if ( $singular ) {
|
366 |
+
return \esc_html__( 'Page', 'autodescription' );
|
367 |
+
} else {
|
368 |
+
return \esc_html__( 'Pages', 'autodescription' );
|
369 |
+
}
|
370 |
}
|
371 |
|
372 |
+
return $term_name[ $singular ] = $ret;
|
373 |
}
|
374 |
|
375 |
/**
|
inc/classes/user-data.class.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/compat/plugin-bbpress.php
CHANGED
@@ -144,6 +144,7 @@ function _bbpress_filter_url_path( $path, $id = 0, $external = false ) {
|
|
144 |
* This function fixes the Excerpt part.
|
145 |
*
|
146 |
* @since 2.9.0
|
|
|
147 |
* @access private
|
148 |
*
|
149 |
* @param string $excerpt The excerpt to use.
|
@@ -152,7 +153,7 @@ function _bbpress_filter_url_path( $path, $id = 0, $external = false ) {
|
|
152 |
* @param int $max_char_length Determines the maximum length of excerpt after trimming.
|
153 |
* @return string The excerpt.
|
154 |
*/
|
155 |
-
function _bbpress_filter_excerpt_generation( $excerpt = '', $page_id = 0, $term = '', $max_char_length =
|
156 |
|
157 |
if ( \is_bbpress() ) {
|
158 |
if ( \bbp_is_topic_tag() ) {
|
144 |
* This function fixes the Excerpt part.
|
145 |
*
|
146 |
* @since 2.9.0
|
147 |
+
* @since 3.0.4 : Default value for $max_char_length has been increased from 155 to 300.
|
148 |
* @access private
|
149 |
*
|
150 |
* @param string $excerpt The excerpt to use.
|
153 |
* @param int $max_char_length Determines the maximum length of excerpt after trimming.
|
154 |
* @return string The excerpt.
|
155 |
*/
|
156 |
+
function _bbpress_filter_excerpt_generation( $excerpt = '', $page_id = 0, $term = '', $max_char_length = 300 ) {
|
157 |
|
158 |
if ( \is_bbpress() ) {
|
159 |
if ( \bbp_is_topic_tag() ) {
|
inc/compat/plugin-wpml.php
CHANGED
@@ -16,7 +16,7 @@ defined( 'ABSPATH' ) and $_this = \the_seo_framework_class() and $this instanceo
|
|
16 |
|
17 |
\add_action( 'current_screen', __NAMESPACE__ . '\\_wpml_do_current_screen_action' );
|
18 |
/**
|
19 |
-
* Adds WPML filters
|
20 |
*
|
21 |
* @since 2.8.0
|
22 |
* @access private
|
16 |
|
17 |
\add_action( 'current_screen', __NAMESPACE__ . '\\_wpml_do_current_screen_action' );
|
18 |
/**
|
19 |
+
* Adds WPML filters based on current screen.
|
20 |
*
|
21 |
* @since 2.8.0
|
22 |
* @access private
|
inc/functions/deprecated.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
-
* Copyright (C) 2015 -
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/functions/optionsapi.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
-
* Copyright (C) 2015 -
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/functions/plugin-activation.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'THE_SEO_FRAMEWORK_DIR_PATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/functions/plugin-deactivation.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'THE_SEO_FRAMEWORK_DIR_PATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/functions/plugin-test-server.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
-
* Copyright (C) 2015 -
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -43,7 +43,7 @@ function the_seo_framework_test_server_phase() {
|
|
43 |
|
44 |
//* @TODO clean this up @ 4.6 requirement. i.e. only check for `get_network()` and $nw->site_id.
|
45 |
//= WP_Network is WP > 4.4.
|
46 |
-
if ( $ms && class_exists( '
|
47 |
//* Try bypassing testing and deactivation gaming when the main blog has already been tested.
|
48 |
|
49 |
/**
|
@@ -54,7 +54,7 @@ function the_seo_framework_test_server_phase() {
|
|
54 |
|
55 |
//= WP < 4.6 doesn't have get_network().
|
56 |
$nw = function_exists( 'get_network' ) ? get_network() : $GLOBALS['current_site'];
|
57 |
-
if ( $nw instanceof
|
58 |
//= WP < 4.6 doesn't have property 'site_id'.
|
59 |
$site_id = isset( $nw->site_id ) ? $nw->site_id : (int) $nw->blog_id;
|
60 |
|
@@ -104,7 +104,6 @@ function the_seo_framework_test_server_phase() {
|
|
104 |
return;
|
105 |
|
106 |
switch ( $test ) :
|
107 |
-
case 0 :
|
108 |
case 1 :
|
109 |
//* PHP requirements not met, always count up to encourage best standards.
|
110 |
$requirement = 'PHP 5.3.0 or later';
|
@@ -123,6 +122,7 @@ function the_seo_framework_test_server_phase() {
|
|
123 |
|
124 |
default :
|
125 |
wp_die();
|
|
|
126 |
endswitch;
|
127 |
|
128 |
//* network_admin_url() falls back to admin_url() on single. But networks can enable single too.
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
43 |
|
44 |
//* @TODO clean this up @ 4.6 requirement. i.e. only check for `get_network()` and $nw->site_id.
|
45 |
//= WP_Network is WP > 4.4.
|
46 |
+
if ( $ms && class_exists( 'WP_Network', false ) ) {
|
47 |
//* Try bypassing testing and deactivation gaming when the main blog has already been tested.
|
48 |
|
49 |
/**
|
54 |
|
55 |
//= WP < 4.6 doesn't have get_network().
|
56 |
$nw = function_exists( 'get_network' ) ? get_network() : $GLOBALS['current_site'];
|
57 |
+
if ( $nw instanceof WP_Network ) {
|
58 |
//= WP < 4.6 doesn't have property 'site_id'.
|
59 |
$site_id = isset( $nw->site_id ) ? $nw->site_id : (int) $nw->blog_id;
|
60 |
|
104 |
return;
|
105 |
|
106 |
switch ( $test ) :
|
|
|
107 |
case 1 :
|
108 |
//* PHP requirements not met, always count up to encourage best standards.
|
109 |
$requirement = 'PHP 5.3.0 or later';
|
122 |
|
123 |
default :
|
124 |
wp_die();
|
125 |
+
break;
|
126 |
endswitch;
|
127 |
|
128 |
//* network_admin_url() falls back to admin_url() on single. But networks can enable single too.
|
inc/functions/upgrade.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
-
* Copyright (C) 2015 -
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
1 |
<?php
|
2 |
/**
|
3 |
* The SEO Framework plugin
|
4 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
5 |
*
|
6 |
* This program is free software: you can redistribute it and/or modify
|
7 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/interfaces/debug.interface.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
inc/views/inpost/seo-settings-singular.php
CHANGED
@@ -40,18 +40,18 @@ switch ( $instance ) :
|
|
40 |
'dashicon' => 'admin-generic',
|
41 |
'args' => array( $type ),
|
42 |
),
|
43 |
-
'visibility' => array(
|
44 |
-
'name' => __( 'Visibility', 'autodescription' ),
|
45 |
-
'callback' => array( $this, 'singular_inpost_box_visibility_tab' ),
|
46 |
-
'dashicon' => 'visibility',
|
47 |
-
'args' => array( $type ),
|
48 |
-
),
|
49 |
'social' => array(
|
50 |
'name' => __( 'Social', 'autodescription' ),
|
51 |
'callback' => array( $this, 'singular_inpost_box_social_tab' ),
|
52 |
'dashicon' => 'share',
|
53 |
'args' => array( $type ),
|
54 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
);
|
56 |
|
57 |
/**
|
@@ -120,7 +120,7 @@ switch ( $instance ) :
|
|
120 |
<div class="tsf-flex-setting-input tsf-flex">
|
121 |
<div id="tsf-title-wrap">
|
122 |
<input class="large-text" type="text" name="autodescription[_genesis_title]" id="autodescription_title" placeholder="<?php echo esc_attr( $doctitle_placeholder ); ?>" value="<?php echo esc_attr( $this->get_custom_field( '_genesis_title' ) ); ?>" autocomplete=off />
|
123 |
-
<?php echo $this->
|
124 |
</div>
|
125 |
</div>
|
126 |
</div>
|
@@ -146,6 +146,7 @@ switch ( $instance ) :
|
|
146 |
</div>
|
147 |
<div class="tsf-flex-setting-input tsf-flex">
|
148 |
<textarea class="large-text" name="autodescription[_genesis_description]" id="autodescription_description" placeholder="<?php echo esc_attr( $description_placeholder ); ?>" rows="4" cols="4"><?php echo esc_attr( $this->get_custom_field( '_genesis_description' ) ); ?></textarea>
|
|
|
149 |
</div>
|
150 |
</div>
|
151 |
<?php
|
@@ -313,6 +314,117 @@ switch ( $instance ) :
|
|
313 |
break;
|
314 |
|
315 |
case 'inpost_social' :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
316 |
//* Fetch image placeholder.
|
317 |
$image_placeholder = $this->get_social_image( array( 'post_id' => $post_id, 'disallowed' => array( 'postmeta' ), 'escape' => false ) );
|
318 |
|
40 |
'dashicon' => 'admin-generic',
|
41 |
'args' => array( $type ),
|
42 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
'social' => array(
|
44 |
'name' => __( 'Social', 'autodescription' ),
|
45 |
'callback' => array( $this, 'singular_inpost_box_social_tab' ),
|
46 |
'dashicon' => 'share',
|
47 |
'args' => array( $type ),
|
48 |
),
|
49 |
+
'visibility' => array(
|
50 |
+
'name' => __( 'Visibility', 'autodescription' ),
|
51 |
+
'callback' => array( $this, 'singular_inpost_box_visibility_tab' ),
|
52 |
+
'dashicon' => 'visibility',
|
53 |
+
'args' => array( $type ),
|
54 |
+
),
|
55 |
);
|
56 |
|
57 |
/**
|
120 |
<div class="tsf-flex-setting-input tsf-flex">
|
121 |
<div id="tsf-title-wrap">
|
122 |
<input class="large-text" type="text" name="autodescription[_genesis_title]" id="autodescription_title" placeholder="<?php echo esc_attr( $doctitle_placeholder ); ?>" value="<?php echo esc_attr( $this->get_custom_field( '_genesis_title' ) ); ?>" autocomplete=off />
|
123 |
+
<?php echo $this->output_js_title_elements(); ?>
|
124 |
</div>
|
125 |
</div>
|
126 |
</div>
|
146 |
</div>
|
147 |
<div class="tsf-flex-setting-input tsf-flex">
|
148 |
<textarea class="large-text" name="autodescription[_genesis_description]" id="autodescription_description" placeholder="<?php echo esc_attr( $description_placeholder ); ?>" rows="4" cols="4"><?php echo esc_attr( $this->get_custom_field( '_genesis_description' ) ); ?></textarea>
|
149 |
+
<?php echo $this->output_js_description_elements(); ?>
|
150 |
</div>
|
151 |
</div>
|
152 |
<?php
|
314 |
break;
|
315 |
|
316 |
case 'inpost_social' :
|
317 |
+
// Gets custom fields.
|
318 |
+
$custom_og_title = $this->get_custom_field( '_open_graph_title', $post_id );
|
319 |
+
$custom_tw_title = $this->get_custom_field( '_twitter_title', $post_id );
|
320 |
+
$custom_og_desc = $this->get_custom_field( '_open_graph_description', $post_id );
|
321 |
+
$custom_tw_desc = $this->get_custom_field( '_twitter_description', $post_id );
|
322 |
+
|
323 |
+
//! OG input falls back to default input.
|
324 |
+
$og_tit_placeholder = $this->get_generated_open_graph_title( $post_id );
|
325 |
+
$og_desc_placeholder = $this->get_generated_open_graph_description( $post_id );
|
326 |
+
$og_tit_len_parsed = $custom_og_title ? html_entity_decode( $custom_og_title ) : html_entity_decode( $og_tit_placeholder );
|
327 |
+
$og_desc_len_parsed = $custom_og_desc ? html_entity_decode( $custom_og_desc ) : html_entity_decode( $og_desc_placeholder );
|
328 |
+
|
329 |
+
//! Twitter input falls back to OG input.
|
330 |
+
$tw_tit_placeholder = $custom_og_title ?: $og_tit_placeholder;
|
331 |
+
$tw_desc_placeholder = $custom_og_desc ?: $og_desc_placeholder;
|
332 |
+
$tw_tit_len_parsed = $custom_tw_title ? html_entity_decode( $custom_tw_title ) : $og_tit_len_parsed;
|
333 |
+
$tw_desc_len_parsed = $custom_tw_desc ? html_entity_decode( $custom_tw_desc ) : $og_desc_len_parsed;
|
334 |
+
|
335 |
+
$show_og = $this->is_option_checked( 'og_tags' ) && ! $this->detect_og_plugin();
|
336 |
+
$show_tw = $this->is_option_checked( 'twitter_tags' ) && ! $this->detect_twitter_card_plugin();
|
337 |
+
|
338 |
+
?>
|
339 |
+
<div class="tsf-flex-setting tsf-flex" <?php echo $show_og ? '' : 'style=display:none'; ?>>
|
340 |
+
<div class="tsf-flex-setting-label tsf-flex">
|
341 |
+
<div class="tsf-flex-setting-label-inner-wrap tsf-flex">
|
342 |
+
<label for="autodescription_og_title" class="tsf-flex-setting-label-item tsf-flex">
|
343 |
+
<div><strong>
|
344 |
+
<?php
|
345 |
+
esc_html_e( 'Open Graph Title', 'autodescription' );
|
346 |
+
?>
|
347 |
+
</strong></div>
|
348 |
+
</label>
|
349 |
+
<?php
|
350 |
+
$this->get_option( 'display_character_counter' )
|
351 |
+
and $this->output_character_counter_wrap( 'autodescription_og_title', $og_tit_len_parsed );
|
352 |
+
?>
|
353 |
+
</div>
|
354 |
+
</div>
|
355 |
+
<div class="tsf-flex-setting-input tsf-flex">
|
356 |
+
<div id="tsf-og-title-wrap">
|
357 |
+
<input class="large-text" type="text" name="autodescription[_open_graph_title]" id="autodescription_og_title" placeholder="<?php echo esc_attr( $og_tit_placeholder ); ?>" value="<?php echo esc_attr( $this->get_custom_field( '_open_graph_title' ) ); ?>" autocomplete=off />
|
358 |
+
</div>
|
359 |
+
</div>
|
360 |
+
</div>
|
361 |
+
|
362 |
+
<div class="tsf-flex-setting tsf-flex" <?php echo $show_og ? '' : 'style=display:none'; ?>>
|
363 |
+
<div class="tsf-flex-setting-label tsf-flex">
|
364 |
+
<div class="tsf-flex-setting-label-inner-wrap tsf-flex">
|
365 |
+
<label for="autodescription_og_description" class="tsf-flex-setting-label-item tsf-flex">
|
366 |
+
<div><strong>
|
367 |
+
<?php
|
368 |
+
esc_html_e( 'Open Graph Description', 'autodescription' );
|
369 |
+
?>
|
370 |
+
</strong></div>
|
371 |
+
</label>
|
372 |
+
<?php
|
373 |
+
$this->get_option( 'display_character_counter' )
|
374 |
+
and $this->output_character_counter_wrap( 'autodescription_og_description', $og_desc_len_parsed );
|
375 |
+
?>
|
376 |
+
</div>
|
377 |
+
</div>
|
378 |
+
<div class="tsf-flex-setting-input tsf-flex">
|
379 |
+
<textarea class="large-text" name="autodescription[_open_graph_description]" id="autodescription_og_description" placeholder="<?php echo esc_attr( $og_desc_placeholder ); ?>" rows="3" cols="4"><?php echo esc_attr( $this->get_custom_field( '_open_graph_description' ) ); ?></textarea>
|
380 |
+
</div>
|
381 |
+
</div>
|
382 |
+
|
383 |
+
<div class="tsf-flex-setting tsf-flex" <?php echo $show_tw ? '' : 'style=display:none'; ?>>
|
384 |
+
<div class="tsf-flex-setting-label tsf-flex">
|
385 |
+
<div class="tsf-flex-setting-label-inner-wrap tsf-flex">
|
386 |
+
<label for="autodescription_twitter_title" class="tsf-flex-setting-label-item tsf-flex">
|
387 |
+
<div><strong>
|
388 |
+
<?php
|
389 |
+
esc_html_e( 'Twitter Title', 'autodescription' );
|
390 |
+
?>
|
391 |
+
</strong></div>
|
392 |
+
</label>
|
393 |
+
<?php
|
394 |
+
$this->get_option( 'display_character_counter' )
|
395 |
+
and $this->output_character_counter_wrap( 'autodescription_twitter_title', $tw_tit_len_parsed );
|
396 |
+
?>
|
397 |
+
</div>
|
398 |
+
</div>
|
399 |
+
<div class="tsf-flex-setting-input tsf-flex">
|
400 |
+
<div id="tsf-twitter-title-wrap">
|
401 |
+
<input class="large-text" type="text" name="autodescription[_twitter_title]" id="autodescription_twitter_title" placeholder="<?php echo esc_attr( $tw_tit_placeholder ); ?>" value="<?php echo esc_attr( $this->get_custom_field( '_twitter_title' ) ); ?>" autocomplete=off />
|
402 |
+
</div>
|
403 |
+
</div>
|
404 |
+
</div>
|
405 |
+
|
406 |
+
<div class="tsf-flex-setting tsf-flex" <?php echo $show_tw ? '' : 'style=display:none'; ?>>
|
407 |
+
<div class="tsf-flex-setting-label tsf-flex">
|
408 |
+
<div class="tsf-flex-setting-label-inner-wrap tsf-flex">
|
409 |
+
<label for="autodescription_twitter_description" class="tsf-flex-setting-label-item tsf-flex">
|
410 |
+
<div><strong>
|
411 |
+
<?php
|
412 |
+
esc_html_e( 'Twitter Description', 'autodescription' );
|
413 |
+
?>
|
414 |
+
</strong></div>
|
415 |
+
</label>
|
416 |
+
<?php
|
417 |
+
$this->get_option( 'display_character_counter' )
|
418 |
+
and $this->output_character_counter_wrap( 'autodescription_twitter_description', $tw_desc_len_parsed );
|
419 |
+
?>
|
420 |
+
</div>
|
421 |
+
</div>
|
422 |
+
<div class="tsf-flex-setting-input tsf-flex">
|
423 |
+
<textarea class="large-text" name="autodescription[_twitter_description]" id="autodescription_twitter_description" placeholder="<?php echo esc_attr( $tw_desc_placeholder ); ?>" rows="3" cols="4"><?php echo esc_attr( $this->get_custom_field( '_twitter_description' ) ); ?></textarea>
|
424 |
+
</div>
|
425 |
+
</div>
|
426 |
+
<?php
|
427 |
+
|
428 |
//* Fetch image placeholder.
|
429 |
$image_placeholder = $this->get_social_image( array( 'post_id' => $post_id, 'disallowed' => array( 'postmeta' ), 'escape' => false ) );
|
430 |
|
inc/views/inpost/seo-settings-tt.php
CHANGED
@@ -132,7 +132,7 @@ $robots_settings = array(
|
|
132 |
<td>
|
133 |
<div id="tsf-title-wrap">
|
134 |
<input name="autodescription-meta[doctitle]" id="autodescription-meta[doctitle]" type="text" placeholder="<?php echo esc_attr( $title_placeholder ); ?>" value="<?php echo esc_attr( $title ); ?>" size="40" autocomplete=off />
|
135 |
-
<?php $this->
|
136 |
</div>
|
137 |
</td>
|
138 |
</tr>
|
@@ -156,6 +156,7 @@ $robots_settings = array(
|
|
156 |
</th>
|
157 |
<td>
|
158 |
<textarea name="autodescription-meta[description]" id="autodescription-meta[description]" placeholder="<?php echo esc_attr( $description_placeholder ); ?>" rows="5" cols="50" class="large-text"><?php echo esc_html( $description ); ?></textarea>
|
|
|
159 |
</td>
|
160 |
</tr>
|
161 |
|
132 |
<td>
|
133 |
<div id="tsf-title-wrap">
|
134 |
<input name="autodescription-meta[doctitle]" id="autodescription-meta[doctitle]" type="text" placeholder="<?php echo esc_attr( $title_placeholder ); ?>" value="<?php echo esc_attr( $title ); ?>" size="40" autocomplete=off />
|
135 |
+
<?php $this->output_js_title_elements(); ?>
|
136 |
</div>
|
137 |
</td>
|
138 |
</tr>
|
156 |
</th>
|
157 |
<td>
|
158 |
<textarea name="autodescription-meta[description]" id="autodescription-meta[description]" placeholder="<?php echo esc_attr( $description_placeholder ); ?>" rows="5" cols="50" class="large-text"><?php echo esc_html( $description ); ?></textarea>
|
159 |
+
<?php echo $this->output_js_description_elements(); ?>
|
160 |
</td>
|
161 |
</tr>
|
162 |
|
inc/views/metaboxes/homepage-metabox.php
CHANGED
@@ -183,7 +183,7 @@ switch ( $instance ) :
|
|
183 |
</div>
|
184 |
<p id="tsf-title-wrap">
|
185 |
<input type="text" name="<?php $this->field_name( 'homepage_title' ); ?>" class="large-text" id="<?php $this->field_id( 'homepage_title' ); ?>" placeholder="<?php echo esc_attr( $home_title_placeholder ); ?>" value="<?php echo esc_attr( $this->get_field_value( 'homepage_title' ) ); ?>" autocomplete=off />
|
186 |
-
<?php $this->
|
187 |
</p>
|
188 |
<?php
|
189 |
/**
|
@@ -239,6 +239,7 @@ switch ( $instance ) :
|
|
239 |
</div>
|
240 |
<p>
|
241 |
<textarea name="<?php $this->field_name( 'homepage_description' ); ?>" class="large-text" id="<?php $this->field_id( 'homepage_description' ); ?>" rows="3" cols="70" placeholder="<?php echo esc_attr( $description_placeholder ); ?>"><?php echo esc_attr( $this->get_field_value( 'homepage_description' ) ); ?></textarea>
|
|
|
242 |
</p>
|
243 |
<?php
|
244 |
$this->description( __( 'The meta description can be used to determine the text used under the title on Search Engine results pages.', 'autodescription' ) );
|
183 |
</div>
|
184 |
<p id="tsf-title-wrap">
|
185 |
<input type="text" name="<?php $this->field_name( 'homepage_title' ); ?>" class="large-text" id="<?php $this->field_id( 'homepage_title' ); ?>" placeholder="<?php echo esc_attr( $home_title_placeholder ); ?>" value="<?php echo esc_attr( $this->get_field_value( 'homepage_title' ) ); ?>" autocomplete=off />
|
186 |
+
<?php $this->output_js_title_elements(); ?>
|
187 |
</p>
|
188 |
<?php
|
189 |
/**
|
239 |
</div>
|
240 |
<p>
|
241 |
<textarea name="<?php $this->field_name( 'homepage_description' ); ?>" class="large-text" id="<?php $this->field_id( 'homepage_description' ); ?>" rows="3" cols="70" placeholder="<?php echo esc_attr( $description_placeholder ); ?>"><?php echo esc_attr( $this->get_field_value( 'homepage_description' ) ); ?></textarea>
|
242 |
+
<?php echo $this->output_js_description_elements(); ?>
|
243 |
</p>
|
244 |
<?php
|
245 |
$this->description( __( 'The meta description can be used to determine the text used under the title on Search Engine results pages.', 'autodescription' ) );
|
inc/views/metaboxes/schema-metabox.php
CHANGED
@@ -183,6 +183,7 @@ switch ( $instance ) :
|
|
183 |
<?php
|
184 |
$this->description( __( "Don't have a page at a site or is the profile only privately accessible? Leave that field empty. Unsure? Fill it in anyway.", 'autodescription' ) );
|
185 |
$this->description( __( 'Add the link that leads directly to the social page of this website.', 'autodescription' ) );
|
|
|
186 |
|
187 |
$connectedi18n = _x( 'RelatedProfile', 'No spaces. E.g. https://facebook.com/RelatedProfile', 'autodescription' );
|
188 |
$profile18n = _x( 'Profile', 'Social Profile', 'autodescription' );
|
183 |
<?php
|
184 |
$this->description( __( "Don't have a page at a site or is the profile only privately accessible? Leave that field empty. Unsure? Fill it in anyway.", 'autodescription' ) );
|
185 |
$this->description( __( 'Add the link that leads directly to the social page of this website.', 'autodescription' ) );
|
186 |
+
$this->description( __( 'These settings do not affect sharing behavior with the social networks.', 'autodescription' ) );
|
187 |
|
188 |
$connectedi18n = _x( 'RelatedProfile', 'No spaces. E.g. https://facebook.com/RelatedProfile', 'autodescription' );
|
189 |
$profile18n = _x( 'Profile', 'Social Profile', 'autodescription' );
|
language/autodescription.pot
CHANGED
@@ -1,74 +1,74 @@
|
|
1 |
-
# Copyright (C)
|
2 |
# This file is distributed under the same license as the The SEO Framework package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: The SEO Framework 3.0.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/autodescription\n"
|
7 |
-
"POT-Creation-Date:
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
-
"PO-Revision-Date:
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
|
15 |
#. translators: %s = term name
|
16 |
|
17 |
-
#: inc/classes/admin-init.class.php:
|
18 |
msgid "Make primary %s"
|
19 |
msgstr ""
|
20 |
|
21 |
#. translators: %s = term name
|
22 |
|
23 |
-
#: inc/classes/admin-init.class.php:
|
24 |
msgid "Primary %s"
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: inc/classes/admin-init.class.php:
|
28 |
msgid "The changes you made will be lost if you navigate away from this page."
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: inc/classes/admin-init.class.php:
|
32 |
msgid "Are you sure you want to reset all SEO settings to their defaults?"
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: inc/classes/admin-init.class.php:
|
36 |
msgid "Good"
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: inc/classes/admin-init.class.php:
|
40 |
msgid "Okay"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: inc/classes/admin-init.class.php:
|
44 |
msgid "Bad"
|
45 |
msgstr ""
|
46 |
|
47 |
-
#: inc/classes/admin-init.class.php:
|
48 |
msgid "Unknown"
|
49 |
msgstr ""
|
50 |
|
51 |
-
#: inc/classes/admin-init.class.php:
|
52 |
msgid "Private:"
|
53 |
msgstr ""
|
54 |
|
55 |
-
#: inc/classes/admin-init.class.php:
|
56 |
msgid "Protected:"
|
57 |
msgstr ""
|
58 |
|
59 |
#. translators: Pixel counter. 1: width, 2: guideline
|
60 |
|
61 |
-
#: inc/classes/admin-init.class.php:
|
62 |
msgid "%1$d out of %2$d pixels are used."
|
63 |
msgstr ""
|
64 |
|
65 |
#. translators: %s = Redirect URL markdown
|
66 |
|
67 |
-
#: inc/classes/admin-init.class.php:
|
68 |
msgid "There has been an error redirecting. Refresh the page or follow [this link](%s)."
|
69 |
msgstr ""
|
70 |
|
71 |
-
#: inc/classes/admin-init.class.php:
|
72 |
msgid "Image could not be processed."
|
73 |
msgstr ""
|
74 |
|
@@ -96,7 +96,7 @@ msgstr ""
|
|
96 |
msgid "New SEO Settings have been updated."
|
97 |
msgstr ""
|
98 |
|
99 |
-
#: inc/classes/admin-pages.class.php:109 inc/classes/site-options.class.php:
|
100 |
msgid "SEO Settings"
|
101 |
msgstr ""
|
102 |
|
@@ -129,8 +129,8 @@ msgid "Schema Settings"
|
|
129 |
msgstr ""
|
130 |
|
131 |
#: inc/classes/admin-pages.class.php:295
|
132 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
133 |
-
#: inc/views/inpost/seo-settings-tt.php:
|
134 |
msgid "Robots Meta Settings"
|
135 |
msgstr ""
|
136 |
|
@@ -146,60 +146,60 @@ msgstr ""
|
|
146 |
msgid "Feed Settings"
|
147 |
msgstr ""
|
148 |
|
149 |
-
#: inc/classes/admin-pages.class.php:
|
150 |
msgctxt "Button hover"
|
151 |
msgid "Select social image"
|
152 |
msgstr ""
|
153 |
|
154 |
-
#: inc/classes/admin-pages.class.php:
|
155 |
msgid "Select Image"
|
156 |
msgstr ""
|
157 |
|
158 |
-
#: inc/classes/admin-pages.class.php:
|
159 |
msgid "Change Image"
|
160 |
msgstr ""
|
161 |
|
162 |
-
#: inc/classes/admin-pages.class.php:
|
163 |
msgid "Remove Image"
|
164 |
msgstr ""
|
165 |
|
166 |
-
#: inc/classes/admin-pages.class.php:
|
167 |
msgid "Remove selected social image"
|
168 |
msgstr ""
|
169 |
|
170 |
-
#: inc/classes/admin-pages.class.php:
|
171 |
msgctxt "Frame title"
|
172 |
msgid "Select Social Image"
|
173 |
msgstr ""
|
174 |
|
175 |
-
#: inc/classes/admin-pages.class.php:
|
176 |
msgid "Use this image"
|
177 |
msgstr ""
|
178 |
|
179 |
-
#: inc/classes/admin-pages.class.php:
|
180 |
msgid "Select Logo"
|
181 |
msgstr ""
|
182 |
|
183 |
-
#: inc/classes/admin-pages.class.php:
|
184 |
msgid "Change Logo"
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: inc/classes/admin-pages.class.php:
|
188 |
msgid "Remove Logo"
|
189 |
msgstr ""
|
190 |
|
191 |
-
#: inc/classes/admin-pages.class.php:
|
192 |
msgid "Unset selected logo"
|
193 |
msgstr ""
|
194 |
|
195 |
-
#: inc/classes/admin-pages.class.php:
|
196 |
msgctxt "Frame title"
|
197 |
msgid "Select Logo"
|
198 |
msgstr ""
|
199 |
|
200 |
#. translators: %s = number
|
201 |
|
202 |
-
#: inc/classes/admin-pages.class.php:
|
203 |
msgid "Characters Used: %s"
|
204 |
msgstr ""
|
205 |
|
@@ -277,226 +277,226 @@ msgstr ""
|
|
277 |
msgid "No Archive"
|
278 |
msgstr ""
|
279 |
|
280 |
-
#: inc/classes/doing-it-right.class.php:
|
281 |
msgid "Refresh to see the SEO Bar status."
|
282 |
msgstr ""
|
283 |
|
284 |
-
#: inc/classes/doing-it-right.class.php:
|
285 |
msgid "Post"
|
286 |
msgstr ""
|
287 |
|
288 |
#. translators: %s = Post type name
|
289 |
|
290 |
-
#: inc/classes/doing-it-right.class.php:
|
291 |
-
#: inc/classes/term-data.class.php:
|
292 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
293 |
msgid "Page"
|
294 |
msgstr ""
|
295 |
|
296 |
-
#: inc/classes/doing-it-right.class.php:
|
297 |
msgid "Failed to fetch post ID."
|
298 |
msgstr ""
|
299 |
|
300 |
#. translators: %s = But or And
|
301 |
|
302 |
-
#: inc/classes/doing-it-right.class.php:
|
303 |
msgid "%s the Title contains the Blogname multiple times."
|
304 |
msgstr ""
|
305 |
|
306 |
#. translators: 1: Word, 2: Occurrences
|
307 |
|
308 |
-
#: inc/classes/doing-it-right.class.php:
|
309 |
msgid "%1$s is used %2$d times."
|
310 |
msgstr ""
|
311 |
|
312 |
#. Translators: %s = Post / Page / Category, etc.
|
313 |
|
314 |
-
#: inc/classes/doing-it-right.class.php:
|
315 |
msgid "%s is being indexed."
|
316 |
msgstr ""
|
317 |
|
318 |
-
#: inc/classes/doing-it-right.class.php:
|
319 |
msgid "But you've discouraged indexing for the whole site."
|
320 |
msgstr ""
|
321 |
|
322 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
323 |
|
324 |
-
#: inc/classes/doing-it-right.class.php:
|
325 |
msgid "%1$s indexing for %2$s have been discouraged."
|
326 |
msgstr ""
|
327 |
|
328 |
#. translators: 1 = But or And, 1 = Post/Page
|
329 |
|
330 |
-
#: inc/classes/doing-it-right.class.php:
|
331 |
msgid "%1$s the %2$s is protected from public visibility. This means indexing is discouraged."
|
332 |
msgstr ""
|
333 |
|
334 |
#. translators: %s = But or And
|
335 |
|
336 |
-
#: inc/classes/doing-it-right.class.php:
|
337 |
msgid "%s the blog isn't set to public. This means WordPress discourages indexing."
|
338 |
msgstr ""
|
339 |
|
340 |
#. translators: %s = But or And
|
341 |
|
342 |
-
#: inc/classes/doing-it-right.class.php:
|
343 |
msgid "%s there are no posts in this term; therefore, indexing has been discouraged."
|
344 |
msgstr ""
|
345 |
|
346 |
-
#: inc/classes/doing-it-right.class.php:
|
347 |
msgid "%s links aren't being followed."
|
348 |
msgstr ""
|
349 |
|
350 |
-
#: inc/classes/doing-it-right.class.php:
|
351 |
msgid "%s links are being followed."
|
352 |
msgstr ""
|
353 |
|
354 |
#. translators: %s = But or And
|
355 |
|
356 |
-
#: inc/classes/doing-it-right.class.php:
|
357 |
msgid "%s you've discouraged the following of links for the whole site."
|
358 |
msgstr ""
|
359 |
|
360 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
361 |
|
362 |
-
#: inc/classes/doing-it-right.class.php:
|
363 |
msgid "%1$s following for %2$s have been discouraged."
|
364 |
msgstr ""
|
365 |
|
366 |
#. translators: %s = But or And
|
367 |
|
368 |
-
#: inc/classes/doing-it-right.class.php:
|
369 |
msgid "%s the blog isn't set to public. This means WordPress allows the links to be followed regardless."
|
370 |
msgstr ""
|
371 |
|
372 |
-
#: inc/classes/doing-it-right.class.php:
|
373 |
msgid "Search Engines aren't allowed to archive this %s."
|
374 |
msgstr ""
|
375 |
|
376 |
-
#: inc/classes/doing-it-right.class.php:
|
377 |
msgid "Search Engines are allowed to archive this %s."
|
378 |
msgstr ""
|
379 |
|
380 |
-
#: inc/classes/doing-it-right.class.php:
|
381 |
msgid "But you've discouraged archiving for the whole site."
|
382 |
msgstr ""
|
383 |
|
384 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
385 |
|
386 |
-
#: inc/classes/doing-it-right.class.php:
|
387 |
msgid "%1$s archiving for %2$s have been discouraged."
|
388 |
msgstr ""
|
389 |
|
390 |
#. translators: %s = But or And
|
391 |
|
392 |
-
#: inc/classes/doing-it-right.class.php:
|
393 |
msgid "%s the blog isn't set to public. This means WordPress allows the blog to be archived regardless."
|
394 |
msgstr ""
|
395 |
|
396 |
-
#: inc/classes/doing-it-right.class.php:
|
397 |
msgid "%s isn't being redirected."
|
398 |
msgstr ""
|
399 |
|
400 |
-
#: inc/classes/doing-it-right.class.php:
|
401 |
-
#: inc/classes/doing-it-right.class.php:
|
402 |
msgid "%s is being redirected. This means no SEO values have to be set."
|
403 |
msgstr ""
|
404 |
|
405 |
-
#: inc/classes/doing-it-right.class.php:
|
406 |
-
#: inc/classes/doing-it-right.class.php:
|
407 |
msgid "%s is not being indexed. This means no SEO values have to be set."
|
408 |
msgstr ""
|
409 |
|
410 |
-
#: inc/classes/doing-it-right.class.php:
|
411 |
msgid "Title:"
|
412 |
msgstr ""
|
413 |
|
414 |
-
#: inc/classes/doing-it-right.class.php:
|
415 |
msgid "Description:"
|
416 |
msgstr ""
|
417 |
|
418 |
-
#: inc/classes/doing-it-right.class.php:
|
419 |
msgid "Index:"
|
420 |
msgstr ""
|
421 |
|
422 |
-
#: inc/classes/doing-it-right.class.php:
|
423 |
msgid "Follow:"
|
424 |
msgstr ""
|
425 |
|
426 |
-
#: inc/classes/doing-it-right.class.php:
|
427 |
msgid "Archive:"
|
428 |
msgstr ""
|
429 |
|
430 |
-
#: inc/classes/doing-it-right.class.php:
|
431 |
msgid "Redirect:"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: inc/classes/doing-it-right.class.php:
|
435 |
msgid "Generated: Automatically generated."
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: inc/classes/doing-it-right.class.php:
|
439 |
msgctxt "Generated"
|
440 |
msgid "G"
|
441 |
msgstr ""
|
442 |
|
443 |
-
#: inc/classes/doing-it-right.class.php:
|
444 |
msgctxt "Title"
|
445 |
msgid "T"
|
446 |
msgstr ""
|
447 |
|
448 |
-
#: inc/classes/doing-it-right.class.php:
|
449 |
msgctxt "Description"
|
450 |
msgid "D"
|
451 |
msgstr ""
|
452 |
|
453 |
-
#: inc/classes/doing-it-right.class.php:
|
454 |
msgctxt "no-Index"
|
455 |
msgid "I"
|
456 |
msgstr ""
|
457 |
|
458 |
-
#: inc/classes/doing-it-right.class.php:
|
459 |
msgctxt "no-Follow"
|
460 |
msgid "F"
|
461 |
msgstr ""
|
462 |
|
463 |
-
#: inc/classes/doing-it-right.class.php:
|
464 |
msgctxt "no-Archive"
|
465 |
msgid "A"
|
466 |
msgstr ""
|
467 |
|
468 |
-
#: inc/classes/doing-it-right.class.php:
|
469 |
msgctxt "Redirect"
|
470 |
msgid "R"
|
471 |
msgstr ""
|
472 |
|
473 |
-
#: inc/classes/doing-it-right.class.php:
|
474 |
msgctxt "But there are..."
|
475 |
msgid "But"
|
476 |
msgstr ""
|
477 |
|
478 |
-
#: inc/classes/doing-it-right.class.php:
|
479 |
msgctxt "And there are..."
|
480 |
msgid "And"
|
481 |
msgstr ""
|
482 |
|
483 |
-
#: inc/classes/doing-it-right.class.php:
|
484 |
msgid "Length is far too short."
|
485 |
msgstr ""
|
486 |
|
487 |
-
#: inc/classes/doing-it-right.class.php:
|
488 |
msgid "Length is too short."
|
489 |
msgstr ""
|
490 |
|
491 |
-
#: inc/classes/doing-it-right.class.php:
|
492 |
msgid "Length is too long."
|
493 |
msgstr ""
|
494 |
|
495 |
-
#: inc/classes/doing-it-right.class.php:
|
496 |
msgid "Length is far too long."
|
497 |
msgstr ""
|
498 |
|
499 |
-
#: inc/classes/doing-it-right.class.php:
|
500 |
msgid "Length is good."
|
501 |
msgstr ""
|
502 |
|
@@ -507,21 +507,21 @@ msgstr ""
|
|
507 |
|
508 |
#. translators: 1: Title, 2: Separator, 3: Excerpt
|
509 |
|
510 |
-
#: inc/classes/generate-description.class.php:
|
511 |
msgctxt "1: Title, 2: Separator, 3: Excerpt"
|
512 |
msgid "%1$s %2$s %3$s"
|
513 |
msgstr ""
|
514 |
|
515 |
#. translators: 1: Title, 2: on, 3: Blogname
|
516 |
|
517 |
-
#: inc/classes/generate-description.class.php:
|
518 |
msgctxt "1: Title, 2: on, 3: Blogname"
|
519 |
msgid "%1$s %2$s %3$s"
|
520 |
msgstr ""
|
521 |
|
522 |
#. translators: Front-end output.
|
523 |
|
524 |
-
#: inc/classes/generate-description.class.php:
|
525 |
#: inc/views/metaboxes/description-metabox.php:18
|
526 |
msgctxt "Placement. e.g. Post Title \"on\" Blog Name"
|
527 |
msgid "on"
|
@@ -529,7 +529,7 @@ msgstr ""
|
|
529 |
|
530 |
#. translators: Front-end output.
|
531 |
|
532 |
-
#: inc/classes/generate-description.class.php:
|
533 |
msgid "Latest posts:"
|
534 |
msgstr ""
|
535 |
|
@@ -541,158 +541,158 @@ msgstr ""
|
|
541 |
#. translators: Front-end output. 1: Taxonomy singular name, 2: Current
|
542 |
#. taxonomy term
|
543 |
|
544 |
-
#: inc/classes/generate-title.class.php:
|
545 |
-
#: inc/classes/generate-title.class.php:
|
546 |
msgid "%1$s: %2$s"
|
547 |
msgstr ""
|
548 |
|
549 |
#. translators: Front-end output.
|
550 |
|
551 |
-
#: inc/classes/generate-title.class.php:
|
552 |
msgid "Author: %s"
|
553 |
msgstr ""
|
554 |
|
555 |
#. translators: Front-end output.
|
556 |
|
557 |
-
#: inc/classes/generate-title.class.php:
|
558 |
msgctxt "yearly archives date format"
|
559 |
msgid "Y"
|
560 |
msgstr ""
|
561 |
|
562 |
#. translators: Front-end output.
|
563 |
|
564 |
-
#: inc/classes/generate-title.class.php:
|
565 |
msgid "Year: %s"
|
566 |
msgstr ""
|
567 |
|
568 |
#. translators: Front-end output.
|
569 |
|
570 |
-
#: inc/classes/generate-title.class.php:
|
571 |
msgctxt "monthly archives date format"
|
572 |
msgid "F Y"
|
573 |
msgstr ""
|
574 |
|
575 |
#. translators: Front-end output.
|
576 |
|
577 |
-
#: inc/classes/generate-title.class.php:
|
578 |
msgid "Month: %s"
|
579 |
msgstr ""
|
580 |
|
581 |
#. translators: Front-end output.
|
582 |
|
583 |
-
#: inc/classes/generate-title.class.php:
|
584 |
msgctxt "daily archives date format"
|
585 |
msgid "F j, Y"
|
586 |
msgstr ""
|
587 |
|
588 |
#. translators: Front-end output.
|
589 |
|
590 |
-
#: inc/classes/generate-title.class.php:
|
591 |
msgid "Day: %s"
|
592 |
msgstr ""
|
593 |
|
594 |
#. translators: Front-end output.
|
595 |
|
596 |
-
#: inc/classes/generate-title.class.php:
|
597 |
msgctxt "post format archive title"
|
598 |
msgid "Asides"
|
599 |
msgstr ""
|
600 |
|
601 |
#. translators: Front-end output.
|
602 |
|
603 |
-
#: inc/classes/generate-title.class.php:
|
604 |
msgctxt "post format archive title"
|
605 |
msgid "Galleries"
|
606 |
msgstr ""
|
607 |
|
608 |
#. translators: Front-end output.
|
609 |
|
610 |
-
#: inc/classes/generate-title.class.php:
|
611 |
msgctxt "post format archive title"
|
612 |
msgid "Images"
|
613 |
msgstr ""
|
614 |
|
615 |
#. translators: Front-end output.
|
616 |
|
617 |
-
#: inc/classes/generate-title.class.php:
|
618 |
msgctxt "post format archive title"
|
619 |
msgid "Videos"
|
620 |
msgstr ""
|
621 |
|
622 |
#. translators: Front-end output.
|
623 |
|
624 |
-
#: inc/classes/generate-title.class.php:
|
625 |
msgctxt "post format archive title"
|
626 |
msgid "Quotes"
|
627 |
msgstr ""
|
628 |
|
629 |
#. translators: Front-end output.
|
630 |
|
631 |
-
#: inc/classes/generate-title.class.php:
|
632 |
msgctxt "post format archive title"
|
633 |
msgid "Links"
|
634 |
msgstr ""
|
635 |
|
636 |
#. translators: Front-end output.
|
637 |
|
638 |
-
#: inc/classes/generate-title.class.php:
|
639 |
msgctxt "post format archive title"
|
640 |
msgid "Statuses"
|
641 |
msgstr ""
|
642 |
|
643 |
#. translators: Front-end output.
|
644 |
|
645 |
-
#: inc/classes/generate-title.class.php:
|
646 |
msgctxt "post format archive title"
|
647 |
msgid "Audio"
|
648 |
msgstr ""
|
649 |
|
650 |
#. translators: Front-end output.
|
651 |
|
652 |
-
#: inc/classes/generate-title.class.php:
|
653 |
msgctxt "post format archive title"
|
654 |
msgid "Chats"
|
655 |
msgstr ""
|
656 |
|
657 |
#. translators: Front-end output.
|
658 |
|
659 |
-
#: inc/classes/generate-title.class.php:
|
660 |
msgid "Archives: %s"
|
661 |
msgstr ""
|
662 |
|
663 |
#. translators: Front-end output.
|
664 |
|
665 |
-
#: inc/classes/generate-title.class.php:
|
666 |
msgid "Archives"
|
667 |
msgstr ""
|
668 |
|
669 |
#. translators: Front-end output.
|
670 |
|
671 |
-
#: inc/classes/generate-title.class.php:
|
672 |
msgid "Untitled"
|
673 |
msgstr ""
|
674 |
|
675 |
#. translators: Front-end output.
|
676 |
|
677 |
-
#: inc/classes/generate-title.class.php:
|
678 |
msgid "Search results for:"
|
679 |
msgstr ""
|
680 |
|
681 |
#. translators: Front-end output.
|
682 |
|
683 |
-
#: inc/classes/generate-title.class.php:
|
684 |
msgid "Protected: %s"
|
685 |
msgstr ""
|
686 |
|
687 |
#. translators: Front-end output.
|
688 |
|
689 |
-
#: inc/classes/generate-title.class.php:
|
690 |
msgid "Private: %s"
|
691 |
msgstr ""
|
692 |
|
693 |
#. translators: %d = page number. Front-end output.
|
694 |
|
695 |
-
#: inc/classes/generate-title.class.php:
|
696 |
msgid "Page %d"
|
697 |
msgstr ""
|
698 |
|
@@ -707,7 +707,7 @@ msgstr ""
|
|
707 |
#. translators: %s = Post Type
|
708 |
#. translators: %s = Term type
|
709 |
|
710 |
-
#: inc/classes/inpost.class.php:230 inc/views/inpost/seo-settings-tt.php:
|
711 |
msgid "%s SEO Settings"
|
712 |
msgstr ""
|
713 |
|
@@ -731,25 +731,25 @@ msgstr ""
|
|
731 |
|
732 |
#. translators: %s = 'The SEO Framework'
|
733 |
|
734 |
-
#: inc/classes/render.class.php:
|
735 |
msgid "Start %s"
|
736 |
msgstr ""
|
737 |
|
738 |
#. translators: %s = 'The SEO Framework'
|
739 |
|
740 |
-
#: inc/classes/render.class.php:
|
741 |
msgid "End %s"
|
742 |
msgstr ""
|
743 |
|
744 |
-
#: inc/classes/render.class.php:
|
745 |
msgid "by Sybre Waaijer"
|
746 |
msgstr ""
|
747 |
|
748 |
-
#: inc/classes/site-options.class.php:
|
749 |
msgid "here"
|
750 |
msgstr ""
|
751 |
|
752 |
-
#: inc/classes/site-options.class.php:
|
753 |
msgctxt "%s = here"
|
754 |
msgid "View the new options %s."
|
755 |
msgstr ""
|
@@ -762,11 +762,11 @@ msgstr ""
|
|
762 |
msgid "Sitemap is served from cache"
|
763 |
msgstr ""
|
764 |
|
765 |
-
#: inc/classes/sitemaps.class.php:
|
766 |
msgid "Sitemap is generated on"
|
767 |
msgstr ""
|
768 |
|
769 |
-
#: inc/classes/term-data.class.php:
|
770 |
msgid "Pages"
|
771 |
msgstr ""
|
772 |
|
@@ -789,17 +789,17 @@ msgid "General"
|
|
789 |
msgstr ""
|
790 |
|
791 |
#: inc/views/inpost/seo-settings-singular.php:44
|
792 |
-
|
|
|
793 |
msgstr ""
|
794 |
|
795 |
#: inc/views/inpost/seo-settings-singular.php:50
|
796 |
-
|
797 |
-
msgid "Social"
|
798 |
msgstr ""
|
799 |
|
800 |
#: inc/views/inpost/seo-settings-singular.php:87
|
801 |
-
#: inc/views/inpost/seo-settings-tt.php:
|
802 |
-
#: inc/views/inpost/seo-settings-tt.php:
|
803 |
msgid "Doing it Right"
|
804 |
msgstr ""
|
805 |
|
@@ -818,113 +818,127 @@ msgstr ""
|
|
818 |
msgid "Custom %s Description"
|
819 |
msgstr ""
|
820 |
|
821 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
822 |
msgid "Custom Canonical URL"
|
823 |
msgstr ""
|
824 |
|
825 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
826 |
msgid "This urges search engines to go to the outputted URL."
|
827 |
msgstr ""
|
828 |
|
829 |
#. translators: 1: Option, 2: Post or Page
|
830 |
|
831 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
832 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
833 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
834 |
msgid "Apply %1$s to this %2$s"
|
835 |
msgstr ""
|
836 |
|
837 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
838 |
msgid "This tells search engines not to show this %s in their search results."
|
839 |
msgstr ""
|
840 |
|
841 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
842 |
msgid "This tells search engines not to follow links on this %s."
|
843 |
msgstr ""
|
844 |
|
845 |
#. translators: %s = Post type name
|
846 |
|
847 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
848 |
msgid "This tells search engines not to save a cached copy of this %s."
|
849 |
msgstr ""
|
850 |
|
851 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
852 |
msgid "Archive Settings"
|
853 |
msgstr ""
|
854 |
|
855 |
#. translators: %s = Post type name
|
856 |
|
857 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
858 |
msgid "Exclude this %s from local search"
|
859 |
msgstr ""
|
860 |
|
861 |
#. translators: %s = Post type name
|
862 |
|
863 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
864 |
msgid "This excludes this %s from local on-site search results."
|
865 |
msgstr ""
|
866 |
|
867 |
#. translators: %s = Post type name
|
868 |
|
869 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
870 |
msgid "Exclude this %s from all archive listings."
|
871 |
msgstr ""
|
872 |
|
873 |
#. translators: %s = Post type name
|
874 |
|
875 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
876 |
msgid "This excludes this %s from on-site archive pages."
|
877 |
msgstr ""
|
878 |
|
879 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
880 |
msgid "Custom 301 Redirect URL"
|
881 |
msgstr ""
|
882 |
|
883 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
884 |
msgid "This will force visitors to go to another URL."
|
885 |
msgstr ""
|
886 |
|
887 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
888 |
msgid "Custom Social Image URL"
|
889 |
msgstr ""
|
890 |
|
891 |
#. translators: %s = Post type name
|
892 |
|
893 |
-
#: inc/views/inpost/seo-settings-singular.php:
|
894 |
msgid "Set preferred %s Social Image URL location."
|
895 |
msgstr ""
|
896 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
897 |
#. translators: %s = Term type
|
898 |
|
899 |
-
#: inc/views/inpost/seo-settings-tt.php:
|
900 |
msgid "%s Title"
|
901 |
msgstr ""
|
902 |
|
903 |
#. translators: %s = Term type
|
904 |
|
905 |
-
#: inc/views/inpost/seo-settings-tt.php:
|
906 |
msgid "%s Meta Description"
|
907 |
msgstr ""
|
908 |
|
909 |
#. translators: %s = noindex/nofollow/noarchive
|
910 |
|
911 |
-
#: inc/views/inpost/seo-settings-tt.php:
|
912 |
-
#: inc/views/inpost/seo-settings-tt.php:158
|
913 |
-
#: inc/views/inpost/seo-settings-tt.php:174
|
914 |
msgid "Apply %s to this term?"
|
915 |
msgstr ""
|
916 |
|
917 |
-
#: inc/views/inpost/seo-settings-tt.php:146
|
918 |
-
#: inc/views/metaboxes/homepage-metabox.php:361
|
919 |
-
msgid "This tells search engines not to show this page in their search results."
|
920 |
-
msgstr ""
|
921 |
-
|
922 |
-
#: inc/views/inpost/seo-settings-tt.php:162
|
923 |
-
#: inc/views/inpost/seo-settings-tt.php:178
|
924 |
-
#: inc/views/metaboxes/homepage-metabox.php:371
|
925 |
-
msgid "This tells search engines not to follow links on this page."
|
926 |
-
msgstr ""
|
927 |
-
|
928 |
#: inc/views/metaboxes/description-metabox.php:17
|
929 |
msgid "Example Title"
|
930 |
msgstr ""
|
@@ -938,7 +952,7 @@ msgid "Automated Description Settings"
|
|
938 |
msgstr ""
|
939 |
|
940 |
#: inc/views/metaboxes/description-metabox.php:42
|
941 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
942 |
msgid "The meta description can be used to determine the text used under the title on Search Engine results pages."
|
943 |
msgstr ""
|
944 |
|
@@ -1322,8 +1336,8 @@ msgid "Description"
|
|
1322 |
msgstr ""
|
1323 |
|
1324 |
#: inc/views/metaboxes/homepage-metabox.php:71
|
1325 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1326 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1327 |
#: inc/views/metaboxes/social-metabox.php:318
|
1328 |
msgid "Home Page"
|
1329 |
msgstr ""
|
@@ -1347,99 +1361,99 @@ msgstr ""
|
|
1347 |
#. translators: %s = Home page URL markdown
|
1348 |
|
1349 |
#: inc/views/metaboxes/homepage-metabox.php:215
|
1350 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1351 |
msgid "A plugin has been detected that suggests to maintain this option on the [Home Page](%s)."
|
1352 |
msgstr ""
|
1353 |
|
1354 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1355 |
#: inc/views/metaboxes/title-metabox.php:135
|
1356 |
msgid "Title Additions Location"
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1360 |
#: inc/views/metaboxes/title-metabox.php:136
|
1361 |
msgid "This setting determines which side the added title text will go on."
|
1362 |
msgstr ""
|
1363 |
|
1364 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1365 |
#: inc/views/metaboxes/title-metabox.php:142
|
1366 |
msgid "Left:"
|
1367 |
msgstr ""
|
1368 |
|
1369 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1370 |
#: inc/views/metaboxes/title-metabox.php:149
|
1371 |
msgid "Right:"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1375 |
msgid "%s Tagline"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1379 |
msgid "Add site description (tagline) to the Title on the %s?"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1383 |
msgid "View Home Page Settings"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1387 |
msgid "Checked in Page"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1391 |
msgid "Home Page Robots Meta Settings"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
#. translators: 1: Option, 2: Location
|
1395 |
|
1396 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1397 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1398 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1399 |
msgid "Apply %1$s to the %2$s?"
|
1400 |
msgstr ""
|
1401 |
|
1402 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1403 |
msgid "This tells search engines not to save a cached copy of this page."
|
1404 |
msgstr ""
|
1405 |
|
1406 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1407 |
msgid "Note: If any of these options are unchecked, but are checked on the Home Page, they will be outputted regardless."
|
1408 |
msgstr ""
|
1409 |
|
1410 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1411 |
msgid "Home Page Pagination Robots Settings"
|
1412 |
msgstr ""
|
1413 |
|
1414 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1415 |
msgid "If your Home Page is paginated and outputs content that's also found elsewhere on the website, enabling this option might prevent duplicate content."
|
1416 |
msgstr ""
|
1417 |
|
1418 |
#. translators: 1: Option, 2: Location
|
1419 |
|
1420 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1421 |
msgid "Apply %1$s to every second or later page on the %2$s?"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1425 |
#: inc/views/metaboxes/social-metabox.php:115
|
1426 |
msgid "Social Image Settings"
|
1427 |
msgstr ""
|
1428 |
|
1429 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1430 |
msgid "A social image can be displayed when your homepage is shared. It is a great way to grab attention."
|
1431 |
msgstr ""
|
1432 |
|
1433 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1434 |
msgid "Custom Homepage Image URL"
|
1435 |
msgstr ""
|
1436 |
|
1437 |
-
#: inc/views/metaboxes/homepage-metabox.php:
|
1438 |
msgid "Set preferred homepage Social Image URL location."
|
1439 |
msgstr ""
|
1440 |
|
1441 |
#: inc/views/metaboxes/robots-metabox.php:13
|
1442 |
-
#: inc/views/metaboxes/title-metabox.php:
|
1443 |
msgid "Category"
|
1444 |
msgstr ""
|
1445 |
|
@@ -1690,21 +1704,25 @@ msgstr ""
|
|
1690 |
msgid "Add the link that leads directly to the social page of this website."
|
1691 |
msgstr ""
|
1692 |
|
1693 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
|
|
|
|
|
|
|
|
1694 |
msgctxt "No spaces. E.g. https://facebook.com/RelatedProfile"
|
1695 |
msgid "RelatedProfile"
|
1696 |
msgstr ""
|
1697 |
|
1698 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
1699 |
msgctxt "Social Profile"
|
1700 |
msgid "Profile"
|
1701 |
msgstr ""
|
1702 |
|
1703 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
1704 |
msgid "Blog"
|
1705 |
msgstr ""
|
1706 |
|
1707 |
-
#: inc/views/metaboxes/schema-metabox.php:
|
1708 |
msgid "View your profile."
|
1709 |
msgstr ""
|
1710 |
|
@@ -2109,47 +2127,47 @@ msgstr ""
|
|
2109 |
msgid "The Home Page has a specific option."
|
2110 |
msgstr ""
|
2111 |
|
2112 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2113 |
msgid "Remove Blogname from Title"
|
2114 |
msgstr ""
|
2115 |
|
2116 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2117 |
msgid "This might decouple your posts and pages from the rest of the website."
|
2118 |
msgstr ""
|
2119 |
|
2120 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2121 |
msgid "Remove Blogname from title?"
|
2122 |
msgstr ""
|
2123 |
|
2124 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2125 |
msgid "Only use this option if you are aware of its SEO effects."
|
2126 |
msgstr ""
|
2127 |
|
2128 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2129 |
msgid "Example Category"
|
2130 |
msgstr ""
|
2131 |
|
2132 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2133 |
msgid "Title prefix options"
|
2134 |
msgstr ""
|
2135 |
|
2136 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2137 |
msgid "On archives a descriptive prefix may be added to the title."
|
2138 |
msgstr ""
|
2139 |
|
2140 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2141 |
msgid "Example Automated Archive Title Output"
|
2142 |
msgstr ""
|
2143 |
|
2144 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2145 |
msgid "Remove Archive Title Prefixes"
|
2146 |
msgstr ""
|
2147 |
|
2148 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2149 |
msgid "Remove prefixes from title?"
|
2150 |
msgstr ""
|
2151 |
|
2152 |
-
#: inc/views/metaboxes/title-metabox.php:
|
2153 |
msgid "The prefix helps visitors and search engines determine what kind of page they're visiting."
|
2154 |
msgstr ""
|
2155 |
|
1 |
+
# Copyright (C) 2018 The SEO Framework
|
2 |
# This file is distributed under the same license as the The SEO Framework package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: The SEO Framework 3.0.4\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/autodescription\n"
|
7 |
+
"POT-Creation-Date: 2018-02-26 01:19:08+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
14 |
|
15 |
#. translators: %s = term name
|
16 |
|
17 |
+
#: inc/classes/admin-init.class.php:253
|
18 |
msgid "Make primary %s"
|
19 |
msgstr ""
|
20 |
|
21 |
#. translators: %s = term name
|
22 |
|
23 |
+
#: inc/classes/admin-init.class.php:255
|
24 |
msgid "Primary %s"
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: inc/classes/admin-init.class.php:352
|
28 |
msgid "The changes you made will be lost if you navigate away from this page."
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: inc/classes/admin-init.class.php:353
|
32 |
msgid "Are you sure you want to reset all SEO settings to their defaults?"
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: inc/classes/admin-init.class.php:354
|
36 |
msgid "Good"
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: inc/classes/admin-init.class.php:355
|
40 |
msgid "Okay"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: inc/classes/admin-init.class.php:356
|
44 |
msgid "Bad"
|
45 |
msgstr ""
|
46 |
|
47 |
+
#: inc/classes/admin-init.class.php:357
|
48 |
msgid "Unknown"
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: inc/classes/admin-init.class.php:358
|
52 |
msgid "Private:"
|
53 |
msgstr ""
|
54 |
|
55 |
+
#: inc/classes/admin-init.class.php:359
|
56 |
msgid "Protected:"
|
57 |
msgstr ""
|
58 |
|
59 |
#. translators: Pixel counter. 1: width, 2: guideline
|
60 |
|
61 |
+
#: inc/classes/admin-init.class.php:361
|
62 |
msgid "%1$d out of %2$d pixels are used."
|
63 |
msgstr ""
|
64 |
|
65 |
#. translators: %s = Redirect URL markdown
|
66 |
|
67 |
+
#: inc/classes/admin-init.class.php:703
|
68 |
msgid "There has been an error redirecting. Refresh the page or follow [this link](%s)."
|
69 |
msgstr ""
|
70 |
|
71 |
+
#: inc/classes/admin-init.class.php:789 inc/classes/admin-init.class.php:850
|
72 |
msgid "Image could not be processed."
|
73 |
msgstr ""
|
74 |
|
96 |
msgid "New SEO Settings have been updated."
|
97 |
msgstr ""
|
98 |
|
99 |
+
#: inc/classes/admin-pages.class.php:109 inc/classes/site-options.class.php:440
|
100 |
msgid "SEO Settings"
|
101 |
msgstr ""
|
102 |
|
129 |
msgstr ""
|
130 |
|
131 |
#: inc/classes/admin-pages.class.php:295
|
132 |
+
#: inc/views/inpost/seo-settings-singular.php:187
|
133 |
+
#: inc/views/inpost/seo-settings-tt.php:164
|
134 |
msgid "Robots Meta Settings"
|
135 |
msgstr ""
|
136 |
|
146 |
msgid "Feed Settings"
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: inc/classes/admin-pages.class.php:802 inc/classes/admin-pages.class.php:813
|
150 |
msgctxt "Button hover"
|
151 |
msgid "Select social image"
|
152 |
msgstr ""
|
153 |
|
154 |
+
#: inc/classes/admin-pages.class.php:807 inc/classes/admin-pages.class.php:812
|
155 |
msgid "Select Image"
|
156 |
msgstr ""
|
157 |
|
158 |
+
#: inc/classes/admin-pages.class.php:814
|
159 |
msgid "Change Image"
|
160 |
msgstr ""
|
161 |
|
162 |
+
#: inc/classes/admin-pages.class.php:815
|
163 |
msgid "Remove Image"
|
164 |
msgstr ""
|
165 |
|
166 |
+
#: inc/classes/admin-pages.class.php:816
|
167 |
msgid "Remove selected social image"
|
168 |
msgstr ""
|
169 |
|
170 |
+
#: inc/classes/admin-pages.class.php:817
|
171 |
msgctxt "Frame title"
|
172 |
msgid "Select Social Image"
|
173 |
msgstr ""
|
174 |
|
175 |
+
#: inc/classes/admin-pages.class.php:818 inc/classes/admin-pages.class.php:864
|
176 |
msgid "Use this image"
|
177 |
msgstr ""
|
178 |
|
179 |
+
#: inc/classes/admin-pages.class.php:853 inc/classes/admin-pages.class.php:858
|
180 |
msgid "Select Logo"
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: inc/classes/admin-pages.class.php:860
|
184 |
msgid "Change Logo"
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: inc/classes/admin-pages.class.php:861
|
188 |
msgid "Remove Logo"
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: inc/classes/admin-pages.class.php:862
|
192 |
msgid "Unset selected logo"
|
193 |
msgstr ""
|
194 |
|
195 |
+
#: inc/classes/admin-pages.class.php:863
|
196 |
msgctxt "Frame title"
|
197 |
msgid "Select Logo"
|
198 |
msgstr ""
|
199 |
|
200 |
#. translators: %s = number
|
201 |
|
202 |
+
#: inc/classes/admin-pages.class.php:913
|
203 |
msgid "Characters Used: %s"
|
204 |
msgstr ""
|
205 |
|
277 |
msgid "No Archive"
|
278 |
msgstr ""
|
279 |
|
280 |
+
#: inc/classes/doing-it-right.class.php:427
|
281 |
msgid "Refresh to see the SEO Bar status."
|
282 |
msgstr ""
|
283 |
|
284 |
+
#: inc/classes/doing-it-right.class.php:513
|
285 |
msgid "Post"
|
286 |
msgstr ""
|
287 |
|
288 |
#. translators: %s = Post type name
|
289 |
|
290 |
+
#: inc/classes/doing-it-right.class.php:517 inc/classes/inpost.class.php:310
|
291 |
+
#: inc/classes/term-data.class.php:366
|
292 |
+
#: inc/views/metaboxes/schema-metabox.php:198
|
293 |
msgid "Page"
|
294 |
msgstr ""
|
295 |
|
296 |
+
#: inc/classes/doing-it-right.class.php:561
|
297 |
msgid "Failed to fetch post ID."
|
298 |
msgstr ""
|
299 |
|
300 |
#. translators: %s = But or And
|
301 |
|
302 |
+
#: inc/classes/doing-it-right.class.php:956
|
303 |
msgid "%s the Title contains the Blogname multiple times."
|
304 |
msgstr ""
|
305 |
|
306 |
#. translators: 1: Word, 2: Occurrences
|
307 |
|
308 |
+
#: inc/classes/doing-it-right.class.php:1129
|
309 |
msgid "%1$s is used %2$d times."
|
310 |
msgstr ""
|
311 |
|
312 |
#. Translators: %s = Post / Page / Category, etc.
|
313 |
|
314 |
+
#: inc/classes/doing-it-right.class.php:1174
|
315 |
msgid "%s is being indexed."
|
316 |
msgstr ""
|
317 |
|
318 |
+
#: inc/classes/doing-it-right.class.php:1183
|
319 |
msgid "But you've discouraged indexing for the whole site."
|
320 |
msgstr ""
|
321 |
|
322 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
323 |
|
324 |
+
#: inc/classes/doing-it-right.class.php:1207
|
325 |
msgid "%1$s indexing for %2$s have been discouraged."
|
326 |
msgstr ""
|
327 |
|
328 |
#. translators: 1 = But or And, 1 = Post/Page
|
329 |
|
330 |
+
#: inc/classes/doing-it-right.class.php:1220
|
331 |
msgid "%1$s the %2$s is protected from public visibility. This means indexing is discouraged."
|
332 |
msgstr ""
|
333 |
|
334 |
#. translators: %s = But or And
|
335 |
|
336 |
+
#: inc/classes/doing-it-right.class.php:1229
|
337 |
msgid "%s the blog isn't set to public. This means WordPress discourages indexing."
|
338 |
msgstr ""
|
339 |
|
340 |
#. translators: %s = But or And
|
341 |
|
342 |
+
#: inc/classes/doing-it-right.class.php:1243
|
343 |
msgid "%s there are no posts in this term; therefore, indexing has been discouraged."
|
344 |
msgstr ""
|
345 |
|
346 |
+
#: inc/classes/doing-it-right.class.php:1327
|
347 |
msgid "%s links aren't being followed."
|
348 |
msgstr ""
|
349 |
|
350 |
+
#: inc/classes/doing-it-right.class.php:1333
|
351 |
msgid "%s links are being followed."
|
352 |
msgstr ""
|
353 |
|
354 |
#. translators: %s = But or And
|
355 |
|
356 |
+
#: inc/classes/doing-it-right.class.php:1345
|
357 |
msgid "%s you've discouraged the following of links for the whole site."
|
358 |
msgstr ""
|
359 |
|
360 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
361 |
|
362 |
+
#: inc/classes/doing-it-right.class.php:1371
|
363 |
msgid "%1$s following for %2$s have been discouraged."
|
364 |
msgstr ""
|
365 |
|
366 |
#. translators: %s = But or And
|
367 |
|
368 |
+
#: inc/classes/doing-it-right.class.php:1383
|
369 |
msgid "%s the blog isn't set to public. This means WordPress allows the links to be followed regardless."
|
370 |
msgstr ""
|
371 |
|
372 |
+
#: inc/classes/doing-it-right.class.php:1435
|
373 |
msgid "Search Engines aren't allowed to archive this %s."
|
374 |
msgstr ""
|
375 |
|
376 |
+
#: inc/classes/doing-it-right.class.php:1440
|
377 |
msgid "Search Engines are allowed to archive this %s."
|
378 |
msgstr ""
|
379 |
|
380 |
+
#: inc/classes/doing-it-right.class.php:1452
|
381 |
msgid "But you've discouraged archiving for the whole site."
|
382 |
msgstr ""
|
383 |
|
384 |
#. translators: 1: But or And, 2: Current taxonomy term plural label
|
385 |
|
386 |
+
#: inc/classes/doing-it-right.class.php:1478
|
387 |
msgid "%1$s archiving for %2$s have been discouraged."
|
388 |
msgstr ""
|
389 |
|
390 |
#. translators: %s = But or And
|
391 |
|
392 |
+
#: inc/classes/doing-it-right.class.php:1491
|
393 |
msgid "%s the blog isn't set to public. This means WordPress allows the blog to be archived regardless."
|
394 |
msgstr ""
|
395 |
|
396 |
+
#: inc/classes/doing-it-right.class.php:1537
|
397 |
msgid "%s isn't being redirected."
|
398 |
msgstr ""
|
399 |
|
400 |
+
#: inc/classes/doing-it-right.class.php:1579
|
401 |
+
#: inc/classes/doing-it-right.class.php:1608
|
402 |
msgid "%s is being redirected. This means no SEO values have to be set."
|
403 |
msgstr ""
|
404 |
|
405 |
+
#: inc/classes/doing-it-right.class.php:1582
|
406 |
+
#: inc/classes/doing-it-right.class.php:1624
|
407 |
msgid "%s is not being indexed. This means no SEO values have to be set."
|
408 |
msgstr ""
|
409 |
|
410 |
+
#: inc/classes/doing-it-right.class.php:1738
|
411 |
msgid "Title:"
|
412 |
msgstr ""
|
413 |
|
414 |
+
#: inc/classes/doing-it-right.class.php:1739
|
415 |
msgid "Description:"
|
416 |
msgstr ""
|
417 |
|
418 |
+
#: inc/classes/doing-it-right.class.php:1740
|
419 |
msgid "Index:"
|
420 |
msgstr ""
|
421 |
|
422 |
+
#: inc/classes/doing-it-right.class.php:1741
|
423 |
msgid "Follow:"
|
424 |
msgstr ""
|
425 |
|
426 |
+
#: inc/classes/doing-it-right.class.php:1742
|
427 |
msgid "Archive:"
|
428 |
msgstr ""
|
429 |
|
430 |
+
#: inc/classes/doing-it-right.class.php:1743
|
431 |
msgid "Redirect:"
|
432 |
msgstr ""
|
433 |
|
434 |
+
#: inc/classes/doing-it-right.class.php:1745
|
435 |
msgid "Generated: Automatically generated."
|
436 |
msgstr ""
|
437 |
|
438 |
+
#: inc/classes/doing-it-right.class.php:1747
|
439 |
msgctxt "Generated"
|
440 |
msgid "G"
|
441 |
msgstr ""
|
442 |
|
443 |
+
#: inc/classes/doing-it-right.class.php:1748
|
444 |
msgctxt "Title"
|
445 |
msgid "T"
|
446 |
msgstr ""
|
447 |
|
448 |
+
#: inc/classes/doing-it-right.class.php:1749
|
449 |
msgctxt "Description"
|
450 |
msgid "D"
|
451 |
msgstr ""
|
452 |
|
453 |
+
#: inc/classes/doing-it-right.class.php:1750
|
454 |
msgctxt "no-Index"
|
455 |
msgid "I"
|
456 |
msgstr ""
|
457 |
|
458 |
+
#: inc/classes/doing-it-right.class.php:1751
|
459 |
msgctxt "no-Follow"
|
460 |
msgid "F"
|
461 |
msgstr ""
|
462 |
|
463 |
+
#: inc/classes/doing-it-right.class.php:1752
|
464 |
msgctxt "no-Archive"
|
465 |
msgid "A"
|
466 |
msgstr ""
|
467 |
|
468 |
+
#: inc/classes/doing-it-right.class.php:1753
|
469 |
msgctxt "Redirect"
|
470 |
msgid "R"
|
471 |
msgstr ""
|
472 |
|
473 |
+
#: inc/classes/doing-it-right.class.php:1755
|
474 |
msgctxt "But there are..."
|
475 |
msgid "But"
|
476 |
msgstr ""
|
477 |
|
478 |
+
#: inc/classes/doing-it-right.class.php:1756
|
479 |
msgctxt "And there are..."
|
480 |
msgid "And"
|
481 |
msgstr ""
|
482 |
|
483 |
+
#: inc/classes/doing-it-right.class.php:1758
|
484 |
msgid "Length is far too short."
|
485 |
msgstr ""
|
486 |
|
487 |
+
#: inc/classes/doing-it-right.class.php:1759
|
488 |
msgid "Length is too short."
|
489 |
msgstr ""
|
490 |
|
491 |
+
#: inc/classes/doing-it-right.class.php:1760
|
492 |
msgid "Length is too long."
|
493 |
msgstr ""
|
494 |
|
495 |
+
#: inc/classes/doing-it-right.class.php:1761
|
496 |
msgid "Length is far too long."
|
497 |
msgstr ""
|
498 |
|
499 |
+
#: inc/classes/doing-it-right.class.php:1762
|
500 |
msgid "Length is good."
|
501 |
msgstr ""
|
502 |
|
507 |
|
508 |
#. translators: 1: Title, 2: Separator, 3: Excerpt
|
509 |
|
510 |
+
#: inc/classes/generate-description.class.php:539
|
511 |
msgctxt "1: Title, 2: Separator, 3: Excerpt"
|
512 |
msgid "%1$s %2$s %3$s"
|
513 |
msgstr ""
|
514 |
|
515 |
#. translators: 1: Title, 2: on, 3: Blogname
|
516 |
|
517 |
+
#: inc/classes/generate-description.class.php:748
|
518 |
msgctxt "1: Title, 2: on, 3: Blogname"
|
519 |
msgid "%1$s %2$s %3$s"
|
520 |
msgstr ""
|
521 |
|
522 |
#. translators: Front-end output.
|
523 |
|
524 |
+
#: inc/classes/generate-description.class.php:785
|
525 |
#: inc/views/metaboxes/description-metabox.php:18
|
526 |
msgctxt "Placement. e.g. Post Title \"on\" Blog Name"
|
527 |
msgid "on"
|
529 |
|
530 |
#. translators: Front-end output.
|
531 |
|
532 |
+
#: inc/classes/generate-description.class.php:873
|
533 |
msgid "Latest posts:"
|
534 |
msgstr ""
|
535 |
|
541 |
#. translators: Front-end output. 1: Taxonomy singular name, 2: Current
|
542 |
#. taxonomy term
|
543 |
|
544 |
+
#: inc/classes/generate-title.class.php:907
|
545 |
+
#: inc/classes/generate-title.class.php:967
|
546 |
msgid "%1$s: %2$s"
|
547 |
msgstr ""
|
548 |
|
549 |
#. translators: Front-end output.
|
550 |
|
551 |
+
#: inc/classes/generate-title.class.php:911
|
552 |
msgid "Author: %s"
|
553 |
msgstr ""
|
554 |
|
555 |
#. translators: Front-end output.
|
556 |
|
557 |
+
#: inc/classes/generate-title.class.php:915
|
558 |
msgctxt "yearly archives date format"
|
559 |
msgid "Y"
|
560 |
msgstr ""
|
561 |
|
562 |
#. translators: Front-end output.
|
563 |
|
564 |
+
#: inc/classes/generate-title.class.php:917
|
565 |
msgid "Year: %s"
|
566 |
msgstr ""
|
567 |
|
568 |
#. translators: Front-end output.
|
569 |
|
570 |
+
#: inc/classes/generate-title.class.php:920
|
571 |
msgctxt "monthly archives date format"
|
572 |
msgid "F Y"
|
573 |
msgstr ""
|
574 |
|
575 |
#. translators: Front-end output.
|
576 |
|
577 |
+
#: inc/classes/generate-title.class.php:922
|
578 |
msgid "Month: %s"
|
579 |
msgstr ""
|
580 |
|
581 |
#. translators: Front-end output.
|
582 |
|
583 |
+
#: inc/classes/generate-title.class.php:925
|
584 |
msgctxt "daily archives date format"
|
585 |
msgid "F j, Y"
|
586 |
msgstr ""
|
587 |
|
588 |
#. translators: Front-end output.
|
589 |
|
590 |
+
#: inc/classes/generate-title.class.php:927
|
591 |
msgid "Day: %s"
|
592 |
msgstr ""
|
593 |
|
594 |
#. translators: Front-end output.
|
595 |
|
596 |
+
#: inc/classes/generate-title.class.php:932
|
597 |
msgctxt "post format archive title"
|
598 |
msgid "Asides"
|
599 |
msgstr ""
|
600 |
|
601 |
#. translators: Front-end output.
|
602 |
|
603 |
+
#: inc/classes/generate-title.class.php:935
|
604 |
msgctxt "post format archive title"
|
605 |
msgid "Galleries"
|
606 |
msgstr ""
|
607 |
|
608 |
#. translators: Front-end output.
|
609 |
|
610 |
+
#: inc/classes/generate-title.class.php:938
|
611 |
msgctxt "post format archive title"
|
612 |
msgid "Images"
|
613 |
msgstr ""
|
614 |
|
615 |
#. translators: Front-end output.
|
616 |
|
617 |
+
#: inc/classes/generate-title.class.php:941
|
618 |
msgctxt "post format archive title"
|
619 |
msgid "Videos"
|
620 |
msgstr ""
|
621 |
|
622 |
#. translators: Front-end output.
|
623 |
|
624 |
+
#: inc/classes/generate-title.class.php:944
|
625 |
msgctxt "post format archive title"
|
626 |
msgid "Quotes"
|
627 |
msgstr ""
|
628 |
|
629 |
#. translators: Front-end output.
|
630 |
|
631 |
+
#: inc/classes/generate-title.class.php:947
|
632 |
msgctxt "post format archive title"
|
633 |
msgid "Links"
|
634 |
msgstr ""
|
635 |
|
636 |
#. translators: Front-end output.
|
637 |
|
638 |
+
#: inc/classes/generate-title.class.php:950
|
639 |
msgctxt "post format archive title"
|
640 |
msgid "Statuses"
|
641 |
msgstr ""
|
642 |
|
643 |
#. translators: Front-end output.
|
644 |
|
645 |
+
#: inc/classes/generate-title.class.php:953
|
646 |
msgctxt "post format archive title"
|
647 |
msgid "Audio"
|
648 |
msgstr ""
|
649 |
|
650 |
#. translators: Front-end output.
|
651 |
|
652 |
+
#: inc/classes/generate-title.class.php:956
|
653 |
msgctxt "post format archive title"
|
654 |
msgid "Chats"
|
655 |
msgstr ""
|
656 |
|
657 |
#. translators: Front-end output.
|
658 |
|
659 |
+
#: inc/classes/generate-title.class.php:961
|
660 |
msgid "Archives: %s"
|
661 |
msgstr ""
|
662 |
|
663 |
#. translators: Front-end output.
|
664 |
|
665 |
+
#: inc/classes/generate-title.class.php:971
|
666 |
msgid "Archives"
|
667 |
msgstr ""
|
668 |
|
669 |
#. translators: Front-end output.
|
670 |
|
671 |
+
#: inc/classes/generate-title.class.php:1086
|
672 |
msgid "Untitled"
|
673 |
msgstr ""
|
674 |
|
675 |
#. translators: Front-end output.
|
676 |
|
677 |
+
#: inc/classes/generate-title.class.php:1121
|
678 |
msgid "Search results for:"
|
679 |
msgstr ""
|
680 |
|
681 |
#. translators: Front-end output.
|
682 |
|
683 |
+
#: inc/classes/generate-title.class.php:1297
|
684 |
msgid "Protected: %s"
|
685 |
msgstr ""
|
686 |
|
687 |
#. translators: Front-end output.
|
688 |
|
689 |
+
#: inc/classes/generate-title.class.php:1301
|
690 |
msgid "Private: %s"
|
691 |
msgstr ""
|
692 |
|
693 |
#. translators: %d = page number. Front-end output.
|
694 |
|
695 |
+
#: inc/classes/generate-title.class.php:1349
|
696 |
msgid "Page %d"
|
697 |
msgstr ""
|
698 |
|
707 |
#. translators: %s = Post Type
|
708 |
#. translators: %s = Term type
|
709 |
|
710 |
+
#: inc/classes/inpost.class.php:230 inc/views/inpost/seo-settings-tt.php:100
|
711 |
msgid "%s SEO Settings"
|
712 |
msgstr ""
|
713 |
|
731 |
|
732 |
#. translators: %s = 'The SEO Framework'
|
733 |
|
734 |
+
#: inc/classes/render.class.php:1103
|
735 |
msgid "Start %s"
|
736 |
msgstr ""
|
737 |
|
738 |
#. translators: %s = 'The SEO Framework'
|
739 |
|
740 |
+
#: inc/classes/render.class.php:1105
|
741 |
msgid "End %s"
|
742 |
msgstr ""
|
743 |
|
744 |
+
#: inc/classes/render.class.php:1106
|
745 |
msgid "by Sybre Waaijer"
|
746 |
msgstr ""
|
747 |
|
748 |
+
#: inc/classes/site-options.class.php:440
|
749 |
msgid "here"
|
750 |
msgstr ""
|
751 |
|
752 |
+
#: inc/classes/site-options.class.php:441
|
753 |
msgctxt "%s = here"
|
754 |
msgid "View the new options %s."
|
755 |
msgstr ""
|
762 |
msgid "Sitemap is served from cache"
|
763 |
msgstr ""
|
764 |
|
765 |
+
#: inc/classes/sitemaps.class.php:594
|
766 |
msgid "Sitemap is generated on"
|
767 |
msgstr ""
|
768 |
|
769 |
+
#: inc/classes/term-data.class.php:368
|
770 |
msgid "Pages"
|
771 |
msgstr ""
|
772 |
|
789 |
msgstr ""
|
790 |
|
791 |
#: inc/views/inpost/seo-settings-singular.php:44
|
792 |
+
#: inc/views/metaboxes/homepage-metabox.php:45
|
793 |
+
msgid "Social"
|
794 |
msgstr ""
|
795 |
|
796 |
#: inc/views/inpost/seo-settings-singular.php:50
|
797 |
+
msgid "Visibility"
|
|
|
798 |
msgstr ""
|
799 |
|
800 |
#: inc/views/inpost/seo-settings-singular.php:87
|
801 |
+
#: inc/views/inpost/seo-settings-tt.php:108
|
802 |
+
#: inc/views/inpost/seo-settings-tt.php:206
|
803 |
msgid "Doing it Right"
|
804 |
msgstr ""
|
805 |
|
818 |
msgid "Custom %s Description"
|
819 |
msgstr ""
|
820 |
|
821 |
+
#: inc/views/inpost/seo-settings-singular.php:166
|
822 |
msgid "Custom Canonical URL"
|
823 |
msgstr ""
|
824 |
|
825 |
+
#: inc/views/inpost/seo-settings-singular.php:170
|
826 |
msgid "This urges search engines to go to the outputted URL."
|
827 |
msgstr ""
|
828 |
|
829 |
#. translators: 1: Option, 2: Post or Page
|
830 |
|
831 |
+
#: inc/views/inpost/seo-settings-singular.php:197
|
832 |
+
#: inc/views/inpost/seo-settings-singular.php:213
|
833 |
+
#: inc/views/inpost/seo-settings-singular.php:227
|
834 |
msgid "Apply %1$s to this %2$s"
|
835 |
msgstr ""
|
836 |
|
837 |
+
#: inc/views/inpost/seo-settings-singular.php:201
|
838 |
msgid "This tells search engines not to show this %s in their search results."
|
839 |
msgstr ""
|
840 |
|
841 |
+
#: inc/views/inpost/seo-settings-singular.php:216
|
842 |
msgid "This tells search engines not to follow links on this %s."
|
843 |
msgstr ""
|
844 |
|
845 |
#. translators: %s = Post type name
|
846 |
|
847 |
+
#: inc/views/inpost/seo-settings-singular.php:235
|
848 |
msgid "This tells search engines not to save a cached copy of this %s."
|
849 |
msgstr ""
|
850 |
|
851 |
+
#: inc/views/inpost/seo-settings-singular.php:256
|
852 |
msgid "Archive Settings"
|
853 |
msgstr ""
|
854 |
|
855 |
#. translators: %s = Post type name
|
856 |
|
857 |
+
#: inc/views/inpost/seo-settings-singular.php:266
|
858 |
msgid "Exclude this %s from local search"
|
859 |
msgstr ""
|
860 |
|
861 |
#. translators: %s = Post type name
|
862 |
|
863 |
+
#: inc/views/inpost/seo-settings-singular.php:269
|
864 |
msgid "This excludes this %s from local on-site search results."
|
865 |
msgstr ""
|
866 |
|
867 |
#. translators: %s = Post type name
|
868 |
|
869 |
+
#: inc/views/inpost/seo-settings-singular.php:279
|
870 |
msgid "Exclude this %s from all archive listings."
|
871 |
msgstr ""
|
872 |
|
873 |
#. translators: %s = Post type name
|
874 |
|
875 |
+
#: inc/views/inpost/seo-settings-singular.php:282
|
876 |
msgid "This excludes this %s from on-site archive pages."
|
877 |
msgstr ""
|
878 |
|
879 |
+
#: inc/views/inpost/seo-settings-singular.php:296
|
880 |
msgid "Custom 301 Redirect URL"
|
881 |
msgstr ""
|
882 |
|
883 |
+
#: inc/views/inpost/seo-settings-singular.php:301
|
884 |
msgid "This will force visitors to go to another URL."
|
885 |
msgstr ""
|
886 |
|
887 |
+
#: inc/views/inpost/seo-settings-singular.php:345
|
888 |
+
msgid "Open Graph Title"
|
889 |
+
msgstr ""
|
890 |
+
|
891 |
+
#: inc/views/inpost/seo-settings-singular.php:368
|
892 |
+
msgid "Open Graph Description"
|
893 |
+
msgstr ""
|
894 |
+
|
895 |
+
#: inc/views/inpost/seo-settings-singular.php:389
|
896 |
+
msgid "Twitter Title"
|
897 |
+
msgstr ""
|
898 |
+
|
899 |
+
#: inc/views/inpost/seo-settings-singular.php:412
|
900 |
+
msgid "Twitter Description"
|
901 |
+
msgstr ""
|
902 |
+
|
903 |
+
#: inc/views/inpost/seo-settings-singular.php:436
|
904 |
msgid "Custom Social Image URL"
|
905 |
msgstr ""
|
906 |
|
907 |
#. translators: %s = Post type name
|
908 |
|
909 |
+
#: inc/views/inpost/seo-settings-singular.php:442
|
910 |
msgid "Set preferred %s Social Image URL location."
|
911 |
msgstr ""
|
912 |
|
913 |
+
#: inc/views/inpost/seo-settings-tt.php:73
|
914 |
+
#: inc/views/metaboxes/homepage-metabox.php:362
|
915 |
+
msgid "This tells search engines not to show this page in their search results."
|
916 |
+
msgstr ""
|
917 |
+
|
918 |
+
#: inc/views/inpost/seo-settings-tt.php:81
|
919 |
+
#: inc/views/inpost/seo-settings-tt.php:89
|
920 |
+
#: inc/views/metaboxes/homepage-metabox.php:372
|
921 |
+
msgid "This tells search engines not to follow links on this page."
|
922 |
+
msgstr ""
|
923 |
+
|
924 |
#. translators: %s = Term type
|
925 |
|
926 |
+
#: inc/views/inpost/seo-settings-tt.php:121
|
927 |
msgid "%s Title"
|
928 |
msgstr ""
|
929 |
|
930 |
#. translators: %s = Term type
|
931 |
|
932 |
+
#: inc/views/inpost/seo-settings-tt.php:146
|
933 |
msgid "%s Meta Description"
|
934 |
msgstr ""
|
935 |
|
936 |
#. translators: %s = noindex/nofollow/noarchive
|
937 |
|
938 |
+
#: inc/views/inpost/seo-settings-tt.php:181
|
|
|
|
|
939 |
msgid "Apply %s to this term?"
|
940 |
msgstr ""
|
941 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
942 |
#: inc/views/metaboxes/description-metabox.php:17
|
943 |
msgid "Example Title"
|
944 |
msgstr ""
|
952 |
msgstr ""
|
953 |
|
954 |
#: inc/views/metaboxes/description-metabox.php:42
|
955 |
+
#: inc/views/metaboxes/homepage-metabox.php:245
|
956 |
msgid "The meta description can be used to determine the text used under the title on Search Engine results pages."
|
957 |
msgstr ""
|
958 |
|
1336 |
msgstr ""
|
1337 |
|
1338 |
#: inc/views/metaboxes/homepage-metabox.php:71
|
1339 |
+
#: inc/views/metaboxes/homepage-metabox.php:282
|
1340 |
+
#: inc/views/metaboxes/homepage-metabox.php:329
|
1341 |
#: inc/views/metaboxes/social-metabox.php:318
|
1342 |
msgid "Home Page"
|
1343 |
msgstr ""
|
1361 |
#. translators: %s = Home page URL markdown
|
1362 |
|
1363 |
#: inc/views/metaboxes/homepage-metabox.php:215
|
1364 |
+
#: inc/views/metaboxes/homepage-metabox.php:261
|
1365 |
msgid "A plugin has been detected that suggests to maintain this option on the [Home Page](%s)."
|
1366 |
msgstr ""
|
1367 |
|
1368 |
+
#: inc/views/metaboxes/homepage-metabox.php:287
|
1369 |
#: inc/views/metaboxes/title-metabox.php:135
|
1370 |
msgid "Title Additions Location"
|
1371 |
msgstr ""
|
1372 |
|
1373 |
+
#: inc/views/metaboxes/homepage-metabox.php:288
|
1374 |
#: inc/views/metaboxes/title-metabox.php:136
|
1375 |
msgid "This setting determines which side the added title text will go on."
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: inc/views/metaboxes/homepage-metabox.php:295
|
1379 |
#: inc/views/metaboxes/title-metabox.php:142
|
1380 |
msgid "Left:"
|
1381 |
msgstr ""
|
1382 |
|
1383 |
+
#: inc/views/metaboxes/homepage-metabox.php:305
|
1384 |
#: inc/views/metaboxes/title-metabox.php:149
|
1385 |
msgid "Right:"
|
1386 |
msgstr ""
|
1387 |
|
1388 |
+
#: inc/views/metaboxes/homepage-metabox.php:316
|
1389 |
msgid "%s Tagline"
|
1390 |
msgstr ""
|
1391 |
|
1392 |
+
#: inc/views/metaboxes/homepage-metabox.php:320
|
1393 |
msgid "Add site description (tagline) to the Title on the %s?"
|
1394 |
msgstr ""
|
1395 |
|
1396 |
+
#: inc/views/metaboxes/homepage-metabox.php:346
|
1397 |
msgid "View Home Page Settings"
|
1398 |
msgstr ""
|
1399 |
|
1400 |
+
#: inc/views/metaboxes/homepage-metabox.php:346
|
1401 |
msgid "Checked in Page"
|
1402 |
msgstr ""
|
1403 |
|
1404 |
+
#: inc/views/metaboxes/homepage-metabox.php:350
|
1405 |
msgid "Home Page Robots Meta Settings"
|
1406 |
msgstr ""
|
1407 |
|
1408 |
#. translators: 1: Option, 2: Location
|
1409 |
|
1410 |
+
#: inc/views/metaboxes/homepage-metabox.php:359
|
1411 |
+
#: inc/views/metaboxes/homepage-metabox.php:369
|
1412 |
+
#: inc/views/metaboxes/homepage-metabox.php:379
|
1413 |
msgid "Apply %1$s to the %2$s?"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
+
#: inc/views/metaboxes/homepage-metabox.php:382
|
1417 |
msgid "This tells search engines not to save a cached copy of this page."
|
1418 |
msgstr ""
|
1419 |
|
1420 |
+
#: inc/views/metaboxes/homepage-metabox.php:414
|
1421 |
msgid "Note: If any of these options are unchecked, but are checked on the Home Page, they will be outputted regardless."
|
1422 |
msgstr ""
|
1423 |
|
1424 |
+
#: inc/views/metaboxes/homepage-metabox.php:420
|
1425 |
msgid "Home Page Pagination Robots Settings"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
+
#: inc/views/metaboxes/homepage-metabox.php:421
|
1429 |
msgid "If your Home Page is paginated and outputs content that's also found elsewhere on the website, enabling this option might prevent duplicate content."
|
1430 |
msgstr ""
|
1431 |
|
1432 |
#. translators: 1: Option, 2: Location
|
1433 |
|
1434 |
+
#: inc/views/metaboxes/homepage-metabox.php:429
|
1435 |
msgid "Apply %1$s to every second or later page on the %2$s?"
|
1436 |
msgstr ""
|
1437 |
|
1438 |
+
#: inc/views/metaboxes/homepage-metabox.php:439
|
1439 |
#: inc/views/metaboxes/social-metabox.php:115
|
1440 |
msgid "Social Image Settings"
|
1441 |
msgstr ""
|
1442 |
|
1443 |
+
#: inc/views/metaboxes/homepage-metabox.php:441
|
1444 |
msgid "A social image can be displayed when your homepage is shared. It is a great way to grab attention."
|
1445 |
msgstr ""
|
1446 |
|
1447 |
+
#: inc/views/metaboxes/homepage-metabox.php:470
|
1448 |
msgid "Custom Homepage Image URL"
|
1449 |
msgstr ""
|
1450 |
|
1451 |
+
#: inc/views/metaboxes/homepage-metabox.php:471
|
1452 |
msgid "Set preferred homepage Social Image URL location."
|
1453 |
msgstr ""
|
1454 |
|
1455 |
#: inc/views/metaboxes/robots-metabox.php:13
|
1456 |
+
#: inc/views/metaboxes/title-metabox.php:189
|
1457 |
msgid "Category"
|
1458 |
msgstr ""
|
1459 |
|
1704 |
msgid "Add the link that leads directly to the social page of this website."
|
1705 |
msgstr ""
|
1706 |
|
1707 |
+
#: inc/views/metaboxes/schema-metabox.php:186
|
1708 |
+
msgid "These settings do not affect sharing behavior with the social networks."
|
1709 |
+
msgstr ""
|
1710 |
+
|
1711 |
+
#: inc/views/metaboxes/schema-metabox.php:188
|
1712 |
msgctxt "No spaces. E.g. https://facebook.com/RelatedProfile"
|
1713 |
msgid "RelatedProfile"
|
1714 |
msgstr ""
|
1715 |
|
1716 |
+
#: inc/views/metaboxes/schema-metabox.php:189
|
1717 |
msgctxt "Social Profile"
|
1718 |
msgid "Profile"
|
1719 |
msgstr ""
|
1720 |
|
1721 |
+
#: inc/views/metaboxes/schema-metabox.php:254
|
1722 |
msgid "Blog"
|
1723 |
msgstr ""
|
1724 |
|
1725 |
+
#: inc/views/metaboxes/schema-metabox.php:268
|
1726 |
msgid "View your profile."
|
1727 |
msgstr ""
|
1728 |
|
2127 |
msgid "The Home Page has a specific option."
|
2128 |
msgstr ""
|
2129 |
|
2130 |
+
#: inc/views/metaboxes/title-metabox.php:159
|
2131 |
msgid "Remove Blogname from Title"
|
2132 |
msgstr ""
|
2133 |
|
2134 |
+
#: inc/views/metaboxes/title-metabox.php:163
|
2135 |
msgid "This might decouple your posts and pages from the rest of the website."
|
2136 |
msgstr ""
|
2137 |
|
2138 |
+
#: inc/views/metaboxes/title-metabox.php:171
|
2139 |
msgid "Remove Blogname from title?"
|
2140 |
msgstr ""
|
2141 |
|
2142 |
+
#: inc/views/metaboxes/title-metabox.php:181
|
2143 |
msgid "Only use this option if you are aware of its SEO effects."
|
2144 |
msgstr ""
|
2145 |
|
2146 |
+
#: inc/views/metaboxes/title-metabox.php:205
|
2147 |
msgid "Example Category"
|
2148 |
msgstr ""
|
2149 |
|
2150 |
+
#: inc/views/metaboxes/title-metabox.php:223
|
2151 |
msgid "Title prefix options"
|
2152 |
msgstr ""
|
2153 |
|
2154 |
+
#: inc/views/metaboxes/title-metabox.php:224
|
2155 |
msgid "On archives a descriptive prefix may be added to the title."
|
2156 |
msgstr ""
|
2157 |
|
2158 |
+
#: inc/views/metaboxes/title-metabox.php:227
|
2159 |
msgid "Example Automated Archive Title Output"
|
2160 |
msgstr ""
|
2161 |
|
2162 |
+
#: inc/views/metaboxes/title-metabox.php:235
|
2163 |
msgid "Remove Archive Title Prefixes"
|
2164 |
msgstr ""
|
2165 |
|
2166 |
+
#: inc/views/metaboxes/title-metabox.php:239
|
2167 |
msgid "Remove prefixes from title?"
|
2168 |
msgstr ""
|
2169 |
|
2170 |
+
#: inc/views/metaboxes/title-metabox.php:243
|
2171 |
msgid "The prefix helps visitors and search engines determine what kind of page they're visiting."
|
2172 |
msgstr ""
|
2173 |
|
lib/css/tsf-rtl.css
CHANGED
@@ -256,13 +256,13 @@ th.column-tsf-seo-bar-wrap ~ th {
|
|
256 |
-o-transition: none;
|
257 |
-ms-transition: none;
|
258 |
transition: none;
|
|
|
259 |
font-size: 18px;
|
260 |
-
font-weight:
|
261 |
}
|
262 |
|
263 |
.tsf-description-pixel-counter-shadow {
|
264 |
font-size: 13px;
|
265 |
-
font-weight: 400;
|
266 |
}
|
267 |
|
268 |
/* END Pixel Counters */
|
@@ -412,7 +412,7 @@ body.no-js .tsf-seo-bar-item {
|
|
412 |
}
|
413 |
|
414 |
a.tsf-tooltip-item {
|
415 |
-
cursor:
|
416 |
}
|
417 |
|
418 |
.tsf-tooltip {
|
@@ -864,11 +864,12 @@ input[type="radio"].tsf-flex-nav-tab-radio {
|
|
864 |
/* IE11 fix */
|
865 |
-webkit-flex: 1 1 100%;
|
866 |
flex: 1 1 100%;
|
867 |
-
/* Firefox fix
|
868 |
-webkit-flex-wrap: nowrap;
|
869 |
-ms-flex-wrap: nowrap;
|
870 |
flex-wrap: nowrap;
|
871 |
max-width: 100%;
|
|
|
872 |
}
|
873 |
|
874 |
.tsf-flex-nav-tab-inner {
|
@@ -908,8 +909,8 @@ input[type="radio"].tsf-flex-nav-tab-radio {
|
|
908 |
transition: box-shadow 0.15s ease-out;
|
909 |
-webkit-align-items: center;
|
910 |
align-items: center;
|
911 |
-
-webkit-align-content: space-
|
912 |
-
align-content: space-
|
913 |
}
|
914 |
|
915 |
.tsf-flex-nav-dashicon,
|
256 |
-o-transition: none;
|
257 |
-ms-transition: none;
|
258 |
transition: none;
|
259 |
+
font-family: arial,helvetica,sans-serif;
|
260 |
font-size: 18px;
|
261 |
+
font-weight: 400;
|
262 |
}
|
263 |
|
264 |
.tsf-description-pixel-counter-shadow {
|
265 |
font-size: 13px;
|
|
|
266 |
}
|
267 |
|
268 |
/* END Pixel Counters */
|
412 |
}
|
413 |
|
414 |
a.tsf-tooltip-item {
|
415 |
+
cursor: pointer;
|
416 |
}
|
417 |
|
418 |
.tsf-tooltip {
|
864 |
/* IE11 fix */
|
865 |
-webkit-flex: 1 1 100%;
|
866 |
flex: 1 1 100%;
|
867 |
+
/* Firefox fix */
|
868 |
-webkit-flex-wrap: nowrap;
|
869 |
-ms-flex-wrap: nowrap;
|
870 |
flex-wrap: nowrap;
|
871 |
max-width: 100%;
|
872 |
+
overflow: hidden;
|
873 |
}
|
874 |
|
875 |
.tsf-flex-nav-tab-inner {
|
909 |
transition: box-shadow 0.15s ease-out;
|
910 |
-webkit-align-items: center;
|
911 |
align-items: center;
|
912 |
+
-webkit-align-content: space-around;
|
913 |
+
align-content: space-around;
|
914 |
}
|
915 |
|
916 |
.tsf-flex-nav-dashicon,
|
lib/css/tsf-rtl.min.css
CHANGED
@@ -1 +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-size:18px;font-weight:600}.tsf-description-pixel-counter-shadow{font-size:13px;font-weight:400}#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-between;align-content:space-between}.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}
|
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: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%;overflow:hidden}.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}
|
lib/css/tsf.css
CHANGED
@@ -256,13 +256,13 @@ th.column-tsf-seo-bar-wrap ~ th {
|
|
256 |
-o-transition: none;
|
257 |
-ms-transition: none;
|
258 |
transition: none;
|
|
|
259 |
font-size: 18px;
|
260 |
-
font-weight:
|
261 |
}
|
262 |
|
263 |
.tsf-description-pixel-counter-shadow {
|
264 |
font-size: 13px;
|
265 |
-
font-weight: 400;
|
266 |
}
|
267 |
|
268 |
/* END Pixel Counters */
|
@@ -412,7 +412,7 @@ body.no-js .tsf-seo-bar-item {
|
|
412 |
}
|
413 |
|
414 |
a.tsf-tooltip-item {
|
415 |
-
cursor:
|
416 |
}
|
417 |
|
418 |
.tsf-tooltip {
|
@@ -864,11 +864,12 @@ input[type="radio"].tsf-flex-nav-tab-radio {
|
|
864 |
/* IE11 fix */
|
865 |
-webkit-flex: 1 1 100%;
|
866 |
flex: 1 1 100%;
|
867 |
-
/* Firefox fix
|
868 |
-webkit-flex-wrap: nowrap;
|
869 |
-ms-flex-wrap: nowrap;
|
870 |
flex-wrap: nowrap;
|
871 |
max-width: 100%;
|
|
|
872 |
}
|
873 |
|
874 |
.tsf-flex-nav-tab-inner {
|
@@ -908,8 +909,8 @@ input[type="radio"].tsf-flex-nav-tab-radio {
|
|
908 |
transition: box-shadow 0.15s ease-out;
|
909 |
-webkit-align-items: center;
|
910 |
align-items: center;
|
911 |
-
-webkit-align-content: space-
|
912 |
-
align-content: space-
|
913 |
}
|
914 |
|
915 |
.tsf-flex-nav-dashicon,
|
256 |
-o-transition: none;
|
257 |
-ms-transition: none;
|
258 |
transition: none;
|
259 |
+
font-family: arial,helvetica,sans-serif;
|
260 |
font-size: 18px;
|
261 |
+
font-weight: 400;
|
262 |
}
|
263 |
|
264 |
.tsf-description-pixel-counter-shadow {
|
265 |
font-size: 13px;
|
|
|
266 |
}
|
267 |
|
268 |
/* END Pixel Counters */
|
412 |
}
|
413 |
|
414 |
a.tsf-tooltip-item {
|
415 |
+
cursor: pointer;
|
416 |
}
|
417 |
|
418 |
.tsf-tooltip {
|
864 |
/* IE11 fix */
|
865 |
-webkit-flex: 1 1 100%;
|
866 |
flex: 1 1 100%;
|
867 |
+
/* Firefox fix */
|
868 |
-webkit-flex-wrap: nowrap;
|
869 |
-ms-flex-wrap: nowrap;
|
870 |
flex-wrap: nowrap;
|
871 |
max-width: 100%;
|
872 |
+
overflow: hidden;
|
873 |
}
|
874 |
|
875 |
.tsf-flex-nav-tab-inner {
|
909 |
transition: box-shadow 0.15s ease-out;
|
910 |
-webkit-align-items: center;
|
911 |
align-items: center;
|
912 |
+
-webkit-align-content: space-around;
|
913 |
+
align-content: space-around;
|
914 |
}
|
915 |
|
916 |
.tsf-flex-nav-dashicon,
|
lib/css/tsf.min.css
CHANGED
@@ -1 +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-size:18px;font-weight:600}.tsf-description-pixel-counter-shadow{font-size:13px;font-weight:400}#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-between;align-content:space-between}.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}
|
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: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%;overflow:hidden}.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}
|
lib/js/externs/tsf.externs.js
CHANGED
@@ -2,13 +2,13 @@
|
|
2 |
* This file holds The SEO Framework plugin's JS code externs
|
3 |
* for Google's Closure Compiler.
|
4 |
*
|
5 |
-
* @author Sybre Waaijer https://cyberwire.nl
|
6 |
* @link https://wordpress.org/plugins/the-seo-framework/
|
7 |
*/
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
2 |
* This file holds The SEO Framework plugin's JS code externs
|
3 |
* for Google's Closure Compiler.
|
4 |
*
|
5 |
+
* @author Sybre Waaijer <https://cyberwire.nl/>
|
6 |
* @link https://wordpress.org/plugins/the-seo-framework/
|
7 |
*/
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2017 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
lib/js/externs/tsf.externs.protected.js
CHANGED
@@ -2,13 +2,13 @@
|
|
2 |
* This file holds The SEO Framework plugin's JS code externs
|
3 |
* for Google's Closure Compiler.
|
4 |
*
|
5 |
-
* @author Sybre Waaijer https://cyberwire.nl
|
6 |
* @link https://wordpress.org/plugins/the-seo-framework/
|
7 |
*/
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2017 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
2 |
* This file holds The SEO Framework plugin's JS code externs
|
3 |
* for Google's Closure Compiler.
|
4 |
*
|
5 |
+
* @author Sybre Waaijer <https://cyberwire.nl/>
|
6 |
* @link https://wordpress.org/plugins/the-seo-framework/
|
7 |
*/
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2017 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
lib/js/tsf.js
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
@@ -165,7 +165,7 @@ window.tsf = {
|
|
165 |
if ( ! str.length )
|
166 |
return '';
|
167 |
|
168 |
-
|
169 |
'&': '&',
|
170 |
'<': '<',
|
171 |
'>': '>',
|
@@ -173,14 +173,55 @@ window.tsf = {
|
|
173 |
"'": '''
|
174 |
};
|
175 |
|
176 |
-
return str.replace( /[&<>"']/g,
|
177 |
-
return map[m];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
} );
|
179 |
},
|
180 |
|
181 |
/**
|
182 |
* Gets string length.
|
183 |
-
* We do not trim in JavaScript; that should be self-taught by the user.
|
|
|
|
|
184 |
*
|
185 |
* @function
|
186 |
* @param {string} str
|
@@ -201,17 +242,20 @@ window.tsf = {
|
|
201 |
/**
|
202 |
* Updates pixel counter.
|
203 |
*
|
|
|
|
|
|
|
204 |
* @function
|
205 |
* @param {Object} test
|
206 |
* @return {undefined}
|
207 |
*/
|
208 |
updatePixelCounter: function( test ) {
|
209 |
|
210 |
-
let
|
211 |
text = test.text,
|
212 |
guideline = test.guideline;
|
213 |
|
214 |
-
let wrap =
|
215 |
|
216 |
if ( ! wrap )
|
217 |
return;
|
@@ -247,7 +291,7 @@ window.tsf = {
|
|
247 |
label = tsf.i18n.pixelsUsed.replace( /%1\$d/g, testWidth );
|
248 |
label = label.replace( /%2\$d/g, guideline );
|
249 |
|
250 |
-
bar.classList.remove( fitClass, overflownClass )
|
251 |
bar.classList.add( newClass );
|
252 |
bar.dataset.desc = label;
|
253 |
bar.setAttribute( 'aria-label', label );
|
@@ -602,27 +646,59 @@ window.tsf = {
|
|
602 |
ie11killswitch = false;
|
603 |
}, 0 );
|
604 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
605 |
const updateCounter = function( event ) {
|
606 |
-
let counter = document.getElementById( event.target.id + '_chars' )
|
|
|
607 |
|
608 |
-
if ( ! counter )
|
609 |
-
return;
|
610 |
|
611 |
-
let titLen =
|
612 |
target = event.target,
|
613 |
counterClass = '',
|
614 |
counterType = tsf.counterType,
|
615 |
counterName = '',
|
616 |
output = '';
|
617 |
|
618 |
-
if ( target.value.length < 1 ) {
|
619 |
-
titLen = tsf.getStringLength( target.placeholder );
|
620 |
-
} else {
|
621 |
-
titLen = ( hoverPrefixValue ? tsf.getStringLength( hoverPrefixValue ) : 0 )
|
622 |
-
+ tsf.getStringLength( target.value )
|
623 |
-
+ ( hoverAdditionsValue ? tsf.getStringLength( hoverAdditionsValue ) : 0 );
|
624 |
-
}
|
625 |
-
|
626 |
if ( titLen < 25 || titLen >= 75 ) {
|
627 |
counterClass += 'tsf-count-bad';
|
628 |
counterName = tsf.i18n.bad;
|
@@ -651,46 +727,15 @@ window.tsf = {
|
|
651 |
counter.className = counterClass;
|
652 |
}
|
653 |
const updatePixels = function( event ) {
|
654 |
-
let pixels = document.getElementById( event.target.id + '_pixels' )
|
|
|
655 |
|
656 |
-
if ( ! pixels )
|
657 |
return;
|
658 |
|
659 |
-
let text = '';
|
660 |
-
|
661 |
-
if ( event.target.value.length < 1 ) {
|
662 |
-
text = event.target.placeholder;
|
663 |
-
} else {
|
664 |
-
//= We must determine the position as trailing whitespace is rendered 0.
|
665 |
-
text = event.target.value;
|
666 |
-
|
667 |
-
if ( hoverPrefixValue.length ) {
|
668 |
-
switch ( hoverPrefixPlacement ) {
|
669 |
-
case 'before' :
|
670 |
-
text = hoverPrefixValue + text;
|
671 |
-
break;
|
672 |
-
|
673 |
-
case 'after' :
|
674 |
-
text = text + hoverPrefixValue;
|
675 |
-
break;
|
676 |
-
}
|
677 |
-
}
|
678 |
-
if ( hoverAdditionsValue.length ) {
|
679 |
-
switch ( hoverAdditionsPlacement ) {
|
680 |
-
case 'before' :
|
681 |
-
text = hoverAdditionsValue + text;
|
682 |
-
break;
|
683 |
-
|
684 |
-
case 'after' :
|
685 |
-
text = text + hoverAdditionsValue;
|
686 |
-
break;
|
687 |
-
}
|
688 |
-
}
|
689 |
-
}
|
690 |
-
|
691 |
let test = {
|
692 |
'e': pixels,
|
693 |
-
'text' :
|
694 |
'guideline' : tsf.params.titlePixelGuideline,
|
695 |
};
|
696 |
|
@@ -708,6 +753,7 @@ window.tsf = {
|
|
708 |
if ( ie11killswitch ) return false;
|
709 |
updateHoverPlacement( event );
|
710 |
updatePlaceholder();
|
|
|
711 |
updateCounter( event );
|
712 |
updatePixels( event );
|
713 |
}
|
@@ -721,6 +767,7 @@ window.tsf = {
|
|
721 |
* @return {undefined}
|
722 |
*/
|
723 |
const updateCounterTrigger = function( event ) {
|
|
|
724 |
updateCounter( event );
|
725 |
updatePixels( event );
|
726 |
}
|
@@ -888,9 +935,7 @@ window.tsf = {
|
|
888 |
*/
|
889 |
const enqueueUnregisteredInputTrigger = function() {
|
890 |
clearTimeout( unregisteredTriggerBuffer );
|
891 |
-
unregisteredTriggerBuffer = setTimeout(
|
892 |
-
triggerUnregisteredInput();
|
893 |
-
}, 50 );
|
894 |
}
|
895 |
//= Defer to prevent early trigger.
|
896 |
jQuery( window ).one( 'tsf-ready', function() {
|
@@ -939,7 +984,7 @@ window.tsf = {
|
|
939 |
val = val.trim();
|
940 |
|
941 |
if ( val.length ) {
|
942 |
-
defaultTitle = val;
|
943 |
} else {
|
944 |
defaultTitle = tsf.params.untitledTitle;
|
945 |
}
|
@@ -1185,6 +1230,9 @@ window.tsf = {
|
|
1185 |
/**
|
1186 |
* Updates used separator and all examples thereof.
|
1187 |
*
|
|
|
|
|
|
|
1188 |
* @function
|
1189 |
* @param {!jQuery.Event} event
|
1190 |
* @return {undefined}
|
@@ -1209,10 +1257,10 @@ window.tsf = {
|
|
1209 |
descLen = tsf.getStringLength( target.value );
|
1210 |
}
|
1211 |
|
1212 |
-
if ( descLen < 100 || descLen >=
|
1213 |
counterClass += 'tsf-count-bad';
|
1214 |
counterName = tsf.i18n.bad;
|
1215 |
-
} else if ( descLen < 137 || descLen >
|
1216 |
counterClass += 'tsf-count-okay';
|
1217 |
counterName = tsf.i18n.okay;
|
1218 |
} else {
|
@@ -1236,13 +1284,11 @@ window.tsf = {
|
|
1236 |
if ( counter.className !== counterClass )
|
1237 |
counter.className = counterClass;
|
1238 |
}
|
1239 |
-
const
|
1240 |
-
let
|
|
|
1241 |
|
1242 |
-
if ( !
|
1243 |
-
return;
|
1244 |
-
|
1245 |
-
let text = '';
|
1246 |
|
1247 |
if ( event.target.value.length < 1 ) {
|
1248 |
text = event.target.placeholder;
|
@@ -1250,9 +1296,20 @@ window.tsf = {
|
|
1250 |
text = event.target.value;
|
1251 |
}
|
1252 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1253 |
let test = {
|
1254 |
-
'e':
|
1255 |
-
'text' :
|
1256 |
'guideline' : tsf.params.descPixelGuideline
|
1257 |
}
|
1258 |
|
@@ -1267,6 +1324,7 @@ window.tsf = {
|
|
1267 |
* @return {undefined}
|
1268 |
*/
|
1269 |
const updateDescriptionsTrigger = function( event ) {
|
|
|
1270 |
updateCounter( event );
|
1271 |
updatePixels( event );
|
1272 |
}
|
@@ -1329,6 +1387,218 @@ window.tsf = {
|
|
1329 |
jQuery( document ).on( 'postbox-toggled', triggerPostboxSynchronousUnregisteredInput );
|
1330 |
},
|
1331 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1332 |
/**
|
1333 |
* Initializes counters.
|
1334 |
*
|
@@ -1478,6 +1748,8 @@ window.tsf = {
|
|
1478 |
* Initializes primary term selection.
|
1479 |
*
|
1480 |
* @since 3.0.0
|
|
|
|
|
1481 |
*
|
1482 |
* @function
|
1483 |
* @return {undefined}
|
@@ -1522,10 +1794,15 @@ window.tsf = {
|
|
1522 |
let wrap = document.getElementById( 'taxonomy-' + taxonomy ),
|
1523 |
tabs = wrap.querySelectorAll( '.tabs-panel' );
|
1524 |
|
1525 |
-
let
|
1526 |
-
|
|
|
|
|
|
|
1527 |
} )[0];
|
1528 |
|
|
|
|
|
1529 |
let offset = tab.scrollHeight > tab.clientHeight
|
1530 |
? tab.offsetWidth - tab.clientWidth + 25 - 2 // 2px is padding or something?
|
1531 |
: 25;
|
@@ -1655,6 +1932,9 @@ window.tsf = {
|
|
1655 |
checked$[ taxonomy ] = checked$[ taxonomy ].not( '[value="' + element.value + '"]' );
|
1656 |
uniqueChecked$[ taxonomy ] = uniqueChecked$[ taxonomy ].not( '[value="' + element.value + '"]' );
|
1657 |
}
|
|
|
|
|
|
|
1658 |
|
1659 |
const initVars = function( taxonomy ) {
|
1660 |
let $box = getBox( taxonomy, 1 );
|
@@ -1686,7 +1966,8 @@ window.tsf = {
|
|
1686 |
data = { 'taxonomy': taxonomy },
|
1687 |
$box = getBox( taxonomy ),
|
1688 |
$div = jQuery( '#' + taxonomy + 'div' ),
|
1689 |
-
$tabs = jQuery( '#' + taxonomy + '-tabs' )
|
|
|
1690 |
|
1691 |
$box.off( 'click.' + ns );
|
1692 |
$box.on( 'click.' + ns, 'input[type="checkbox"]', data, toggleShowSwitch );
|
@@ -1697,6 +1978,9 @@ window.tsf = {
|
|
1697 |
|
1698 |
$tabs.off( 'click.' + ns );
|
1699 |
$tabs.on( 'click.' + ns, 'a', data, fixHelpPosOnTabToggle );
|
|
|
|
|
|
|
1700 |
}
|
1701 |
const load = function( taxonomy ) {
|
1702 |
getBox( taxonomy ).find( 'input[type="checkbox"]:checked' )
|
@@ -2035,7 +2319,7 @@ window.tsf = {
|
|
2035 |
}
|
2036 |
|
2037 |
/**
|
2038 |
-
* Initializes
|
2039 |
* @function
|
2040 |
*/
|
2041 |
const initTooltips = function() {
|
@@ -2156,6 +2440,7 @@ window.tsf = {
|
|
2156 |
* Sets the navigation tabs content equal to the buttons.
|
2157 |
*
|
2158 |
* @since 2.9.0
|
|
|
2159 |
* @see tsf.tabToggle
|
2160 |
*
|
2161 |
* @function
|
@@ -2166,6 +2451,11 @@ window.tsf = {
|
|
2166 |
if ( ! tsf.hasInput )
|
2167 |
return;
|
2168 |
|
|
|
|
|
|
|
|
|
|
|
2169 |
if ( tsf.states['isSettingsPage'] ) {
|
2170 |
let $buttons = jQuery( '.tsf-nav-tab-wrapper .tsf-tab:nth-of-type(n+2) input:checked' );
|
2171 |
|
@@ -3169,9 +3459,11 @@ window.tsf = {
|
|
3169 |
// Add title prop listeners. Must load before setTabsOnload to work.
|
3170 |
tsf._initTitleInputs();
|
3171 |
tsf._initUnboundTitleSettings();
|
|
|
3172 |
|
3173 |
// Add description prop listeners. Must load before setTabsOnload to work.
|
3174 |
tsf._initDescInputs();
|
|
|
3175 |
|
3176 |
// Set primary term listeners.
|
3177 |
tsf._initPrimaryTerm();
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
165 |
if ( ! str.length )
|
166 |
return '';
|
167 |
|
168 |
+
let map = {
|
169 |
'&': '&',
|
170 |
'<': '<',
|
171 |
'>': '>',
|
173 |
"'": '''
|
174 |
};
|
175 |
|
176 |
+
return str.replace( /[&<>"']/g, m => {
|
177 |
+
return map[ m ];
|
178 |
+
} );
|
179 |
+
},
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Undoes what tsf.escapeString has done.
|
183 |
+
*
|
184 |
+
* @since 3.0.4
|
185 |
+
*
|
186 |
+
* @function
|
187 |
+
* @param {string} str The escaped str via tsf.escapeString
|
188 |
+
* @return {string}
|
189 |
+
*/
|
190 |
+
unescapeString: function( str ) {
|
191 |
+
|
192 |
+
if ( ! str.length )
|
193 |
+
return '';
|
194 |
+
|
195 |
+
let map = {
|
196 |
+
'&': '&',
|
197 |
+
'<': '<',
|
198 |
+
'>': '>',
|
199 |
+
'"': '"',
|
200 |
+
"'": '''
|
201 |
+
};
|
202 |
+
|
203 |
+
//= IE11 replacement for Object.values. <https://stackoverflow.com/a/42830295>
|
204 |
+
let values = Object.keys( map ).map( e => map[ e ] );
|
205 |
+
|
206 |
+
let regex = new RegExp(
|
207 |
+
values.map( v => {
|
208 |
+
return v.replace( /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&' );
|
209 |
+
} ).join('|'),
|
210 |
+
'g'
|
211 |
+
);
|
212 |
+
|
213 |
+
return str.replace( regex, m => {
|
214 |
+
return Object.keys( map ).find( k => {
|
215 |
+
return map[ k ] === m;
|
216 |
+
} );
|
217 |
} );
|
218 |
},
|
219 |
|
220 |
/**
|
221 |
* Gets string length.
|
222 |
+
* We do not trim whitespace in JavaScript; that should be self-taught by the user.
|
223 |
+
*
|
224 |
+
* @since 3.0.0
|
225 |
*
|
226 |
* @function
|
227 |
* @param {string} str
|
242 |
/**
|
243 |
* Updates pixel counter.
|
244 |
*
|
245 |
+
* @since 3.0.0
|
246 |
+
* @access private
|
247 |
+
*
|
248 |
* @function
|
249 |
* @param {Object} test
|
250 |
* @return {undefined}
|
251 |
*/
|
252 |
updatePixelCounter: function( test ) {
|
253 |
|
254 |
+
let el = test.e,
|
255 |
text = test.text,
|
256 |
guideline = test.guideline;
|
257 |
|
258 |
+
let wrap = el.parentElement;
|
259 |
|
260 |
if ( ! wrap )
|
261 |
return;
|
291 |
label = tsf.i18n.pixelsUsed.replace( /%1\$d/g, testWidth );
|
292 |
label = label.replace( /%2\$d/g, guideline );
|
293 |
|
294 |
+
bar.classList.remove( fitClass, overflownClass );
|
295 |
bar.classList.add( newClass );
|
296 |
bar.dataset.desc = label;
|
297 |
bar.setAttribute( 'aria-label', label );
|
646 |
ie11killswitch = false;
|
647 |
}, 0 );
|
648 |
}
|
649 |
+
const setReferenceTitle = function( event ) {
|
650 |
+
let reference = document.getElementById( 'tsf-title-reference' ),
|
651 |
+
text = '';
|
652 |
+
|
653 |
+
if ( ! reference ) return;
|
654 |
+
|
655 |
+
if ( event.target.value.length < 1 ) {
|
656 |
+
text = event.target.placeholder;
|
657 |
+
} else {
|
658 |
+
//= We must determine the position as trailing whitespace is rendered 0.
|
659 |
+
text = event.target.value;
|
660 |
+
|
661 |
+
if ( hoverPrefixValue.length ) {
|
662 |
+
switch ( hoverPrefixPlacement ) {
|
663 |
+
case 'before' :
|
664 |
+
text = hoverPrefixValue + text;
|
665 |
+
break;
|
666 |
+
|
667 |
+
case 'after' :
|
668 |
+
text = text + hoverPrefixValue;
|
669 |
+
break;
|
670 |
+
}
|
671 |
+
}
|
672 |
+
if ( hoverAdditionsValue.length ) {
|
673 |
+
switch ( hoverAdditionsPlacement ) {
|
674 |
+
case 'before' :
|
675 |
+
text = hoverAdditionsValue + text;
|
676 |
+
break;
|
677 |
+
|
678 |
+
case 'after' :
|
679 |
+
text = text + hoverAdditionsValue;
|
680 |
+
break;
|
681 |
+
}
|
682 |
+
}
|
683 |
+
}
|
684 |
+
|
685 |
+
reference.innerHTML = tsf.escapeString( text );
|
686 |
+
// Fires change event. Defered.
|
687 |
+
setTimeout( () => { jQuery( reference ).change() }, 0 );
|
688 |
+
}
|
689 |
const updateCounter = function( event ) {
|
690 |
+
let counter = document.getElementById( event.target.id + '_chars' ),
|
691 |
+
reference = document.getElementById( 'tsf-title-reference' );
|
692 |
|
693 |
+
if ( ! counter || ! reference ) return;
|
|
|
694 |
|
695 |
+
let titLen = tsf.getStringLength( tsf.unescapeString( reference.innerHTML ) ),
|
696 |
target = event.target,
|
697 |
counterClass = '',
|
698 |
counterType = tsf.counterType,
|
699 |
counterName = '',
|
700 |
output = '';
|
701 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
702 |
if ( titLen < 25 || titLen >= 75 ) {
|
703 |
counterClass += 'tsf-count-bad';
|
704 |
counterName = tsf.i18n.bad;
|
727 |
counter.className = counterClass;
|
728 |
}
|
729 |
const updatePixels = function( event ) {
|
730 |
+
let pixels = document.getElementById( event.target.id + '_pixels' ),
|
731 |
+
reference = document.getElementById( 'tsf-title-reference' );
|
732 |
|
733 |
+
if ( ! pixels || ! reference )
|
734 |
return;
|
735 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
736 |
let test = {
|
737 |
'e': pixels,
|
738 |
+
'text' : tsf.unescapeString( reference.innerHTML ),
|
739 |
'guideline' : tsf.params.titlePixelGuideline,
|
740 |
};
|
741 |
|
753 |
if ( ie11killswitch ) return false;
|
754 |
updateHoverPlacement( event );
|
755 |
updatePlaceholder();
|
756 |
+
setReferenceTitle( event );
|
757 |
updateCounter( event );
|
758 |
updatePixels( event );
|
759 |
}
|
767 |
* @return {undefined}
|
768 |
*/
|
769 |
const updateCounterTrigger = function( event ) {
|
770 |
+
setReferenceTitle( event );
|
771 |
updateCounter( event );
|
772 |
updatePixels( event );
|
773 |
}
|
935 |
*/
|
936 |
const enqueueUnregisteredInputTrigger = function() {
|
937 |
clearTimeout( unregisteredTriggerBuffer );
|
938 |
+
unregisteredTriggerBuffer = setTimeout( triggerUnregisteredInput, 50 );
|
|
|
|
|
939 |
}
|
940 |
//= Defer to prevent early trigger.
|
941 |
jQuery( window ).one( 'tsf-ready', function() {
|
984 |
val = val.trim();
|
985 |
|
986 |
if ( val.length ) {
|
987 |
+
defaultTitle = tsf.escapeString( val );
|
988 |
} else {
|
989 |
defaultTitle = tsf.params.untitledTitle;
|
990 |
}
|
1230 |
/**
|
1231 |
* Updates used separator and all examples thereof.
|
1232 |
*
|
1233 |
+
* @since 3.0.4 : 1. Threshold "too long" has been increased from 155 to 300.
|
1234 |
+
* 2. Threshold "far too long" has been increased to 330 from 175.
|
1235 |
+
*
|
1236 |
* @function
|
1237 |
* @param {!jQuery.Event} event
|
1238 |
* @return {undefined}
|
1257 |
descLen = tsf.getStringLength( target.value );
|
1258 |
}
|
1259 |
|
1260 |
+
if ( descLen < 100 || descLen >= 330 ) {
|
1261 |
counterClass += 'tsf-count-bad';
|
1262 |
counterName = tsf.i18n.bad;
|
1263 |
+
} else if ( descLen < 137 || descLen > 300 ) {
|
1264 |
counterClass += 'tsf-count-okay';
|
1265 |
counterName = tsf.i18n.okay;
|
1266 |
} else {
|
1284 |
if ( counter.className !== counterClass )
|
1285 |
counter.className = counterClass;
|
1286 |
}
|
1287 |
+
const setReferenceDescription = function( event ) {
|
1288 |
+
let reference = document.getElementById( 'tsf-description-reference' ),
|
1289 |
+
text = '';
|
1290 |
|
1291 |
+
if ( ! reference ) return;
|
|
|
|
|
|
|
1292 |
|
1293 |
if ( event.target.value.length < 1 ) {
|
1294 |
text = event.target.placeholder;
|
1296 |
text = event.target.value;
|
1297 |
}
|
1298 |
|
1299 |
+
reference.innerHTML = tsf.escapeString( text );
|
1300 |
+
// Fires change event. Defered.
|
1301 |
+
setTimeout( () => { jQuery( reference ).change() }, 0 );
|
1302 |
+
}
|
1303 |
+
const updatePixels = function( event ) {
|
1304 |
+
let pixels = document.getElementById( event.target.id + '_pixels' ),
|
1305 |
+
reference = document.getElementById( 'tsf-description-reference' );
|
1306 |
+
|
1307 |
+
if ( ! pixels || ! reference )
|
1308 |
+
return;
|
1309 |
+
|
1310 |
let test = {
|
1311 |
+
'e': pixels,
|
1312 |
+
'text' : tsf.unescapeString( reference.innerHTML ),
|
1313 |
'guideline' : tsf.params.descPixelGuideline
|
1314 |
}
|
1315 |
|
1324 |
* @return {undefined}
|
1325 |
*/
|
1326 |
const updateDescriptionsTrigger = function( event ) {
|
1327 |
+
setReferenceDescription( event );
|
1328 |
updateCounter( event );
|
1329 |
updatePixels( event );
|
1330 |
}
|
1387 |
jQuery( document ).on( 'postbox-toggled', triggerPostboxSynchronousUnregisteredInput );
|
1388 |
},
|
1389 |
|
1390 |
+
/**
|
1391 |
+
* Initializes social titles.
|
1392 |
+
*
|
1393 |
+
* @since 3.0.4
|
1394 |
+
*
|
1395 |
+
* @function
|
1396 |
+
* @return {undefined}
|
1397 |
+
*/
|
1398 |
+
_initSocialTitleInputs: function() {
|
1399 |
+
|
1400 |
+
if ( ! tsf.hasInput )
|
1401 |
+
return;
|
1402 |
+
|
1403 |
+
let $ogTitle = jQuery( "#autodescription_og_title" ),
|
1404 |
+
$twTitle = jQuery( "#autodescription_twitter_title" ),
|
1405 |
+
$reference = jQuery( "#tsf-title-reference" );
|
1406 |
+
|
1407 |
+
if ( ! $ogTitle.length || ! $twTitle.length || ! $reference.length )
|
1408 |
+
return;
|
1409 |
+
|
1410 |
+
//= y u no fix dis, Microsoft. Crappy vars don't deserve CamelCase.
|
1411 |
+
let ie11killswitch = false,
|
1412 |
+
ie11 = !! navigator.userAgent.match(/Trident\/7\./);
|
1413 |
+
|
1414 |
+
let ogTitleValue = tsf.escapeString( $ogTitle.val() ),
|
1415 |
+
twTitleValue = tsf.escapeString( $twTitle.val() ),
|
1416 |
+
referenceValue = $reference.text(); // already escaped.
|
1417 |
+
|
1418 |
+
const getActiveValue = ( what ) => {
|
1419 |
+
let val = '';
|
1420 |
+
switch ( what ) {
|
1421 |
+
case 'twitter' :
|
1422 |
+
val = twTitleValue;
|
1423 |
+
// get next if not set.
|
1424 |
+
case 'og' :
|
1425 |
+
val = val.length ? val : ogTitleValue;
|
1426 |
+
// get next if not set.
|
1427 |
+
case 'reference' :
|
1428 |
+
val = val.length ? val : referenceValue;
|
1429 |
+
}
|
1430 |
+
return val;
|
1431 |
+
};
|
1432 |
+
const setPlaceholders = () => {
|
1433 |
+
if ( ie11 ) ie11killswitch = true;
|
1434 |
+
|
1435 |
+
$ogTitle.attr( 'placeholder', getActiveValue( 'reference' ) );
|
1436 |
+
$twTitle.attr( 'placeholder', getActiveValue( 'og' ) );
|
1437 |
+
|
1438 |
+
ie11 && setTimeout( function() {
|
1439 |
+
ie11killswitch = false;
|
1440 |
+
}, 0 );
|
1441 |
+
};
|
1442 |
+
const updateCounter = ( target, value, threshold ) => {
|
1443 |
+
if ( ! target || ! value || ! threshold ) {
|
1444 |
+
$ogTitle.each( ( i, el ) => updateCounter( el, getActiveValue( 'og' ), 88 ) );
|
1445 |
+
$twTitle.each( ( i, el ) => updateCounter( el, getActiveValue( 'twitter' ), 70 ) );
|
1446 |
+
} else {
|
1447 |
+
tsf.updateSocialCounter( target, value, threshold );
|
1448 |
+
}
|
1449 |
+
};
|
1450 |
+
$reference.on( 'change', () => {
|
1451 |
+
referenceValue = $reference.text();
|
1452 |
+
setPlaceholders();
|
1453 |
+
updateCounter();
|
1454 |
+
} );
|
1455 |
+
|
1456 |
+
const updateOgTitle = ( event ) => {
|
1457 |
+
if ( ie11killswitch ) return;
|
1458 |
+
ogTitleValue = event.target.value.length ? tsf.escapeString( event.target.value ) : '';
|
1459 |
+
setPlaceholders();
|
1460 |
+
updateCounter();
|
1461 |
+
};
|
1462 |
+
const updateTwTitle = ( event ) => {
|
1463 |
+
if ( ie11killswitch ) return;
|
1464 |
+
twTitleValue = event.target.value.length ? tsf.escapeString( event.target.value ) : '';
|
1465 |
+
setPlaceholders();
|
1466 |
+
updateCounter();
|
1467 |
+
};
|
1468 |
+
$ogTitle.on( 'input.tsfUpdateOgTitle', updateOgTitle );
|
1469 |
+
$twTitle.on( 'input.tsfUpdateOgTitle', updateTwTitle );
|
1470 |
+
},
|
1471 |
+
|
1472 |
+
/**
|
1473 |
+
* Initializes social descriptions.
|
1474 |
+
*
|
1475 |
+
* @since 3.0.0
|
1476 |
+
*
|
1477 |
+
* @function
|
1478 |
+
* @return {undefined}
|
1479 |
+
*/
|
1480 |
+
_initSocialDescInputs: function() {
|
1481 |
+
|
1482 |
+
if ( ! tsf.hasInput )
|
1483 |
+
return;
|
1484 |
+
|
1485 |
+
let $ogDesc = jQuery( "#autodescription_og_description" ),
|
1486 |
+
$twDesc = jQuery( "#autodescription_twitter_description" ),
|
1487 |
+
$reference = jQuery( "#tsf-description-reference" );
|
1488 |
+
|
1489 |
+
if ( ! $ogDesc.length || ! $twDesc.length || ! $reference.length )
|
1490 |
+
return;
|
1491 |
+
|
1492 |
+
//= y u no fix dis, Microsoft. Crappy vars don't deserve CamelCase.
|
1493 |
+
let ie11killswitch = false,
|
1494 |
+
ie11 = !! navigator.userAgent.match(/Trident\/7\./);
|
1495 |
+
|
1496 |
+
let ogDescValue = tsf.escapeString( $ogDesc.val() ),
|
1497 |
+
twDescValue = tsf.escapeString( $twDesc.val() ),
|
1498 |
+
referenceValue = $reference.text(); // already escaped.
|
1499 |
+
|
1500 |
+
const getActiveValue = ( what ) => {
|
1501 |
+
let val = '';
|
1502 |
+
switch ( what ) {
|
1503 |
+
case 'twitter' :
|
1504 |
+
val = twDescValue;
|
1505 |
+
// get next if not set.
|
1506 |
+
case 'og' :
|
1507 |
+
val = val.length ? val : ogDescValue;
|
1508 |
+
// get next if not set.
|
1509 |
+
case 'reference' :
|
1510 |
+
val = val.length ? val : referenceValue;
|
1511 |
+
}
|
1512 |
+
return val;
|
1513 |
+
};
|
1514 |
+
const setPlaceholders = () => {
|
1515 |
+
if ( ie11 ) ie11killswitch = true;
|
1516 |
+
|
1517 |
+
$ogDesc.attr( 'placeholder', getActiveValue( 'reference' ) );
|
1518 |
+
$twDesc.attr( 'placeholder', getActiveValue( 'og' ) );
|
1519 |
+
|
1520 |
+
ie11 && setTimeout( function() {
|
1521 |
+
ie11killswitch = false;
|
1522 |
+
}, 0 );
|
1523 |
+
};
|
1524 |
+
const updateCounter = ( target, value, threshold ) => {
|
1525 |
+
if ( ! target || ! value || ! threshold ) {
|
1526 |
+
$ogDesc.each( ( i, el ) => updateCounter( el, getActiveValue( 'og' ), 300 ) );
|
1527 |
+
$twDesc.each( ( i, el ) => updateCounter( el, getActiveValue( 'twitter' ), 200 ) );
|
1528 |
+
} else {
|
1529 |
+
tsf.updateSocialCounter( target, value, threshold );
|
1530 |
+
}
|
1531 |
+
};
|
1532 |
+
$reference.on( 'change', () => {
|
1533 |
+
referenceValue = $reference.text();
|
1534 |
+
setPlaceholders();
|
1535 |
+
updateCounter();
|
1536 |
+
} );
|
1537 |
+
|
1538 |
+
const updateOgDesc = ( event ) => {
|
1539 |
+
if ( ie11killswitch ) return;
|
1540 |
+
ogDescValue = event.target.value.length ? tsf.escapeString( event.target.value ) : '';
|
1541 |
+
setPlaceholders();
|
1542 |
+
updateCounter();
|
1543 |
+
};
|
1544 |
+
const updateTwDesc = ( event ) => {
|
1545 |
+
if ( ie11killswitch ) return;
|
1546 |
+
twDescValue = event.target.value.length ? tsf.escapeString( event.target.value ) : '';
|
1547 |
+
setPlaceholders();
|
1548 |
+
updateCounter();
|
1549 |
+
};
|
1550 |
+
$ogDesc.on( 'input.tsfUpdateOgDesc', updateOgDesc );
|
1551 |
+
$twDesc.on( 'input.tsfUpdateOgDesc', updateTwDesc );
|
1552 |
+
},
|
1553 |
+
|
1554 |
+
/**
|
1555 |
+
* Updates normalized counters for social input.
|
1556 |
+
*
|
1557 |
+
* @since 3.0.4
|
1558 |
+
*
|
1559 |
+
* @function
|
1560 |
+
* @param {!Element} target The HMTL eleent.
|
1561 |
+
* @param {string} value Must be escaped.
|
1562 |
+
* @param {integer} threshold The "bad" threshold.
|
1563 |
+
*/
|
1564 |
+
updateSocialCounter: function( target, value, threshold ) {
|
1565 |
+
|
1566 |
+
let counter = document.getElementById( target.id + '_chars' );
|
1567 |
+
|
1568 |
+
if ( ! counter )
|
1569 |
+
return;
|
1570 |
+
|
1571 |
+
let strLen = tsf.getStringLength( tsf.unescapeString( value ) ),
|
1572 |
+
counterClass = '',
|
1573 |
+
counterType = tsf.counterType,
|
1574 |
+
counterName = '',
|
1575 |
+
output = '';
|
1576 |
+
|
1577 |
+
if ( strLen > threshold ) {
|
1578 |
+
counterClass += 'tsf-count-bad';
|
1579 |
+
counterName = tsf.i18n.bad;
|
1580 |
+
} else {
|
1581 |
+
counterClass += 'tsf-count-good';
|
1582 |
+
counterName = tsf.i18n.good;
|
1583 |
+
}
|
1584 |
+
|
1585 |
+
if ( ! counterType || 1 == counterType ) {
|
1586 |
+
output = strLen.toString();
|
1587 |
+
} else if ( 2 == counterType ) {
|
1588 |
+
output = counterName;
|
1589 |
+
} else if ( 3 == counterType ) {
|
1590 |
+
output = strLen.toString() + ' - ' + counterName;
|
1591 |
+
}
|
1592 |
+
|
1593 |
+
counter.innerHTML = output;
|
1594 |
+
|
1595 |
+
if ( tsf.additionsClass )
|
1596 |
+
counterClass += ' ' + tsf.additionsClass;
|
1597 |
+
|
1598 |
+
if ( counter.className !== counterClass )
|
1599 |
+
counter.className = counterClass;
|
1600 |
+
},
|
1601 |
+
|
1602 |
/**
|
1603 |
* Initializes counters.
|
1604 |
*
|
1748 |
* Initializes primary term selection.
|
1749 |
*
|
1750 |
* @since 3.0.0
|
1751 |
+
* @since 3.0.4 1 : Added postbox toggle event listeners for help display correction.
|
1752 |
+
* 2 : Added tab visibility checkers.
|
1753 |
*
|
1754 |
* @function
|
1755 |
* @return {undefined}
|
1794 |
let wrap = document.getElementById( 'taxonomy-' + taxonomy ),
|
1795 |
tabs = wrap.querySelectorAll( '.tabs-panel' );
|
1796 |
|
1797 |
+
let $postbox = jQuery( wrap ).closest( '.postbox' );
|
1798 |
+
if ( $postbox.length && $postbox.hasClass( 'closed' ) ) return;
|
1799 |
+
|
1800 |
+
let tab = Array.prototype.slice.call( tabs ).filter( function( el ) {
|
1801 |
+
return el.offsetWidth > 0 || el.offsetHeight > 0 || el.getClientRects().length > 0;
|
1802 |
} )[0];
|
1803 |
|
1804 |
+
if ( ! tab ) return;
|
1805 |
+
|
1806 |
let offset = tab.scrollHeight > tab.clientHeight
|
1807 |
? tab.offsetWidth - tab.clientWidth + 25 - 2 // 2px is padding or something?
|
1808 |
: 25;
|
1932 |
checked$[ taxonomy ] = checked$[ taxonomy ].not( '[value="' + element.value + '"]' );
|
1933 |
uniqueChecked$[ taxonomy ] = uniqueChecked$[ taxonomy ].not( '[value="' + element.value + '"]' );
|
1934 |
}
|
1935 |
+
const togglePostbox = function( event, postbox ) {
|
1936 |
+
fixHelpPos( event.data.taxonomy );
|
1937 |
+
}
|
1938 |
|
1939 |
const initVars = function( taxonomy ) {
|
1940 |
let $box = getBox( taxonomy, 1 );
|
1966 |
data = { 'taxonomy': taxonomy },
|
1967 |
$box = getBox( taxonomy ),
|
1968 |
$div = jQuery( '#' + taxonomy + 'div' ),
|
1969 |
+
$tabs = jQuery( '#' + taxonomy + '-tabs' ),
|
1970 |
+
$postbox = $box.closest( '.postbox' );
|
1971 |
|
1972 |
$box.off( 'click.' + ns );
|
1973 |
$box.on( 'click.' + ns, 'input[type="checkbox"]', data, toggleShowSwitch );
|
1978 |
|
1979 |
$tabs.off( 'click.' + ns );
|
1980 |
$tabs.on( 'click.' + ns, 'a', data, fixHelpPosOnTabToggle );
|
1981 |
+
|
1982 |
+
$postbox.off( 'click.postboxes.' + ns );
|
1983 |
+
$postbox.on( 'click.postboxes.' + ns, data, togglePostbox );
|
1984 |
}
|
1985 |
const load = function( taxonomy ) {
|
1986 |
getBox( taxonomy ).find( 'input[type="checkbox"]:checked' )
|
2319 |
}
|
2320 |
|
2321 |
/**
|
2322 |
+
* Initializes tooltips.
|
2323 |
* @function
|
2324 |
*/
|
2325 |
const initTooltips = function() {
|
2440 |
* Sets the navigation tabs content equal to the buttons.
|
2441 |
*
|
2442 |
* @since 2.9.0
|
2443 |
+
* @since 3.0.4 Added inpost flex nav trigger.
|
2444 |
* @see tsf.tabToggle
|
2445 |
*
|
2446 |
* @function
|
2451 |
if ( ! tsf.hasInput )
|
2452 |
return;
|
2453 |
|
2454 |
+
if ( tsf.states['isPostEdit'] ) {
|
2455 |
+
//= Triggers inpost change event for tabs
|
2456 |
+
jQuery( '.tsf-flex-nav-tab-radio' ).trigger( 'change' );
|
2457 |
+
}
|
2458 |
+
|
2459 |
if ( tsf.states['isSettingsPage'] ) {
|
2460 |
let $buttons = jQuery( '.tsf-nav-tab-wrapper .tsf-tab:nth-of-type(n+2) input:checked' );
|
2461 |
|
3459 |
// Add title prop listeners. Must load before setTabsOnload to work.
|
3460 |
tsf._initTitleInputs();
|
3461 |
tsf._initUnboundTitleSettings();
|
3462 |
+
tsf._initSocialTitleInputs();
|
3463 |
|
3464 |
// Add description prop listeners. Must load before setTabsOnload to work.
|
3465 |
tsf._initDescInputs();
|
3466 |
+
tsf._initSocialDescInputs();
|
3467 |
|
3468 |
// Set primary term listeners.
|
3469 |
tsf._initPrimaryTerm();
|
lib/js/tsf.min.js
CHANGED
@@ -1 +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){return confirm(t)},escapeString:function(t){if(!t.length)return'';var s={'&':'&','<':'<','>':'>','"':'"','\'':'''};return t.replace(/[&<>"']/g,function(a){return s[a]})},getStringLength:function(t){let s,a=0;return t.length&&(s=document.createElement('span'),s.innerHTML=tsf.escapeString(t),a=s.childNodes[0].nodeValue.length),+a},updatePixelCounter:function(t){let s=t.e,a=t.text,o=t.guideline,n=s.parentElement;if(n){let r=n.querySelector('.tsf-pixel-counter-bar'),l=n.querySelector('.tsf-pixel-counter-shadow');if(r&&l){l.innerHTML=tsf.escapeString(a);let 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);let 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(){if(tsf.hasInput){let t=jQuery('#autodescription_title, #autodescription-meta\\[doctitle\\], #autodescription-site-settings\\[homepage_title\\]');if(t.length){let 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';const b=function(){let 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();const k=function(){let G='';if(!tsf.states.isSettingsPage)tsf.states.isHome?u&&(G=tsf.params.titleAdditions):u&&(G=tsf.params.titleAdditions);else if(u){let 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();const C=function(){let 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();const T=function(G){if(d||r){let 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'));let 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<gt&&(ct=0)),Y){let ut=0;switch(function(){let ht=jQuery('#tsf-title-offset');ht.text(K),ht.css({fontFamily:at.fontFamily,fontWeight:at.fontWeight,letterSpacing:at.letterSpacing,fontSize:at.fontSize}),ut=ht[0].getBoundingClientRect().width}(),rt=J[0].getBoundingClientRect().width-et-st-ut-ct,rt<gt&&(ct+=rt,rt=0),nt.css(at),nt.css({maxWidth:'initial'}),n){case'before':let ht=nt[0].getBoundingClientRect().width;ht=rt<ht?rt:ht,ht<gt&&(ht=0),rt=ht,dt+=rt,pt+=rt,lt+=st;break;case'after':lt+=st+ut+ct;}}pt+=st,ct=0>ct?0:ct,dt+=ct;let ft;Z&&(ft={},ft[it]=pt+'px',ft.maxWidth=ct+'px',ot.css(ft)),Y&&(ft={},ft[it]=lt+'px',ft.maxWidth=rt+'px',nt.css(ft)),ft={},ft['text-indent']=dt+'px',J.css(ft)}},I=function(){let J='',K=!!c.length,Y=!!l.length,Z=c,Q=l;tsf.states.isTermEdit&&tsf.params.termName&&(Q=y?' :'+tsf.params.termName:tsf.params.termName+': ',Y=tsf.states.useTermPrefix),J=f,Y&&('before'===o?J=Q+J:'after'===o?J+=Q:void 0),K&&('before'===n?J=Z+J:'after'===n?J+=Z:void 0),a&&(s=!0);let tt=document.createElement('span');tt.innerHTML=J,t.prop('placeholder',tt.textContent),a&&setTimeout(function(){s=!1},0)},S=function(G){let J=document.getElementById(G.target.id+'_chars');if(J){let K=0,Y=G.target,Z='',Q=tsf.counterType,tt='',et='';K=1>Y.value.length?tsf.getStringLength(Y.placeholder):(l?tsf.getStringLength(l):0)+tsf.getStringLength(Y.value)+(c?tsf.getStringLength(c):0),25>K||75<=K?(Z+='tsf-count-bad',tt=tsf.i18n.bad):42>K||55<K?(Z+='tsf-count-okay',tt=tsf.i18n.okay):(Z+='tsf-count-good',tt=tsf.i18n.good),Q&&1!=Q?2==Q?et=tt:3==Q&&(et=K.toString()+' - '+tt):et=K.toString(),J.innerHTML=et,tsf.additionsClass&&(Z+=' '+tsf.additionsClass),J.className!==Z&&(J.className=Z)}},L=function(G){let J=document.getElementById(G.target.id+'_pixels');if(J){let K='';1>G.target.value.length?K=G.target.placeholder:(K=G.target.value,l.length&&('before'===o?K=l+K:'after'===o?K+=l:void 0),c.length&&('before'===n?K=c+K:'after'===n?K+=c:void 0));let Y={e:J,text:K,guideline:tsf.params.titlePixelGuideline};tsf.updatePixelCounter(Y)}};t.on('input.tsfUpdateTitles',function(G){return!s&&void(T(G),I(),S(G),L(G))});t.on('tsf-update-title-counter',function(G){S(G),L(G)});const j=function(){t.trigger('tsf-update-title-counter')},R=function(){t.trigger('input.tsfUpdateTitles')};R();const P=function(){k(),R()};jQuery('#autodescription-site-settings\\[homepage_title_tagline\\]').on('input',P),jQuery('#autodescription-site-settings\\[homepage_tagline\\]').on('change',P);let H=0;const A=function(){clearTimeout(H),H=setTimeout(function(){R()},50)};jQuery(window).on('tsf-counter-updated',A);jQuery('#tsf-title-tagline-toggle :input').on('click',function(G){let J=u;jQuery(G.target).is(':checked')?(jQuery('.tsf-custom-blogname-js').css('display','inline'),u=!0):(jQuery('.tsf-custom-blogname-js').css('display','none'),u=!1),J^u&&(k(),A())});jQuery('#visibility .save-post-visibility').on('click',function(){let J=jQuery('#visibility').find('input:radio:checked').val();switch(x=!1,v=!1,J){case'password':let K=jQuery('#visibility').find('#post_password').val();v=!!K&&!!K.length;break;case'private':x=!0;break;default:case'public':}C(),A()});jQuery('#tsf-title-separator :input').on('click',function(G){let J=jQuery(G.target).val(),K='';K='pipe'===J?'|':'dash'===J?'-':jQuery('<div/>').html('&'+J+';').text(),g=K,jQuery('.tsf-sep-js').text(' '+g+' '),k(),A()});const z=function(){let G=tsf.settingsChanged;R(!0),tsf.settingsChanged=G};jQuery('#homepage-tab-general').on('tsf-tab-toggled',z),jQuery('#tsf-flex-inpost-tab-general').on('tsf-flex-tab-toggled',z);let U=0;const q=function(){clearTimeout(U),U=setTimeout(function(){z()},50)};jQuery(window).one('tsf-ready',function(){jQuery(window).on('tsf-flex-resize',q)});let F=['autodescription-homepage-settings','tsf-inpost-box'];jQuery(document).on('postbox-toggled',function(G,J){if(0<=F.indexOf(J.id)){let K=J.querySelector('.inside');0<K.offsetHeight&&0<K.offsetWidth&&z()}});jQuery('#tsf-home-title-location :input').on('click',function(){b(),k(),A()});tsf.states.isHome||jQuery('#edittag #name, #titlewrap #title').on('input',function(G){let J=G.target.value;J=J.trim(),f=J.length?J:tsf.params.untitledTitle,I(),j()});(function(){let G=0,J=window.innerWidth;window.addEventListener('resize',function(){clearTimeout(G),G=setTimeout(function(){let K=window.innerWidth;J<K?782>=J&&782<=K&&z():782<=J&&782>=K&&z(),J=K},50)})})()}}},_initUnboundTitleSettings:function(){if(tsf.hasInput){let t=jQuery('#autodescription_title, #autodescription-meta\\[doctitle\\], #autodescription-site-settings\\[homepage_title\\]');jQuery('#tsf-title-placeholder, #tsf-title-placeholder-prefix').on('click',function(d){let c=jQuery(d.target).siblings(t)[0];if('function'==typeof c.setSelectionRange){c.focus();let g=2*c.value.length;c.setSelectionRange(g,g)}else{let g=c.value;c.value='',c.focus(),c.value=g}});jQuery('#autodescription-site-settings\\[title_rem_additions\\]').on('click',function(d){jQuery(d.target).is(':checked')?jQuery('.tsf-title-additions-js').css('display','none'):jQuery('.tsf-title-additions-js').css('display','inline')});jQuery('#tsf-title-location input').on('click',function(d){let c=jQuery('.tsf-title-additions-example-left'),g=jQuery('.tsf-title-additions-example-right');'right'===jQuery(d.target).val()?(c.css('display','none'),g.css('display','inline')):(c.css('display','inline'),g.css('display','none'))});jQuery('#autodescription-site-settings\\[homepage_title\\]').on('input',function(d){let c=d.target.value||'',g=jQuery('.tsf-custom-title-js');0===c.length?g.text(tsf.params.objectTitle):g.text(c)});jQuery('#autodescription-site-settings\\[homepage_title_tagline\\]').on('input.tsfInputTagline',function(d){let c=d.target.value||'',g=jQuery('.tsf-custom-tagline-js');0===c.length?(g.text(tsf.params.blogDescription),0===tsf.params.blogDescription.length?jQuery('#tsf-home-title-location .tsf-sep-js').hide():jQuery('#tsf-home-title-location .tsf-sep-js').show()):(g.text(c),jQuery('#tsf-home-title-location .tsf-sep-js').show())}),jQuery('#autodescription-site-settings\\[homepage_title_tagline\\]').trigger('input.tsfInputTagline');jQuery('#title-prefixes-toggle :input').on('click',function(d){let c=jQuery(d.target),g=jQuery('.tsf-title-prefix-example');c.is(':checked')?g.css('display','none'):g.css('display','inline')})}},_initDescInputs:function(){if(tsf.hasInput){let t=jQuery('#autodescription_description, #autodescription-meta\\[description\\], #autodescription-site-settings\\[homepage_description\\]');if(t.length){let s=tsf.params.descriptionSeparator;jQuery('#tsf-description-separator input').on('click',function(y){let x=jQuery(y.target).val(),v='';v='pipe'===x?'|':'dash'===x?'-':jQuery('<div/>').html('&'+x+';').text(),s=v,jQuery('#autodescription-descsep-js').text(' '+s+' '),c()});const o=function(y){let x=document.getElementById(y.target.id+'_chars');if(x){let v=0,b=y.target,k='',C=tsf.counterType,T='',I='';v=1>b.value.length?tsf.getStringLength(b.placeholder):tsf.getStringLength(b.value),100>v||175<=v?(k+='tsf-count-bad',T=tsf.i18n.bad):137>v||155<v?(k+='tsf-count-okay',T=tsf.i18n.okay):(k+='tsf-count-good',T=tsf.i18n.good),C&&1!=C?2==C?I=T:3==C&&(I=v.toString()+' - '+T):I=v.toString(),x.innerHTML=I,tsf.additionsClass&&(k+=' '+tsf.additionsClass),x.className!==k&&(x.className=k)}},n=function(y){let x=document.getElementById(y.target.id+'_pixels');if(x){let v='';v=1>y.target.value.length?y.target.placeholder:y.target.value;let b={e:x,text:v,guideline:tsf.params.descPixelGuideline};tsf.updatePixelCounter(b)}};t.on('input.tsfUpdateDescriptions',function(y){o(y),n(y)});const l=function(){t.trigger('input.tsfUpdateDescriptions')};l();let d=0;const c=function(){clearTimeout(d),d=setTimeout(function(){l()},50)};jQuery(window).on('tsf-counter-updated',c);let f=['autodescription-homepage-settings','tsf-inpost-box'];jQuery(document).on('postbox-toggled',function(y,x){if(0<=f.indexOf(x.id)){let v=x.querySelector('.inside');0<v.offsetHeight&&0<v.offsetWidth&&c()}})}}},_initCounters:function(){if(tsf.hasInput){jQuery('.tsf-counter').on('click',function(){++tsf.counterType,3<tsf.counterType&&(tsf.counterType=0),s();let r='.tsf-counter-wrap .tsf-ajax',l=0;tsf.resetAjaxLoader(r),tsf.setAjaxLoader(r);let d={method:'POST',url:ajaxurl,datatype:'json',data:{action:'the_seo_framework_update_counter',nonce:tsf.nonces.edit_posts,val:tsf.counterType},async:!0,success:function(c){switch(c=jQuery.parseJSON(c),'success'===c.type&&(l=1),l){case 0:tsf.unsetAjaxLoader(r,!1);break;case 1:tsf.unsetAjaxLoader(r,!0);break;default:tsf.resetAjaxLoader(r);}}};jQuery.ajax(d)});const s=function(){let n=tsf.counterType;1==n?(tsf.additionsClass='tsf-counter-one',tsf.counterType=1):2==n?(tsf.additionsClass='tsf-counter-two',tsf.counterType=2):3==n?(tsf.additionsClass='tsf-counter-three',tsf.counterType=3):(tsf.additionsClass='tsf-counter-zero',tsf.counterType=0),tsf._triggerCounterUpdate()};s();jQuery('#autodescription-site-settings\\[display_character_counter\\]').on('click',function(n){jQuery(n.target).is(':checked')?jQuery('.tsf-counter-wrap').show():jQuery('.tsf-counter-wrap').hide()});jQuery('#autodescription-site-settings\\[display_pixel_counter\\]').on('click',function(n){jQuery(n.target).is(':checked')?(jQuery('.tsf-pixel-counter-wrap').show(),tsf._triggerCounterUpdate()):jQuery('.tsf-pixel-counter-wrap').hide()})}},_initPrimaryTerm:function(){if(tsf.hasInput&&Object.keys(tsf.states.taxonomies).length){let t=tsf.states.taxonomies,s=wp.template('tsf-primary-term-selector'),a=wp.template('tsf-primary-term-selector-help'),o=document.createElement('span');o.classList.add('tsf-primary-term-selector'),o.classList.add('tsf-set-primary-term'),function(){let B=document.createElement('input');B.setAttribute('type','radio'),o.appendChild(B)}();let n={},r={},l={},d={},c={};const g=function(B){let z=jQuery('#'+B+'div'),U=s({taxonomy:t[B]});z.append(U)},f=function(B){let z=jQuery('#taxonomy-'+B),U=a({taxonomy:t[B]});z.append(U),u(B)},u=function(B){let z=document.getElementById('taxonomy-'+B),U=z.querySelectorAll('.tabs-panel'),q=Array.prototype.slice.call(U).filter(function(N){return 0<N.offsetWidth||0<N.offsetHeight||0<N.getClientRects().length})[0],F=q.scrollHeight>q.clientHeight?q.offsetWidth-q.clientWidth+25-2:25;tsf.states.isRTL?z.querySelector('.tsf-primary-term-selector-help-wrap').style.left=F+'px':z.querySelector('.tsf-primary-term-selector-help-wrap').style.right=F+'px'},y=function(B){u(B.data.taxonomy)},x=function(B){let z=o.cloneNode(!0);return z.setAttribute('title',t[B].i18n.makePrimary),z.setAttribute('aria-label',t[B].i18n.makePrimary),z},v=function(B,z){let U=document.getElementById('autodescription[_primary_term_'+B+']');U&&U instanceof Element&&(U.value=z)},b=function(B,z){return!z&&d[B]?d[B]:(d[B]=jQuery('#'+B+'checklist, #'+B+'checklist-pop'),d[B])},k=function(B,z){return n[B].filter('[value="'+z+'"]')},C=function(B,z){let U=k(B,z).closest('label');U.length?(U.addClass('tsf-is-primary-term'),U.find('.tsf-set-primary-term').each(function(q,F){F.setAttribute('title',t[B].i18n.primary),F.setAttribute('aria-label',t[B].i18n.primary),F.querySelector('input').checked=!0}),v(B,z),c[B]=z):I(B)},T=function(B){let z=b(B).find('label');z.removeClass('tsf-is-primary-term'),z.find('.tsf-set-primary-term').each(function(U,q){q.setAttribute('title',t[B].i18n.makePrimary),q.setAttribute('aria-label',t[B].i18n.makePrimary),q.querySelector('input').checked=!1}),v(B,'')},I=function(B){let U,z=l[B].first();z.length&&(U=z.val()||'',C(B,U),c[B]=U)},S=function(B){let z=B.data.taxonomy,U=jQuery(B.target).closest('label').find('input[type=checkbox]').val();return T(z),C(z,U),!1},L=function(B){let z=B.data.taxonomy;switch(B.target.checked?(j(z,B.target),W(z,B.target)):(R(z,B.target),E(z,B.target)),l[z].length){case 0:v(z,'');break;case 1:I(z);}},W=function(B,z){let U;k(B,z.value).each(function(q,F){U=jQuery(F).closest('label'),U.find('.tsf-primary-term-selector').length||U.append(x(B))})},E=function(B,z){let U,q;k(B,z.value).each(function(F,N){U=jQuery(N).closest('label'),q=U.hasClass('tsf-is-primary-term'),U.removeClass('tsf-is-primary-term'),U.find('.tsf-primary-term-selector').remove(),q&&I(B)})},j=function(B,z){r[B]=r[B].add('[value="'+z.value+'"]'),l[B]=l[B].add(z)},R=function(B,z){r[B]=r[B].not('[value="'+z.value+'"]'),l[B]=l[B].not('[value="'+z.value+'"]')},P=function(B){let z=b(B,1);n[B]=z.find('input[type=checkbox]'),r[B]=z.find('input[type=checkbox]:checked');let q,U={};l[B]=r[B],l[B].each(function(F,N){q=jQuery(N).val(),U[q]?l[B].splice(F,1):U[q]=!0})},H=function(B,z,U){U.hasOwnProperty('settings')&&U.settings.hasOwnProperty('what')&&(P(U.settings.what),A(U.settings.what),D(U.settings.what),u(U.settings.what))},A=function(B){let z='tsfShowPrimary'+B,U={taxonomy:B},q=b(B),F=jQuery('#'+B+'div'),N=jQuery('#'+B+'-tabs');q.off('click.'+z),q.on('click.'+z,'input[type="checkbox"]',U,L),q.on('click.'+z,'.tsf-primary-term-selector',U,S),F.off('wpListAddEnd.'+z),F.on('wpListAddEnd.'+z,'#'+B+'checklist',H),N.off('click.'+z),N.on('click.'+z,'a',U,y)},D=function(B){b(B).find('input[type="checkbox"]:checked').each(function(z,U){W(B,U)}),t[B].primary?C(B,t[B].primary):I(B)};(function(){for(let B in t)b(B).length&&(g(B),f(B),P(B),A(B),D(B))})()}},_initToolTips:function(){let t=0,s=!1;const a=function(){s=!0,clearTimeout(t),t=setTimeout(function(){s=!1},250)},o=function(y,x){x=x||!1;let v='pointerdown.tsfTT touchstart.tsfTT click.tsfTT',b=jQuery(y);x?(b.off('mousemove mouseleave mouseout tsf-tooltip-update'),jQuery(document.body).off(v)):(b.on({mousemove:d,mouseleave:c,mouseout:c}),jQuery(document.body).off(v).on(v,g)),b.on('tsf-tooltip-update',r)},n=function(y){o(y,!0)},r=function(y){if(y.target.classList.contains('tsf-tooltip-item')){let x=y.target.querySelector('.tsf-tooltip-text');x instanceof Element&&(x.innerHTML=y.target.dataset.desc)}},l=function(y){let x=jQuery(y.target),v=y.target.dataset.desc;if(v&&0===x.find('div').length){y.target.title='';let b=jQuery('<div class="tsf-tooltip"><span class="tsf-tooltip-text-wrap"><span class="tsf-tooltip-text">'+v+'</span></span><div class="tsf-tooltip-arrow"></div></div>');x.append(b);let k=x.closest('.tsf-tooltip-boundary');k=k.length&&k||jQuery(document.body);let C=x.outerHeight()+9,T=b.offset().top-C,I=k.offset().top-(k.prop('scrolltop')||0);I>T?(b.addClass('tsf-tooltip-down'),b.css('top',C+'px')):b.css('bottom',C+'px');let S=x.closest('.tsf-tooltip-wrap'),L=b.find('.tsf-tooltip-text-wrap'),W=L.find('.tsf-tooltip-text'),E=S.width(),j=L.outerWidth(!0),R=W.outerWidth(!0),P=L.offset().left,H=P+R,A=k.offset().left-(k.prop('scrollLeft')||0),D=A+k.outerWidth(),O='left';if(P<A){let B=A-P+12,z=parseInt(L.css('flex-basis'),10);B<-z&&(B=-z),b.css(O,B+'px'),b.data('overflow',B),b.data('overflowDir',O)}else if(H>D){let B=D-H-E-12,z=parseInt(L.css('flex-basis'),10);B<-z&&(B=-z),b.css(O,B+'px'),b.data('overflow',B),b.data('overflowDir',O)}else if(42>E){let B=-15;b.css(O,B+'px'),b.data('overflow',B),b.data('overflowDir',O)}else if(E>j){let B=y.originalEvent&&y.originalEvent.pageX||y.pageX,z=S.offset().left,q=B-z-j/2,F=q+j;0>q?q=0:F>E&&(q=E-R),b.css(O,q+'px'),b.data('adjust',q),b.data('adjustDir',O)}}},d=function(y){let x=jQuery(y.target),v=x.find('.tsf-tooltip'),b=v.find('.tsf-tooltip-arrow'),k=v.data('overflow'),C=v.data('overflowDir');if(k=parseInt(k,10),k=isNaN(k)?0:-Math.round(k),k)b.css(C,k+'px');else{let T=y.originalEvent&&y.originalEvent.pageX||y.pageX,I=7,S=16,L=x.closest('.tsf-tooltip-wrap'),W=T-L.offset().left-S/2,j=v.find('.tsf-tooltip-text-wrap'),R=j.outerWidth(!0),P=v.data('adjust'),H=v.data('adjustDir'),A=R-S-I;if(P=parseInt(P,10),P=isNaN(P)?0:Math.round(P),P&&(P='left'===H?-P:P,W+=P,A-P>L.outerWidth(!0))){let D=j.find('.tsf-tooltip-text'),O=D.outerWidth(!0);A=O-S-I}W<=I?b.css('left',I+'px'):W>=A?b.css('left',A+'px'):b.css('left',W+'px')}},c=function(y){s||(jQuery(y.target).find('.tsf-tooltip').remove(),n(y.target))},g=function(y){a();let k,v='.tsf-tooltip',b=jQuery(y.target);if(b.hasClass('tsf-tooltip-item')&&(k=b.find(v)),!k){let C=b.children('.tsf-tooltip-item');C.length&&(k=C.find(v))}k&&k.length?jQuery(v).not(k).remove():jQuery(v).remove()},f=function(y){if(!s){let x=!1;switch(y.type){case'mouseenter':break;case'pointerdown':case'touchstart':x=!0;break;default:}if(y.target.classList.contains('tsf-tooltip-item'))x&&g(y),l(y),d(y),o(y.target);else{let v=y.target.querySelector('.tsf-tooltip-item:hover'),b=new jQuery.Event(y.type);b.pageX=y.originalEvent&&y.originalEvent.pageX||y.pageX,v?(tsfL10n.states.debug&&console.log('Tooltip event warning: delegation'),jQuery(v).trigger(b)):(tsfL10n.states.debug&&console.log('Tooltip event warning: bubbling'),jQuery(y.target).closest('.tsf-tooltip-wrap').find('.tsf-tooltip-item:hover').trigger(b))}y.stopPropagation()}},u=function(){let y=jQuery('.tsf-tooltip-wrap');y.off('mouseenter pointerdown touchstart'),y.on('mouseenter pointerdown touchstart','.tsf-tooltip-item',f)};u(),jQuery(window).on('tsf-reset-tooltips',u),function(){let y=jQuery('#wpcontent');tsf.addTooltipBoundary(y)}()},addTooltipBoundary:function(t){jQuery(t).addClass('tsf-tooltip-boundary')},tabToggle:function(t){let s=jQuery(t.target);if(s.is(':checked')){let a=s.prop('id'),o=s.prop('name');if('undefined'!=typeof o){let n='tsf-active-tab-content',r=jQuery('#'+a+'-content'),l=jQuery('.'+n);if(!r.is(l)&&'undefined'!=typeof r){let d=jQuery('.'+o+'-content');d.fadeOut(150,function(){jQuery(this).removeClass(n)}),setTimeout(function(){r.addClass(n).fadeIn(250)},150),setTimeout(function(){jQuery('#'+a).trigger('tsf-tab-toggled')},175)}}}},flexTabToggle:function(t){let s=jQuery(t.target);if(s.is(':checked')){let a=s.prop('id'),o=s.prop('name');if('undefined'!=typeof o){let n='tsf-flex-tab-content-active',r=jQuery('#'+a+'-content'),l=jQuery('.'+n);if(!r.is(l)&&'undefined'!=typeof r){let d=jQuery('.'+o+'-content');d.fadeOut(150,function(){jQuery(this).removeClass(n)}),setTimeout(function(){r.addClass(n).fadeIn(250)},150),setTimeout(function(){jQuery('#'+a).trigger('tsf-flex-tab-toggled')},175)}}}},setTabsOnload:function(){if(tsf.hasInput)if(tsf.states.isSettingsPage){let t=jQuery('.tsf-nav-tab-wrapper .tsf-tab:nth-of-type(n+2) input:checked');t.length&&t.each(function(){let a=jQuery(this),o=a.prop('id'),n=a.prop('name');if('undefined'!=typeof n){let r='tsf-active-tab-content',l=jQuery('#'+o+'-content');if('undefined'!=typeof l){let d=jQuery('.'+n+'-content');d.removeClass(r),l.addClass(r),setTimeout(function(){jQuery('#'+o).trigger('tsf-tab-toggled')},20)}}})}else;},taglineToggleDesc:function(t){let s=jQuery(t.target),a=jQuery('#tsf-on-blogname-js');s.is(':checked')?a.css('display','inline'):a.css('display','none')},additionsToggleDesc:function(t){let s=jQuery(t.target),a=jQuery('#tsf-description-additions-js');s.is(':checked')?a.css('display','inline'):a.css('display','none')},taglineToggleOnload:function(){if(tsf.hasInput){let t=jQuery('#tsf-title-tagline-toggle :input'),s=jQuery('.tsf-custom-blogname-js'),a=jQuery('#tsf-description-additions-toggle :input'),o=jQuery('#tsf-description-additions-js'),n=jQuery('#tsf-description-onblogname-toggle :input'),r=jQuery('#tsf-on-blogname-js'),l=jQuery('#tsf-title-additions-toggle :input'),d=jQuery('.tsf-title-additions-js');t.is(':checked')?s.css('display','inline'):s.css('display','none'),a.is(':checked')?o.css('display','inline'):o.css('display','none'),n.is(':checked')?r.css('display','inline'):r.css('display','none'),l.is(':checked')?d.css('display','none'):d.css('display','inline')}},attachUnsavedChangesListener:function(){if(tsf.hasInput){let t=function(o){tsf.settingsChanged||tsf.registerChange(),jQuery(s).not(a).off(o.type,t)},s='.tsf-metaboxes :input, #tsf-inpost-box .inside :input',a='.tsf-tab :input, .tsf-flex-nav-tab :input';jQuery(s).not(a).on('change',t),s='.tsf-metaboxes input[type=text], .tsf-metaboxes textarea, #tsf-inpost-box .inside input[type=text], #tsf-inpost-box .inside textarea',a='.tsf-nav-tab-wrapper input, .tsf-flex-nav-tab-wrapper input',jQuery(s).not(a).on('input',t),window.onbeforeunload=function(){if(tsf.settingsChanged)return tsf.i18n.saveAlert},jQuery('.tsf-metaboxes input[type="submit"], #publishing-action input[type="submit"], #save-action input[type="submit"], a.submitdelete').click(function(){window.onbeforeunload=null})}},registerChange:function(){tsf.settingsChanged=!0},confirmedReset:function(){return confirm(tsf.i18n.confirmReset)},onLoadUnregisterChange:function(){tsf.settingsChanged=!1},dismissNotice:function(t){jQuery(t.target).parents('.tsf-notice').slideUp(200,function(){this.remove()})},setAjaxLoader:function(t){jQuery(t).toggleClass('tsf-loading')},unsetAjaxLoader:function(t,s){let a='tsf-success',o=2500;s||(a='tsf-error',o=5e3),jQuery(t).removeClass('tsf-loading').addClass(a).fadeOut(o)},resetAjaxLoader:function(t){jQuery(t).stop().empty().prop('class','tsf-ajax').css('opacity','1').removeProp('style')},openImageEditor:function(t){if(jQuery(t.target).prop('disabled')||'undefined'==typeof wp.media)return t.preventDefault(),void t.stopPropagation();let o,s=jQuery(t.target),a=s.data('inputid');if(o)return void o.open();t.preventDefault(),t.stopPropagation(),tsf.extendCropper();let n={suggestedWidth:s.data('width')||1200,suggestedHeight:s.data('height')||630,isFlex:'undefined'==typeof s.data('flex')?1:s.data('flex')};tsf.cropper.control={params:{flex_width:n.isFlex?4096:0,flex_height:n.isFlex?4096:0,width:n.suggestedWidth,height:n.suggestedHeight,isFlex:n.isFlex}},o=wp.media({button:{text:tsf.other[a].frame_button,close:!1},states:[new wp.media.controller.Library({title:tsf.other[a].frame_title,library:wp.media.query({type:'image'}),multiple:!1,date:!1,priority:20,suggestedWidth:n.suggestedWidth,suggestedHeight:n.suggestedHeight}),new tsf.cropper({imgSelectOptions:tsf.calculateImageSelectOptions})]});const r=function(){o.setState('cropper')};o.off('select',r),o.on('select',r);const l=function(g){let f=g.url,u=g.id,y=g.width,x=g.height;jQuery('#'+a+'-url').val(f),jQuery('#'+a+'-id').val(u)};o.off('cropped',l),o.on('cropped',l);const d=function(g){let f=g.get('url'),u=g.get('id'),y=g.get('width'),x=g.get('height');jQuery('#'+a+'-url').val(f),jQuery('#'+a+'-id').val(u)};o.off('skippedcrop',d),o.on('skippedcrop',d);const c=function(){jQuery('#'+a+'-select').text(tsf.other[a].change),jQuery('#'+a+'-url').prop('readonly',!0).css('opacity',0).animate({opacity:1},{queue:!0,duration:1000},'swing'),tsf.appendRemoveButton(s,a,!0),tsf.registerChange()};o.off('skippedcrop cropped',c),o.on('skippedcrop cropped',c),o.open()},appendRemoveButton:function(t,s,a){t&&s&&!jQuery('#'+s+'-remove').length&&(t.after('<a href="javascript:void(0)" id="'+s+'-remove" class="tsf-remove-social-image button button-small" data-inputid="'+s+'" title="'+tsf.other[s].remove_title+'">'+tsf.other[s].remove+'</a>'),a&&jQuery('#'+s+'-remove').css('opacity',0).animate({opacity:1},{queue:!0,duration:1000},'swing')),tsf.resetImageEditorActions()},removeEditorImage:function(t){let s=jQuery(t.target).data('inputid');if(!jQuery('#'+s+'-select').prop('disabled')){jQuery('#'+s+'-select').addClass('disabled').prop('disabled',!0),jQuery('#'+s+'-remove').addClass('disabled').prop('disabled',!0).fadeOut(500,function(){jQuery(this).remove(),jQuery('#'+s+'-select').text(tsf.other[s].select).removeClass('disabled').removeProp('disabled')});let a=jQuery('#'+s+'-url');a.val(''),a.data('readonly')||a.removeProp('readonly'),a.css('opacity',0).animate({opacity:1},{queue:!0,duration:500},'swing'),jQuery('#'+s+'-id').val(''),tsf.registerChange()}},extendCropper:function(){if('undefined'==typeof tsf.cropper.control){let t,a,s=wp.media.controller,o=wp.media.view;return a=o.Cropper.extend({className:'crop-content tsf-image',ready:function(){o.Cropper.prototype.ready.apply(this,arguments)},onImageLoad:function(){let r,n=this.controller.get('imgSelectOptions');'function'==typeof n&&(n=n(this.options.attachment,this.controller)),'undefined'==typeof n.aspectRatio&&(n=_.extend(n,{parent:this.$el,onInit:function(){this.parent.children().on('mousedown touchstart',function(l){l.shiftKey?r.setOptions({aspectRatio:'1:1'}):r.setOptions({aspectRatio:!1})})}})),this.trigger('image-loaded'),r=this.controller.imgSelect=this.$image.imgAreaSelect(n)}}),t=s.Cropper.extend({createCropContent:function(){this.cropperView=new a({controller:this,attachment:this.get('selection').first()}),this.cropperView.on('image-loaded',this.createCropToolbar,this),this.frame.content.set(this.cropperView)},doCrop:function(n){let r=n.get('cropDetails'),l=tsf.cropper.control;if(l.params.flex_width&&l.params.flex_height)if(r.width===r.height)r.width>l.params.flex_width&&(r.dst_width=r.dst_height=l.params.flex_width);else if(r.width>l.params.flex_width||r.height>l.params.flex_height)if(r.width>r.height){let d=r.width/l.params.flex_width;r.dst_width=l.params.flex_width,r.dst_height=Math.round(r.height/d)}else{let d=r.height/l.params.flex_height;r.dst_height=l.params.flex_height,r.dst_width=Math.round(r.width/d)}return'undefined'==typeof r.dst_width&&(r.dst_width=0,r.dst_height=0),wp.ajax.post('tsf-crop-image',{nonce:tsf.nonces.upload_files,id:n.get('id'),context:'tsf-image',cropDetails:r})}}),t.prototype.control={},void(tsf.cropper=t)}},calculateImageSelectOptions:function(t,s){let y,x,v,b,a=tsf.cropper.control,o=!!parseInt(a.params.flex_width,10),n=!!parseInt(a.params.flex_height,10),r=parseInt(a.params.width,10),l=parseInt(a.params.height,10),d=t.get('width'),c=t.get('height'),g=r/l,f=r,u=l;return b=a.params.isFlex?!tsf.mustBeCropped(a.params.flex_width,a.params.flex_height,d,c):g==d/c,s.set('control',a.params),s.set('canSkipCrop',b),d/c>g?(l=c,r=l*g):(r=d,l=r/g),y=(d-r)/2,x=(c-l)/2,v={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:d,imageHeight:c,minWidth:f>r?r:f,minHeight:u>l?l:u,x1:y,y1:x,x2:r+y,y2:l+x},a.params.isFlex?n||o?(n&&(v.minHeight=200,v.maxWidth=d),o&&(v.minWidth=200,v.maxHeight=c)):v.aspectRatio=r+':'+l:(v.handles='corners',v.aspectRatio=r+':'+l),v},mustBeCropped:function(t,s,a,o){return a<=t&&o<=s?!1:!0},resetImageEditorActions:function(){jQuery('.tsf-remove-social-image').off('click',tsf.removeEditorImage),jQuery('.tsf-remove-social-image').on('click',tsf.removeEditorImage)},setupImageEditorActions:function(){jQuery('.tsf-set-social-image').off('click',tsf.openImageEditor),jQuery('.tsf-remove-social-image').off('click',tsf.removeEditorImage),jQuery('.tsf-set-social-image').on('click',tsf.openImageEditor),jQuery('.tsf-remove-social-image').on('click',tsf.removeEditorImage)},checkImageEditorInput:function(){let t=jQuery('.tsf-set-social-image');if(t.length){let s='',a='';jQuery.each(t,function(o,n){s=jQuery(n).data('inputid'),a=jQuery('#'+s+'-id'),a.length&&0<a.val()&&(jQuery('#'+s+'-url').prop('readonly',!0),tsf.appendRemoveButton(jQuery(n),s,!1)),jQuery('#'+s+'-url').val()&&jQuery('#'+s+'-select').text(tsf.other[s].change)})}},setColorOnload:function(){let t=jQuery('.tsf-color-picker');t.length&&jQuery.each(t,function(s,a){let o=jQuery(a),n='',r=o.data('tsf-default-color');o.wpColorPicker({defaultColor:r,width:238,change:function(){n=o.wpColorPicker('color'),''==n&&(n=r),o.val(n),tsf.registerChange()},clear:function(){o.parent().siblings('.wp-color-result').css('backgroundColor',r),tsf.registerChange()},palettes:!1})})},_doFlexResizeListener:function(){if(jQuery('.tsf-flex').length){tsf._setResizeListeners();let t=0,s={},a=0,o=jQuery('.tsf-flex-nav-tab-wrapper'),n=jQuery(window);n.on('tsf-flex-resize',function(){clearTimeout(t);let r=0;t=setTimeout(function(){if(o.length){let l=jQuery('.tsf-flex-nav-tab-inner'),d=o.width(),c=l.width(),g=jQuery('.tsf-flex-nav-name');s.tabWrapper||(s.tabWrapper={},s.tabWrapper.outer=0,s.tabWrapper.inner=0,s.tabWrapper.shown=1),!s.tabWrapper.shown&&s.tabWrapper.outer<d&&(g.fadeIn(250),setTimeout(function(){c=l.width()},r)),setTimeout(function(){c>d?(g.hide(),s.tabWrapper.shown=0):s.tabWrapper.outer<d&&(g.fadeIn(250),s.tabWrapper.shown=1)},2*r),setTimeout(function(){s.tabWrapper.outer=d,s.tabWrapper.inner=c},3*r)}},a),r=10,a=75}),n.trigger('tsf-flex-resize')}},_setResizeListeners:function(){jQuery(window).on('resize orientationchange',tsf._triggerResize),jQuery('#collapse-menu').click(tsf._triggerResize),jQuery('.columns-prefs :input[type=radio]').change(tsf._triggerResize),jQuery('.meta-box-sortables').on('sortupdate',tsf._triggerResize)},_triggerTooltipReset:function(){jQuery(window).trigger('tsf-reset-tooltips')},_triggerTooltipUpdate:function(t){jQuery(t).trigger('tsf-tooltip-update')},_triggerResize:function(){jQuery(window).trigger('tsf-flex-resize')},_triggerCounterUpdate:function(){jQuery(window).trigger('tsf-counter-updated')},_triggerReady:function(){jQuery(document.body).trigger('tsf-ready')},_doReady:function(){tsf._initCounters(),tsf._initTitleInputs(),tsf._initUnboundTitleSettings(),tsf._initDescInputs(),tsf._initPrimaryTerm(),tsf.setTabsOnload(),tsf.taglineToggleOnload(),tsf._initToolTips(),tsf.setupImageEditorActions(),tsf.checkImageEditorInput(),tsf.setColorOnload(),tsf.attachUnsavedChangesListener(),tsf.onLoadUnregisterChange(),tsf._doFlexResizeListener(),tsf._triggerReady()},setupVars:function(){tsf.counterType=parseInt(tsf.states.counterType),tsf.hasInput=tsf.states.hasInput},ready:function(t){tsf.setupVars(),t('div.updated, div.error, div.notice-warning').insertAfter('div.tsf-top-wrap'),t(document.body).ready(tsf._doReady),t('.tsf-js-confirm-reset').on('click',tsf.confirmedReset),t('.tsf-tabs-radio').on('change',tsf.tabToggle),t('.tsf-flex-nav-tab-radio').on('change',tsf.flexTabToggle),t('#tsf-description-onblogname-toggle :input').on('click',tsf.taglineToggleDesc),t('#tsf-description-additions-toggle :input').on('click',tsf.additionsToggleDesc),t('.tsf-dismiss').on('click',tsf.dismissNotice)}},jQuery(tsf.ready);
|
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){return confirm(t)},escapeString:function(t){if(!t.length)return'';let s={'&':'&','<':'<','>':'>','"':'"','\'':'''};return t.replace(/[&<>"']/g,a=>{return s[a]})},unescapeString:function(t){if(!t.length)return'';let s={'&':'&','<':'<','>':'>','"':'"','\'':'''},a=Object.keys(s).map(n=>s[n]),o=new RegExp(a.map(n=>{return n.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,'\\$&')}).join('|'),'g');return t.replace(o,n=>{return Object.keys(s).find(r=>{return s[r]===n})})},getStringLength:function(t){let s,a=0;return t.length&&(s=document.createElement('span'),s.innerHTML=tsf.escapeString(t),a=s.childNodes[0].nodeValue.length),+a},updatePixelCounter:function(t){let s=t.e,a=t.text,o=t.guideline,n=s.parentElement;if(n){let r=n.querySelector('.tsf-pixel-counter-bar'),l=n.querySelector('.tsf-pixel-counter-shadow');if(r&&l){l.innerHTML=tsf.escapeString(a);let 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);let 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(){if(tsf.hasInput){let t=jQuery('#autodescription_title, #autodescription-meta\\[doctitle\\], #autodescription-site-settings\\[homepage_title\\]');if(t.length){let 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,b=tsf.states.isPasswordProtected;o=y?'after':'before';const T=function(){let Y='before';tsf.states.isSettingsPage?y?'right'===jQuery('#tsf-home-title-location input:checked').val()&&(Y='after'):'left'===jQuery('#tsf-home-title-location input:checked').val()&&(Y='after'):tsf.states.isHome?y?'right'===tsf.params.titleLocation&&(Y='after'):'left'===tsf.params.titleLocation&&(Y='after'):y?'left'===tsf.params.titleLocation&&(Y='after'):'right'===tsf.params.titleLocation&&(Y='after'),n=Y};T();const C=function(){let Y='';if(!tsf.states.isSettingsPage)tsf.states.isHome?u&&(Y=tsf.params.titleAdditions):u&&(Y=tsf.params.titleAdditions);else if(u){let Z=document.getElementById('autodescription-site-settings[homepage_title_tagline]'),Q=Z?Z.value:'';Y=Q.length?Q:tsf.params.blogDescription}Y.length&&(Y=tsf.escapeString(Y),'before'===n?Y=Y+' '+g+' ':'after'===n?Y=' '+g+' '+Y:void 0),c=Y.length?Y:'',d=document.getElementById('tsf-title-placeholder'),c.length&&d&&(d.innerHTML=c)};C();const S=function(){let Y='';x?Y=tsf.i18n.privateTitle:b&&(Y=tsf.i18n.protectedTitle),Y.length&&(Y=tsf.escapeString(Y),'before'===o?Y+=' ':'after'===o?Y=' '+Y:void 0),l=Y.length?Y:'',l.length&&r&&(r.innerHTML=l),r=document.getElementById('tsf-title-placeholder-prefix'),l.length&&r&&(r.innerHTML=l)};S();const I=function(Y){if(d||r){let Z=jQuery(Y.target),Q=Z.val(),tt=!!c.length,et=!!l.length;if(!tt&&d&&(d.style.display='none'),!et&&r&&(r.style.display='none'),!tt&&!et)return void Z.css('text-indent','initial');if(!Q.length)return Z.css('text-indent','initial'),d&&(d.style.display='none'),void(r&&(r.style.display='none'));let it=Z.outerWidth(!0),st=(Z.outerHeight(!0)-Z.height())/2,at=(it-Z.innerWidth())/2,ot=y?'right':'left',nt=(Z.outerWidth(!0)-Z.width())/2,rt={display:Z.css('display'),lineHeight:Z.css('lineHeight'),fontFamily:Z.css('fontFamily'),fontWeight:Z.css('fontWeight'),fontSize:Z.css('fontSize'),letterSpacing:Z.css('letterSpacing'),paddingTop:st+'px',paddingBottom:st+'px'},lt=jQuery(r),pt=jQuery(d),dt=0,ct=0,gt=0,ft=0,ut=0,ht=0;if(et&&(lt.css(rt),lt.css({maxWidth:'initial'}),ut=lt[0].getBoundingClientRect().width,ut<ht&&(ut=0)),tt){let yt=0;switch(function(){let xt=jQuery('#tsf-title-offset');xt.text(Q),xt.css({fontFamily:rt.fontFamily,fontWeight:rt.fontWeight,letterSpacing:rt.letterSpacing,fontSize:rt.fontSize}),yt=xt[0].getBoundingClientRect().width}(),dt=Z[0].getBoundingClientRect().width-at-nt-yt-ut,dt<ht&&(ut+=dt,dt=0),pt.css(rt),pt.css({maxWidth:'initial'}),n){case'before':let xt=pt[0].getBoundingClientRect().width;xt=dt<xt?dt:xt,xt<ht&&(xt=0),dt=xt,ft+=dt,gt+=dt,ct+=nt;break;case'after':ct+=nt+yt+ut;}}gt+=nt,ut=0>ut?0:ut,ft+=ut;let mt;et&&(mt={},mt[ot]=gt+'px',mt.maxWidth=ut+'px',lt.css(mt)),tt&&(mt={},mt[ot]=ct+'px',mt.maxWidth=dt+'px',pt.css(mt)),mt={},mt['text-indent']=ft+'px',Z.css(mt)}},L=function(){let Z='',Q=!!c.length,tt=!!l.length,et=c,it=l;tsf.states.isTermEdit&&tsf.params.termName&&(it=y?' :'+tsf.params.termName:tsf.params.termName+': ',tt=tsf.states.useTermPrefix),Z=f,tt&&('before'===o?Z=it+Z:'after'===o?Z+=it:void 0),Q&&('before'===n?Z=et+Z:'after'===n?Z+=et:void 0),a&&(s=!0);let st=document.createElement('span');st.innerHTML=Z,t.prop('placeholder',st.textContent),a&&setTimeout(function(){s=!1},0)},E=function(Y){let Z=document.getElementById('tsf-title-reference'),Q='';Z&&(1>Y.target.value.length?Q=Y.target.placeholder:(Q=Y.target.value,l.length&&('before'===o?Q=l+Q:'after'===o?Q+=l:void 0),c.length&&('before'===n?Q=c+Q:'after'===n?Q+=c:void 0)),Z.innerHTML=tsf.escapeString(Q),setTimeout(()=>{jQuery(Z).change()},0))},W=function(Y){let Z=document.getElementById(Y.target.id+'_chars'),Q=document.getElementById('tsf-title-reference');if(Z&&Q){let tt=tsf.getStringLength(tsf.unescapeString(Q.innerHTML)),et=Y.target,it='',st=tsf.counterType,at='',ot='';25>tt||75<=tt?(it+='tsf-count-bad',at=tsf.i18n.bad):42>tt||55<tt?(it+='tsf-count-okay',at=tsf.i18n.okay):(it+='tsf-count-good',at=tsf.i18n.good),st&&1!=st?2==st?ot=at:3==st&&(ot=tt.toString()+' - '+at):ot=tt.toString(),Z.innerHTML=ot,tsf.additionsClass&&(it+=' '+tsf.additionsClass),Z.className!==it&&(Z.className=it)}},j=function(Y){let Z=document.getElementById(Y.target.id+'_pixels'),Q=document.getElementById('tsf-title-reference');if(Z&&Q){let tt={e:Z,text:tsf.unescapeString(Q.innerHTML),guideline:tsf.params.titlePixelGuideline};tsf.updatePixelCounter(tt)}};t.on('input.tsfUpdateTitles',function(Y){return!s&&void(I(Y),L(),E(Y),W(Y),j(Y))});t.on('tsf-update-title-counter',function(Y){E(Y),W(Y),j(Y)});const P=function(){t.trigger('tsf-update-title-counter')},D=function(){t.trigger('input.tsfUpdateTitles')};D();const A=function(){C(),D()};jQuery('#autodescription-site-settings\\[homepage_title_tagline\\]').on('input',A),jQuery('#autodescription-site-settings\\[homepage_tagline\\]').on('change',A);let B=0;const O=function(){clearTimeout(B),B=setTimeout(function(){D()},50)};jQuery(window).on('tsf-counter-updated',O);jQuery('#tsf-title-tagline-toggle :input').on('click',function(Y){let Z=u;jQuery(Y.target).is(':checked')?(jQuery('.tsf-custom-blogname-js').css('display','inline'),u=!0):(jQuery('.tsf-custom-blogname-js').css('display','none'),u=!1),Z^u&&(C(),O())});jQuery('#visibility .save-post-visibility').on('click',function(){let Z=jQuery('#visibility').find('input:radio:checked').val();switch(x=!1,b=!1,Z){case'password':let Q=jQuery('#visibility').find('#post_password').val();b=!!Q&&!!Q.length;break;case'private':x=!0;break;default:case'public':}S(),O()});jQuery('#tsf-title-separator :input').on('click',function(Y){let Z=jQuery(Y.target).val(),Q='';Q='pipe'===Z?'|':'dash'===Z?'-':jQuery('<div/>').html('&'+Z+';').text(),g=Q,jQuery('.tsf-sep-js').text(' '+g+' '),C(),O()});const M=function(){let Y=tsf.settingsChanged;D(!0),tsf.settingsChanged=Y};jQuery('#homepage-tab-general').on('tsf-tab-toggled',M),jQuery('#tsf-flex-inpost-tab-general').on('tsf-flex-tab-toggled',M);let N=0;const F=function(){clearTimeout(N),N=setTimeout(M,50)};jQuery(window).one('tsf-ready',function(){jQuery(window).on('tsf-flex-resize',F)});let X=['autodescription-homepage-settings','tsf-inpost-box'];jQuery(document).on('postbox-toggled',function(Y,Z){if(0<=X.indexOf(Z.id)){let Q=Z.querySelector('.inside');0<Q.offsetHeight&&0<Q.offsetWidth&&M()}});jQuery('#tsf-home-title-location :input').on('click',function(){T(),C(),O()});tsf.states.isHome||jQuery('#edittag #name, #titlewrap #title').on('input',function(Y){let Z=Y.target.value;Z=Z.trim(),f=Z.length?tsf.escapeString(Z):tsf.params.untitledTitle,L(),P()});(function(){let Y=0,Z=window.innerWidth;window.addEventListener('resize',function(){clearTimeout(Y),Y=setTimeout(function(){let Q=window.innerWidth;Z<Q?782>=Z&&782<=Q&&M():782<=Z&&782>=Q&&M(),Z=Q},50)})})()}}},_initUnboundTitleSettings:function(){if(tsf.hasInput){let t=jQuery('#autodescription_title, #autodescription-meta\\[doctitle\\], #autodescription-site-settings\\[homepage_title\\]');jQuery('#tsf-title-placeholder, #tsf-title-placeholder-prefix').on('click',function(d){let c=jQuery(d.target).siblings(t)[0];if('function'==typeof c.setSelectionRange){c.focus();let g=2*c.value.length;c.setSelectionRange(g,g)}else{let g=c.value;c.value='',c.focus(),c.value=g}});jQuery('#autodescription-site-settings\\[title_rem_additions\\]').on('click',function(d){jQuery(d.target).is(':checked')?jQuery('.tsf-title-additions-js').css('display','none'):jQuery('.tsf-title-additions-js').css('display','inline')});jQuery('#tsf-title-location input').on('click',function(d){let c=jQuery('.tsf-title-additions-example-left'),g=jQuery('.tsf-title-additions-example-right');'right'===jQuery(d.target).val()?(c.css('display','none'),g.css('display','inline')):(c.css('display','inline'),g.css('display','none'))});jQuery('#autodescription-site-settings\\[homepage_title\\]').on('input',function(d){let c=d.target.value||'',g=jQuery('.tsf-custom-title-js');0===c.length?g.text(tsf.params.objectTitle):g.text(c)});jQuery('#autodescription-site-settings\\[homepage_title_tagline\\]').on('input.tsfInputTagline',function(d){let c=d.target.value||'',g=jQuery('.tsf-custom-tagline-js');0===c.length?(g.text(tsf.params.blogDescription),0===tsf.params.blogDescription.length?jQuery('#tsf-home-title-location .tsf-sep-js').hide():jQuery('#tsf-home-title-location .tsf-sep-js').show()):(g.text(c),jQuery('#tsf-home-title-location .tsf-sep-js').show())}),jQuery('#autodescription-site-settings\\[homepage_title_tagline\\]').trigger('input.tsfInputTagline');jQuery('#title-prefixes-toggle :input').on('click',function(d){let c=jQuery(d.target),g=jQuery('.tsf-title-prefix-example');c.is(':checked')?g.css('display','none'):g.css('display','inline')})}},_initDescInputs:function(){if(tsf.hasInput){let t=jQuery('#autodescription_description, #autodescription-meta\\[description\\], #autodescription-site-settings\\[homepage_description\\]');if(t.length){let s=tsf.params.descriptionSeparator;jQuery('#tsf-description-separator input').on('click',function(x){let b=jQuery(x.target).val(),T='';T='pipe'===b?'|':'dash'===b?'-':jQuery('<div/>').html('&'+b+';').text(),s=T,jQuery('#autodescription-descsep-js').text(' '+s+' '),g()});const o=function(x){let b=document.getElementById(x.target.id+'_chars');if(b){let T=0,C=x.target,S='',I=tsf.counterType,L='',E='';T=1>C.value.length?tsf.getStringLength(C.placeholder):tsf.getStringLength(C.value),100>T||330<=T?(S+='tsf-count-bad',L=tsf.i18n.bad):137>T||300<T?(S+='tsf-count-okay',L=tsf.i18n.okay):(S+='tsf-count-good',L=tsf.i18n.good),I&&1!=I?2==I?E=L:3==I&&(E=T.toString()+' - '+L):E=T.toString(),b.innerHTML=E,tsf.additionsClass&&(S+=' '+tsf.additionsClass),b.className!==S&&(b.className=S)}},n=function(x){let b=document.getElementById('tsf-description-reference'),T='';b&&(T=1>x.target.value.length?x.target.placeholder:x.target.value,b.innerHTML=tsf.escapeString(T),setTimeout(()=>{jQuery(b).change()},0))},r=function(x){let b=document.getElementById(x.target.id+'_pixels'),T=document.getElementById('tsf-description-reference');if(b&&T){let C={e:b,text:tsf.unescapeString(T.innerHTML),guideline:tsf.params.descPixelGuideline};tsf.updatePixelCounter(C)}};t.on('input.tsfUpdateDescriptions',function(x){n(x),o(x),r(x)});const d=function(){t.trigger('input.tsfUpdateDescriptions')};d();let c=0;const g=function(){clearTimeout(c),c=setTimeout(function(){d()},50)};jQuery(window).on('tsf-counter-updated',g);let u=['autodescription-homepage-settings','tsf-inpost-box'];jQuery(document).on('postbox-toggled',function(x,b){if(0<=u.indexOf(b.id)){let T=b.querySelector('.inside');0<T.offsetHeight&&0<T.offsetWidth&&g()}})}}},_initSocialTitleInputs:function(){if(tsf.hasInput){let t=jQuery('#autodescription_og_title'),s=jQuery('#autodescription_twitter_title'),a=jQuery('#tsf-title-reference');if(t.length&&s.length&&a.length){let o=!1,n=!!navigator.userAgent.match(/Trident\/7\./),r=tsf.escapeString(t.val()),l=tsf.escapeString(s.val()),d=a.text();const c=x=>{let b='';switch(x){case'twitter':b=l;case'og':b=b.length?b:r;case'reference':b=b.length?b:d;}return b},g=()=>{n&&(o=!0),t.attr('placeholder',c('reference')),s.attr('placeholder',c('og')),n&&setTimeout(function(){o=!1},0)},f=(x,b,T)=>{x&&b&&T?tsf.updateSocialCounter(x,b,T):(t.each((C,S)=>f(S,c('og'),88)),s.each((C,S)=>f(S,c('twitter'),70)))};a.on('change',()=>{d=a.text(),g(),f()});t.on('input.tsfUpdateOgTitle',x=>{o||(r=x.target.value.length?tsf.escapeString(x.target.value):'',g(),f())}),s.on('input.tsfUpdateOgTitle',x=>{o||(l=x.target.value.length?tsf.escapeString(x.target.value):'',g(),f())})}}},_initSocialDescInputs:function(){if(tsf.hasInput){let t=jQuery('#autodescription_og_description'),s=jQuery('#autodescription_twitter_description'),a=jQuery('#tsf-description-reference');if(t.length&&s.length&&a.length){let o=!1,n=!!navigator.userAgent.match(/Trident\/7\./),r=tsf.escapeString(t.val()),l=tsf.escapeString(s.val()),d=a.text();const c=x=>{let b='';switch(x){case'twitter':b=l;case'og':b=b.length?b:r;case'reference':b=b.length?b:d;}return b},g=()=>{n&&(o=!0),t.attr('placeholder',c('reference')),s.attr('placeholder',c('og')),n&&setTimeout(function(){o=!1},0)},f=(x,b,T)=>{x&&b&&T?tsf.updateSocialCounter(x,b,T):(t.each((C,S)=>f(S,c('og'),300)),s.each((C,S)=>f(S,c('twitter'),200)))};a.on('change',()=>{d=a.text(),g(),f()});t.on('input.tsfUpdateOgDesc',x=>{o||(r=x.target.value.length?tsf.escapeString(x.target.value):'',g(),f())}),s.on('input.tsfUpdateOgDesc',x=>{o||(l=x.target.value.length?tsf.escapeString(x.target.value):'',g(),f())})}}},updateSocialCounter:function(t,s,a){let o=document.getElementById(t.id+'_chars');if(o){let n=tsf.getStringLength(tsf.unescapeString(s)),r='',l=tsf.counterType,d='',c='';n>a?(r+='tsf-count-bad',d=tsf.i18n.bad):(r+='tsf-count-good',d=tsf.i18n.good),l&&1!=l?2==l?c=d:3==l&&(c=n.toString()+' - '+d):c=n.toString(),o.innerHTML=c,tsf.additionsClass&&(r+=' '+tsf.additionsClass),o.className!==r&&(o.className=r)}},_initCounters:function(){if(tsf.hasInput){jQuery('.tsf-counter').on('click',function(){++tsf.counterType,3<tsf.counterType&&(tsf.counterType=0),s();let r='.tsf-counter-wrap .tsf-ajax',l=0;tsf.resetAjaxLoader(r),tsf.setAjaxLoader(r);let d={method:'POST',url:ajaxurl,datatype:'json',data:{action:'the_seo_framework_update_counter',nonce:tsf.nonces.edit_posts,val:tsf.counterType},async:!0,success:function(c){switch(c=jQuery.parseJSON(c),'success'===c.type&&(l=1),l){case 0:tsf.unsetAjaxLoader(r,!1);break;case 1:tsf.unsetAjaxLoader(r,!0);break;default:tsf.resetAjaxLoader(r);}}};jQuery.ajax(d)});const s=function(){let n=tsf.counterType;1==n?(tsf.additionsClass='tsf-counter-one',tsf.counterType=1):2==n?(tsf.additionsClass='tsf-counter-two',tsf.counterType=2):3==n?(tsf.additionsClass='tsf-counter-three',tsf.counterType=3):(tsf.additionsClass='tsf-counter-zero',tsf.counterType=0),tsf._triggerCounterUpdate()};s();jQuery('#autodescription-site-settings\\[display_character_counter\\]').on('click',function(n){jQuery(n.target).is(':checked')?jQuery('.tsf-counter-wrap').show():jQuery('.tsf-counter-wrap').hide()});jQuery('#autodescription-site-settings\\[display_pixel_counter\\]').on('click',function(n){jQuery(n.target).is(':checked')?(jQuery('.tsf-pixel-counter-wrap').show(),tsf._triggerCounterUpdate()):jQuery('.tsf-pixel-counter-wrap').hide()})}},_initPrimaryTerm:function(){if(tsf.hasInput&&Object.keys(tsf.states.taxonomies).length){let t=tsf.states.taxonomies,s=wp.template('tsf-primary-term-selector'),a=wp.template('tsf-primary-term-selector-help'),o=document.createElement('span');o.classList.add('tsf-primary-term-selector'),o.classList.add('tsf-set-primary-term'),function(){let q=document.createElement('input');q.setAttribute('type','radio'),o.appendChild(q)}();let n={},r={},l={},d={},c={};const g=function(q){let M=jQuery('#'+q+'div'),N=s({taxonomy:t[q]});M.append(N)},f=function(q){let M=jQuery('#taxonomy-'+q),N=a({taxonomy:t[q]});M.append(N),u(q)},u=function(q){let M=document.getElementById('taxonomy-'+q),N=M.querySelectorAll('.tabs-panel'),F=jQuery(M).closest('.postbox');if(!(F.length&&F.hasClass('closed'))){let X=Array.prototype.slice.call(N).filter(function(G){return 0<G.offsetWidth||0<G.offsetHeight||0<G.getClientRects().length})[0];if(X){let V=X.scrollHeight>X.clientHeight?X.offsetWidth-X.clientWidth+25-2:25;tsf.states.isRTL?M.querySelector('.tsf-primary-term-selector-help-wrap').style.left=V+'px':M.querySelector('.tsf-primary-term-selector-help-wrap').style.right=V+'px'}}},y=function(q){u(q.data.taxonomy)},x=function(q){let M=o.cloneNode(!0);return M.setAttribute('title',t[q].i18n.makePrimary),M.setAttribute('aria-label',t[q].i18n.makePrimary),M},b=function(q,M){let N=document.getElementById('autodescription[_primary_term_'+q+']');N&&N instanceof Element&&(N.value=M)},T=function(q,M){return!M&&d[q]?d[q]:(d[q]=jQuery('#'+q+'checklist, #'+q+'checklist-pop'),d[q])},C=function(q,M){return n[q].filter('[value="'+M+'"]')},S=function(q,M){let N=C(q,M).closest('label');N.length?(N.addClass('tsf-is-primary-term'),N.find('.tsf-set-primary-term').each(function(F,X){X.setAttribute('title',t[q].i18n.primary),X.setAttribute('aria-label',t[q].i18n.primary),X.querySelector('input').checked=!0}),b(q,M),c[q]=M):L(q)},I=function(q){let M=T(q).find('label');M.removeClass('tsf-is-primary-term'),M.find('.tsf-set-primary-term').each(function(N,F){F.setAttribute('title',t[q].i18n.makePrimary),F.setAttribute('aria-label',t[q].i18n.makePrimary),F.querySelector('input').checked=!1}),b(q,'')},L=function(q){let N,M=l[q].first();M.length&&(N=M.val()||'',S(q,N),c[q]=N)},E=function(q){let M=q.data.taxonomy,N=jQuery(q.target).closest('label').find('input[type=checkbox]').val();return I(M),S(M,N),!1},W=function(q){let M=q.data.taxonomy;switch(q.target.checked?(R(M,q.target),j(M,q.target)):(P(M,q.target),H(M,q.target)),l[M].length){case 0:b(M,'');break;case 1:L(M);}},j=function(q,M){let N;C(q,M.value).each(function(F,X){N=jQuery(X).closest('label'),N.find('.tsf-primary-term-selector').length||N.append(x(q))})},H=function(q,M){let N,F;C(q,M.value).each(function(X,V){N=jQuery(V).closest('label'),F=N.hasClass('tsf-is-primary-term'),N.removeClass('tsf-is-primary-term'),N.find('.tsf-primary-term-selector').remove(),F&&L(q)})},R=function(q,M){r[q]=r[q].add('[value="'+M.value+'"]'),l[q]=l[q].add(M)},P=function(q,M){r[q]=r[q].not('[value="'+M.value+'"]'),l[q]=l[q].not('[value="'+M.value+'"]')},D=function(q){u(q.data.taxonomy)},A=function(q){let M=T(q,1);n[q]=M.find('input[type=checkbox]'),r[q]=M.find('input[type=checkbox]:checked');let F,N={};l[q]=r[q],l[q].each(function(X,V){F=jQuery(V).val(),N[F]?l[q].splice(X,1):N[F]=!0})},B=function(q,M,N){N.hasOwnProperty('settings')&&N.settings.hasOwnProperty('what')&&(A(N.settings.what),O(N.settings.what),U(N.settings.what),u(N.settings.what))},O=function(q){let M='tsfShowPrimary'+q,N={taxonomy:q},F=T(q),X=jQuery('#'+q+'div'),V=jQuery('#'+q+'-tabs'),G=F.closest('.postbox');F.off('click.'+M),F.on('click.'+M,'input[type="checkbox"]',N,W),F.on('click.'+M,'.tsf-primary-term-selector',N,E),X.off('wpListAddEnd.'+M),X.on('wpListAddEnd.'+M,'#'+q+'checklist',B),V.off('click.'+M),V.on('click.'+M,'a',N,y),G.off('click.postboxes.'+M),G.on('click.postboxes.'+M,N,D)},U=function(q){T(q).find('input[type="checkbox"]:checked').each(function(M,N){j(q,N)}),t[q].primary?S(q,t[q].primary):L(q)};(function(){for(let q in t)T(q).length&&(g(q),f(q),A(q),O(q),U(q))})()}},_initToolTips:function(){let t=0,s=!1;const a=function(){s=!0,clearTimeout(t),t=setTimeout(function(){s=!1},250)},o=function(y,x){x=x||!1;let b='pointerdown.tsfTT touchstart.tsfTT click.tsfTT',T=jQuery(y);x?(T.off('mousemove mouseleave mouseout tsf-tooltip-update'),jQuery(document.body).off(b)):(T.on({mousemove:d,mouseleave:c,mouseout:c}),jQuery(document.body).off(b).on(b,g)),T.on('tsf-tooltip-update',r)},n=function(y){o(y,!0)},r=function(y){if(y.target.classList.contains('tsf-tooltip-item')){let x=y.target.querySelector('.tsf-tooltip-text');x instanceof Element&&(x.innerHTML=y.target.dataset.desc)}},l=function(y){let x=jQuery(y.target),b=y.target.dataset.desc;if(b&&0===x.find('div').length){y.target.title='';let T=jQuery('<div class="tsf-tooltip"><span class="tsf-tooltip-text-wrap"><span class="tsf-tooltip-text">'+b+'</span></span><div class="tsf-tooltip-arrow"></div></div>');x.append(T);let C=x.closest('.tsf-tooltip-boundary');C=C.length&&C||jQuery(document.body);let S=x.outerHeight()+9,I=T.offset().top-S,L=C.offset().top-(C.prop('scrolltop')||0);L>I?(T.addClass('tsf-tooltip-down'),T.css('top',S+'px')):T.css('bottom',S+'px');let E=x.closest('.tsf-tooltip-wrap'),W=T.find('.tsf-tooltip-text-wrap'),j=W.find('.tsf-tooltip-text'),H=E.width(),R=W.outerWidth(!0),P=j.outerWidth(!0),D=W.offset().left,A=D+P,B=C.offset().left-(C.prop('scrollLeft')||0),O=B+C.outerWidth(),U='left';if(D<B){let z=B-D+12,q=parseInt(W.css('flex-basis'),10);z<-q&&(z=-q),T.css(U,z+'px'),T.data('overflow',z),T.data('overflowDir',U)}else if(A>O){let z=O-A-H-12,q=parseInt(W.css('flex-basis'),10);z<-q&&(z=-q),T.css(U,z+'px'),T.data('overflow',z),T.data('overflowDir',U)}else if(42>H){let z=-15;T.css(U,z+'px'),T.data('overflow',z),T.data('overflowDir',U)}else if(H>R){let z=y.originalEvent&&y.originalEvent.pageX||y.pageX,q=E.offset().left,N=z-q-R/2,F=N+R;0>N?N=0:F>H&&(N=H-P),T.css(U,N+'px'),T.data('adjust',N),T.data('adjustDir',U)}}},d=function(y){let x=jQuery(y.target),b=x.find('.tsf-tooltip'),T=b.find('.tsf-tooltip-arrow'),C=b.data('overflow'),S=b.data('overflowDir');if(C=parseInt(C,10),C=isNaN(C)?0:-Math.round(C),C)T.css(S,C+'px');else{let I=y.originalEvent&&y.originalEvent.pageX||y.pageX,L=7,E=16,W=x.closest('.tsf-tooltip-wrap'),j=I-W.offset().left-E/2,R=b.find('.tsf-tooltip-text-wrap'),P=R.outerWidth(!0),D=b.data('adjust'),A=b.data('adjustDir'),B=P-E-L;if(D=parseInt(D,10),D=isNaN(D)?0:Math.round(D),D&&(D='left'===A?-D:D,j+=D,B-D>W.outerWidth(!0))){let O=R.find('.tsf-tooltip-text'),U=O.outerWidth(!0);B=U-E-L}j<=L?T.css('left',L+'px'):j>=B?T.css('left',B+'px'):T.css('left',j+'px')}},c=function(y){s||(jQuery(y.target).find('.tsf-tooltip').remove(),n(y.target))},g=function(y){a();let C,b='.tsf-tooltip',T=jQuery(y.target);if(T.hasClass('tsf-tooltip-item')&&(C=T.find(b)),!C){let S=T.children('.tsf-tooltip-item');S.length&&(C=S.find(b))}C&&C.length?jQuery(b).not(C).remove():jQuery(b).remove()},f=function(y){if(!s){let x=!1;switch(y.type){case'mouseenter':break;case'pointerdown':case'touchstart':x=!0;break;default:}if(y.target.classList.contains('tsf-tooltip-item'))x&&g(y),l(y),d(y),o(y.target);else{let b=y.target.querySelector('.tsf-tooltip-item:hover'),T=new jQuery.Event(y.type);T.pageX=y.originalEvent&&y.originalEvent.pageX||y.pageX,b?(tsfL10n.states.debug&&console.log('Tooltip event warning: delegation'),jQuery(b).trigger(T)):(tsfL10n.states.debug&&console.log('Tooltip event warning: bubbling'),jQuery(y.target).closest('.tsf-tooltip-wrap').find('.tsf-tooltip-item:hover').trigger(T))}y.stopPropagation()}},u=function(){let y=jQuery('.tsf-tooltip-wrap');y.off('mouseenter pointerdown touchstart'),y.on('mouseenter pointerdown touchstart','.tsf-tooltip-item',f)};u(),jQuery(window).on('tsf-reset-tooltips',u),function(){let y=jQuery('#wpcontent');tsf.addTooltipBoundary(y)}()},addTooltipBoundary:function(t){jQuery(t).addClass('tsf-tooltip-boundary')},tabToggle:function(t){let s=jQuery(t.target);if(s.is(':checked')){let a=s.prop('id'),o=s.prop('name');if('undefined'!=typeof o){let n='tsf-active-tab-content',r=jQuery('#'+a+'-content'),l=jQuery('.'+n);if(!r.is(l)&&'undefined'!=typeof r){let d=jQuery('.'+o+'-content');d.fadeOut(150,function(){jQuery(this).removeClass(n)}),setTimeout(function(){r.addClass(n).fadeIn(250)},150),setTimeout(function(){jQuery('#'+a).trigger('tsf-tab-toggled')},175)}}}},flexTabToggle:function(t){let s=jQuery(t.target);if(s.is(':checked')){let a=s.prop('id'),o=s.prop('name');if('undefined'!=typeof o){let n='tsf-flex-tab-content-active',r=jQuery('#'+a+'-content'),l=jQuery('.'+n);if(!r.is(l)&&'undefined'!=typeof r){let d=jQuery('.'+o+'-content');d.fadeOut(150,function(){jQuery(this).removeClass(n)}),setTimeout(function(){r.addClass(n).fadeIn(250)},150),setTimeout(function(){jQuery('#'+a).trigger('tsf-flex-tab-toggled')},175)}}}},setTabsOnload:function(){if(tsf.hasInput)if(tsf.states.isPostEdit&&jQuery('.tsf-flex-nav-tab-radio').trigger('change'),tsf.states.isSettingsPage){let t=jQuery('.tsf-nav-tab-wrapper .tsf-tab:nth-of-type(n+2) input:checked');t.length&&t.each(function(){let a=jQuery(this),o=a.prop('id'),n=a.prop('name');if('undefined'!=typeof n){let r='tsf-active-tab-content',l=jQuery('#'+o+'-content');if('undefined'!=typeof l){let d=jQuery('.'+n+'-content');d.removeClass(r),l.addClass(r),setTimeout(function(){jQuery('#'+o).trigger('tsf-tab-toggled')},20)}}})}else;},taglineToggleDesc:function(t){let s=jQuery(t.target),a=jQuery('#tsf-on-blogname-js');s.is(':checked')?a.css('display','inline'):a.css('display','none')},additionsToggleDesc:function(t){let s=jQuery(t.target),a=jQuery('#tsf-description-additions-js');s.is(':checked')?a.css('display','inline'):a.css('display','none')},taglineToggleOnload:function(){if(tsf.hasInput){let t=jQuery('#tsf-title-tagline-toggle :input'),s=jQuery('.tsf-custom-blogname-js'),a=jQuery('#tsf-description-additions-toggle :input'),o=jQuery('#tsf-description-additions-js'),n=jQuery('#tsf-description-onblogname-toggle :input'),r=jQuery('#tsf-on-blogname-js'),l=jQuery('#tsf-title-additions-toggle :input'),d=jQuery('.tsf-title-additions-js');t.is(':checked')?s.css('display','inline'):s.css('display','none'),a.is(':checked')?o.css('display','inline'):o.css('display','none'),n.is(':checked')?r.css('display','inline'):r.css('display','none'),l.is(':checked')?d.css('display','none'):d.css('display','inline')}},attachUnsavedChangesListener:function(){if(tsf.hasInput){let t=function(o){tsf.settingsChanged||tsf.registerChange(),jQuery(s).not(a).off(o.type,t)},s='.tsf-metaboxes :input, #tsf-inpost-box .inside :input',a='.tsf-tab :input, .tsf-flex-nav-tab :input';jQuery(s).not(a).on('change',t),s='.tsf-metaboxes input[type=text], .tsf-metaboxes textarea, #tsf-inpost-box .inside input[type=text], #tsf-inpost-box .inside textarea',a='.tsf-nav-tab-wrapper input, .tsf-flex-nav-tab-wrapper input',jQuery(s).not(a).on('input',t),window.onbeforeunload=function(){if(tsf.settingsChanged)return tsf.i18n.saveAlert},jQuery('.tsf-metaboxes input[type="submit"], #publishing-action input[type="submit"], #save-action input[type="submit"], a.submitdelete').click(function(){window.onbeforeunload=null})}},registerChange:function(){tsf.settingsChanged=!0},confirmedReset:function(){return confirm(tsf.i18n.confirmReset)},onLoadUnregisterChange:function(){tsf.settingsChanged=!1},dismissNotice:function(t){jQuery(t.target).parents('.tsf-notice').slideUp(200,function(){this.remove()})},setAjaxLoader:function(t){jQuery(t).toggleClass('tsf-loading')},unsetAjaxLoader:function(t,s){let a='tsf-success',o=2500;s||(a='tsf-error',o=5e3),jQuery(t).removeClass('tsf-loading').addClass(a).fadeOut(o)},resetAjaxLoader:function(t){jQuery(t).stop().empty().prop('class','tsf-ajax').css('opacity','1').removeProp('style')},openImageEditor:function(t){if(jQuery(t.target).prop('disabled')||'undefined'==typeof wp.media)return t.preventDefault(),void t.stopPropagation();let o,s=jQuery(t.target),a=s.data('inputid');if(o)return void o.open();t.preventDefault(),t.stopPropagation(),tsf.extendCropper();let n={suggestedWidth:s.data('width')||1200,suggestedHeight:s.data('height')||630,isFlex:'undefined'==typeof s.data('flex')?1:s.data('flex')};tsf.cropper.control={params:{flex_width:n.isFlex?4096:0,flex_height:n.isFlex?4096:0,width:n.suggestedWidth,height:n.suggestedHeight,isFlex:n.isFlex}},o=wp.media({button:{text:tsf.other[a].frame_button,close:!1},states:[new wp.media.controller.Library({title:tsf.other[a].frame_title,library:wp.media.query({type:'image'}),multiple:!1,date:!1,priority:20,suggestedWidth:n.suggestedWidth,suggestedHeight:n.suggestedHeight}),new tsf.cropper({imgSelectOptions:tsf.calculateImageSelectOptions})]});const r=function(){o.setState('cropper')};o.off('select',r),o.on('select',r);const l=function(g){let f=g.url,u=g.id,y=g.width,x=g.height;jQuery('#'+a+'-url').val(f),jQuery('#'+a+'-id').val(u)};o.off('cropped',l),o.on('cropped',l);const d=function(g){let f=g.get('url'),u=g.get('id'),y=g.get('width'),x=g.get('height');jQuery('#'+a+'-url').val(f),jQuery('#'+a+'-id').val(u)};o.off('skippedcrop',d),o.on('skippedcrop',d);const c=function(){jQuery('#'+a+'-select').text(tsf.other[a].change),jQuery('#'+a+'-url').prop('readonly',!0).css('opacity',0).animate({opacity:1},{queue:!0,duration:1000},'swing'),tsf.appendRemoveButton(s,a,!0),tsf.registerChange()};o.off('skippedcrop cropped',c),o.on('skippedcrop cropped',c),o.open()},appendRemoveButton:function(t,s,a){t&&s&&!jQuery('#'+s+'-remove').length&&(t.after('<a href="javascript:void(0)" id="'+s+'-remove" class="tsf-remove-social-image button button-small" data-inputid="'+s+'" title="'+tsf.other[s].remove_title+'">'+tsf.other[s].remove+'</a>'),a&&jQuery('#'+s+'-remove').css('opacity',0).animate({opacity:1},{queue:!0,duration:1000},'swing')),tsf.resetImageEditorActions()},removeEditorImage:function(t){let s=jQuery(t.target).data('inputid');if(!jQuery('#'+s+'-select').prop('disabled')){jQuery('#'+s+'-select').addClass('disabled').prop('disabled',!0),jQuery('#'+s+'-remove').addClass('disabled').prop('disabled',!0).fadeOut(500,function(){jQuery(this).remove(),jQuery('#'+s+'-select').text(tsf.other[s].select).removeClass('disabled').removeProp('disabled')});let a=jQuery('#'+s+'-url');a.val(''),a.data('readonly')||a.removeProp('readonly'),a.css('opacity',0).animate({opacity:1},{queue:!0,duration:500},'swing'),jQuery('#'+s+'-id').val(''),tsf.registerChange()}},extendCropper:function(){if('undefined'==typeof tsf.cropper.control){let t,a,s=wp.media.controller,o=wp.media.view;return a=o.Cropper.extend({className:'crop-content tsf-image',ready:function(){o.Cropper.prototype.ready.apply(this,arguments)},onImageLoad:function(){let r,n=this.controller.get('imgSelectOptions');'function'==typeof n&&(n=n(this.options.attachment,this.controller)),'undefined'==typeof n.aspectRatio&&(n=_.extend(n,{parent:this.$el,onInit:function(){this.parent.children().on('mousedown touchstart',function(l){l.shiftKey?r.setOptions({aspectRatio:'1:1'}):r.setOptions({aspectRatio:!1})})}})),this.trigger('image-loaded'),r=this.controller.imgSelect=this.$image.imgAreaSelect(n)}}),t=s.Cropper.extend({createCropContent:function(){this.cropperView=new a({controller:this,attachment:this.get('selection').first()}),this.cropperView.on('image-loaded',this.createCropToolbar,this),this.frame.content.set(this.cropperView)},doCrop:function(n){let r=n.get('cropDetails'),l=tsf.cropper.control;if(l.params.flex_width&&l.params.flex_height)if(r.width===r.height)r.width>l.params.flex_width&&(r.dst_width=r.dst_height=l.params.flex_width);else if(r.width>l.params.flex_width||r.height>l.params.flex_height)if(r.width>r.height){let d=r.width/l.params.flex_width;r.dst_width=l.params.flex_width,r.dst_height=Math.round(r.height/d)}else{let d=r.height/l.params.flex_height;r.dst_height=l.params.flex_height,r.dst_width=Math.round(r.width/d)}return'undefined'==typeof r.dst_width&&(r.dst_width=0,r.dst_height=0),wp.ajax.post('tsf-crop-image',{nonce:tsf.nonces.upload_files,id:n.get('id'),context:'tsf-image',cropDetails:r})}}),t.prototype.control={},void(tsf.cropper=t)}},calculateImageSelectOptions:function(t,s){let y,x,b,T,a=tsf.cropper.control,o=!!parseInt(a.params.flex_width,10),n=!!parseInt(a.params.flex_height,10),r=parseInt(a.params.width,10),l=parseInt(a.params.height,10),d=t.get('width'),c=t.get('height'),g=r/l,f=r,u=l;return T=a.params.isFlex?!tsf.mustBeCropped(a.params.flex_width,a.params.flex_height,d,c):g==d/c,s.set('control',a.params),s.set('canSkipCrop',T),d/c>g?(l=c,r=l*g):(r=d,l=r/g),y=(d-r)/2,x=(c-l)/2,b={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:d,imageHeight:c,minWidth:f>r?r:f,minHeight:u>l?l:u,x1:y,y1:x,x2:r+y,y2:l+x},a.params.isFlex?n||o?(n&&(b.minHeight=200,b.maxWidth=d),o&&(b.minWidth=200,b.maxHeight=c)):b.aspectRatio=r+':'+l:(b.handles='corners',b.aspectRatio=r+':'+l),b},mustBeCropped:function(t,s,a,o){return a<=t&&o<=s?!1:!0},resetImageEditorActions:function(){jQuery('.tsf-remove-social-image').off('click',tsf.removeEditorImage),jQuery('.tsf-remove-social-image').on('click',tsf.removeEditorImage)},setupImageEditorActions:function(){jQuery('.tsf-set-social-image').off('click',tsf.openImageEditor),jQuery('.tsf-remove-social-image').off('click',tsf.removeEditorImage),jQuery('.tsf-set-social-image').on('click',tsf.openImageEditor),jQuery('.tsf-remove-social-image').on('click',tsf.removeEditorImage)},checkImageEditorInput:function(){let t=jQuery('.tsf-set-social-image');if(t.length){let s='',a='';jQuery.each(t,function(o,n){s=jQuery(n).data('inputid'),a=jQuery('#'+s+'-id'),a.length&&0<a.val()&&(jQuery('#'+s+'-url').prop('readonly',!0),tsf.appendRemoveButton(jQuery(n),s,!1)),jQuery('#'+s+'-url').val()&&jQuery('#'+s+'-select').text(tsf.other[s].change)})}},setColorOnload:function(){let t=jQuery('.tsf-color-picker');t.length&&jQuery.each(t,function(s,a){let o=jQuery(a),n='',r=o.data('tsf-default-color');o.wpColorPicker({defaultColor:r,width:238,change:function(){n=o.wpColorPicker('color'),''==n&&(n=r),o.val(n),tsf.registerChange()},clear:function(){o.parent().siblings('.wp-color-result').css('backgroundColor',r),tsf.registerChange()},palettes:!1})})},_doFlexResizeListener:function(){if(jQuery('.tsf-flex').length){tsf._setResizeListeners();let t=0,s={},a=0,o=jQuery('.tsf-flex-nav-tab-wrapper'),n=jQuery(window);n.on('tsf-flex-resize',function(){clearTimeout(t);let r=0;t=setTimeout(function(){if(o.length){let l=jQuery('.tsf-flex-nav-tab-inner'),d=o.width(),c=l.width(),g=jQuery('.tsf-flex-nav-name');s.tabWrapper||(s.tabWrapper={},s.tabWrapper.outer=0,s.tabWrapper.inner=0,s.tabWrapper.shown=1),!s.tabWrapper.shown&&s.tabWrapper.outer<d&&(g.fadeIn(250),setTimeout(function(){c=l.width()},r)),setTimeout(function(){c>d?(g.hide(),s.tabWrapper.shown=0):s.tabWrapper.outer<d&&(g.fadeIn(250),s.tabWrapper.shown=1)},2*r),setTimeout(function(){s.tabWrapper.outer=d,s.tabWrapper.inner=c},3*r)}},a),r=10,a=75}),n.trigger('tsf-flex-resize')}},_setResizeListeners:function(){jQuery(window).on('resize orientationchange',tsf._triggerResize),jQuery('#collapse-menu').click(tsf._triggerResize),jQuery('.columns-prefs :input[type=radio]').change(tsf._triggerResize),jQuery('.meta-box-sortables').on('sortupdate',tsf._triggerResize)},_triggerTooltipReset:function(){jQuery(window).trigger('tsf-reset-tooltips')},_triggerTooltipUpdate:function(t){jQuery(t).trigger('tsf-tooltip-update')},_triggerResize:function(){jQuery(window).trigger('tsf-flex-resize')},_triggerCounterUpdate:function(){jQuery(window).trigger('tsf-counter-updated')},_triggerReady:function(){jQuery(document.body).trigger('tsf-ready')},_doReady:function(){tsf._initCounters(),tsf._initTitleInputs(),tsf._initUnboundTitleSettings(),tsf._initSocialTitleInputs(),tsf._initDescInputs(),tsf._initSocialDescInputs(),tsf._initPrimaryTerm(),tsf.setTabsOnload(),tsf.taglineToggleOnload(),tsf._initToolTips(),tsf.setupImageEditorActions(),tsf.checkImageEditorInput(),tsf.setColorOnload(),tsf.attachUnsavedChangesListener(),tsf.onLoadUnregisterChange(),tsf._doFlexResizeListener(),tsf._triggerReady()},setupVars:function(){tsf.counterType=parseInt(tsf.states.counterType),tsf.hasInput=tsf.states.hasInput},ready:function(t){tsf.setupVars(),t('div.updated, div.error, div.notice-warning').insertAfter('div.tsf-top-wrap'),t(document.body).ready(tsf._doReady),t('.tsf-js-confirm-reset').on('click',tsf.confirmedReset),t('.tsf-tabs-radio').on('change',tsf.tabToggle),t('.tsf-flex-nav-tab-radio').on('change',tsf.flexTabToggle),t('#tsf-description-onblogname-toggle :input').on('click',tsf.taglineToggleDesc),t('#tsf-description-additions-toggle :input').on('click',tsf.additionsToggleDesc),t('.tsf-dismiss').on('click',tsf.dismissNotice)}},jQuery(tsf.ready);
|
load.php
CHANGED
@@ -8,7 +8,7 @@ defined( 'THE_SEO_FRAMEWORK_DIR_PATH' ) or die;
|
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
-
* Copyright (C) 2015 -
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
8 |
|
9 |
/**
|
10 |
* The SEO Framework plugin
|
11 |
+
* Copyright (C) 2015 - 2018 Sybre Waaijer, CyberWire (https://cyberwire.nl/)
|
12 |
*
|
13 |
* This program is free software: you can redistribute it and/or modify
|
14 |
* it under the terms of the GNU General Public License version 3 as published
|
readme.txt
CHANGED
@@ -3,9 +3,9 @@ Contributors: Cybr
|
|
3 |
Donate link: https://theseoframework.com/donate/
|
4 |
Tags: SEO, XML Sitemap, Google, Open Graph, Schema.org, Twitter
|
5 |
Requires at least: 4.4.0
|
6 |
-
Tested up to: 4.9.
|
7 |
Requires PHP: 5.3.0
|
8 |
-
Stable tag: 3.0.
|
9 |
License: GPLv3
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
11 |
|
@@ -53,7 +53,7 @@ Nobody has to know about the tools you've used to create your or someone else's
|
|
53 |
|
54 |
* Titles according to your settings with archive prefixes.
|
55 |
* Descriptions with anti-spam techniques and detection that informs you when it can be improved.
|
56 |
-
* A canonical URL to prevent duplicated content; with full
|
57 |
* Various Open Graph, Facebook and Twitter tags.
|
58 |
* Special Open Graph descriptions, which organically integrates within the Facebook and Twitter snippets.
|
59 |
* Open Graph images, they are automatically resized and optimized when needed.
|
@@ -61,10 +61,10 @@ Nobody has to know about the tools you've used to create your or someone else's
|
|
61 |
* Structured Data for Google's Knowledge Graph; like Personal/Business site relations, names, and logos.
|
62 |
* Structured Data for Breadcrumbs that extend pages and categories relationship support in Google Search.
|
63 |
* Structured Data for Google Search that lets it know your preferred site name.
|
64 |
-
* Publishing and editing dates for
|
65 |
* Paginated content relationship links, to help visitors going to the right page.
|
66 |
-
* A sitemap with all your pages, posts and CPT, which listens to their
|
67 |
-
* Feed excerpts and backlinks within, to
|
68 |
|
69 |
**This plugin goes further, behind the screens it:**
|
70 |
|
@@ -79,11 +79,11 @@ Nobody has to know about the tools you've used to create your or someone else's
|
|
79 |
|
80 |
* Automated title output options; they encourage you to follow the guidelines.
|
81 |
* Automated description output options.
|
82 |
-
* Schema.org
|
83 |
* Various robots meta output options.
|
84 |
* Many home page specific options.
|
85 |
* Facebook, Twitter, and Pinterest social integration options.
|
86 |
-
* Google, Bing, Pinterest and Yandex
|
87 |
* Sitemap integration with personalization.
|
88 |
* Robots.txt sitemap integration.
|
89 |
* Feed anti-scraper options.
|
@@ -100,7 +100,7 @@ Take a look at the API documentation located at [The SEO Framework API Docs](htt
|
|
100 |
* If the description is too long, too short, duplicated, has too many repeated words and/or automatically generated.
|
101 |
* If the page is indexed, redirected, followed and/or archived, while looking at other WordPress settings.
|
102 |
|
103 |
-
**We call this
|
104 |
|
105 |
= Hardcore caching =
|
106 |
This plugin's code is highly optimized on PHP-level and uses variable, object and transient caching. This means that there's little extra page load time from this plugin, even with more meta tags used.
|
@@ -117,7 +117,7 @@ A caching plugin isn't even needed for this plugin as you won't notice a differe
|
|
117 |
* Right to Left (RTL) languages, through its interface and generation.
|
118 |
* Extended color vision deficiency accessibility.
|
119 |
* Screen reader accessibility.
|
120 |
-
*
|
121 |
* Detection of robots.txt and sitemap.xml files.
|
122 |
* Both up-to-date and outdated themes.
|
123 |
* Detection of various other popular SEO tools to prevent duplicated output.
|
@@ -125,7 +125,7 @@ A caching plugin isn't even needed for this plugin as you won't notice a differe
|
|
125 |
* WooCommerce, for free, in all its glory.
|
126 |
|
127 |
= An additional sitemap =
|
128 |
-
The sitemap generated with The SEO Framework is sufficient for
|
129 |
|
130 |
However, if you require a more expanded sitemap, feel free to activate a dedicated Sitemap plugin. The SEO Framework will automatically deactivate its Sitemap functionality when another (known) sitemap plugin is found. If it is not automatically detected and no notification has been provided in the Sitemap Settings, feel free to open a support ticket and it will be addressed carefully.
|
131 |
|
@@ -152,6 +152,7 @@ The Breadcrumb script generated by this plugin on Posts will also make sure Goog
|
|
152 |
* Do fill in the Home Page "General" settings.
|
153 |
* Do fill in the Social Meta "General", "Facebook" and "Twitter" settings.
|
154 |
* Notice that red checkboxes are recommended to be left unchecked. And green checkboxes are recommended to be checked.
|
|
|
155 |
|
156 |
= This plugin auto-configures SEO meta settings, and: =
|
157 |
|
@@ -164,7 +165,7 @@ The Breadcrumb script generated by this plugin on Posts will also make sure Goog
|
|
164 |
== Screenshots ==
|
165 |
|
166 |
1. This plugin shows you what you can improve, at a glance. With complete color vision deficiency support.
|
167 |
-
2. Hover over any of the SEO Bar's items to see how you can improve the page's SEO. Red is bad, orange is okay, green is good. Blue is
|
168 |
3. The dynamic Post/Page SEO settings meta box. Another version of this box is also implemented for Categories and Tags.
|
169 |
4. The dynamic Post/Page SEO settings meta box also fits neatly in the sidebar. For when you want to work faster.
|
170 |
5. The SEO Settings Page. With over 100 settings, you are in full control.
|
@@ -174,28 +175,20 @@ The Breadcrumb script generated by this plugin on Posts will also make sure Goog
|
|
174 |
= Is The SEO Framework Free? =
|
175 |
|
176 |
Absolutely! It will stay free as well, without ads or nags!
|
|
|
177 |
|
178 |
-
= Is there
|
179 |
-
|
180 |
-
Nope! This plugin is all-inclusive.
|
181 |
-
|
182 |
-
= Free & Premium Extensions =
|
183 |
|
184 |
For more advanced SEO options and output, we offer the free plugin [Extension Manager](https://wordpress.org/plugins/the-seo-framework-extension-manager/).
|
185 |
|
186 |
= I have a feature request, I've found a bug, a plugin is incompatible... =
|
187 |
|
188 |
-
Please visit [the support forums](https://wordpress.org/support/plugin/autodescription) and kindly tell
|
189 |
-
|
190 |
-
= Is this really a Framework? =
|
191 |
-
|
192 |
-
The SEO Framework is its own self-serving technical framework. It keeps track of everything WordPress and SEO while it allows other plugins to interact with it easily.
|
193 |
-
Through its framework it allows you to SEO your complete website. It also allows for extensions and real-time alterations; for when you really want or need to change something.
|
194 |
-
Extensions built for this plugin might just as well work as a standalone; however, The SEO Framework provides an easier and faster way of doing so.
|
195 |
|
196 |
= I am a developer; how can I help? =
|
197 |
|
198 |
-
|
199 |
Please visit the [GitHub project page](https://github.com/sybrew/the-seo-framework) to submit issues or even pull requests.
|
200 |
|
201 |
= I want to modify how this plugin works =
|
@@ -204,26 +197,80 @@ The SEO Framework is very pluggable in many fields. Please refer to the [API doc
|
|
204 |
|
205 |
= The sitemap doesn't contain categories, images, news, etc. is this OK? =
|
206 |
|
207 |
-
This is not an issue. Search
|
208 |
-
If a visitor can't find a page, then why would a
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
|
210 |
= What's do the application/ld+json scripts do? =
|
211 |
|
212 |
-
The JSON-LD scripts are
|
213 |
-
They can tell the
|
214 |
-
This is also referred to as Structured Data.
|
215 |
|
216 |
= The metadata is not being updated, and I'm using a caching plugin. =
|
217 |
|
218 |
-
All The SEO Framework's metadata is put into Object cache when a caching plugin is available.
|
|
|
|
|
219 |
|
220 |
= I want to transport SEO data from other plugins to The SEO Framework, how do I do this? =
|
221 |
|
222 |
Please refer to this small guide: [SEO Data Migration](http://theseoframework.com/docs/seo-data-migration/).
|
223 |
-
Transporting
|
224 |
|
225 |
== Changelog ==
|
226 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
= 3.0.3 - Diligence =
|
228 |
|
229 |
**Release date:**
|
3 |
Donate link: https://theseoframework.com/donate/
|
4 |
Tags: SEO, XML Sitemap, Google, Open Graph, Schema.org, Twitter
|
5 |
Requires at least: 4.4.0
|
6 |
+
Tested up to: 4.9.4
|
7 |
Requires PHP: 5.3.0
|
8 |
+
Stable tag: 3.0.4
|
9 |
License: GPLv3
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
11 |
|
53 |
|
54 |
* Titles according to your settings with archive prefixes.
|
55 |
* Descriptions with anti-spam techniques and detection that informs you when it can be improved.
|
56 |
+
* A canonical URL to prevent duplicated content; with full "domain mapping", subdomain, and HTTPS support.
|
57 |
* Various Open Graph, Facebook and Twitter tags.
|
58 |
* Special Open Graph descriptions, which organically integrates within the Facebook and Twitter snippets.
|
59 |
* Open Graph images, they are automatically resized and optimized when needed.
|
61 |
* Structured Data for Google's Knowledge Graph; like Personal/Business site relations, names, and logos.
|
62 |
* Structured Data for Breadcrumbs that extend pages and categories relationship support in Google Search.
|
63 |
* Structured Data for Google Search that lets it know your preferred site name.
|
64 |
+
* Publishing and editing dates for social sites and search engines alike.
|
65 |
* Paginated content relationship links, to help visitors going to the right page.
|
66 |
+
* A sitemap with all your pages, posts and CPT, which listens to their page settings.
|
67 |
+
* Feed excerpts and backlinks within, to reduce automated content theft.
|
68 |
|
69 |
**This plugin goes further, behind the screens it:**
|
70 |
|
79 |
|
80 |
* Automated title output options; they encourage you to follow the guidelines.
|
81 |
* Automated description output options.
|
82 |
+
* Schema.org structured data output options.
|
83 |
* Various robots meta output options.
|
84 |
* Many home page specific options.
|
85 |
* Facebook, Twitter, and Pinterest social integration options.
|
86 |
+
* Google, Bing, Pinterest and Yandex webmaster verification codes.
|
87 |
* Sitemap integration with personalization.
|
88 |
* Robots.txt sitemap integration.
|
89 |
* Feed anti-scraper options.
|
100 |
* If the description is too long, too short, duplicated, has too many repeated words and/or automatically generated.
|
101 |
* If the page is indexed, redirected, followed and/or archived, while looking at other WordPress settings.
|
102 |
|
103 |
+
**We call this the SEO Bar. Check out the [Screenshots](https://wordpress.org/plugins/autodescription/#screenshots) to see how it helps you!**
|
104 |
|
105 |
= Hardcore caching =
|
106 |
This plugin's code is highly optimized on PHP-level and uses variable, object and transient caching. This means that there's little extra page load time from this plugin, even with more meta tags used.
|
117 |
* Right to Left (RTL) languages, through its interface and generation.
|
118 |
* Extended color vision deficiency accessibility.
|
119 |
* Screen reader accessibility.
|
120 |
+
* Multisite, this plugin is in fact built upon one.
|
121 |
* Detection of robots.txt and sitemap.xml files.
|
122 |
* Both up-to-date and outdated themes.
|
123 |
* Detection of various other popular SEO tools to prevent duplicated output.
|
125 |
* WooCommerce, for free, in all its glory.
|
126 |
|
127 |
= An additional sitemap =
|
128 |
+
The sitemap generated with The SEO Framework is sufficient for search engines to find posts, pages and supported custom post types throughout your website. It also listens to the "noindex" settings on each of the items and works great with various translation plugins.
|
129 |
|
130 |
However, if you require a more expanded sitemap, feel free to activate a dedicated Sitemap plugin. The SEO Framework will automatically deactivate its Sitemap functionality when another (known) sitemap plugin is found. If it is not automatically detected and no notification has been provided in the Sitemap Settings, feel free to open a support ticket and it will be addressed carefully.
|
131 |
|
152 |
* Do fill in the Home Page "General" settings.
|
153 |
* Do fill in the Social Meta "General", "Facebook" and "Twitter" settings.
|
154 |
* Notice that red checkboxes are recommended to be left unchecked. And green checkboxes are recommended to be checked.
|
155 |
+
* These color-coded boxes are shown in non-Gecko browsers, i.e. everything but Firefox.
|
156 |
|
157 |
= This plugin auto-configures SEO meta settings, and: =
|
158 |
|
165 |
== Screenshots ==
|
166 |
|
167 |
1. This plugin shows you what you can improve, at a glance. With complete color vision deficiency support.
|
168 |
+
2. Hover over any of the SEO Bar's items to see how you can improve the page's SEO. Red is bad, orange is okay, green is good. Blue is informational.
|
169 |
3. The dynamic Post/Page SEO settings meta box. Another version of this box is also implemented for Categories and Tags.
|
170 |
4. The dynamic Post/Page SEO settings meta box also fits neatly in the sidebar. For when you want to work faster.
|
171 |
5. The SEO Settings Page. With over 100 settings, you are in full control.
|
175 |
= Is The SEO Framework Free? =
|
176 |
|
177 |
Absolutely! It will stay free as well, without ads or nags!
|
178 |
+
This plugin is all-inclusive without upsells.
|
179 |
|
180 |
+
= Is there more? =
|
|
|
|
|
|
|
|
|
181 |
|
182 |
For more advanced SEO options and output, we offer the free plugin [Extension Manager](https://wordpress.org/plugins/the-seo-framework-extension-manager/).
|
183 |
|
184 |
= I have a feature request, I've found a bug, a plugin is incompatible... =
|
185 |
|
186 |
+
Please visit [the support forums](https://wordpress.org/support/plugin/autodescription) and kindly tell us about it.
|
187 |
+
We'll try to get back to you within 72 hours. :)
|
|
|
|
|
|
|
|
|
|
|
188 |
|
189 |
= I am a developer; how can I help? =
|
190 |
|
191 |
+
Any input is greatly appreciated, and everything will be considered.
|
192 |
Please visit the [GitHub project page](https://github.com/sybrew/the-seo-framework) to submit issues or even pull requests.
|
193 |
|
194 |
= I want to modify how this plugin works =
|
197 |
|
198 |
= The sitemap doesn't contain categories, images, news, etc. is this OK? =
|
199 |
|
200 |
+
This is not an issue. Search engines love crawling WordPress because its structure is consistent and well known.
|
201 |
+
If a visitor can't find a page, then why would a search engine? Don't rely on your sitemap, but on your content and website's usability.
|
202 |
+
|
203 |
+
Check out our [Extension Manager](https://wordpress.org/plugins/the-seo-framework-extension-manager/).
|
204 |
+
It contains extensions, like Articles, that fill in the gaps with newer techniques.
|
205 |
+
|
206 |
+
= The sitemap contains unwanted links =
|
207 |
+
|
208 |
+
The SEO Framework takes all publicly queryable posts, pages, and CPT and puts them in the sitemap.
|
209 |
+
|
210 |
+
If you don't want a page in the sitemap, consider enabling the `noindex` option. This will also remove the page from search engine result pages.
|
211 |
+
|
212 |
+
If the link shouldn't be in the sitemap because it's meant for structural reasons, then inform the plugin or theme author that created them.
|
213 |
+
You should tell the author to check out the "`public` and `rewrite` post type arguments". The plugin or theme author should know that that means.
|
214 |
|
215 |
= What's do the application/ld+json scripts do? =
|
216 |
|
217 |
+
The JSON-LD scripts are search engine helpers which tell search engines how to connect and index the site.
|
218 |
+
They can tell the search engine if your site contains an internal search engine, what sites you're socially connected to and what page structure you're using.
|
219 |
+
This is also referred to as "Structured Data".
|
220 |
|
221 |
= The metadata is not being updated, and I'm using a caching plugin. =
|
222 |
|
223 |
+
All The SEO Framework's metadata is put into Object cache when a caching plugin is available.
|
224 |
+
The descriptions and Schema.org scripts are put into Transients.
|
225 |
+
Please be sure to clear your cache or adjust the plugin's caching settings if deemed necessary.
|
226 |
|
227 |
= I want to transport SEO data from other plugins to The SEO Framework, how do I do this? =
|
228 |
|
229 |
Please refer to this small guide: [SEO Data Migration](http://theseoframework.com/docs/seo-data-migration/).
|
230 |
+
Transporting Categories, Tags and other terms' SEO data isn't supported.
|
231 |
|
232 |
== Changelog ==
|
233 |
|
234 |
+
= 3.0.4 - Illustrious =
|
235 |
+
|
236 |
+
**Release date:**
|
237 |
+
|
238 |
+
* February 25th, 2017
|
239 |
+
|
240 |
+
**Did you know?**
|
241 |
+
|
242 |
+
* We're working on an extension for keyword and subject analysis, named [Focus](https://github.com/sybrew/The-SEO-Framework-Extension-Manager/tree/master/extensions/free/focus/trunk).
|
243 |
+
* In its current state, it's already on par with other solutions, but we are going to take it even further.
|
244 |
+
* More details will follow in a blog post, which we'll link to on our [Twitter page](https://twitter.com/TheSEOFramework) when the features are ready.
|
245 |
+
|
246 |
+
**Summarized:**
|
247 |
+
|
248 |
+
* This is a maintenance release with over 10 bugs fixed. Most notoriously were pixel guideline calculation errors and home page title errors.
|
249 |
+
* Open Graph and Twitter custom title and description options have been added to every post, page, and CPT.
|
250 |
+
* The description character count and pixel length guidelines have been updated.
|
251 |
+
* All publicly queryable CPT posts and pages now support SEO settings and are included in the sitemap. No more messing with filters is needed.
|
252 |
+
|
253 |
+
**About the new description guidelines:**
|
254 |
+
|
255 |
+
* Google increased their SERP's description length a few months ago, so we've updated the upper-limit guidelines.
|
256 |
+
* We recommend enforcing these new guidelines for new pages, cornerstone pages, and the home page.
|
257 |
+
* Although the description lengths have been updated, the transient cache isn't invalidated.
|
258 |
+
* Over time the cache will refresh itself, this is done automatically by WordPress, or via your caching plugin's transients handler (if applicable).
|
259 |
+
|
260 |
+
**About the social meta input:**
|
261 |
+
|
262 |
+
* There are new Open Graph and Twitter inputs in the SEO Settings.
|
263 |
+
* The Twitter settings, when left empty, will use the Open Graph output.
|
264 |
+
* The Open Graph settings, when left empty, will use the SEO meta output.
|
265 |
+
* As always, auto-generated Open Graph and Twitter descriptions won't use prefixes.
|
266 |
+
|
267 |
+
**Found unwanted links in the sitemap?**
|
268 |
+
|
269 |
+
* If you find posts in the sitemap that shouldn't be there, please refer to [our renewed FAQ](https://wordpress.org/plugins/autodescription/#faq).
|
270 |
+
* The FAQ entry title is "The sitemap contains unwanted links".
|
271 |
+
|
272 |
+
[View the detailed log](https://theseoframework.com/?p=2264#detailed).
|
273 |
+
|
274 |
= 3.0.3 - Diligence =
|
275 |
|
276 |
**Release date:**
|
wpml-config.xml
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<wpml-config>
|
2 |
+
<custom-fields>
|
3 |
+
<custom-field action="translate">_genesis_title</custom-field>
|
4 |
+
<custom-field action="translate">_genesis_description</custom-field>
|
5 |
+
<custom-field action="translate">_social_image_url</custom-field>
|
6 |
+
<custom-field action="translate">_genesis_canonical_uri</custom-field>
|
7 |
+
<custom-field action="translate">redirect</custom-field>
|
8 |
+
<custom-field action="translate">_open_graph_title</custom-field>
|
9 |
+
<custom-field action="translate">_twitter_title</custom-field>
|
10 |
+
<custom-field action="translate">_open_graph_description</custom-field>
|
11 |
+
<custom-field action="translate">_twitter_description</custom-field>
|
12 |
+
</custom-fields>
|
13 |
+
</wpml-config>
|