|
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