Skip to content

Commit

Permalink
instrument docs searches (#535)
Browse files Browse the repository at this point in the history
Co-authored-by: ChristopherGS <[email protected]>
Co-authored-by: Alex Hall <[email protected]>
  • Loading branch information
3 people authored Nov 5, 2024
1 parent 607f29b commit b71386e
Showing 1 changed file with 94 additions and 0 deletions.
94 changes: 94 additions & 0 deletions docs/overrides/main.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,99 @@
{% block content %}
{{ super() }}
<script src="/flarelytics/client.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {

if (!window.__posthogInitialized) {

// Initialize PostHog
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);

try {
posthog.init('phc_WEVBsfcilPS9u6e0CY22d8DqtFt0zalAP9A6iyCBHNH', {
api_host: 'https://eu.i.posthog.com',
persistence: 'memory'
});
window.__posthogInitialized = true;
} catch (error) {
console.error('PostHog initialization failed:', error);
return;
}}

// Setup
const elements = {
form: document.querySelector('.md-search__form'),
input: document.querySelector('[data-md-component="search-query"]'),
results: document.querySelector('.md-search__output')
};

if (!elements.form || !elements.input || !elements.results || !window.__posthogInitialized) return;

const SEARCH_DEBOUNCE_DELAY = 1000; // Wait 1s after typing before tracking
const RESULTS_WAIT_DELAY = 200; // Wait 200ms for search results to populate
const MIN_TIME_BETWEEN_SEARCHES = 1000; // Don't track searches more than once per second
const MIN_SEARCH_LENGTH = 3; // Minimum characters before tracking search

let searchTimeout;
let lastSearch = { term: '', time: 0 };

// Track search with debouncing
function trackSearch(term, type) {
if (term.length < MIN_SEARCH_LENGTH ||
term === lastSearch.term ||
Date.now() - lastSearch.time < MIN_TIME_BETWEEN_SEARCHES) return;

// Wait for search results to populate
setTimeout(() => {
const resultCount = elements.results.querySelectorAll('.md-search-result__item').length;
posthog.capture('documentation_search', {
search_term: term,
search_type: type,
result_count: resultCount,
has_results: resultCount > 0,
timestamp: Date.now()
});

lastSearch = { term, time: Date.now() };
}, RESULTS_WAIT_DELAY);
}

// Event listeners
elements.input.addEventListener('input', () => {
clearTimeout(searchTimeout);
searchTimeout = setTimeout(() => {
trackSearch(elements.input.value.trim(), 'typed');
}, SEARCH_DEBOUNCE_DELAY);
});

elements.form.addEventListener('submit', (e) => {
// Prevent form submission, use mkdocs client-side search
e.preventDefault();
clearTimeout(searchTimeout);
trackSearch(elements.input.value.trim(), 'submitted');
});

elements.results.addEventListener('click', (e) => {
const link = e.target.closest('a');
if (!link) return;

const resultItem = link.closest('.md-search-result__item');
if (!resultItem) return;

const url = new URL(link.href);
url.searchParams.delete('h');

posthog.capture('search_result_click', {
search_term: elements.input.value.trim(),
clicked_url: url.toString().replace(url.hash, ''),
clicked_text: link.innerText.trim(),
url_fragment: url.hash || null,
page_title: resultItem.querySelector('h1')?.textContent.trim() || null,
result_count: elements.results.querySelectorAll('.md-search-result__item').length,
timestamp: Date.now()
});
});
});
</script>
{% include 'mkdocs_run_deps.html' ignore missing %}
{% endblock %}

0 comments on commit b71386e

Please sign in to comment.