diff --git a/src/js/_enqueues/admin/link.js b/src/js/_enqueues/admin/link.js index 1456ba9530ede..ed4bd5e3efb94 100644 --- a/src/js/_enqueues/admin/link.js +++ b/src/js/_enqueues/admin/link.js @@ -19,16 +19,37 @@ jQuery( function($) { * * @return {boolean} Always returns false to prevent the default behavior. */ - $('#category-tabs a').on( 'click', function(){ + $('#category-tabs a').on( 'click keyup keydown', function( event ){ var t = $(this).attr('href'); - $(this).parent().addClass('tabs').siblings('li').removeClass('tabs'); - $('.tabs-panel').hide(); - $(t).show(); - if ( '#categories-all' == t ) - deleteUserSetting('cats'); - else - setUserSetting('cats','pop'); - return false; + if ( event.type === 'keydown' && event.key === ' ' ) { + event.preventDefault(); + } + if ( ( event.type === 'keyup' && event.key === ' ' ) || ( event.type === 'keydown' && event.key === 'Enter' ) || event.type === 'click' ) { + event.preventDefault(); + $('#category-tabs a').removeAttr( 'aria-selected' ).attr( 'tabindex', '-1' ); + $(this).attr( 'aria-selected', 'true' ).removeAttr( 'tabindex' ); + $(this).parent().addClass('tabs').siblings('li').removeClass('tabs'); + $('.tabs-panel').hide(); + $(t).show(); + if ( '#categories-all' == t ) { + deleteUserSetting('cats'); + } else { + setUserSetting('cats','pop'); + } + return false; + } + if ( event.type === 'keyup' && ( event.key === 'ArrowRight' || event.key === 'ArrowLeft' ) ) { + $(this).attr( 'tabindex', '-1' ); + let next = $(this).parent('li').next(); + let prev = $(this).parent('li').prev(); + if ( next.length > 0 ) { + next.find('a').removeAttr( 'tabindex'); + next.find('a').trigger( 'focus' ); + } else { + prev.find('a').removeAttr( 'tabindex'); + prev.find('a').trigger( 'focus' ); + } + } }); if ( getUserSetting('cats') ) $('#category-tabs a[href="#categories-pop"]').trigger( 'click' ); diff --git a/src/js/_enqueues/admin/post.js b/src/js/_enqueues/admin/post.js index 3f8b42e261e8b..1dde10ffc8aae 100644 --- a/src/js/_enqueues/admin/post.js +++ b/src/js/_enqueues/admin/post.js @@ -566,16 +566,35 @@ jQuery( function($) { } // @todo Move to jQuery 1.3+, support for multiple hierarchical taxonomies, see wp-lists.js. - $('a', '#' + taxonomy + '-tabs').on( 'click', function( e ) { - e.preventDefault(); + $('a', '#' + taxonomy + '-tabs').on( 'click keyup keydown', function( event ) { var t = $(this).attr('href'); - $(this).parent().addClass('tabs').siblings('li').removeClass('tabs'); - $('#' + taxonomy + '-tabs').siblings('.tabs-panel').hide(); - $(t).show(); - if ( '#' + taxonomy + '-all' == t ) { - deleteUserSetting( settingName ); - } else { - setUserSetting( settingName, 'pop' ); + if ( event.type === 'keydown' && event.key === ' ' ) { + event.preventDefault(); + } + if ( ( event.type === 'keyup' && event.key === ' ' ) || ( event.type === 'keydown' && event.key === 'Enter' ) || event.type === 'click' ) { + event.preventDefault(); + $('#' + taxonomy + '-tabs a').removeAttr( 'aria-selected' ).attr( 'tabindex', '-1' ); + $(this).attr( 'aria-selected', 'true' ).removeAttr( 'tabindex' ); + $(this).parent().addClass('tabs').siblings('li').removeClass('tabs'); + $('#' + taxonomy + '-tabs').siblings('.tabs-panel').hide(); + $(t).show(); + if ( '#' + taxonomy + '-all' == t ) { + deleteUserSetting( settingName ); + } else { + setUserSetting( settingName, 'pop' ); + } + } + if ( event.type === 'keyup' && ( event.key === 'ArrowRight' || event.key === 'ArrowLeft' ) ) { + $(this).attr( 'tabindex', '-1' ); + let next = $(this).parent('li').next(); + let prev = $(this).parent('li').prev(); + if ( next.length > 0 ) { + next.find('a').removeAttr( 'tabindex'); + next.find('a').trigger( 'focus' ); + } else { + prev.find('a').removeAttr( 'tabindex'); + prev.find('a').trigger( 'focus' ); + } } }); diff --git a/src/wp-admin/includes/meta-boxes.php b/src/wp-admin/includes/meta-boxes.php index 1de3e600b667d..a1859f45c7422 100644 --- a/src/wp-admin/includes/meta-boxes.php +++ b/src/wp-admin/includes/meta-boxes.php @@ -644,18 +644,18 @@ function post_categories_meta_box( $post, $box ) { $taxonomy = get_taxonomy( $parsed_args['taxonomy'] ); ?>