Nessuna descrizione

admin-menu.js 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /* global ajaxurl, jpAdminMenu */
  2. ( function () {
  3. function init() {
  4. var adminbar = document.querySelector( '#wpadminbar' );
  5. var wpwrap = document.querySelector( '#wpwrap' );
  6. var adminMenu = document.querySelector( '#adminmenu' );
  7. var switcher = document.querySelector( '#dashboard-switcher .dashboard-switcher-button' );
  8. if ( ! adminbar ) {
  9. return;
  10. }
  11. function setAriaExpanded( value ) {
  12. var anchors = adminbar.querySelectorAll( '#wp-admin-bar-blog a' );
  13. for ( var i = 0; i < anchors.length; i++ ) {
  14. anchors[ i ].setAttribute( 'aria-expanded', value );
  15. }
  16. }
  17. setFocusOnActiveMenuItem();
  18. setAriaExpanded( 'false' );
  19. var adminbarBlog = adminbar.querySelector( '#wp-admin-bar-blog' );
  20. // Toggle sidebar when toggle is clicked.
  21. if ( adminbarBlog ) {
  22. adminbarBlog.addEventListener( 'click', function ( event ) {
  23. event.preventDefault();
  24. // Close any open toolbar submenus.
  25. var hovers = adminbar.querySelectorAll( '.hover' );
  26. for ( var i = 0; i < hovers.length; i++ ) {
  27. hovers[ i ].classList.remove( 'hover' );
  28. }
  29. wpwrap.classList.toggle( 'wp-responsive-open' );
  30. if ( wpwrap.classList.contains( 'wp-responsive-open' ) ) {
  31. setAriaExpanded( 'true' );
  32. var first = document.querySelector( '#adminmenu a' );
  33. if ( first ) {
  34. first.focus();
  35. }
  36. } else {
  37. setAriaExpanded( 'false' );
  38. }
  39. } );
  40. }
  41. if ( adminMenu ) {
  42. var collapseButton = adminMenu.querySelector( '#collapse-button' );
  43. // Nav-Unification feature:
  44. // Saves the sidebar state in server when "Collapse menu" is clicked.
  45. // This is needed so that we update WPCOM for this preference in real-time.
  46. if ( collapseButton ) {
  47. collapseButton.addEventListener( 'click', function ( event ) {
  48. // Let's the core event listener be triggered first.
  49. setTimeout( function () {
  50. saveSidebarIsExpanded( event.target.parentNode.ariaExpanded );
  51. }, 50 );
  52. } );
  53. }
  54. }
  55. if ( switcher ) {
  56. switcher.addEventListener( 'click', setDefaultViewAsPreferred );
  57. }
  58. }
  59. function makeAjaxRequest( method, url, contentType, body ) {
  60. var xhr = new XMLHttpRequest();
  61. xhr.open( method, url, true );
  62. xhr.setRequestHeader( 'X-Requested-With', 'XMLHttpRequest' );
  63. if ( contentType ) {
  64. xhr.setRequestHeader( 'Content-Type', contentType );
  65. }
  66. xhr.withCredentials = true;
  67. xhr.send( body );
  68. }
  69. function saveSidebarIsExpanded( expanded ) {
  70. makeAjaxRequest(
  71. 'POST',
  72. ajaxurl,
  73. 'application/x-www-form-urlencoded; charset=UTF-8',
  74. 'action=sidebar_state&expanded=' + expanded
  75. );
  76. }
  77. function setDefaultViewAsPreferred() {
  78. makeAjaxRequest(
  79. 'GET',
  80. ajaxurl +
  81. '?action=set_preferred_view&screen=' +
  82. jpAdminMenu.screen +
  83. '&preferred-view=default'
  84. );
  85. }
  86. function setFocusOnActiveMenuItem() {
  87. var currentMenuItem = document.querySelector( '.wp-submenu .current > a' );
  88. if ( ! currentMenuItem ) {
  89. return;
  90. }
  91. currentMenuItem.focus();
  92. }
  93. if ( document.readyState === 'loading' ) {
  94. document.addEventListener( 'DOMContentLoaded', init );
  95. } else {
  96. init();
  97. }
  98. } )();