chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
// Handlers for CSAT events
|
||||
|
||||
/**
|
||||
* Upvote or downvote the documentation via Google Analytics.
|
||||
*
|
||||
* @param {string} vote 'Yes' or 'No' vote to send as feedback
|
||||
*/
|
||||
function sendVote(vote) {
|
||||
if (typeof window.dataLayer === 'undefined' || !Array.isArray(window.dataLayer)) {
|
||||
console.warn('Google Tag Manager dataLayer not available - CSAT vote not tracked');
|
||||
return;
|
||||
}
|
||||
|
||||
window.dataLayer.push({
|
||||
event: 'csat_vote',
|
||||
vote_type: vote,
|
||||
category: 'CSAT',
|
||||
page_location: window.location.href,
|
||||
page_title: document.title,
|
||||
value: vote === 'Yes' ? 1 : 0
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Documentation feedback via Google Analytics
|
||||
* @param {string} text Text to send as feedback
|
||||
*/
|
||||
function sendFeedback(text) {
|
||||
if (typeof window.dataLayer === 'undefined' || !Array.isArray(window.dataLayer)) {
|
||||
console.warn('Google Tag Manager dataLayer not available - CSAT feedback not tracked');
|
||||
return;
|
||||
}
|
||||
|
||||
window.dataLayer.push({
|
||||
event: 'csat_feedback',
|
||||
feedback_text: text.substring(0, 500),
|
||||
category: 'CSAT',
|
||||
page_location: window.location.href,
|
||||
page_title: document.title,
|
||||
feedback_length: text.length
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
const yesButton = document.getElementById("csat-yes");
|
||||
const noButton = document.getElementById("csat-no");
|
||||
const yesIcon = document.getElementById("csat-yes-icon");
|
||||
const noIcon = document.getElementById("csat-no-icon");
|
||||
const text = document.getElementById("csat-textarea");
|
||||
const submitButton = document.getElementById("csat-submit");
|
||||
const csatGroup = document.getElementById("csat-textarea-group");
|
||||
const csatFeedbackReceived = document.getElementById("csat-feedback-received");
|
||||
const csatInputs = document.getElementById("csat-inputs")
|
||||
|
||||
yesButton.addEventListener("click", () => {
|
||||
text.placeholder = "We're glad you found it helpful. If you have any additional feedback, please let us know.";
|
||||
csatGroup.classList.remove("csat-hidden");
|
||||
yesIcon.classList.remove("csat-hidden");
|
||||
noIcon.classList.add("csat-hidden");
|
||||
yesButton.classList.add("csat-button-active");
|
||||
noButton.classList.remove("csat-button-active");
|
||||
submitButton.scrollIntoView();
|
||||
sendVote('Yes');
|
||||
})
|
||||
|
||||
noButton.addEventListener("click", () => {
|
||||
text.placeholder = "We value your feedback. Please let us know how we can improve our documentation.";
|
||||
csatGroup.classList.remove("csat-hidden");
|
||||
yesIcon.classList.add("csat-hidden");
|
||||
noIcon.classList.remove("csat-hidden");
|
||||
yesButton.classList.remove("csat-button-active");
|
||||
noButton.classList.add("csat-button-active");
|
||||
submitButton.scrollIntoView();
|
||||
sendVote('No');
|
||||
})
|
||||
|
||||
submitButton.addEventListener("click", () => {
|
||||
csatGroup.classList.add("csat-hidden");
|
||||
csatInputs.classList.add("csat-hidden");
|
||||
csatFeedbackReceived.classList.remove("csat-hidden");
|
||||
sendFeedback(text.value);
|
||||
}, {once: true})
|
||||
})
|
||||
Reference in New Issue
Block a user