Skip to content

Commit ed7b574

Browse files
authored
Revert Algolia lazy loading to fix search not appearing (#364)
The lazy loading approach caused the search UI to not appear because the #autocomplete div was empty and invisible until user interaction triggered script loading. This broke discoverability since users couldn't see there was a search to click on. Reverts to the original defer-based loading which ensures Algolia initializes on DOMContentLoaded and the search UI is immediately visible.
1 parent 7f5da5f commit ed7b574

File tree

2 files changed

+9
-103
lines changed

2 files changed

+9
-103
lines changed

src/partials/algolia-script.hbs

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -884,37 +884,7 @@ function initAlgolia() {
884884
* This is intentionally namespaced and “private”. See notes below.
885885
*/
886886
window.__algoliaAutocompleteInstance = autocompleteInstance;
887-
888-
// If user clicked search before scripts loaded, focus the input now
889-
var pendingFocus = window.__algoliaGetPendingFocus && window.__algoliaGetPendingFocus();
890-
if (pendingFocus) {
891-
var input = document.querySelector('.aa-Input');
892-
if (input) {
893-
setTimeout(function() { input.focus(); }, 100);
894-
}
895-
}
896-
}
897-
898-
// Initialize when scripts are available
899-
function tryInitAlgolia() {
900-
// Check if all required libraries are loaded
901-
if (window['@algolia/autocomplete-js'] &&
902-
window['@algolia/autocomplete-plugin-tags'] &&
903-
window['@algolia/autocomplete-plugin-recent-searches'] &&
904-
window.algoliasearch) {
905-
initAlgolia();
906-
return true;
907-
}
908-
return false;
909887
}
910888
911-
// Try immediately if scripts already loaded (e.g., not lazy loaded)
912-
if (document.readyState === 'loading') {
913-
window.addEventListener('DOMContentLoaded', tryInitAlgolia);
914-
} else {
915-
// DOM already loaded, try init now or wait for lazy-loaded scripts
916-
if (!tryInitAlgolia()) {
917-
window.addEventListener('algolia-scripts-loaded', tryInitAlgolia);
918-
}
919-
}
889+
window.addEventListener('DOMContentLoaded', initAlgolia);
920890
</script>

src/partials/head-scripts.hbs

Lines changed: 8 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -131,78 +131,14 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
131131
<script defer src="https://plausible.io/js/plausible.js" data-domain="redpanda.com"></script>
132132

133133
{{#if env.ALGOLIA_API_KEY}}
134-
<!-- Algolia Search - Lazy loaded on search interaction for performance -->
135-
<link rel="prefetch" href="{{{uiRootPath}}}/js/vendor/algolia/autocomplete-js.js" as="script">
136-
<link rel="prefetch" href="{{{uiRootPath}}}/js/vendor/algolia/algoliasearch-lite.umd.js" as="script">
137-
<script>
138-
(function() {
139-
var algoliaLoaded = false;
140-
var uiRoot = '{{{uiRootPath}}}';
141-
var pendingFocus = null;
142-
143-
function loadScript(src) {
144-
return new Promise(function(resolve, reject) {
145-
var script = document.createElement('script');
146-
script.src = src;
147-
script.onload = resolve;
148-
script.onerror = reject;
149-
document.head.appendChild(script);
150-
});
151-
}
152-
153-
function loadAlgoliaScripts(targetElement) {
154-
if (algoliaLoaded) return;
155-
algoliaLoaded = true;
156-
if (targetElement) pendingFocus = targetElement;
157-
158-
var styles = [
159-
uiRoot + '/css/vendor/algolia/autocomplete-theme-classic.css',
160-
uiRoot + '/css/vendor/algolia/autocomplete-tags-plugin.css'
161-
];
162-
styles.forEach(function(href) {
163-
var link = document.createElement('link');
164-
link.rel = 'stylesheet';
165-
link.href = href;
166-
document.head.appendChild(link);
167-
});
168-
169-
// Load scripts sequentially to ensure dependencies are met
170-
loadScript(uiRoot + '/js/vendor/algolia/algoliasearch-lite.umd.js')
171-
.then(function() { return loadScript(uiRoot + '/js/vendor/algolia/autocomplete-js.js'); })
172-
.then(function() { return loadScript(uiRoot + '/js/vendor/algolia/autocomplete-plugin-tags.js'); })
173-
.then(function() { return loadScript(uiRoot + '/js/vendor/algolia/autocomplete-plugin-recent-searches.js'); })
174-
.then(function() { return loadScript(uiRoot + '/js/vendor/algolia/autocomplete-plugin-query-suggestions.js'); })
175-
.then(function() { return loadScript(uiRoot + '/js/vendor/algolia/autocomplete-plugin-algolia-insights.js'); })
176-
.then(function() {
177-
// Dispatch event to trigger Algolia initialization
178-
window.dispatchEvent(new CustomEvent('algolia-scripts-loaded'));
179-
});
180-
}
181-
182-
// Load on search focus or input click
183-
document.addEventListener('click', function(e) {
184-
var target = e.target.closest('.search, .aa-Input, [data-search], input[type="search"], #autocomplete');
185-
if (target) {
186-
loadAlgoliaScripts(target);
187-
}
188-
});
189-
document.addEventListener('focusin', function(e) {
190-
var target = e.target.closest('.search, .aa-Input, [data-search], input[type="search"], #autocomplete');
191-
if (target) {
192-
loadAlgoliaScripts(target);
193-
}
194-
});
195-
// Fallback: Load after idle
196-
if ('requestIdleCallback' in window) {
197-
requestIdleCallback(function() { setTimeout(function() { loadAlgoliaScripts(null); }, 3000); });
198-
} else {
199-
setTimeout(function() { loadAlgoliaScripts(null); }, 3000);
200-
}
201-
202-
// Expose for algolia-script.hbs to check pending focus
203-
window.__algoliaGetPendingFocus = function() { var f = pendingFocus; pendingFocus = null; return f; };
204-
})();
205-
</script>
134+
<script defer src="{{{uiRootPath}}}/js/vendor/algolia/autocomplete-js.js"></script>
135+
<script defer src="{{{uiRootPath}}}/js/vendor/algolia/algoliasearch-lite.umd.js"></script>
136+
<link rel="stylesheet" href="{{{uiRootPath}}}/css/vendor/algolia/autocomplete-theme-classic.css"/>
137+
<script defer src="{{{uiRootPath}}}/js/vendor/algolia/autocomplete-plugin-tags.js"></script>
138+
<link rel="stylesheet" href="{{{uiRootPath}}}/css/vendor/algolia/autocomplete-tags-plugin.css">
139+
<script defer src="{{{uiRootPath}}}/js/vendor/algolia/autocomplete-plugin-recent-searches.js"></script>
140+
<script defer src="{{{uiRootPath}}}/js/vendor/algolia/autocomplete-plugin-query-suggestions.js"></script>
141+
<script defer src="{{{uiRootPath}}}/js/vendor/algolia/autocomplete-plugin-algolia-insights.js"></script>
206142
{{/if}}
207143
<script>
208144
var uiRootPath="{{{uiRootPath}}}"

0 commit comments

Comments
 (0)