diff --git a/edit-page.js b/edit-page.js index bc0a8b865..a465491c3 100644 --- a/edit-page.js +++ b/edit-page.js @@ -83,4 +83,69 @@ }); }); } + + const SEARCH_TRIGGER_SELECTORS = [ + 'button[aria-label*="Search"]', + '[data-commandk-trigger]', + '[data-cmdk-trigger]', + '.DocSearch-Button', + 'button[class*="search"]', + ]; + + function isEditableElement(element) { + if (!element) { + return false; + } + + const tagName = element.tagName; + return ( + element.isContentEditable || + tagName === 'INPUT' || + tagName === 'TEXTAREA' || + element.getAttribute('role') === 'textbox' + ); + } + + function triggerSearchPalette() { + const syntheticEvent = new KeyboardEvent('keydown', { + key: 'k', + code: 'KeyK', + ctrlKey: true, + metaKey: true, + bubbles: true, + cancelable: true + }); + + window.dispatchEvent(syntheticEvent); + + for (const selector of SEARCH_TRIGGER_SELECTORS) { + const candidate = document.querySelector(selector); + if (candidate) { + candidate.click(); + return; + } + } + } + + window.addEventListener( + 'keydown', + function(event) { + if ( + event.defaultPrevented || + event.repeat || + event.key !== '/' || + event.altKey || + event.metaKey || + event.ctrlKey || + event.shiftKey || + isEditableElement(event.target) + ) { + return; + } + + event.preventDefault(); + triggerSearchPalette(); + }, + true + ); })();