1(function () { 2 var sidebar = document.getElementById('admin-modern-sidebar'); 3 var overlay = document.getElementById('admin-modern-overlay'); 4 var openButton = document.getElementById('admin-modern-menu-button'); 5 var closeButton = document.getElementById('admin-modern-sidebar-close'); 6 var desktopMedia = window.matchMedia('(min-width: 901px)'); 7 var lastFocusedElement = null; 8 var drawingEditorMode = document.body.classList.contains('admin-drawing-focus'); 9 var page = document.querySelector('.admin-modern-page'); 10 11 if (!sidebar || !overlay || !openButton || !closeButton) { 12 return; 13 } 14 if (drawingEditorMode) sidebar.inert = true; 15 16 function getFocusableElements() { 17 return Array.prototype.slice.call(sidebar.querySelectorAll( 18 'a[href], button:not([disabled]), select:not([disabled]), input:not([disabled])' 19 )).filter(function (element) { 20 return element.offsetParent !== null; 21 }); 22 } 23 24 function openSidebar() { 25 lastFocusedElement = document.activeElement; 26 if (drawingEditorMode) { sidebar.inert = false; page.inert = true; } 27 sidebar.classList.add('is-open'); 28 overlay.hidden = false; 29 document.body.classList.add('admin-modern-menu-open'); 30 openButton.setAttribute('aria-expanded', 'true'); 31 32 var focusable = getFocusableElements(); 33 if (focusable.length) { 34 focusable[0].focus(); 35 } 36 } 37 38 function closeSidebar(restoreFocus) { 39 sidebar.classList.remove('is-open'); 40 if (drawingEditorMode) { sidebar.inert = true; page.inert = false; } 41 overlay.hidden = true; 42 document.body.classList.remove('admin-modern-menu-open'); 43 openButton.setAttribute('aria-expanded', 'false'); 44 45 if (restoreFocus && lastFocusedElement && typeof lastFocusedElement.focus === 'function') { 46 lastFocusedElement.focus(); 47 } 48 } 49 50 function handleSidebarKeydown(event) { 51 if (event.key === 'Escape') { 52 if (drawingEditorMode) event.preventDefault(); 53 closeSidebar(true); 54 return; 55 } 56 57 if (event.key !== 'Tab' || (desktopMedia.matches && !drawingEditorMode) || !sidebar.classList.contains('is-open')) { 58 return; 59 } 60 61 var focusable = getFocusableElements(); 62 if (!focusable.length) { 63 return; 64 } 65 66 var first = focusable[0]; 67 var last = focusable[focusable.length - 1]; 68 if (event.shiftKey && document.activeElement === first) { 69 event.preventDefault(); 70 last.focus(); 71 } else if (!event.shiftKey && document.activeElement === last) { 72 event.preventDefault(); 73 first.focus(); 74 } 75 } 76 77 openButton.addEventListener('click', openSidebar); 78 closeButton.addEventListener('click', function () { closeSidebar(true); }); 79 overlay.addEventListener('click', function () { closeSidebar(true); }); 80 sidebar.addEventListener('keydown', handleSidebarKeydown); 81 82 sidebar.querySelectorAll('.admin-modern-nav__link').forEach(function (link) { 83 link.addEventListener('click', function () { 84 if (!desktopMedia.matches || drawingEditorMode) { 85 closeSidebar(false); 86 } 87 }); 88 }); 89 90 desktopMedia.addEventListener('change', function (event) { 91 if (event.matches && !drawingEditorMode) { 92 closeSidebar(false); 93 } 94 }); 95 96 document.addEventListener('keydown', function (event) { 97 if (event.key === 'Escape' && sidebar.classList.contains('is-open')) { 98 if (drawingEditorMode) event.preventDefault(); 99 closeSidebar(true); 100 } 101 102 if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') { 103 var search = document.querySelector('.admin-modern-search input'); 104 if (search) { 105 event.preventDefault(); 106 search.focus(); 107 } 108 } 109 }); 110})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.