|
76 | 76 | async function sendAnalyticsEvent(eventType, payload) { |
77 | 77 | // Check if analytics is disabled for internal users |
78 | 78 | if (isAnalyticsDisabled()) { |
79 | | - console.log( |
80 | | - "Analytics disabled for internal user, skipping:", |
81 | | - eventType, |
82 | | - payload |
83 | | - ); |
84 | 79 | return; |
85 | 80 | } |
86 | 81 |
|
87 | | - if (!ANALYTICS_CONFIG.ENABLED || !ANALYTICS_CONFIG.API_ENDPOINT) { |
88 | | - console.log("Search Analytics (Demo Mode):", eventType, payload); |
| 82 | + if (!ANALYTICS_CONFIG.ENABLED || !ANALYTICS_CONFIG.API_ENDPOINT) { |
89 | 83 | return; |
90 | 84 | } |
91 | 85 |
|
|
107 | 101 | // pageType, // docs / blog / marketing (uncomment if needed) |
108 | 102 | ...payload, |
109 | 103 | }), |
110 | | - }); |
111 | | - |
112 | | - console.log("Search analytics event sent:", eventType, payload); |
| 104 | + }); |
113 | 105 | } catch (error) { |
114 | 106 | console.warn("Analytics API error:", error); |
115 | 107 | } |
|
126 | 118 | totalResults = resultCount; |
127 | 119 |
|
128 | 120 | // Send search event exactly like Vue.js reference |
129 | | - sendAnalyticsEvent("search", { |
| 121 | + sendAnalyticsEvent("doc-search", { |
130 | 122 | search_query: _q, |
131 | 123 | result_count: resultCount, |
132 | | - }); |
133 | | - |
134 | | - // Also send analytics for zero results (like Vue.js reference) |
135 | | - if (resultCount === 0) { |
136 | | - sendAnalyticsEvent("search", { |
137 | | - search_query: _q, |
138 | | - result_count: resultCount, |
139 | | - }); |
140 | | - } |
| 124 | + }); |
141 | 125 | } |
142 | 126 |
|
143 | 127 | /** |
|
146 | 130 | function trackResultClick(resultUrl, resultTitle, resultRank) { |
147 | 131 | const _q = lastSearchQuery.trim(); |
148 | 132 |
|
149 | | - console.log("trackResultClick called:", { |
150 | | - resultUrl, |
151 | | - resultTitle, |
152 | | - resultRank, |
153 | | - lastSearchQuery: _q, |
154 | | - totalResults, |
155 | | - }); |
156 | | - |
157 | 133 | // Send result_click event exactly like Vue.js reference |
158 | | - sendAnalyticsEvent("result_click", { |
| 134 | + sendAnalyticsEvent("doc-search-click", { |
159 | 135 | result_url: resultUrl, |
160 | 136 | result_rank: resultRank, |
161 | 137 | result_title: resultTitle, |
|
168 | 144 | * Track page feedback (thumbs up/down) - new functionality |
169 | 145 | */ |
170 | 146 | function trackPageFeedback(feedbackValue, pageUrl, pageTitle) { |
171 | | - console.log("trackPageFeedback called:", { |
172 | | - feedbackValue, |
173 | | - pageUrl, |
174 | | - pageTitle, |
175 | | - }); |
176 | 147 |
|
177 | 148 | // Send feedback event to same analytics endpoint |
178 | 149 | sendAnalyticsEvent("reaction", { |
|
233 | 204 | ); |
234 | 205 | const resultRank = Array.from(allResults).indexOf(resultItem) + 1; |
235 | 206 |
|
236 | | - console.log("Extracted result info:", { |
237 | | - url: resultUrl, |
238 | | - title: resultTitle, |
239 | | - rank: resultRank, |
240 | | - resultItem: resultItem, |
241 | | - linkElement: linkElement, |
242 | | - titleElement: titleElement, |
243 | | - }); |
244 | | - |
245 | 207 | return { |
246 | 208 | url: resultUrl, |
247 | 209 | title: resultTitle, |
|
256 | 218 | let searchTimeout; |
257 | 219 | let lastTrackedQuery = ""; |
258 | 220 |
|
259 | | - console.log("Initializing MkDocs search tracking..."); |
260 | | - |
261 | 221 | // Update context when search becomes active (like Vue.js modal opening) |
262 | 222 | const updateContextOnSearchActivation = () => { |
263 | 223 | try { |
|
295 | 255 | const resultCount = getSearchResultCount(); |
296 | 256 | trackSearchQuery(query, resultCount); |
297 | 257 | lastTrackedQuery = query; |
298 | | - }, 500); // Matching Vue.js 500ms debounce |
| 258 | + }, 600); // Matching Vue.js 600ms debounce |
299 | 259 | } |
300 | 260 |
|
301 | 261 | // Clear tracking when input is cleared |
|
308 | 268 |
|
309 | 269 | // Track search result clicks with enhanced logic |
310 | 270 | document.addEventListener("click", function (e) { |
311 | | - console.log("Click detected on:", e.target); |
312 | | - |
313 | 271 | // Multiple ways to detect search result clicks |
314 | 272 | const isSearchResult = |
315 | 273 | e.target.closest(".md-search-result__item") || |
|
323 | 281 | e.target.closest(".md-search-result") || |
324 | 282 | (e.target.href && document.querySelector(".md-search--active"))); |
325 | 283 |
|
326 | | - if (!isSearchResult && !isSearchLink) { |
327 | | - console.log("Not a search result click, ignoring"); |
| 284 | + if (!isSearchResult && !isSearchLink) { |
328 | 285 | return; |
329 | 286 | } |
330 | 287 |
|
331 | | - console.log("Search result clicked!", { |
332 | | - isSearchResult: !!isSearchResult, |
333 | | - isSearchLink: !!isSearchLink, |
334 | | - targetElement: e.target, |
335 | | - closestResult: e.target.closest(".md-search-result__item"), |
336 | | - }); |
337 | | - |
338 | 288 | // Check if search is active (more lenient check) |
339 | 289 | const searchContainer = document.querySelector(".md-search"); |
340 | 290 | const searchInput = document.querySelector(".md-search__input"); |
|
344 | 294 | !searchContainer || |
345 | 295 | (!searchContainer.classList.contains("md-search--active") && |
346 | 296 | !hasSearchValue) |
347 | | - ) { |
348 | | - console.log("Search not active and no search value, ignoring click"); |
| 297 | + ) { |
349 | 298 | return; |
350 | 299 | } |
351 | 300 |
|
352 | 301 | // Update context right before tracking click (ensure fresh data) |
353 | 302 | updateContextOnSearchActivation(); |
354 | 303 |
|
355 | | - const resultInfo = extractResultInfo(e.target); |
356 | | - console.log("Result info extracted:", resultInfo); |
| 304 | + const resultInfo = extractResultInfo(e.target); |
357 | 305 |
|
358 | | - if (resultInfo && resultInfo.url) { |
359 | | - console.log("Calling trackResultClick with:", resultInfo); |
| 306 | + if (resultInfo && resultInfo.url) { |
360 | 307 | trackResultClick(resultInfo.url, resultInfo.title, resultInfo.rank); |
361 | 308 | } else { |
362 | 309 | console.warn("Could not extract result info from clicked element"); |
363 | 310 | } |
364 | | - }); |
365 | | - |
366 | | - console.log("MkDocs search tracking initialized"); |
| 311 | + }); |
367 | 312 | } |
368 | 313 |
|
369 | 314 | /** |
370 | 315 | * Initialize feedback tracking - new functionality for page feedback |
371 | 316 | */ |
372 | | - function initializeFeedbackTracking() { |
373 | | - console.log("Initializing MkDocs feedback tracking..."); |
| 317 | + function initializeFeedbackTracking() { |
374 | 318 |
|
375 | 319 | // Track feedback button clicks |
376 | 320 | document.addEventListener("click", function (e) { |
|
379 | 323 |
|
380 | 324 | if (!feedbackButton) { |
381 | 325 | return; |
382 | | - } |
383 | | - |
384 | | - console.log("Feedback button clicked:", feedbackButton); |
| 326 | + } |
385 | 327 |
|
386 | 328 | // Get feedback value from data-md-value attribute |
387 | 329 | const feedbackValue = feedbackButton.getAttribute("data-md-value"); |
|
398 | 340 | // Convert feedback value to number |
399 | 341 | const feedbackValueNum = parseInt(feedbackValue, 10); |
400 | 342 |
|
401 | | - console.log("Tracking feedback:", { |
402 | | - value: feedbackValueNum, |
403 | | - url: pageUrl, |
404 | | - title: pageTitle, |
405 | | - }); |
406 | 343 |
|
407 | 344 | // Track the feedback |
408 | 345 | trackPageFeedback(feedbackValueNum, pageUrl, pageTitle); |
409 | 346 | }); |
410 | | - |
411 | | - console.log("MkDocs feedback tracking initialized"); |
| 347 | + |
412 | 348 | } |
413 | 349 |
|
414 | 350 | /** |
|
459 | 395 | testClickDetection: function () { |
460 | 396 | const searchResults = document.querySelectorAll( |
461 | 397 | ".md-search-result__item, .md-search-result, [data-md-component='search-result']" |
462 | | - ); |
463 | | - console.log("Found search results:", searchResults); |
| 398 | + ); |
464 | 399 | return searchResults; |
465 | 400 | }, |
466 | 401 | testFeedbackDetection: function () { |
467 | | - const feedbackButtons = document.querySelectorAll(".md-feedback__icon"); |
468 | | - console.log("Found feedback buttons:", feedbackButtons); |
| 402 | + const feedbackButtons = document.querySelectorAll(".md-feedback__icon"); |
469 | 403 | return feedbackButtons; |
470 | 404 | }, |
471 | 405 | getCurrentSearchState: function () { |
|
489 | 423 | ); |
490 | 424 | if (results[index]) { |
491 | 425 | const link = results[index].querySelector("a"); |
492 | | - if (link) { |
493 | | - console.log("Simulating click on:", link); |
| 426 | + if (link) { |
494 | 427 | link.click(); |
495 | 428 | } |
496 | 429 | } |
|
499 | 432 | const feedbackButton = document.querySelector( |
500 | 433 | `.md-feedback__icon[data-md-value="${value}"]` |
501 | 434 | ); |
502 | | - if (feedbackButton) { |
503 | | - console.log("Simulating feedback click:", feedbackButton); |
| 435 | + if (feedbackButton) { |
504 | 436 | feedbackButton.click(); |
505 | 437 | } |
506 | 438 | }, |
|
0 commit comments