Bump plugins

This commit is contained in:
ponas committed 2016-12-17 18:15:30 +01:00
1 parent 9aa3826eb6
commit d9ffb910f2
260 files changed
+4866 -3636

No files matched your search

@@ -26,110 +26,101 @@ add_action('admin_init','duplicate_post_plugin_upgrade');
function duplicate_post_plugin_upgrade() {
$installed_version = duplicate_post_get_installed_version();
if ( $installed_version==duplicate_post_get_current_version() )
return;
if (empty($installed_version)) { // first install
// Add capability to admin and editors
if (empty($installed_version)) {
// Get default roles
$default_roles = array(
$default_roles = array(
3 => 'editor',
8 => 'administrator',
);
// Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
foreach ($default_roles as $level => $name){
$role = get_role($name);
if(!empty($role)) $role->add_cap( 'copy_posts' );
}
} else {
$min_user_level = get_option('duplicate_post_copy_user_level');
add_option('duplicate_post_copytitle','1');
add_option('duplicate_post_copydate','0');
add_option('duplicate_post_copystatus','0');
add_option('duplicate_post_copyslug','1');
add_option('duplicate_post_copyexcerpt','1');
add_option('duplicate_post_copycontent','1');
add_option('duplicate_post_copypassword','0');
add_option('duplicate_post_copyattachments','0');
add_option('duplicate_post_copychildren','0');
add_option('duplicate_post_copycomments','0');
add_option('duplicate_post_taxonomies_blacklist',array());
add_option('duplicate_post_blacklist','');
add_option('duplicate_post_types_enabled',array('post', 'page'));
add_option('duplicate_post_show_row','1');
add_option('duplicate_post_show_adminbar','1');
add_option('duplicate_post_show_submitbox','1');
} else if ( $installed_version==duplicate_post_get_current_version() ) { //re-install
// do nothing
} else { //upgrade form previous version
// delete old, obsolete options
delete_option('duplicate_post_admin_user_level');
delete_option('duplicate_post_create_user_level');
delete_option('duplicate_post_view_user_level');
delete_option('dp_notice');
$installed_version_numbers = explode('.', $installed_version);
if($installed_version_numbers[0] == 2){ // upgrading from 2.*
/*
* Convert old userlevel option to new capability scheme
*/
// Get old duplicate_post_copy_user_level option
$min_user_level = get_option('duplicate_post_copy_user_level');
if (!empty($min_user_level)){
// Get default roles
$default_roles = array(
1 => 'contributor',
2 => 'author',
3 => 'editor',
8 => 'administrator',
);
// Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
foreach ($default_roles as $level => $name){
$role = get_role($name);
if ($role && $min_user_level <= $level)
$role->add_cap( 'copy_posts' );
}
// delete old option
delete_option('duplicate_post_copy_user_level');
if (!empty($min_user_level)){
// Get default roles
$default_roles = array(
1 => 'contributor',
2 => 'author',
3 => 'editor',
8 => 'administrator',
);
// Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
foreach ($default_roles as $level => $name){
$role = get_role($name);
if ($role && $min_user_level <= $level)
$role->add_cap( 'copy_posts' );
}
add_option('duplicate_post_copytitle','1');
add_option('duplicate_post_copydate','0');
add_option('duplicate_post_copystatus','0');
add_option('duplicate_post_copyslug','1');
add_option('duplicate_post_copyexcerpt','1');
add_option('duplicate_post_copycontent','1');
add_option('duplicate_post_copypassword','0');
add_option('duplicate_post_copyattachments','0');
add_option('duplicate_post_copychildren','0');
add_option('duplicate_post_copycomments','0');
add_option('duplicate_post_taxonomies_blacklist',array());
add_option('duplicate_post_blacklist','');
add_option('duplicate_post_types_enabled',array('post', 'page'));
add_option('duplicate_post_show_row','1');
add_option('duplicate_post_show_adminbar','1');
add_option('duplicate_post_show_submitbox','1');
// show notice about new features
add_site_option('duplicate_post_show_notice','1');
} else if($installed_version_numbers[0] == 3){ // upgrading from 3.*
// hide notice, we assume people already know of new features
delete_option('duplicate_post_show_notice', 0);
update_site_option('duplicate_post_show_notice', 0);
delete_option('duplicate_post_copy_user_level');
}
}
// Update version number
add_option('duplicate_post_copytitle','1');
add_option('duplicate_post_copydate','0');
add_option('duplicate_post_copystatus','0');
add_option('duplicate_post_copyslug','1');
add_option('duplicate_post_copyexcerpt','1');
add_option('duplicate_post_copycontent','1');
add_option('duplicate_post_copythumbnail','1');
add_option('duplicate_post_copytemplate','1');
add_option('duplicate_post_copyformat','1');
add_option('duplicate_post_copyauthor','0');
add_option('duplicate_post_copypassword','0');
add_option('duplicate_post_copyattachments','0');
add_option('duplicate_post_copychildren','0');
add_option('duplicate_post_copycomments','0');
add_option('duplicate_post_copymenuorder','1');
add_option('duplicate_post_taxonomies_blacklist',array());
add_option('duplicate_post_blacklist','');
add_option('duplicate_post_types_enabled',array('post', 'page'));
add_option('duplicate_post_show_row','1');
add_option('duplicate_post_show_adminbar','1');
add_option('duplicate_post_show_submitbox','1');
add_option('duplicate_post_show_bulkactions','1');
$taxonomies_blacklist = get_option('duplicate_post_taxonomies_blacklist');
if ($taxonomies_blacklist == "") $taxonomies_blacklist = array();
if(in_array('post_format',$taxonomies_blacklist)){
update_option('duplicate_post_copyformat', 0);
$taxonomies_blacklist = array_diff($taxonomies_blacklist, array('post_format'));
update_option('duplicate_post_taxonomies_blacklist', $taxonomies_blacklist);
}
$meta_blacklist = explode(",",get_option('duplicate_post_blacklist'));
if ($meta_blacklist == "") $meta_blacklist = array();
$meta_blacklist = array_map('trim', $meta_blacklist);
if(in_array('_wp_page_template', $meta_blacklist)){
update_option('duplicate_post_copytemplate', 0);
$meta_blacklist = array_diff($meta_blacklist, array('_wp_page_template'));
}
if(in_array('_thumbnail_id', $meta_blacklist)){
update_option('duplicate_post_copythumbnail', 0);
$meta_blacklist = array_diff($meta_blacklist, array('_thumbnail_id'));
}
update_option('duplicate_post_blacklist', implode(',',$meta_blacklist));
delete_option('duplicate_post_admin_user_level');
delete_option('duplicate_post_create_user_level');
delete_option('duplicate_post_view_user_level');
delete_option('dp_notice');
delete_option('duplicate_post_version');
update_site_option( 'duplicate_post_version', duplicate_post_get_current_version() );
delete_option('duplicate_post_show_notice', 0);
update_site_option('duplicate_post_show_notice', 1);
}
if (get_option('duplicate_post_show_row') == 1){
@@ -145,9 +136,14 @@ if (get_site_option('duplicate_post_show_notice') == 1){
function duplicate_post_show_update_notice() {
if(!current_user_can( 'manage_options')) return;
$class = 'notice is-dismissible';
$message = sprintf(__('<strong>Duplicate Post has been greatly redesigned in its options page.</strong> Please <a href="%s">review the settings</a> to make sure it works as you expect.', 'duplicate-post'), admin_url('options-general.php?page=duplicatepost'));
$message .= '<br/>';
$message .= '<a href="http://lopo.it/duplicate-post-plugin">'.__('Donate', 'duplicate-post').' (10¢) </a> | <a id="duplicate-post-dismiss-notice" href="javascript:duplicate_post_dismiss_notice();">'.__('Dismiss this notice.').'</a>';
$message = '<strong>'.esc_html__('Duplicate Post has new features!', 'duplicate-post').'</strong><br/>';
$message .= '<em>'.esc_html__('Clone posts in bulk (WP 4.7+)', 'duplicate-post').' — '.esc_html__('Wildcards in custom field names', 'duplicate-post').' — '.esc_html__('Options for thumbnail, post format, post template, author, menu order', 'duplicate-post').'</em><br/>';
$message .= sprintf(__('Please <a href="%s">review the settings</a> to make sure it works as you expect.', 'duplicate-post'), admin_url('options-general.php?page=duplicatepost')).'<br/>';
$message .= '<strong>'.__('Help me develop the plugin and provide support by <a href="http://lopo.it/duplicate-post-plugin">donating even a small sum</a>.', 'duplicate-post').'</strong>';
global $wp_version;
if( version_compare($wp_version, '4.2') < 0 ){
$message .= ' | <a id="duplicate-post-dismiss-notice" href="javascript:duplicate_post_dismiss_notice();">'.__('Dismiss this notice.').'</a>';
}
echo '<div id="duplicate-post-notice" class="'.$class.'"><p>'.$message.'</p></div>';
echo "<script>
function duplicate_post_dismiss_notice(){
@@ -161,14 +157,18 @@ if (get_site_option('duplicate_post_show_notice') == 1){
}
jQuery(document).ready(function(){
jQuery('.notice-dismiss').click(function(){
jQuery('body').on('click', '.notice-dismiss', function(){
duplicate_post_dismiss_notice();
});
});
</script>";
}
add_action( 'admin_notices', 'duplicate_post_show_update_notice' );
if(is_multisite()){
add_action( 'network_admin_notices', 'duplicate_post_show_update_notice' );
} else {
add_action( 'admin_notices', 'duplicate_post_show_update_notice' );
}
add_action( 'wp_ajax_duplicate_post_dismiss_notice', 'duplicate_post_dismiss_notice' );
function duplicate_post_dismiss_notice() {
@@ -184,11 +184,11 @@ if (get_site_option('duplicate_post_show_notice') == 1){
function duplicate_post_make_duplicate_link_row($actions, $post) {
if (duplicate_post_is_current_user_allowed_to_copy() && duplicate_post_is_post_type_enabled($post->post_type)) {
$actions['clone'] = '<a href="'.duplicate_post_get_clone_post_link( $post->ID , 'display', false).'" title="'
. esc_attr(__("Clone this item", 'duplicate-post'))
. '">' . __('Clone', 'duplicate-post') . '</a>';
. esc_attr__("Clone this item", 'duplicate-post')
. '">' . esc_html__('Clone', 'duplicate-post') . '</a>';
$actions['edit_as_new_draft'] = '<a href="'. duplicate_post_get_clone_post_link( $post->ID ) .'" title="'
. esc_attr(__('Copy to a new draft', 'duplicate-post'))
. '">' . __('New Draft', 'duplicate-post') . '</a>';
. esc_attr__('Copy to a new draft', 'duplicate-post')
. '">' . esc_html__('New Draft', 'duplicate-post') . '</a>';
}
return $actions;
}
@@ -208,7 +208,7 @@ function duplicate_post_add_duplicate_post_button() {
?>
<div id="duplicate-action">
<a class="submitduplicate duplication"
href="<?php echo duplicate_post_get_clone_post_link( $_GET['post'] ) ?>"><?php _e('Copy to a new draft', 'duplicate-post'); ?>
href="<?php echo duplicate_post_get_clone_post_link( $_GET['post'] ) ?>"><?php esc_html_e('Copy to a new draft', 'duplicate-post'); ?>
</a>
</div>
<?php
@@ -243,7 +243,7 @@ function duplicate_post_add_removable_query_arg( $removable_query_args ){
*/
function duplicate_post_save_as_new_post($status = ''){
if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'duplicate_post_save_as_new_post' == $_REQUEST['action'] ) ) ) {
wp_die(__('No post to duplicate has been supplied!', 'duplicate-post'));
wp_die(esc_html__('No post to duplicate has been supplied!', 'duplicate-post'));
}
// Get the original post
@@ -253,9 +253,9 @@ function duplicate_post_save_as_new_post($status = ''){
// Copy the post and insert it
if (isset($post) && $post!=null) {
$new_id = duplicate_post_create_duplicate($post, $status);
if ($status == ''){
$sendback = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'cloned', 'ids'), wp_get_referer() );
$sendback = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'cloned', 'ids'), admin_url( 'edit.php?post_type='.$post->post_type) );
// Redirect to the post list screen
wp_redirect( add_query_arg( array( 'cloned' => 1, 'ids' => $post->ID), $sendback ) );
} else {
@@ -265,7 +265,7 @@ function duplicate_post_save_as_new_post($status = ''){
exit;
} else {
wp_die(__('Copy creation failed, could not find original:', 'duplicate-post') . ' ' . htmlspecialchars($id));
wp_die(esc_html__('Copy creation failed, could not find original:', 'duplicate-post') . ' ' . htmlspecialchars($id));
}
}
@@ -279,8 +279,16 @@ function duplicate_post_copy_post_taxonomies($new_id, $post) {
wp_set_object_terms( $new_id, NULL, 'category' );
$post_taxonomies = get_object_taxonomies($post->post_type);
// severl plugins just add support to post-formats but don't register post_format taxonomy
if(post_type_supports($post->post_type, 'post-formats') && !in_array('post_format', $post_taxonomies)){
$post_taxonomies[] = 'post_format';
}
$taxonomies_blacklist = get_option('duplicate_post_taxonomies_blacklist');
if ($taxonomies_blacklist == "") $taxonomies_blacklist = array();
if(get_option('duplicate_post_copyformat') == 0){
$taxonomies_blacklist[] = 'post_format';
}
$taxonomies = array_diff($post_taxonomies, $taxonomies_blacklist);
foreach ($taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post->ID, $taxonomy, array( 'orderby' => 'term_order' ));
@@ -299,25 +307,74 @@ function duplicate_post_copy_post_taxonomies($new_id, $post) {
function duplicate_post_copy_post_meta_info($new_id, $post) {
$post_meta_keys = get_post_custom_keys($post->ID);
if (empty($post_meta_keys)) return;
$meta_blacklist = explode(",",get_option('duplicate_post_blacklist'));
if ($meta_blacklist == "") $meta_blacklist = array();
$meta_blacklist = array_map('trim', $meta_blacklist);
$meta_blacklist = get_option('duplicate_post_blacklist');
if ($meta_blacklist == ""){
$meta_blacklist = array();
} else {
$meta_blacklist = explode(',', $meta_blacklist);
$meta_blacklist = array_filter($meta_blacklist);
$meta_blacklist = array_map('trim', $meta_blacklist);
}
$meta_blacklist[] = '_wpas_done_all'; //Jetpack Publicize
$meta_blacklist[] = '_wpas_done_'; //Jetpack Publicize
$meta_blacklist[] = '_wpas_mess'; //Jetpack Publicize
$meta_blacklist[] = '_edit_lock'; // edit lock
$meta_blacklist[] = '_edit_last'; // edit lock
$meta_keys = array_diff($post_meta_keys, $meta_blacklist);
if(get_option('duplicate_post_copytemplate') == 0){
$meta_blacklist[] = '_wp_page_template';
}
if(get_option('duplicate_post_copythumbnail') == 0){
$meta_blacklist[] = '_thumbnail_id';
}
$meta_blacklist = apply_filters( 'duplicate_post_blacklist_filter' , $meta_blacklist );
$meta_blacklist_string = '('.implode(')|(',$meta_blacklist).')';
if(strpos($meta_blacklist_string, '*') !== false){
$meta_blacklist_string = str_replace(array('*'), array('[a-zA-Z0-9_]*'), $meta_blacklist_string);
$meta_keys = array();
foreach($post_meta_keys as $meta_key){
if(!preg_match('#^'.$meta_blacklist_string.'$#', $meta_key))
$meta_keys[] = $meta_key;
}
} else {
$meta_keys = array_diff($post_meta_keys, $meta_blacklist);
}
$meta_keys = apply_filters( 'duplicate_post_meta_keys_filter', $meta_keys );
foreach ($meta_keys as $meta_key) {
$meta_values = get_post_custom_values($meta_key, $post->ID);
foreach ($meta_values as $meta_value) {
$meta_value = maybe_unserialize($meta_value);
add_post_meta($new_id, $meta_key, $meta_value);
add_post_meta($new_id, $meta_key, duplicate_post_wp_slash($meta_value));
}
}
}
/*
* Workaround for inconsistent wp_slash.
* Works only with WP 4.4+ (map_deep)
*/
function duplicate_post_addslashes_deep( $value ) {
if (function_exists('map_deep')){
return map_deep( $value, 'duplicate_post_addslashes_to_strings_only' );
} else {
return wp_slash( $value );
}
}
function duplicate_post_addslashes_to_strings_only( $value ) {
return is_string( $value ) ? addslashes( $value ) : $value;
}
function duplicate_post_wp_slash( $value ) {
return duplicate_post_addslashes_deep( $value );
}
/**
* Copy the attachments
*/
@@ -337,7 +394,7 @@ function duplicate_post_copy_attachments($new_id, $post){
continue;
}
$desc = addslashes($child->post_content);
$desc = wp_slash($child->post_content);
$file_array = array();
$file_array['name'] = basename($url);
@@ -352,17 +409,17 @@ function duplicate_post_copy_attachments($new_id, $post){
$new_post_author = wp_get_current_user();
$cloned_child = array(
'ID' => $new_attachment_id,
'post_title' => addslashes($child->post_title),
'post_exceprt' => addslashes($child->post_title),
'post_title' => $child->post_title,
'post_exceprt' => $child->post_title,
'post_author' => $new_post_author->ID
);
wp_update_post( $cloned_child );
wp_update_post( wp_slash($cloned_child) );
$alt_title = get_post_meta($child->ID, '_wp_attachment_image_alt', true);
if($alt_title) update_post_meta($new_attachment_id, '_wp_attachment_image_alt', $alt_title);
if($alt_title) update_post_meta($new_attachment_id, '_wp_attachment_image_alt', wp_slash($alt_title));
// if we have cloned the post thumbnail, set the copy as the thumbnail for the new post
if($old_thumbnail_id == $child->ID){
if(get_option('duplicate_post_copythumbnail') == 1 && $old_thumbnail_id == $child->ID){
set_post_thumbnail($new_id, $new_attachment_id);
}
@@ -447,10 +504,14 @@ add_action('dp_duplicate_page', 'duplicate_post_copy_post_taxonomies', 50, 2);
* Create a duplicate from a post
*/
function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
do_action('duplicate_post_pre_copy');
if (!duplicate_post_is_post_type_enabled($post->post_type) && $post->post_type != 'attachment')
wp_die(__('Copy features for this post type are not enabled in options page', 'duplicate-post'));
wp_die(esc_html__('Copy features for this post type are not enabled in options page', 'duplicate-post'));
$new_post_status = (empty($status))? $post->post_status: $status;
if ($post->post_type != 'attachment'){
$prefix = sanitize_text_field(get_option('duplicate_post_title_prefix'));
$suffix = sanitize_text_field(get_option('duplicate_post_title_suffix'));
@@ -468,13 +529,40 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
// empty title
$title = __('Untitled');
}
if (get_option('duplicate_post_copystatus') == 0) $status = 'draft';
}
$new_post_author = wp_get_current_user();
if (get_option('duplicate_post_copystatus') == 0){
$new_post_status = 'draft';
} else {
if ( 'publish' == $new_post_status || 'future' == $new_post_status ){
// check if the user has the right capability
if(is_post_type_hierarchical( $post->post_type )){
if(!current_user_can('publish_pages')){
$new_post_status = 'pending';
}
} else {
if(!current_user_can('publish_posts')){
$new_post_status = 'pending';
}
}
}
}
}
$menu_order = $post->menu_order;
$new_post_author = wp_get_current_user();
$new_post_author_id = $new_post_author->ID;
if ( get_option('duplicate_post_copyauthor') == '1' ){
// check if the user has the right capability
if(is_post_type_hierarchical( $post->post_type )){
if(current_user_can('edit_others_pages')){
$new_post_author_id = $post->post_author;
}
} else {
if(current_user_can('edit_others_posts')){
$new_post_author_id = $post->post_author;
}
}
}
$menu_order = (get_option('duplicate_post_copymenuorder') == '1') ? $post->menu_order : 0;
$increase_menu_order_by = get_option('duplicate_post_increase_menu_order_by');
if(!empty($increase_menu_order_by) && is_numeric($increase_menu_order_by)){
$menu_order += intval($increase_menu_order_by);
@@ -484,15 +572,15 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
'menu_order' => $menu_order,
'comment_status' => $post->comment_status,
'ping_status' => $post->ping_status,
'post_author' => $new_post_author->ID,
'post_content' => (get_option('duplicate_post_copycontent') == '1') ? addslashes($post->post_content) : "" ,
'post_content_filtered' => (get_option('duplicate_post_copycontent') == '1') ? addslashes($post->post_content_filtered) : "" ,
'post_excerpt' => (get_option('duplicate_post_copyexcerpt') == '1') ? addslashes($post->post_excerpt) : "",
'post_author' => $new_post_author_id,
'post_content' => (get_option('duplicate_post_copycontent') == '1') ? $post->post_content : "" ,
'post_content_filtered' => (get_option('duplicate_post_copycontent') == '1') ? $post->post_content_filtered : "" ,
'post_excerpt' => (get_option('duplicate_post_copyexcerpt') == '1') ? $post->post_excerpt : "",
'post_mime_type' => $post->post_mime_type,
'post_parent' => $new_post_parent = empty($parent_id)? $post->post_parent : $parent_id,
'post_password' => (get_option('duplicate_post_copypassword') == '1') ? $post->post_password: "",
'post_status' => $new_post_status = (empty($status))? $post->post_status: $status,
'post_title' => addslashes($title),
'post_status' => $new_post_status,
'post_title' => $title,
'post_type' => $post->post_type,
);
@@ -501,7 +589,7 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
$new_post['post_date_gmt'] = get_gmt_from_date($new_post_date);
}
$new_post_id = wp_insert_post($new_post);
$new_post_id = wp_insert_post(wp_slash($new_post));
// If the copy is published or scheduled, we have to set a proper slug.
if ($new_post_status == 'publish' || $new_post_status == 'future'){
@@ -516,12 +604,12 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
$new_post['post_name'] = $post_name;
// Update the post into the database
wp_update_post( $new_post );
wp_update_post( wp_slash($new_post) );
}
// If you have written a plugin which uses non-WP database tables to save
// information about a post you can hook this action to dupe that data.
if ($post->post_type == 'page' || (function_exists('is_post_type_hierarchical') && is_post_type_hierarchical( $post->post_type )))
if ($post->post_type == 'page' || is_post_type_hierarchical( $post->post_type ))
do_action( 'dp_duplicate_page', $new_post_id, $post );
else
do_action( 'dp_duplicate_post', $new_post_id, $post );
@@ -529,6 +617,8 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
delete_post_meta($new_post_id, '_dp_original');
add_post_meta($new_post_id, '_dp_original', $post->ID);
do_action('duplicate_post_post_copy');
return $new_post_id;
}
@@ -537,12 +627,14 @@ add_filter('plugin_row_meta', 'duplicate_post_add_plugin_links', 10, 2);
function duplicate_post_add_plugin_links($links, $file) {
if ( $file == plugin_basename(dirname(__FILE__).'/duplicate-post.php') ) {
$links[] = '<a href="http://lopo.it/duplicate-post-plugin">' . __('Donate', 'duplicate-post') . '</a>';
$links[] = '<a href="https://translate.wordpress.org/projects/wp-plugins/duplicate-post">' . __('Translate', 'duplicate-post') . '</a>';
$links[] = '<a href="http://lopo.it/duplicate-post-plugin">' . esc_html__('Donate', 'duplicate-post') . '</a>';
$links[] = '<a href="https://translate.wordpress.org/projects/wp-plugins/duplicate-post">' . esc_html__('Translate', 'duplicate-post') . '</a>';
}
return $links;
}
/*** NOTICES ***/
add_action( 'admin_notices', 'duplicate_post_action_admin_notice' );
function duplicate_post_action_admin_notice() {
@@ -557,3 +649,55 @@ function duplicate_post_action_admin_notice() {
remove_query_arg( 'cloned' );
}
}
/*** BULK ACTIONS ***/
add_action('admin_init', 'duplicate_post_add_bulk_filters_for_enabled_post_types');
function duplicate_post_add_bulk_filters_for_enabled_post_types(){
if(get_option('duplicate_post_show_bulkactions') != 1) return;
$duplicate_post_types_enabled = get_option('duplicate_post_types_enabled', array ('post', 'page'));
if(!is_array($duplicate_post_types_enabled)) $duplicate_post_types_enabled = array($duplicate_post_types_enabled);
foreach($duplicate_post_types_enabled as $duplicate_post_type_enabled){
add_filter( "bulk_actions-edit-{$duplicate_post_type_enabled}", 'duplicate_post_register_bulk_action' );
add_filter( "handle_bulk_actions-edit-{$duplicate_post_type_enabled}", 'duplicate_post_action_handler', 10, 3 );
}
}
function duplicate_post_register_bulk_action($bulk_actions) {
$bulk_actions['duplicate_post_clone'] = esc_html__( 'Clone', 'duplicate-post');
return $bulk_actions;
}
function duplicate_post_action_handler( $redirect_to, $doaction, $post_ids ) {
if ( $doaction !== 'duplicate_post_clone' ) {
return $redirect_to;
}
$counter = 0;
foreach ( $post_ids as $post_id ) {
$post = get_post($post_id);
if(!empty($post)){
if( get_option('duplicate_post_copychildren') != 1
|| !is_post_type_hierarchical( $post->post_type )
|| (is_post_type_hierarchical( $post->post_type ) && !duplicate_post_has_ancestors_marked($post, $post_ids))){
if(duplicate_post_create_duplicate($post)){
$counter++;
}
}
}
}
$redirect_to = add_query_arg( 'cloned', $counter, $redirect_to );
return $redirect_to;
}
function duplicate_post_has_ancestors_marked($post, $post_ids){
$ancestors_in_array = 0;
$parent = $post->ID;
while ($parent = wp_get_post_parent_id($parent)){
if(in_array($parent, $post_ids)){
$ancestors_in_array++;
}
}
return ($ancestors_in_array !== 0);
}
@@ -12,6 +12,7 @@ function duplicate_post_is_current_user_allowed_to_copy() {
*/
function duplicate_post_is_post_type_enabled($post_type){
$duplicate_post_types_enabled = get_option('duplicate_post_types_enabled', array ('post', 'page'));
if(!is_array($duplicate_post_types_enabled)) $duplicate_post_types_enabled = array($duplicate_post_types_enabled);
return in_array($post_type, $duplicate_post_types_enabled);
}
@@ -74,10 +75,10 @@ function duplicate_post_clone_post_link( $link = null, $before = '', $after = ''
return;
if ( null === $link )
$link = __('Copy to a new draft', 'duplicate-post');
$link = esc_html__('Copy to a new draft', 'duplicate-post');
$link = '<a class="post-clone-link" href="' . $url . '" title="'
. esc_attr(__("Copy to a new draft", 'duplicate-post'))
. esc_attr__("Copy to a new draft", 'duplicate-post')
.'">' . $link . '</a>';
echo $before . apply_filters( 'duplicate_post_clone_post_link', $link, $post->ID ) . $after;
}
@@ -99,6 +100,7 @@ function duplicate_post_get_original($id = 0 , $output = OBJECT){
// Admin bar
function duplicate_post_admin_bar_render() {
if(!is_admin_bar_showing()) return;
global $wp_admin_bar;
$current_object = get_queried_object();
if ( empty($current_object) )
@@ -111,13 +113,14 @@ function duplicate_post_admin_bar_render() {
{
$wp_admin_bar->add_menu( array(
'id' => 'new_draft',
'title' => __("Copy to a new draft", 'duplicate-post'),
'title' => esc_attr__("Copy to a new draft", 'duplicate-post'),
'href' => duplicate_post_get_clone_post_link( $current_object->ID )
) );
}
}
function duplicate_post_add_css() {
if(!is_admin_bar_showing()) return;
$current_object = get_queried_object();
if ( empty($current_object) )
return;
@@ -18,10 +18,15 @@ function duplicate_post_register_settings() { // whitelist options
register_setting( 'duplicate_post_group', 'duplicate_post_copyslug');
register_setting( 'duplicate_post_group', 'duplicate_post_copyexcerpt');
register_setting( 'duplicate_post_group', 'duplicate_post_copycontent');
register_setting( 'duplicate_post_group', 'duplicate_post_copythumbnail');
register_setting( 'duplicate_post_group', 'duplicate_post_copytemplate');
register_setting( 'duplicate_post_group', 'duplicate_post_copyformat');
register_setting( 'duplicate_post_group', 'duplicate_post_copyauthor');
register_setting( 'duplicate_post_group', 'duplicate_post_copypassword');
register_setting( 'duplicate_post_group', 'duplicate_post_copyattachments');
register_setting( 'duplicate_post_group', 'duplicate_post_copychildren');
register_setting( 'duplicate_post_group', 'duplicate_post_copycomments');
register_setting( 'duplicate_post_group', 'duplicate_post_copymenuorder');
register_setting( 'duplicate_post_group', 'duplicate_post_blacklist');
register_setting( 'duplicate_post_group', 'duplicate_post_taxonomies_blacklist');
register_setting( 'duplicate_post_group', 'duplicate_post_title_prefix');
@@ -32,6 +37,8 @@ function duplicate_post_register_settings() { // whitelist options
register_setting( 'duplicate_post_group', 'duplicate_post_show_row');
register_setting( 'duplicate_post_group', 'duplicate_post_show_adminbar');
register_setting( 'duplicate_post_group', 'duplicate_post_show_submitbox');
register_setting( 'duplicate_post_group', 'duplicate_post_show_bulkactions');
register_setting( 'duplicate_post_group', 'duplicate_post_show_notice');
}
@@ -69,19 +76,25 @@ function duplicate_post_options() {
<br>
</div>
<h1>
<?php _e("Duplicate Post Options", 'duplicate-post'); ?>
<?php esc_html_e("Duplicate Post Options", 'duplicate-post'); ?>
</h1>
<div
style="margin: 9px 15px 4px 0; padding: 5px; text-align: center; font-weight: bold; float: left;">
<a href="http://lopo.it/duplicate-post-plugin"><?php _e('Visit plugin site'); ?></a>
- <a href="https://translate.wordpress.org/projects/wp-plugins/duplicate-post"><?php _e('Translate', 'duplicate-post'); ?></a>
- <a href="https://wordpress.org/plugins/duplicate-post/faq/"><?php _e('FAQ', 'duplicate-post'); ?></a>
- <a href="http://lopo.it/duplicate-post-plugin"><?php _e('Donate', 'duplicate-post'); ?> (10¢)</a>
<a href="http://lopo.it/duplicate-post-plugin"><img id="donate-button" src="<?php echo plugins_url( 'donate.png', __FILE__ ); ?>" alt="Donate"/></a>
style="margin: 9px 15px 4px 0; padding: 5px 30px; text-align: center; float: left; clear:left; border: solid 3px #cccccc; width: 600px;">
<p>
<?php esc_html_e('Help me develop the plugin, add new features and improve support!', 'duplicate-post'); ?>
<br/>
<?php esc_html_e('Donate whatever sum you choose, even just 10¢.', 'duplicate-post'); ?>
<br/>
<a href="http://lopo.it/duplicate-post-plugin"><img id="donate-button" style="margin: 0px auto;" src="<?php echo plugins_url( 'donate.png', __FILE__ ); ?>" alt="Donate"/></a>
<br/>
<a href="http://lopo.it/duplicate-post-plugin"><?php esc_html_e('Visit plugin site'); ?></a>
- <a href="https://translate.wordpress.org/projects/wp-plugins/duplicate-post"><?php esc_html_e('Translate', 'duplicate-post'); ?></a>
- <a href="https://wordpress.org/plugins/duplicate-post/faq/"><?php esc_html_e('FAQ', 'duplicate-post'); ?></a>
- <a href="https://wordpress.org/support/plugin/duplicate-post"><?php esc_html_e('Support Forum', 'duplicate-post'); ?></a>
</p>
</div>
<script>
jQuery(document).on( 'click', '.nav-tab-wrapper a', function() {
@@ -91,12 +104,14 @@ function duplicate_post_options() {
jQuery('section').eq(jQuery(this).index()).show();
return false;
});
function toggle_private_taxonomies(){
jQuery('.taxonomy_private').toggle();
jQuery('.taxonomy_private').toggle(300);
}
jQuery(function(){
jQuery('.taxonomy_private').hide();
jQuery('.taxonomy_private').hide(300);
});
</script>
@@ -169,11 +184,11 @@ img#donate-button{
<h2 class="nav-tab-wrapper">
<a class="nav-tab nav-tab-active"
href="<?php echo admin_url() ?>/index.php?page=duplicate-post-what"><?php _e('What to copy', 'duplicate-post'); ?>
href="<?php echo admin_url() ?>/index.php?page=duplicate-post-what"><?php esc_html_e('What to copy', 'duplicate-post'); ?>
</a> <a class="nav-tab"
href="<?php echo admin_url() ?>/index.php?page=duplicate-post-who"><?php _e('Permissions', 'duplicate-post'); ?>
href="<?php echo admin_url() ?>/index.php?page=duplicate-post-who"><?php esc_html_e('Permissions', 'duplicate-post'); ?>
</a> <a class="nav-tab"
href="<?php echo admin_url() ?>/index.php?page=duplicate-post-where"><?php _e('Display', 'duplicate-post'); ?>
href="<?php echo admin_url() ?>/index.php?page=duplicate-post-where"><?php esc_html_e('Display', 'duplicate-post'); ?>
</a>
</h2>
@@ -181,99 +196,118 @@ img#donate-button{
<table class="form-table">
<tr valign="top">
<th scope="row"><?php _e('Post/page elements to copy', 'duplicate-post'); ?>
<th scope="row"><?php esc_html_e('Post/page elements to copy', 'duplicate-post'); ?>
</th>
<td colspan="2"><label> <input type="checkbox"
name="duplicate_post_copytitle" value="1" <?php if(get_option('duplicate_post_copytitle') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Title", 'default'); ?>
<?php esc_html_e("Title", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copydate" value="1" <?php if(get_option('duplicate_post_copydate') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Date", 'default'); ?>
<?php esc_html_e("Date", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copystatus" value="1" <?php if(get_option('duplicate_post_copystatus') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Status", 'default'); ?>
<?php esc_html_e("Status", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copyslug" value="1" <?php if(get_option('duplicate_post_copyslug') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Slug", 'default'); ?>
<?php esc_html_e("Slug", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copyexcerpt" value="1" <?php if(get_option('duplicate_post_copyexcerpt') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Excerpt", 'default'); ?>
<?php esc_html_e("Excerpt", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copycontent" value="1" <?php if(get_option('duplicate_post_copycontent') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Content", 'default'); ?>
<?php esc_html_e("Content", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copythumbnail" value="1" <?php if(get_option('duplicate_post_copythumbnail') == 1) echo 'checked="checked"'; ?>"/>
<?php esc_html_e("Featured Image", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copytemplate" value="1" <?php if(get_option('duplicate_post_copytemplate') == 1) echo 'checked="checked"'; ?>"/>
<?php esc_html_e("Template", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copyformat" value="1" <?php if(get_option('duplicate_post_copyformat') == 1) echo 'checked="checked"'; ?>"/>
<?php echo esc_html_x("Format", 'post format', 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copyauthor" value="1" <?php if(get_option('duplicate_post_copyauthor') == 1) echo 'checked="checked"'; ?>"/>
<?php esc_html_e("Author", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copypassword" value="1" <?php if(get_option('duplicate_post_copypassword') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Password", 'default'); ?>
<?php esc_html_e("Password", 'default'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copyattachments" value="1" <?php if(get_option('duplicate_post_copyattachments') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Attachments", 'duplicate-post'); ?>
<?php esc_html_e("Attachments", 'duplicate-post'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copychildren" value="1" <?php if(get_option('duplicate_post_copychildren') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Children", 'duplicate-post'); ?>
<?php esc_html_e("Children", 'duplicate-post'); ?>
</label> <label> <input type="checkbox"
name="duplicate_post_copycomments" value="1" <?php if(get_option('duplicate_post_copycomments') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Comments", 'default'); ?> (<?php _e("except pingbacks and trackbacks", 'duplicate-post'); ?>)
<?php esc_html_e("Comments", 'default'); ?> (<?php esc_html_e("except pingbacks and trackbacks", 'duplicate-post'); ?>)
</label> <label> <input type="checkbox"
name="duplicate_post_copymenuorder" value="1" <?php if(get_option('duplicate_post_copymenuorder') == 1) echo 'checked="checked"'; ?>"/>
<?php esc_html_e("Menu order", 'default'); ?>
</label>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php _e("Title prefix", 'duplicate-post'); ?>
<th scope="row"><?php esc_html_e("Title prefix", 'duplicate-post'); ?>
</th>
<td><input type="text" name="duplicate_post_title_prefix"
value="<?php echo get_option('duplicate_post_title_prefix'); ?>" />
</td>
<td><span class="description"><?php _e("Prefix to be added before the title, e.g. \"Copy of\" (blank for no prefix)", 'duplicate-post'); ?>
<td><span class="description"><?php esc_html_e("Prefix to be added before the title, e.g. \"Copy of\" (blank for no prefix)", 'duplicate-post'); ?>
</span>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php _e("Title suffix", 'duplicate-post'); ?>
<th scope="row"><?php esc_html_e("Title suffix", 'duplicate-post'); ?>
</th>
<td><input type="text" name="duplicate_post_title_suffix"
value="<?php echo get_option('duplicate_post_title_suffix'); ?>" />
</td>
<td><span class="description"><?php _e("Suffix to be added after the title, e.g. \"(dup)\" (blank for no suffix)", 'duplicate-post'); ?>
<td><span class="description"><?php esc_html_e("Suffix to be added after the title, e.g. \"(dup)\" (blank for no suffix)", 'duplicate-post'); ?>
</span>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php _e("Increase menu order by", 'duplicate-post'); ?>
<th scope="row"><?php esc_html_e("Increase menu order by", 'duplicate-post'); ?>
</th>
<td><input type="text" name="duplicate_post_increase_menu_order_by"
value="<?php echo get_option('duplicate_post_increase_menu_order_by'); ?>" />
</td>
<td><span class="description"><?php _e("Add this number to the original menu order (blank or zero to retain the value)", 'duplicate-post'); ?>
<td><span class="description"><?php esc_html_e("Add this number to the original menu order (blank or zero to retain the value)", 'duplicate-post'); ?>
</span>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php _e("Do not copy these fields", 'duplicate-post'); ?>
<th scope="row"><?php esc_html_e("Do not copy these fields", 'duplicate-post'); ?>
</th>
<td id="textfield"><input type="text"
name="duplicate_post_blacklist"
value="<?php echo get_option('duplicate_post_blacklist'); ?>" /></td>
<td><span class="description"><?php _e("Comma-separated list of meta fields that must not be copied", 'duplicate-post'); ?><br />
<small><?php _e("Add <code>_thumbnail_id</code> to prevent featured images to be copied", 'duplicate-post'); ?>
<td><span class="description"><?php esc_html_e("Comma-separated list of meta fields that must not be copied", 'duplicate-post'); ?><br />
<small><?php esc_html_e("You can use * to match zero or more alphanumeric characters or underscores: e.g. field*", 'duplicate-post'); ?>
</small> </span>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php _e("Do not copy these taxonomies", 'duplicate-post'); ?><br />
<th scope="row"><?php esc_html_e("Do not copy these taxonomies", 'duplicate-post'); ?><br />
<a class="toggle_link" href="#"
onclick="toggle_private_taxonomies();return false;"><?php _e('Show/hide private taxonomies', 'duplicate-post');?>
onclick="toggle_private_taxonomies();return false;"><?php esc_html_e('Show/hide private taxonomies', 'duplicate-post');?>
</a>
</th>
<td colspan="2"><?php $taxonomies=get_taxonomies(array(),'objects'); usort($taxonomies, 'duplicate_post_tax_obj_cmp');
$taxonomies_blacklist = get_option('duplicate_post_taxonomies_blacklist');
if ($taxonomies_blacklist == "") $taxonomies_blacklist = array();
foreach ($taxonomies as $taxonomy ) : ?> <label
foreach ($taxonomies as $taxonomy ) :
if($taxonomy->name == 'post_format'){
continue;
}
?> <label
class="taxonomy_<?php echo ($taxonomy->public)?'public':'private';?>">
<input type="checkbox"
name="duplicate_post_taxonomies_blacklist[]"
value="<?php echo $taxonomy->name?>"
<?php if(in_array($taxonomy->name, $taxonomies_blacklist)) echo 'checked="checked"'?> />
<?php echo $taxonomy->labels->name.' ['.$taxonomy->name.']'; ?>
</label> <?php endforeach; ?> <span class="description"><?php _e("Select the taxonomies you don't want to be copied", 'duplicate-post'); ?>
</label> <?php endforeach; ?> <span class="description"><?php esc_html_e("Select the taxonomies you don't want to be copied", 'duplicate-post'); ?>
</span>
</td>
</tr>
@@ -283,7 +317,7 @@ img#donate-button{
<table class="form-table">
<?php if ( current_user_can( 'promote_users' ) ){ ?>
<tr valign="top">
<th scope="row"><?php _e("Roles allowed to copy", 'duplicate-post'); ?>
<th scope="row"><?php esc_html_e("Roles allowed to copy", 'duplicate-post'); ?>
</th>
<td><?php global $wp_roles;
$roles = $wp_roles->get_names();
@@ -293,14 +327,14 @@ img#donate-button{
value="<?php echo $name ?>"
<?php if($role->has_cap('copy_posts')) echo 'checked="checked"'?> />
<?php echo translate_user_role($display_name); ?>
</label> <?php endforeach; ?> <span class="description"><?php _e("Warning: users will be able to copy all posts, even those of other users", 'duplicate-post'); ?><br />
<?php _e("Passwords and contents of password-protected posts may become visible to undesired users and visitors", 'duplicate-post'); ?>
</label> <?php endforeach; ?> <span class="description"><?php esc_html_e("Warning: users will be able to copy all posts, even those of other users", 'duplicate-post'); ?><br />
<?php esc_html_e("Passwords and contents of password-protected posts may become visible to undesired users and visitors", 'duplicate-post'); ?>
</span>
</td>
</tr>
<?php } ?>
<tr valign="top">
<th scope="row"><?php _e("Enable for these post types", 'duplicate-post'); ?>
<th scope="row"><?php esc_html_e("Enable for these post types", 'duplicate-post'); ?>
</th>
<td><?php $post_types = get_post_types(array('show_ui' => true),'objects');
foreach ($post_types as $post_type_object ) :
@@ -309,8 +343,8 @@ img#donate-button{
value="<?php echo $post_type_object->name?>"
<?php if(duplicate_post_is_post_type_enabled($post_type_object->name)) echo 'checked="checked"'?> />
<?php echo $post_type_object->labels->name?>
</label> <?php endforeach; ?> <span class="description"><?php _e("Select the post types you want the plugin to be enabled", 'duplicate-post'); ?>
<br /> <?php _e("Whether the links are displayed for custom post types registered by themes or plugins depends on their use of standard WordPress UI elements", 'duplicate-post'); ?>
</label> <?php endforeach; ?> <span class="description"><?php esc_html_e("Select the post types you want the plugin to be enabled", 'duplicate-post'); ?>
<br /> <?php esc_html_e("Whether the links are displayed for custom post types registered by themes or plugins depends on their use of standard WordPress UI elements", 'duplicate-post'); ?>
</span>
</td>
</tr>
@@ -319,28 +353,40 @@ img#donate-button{
<section>
<table class="form-table">
<tr valign="top">
<th scope="row"><?php _e("Show links in", 'duplicate-post'); ?>
<th scope="row"><?php esc_html_e("Show links in", 'duplicate-post'); ?>
</th>
<td><label><input type="checkbox" name="duplicate_post_show_row"
value="1" <?php if(get_option('duplicate_post_show_row') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Post list", 'duplicate-post'); ?> </label> <label><input
type="checkbox" name="duplicate_post_show_submitbox" value="1" <?php if(get_option('duplicate_post_show_submitbox') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Edit screen", 'duplicate-post'); ?> </label> <label><input
type="checkbox" name="duplicate_post_show_adminbar" value="1" <?php if(get_option('duplicate_post_show_adminbar') == 1) echo 'checked="checked"'; ?>"/>
<?php _e("Admin bar", 'duplicate-post'); ?> </label>
<?php esc_html_e("Post list", 'duplicate-post'); ?> </label>
<label><input type="checkbox" name="duplicate_post_show_submitbox" value="1" <?php if(get_option('duplicate_post_show_submitbox') == 1) echo 'checked="checked"'; ?>"/>
<?php esc_html_e("Edit screen", 'duplicate-post'); ?> </label>
<label><input type="checkbox" name="duplicate_post_show_adminbar" value="1" <?php if(get_option('duplicate_post_show_adminbar') == 1) echo 'checked="checked"'; ?>"/>
<?php esc_html_e("Admin bar", 'duplicate-post'); ?> </label>
<?php global $wp_version;
if( version_compare($wp_version, '4.7') >= 0 ){ ?>
<label><input type="checkbox" name="duplicate_post_show_bulkactions" value="1" <?php if(get_option('duplicate_post_show_bulkactions') == 1) echo 'checked="checked"'; ?>"/>
<?php esc_html_e("Bulk Actions", 'default'); ?> </label>
<?php } ?>
</td>
</tr>
<tr valign="top">
<td colspan="2"><span class="description"><?php _e("Whether the links are displayed for custom post types registered by themes or plugins depends on their use of standard WordPress UI elements", 'duplicate-post'); ?>
<td colspan="2"><span class="description"><?php esc_html_e("Whether the links are displayed for custom post types registered by themes or plugins depends on their use of standard WordPress UI elements", 'duplicate-post'); ?>
<br /> <?php printf(__('You can also use the template tag duplicate_post_clone_post_link( $link, $before, $after, $id ). More info <a href="%s">here</a>', 'duplicate-post'), 'https://wordpress.org/plugins/duplicate-post/other_notes/'); ?>
</span>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php esc_html_e("Show update notice", 'duplicate-post'); ?>
</th>
<td><input type="checkbox" name="duplicate_post_show_notice"
value="1" <?php if(get_option('duplicate_post_show_notice') == 1) echo 'checked="checked"'; ?>"/>
</td>
</tr>
</table>
</section>
<p class="submit">
<input type="submit" class="button-primary"
value="<?php _e('Save Changes', 'duplicate-post') ?>" />
value="<?php esc_html_e('Save Changes', 'duplicate-post') ?>" />
</p>
</form>
@@ -3,7 +3,7 @@
Plugin Name: Duplicate Post
Plugin URI: http://lopo.it/duplicate-post-plugin/
Description: Clone posts and pages.
Version: 3.0.3
Version: 3.1.2
Author: Enrico Battocchi
Author URI: http://lopo.it
Text Domain: duplicate-post
@@ -31,7 +31,7 @@ if ( ! defined( 'ABSPATH' ) ) {
}
// Version of the plugin
define('DUPLICATE_POST_CURRENT_VERSION', '3.0.3' );
define('DUPLICATE_POST_CURRENT_VERSION', '3.1.2' );
/**
@@ -46,7 +46,7 @@ add_action( 'plugins_loaded', 'duplicate_post_load_plugin_textdomain' );
add_filter("plugin_action_links_".plugin_basename(__FILE__), "duplicate_post_plugin_actions", 10, 4);
function duplicate_post_plugin_actions( $actions, $plugin_file, $plugin_data, $context ) {
array_unshift($actions, "<a href=\"".menu_page_url('duplicatepost', false)."\">".__("Settings")."</a>");
array_unshift($actions, "<a href=\"".menu_page_url('duplicatepost', false)."\">".esc_html__("Settings")."</a>");
return $actions;
}
+35 -17
View File
@@ -2,9 +2,9 @@
Contributors: lopo
Donate link: http://lopo.it/duplicate-post-plugin/
Tags: duplicate post, copy, clone
Requires at least: 3.4
Tested up to: 4.6
Stable tag: 3.0.3
Requires at least: 3.6
Tested up to: 4.7
Stable tag: 3.1.2
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -20,13 +20,15 @@ How it works:
1. In 'Edit Posts'/'Edit Pages', you can click on 'Clone' link below the post/page title: this will immediately create a copy and return to the list.
2. In 'Edit Posts'/'Edit Pages', you can click on 'New Draft' link below the post/page title.
2. NEW! In 'Edit Posts'/'Edit Pages', you can select one or more items, then choose 'Clone' in the 'Bulk Actions' dropdown to copy them all at once.
3. On the post edit screen, you can click on 'Copy to a new draft' above "Cancel"/"Move to trash".
3. In 'Edit Posts'/'Edit Pages', you can click on 'New Draft' link below the post/page title.
4. While viewing a post as a logged in user, you can click on 'Copy to a new draft' as a dropdown link under "Edit Post" in the admin bar.
4. On the post edit screen, you can click on 'Copy to a new draft' above "Cancel"/"Move to trash".
2, 3 and 4 will lead to the edit page for the new draft: change what you want, click on 'Publish' and you're done.
5. While viewing a post as a logged in user, you can click on 'Copy to a new draft' as a dropdown link under "Edit Post" in the admin bar.
3, 4 and 5 will lead to the edit page for the new draft: change what you want, click on 'Publish' and you're done.
There is also a **template tag**, so you can put it in your templates and clone your posts/pages from the front-end. Clicking on the link will lead you to the edit page for the new draft, just like the admin bar link.
@@ -51,10 +53,6 @@ Use WordPress' Add New Plugin feature, searching "Duplicate Post", or download t
== Frequently Asked Questions ==
= How to stop copying featured images? =
Add `_thumbnail_id` to "Do not copy these fields" in the Settings page.
= The plugin doesn't work, why? =
First, check your version of WordPress: the plugin is not supposed to work on old versions anymore. Make sure also to upgrade to the last version of the plugin!
@@ -74,12 +72,6 @@ From version 3.0 the plugin's translations are managed by the WordPress.org plat
If Duplicate Post is still in English, or if there are some untraslated strings, you can help traslating to your language [here](https://translate.wordpress.org/projects/wp-plugins/duplicate-post): you only need a WordPress.org account.
[Contact me](http://lopo.it/contatti/) if you wish to become an editor for your language.
= Can you add it to the bulk actions in the post/page list? =
I can't. There is no way to do it without hacking the core code of WordPress.
There is an open ticket in WordPress Trac, as other plugin developers too are interested to this feature: we can only hope that eventually our wish will be fulfilled.
== Screenshots ==
1. Here you can copy the post you're editing to a new draft.
@@ -87,9 +79,19 @@ There is an open ticket in WordPress Trac, as other plugin developers too are in
3. The options page.
4. The template tag manually added to Twenty Ten theme. Click on the "Copy to a new draft" link and you're redirected to the edit screen for a new draft copy of your post.
5. The admin bar link.
6. Bulk clone action.
== Upgrade Notice ==
= 3.1.2 =
Fixes the problem with custom fields
= 3.1.1 =
Bulk clone + custom field wildcards + other features + bugfixes + fix for nasty nag
= 3.1 =
Bulk clone + custom field wildcards + other features + bugfixes
= 3.0.3 =
Notices + small fixes and improvements
@@ -140,6 +142,22 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
== Changelog ==
= 3.1.2 =
* Fix for custom fields not copied
= 3.1.1 =
* Fix for nasty update nag (plus a failsafe checkbox)
= 3.1 =
* Bulk clone action added (WP 4.7+)
* Wildcards enabled for custom fields to skip
* Options to copy post author, post format (moved from taxonomies), menu order, post template
* Check publish_posts/publish_pages capability to prevent Contributors from publishing by cloning
* Using wp_slash (WP 3.6+) or a better workaround (WP 4.4+) on the post and its meta, should also fix some compatibility issues
* Check if admin bar is showing before enqueueing CSS
* Probable fix for repeated clone bug
* Other minor bugs fixed
= 3.0.3 =
* Notices in admin after copying
* Fixes warning in custom post type archives
@@ -46,7 +46,7 @@ class URE_Ajax_Processor {
die;
}
$key_capability = $this->lib->get_key_capability();
$key_capability = URE_Own_Capabilities::get_key_capability();
if (!current_user_can($key_capability)) {
echo json_encode(array('result'=>'error', 'message'=>'URE: Insufficient permissions'));
die;
@@ -55,6 +55,16 @@ class URE_Ajax_Processor {
}
// end of ajax_check_permissions()
protected function get_caps_to_remove() {
$html = URE_Role_View::caps_to_remove_html();
$answer = array('result'=>'success', 'html'=>$html, 'message'=>'success');
return $answer;
}
// end of get_caps_to_remove()
protected function get_users_without_role() {
global $wp_roles;
@@ -89,6 +99,9 @@ class URE_Ajax_Processor {
protected function _dispatch() {
switch ($this->action) {
case 'get_caps_to_remove':
$answer = $this->get_caps_to_remove();
break;
case 'get_users_without_role':
$answer = $this->get_users_without_role();
break;
@@ -226,24 +226,6 @@ class URE_Base_Lib {
}
// end of check_version()
/**
* @TODO: replace with selected() from WordPress general-template.php
* returns 'selected' HTML cluster if $value matches to $etalon
*
* @param string $value
* @param string $etalon
* @return string
*/
public function option_selected($value, $etalon) {
$selected = '';
if (strcasecmp($value, $etalon) == 0) {
$selected = 'selected="selected"';
}
return $selected;
}
// end of option_selected()
public function get_current_url() {
global $wp;
@@ -254,6 +236,34 @@ class URE_Base_Lib {
// end of get_current_url()
/**
* Returns comma separated list from the first $items_count element of $full_list array
*
* @param array $full_list
* @param int $items_count
* @return string
*/
public function get_short_list_str($full_list, $items_count=3) {
$short_list = array(); $i = 0;
foreach($full_list as $key=>$item) {
if ($i>=$items_count) {
break;
}
$short_list[] = $item;
$i++;
}
$str = implode(', ', $short_list);
if ($items_count<count($full_list)) {
$str .= '...';
}
return $str;
}
// end of get_short_list_str()
/**
* Private clone method to prevent cloning of the instance of the
* *Singleton* instance.
@@ -70,6 +70,14 @@ class URE_Capabilities_Groups_Manager {
// end of add_custom_post_types()
private function add_ure_group() {
$this->groups['user_role_editor'] = array('caption'=>esc_html__('User Role Editor', 'user-role-editor'), 'parent'=>'custom', 'level'=>3);
}
// end of get_ure_group()
private function add_woocommerce_groups() {
$full_caps = $this->lib->get('full_capabilities');
@@ -116,7 +124,9 @@ class URE_Capabilities_Groups_Manager {
$this->add_custom_post_types();
$this->groups['custom'] = array('caption'=>esc_html__('Custom capabilities', 'user-role-editor'), 'parent'=>'all', 'level'=>1);
$this->add_ure_group();
$this->add_woocommerce_groups();
$this->groups = apply_filters('ure_capabilities_groups_tree', $this->groups);
return $this->groups;
@@ -306,10 +316,18 @@ class URE_Capabilities_Groups_Manager {
private function get_groups_for_custom_cap($cap_id) {
$wc_caps = URE_Woocommerce_Capabilities::get();
if (isset($wc_caps[$cap_id])) {
$groups1 = $wc_caps[$cap_id];
$ure_caps = URE_Own_Capabilities::get_caps_groups();
if (isset($ure_caps[$cap_id])) {
$groups1 = $ure_caps[$cap_id];
}
if (empty($groups1)) {
$wc_caps = URE_Woocommerce_Capabilities::get_caps_groups();
if (isset($wc_caps[$cap_id])) {
$groups1 = $wc_caps[$cap_id];
}
}
if (isset($this->cpt_caps[$cap_id])) {
$groups2 = $this->cpt_caps[$cap_id];
}
@@ -338,6 +356,10 @@ class URE_Capabilities_Groups_Manager {
$groups[] = 'all'; // Every capability belongs to the 'all' group
$groups = array_unique($groups);
foreach($groups as $key=>$value) {
$groups[$key] = 'ure-'. $value;
}
return $groups;
}
// end of get_cap_groups()
@@ -85,6 +85,68 @@ class URE_Capability {
// end of add()
/**
* Extract capabilities selected from deletion from the $_POST global
*
* @return array
*/
private static function get_caps_for_deletion_from_post($caps_allowed_to_remove) {
$caps = array();
foreach($_POST as $key=>$value) {
if (substr($key, 0, 3)!=='rm_') {
continue;
}
if (!isset($caps_allowed_to_remove[$value])) {
continue;
}
$caps[] = $value;
}
return $caps;
}
// end of get_caps_for_deletion_from_post()
private static function revoke_caps_from_user($user_id, $caps) {
$user = get_user_to_edit($user_id);
foreach($caps as $cap_id) {
if (isset($user->caps[$cap_id])) {
$user->remove_cap($cap_id);
}
}
}
// end of revoke_caps_from_user()
private static function revoke_caps_from_role($wp_role, $caps) {
foreach($caps as $cap_id) {
if ($wp_role->has_cap($cap_id)) {
$wp_role->remove_cap($cap_id);
}
}
}
// end of revoke_caps_from_role()
private static function revoke_caps($caps) {
global $wpdb, $wp_roles;
// remove caps from users
$users_ids = $wpdb->get_col("SELECT $wpdb->users.ID FROM $wpdb->users");
foreach ($users_ids as $user_id) {
self::revoke_caps_from_user($user_id, $caps);
}
// remove caps from roles
foreach ($wp_roles->role_objects as $wp_role) {
self::revoke_caps_from_role($wp_role, $caps);
}
}
// end of revoke_caps()
/**
* Delete capability
*
@@ -92,44 +154,38 @@ class URE_Capability {
* @global WP_Roles $wp_roles
* @return string - information message
*/
public static function delete() {
global $wpdb, $wp_roles;
public static function delete() {
if (!isset($_POST['action']) || $_POST['action']!='delete-user-capability') {
return 'Wrong Request';
}
if (!current_user_can('ure_delete_capabilities')) {
return esc_html__('Insufficient permissions to work with User Role Editor','user-role-editor');
}
if (!isset($_POST['user_capability_id']) || empty($_POST['user_capability_id'])) {
return 'Wrong Request';
}
$lib = URE_Lib::get_instance();
$mess = '';
$capability_id = $_POST['user_capability_id'];
$caps_to_remove = $lib->get_caps_to_remove();
if (!is_array($caps_to_remove) || count($caps_to_remove) == 0 || !isset($caps_to_remove[$capability_id])) {
return sprintf(esc_html__('Error! You do not have permission to delete this capability: %s!', 'user-role-editor'), $capability_id);
$mess = '';
$caps_allowed_to_remove = $lib->get_caps_to_remove();
if (!is_array($caps_allowed_to_remove) || count($caps_allowed_to_remove) == 0) {
return esc_html__('There are no capabilities available for deletion!', 'user-role-editor');
}
$capabilities = self::get_caps_for_deletion_from_post($caps_allowed_to_remove);
if (empty($capabilities)) {
return esc_html__('There are no capabilities available for deletion!', 'user-role-editor');
}
// process users
$usersId = $wpdb->get_col("SELECT $wpdb->users.ID FROM $wpdb->users");
foreach ($usersId as $user_id) {
$user = get_user_to_edit($user_id);
if ($user->has_cap($capability_id)) {
$user->remove_cap($capability_id);
}
self::revoke_caps($capabilities);
if (count($capabilities)==1) {
$mess = sprintf(esc_html__('Capability %s was removed successfully', 'user-role-editor'), $capabilities[0]);
} else {
$short_list_str = $lib->get_short_list_str($capabilities);
$mess = count($capabilities) .' '. esc_html__('capabilities were removed successfully', 'user-role-editor') .': '.
$short_list_str;
}
// process roles
foreach ($wp_roles->role_objects as $wp_role) {
if ($wp_role->has_cap($capability_id)) {
$wp_role->remove_cap($capability_id);
}
}
$mess = sprintf(esc_html__('Capability %s was removed successfully', 'user-role-editor'), $capability_id);
return $mess;
}
// end of delete()
@@ -14,13 +14,13 @@ class URE_Role_View extends URE_View {
private $role_to_copy_html = '';
private $role_select_html = '';
private $role_delete_html = '';
private $capability_remove_html = '';
public function __construct() {
parent::__construct();
$this->lib = URE_Lib::get_instance();
$this->caps_to_remove = $this->lib->get_caps_to_remove();
}
// end of __construct()
@@ -44,7 +44,7 @@ class URE_Role_View extends URE_View {
$wp_default_role = $this->lib->get('wp_default_role');
$this->role_default_html = '<select id="default_user_role" name="default_user_role" '. $select_style .'>';
foreach ($roles as $key => $value) {
$selected = $this->lib->option_selected($key, $wp_default_role);
$selected = selected($key, $wp_default_role, false);
$disabled = ($key==='administrator' && $caps_access_restrict_for_simple_admin && !$this->lib->is_super_admin()) ? 'disabled' : '';
if ($show_admin_role || $key != 'administrator') {
$translated_name = esc_html__($value['name'], 'user-role-editor'); // get translation from URE language file, if exists
@@ -65,7 +65,7 @@ class URE_Role_View extends URE_View {
global $current_user;
$key_capability = $this->lib->get_key_capability();
$key_capability = URE_Own_Capabilities::get_key_capability();
$user_is_ure_admin = current_user_can($key_capability);
$role_to_skip = ($user_is_ure_admin) ? '':$current_user->roles[0];
@@ -80,7 +80,7 @@ class URE_Role_View extends URE_View {
if ($key===$role_to_skip) { // skip role of current user if he does not have full access to URE
continue;
}
$selected1 = $this->lib->option_selected($key, $current_role);
$selected1 = selected($key, $current_role, false);
$disabled = ($key==='administrator' && $caps_access_restrict_for_simple_admin && !$this->lib->is_super_admin()) ? 'disabled' : '';
if ($show_admin_role || $key != 'administrator') {
$translated_name = esc_html__($value['name'], 'user-role-editor'); // get translation from URE language file, if exists
@@ -119,22 +119,62 @@ class URE_Role_View extends URE_View {
*
* @return string
**/
protected function caps_to_remove_prepare_html() {
$caps_to_remove = $this->lib->get_caps_to_remove();
if (!empty($caps_to_remove) && is_array($caps_to_remove) && count($caps_to_remove) > 0) {
$html = '<select id="remove_user_capability" name="remove_user_capability" width="200" style="width: 200px">';
foreach (array_keys($caps_to_remove) as $key) {
$html .= '<option value="' . $key . '">' . $key . '</option>';
}
$html .= '</select>';
} else {
$html = '';
public static function caps_to_remove_html() {
global $wp_roles;
$lib = URE_Lib::get_instance();
$caps_to_remove = $lib->get_caps_to_remove();
if (empty($caps_to_remove) || !is_array($caps_to_remove) && count($caps_to_remove)==0) {
return '';
}
$caps = array_keys($caps_to_remove);
asort($caps);
$network_admin = filter_input(INPUT_POST, 'network_admin', FILTER_SANITIZE_NUMBER_INT);
$current_role = filter_input(INPUT_POST, 'current_role', FILTER_SANITIZE_STRING);
if (!isset($wp_roles->roles[$current_role])) {
$current_role = '';
}
ob_start();
?>
<form name="ure_remove_caps_form" id="ure_remove_caps_form" method="POST"
action="<?php echo URE_WP_ADMIN_URL . ($network_admin ? 'network/':'') . URE_PARENT .'?page=users-'.URE_PLUGIN_FILE;?>" >
<table id="ure_remove_caps_table">
<tr>
<th>
<input type="checkbox" id="ure_remove_caps_select_all">
</th>
<th></th>
</tr>
<?php
foreach($caps as $cap_id) {
$cap_id_esc = 'rm_'.URE_Capability::escape($cap_id);
?>
<tr>
<td>
<input type="checkbox" name="<?php echo $cap_id_esc;?>" id="<?php echo $cap_id_esc;?>" class="ure-cb-column"
value="<?php echo $cap_id;?>"/>
</td>
<td>
<label for="<?php echo $cap_id_esc;?>"><?php echo $cap_id; ?></label>
</td>
</tr>
<?php
} // foreach($caps...)
?>
</table>
<input type="hidden" name="action" id="action" value="delete-user-capability" />
<input type="hidden" name="user_role" id="ure_role" value="<?php echo $current_role;?>" />
<?php wp_nonce_field('user-role-editor', 'ure_nonce'); ?>
</form>
<?php
$html = ob_get_contents();
ob_end_clean();
$this->capability_remove_html = $html;
return $html;
}
// end of caps_to_remove_prepare_html()
// end of caps_to_remove_html()
public function role_edit_prepare_html($select_width=200) {
@@ -145,7 +185,7 @@ class URE_Role_View extends URE_View {
$this->role_default_prepare_html($select_width);
}
$this->role_delete_prepare_html();
$this->caps_to_remove_prepare_html();
}
// end of role_edit_prepare_html()
@@ -204,8 +244,7 @@ if ($multisite && !is_network_admin()) {
<div id="ure_delete_capability_dialog" class="ure-modal-dialog">
<div style="padding:10px;">
<div class="ure-label"><?php esc_html_e('Delete:', 'user-role-editor');?></div>
<div class="ure-input"><?php echo $this->capability_remove_html; ?></div>
<div class="ure-input"></div>
</div>
</div>
@@ -278,7 +317,8 @@ if ($multisite && !is_network_admin()) {
} // restrict single site admin
if (!$multisite || $super_admin || !$caps_access_restrict_for_simple_admin) { // restrict single site admin
if (!empty($this->capability_remove_html) && current_user_can('ure_delete_capabilities')) {
if (!empty($this->caps_to_remove) && is_array($this->caps_to_remove) && count($this->caps_to_remove)>0 &&
current_user_can('ure_delete_capabilities')) {
?>
<button id="ure_delete_capability" class="ure_toolbar_button">Delete Capability</button>
<?php
@@ -355,7 +395,7 @@ if ($multisite && !is_network_admin()) {
?>
<div style="float: right; margin-left:10px; margin-right: 20px; <?php echo $fontColor; ?>" id="ure_apply_to_all_div">
<input type="checkbox" name="ure_apply_to_all" id="ure_apply_to_all" value="1"
<?php echo $checked; ?> title="<?php echo $hint; ?>" onclick="ure_applyToAllOnClick(this)"/>
<?php echo $checked; ?> title="<?php echo $hint; ?>" onclick="ure_apply_to_all_on_click(this)"/>
<label for="ure_apply_to_all" title="<?php echo $hint; ?>"><?php esc_html_e('Apply to All Sites', 'user-role-editor'); ?></label>
</div>
<?php
@@ -78,8 +78,8 @@ class Ure_Lib extends URE_Base_Lib {
$ure_version = $this->get_option('ure_version', '0');
if (version_compare( $ure_version, URE_VERSION, '<' ) ) {
// for upgrade to 4.18 and higher from older versions
$this->init_ure_caps();
// put version upgrade stuff here
$this->put_option('ure_version', URE_VERSION, true);
}
@@ -128,52 +128,7 @@ class Ure_Lib extends URE_Base_Lib {
}
// end of set_raised_permissions()
public function get_ure_caps() {
$ure_caps = array(
'ure_edit_roles' => 1,
'ure_create_roles' => 1,
'ure_delete_roles' => 1,
'ure_create_capabilities' => 1,
'ure_delete_capabilities' => 1,
'ure_manage_options' => 1,
'ure_reset_roles' => 1
);
return $ure_caps;
}
// end of get_ure_caps()
public function init_ure_caps() {
global $wp_roles;
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
if (!isset($wp_roles->roles['administrator'])) {
return;
}
// Do not turn on URE caps for local administrator by default under multisite, as there is a superadmin.
$turn_on = !$this->multisite;
$old_use_db = $wp_roles->use_db;
$wp_roles->use_db = true;
$administrator = $wp_roles->role_objects['administrator'];
$ure_caps = $this->get_ure_caps();
foreach(array_keys($ure_caps) as $cap) {
if (!$administrator->has_cap($cap)) {
$administrator->add_cap($cap, $turn_on);
}
}
$wp_roles->use_db = $old_use_db;
}
// end of init_ure_caps()
/**
* get options for User Role Editor plugin
@@ -241,50 +196,7 @@ class Ure_Lib extends URE_Base_Lib {
return $this->main_blog_id;
}
/**
* return key capability to have access to User Role Editor Plugin
*
* @return string
*/
public function get_key_capability() {
if (!$this->multisite) {
$key_capability = URE_KEY_CAPABILITY;
} else {
$enable_simple_admin_for_multisite = $this->get_option('enable_simple_admin_for_multisite', 0);
if ( (defined('URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE') && URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE == 1) ||
$enable_simple_admin_for_multisite) {
$key_capability = URE_KEY_CAPABILITY;
} else {
$key_capability = 'manage_network_plugins';
}
}
return $key_capability;
}
// end of get_key_capability()
public function get_settings_capability() {
if (!$this->multisite) {
$settings_access = 'ure_manage_options';
} else {
$enable_simple_admin_for_multisite = $this->get_option('enable_simple_admin_for_multisite', 0);
if ( (defined('URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE') && URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE == 1) ||
$enable_simple_admin_for_multisite) {
$settings_access = 'ure_manage_options';
} else {
$settings_access = $this->get_key_capability();
}
}
return $settings_access;
}
// end of get_settings_capability()
/**
* return front-end according to the context - role or user editor
@@ -303,20 +215,8 @@ class Ure_Lib extends URE_Base_Lib {
// end of editor()
private function get_ure_container_width() {
$width = ($this->ure_object == 'user') ? 1300 : 1150;
if ($this->is_pro()) {
$width -= 200;
}
return $width;
}
// end of get_ure_container_width()
protected function show_editor() {
//$container_width = $this->get_ure_container_width();
$this->show_message($this->notification);
if ($this->ure_object == 'user') {
$view = new URE_User_View();
@@ -678,7 +578,7 @@ class Ure_Lib extends URE_Base_Lib {
public function user_is_admin($user_id = false) {
global $current_user;
$ure_key_capability = $this->get_key_capability();
$ure_key_capability = URE_Own_Capabilities::get_key_capability();
if (empty($user_id)) {
$user_id = $current_user->ID;
}
@@ -936,7 +836,7 @@ class Ure_Lib extends URE_Base_Lib {
}
$caps_to_exclude = $this->get_built_in_wp_caps();
$ure_caps = $this->get_ure_caps();
$ure_caps = URE_Own_Capabilities::get_caps();
$caps_to_exclude = array_merge($caps_to_exclude, $ure_caps);
$caps_to_remove = array();
@@ -997,85 +897,6 @@ class Ure_Lib extends URE_Base_Lib {
// end of block_cap_for_single_admin()
/**
* return link to the capability according its name in $capability parameter
*
* @param string $capability
* @return string
*/
protected function capability_help_link($capability) {
if (empty($capability)) {
return '';
}
switch ($capability) {
case 'activate_plugins':
$url = 'http://www.shinephp.com/activate_plugins-wordpress-capability/';
break;
case 'add_users':
$url = 'http://www.shinephp.com/add_users-wordpress-user-capability/';
break;
case 'create_users':
$url = 'http://www.shinephp.com/create_users-wordpress-user-capability/';
break;
case 'delete_others_pages':
case 'delete_others_posts':
case 'delete_pages':
case 'delete_posts':
case 'delete_protected_pages':
case 'delete_protected_posts':
case 'delete_published_pages':
case 'delete_published_posts':
$url = 'http://www.shinephp.com/delete-posts-and-pages-wordpress-user-capabilities-set/';
break;
case 'delete_plugins':
$url = 'http://www.shinephp.com/delete_plugins-wordpress-user-capability/';
break;
case 'delete_themes':
$url = 'http://www.shinephp.com/delete_themes-wordpress-user-capability/';
break;
case 'delete_users':
$url = 'http://www.shinephp.com/delete_users-wordpress-user-capability/';
break;
case 'edit_dashboard':
$url = 'http://www.shinephp.com/edit_dashboard-wordpress-capability/';
break;
case 'edit_files':
$url = 'http://www.shinephp.com/edit_files-wordpress-user-capability/';
break;
case 'edit_plugins':
$url = 'http://www.shinephp.com/edit_plugins-wordpress-user-capability';
break;
case 'moderate_comments':
$url = 'http://www.shinephp.com/moderate_comments-wordpress-user-capability/';
break;
case 'read':
$url = 'http://shinephp.com/wordpress-read-capability/';
break;
case 'update_core':
$url = 'http://www.shinephp.com/update_core-capability-for-wordpress-user/';
break;
case 'ure_edit_roles':
$url = 'https://www.role-editor.com/user-role-editor-4-18-new-permissions/';
break;
default:
$url = '';
}
// end of switch
if (!empty($url)) {
$link = '<a href="' . $url . '" title="' . esc_html__('read about', 'user-role-editor') .' '. $capability .' '.
esc_html__('user capability', 'user-role-editor') .'" target="new"><img src="' .
URE_PLUGIN_URL . 'images/help.png" alt="' . esc_html__('Help', 'user-role-editor') . '" /></a>';
} else {
$link = '';
}
return $link;
}
// end of capability_help_link()
/**
* Go through all users and if user has non-existing role lower him to Subscriber role
*
@@ -1336,11 +1157,12 @@ class Ure_Lib extends URE_Base_Lib {
*
*/
protected function add_ure_caps() {
$key_capability = $this->get_key_capability();
if (!current_user_can($key_capability)) {
$key_cap = URE_Own_Capabilities::get_key_capability();
if (!current_user_can($key_cap)) {
return;
}
$ure_caps = $this->get_ure_caps();
$ure_caps = URE_Own_Capabilities::get_caps();
foreach(array_keys($ure_caps) as $cap) {
$this->add_capability_to_full_caps_list($cap);
}
@@ -1402,7 +1224,7 @@ class Ure_Lib extends URE_Base_Lib {
}
$this->wp_roles_reinit();
$this->init_ure_caps();
URE_Own_Capabilities::init_caps();
if ($this->is_full_network_synch() || $this->apply_to_all) {
$this->current_role = '';
$this->direct_network_roles_update();
@@ -1444,7 +1266,7 @@ class Ure_Lib extends URE_Base_Lib {
return false;
}
$key_capability = $this->get_key_capability();
$key_capability = URE_Own_Capabilities::get_key_capability();
$user_is_ure_admin = current_user_can($key_capability);
if (!$user_is_ure_admin) {
if (in_array($this->current_role, $current_user->roles)) {
@@ -1976,7 +1798,7 @@ class Ure_Lib extends URE_Base_Lib {
__('Export', 'user-role-editor');
}
}
// end of ure_TranslationData()
// end of translation_data()
/**
@@ -2203,15 +2025,18 @@ class Ure_Lib extends URE_Base_Lib {
/**
* Wrapper for WordPress capabilities.php is_super_admin().
* Returns true if user has a real super administrator permissions
* It takes into account $this->raised_permissions value, in order do not count a user with temporally raised permissions a real superadmin
* It takes into account $this->raised_permissions value, in order do not count a user with temporally raised permissions
* of a real superadmin under WP Multisite
* For WP Singlesite superadmin is a user with 'administrator' role only in opposite the WordPress's is_super_admin(),
* which counts any user with 'delete_users' capability as a superadmin.
*
* @param int $user_id
* @global WP_User $current_user
* @return boolean
*/
public function is_super_admin($user_id = false) {
if (empty($user_id)) {
$user = wp_get_current_user();
$user_id = $user->ID;
@@ -2222,17 +2047,15 @@ class Ure_Lib extends URE_Base_Lib {
return false;
}
if ($this->multisite && $this->raised_permissions) {
return false;
if ($this->multisite && !$this->raised_permissions && is_super_admin($user_id)) {
return true;
}
if (!$this->multisite && $this->user_has_capability($user, 'administrator')) {
return true;
}
$result = is_super_admin($user_id);
}
return $result;
return false;
}
// end of is_super_admin()
@@ -2362,5 +2185,26 @@ class Ure_Lib extends URE_Base_Lib {
return $page_url;
}
// end of get_ure_page_url()
/**
* Compare if current URL path is equal to the required one
* if $path is empty, then just check if URL leads to wp-admin
* @param string $path
* @return boolean
*/
public function is_right_admin_path($path='') {
$result = true;
$admin_url = admin_url($path);
$parsed = parse_url($admin_url);
$full_path = $parsed['path'];
if ( stripos($_SERVER['REQUEST_URI'], $full_path)===false ) {
$result = false;
}
return $result;
}
// end of is_right_admin_path()
}
// end of URE_Lib class
@@ -0,0 +1,162 @@
<?php
/**
* Class to provide the routine for the own User Role Editor user capabilities list
*
* @package User-Role-Editor
* @subpackage Admin
* @author Vladimir Garagulya <support@role-editor.com>
* @copyright Copyright (c) 2010 - 2016, Vladimir Garagulya
**/
class URE_Own_Capabilities {
const URE_KEY_CAP_TR = 'ure_key_cap';
const URE_SETTINGS_CAP_TR = 'ure_settings_cap';
public static function get_caps() {
$lib = URE_Lib::get_instance();
$ure_caps = array(
'ure_edit_roles' => 1,
'ure_create_roles' => 1,
'ure_delete_roles' => 1,
'ure_create_capabilities' => 1,
'ure_delete_capabilities' => 1,
'ure_manage_options' => 1,
'ure_reset_roles' => 1
);
if ($lib->is_pro()) {
$multisite = $lib->get('multisite');
$ure_caps['ure_export_roles'] = 1;
$ure_caps['ure_import_roles'] = 1;
$ure_caps['ure_admin_menu_access'] = 1;
$ure_caps['ure_widgets_access'] = 1;
$ure_caps['ure_widgets_show_access'] = 1;
$ure_caps['ure_meta_boxes_access'] = 1;
$ure_caps['ure_other_roles_access'] = 1;
$ure_caps['ure_edit_posts_access'] = 1;
$ure_caps['ure_plugins_activation_access'] = 1;
$ure_caps['ure_view_posts_access'] = 1;
if ($multisite) {
$ure_caps['ure_themes_access'] = 1;
}
}
return $ure_caps;
}
// end of get_caps()
/**
* return key capability to have access to User Role Editor Plugin
*/
public static function get_key_capability() {
$key_cap = get_transient(self::URE_KEY_CAP_TR);
if (!empty($key_cap)) {
return $key_cap;
}
$lib = URE_Lib::get_instance();
$multisite = $lib->get('multisite');
if (!$multisite) {
$key_cap = URE_KEY_CAPABILITY;
} else {
$enable_simple_admin_for_multisite = $lib->get_option('enable_simple_admin_for_multisite', 0);
if ( (defined('URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE') && URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE == 1) ||
$enable_simple_admin_for_multisite) {
$key_cap = URE_KEY_CAPABILITY;
} else {
$key_cap = 'manage_network_plugins';
}
}
set_transient(self::URE_KEY_CAP_TR, $key_cap, 60);
return $key_cap;
}
// end of get_key_capability()
/**
* Return user capability for the User Role Editor Settings page
*
* @return string
*/
public static function get_settings_capability() {
$settings_cap = get_transient(self::URE_SETTINGS_CAP_TR);
if (!empty($settings_cap)) {
return $settings_cap;
}
$lib = URE_Lib::get_instance();
$multisite = $lib->get('multisite');
if (!$multisite) {
$settings_cap = 'ure_manage_options';
} else {
$enable_simple_admin_for_multisite = $lib->get_option('enable_simple_admin_for_multisite', 0);
if ((defined('URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE') && URE_ENABLE_SIMPLE_ADMIN_FOR_MULTISITE == 1) ||
$enable_simple_admin_for_multisite) {
$settings_cap = 'ure_manage_options';
} else {
$settings_cap = self::get_key_capability();
}
}
set_transient(self::URE_SETTINGS_CAP_TR, $settings_cap, 60);
return $settings_cap;
}
// end of get_settings_capability()
public static function init_caps() {
global $wp_roles;
if (!isset($wp_roles)) {
$wp_roles = new WP_Roles();
}
if (!isset($wp_roles->roles['administrator'])) {
return;
}
$lib = URE_Lib::get_instance();
$multisite = $lib->get('multisite');
// Do not turn on URE caps for local administrator by default under multisite, as there is a superadmin.
$turn_on = !$multisite;
$old_use_db = $wp_roles->use_db;
$wp_roles->use_db = true;
$administrator = $wp_roles->role_objects['administrator'];
$ure_caps = self::get_caps();
foreach(array_keys($ure_caps) as $cap) {
if (!$administrator->has_cap($cap)) {
$administrator->add_cap($cap, $turn_on);
}
}
$wp_roles->use_db = $old_use_db;
}
// end of init_caps()
/**
* Return list of URE capabilities with data about groups they were included
*
* @return array
*/
public static function get_caps_groups() {
$ure_caps = self::get_caps();
$caps = array();
foreach($ure_caps as $ure_cap=>$value) {
$caps[$ure_cap] = array('custom', 'user_role_editor');
}
return $caps;
}
// end of get_caps_groups()
}
// end of URE_Capabilities class
@@ -52,7 +52,7 @@ class User_Role_Editor {
register_deactivation_hook(URE_PLUGIN_FULL_PATH, array($this, 'cleanup'));
// Who can use this plugin
$this->key_capability = $this->lib->get_key_capability();
$this->key_capability = URE_Own_Capabilities::get_key_capability();
// Process URE's internal tasks queue
$task_queue = URE_Task_Queue::get_instance();
@@ -201,8 +201,8 @@ class User_Role_Editor {
public function move_users_from_no_role_button() {
if ( stripos($_SERVER['REQUEST_URI'], 'wp-admin/users.php')===false ) {
if (!$this->lib->is_right_admin_path('users.php')) {
return;
}
@@ -223,12 +223,13 @@ class User_Role_Editor {
public function add_css_to_users_page() {
if ( stripos($_SERVER['REQUEST_URI'], 'wp-admin/users.php')===false ) {
return;
}
if (isset($_GET['page'])) {
return;
}
if (!$this->lib->is_right_admin_path('users.php')) {
return;
}
wp_enqueue_style('wp-jquery-ui-dialog');
wp_enqueue_style('ure-admin-css', URE_PLUGIN_URL . 'css/ure-admin.css', array(), false, 'screen');
@@ -239,12 +240,12 @@ class User_Role_Editor {
public function add_js_to_users_page() {
if ( stripos($_SERVER['REQUEST_URI'], 'wp-admin/users.php')===false ) {
return;
}
if (isset($_GET['page'])) {
return;
}
if (!$this->lib->is_right_admin_path('users.php')) {
return;
}
wp_enqueue_script('jquery-ui-dialog', false, array('jquery-ui-core','jquery-ui-button', 'jquery') );
wp_register_script( 'ure-users-js', plugins_url( '/js/ure-users.js', URE_PLUGIN_FULL_PATH ) );
@@ -536,7 +537,7 @@ class User_Role_Editor {
$multisite = $this->lib->get('multisite');
$active_for_network = $this->lib->get('active_for_network');
if ( !$multisite || ($multisite && !$active_for_network) ) {
$settings_capability = $this->lib->get_settings_capability();
$settings_capability = URE_Own_Capabilities::get_settings_capability();
$this->settings_page_hook = add_options_page(
$translated_title,
$translated_title,
@@ -685,7 +686,7 @@ class User_Role_Editor {
public function settings() {
$settings_capability = $this->lib->get_settings_capability();
$settings_capability = URE_Own_Capabilities::get_settings_capability();
if (!current_user_can($settings_capability)) {
wp_die(esc_html__( 'You do not have sufficient permissions to manage options for User Role Editor.', 'user-role-editor' ));
}
@@ -776,7 +777,7 @@ class User_Role_Editor {
function setup() {
$this->lib->make_roles_backup();
$this->lib->init_ure_caps();
URE_Own_Capabilities::init_caps();
$task_queue = URE_Task_Queue::get_instance();
$task_queue->add('on_activation');
@@ -796,6 +797,7 @@ class User_Role_Editor {
wp_enqueue_script('ure-js');
wp_localize_script('ure-js', 'ure_data', array(
'wp_nonce' => wp_create_nonce('user-role-editor'),
'network_admin' => is_network_admin() ? 1 : 0,
'page_url' => $page_url,
'is_multisite' => is_multisite() ? 1 : 0,
'confirm_role_update' => $confirm_role_update ? 1 : 0,
@@ -130,9 +130,9 @@ class URE_View {
$caps_readable = $this->lib->get('caps_readable');
$caps_groups_manager = URE_Capabilities_Groups_Manager::get_instance();
$key_capability = $this->lib->get_key_capability();
$key_capability = URE_Own_Capabilities::get_key_capability();
$user_is_ure_admin = current_user_can($key_capability);
$ure_caps = $this->lib->get_ure_caps();
$ure_caps = URE_Own_Capabilities::get_caps();
$output = '<div id="ure_caps_list_container">'
. '<div id="ure_caps_list">';
@@ -183,12 +183,12 @@ class URE_View {
}
}
$class = 'class="' . implode(' ', $classes) .'"';
$cap_id_esc = URE_Capability::escape($cap_id);
$cap_html = '<div id="ure_cap_div_'. $cap_id_esc .'" '. $class .'><input type="checkbox" name="' . $cap_id_esc . '" id="' .
$cap_id_esc . '" value="' . $cap_id .'" '. $checked . ' ' . $disabled . ' ' . $onclick_for_admin .
'class="ure-cap-cb">';
if ($caps_readable) {
$cap_ind = 'human';
$cap_ind_alt = 'inner';
@@ -265,14 +265,16 @@ class URE_View {
</div>
<div class="ure-table-cell ure-caps-option nowrap">
<?php esc_html_e('Quick filter:', 'user-role-editor'); ?>&nbsp;
<input type="text" id="quick_filter" name="quick_filter" value="" size="20" onkeyup="ure_filter_capabilities(this.value);" />
<input type="text" id="quick_filter" name="quick_filter" value="" size="10" onkeyup="ure_filter_capabilities(this.value);" />&nbsp;&nbsp;&nbsp;
<input type="checkbox" id="granted_only" name="granted_only" />
<label for="granted_only"><?php esc_html_e('Granted Only', 'user-role-editor'); ?></label>&nbsp;
</div>
<div class="ure-table-cell ure-caps-option nowrap">
<?php esc_html_e('Columns:', 'user-role-editor');?>
<select id="caps_columns_quant" name="caps_columns_quant" onchange="ure_change_caps_columns_quant();">
<option value="1" <?php echo $this->lib->option_selected(1, $caps_columns_quant);?> >1</option>
<option value="2" <?php echo $this->lib->option_selected(2, $caps_columns_quant);?> >2</option>
<option value="3" <?php echo $this->lib->option_selected(3, $caps_columns_quant);?> >3</option>
<option value="1" <?php selected(1, $caps_columns_quant);?> >1</option>
<option value="2" <?php selected(2, $caps_columns_quant);?> >2</option>
<option value="3" <?php selected(3, $caps_columns_quant);?> >3</option>
</select>
</div>
</div>
@@ -54,7 +54,7 @@ class URE_Woocommerce_Capabilities {
/**
* Returns full list of WooCommerce plugin user capabilities
*/
public static function get() {
public static function get_caps_groups() {
$caps = array(
'manage_woocommerce'=>array('custom', 'woocommerce', 'woocommerce_core'),
@@ -11,6 +11,7 @@
require_once(URE_PLUGIN_DIR .'includes/define-constants.php');
require_once(URE_PLUGIN_DIR .'includes/misc-support-stuff.php');
require_once(URE_PLUGIN_DIR .'includes/classes/task-queue.php');
require_once(URE_PLUGIN_DIR .'includes/classes/ure-own-capabilities.php');
require_once(URE_PLUGIN_DIR .'includes/classes/bbpress.php');
require_once(URE_PLUGIN_DIR .'includes/classes/assign-role.php');
require_once(URE_PLUGIN_DIR .'includes/classes/user-other-roles.php');
@@ -51,4 +51,4 @@ if (!function_exists('ure_hide_admin_bar')) {
}
// end of hide_admin_bar()
}
}
@@ -1,5 +1,3 @@
var ure_obj = {selected_group: 'all', caps_counter: null};
// get/post via jQuery
(function ($) {
$.extend({
@@ -22,6 +20,97 @@ var ure_obj = {selected_group: 'all', caps_counter: null};
});
})(jQuery);
var ure_ajax_get_caps_to_remove = null;
jQuery(document).ready(function() {
// Get from the server a list of capabilities we can delete and show dialog to select what to delete
ure_ajax_get_caps_to_remove = {
url: ajaxurl,
type: 'POST',
dataType: 'html',
data: {
action: 'ure_ajax',
sub_action: 'get_caps_to_remove',
current_role: jQuery('#user_role').val(),
network_admin: ure_data.network_admin,
wp_nonce: ure_data.wp_nonce
},
success: function (response) {
var data = jQuery.parseJSON(response);
if (typeof data.result !== 'undefined') {
if (data.result === 'success') {
jQuery('#ure_delete_capability_dialog .ure-input').html(data.html);
ure_main.show_delete_capability_dialog();
} else if (data.result === 'failure') {
alert(data.message);
} else {
alert('Wrong response: ' + response)
}
} else {
alert('Wrong response: ' + response)
}
},
error: function (XMLHttpRequest, textStatus, exception) {
alert("Ajax failure\n" + XMLHttpRequest.statusText);
},
async: true
};
});
// Main User Role Editor object
var ure_main = {
selected_group: 'all',
caps_counter: null,
class_prefix: 'ure-',
show_delete_capability_dialog: function () {
jQuery('#ure_delete_capability_dialog').dialog({
dialogClass: 'wp-dialog',
modal: true,
autoOpen: true,
closeOnEscape: true,
width: 350,
height: 400,
resizable: false,
title: ure_data.delete_capability,
buttons: {
'Delete Capability': function () {
if (!confirm(ure_data.delete_capability + ' - ' + ure_data.delete_capability_warning)) {
return;
}
jQuery('#ure_remove_caps_form').submit();
jQuery(this).dialog('close');
},
Cancel: function () {
jQuery(this).dialog('close');
}
}
});
// translate buttons caption
jQuery('.ui-dialog-buttonpane button:contains("Delete Capability")').attr('id', 'dialog-delete-capability-button');
jQuery('#dialog-delete-capability-button').html(ure_ui_button_text(ure_data.delete_capability));
jQuery('.ui-dialog-buttonpane button:contains("Cancel")').attr('id', 'delete-capability-dialog-cancel-button');
jQuery('#delete-capability-dialog-cancel-button').html(ure_ui_button_text(ure_data.cancel));
jQuery('#ure_remove_caps_select_all').click(this.remove_caps_auto_select);
},
remove_caps_auto_select: function (event) {
if (event.shiftKey) {
jQuery('.ure-cb-column').each(function () { // reverse selection
jQuery(this).prop('checked', !jQuery(this).prop('checked'));
});
} else { // switch On/Off all checkboxes
jQuery('.ure-cb-column').prop('checked', jQuery('#ure_remove_caps_select_all').prop('checked'));
}
}
}; // end of ure_main declaration
//-------------------------------
function ure_ui_button_text(caption) {
var wrapper = '<span class="ui-button-text">' + caption + '</span>';
@@ -45,6 +134,7 @@ jQuery(function ($) {
ure_count_caps_in_groups();
ure_sizes_update();
$('#ure_select_all_caps').click(ure_auto_select_caps);
$('#granted_only').click(ure_show_granted_caps_only);
$('#ure_caps_groups_list').selectable({
selected: function( event, ui ) {
// do not allow multiple selection
@@ -54,22 +144,6 @@ jQuery(function ($) {
});
ure_select_selectable_element($('#ure_caps_groups_list'), $('#ure_caps_group_all'));
if (typeof ure_current_role === 'undefined' || 'administrator' !== ure_current_role) {
$('#ure_unselect_all').button({
label: ure_data.unselect_all
}).click(function (event) {
event.preventDefault();
ure_select_all(0);
});
$('#ure_reverse_selection').button({
label: ure_data.reverse
}).click(function (event) {
event.preventDefault();
ure_select_all(-1);
});
}
$('#ure_update_role').button({
label: ure_data.update
}).click(function () {
@@ -184,7 +258,7 @@ jQuery(function ($) {
ure_show_rename_role_dialog();
});
function ure_show_delete_role_dialog() {
$('#ure_delete_role_dialog').dialog({
dialogClass: 'wp-dialog',
@@ -222,7 +296,7 @@ jQuery(function ($) {
label: ure_data.delete_role
}).click(function (event) {
event.preventDefault();
ure_show_delete_role_dialog();
ure_show_delete_role_dialog();
});
@@ -271,50 +345,16 @@ jQuery(function ($) {
event.preventDefault();
ure_show_add_capability_dialog();
});
function ure_show_delete_capability_dialog() {
$('#ure_delete_capability_dialog').dialog({
dialogClass: 'wp-dialog',
modal: true,
autoOpen: true,
closeOnEscape: true,
width: 320,
height: 190,
resizable: false,
title: ure_data.delete_capability,
buttons: {
'Delete Capability': function () {
if (!confirm(ure_data.delete_capability + ' - ' + ure_data.delete_capability_warning)) {
return;
}
$(this).dialog('close');
var user_capability_id = $('#remove_user_capability').val();
$.ure_postGo(ure_data.page_url,
{action: 'delete-user-capability', user_capability_id: user_capability_id, ure_nonce: ure_data.wp_nonce});
},
Cancel: function () {
$(this).dialog('close');
}
}
});
// translate buttons caption
$('.ui-dialog-buttonpane button:contains("Delete Capability")').attr('id', 'dialog-delete-capability-button');
$('#dialog-delete-capability-button').html(ure_ui_button_text(ure_data.delete_capability));
$('.ui-dialog-buttonpane button:contains("Cancel")').attr('id', 'delete-capability-dialog-cancel-button');
$('#delete-capability-dialog-cancel-button').html(ure_ui_button_text(ure_data.cancel));
}
if ($('#ure_delete_capability').length > 0) {
$('#ure_delete_capability').button({
label: ure_data.delete_capability
}).click(function (event) {
event.preventDefault();
ure_show_delete_capability_dialog()
$.ajax(ure_ajax_get_caps_to_remove);
});
}
}
function ure_show_default_role_dialog() {
@@ -407,7 +447,7 @@ jQuery(function ($) {
// change color of apply to all check box - for multi-site setup only
function ure_applyToAllOnClick(cb) {
function ure_apply_to_all_on_click(cb) {
el = document.getElementById('ure_apply_to_all_div');
if (cb.checked) {
el.style.color = '#FF0000';
@@ -415,7 +455,7 @@ function ure_applyToAllOnClick(cb) {
el.style.color = '#000000';
}
}
// end of ure_applyToAllOnClick()
// end of ure_apply_to_all_on_click()
// turn on checkbox back if clicked to turn off
@@ -427,46 +467,12 @@ function ure_turn_it_back(control) {
// end of ure_turn_it_back()
/**
* Manipulate mass capability checkboxes selection
* @param {bool} selected
* @returns {none}
*/
function ure_select_all(selected) {
var qfilter = jQuery('#quick_filter').val();
var form = document.getElementById('ure_form');
for (i = 0; i < form.elements.length; i++) {
el = form.elements[i];
if (el.type !== 'checkbox') {
continue;
}
if (el.name === 'ure_caps_readable' || el.name === 'ure_show_deprecated_caps' ||
el.name === 'ure_apply_to_all' || el.disabled ||
el.name.substr(0, 8) === 'wp_role_') {
continue;
}
if (qfilter !== '' && !form.elements[i].parentNode.ure_tag) {
continue;
}
if (selected >= 0) {
form.elements[i].checked = selected;
} else {
form.elements[i].checked = !form.elements[i].checked;
}
}
}
// end of ure_select_all()
function ure_apply_selection(cb_id) {
var qfilter = jQuery('#quick_filter').val();
var parent_div = jQuery('#ure_cap_div_'+ cb_id);
var disabled = jQuery('#'+ cb_id).attr('disabled');
var result = false;
if (parent_div.hasClass(ure_obj.selected_group) && // make selection inside currently selected group of capabilities only
if (parent_div.hasClass(ure_main.class_prefix + ure_main.selected_group) && // make selection inside currently selected group of capabilities only
!parent_div.hasClass('hidden') && disabled!=='disabled') { // select not hidden and not disabled checkboxes (capabilities) only
// if quick filter is not empty, then apply selection to the tagged element only
if (qfilter==='' || parent_div.hasClass('ure_tag')) {
@@ -479,31 +485,31 @@ function ure_apply_selection(cb_id) {
function ure_auto_select_caps(event) {
jQuery(function($) {
if (event.shiftKey) {
$('.ure-cap-cb').each(function () { // reverse selection
if (ure_apply_selection(this.id)) {
$(this).prop('checked', !$(this).prop('checked'));
}
});
} else {
$('.ure-cap-cb').each(function () { // switch On/Off all checkboxes
if (ure_apply_selection(this.id)) {
$(this).prop('checked', $('#ure_select_all_caps').prop('checked'));
}
});
}
});
if (event.shiftKey) {
jQuery('.ure-cap-cb').each(function () { // reverse selection
if (ure_apply_selection(this.id)) {
jQuery(this).prop('checked', !jQuery(this).prop('checked'));
}
});
} else {
jQuery('.ure-cap-cb').each(function () { // switch On/Off all checkboxes
if (ure_apply_selection(this.id)) {
jQuery(this).prop('checked', jQuery('#ure_select_all_caps').prop('checked'));
}
});
}
}
function ure_turn_caps_readable(user_id) {
var ure_object = 'user';
var ure_obj = 'user';
if (user_id === 0) {
ure_object = 'role';
ure_obj = 'role';
}
jQuery.ure_postGo(ure_data.page_url, {action: 'caps-readable', object: ure_object, user_id: user_id, ure_nonce: ure_data.wp_nonce});
jQuery.ure_postGo(ure_data.page_url, {action: 'caps-readable', object: ure_obj, user_id: user_id, ure_nonce: ure_data.wp_nonce});
}
// end of ure_turn_caps_readable()
@@ -511,13 +517,11 @@ function ure_turn_caps_readable(user_id) {
function ure_turn_deprecated_caps(user_id) {
var ure_object = '';
var ure_obj = 'user';
if (user_id === 0) {
ure_object = 'role';
} else {
ure_object = 'user';
ure_obj = 'role';
}
jQuery.ure_postGo(ure_data.page_url, {action: 'show-deprecated-caps', object: ure_object, user_id: user_id, ure_nonce: ure_data.wp_nonce});
jQuery.ure_postGo(ure_data.page_url, {action: 'show-deprecated-caps', object: ure_obj, user_id: user_id, ure_nonce: ure_data.wp_nonce});
}
// ure_turn_deprecated_caps()
@@ -558,9 +562,11 @@ function ure_hide_pro_banner() {
function ure_caps_refresh_all() {
jQuery('.ure-cap-div').each(function () {
if (jQuery(this).hasClass('hidden') && !jQuery(this).hasClass('deprecated')) {
jQuery(this).removeClass('hidden');
}
if (jQuery(this).hasClass('hidden')) {
if (!jQuery(this).hasClass(ure_main.class_prefix + 'deprecated')) {
jQuery(this).removeClass('hidden');
}
}
});
}
@@ -569,18 +575,24 @@ function ure_caps_refresh_for_group(group_id) {
var show_deprecated = jQuery('#ure_show_deprecated_caps').attr('checked');
jQuery('.ure-cap-div').each(function () {
var el = jQuery(this);
if (el.hasClass(group_id)) {
if (el.hasClass(ure_main.class_prefix + group_id)) {
if (el.hasClass('hidden')) {
if (el.hasClass('blocked')) {
return;
}
if (el.hasClass('deprecated')) {
if (el.hasClass(ure_main.class_prefix + 'deprecated')) {
if (group_id==='deprecated' || show_deprecated) {
el.removeClass('hidden');
}
} else {
el.removeClass('hidden');
}
} else {
if (el.hasClass(ure_main.class_prefix + 'deprecated')) {
if (!show_deprecated) {
el.addClass('hidden');
}
}
}
} else {
if (!el.hasClass('hidden')) {
@@ -594,25 +606,26 @@ function ure_caps_refresh_for_group(group_id) {
function ure_caps_refresh(group) {
var group_id = group.substr(15);
ure_obj.selected_group = group_id;
ure_main.selected_group = group_id;
if (group_id === 'all') {
ure_caps_refresh_all();
} else {
ure_caps_refresh_for_group(group_id);
}
ure_change_caps_columns_quant();
jQuery('#granted_only').attr('checked', false);
}
function ure_validate_columns(columns) {
if (columns==1 || ure_obj.selected_group=='all') {
if (columns==1 || ure_main.selected_group=='all') {
return columns;
}
// Do not split list on columns in case it contains less then < 25 capabilities
for (i=0; i<ure_obj.caps_counter.length; i++) {
if (ure_obj.caps_counter[i].id==ure_obj.selected_group) {
if (ure_obj.caps_counter[i].total<=25) {
for (i=0; i<ure_main.caps_counter.length; i++) {
if (ure_main.caps_counter[i].id==ure_main.selected_group) {
if (ure_main.caps_counter[i].total<=25) {
columns = 1;
}
break;
@@ -635,11 +648,11 @@ function ure_change_caps_columns_quant() {
function ure_init_caps_counter() {
ure_obj.caps_counter = new Array();
ure_main.caps_counter = new Array();
jQuery('#ure_caps_groups_list li').each(function() {
var group_id = jQuery(this).attr('id').substr(15);
group_counter = {'id': group_id, 'total': 0, 'granted':0};
ure_obj.caps_counter.push(group_counter);
ure_main.caps_counter.push(group_counter);
});
}
@@ -651,19 +664,19 @@ function ure_count_caps_in_groups() {
jQuery('.ure-cap-div').each(function () {
var cap_div = jQuery(this);
var capability = cap_div.attr('id').substr(12);
for (i=0; i<ure_obj.caps_counter.length; i++) {
if (cap_div.hasClass(ure_obj.caps_counter[i].id)) {
ure_obj.caps_counter[i].total++;
for (i=0; i<ure_main.caps_counter.length; i++) {
if (cap_div.hasClass(ure_main.class_prefix + ure_main.caps_counter[i].id)) {
ure_main.caps_counter[i].total++;
if (jQuery('#'+ capability).is(':checked')) {
ure_obj.caps_counter[i].granted++;
ure_main.caps_counter[i].granted++;
}
}
}
});
for (i=0; i<ure_obj.caps_counter.length; i++) {
var el = jQuery('#ure_caps_group_'+ ure_obj.caps_counter[i].id);
var value = el.text() +' ('+ ure_obj.caps_counter[i].total +'/'+ ure_obj.caps_counter[i].granted +')';
for (i=0; i<ure_main.caps_counter.length; i++) {
var el = jQuery('#ure_caps_group_'+ ure_main.caps_counter[i].id);
var value = el.text() +' ('+ ure_main.caps_counter[i].total +'/'+ ure_main.caps_counter[i].granted +')';
el.text(value);
}
@@ -679,4 +692,33 @@ function ure_sizes_update() {
jQuery(window).resize(function() {
ure_sizes_update();
});
});
function ure_show_granted_caps_only() {
var show_deprecated = jQuery('#ure_show_deprecated_caps').attr('checked');
var hide_flag = jQuery('#granted_only').attr('checked');
jQuery('.ure-cap-div').each(function () {
var cap_div = jQuery(this);
if (!cap_div.hasClass(ure_main.class_prefix + ure_main.selected_group)) { // apply to the currently selected group only
return;
}
var cap_id = cap_div.attr('id').substr(12);
var granted = jQuery('#'+ cap_id).attr('checked');
if (granted) {
return;
}
if (hide_flag) {
if (!cap_div.hasClass('hidden')) {
cap_div.addClass('hidden');
}
} else {
if (cap_div.hasClass('deprecated') && !show_deprecated) {
return;
}
if (cap_div.hasClass('hidden')) {
cap_div.removeClass('hidden');
}
}
});
}
@@ -77,7 +77,7 @@ function ure_move_users_from_no_role() {
}
},
error: function(XMLHttpRequest, textStatus, exception) {
alert("Ajax failure\n" + errortext);
alert("Ajax failure\n" + XMLHttpRequest.statusText);
},
async: true
});
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: User Role Editor 4.19.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-17 11:21+0700\n"
"POT-Creation-Date: 2016-12-13 11:10+0700\n"
"PO-Revision-Date: \n"
"Last-Translator: Vladimir Garagulya <vladimir@shinephp.com>\n"
"Language-Team: https://www.role-editor.com <support@role-editor.com>\n"
@@ -21,54 +21,101 @@ msgstr ""
msgid "Custom Post Types"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:73
msgid "All"
#: ../includes/classes/capabilities-groups-manager.php:75
#: ../includes/classes/ure-lib.php:230
#: ../includes/classes/user-role-editor.php:525
#: ../includes/classes/user-role-editor.php:556
msgid "User Role Editor"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:74
#: ../includes/classes/capabilities-groups-manager.php:90
msgid "WooCommerce"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:91
#: ../includes/classes/capabilities-groups-manager.php:111
msgid "Core"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:75
#: ../includes/classes/user-role-editor.php:482
#: ../includes/classes/capabilities-groups-manager.php:110
msgid "All"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:112
#: ../includes/classes/user-role-editor.php:497
#: ../includes/settings-template.php:21
msgid "General"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:76
#: ../includes/classes/capabilities-groups-manager.php:113
msgid "Themes"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:77
#: ../includes/classes/capabilities-groups-manager.php:114
msgid "Posts"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:78
#: ../includes/classes/capabilities-groups-manager.php:115
msgid "Pages"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:79
#: ../includes/classes/capabilities-groups-manager.php:116
msgid "Plugins"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:80
#: ../includes/classes/capabilities-groups-manager.php:117
msgid "Users"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:84
#: ../includes/classes/user-role-editor.php:500
#: ../includes/classes/capabilities-groups-manager.php:121
#: ../includes/classes/user-role-editor.php:515
#: ../includes/settings-template.php:34
msgid "Multisite"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:86
#: ../includes/classes/capabilities-groups-manager.php:123
msgid "Deprecated"
msgstr ""
#: ../includes/classes/capabilities-groups-manager.php:91
#: ../includes/classes/capabilities-groups-manager.php:126
msgid "Custom capabilities"
msgstr ""
#: ../includes/classes/capability.php:56 ../includes/classes/capability.php:164
#: ../includes/classes/ure-lib.php:1223 ../includes/classes/ure-lib.php:1498
#: ../includes/classes/ure-lib.php:1614 ../includes/classes/ure-lib.php:1662
#: ../includes/classes/user-role-editor.php:766
msgid "Insufficient permissions to work with User Role Editor"
msgstr ""
#: ../includes/classes/capability.php:66
msgid "Error: Capability name must contain latin characters and digits only!"
msgstr ""
#: ../includes/classes/capability.php:78
#, php-format
msgid "Capability %s is added successfully"
msgstr ""
#: ../includes/classes/capability.php:80
#, php-format
msgid "Capability %s exists already"
msgstr ""
#: ../includes/classes/capability.php:171
#: ../includes/classes/capability.php:176
msgid "There are no capabilities available for deletion!"
msgstr ""
#: ../includes/classes/capability.php:182
#, php-format
msgid "Capability %s was removed successfully"
msgstr ""
#: ../includes/classes/capability.php:185
msgid "capabilities were removed successfully"
msgstr ""
#: ../includes/classes/role-additional-options.php:69
msgid "Hide admin bar"
msgstr ""
@@ -85,48 +132,44 @@ msgstr ""
msgid "Delete All Unused Roles"
msgstr ""
#: ../includes/classes/role-view.php:168 ../includes/classes/role-view.php:179
#: ../includes/classes/role-view.php:208 ../includes/classes/role-view.php:219
msgid "Role name (ID): "
msgstr ""
#: ../includes/classes/role-view.php:170 ../includes/classes/role-view.php:181
#: ../includes/classes/role-view.php:210 ../includes/classes/role-view.php:221
msgid "Display Role Name: "
msgstr ""
#: ../includes/classes/role-view.php:172
#: ../includes/classes/role-view.php:212
msgid "Make copy of: "
msgstr ""
#: ../includes/classes/role-view.php:188
#: ../includes/classes/role-view.php:228
msgid "Select Role:"
msgstr ""
#: ../includes/classes/role-view.php:207
msgid "Delete:"
msgstr ""
#: ../includes/classes/role-view.php:214
#: ../includes/classes/role-view.php:253
msgid "Capability name (ID): "
msgstr ""
#: ../includes/classes/role-view.php:332 ../includes/classes/user-view.php:154
#: ../includes/classes/role-view.php:372 ../includes/classes/user-view.php:154
msgid "Show capabilities in human readable form"
msgstr ""
#: ../includes/classes/role-view.php:342 ../includes/classes/screen-help.php:21
#: ../includes/classes/role-view.php:382 ../includes/classes/screen-help.php:21
#: ../includes/classes/user-view.php:164 ../includes/settings-template.php:69
msgid "Show deprecated capabilities"
msgstr ""
#: ../includes/classes/role-view.php:346
#: ../includes/classes/role-view.php:386
msgid "If checked, then apply action to ALL sites of this Network"
msgstr ""
#: ../includes/classes/role-view.php:359
#: ../includes/classes/role-view.php:399
msgid "Apply to All Sites"
msgstr ""
#: ../includes/classes/role-view.php:376
#: ../includes/classes/role-view.php:416
msgid "Select Role and change its capabilities:"
msgstr ""
@@ -212,463 +255,414 @@ msgid ""
"limitation."
msgstr ""
#: ../includes/classes/ure-lib.php:292
#: ../includes/classes/ure-lib.php:207
msgid "Error: wrong request"
msgstr ""
#: ../includes/classes/ure-lib.php:327
#: ../includes/classes/user-role-editor.php:510
#: ../includes/classes/user-role-editor.php:541
msgid "User Role Editor"
msgstr ""
#: ../includes/classes/ure-lib.php:388
#: ../includes/classes/ure-lib.php:291
msgid "Error: "
msgstr ""
#: ../includes/classes/ure-lib.php:388
#: ../includes/classes/ure-lib.php:291
msgid "Role"
msgstr ""
#: ../includes/classes/ure-lib.php:389
#: ../includes/classes/ure-lib.php:292
msgid "does not exist"
msgstr ""
#: ../includes/classes/ure-lib.php:432
#: ../includes/classes/ure-lib.php:335
msgid "Role is updated successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:434
#: ../includes/classes/ure-lib.php:337
msgid "Roles are updated for all network"
msgstr ""
#: ../includes/classes/ure-lib.php:440
#: ../includes/classes/ure-lib.php:343
msgid "Error occured during role(s) update"
msgstr ""
#: ../includes/classes/ure-lib.php:447
#: ../includes/classes/ure-lib.php:350
msgid "User capabilities are updated successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:452
#: ../includes/classes/ure-lib.php:355
msgid "Error occured during user update"
msgstr ""
#: ../includes/classes/ure-lib.php:510
#: ../includes/classes/ure-lib.php:413
msgid "User Roles are restored to WordPress default values. "
msgstr ""
#: ../includes/classes/ure-lib.php:1047
msgid "read about"
msgstr ""
#: ../includes/classes/ure-lib.php:1048
msgid "user capability"
msgstr ""
#: ../includes/classes/ure-lib.php:1049
msgid "Help"
msgstr ""
#: ../includes/classes/ure-lib.php:1381 ../includes/classes/ure-lib.php:1657
#: ../includes/classes/ure-lib.php:1773 ../includes/classes/ure-lib.php:1821
#: ../includes/classes/ure-lib.php:2100 ../includes/classes/ure-lib.php:2143
#: ../includes/classes/user-role-editor.php:751
msgid "Insufficient permissions to work with User Role Editor"
msgstr ""
#: ../includes/classes/ure-lib.php:1620
#: ../includes/classes/ure-lib.php:1461
msgid "Error is occur. Please check the log file."
msgstr ""
#: ../includes/classes/ure-lib.php:1666 ../includes/classes/ure-lib.php:1733
#: ../includes/classes/ure-lib.php:1507 ../includes/classes/ure-lib.php:1574
msgid ""
"Error: Role ID must contain latin characters, digits, hyphens or underscore "
"only!"
msgstr ""
#: ../includes/classes/ure-lib.php:1670 ../includes/classes/ure-lib.php:1737
#: ../includes/classes/ure-lib.php:1511 ../includes/classes/ure-lib.php:1578
msgid ""
"Error: WordPress does not support numeric Role name (ID). Add latin "
"characters to it."
msgstr ""
#: ../includes/classes/ure-lib.php:1685
#: ../includes/classes/ure-lib.php:1526
#, php-format
msgid "Role %s exists already"
msgstr ""
#: ../includes/classes/ure-lib.php:1700
#: ../includes/classes/ure-lib.php:1541
msgid "Error is encountered during new role create operation"
msgstr ""
#: ../includes/classes/ure-lib.php:1702
#: ../includes/classes/ure-lib.php:1543
#, php-format
msgid "Role %s is created successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:1726
#: ../includes/classes/ure-lib.php:1567
msgid "Error: Role ID is empty!"
msgstr ""
#: ../includes/classes/ure-lib.php:1744
#: ../includes/classes/ure-lib.php:1585
msgid "Error: Empty role display name is not allowed."
msgstr ""
#: ../includes/classes/ure-lib.php:1751
#: ../includes/classes/ure-lib.php:1592
#, php-format
msgid "Role %s does not exists"
msgstr ""
#: ../includes/classes/ure-lib.php:1759
#: ../includes/classes/ure-lib.php:1600
#, php-format
msgid "Role %s is renamed to %s successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:1832
#: ../includes/classes/ure-lib.php:1673
msgid "Error encountered during role delete operation"
msgstr ""
#: ../includes/classes/ure-lib.php:1834
#: ../includes/classes/ure-lib.php:1675
msgid "Unused roles are deleted successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:1836
#: ../includes/classes/ure-lib.php:1677
#, php-format
msgid "Role %s is deleted successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:1867
#: ../includes/classes/ure-lib.php:1708
msgid "Error encountered during default role change operation"
msgstr ""
#: ../includes/classes/ure-lib.php:1870
#: ../includes/classes/ure-lib.php:1711
#, php-format
msgid "Default role for new users is set to %s successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:1873
#: ../includes/classes/ure-lib.php:1714
msgid "Can not set Administrator role as a default one"
msgstr ""
#: ../includes/classes/ure-lib.php:1875
#: ../includes/classes/ure-lib.php:1716
msgid "This role does not exist - "
msgstr ""
#: ../includes/classes/ure-lib.php:1891
#: ../includes/classes/ure-lib.php:1732
msgid "Editor"
msgstr ""
#: ../includes/classes/ure-lib.php:1892
#: ../includes/classes/ure-lib.php:1733
msgid "Author"
msgstr ""
#: ../includes/classes/ure-lib.php:1893
#: ../includes/classes/ure-lib.php:1734
msgid "Contributor"
msgstr ""
#: ../includes/classes/ure-lib.php:1894
#: ../includes/classes/ure-lib.php:1735
msgid "Subscriber"
msgstr ""
#: ../includes/classes/ure-lib.php:1896
#: ../includes/classes/ure-lib.php:1737
msgid "Switch themes"
msgstr ""
#: ../includes/classes/ure-lib.php:1897
#: ../includes/classes/ure-lib.php:1738
msgid "Edit themes"
msgstr ""
#: ../includes/classes/ure-lib.php:1898
#: ../includes/classes/ure-lib.php:1739
msgid "Activate plugins"
msgstr ""
#: ../includes/classes/ure-lib.php:1899
#: ../includes/classes/ure-lib.php:1740
msgid "Edit plugins"
msgstr ""
#: ../includes/classes/ure-lib.php:1900
#: ../includes/classes/ure-lib.php:1741
msgid "Edit users"
msgstr ""
#: ../includes/classes/ure-lib.php:1901
#: ../includes/classes/ure-lib.php:1742
msgid "Edit files"
msgstr ""
#: ../includes/classes/ure-lib.php:1902
#: ../includes/classes/ure-lib.php:1743
msgid "Manage options"
msgstr ""
#: ../includes/classes/ure-lib.php:1903
#: ../includes/classes/ure-lib.php:1744
msgid "Moderate comments"
msgstr ""
#: ../includes/classes/ure-lib.php:1904
#: ../includes/classes/ure-lib.php:1745
msgid "Manage categories"
msgstr ""
#: ../includes/classes/ure-lib.php:1905
#: ../includes/classes/ure-lib.php:1746
msgid "Manage links"
msgstr ""
#: ../includes/classes/ure-lib.php:1906
#: ../includes/classes/ure-lib.php:1747
msgid "Upload files"
msgstr ""
#: ../includes/classes/ure-lib.php:1907
#: ../includes/classes/ure-lib.php:1748
msgid "Import"
msgstr ""
#: ../includes/classes/ure-lib.php:1908
#: ../includes/classes/ure-lib.php:1749
msgid "Unfiltered html"
msgstr ""
#: ../includes/classes/ure-lib.php:1909
#: ../includes/classes/ure-lib.php:1750
msgid "Edit posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1910
#: ../includes/classes/ure-lib.php:1751
msgid "Edit others posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1911
#: ../includes/classes/ure-lib.php:1752
msgid "Edit published posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1912
#: ../includes/classes/ure-lib.php:1753
msgid "Publish posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1913
#: ../includes/classes/ure-lib.php:1754
msgid "Edit pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1914
#: ../includes/classes/ure-lib.php:1755
msgid "Read"
msgstr ""
#: ../includes/classes/ure-lib.php:1915
#: ../includes/classes/ure-lib.php:1756
msgid "Level 10"
msgstr ""
#: ../includes/classes/ure-lib.php:1916
#: ../includes/classes/ure-lib.php:1757
msgid "Level 9"
msgstr ""
#: ../includes/classes/ure-lib.php:1917
#: ../includes/classes/ure-lib.php:1758
msgid "Level 8"
msgstr ""
#: ../includes/classes/ure-lib.php:1918
#: ../includes/classes/ure-lib.php:1759
msgid "Level 7"
msgstr ""
#: ../includes/classes/ure-lib.php:1919
#: ../includes/classes/ure-lib.php:1760
msgid "Level 6"
msgstr ""
#: ../includes/classes/ure-lib.php:1920
#: ../includes/classes/ure-lib.php:1761
msgid "Level 5"
msgstr ""
#: ../includes/classes/ure-lib.php:1921
#: ../includes/classes/ure-lib.php:1762
msgid "Level 4"
msgstr ""
#: ../includes/classes/ure-lib.php:1922
#: ../includes/classes/ure-lib.php:1763
msgid "Level 3"
msgstr ""
#: ../includes/classes/ure-lib.php:1923
#: ../includes/classes/ure-lib.php:1764
msgid "Level 2"
msgstr ""
#: ../includes/classes/ure-lib.php:1924
#: ../includes/classes/ure-lib.php:1765
msgid "Level 1"
msgstr ""
#: ../includes/classes/ure-lib.php:1925
#: ../includes/classes/ure-lib.php:1766
msgid "Level 0"
msgstr ""
#: ../includes/classes/ure-lib.php:1926
#: ../includes/classes/ure-lib.php:1767
msgid "Edit others pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1927
#: ../includes/classes/ure-lib.php:1768
msgid "Edit published pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1928
#: ../includes/classes/ure-lib.php:1769
msgid "Publish pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1929
#: ../includes/classes/ure-lib.php:1770
msgid "Delete pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1930
#: ../includes/classes/ure-lib.php:1771
msgid "Delete others pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1931
#: ../includes/classes/ure-lib.php:1772
msgid "Delete published pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1932
#: ../includes/classes/ure-lib.php:1773
msgid "Delete posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1933
#: ../includes/classes/ure-lib.php:1774
msgid "Delete others posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1934
#: ../includes/classes/ure-lib.php:1775
msgid "Delete published posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1935
#: ../includes/classes/ure-lib.php:1776
msgid "Delete private posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1936
#: ../includes/classes/ure-lib.php:1777
msgid "Edit private posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1937
#: ../includes/classes/ure-lib.php:1778
msgid "Read private posts"
msgstr ""
#: ../includes/classes/ure-lib.php:1938
#: ../includes/classes/ure-lib.php:1779
msgid "Delete private pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1939
#: ../includes/classes/ure-lib.php:1780
msgid "Edit private pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1940
#: ../includes/classes/ure-lib.php:1781
msgid "Read private pages"
msgstr ""
#: ../includes/classes/ure-lib.php:1941
#: ../includes/classes/ure-lib.php:1782
msgid "Delete users"
msgstr ""
#: ../includes/classes/ure-lib.php:1942
#: ../includes/classes/ure-lib.php:1783
msgid "Create users"
msgstr ""
#: ../includes/classes/ure-lib.php:1943
#: ../includes/classes/ure-lib.php:1784
msgid "Unfiltered upload"
msgstr ""
#: ../includes/classes/ure-lib.php:1944
#: ../includes/classes/ure-lib.php:1785
msgid "Edit dashboard"
msgstr ""
#: ../includes/classes/ure-lib.php:1945
#: ../includes/classes/ure-lib.php:1786
msgid "Update plugins"
msgstr ""
#: ../includes/classes/ure-lib.php:1946
#: ../includes/classes/ure-lib.php:1787
msgid "Delete plugins"
msgstr ""
#: ../includes/classes/ure-lib.php:1947
#: ../includes/classes/ure-lib.php:1788
msgid "Install plugins"
msgstr ""
#: ../includes/classes/ure-lib.php:1948
#: ../includes/classes/ure-lib.php:1789
msgid "Update themes"
msgstr ""
#: ../includes/classes/ure-lib.php:1949
#: ../includes/classes/ure-lib.php:1790
msgid "Install themes"
msgstr ""
#: ../includes/classes/ure-lib.php:1950
#: ../includes/classes/ure-lib.php:1791
msgid "Update core"
msgstr ""
#: ../includes/classes/ure-lib.php:1951
#: ../includes/classes/ure-lib.php:1792
msgid "List users"
msgstr ""
#: ../includes/classes/ure-lib.php:1952
#: ../includes/classes/ure-lib.php:1793
msgid "Remove users"
msgstr ""
#: ../includes/classes/ure-lib.php:1953
#: ../includes/classes/ure-lib.php:1794
msgid "Add users"
msgstr ""
#: ../includes/classes/ure-lib.php:1954
#: ../includes/classes/ure-lib.php:1795
msgid "Promote users"
msgstr ""
#: ../includes/classes/ure-lib.php:1955
#: ../includes/classes/ure-lib.php:1796
msgid "Edit theme options"
msgstr ""
#: ../includes/classes/ure-lib.php:1956
#: ../includes/classes/ure-lib.php:1797
msgid "Delete themes"
msgstr ""
#: ../includes/classes/ure-lib.php:1957
#: ../includes/classes/ure-lib.php:1798
msgid "Export"
msgstr ""
#: ../includes/classes/ure-lib.php:2111
msgid "Error: Capability name must contain latin characters and digits only!"
msgstr ""
#: ../includes/classes/ure-lib.php:2121
#, php-format
msgid "Capability %s is added successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:2123
#, php-format
msgid "Capability %s exists already"
msgstr ""
#: ../includes/classes/ure-lib.php:2150
#, php-format
msgid "Error! You do not have permission to delete this capability: %s!"
msgstr ""
#: ../includes/classes/ure-lib.php:2169
#, php-format
msgid "Capability %s was removed successfully"
msgstr ""
#: ../includes/classes/ure-lib.php:2209
#: ../includes/classes/ure-lib.php:1963
msgid "Version:"
msgstr ""
#: ../includes/classes/ure-lib.php:2210
#: ../includes/classes/ure-lib.php:1964
msgid "Author's website"
msgstr ""
#: ../includes/classes/ure-lib.php:2211
#: ../includes/classes/ure-lib.php:1965
msgid "Plugin webpage"
msgstr ""
#: ../includes/classes/ure-lib.php:2212
#: ../includes/classes/ure-lib.php:1966
msgid "Plugin download"
msgstr ""
#: ../includes/classes/ure-lib.php:2213
#: ../includes/classes/user-role-editor.php:459
#: ../includes/classes/ure-lib.php:1967
#: ../includes/classes/user-role-editor.php:474
msgid "Changelog"
msgstr ""
#: ../includes/classes/ure-lib.php:2214
#: ../includes/classes/ure-lib.php:1968
msgid "FAQ"
msgstr ""
#: ../includes/classes/ure-lib.php:2359
#: ../includes/classes/ure-lib.php:2150
#, php-format
msgid "Denied: %s"
msgstr ""
@@ -683,7 +677,7 @@ msgid "Select additional roles for this user"
msgstr ""
#: ../includes/classes/user-other-roles.php:161
#: ../includes/classes/user-role-editor.php:355
#: ../includes/classes/user-role-editor.php:356
msgid "Capabilities"
msgstr ""
@@ -695,178 +689,179 @@ msgstr ""
msgid "Additional Capabilities"
msgstr ""
#: ../includes/classes/user-role-editor.php:254
#: ../includes/classes/user-role-editor.php:255
msgid "Change role for users without role"
msgstr ""
#: ../includes/classes/user-role-editor.php:255
#: ../includes/classes/user-role-editor.php:256
msgid "To:"
msgstr ""
#: ../includes/classes/user-role-editor.php:256
#: ../includes/classes/user-role-editor.php:257
msgid "No rights"
msgstr ""
#: ../includes/classes/user-role-editor.php:257
#: ../includes/classes/user-role-editor.php:258
msgid "Provide new role"
msgstr ""
#: ../includes/classes/user-role-editor.php:329
#: ../includes/classes/user-role-editor.php:331
#: ../includes/classes/user-role-editor.php:330
#: ../includes/classes/user-role-editor.php:332
msgid "You do not have permission to edit this user."
msgstr ""
#: ../includes/classes/user-role-editor.php:448
#: ../includes/classes/user-role-editor.php:461
msgid "Settings"
msgstr ""
#: ../includes/classes/user-role-editor.php:488
#: ../includes/classes/user-role-editor.php:503
#: ../includes/settings-template.php:26
msgid "Additional Modules"
msgstr ""
#: ../includes/classes/user-role-editor.php:494
#: ../includes/classes/user-role-editor.php:509
#: ../includes/settings-template.php:30
msgid "Default Roles"
msgstr ""
#: ../includes/classes/user-role-editor.php:604
#: ../includes/classes/user-role-editor.php:622
#: ../includes/classes/user-role-editor.php:667
#: ../includes/classes/user-role-editor.php:619
#: ../includes/classes/user-role-editor.php:637
#: ../includes/classes/user-role-editor.php:682
msgid "User Role Editor options are updated"
msgstr ""
#: ../includes/classes/user-role-editor.php:650
#: ../includes/classes/user-role-editor.php:665
msgid "Default Roles are updated"
msgstr ""
#: ../includes/classes/user-role-editor.php:676
#: ../includes/classes/user-role-editor.php:691
msgid ""
"You do not have sufficient permissions to manage options for User Role "
"Editor."
msgstr ""
#: ../includes/classes/user-role-editor.php:788
#: ../includes/classes/user-role-editor.php:804
msgid "Confirm"
msgstr ""
#: ../includes/classes/user-role-editor.php:789
#: ../includes/classes/user-role-editor.php:805
msgid "Yes"
msgstr ""
#: ../includes/classes/user-role-editor.php:790
#: ../includes/classes/user-role-editor.php:806
msgid "No"
msgstr ""
#: ../includes/classes/user-role-editor.php:791
#: ../includes/classes/user-role-editor.php:807
msgid "Select All"
msgstr ""
#: ../includes/classes/user-role-editor.php:792
#: ../includes/classes/user-role-editor.php:808
msgid "Unselect All"
msgstr ""
#: ../includes/classes/user-role-editor.php:793
#: ../includes/classes/user-role-editor.php:809
msgid "Reverse"
msgstr ""
#: ../includes/classes/user-role-editor.php:794
#: ../includes/classes/user-role-editor.php:810
msgid "Update"
msgstr ""
#: ../includes/classes/user-role-editor.php:795
#: ../includes/classes/user-role-editor.php:811
msgid "Please confirm permissions update"
msgstr ""
#: ../includes/classes/user-role-editor.php:796
#: ../includes/classes/user-role-editor.php:812
msgid "Add New Role"
msgstr ""
#: ../includes/classes/user-role-editor.php:797
#: ../includes/classes/user-role-editor.php:802
#: ../includes/classes/user-role-editor.php:813
#: ../includes/classes/user-role-editor.php:818
msgid "Rename Role"
msgstr ""
#: ../includes/classes/user-role-editor.php:798
#: ../includes/classes/user-role-editor.php:814
msgid " Role name (ID) can not be empty!"
msgstr ""
#: ../includes/classes/user-role-editor.php:799
#: ../includes/classes/user-role-editor.php:815
msgid ""
" Role name (ID) must contain latin characters, digits, hyphens or underscore "
"only!"
msgstr ""
#: ../includes/classes/user-role-editor.php:800
#: ../includes/classes/user-role-editor.php:816
msgid ""
" WordPress does not support numeric Role name (ID). Add latin characters to "
"it."
msgstr ""
#: ../includes/classes/user-role-editor.php:801
#: ../includes/classes/user-role-editor.php:817
msgid "Add Role"
msgstr ""
#: ../includes/classes/user-role-editor.php:803
#: ../includes/classes/user-role-editor.php:819
msgid "Delete Role"
msgstr ""
#: ../includes/classes/user-role-editor.php:804
#: ../includes/classes/user-role-editor.php:820
msgid "Cancel"
msgstr ""
#: ../includes/classes/user-role-editor.php:805
#: ../includes/classes/user-role-editor.php:821
msgid "Add Capability"
msgstr ""
#: ../includes/classes/user-role-editor.php:806
#: ../includes/classes/user-role-editor.php:815
#: ../includes/classes/user-role-editor.php:822
#: ../includes/classes/user-role-editor.php:831
msgid "Delete Capability"
msgstr ""
#: ../includes/classes/user-role-editor.php:807
#: ../includes/classes/user-role-editor.php:823
msgid "Reset"
msgstr ""
#: ../includes/classes/user-role-editor.php:808
#: ../includes/classes/user-role-editor.php:824
msgid "DANGER! Resetting will restore default settings from WordPress Core."
msgstr ""
#: ../includes/classes/user-role-editor.php:809
#: ../includes/classes/user-role-editor.php:825
msgid ""
"If any plugins have changed capabilities in any way upon installation (such "
"as S2Member, WooCommerce, and many more), those capabilities will be DELETED!"
msgstr ""
#: ../includes/classes/user-role-editor.php:810
#: ../includes/classes/user-role-editor.php:826
msgid ""
"For more information on how to undo changes and restore plugin capabilities "
"go to"
msgstr ""
#: ../includes/classes/user-role-editor.php:812
#: ../includes/classes/user-role-editor.php:828
msgid "Continue?"
msgstr ""
#: ../includes/classes/user-role-editor.php:813
#: ../includes/classes/user-role-editor.php:829
msgid "Default Role"
msgstr ""
#: ../includes/classes/user-role-editor.php:814
#: ../includes/classes/user-role-editor.php:830
msgid "Set New Default Role"
msgstr ""
#: ../includes/classes/user-role-editor.php:816
#: ../includes/classes/user-role-editor.php:832
msgid ""
"Warning! Be careful - removing critical capability could crash some plugin "
"or other custom code"
msgstr ""
#: ../includes/classes/user-role-editor.php:817
#: ../includes/classes/user-role-editor.php:833
msgid " Capability name (ID) can not be empty!"
msgstr ""
#: ../includes/classes/user-role-editor.php:818
#: ../includes/classes/user-role-editor.php:834
msgid ""
" Capability name (ID) must contain latin characters, digits, hyphens or "
"underscore only!"
@@ -916,7 +911,11 @@ msgstr ""
msgid "Quick filter:"
msgstr ""
#: ../includes/classes/view.php:271
#: ../includes/classes/view.php:270
msgid "Granted Only"
msgstr ""
#: ../includes/classes/view.php:273
msgid "Columns:"
msgstr ""
@@ -1,6 +1,6 @@
User Role Editor WordPress plugin
Copyright 2009-2013 by Vladimir Garagulya - vladimir@shinephp.com
Copyright 2009-2016 by Vladimir Garagulya - vladimir@shinephp.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -3,8 +3,8 @@ Contributors: shinephp
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=vladimir%40shinephp%2ecom&lc=RU&item_name=ShinePHP%2ecom&item_number=User%20Role%20Editor%20WordPress%20plugin&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted
Tags: user, role, editor, security, access, permission, capability
Requires at least: 4.0
Tested up to: 4.6.1
Stable tag: 4.28
Tested up to: 4.7
Stable tag: 4.31
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -29,6 +29,7 @@ Do you need more functionality with quality support in the real time? Do you wis
[User Role Editor Pro](https://www.role-editor.com) includes extra modules:
<ul>
<li>Block selected admin menu items for role.</li>
<li>Hide selected front-end menu items for no logged-in visitors, logged-in users, roles.</li>
<li>Block selected widgets under "Appearance" menu for role.</li>
<li>Show widgets at front-end for selected roles.</li>
<li>Block selected meta boxes (dashboard, posts, pages, custom post types) for role.</li>
@@ -75,8 +76,24 @@ If you wish to check available translations or help with plugin translation to y
https://translate.wordpress.org/projects/wp-plugins/user-role-editor/
== Changelog ==
= [4.31] 14.12.2016 =
* New: It's possible to remove unused user capabilities by list.
* Fix: There was no support for installations with the hidden/changed URL to wp-admin. URE uses 'admin_url()' now to get and check admin URL, instead of direct comparing URL with 'wp-admin' string.
* Fix: Deprecated capabilities were shown in some cases at the 'Core' group even with "Show deprecated capabilities" mode switched off.
* Update: Capability groups CSS classes are prefixed with 'ure-' in order to the minimize possible CSS conflicts with other plugins/themes which may load styles with the same classes globally and break URE's markup.
= [4.30] 01.12.2016 =
* Update: compatible with WordPress 4.7
* New: "Granted Only" checkbox to the right from the "Quick Filter" input control allows to show only granted capabilities for the selected role or user.
= [4.29] 10.11.2016 =
* New: User Role Editor own user capabilities are grouped separately under Custom capabilities.
* Update: URE_Lib::is_super_admin() uses WordPress core is_super_admin() for multisite setup only. Superadmin is a user with 'administrator' role in the case of single site WordPress installation.
This is the difference with the WordPress core which counts as a superadmin (for single site WP installation) any user with a 'delete_users' capability.
* Update: BaseLib::option_selected() calls were replaced with the calls of a similar selected() function from WordPress core.
= [4.28] 20.10.2016 =
* New: WooCommerce plugin user capabilities (if exist) are grouped separately.
* New: WooCommerce plugin user capabilities (if exist) are grouped separately under Custom capabilities.
* Update: Temporally raised permissions flag is taken into account when checking, if user has a superadmin privileges. WordPress is_super_admin() function was replaced with custom wrapper to define if current user is a real superadmin or just a local admin with the temporally raised (add/edit users pages) permissions.
= [4.27.2] 15.09.2016 =
@@ -131,33 +148,6 @@ https://translate.wordpress.org/projects/wp-plugins/user-role-editor/
* Fix: PHP fatal error (line 34) was raised at uninstall.php for WordPress multisite.
* Update: action priority 99 was added for role additional options hook action setup.
= [4.24] 17.03.2016 =
* Fix: PHP notice was generated by class-role-additional-options.php in case when some option does not exist anymore
* Enhance: 'Add Capability' button have added capability to the WordPress built-in administrator role by default. It did not work, if 'administrator' role did not exist.
Now script selects automatically as an admin role a role with the largest quant of capabilities and adds new capability to the selected role.
* New: User capabilities page was integrated with "[User Switching](https://wordpress.org/plugins/user-switching/)" plugin - "Switch To" the editing user link iss added if "User Switching" plugin is available.
* Marked as compatible with WordPress 4.5.
= [4.23.2] 03.02.2016 =
* Fix: PHP warning "Strict Standards: Static function URE_Base_Lib::get_instance() should not be abstract" was generated
= [4.23.1] 01.02.2016 =
* Fix: 'get_called_class()' function call was excluded for the compatibility with PHP 5.2.*
* Fix: ure-users.js was loaded not only to the 'Users' page.
= [4.23] 31.01.2016 =
* Fix: "Users - Without Role" button showed empty roles drop down list on the 1st call.
* Update: Own task queue was added, so code which should executed once after plugin activation is executed by the next request to WP and may use a selected WordPress action to fire with a needed priority.
* Update: Call of deprecated mysql_server_info() is replaced with $wpdb->db_version().
* Update: Singleton patern is applied to the URE_Lib class.
* Minor code enhancements
= [4.22] 15.01.2016 =
* Unused 'add_users' capability was removed from the list of core capabilities as it was removed from WordPress starting from version 4.4
* bbPress user capabilities are supported for use in the non-bbPress roles. You can not edit roles created by bbPress, as bbPress re-creates them dynamically for every request to the server. Full support for bbPress roles editing will be included into User Role Editor Pro version 4.22.
* Self-added "Other Roles" column removed from "Users" list, as WordPress started to show all roles assigned to the user in its own "Role" column.
* 'ure_show_additional_capabilities_section' filter allows to hide 'Other Roles' section at the 'Add new user', 'Edit user' pages.
Click [here](https://www.role-editor.com/changelog)</a> to look at [the full list of changes](https://www.role-editor.com/changelog) of User Role Editor plugin.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 17 KiB

@@ -3,7 +3,7 @@
Plugin Name: User Role Editor
Plugin URI: https://www.role-editor.com
Description: Change/add/delete WordPress user roles and capabilities.
Version: 4.28
Version: 4.31
Author: Vladimir Garagulya
Author URI: https://www.role-editor.com
Text Domain: ure
@@ -23,7 +23,7 @@ if (defined('URE_PLUGIN_URL')) {
wp_die('It seems that other version of User Role Editor is active. Please deactivate it before use this version');
}
define('URE_VERSION', '4.28');
define('URE_VERSION', '4.31');
define('URE_PLUGIN_URL', plugin_dir_url(__FILE__));
define('URE_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('URE_PLUGIN_BASE_NAME', plugin_basename(__FILE__));
@@ -0,0 +1,48 @@
<?php
/**
* @package WPSEO\Admin\Banner
*/
/**
* Represents the render object for generating the html for the given banner.
*/
class WPSEO_Admin_Banner_Renderer {
/** @var string */
protected $base_path = '';
/**
* Renders the admin banner.
*
* @param WPSEO_Admin_Banner $banner The banner to render.
*
* @return string
*/
public function render( WPSEO_Admin_Banner $banner ) {
$output = '<a class="wpseo-banner__link" target="_blank" href="' . esc_url( $banner->get_url() ) . '">';
$output .= '<img class="wpseo-banner__image" width="' . esc_attr( $banner->get_width() ) . '" height="' . esc_attr( $banner->get_height() ) . '" src="' . esc_attr( $this->get_image_path( $banner->get_image() ) ) . '" alt="' . esc_attr( $banner->get_alt() ) . '"/>';
$output .= '</a>';
return $output;
}
/**
* Sets the base path, where the images are located.
*
* @param string $base_path The image location.
*/
public function set_base_path( $base_path ) {
$this->base_path = $base_path;
}
/**
* Returns the full path for the image.
*
* @param string $image The image path.
*
* @return string
*/
protected function get_image_path( $image ) {
return rtrim( $this->base_path, '/' ) . '/' . ltrim( $image, '/' );
}
}
@@ -0,0 +1,60 @@
<?php
/**
* @package WPSEO\Admin\Banner
*/
/**
* Represents the render object for generating the html for the banner sidebar
*/
class WPSEO_Admin_Banner_Sidebar_Renderer {
/** @var WPSEO_Admin_Banner_Spot_Renderer */
protected $spot_renderer;
/**
* Sets the spot renderer.
*
* @param WPSEO_Admin_Banner_Spot_Renderer $spot_renderer The spot renderer that has to be used.
*/
public function __construct( WPSEO_Admin_Banner_Spot_Renderer $spot_renderer ) {
$this->spot_renderer = $spot_renderer;
}
/**
* Renders the admin banner sidebar.
*
* @param WPSEO_Admin_Banner_Sidebar $banner_sidebar The sidebar to render.
*
* @return string
*/
public function render( WPSEO_Admin_Banner_Sidebar $banner_sidebar ) {
return sprintf( '
<div class="wpseo_content_cell" id="sidebar-container">
<div id="sidebar">
<div class="wpseo_content_cell_title yoast-sidebar__title ">
%1$s
</div>
%2$s
</div>
</div>',
$banner_sidebar->get_title(),
$this->render_banner_spots( $banner_sidebar->get_banner_spots() )
);
}
/**
* Renders the admin banner spots.
*
* @param WPSEO_Admin_Banner_Spot[] $banner_spots The banner spots to render.
*
* @return string
*/
protected function render_banner_spots( array $banner_spots ) {
$return = '';
foreach ( $banner_spots as $banner_spot ) {
$return .= $this->spot_renderer->render( $banner_spot );
}
return $return;
}
}
@@ -0,0 +1,356 @@
<?php
/**
* @package WPSEO\Admin\Banner
*/
/**
* Represents the render object for generating the html for the given banner.
*/
class WPSEO_Admin_Banner_Sidebar {
/** @var string */
protected $title = '';
/** @var WPSEO_Admin_Banner_Spot[] */
protected $banner_spots = array();
/** @var WPSEO_Admin_Banner_Renderer */
protected $banner_renderer;
/**
* WPSEO_Admin_Banner_Sidebar constructor.
*
* @param string $title The title for the sidebar.
* @param WPSEO_Admin_Banner_Renderer $banner_renderer The render class for banners.
*/
public function __construct( $title, WPSEO_Admin_Banner_Renderer $banner_renderer ) {
$this->title = $title;
$this->banner_renderer = $banner_renderer;
}
/**
* Returns the set title.
*
* @return string
*/
public function get_title() {
return $this->title;
}
/**
* Initializes the banner sidebar by setting its banner spots.
*
* @param WPSEO_Features $features Class regarding WPSEO Features.
*/
public function initialize( WPSEO_Features $features ) {
if ( $features->is_free() ) {
$this->add_banner_spot( $this->get_premium_spot() );
}
$this->add_banner_spot( $this->get_services_spot() );
$extensions_spot = $this->get_extensions_spot( $this->get_active_extensions() );
if ( $extensions_spot->has_banners() ) {
$this->add_banner_spot( $extensions_spot );
}
$this->add_banner_spot( $this->get_courses_spot() );
$this->add_banner_spot( $this->get_remove_banner_spot() );
}
/**
* Returns array with bannerspots.
*
* @return WPSEO_Admin_Banner_Spot[]
*/
public function get_banner_spots() {
return $this->banner_spots;
}
/**
* Adds a banner spot.
*
* @param WPSEO_Admin_Banner_Spot $spot The spot to add.
*/
protected function add_banner_spot( WPSEO_Admin_Banner_Spot $spot ) {
$this->banner_spots[] = $spot;
}
/**
* Returns the premium banner spot.
*
* @return WPSEO_Admin_Banner_Spot
*/
protected function get_premium_spot() {
$premium_spot = new WPSEO_Admin_Banner_Spot( __( 'Premium', 'wordpress-seo' ), $this->banner_renderer );
$premium_spot->set_description(
sprintf(
/* translators: %1$s expands to a link start tag to the Yoast plugin page, %2$s is the link closing tag */
__( 'Want to get the most out of your SEO-strategy? %1$sGo premium!%2$s.', 'wordpress-seo' ),
'<a target="_blank" href="https://yoa.st/ji">',
'</a>'
)
);
$premium_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jj',
'premium-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast SEO Premium. */
__( 'Buy the %1$s plugin now and get access to extra features and 24/7 support!', 'wordpress-seo' ),
'Yoast SEO Premium'
)
)
);
return $premium_spot;
}
/**
* Returns the services banner spot.
*
* @return WPSEO_Admin_Banner_Spot
*/
protected function get_services_spot() {
$service_spot = new WPSEO_Admin_Banner_Spot( __( 'Services', 'wordpress-seo' ), $this->banner_renderer );
$service_spot->set_description(
sprintf(
/* translators: %1$s expands to a link start tag to the Yoast Services page, %2$s to Yoast, %3$s is the link closing tag. */
__( 'Do you want to know how to improve your rankings? %1$sLet team %2$s help you!%3$s', 'wordpress-seo' ),
'<a target="_blank" href="https://yoa.st/jk">',
'Yoast',
'</a>'
)
);
$service_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jl',
'website-review.png',
261,
152,
__( 'Order a Website Review and we will tell you what to improve to attract more visitors!', 'wordpress-seo' )
)
);
$service_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jm',
'configuration-service.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast SEO Premium. */
__( 'Let our experts set up your %1$s plugin!', 'wordpress-seo' ),
'Yoast SEO Premium'
)
)
);
$service_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/seo-care-banner',
'seo-care.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast SEO Care. */
__( 'Let us help you take care of the SEO of your website. Order %1$s now!', 'wordpress-seo' ),
'Yoast SEO Care'
)
)
);
return $service_spot;
}
/**
* Returns an array with the Yoast SEO extensions with the value true when they are active.
*
* @return array
*/
protected function get_active_extensions() {
return array(
'video' => class_exists( 'wpseo_Video_Sitemap' ),
'woocommerce' => class_exists( 'Woocommerce' ) && class_exists( 'Yoast_WooCommerce_SEO' ),
'news' => class_exists( 'WPSEO_News' ),
'local' => defined( 'WPSEO_LOCAL_VERSION' ),
);
}
/**
* Returns the extensions banner spot.
*
* @param array $active_extensions The active extensions.
*
* @return WPSEO_Admin_Banner_Spot
*/
protected function get_extensions_spot( array $active_extensions ) {
$extension_spot = new WPSEO_Admin_Banner_Spot( __( 'Extensions', 'wordpress-seo' ), $this->banner_renderer );
$extension_spot->set_description(
sprintf(
/* translators: %1$s expands to a link start tag to the Yoast plugin page, %2$s is the link closing tag. */
__( 'Take your SEO to the next level and outrank your competition with our %1$sSEO plugins%2$s.', 'wordpress-seo' ),
'<a target="_blank" href="https://yoa.st/jn">',
'</a>'
)
);
if ( empty( $active_extensions['video'] ) ) {
$extension_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jo',
'video-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast Video SEO. */
__( 'Buy the %1$s plugin now and optimize your videos for video search results and social media!', 'wordpress-seo' ),
'Yoast Video SEO'
)
)
);
}
if ( empty( $active_extensions['woocommerce'] ) ) {
$extension_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jp',
'woocommerce-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast WooCommerce SEO. */
__( 'Buy the %1$s plugin now and optimize your shop today to improve your product promotion!', 'wordpress-seo' ),
'Yoast WooCommerce SEO'
)
)
);
}
if ( empty( $active_extensions['local'] ) ) {
$extension_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jq',
'local-seo.png', 261,
152,
sprintf(
/* translators: %1$s expands to Yoast Local SEO. */
__( 'Buy the %1$s plugin now to improve your site&#8217;s Local SEO and ranking in Google Maps!', 'wordpress-seo' ),
'Yoast Local SEO'
)
)
);
}
if ( empty( $active_extensions['news'] ) ) {
$extension_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jr',
'news-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast News SEO. */
__( 'Buy the %1$s plugin now and start optimizing to get your site featured in Google News!', 'wordpress-seo' ),
'Yoast News SEO'
)
)
);
}
return $extension_spot;
}
/**
* Returns the courses banner spot.
*
* @return WPSEO_Admin_Banner_Spot
*/
protected function get_courses_spot() {
$courses_spot = new WPSEO_Admin_Banner_Spot( __( 'Courses', 'wordpress-seo' ), $this->banner_renderer );
$courses_spot->set_description(
sprintf(
/* translators: %1$s expands to a link start tag to the Yoast Services page, %2$s is the link closing tag. */
__( 'Do you want to get a grip on your own SEO-strategy? Learn all about it in one of %1$sour courses%2$s.', 'wordpress-seo' ),
'<a target="_blank" href="https://yoa.st/jt">',
'</a>'
)
);
$courses_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/ju',
'basic-seo-training.png',
261,
152,
__( 'Take the online Basic SEO Training course and learn the fundamentals of SEO!', 'wordpress-seo' )
)
);
$courses_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jv',
'yoast-seo-for-wordpress-training.png',
261,
152,
/* translators: %1$s expands to Yoast SEO for WordPress Training, %2$s to Yoast SEO for WordPress. */
sprintf(
__( 'Take the %s course and become a certified %2$s expert!', 'wordpress-seo' ),
'Yoast SEO for WordPress Training',
'Yoast SEO for WordPress'
)
)
);
$courses_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jw',
'seo-copywriting-training.png',
261,
152,
__( 'Take the online SEO Copywriting Training course and learn how to write awesome copy that ranks!', 'wordpress-seo' )
)
);
$courses_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoa.st/jx',
'keyword-research-training.png',
261,
152,
__( 'Take the online Keyword Research Training course and learn how to rank with your keywords!', 'wordpress-seo' )
)
);
return $courses_spot;
}
/**
* Returns the remove banner spot.
*
* @return WPSEO_Admin_Banner_Spot
*/
protected function get_remove_banner_spot() {
$remove_banner_spot = new WPSEO_Admin_Banner_Spot(
__( 'Remove these ads?', 'wordpress-seo' )
);
$remove_banner_spot->set_description(
'<a target="_blank" href="https://yoa.st/jy">'.
/* translators: %1$s expands to Yoast SEO Premium */
sprintf( __( 'Upgrade to %1$s &raquo;', 'wordpress-seo' ), 'Yoast SEO Premium' ) .
'</a>'
);
return $remove_banner_spot;
}
}
@@ -0,0 +1,30 @@
<?php
/**
* @package WPSEO\Admin\Banner
*/
/**
* Represents the render object for generating the html for the given banner spot.
*/
class WPSEO_Admin_Banner_Spot_Renderer {
/**
* Renders the admin banner spot.
*
* @param WPSEO_Admin_Banner_Spot $banner_spot The spot to render.
*
* @return string
*/
public function render( WPSEO_Admin_Banner_Spot $banner_spot ) {
$output = '<div class="yoast-sidebar__spot"><strong>' . $banner_spot->get_title() . '</strong>';
if ( $banner_spot->get_description() !== '' ) {
$output .= '<p>' . $banner_spot->get_description() . '</p>';
}
$output .= $banner_spot->render_banner();
$output .= '</div>';
return $output;
}
}
@@ -0,0 +1,97 @@
<?php
/**
* @package WPSEO\Admin\Banner
*/
/**
* Represents the an admin banner spot.
*/
class WPSEO_Admin_Banner_Spot {
/** @var string */
private $title;
/** @var string */
private $description = '';
/** @var WPSEO_Admin_Banner[] */
private $banners = array();
/**
* WPSEO_Admin_Banner_Spot constructor.
*
* @param string $title The title for the spot.
* @param WPSEO_Admin_Banner_Renderer $banner_renderer The renderer for the banner.
*/
public function __construct( $title, WPSEO_Admin_Banner_Renderer $banner_renderer = null ) {
$this->title = $title;
$this->banner_renderer = ( is_null( $banner_renderer ) ? new WPSEO_Admin_Banner_Renderer() : $banner_renderer );
}
/**
* Returns the title.
*
* @return string
*/
public function get_title() {
return $this->title;
}
/**
* Returns the description.
*
* @return string
*/
public function get_description() {
return $this->description;
}
/**
* Sets the description
*
* @param string $description The description.
*/
public function set_description( $description ) {
$this->description = $description;
}
/**
* Adds an admin banner.
*
* @param WPSEO_Admin_Banner $banner The banner to add.
*/
public function add_banner( WPSEO_Admin_Banner $banner ) {
$this->banners[] = $banner;
}
/**
* Renders the banner.
*
* @return string
*/
public function render_banner() {
if ( ! $this->has_banners() ) {
return '';
}
return $this->banner_renderer->render( $this->get_random_banner() );
}
/**
* Checks if there are any banners set.
*
* @return bool
*/
public function has_banners() {
return ! empty( $this->banners );
}
/**
* Returns a random banner.
*
* @return null|WPSEO_Admin_Banner
*/
protected function get_random_banner() {
return $this->banners[ array_rand( $this->banners, 1 ) ];
}
}
@@ -0,0 +1,87 @@
<?php
/**
* @package WPSEO\Admin\Banner
*/
/**
* Represents an admin banner.
*/
class WPSEO_Admin_Banner {
/** @var string */
private $url;
/** @var string */
private $image;
/** @var integer */
private $width;
/** @var integer */
private $height;
/** @var string */
private $alt;
/**
* Sets the attributes for this object.
*
* @param string $url The URL where the banner links to.
* @param string $image The image filename.
* @param integer $width The width of the image.
* @param integer $height The height of the image.
* @param string $alt The alt text for the image.
*/
public function __construct( $url, $image, $width, $height, $alt = '' ) {
$this->url = $url;
$this->image = $image;
$this->alt = $alt;
$this->width = $width;
$this->height = $height;
}
/**
* Returns the set url.
*
* @return string
*/
public function get_url() {
return $this->url;
}
/**
* Returns the image.
*
* @return string
*/
public function get_image() {
return $this->image;
}
/**
* Returns the alt-text.
*
* @return string
*/
public function get_alt() {
return $this->alt;
}
/**
* Returns the width.
*
* @return string
*/
public function get_width() {
return $this->width;
}
/**
* Returns the height.
*
* @return string
*/
public function get_height() {
return $this->height;
}
}
@@ -117,7 +117,7 @@ class WPSEO_Admin_Asset_Manager {
private function scripts_to_be_registered() {
$select2_language = 'en';
$locale = get_locale();
$locale = WPSEO_Utils::get_user_locale();
$language = WPSEO_Utils::get_language( $locale );
if ( file_exists( WPSEO_PATH . "js/dist/select2/i18n/{$locale}.js" ) ) {
@@ -130,7 +130,7 @@ class WPSEO_Admin_Asset_Manager {
return array(
array(
'name' => 'admin-script',
'src' => 'wp-seo-admin-370',
'src' => 'wp-seo-admin-400',
'deps' => array(
'jquery',
'jquery-ui-core',
@@ -159,12 +159,12 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'admin-global-script',
'src' => 'wp-seo-admin-global-350',
'src' => 'wp-seo-admin-global-390',
'deps' => array( 'jquery' ),
),
array(
'name' => 'metabox',
'src' => 'wp-seo-metabox-370',
'src' => 'wp-seo-metabox-400',
'deps' => array(
'jquery',
'jquery-ui-core',
@@ -189,7 +189,7 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'post-scraper',
'src' => 'wp-seo-post-scraper-370',
'src' => 'wp-seo-post-scraper-400',
'deps' => array(
self::PREFIX . 'replacevar-plugin',
self::PREFIX . 'shortcode-plugin',
@@ -198,14 +198,14 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'term-scraper',
'src' => 'wp-seo-term-scraper-370',
'src' => 'wp-seo-term-scraper-400',
'deps' => array(
self::PREFIX . 'replacevar-plugin',
),
),
array(
'name' => 'replacevar-plugin',
'src' => 'wp-seo-replacevar-plugin-370',
'src' => 'wp-seo-replacevar-plugin-380',
),
array(
'name' => 'shortcode-plugin',
@@ -213,7 +213,7 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'recalculate',
'src' => 'wp-seo-recalculate-370',
'src' => 'wp-seo-recalculate-400',
'deps' => array(
'jquery',
'jquery-ui-core',
@@ -222,7 +222,7 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'primary-category',
'src' => 'wp-seo-metabox-category-350',
'src' => 'wp-seo-metabox-category-380',
'deps' => array(
'jquery',
'wp-util',
@@ -249,7 +249,7 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'configuration-wizard',
'src' => 'configuration-wizard-371',
'src' => 'configuration-wizard-400',
'deps' => array(
'jquery',
),
@@ -268,18 +268,12 @@ class WPSEO_Admin_Asset_Manager {
return array(
array(
'name' => 'admin-css',
'src' => 'yst_plugin_tools-370',
'src' => 'yst_plugin_tools-400',
'deps' => array( self::PREFIX . 'toggle-switch' ),
),
array(
'name' => 'toggle-switch-lib',
'src' => 'toggle-switch/toggle-switch',
'version' => '4.0.2',
),
array(
'name' => 'toggle-switch',
'src' => 'toggle-switch-330',
'deps' => array( self::PREFIX . 'toggle-switch-lib' ),
'src' => 'toggle-switch-390',
),
array(
'name' => 'dismissible',
@@ -299,7 +293,7 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'metabox-css',
'src' => 'metabox-370',
'src' => 'metabox-400',
'deps' => array(
self::PREFIX . 'select2',
),
@@ -310,7 +304,7 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'scoring',
'src' => 'yst_seo_score-330',
'src' => 'yst_seo_score-390',
),
array(
'name' => 'snippet',
@@ -345,7 +339,11 @@ class WPSEO_Admin_Asset_Manager {
),
array(
'name' => 'yoast-components',
'src' => 'yoast-components-371',
'src' => 'yoast-components-400',
),
array(
'name' => 'extensions',
'src' => 'yoast-extensions-390',
),
);
}
@@ -267,6 +267,10 @@ class WPSEO_Admin {
public function enqueue_assets() {
$asset_manager = new WPSEO_Admin_Asset_Manager();
$asset_manager->enqueue_style( 'help-center' );
if ( 'wpseo_licenses' === filter_input( INPUT_GET, 'page' ) ) {
$asset_manager->enqueue_style( 'extensions' );
}
}
/**
@@ -167,8 +167,7 @@ class WPSEO_Admin_Asset {
return '';
}
if ( ! $this->get_suffix() ) {
if ( 'development' !== YOAST_ENVIRONMENT && ! $this->get_suffix() ) {
$plugin_path = plugin_dir_path( $plugin_file );
if ( ! file_exists( $plugin_path . $relative_path ) ) {
@@ -88,7 +88,7 @@ class WPSEO_Admin_Pages {
$page = filter_input( INPUT_GET, 'page' );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-script', 'wpseoSelect2Locale', WPSEO_Utils::get_language( get_locale() ) );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-script', 'wpseoSelect2Locale', WPSEO_Utils::get_language( WPSEO_Utils::get_user_locale() ) );
if ( in_array( $page, array( 'wpseo_social', WPSEO_Admin::PAGE_IDENTIFIER ) ) ) {
wp_enqueue_media();
@@ -63,7 +63,7 @@ class WPSEO_Help_Center {
'<a href="https://yoast.com/wordpress/plugins/seo-premium/#utm_source=wordpress-seo-metabox&utm_medium=popup&utm_campaign=multiple-keywords">Yoast SEO Premium</a>',
'yoast.com' );
$premium_popup = new WPSEO_Premium_Popup( 'contact-support', 'h2', $popup_title, $popup_content );
$premium_popup = new WPSEO_Premium_Popup( 'contact-support', 'h3', $popup_title, $popup_content );
$contact_support_help_center_item = new WPSEO_Help_Center_Item(
'contact-support',
__( 'Email support', 'wordpress-seo' ),
@@ -178,7 +178,7 @@ class WPSEO_Help_Center {
* @return bool
*/
private function is_a_help_center_item( $item ) {
return is_a( $item, 'WPSEO_Help_Center_Item' );
return ( $item instanceof WPSEO_Help_Center_Item );
}
/**
@@ -191,8 +191,9 @@ class WPSEO_Help_Center {
public static function get_translated_texts() {
return array(
/* translators: %s: '%%term_title%%' variable used in titles and meta's template that's not compatible with the given template */
'variable_warning' => sprintf( __( 'Warning: the variable %s cannot be used in this template.', 'wordpress-seo' ), '<code>%s</code>' ) . ' ' . __( 'See the help tab for more info.', 'wordpress-seo' ),
'locale' => get_locale(),
'variable_warning' => sprintf( __( 'Warning: the variable %s cannot be used in this template. See the help center for more info.', 'wordpress-seo' ), '<code>%s</code>' ),
'locale' => get_locale(),
'userLocale' => WPSEO_Utils::get_user_locale(),
/* translators: %d: number of knowledge base search results found. */
'kb_found_results' => __( 'Number of search results: %d', 'wordpress-seo' ),
'kb_no_results' => __( 'No results found.', 'wordpress-seo' ),
@@ -26,9 +26,7 @@ class WPSEO_Product_Upsell_Notice {
* Checks if the notice should be added or removed.
*/
public function initialize() {
$features = new WPSEO_Features();
if ( $features->is_premium() || $this->is_notice_dismissed() ) {
if ( $this->is_notice_dismissed() ) {
$this->remove_notification();
return;
@@ -132,19 +130,27 @@ class WPSEO_Product_Upsell_Notice {
* @return Yoast_Notification
*/
protected function get_notification() {
/* translators: %1$s expands anchor to plugin page on WordPress.org, %2$s expands anchor to the bugreport guidelines on the knowledge base, %3$s expands to a section about Premium, %4$a expands to the notice dismissal anchor, %5$s expands to </a> */
/* translators: %1$s expands to Yoast SEO, %2$s is a link start tag to the plugin page on WordPress.org, %3$s is the link closing tag. */
$message = sprintf(
__( "We've noticed you've been using Yoast SEO for some time now; we hope you love it!
We'd be thrilled if you could %1\$sgive us a 5* rating on WordPress.org%5\$s! If you are experiencing issues, %2\$splease file a bug report%5\$s and we'll do our best to help you out.
%3\$s
__( 'We\'ve noticed you\'ve been using %1$s for some time now; we hope you love it! We\'d be thrilled if you could %2$sgive us a 5 stars rating on WordPress.org%3$s!', 'wordpress-seo' ),
'Yoast SEO',
'<a href="https://yoa.st/rate-yoast-seo">',
'</a>'
) . "\n\n";
%4\$sPlease don't show me this notification anymore%5\$s", 'wordpress-seo' ),
"<a href='https://yoa.st/rate-yoast-seo'>",
"<a href='https://yoa.st/bugreport'>",
$this->get_premium_upsell_section(),
"<a class='button' href=' " . admin_url( '?page=' . WPSEO_Admin::PAGE_IDENTIFIER . '&yoast_dismiss=upsell' ) . " '>",
$message .= sprintf(
/* translators: %1$s is a link start tag to the bugreport guidelines on the Yoast knowledge base, %2$s is the link closing tag. */
__( 'If you are experiencing issues, %1$splease file a bug report%2$s and we\'ll do our best to help you out.', 'wordpress-seo' ),
'<a href="https://yoa.st/bugreport">',
'</a>'
) . "\n\n";
$message .= $this->get_premium_upsell_section() . "\n\n";
$message .= sprintf(
/* translators: %1$s is the notification dismissal link start tag, %2$s is the link closing tag. */
__( '%1$sPlease don\'t show me this notification anymore%2$s', 'wordpress-seo' ),
'<a class="button" href="' . admin_url( '?page=' . WPSEO_Admin::PAGE_IDENTIFIER . '&yoast_dismiss=upsell' ) . '">',
'</a>'
);
@@ -37,7 +37,7 @@ class WPSEO_Social_Admin extends WPSEO_Metabox {
/* translators: %s expands to the social network's name */
$image_text = __( 'If you want to override the image used on %s for this post, upload / choose an image or add the URL here.', 'wordpress-seo' );
/* translators: %1$s expands to the social network, %2$s to the recommended image size */
$image_size_text = __( 'The recommended image size for %1$s is %2$spx.', 'wordpress-seo' );
$image_size_text = __( 'The recommended image size for %1$s is %2$s pixels.', 'wordpress-seo' );
$options = WPSEO_Options::get_option( 'wpseo_social' );
@@ -48,8 +48,10 @@ class WPSEO_Social_Admin extends WPSEO_Metabox {
// Source: https://blog.bufferapp.com/ideal-image-sizes-social-media-posts.
$recommended_image_sizes = array(
'opengraph' => '1200 × 630', // Source: https://developers.facebook.com/docs/sharing/best-practices#images.
'twitter' => '1024 × 512',
/* translators: %1$s expands to the image recommended width, %2$s to its height. */
'opengraph' => sprintf( __( '%1$s by %2$s', 'wordpress-seo' ), '1200', '630' ), // Source: https://developers.facebook.com/docs/sharing/best-practices#images.
/* translators: %1$s expands to the image recommended width, %2$s to its height. */
'twitter' => sprintf( __( '%1$s by %2$s', 'wordpress-seo' ), '1024', '512' ),
);
foreach ( $social_networks as $network => $label ) {
@@ -75,14 +77,21 @@ class WPSEO_Social_Admin extends WPSEO_Metabox {
public function get_meta_section() {
$tabs = array();
$social_meta_fields = $this->get_meta_field_defs( 'social' );
$single = true;
if ( $this->options['opengraph'] === true && $this->options['twitter'] === true ) {
$single = null;
}
if ( $this->options['opengraph'] === true ) {
$tabs[] = new WPSEO_Metabox_Form_Tab(
'facebook',
$this->get_social_tab_content( 'opengraph', $social_meta_fields ),
'<span class="dashicons dashicons-facebook-alt"></span>',
'<span class="screen-reader-text">' . __( 'Facebook / Open Graph metadata', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-facebook-alt"></span>',
array(
'link_title' => __( 'Facebook / Open Graph metadata', 'wordpress-seo' ),
'link_aria_label' => __( 'Facebook / Open Graph metadata', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-se',
'single' => $single,
)
);
}
@@ -91,19 +100,22 @@ class WPSEO_Social_Admin extends WPSEO_Metabox {
$tabs[] = new WPSEO_Metabox_Form_Tab(
'twitter',
$this->get_social_tab_content( 'twitter', $social_meta_fields ),
'<span class="dashicons dashicons-twitter"></span>',
'<span class="screen-reader-text">' . __( 'Twitter metadata', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-twitter"></span>',
array(
'link_title' => __( 'Twitter metadata', 'wordpress-seo' ),
'link_aria_label' => __( 'Twitter metadata', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-se',
'single' => $single,
)
);
}
return new WPSEO_Metabox_Tab_Section(
'social',
'<span class="dashicons dashicons-share"></span>',
'<span class="screen-reader-text">' . __( 'Social', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-share"></span>',
$tabs,
array(
'link_title' => __( 'Social', 'wordpress-seo' ),
'link_aria_label' => __( 'Social', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -38,6 +38,7 @@ class Yoast_Dashboard_Widget {
* Adds dashboard widget to WordPress
*/
public function add_dashboard_widget() {
add_filter( 'postbox_classes_dashboard_wpseo-dashboard-overview', array( $this, 'wpseo_dashboard_overview_class' ) );
wp_add_dashboard_widget(
'wpseo-dashboard-overview',
/* translators: %s is the plugin name */
@@ -46,6 +47,18 @@ class Yoast_Dashboard_Widget {
);
}
/**
* Adds CSS classes to the dashboard widget.
*
* @param array $classes An array of postbox CSS classes.
*
* @return array
*/
public function wpseo_dashboard_overview_class( $classes ) {
$classes[] = 'yoast wpseo-dashboard-overview';
return $classes;
}
/**
* Display the dashboard widget
*/
@@ -49,7 +49,7 @@ class Yoast_Form {
$option_long_name = WPSEO_Options::get_group_name( $option );
}
?>
<div class="wrap wpseo-admin-page page-<?php echo $option; ?>">
<div class="wrap yoast wpseo-admin-page page-<?php echo $option; ?>">
<?php
/**
* Display the updated/error messages
@@ -165,108 +165,16 @@ class Yoast_Form {
}
}
$service_banners = array(
array(
'url' => 'https://yoast.com/hire-us/website-review/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=website-review-banner',
'img' => 'banner-website-review.png',
'alt' => __( 'Order a Website Review and we will tell you what to improve to attract more visitors!', 'wordpress-seo' ),
),
array(
'url' => 'https://yoast.com/hire-us/yoast-seo-configuration/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=configuration-service-banner',
'img' => 'banner-configuration-service.png',
'alt' => __( 'Let our experts set up your Yoast SEO Premium plugin!', 'wordpress-seo' ),
),
array(
'url' => 'https://yoast.com/academy/course/seo-copywriting-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=seo-copywriting-training-banner',
'img' => 'banner-seo-copywriting-training.png',
'alt' => __( 'Take the online SEO Copywriting Training course and learn how to write awesome copy that ranks!', 'wordpress-seo' ),
),
array(
'url' => 'https://yoast.com/academy/course/basic-seo-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=basic-seo-training-banner',
'img' => 'banner-basic-seo-training.png',
'alt' => __( 'Take the online Basic SEO Training course and learn the fundamentals of SEO!', 'wordpress-seo' ),
),
array(
'url' => 'https://yoast.com/academy/course/yoast-seo-wordpress-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=yoast-seo-plugin-training-banner',
'img' => 'banner-yoast-seo-for-wordpress-training.png',
'alt' => __( 'Take the Yoast SEO for WordPress Training course and become a certified Yoast SEO for WordPress expert!', 'wordpress-seo' ),
),
);
$sidebar_renderer = new WPSEO_Admin_Banner_Sidebar_Renderer( new WPSEO_Admin_Banner_Spot_Renderer() );
$plugin_banners = array(
array(
'url' => 'https://yoast.com/wordpress/plugins/seo-premium/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=premium-seo-banner',
'img' => 'banner-premium-seo.png',
'alt' => __( 'Buy the Yoast SEO Premium plugin now and get access to extra features and 24/7 support!', 'wordpress-seo' ),
),
);
$banner_renderer = new WPSEO_Admin_Banner_Renderer;
$banner_renderer->set_base_path( plugins_url( 'images/banner/', WPSEO_FILE ) );
if ( ! class_exists( 'wpseo_Video_Sitemap' ) ) {
$plugin_banners[] = array(
'url' => 'https://yoast.com/wordpress/plugins/video-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=video-seo-banner',
'img' => 'banner-video-seo.png',
'alt' => __( 'Buy the Yoast Video SEO plugin now and optimize your videos for video search results and social media!', 'wordpress-seo' ),
);
}
$sidebar = new WPSEO_Admin_Banner_Sidebar( sprintf( '%1s recommendations', 'Yoast' ), $banner_renderer );
$sidebar->initialize( new WPSEO_Features() );
if ( class_exists( 'Woocommerce' ) && ! class_exists( 'Yoast_WooCommerce_SEO' ) ) {
$plugin_banners[] = array(
'url' => 'https://yoast.com/wordpress/plugins/yoast-woocommerce-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=woocommerce-seo-banner',
'img' => 'banner-woocommerce-seo.png',
'alt' => __( 'Buy the Yoast WooCommerce SEO plugin now and optimize your shop today to improve your product promotion!', 'wordpress-seo' ),
);
}
echo $sidebar_renderer->render( $sidebar );
if ( ! defined( 'WPSEO_LOCAL_VERSION' ) ) {
$plugin_banners[] = array(
'url' => 'https://yoast.com/wordpress/plugins/local-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=local-seo-banner',
'img' => 'banner-local-seo.png',
'alt' => __( 'Buy the Yoast Local SEO plugin now to improve your site&#8217;s Local SEO and ranking in Google Maps!', 'wordpress-seo' ),
);
}
if ( ! class_exists( 'WPSEO_News' ) ) {
$plugin_banners[] = array(
'url' => 'https://yoast.com/wordpress/plugins/news-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=news-seo-banner',
'img' => 'banner-news-seo.png',
'alt' => __( 'Buy the Yoast News SEO plugin now and start optimizing to get your site featured in Google News!', 'wordpress-seo' ),
);
}
shuffle( $service_banners );
shuffle( $plugin_banners );
?>
<div class="wpseo_content_cell" id="sidebar-container">
<div id="sidebar">
<?php
$i = 0;
foreach ( $service_banners as $service_banner ) {
if ( $i == 2 ) {
break;
}
echo '<a target="_blank" href="' . esc_url( $service_banner['url'] ) . '"><img width="261" height="190" src="' . plugins_url( 'images/' . $service_banner['img'], WPSEO_FILE ) . '" alt="' . esc_attr( $service_banner['alt'] ) . '"/></a><br/><br/>';
$i ++;
}
$i = 0;
foreach ( $plugin_banners as $banner ) {
if ( $i == 2 ) {
break;
}
echo '<a target="_blank" href="' . esc_url( $banner['url'] ) . '"><img width="261" height="152" src="' . plugins_url( 'images/' . $banner['img'], WPSEO_FILE ) . '" alt="' . esc_attr( $banner['alt'] ) . '"/></a><br/><br/>';
$i ++;
}
?>
<p class="wpseo-remove-ads">
<strong><?php _e( 'Remove these ads?', 'wordpress-seo' ); ?></strong><br/>
<a target="_blank" href="https://yoast.com/wordpress/plugins/seo-premium/#utm_source=wordpress-seo-config&amp;utm_medium=textlink&amp;utm_campaign=remove-ads-link"><?php
/* translators: %1$s expands to Yoast SEO Premium */
printf( __( 'Upgrade to %1$s &raquo;', 'wordpress-seo' ), 'Yoast SEO Premium' ); ?></a>
</p>
</div>
</div>
<?php
}
/**
@@ -594,4 +502,184 @@ class Yoast_Form {
echo '<a></a></div></fieldset><div class="clear"></div></div>' . "\n\n";
}
/**
* Returns two random selected service banners.
*
* @return WPSEO_Admin_Banner_Spot
*/
private function get_service_banners() {
$service_banner_spot = new WPSEO_Admin_Banner_Spot(
__( 'Services', 'wordpress-seo' ),
sprintf(
/* translators: %1$s expands to a link start tag to the Yoast Services page, %2$s to Yoast, %3$s is the link closing tag. */
__( 'Don\'t want to dive into SEO yourself? %1$sLet team %2$s help you!%3$s', 'wordpress-seo' ),
'<a href="https://yoa.st/">',
'Yoast',
'</a>'
)
);
$service_banner_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/hire-us/website-review/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=website-review-banner',
'banner-website-review.png',
261,
190,
__( 'Order a Website Review and we will tell you what to improve to attract more visitors!', 'wordpress-seo' )
)
);
$service_banner_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/hire-us/yoast-seo-configuration/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=configuration-service-banner',
'banner-configuration-service.png',
261,
190,
sprintf(
/* translators: %1$s expands to Yoast SEO Premium. */
__( 'Let our experts set up your %1$s plugin!', 'wordpress-seo' ),
'Yoast SEO Premium'
)
)
);
$service_banner_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/academy/course/seo-copywriting-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=seo-copywriting-training-banner',
'banner-seo-copywriting-training.png',
261,
190,
__( 'Take the online SEO Copywriting Training course and learn how to write awesome copy that ranks!', 'wordpress-seo' )
)
);
$service_banner_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/academy/course/basic-seo-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=basic-seo-training-banner',
'banner-basic-seo-training.png',
261,
190,
__( 'Take the online Basic SEO Training course and learn the fundamentals of SEO!', 'wordpress-seo' )
)
);
$service_banner_spot->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/academy/course/yoast-seo-wordpress-training/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=yoast-seo-plugin-training-banner',
'banner-yoast-seo-for-wordpress-training.png',
261,
190,
/* translators: %1$s expands to Yoast SEO for WordPress Training, %2$s to Yoast SEO for WordPress. */
sprintf(
__( 'Take the %s course and become a certified %2$s expert!', 'wordpress-seo' ),
'Yoast SEO for WordPress Training',
'Yoast SEO for WordPress'
)
)
);
return $service_banner_spot;
}
/**
* Returns two random selected plugin banners.
*
* @return WPSEO_Admin_Banner_Spot
*/
private function get_plugin_banners() {
$plugin_banners = new WPSEO_Admin_Banner_Spot(
__( 'Extensions', 'wordpress-seo' ),
sprintf(
/* translators: %1$s expands to Yoast SEO, %2$s to a link start tag to the Yoast plugin page, %3$s is the link closing tag. */
__( 'Extend your %1$s plugin with our %2$sSEO plugins%3$s.', 'wordpress-seo' ),
'Yoast SEO',
'<a href="https://yoa.st/">',
'</a>'
)
);
$plugin_banners->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/wordpress/plugins/seo-premium/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=premium-seo-banner',
'banner-premium-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast SEO Premium. */
__( 'Buy the %1$s plugin now and get access to extra features and 24/7 support!', 'wordpress-seo' ),
'Yoast SEO Premium'
)
)
);
if ( ! class_exists( 'wpseo_Video_Sitemap' ) ) {
$plugin_banners->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/wordpress/plugins/video-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=video-seo-banner',
'banner-video-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast Video SEO. */
__( 'Buy the %1$s plugin now and optimize your videos for video search results and social media!', 'wordpress-seo' ),
'Yoast Video SEO'
)
)
);
}
if ( class_exists( 'Woocommerce' ) && ! class_exists( 'Yoast_WooCommerce_SEO' ) ) {
$plugin_banners->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/wordpress/plugins/yoast-woocommerce-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=woocommerce-seo-banner',
'banner-woocommerce-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast WooCommerce SEO. */
__( 'Buy the %1$s plugin now and optimize your shop today to improve your product promotion!', 'wordpress-seo' ),
'Yoast WooCommerce SEO'
)
)
);
}
if ( ! defined( 'WPSEO_LOCAL_VERSION' ) ) {
$plugin_banners->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/wordpress/plugins/local-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=local-seo-banner',
'banner-local-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast Local SEO. */
__( 'Buy the %1$s plugin now to improve your site&#8217;s Local SEO and ranking in Google Maps!', 'wordpress-seo' ),
'Yoast Local SEO'
)
)
);
}
if ( ! class_exists( 'WPSEO_News' ) ) {
$plugin_banners->add_banner(
new WPSEO_Admin_Banner(
'https://yoast.com/wordpress/plugins/news-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=news-seo-banner',
'banner-news-seo.png',
261,
152,
sprintf(
/* translators: %1$s expands to Yoast News SEO. */
__( 'Buy the %1$s plugin now and start optimizing to get your site featured in Google News!', 'wordpress-seo' ),
'Yoast News SEO'
)
)
);
}
return $plugin_banners;
}
}
@@ -101,25 +101,53 @@ class WPSEO_Configuration_Page {
<head>
<meta name="viewport" content="width=device-width"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title><?php _e( 'Yoast SEO &rsaquo; Configuration Wizard', 'wordpress-seo' ); ?></title>
<title><?php
printf(
/* translators: %s expands to Yoast SEO. */
__( '%s &rsaquo; Configuration Wizard', 'wordpress-seo' ),
'Yoast SEO'
);
?></title>
<?php
do_action( 'admin_print_styles' );
do_action( 'admin_print_scripts' );
do_action( 'admin_head' );
wp_print_head_scripts();
wp_print_styles( 'yoast-seo-yoast-components' );
/**
* Is called before the closing </head> tag in the Yoast Configuration wizard.
*
* Allows users to add their own scripts or styles.
*
* @since 4.0
*/
do_action( 'wpseo_configuration_wizard_head' );
?>
</head>
<body class="wp-admin">
<div id="wizard"></div>
<a class="yoast-wizard-return-link" href="<?php echo $dashboard_url ?>">
<?php _e( 'Go back to the Yoast SEO dashboard.', 'wordpress-seo' ); ?>
</a>
<footer>
<?php
do_action( 'admin_print_footer_scripts' );
do_action( 'admin_footer' );
wp_print_scripts( 'yoast-seo-configuration-wizard' );
printf(
/* translators: %s expands to Yoast SEO. */
__( 'Go back to the %s dashboard.', 'wordpress-seo' ),
'Yoast SEO'
);
?>
</footer>
</a>
<?php
wp_print_media_templates();
wp_print_footer_scripts();
/**
* Is called before the closing </body> tag in the Yoast Configuration wizard.
*
* Allows users to add their own scripts or content.
*
* @since 4.0
*/
do_action( 'wpseo_configuration_wizard_footer' );
wp_print_scripts( 'yoast-seo-configuration-wizard' );
?>
</body>
</html>
<?php
@@ -157,7 +185,7 @@ class WPSEO_Configuration_Page {
* @returns array The translations for the configuration wizard.
*/
public function get_translations() {
$file = plugin_dir_path( WPSEO_FILE ) . 'languages/yoast-components-' . get_locale() . '.json';
$file = plugin_dir_path( WPSEO_FILE ) . 'languages/yoast-components-' . WPSEO_Utils::get_user_locale() . '.json';
if ( file_exists( $file ) && $file = file_get_contents( $file ) ) {
return json_decode( $file, true );
}
@@ -24,17 +24,25 @@ class WPSEO_Configuration_Service {
protected $adapter;
/**
* Hook into the REST API
*/
public function register_hooks() {
add_action( 'rest_api_init', array( $this, 'initialize' ) );
}
/**
* Register the service and boot handlers
* Hook into the REST API and switch language.
*/
public function initialize() {
// Switch to the user locale with fallback to the site locale.
if ( function_exists( 'switch_to_locale' ) ) {
switch_to_locale( WPSEO_Utils::get_user_locale() );
}
// Make sure we have our translations available.
wpseo_load_textdomain();
$this->set_default_providers();
$this->populate_configuration();
$this->endpoint->register();
// @todo: check if this is really needed, since the switch happens only in the API.
if ( function_exists( 'restore_current_locale' ) ) {
restore_current_locale();
}
}
/**
@@ -111,8 +119,6 @@ class WPSEO_Configuration_Service {
* @return array List of settings.
*/
public function get_configuration() {
$this->populate_configuration();
$fields = $this->storage->retrieve();
$steps = $this->structure->retrieve();
@@ -18,7 +18,14 @@ class WPSEO_Config_Field_Mailchimp_Signup extends WPSEO_Config_Field {
$user_email = ( $current_user->ID > 0 ) ? $current_user->user_email : '';
$this->set_property( 'title' , __( 'Newsletter signup', 'wordpress-seo' ) );
$this->set_property( 'label', __( 'If you would like us to keep you up-to-date regarding Yoast SEO, other plugins by Yoast and major news in the world of SEO, subscribe to our newsletter:', 'wordpress-seo' ) );
$this->set_property(
'label',
sprintf(
/* translators: %s expands to Yoast SEO. */
__( 'If you would like us to keep you up-to-date regarding %s, other plugins by Yoast and major news in the world of SEO, subscribe to our newsletter:', 'wordpress-seo' ),
'Yoast SEO'
)
);
$this->set_property( 'mailchimpActionUrl', 'https://yoast.us1.list-manage.com/subscribe/post-json?u=ffa93edfe21752c921f860358&id=972f1c9122' );
$this->set_property( 'currentUserEmail', $user_email );
@@ -14,11 +14,23 @@ class WPSEO_Config_Field_Success_Message extends WPSEO_Config_Field {
public function __construct() {
parent::__construct( 'successMessage', 'HTML' );
$success_message = __( 'You’ve done it! You&#039;ve set up Yoast SEO, and Yoast SEO will now take care of all the needed technical optimization of your site. To really improve your site&#039;s performance in the search results, it&#039;s important to start creating content that ranks well for keywords you care about.', 'wordpress-seo' );
$onpage_seo = __( 'Check out the video below in which we explain how to use the Yoast SEO metabox when you edit posts or pages', 'wordpress-seo' );
$success_message = sprintf(
/* translators: %1$s expands to Yoast SEO. */
__( 'You&#039;ve done it! You&#039;ve set up %1$s, and %1$s will now take care of all the needed technical optimization of your site. To really improve your site&#039;s performance in the search results, it&#039;s important to start creating content that ranks well for keywords you care about.', 'wordpress-seo' ),
'Yoast SEO'
);
$onpage_seo = sprintf(
/* translators: %1$s expands to Yoast SEO. */
__( 'Check out the video below in which we explain how to use the %1$s metabox when you edit posts or pages', 'wordpress-seo' ),
'Yoast SEO'
);
$content_analysis_video = sprintf(
'<iframe width="560" height="315" src="https://yoa.st/metabox-screencast" title="%s" frameborder="0" allowfullscreen></iframe>',
__( 'Yoast SEO video tutorial', 'wordpress-seo' )
sprintf(
/* translators: %1$s expands to Yoast SEO. */
__( '%1$s video tutorial', 'wordpress-seo' ),
'Yoast SEO'
)
);
$html = '<p>' . $success_message . '</p>';
@@ -14,11 +14,17 @@ class WPSEO_Config_Field_Upsell_Configuration_Service extends WPSEO_Config_Field
public function __construct() {
parent::__construct( 'upsellConfigurationService', 'HTML' );
$intro_text = __( 'Welcome to the Yoast SEO configuration wizard. In a few simple steps we\'ll help you configure your SEO settings to match your website\'s needs!', 'wordpress-seo' );
$intro_text = sprintf(
/* translators: %1$s expands to Yoast SEO. */
__( 'Welcome to the %1$s configuration wizard. In a few simple steps we\'ll help you configure your SEO settings to match your website\'s needs!', 'wordpress-seo' ),
'Yoast SEO'
);
/* Translators: %1$s opens the link, %2$s closes the link. */
/* Translators: %1$s expands to Yoast SEO, %2$s expands to Yoast SEO Premium, %3$s opens the link, %4$s closes the link. */
$upsell_text = sprintf(
__( 'While we strive to make setting up Yoast SEO as easy as possible, we understand it can be daunting. If you’d rather have us set up Yoast SEO for you (and get a copy of Yoast SEO Premium in the process), order our %1$sYoast SEO configuration service%2$s here!', 'wordpress-seo' ),
__( 'While we strive to make setting up %1$s as easy as possible, we understand it can be daunting. If you’d rather have us set up %1$s for you (and get a copy of %2$s in the process), order our %3$s%1$s configuration service%4$s here!', 'wordpress-seo' ),
'Yoast SEO',
'Yoast SEO Premium',
'<a target="_blank" href="https://yoa.st/configuration-package">',
'</a>'
);
@@ -50,7 +50,8 @@ class WPSEO_Metabox_Formatter {
'contentTab' => __( 'Readability', 'wordpress-seo' ),
'keywordTab' => __( 'Keyword:', 'wordpress-seo' ),
'enterFocusKeyword' => __( 'Enter your focus keyword', 'wordpress-seo' ),
'locale' => get_locale(),
'removeKeyword' => __( 'Remove keyword', 'wordpress-seo' ),
'locale' => WPSEO_Utils::get_user_locale(),
'translations' => $this->get_translations(),
'keyword_usage' => array(),
'title_template' => '',
@@ -86,7 +87,9 @@ class WPSEO_Metabox_Formatter {
* @return array
*/
private function get_translations() {
$file = plugin_dir_path( WPSEO_FILE ) . 'languages/wordpress-seo-' . get_locale() . '.json';
$locale = WPSEO_Utils::get_user_locale();
$file = plugin_dir_path( WPSEO_FILE ) . 'languages/wordpress-seo-' . $locale . '.json';
if ( file_exists( $file ) && $file = file_get_contents( $file ) ) {
return json_decode( $file, true );
}
@@ -49,7 +49,7 @@ class WPSEO_Post_Metabox_Formatter implements WPSEO_Metabox_Formatter_Interface
'metaDescriptionDate' => '',
);
if ( is_a( $this->post, 'WP_Post' ) ) {
if ( $this->post instanceof WP_Post ) {
$values_to_set = array(
'keyword_usage' => $this->get_focus_keyword_usage(),
'title_template' => $this->get_title_template(),
@@ -216,13 +216,23 @@ class WPSEO_GSC {
* Catch the redirects search post and redirect it to a search get
*/
private function list_table_search_post_to_get() {
if ( ( $search_string = filter_input( INPUT_POST, 's' ) ) !== null ) {
$url = ( $search_string !== '' ) ? add_query_arg( 's', $search_string ) : remove_query_arg( 's' );
$search_string = filter_input( INPUT_POST, 's' );
// Do the redirect.
wp_redirect( $url );
exit;
if ( $search_string === null ) {
return;
}
// When there is nothing being search and there is no search param in the url, break this method.
if ( $search_string === '' && filter_input( INPUT_GET, 's' ) === null ) {
return;
}
$url = ( $search_string !== '' ) ? add_query_arg( 's', $search_string ) : remove_query_arg( 's' );
// Do the redirect.
wp_redirect( $url );
exit;
}
/**
@@ -5,17 +5,16 @@
// Admin header.
Yoast_Form::get_instance()->admin_header( false, 'wpseo-gsc', false, 'yoast_wpseo_gsc_options' );
?>
<h2 class="nav-tab-wrapper" id="wpseo-tabs">
<?php
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && WPSEO_GSC_Settings::get_profile() !== '' ) {
?>
<form action="" method="post">
<input type='hidden' name='reload-crawl-issues-nonce' value='<?php echo wp_create_nonce( 'reload-crawl-issues' ); ?>' />
<input type="submit" name="reload-crawl-issues" id="reload-crawl-issue" class="button button-primary alignright"
value="<?php _e( 'Reload crawl issues', 'wordpress-seo' ); ?>">
</form>
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && WPSEO_GSC_Settings::get_profile() !== '' ) { ?>
<form action="" method="post" class="wpseo-gsc-reload-crawl-issues-form">
<input type='hidden' name='reload-crawl-issues-nonce' value='<?php echo wp_create_nonce( 'reload-crawl-issues' ); ?>' />
<input type="submit" name="reload-crawl-issues" id="reload-crawl-issue" class="button button-primary alignright"
value="<?php _e( 'Reload crawl issues', 'wordpress-seo' ); ?>">
</form>
<?php } ?>
<h2 class="nav-tab-wrapper" id="wpseo-tabs">
<?php echo $platform_tabs = new WPSEO_GSC_Platform_Tabs; ?>
</h2>
@@ -39,7 +38,7 @@ switch ( $platform_tabs->current_tab() ) {
if ( null === $this->service->get_client()->getAccessToken() ) {
// Print auth screen.
echo '<p>';
/* Translators: %1$s: expands to 'Yoast SEO', %2$s expands to Google Search Console. */
/* Translators: %1$s: expands to Yoast SEO, %2$s expands to Google Search Console. */
echo sprintf( __( 'To allow %1$s to fetch your %2$s information, please enter your Google Authorization Code. Clicking the button below will open a new window.', 'wordpress-seo' ), 'Yoast SEO', 'Google Search Console' );
echo "</p>\n";
echo '<input type="hidden" id="gsc_auth_url" value="', $this->service->get_client()->createAuthUrl() , '" />';
@@ -15,8 +15,8 @@ class WPSEO_Metabox_Addon_Tab_Section extends WPSEO_Metabox_Tab_Section {
public function display_content() {
?>
<div id="wpseo-meta-section-addons" class="wpseo-meta-section">
<div class="wpseo-metabox-tabs-div" >
<ul class="wpseo-metabox-tabs" id="wpseo-metabox-tabs">
<div class="wpseo-metabox-tabs-div">
<ul class="wpseo-metabox-tabs">
<?php do_action( 'wpseo_tab_header' ); ?>
</ul>
</div>
@@ -23,6 +23,11 @@ class WPSEO_Metabox_Form_Tab implements WPSEO_Metabox_Tab {
*/
private $link_content;
/**
* @var string
*/
private $tab_class;
/**
* @var string
*/
@@ -33,6 +38,11 @@ class WPSEO_Metabox_Form_Tab implements WPSEO_Metabox_Tab {
*/
private $link_title;
/**
* @var string
*/
private $link_aria_label;
/**
* @var boolean
*/
@@ -47,12 +57,23 @@ class WPSEO_Metabox_Form_Tab implements WPSEO_Metabox_Tab {
* @param array $options Optional link attributes.
*/
public function __construct( $name, $content, $link_content, array $options = array() ) {
$this->name = $name;
$this->content = $content;
$this->link_content = $link_content;
$this->link_class = isset( $options['link_class'] ) ? $options['link_class'] : '';
$this->link_title = isset( $options['link_title'] ) ? $options['link_title'] : '';
$this->single = isset( $options['single'] ) ? true : false;
$default_options = array(
'tab_class' => '',
'link_class' => '',
'link_title' => '',
'link_aria_label' => '',
'single' => false,
);
$options = array_merge( $default_options, $options );
$this->name = $name;
$this->content = $content;
$this->link_content = $link_content;
$this->tab_class = $options['tab_class'];
$this->link_class = $options['link_class'];
$this->link_title = $options['link_title'];
$this->link_aria_label = $options['link_aria_label'];
$this->single = $options['single'];
}
/**
@@ -62,17 +83,19 @@ class WPSEO_Metabox_Form_Tab implements WPSEO_Metabox_Tab {
*/
public function link() {
$html = '<li class="%1$s %2$s"><a class="wpseo_tablink" href="#wpseo_%1$s"%3$s>%4$s</a></li>';
$html = '<li class="%1$s%2$s"><a class="wpseo_tablink%3$s" href="#wpseo_%1$s"%4$s%5$s>%6$s</a></li>';
if ( $this->single ) {
$html = '<li class="%1$s %2$s"><span class="wpseo_tablink"%3$s>%4$s</span></li>';
$html = '<li class="%1$s%2$s"><span class="wpseo_tablink%3$s"%4$s%5$s>%6$s</span></li>';
}
return sprintf(
$html,
esc_attr( $this->name ),
esc_attr( $this->link_class ),
( '' !== $this->tab_class ) ? ' ' . esc_attr( $this->tab_class ) : '',
( '' !== $this->link_class ) ? ' ' . esc_attr( $this->link_class ) : '',
( '' !== $this->link_title ) ? ' title="' . esc_attr( $this->link_title ) . '"' : '',
( '' !== $this->link_aria_label ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '',
$this->link_content
);
}
@@ -28,6 +28,16 @@ class WPSEO_Metabox_Tab_Section implements WPSEO_Metabox_Section {
*/
private $link_title;
/**
* @var string
*/
private $link_class;
/**
* @var string
*/
private $link_aria_label;
/**
* Constructor.
*
@@ -37,12 +47,21 @@ class WPSEO_Metabox_Tab_Section implements WPSEO_Metabox_Section {
* @param array $options Optional link attributes.
*/
public function __construct( $name, $link_content, array $tabs = array(), array $options = array() ) {
$default_options = array(
'link_title' => '',
'link_class' => '',
'link_aria_label' => '',
);
$options = array_merge( $default_options, $options );
$this->name = $name;
foreach ( $tabs as $tab ) {
$this->add_tab( $tab );
}
$this->link_content = $link_content;
$this->link_title = isset( $options['link_title'] ) ? $options['link_title'] : '';
$this->link_content = $link_content;
$this->link_title = $options['link_title'];
$this->link_class = $options['link_class'];
$this->link_aria_label = $options['link_aria_label'];
}
/**
@@ -51,9 +70,11 @@ class WPSEO_Metabox_Tab_Section implements WPSEO_Metabox_Section {
public function display_link() {
if ( $this->has_tabs() ) {
printf(
'<li><a href="#wpseo-meta-section-%1$s" class="wpseo-meta-section-link"%2$s>%3$s</a></li>',
'<li><a href="#wpseo-meta-section-%1$s" class="wpseo-meta-section-link %2$s"%3$s%4$s>%5$s</a></li>',
esc_attr( $this->name ),
esc_attr( $this->link_class ),
( '' !== $this->link_title ) ? ' title="' . esc_attr( $this->link_title ) . '"' : '',
( '' !== $this->link_aria_label ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '',
$this->link_content
);
}
@@ -65,8 +86,8 @@ class WPSEO_Metabox_Tab_Section implements WPSEO_Metabox_Section {
public function display_content() {
if ( $this->has_tabs() ) {
$html = '<div id="wpseo-meta-section-%1$s" class="wpseo-meta-section">';
$html .= '<div class="wpseo-metabox-tabs-div" >';
$html .= '<ul class="wpseo-metabox-tabs" id="wpseo-metabox-tabs">%2$s</ul>%3$s';
$html .= '<div class="wpseo-metabox-tabs-div">';
$html .= '<ul class="wpseo-metabox-tabs wpseo-metabox-tab-%1$s">%2$s</ul>%3$s';
$html .= '</div></div>';
printf( $html, esc_attr( $this->name ), $this->tab_links(), $this->tab_content() );
@@ -45,7 +45,7 @@ class WPSEO_Metabox extends WPSEO_Meta {
$this->options = WPSEO_Options::get_options( array( 'wpseo', 'wpseo_social' ) );
// Check if on of the social settings is checked in the options, if so, initialize the social_admin object.
// Check if one of the social settings is checked in the options, if so, initialize the social_admin object.
if ( $this->options['opengraph'] === true || $this->options['twitter'] === true ) {
$this->social_admin = new WPSEO_Social_Admin( $this->options );
}
@@ -185,7 +185,8 @@ class WPSEO_Metabox extends WPSEO_Meta {
}
/**
* Adds the Yoast SEO meta box to the edit boxes in the edit post / page / cpt pages.
* Adds the Yoast SEO meta box to the edit boxes in the edit post, page,
* attachment, and custom post types pages.
*/
public function add_meta_box() {
$post_types = get_post_types( array( 'public' => true ) );
@@ -198,6 +199,11 @@ class WPSEO_Metabox extends WPSEO_Meta {
$product_title .= ' Premium';
}
if ( null !== get_current_screen() ) {
$screen_id = get_current_screen()->id;
add_filter( "postbox_classes_{$screen_id}_wpseo_meta", array( $this, 'wpseo_metabox_class' ) );
}
add_meta_box( 'wpseo_meta', $product_title, array(
$this,
'meta_box',
@@ -207,6 +213,18 @@ class WPSEO_Metabox extends WPSEO_Meta {
}
}
/**
* Adds CSS classes to the meta box.
*
* @param array $classes An array of postbox CSS classes.
*
* @return array
*/
public function wpseo_metabox_class( $classes ) {
$classes[] = 'yoast wpseo-metabox';
return $classes;
}
/**
* Pass variables to js for use with the post-scraper
*
@@ -327,7 +345,7 @@ class WPSEO_Metabox extends WPSEO_Meta {
$content_sections = array( $this->get_content_meta_section() );
// Check if social_admin is an instance of WPSEO_Social_Admin.
if ( is_a( $this->social_admin, 'WPSEO_Social_Admin' ) ) {
if ( $this->social_admin instanceof WPSEO_Social_Admin ) {
$content_sections[] = $this->social_admin->get_meta_section();
}
@@ -361,7 +379,7 @@ class WPSEO_Metabox extends WPSEO_Meta {
$content,
__( '', 'wordpress-seo' ),
array(
'link_class' => 'yoast-seo__remove-tab',
'tab_class' => 'yoast-seo__remove-tab',
)
);
@@ -369,10 +387,11 @@ class WPSEO_Metabox extends WPSEO_Meta {
return new WPSEO_Metabox_Tab_Section(
'content',
'<span class="yst-traffic-light-container">' . $this->traffic_light_svg() . '</span>',
'<span class="screen-reader-text">' . __( 'Content optimization', 'wordpress-seo' ) . '</span><span class="yst-traffic-light-container">' . $this->traffic_light_svg() . '</span>',
$tabs,
array(
'link_title' => __( 'Content optimization', 'wordpress-seo' ),
'link_aria_label' => __( 'Content optimization', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -396,10 +415,11 @@ class WPSEO_Metabox extends WPSEO_Meta {
return new WPSEO_Metabox_Tab_Section(
'advanced',
'<span class="dashicons dashicons-admin-generic"></span>',
'<span class="screen-reader-text">' . __( 'Advanced', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-admin-generic"></span>',
array( $tab ),
array(
'link_title' => __( 'Advanced', 'wordpress-seo' ),
'link_aria_label' => __( 'Advanced', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -445,7 +465,8 @@ class WPSEO_Metabox extends WPSEO_Meta {
<p><a target='_blank' class='wpseo-metabox-go-to' href='%s'>%s</a></p>
</div>",
__( 'You\'re not getting the benefits of Yoast SEO Premium yet. If you had Yoast SEO Premium, you could use its awesome features:', 'wordpress-seo' ),
/* translators: %1$s expands to Yoast SEO Premium. */
sprintf( __( 'You\'re not getting the benefits of %1$s yet. If you had %1$s, you could use its awesome features:', 'wordpress-seo' ), 'Yoast SEO Premium' ),
__( 'Redirect manager', 'wordpress-seo' ),
__( 'Create and manage redirects within your WordPress install.', 'wordpress-seo' ),
__( 'Multiple focus keywords', 'wordpress-seo' ),
@@ -455,7 +476,8 @@ class WPSEO_Metabox extends WPSEO_Meta {
__( 'Premium support', 'wordpress-seo' ),
__( 'Gain access to our 24/7 support team.', 'wordpress-seo' ),
'https://yoa.st/pe-buy-premium',
__( 'Get Yoast SEO Premium now!', 'wordpress-seo' ),
/* translators: %s expands to Yoast SEO Premium. */
sprintf( __( 'Get %s now!', 'wordpress-seo' ), 'Yoast SEO Premium' ),
'https://yoa.st/pe-premium-page',
__( 'More info', 'wordpress-seo' )
);
@@ -463,7 +485,7 @@ class WPSEO_Metabox extends WPSEO_Meta {
$tab = new WPSEO_Metabox_Form_Tab(
'premium',
$content,
__( 'Yoast SEO Premium', 'wordpress-seo' ),
'Yoast SEO Premium',
array(
'single' => true,
)
@@ -474,7 +496,8 @@ class WPSEO_Metabox extends WPSEO_Meta {
'<span class="dashicons dashicons-star-filled wpseo-buy-premium"></span>',
array( $tab ),
array(
'link_title' => __( 'Yoast SEO Premium', 'wordpress-seo' ),
'link_aria_label' => 'Yoast SEO Premium',
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -488,10 +511,11 @@ class WPSEO_Metabox extends WPSEO_Meta {
private function get_addons_meta_section() {
return new WPSEO_Metabox_Addon_Tab_Section(
'addons',
'<span class="dashicons dashicons-admin-plugins"></span>',
'<span class="screen-reader-text">' . __( 'Add-ons', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-admin-plugins"></span>',
array(),
array(
'link_title' => __( 'Add-ons', 'wordpress-seo' ),
'link_aria_label' => __( 'Add-ons', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -874,7 +898,7 @@ class WPSEO_Metabox extends WPSEO_Meta {
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'shortcode-plugin', 'wpseoShortcodePluginL10n', $this->localize_shortcode_plugin_script() );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoAdminL10n', WPSEO_Help_Center::get_translated_texts() );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Utils::get_language( get_locale() ) );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Utils::get_language( WPSEO_Utils::get_user_locale() ) );
if ( post_type_supports( get_post_type(), 'thumbnail' ) ) {
$asset_manager->enqueue_style( 'featured-image' );
@@ -1107,10 +1131,10 @@ SVG;
<span class="wpseo-score-icon {{data.score}}"></span>
<span class="wpseo-tab-prefix">{{data.prefix}}</span>
<span class="wpseo-tab-label">{{data.label}}</span>
<span class="screen-reader-text wpseo-generic-tab-textual-score">{{data.scoreText}}.</span>
<span class="screen-reader-text wpseo-generic-tab-textual-score">{{data.scoreText}}</span>
</a>
<# if ( data.hideable ) { #>
<a href="#" class="remove-tab"><span>x</span></a>
<button type="button" class="remove-tab" aria-label="{{data.removeLabel}}"><span>x</span></button>
<# } #>
</li>
</script>';
@@ -1131,10 +1155,10 @@ SVG;
<span class="wpseo-score-icon {{data.score}}"></span>
<span class="wpseo-tab-prefix">{{data.prefix}}</span>
<em class="wpseo-keyword">{{data.label}}</em>
<span class="screen-reader-text wpseo-keyword-tab-textual-score">{{data.scoreText}}.</span>
<span class="screen-reader-text wpseo-keyword-tab-textual-score">{{data.scoreText}}</span>
</a>
<# if ( data.hideable ) { #>
<a href="#" class="remove-keyword"><span>x</span></a>
<button type="button" class="remove-keyword" aria-label="{{data.removeLabel}}"><span>x</span></button>
<# } #>
</li>
</script>';
@@ -62,6 +62,9 @@ $knowledge_graph_label = ( 'company' === $options['company_or_person'] ) ? __( '
$tabs->add_tab( new WPSEO_Option_Tab( 'knowledge-graph', __( $knowledge_graph_label, 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-knowledge-graph' ) ) );
$tabs->add_tab( new WPSEO_Option_Tab( 'webmaster-tools', __( 'Webmaster Tools', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-general-search-console' ) ) );
$tabs->add_tab( new WPSEO_Option_Tab( 'security', __( 'Security', 'wordpress-seo' ), array( 'video_url' => 'https://yoa.st/screencast-security' ) ) );
do_action( 'wpseo_settings_tabs_dashboard', $tabs );
$tabs->display( $yform, $options );
do_action( 'wpseo_dashboard' );
@@ -101,7 +101,7 @@ $utm_info = '#utm_source=wordpress-seo-config&utm_medium=button-info&utm_campaig
?>
<div class="wrap wpseo_table_page yoast">
<div class="wrap yoast wpseo_table_page">
<h1 id="wpseo-title" class="yoast-h1"><?php
/* translators: %1$s expands to Yoast SEO */
@@ -20,7 +20,7 @@ class WPSEO_Taxonomy_Content_Fields extends WPSEO_Taxonomy_Fields {
'',
'snippetpreview',
array(
'help-button' => __( 'Snippet Editor Help', 'wordpress-seo' ),
'help-button' => __( 'Show information about the snippet editor', 'wordpress-seo' ),
'help' => sprintf( __( 'This is a rendering of what this post might look like in Google\'s search results. %sLearn more about the Snippet Preview%s.', 'wordpress-seo' ), '<a target="_blank" href="https://yoa.st/snippet-preview">', '</a>' ),
)
),
@@ -29,7 +29,7 @@ class WPSEO_Taxonomy_Content_Fields extends WPSEO_Taxonomy_Fields {
'',
'focuskeyword',
array(
'help-button' => __( 'Focus Keyword Help', 'wordpress-seo' ),
'help-button' => __( 'Show information about the focus keyword', 'wordpress-seo' ),
'help' => sprintf( __( 'Pick the main keyword or keyphrase that this post/page is about. %sLearn more about the Focus Keyword%s.', 'wordpress-seo' ), '<a target="_blank" href="https://yoa.st/focus-keyword">', '</a>' ),
)
),
@@ -38,7 +38,7 @@ class WPSEO_Taxonomy_Content_Fields extends WPSEO_Taxonomy_Fields {
'',
'pageanalysis',
array(
'help-button' => __( 'Content Analysis Help', 'wordpress-seo' ),
'help-button' => __( 'Show information about the content analysis', 'wordpress-seo' ),
'help' => sprintf( __( 'This is the content analysis, a collection of content checks that analyze the content of your page. %sLearn more about the Content Analysis Tool%s.', 'wordpress-seo' ), '<a target="_blank" href="https://yoa.st/content-analysis">', '</a>' ),
)
),
@@ -50,7 +50,7 @@ class WPSEO_Taxonomy_Metabox {
$product_title .= ' Premium';
}
printf( '<div id="wpseo_meta" class="postbox wpseo-taxonomy-metabox-postbox"><h2><span>%1$s</span></h2>', $product_title );
printf( '<div id="wpseo_meta" class="postbox yoast wpseo-taxonomy-metabox-postbox"><h2><span>%1$s</span></h2>', $product_title );
echo '<div class="inside">';
@@ -117,16 +117,17 @@ class WPSEO_Taxonomy_Metabox {
$content,
__( '', 'wordpress-seo' ),
array(
'link_class' => 'yoast-seo__remove-tab',
'tab_class' => 'yoast-seo__remove-tab',
)
);
return new WPSEO_Metabox_Tab_Section(
'content',
'<span class="yst-traffic-light-container">' . $this->traffic_light_svg() . '</span>',
'<span class="screen-reader-text">' . __( 'Content optimization', 'wordpress-seo' ) . '</span><span class="yst-traffic-light-container">' . $this->traffic_light_svg() . '</span>',
array( $tab ),
array(
'link_title' => __( 'Content optimization', 'wordpress-seo' ),
'link_aria_label' => __( 'Content optimization', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -143,15 +144,19 @@ class WPSEO_Taxonomy_Metabox {
$tab = new WPSEO_Metabox_Form_Tab(
'settings',
$content,
__( 'Settings', 'wordpress-seo' )
__( 'Settings', 'wordpress-seo' ),
array(
'single' => true,
)
);
return new WPSEO_Metabox_Tab_Section(
'settings',
'<span class="dashicons dashicons-admin-generic"></span>',
'<span class="screen-reader-text">' . __( 'Settings', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-admin-generic"></span>',
array( $tab ),
array(
'link_title' => __( 'Settings', 'wordpress-seo' ),
'link_aria_label' => __( 'Settings', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -166,15 +171,23 @@ class WPSEO_Taxonomy_Metabox {
$taxonomy_social_fields = new WPSEO_Taxonomy_Social_Fields( $this->term );
$tabs = array();
$single = true;
if ( $options['opengraph'] === true && $options['twitter'] === true ) {
$single = null;
}
if ( $options['opengraph'] === true ) {
$facebook_meta_fields = $taxonomy_social_fields->get_by_network( 'opengraph' );
$tabs[] = new WPSEO_Metabox_Form_Tab(
'facebook',
$this->taxonomy_tab_content->html( $facebook_meta_fields ),
'<span class="dashicons dashicons-facebook-alt"></span>',
'<span class="screen-reader-text">' . __( 'Facebook / Open Graph metadata', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-facebook-alt"></span>',
array(
'link_title' => __( 'Facebook / Opengraph metadata', 'wordpress-seo' ),
'link_aria_label' => __( 'Facebook / Open Graph metadata', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-se',
'single' => $single,
)
);
}
@@ -185,19 +198,22 @@ class WPSEO_Taxonomy_Metabox {
$tabs[] = new WPSEO_Metabox_Form_Tab(
'twitter',
$this->taxonomy_tab_content->html( $twitter_meta_fields ),
'<span class="dashicons dashicons-twitter"></span>',
'<span class="screen-reader-text">' . __( 'Twitter metadata', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-twitter"></span>',
array(
'link_title' => __( 'Twitter metadata', 'wordpress-seo' ),
'link_aria_label' => __( 'Twitter metadata', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-se',
'single' => $single,
)
);
}
return new WPSEO_Metabox_Tab_Section(
'social',
'<span class="dashicons dashicons-share"></span>',
'<span class="screen-reader-text">' . __( 'Social', 'wordpress-seo' ) . '</span><span class="dashicons dashicons-share"></span>',
$tabs,
array(
'link_title' => __( 'Social', 'wordpress-seo' ),
'link_aria_label' => __( 'Social', 'wordpress-seo' ),
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -236,14 +252,15 @@ class WPSEO_Taxonomy_Metabox {
<strong>%s</strong> - %s
</li>
</ul>
<a target='_blank' id='wpseo-buy-premium-popup-button' class='button button-buy-premium wpseo-metabox-go-to' href='%s'>
%s
</a>
<p><a target='_blank' class='wpseo-metabox-go-to' href='%s'>%s</a></p>
</div>",
__( 'You\'re not getting the benefits of Yoast SEO Premium yet. If you had Yoast SEO Premium, you could use its awesome features:', 'wordpress-seo' ),
/* translators: %1$s expands to Yoast SEO Premium. */
sprintf( __( 'You\'re not getting the benefits of %1$s yet. If you had %1$s, you could use its awesome features:', 'wordpress-seo' ), 'Yoast SEO Premium' ),
__( 'Redirect manager', 'wordpress-seo' ),
__( 'Create and manage redirects within your WordPress install.', 'wordpress-seo' ),
__( 'Multiple focus keywords', 'wordpress-seo' ),
@@ -253,7 +270,8 @@ class WPSEO_Taxonomy_Metabox {
__( 'Premium support', 'wordpress-seo' ),
__( 'Gain access to our 24/7 support team.', 'wordpress-seo' ),
'https://yoa.st/pe-buy-premium',
__( 'Get Yoast SEO Premium now!', 'wordpress-seo' ),
/* translators: %s expands to Yoast SEO Premium. */
sprintf( __( 'Get %s now!', 'wordpress-seo' ), 'Yoast SEO Premium' ),
'https://yoa.st/pe-premium-page',
__( 'More info', 'wordpress-seo' )
);
@@ -261,7 +279,10 @@ class WPSEO_Taxonomy_Metabox {
$tab = new WPSEO_Metabox_Form_Tab(
'premium',
$content,
__( 'Yoast SEO Premium', 'wordpress-seo' )
'Yoast SEO Premium',
array(
'single' => true,
)
);
return new WPSEO_Metabox_Tab_Section(
@@ -269,7 +290,8 @@ class WPSEO_Taxonomy_Metabox {
'<span class="dashicons dashicons-star-filled wpseo-buy-premium"></span>',
array( $tab ),
array(
'link_title' => __( 'Yoast SEO Premium', 'wordpress-seo' ),
'link_aria_label' => 'Yoast SEO Premium',
'link_class' => 'yoast-tooltip yoast-tooltip-e',
)
);
}
@@ -353,10 +375,10 @@ SVG;
<span class="wpseo-score-icon {{data.score}}"></span>
<span class="wpseo-tab-prefix">{{data.prefix}}</span>
<span class="wpseo-tab-label">{{data.label}}</span>
<span class="screen-reader-text wpseo-generic-tab-textual-score">{{data.scoreText}}.</span>
<span class="screen-reader-text wpseo-generic-tab-textual-score">{{data.scoreText}}</span>
</a>
<# if ( data.hideable ) { #>
<a href="#" class="remove-tab"><span>x</span></a>
<button type="button" class="remove-tab" aria-label="{{data.removeLabel}}"><span>x</span></button>
<# } #>
</li>
</script>';
@@ -377,10 +399,10 @@ SVG;
<span class="wpseo-score-icon {{data.score}}"></span>
<span class="wpseo-tab-prefix">{{data.prefix}}</span>
<em class="wpseo-keyword">{{data.label}}</em>
<span class="screen-reader-text wpseo-keyword-tab-textual-score">{{data.scoreText}}.</span>
<span class="screen-reader-text wpseo-keyword-tab-textual-score">{{data.scoreText}}</span>
</a>
<# if ( data.hideable ) { #>
<a href="#" class="remove-keyword"><span>x</span></a>
<button type="button" class="remove-keyword" aria-label="{{data.removeLabel}}"><span>x</span></button>
<# } #>
</li>
</script>';
@@ -41,7 +41,7 @@ class WPSEO_Taxonomy_Settings_Fields extends WPSEO_Taxonomy_Fields {
$this->options['usemetakeywords'] !== true
),
'noindex' => $this->get_field_config(
esc_html__( 'Meta Robots Index', 'wordpress-seo' ),
esc_html__( 'Meta robots index', 'wordpress-seo' ),
esc_html__( 'This taxonomy follows the indexation rules set under Metas and Titles, you can override it here.', 'wordpress-seo' ),
'select',
$this->get_noindex_options()
@@ -60,7 +60,7 @@ class WPSEO_Taxonomy_Social_Fields extends WPSEO_Taxonomy_Fields {
/* translators: %1$s expands to the social network name */
sprintf( esc_html__( 'If you want to use an image for sharing on %1$s, you can upload / choose an image or add the image URL here.', 'wordpress-seo' ), $settings['label'] ) . '<br />' .
/* translators: %1$s expands to the social network name, %2$s expands to the image size */
sprintf( __( 'The recommended image size for %1$s is %2$spx.', 'wordpress-seo' ), $settings['label'], $settings['size'] ),
sprintf( __( 'The recommended image size for %1$s is %2$s pixels.', 'wordpress-seo' ), $settings['label'], $settings['size'] ),
'upload'
),
);
@@ -90,8 +90,14 @@ class WPSEO_Taxonomy_Social_Fields extends WPSEO_Taxonomy_Fields {
private function get_social_networks() {
$social_networks = array(
// Source: https://developers.facebook.com/docs/sharing/best-practices#images.
'opengraph' => $this->social_network( 'opengraph', __( 'Facebook', 'wordpress-seo' ), '1200 × 630' ),
'twitter' => $this->social_network( 'twitter', __( 'Twitter', 'wordpress-seo' ), '1024 × 512' ),
'opengraph' => $this->social_network( 'opengraph', __( 'Facebook', 'wordpress-seo' ), sprintf(
/* translators: %1$s expands to the image recommended width, %2$s to its height. */
__( '%1$s by %2$s', 'wordpress-seo' ), '1200', '630'
) ),
'twitter' => $this->social_network( 'twitter', __( 'Twitter', 'wordpress-seo' ), sprintf(
/* translators: %1$s expands to the image recommended width, %2$s to its height. */
__( '%1$s by %2$s', 'wordpress-seo' ), '1024', '512'
) ),
);
$social_networks = $this->filter_social_networks( $social_networks );
@@ -103,7 +103,7 @@ class WPSEO_Taxonomy {
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper', 'wpseoTermScraperL10n', $this->localize_term_scraper_script() );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'replacevar-plugin', 'wpseoReplaceVarsL10n', $this->localize_replace_vars_script() );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Utils::get_language( get_locale() ) );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Utils::get_language( WPSEO_Utils::get_user_locale() ) );
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoAdminL10n', WPSEO_Help_Center::get_translated_texts() );
$asset_manager->enqueue_script( 'admin-media' );
@@ -149,11 +149,6 @@ function wpseo_display_contributors( $contributors ) {
'role' => __( 'Developer', 'wordpress-seo' ),
'gravatar' => '41073ef9e1f3e01b03cbee75cee33bd4',
),
'rensw90' => (object) array(
'name' => 'Rens Weerman',
'role' => __( 'Developer', 'wordpress-seo' ),
'gravatar' => 'b0a3b8fed2b5ac66a082f0e915d4ea6f',
),
);
wpseo_display_contributors( $people );
@@ -72,15 +72,20 @@ if ( ! empty( $onpage ) && $can_access ) : ?>
case WPSEO_OnPage_Option::CANNOT_FETCH :
echo '<span class="wpseo-score-icon na"></span>';
printf(
/* translators: 1: opens a link to a related knowledge base article. 2: closes the link */
__( '%1$sYoast SEO has not been able to fetch your site’s indexability status%2$s from OnPage.org', 'wordpress-seo' ),
/* translators: %1$s opens a link to a related knowledge base article, %2$s expands to Yoast SEO, %3$s closes the link. */
__( '%1$s%2$s has not been able to fetch your site\'s indexability status%3$s from OnPage.org', 'wordpress-seo' ),
'<a href="https://yoa.st/onpagerequestfailed" target="_blank">',
'Yoast SEO',
'</a>'
);
break;
case WPSEO_OnPage_Option::NOT_FETCHED :
echo '<span class="wpseo-score-icon na"></span>';
esc_html_e( 'Yoast SEO has not fetched your site’s indexability status yet from OnPage.org', 'wordpress-seo' );
echo esc_html( sprintf(
/* translators: %s expands to Yoast SEO. */
__( '%s has not fetched your site\'s indexability status yet from OnPage.org', 'wordpress-seo' ),
'Yoast SEO'
) );
break;
endswitch;
?>
@@ -36,7 +36,7 @@ if ( ! empty( $tab_video_url ) ) :
endif;
?>
<div class="wpseo-tab-video__panel__textarea">
<?php /* translators: %s expands to Yoast SEO */ ?>
<?php /* translators: %s expands to Yoast SEO. */ ?>
<h3><?php printf( __( 'Want to be a %s Expert?', 'wordpress-seo' ), 'Yoast SEO' ); ?></h3>
<?php /* translators: %$1s expands to Yoast SEO */ ?>
<p><?php printf( __( 'Follow our %1$s for WordPress training and become a certified %1$s Expert!', 'wordpress-seo' ), 'Yoast SEO' ); ?></p>
@@ -46,7 +46,7 @@ echo '<h2>' . esc_html__( 'Restore default settings', 'wordpress-seo' ) . '</h2>
?>
<p>
<?php
/* translators: %s expands to Yoast SEO */
/* translators: %s expands to Yoast SEO. */
printf( __( 'If you want to restore a site to the default %s settings, press this button.', 'wordpress-seo' ), 'Yoast SEO' );
?>
</p>
@@ -0,0 +1,19 @@
<?php
/**
* @package WPSEO\Admin\Views
*/
if ( ! defined( 'WPSEO_VERSION' ) ) {
header( 'Status: 403 Forbidden' );
header( 'HTTP/1.1 403 Forbidden' );
exit();
}
/**
* Fires when displaying the site wide analysis tab.
*
* @param Yoast_Form $yform The yoast form object.
*/
do_action( 'wpseo_settings_tab_site_analysis', $yform );
?>
@@ -9,18 +9,6 @@ if ( ! defined( 'WPSEO_VERSION' ) ) {
exit();
}
echo "<div id='author-archives-titles-metas'>";
echo '<h2>' . esc_html__( 'Author archives', 'wordpress-seo' ) . '</h2>';
$yform->textinput( 'title-author-wpseo', __( 'Title template', 'wordpress-seo' ), 'template author-template' );
$yform->textarea( 'metadesc-author-wpseo', __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template author-template' ) );
if ( $options['usemetakeywords'] === true ) {
$yform->textinput( 'metakey-author-wpseo', __( 'Meta keywords template', 'wordpress-seo' ) );
}
$yform->toggle_switch( 'disable-author', array(
'off' => __( 'Enabled', 'wordpress-seo' ),
'on' => __( 'Disabled', 'wordpress-seo' ),
), __( 'Author archives', 'wordpress-seo' ) );
$yform->toggle_switch( 'noindex-author-wpseo', $index_switch_values, __( 'Meta Robots', 'wordpress-seo' ) );
echo '<p>';
/* translators: %1$s / %2$s: links to an article about duplicate content on yoast.com */
printf( __( 'If you\'re running a one author blog, the author archive will be exactly the same as your homepage. This is what\'s called a %1$sduplicate content problem%2$s.', 'wordpress-seo' ), '<a href="https://yoa.st/duplicate-content">', '</a>' );
@@ -29,23 +17,41 @@ echo ' ';
printf( __( 'If this is the case on your site, you can choose to either disable it (which makes it redirect to the homepage), or to add %s to it so it doesn\'t show up in the search results.', 'wordpress-seo' ), '<code>noindex,follow</code>' );
echo ' ';
echo __( 'Note that links to archives might be still output by your theme and you would need to remove them separately.', 'wordpress-seo' );
echo ' ';
_e( 'Date-based archives could in some cases also be seen as duplicate content.', 'wordpress-seo' );
echo '</p>';
echo "<div id='author-archives-titles-metas'>";
echo '<h2>' . esc_html__( 'Author archives settings', 'wordpress-seo' ) . '</h2>';
$yform->toggle_switch( 'disable-author', array(
'off' => __( 'Enabled', 'wordpress-seo' ),
'on' => __( 'Disabled', 'wordpress-seo' ),
), __( 'Author archives', 'wordpress-seo' ) );
echo "<div id='author-archives-titles-metas-content' class='archives-titles-metas-content'>";
$yform->textinput( 'title-author-wpseo', __( 'Title template', 'wordpress-seo' ), 'template author-template' );
$yform->textarea( 'metadesc-author-wpseo', __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template author-template' ) );
if ( $options['usemetakeywords'] === true ) {
$yform->textinput( 'metakey-author-wpseo', __( 'Meta keywords template', 'wordpress-seo' ) );
}
$yform->toggle_switch( 'noindex-author-wpseo', $index_switch_values, __( 'Meta Robots', 'wordpress-seo' ) );
echo '</div>';
echo '</div>';
echo '<br/>';
echo "<div id='date-archives-titles-metas'>";
echo '<h2>' . esc_html__( 'Date archives', 'wordpress-seo' ) . '</h2>';
$yform->textinput( 'title-archive-wpseo', __( 'Title template', 'wordpress-seo' ), 'template date-template' );
$yform->textarea( 'metadesc-archive-wpseo', __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template date-template' ) );
echo '<h2>' . esc_html__( 'Date archives settings', 'wordpress-seo' ) . '</h2>';
$yform->toggle_switch( 'disable-date', array(
'off' => __( 'Enabled', 'wordpress-seo' ),
'on' => __( 'Disabled', 'wordpress-seo' ),
), __( 'Date-based archives', 'wordpress-seo' ) );
), __( 'Date archives', 'wordpress-seo' ) );
echo "<div id='date-archives-titles-metas-content' class='archives-titles-metas-content'>";
$yform->textinput( 'title-archive-wpseo', __( 'Title template', 'wordpress-seo' ), 'template date-template' );
$yform->textarea( 'metadesc-archive-wpseo', __( 'Meta description template', 'wordpress-seo' ), array( 'class' => 'template date-template' ) );
$yform->toggle_switch( 'noindex-archive-wpseo', $index_switch_values, __( 'Meta Robots', 'wordpress-seo' ) );
echo '<p>';
_e( 'Date-based archives could in some cases also be seen as duplicate content.', 'wordpress-seo' );
echo '</p>';
echo '</div>';
echo '</div>';
echo '<br/>';
@@ -13,7 +13,12 @@ echo '<h2>' . esc_html__( 'Your XML Sitemap', 'wordpress-seo' ) . '</h2>';
if ( $options['enablexmlsitemap'] === true ) {
echo '<p>';
printf( esc_html__( 'You can find your XML Sitemap here: %sXML Sitemap%s', 'wordpress-seo' ), '<a target="_blank" class="button" href="' . esc_url( WPSEO_Sitemaps_Router::get_base_url( 'sitemap_index.xml' ) ) . '">', '</a>' );
/* translators: %1$s opening tag of the link to the Sitemap, %2$s closing tag for the link. */
printf(
esc_html__( 'You can find your XML Sitemap here: %1$sXML Sitemap%2$s', 'wordpress-seo' ),
'<a target="_blank" href="' . esc_url( WPSEO_Sitemaps_Router::get_base_url( 'sitemap_index.xml' ) ) . '">',
'</a>'
);
echo '<br/>';
echo '<br/>';
_e( 'You do <strong>not</strong> need to generate the XML sitemap, nor will it take up time to generate after publishing a post.', 'wordpress-seo' );
@@ -64,7 +64,9 @@ function get_rendered_tab( $table, $id ) {
var wpseo_bulk_editor_nonce = '<?php echo wp_create_nonce( 'wpseo-bulk-editor' ); ?>';
</script>
<div class="wrap wpseo_table_page">
<br/><br/>
<div class="wpseo_table_page">
<h2 class="nav-tab-wrapper" id="wpseo-tabs">
<a class="nav-tab" id="title-tab" href="#top#title"><?php _e( 'Title', 'wordpress-seo' ); ?></a>
@@ -9,17 +9,10 @@ if ( ! defined( 'WPSEO_VERSION' ) ) {
exit();
}
/**
* @todo [JRF => testers] Extensively test the export & import of the (new) settings!
* If that all works fine, getting testers to export before and after upgrade will make testing easier.
*
* @todo [Yoast] The import for the RSS Footer plugin checks for data already entered via Yoast SEO,
* the other import routines should do that too.
*/
$yform = Yoast_Form::get_instance();
$replace = false;
$import = false;
/**
* The import method is used to dermine if there should be something imported.
@@ -50,10 +43,6 @@ if ( filter_input( INPUT_POST, 'import' ) || filter_input( INPUT_GET, 'import' )
if ( ! empty( $post_wpseo['importwpseo'] ) || filter_input( INPUT_GET, 'importwpseo' ) ) {
$import = new WPSEO_Import_WPSEO( $replace );
}
// Allow custom import actions.
do_action( 'wpseo_handle_import' );
}
if ( isset( $_FILES['settings_import_file'] ) ) {
@@ -62,20 +51,26 @@ if ( isset( $_FILES['settings_import_file'] ) ) {
$import = new WPSEO_Import();
}
if ( isset( $import ) ) {
/**
* Allow custom import actions.
*
* @api bool|object $import Contains info about the handled import
*/
$import = apply_filters( 'wpseo_handle_import', $import );
if ( $import ) {
/**
* Allow customization of import&export message
*
* @api string $msg The message.
*/
$msg = apply_filters( 'wpseo_import_message', $import->msg );
// Check if we've deleted old data and adjust message to match it.
if ( $replace ) {
$msg .= ' ' . __( 'The old data of the imported plugin was deleted successfully.', 'wordpress-seo' );
}
$msg = apply_filters( 'wpseo_import_message', isset( $import->msg ) ? $import->msg : '' );
if ( $msg != '' ) {
// Check if we've deleted old data and adjust message to match it.
if ( $replace ) {
$msg .= ' ' . __( 'The old data of the imported plugin was deleted successfully.', 'wordpress-seo' );
}
$status = ( $import->success ) ? 'updated' : 'error';
@@ -85,11 +80,11 @@ if ( isset( $import ) ) {
$tabs = array(
'wpseo-import' => array(
'label' => __( 'Import', 'wordpress-seo' ),
'label' => __( 'Import settings', 'wordpress-seo' ),
'screencast_video_url' => 'https://yoa.st/screencast-tools-import-export',
),
'wpseo-export' => array(
'label' => __( 'Export', 'wordpress-seo' ),
'label' => __( 'Export settings', 'wordpress-seo' ),
'screencast_video_url' => 'https://yoa.st/screencast-tools-import-export',
),
'import-seo' => array(
@@ -103,7 +98,7 @@ $tabs = array(
<h2 class="nav-tab-wrapper" id="wpseo-tabs">
<?php foreach ( $tabs as $identifier => $tab ) : ?>
<a class="nav-tab" id="<?php echo $identifier; ?>-tab" href="#top#<?php echo $identifier; ?>"><?php echo $tab['label']; ?></a>
<a class="nav-tab" id="<?php echo $identifier; ?>-tab" href="#top#<?php echo $identifier; ?>"><?php echo $tab['label']; ?></a>
<?php endforeach; ?>
<?php
@@ -1 +1 @@
.wpseo-score-icon{display:inline-block!important;float:left;width:12px!important;height:12px!important;border-radius:50%!important;background-color:#999}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}.adminbar-seo-score{margin:10px 10px 0 4px!important}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{position:absolute;top:32px;left:0;min-width:300px;padding:2px 8px;border-radius:0 10px 10px;color:#fff;background-color:#a4286a;box-shadow:1px 1px 1px 1px grey}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{display:inline;padding:1px 7px 1px 6px!important;border-radius:50%;color:#fff}.yoast-issue-counter{background-color:#d54e21}#wpadminbar .yoast-logo.svg{float:left;width:26px;height:30px;background-repeat:no-repeat;background-position:0 6px;background-size:20px}
.wpseo-score-icon{display:inline-block!important;float:left;width:12px!important;height:12px!important;border-radius:50%!important;background-color:#999}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}.adminbar-seo-score{margin:10px 10px 0 4px!important}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{position:absolute;top:32px;left:0;min-width:300px;padding:2px 8px;border-radius:0 10px 10px;color:#fff;background-color:#a4286a;box-shadow:1px 1px 1px 1px grey}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{display:inline;padding:1px 7px 1px 6px!important;border-radius:50%;color:#fff}.yoast-issue-counter{background-color:#d54e21}#wpadminbar .yoast-logo.svg{float:left;width:26px;height:30px;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6IzgyODc4YyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnPjxnPjxnPjxnPjxwYXRoIGQ9Ik0yMDMuNiwzOTVjNi44LTE3LjQsNi44LTM2LjYsMC01NGwtNzkuNC0yMDRoNzAuOWw0Ny43LDE0OS40bDc0LjgtMjA3LjZIMTE2LjRjLTQxLjgsMC03NiwzNC4yLTc2LDc2VjM1N2MwLDQxLjgsMzQuMiw3Niw3Niw3NkgxNzNDMTg5LDQyNC4xLDE5Ny42LDQxMC4zLDIwMy42LDM5NXoiLz48L2c+PGc+PHBhdGggZD0iTTQ3MS42LDE1NC44YzAtNDEuOC0zNC4yLTc2LTc2LTc2aC0zTDI4NS43LDM2NWMtOS42LDI2LjctMTkuNCw0OS4zLTMwLjMsNjhoMjE2LjJWMTU0Ljh6Ii8+PC9nPjwvZz48cGF0aCBzdHJva2Utd2lkdGg9IjIuOTc0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0zMzgsMS4zbC05My4zLDI1OS4xbC00Mi4xLTEzMS45aC04OS4xbDgzLjgsMjE1LjJjNiwxNS41LDYsMzIuNSwwLDQ4Yy03LjQsMTktMTksMzcuMy01Myw0MS45bC03LjIsMXY3Nmg4LjNjODEuNywwLDExOC45LTU3LjIsMTQ5LjYtMTQyLjlMNDMxLjYsMS4zSDMzOHogTTI3OS40LDM2MmMtMzIuOSw5Mi02Ny42LDEyOC43LTEyNS43LDEzMS44di00NWMzNy41LTcuNSw1MS4zLTMxLDU5LjEtNTEuMWM3LjUtMTkuMyw3LjUtNDAuNywwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMsMTY2LjhsMTA1LjktMjk0aDU4LjFMMjc5LjQsMzYyeiIvPjwvZz48L2c+PC9zdmc+);background-repeat:no-repeat;background-position:0 6px;background-size:20px}#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item{color:#f18500}
@@ -63,7 +63,12 @@
float: right;
width: 26px;
height: 30px;
background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6IzgyODc4YyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnPjxnPjxnPjxnPjxwYXRoIGQ9Ik0yMDMuNiwzOTVjNi44LTE3LjQsNi44LTM2LjYsMC01NGwtNzkuNC0yMDRoNzAuOWw0Ny43LDE0OS40bDc0LjgtMjA3LjZIMTE2LjRjLTQxLjgsMC03NiwzNC4yLTc2LDc2VjM1N2MwLDQxLjgsMzQuMiw3Niw3Niw3NkgxNzNDMTg5LDQyNC4xLDE5Ny42LDQxMC4zLDIwMy42LDM5NXoiLz48L2c+PGc+PHBhdGggZD0iTTQ3MS42LDE1NC44YzAtNDEuOC0zNC4yLTc2LTc2LTc2aC0zTDI4NS43LDM2NWMtOS42LDI2LjctMTkuNCw0OS4zLTMwLjMsNjhoMjE2LjJWMTU0Ljh6Ii8+PC9nPjwvZz48cGF0aCBzdHJva2Utd2lkdGg9IjIuOTc0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0zMzgsMS4zbC05My4zLDI1OS4xbC00Mi4xLTEzMS45aC04OS4xbDgzLjgsMjE1LjJjNiwxNS41LDYsMzIuNSwwLDQ4Yy03LjQsMTktMTksMzcuMy01Myw0MS45bC03LjIsMXY3Nmg4LjNjODEuNywwLDExOC45LTU3LjIsMTQ5LjYtMTQyLjlMNDMxLjYsMS4zSDMzOHogTTI3OS40LDM2MmMtMzIuOSw5Mi02Ny42LDEyOC43LTEyNS43LDEzMS44di00NWMzNy41LTcuNSw1MS4zLTMxLDU5LjEtNTEuMWM3LjUtMTkuMyw3LjUtNDAuNywwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMsMTY2LjhsMTA1LjktMjk0aDU4LjFMMjc5LjQsMzYyeiIvPjwvZz48L2c+PC9zdmc+");
background-repeat: no-repeat;
background-position: 100% 6px;
background-size: 20px;
}
#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item {
color: #f18500;
}
@@ -1 +1 @@
.wpseo-score-icon{display:inline-block!important;float:right;width:12px!important;height:12px!important;border-radius:50%!important;background-color:#999}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}.adminbar-seo-score{margin:10px 4px 0 10px!important}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{position:absolute;top:32px;right:0;min-width:300px;padding:2px 8px;border-radius:10px 0 10px 10px;color:#fff;background-color:#a4286a;box-shadow:-1px 1px 1px 1px grey}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{display:inline;padding:1px 6px 1px 7px!important;border-radius:50%;color:#fff}.yoast-issue-counter{background-color:#d54e21}#wpadminbar .yoast-logo.svg{float:right;width:26px;height:30px;background-repeat:no-repeat;background-position:100% 6px;background-size:20px}
.wpseo-score-icon{display:inline-block!important;float:right;width:12px!important;height:12px!important;border-radius:50%!important;background-color:#999}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}.adminbar-seo-score{margin:10px 4px 0 10px!important}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{position:absolute;top:32px;right:0;min-width:300px;padding:2px 8px;border-radius:10px 0 10px 10px;color:#fff;background-color:#a4286a;box-shadow:-1px 1px 1px 1px grey}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{display:inline;padding:1px 6px 1px 7px!important;border-radius:50%;color:#fff}.yoast-issue-counter{background-color:#d54e21}#wpadminbar .yoast-logo.svg{float:right;width:26px;height:30px;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6IzgyODc4YyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnPjxnPjxnPjxnPjxwYXRoIGQ9Ik0yMDMuNiwzOTVjNi44LTE3LjQsNi44LTM2LjYsMC01NGwtNzkuNC0yMDRoNzAuOWw0Ny43LDE0OS40bDc0LjgtMjA3LjZIMTE2LjRjLTQxLjgsMC03NiwzNC4yLTc2LDc2VjM1N2MwLDQxLjgsMzQuMiw3Niw3Niw3NkgxNzNDMTg5LDQyNC4xLDE5Ny42LDQxMC4zLDIwMy42LDM5NXoiLz48L2c+PGc+PHBhdGggZD0iTTQ3MS42LDE1NC44YzAtNDEuOC0zNC4yLTc2LTc2LTc2aC0zTDI4NS43LDM2NWMtOS42LDI2LjctMTkuNCw0OS4zLTMwLjMsNjhoMjE2LjJWMTU0Ljh6Ii8+PC9nPjwvZz48cGF0aCBzdHJva2Utd2lkdGg9IjIuOTc0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0zMzgsMS4zbC05My4zLDI1OS4xbC00Mi4xLTEzMS45aC04OS4xbDgzLjgsMjE1LjJjNiwxNS41LDYsMzIuNSwwLDQ4Yy03LjQsMTktMTksMzcuMy01Myw0MS45bC03LjIsMXY3Nmg4LjNjODEuNywwLDExOC45LTU3LjIsMTQ5LjYtMTQyLjlMNDMxLjYsMS4zSDMzOHogTTI3OS40LDM2MmMtMzIuOSw5Mi02Ny42LDEyOC43LTEyNS43LDEzMS44di00NWMzNy41LTcuNSw1MS4zLTMxLDU5LjEtNTEuMWM3LjUtMTkuMyw3LjUtNDAuNywwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMsMTY2LjhsMTA1LjktMjk0aDU4LjFMMjc5LjQsMzYyeiIvPjwvZz48L2c+PC9zdmc+);background-repeat:no-repeat;background-position:100% 6px;background-size:20px}#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item{color:#f18500}
@@ -86,7 +86,7 @@
}
.kb-search-content-frame {
background: url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 100% 100%\"><text fill=\"%23ffffff\" x=\"50%\" y=\"50%\" font-family=\"'Lucida Grande', sans-serif\" font-size=\"24\" text-anchor=\"middle\">Loading article...</text></svg>") 0 0 no-repeat;
background: url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 100% 100%\"><text fill=\"%23ffffff\" x=\"50%\" y=\"50%\" font-family=\"'Lucida Grande', sans-serif\" font-size=\"24\" text-anchor=\"middle\">Loading article...</text></svg>") 100% 0 no-repeat;
}
.wpseo-kb-loader:before,
@@ -103,7 +103,6 @@
.wpseo-kb-loader {
position: relative;
margin: 80px auto;
color: #a4286a;
font-size: 10px;
text-indent: -9999em;
-ms-transform: translateZ(0);
@@ -1 +1 @@
.wpseo-kb-search-search-bar{padding-bottom:15px;border-bottom:1px solid #ccc}.wpseo-kb-search-search-bar input[type=text]{min-width:50%;height:28px;margin-left:3px}.wpseo-kb-search-results{overflow:auto;height:500px;margin:0;padding:0;list-style:none}.help-tab-content .wpseo-kb-search-results li{max-width:none;margin:0;list-style:none}.wpseo-kb-search-result{display:block;margin:0;padding-right:5px;border-bottom:1px solid #efefef;text-decoration:none}.wpseo-kb-search-result p{max-width:none;margin-top:0}.wpseo-kb-search-result-link{display:block;outline:0;text-decoration:none;cursor:pointer}.wpseo-kb-search-result-link:focus,.wpseo-kb-search-result-link:hover{background-color:rgba(93,12,55,.5);box-shadow:none;text-decoration:underline}.wpseo-kb-search-result .wpseo-kb-search-result-title{margin:0;padding:14px 0}.wpseo-kb-search-ext-link{float:left}.wpseo-kb-search-back-button:before{content:"\f139"}.wpseo-kb-search-ext-link:before{content:"\f504"}.dashicon-button:before{display:inline-block;font-family:dashicons;font-size:20px;line-height:1.35em;vertical-align:middle}.wpseo-kb-search-navigation{z-index:10;padding:1em 0}.kb-search-content-frame{width:100%;height:543px;background:url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 100% 100%\"><text fill=\"%23ffffff\" x=\"50%\" y=\"50%\" font-family=\"'Lucida Grande', sans-serif\" font-size=\"24\" text-anchor=\"middle\">Loading article...</text></svg>") no-repeat}.wpseo-kb-loader,.wpseo-kb-loader:after,.wpseo-kb-loader:before{width:2.5em;height:2.5em;border-radius:50%;animation:load7 1.8s infinite ease-in-out;animation-fill-mode:both}.wpseo-kb-loader{position:relative;margin:80px auto;color:#a4286a;font-size:10px;text-indent:-9999em;-ms-transform:translateZ(0);transform:translateZ(0);animation-delay:-.16s}.wpseo-kb-loader:before{right:-3.5em;animation-delay:-.32s}.wpseo-kb-loader:after{right:3.5em}.wpseo-kb-loader:after,.wpseo-kb-loader:before{position:absolute;top:0;content:""}.dashicons{text-decoration:none}@keyframes load7{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}
.wpseo-kb-search-search-bar{padding-bottom:15px;border-bottom:1px solid #ccc}.wpseo-kb-search-search-bar input[type=text]{min-width:50%;height:28px;margin-left:3px}.wpseo-kb-search-results{overflow:auto;height:500px;margin:0;padding:0;list-style:none}.help-tab-content .wpseo-kb-search-results li{max-width:none;margin:0;list-style:none}.wpseo-kb-search-result{display:block;margin:0;padding-right:5px;border-bottom:1px solid #efefef;text-decoration:none}.wpseo-kb-search-result p{max-width:none;margin-top:0}.wpseo-kb-search-result-link{display:block;outline:0;text-decoration:none;cursor:pointer}.wpseo-kb-search-result-link:focus,.wpseo-kb-search-result-link:hover{background-color:rgba(93,12,55,.5);box-shadow:none;text-decoration:underline}.wpseo-kb-search-result .wpseo-kb-search-result-title{margin:0;padding:14px 0}.wpseo-kb-search-ext-link{float:left}.wpseo-kb-search-back-button:before{content:"\f139"}.wpseo-kb-search-ext-link:before{content:"\f504"}.dashicon-button:before{display:inline-block;font-family:dashicons;font-size:20px;line-height:1.35em;vertical-align:middle}.wpseo-kb-search-navigation{z-index:10;padding:1em 0}.kb-search-content-frame{width:100%;height:543px;background:url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 100% 100%\"><text fill=\"%23ffffff\" x=\"50%\" y=\"50%\" font-family=\"'Lucida Grande', sans-serif\" font-size=\"24\" text-anchor=\"middle\">Loading article...</text></svg>") 100% 0 no-repeat}.wpseo-kb-loader,.wpseo-kb-loader:after,.wpseo-kb-loader:before{width:2.5em;height:2.5em;border-radius:50%;animation:load7 1.8s infinite ease-in-out;animation-fill-mode:both}.wpseo-kb-loader{position:relative;margin:80px auto;font-size:10px;text-indent:-9999em;-ms-transform:translateZ(0);transform:translateZ(0);animation-delay:-.16s}.wpseo-kb-loader:before{right:-3.5em;animation-delay:-.32s}.wpseo-kb-loader:after{right:3.5em}.wpseo-kb-loader:after,.wpseo-kb-loader:before{position:absolute;top:0;content:""}.dashicons{text-decoration:none}@keyframes load7{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}
@@ -1 +0,0 @@
.snippet-editor__heading,.yoast-section__heading{font-family:"Open Sans",sans-serif}#meta_container,.assessment-results,.snippet_container:after,li.score:after{clear:both}.snippet_container:after,.snippet_container:before{display:table;content:" "}.snippet-editor__container{position:relative;cursor:pointer}.snippet-editor__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-size:.9rem;font-weight:300}.snippet-editor__heading-editor{border-top:1px solid #f7f7f7}.snippet-editor__heading-icon{padding-right:45px;background-repeat:no-repeat;background-position:right 20px top .6em;background-size:16px}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before,.snippet-editor__container:hover:before{position:absolute;right:-22px;width:24px;height:24px;background-size:25px;content:"";display:block;top:-3px}.snippet-editor__heading-icon-eye{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__preview{padding:0 20px 15px}.snippet-editor__button{padding:8px 10px;border:1px solid #dbdbdb;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.snippet-editor__edit-button{display:block;margin-top:1em;padding-right:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") right 8px top 50% no-repeat #f7f7f7;background-size:16px}.snippet-editor__form{padding:20px}.snippet-editor__label{display:block;position:relative;width:100%;margin-top:1em}.snippet-editor__label--focus:before,.snippet-editor__label--hover:before{position:absolute;right:-22px;width:24px;height:24px;background-size:25px;display:block;content:""}.snippet-editor__label:first-child{margin-top:0}.snippet-editor__label--hover:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__label--focus:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%Line truncated
@@ -209,19 +209,29 @@
}
.snippet_container .url {
display: block;
display: inline-block;
float: right;
color: #006621;
font-size: 14px;
font-style: normal;
line-height: 16px;
}
.snippet_container .urlBase {
.snippet_container .down_arrow {
float: right;
margin-top: 6px;
margin-right: 5px;
border-top: 5px solid #006621;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
}
.snippet_container .desc-default {
color: #333;
color: #545454;
}
.snippet_container .desc-default strong {
color: #6a6a6a;
}
.snippet_container .desc-render {
@@ -389,39 +399,6 @@ li.score:after {
height: 1px;
}
/* overall score */
#overallScore #score_circle {
fill: #999;
}
#overallScore #score_circle_shadow {
fill: #777;
}
#overallScore.good #score_circle {
fill: #9fda4f;
}
#overallScore.good #score_circle_shadow {
fill: #77b227;
}
#overallScore.ok #score_circle {
fill: #ffb81e;
}
#overallScore.ok #score_circle_shadow {
fill: #f49a00;
}
#overallScore.bad #score_circle {
fill: #ff4e47;
}
#overallScore.bad #score_circle_shadow {
fill: #ed261f;
}
.assessment-results {
clear: both;
}
@@ -533,6 +510,14 @@ button.yoast-tooltip {
-webkit-font-smoothing: subpixel-antialiased;
}
/*
* Use a data attribute as alternative source for the tooltip text.
* Add this selector as modifier of the base selector.
*/
.yoast-tooltip-alt::after {
content: attr(data-label);
}
.yoast-tooltip::before {
display: none;
position: absolute;
@@ -962,7 +947,7 @@ button.yoast-tooltip {
}
.yoast-section__heading-icon-file-text-o {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20file%3D%22%23555555%22%20d%3D%22M1596%20380q28%2028%2048%2076t20%2088v1152q0%2040%2D28%2068t%2D68%2028h%2D1344q%2D40%200%2D68%2D28t%2D28%2D68v%2D1600q0%2D40%2028%2D68t68%2D28h896q40%200%2088%2020t76%2048zm%2D444%2D244v376h376q%2D10%2D29%2D22%2D41l%2D313%2D313q%2D12%2D12%2D41%2D22zm384%201528v%2D1024h%2D416q%2D40%200%2D68%2D28t%2D28%2D68v%2D416h%2D768v1536h1280zm%2D1024%2D864q0%2D14%209%2D23t23%2D9h704q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64zm736%20224q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704zm0%20256q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704z%22%2F%3E%3C%2Fsvg%3E");
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20file%3D%22%23555%22%20d%3D%22M1596%20380q28%2028%2048%2076t20%2088v1152q0%2040%2D28%2068t%2D68%2028h%2D1344q%2D40%200%2D68%2D28t%2D28%2D68v%2D1600q0%2D40%2028%2D68t68%2D28h896q40%200%2088%2020t76%2048zm%2D444%2D244v376h376q%2D10%2D29%2D22%2D41l%2D313%2D313q%2D12%2D12%2D41%2D22zm384%201528v%2D1024h%2D416q%2D40%200%2D68%2D28t%2D28%2D68v%2D416h%2D768v1536h1280zm%2D1024%2D864q0%2D14%209%2D23t23%2D9h704q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64zm736%20224q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704zm0%20256q14%200%2023%209t9%2023v64q0%2014%2D9%2023t%2D23%209h%2D704q%2D14%200%2D23%2D9t%2D9%2D23v%2D64q0%2D14%209%2D23t23%2D9h704z%22%2F%3E%3C%2Fsvg%3E");
}
.yoast-section *,
@@ -1151,7 +1136,8 @@ ul.wpseo-metabox-tabs li .wpseo-keyword {
}
#wpseo_meta .inside {
overflow: auto;
overflow: auto;
margin: 6px 0 0 0;
}
.wpseotab {
@@ -1330,6 +1316,9 @@ ul.wpseo-metabox-tabs li.wpseo-tab-add-keyword {
.wpseotab .yoast_help.yoast-help-button {
float: left;
}
.wpseotab.content .yoast_help.yoast-help-button {
margin-top: -48px;
}
@@ -1350,7 +1339,8 @@ ul.wpseo-metabox-tabs li.wpseo-tab-add-keyword {
color: #0073aa;
}
.yoast_help.yoast-help-button:focus:before {
.yoast_help.yoast-help-button:focus:before,
.assessment-results__mark:focus {
border-radius: 100%;
box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
}
@@ -1480,12 +1470,12 @@ ul.wpseo-metabox-tabs li.wpseo-tab-add-keyword {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231e8cbe%22%20d%3D%22M403%20218h691l%2D26%2072h%2D665q%2D110%200%2D188%2E5%2079t%2D78%2E5%20189v771q0%2095%2060%2E5%20169%2E5t153%2E5%2093%2E5q23%205%2098%205v72h%2D45q%2D140%200%2D239%2E5%2D100t%2D99%2E5%2D240v%2D771q0%2D140%2099%2E5%2D240t239%2E5%2D100zm851%2D218h247l%2D482%201294q%2D23%2061%2D40%2E5%20103%2E5t%2D45%2098%2D54%2093%2E5%2D64%2E5%2078%2E5%2D79%2E5%2065%2D95%2E5%2041%2D116%2018%2E5v%2D195q163%2D26%20220%2D182%2020%2D52%2020%2D105%200%2D54%2D20%2D106l%2D285%2D733h228l187%20585zm474%20558v1111h%2D795q37%2D55%2045%2D73h678v%2D1038q0%2D85%2D49%2E5%2D155t%2D129%2E5%2D99l25%2D67q101%2034%20163%2E5%20123%2E5t62%2E5%20197%2E5z%22%2F%3E%3C%2Fsvg%3E");
}
#poststuff.wpseo-taxonomy-metabox-postbox {
padding-top: 0;
}
.term-php .wpseo-taxonomy-metabox-postbox h2 {
margin: 0;
padding: 8px 12px;
border-bottom: 1px solid #eee;
font-size: 14px;
line-height: 1.4;
}
.wpseo-buy-premium {
@@ -1526,17 +1516,41 @@ ul.wpseo-metabox-premium-advantages {
}
.yoast-section__heading-icon-list {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M384%201408q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm0%2D512q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm%2D1408%2D928q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm0%2D512v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5z%22%2F%3E%3C%2Fsvg%3E");
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M384%201408q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm0%2D512q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm%2D1408%2D928q0%2080%2D56%20136t%2D136%2056%2D136%2D56%2D56%2D136%2056%2D136%20136%2D56%20136%2056%2056%20136zm1408%20416v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5zm0%2D512v192q0%2013%2D9%2E5%2022%2E5t%2D22%2E5%209%2E5h%2D1216q%2D13%200%2D22%2E5%2D9%2E5t%2D9%2E5%2D22%2E5v%2D192q0%2D13%209%2E5%2D22%2E5t22%2E5%2D9%2E5h1216q13%200%2022%2E5%209%2E5t9%2E5%2022%2E5z%22%2F%3E%3C%2Fsvg%3E");
}
.yoast-section__heading-icon-key {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M832%20512q0%2D80%2D56%2D136t%2D136%2D56%2D136%2056%2D56%20136q0%2042%2019%2083%2D41%2D19%2D83%2D19%2D80%200%2D136%2056t%2D56%20136%2056%20136%20136%2056%20136%2D56%2056%2D136q0%2D42%2D19%2D83%2041%2019%2083%2019%2080%200%20136%2D56t56%2D136zm851%20704q0%2017%2D49%2066t%2D66%2049q%2D9%200%2D28%2E5%2D16t%2D36%2E5%2D33%2D38%2E5%2D40%2D24%2E5%2D26l%2D96%2096%20220%20220q28%2028%2028%2068%200%2042%2D39%2081t%2D81%2039q%2D40%200%2D68%2D28l%2D671%2D671q%2D176%20131%2D365%20131%2D163%200%2D265%2E5%2D102%2E5t%2D102%2E5%2D265%2E5q0%2D160%2095%2D313t248%2D248%20313%2D95q163%200%20265%2E5%20102%2E5t102%2E5%20265%2E5q0%20189%2D131%20365l355%20355%2096%2D96q%2D3%2D3%2D26%2D24%2E5t%2D40%2D38%2E5%2D33%2D36%2E5%2D16%2D28%2E5q0%2D17%2049%2D66t66%2D49q13%200%2023%2010%206%206%2046%2044%2E5t82%2079%2E5%2086%2E5%2086%2073%2078%2028%2E5%2041z%22%2F%3E%3C%2Fsvg%3E");
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M832%20512q0%2D80%2D56%2D136t%2D136%2D56%2D136%2056%2D56%20136q0%2042%2019%2083%2D41%2D19%2D83%2D19%2D80%200%2D136%2056t%2D56%20136%2056%20136%20136%2056%20136%2D56%2056%2D136q0%2D42%2D19%2D83%2041%2019%2083%2019%2080%200%20136%2D56t56%2D136zm851%20704q0%2017%2D49%2066t%2D66%2049q%2D9%200%2D28%2E5%2D16t%2D36%2E5%2D33%2D38%2E5%2D40%2D24%2E5%2D26l%2D96%2096%20220%20220q28%2028%2028%2068%200%2042%2D39%2081t%2D81%2039q%2D40%200%2D68%2D28l%2D671%2D671q%2D176%20131%2D365%20131%2D163%200%2D265%2E5%2D102%2E5t%2D102%2E5%2D265%2E5q0%2D160%2095%2D313t248%2D248%20313%2D95q163%200%20265%2E5%20102%2E5t102%2E5%20265%2E5q0%20189%2D131%20365l355%20355%2096%2D96q%2D3%2D3%2D26%2D24%2E5t%2D40%2D38%2E5%2D33%2D36%2E5%2D16%2D28%2E5q0%2D17%2049%2D66t66%2D49q13%200%2023%2010%206%206%2046%2044%2E5t82%2079%2E5%2086%2E5%2086%2073%2078%2028%2E5%2041z%22%2F%3E%3C%2Fsvg%3E");
}
.yoast-section__heading-icon-edit {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E");
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E");
}
#snippet_preview {
padding: 0;
}
.yoast-tooltip.yoast-tooltip-hidden::before,
.yoast-tooltip.yoast-tooltip-hidden::after {
display: none;
}
/* Workaround for VoiceOver bug see issue #5857 */
.screen-reader-text.wpseo-generic-tab-textual-score,
.screen-reader-text.wpseo-keyword-tab-textual-score {
display: block;
}
@media screen and (max-width: 782px) {
.yoast-help-panel {
max-width: none !important;
}
#wpseo-crawl-issues-table-form .subsubsub {
float: none;
max-width: calc( 100vw - 20px);
}
#wpseo-crawl-issues-table-form .yoast-help-button {
margin-top: 3px;
}
}
@@ -0,0 +1 @@
.snippet-editor__heading,.yoast-section__heading{font-family:"Open Sans",sans-serif}#meta_container,.assessment-results,.snippet_container:after,li.score:after{clear:both}.snippet_container:after,.snippet_container:before{display:table;content:" "}.snippet-editor__container{position:relative;cursor:pointer}.snippet-editor__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-size:.9rem;font-weight:300}.snippet-editor__heading-editor{border-top:1px solid #f7f7f7}.snippet-editor__heading-icon{padding-right:45px;background-repeat:no-repeat;background-position:right 20px top .6em;background-size:16px}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before,.snippet-editor__container:hover:before{position:absolute;right:-22px;width:24px;height:24px;background-size:25px;content:"";display:block;top:-3px}.snippet-editor__heading-icon-eye{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__preview{padding:0 20px 15px}.snippet-editor__button{padding:8px 10px;border:1px solid #dbdbdb;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.snippet-editor__edit-button{display:block;margin-top:1em;padding-right:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") right 8px top 50% no-repeat #f7f7f7;background-size:16px}.snippet-editor__form{padding:20px}.snippet-editor__label{display:block;position:relative;width:100%;margin-top:1em}.snippet-editor__label--focus:before,.snippet-editor__label--hover:before{right:-22px;width:24px;height:24px;background-size:25px;display:block;content:"";position:absolute}.snippet-editor__label:first-child{margin-top:0}.snippet-editor__label--hover:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__label--focus:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%Line truncated
@@ -1,137 +0,0 @@
.fieldset-switch-toggle label {
float: none;
}
@media only screen {
.switch-light.switch-yoast-seo {
margin-bottom: 0.2em;
}
.fieldset-switch-toggle legend,
.switch-light.switch-yoast-seo > strong {
display: block;
box-sizing: border-box;
min-width: 200px;
margin-top: 10px;
padding-left: 1em;
font-weight: bold;
line-height: 2em;
vertical-align: middle;
}
.switch-toggle.switch-yoast-seo,
.switch-light.switch-yoast-seo > span {
width: 250px;
border: 1px solid #ccc;
border-radius: 0.5em;
background-color: #dcdcdc;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
}
.switch-toggle.switch-yoast-seo {
float: right;
}
.switch-light.switch-yoast-seo > span {
/* to contain floats instead of the original overflow: hidden; */
display: inline-block;
/* to make the focus style fully visible */
overflow: visible;
/*float: right;*/
}
.switch-toggle.switch-yoast-seo a,
.switch-light.switch-yoast-seo a {
border-color: #b5b5b5;
border-radius: 0.5em;
background: #a4286a none;
}
/* reset and rebuild focus style */
.switch-toggle.switch-yoast-seo input:focus ~ span a,
.switch-light.switch-yoast-seo input:focus ~ span a,
.switch-toggle.switch-yoast-seo input:focus + label,
.switch-light.switch-yoast-seo input:focus + label {
outline: none;
}
.switch-toggle.switch-yoast-seo input:focus ~ a,
.switch-light.switch-yoast-seo input:focus ~ span a {
border-color: #5b9dd9;
box-shadow: 0 0 2px rgba(0, 115, 170, 0.8);
}
.switch-toggle.switch-yoast-seo input:checked ~ span a,
.switch-light.switch-yoast-seo input:checked ~ span a {
border-color: #b5b5b5;
background: #a4286a none;
}
.switch-light.switch-yoast-seo span span,
.switch-light.switch-yoast-seo input:checked ~ span span:first-child,
.switch-toggle.switch-yoast-seo label {
color: #333;
text-shadow: none;
font-weight: inherit;
}
.switch-candy.switch-yoast-seo input ~ span span:first-child,
.switch-candy.switch-yoast-seo input:checked ~ span span:nth-child(2),
.switch-candy.switch-yoast-seo input:checked + label {
color: #fff;
text-shadow: none;
}
.switch-light.switch-yoast-seo-reverse input:checked ~ span a {
right: 0;
}
.switch-light.switch-yoast-seo-reverse a {
right: 50%;
}
.switch-light.switch-yoast-seo-reverse span span {
float: left;
}
.switch-toggle.switch-yoast-seo label,
label.switch-light.switch-yoast-seo {
margin-right: 0;
/* to help old iOS: ensure labels have cursor pointer instead of
using the empty onclick hack */
cursor: pointer;
}
/* IE11 and JAWS 17.0 need this hack */
.switch-yoast-seo .switch-yoast-seo-jaws-a11y {
display: block;
overflow: hidden;
height: 1px;
margin-bottom: -1px;
}
.switch-toggle.switch-yoast-seo label code,
.switch-light.switch-yoast-seo label code {
background-color: inherit;
vertical-align: top;
}
.switch-container .label-text {
display: block;
margin: 0.5em 0;
font-weight: 600;
}
.switch-container {
clear: both;
margin: 0 0 1em 0;
}
.switch-container + .switch-container {
margin-top: 0.5em;
}
.switch-container + p {
margin: -0.5em 0 1em 0;
}
}
@@ -1 +0,0 @@
.fieldset-switch-toggle label{float:none}@media only screen{.switch-light.switch-yoast-seo{margin-bottom:.2em}.fieldset-switch-toggle legend,.switch-light.switch-yoast-seo>strong{display:block;box-sizing:border-box;min-width:200px;margin-top:10px;padding-left:1em;font-weight:700;line-height:2em;vertical-align:middle}.switch-light.switch-yoast-seo>span,.switch-toggle.switch-yoast-seo{width:250px;border:1px solid #ccc;border-radius:.5em;background-color:#dcdcdc;box-shadow:inset 0 2px 4px rgba(0,0,0,.15)}.switch-toggle.switch-yoast-seo{float:right}.switch-light.switch-yoast-seo>span{display:inline-block;overflow:visible}.switch-light.switch-yoast-seo a,.switch-toggle.switch-yoast-seo a{border-color:#b5b5b5;border-radius:.5em;background:#a4286a}.switch-light.switch-yoast-seo input:focus+label,.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus+label,.switch-toggle.switch-yoast-seo input:focus~span a{outline:0}.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus~a{border-color:#5b9dd9;box-shadow:0 0 2px rgba(0,115,170,.8)}.switch-light.switch-yoast-seo input:checked~span a,.switch-toggle.switch-yoast-seo input:checked~span a{border-color:#b5b5b5;background:#a4286a}.switch-light.switch-yoast-seo input:checked~span span:first-child,.switch-light.switch-yoast-seo span span,.switch-toggle.switch-yoast-seo label{color:#333;text-shadow:none;font-weight:inherit}.switch-candy.switch-yoast-seo input:checked+label,.switch-candy.switch-yoast-seo input:checked~span span:nth-child(2),.switch-candy.switch-yoast-seo input~span span:first-child{color:#fff;text-shadow:none}.switch-light.switch-yoast-seo-reverse input:checked~span a{right:0}.switch-light.switch-yoast-seo-reverse a{right:50%}.switch-light.switch-yoast-seo-reverse span span{float:left}.switch-toggle.switch-yoast-seo label,label.switch-light.switch-yoast-seo{margin-right:0;cursor:pointer}.switch-yoast-seo .switch-yoast-seo-jaws-a11y{display:block;overflow:hidden;height:1px;margin-bottom:-1px}.switch-light.switch-yoast-seo label code,.switch-toggle.switch-yoast-seo label code{background-color:inherit;vertical-align:top}.switch-container .label-text{display:block;margin:.5em 0;font-weight:600}.switch-container{clear:both;margin:0 0 1em}.switch-container+.switch-container{margin-top:.5em}.switch-container+p{margin:-.5em 0 1em}}
@@ -0,0 +1,375 @@
@charset "UTF-8";
/*
* Styles from the toggle switch library.
*/
/*
* CSS TOGGLE SWITCH
*
* Ionuț Colceriu - ghinda.net
* https://github.com/ghinda/css-toggle-switch
*
*/
/* Hide by default. */
.switch-toggle a,
.switch-light span span {
display: none;
}
/* Only target browsers with support for media queries. */
@media only screen {
.switch-light,
.switch-toggle {
display: block;
position: relative;
padding: 0 !important;
}
.switch-light::after,
.switch-toggle::after {
display: table;
clear: both;
content: "";
}
.switch-light *,
.switch-light *:before,
.switch-light *:after,
.switch-toggle *,
.switch-toggle *:before,
.switch-toggle *:after {
box-sizing: border-box;
}
.switch-light a,
.switch-toggle a {
display: block;
transition: all 0.2s ease-out;
}
.switch-light label,
.switch-light > span,
.switch-toggle label,
.switch-toggle > span {
line-height: 2em;
vertical-align: middle;
}
.switch-light input {
position: absolute;
z-index: 3;
opacity: 0;
}
.switch-light input:checked ~ span a {
left: 0;
}
/* Inherit from label. */
.switch-light strong {
font-weight: inherit;
}
.switch-light > span {
position: relative;
min-height: 2em;
padding: 0;
text-align: right;
}
.switch-light span span {
display: block;
float: right;
position: relative;
z-index: 2;
width: 50%;
text-align: center;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.switch-light a {
display: block;
position: absolute;
z-index: 1;
top: 0;
left: 50%;
width: 50%;
height: 100%;
padding: 0;
}
.switch-toggle input {
position: absolute;
right: 0;
opacity: 0;
}
.switch-toggle input + label {
display: block;
float: right;
position: relative;
z-index: 2;
margin: 0;
padding: 0 0.5em;
text-align: center;
}
.switch-toggle a {
position: absolute;
z-index: 1;
top: 0;
right: 0;
width: 10px;
height: 100%;
padding: 0;
}
.switch-toggle label:nth-child(2):nth-last-child(4),
.switch-toggle label:nth-child(2):nth-last-child(4) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(4) ~ a {
width: 50%;
}
.switch-toggle label:nth-child(2):nth-last-child(4) ~ input:checked:nth-child(3) + label ~ a {
right: 50%;
}
.switch-toggle label:nth-child(2):nth-last-child(6),
.switch-toggle label:nth-child(2):nth-last-child(6) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(6) ~ a {
width: 33.33%;
}
.switch-toggle label:nth-child(2):nth-last-child(6) ~ input:checked:nth-child(3) + label ~ a {
right: 33.33%;
}
.switch-toggle label:nth-child(2):nth-last-child(6) ~ input:checked:nth-child(5) + label ~ a {
right: 66.66%;
}
.switch-toggle label:nth-child(2):nth-last-child(8),
.switch-toggle label:nth-child(2):nth-last-child(8) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(8) ~ a {
width: 25%;
}
.switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(3) + label ~ a {
right: 25%;
}
.switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(5) + label ~ a {
right: 50%;
}
.switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(7) + label ~ a {
right: 75%;
}
.switch-toggle label:nth-child(2):nth-last-child(10),
.switch-toggle label:nth-child(2):nth-last-child(10) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(10) ~ a {
width: 20%;
}
.switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(3) + label ~ a {
right: 20%;
}
.switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(5) + label ~ a {
right: 40%;
}
.switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(7) + label ~ a {
right: 60%;
}
.switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(9) + label ~ a {
right: 80%;
}
.switch-toggle label:nth-child(2):nth-last-child(12),
.switch-toggle label:nth-child(2):nth-last-child(12) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(12) ~ a {
width: 16.6%;
}
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(3) + label ~ a {
right: 16.6%;
}
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(5) + label ~ a {
right: 33.2%;
}
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(7) + label ~ a {
right: 49.8%;
}
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(9) + label ~ a {
right: 66.4%;
}
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(11) + label ~ a {
right: 83%;
}
.switch-candy a {
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.45);
}
}
/*
* Bugfix for older Webkit, including mobile Webkit. Adapted from
* http://css-tricks.com/webkit-sibling-bug/
*/
@media only screen and (-webkit-max-device-pixel-ratio: 2) and (max-device-width: 80em) {
.switch-light,
.switch-toggle {
-webkit-animation: webkitSiblingBugfix infinite 1s;
}
}
/*
* Custom styles.
*/
.fieldset-switch-toggle label {
float: none;
}
@media only screen {
.switch-light.switch-yoast-seo {
margin-bottom: 0.2em;
}
.fieldset-switch-toggle legend,
.switch-light.switch-yoast-seo > strong {
display: block;
box-sizing: border-box;
min-width: 200px;
margin-top: 10px;
padding-left: 1em;
font-weight: bold;
line-height: 2em;
vertical-align: middle;
}
.switch-toggle.switch-yoast-seo,
.switch-light.switch-yoast-seo > span {
width: 250px;
border: 1px solid #ccc;
border-radius: 0.5em;
background-color: #dcdcdc;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
}
.switch-toggle.switch-yoast-seo {
float: right;
}
.switch-light.switch-yoast-seo > span {
/* To contain floats instead of the original overflow: hidden;. */
display: inline-block;
/* To make the focus style fully visible. */
overflow: visible;
}
.switch-toggle.switch-yoast-seo a,
.switch-light.switch-yoast-seo a {
border: 1px solid #b5b5b5;
border-radius: 0.5em;
background: #a4286a;
}
.switch-toggle.switch-yoast-seo input:focus ~ span a,
.switch-light.switch-yoast-seo input:focus ~ span a,
.switch-toggle.switch-yoast-seo input:focus + label,
.switch-light.switch-yoast-seo input:focus + label {
/* Reset focus style. */
outline: none;
}
.switch-toggle.switch-yoast-seo input:focus ~ a,
.switch-light.switch-yoast-seo input:focus ~ span a {
border-color: #5b9dd9 !important;
box-shadow: 0 0 2px rgba(0, 115, 170, 0.8) !important;
}
.switch-toggle.switch-yoast-seo input:checked ~ span a,
.switch-light.switch-yoast-seo input:checked ~ span a {
border: 1px solid #b5b5b5;
background: #a4286a;
}
.switch-light.switch-yoast-seo span span,
.switch-light.switch-yoast-seo input:checked ~ span span:first-child,
.switch-toggle.switch-yoast-seo label {
color: #333;
text-shadow: none;
font-weight: inherit;
}
.switch-candy.switch-yoast-seo input ~ span span:first-child,
.switch-candy.switch-yoast-seo input:checked ~ span span:nth-child(2),
.switch-candy.switch-yoast-seo input:checked + label {
color: #fff;
text-shadow: none;
}
.switch-light.switch-yoast-seo-reverse input:checked ~ span a {
right: 0;
}
.switch-light.switch-yoast-seo-reverse a {
right: 50%;
}
.switch-light.switch-yoast-seo-reverse span span {
float: left;
}
.switch-toggle.switch-yoast-seo label,
label.switch-light.switch-yoast-seo {
margin-right: 0;
/*
* To help old iOS: ensure labels have cursor pointer instead of
* using the empty onclick hack.
*/
cursor: pointer;
}
.switch-yoast-seo .switch-yoast-seo-jaws-a11y {
/* IE11 and JAWS 17.0 need this hack. */
display: block;
overflow: hidden;
height: 1px;
margin-bottom: -1px;
}
.switch-toggle.switch-yoast-seo label code,
.switch-light.switch-yoast-seo label code {
background-color: inherit;
vertical-align: top;
}
.switch-container .label-text {
display: block;
margin: 0.5em 0;
font-weight: 600;
}
.switch-container {
clear: both;
margin: 0 0 1em 0;
}
.switch-container + .switch-container {
margin-top: 0.5em;
}
.switch-container + p {
margin: -0.5em 0 1em 0;
}
}
@@ -0,0 +1 @@
@charset "UTF-8";.switch-light span span,.switch-toggle a{display:none}@media only screen{.switch-light,.switch-toggle{display:block;position:relative;padding:0!important}.switch-light::after,.switch-toggle::after{display:table;clear:both;content:""}.switch-light *,.switch-light :after,.switch-light :before,.switch-toggle *,.switch-toggle :after,.switch-toggle :before{box-sizing:border-box}.switch-light a,.switch-toggle a{display:block;transition:all .2s ease-out}.switch-light label,.switch-light>span,.switch-toggle label,.switch-toggle>span{line-height:2em;vertical-align:middle}.switch-light input{position:absolute;z-index:3;opacity:0}.switch-light input:checked~span a{left:0}.switch-light strong{font-weight:inherit}.switch-light>span{position:relative;min-height:2em;padding:0;text-align:right}.switch-light span span{display:block;float:right;position:relative;z-index:2;width:50%;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-light a{display:block;position:absolute;z-index:1;top:0;left:50%;width:50%;height:100%;padding:0}.switch-toggle input{position:absolute;right:0;opacity:0}.switch-toggle input+label{display:block;float:right;position:relative;z-index:2;margin:0;padding:0 .5em;text-align:center}.switch-toggle a{position:absolute;z-index:1;top:0;right:0;width:10px;height:100%;padding:0}.switch-toggle label:nth-child(2):nth-last-child(4),.switch-toggle label:nth-child(2):nth-last-child(4)~a,.switch-toggle label:nth-child(2):nth-last-child(4)~label{width:50%}.switch-toggle label:nth-child(2):nth-last-child(4)~input:checked:nth-child(3)+label~a{right:50%}.switch-toggle label:nth-child(2):nth-last-child(6),.switch-toggle label:nth-child(2):nth-last-child(6)~a,.switch-toggle label:nth-child(2):nth-last-child(6)~label{width:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(3)+label~a{right:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(5)+label~a{right:66.66%}.switch-toggle label:nth-child(2):nth-last-child(8),.switch-toggle label:nth-child(2):nth-last-child(8)~a,.switch-toggle label:nth-child(2):nth-last-child(8)~label{width:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(3)+label~a{right:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(5)+label~a{right:50%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(7)+label~a{right:75%}.switch-toggle label:nth-child(2):nth-last-child(10),.switch-toggle label:nth-child(2):nth-last-child(10)~a,.switch-toggle label:nth-child(2):nth-last-child(10)~label{width:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(3)+label~a{right:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(5)+label~a{right:40%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(7)+label~a{right:60%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(9)+label~a{right:80%}.switch-toggle label:nth-child(2):nth-last-child(12),.switch-toggle label:nth-child(2):nth-last-child(12)~a,.switch-toggle label:nth-child(2):nth-last-child(12)~label{width:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(3)+label~a{right:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(5)+label~a{right:33.2%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(7)+label~a{right:49.8%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(9)+label~a{right:66.4%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(11)+label~a{right:83%}.switch-candy a{box-shadow:0 1px 1px rgba(0,0,0,.2),inset 0 1px 1px rgba(255,255,255,.45)}}@media only screen and (-webkit-max-device-pixel-ratio:2) and (max-device-width:80em){.switch-light,.switch-toggle{-webkit-animation:webkitSiblingBugfix infinite 1s}}.fieldset-switch-toggle label{float:none}@media only screen{.switch-light.switch-yoast-seo{margin-bottom:.2em}.fieldset-switch-toggle legend,.switch-light.switch-yoast-seo>strong{display:block;box-sizing:border-box;min-width:200px;margin-top:10px;padding-left:1em;font-weight:700;line-height:2em;vertical-align:middle}.switch-light.switch-yoast-seo>span,.switch-toggle.switch-yoast-seo{width:250px;border:1px solid #ccc;border-radius:.5em;background-color:#dcdcdc;box-shadow:inset 0 2px 4px rgba(0,0,0,.15)}.switch-toggle.switch-yoast-seo{float:right}.switch-light.switch-yoast-seo>span{display:inline-block;overflow:visible}.switch-light.switch-yoast-seo a,.switch-toggle.switch-yoast-seo a{border:1px solid #b5b5b5;border-radius:.5em;background:#a4286a}.switch-light.switch-yoast-seo input:focus+label,.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus+label,.switch-toggle.switch-yoast-seo input:focus~span a{outline:0}.switch-light.switch-yoast-seo input:focus~Line truncated
@@ -1,553 +0,0 @@
@charset "UTF-8";
/*
* CSS TOGGLE SWITCH
*
* Ionuț Colceriu - ghinda.net
* https://github.com/ghinda/css-toggle-switch
*
*/
/* supported values are px, rem-calc, em-calc
*/
/* imports
*/
/* Functions
*/
/* Shared
*/
/* Hide by default
*/
.switch-toggle a,
.switch-light span span {
display: none; }
/* We can't test for a specific feature,
* so we only target browsers with support for media queries.
*/
@media only screen {
/* Checkbox
*/
.switch-light {
position: relative;
display: block;
/* simulate default browser focus outlines on the switch,
* when the inputs are focused.
*/ }
.switch-light::after {
clear: both;
content: "";
display: table; }
.switch-light *,
.switch-light *:before,
.switch-light *:after {
box-sizing: border-box; }
.switch-light a {
display: block;
-webkit-transition: all 0.2s ease-out;
-moz-transition: all 0.2s ease-out;
transition: all 0.2s ease-out; }
.switch-light label,
.switch-light > span {
/* breathing room for bootstrap/foundation classes.
*/
line-height: 2em;
vertical-align: middle; }
.switch-light input:focus ~ span a,
.switch-light input:focus + label {
outline-width: 2px;
outline-style: solid;
outline-color: Highlight;
/* Chrome/Opera gets its native focus styles.
*/ } }
@media only screen and (-webkit-min-device-pixel-ratio: 0) {
.switch-light input:focus ~ span a,
.switch-light input:focus + label {
outline-color: -webkit-focus-ring-color;
outline-style: auto; } }
@media only screen {
/* don't hide the input from screen-readers and keyboard access
*/
.switch-light input {
position: absolute;
opacity: 0;
z-index: 3; }
.switch-light input:checked ~ span a {
left: 0%; }
/* inherit from label
*/
.switch-light strong {
font-weight: inherit; }
.switch-light > span {
position: relative;
overflow: hidden;
display: block;
min-height: 2em;
/* overwrite 3rd party classes padding
* eg. bootstrap .well
*/
padding: 0;
text-align: right; }
.switch-light span span {
position: relative;
z-index: 2;
display: block;
float: right;
width: 50%;
text-align: center;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.switch-light a {
position: absolute;
left: 50%;
top: 0;
z-index: 1;
display: block;
width: 50%;
height: 100%;
padding: 0; }
/* Radio Switch
*/
.switch-toggle {
position: relative;
display: block;
/* simulate default browser focus outlines on the switch,
* when the inputs are focused.
*/
/* For callout panels in foundation
*/
padding: 0 !important;
/* 2 items
*/
/* 3 items
*/
/* 4 items
*/
/* 5 items
*/
/* 6 items
*/ }
.switch-toggle::after {
clear: both;
content: "";
display: table; }
.switch-toggle *,
.switch-toggle *:before,
.switch-toggle *:after {
box-sizing: border-box; }
.switch-toggle a {
display: block;
-webkit-transition: all 0.2s ease-out;
-moz-transition: all 0.2s ease-out;
transition: all 0.2s ease-out; }
.switch-toggle label,
.switch-toggle > span {
/* breathing room for bootstrap/foundation classes.
*/
line-height: 2em;
vertical-align: middle; }
.switch-toggle input:focus ~ span a,
.switch-toggle input:focus + label {
outline-width: 2px;
outline-style: solid;
outline-color: Highlight;
/* Chrome/Opera gets its native focus styles.
*/ } }
@media only screen and (-webkit-min-device-pixel-ratio: 0) {
.switch-toggle input:focus ~ span a,
.switch-toggle input:focus + label {
outline-color: -webkit-focus-ring-color;
outline-style: auto; } }
@media only screen {
.switch-toggle input {
position: absolute;
right: 0;
opacity: 0; }
.switch-toggle input + label {
position: relative;
z-index: 2;
display: block;
float: right;
padding: 0 0.5em;
margin: 0;
text-align: center; }
.switch-toggle a {
position: absolute;
top: 0;
right: 0;
padding: 0;
z-index: 1;
width: 10px;
height: 100%; }
.switch-toggle label:nth-child(2):nth-last-child(4),
.switch-toggle label:nth-child(2):nth-last-child(4) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(4) ~ a {
width: 50%; }
.switch-toggle label:nth-child(2):nth-last-child(4) ~ input:checked:nth-child(3) + label ~ a {
right: 50%; }
.switch-toggle label:nth-child(2):nth-last-child(6),
.switch-toggle label:nth-child(2):nth-last-child(6) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(6) ~ a {
width: 33.33%; }
.switch-toggle label:nth-child(2):nth-last-child(6) ~ input:checked:nth-child(3) + label ~ a {
right: 33.33%; }
.switch-toggle label:nth-child(2):nth-last-child(6) ~ input:checked:nth-child(5) + label ~ a {
right: 66.66%; }
.switch-toggle label:nth-child(2):nth-last-child(8),
.switch-toggle label:nth-child(2):nth-last-child(8) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(8) ~ a {
width: 25%; }
.switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(3) + label ~ a {
right: 25%; }
.switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(5) + label ~ a {
right: 50%; }
.switch-toggle label:nth-child(2):nth-last-child(8) ~ input:checked:nth-child(7) + label ~ a {
right: 75%; }
.switch-toggle label:nth-child(2):nth-last-child(10),
.switch-toggle label:nth-child(2):nth-last-child(10) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(10) ~ a {
width: 20%; }
.switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(3) + label ~ a {
right: 20%; }
.switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(5) + label ~ a {
right: 40%; }
.switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(7) + label ~ a {
right: 60%; }
.switch-toggle label:nth-child(2):nth-last-child(10) ~ input:checked:nth-child(9) + label ~ a {
right: 80%; }
.switch-toggle label:nth-child(2):nth-last-child(12),
.switch-toggle label:nth-child(2):nth-last-child(12) ~ label,
.switch-toggle label:nth-child(2):nth-last-child(12) ~ a {
width: 16.6%; }
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(3) + label ~ a {
right: 16.6%; }
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(5) + label ~ a {
right: 33.2%; }
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(7) + label ~ a {
right: 49.8%; }
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(9) + label ~ a {
right: 66.4%; }
.switch-toggle label:nth-child(2):nth-last-child(12) ~ input:checked:nth-child(11) + label ~ a {
right: 83%; }
/* Candy Theme
* Based on the "Sort Switches / Toggles (PSD)" by Ormal Clarck
* http://www.premiumpixels.com/freebies/sort-switches-toggles-psd/
*/
.switch-toggle.switch-candy,
.switch-light.switch-candy > span {
background-color: #2d3035;
border-radius: 3px;
box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0 rgba(255, 255, 255, 0.2); }
.switch-light.switch-candy span span,
.switch-light.switch-candy input:checked ~ span span:first-child,
.switch-toggle.switch-candy label {
color: #fff;
font-weight: bold;
text-align: center;
text-shadow: -1px 1px 1px #191b1e; }
.switch-light.switch-candy input ~ span span:first-child,
.switch-light.switch-candy input:checked ~ span span:nth-child(2),
.switch-candy input:checked + label {
color: #333;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); }
.switch-candy a {
border: 1px solid #333;
border-radius: 3px;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.45);
background-color: #70c66b;
background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.2), transparent);
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), transparent); }
.switch-candy-blue a {
background-color: #38a3d4; }
.switch-candy-yellow a {
background-color: #f5e560; }
/* iOS Theme
*/
.switch-ios.switch-light span span {
color: #888b92; }
.switch-ios.switch-light a {
right: 0;
top: 0;
width: 2em;
height: 2em;
background-color: #fff;
border-radius: 100%;
border: 0.25em solid #D8D9DB;
-webkit-transition: all 0.2s ease-out;
-moz-transition: all 0.2s ease-out;
transition: all 0.2s ease-out; }
.switch-ios.switch-light > span {
display: block;
width: 100%;
height: 2em;
background-color: #D8D9DB;
border-radius: 1.75em;
-webkit-transition: all 0.4s ease-out;
-moz-transition: all 0.4s ease-out;
transition: all 0.4s ease-out; }
.switch-ios.switch-light > span span {
position: absolute;
top: 0;
right: 0;
width: 100%;
opacity: 0;
line-height: 1.875em;
vertical-align: middle;
-webkit-transition: all 0.2s ease-out;
-moz-transition: all 0.2s ease-out;
transition: all 0.2s ease-out; }
.switch-ios.switch-light > span span:first-of-type {
opacity: 1;
padding-right: 1.875em; }
.switch-ios.switch-light > span span:last-of-type {
padding-left: 1.875em; }
.switch-ios.switch-light input:checked ~ span a {
right: 100%;
border-color: #4BD865;
margin-right: -2em; }
.switch-ios.switch-light input:checked ~ span {
border-color: #4BD865;
box-shadow: inset 0 0 0 30px #4BD865; }
.switch-ios.switch-light input:checked ~ span span:first-of-type {
opacity: 0; }
.switch-ios.switch-light input:checked ~ span span:last-of-type {
opacity: 1;
color: #fff; }
.switch-ios.switch-toggle {
background-color: #D8D9DB;
border-radius: 30px;
box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0; }
.switch-ios.switch-toggle a {
background-color: #4BD865;
border: 0.125em solid #D8D9DB;
border-radius: 1.75em;
-webkit-transition: all 0.12s ease-out;
-moz-transition: all 0.12s ease-out;
transition: all 0.12s ease-out; }
.switch-ios.switch-toggle label {
height: 2.4em;
color: #888b92;
line-height: 2.4em;
vertical-align: middle; }
.switch-ios input:checked + label {
color: #3e4043; }
/* Holo Theme
*/
.switch-toggle.switch-holo,
.switch-light.switch-holo > span {
background-color: #464747;
border-radius: 1px;
box-shadow: inset rgba(0, 0, 0, 0.1) 0 1px 0;
color: #fff;
text-transform: uppercase; }
.switch-holo label {
color: #fff; }
.switch-holo > span span {
opacity: 0;
-webkit-transition: all 0.1s;
-moz-transition: all 0.1s;
transition: all 0.1s; }
.switch-holo > span span:first-of-type {
opacity: 1; }
.switch-holo > span span,
.switch-holo label {
font-size: 85%;
line-height: 2.15625em; }
.switch-holo a {
background-color: #666;
border-radius: 1px;
box-shadow: inset rgba(255, 255, 255, 0.2) 0 1px 0, inset rgba(0, 0, 0, 0.3) 0 -1px 0; }
/* Selected ON switch-light
*/
.switch-holo.switch-light input:checked ~ span a {
background-color: #0E88B1; }
.switch-holo.switch-light input:checked ~ span span:first-of-type {
opacity: 0; }
.switch-holo.switch-light input:checked ~ span span:last-of-type {
opacity: 1; }
/* Material Theme
*/
/* switch-light
*/
.switch-light.switch-material a {
top: -0.1875em;
width: 1.75em;
height: 1.75em;
border-radius: 50%;
background: #fafafa;
box-shadow: 0 0.125em 0.125em 0 rgba(0, 0, 0, 0.14), 0 0.1875em 0.125em -0.125em rgba(0, 0, 0, 0.2), 0 0.125em 0.25em 0 rgba(0, 0, 0, 0.12);
-webkit-transition: left 0.28s cubic-bezier(0.4, 0, 0.2, 1);
-moz-transition: left 0.28s cubic-bezier(0.4, 0, 0.2, 1);
transition: left 0.28s cubic-bezier(0.4, 0, 0.2, 1); }
.switch-material.switch-light {
overflow: visible; }
.switch-material.switch-light::after {
clear: both;
content: "";
display: table; }
.switch-material.switch-light > span {
overflow: visible;
position: relative;
top: 0.1875em;
width: 3.25em;
height: 1.5em;
min-height: auto;
border-radius: 1em;
background: rgba(0, 0, 0, 0.26); }
.switch-material.switch-light span span {
position: absolute;
clip: rect(0 0 0 0); }
.switch-material.switch-light input:checked ~ span a {
left: 0;
background: #3f51b5;
box-shadow: 0 0.1875em 0.25em 0 rgba(0, 0, 0, 0.14), 0 0.1875em 0.1875em -0.125em rgba(0, 0, 0, 0.2), 0 0.0625em 0.375em 0 rgba(0, 0, 0, 0.12); }
.switch-material.switch-light input:checked ~ span {
background: rgba(63, 81, 181, 0.5); }
/* switch-toggle
*/
.switch-toggle.switch-material {
overflow: visible; }
.switch-toggle.switch-material::after {
clear: both;
content: "";
display: table; }
.switch-toggle.switch-material a {
top: 48%;
width: 0.375em !important;
height: 0.375em;
margin-right: 0.25em;
background: #3f51b5;
border-radius: 100%;
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
-webkit-transition: -webkit-transform;
-moz-transition: -moz-transform;
transition: transform; }
.switch-toggle.switch-material label {
color: rgba(0, 0, 0, 0.54);
font-size: 1em; }
.switch-toggle.switch-material label:before {
content: '';
position: absolute;
top: 48%;
right: 0;
display: block;
width: 0.875em;
height: 0.875em;
border-radius: 100%;
border: 0.125em solid rgba(0, 0, 0, 0.54);
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%); }
.switch-toggle.switch-material input:checked + label:before {
border-color: #3f51b5; }
/* ripple
*/
.switch-light.switch-material > span:before,
.switch-light.switch-material > span:after,
.switch-toggle.switch-material label:after {
content: '';
position: absolute;
top: 0;
right: 0;
z-index: 3;
display: block;
width: 4em;
height: 4em;
border-radius: 100%;
background: #3f51b5;
opacity: .4;
margin-right: -1.25em;
margin-top: -1.25em;
-webkit-transform: scale(0);
-moz-transform: scale(0);
-ms-transform: scale(0);
-o-transform: scale(0);
transform: scale(0);
-webkit-transition: opacity 0.4s ease-in;
-moz-transition: opacity 0.4s ease-in;
transition: opacity 0.4s ease-in; }
.switch-light.switch-material > span:after {
right: auto;
left: 0;
margin-right: 0;
margin-left: -1.25em; }
.switch-toggle.switch-material label:after {
width: 3.25em;
height: 3.25em;
margin-top: -0.75em; }
@-webkit-keyframes materialRipple {
0% {
-webkit-transform: scale(0); }
20% {
-webkit-transform: scale(1); }
100% {
opacity: 0;
-webkit-transform: scale(1); } }
@-moz-keyframes materialRipple {
0% {
-moz-transform: scale(0); }
20% {
-moz-transform: scale(1); }
100% {
opacity: 0;
-moz-transform: scale(1); } }
@keyframes materialRipple {
0% {
-webkit-transform: scale(0);
-moz-transform: scale(0);
-ms-transform: scale(0);
-o-transform: scale(0);
transform: scale(0); }
20% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); }
100% {
opacity: 0;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); } }
.switch-material.switch-light input:not(:checked) ~ span:after,
.switch-material.switch-light input:checked ~ span:before,
.switch-toggle.switch-material input:checked + label:after {
-webkit-animation: materialRipple 0.4s ease-in;
-moz-animation: materialRipple 0.4s ease-in;
animation: materialRipple 0.4s ease-in; }
/* trick to prevent the default checked ripple animation from showing
* when the page loads.
* the ripples are hidden by default, and shown only when the input is focused.
*/
.switch-light.switch-material.switch-light input ~ span:before,
.switch-light.switch-material.switch-light input ~ span:after,
.switch-material.switch-toggle input + label:after {
visibility: hidden; }
.switch-light.switch-material.switch-light input:focus:checked ~ span:before,
.switch-light.switch-material.switch-light input:focus:not(:checked) ~ span:after,
.switch-material.switch-toggle input:focus:checked + label:after {
visibility: visible; } }
/* Bugfix for older Webkit, including mobile Webkit. Adapted from
* http://css-tricks.com/webkit-sibling-bug/
*/
@media only screen and (-webkit-max-device-pixel-ratio: 2) and (max-device-width: 80em) {
.switch-light,
.switch-toggle {
-webkit-animation: webkitSiblingBugfix infinite 1s; } }
@-webkit-keyframes webkitSiblingBugfix {
from {
-webkit-transform: translate3d(0, 0, 0); }
to {
-webkit-transform: translate3d(0, 0, 0); } }
@@ -1 +0,0 @@
@charset "UTF-8";.switch-light span span,.switch-toggle a{display:none}@media only screen{.switch-light{position:relative;display:block}.switch-light::after{clear:both;content:"";display:table}.switch-light *,.switch-light :after,.switch-light :before{box-sizing:border-box}.switch-light a{display:block;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;transition:all .2s ease-out}.switch-light label,.switch-light>span{line-height:2em;vertical-align:middle}.switch-light input:focus+label,.switch-light input:focus~span a{outline:Highlight solid 2px}}@media only screen and (-webkit-min-device-pixel-ratio:0){.switch-light input:focus+label,.switch-light input:focus~span a{outline-color:-webkit-focus-ring-color;outline-style:auto}}@media only screen{.switch-light input{position:absolute;opacity:0;z-index:3}.switch-light input:checked~span a{left:0}.switch-light strong{font-weight:inherit}.switch-light>span{position:relative;overflow:hidden;display:block;min-height:2em;padding:0;text-align:right}.switch-light span span{position:relative;z-index:2;display:block;float:right;width:50%;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-light a{position:absolute;left:50%;top:0;z-index:1;display:block;width:50%;height:100%;padding:0}.switch-toggle{position:relative;display:block;padding:0!important}.switch-toggle::after{clear:both;content:"";display:table}.switch-toggle *,.switch-toggle :after,.switch-toggle :before{box-sizing:border-box}.switch-toggle label,.switch-toggle>span{line-height:2em;vertical-align:middle}.switch-toggle input:focus+label,.switch-toggle input:focus~span a{outline:Highlight solid 2px}.switch-material.switch-light,.switch-toggle.switch-material{overflow:visible}.switch-toggle input{position:absolute;right:0;opacity:0}.switch-toggle input+label{position:relative;z-index:2;display:block;float:right;padding:0 .5em;margin:0;text-align:center}.switch-toggle a{display:block;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;transition:all .2s ease-out;position:absolute;top:0;right:0;padding:0;z-index:1;width:10px;height:100%}.switch-toggle label:nth-child(2):nth-last-child(4),.switch-toggle label:nth-child(2):nth-last-child(4)~a,.switch-toggle label:nth-child(2):nth-last-child(4)~label{width:50%}.switch-toggle label:nth-child(2):nth-last-child(4)~input:checked:nth-child(3)+label~a{right:50%}.switch-toggle label:nth-child(2):nth-last-child(6),.switch-toggle label:nth-child(2):nth-last-child(6)~a,.switch-toggle label:nth-child(2):nth-last-child(6)~label{width:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(3)+label~a{right:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(5)+label~a{right:66.66%}.switch-toggle label:nth-child(2):nth-last-child(8),.switch-toggle label:nth-child(2):nth-last-child(8)~a,.switch-toggle label:nth-child(2):nth-last-child(8)~label{width:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(3)+label~a{right:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(5)+label~a{right:50%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(7)+label~a{right:75%}.switch-toggle label:nth-child(2):nth-last-child(10),.switch-toggle label:nth-child(2):nth-last-child(10)~a,.switch-toggle label:nth-child(2):nth-last-child(10)~label{width:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(3)+label~a{right:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(5)+label~a{right:40%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(7)+label~a{right:60%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(9)+label~a{right:80%}.switch-toggle label:nth-child(2):nth-last-child(12),.switch-toggle label:nth-child(2):nth-last-child(12)~a,.switch-toggle label:nth-child(2):nth-last-child(12)~label{width:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(3)+label~a{right:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(5)+label~a{right:33.2%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(7)+label~a{right:49.8%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(9)+label~a{right:66.4%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(11)+label~a{right:83%}.switch-light.switch-candy>span,.switch-toggle.switch-candy{background-color:#2d3035;border-radius:3px;box-shadow:inset 0 2px 6px rgba(0,0,0,.3),0 1px 0 rgba(255,255,255,.2)}.switch-light.switch-candy input:checked~span span:first-child,.switch-light.switch-candy span span,.switch-toggle.switch-candy label{color:#fff;font-weight:700;text-align:center;text-shadow:-1px 1px 1px #191b1e}.switch-candy input:checked+label,.switch-light.switch-candy input:checked~span span:nth-cLine truncated
@@ -1 +0,0 @@
.yoast-wizard--step--container:focus,a{outline:0}.screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px}.yoast-search-result-preview{background-color:#fff;font-family:Arial,sans-serif}.yoast-search-result-preview__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-family:"Open Sans",sans-serif;font-size:.9rem;font-weight:300}.yoast-search-result-preview__field{overflow:hidden;position:relative;width:600px;cursor:pointer}.yoast-search-result-preview__field:after,.yoast-search-result-preview__field:before{display:table;content:" "}.yoast-search-result-preview__field:after{clear:both}.yoast-search-result-preview__title{overflow:hidden;margin:0;color:#1e0fbe;font-size:18px;font-weight:400;line-height:1.2;white-space:nowrap;text-decoration:none;text-overflow:ellipsis}.yoast-search-result-preview__url{color:#006621;font-size:14px;font-style:normal;line-height:16px}.yoast-search-result-preview__date,.yoast-search-result-preview__description{color:#777;font-size:13px;line-height:1.4}.yoast-icon,.yoast-icon__eye{padding-right:45px}.yoast-icon__eye{background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E") 20px center/16px 16px no-repeat}.yoast-button,.yoast-button__edit{padding:8px 10px;border:1px solid #dbdbdb;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.yoast-button__edit{display:block;margin-top:1em;padding-right:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") 8px center/16px 16px no-repeat #f7f7f7;background-size:16px}.yoast-search-result-form{background-color:#fff;font-family:Arial,sans-serif}.yoast-search-result-form__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-family:"Open Sans",sans-serif;font-size:.9rem;font-weight:300}.yoast-search-result-form__description,.yoast-search-result-form__field{border:1px solid #bfbfbf;width:100%;box-sizing:border-box}.yoast-search-result-form__label{display:block;width:100%;margin-top:1em}.yoast-search-result-form__description{display:block;height:70px}.yoast-search-result-form__progress{display:block;box-sizing:border-box;width:100%;height:8px;margin-top:5px;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.yoast-search-result-form__progress::-webkit-progress-bar{border:1px solid #bfbfbf;background-color:#f7f7f7}.yoast-search-result-form__close-button{margin-top:1em}.yoast-search-result-form__progress--bad{color:#dc3232}.yoast-search-result-form__progress--bad::-webkit-progress-value{background-color:#dc3232;transition:width 250ms}.yoast-search-result-form__progress--bad::-moz-progress-bar{background-color:#dc3232}.yoast-search-result-form__progress--bad--fallback{overflow:hidden;max-width:100%;background-color:#dc3232}.yoast-search-result-form__progress--ok{color:#ee7c1b}.yoast-search-result-form__progress--ok::-webkit-progress-value{background-color:#ee7c1b;transition:width 250ms}.yoast-search-result-form__progress--ok::-moz-progress-bar{background-color:#ee7c1b}.yoast-search-result-form__progress--ok--fallback{overflow:hidden;max-width:100%;background-color:#ee7c1b}.yoast-search-result-form__progress--good{color:#7ad03a}.yoast-search-result-form__progress--good::-webkit-progress-value{background-color:#7ad03a;transition:width 250ms}.yoast-search-result-form__progress--good::-moz-progress-bar{background-color:#7ad03a}.yoast-search-result-form__progress--good--fallback{overflow:hidden;max-width:100%Line truncated
@@ -1,3 +1,29 @@
/* WordPress-specific styling. */
body {
background: #f1f1f1;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
line-height: 1.375;
/* 22px based on default browser font size 16px. */
}
a {
outline: 0;
color: #0073aa;
transition-timing-function: ease-in-out;
transition-duration: 0.05s;
transition-property: border, background, color;
}
a:hover,
a:active {
color: #00a0d2;
}
a:focus {
color: #124964;
box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
}
.screen-reader-text {
overflow: hidden;
clip: rect(1px, 1px, 1px, 1px);
@@ -8,6 +34,7 @@
/* css for snippet */
.yoast-search-result-preview {
overflow: hidden;
background-color: #fff;
font-family: Arial, sans-serif;
}
@@ -39,10 +66,34 @@
clear: both;
}
.yoast-search-result-preview__field--hover:before {
display: block;
position: absolute;
right: -3px;
width: 24px;
height: 24px;
margin-top: -3px;
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E");
background-size: 25px;
content: "";
}
.yoast-search-result-preview__field--focus:before {
display: block;
position: absolute;
right: -3px;
width: 24px;
height: 24px;
margin-top: -3px;
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%230075b3%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E");
background-size: 25px;
content: "";
}
.yoast-search-result-preview__title {
overflow: hidden;
margin: 0;
color: #1e0fbe;
color: #1a0dab;
font-size: 18px;
font-weight: normal;
line-height: 1.2;
@@ -60,24 +111,31 @@
.yoast-search-result-preview__description,
.yoast-search-result-preview__date {
color: #777;
font-size: 13px;
line-height: 1.4;
}
.yoast-search-result-preview__date {
color: #808080;
}
.yoast-search-result-preview__description {
color: #545454;
}
.yoast-icon,
.yoast-icon__eye {
padding-right: 45px;
}
.yoast-icon__eye {
background: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E") no-repeat 20px center/16px 16px;
background: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E") no-repeat 20px center/16px 16px;
}
.yoast-button,
.yoast-button__edit {
padding: 8px 10px;
border: 1px solid #dbdbdb;
border: 1px solid #ccc;
border-radius: 4px;
color: #555;
background: #f7f7f7;
@@ -89,11 +147,12 @@
display: block;
margin-top: 1em;
padding-right: 32px;
background: #f7f7f7 url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") no-repeat 8px center/16px 16px;
background: #f7f7f7 url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") no-repeat 8px center/16px 16px;
background-size: 16px;
}
.yoast-search-result-form {
overflow: hidden;
background-color: #fff;
font-family: Arial, sans-serif;
}
@@ -108,6 +167,32 @@
font-weight: 300;
}
.yoast-search-result-form__container--hover:before {
display: block;
position: absolute;
right: -3px;
width: 24px;
height: 24px;
margin-top: -3px;
margin-top: 15px;
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E");
background-size: 25px;
content: "";
}
.yoast-search-result-form__container--focus:before {
display: block;
position: absolute;
right: -3px;
width: 24px;
height: 24px;
margin-top: -3px;
margin-top: 15px;
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%230075b3%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E");
background-size: 25px;
content: "";
}
.yoast-search-result-form__label {
display: block;
width: 100%;
@@ -117,7 +202,7 @@
.yoast-search-result-form__field {
box-sizing: border-box;
width: 100%;
border: 1px solid #bfbfbf;
border: 1px solid #ddd;
}
.yoast-search-result-form__description {
@@ -125,7 +210,7 @@
box-sizing: border-box;
width: 100%;
height: 70px;
border: 1px solid #bfbfbf;
border: 1px solid #ddd;
}
.yoast-search-result-form__progress {
@@ -142,7 +227,7 @@
}
.yoast-search-result-form__progress::-webkit-progress-bar {
border: 1px solid #bfbfbf;
border: 1px solid #ddd;
background-color: #f7f7f7;
}
@@ -220,29 +305,6 @@
body {
margin: 0;
padding: 0;
background: #f0f0f0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
line-height: 1.375;
/* 22px based on default browser font size 16px. */
}
/* Default WordPress links styling. */
a {
outline: 0;
color: #0073aa;
transition-timing-function: ease-in-out;
transition-duration: 0.05s;
transition-property: border, background, color;
}
a:hover,
a:active {
color: #00a0d2;
}
a:focus {
color: #124964;
box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
}
#container {
@@ -298,7 +360,7 @@ a:focus {
.yoast-wizard--button__next button:hover,
.yoast-wizard--button__next button:focus {
background-color: #832055 !important;
background-color: #6c2548 !important;
}
.yoast-wizard--button__next button:hover div,
@@ -307,7 +369,7 @@ a:focus {
}
.yoast-wizard--button__previous button:focus {
background: #ebebeb !important;
background: #ddd !important;
}
.yoast-wizard--button__previous button:focus:active {
@@ -395,7 +457,7 @@ a:focus {
height: 100%;
opacity: 0.2;
color: #fff;
background-color: black;
background-color: #000;
text-align: center;
}
@@ -407,7 +469,7 @@ a:focus {
position: relative;
min-height: 20px;
border: 1px solid #ccc;
box-shadow: rgba(0, 0, 0, 0.156863) 0 3px 10px, rgba(0, 0, 0, 0.227451) 0 3px 10px;
box-shadow: rgba(0, 0, 0, 0.15) 0 3px 10px, rgba(0, 0, 0, 0.2) 0 3px 10px;
text-align: right;
}
@@ -543,6 +605,28 @@ a:focus {
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
}
@keyframes heartbeat {
0% {
opacity: 0.4;
transform: scale(0.7);
}
80% {
opacity: 1;
}
100% {
opacity: 1;
transform: scale(0.95);
}
}
.yoast-loader {
animation: heartbeat 1.15s infinite;
animation-timing-function: cubic-bezier(0.96, 0.02, 0.63, 0.86);
animation-direction: alternate;
}
.yoast-wizard-return-link {
display: block;
margin: 1em 0;
@@ -0,0 +1 @@
.yoast-wizard--step--container:focus,a{outline:0}body{background:#f1f1f1;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.375}a{color:#0073aa;transition-timing-function:ease-in-out;transition-duration:50ms;transition-property:border,background,color}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px}.yoast-search-result-preview{overflow:hidden;background-color:#fff;font-family:Arial,sans-serif}.yoast-search-result-preview__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-family:"Open Sans",sans-serif;font-size:.9rem;font-weight:300}.yoast-search-result-preview__field{overflow:hidden;position:relative;width:600px;cursor:pointer}.yoast-search-result-preview__field:after,.yoast-search-result-preview__field:before{display:table;content:" "}.yoast-search-result-preview__field--focus:before,.yoast-search-result-preview__field--hover:before{position:absolute;right:-3px;width:24px;height:24px;margin-top:-3px;background-size:25px;content:"";display:block}.yoast-search-result-preview__field:after{clear:both}.yoast-search-result-preview__field--hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23646464%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.yoast-search-result-preview__field--focus:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%230075b3%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.yoast-search-result-preview__title{overflow:hidden;margin:0;color:#1a0dab;font-size:18px;font-weight:400;line-height:1.2;white-space:nowrap;text-decoration:none;text-overflow:ellipsis}.yoast-search-result-preview__url{color:#006621;font-size:14px;font-style:normal;line-height:16px}.yoast-search-result-preview__date,.yoast-search-result-preview__description{font-size:13px;line-height:1.4}.yoast-search-result-preview__date{color:grey}.yoast-search-result-preview__description{color:#545454}.yoast-icon,.yoast-icon__eye{padding-right:45px}.yoast-icon__eye{background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E") 20px center/16px 16px no-repeat}.yoast-button,.yoast-button__edit{padding:8px 10px;border:1px solid #ccc;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.yoast-button__edit{display:block;margin-top:1em;padding-right:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") 8px center/16px 16px no-repeat #f7f7f7;background-size:16px}.yoast-search-result-form{overflow:hidden;background-color:#fff;font-family:Arial,sans-serif}.yoast-search-result-form__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-family:"Open Sans",sans-serif;font-size:.9rem;fontLine truncated
@@ -457,7 +457,6 @@ body .yoast-button.dimmed a:focus:before,
}
.link.yoast-promoblock::after {
-webkit-filter: drop-shadow(1px 0 0 #dc5c04);
-moz-filter: drop-shadow(1px 0 0 #dc5c04);
-ms-filter: drop-shadow(1px 0 0 #dc5c04);
-o-filter: drop-shadow(1px 0 0 #dc5c04);
@@ -469,7 +468,6 @@ body .yoast-button.dimmed a:focus:before,
}
.cta.yoast-promoblock::after {
-webkit-filter: drop-shadow(1px 0 0 #dc5c04);
-moz-filter: drop-shadow(1px 0 0 #dc5c04);
-ms-filter: drop-shadow(1px 0 0 #dc5c04);
-o-filter: drop-shadow(1px 0 0 #dc5c04);
@@ -756,7 +754,6 @@ a.promoblock:hover {
-ms-transform: translateX(50%);
transform: translateX(50%);
-webkit-filter: drop-shadow(0 1px 0 #a4286a);
-moz-filter: drop-shadow(0 1px 0 #a4286a);
-ms-filter: drop-shadow(0 1px 0 #a4286a);
-o-filter: drop-shadow(0 1px 0 #a4286a);
@@ -900,480 +897,3 @@ a.promoblock:hover {
font-size: 1.1em;
font-style: italic;
}
h4 {
clear: both;
margin: 1.2em 0 0.5em 0;
}
p.desc {
margin: 6px 0 10px 0;
padding: 0 25px 8px 0;
}
p.desc.label {
margin: 0 0 20px;
padding: 0 200px 10px 0;
}
tr.yst_row {
margin: 5px 0 0 0;
padding: 5px 0 0 0;
}
tr.yst_row.even {
background-color: #f6f6f6;
}
div.yoastbox ul {
margin-right: 20px;
}
.postbox {
margin: 10px 0 0 10px;
}
label {
float: right;
margin-right: 6px;
}
.yoast-inline-label {
float: none;
margin: 0;
}
label.radio {
float: none;
margin-left: 20px;
}
input.textinput,
textarea,
select {
width: 400px;
}
input.checkbox + label.checkbox {
width: auto;
}
input.textinput,
textarea.textinput,
select.select {
float: right;
margin: 0 0 15px 3px;
padding: 5px;
}
textarea.textinput {
padding: 3px 6px;
}
select.select {
padding: 3px;
}
input.checkbox,
input.checkbox.double {
float: right;
margin: 6px 0 6px 10px;
}
.textinput.metadesc {
height: 50px;
}
textarea.import {
width: 500px;
height: 100px;
}
label.textinput,
label.select,
label.checkbox {
width: 200px;
margin: 5px 0 5px 0;
background-color: transparent;
}
.wp-core-ui .button.wpseo-gsc-save-profile {
margin-right: 200px;
}
table.wpseo th {
text-align: right;
}
.wpseo_content_wrapper {
display: table;
width: 100%;
}
.wpseo_content_wrapper p,
.wpseo_content_wrapper li {
max-width: 600px;
}
.wpseo_content_wrapper .notice p {
max-width: none;
}
/* Notices below Settings pages tabs. */
#wpseo-tabs + .notice {
margin-top: 1.5em;
}
.wpseo_content_cell {
display: table-cell;
height: 500px;
margin: 0;
padding: 0;
vertical-align: top;
}
.wpseo-remove-ads {
margin-top: 0;
padding: 12px;
border: 1px solid #0075b3;
border-radius: 20px;
border-bottom-left-radius: 0;
background-color: #fff;
}
#wpseo_content_top {
min-width: 800px;
}
div.wpseo_variable_warning {
margin: 5px 0 0 0;
padding: 5px;
color: #dc3232;
}
input.wpseo_variable_warning,
textarea.wpseo_variable_warning {
border: 1px solid #dc3232;
}
.wpseo_variable_warning a {
color: #dc3232;
}
.wpseo_content_wrapper h3 {
margin: 1em 0 0.5em 0;
}
.wpseo_content_wrapper h1.wpseo-redirect-url-title {
margin: 1em 0 0.5em 0;
font-size: 1.3em;
}
#sidebar-container {
width: 261px;
padding: 0 20px 0 0;
}
@media (max-width: 1020px) {
#wpseo_content_top {
margin-right: 0;
padding-right: 0;
}
}
.wpseo-admin-page .form-table tr,
.wpseo-admin-page .form-table th,
.wpseo-admin-page .form-table td {
vertical-align: top;
}
.postbox form {
line-height: 150%;
}
div.yoastbox ul li {
list-style: square;
}
.text {
width: 250px;
}
div.yoastbox .button:hover,
div.yoastbox .button-primary:hover {
text-decoration: none;
}
/*.button, .button-primary {*/
/*margin-top: 10px;*/
/*}*/
table.yoast_help,
table.yoast_help th,
table.yoast_help td {
border: 1px solid #ddd;
border-collapse: collapse;
color: #444;
font-size: 12px;
}
table.yoast_help th,
table.yoast_help td {
padding: 5px 10px;
text-align: right;
vertical-align: text-top;
}
table.yoast_help tr {
background-color: #f1f1f1;
}
table.yoast_help tr:nth-child(2n) {
background-color: #fbfbfe;
}
table.yoast_help tr:hover {
background-color: #ddd;
}
.correct {
padding: 5px;
color: white;
background-color: green;
}
.wrong {
padding: 5px;
color: white;
background-color: #dc3232;
}
.wrong code {
padding: 3px 8px;
color: #000;
}
.yoast-notice-blocking-files code {
color: #000;
line-height: 2;
}
.yoast-notice-blocking-files .button {
margin: 0.5em 0;
}
.wpseo_content_wrapper .yoast-blocking-files-error p {
max-width: none;
}
.button.fixit {
float: left;
margin: 0 5px;
}
.button.checkit {
float: left;
margin: 0 5px;
padding: 5px 8px;
}
.fb-buttons .button-primary,
.fb-buttons .button {
margin-left: 8px;
}
.postbox#donate {
border: 2px green;
}
.wpseotab {
display: none;
margin-top: 15px;
}
.wpseotab.active {
display: block;
}
.wpseotab p.expl {
margin-right: 6px;
}
.wpseotab p.expl strong {
font-size: 115%;
}
#sidebar .yoastbox {
margin: 0 0 10px 0;
padding: 10px 15px;
border: 1px solid #ccc;
border-radius: 25px 5px;
}
#sidebar .yoastbox h2 {
font-size: 16px;
}
#sidebar .promo {
color: #000;
}
#donate.yoastbox,
#sitereview.yoastbox {
border-color: green;
background-color: #cfc;
}
h2 {
margin-bottom: 20px;
}
h2 code {
font-size: 23px;
}
#pointer-primary {
margin: 0 0 0 5px;
}
#wpseo-debug-info {
clear: both;
}
#wpseo-debug-info .hndle {
cursor: auto;
}
#wpseo-debug-info .wpseo-debug-heading {
font-size: 1em;
}
#wpseo-debug-info .wpseo-debug {
display: inline-block;
padding-right: 20px;
color: #c00;
}
input.wpseo-new-title,
textarea.wpseo-new-metadesc {
width: 100%;
max-width: 100%;
}
.wpseotab .extension {
float: right;
box-sizing: border-box;
width: 300px;
height: 230px;
margin: 10px 0 10px 20px;
border: 1px solid #ccc;
}
.wpseotab .extension p {
margin: 0;
padding: 10px;
}
.wpseotab .extension h3 {
box-sizing: border-box;
height: 110px;
margin: 0;
padding: 20px 120px 0 10px;
border-bottom: 1px solid #ccc;
background: #fff no-repeat left 10px;
background-size: 130px 100px;
}
.wpseotab .extension a {
text-decoration: none;
}
.wpseotab .extension button.installed {
border-color: #00a000;
background-color: #00a000;
cursor: default;
}
#separator {
margin: 1.5em 0 1em;
}
#separator input.radio {
/* visually hide the radio buttons but keep them accessible */
position: absolute;
right: -9999em;
width: 1px;
height: 1px;
}
#separator input.radio + label {
float: right;
width: 30px !important;
margin: 0 0 0 5px !important;
padding: 9px 6px;
border: 1px solid #ccc;
/* Don't change: these mimic Google's font and font size for titles */
font-family: Arial, Helvetica, sans-serif !important;
font-size: 18px !important;
line-height: 24px;
text-align: center;
cursor: pointer;
}
#separator input.radio:checked + label {
border: 1px solid #a4286a;
background-color: #fff;
box-shadow: inset 0 0 0 2px #a4286a;
}
#separator input.radio:focus + label {
border-radius: 10px;
border-bottom-left-radius: 0;
}
.svg-container {
text-align: center;
}
.svg-container .dashicons {
width: 200px;
height: 100px;
font-size: 100px;
}
body.toplevel_page_wpseo_dashboard .wp-badge {
border: none;
background: url(../images/Yoast_SEO_Icon.svg);
background-size: 150px 160px;
box-shadow: none;
}
.nav-tab .dashicons {
width: 18px;
height: 18px;
font-size: 18px;
line-height: 24px;
}
.nav-tab .pinteresticon {
width: 12px;
height: 24px;
margin-left: 2px;
background-image: url(../images/pinterest-23x30.png);
background-repeat: no-repeat;
background-position: center center;
background-size: contain;
}
#wpseo_progressbar {
height: 25px;
border: 1px solid #006691;
}
#wpseo_progressbar .ui-progressbar-value {
height: 25px;
background: #006691;
}
.wpseo-add-fb-admin-form-wrap .notice span {
margin-right: 10px;
}
@@ -0,0 +1 @@
@charset "UTF-8";.yoast-list--usp{margin-bottom:1em;padding:0;font-family:"Open Sans",Arial,sans-serif}.yoast-list--usp li{position:relative;padding-right:1.2533333333rem;list-style:none!important}.yoast-list--usp li::before{position:absolute;top:0;right:0;color:#77b227;font-family:FontAwesome,"Open Sans",Arial,sans-serif;content:"\f00c\0020"}.yoast .h1,.yoast .h2,.yoast .h3,.yoast .h4,.yoast .h5,.yoast .h6,.yoast h1,.yoast h2,.yoast h3,.yoast h4,.yoast h5,.yoast h6{display:block;margin-top:0;font-family:"Open Sans",Arial,sans-serif;font-weight:300}.yoast .h1,.yoast h1{margin-bottom:1.35rem;font-size:2.5em;line-height:3.68rem;letter-spacing:normal}@media only screen and (min-width:30rem){.yoast .h1,.yoast h1{font-size:2.75em}}.yoast .h2,.yoast h2{margin-bottom:1.2rem;font-size:1.88em;line-height:2.5rem}.yoast .h2.tight,.yoast h2.tight{margin-bottom:.6rem}.yoast .h3,.yoast h3{margin-bottom:.8rem;font-size:1.25em;line-height:1.88rem}.yoast .h3.tight,.yoast h3.tight{margin-bottom:.4rem}@media only screen and (min-width:30rem){.yoast .h3,.yoast h3{font-size:1.375em}}@media only screen and (min-width:50rem){.yoast .h3,.yoast h3{font-size:1.5em}}.yoast .h4,.yoast .h5,.yoast .h6,.yoast h4,.yoast h5,.yoast h6{margin-bottom:.2rem;font-size:1.13em;font-weight:400;line-height:1.88rem}.yoast-button{display:inline-block;position:relative;width:100%;padding:.345em 1em .345em 1.5em;border:0;color:#dc5c04;background-color:#dc5c04;font-family:"Open Sans",Arial,sans-serif;font-size:1.1em;text-decoration:none;cursor:pointer}@media only screen and (min-width:30rem){.yoast-button{width:auto;max-height:2.86rem;margin-left:1.36rem}.yoast-button.left::before,.yoast-button::after{position:absolute;top:0;width:0;height:0;border-top:1.43rem solid transparent;border-bottom:1.44rem solid transparent}.yoast-button::after{left:-1.36rem;border-left:0;border-right:1.43rem solid #dc5c04;content:""}.yoast-button.left{margin-left:0;margin-right:1.36rem}.yoast-button.left::after{content:none}.yoast-button.left::before{right:-1.36rem;border-left:1.43rem solid #dc5c04;border-right:0;content:""}}.yoast-button--full::after,.yoast-button--naked::after,.yoast-button--noarrow::after{content:none}.yoast-button.alignleft{margin:1rem 0 0 2.5rem!important}.yoast-button .arrow{display:none}.yoast-button+.yoast-button{margin-top:1em;margin-right:1.88rem}.yoast-button--full{width:100%}.yoast-button.default{color:#fff;background-color:#dc5c04}.yoast-button.default::after{border-right-color:#dc5c04}.yoast-button.default::before{border-left-color:#dc5c04}.yoast-button a:focus,.yoast-button:hover{color:#fff;background-color:#f58223;text-decoration:underline}.yoast-button a:focus::after,.yoast-button:hover::after{border-right-color:#f58223}.yoast-button a:focus::before,.yoast-button:hover::before{border-left-color:#f58223}.yoast-button.academy{color:#fff;background-color:#5d237a}.yoast-button.academy::after{border-right-color:#5d237a}.yoast-button.academy::before{border-left-color:#5d237a}@media only screen and (max-width:20rem){.yoast-button.academy{background-color:#5d237a}.yoast-button.academy--secondary{background-color:#a4286a}}.yoast-button.academy--secondary{color:#fff;background-color:#a4286a}.yoast-button.academy--secondary::after{border-right-color:#a4286a}.yoast-button.academy--secondary::before{border-left-color:#a4286a}.yoast-button.software{color:#fff;background-color:#0075b3}.yoast-button.software::after{border-right-color:#0075b3}.yoast-button.software::before{border-left-color:#0075b3}.yoast-button.review{color:#fff;background-color:#009288}.yoast-button.about,.yoast_academy .yoast-button{background-color:#d93f69;color:#fff}.yoast-button.review::after{border-right-color:#009288}.yoast-button.about::after,.yoast_academy .yoast-button::after{border-right-color:#d93f69}.yoast-button.review::before{border-left-color:#009288}.yoast-button.about::before,.yoast_academy .yoast-button::before{border-left-color:#d93f69}.yoast_academy .yoast-button a:focus,.yoast_academy .yoast-button:hover{color:#fff;background-color:#d42a59;text-decoration:underline}.yoast_academy .yoast-button a:focus::after,.yoast_academy .yoast-button:hover::after{border-right-color:#d42a59}.yoast_academy .yoast-button a:focus::before,.yoast_academy .yoast-button:hover::before{border-left-color:#d42a59}.yoast_academy .yoast-button.dimmed,body .yoast-button.dimmed{color:#646464;background-color:#dcdcdc}.yoast_academy .yoast-button.dimmed::after,body .yoast-button.dimmed::after{border-right-color:#dcdcdc}.yoast_academy .yoast-button.dimmed::before,body .yoast-button.dimmed::before{border-left-color:#dcdcdc}.yoast_academy .yoast-button.dimmed a:focus,.yoast_academy .yoast-button.dimmed:hover,body .yoast-button.dimmed a:focus,body .yoast-button.dimmed:hover{color:#646464;background-color:#cdcdcd;text-decoration:underline}.yoast_academy .yoast-button.dimmed a:focus::after,.yoast_academy .yoast-button.dimmed:hover::after,body .yoast-button.dimmed a:focus::after,body .yoast-button.dimmed:hoLine truncated
@@ -1 +0,0 @@
@charset "UTF-8";#wpseo-debug-info,.yoast-seo-premium-extension:after,h4{clear:both}.wpseotab .extension,.yoast *,.yoast :after,.yoast :before{box-sizing:border-box}.yoast-list--usp{margin-bottom:1em;padding:0;font-family:"Open Sans",Arial,sans-serif}.yoast-list--usp li{position:relative;padding-right:1.2533333333rem;list-style:none!important}.yoast-list--usp li::before{position:absolute;top:0;right:0;color:#77b227;font-family:FontAwesome,"Open Sans",Arial,sans-serif;content:"\f00c\0020"}.yoast .h1,.yoast .h2,.yoast .h3,.yoast .h4,.yoast .h5,.yoast .h6,.yoast h1,.yoast h2,.yoast h3,.yoast h4,.yoast h5,.yoast h6{display:block;margin-top:0;font-family:"Open Sans",Arial,sans-serif;font-weight:300}.yoast .h1,.yoast h1{margin-bottom:1.35rem;font-size:2.5em;line-height:3.68rem;letter-spacing:normal}@media only screen and (min-width:30rem){.yoast .h1,.yoast h1{font-size:2.75em}}.yoast .h2,.yoast h2{margin-bottom:1.2rem;font-size:1.88em;line-height:2.5rem}.yoast .h2.tight,.yoast h2.tight{margin-bottom:.6rem}.yoast .h3,.yoast h3{margin-bottom:.8rem;font-size:1.25em;line-height:1.88rem}.yoast .h3.tight,.yoast h3.tight{margin-bottom:.4rem}@media only screen and (min-width:30rem){.yoast .h3,.yoast h3{font-size:1.375em}}@media only screen and (min-width:50rem){.yoast .h3,.yoast h3{font-size:1.5em}}.yoast .h4,.yoast .h5,.yoast .h6,.yoast h4,.yoast h5,.yoast h6{margin-bottom:.2rem;font-size:1.13em;font-weight:400;line-height:1.88rem}.yoast-button{display:inline-block;position:relative;width:100%;padding:.345em 1em .345em 1.5em;border:0;color:#dc5c04;background-color:#dc5c04;font-family:"Open Sans",Arial,sans-serif;font-size:1.1em;text-decoration:none;cursor:pointer}@media only screen and (min-width:30rem){.yoast-button{width:auto;max-height:2.86rem;margin-left:1.36rem}.yoast-button.left::before,.yoast-button::after{position:absolute;top:0;width:0;height:0;border-top:1.43rem solid transparent;border-bottom:1.44rem solid transparent}.yoast-button::after{left:-1.36rem;border-left:0;border-right:1.43rem solid #dc5c04;content:""}.yoast-button.left{margin-left:0;margin-right:1.36rem}.yoast-button.left::after{content:none}.yoast-button.left::before{right:-1.36rem;border-left:1.43rem solid #dc5c04;border-right:0;content:""}}.yoast-button--full::after,.yoast-button--naked::after,.yoast-button--noarrow::after{content:none}.yoast-button.alignleft{margin:1rem 0 0 2.5rem!important}.yoast-button .arrow{display:none}.yoast-button+.yoast-button{margin-top:1em;margin-right:1.88rem}.yoast-button--full{width:100%}.yoast-button.default{color:#fff;background-color:#dc5c04}.yoast-button.default::after{border-right-color:#dc5c04}.yoast-button.default::before{border-left-color:#dc5c04}.yoast-button a:focus,.yoast-button:hover{color:#fff;background-color:#f58223;text-decoration:underline}.yoast-button a:focus::after,.yoast-button:hover::after{border-right-color:#f58223}.yoast-button a:focus::before,.yoast-button:hover::before{border-left-color:#f58223}.yoast-button.academy{color:#fff;background-color:#5d237a}.yoast-button.academy::after{border-right-color:#5d237a}.yoast-button.academy::before{border-left-color:#5d237a}@media only screen and (max-width:20rem){.yoast-button.academy{background-color:#5d237a}.yoast-button.academy--secondary{background-color:#a4286a}}.yoast-button.academy--secondary{color:#fff;background-color:#a4286a}.yoast-button.academy--secondary::after{border-right-color:#a4286a}.yoast-button.academy--secondary::before{border-left-color:#a4286a}.yoast-button.software{color:#fff;background-color:#0075b3}.yoast-button.software::after{border-right-color:#0075b3}.yoast-button.software::before{border-left-color:#0075b3}.yoast-button.review{color:#fff;background-color:#009288}.yoast-button.about,.yoast_academy .yoast-button{background-color:#d93f69;color:#fff}.yoast-button.review::after{border-right-color:#009288}.yoast-button.about::after,.yoast_academy .yoast-button::after{border-right-color:#d93f69}.yoast-button.review::before{border-left-color:#009288}.yoast-button.about::before,.yoast_academy .yoast-button::before{border-left-color:#d93f69}.yoast_academy .yoast-button a:focus,.yoast_academy .yoast-button:hover{color:#fff;background-color:#d42a59;text-decoration:underline}.yoast_academy .yoast-button a:focus::after,.yoast_academy .yoast-button:hover::after{border-right-color:#d42a59}.yoast_academy .yoast-button a:focus::before,.yoast_academy .yoast-button:hover::before{border-left-color:#d42a59}.yoast_academy .yoast-button.dimmed,body .yoast-button.dimmed{color:#646464;background-color:#dcdcdc}.yoast_academy .yoast-button.dimmed::after,body .yoast-button.dimmed::after{border-right-color:#dcdcdc}.yoast_academy .yoast-button.dimmed::before,body .yoast-button.dimmed::before{border-left-color:#dcdcdc}.yoast_academy .yoast-button.dimmed a:focus,.yoast_academy .yoast-button.dimmed:hover,body .yoast-button.dimmed a:focus,body .yoast-button.dimmed:hover{color:#646464;background-color:#cdcdcd;text-decoration:underline}.yoast_academy .yoastLine truncated
@@ -0,0 +1,537 @@
h4 {
clear: both;
margin: 1.2em 0 0.5em 0;
}
p.desc {
margin: 6px 0 10px 0;
padding: 0 25px 8px 0;
}
p.desc.label {
margin: 0 0 20px;
padding: 0 200px 10px 0;
}
tr.yst_row {
margin: 5px 0 0 0;
padding: 5px 0 0 0;
}
tr.yst_row.even {
background-color: #f6f6f6;
}
div.yoastbox ul {
margin-right: 20px;
}
.postbox {
margin: 10px 0 0 10px;
}
label {
float: right;
margin-right: 6px;
}
.yoast-inline-label {
float: none;
margin: 0;
}
label.radio {
float: none;
margin-left: 20px;
}
input.textinput,
textarea,
select {
width: 400px;
}
input.checkbox + label.checkbox {
width: auto;
}
input.textinput,
textarea.textinput,
select.select {
float: right;
margin: 0 0 15px 3px;
padding: 5px;
}
textarea.textinput {
padding: 3px 6px;
}
select.select {
padding: 3px;
}
input.checkbox,
input.checkbox.double {
float: right;
margin: 6px 0 6px 10px;
}
.textinput.metadesc {
height: 50px;
}
textarea.import {
width: 500px;
height: 100px;
}
label.textinput,
label.select,
label.checkbox {
width: 200px;
margin: 5px 0 5px 0;
background-color: transparent;
}
.wpseo-gsc-reload-crawl-issues-form {
position: relative;
top: 9px;
}
.wp-core-ui .button.wpseo-gsc-save-profile {
margin-right: 200px;
}
table.wpseo th {
text-align: right;
}
.wpseo_content_wrapper {
display: table;
width: 100%;
}
.wpseo_content_wrapper p,
.wpseo_content_wrapper li {
max-width: 600px;
}
.wpseo_content_wrapper .notice p {
max-width: none;
}
/* Notices below Settings pages tabs. */
#wpseo-tabs + .notice {
margin-top: 1.5em;
}
.wpseo_content_cell {
display: table-cell;
height: 500px;
margin: 0;
padding: 0;
vertical-align: top;
}
.wpseo-remove-ads {
margin-top: 0;
padding: 12px;
border: 1px solid #0075b3;
border-radius: 20px;
border-bottom-left-radius: 0;
background-color: #fff;
}
#wpseo_content_top {
min-width: 800px;
}
.wpseo-variable-warning-element {
border: 1px solid #c62d2d !important;
}
.wpseo-variable-warning {
clear: both;
margin: 5px 0 0 0;
padding: 5px;
color: #c62d2d;
}
.wpseo-variable-warning code {
color: #b02828;
}
.wpseo-variable-warning a {
color: #c62d2d;
}
.wpseo_content_wrapper h3 {
margin: 1em 0 0.5em 0;
}
.wpseo_content_wrapper h1.wpseo-redirect-url-title {
margin: 1em 0 0.5em 0;
font-size: 1.3em;
}
#sidebar-container {
width: 261px;
padding: 0 20px 0 0;
}
@media (max-width: 1020px) {
#wpseo_content_top {
margin-right: 0;
padding-right: 0;
}
}
.wpseo-admin-page .form-table tr,
.wpseo-admin-page .form-table th,
.wpseo-admin-page .form-table td {
vertical-align: top;
}
.postbox form {
line-height: 150%;
}
div.yoastbox ul li {
list-style: square;
}
.text {
width: 250px;
}
div.yoastbox .button:hover,
div.yoastbox .button-primary:hover {
text-decoration: none;
}
/*.button, .button-primary {*/
/*margin-top: 10px;*/
/*}*/
table.yoast_help,
table.yoast_help th,
table.yoast_help td {
border: 1px solid #ddd;
border-collapse: collapse;
color: #444;
font-size: 12px;
}
table.yoast_help th,
table.yoast_help td {
padding: 5px 10px;
text-align: right;
vertical-align: text-top;
}
table.yoast_help tr {
background-color: #f1f1f1;
}
table.yoast_help tr:nth-child(2n) {
background-color: #fbfbfe;
}
table.yoast_help tr:hover {
background-color: #ddd;
}
.correct {
padding: 5px;
color: white;
background-color: green;
}
.wrong {
padding: 5px;
color: white;
background-color: #dc3232;
}
.wrong code {
padding: 3px 8px;
color: #000;
}
.yoast-notice-blocking-files code {
color: #000;
line-height: 2;
}
.yoast-notice-blocking-files .button {
margin: 0.5em 0;
}
.wpseo_content_wrapper .yoast-blocking-files-error p {
max-width: none;
}
.button.fixit {
float: left;
margin: 0 5px;
}
.button.checkit {
float: left;
margin: 0 5px;
padding: 5px 8px;
}
.fb-buttons .button-primary,
.fb-buttons .button {
margin-left: 8px;
}
.postbox#donate {
border: 2px green;
}
.wpseotab {
display: none;
margin-top: 15px;
}
.wpseotab.active {
display: block;
}
.wpseotab p.expl {
margin-right: 6px;
}
.wpseotab p.expl strong {
font-size: 115%;
}
#sidebar .yoastbox {
margin: 0 0 10px 0;
padding: 10px 15px;
border: 1px solid #ccc;
border-radius: 25px 5px;
}
#sidebar .yoastbox h2 {
font-size: 16px;
}
#sidebar .promo {
color: #000;
}
#donate.yoastbox,
#sitereview.yoastbox {
border-color: green;
background-color: #cfc;
}
h2 {
margin-bottom: 20px;
}
h2 code {
font-size: 23px;
}
#pointer-primary {
margin: 0 0 0 5px;
}
#wpseo-debug-info {
clear: both;
}
#wpseo-debug-info .hndle {
cursor: auto;
}
#wpseo-debug-info .wpseo-debug-heading {
font-size: 1em;
}
#wpseo-debug-info .wpseo-debug {
display: inline-block;
padding-right: 20px;
color: #c00;
}
input.wpseo-new-title,
textarea.wpseo-new-metadesc {
width: 100%;
max-width: 100%;
}
.wpseotab .extension {
float: right;
box-sizing: border-box;
width: 300px;
height: 230px;
margin: 10px 0 10px 20px;
border: 1px solid #ccc;
}
.wpseotab .extension p {
margin: 0;
padding: 10px;
}
.wpseotab .extension h3 {
box-sizing: border-box;
height: 110px;
margin: 0;
padding: 20px 120px 0 10px;
border-bottom: 1px solid #ccc;
background: #fff no-repeat right 10px;
background-size: 130px 100px;
}
.wpseotab .extension a {
text-decoration: none;
}
.wpseotab .extension button.installed {
border-color: #00a000;
background-color: #00a000;
cursor: default;
}
#separator {
margin: 1.5em 0 1em;
}
#separator input.radio {
/* visually hide the radio buttons but keep them accessible */
position: absolute;
right: -9999em;
width: 1px;
height: 1px;
}
#separator input.radio + label {
float: right;
width: 30px !important;
margin: 0 0 0 5px !important;
padding: 9px 6px;
border: 1px solid #ccc;
/* Don't change: these mimic Google's font and font size for titles */
font-family: Arial, Helvetica, sans-serif !important;
font-size: 18px !important;
line-height: 24px;
text-align: center;
cursor: pointer;
}
#separator input.radio:checked + label {
border: 1px solid #a4286a;
background-color: #fff;
box-shadow: inset 0 0 0 2px #a4286a;
}
#separator input.radio:focus + label {
border-radius: 10px;
border-bottom-left-radius: 0;
}
.svg-container {
text-align: center;
}
.svg-container .dashicons {
width: 200px;
height: 100px;
font-size: 100px;
}
body.toplevel_page_wpseo_dashboard .wp-badge {
border: none;
background: url(../images/Yoast_SEO_Icon.svg);
background-size: 150px 160px;
box-shadow: none;
}
.nav-tab .dashicons {
width: 18px;
height: 18px;
font-size: 18px;
line-height: 24px;
}
.nav-tab .pinteresticon {
width: 12px;
height: 24px;
margin-left: 2px;
background-image: url(../images/pinterest-23x30.png);
background-repeat: no-repeat;
background-position: center center;
background-size: contain;
}
#wpseo_progressbar {
height: 25px;
border: 1px solid #006691;
}
#wpseo_progressbar .ui-progressbar-value {
height: 25px;
background: #006691;
}
.wpseo-add-fb-admin-form-wrap .notice span {
margin-right: 10px;
}
.archives-titles-metas-content {
padding-top: 1em;
}
@media screen and (max-width: 782px) {
.wpseo-gsc-reload-crawl-issues-form {
top: 0;
margin: 1em 0;
}
.wpseo-gsc-reload-crawl-issues-form .alignright {
float: none;
}
}
@media screen and (max-width: 600px) {
.wpseo-gsc-reload-crawl-issues-form {
margin-bottom: 0;
}
}
.yoast-sidebar__title {
box-sizing: border-box;
width: 100%;
margin: 46px 0 20px;
padding: 10px;
border: none;
border-bottom: 1px solid #a4286a;
outline: none;
color: #a4286a;
background: none;
line-height: 19px;
text-align: right;
}
.yoast-sidebar__spot {
padding: 10px 0;
border-bottom: 1px solid #ddd;
}
.yoast-sidebar__spot a {
color: #a4286a;
}
.wpseo-banner__link {
display: inline-block;
}
.wpseo-banner__image {
vertical-align: top;
}
@@ -0,0 +1 @@
#wpseo-debug-info,h4{clear:both}.wpseotab .extension a,div.yoastbox .button-primary:hover,div.yoastbox .button:hover{text-decoration:none}h4{margin:1.2em 0 .5em}p.desc{margin:6px 0 10px;padding:0 25px 8px 0}p.desc.label{margin:0 0 20px;padding:0 200px 10px 0}tr.yst_row{margin:5px 0 0;padding:5px 0 0}tr.yst_row.even{background-color:#f6f6f6}div.yoastbox ul{margin-right:20px}.postbox{margin:10px 0 0 10px}label{float:right;margin-right:6px}.yoast-inline-label{float:none;margin:0}label.radio{float:none;margin-left:20px}input.textinput,select,textarea{width:400px}input.checkbox+label.checkbox{width:auto}input.textinput,select.select,textarea.textinput{float:right;margin:0 0 15px 3px;padding:5px}textarea.textinput{padding:3px 6px}select.select{padding:3px}input.checkbox,input.checkbox.double{float:right;margin:6px 0 6px 10px}.textinput.metadesc{height:50px}textarea.import{width:500px;height:100px}label.checkbox,label.select,label.textinput{width:200px;margin:5px 0;background-color:transparent}.wpseo-gsc-reload-crawl-issues-form{position:relative;top:9px}.wp-core-ui .button.wpseo-gsc-save-profile{margin-right:200px}table.wpseo th{text-align:right}.wpseo_content_wrapper{display:table;width:100%}.wpseo_content_wrapper li,.wpseo_content_wrapper p{max-width:600px}.wpseo_content_wrapper .notice p,.wpseo_content_wrapper .yoast-blocking-files-error p{max-width:none}#wpseo-tabs+.notice{margin-top:1.5em}.wpseo_content_cell{display:table-cell;height:500px;margin:0;padding:0;vertical-align:top}.wpseo-remove-ads{margin-top:0;padding:12px;border:1px solid #0075b3;border-radius:20px 20px 20px 0;background-color:#fff}#wpseo_content_top{min-width:800px}.wpseo-variable-warning-element{border:1px solid #c62d2d!important}.wpseo-variable-warning{clear:both;margin:5px 0 0;padding:5px;color:#c62d2d}.wpseo-variable-warning code{color:#b02828}.wpseo-variable-warning a{color:#c62d2d}.wpseo_content_wrapper h3{margin:1em 0 .5em}.wpseo_content_wrapper h1.wpseo-redirect-url-title{margin:1em 0 .5em;font-size:1.3em}#sidebar-container{width:261px;padding:0 20px 0 0}@media (max-width:1020px){#wpseo_content_top{margin-right:0;padding-right:0}}.wpseo-admin-page .form-table td,.wpseo-admin-page .form-table th,.wpseo-admin-page .form-table tr{vertical-align:top}.postbox form{line-height:150%}div.yoastbox ul li{list-style:square}.text{width:250px}table.yoast_help,table.yoast_help td,table.yoast_help th{border:1px solid #ddd;border-collapse:collapse;color:#444;font-size:12px}table.yoast_help td,table.yoast_help th{padding:5px 10px;text-align:right;vertical-align:text-top}.correct,.wrong{padding:5px;color:#fff}table.yoast_help tr{background-color:#f1f1f1}table.yoast_help tr:nth-child(2n){background-color:#fbfbfe}table.yoast_help tr:hover{background-color:#ddd}.correct{background-color:green}.wrong{background-color:#dc3232}.wrong code{padding:3px 8px;color:#000}.yoast-notice-blocking-files code{color:#000;line-height:2}.yoast-notice-blocking-files .button{margin:.5em 0}.button.checkit,.button.fixit{float:left;margin:0 5px}.button.checkit{padding:5px 8px}.fb-buttons .button,.fb-buttons .button-primary{margin-left:8px}.postbox#donate{border:2px green}.wpseotab{display:none;margin-top:15px}.wpseotab.active{display:block}.wpseotab p.expl{margin-right:6px}.wpseotab p.expl strong{font-size:115%}#sidebar .yoastbox{margin:0 0 10px;padding:10px 15px;border:1px solid #ccc;border-radius:25px 5px}#sidebar .yoastbox h2{font-size:16px}#sidebar .promo{color:#000}#donate.yoastbox,#sitereview.yoastbox{border-color:green;background-color:#cfc}h2{margin-bottom:20px}h2 code{font-size:23px}#pointer-primary{margin:0 0 0 5px}#wpseo-debug-info .hndle{cursor:auto}#wpseo-debug-info .wpseo-debug-heading{font-size:1em}#wpseo-debug-info .wpseo-debug{display:inline-block;padding-right:20px;color:#c00}input.wpseo-new-title,textarea.wpseo-new-metadesc{width:100%;max-width:100%}.wpseotab .extension{float:right;box-sizing:border-box;width:300px;height:230px;margin:10px 0 10px 20px;border:1px solid #ccc}.wpseotab .extension p{margin:0;padding:10px}.wpseotab .extension h3{box-sizing:border-box;height:110px;margin:0;padding:20px 120px 0 10px;border-bottom:1px solid #ccc;background:right 10px no-repeat #fff;background-size:130px 100px}.wpseotab .extension button.installed{border-color:#00a000;background-color:#00a000;cursor:default}#separator{margin:1.5em 0 1em}#separator input.radio{position:absolute;right:-9999em;width:1px;height:1px}#separator input.radio+label{float:right;width:30px!important;margin:0 0 0 5px!important;padding:9px 6px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;text-align:center;cursor:pointer}#separator input.radio:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}#separator input.radio:focus+label{border-radius:10px 10px 10px 0}.svg-container{text-align:center}.svg-container .dashicons{width:200px;height:100px;font-size:100px}body.toplevel_page_wpseo_dashLine truncated
@@ -1 +0,0 @@
.overallScore #score_circle{fill:#999}.overallScore #score_circle_shadow{fill:#777}.overallScore.good #score_circle{fill:#9fda4f}.overallScore.good #score_circle_shadow{fill:#77b227}.overallScore.ok #score_circle{fill:#ffb81e}.overallScore.ok #score_circle_shadow{fill:#f49a00}.overallScore.bad #score_circle{fill:#ff4e47}.overallScore.bad #score_circle_shadow{fill:#ed261f}.overallScore.na #score_circle_shadow{fill:#999}.overallScore svg{margin:10px}.wpseo-score-icon{display:inline-block;width:12px;height:12px;margin:3px 3px 0 10px;border-radius:50%;background:#888;vertical-align:top}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}.wpseo-score-title{font-weight:600}#taxonomy_overall{position:absolute;top:0;margin-right:87.5%}
@@ -1,43 +1,3 @@
.overallScore #score_circle {
fill: #999;
}
.overallScore #score_circle_shadow {
fill: #777;
}
.overallScore.good #score_circle {
fill: #9fda4f;
}
.overallScore.good #score_circle_shadow {
fill: #77b227;
}
.overallScore.ok #score_circle {
fill: #ffb81e;
}
.overallScore.ok #score_circle_shadow {
fill: #f49a00;
}
.overallScore.bad #score_circle {
fill: #ff4e47;
}
.overallScore.bad #score_circle_shadow {
fill: #ed261f;
}
.overallScore.na #score_circle_shadow {
fill: #999;
}
.overallScore svg {
margin: 10px;
}
.wpseo-score-icon {
display: inline-block;
width: 12px;
@@ -0,0 +1 @@
.wpseo-score-icon{display:inline-block;width:12px;height:12px;margin:3px 3px 0 10px;border-radius:50%;background:#888;vertical-align:top}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}.wpseo-score-title{font-weight:600}#taxonomy_overall{position:absolute;top:0;margin-right:87.5%}
@@ -1,4 +0,0 @@
<?php
/**
* Nothing to see here.
*/
@@ -1 +1 @@
.wpseo-kb-search-search-bar{padding-bottom:15px;border-bottom:1px solid #ccc}.wpseo-kb-search-search-bar input[type=text]{min-width:50%;height:28px;margin-right:3px}.wpseo-kb-search-results{overflow:auto;height:500px;margin:0;padding:0;list-style:none}.help-tab-content .wpseo-kb-search-results li{max-width:none;margin:0;list-style:none}.wpseo-kb-search-result{display:block;margin:0;padding-left:5px;border-bottom:1px solid #efefef;text-decoration:none}.wpseo-kb-search-result p{max-width:none;margin-top:0}.wpseo-kb-search-result-link{display:block;outline:0;text-decoration:none;cursor:pointer}.wpseo-kb-search-result-link:focus,.wpseo-kb-search-result-link:hover{background-color:rgba(93,12,55,.5);box-shadow:none;text-decoration:underline}.wpseo-kb-search-result .wpseo-kb-search-result-title{margin:0;padding:14px 0}.wpseo-kb-search-ext-link{float:right}.wpseo-kb-search-back-button:before{content:"\f141"}.wpseo-kb-search-ext-link:before{content:"\f504"}.dashicon-button:before{display:inline-block;font-family:dashicons;font-size:20px;line-height:1.35em;vertical-align:middle}.wpseo-kb-search-navigation{z-index:10;padding:1em 0}.kb-search-content-frame{width:100%;height:543px;background:url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 100% 100%\"><text fill=\"%23ffffff\" x=\"50%\" y=\"50%\" font-family=\"'Lucida Grande', sans-serif\" font-size=\"24\" text-anchor=\"middle\">Loading article...</text></svg>") no-repeat}.wpseo-kb-loader,.wpseo-kb-loader:after,.wpseo-kb-loader:before{width:2.5em;height:2.5em;border-radius:50%;animation:load7 1.8s infinite ease-in-out;animation-fill-mode:both}.wpseo-kb-loader{position:relative;margin:80px auto;color:#a4286a;font-size:10px;text-indent:-9999em;-ms-transform:translateZ(0);transform:translateZ(0);animation-delay:-.16s}.wpseo-kb-loader:before{left:-3.5em;animation-delay:-.32s}.wpseo-kb-loader:after{left:3.5em}.wpseo-kb-loader:after,.wpseo-kb-loader:before{position:absolute;top:0;content:""}.dashicons{text-decoration:none}@keyframes load7{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}
.wpseo-kb-search-search-bar{padding-bottom:15px;border-bottom:1px solid #ccc}.wpseo-kb-search-search-bar input[type=text]{min-width:50%;height:28px;margin-right:3px}.wpseo-kb-search-results{overflow:auto;height:500px;margin:0;padding:0;list-style:none}.help-tab-content .wpseo-kb-search-results li{max-width:none;margin:0;list-style:none}.wpseo-kb-search-result{display:block;margin:0;padding-left:5px;border-bottom:1px solid #efefef;text-decoration:none}.wpseo-kb-search-result p{max-width:none;margin-top:0}.wpseo-kb-search-result-link{display:block;outline:0;text-decoration:none;cursor:pointer}.wpseo-kb-search-result-link:focus,.wpseo-kb-search-result-link:hover{background-color:rgba(93,12,55,.5);box-shadow:none;text-decoration:underline}.wpseo-kb-search-result .wpseo-kb-search-result-title{margin:0;padding:14px 0}.wpseo-kb-search-ext-link{float:right}.wpseo-kb-search-back-button:before{content:"\f141"}.wpseo-kb-search-ext-link:before{content:"\f504"}.dashicon-button:before{display:inline-block;font-family:dashicons;font-size:20px;line-height:1.35em;vertical-align:middle}.wpseo-kb-search-navigation{z-index:10;padding:1em 0}.kb-search-content-frame{width:100%;height:543px;background:url("data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 100% 100%\"><text fill=\"%23ffffff\" x=\"50%\" y=\"50%\" font-family=\"'Lucida Grande', sans-serif\" font-size=\"24\" text-anchor=\"middle\">Loading article...</text></svg>") no-repeat}.wpseo-kb-loader,.wpseo-kb-loader:after,.wpseo-kb-loader:before{width:2.5em;height:2.5em;border-radius:50%;animation:load7 1.8s infinite ease-in-out;animation-fill-mode:both}.wpseo-kb-loader{position:relative;margin:80px auto;font-size:10px;text-indent:-9999em;-ms-transform:translateZ(0);transform:translateZ(0);animation-delay:-.16s}.wpseo-kb-loader:before{left:-3.5em;animation-delay:-.32s}.wpseo-kb-loader:after{left:3.5em}.wpseo-kb-loader:after,.wpseo-kb-loader:before{position:absolute;top:0;content:""}.dashicons{text-decoration:none}@keyframes load7{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}
@@ -1 +0,0 @@
.snippet-editor__heading,.yoast-section__heading{font-family:"Open Sans",sans-serif}#meta_container,.assessment-results,.snippet_container:after,li.score:after{clear:both}.snippet_container:after,.snippet_container:before{display:table;content:" "}.snippet-editor__container{position:relative;cursor:pointer}.snippet-editor__heading{margin:0 -20px 15px;padding:8px 20px;border-bottom:1px solid #f7f7f7;color:#555;font-size:.9rem;font-weight:300}.snippet-editor__heading-editor{border-top:1px solid #f7f7f7}.snippet-editor__heading-icon{padding-left:45px;background-repeat:no-repeat;background-position:left 20px top .6em;background-size:16px}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before,.snippet-editor__container:hover:before{position:absolute;left:-22px;width:24px;height:24px;background-size:25px;content:"";display:block;top:-3px}.snippet-editor__heading-icon-eye{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__preview{padding:0 20px 15px}.snippet-editor__button{padding:8px 10px;border:1px solid #dbdbdb;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;cursor:pointer}.snippet-editor__edit-button{display:block;margin-top:1em;padding-left:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") left 8px top 50% no-repeat #f7f7f7;background-size:16px}.snippet-editor__form{padding:20px}.snippet-editor__label{display:block;position:relative;width:100%;margin-top:1em}.snippet-editor__label--focus:before,.snippet-editor__label--hover:before{position:absolute;left:-22px;width:24px;height:24px;background-size:25px;display:block;content:""}.snippet-editor__label:first-child{margin-top:0}.snippet-editor__label--hover:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__label--focus:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%Line truncated
Loaded 100 of 260 files, more files were not shown because too many files have changed in this diff. Show more