|
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