Skip to content

Commit d8aaa25

Browse files
authored
feat: integrate reaction tracking (#146)
1 parent 91e00f0 commit d8aaa25

File tree

1 file changed

+83
-1
lines changed

1 file changed

+83
-1
lines changed

docs/js/search-tracking.js

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,24 @@
164164
});
165165
}
166166

167+
/**
168+
* Track page feedback (thumbs up/down) - new functionality
169+
*/
170+
function trackPageFeedback(feedbackValue, pageUrl, pageTitle) {
171+
console.log("trackPageFeedback called:", {
172+
feedbackValue,
173+
pageUrl,
174+
pageTitle,
175+
});
176+
177+
// Send feedback event to same analytics endpoint
178+
sendAnalyticsEvent("reaction", {
179+
feedback_value: feedbackValue === 1 ? "like" : "dislike", // 1 for thumbs up, 0 for thumbs down
180+
// feedback_type: "reaction",
181+
page_url: pageUrl,
182+
});
183+
}
184+
167185
/**
168186
* Get result count from search results
169187
*/
@@ -348,16 +366,65 @@
348366
console.log("MkDocs search tracking initialized");
349367
}
350368

369+
/**
370+
* Initialize feedback tracking - new functionality for page feedback
371+
*/
372+
function initializeFeedbackTracking() {
373+
console.log("Initializing MkDocs feedback tracking...");
374+
375+
// Track feedback button clicks
376+
document.addEventListener("click", function (e) {
377+
// Check if clicked element is a feedback button
378+
const feedbackButton = e.target.closest(".md-feedback__icon");
379+
380+
if (!feedbackButton) {
381+
return;
382+
}
383+
384+
console.log("Feedback button clicked:", feedbackButton);
385+
386+
// Get feedback value from data-md-value attribute
387+
const feedbackValue = feedbackButton.getAttribute("data-md-value");
388+
389+
if (feedbackValue === null) {
390+
console.warn("No feedback value found on button");
391+
return;
392+
}
393+
394+
// Get current page information
395+
const pageUrl = window.location.href;
396+
const pageTitle = document.title || "Unknown Page";
397+
398+
// Convert feedback value to number
399+
const feedbackValueNum = parseInt(feedbackValue, 10);
400+
401+
console.log("Tracking feedback:", {
402+
value: feedbackValueNum,
403+
url: pageUrl,
404+
title: pageTitle,
405+
});
406+
407+
// Track the feedback
408+
trackPageFeedback(feedbackValueNum, pageUrl, pageTitle);
409+
});
410+
411+
console.log("MkDocs feedback tracking initialized");
412+
}
413+
351414
/**
352415
* Initialize when DOM is ready
353416
*/
354417
function init() {
355418
initializeContext();
356419

357420
if (document.readyState === "loading") {
358-
document.addEventListener("DOMContentLoaded", initializeSearchTracking);
421+
document.addEventListener("DOMContentLoaded", function () {
422+
initializeSearchTracking();
423+
initializeFeedbackTracking();
424+
});
359425
} else {
360426
initializeSearchTracking();
427+
initializeFeedbackTracking();
361428
}
362429
}
363430

@@ -384,6 +451,7 @@
384451
sendEvent: sendAnalyticsEvent,
385452
trackSearch: trackSearchQuery,
386453
trackClick: trackResultClick,
454+
trackFeedback: trackPageFeedback,
387455
updateContext: function () {
388456
initializeContext();
389457
},
@@ -395,6 +463,11 @@
395463
console.log("Found search results:", searchResults);
396464
return searchResults;
397465
},
466+
testFeedbackDetection: function () {
467+
const feedbackButtons = document.querySelectorAll(".md-feedback__icon");
468+
console.log("Found feedback buttons:", feedbackButtons);
469+
return feedbackButtons;
470+
},
398471
getCurrentSearchState: function () {
399472
const searchContainer = document.querySelector(".md-search");
400473
const searchInput = document.querySelector(".md-search__input");
@@ -422,5 +495,14 @@
422495
}
423496
}
424497
},
498+
simulateFeedbackClick: function (value = 1) {
499+
const feedbackButton = document.querySelector(
500+
`.md-feedback__icon[data-md-value="${value}"]`
501+
);
502+
if (feedbackButton) {
503+
console.log("Simulating feedback click:", feedbackButton);
504+
feedbackButton.click();
505+
}
506+
},
425507
};
426508
})();

0 commit comments

Comments
 (0)