|
102 | 102 | ...payload, |
103 | 103 | }), |
104 | 104 | }); |
| 105 | + }); |
| 106 | + |
105 | 107 | } catch (error) { |
106 | 108 | console.warn("Analytics API error:", error); |
107 | 109 | } |
|
130 | 132 | function trackResultClick(resultUrl, resultTitle, resultRank) { |
131 | 133 | const _q = lastSearchQuery.trim(); |
132 | 134 |
|
| 135 | + |
133 | 136 | // Send result_click event exactly like Vue.js reference |
134 | 137 | sendAnalyticsEvent("doc-search-click", { |
135 | 138 | result_url: resultUrl, |
|
218 | 221 | let searchTimeout; |
219 | 222 | let lastTrackedQuery = ""; |
220 | 223 |
|
| 224 | + |
221 | 225 | // Update context when search becomes active (like Vue.js modal opening) |
222 | 226 | const updateContextOnSearchActivation = () => { |
223 | 227 | try { |
|
268 | 272 |
|
269 | 273 | // Track search result clicks with enhanced logic |
270 | 274 | document.addEventListener("click", function (e) { |
| 275 | + |
271 | 276 | // Multiple ways to detect search result clicks |
272 | 277 | const isSearchResult = |
273 | 278 | e.target.closest(".md-search-result__item") || |
|
285 | 290 | return; |
286 | 291 | } |
287 | 292 |
|
| 293 | + |
288 | 294 | // Check if search is active (more lenient check) |
289 | 295 | const searchContainer = document.querySelector(".md-search"); |
290 | 296 | const searchInput = document.querySelector(".md-search__input"); |
|
301 | 307 | // Update context right before tracking click (ensure fresh data) |
302 | 308 | updateContextOnSearchActivation(); |
303 | 309 |
|
304 | | - const resultInfo = extractResultInfo(e.target); |
| 310 | + const resultInfo = extractResultInfo(e.target); |
305 | 311 |
|
306 | | - if (resultInfo && resultInfo.url) { |
| 312 | + if (resultInfo && resultInfo.url) { |
307 | 313 | trackResultClick(resultInfo.url, resultInfo.title, resultInfo.rank); |
308 | 314 | } else { |
309 | 315 | console.warn("Could not extract result info from clicked element"); |
310 | 316 | } |
311 | | - }); |
| 317 | + }); |
| 318 | + |
312 | 319 | } |
313 | 320 |
|
314 | 321 | /** |
315 | 322 | * Initialize feedback tracking - new functionality for page feedback |
316 | 323 | */ |
317 | | - function initializeFeedbackTracking() { |
| 324 | + function initializeFeedbackTracking() { |
318 | 325 |
|
319 | 326 | // Track feedback button clicks |
320 | 327 | document.addEventListener("click", function (e) { |
|
323 | 330 |
|
324 | 331 | if (!feedbackButton) { |
325 | 332 | return; |
326 | | - } |
| 333 | + } |
| 334 | + |
327 | 335 |
|
328 | 336 | // Get feedback value from data-md-value attribute |
329 | 337 | const feedbackValue = feedbackButton.getAttribute("data-md-value"); |
|
344 | 352 | // Track the feedback |
345 | 353 | trackPageFeedback(feedbackValueNum, pageUrl, pageTitle); |
346 | 354 | }); |
347 | | - |
| 355 | + |
348 | 356 | } |
349 | 357 |
|
350 | 358 | /** |
|
395 | 403 | testClickDetection: function () { |
396 | 404 | const searchResults = document.querySelectorAll( |
397 | 405 | ".md-search-result__item, .md-search-result, [data-md-component='search-result']" |
398 | | - ); |
| 406 | + ); |
399 | 407 | return searchResults; |
400 | 408 | }, |
401 | 409 | testFeedbackDetection: function () { |
|
0 commit comments