The SEO Framework - Version 4.0.3

Version Description

Google Search has a new bug in their parser, which causes pages to be deindexed unintentionally when a specific combination of robots-settings are used. To work around this bug, we changed how the recently introduced copyright directive settings work.

For more information, see our KB entry on why the Maximum Image Preview Size setting may now be ignored.

We also fixed three bugs and added minor improvements.

Download this release

Release Info

Developer Cybr
Plugin Icon 128x128 The SEO Framework
Version 4.0.3
Comparing to
See all releases

Code changes from version 4.0.2 to 4.0.3

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 your WordPress website.
6
- * Version: 4.0.2
7
* Author: The SEO Framework Team
8
* Author URI: https://theseoframework.com/
9
* License: GPLv3
@@ -64,7 +64,7 @@ defined( 'ABSPATH' ) or die;
64
*
65
* @since 2.3.5
66
*/
67
- define( 'THE_SEO_FRAMEWORK_VERSION', '4.0.2' );
68
69
/**
70
* 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 your WordPress website.
6
+ * Version: 4.0.3
7
* Author: The SEO Framework Team
8
* Author URI: https://theseoframework.com/
9
* License: GPLv3
64
*
65
* @since 2.3.5
66
*/
67
+ define( 'THE_SEO_FRAMEWORK_VERSION', '4.0.3' );
68
69
/**
70
* The plugin Database version.
bootstrap/envtest.php CHANGED
@@ -70,13 +70,13 @@ function the_seo_framework_pre_boot_test() {
70
}
71
72
$requirements = array(
73
- 'php' => '50600',
74
- 'wp' => '37965',
75
);
76
77
// phpcs:disable, Generic.Formatting.MultipleStatementAlignment, WordPress.WhiteSpace.PrecisionAlignment
78
! defined( 'PHP_VERSION_ID' ) || PHP_VERSION_ID < $requirements['php'] and $test = 1
79
- or $GLOBALS['wp_db_version'] < $requirements['wp'] and $test = 2
80
or $test = true;
81
// phpcs:enable, Generic.Formatting.MultipleStatementAlignment, WordPress.WhiteSpace.PrecisionAlignment
82
70
}
71
72
$requirements = array(
73
+ 'php' => 50600,
74
+ 'wp' => '4.9-dev',
75
);
76
77
// phpcs:disable, Generic.Formatting.MultipleStatementAlignment, WordPress.WhiteSpace.PrecisionAlignment
78
! defined( 'PHP_VERSION_ID' ) || PHP_VERSION_ID < $requirements['php'] and $test = 1
79
+ or version_compare( $GLOBALS['wp_version'], $requirements['wp'], '<' ) and $test = 2
80
or $test = true;
81
// phpcs:enable, Generic.Formatting.MultipleStatementAlignment, WordPress.WhiteSpace.PrecisionAlignment
82
bootstrap/upgrade.php CHANGED
@@ -273,7 +273,7 @@ function _do_upgrade_notice() {
273
[ 'a' ],
274
[ 'a_internal' => false ]
275
),
276
- 'updated',
277
false,
278
false
279
);
@@ -344,7 +344,7 @@ function _output_upgrade_notices() {
344
345
foreach ( $notices as $notice ) {
346
//* @TODO rtl?
347
- \the_seo_framework()->do_dismissible_notice( 'SEO: ' . $notice, 'updated' );
348
}
349
}
350
273
[ 'a' ],
274
[ 'a_internal' => false ]
275
),
276
+ 'info',
277
false,
278
false
279
);
344
345
foreach ( $notices as $notice ) {
346
//* @TODO rtl?
347
+ \the_seo_framework()->do_dismissible_notice( 'SEO: ' . $notice, 'info' );
348
}
349
}
350
inc/classes/admin-init.class.php CHANGED
@@ -59,7 +59,7 @@ class Admin_Init extends Init {
59
}
60
61
/**
62
- * Adds post states in post/page edit.php query
63
*
64
* @since 4.0.0
65
*
59
}
60
61
/**
62
+ * Adds post states for the post/page edit.php query.
63
*
64
* @since 4.0.0
65
*
inc/classes/admin-pages.class.php CHANGED
@@ -202,7 +202,7 @@ class Admin_Pages extends Profile {
202
203
case 'unchanged':
204
$message = \__( 'No SEO settings were changed, but the caches have been flushed.', 'autodescription' );
205
- $type = 'warning';
206
break;
207
208
case 'reset':
@@ -353,6 +353,8 @@ class Admin_Pages extends Profile {
353
* @since 2.6.0
354
* @since 3.0.6 The messages are no longer auto-styled to "strong".
355
* @since 4.0.0 Added a tabindex, so keyboard navigation is possible on the "empty" dashicon.
356
*
357
* @param string $message The notice message. Expected to be escaped if $escape is false.
358
* @param string $type The notice type : 'updated', 'error', 'warning'. Expected to be escaped.
@@ -372,6 +374,9 @@ class Admin_Pages extends Profile {
372
if ( 'warning' === $type )
373
$type = 'notice-warning';
374
375
$a11y = $a11y ? 'tsf-show-icon' : '';
376
377
return vsprintf(
@@ -381,7 +386,7 @@ class Admin_Pages extends Profile {
381
( $a11y ? 'tsf-show-icon' : '' ),
382
( $escape ? \esc_html( $message ) : $message ),
383
sprintf(
384
- '<a class="hide-if-no-tsf-js tsf-dismiss" title="%s" tabindex=0></a>',
385
\esc_attr__( 'Dismiss this notice', 'autodescription' )
386
),
387
]
202
203
case 'unchanged':
204
$message = \__( 'No SEO settings were changed, but the caches have been flushed.', 'autodescription' );
205
+ $type = 'info';
206
break;
207
208
case 'reset':
353
* @since 2.6.0
354
* @since 3.0.6 The messages are no longer auto-styled to "strong".
355
* @since 4.0.0 Added a tabindex, so keyboard navigation is possible on the "empty" dashicon.
356
+ * @since 4.0.3 1. Keyboard navigation is now supported on the dismiss icon.
357
+ * 2. The info notice type is now supported.
358
*
359
* @param string $message The notice message. Expected to be escaped if $escape is false.
360
* @param string $type The notice type : 'updated', 'error', 'warning'. Expected to be escaped.
374
if ( 'warning' === $type )
375
$type = 'notice-warning';
376
377
+ if ( 'info' === $type )
378
+ $type = 'notice-info';
379
+
380
$a11y = $a11y ? 'tsf-show-icon' : '';
381
382
return vsprintf(
386
( $a11y ? 'tsf-show-icon' : '' ),
387
( $escape ? \esc_html( $message ) : $message ),
388
sprintf(
389
+ '<a class="hide-if-no-tsf-js tsf-dismiss" href="javascript:;" title="%s"></a>',
390
\esc_attr__( 'Dismiss this notice', 'autodescription' )
391
),
392
]
inc/classes/bridges/ping.class.php CHANGED
@@ -103,10 +103,11 @@ final class Ping {
103
* @since 2.2.9
104
* @since 3.1.0 Updated ping URL. Old one still worked, too.
105
* @since 4.0.0 Moved to \The_SEO_Framework\Bridges\Ping
106
* @link https://support.google.com/webmasters/answer/6065812?hl=en
107
*/
108
public static function ping_google() {
109
- $pingurl = 'http://www.google.com/ping?sitemap=' . rawurlencode(
110
\The_SEO_Framework\Bridges\Sitemap::get_instance()->get_expected_sitemap_endpoint_url()
111
);
112
\wp_safe_remote_get( $pingurl, [ 'timeout' => 3 ] );
@@ -118,10 +119,11 @@ final class Ping {
118
* @since 2.2.9
119
* @since 3.2.3 Updated ping URL. Old one still worked, too.
120
* @since 4.0.0 Moved to \The_SEO_Framework\Bridges\Ping
121
* @link https://www.bing.com/webmaster/help/how-to-submit-sitemaps-82a15bd4
122
*/
123
public static function ping_bing() {
124
- $pingurl = 'http://www.bing.com/ping?sitemap=' . rawurlencode(
125
\The_SEO_Framework\Bridges\Sitemap::get_instance()->get_expected_sitemap_endpoint_url()
126
);
127
\wp_safe_remote_get( $pingurl, [ 'timeout' => 3 ] );
103
* @since 2.2.9
104
* @since 3.1.0 Updated ping URL. Old one still worked, too.
105
* @since 4.0.0 Moved to \The_SEO_Framework\Bridges\Ping
106
+ * @since 4.0.3 Google now redirects to HTTPS. Updated URL scheme to accomodate.
107
* @link https://support.google.com/webmasters/answer/6065812?hl=en
108
*/
109
public static function ping_google() {
110
+ $pingurl = 'https://www.google.com/ping?sitemap=' . rawurlencode(
111
\The_SEO_Framework\Bridges\Sitemap::get_instance()->get_expected_sitemap_endpoint_url()
112
);
113
\wp_safe_remote_get( $pingurl, [ 'timeout' => 3 ] );
119
* @since 2.2.9
120
* @since 3.2.3 Updated ping URL. Old one still worked, too.
121
* @since 4.0.0 Moved to \The_SEO_Framework\Bridges\Ping
122
+ * @since 4.0.3 Bing now redirects to HTTPS. Updated URL scheme to accomodate.
123
* @link https://www.bing.com/webmaster/help/how-to-submit-sitemaps-82a15bd4
124
*/
125
public static function ping_bing() {
126
+ $pingurl = 'https://www.bing.com/ping?sitemap=' . rawurlencode(
127
\The_SEO_Framework\Bridges\Sitemap::get_instance()->get_expected_sitemap_endpoint_url()
128
);
129
\wp_safe_remote_get( $pingurl, [ 'timeout' => 3 ] );
inc/classes/builders/sitemap-base.class.php CHANGED
@@ -334,7 +334,7 @@ class Sitemap_Base extends Sitemap {
334
}
335
336
/**
337
- * Generates front-and blog page sitemap URL item values.
338
*
339
* @since 4.0.0
340
* @generator
334
}
335
336
/**
337
+ * Generates sitemap URL item values.
338
*
339
* @since 4.0.0
340
* @generator
inc/classes/core.class.php CHANGED
@@ -771,10 +771,11 @@ class Core {
771
* Note: This code has been rightfully stolen from the Extension Manager plugin (sorry Sybre!).
772
*
773
* @since 2.8.0
774
- * @since 2.9.0 : 1. Removed word boundary requirement for strong.
775
- * 2. Now accepts regex count their numeric values in string.
776
- * 3. Fixed header 1~6 calculation.
777
- * @since 2.9.3 : Added $args parameter.
778
* @link https://wordpress.org/plugins/about/readme.txt
779
*
780
* @param string $text The text that might contain markdown. Expected to be escaped.
@@ -816,6 +817,17 @@ class Core {
816
817
$md_types = empty( $convert ) ? $conversions : array_intersect( $conversions, $convert );
818
819
foreach ( $md_types as $type ) :
820
switch ( $type ) :
821
case 'strong':
771
* Note: This code has been rightfully stolen from the Extension Manager plugin (sorry Sybre!).
772
*
773
* @since 2.8.0
774
+ * @since 2.9.0 1. Removed word boundary requirement for strong.
775
+ * 2. Now accepts regex count their numeric values in string.
776
+ * 3. Fixed header 1~6 calculation.
777
+ * @since 2.9.3 Added $args parameter.
778
+ * @since 4.0.3 Added a workaround for connected em/strong elements.
779
* @link https://wordpress.org/plugins/about/readme.txt
780
*
781
* @param string $text The text that might contain markdown. Expected to be escaped.
817
818
$md_types = empty( $convert ) ? $conversions : array_intersect( $conversions, $convert );
819
820
+ if ( 2 === count( array_intersect( $md_types, [ 'em', 'strong' ] ) ) ) :
821
+ $count = preg_match_all( '/(?:\*{3})([^\*{\3}]+)(?:\*{3})/', $text, $matches, PREG_PATTERN_ORDER );
822
+ for ( $i = 0; $i < $count; $i++ ) {
823
+ $text = str_replace(
824
+ $matches[0][ $i ],
825
+ sprintf( '<strong><em>%s</em></strong>', \esc_html( $matches[1][ $i ] ) ),
826
+ $text
827
+ );
828
+ }
829
+ endif;
830
+
831
foreach ( $md_types as $type ) :
832
switch ( $type ) :
833
case 'strong':
inc/classes/deprecated.class.php CHANGED
@@ -37,11 +37,6 @@ defined( 'THE_SEO_FRAMEWORK_PRESENT' ) or die;
37
*/
38
final class Deprecated {
39
40
- /**
41
- * Constructor. Does nothing.
42
- */
43
- public function __construct() { }
44
-
45
/**
46
* Returns a filterable sequential array of default scripts.
47
*
37
*/
38
final class Deprecated {
39
40
/**
41
* Returns a filterable sequential array of default scripts.
42
*
inc/classes/detect.class.php CHANGED
@@ -680,6 +680,7 @@ class Detect extends Render {
680
* Detect if the current screen type is a page or taxonomy.
681
*
682
* @since 2.3.1
683
* @staticvar array $is_page
684
*
685
* @param string $type the Screen type
@@ -708,6 +709,7 @@ class Detect extends Render {
708
*
709
* @since 4.0.0
710
* @since 4.0.2 Now tests for an existing post/term ID when on singular/term pages.
711
*
712
* @return bool
713
*/
@@ -731,7 +733,10 @@ class Detect extends Render {
731
break;
732
733
case $this->is_term_meta_capable():
734
- $supported = $this->is_post_type_supported() && $this->get_the_real_ID();
735
break;
736
737
default:
680
* Detect if the current screen type is a page or taxonomy.
681
*
682
* @since 2.3.1
683
+ * @TODO unused... deprecate me.
684
* @staticvar array $is_page
685
*
686
* @param string $type the Screen type
709
*
710
* @since 4.0.0
711
* @since 4.0.2 Now tests for an existing post/term ID when on singular/term pages.
712
+ * @since 4.0.3 Can now assert empty categories again by checking for taxonomy support.
713
*
714
* @return bool
715
*/
733
break;
734
735
case $this->is_term_meta_capable():
736
+ // When a term has no posts attached, it'll not return a post type, and it returns a 404 late in the loop.
737
+ // This is because get_post_type() tries to assert the first post in the loop here.
738
+ // Thus, we test for is_taxonomy_supported() instead.
739
+ $supported = $this->is_taxonomy_supported() && $this->get_the_real_ID();
740
break;
741
742
default:
inc/classes/generate-url.class.php CHANGED
@@ -779,14 +779,20 @@ class Generate_Url extends Generate_Title {
779
* Adjusts category post link.
780
*
781
* @since 3.0.0
782
* @access private
783
*
784
* @param \WP_Term $term The category to use in the permalink.
785
- * @param array $terms Array of all categories (WP_Term objects) associated with the post.
786
* @param \WP_Post $post The post in question.
787
* @return \WP_Term The primary term.
788
*/
789
public function _adjust_post_link_category( $term, $terms = null, $post = null ) {
790
return $this->get_primary_term( $post->ID, $term->taxonomy ) ?: $term;
791
}
792
779
* Adjusts category post link.
780
*
781
* @since 3.0.0
782
+ * @since 4.0.3 Now fills in a fallback $post object when null.
783
* @access private
784
*
785
* @param \WP_Term $term The category to use in the permalink.
786
+ * @param array $terms Array of all categories (WP_Term objects) associated with the post. Unused.
787
* @param \WP_Post $post The post in question.
788
* @return \WP_Term The primary term.
789
*/
790
public function _adjust_post_link_category( $term, $terms = null, $post = null ) {
791
+
792
+ if ( null === $post ) {
793
+ $post = \get_post( $this->get_the_real_ID() );
794
+ }
795
+
796
return $this->get_primary_term( $post->ID, $term->taxonomy ) ?: $term;
797
}
798
inc/classes/generate.class.php CHANGED
@@ -78,6 +78,8 @@ class Generate extends User_Data {
78
* 3. Added two parameters.
79
* @since 4.0.2 1. Added new copyright directive tags.
80
* 2. Now strictly parses the validity of robots directives via a boolean check.
81
* @global \WP_Query $wp_query
82
*
83
* @param array|null $args The query arguments. Accepts 'id' and 'taxonomy'.
@@ -101,12 +103,12 @@ class Generate extends User_Data {
101
}
102
103
$meta = [
104
- 'noindex' => '',
105
- 'nofollow' => '',
106
- 'noarchive' => '',
107
- 'max_snippet_length' => '',
108
- 'max_image_preview' => '',
109
- 'max_video_preview' => '',
110
];
111
112
foreach (
@@ -115,15 +117,34 @@ class Generate extends User_Data {
115
) $v and $meta[ $k ] = $k;
116
117
foreach (
118
- array_intersect_key( $_meta, array_flip( [ 'max_snippet_length', 'max_image_preview', 'max_video_preview' ] ) )
119
as $k => $v
120
- ) false !== $v and $meta[ $k ] = str_replace( '_', '-', $k ) . "=$v";
121
122
/**
123
* Filters the front-end robots array, and strips empty indexes thereafter.
124
*
125
* @since 2.6.0
126
* @since 4.0.0 Added two parameters ($args and $ignore).
127
*
128
* @param array $meta The current robots meta.
129
* @param array|null $args The query arguments. Contains 'id' and 'taxonomy'.
@@ -152,6 +173,7 @@ class Generate extends User_Data {
152
*
153
* @since 4.0.0
154
* @since 4.0.2 Added new copyright directive tags.
155
* @global \WP_Query $wp_query
156
*
157
* @param int <bit> $ignore The ignore level. {
@@ -164,7 +186,7 @@ class Generate extends User_Data {
164
* bool 'noindex'
165
* bool 'nofollow'
166
* bool 'noarchive'
167
- * false|int <R>=-1> 'max_snippet_length'
168
* false|string 'max_image_preview'
169
* fasle|int <R>=-1> 'max_video_preview'
170
* }
@@ -175,12 +197,12 @@ class Generate extends User_Data {
175
$nofollow = (bool) $this->get_option( 'site_nofollow' );
176
$noarchive = (bool) $this->get_option( 'site_noarchive' );
177
178
- $max_snippet_length = $max_image_preview = $max_video_preview = false;
179
180
if ( $this->get_option( 'set_copyright_directives' ) ) {
181
- $max_snippet_length = $this->get_option( 'max_snippet_length' );
182
- $max_image_preview = $this->get_option( 'max_image_preview' );
183
- $max_video_preview = $this->get_option( 'max_video_preview' );
184
}
185
186
//* Check homepage SEO settings, set noindex, nofollow and noarchive
@@ -305,7 +327,7 @@ class Generate extends User_Data {
305
}
306
}
307
308
- return compact( 'noindex', 'nofollow', 'noarchive', 'max_snippet_length', 'max_image_preview', 'max_video_preview' );
309
}
310
311
/**
@@ -315,6 +337,7 @@ class Generate extends User_Data {
315
*
316
* @since 4.0.0
317
* @since 4.0.2 Added new copyright directive tags.
318
*
319
* @param array|null $args The query arguments. Accepts 'id' and 'taxonomy'.
320
* @param int <bit> $ignore The ignore level. {
@@ -327,7 +350,7 @@ class Generate extends User_Data {
327
* bool 'noindex'
328
* bool 'nofollow'
329
* bool 'noarchive'
330
- * false|int <R>=-1> 'max_snippet_length'
331
* false|string 'max_image_preview'
332
* fasle|int <R>=-1> 'max_video_preview'
333
* }
@@ -338,12 +361,12 @@ class Generate extends User_Data {
338
$nofollow = (bool) $this->get_option( 'site_nofollow' );
339
$noarchive = (bool) $this->get_option( 'site_noarchive' );
340
341
- $max_snippet_length = $max_image_preview = $max_video_preview = false;
342
343
if ( $this->get_option( 'set_copyright_directives' ) ) {
344
- $max_snippet_length = $this->get_option( 'max_snippet_length' );
345
- $max_image_preview = $this->get_option( 'max_image_preview' );
346
- $max_video_preview = $this->get_option( 'max_video_preview' );
347
}
348
349
if ( $args['taxonomy'] ) {
@@ -422,7 +445,7 @@ class Generate extends User_Data {
422
endif;
423
}
424
425
- return compact( 'noindex', 'nofollow', 'noarchive', 'max_snippet_length', 'max_image_preview', 'max_video_preview' );
426
}
427
428
/**
78
* 3. Added two parameters.
79
* @since 4.0.2 1. Added new copyright directive tags.
80
* 2. Now strictly parses the validity of robots directives via a boolean check.
81
+ * @since 4.0.3 1. Changed `max_snippet_length` to `max_snippet`
82
+ * 2. Changed the copyright directive's spacer from `=` to `:`.
83
* @global \WP_Query $wp_query
84
*
85
* @param array|null $args The query arguments. Accepts 'id' and 'taxonomy'.
103
}
104
105
$meta = [
106
+ 'noindex' => '',
107
+ 'nofollow' => '',
108
+ 'noarchive' => '',
109
+ 'max_snippet' => '',
110
+ 'max_image_preview' => '',
111
+ 'max_video_preview' => '',
112
];
113
114
foreach (
117
) $v and $meta[ $k ] = $k;
118
119
foreach (
120
+ array_intersect_key( $_meta, array_flip( [ 'max_snippet', 'max_image_preview', 'max_video_preview' ] ) )
121
as $k => $v
122
+ ) false !== $v and $meta[ $k ] = str_replace( '_', '-', $k ) . ":$v";
123
+
124
+ /**
125
+ * Drop-in Google Search bug patch.
126
+ * "When you combine "max-image-preview:none" with either "nofollow" or "noarchive", the page is marked as "noindex"!"
127
+ *
128
+ * (It's probably defined as `<meta name=robots content=none/>` due to a regex bug at Google)
129
+ *
130
+ * @link <https://twitter.com/SybreWaaijer/status/1192017921553375232>
131
+ * @link <https://kb.theseoframework.com/?p=82>
132
+ * @since 4.0.3
133
+ * @ignore Do not fix me. Do not place after the filter either; that's redundant, because there are more filters trickling down.
134
+ * @TEMP
135
+ */
136
+ if ( 'max-image-preview:none' === $meta['max_image_preview'] ) {
137
+ if ( $meta['nofollow'] || $meta['noarchive'] )
138
+ $meta['max_image_preview'] = '';
139
+ }
140
141
/**
142
* Filters the front-end robots array, and strips empty indexes thereafter.
143
*
144
* @since 2.6.0
145
* @since 4.0.0 Added two parameters ($args and $ignore).
146
+ * @since 4.0.2 Now contains the copyright diretive values.
147
+ * @since 4.0.3 Changed `$meta` key `max_snippet_length` to `max_snippet`
148
*
149
* @param array $meta The current robots meta.
150
* @param array|null $args The query arguments. Contains 'id' and 'taxonomy'.
173
*
174
* @since 4.0.0
175
* @since 4.0.2 Added new copyright directive tags.
176
+ * @since 4.0.3 Changed `max_snippet_length` to `max_snippet`
177
* @global \WP_Query $wp_query
178
*
179
* @param int <bit> $ignore The ignore level. {
186
* bool 'noindex'
187
* bool 'nofollow'
188
* bool 'noarchive'
189
+ * false|int <R>=-1> 'max_snippet'
190
* false|string 'max_image_preview'
191
* fasle|int <R>=-1> 'max_video_preview'
192
* }
197
$nofollow = (bool) $this->get_option( 'site_nofollow' );
198
$noarchive = (bool) $this->get_option( 'site_noarchive' );
199
200
+ $max_snippet = $max_image_preview = $max_video_preview = false;
201
202
if ( $this->get_option( 'set_copyright_directives' ) ) {
203
+ $max_snippet = $this->get_option( 'max_snippet_length' );
204
+ $max_image_preview = $this->get_option( 'max_image_preview' );
205
+ $max_video_preview = $this->get_option( 'max_video_preview' );
206
}
207
208
//* Check homepage SEO settings, set noindex, nofollow and noarchive
327
}
328
}
329
330
+ return compact( 'noindex', 'nofollow', 'noarchive', 'max_snippet', 'max_image_preview', 'max_video_preview' );
331
}
332
333
/**
337
*
338
* @since 4.0.0
339
* @since 4.0.2 Added new copyright directive tags.
340
+ * @since 4.0.3 Changed `max_snippet_length` to `max_snippet`
341
*
342
* @param array|null $args The query arguments. Accepts 'id' and 'taxonomy'.
343
* @param int <bit> $ignore The ignore level. {
350
* bool 'noindex'
351
* bool 'nofollow'
352
* bool 'noarchive'
353
+ * false|int <R>=-1> 'max_snippet'
354
* false|string 'max_image_preview'
355
* fasle|int <R>=-1> 'max_video_preview'
356
* }
361
$nofollow = (bool) $this->get_option( 'site_nofollow' );
362
$noarchive = (bool) $this->get_option( 'site_noarchive' );
363
364
+ $max_snippet = $max_image_preview = $max_video_preview = false;
365
366
if ( $this->get_option( 'set_copyright_directives' ) ) {
367
+ $max_snippet = $this->get_option( 'max_snippet_length' );
368
+ $max_image_preview = $this->get_option( 'max_image_preview' );
369
+ $max_video_preview = $this->get_option( 'max_video_preview' );
370
}
371
372
if ( $args['taxonomy'] ) {
445
endif;
446
}
447
448
+ return compact( 'noindex', 'nofollow', 'noarchive', 'max_snippet', 'max_image_preview', 'max_video_preview' );
449
}
450
451
/**
inc/classes/init.class.php CHANGED
@@ -476,7 +476,7 @@ class Init extends Query {
476
$url = '';
477
478
if ( $this->is_singular() ) {
479
- // TODO excluse is_singular_archive()? Those can create issues...
480
481
$url = $this->get_post_meta_item( 'redirect' ) ?: '';
482
} elseif ( $this->is_term_meta_capable() ) {
476
$url = '';
477
478
if ( $this->is_singular() ) {
479
+ // TODO exclude is_singular_archive()? Those can create issues...
480
481
$url = $this->get_post_meta_item( 'redirect' ) ?: '';
482
} elseif ( $this->is_term_meta_capable() ) {
inc/classes/sanitize.class.php CHANGED
@@ -1759,7 +1759,7 @@ class Sanitize extends Admin_Pages {
1759
foreach ( [ 'clear', 'space' ] as $type ) {
1760
if ( empty( $args[ $type ] ) ) continue;
1761
1762
- $_regex = sprintf( '<(%s)[^>]*?>((.*?)(<\/\1>))?', implode( $args[ $type ], '|' ) );
1763
$_replace = 'space' === $type ? ' $2 ' : ' ';
1764
1765
$input = preg_replace( "/$_regex/si", $_replace, $input );
1759
foreach ( [ 'clear', 'space' ] as $type ) {
1760
if ( empty( $args[ $type ] ) ) continue;
1761
1762
+ $_regex = sprintf( '<(%s)[^>]*?>((.*?)(<\/\1>))?', implode( '|', $args[ $type ] ) );
1763
$_replace = 'space' === $type ? ' $2 ' : ' ';
1764
1765
$input = preg_replace( "/$_regex/si", $_replace, $input );
inc/compat/plugin-woocommerce.php CHANGED
@@ -15,6 +15,7 @@ defined( 'THE_SEO_FRAMEWORK_PRESENT' ) and $_this = \the_seo_framework_class() a
15
* Initializes WooCommerce compatibility.
16
*
17
* @since 3.1.0
18
* @access private
19
* @uses \is_product()
20
*/
@@ -30,6 +31,14 @@ function _init_wc_compat() {
30
}
31
}
32
);
33
}
34
35
\add_filter( 'the_seo_framework_image_generation_params', __NAMESPACE__ . '\\_adjust_image_generation_params', 10, 2 );
15
* Initializes WooCommerce compatibility.
16
*
17
* @since 3.1.0
18
+ * @since 4.0.3 Added primary term support to products.
19
* @access private
20
* @uses \is_product()
21
*/
31
}
32
}
33
);
34
+
35
+ $tsf = \the_seo_framework();
36
+
37
+ // Adjust the product link acknowledging the primary category.
38
+ \add_filter( 'wc_product_post_type_link_product_cat', [ $tsf, '_adjust_post_link_category' ], 10, 3 );
39
+
40
+ // Adjust the structured-data breadcrumb primary term. Coincidentally(?), it uses the same filter structure; although, it misses the $post object.
41
+ \add_filter( 'woocommerce_breadcrumb_main_term', [ $tsf, '_adjust_post_link_category' ], 10, 2 );
42
}
43
44
\add_filter( 'the_seo_framework_image_generation_params', __NAMESPACE__ . '\\_adjust_image_generation_params', 10, 2 );
inc/functions/upgrade-suggestion.php CHANGED
@@ -121,7 +121,7 @@ function _suggest_extension_manager() {
121
[ 'a', 'strong' ],
122
[ 'a_internal' => false ]
123
),
124
- 'updated',
125
false,
126
false
127
);
121
[ 'a', 'strong' ],
122
[ 'a_internal' => false ]
123
),
124
+ 'info',
125
false,
126
false
127
);
inc/views/admin/metaboxes/robots-metabox.php CHANGED
@@ -150,7 +150,8 @@ switch ( $instance ) :
150
$this->wrap_fields(
151
vsprintf(
152
'<p><label for="%1$s"><strong>%2$s</strong> %5$s</label></p>
153
- <p><select name="%3$s" id="%1$s">%4$s</select></p>',
154
[
155
$this->get_field_id( 'max_snippet_length' ),
156
esc_html__( 'Maximum text snippet length', 'autodescription' ),
@@ -161,6 +162,7 @@ switch ( $instance ) :
161
'',
162
false
163
),
164
]
165
),
166
true
@@ -186,7 +188,8 @@ switch ( $instance ) :
186
$this->wrap_fields(
187
vsprintf(
188
'<p><label for="%1$s"><strong>%2$s</strong> %5$s</label></p>
189
- <p><select name="%3$s" id="%1$s">%4$s</select></p>',
190
[
191
$this->get_field_id( 'max_image_preview' ),
192
esc_html__( 'Maximum image preview size', 'autodescription' ),
@@ -197,6 +200,15 @@ switch ( $instance ) :
197
'',
198
false
199
),
200
]
201
),
202
true
@@ -204,7 +216,7 @@ switch ( $instance ) :
204
205
$_video_snippet_types['default'] = [
206
-1 => __( 'Full video preview', 'autodescription' ),
207
- 0 => _x( 'None, disallow preview', 'quanity: zero', 'autodescription' ),
208
];
209
foreach ( range( 1, 600, 1 ) as $_n ) {
210
/* translators: %d = number */
150
$this->wrap_fields(
151
vsprintf(
152
'<p><label for="%1$s"><strong>%2$s</strong> %5$s</label></p>
153
+ <p><select name="%3$s" id="%1$s">%4$s</select></p>
154
+ <p class=description>%6$s</p>',
155
[
156
$this->get_field_id( 'max_snippet_length' ),
157
esc_html__( 'Maximum text snippet length', 'autodescription' ),
162
'',
163
false
164
),
165
+ esc_html__( "This directive also imposes a limit on meta descriptions and structured data, which unintentionally restricts the amount of information you can share. Therefore, it's best to use at least a 320 character limit.", 'autodescription' ),
166
]
167
),
168
true
188
$this->wrap_fields(
189
vsprintf(
190
'<p><label for="%1$s"><strong>%2$s</strong> %5$s</label></p>
191
+ <p><select name="%3$s" id="%1$s">%4$s</select></p>
192
+ <p class=description>%6$s</p>',
193
[
194
$this->get_field_id( 'max_image_preview' ),
195
esc_html__( 'Maximum image preview size', 'autodescription' ),
200
'',
201
false
202
),
203
+ $this->convert_markdown(
204
+ sprintf(
205
+ /* translators: Backticks and hyperlink are Markdown! %s = link to documentation. */
206
+ esc_html__( 'The "None, disallow preview" setting will not be used when `nofollow` or `noarchive` are set for a page. This is to work around unexpected deindexing behavior in Google Search. [Learn more](%s).', 'autodescription' ),
207
+ 'https://kb.theseoframework.com/kb/why-is-max-image-preview-none-purged/'
208
+ ),
209
+ [ 'code', 'a' ],
210
+ [ 'a_external' => true ]
211
+ ),
212
]
213
),
214
true
216
217
$_video_snippet_types['default'] = [
218
-1 => __( 'Full video preview', 'autodescription' ),
219
+ 0 => _x( 'None, still image only', 'quanity: zero', 'autodescription' ),
220
];
221
foreach ( range( 1, 600, 1 ) as $_n ) {
222
/* translators: %d = number */
language/autodescription.pot CHANGED
@@ -2,9 +2,9 @@
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 4.0.2\n"
6
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/autodescription\n"
7
- "POT-Creation-Date: 2019-10-15 01:19:53+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
@@ -164,33 +164,33 @@ msgstr ""
164
msgid "Multiple SEO tools have been detected. You should only use one."
165
msgstr ""
166
167
- #: inc/classes/admin-pages.class.php:385
168
msgid "Dismiss this notice"
169
msgstr ""
170
171
- #: inc/classes/admin-pages.class.php:1036
172
#: inc/classes/bridges/scripts.class.php:621
173
msgctxt "Button hover"
174
msgid "Select social image"
175
msgstr ""
176
177
- #: inc/classes/admin-pages.class.php:1047
178
#: inc/classes/bridges/scripts.class.php:620
179
msgid "Select Image"
180
msgstr ""
181
182
- #: inc/classes/admin-pages.class.php:1093
183
#: inc/classes/bridges/scripts.class.php:629
184
msgid "Select Logo"
185
msgstr ""
186
187
- #: inc/classes/admin-pages.class.php:1143
188
msgid "Click to change the counter type"
189
msgstr ""
190
191
#. translators: %s = number
192
193
- #: inc/classes/admin-pages.class.php:1146
194
msgid "Characters Used: %s"
195
msgstr ""
196
@@ -1550,7 +1550,7 @@ msgid "This outputs the complete date including hours, minutes, and timezone."
1550
msgstr ""
1551
1552
#: inc/views/admin/metaboxes/general-metabox.php:429
1553
- #: inc/views/admin/metaboxes/robots-metabox.php:301
1554
msgid "Post Type Settings"
1555
msgstr ""
1556
@@ -1567,7 +1567,7 @@ msgid "Select post types which should not receive any SEO optimization whatsoeve
1567
msgstr ""
1568
1569
#: inc/views/admin/metaboxes/general-metabox.php:439
1570
- #: inc/views/admin/metaboxes/robots-metabox.php:303
1571
msgid "These settings are applied to the post type pages and their terms. When terms are shared between post types, all their post types should be checked for this to have an effect."
1572
msgstr ""
1573
@@ -1854,81 +1854,96 @@ msgstr[0] ""
1854
msgstr[1] ""
1855
1856
#: inc/views/admin/metaboxes/robots-metabox.php:133
1857
- #: inc/views/admin/metaboxes/robots-metabox.php:217
1858
msgid "Standard directive"
1859
msgstr ""
1860
1861
#: inc/views/admin/metaboxes/robots-metabox.php:134
1862
- #: inc/views/admin/metaboxes/robots-metabox.php:218
1863
msgid "Granular directive"
1864
msgstr ""
1865
1866
- #: inc/views/admin/metaboxes/robots-metabox.php:156
1867
msgid "Maximum text snippet length"
1868
msgstr ""
1869
1870
- #: inc/views/admin/metaboxes/robots-metabox.php:160
1871
msgid "This may limit the text snippet length for all pages on this site."
1872
msgstr ""
1873
1874
- #: inc/views/admin/metaboxes/robots-metabox.php:172
1875
- #: inc/views/admin/metaboxes/robots-metabox.php:207
1876
msgctxt "quanity: zero"
1877
msgid "None, disallow preview"
1878
msgstr ""
1879
1880
- #: inc/views/admin/metaboxes/robots-metabox.php:173
1881
msgid "Thumbnail or standard size"
1882
msgstr ""
1883
1884
- #: inc/views/admin/metaboxes/robots-metabox.php:174
1885
msgid "Large or full size"
1886
msgstr ""
1887
1888
- #: inc/views/admin/metaboxes/robots-metabox.php:192
1889
msgid "Maximum image preview size"
1890
msgstr ""
1891
1892
- #: inc/views/admin/metaboxes/robots-metabox.php:196
1893
msgid "This may limit the image preview size for all images from this site."
1894
msgstr ""
1895
1896
#: inc/views/admin/metaboxes/robots-metabox.php:206
1897
msgid "Full video preview"
1898
msgstr ""
1899
1900
#. translators: %d = number
1901
1902
- #: inc/views/admin/metaboxes/robots-metabox.php:211
1903
msgid "%d second"
1904
msgid_plural "%d seconds"
1905
msgstr[0] ""
1906
msgstr[1] ""
1907
1908
- #: inc/views/admin/metaboxes/robots-metabox.php:240
1909
msgid "Maximum video preview length"
1910
msgstr ""
1911
1912
- #: inc/views/admin/metaboxes/robots-metabox.php:244
1913
msgid "This may limit the video preview length for all videos on this site."
1914
msgstr ""
1915
1916
#. translators: 1 = noindex/nofollow/noarchive, 2 = Post, Post type, Category
1917
#. archives, the entire site, etc.
1918
1919
- #: inc/views/admin/metaboxes/robots-metabox.php:259
1920
msgid "Apply %1$s to %2$s?"
1921
msgstr ""
1922
1923
- #: inc/views/admin/metaboxes/robots-metabox.php:264
1924
msgid "Robots Settings"
1925
msgstr ""
1926
1927
- #: inc/views/admin/metaboxes/robots-metabox.php:289
1928
msgid "Warning: No public site should ever enable this option."
1929
msgstr ""
1930
1931
- #: inc/views/admin/metaboxes/robots-metabox.php:308
1932
msgid "Warning: No site should enable these options for Posts and Pages."
1933
msgstr ""
1934
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 4.0.3\n"
6
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/autodescription\n"
7
+ "POT-Creation-Date: 2019-11-11 17:46:56+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
164
msgid "Multiple SEO tools have been detected. You should only use one."
165
msgstr ""
166
167
+ #: inc/classes/admin-pages.class.php:390
168
msgid "Dismiss this notice"
169
msgstr ""
170
171
+ #: inc/classes/admin-pages.class.php:1041
172
#: inc/classes/bridges/scripts.class.php:621
173
msgctxt "Button hover"
174
msgid "Select social image"
175
msgstr ""
176
177
+ #: inc/classes/admin-pages.class.php:1052
178
#: inc/classes/bridges/scripts.class.php:620
179
msgid "Select Image"
180
msgstr ""
181
182
+ #: inc/classes/admin-pages.class.php:1098
183
#: inc/classes/bridges/scripts.class.php:629
184
msgid "Select Logo"
185
msgstr ""
186
187
+ #: inc/classes/admin-pages.class.php:1148
188
msgid "Click to change the counter type"
189
msgstr ""
190
191
#. translators: %s = number
192
193
+ #: inc/classes/admin-pages.class.php:1151
194
msgid "Characters Used: %s"
195
msgstr ""
196
1550
msgstr ""
1551
1552
#: inc/views/admin/metaboxes/general-metabox.php:429
1553
+ #: inc/views/admin/metaboxes/robots-metabox.php:313
1554
msgid "Post Type Settings"
1555
msgstr ""
1556
1567
msgstr ""
1568
1569
#: inc/views/admin/metaboxes/general-metabox.php:439
1570
+ #: inc/views/admin/metaboxes/robots-metabox.php:315
1571
msgid "These settings are applied to the post type pages and their terms. When terms are shared between post types, all their post types should be checked for this to have an effect."
1572
msgstr ""
1573
1854
msgstr[1] ""
1855
1856
#: inc/views/admin/metaboxes/robots-metabox.php:133
1857
+ #: inc/views/admin/metaboxes/robots-metabox.php:229
1858
msgid "Standard directive"
1859
msgstr ""
1860
1861
#: inc/views/admin/metaboxes/robots-metabox.php:134
1862
+ #: inc/views/admin/metaboxes/robots-metabox.php:230
1863
msgid "Granular directive"
1864
msgstr ""
1865
1866
+ #: inc/views/admin/metaboxes/robots-metabox.php:157
1867
msgid "Maximum text snippet length"
1868
msgstr ""
1869
1870
+ #: inc/views/admin/metaboxes/robots-metabox.php:161
1871
msgid "This may limit the text snippet length for all pages on this site."
1872
msgstr ""
1873
1874
+ #: inc/views/admin/metaboxes/robots-metabox.php:165
1875
+ msgid "This directive also imposes a limit on meta descriptions and structured data, which unintentionally restricts the amount of information you can share. Therefore, it's best to use at least a 320 character limit."
1876
+ msgstr ""
1877
+
1878
+ #: inc/views/admin/metaboxes/robots-metabox.php:174
1879
msgctxt "quanity: zero"
1880
msgid "None, disallow preview"
1881
msgstr ""
1882
1883
+ #: inc/views/admin/metaboxes/robots-metabox.php:175
1884
msgid "Thumbnail or standard size"
1885
msgstr ""
1886
1887
+ #: inc/views/admin/metaboxes/robots-metabox.php:176
1888
msgid "Large or full size"
1889
msgstr ""
1890
1891
+ #: inc/views/admin/metaboxes/robots-metabox.php:195
1892
msgid "Maximum image preview size"
1893
msgstr ""
1894
1895
+ #: inc/views/admin/metaboxes/robots-metabox.php:199
1896
msgid "This may limit the image preview size for all images from this site."
1897
msgstr ""
1898
1899
+ #. translators: Backticks and hyperlink are Markdown! %s = link to
1900
+ #. documentation.
1901
+
1902
#: inc/views/admin/metaboxes/robots-metabox.php:206
1903
+ msgid "The \"None, disallow preview\" setting will not be used when `nofollow` or `noarchive` are set for a page. This is to work around unexpected deindexing behavior in Google Search. [Learn more](%s)."
1904
+ msgstr ""
1905
+
1906
+ #: inc/views/admin/metaboxes/robots-metabox.php:218
1907
msgid "Full video preview"
1908
msgstr ""
1909
1910
+ #: inc/views/admin/metaboxes/robots-metabox.php:219
1911
+ msgctxt "quanity: zero"
1912
+ msgid "None, still image only"
1913
+ msgstr ""
1914
+
1915
#. translators: %d = number
1916
1917
+ #: inc/views/admin/metaboxes/robots-metabox.php:223
1918
msgid "%d second"
1919
msgid_plural "%d seconds"
1920
msgstr[0] ""
1921
msgstr[1] ""
1922
1923
+ #: inc/views/admin/metaboxes/robots-metabox.php:252
1924
msgid "Maximum video preview length"
1925
msgstr ""
1926
1927
+ #: inc/views/admin/metaboxes/robots-metabox.php:256
1928
msgid "This may limit the video preview length for all videos on this site."
1929
msgstr ""
1930
1931
#. translators: 1 = noindex/nofollow/noarchive, 2 = Post, Post type, Category
1932
#. archives, the entire site, etc.
1933
1934
+ #: inc/views/admin/metaboxes/robots-metabox.php:271
1935
msgid "Apply %1$s to %2$s?"
1936
msgstr ""
1937
1938
+ #: inc/views/admin/metaboxes/robots-metabox.php:276
1939
msgid "Robots Settings"
1940
msgstr ""
1941
1942
+ #: inc/views/admin/metaboxes/robots-metabox.php:301
1943
msgid "Warning: No public site should ever enable this option."
1944
msgstr ""
1945
1946
+ #: inc/views/admin/metaboxes/robots-metabox.php:320
1947
msgid "Warning: No site should enable these options for Posts and Pages."
1948
msgstr ""
1949
lib/css/settings.css CHANGED
@@ -26,7 +26,7 @@ body.rtl .tsf-top-wrap > h1 {
26
float: right;
27
}
28
29
- body.rtl .tsf-top-button {
30
float: left;
31
}
32
@@ -145,6 +145,7 @@ body.rtl .tsf-bottom-buttons {
145
background: #f1f1f1;
146
color: #555;
147
font-weight: 600;
148
}
149
150
body.rtl .tsf-nav-tab {
26
float: right;
27
}
28
29
+ body.rtl .tsf-top-buttons {
30
float: left;
31
}
32
145
background: #f1f1f1;
146
color: #555;
147
font-weight: 600;
148
+ border-radius: 3px 3px 0 0;
149
}
150
151
body.rtl .tsf-nav-tab {
lib/css/settings.min.css CHANGED
@@ -1 +1 @@
1
- .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{float:left}body.rtl .tsf-top-wrap>h1{float:right}.tsf-metaboxes .metabox-holder{clear:both}.tsf-top-buttons{float:right}body.rtl .tsf-top-button{float:left}.tsf-bottom-buttons{text-align:right}body.rtl .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{margin-bottom: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 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{display:inline-block;min-width:60px;vertical-align:baseline}#tsf-home-title-location label .tsf-custom-blogname-js,#tsf-home-title-location label .tsf-custom-tagline-js,#tsf-home-title-location label .tsf-custom-title-js,#tsf-home-title-location label .tsf-sep-js,#tsf-title-location label .tsf-sep-js,#tsf-title-location label .tsf-title-additions-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;font-weight:600}body.rtl .tsf-nav-tab{float:right;margin-left:0;margin-right:.5em}.tsf-nav-desktop{margin-left:7px}.tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}input.tsf-tabs-radio{position:absolute;width:0;height:0;opacity:0;margin:0;padding:0;border:0;z-index:-1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tsf-active-tab,.tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-tabs-radio:focus+label:not(.tsf-no-focus-ring){box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);border-color:#fff}.tsf-tabs-content{margin:1.33em auto 0}.tsf-tabs-content select{width:100%;max-width:max-content;text-overflow:ellipsis}.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}
1
+ .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{float:left}body.rtl .tsf-top-wrap>h1{float:right}.tsf-metaboxes .metabox-holder{clear:both}.tsf-top-buttons{float:right}body.rtl .tsf-top-buttons{float:left}.tsf-bottom-buttons{text-align:right}body.rtl .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{margin-bottom: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 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{display:inline-block;min-width:60px;vertical-align:baseline}#tsf-home-title-location label .tsf-custom-blogname-js,#tsf-home-title-location label .tsf-custom-tagline-js,#tsf-home-title-location label .tsf-custom-title-js,#tsf-home-title-location label .tsf-sep-js,#tsf-title-location label .tsf-sep-js,#tsf-title-location label .tsf-title-additions-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;font-weight:600;border-radius:3px 3px 0 0}body.rtl .tsf-nav-tab{float:right;margin-left:0;margin-right:.5em}.tsf-nav-desktop{margin-left:7px}.tsf-dashicons-tabs{font-size:initial;display:inline;vertical-align:text-bottom}input.tsf-tabs-radio{position:absolute;width:0;height:0;opacity:0;margin:0;padding:0;border:0;z-index:-1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tsf-active-tab,.tsf-tabs-radio:checked+label{background-color:inherit;border-bottom-color:#fff;color:#000}.tsf-tabs-radio:focus+label:not(.tsf-no-focus-ring){box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);border-color:#fff}.tsf-tabs-content{margin:1.33em auto 0}.tsf-tabs-content select{width:100%;max-width:max-content;text-overflow:ellipsis}.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}
lib/css/tsf.css CHANGED
@@ -42,17 +42,23 @@ body.rtl .tsf-notice.tsf-show-icon p:before {
42
}
43
44
.error.tsf-notice.tsf-show-icon p:before {
45
- color: #dd3811;
46
content: "\f534";
47
}
48
49
.notice-warning.tsf-notice.tsf-show-icon p:before {
50
- color: #ffa01b;
51
content: "\f227";
52
}
53
54
.updated.tsf-notice.tsf-show-icon p:before {
55
- color: #0cc34b;
56
font-size: 16px;
57
content: "\f147";
58
}
@@ -60,10 +66,10 @@ body.rtl .tsf-notice.tsf-show-icon p:before {
60
a.tsf-dismiss {
61
position: absolute;
62
top: 0;
63
- right: 1px;
64
border: none;
65
margin: 0;
66
- padding: 9px;
67
background: 0 0;
68
color: #72777c;
69
cursor: pointer;
@@ -72,7 +78,7 @@ a.tsf-dismiss {
72
73
body.rtl a.tsf-dismiss {
74
right: initial;
75
- left: 1px;
76
}
77
78
a.tsf-dismiss:before {
@@ -160,7 +166,6 @@ body.rtl #tsf-title-placeholder-prefix {
160
display: block;
161
width: 95%;
162
max-width: 190px;
163
- border-radius: 0;
164
padding: 0;
165
}
166
@@ -185,6 +190,11 @@ body.rtl #tsf-title-placeholder-prefix {
185
text-shadow: 0 0 3px rgba(0,0,0,0.5);
186
}
187
188
body.no-js .tsf-seo-bar-item {
189
cursor: default;
190
}
42
}
43
44
.error.tsf-notice.tsf-show-icon p:before {
45
+ color: #dc3232;
46
content: "\f534";
47
}
48
49
.notice-warning.tsf-notice.tsf-show-icon p:before {
50
+ color: #ffb900;
51
content: "\f227";
52
}
53
54
+ .notice-info.tsf-notice.tsf-show-icon p:before {
55
+ color: #00a0d2;
56
+ font-size: 16px;
57
+ content: "\f223";
58
+ }
59
+
60
.updated.tsf-notice.tsf-show-icon p:before {
61
+ color: #46b450;
62
font-size: 16px;
63
content: "\f147";
64
}
66
a.tsf-dismiss {
67
position: absolute;
68
top: 0;
69
+ right: 0;
70
border: none;
71
margin: 0;
72
+ padding: 10px;
73
background: 0 0;
74
color: #72777c;
75
cursor: pointer;
78
79
body.rtl a.tsf-dismiss {
80
right: initial;
81
+ left: 0;
82
}
83
84
a.tsf-dismiss:before {
166
display: block;
167
width: 95%;
168
max-width: 190px;
169
padding: 0;
170
}
171
190
text-shadow: 0 0 3px rgba(0,0,0,0.5);
191
}
192
193
+ .tsf-seo-bar-item:focus {
194
+ outline: none;
195
+ box-shadow: 0 0 0 1px currentColor inset;
196
+ }
197
+
198
body.no-js .tsf-seo-bar-item {
199
cursor: default;
200
}
lib/css/tsf.min.css CHANGED
@@ -1 +1 @@
1
- .tsf-js .hide-if-tsf-js,.tsf-no-js .hide-if-no-tsf-js{display:none}.notice.tsf-notice{position:relative;padding-right:38px}body.rtl .notice.tsf-notice{padding-right:12px;padding-left:38px}.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}body.rtl .tsf-notice.tsf-show-icon p:before{margin-right:0;margin-left:12px}.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:#72777c;cursor:pointer;text-decoration:none}body.rtl a.tsf-dismiss{right:initial;left:1px}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}.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}body.rtl #sf-title-offset{left:initial;right:0}#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}body.rtl #tsf-title-placeholder,body.rtl #tsf-title-placeholder-prefix{left:initial;right:0}#tsf-title-placeholder{display:none}.fixed .column-tsf-seo-bar-wrap{width:11%}.tsf-seo-bar{display:block;width:95%;max-width:190px;border-radius:0;padding:0}.tsf-seo-bar-inner-wrap{display:flex;flex-direction:row;flex:1 1 auto;flex-wrap:wrap;justify-content:flex-start}.tsf-seo-bar-section-wrap{min-width:2em;flex:1 1 auto}.tsf-seo-bar-item{display:block;color:#fff;text-align:center;border:1px solid rgba(0,0,0,.1);text-shadow:0 0 3px rgba(0,0,0,.5)}body.no-js .tsf-seo-bar-item{cursor:default}.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-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-help{font-weight:400}.tsf-notice{clear:both}.tsf-flex{box-sizing:border-box;display:flex;flex:1 1 auto;flex-flow:column wrap;justify-content:flex-start}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-select-wrap{margin-top:7px;margin-bottom:14px}.tsf-select-wrap:last-of-type{margin-bottom:0}.tsf-select-block>select{margin-top:7px;margin-bottom:14px;display:block}.tsf-select-block:last-of-type>select{margin-bottom: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}body.rtl .tsf-counter .tsf-aja{margin-left:0;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;content:""}.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}.tsf-remove-image-button.button,.tsf-set-image-button.button{margin-right:8px}body.rtl .tsf-remove-image-button.button,body.rtl .tsf-set-image-button.button{margin-right:0;margin-left:8px}.tsf-image-preview{line-height:inherit;vertical-align:text-bottom}#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{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{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){.notice.tsf-notice,.wp-core-ui .notice.tsf-notice{padding-right:46px}body.rtl .notice.tsf-notice,body.rtl.wp-core-ui .notice.tsf-notice{padding-right:10px;padding-left:46px}.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}}@media screen and (max-width:642px){.tsf-nav-desktop{display:none}}@-moz-document url-prefix(){input.tsf-default-selected{box-shadow:0 0 0 1px #1c9d38}input.tsf-warning-selected{box-shadow:0 0 0 1px #dd3811}}
1
+ .tsf-js .hide-if-tsf-js,.tsf-no-js .hide-if-no-tsf-js{display:none}.notice.tsf-notice{position:relative;padding-right:38px}body.rtl .notice.tsf-notice{padding-right:12px;padding-left:38px}.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}body.rtl .tsf-notice.tsf-show-icon p:before{margin-right:0;margin-left:12px}.error.tsf-notice.tsf-show-icon p:before{color:#dc3232;content:"\f534"}.notice-warning.tsf-notice.tsf-show-icon p:before{color:#ffb900;content:"\f227"}.notice-info.tsf-notice.tsf-show-icon p:before{color:#00a0d2;font-size:16px;content:"\f223"}.updated.tsf-notice.tsf-show-icon p:before{color:#46b450;font-size:16px;content:"\f147"}a.tsf-dismiss{position:absolute;top:0;right:0;border:none;margin:0;padding:10px;background:0 0;color:#72777c;cursor:pointer;text-decoration:none}body.rtl a.tsf-dismiss{right:initial;left:0}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}.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}body.rtl #sf-title-offset{left:initial;right:0}#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}body.rtl #tsf-title-placeholder,body.rtl #tsf-title-placeholder-prefix{left:initial;right:0}#tsf-title-placeholder{display:none}.fixed .column-tsf-seo-bar-wrap{width:11%}.tsf-seo-bar{display:block;width:95%;max-width:190px;padding:0}.tsf-seo-bar-inner-wrap{display:flex;flex-direction:row;flex:1 1 auto;flex-wrap:wrap;justify-content:flex-start}.tsf-seo-bar-section-wrap{min-width:2em;flex:1 1 auto}.tsf-seo-bar-item{display:block;color:#fff;text-align:center;border:1px solid rgba(0,0,0,.1);text-shadow:0 0 3px rgba(0,0,0,.5)}.tsf-seo-bar-item:focus{outline:0;box-shadow:0 0 0 1px currentColor inset}body.no-js .tsf-seo-bar-item{cursor:default}.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-seo-bar-wrap.column-tsf-seo-bar-temp{overflow:initial!important;min-width:160px}#col-container,#col-right{overflow:initial}.tsf-help{font-weight:400}.tsf-notice{clear:both}.tsf-flex{box-sizing:border-box;display:flex;flex:1 1 auto;flex-flow:column wrap;justify-content:flex-start}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-select-wrap{margin-top:7px;margin-bottom:14px}.tsf-select-wrap:last-of-type{margin-bottom:0}.tsf-select-block>select{margin-top:7px;margin-bottom:14px;display:block}.tsf-select-block:last-of-type>select{margin-bottom: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}body.rtl .tsf-counter .tsf-aja{margin-left:0;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;content:""}.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}.tsf-remove-image-button.button,.tsf-set-image-button.button{margin-right:8px}body.rtl .tsf-remove-image-button.button,body.rtl .tsf-set-image-button.button{margin-right:0;margin-left:8px}.tsf-image-preview{line-height:inherit;vertical-align:text-bottom}#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{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{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){.notice.tsf-notice,.wp-core-ui .notice.tsf-notice{padding-right:46px}body.rtl .notice.tsf-notice,body.rtl.wp-core-ui .notice.tsf-notice{padding-right:10px;padding-left:46px}.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}}@media screen and (max-width:642px){.tsf-nav-desktop{display:none}}@-moz-document url-prefix(){input.tsf-default-selected{box-shadow:0 0 0 1px #1c9d38}input.tsf-warning-selected{box-shadow:0 0 0 1px #dd3811}}
lib/js/media.js CHANGED
@@ -113,7 +113,7 @@ window.tsfMedia = function( $ ) {
113
};
114
115
cropper.control = {
116
- 'params' : {
117
flex_width: _states.isFlex ? 4096 : 0,
118
flex_height: _states.isFlex ? 4096 : 0,
119
width: _states.suggestedWidth,
@@ -185,7 +185,7 @@ window.tsfMedia = function( $ ) {
185
'swing'
186
);
187
188
- _appendRemoveButton( $button, { 'id': inputID, 'type': inputType }, true );
189
tsfAys && tsfAys.registerChange();
190
};
191
frame.off( 'skippedcrop cropped', onDone );
@@ -600,6 +600,8 @@ window.tsfMedia = function( $ ) {
600
* Sets up jQuery image editor cache.
601
*
602
* @since 3.1.0
603
* @access private
604
*
605
* @function
113
};
114
115
cropper.control = {
116
+ params: {
117
flex_width: _states.isFlex ? 4096 : 0,
118
flex_height: _states.isFlex ? 4096 : 0,
119
width: _states.suggestedWidth,
185
'swing'
186
);
187
188
+ _appendRemoveButton( $button, { id: inputID, type: inputType }, true );
189
tsfAys && tsfAys.registerChange();
190
};
191
frame.off( 'skippedcrop cropped', onDone );
600
* Sets up jQuery image editor cache.
601
*
602
* @since 3.1.0
603
+ * TODO set a callback.
604
+ * @see tsfemMedia.setupImageEditorActions() (Extension Manager plugin)
605
* @access private
606
*
607
* @function
lib/js/settings.js CHANGED
@@ -755,13 +755,14 @@ window.tsfSettings = function( $ ) {
755
* You shouldn't call this.
756
*
757
* @since 4.0.0
758
* @access protected
759
*
760
* @function
761
* @return {undefined}
762
*/
763
load: () => {
764
- $( 'div.updated, div.error, div.notice, .notice-error, .notice-warning' ).insertAfter( '.tsf-top-wrap' )
765
766
$( document.body ).on( 'tsf-onload', _loadSettings );
767
$( document.body ).on( 'tsf-ready', _readySettings );
755
* You shouldn't call this.
756
*
757
* @since 4.0.0
758
+ * @since 4.0.3 Now also displaces notice-info.
759
* @access protected
760
*
761
* @function
762
* @return {undefined}
763
*/
764
load: () => {
765
+ $( 'div.updated, div.error, div.notice, .notice-error, .notice-warning, .notice-info' ).insertAfter( '.tsf-top-wrap' )
766
767
$( document.body ).on( 'tsf-onload', _loadSettings );
768
$( document.body ).on( 'tsf-ready', _readySettings );
lib/js/settings.min.js CHANGED
@@ -1 +1 @@
1
- 'use strict';window.tsfSettings=function(a){const b="undefined"!=typeof tsfSettingsL10n&&tsfSettingsL10n,c=()=>{const b=b=>{a(b.target).is(":checked")?(a(".tsf-pixel-counter-wrap").show(),tsfC.triggerCounterUpdate()):a(".tsf-pixel-counter-wrap").hide()};a("#autodescription-site-settings\\[display_character_counter\\]").on("click",b),a("#autodescription-site-settings\\[display_pixel_counter\\]").on("click",b)},d=()=>{let b=a(".tsf-color-picker");b.length&&a.each(b,(b,c)=>{let d=a(c),e="",f=d.data("tsf-default-color");d.wpColorPicker({defaultColor:f,width:238,change:()=>{e=d.wpColorPicker("color"),""===e&&(e=f),d.val(e),tsfAys.registerChange()},clear:()=>{f.length&&(d.val(f),d.closest(".wp-picker-container").find(".wp-color-result").css("backgroundColor",f)),tsfAys.registerChange()},palettes:!1})})},e=()=>{let b=document.getElementById("#autodescription-site-settings[title_rem_additions]");a(b).on("change",()=>{let c=a(".tsf-title-additions-js");a(b).is(":checked")?c.css("display","none"):c.css("display","inline")}),a(b).trigger("change");a("#tsf-title-location input").on("click",b=>{let c=a(".tsf-title-additions-example-left"),d=a(".tsf-title-additions-example-right");"right"===a(b.target).val()?(c.css("display","none"),d.css("display","inline")):(c.css("display","inline"),d.css("display","none"))});a("#tsf-title-prefixes-toggle :input").on("click",b=>{let c=a(b.target),d=a(".tsf-title-prefix-example");c.is(":checked")?d.css("display","none"):d.css("display","inline")});a("#tsf-title-separator :input").on("click",b=>{let c=b.target.value,d="";switch(c){case"pipe":d="|";break;default:d=a("<div/>").html("&"+c+";").text();}a(".tsf-sep-js").text(" "+d+" "),a(window).trigger("tsf-title-sep-updated",[d])})},f=()=>{const c=document.getElementById("autodescription-site-settings[homepage_title]"),d=document.getElementById("autodescription-site-settings[homepage_title_tagline]"),e=document.getElementById("autodescription-site-settings[homepage_tagline]"),f=tsf.escapeString(b.i18n.protectedTitle),g=tsf.escapeString(b.i18n.privateTitle);tsfTitle.setInputElement(c);const h=()=>{let b=tsfTitle.getState("additionPlacement"),c="after";tsf.l10n.states.isRTL?"right"===a("#tsf-home-title-location input:checked").val()&&(c="before"):"left"===a("#tsf-home-title-location input:checked").val()&&(c="before"),c!==b&&tsfTitle.updateState("additionPlacement",c)};h(),a("#tsf-home-title-location").on("click",":input",h);const i=a=>{let b=tsfTitle.getState("prefixValue"),c="";switch(a){case"password":c=f;break;case"private":c=g;break;default:case"public":c="";}c!==b&&tsfTitle.updateState("prefixValue",c)};b.states.isFrontPrivate?i("private"):b.states.isFrontProtected&&i("password");a(c).on("input.tsfInputTitle",b=>{let c=a(".tsf-custom-title-js"),d=tsf.decodeEntities(tsf.sDoubleSpace(b.target.value.trim()));d.length?c.html(tsf.escapeString(d)):c.html(tsf.escapeString(tsf.decodeEntities(tsfTitle.getState("defaultTitle"))))}),a(c).trigger("input.tsfInputTitle");let j,k=a(".tsf-custom-tagline-js");const l=()=>{clearTimeout(j),j=setTimeout(()=>{let b=tsfTitle.getState("additionValue");b=tsf.decodeEntities(tsf.sDoubleSpace(b.trim())),b.length&&tsfTitle.getState("useTagline")?(k.html(tsf.escapeString(b)),a(".tsf-custom-blogname-js").show()):a(".tsf-custom-blogname-js").hide()})};a(d).on("input.tsfInputTagline",()=>{let a=tsfTitle.getState("additionValue"),b=d.value.trim();b.length||(b=d.placeholder||""),b=tsf.escapeString(tsf.decodeEntities(b.trim())),a!==b&&(tsfTitle.updateState("additionValue",b),l())}),a(d).trigger("input.tsfInputTagline");a(e).on("change.tsfToggleTagline",a=>{let b=!1;a.target.checked?(b=!0,d.readOnly=!1):(b=!1,d.readOnly=!0),tsfTitle.updateState("useTagline",b),l()}),a(e).trigger("change.tsfToggleTagline");a(window).on("tsf-title-sep-updated",(a,b)=>{tsfTitle.updateState("separator",b)}),tsfTitle.enqueueUnregisteredInputTrigger()},g=()=>{tsfDescription.setInputElement(document.getElementById("autodescription-site-settings[homepage_description]")),tsfDescription.enqueueUnregisteredInputTrigger()},h=()=>{const b=()=>{tsfTitle.enqueueUnregisteredInputTrigger(),tsfDescription.enqueueUnregisteredInputTrigger()};a(document).on("postbox-toggled",function(a,c){if("autodescription-homepage-settings"===c.id){let a=c.querySelector(".inside");0<a.offsetHeight&&0<a.offsetWidth&&b()}}),a("#tsf-homepage-tab-general").on("tsf-tab-toggled",tsfTitle.enqueueUnregisteredInputTrigger)},i=()=>{const b=a("#autodescription-site-settings\\[set_copyright_directives\\]"),c=a("#autodescription-site-settings\\[max_snippet_length\\], #autodescription-site-settings\\[max_image_preview\\], #autodescription-site-settings\\[max_video_preview\\]");if(b.length&&c.length){b.on("change.tsfToggleDirectives",b=>{b.target.checked?(c.prop("disabled",!1),a(".tsf-toggle-directives-surrogate").remove()):(c.prop("disabled",!0),c.each((b,c)=>{a("<input />").attr("type","hidden").attr("name",c.name||"").val(c.value||0).addClass("tsf-toggle-directives-surrogate").insertAfter(c)}))}),b.trigger("change.tsfToggleDirectives")}},j=()=>{const b=a("#autodescription-site-settings\\[google_verification\\], #autodescription-site-settings\\[bing_verification\\], #autodescription-site-settings\\[yandex_verification\\], #autodescription-site-settings\\[pint_verification\\]");if(b.length){const a=a=>{let b=a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData("text")||void 0;if(b){let c=/<meta[^>]+content=(\"|\')?([^\"\'>\s]+)\1?.*?>/i.exec(b);c&&2 in c&&"string"==typeof c[2]&&c[2].length&&(a.stopPropagation(),a.preventDefault(),a.target.value=c[2],tsfAys.registerChange())}};b.on("paste",a)}},k=()=>{c(),e(),f(),g(),h(),i(),j(),d()},l=()=>{tsfSocial.initTitleInputs({ref:document.getElementById("tsf-title-reference"),meta:document.getElementById("autodescription-site-settings[homepage_title]"),og:document.getElementById("autodescription-site-settings[homepage_og_title]"),tw:document.getElementById("autodescription-site-settings[homepage_twitter_title]")}),tsfSocial.initDescriptionInputs({ref:document.getElementById("tsf-description-reference"),meta:document.getElementById("autodescription-site-settings[homepage_description]"),og:document.getElementById("autodescription-site-settings[homepage_og_description]"),tw:document.getElementById("autodescription-site-settings[homepage_twitter_description]")})},m=()=>confirm(b.i18n.confirmReset),n=()=>{a(".tsf-tabs-radio").on("change",(b,c)=>{let d=a(b.target);if(!d.is(":checked"))return;c="boolean"==typeof c&&c;let e=b.target.id,f=b.target.name,g="tsf-active-tab-content",h="tsf-tab-active",i=a("."+g),j=d.closest(".tsf-nav-tab-wrapper").find("."+h),k=i.find("input:invalid, select:invalid, textarea:invalid");if(k.length)return k[0].reportValidity(),j.prop("checked",!0),d.prop("checked",!1),b.stopPropagation(),b.preventDefault(),!1;let l=a("#"+e+"-content");if(j.removeClass(h),j.siblings("label").removeClass("tsf-no-focus-ring"),d.addClass(h),c){let b=a("."+f+"-content");b.removeClass(g).hide(),l.addClass(g).show(),a("#"+e).trigger("tsf-tab-toggled")}else if(l.length&&!l.is(i)){let b=a("."+f+"-content");b.fadeOut(150,function(){a(this).removeClass(g)}),setTimeout(()=>{l.addClass(g).fadeIn(250)},150),setTimeout(()=>{a("#"+e).trigger("tsf-tab-toggled")},175)}});a(".tsf-nav-tab-wrapper").on("click.tsfNavTab",".tsf-nav-tab",a=>{a.currentTarget.classList.add("tsf-no-focus-ring")});a(document.body).on("tsf-ready",()=>{a(".tsf-tabs-radio:checked").each((b,c)=>{a(c).trigger("change",[!0])})})};return Object.assign({load:()=>{a("div.updated, div.error, div.notice, .notice-error, .notice-warning").insertAfter(".tsf-top-wrap"),a(document.body).on("tsf-onload",k),a(document.body).on("tsf-ready",l),a(".tsf-js-confirm-reset").on("click",m),n()}},{},{l10n:b})}(jQuery),jQuery(window.tsfSettings.load);
1
+ 'use strict';window.tsfSettings=function(a){const b="undefined"!=typeof tsfSettingsL10n&&tsfSettingsL10n,c=()=>{const b=b=>{a(b.target).is(":checked")?(a(".tsf-pixel-counter-wrap").show(),tsfC.triggerCounterUpdate()):a(".tsf-pixel-counter-wrap").hide()};a("#autodescription-site-settings\\[display_character_counter\\]").on("click",b),a("#autodescription-site-settings\\[display_pixel_counter\\]").on("click",b)},d=()=>{let b=a(".tsf-color-picker");b.length&&a.each(b,(b,c)=>{let d=a(c),e="",f=d.data("tsf-default-color");d.wpColorPicker({defaultColor:f,width:238,change:()=>{e=d.wpColorPicker("color"),""===e&&(e=f),d.val(e),tsfAys.registerChange()},clear:()=>{f.length&&(d.val(f),d.closest(".wp-picker-container").find(".wp-color-result").css("backgroundColor",f)),tsfAys.registerChange()},palettes:!1})})},e=()=>{let b=document.getElementById("#autodescription-site-settings[title_rem_additions]");a(b).on("change",()=>{let c=a(".tsf-title-additions-js");a(b).is(":checked")?c.css("display","none"):c.css("display","inline")}),a(b).trigger("change");a("#tsf-title-location input").on("click",b=>{let c=a(".tsf-title-additions-example-left"),d=a(".tsf-title-additions-example-right");"right"===a(b.target).val()?(c.css("display","none"),d.css("display","inline")):(c.css("display","inline"),d.css("display","none"))});a("#tsf-title-prefixes-toggle :input").on("click",b=>{let c=a(b.target),d=a(".tsf-title-prefix-example");c.is(":checked")?d.css("display","none"):d.css("display","inline")});a("#tsf-title-separator :input").on("click",b=>{let c=b.target.value,d="";switch(c){case"pipe":d="|";break;default:d=a("<div/>").html("&"+c+";").text();}a(".tsf-sep-js").text(" "+d+" "),a(window).trigger("tsf-title-sep-updated",[d])})},f=()=>{const c=document.getElementById("autodescription-site-settings[homepage_title]"),d=document.getElementById("autodescription-site-settings[homepage_title_tagline]"),e=document.getElementById("autodescription-site-settings[homepage_tagline]"),f=tsf.escapeString(b.i18n.protectedTitle),g=tsf.escapeString(b.i18n.privateTitle);tsfTitle.setInputElement(c);const h=()=>{let b=tsfTitle.getState("additionPlacement"),c="after";tsf.l10n.states.isRTL?"right"===a("#tsf-home-title-location input:checked").val()&&(c="before"):"left"===a("#tsf-home-title-location input:checked").val()&&(c="before"),c!==b&&tsfTitle.updateState("additionPlacement",c)};h(),a("#tsf-home-title-location").on("click",":input",h);const i=a=>{let b=tsfTitle.getState("prefixValue"),c="";switch(a){case"password":c=f;break;case"private":c=g;break;default:case"public":c="";}c!==b&&tsfTitle.updateState("prefixValue",c)};b.states.isFrontPrivate?i("private"):b.states.isFrontProtected&&i("password");a(c).on("input.tsfInputTitle",b=>{let c=a(".tsf-custom-title-js"),d=tsf.decodeEntities(tsf.sDoubleSpace(b.target.value.trim()));d.length?c.html(tsf.escapeString(d)):c.html(tsf.escapeString(tsf.decodeEntities(tsfTitle.getState("defaultTitle"))))}),a(c).trigger("input.tsfInputTitle");let j,k=a(".tsf-custom-tagline-js");const l=()=>{clearTimeout(j),j=setTimeout(()=>{let b=tsfTitle.getState("additionValue");b=tsf.decodeEntities(tsf.sDoubleSpace(b.trim())),b.length&&tsfTitle.getState("useTagline")?(k.html(tsf.escapeString(b)),a(".tsf-custom-blogname-js").show()):a(".tsf-custom-blogname-js").hide()})};a(d).on("input.tsfInputTagline",()=>{let a=tsfTitle.getState("additionValue"),b=d.value.trim();b.length||(b=d.placeholder||""),b=tsf.escapeString(tsf.decodeEntities(b.trim())),a!==b&&(tsfTitle.updateState("additionValue",b),l())}),a(d).trigger("input.tsfInputTagline");a(e).on("change.tsfToggleTagline",a=>{let b=!1;a.target.checked?(b=!0,d.readOnly=!1):(b=!1,d.readOnly=!0),tsfTitle.updateState("useTagline",b),l()}),a(e).trigger("change.tsfToggleTagline");a(window).on("tsf-title-sep-updated",(a,b)=>{tsfTitle.updateState("separator",b)}),tsfTitle.enqueueUnregisteredInputTrigger()},g=()=>{tsfDescription.setInputElement(document.getElementById("autodescription-site-settings[homepage_description]")),tsfDescription.enqueueUnregisteredInputTrigger()},h=()=>{const b=()=>{tsfTitle.enqueueUnregisteredInputTrigger(),tsfDescription.enqueueUnregisteredInputTrigger()};a(document).on("postbox-toggled",function(a,c){if("autodescription-homepage-settings"===c.id){let a=c.querySelector(".inside");0<a.offsetHeight&&0<a.offsetWidth&&b()}}),a("#tsf-homepage-tab-general").on("tsf-tab-toggled",tsfTitle.enqueueUnregisteredInputTrigger)},i=()=>{const b=a("#autodescription-site-settings\\[set_copyright_directives\\]"),c=a("#autodescription-site-settings\\[max_snippet_length\\], #autodescription-site-settings\\[max_image_preview\\], #autodescription-site-settings\\[max_video_preview\\]");if(b.length&&c.length){b.on("change.tsfToggleDirectives",b=>{b.target.checked?(c.prop("disabled",!1),a(".tsf-toggle-directives-surrogate").remove()):(c.prop("disabled",!0),c.each((b,c)=>{a("<input />").attr("type","hidden").attr("name",c.name||"").val(c.value||0).addClass("tsf-toggle-directives-surrogate").insertAfter(c)}))}),b.trigger("change.tsfToggleDirectives")}},j=()=>{const b=a("#autodescription-site-settings\\[google_verification\\], #autodescription-site-settings\\[bing_verification\\], #autodescription-site-settings\\[yandex_verification\\], #autodescription-site-settings\\[pint_verification\\]");if(b.length){const a=a=>{let b=a.originalEvent.clipboardData&&a.originalEvent.clipboardData.getData("text")||void 0;if(b){let c=/<meta[^>]+content=(\"|\')?([^\"\'>\s]+)\1?.*?>/i.exec(b);c&&2 in c&&"string"==typeof c[2]&&c[2].length&&(a.stopPropagation(),a.preventDefault(),a.target.value=c[2],tsfAys.registerChange())}};b.on("paste",a)}},k=()=>{c(),e(),f(),g(),h(),i(),j(),d()},l=()=>{tsfSocial.initTitleInputs({ref:document.getElementById("tsf-title-reference"),meta:document.getElementById("autodescription-site-settings[homepage_title]"),og:document.getElementById("autodescription-site-settings[homepage_og_title]"),tw:document.getElementById("autodescription-site-settings[homepage_twitter_title]")}),tsfSocial.initDescriptionInputs({ref:document.getElementById("tsf-description-reference"),meta:document.getElementById("autodescription-site-settings[homepage_description]"),og:document.getElementById("autodescription-site-settings[homepage_og_description]"),tw:document.getElementById("autodescription-site-settings[homepage_twitter_description]")})},m=()=>confirm(b.i18n.confirmReset),n=()=>{a(".tsf-tabs-radio").on("change",(b,c)=>{let d=a(b.target);if(!d.is(":checked"))return;c="boolean"==typeof c&&c;let e=b.target.id,f=b.target.name,g="tsf-active-tab-content",h="tsf-tab-active",i=a("."+g),j=d.closest(".tsf-nav-tab-wrapper").find("."+h),k=i.find("input:invalid, select:invalid, textarea:invalid");if(k.length)return k[0].reportValidity(),j.prop("checked",!0),d.prop("checked",!1),b.stopPropagation(),b.preventDefault(),!1;let l=a("#"+e+"-content");if(j.removeClass(h),j.siblings("label").removeClass("tsf-no-focus-ring"),d.addClass(h),c){let b=a("."+f+"-content");b.removeClass(g).hide(),l.addClass(g).show(),a("#"+e).trigger("tsf-tab-toggled")}else if(l.length&&!l.is(i)){let b=a("."+f+"-content");b.fadeOut(150,function(){a(this).removeClass(g)}),setTimeout(()=>{l.addClass(g).fadeIn(250)},150),setTimeout(()=>{a("#"+e).trigger("tsf-tab-toggled")},175)}});a(".tsf-nav-tab-wrapper").on("click.tsfNavTab",".tsf-nav-tab",a=>{a.currentTarget.classList.add("tsf-no-focus-ring")});a(document.body).on("tsf-ready",()=>{a(".tsf-tabs-radio:checked").each((b,c)=>{a(c).trigger("change",[!0])})})};return Object.assign({load:()=>{a("div.updated, div.error, div.notice, .notice-error, .notice-warning, .notice-info").insertAfter(".tsf-top-wrap"),a(document.body).on("tsf-onload",k),a(document.body).on("tsf-ready",l),a(".tsf-js-confirm-reset").on("click",m),n()}},{},{l10n:b})}(jQuery),jQuery(window.tsfSettings.load);
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
=== The SEO Framework ===
2
Contributors: Cybr
3
- Tags: SEO, XML Sitemap, Google, Open Graph, Schema.org, Twitter
4
Requires at least: 4.9.0
5
- Tested up to: 5.2
6
Requires PHP: 5.6.0
7
- Stable tag: 4.0.2
8
License: GPLv3
9
License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
@@ -126,7 +126,7 @@ The SEO Framework works on many things without notifying you, because the best s
126
127
In a few words: The SEO Framework allows search engines to do what they've been doing for the past 20 years.
128
129
- When you activate The SEO Framework on any site, you automatically grant rights to content aggregators, among which are Google, Bing, and Yandex, to obtain information from the site, including written work, images, audio, and video. You can control these rights via the robots-meta settings brought by this plugin. Your rights and the effectiveness of these settings are subject to the region and language of your website, and the physical or virtual origin of the platform and their potential users through which your website's information is obtained and shared. It is up to the aggregator to honor your rights and the requests brought via The SEO Framework.
130
131
If you wish to learn more, please refer to the website of the [EU commission on copyright](https://ec.europa.eu/digital-single-market/en/modernisation-eu-copyright-rules). These rulings may propagate its effects through regions outside the EU.
132
@@ -173,7 +173,7 @@ This plugin is all-inclusive. It's 100% freeware; not crippleware.
173
174
= Is there a premium version? =
175
176
- No.
177
178
However, we do offer many free and paid extensions that help support this free plugin. We provide these via our free [Extension Manager plugin](https://theseoframework.com/?p=2760).
179
@@ -188,7 +188,7 @@ We'll try to get back to you within 72 hours. Typically, we reply within a day.
188
Any input is much appreciated, and everything will be considered.
189
Please visit the [GitHub project page](https://github.com/sybrew/the-seo-framework) to submit issues or even pull requests.
190
191
- Feel free to [contribute](https://tsf.fyi/contributing)!
192
193
= What do the colors tell me? =
194
@@ -227,6 +227,14 @@ If you wish to display breadcrumbs, then your theme should provide this. Alterna
227
228
== Changelog ==
229
230
= 4.0.2 =
231
232
France recently amended its [copyright laws](https://www.legifrance.gouv.fr/eli/loi/2019/7/24/MICX1902858L/jo/texte). In short, in France, it's now forbidden for content aggregators to display excerpts and previews of your content when no consent is given.
1
=== The SEO Framework ===
2
Contributors: Cybr
3
+ Tags: seo, xml sitemap, google search, open graph, schema.org, twitter card, performance
4
Requires at least: 4.9.0
5
+ Tested up to: 5.3
6
Requires PHP: 5.6.0
7
+ Stable tag: 4.0.3
8
License: GPLv3
9
License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
126
127
In a few words: The SEO Framework allows search engines to do what they've been doing for the past 20 years.
128
129
+ When you activate The SEO Framework on any site, you automatically grant rights to content aggregators, among which are Google, Bing, and Yandex, to obtain and use information from the site, including written work, images, audio, and video. You can control these rights via the robots-meta settings brought by this plugin. Your rights and the effectiveness of these settings are subject to the region and language of your website, and the physical or virtual origin of the platform and their potential users through which your website's information is obtained and shared. It is up to the aggregator to honor your rights and the requests brought via The SEO Framework.
130
131
If you wish to learn more, please refer to the website of the [EU commission on copyright](https://ec.europa.eu/digital-single-market/en/modernisation-eu-copyright-rules). These rulings may propagate its effects through regions outside the EU.
132
173
174
= Is there a premium version? =
175
176
+ No. We treat this plugin as a premium plugin already.
177
178
However, we do offer many free and paid extensions that help support this free plugin. We provide these via our free [Extension Manager plugin](https://theseoframework.com/?p=2760).
179
188
Any input is much appreciated, and everything will be considered.
189
Please visit the [GitHub project page](https://github.com/sybrew/the-seo-framework) to submit issues or even pull requests.
190
191
+ Learn more [about contributing](https://tsf.fyi/contributing).
192
193
= What do the colors tell me? =
194
227
228
== Changelog ==
229
230
+ = 4.0.3 =
231
+
232
+ Google Search has a new bug in their parser, which causes pages to be deindexed unintentionally when a specific combination of robots-settings are used. To work around this bug, we changed how the recently introduced copyright directive settings work.
233
+
234
+ For more information, see our KB entry on why the [Maximum Image Preview Size setting may now be ignored](https://kb.theseoframework.com/?p=82).
235
+
236
+ We also fixed three bugs and added [minor improvements](https://theseoframework.com/?p=3379#detailed).
237
+
238
= 4.0.2 =
239
240
France recently amended its [copyright laws](https://www.legifrance.gouv.fr/eli/loi/2019/7/24/MICX1902858L/jo/texte). In short, in France, it's now forbidden for content aggregators to display excerpts and previews of your content when no consent is given.