-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathuser-study-popup.js
More file actions
139 lines (111 loc) · 3.99 KB
/
user-study-popup.js
File metadata and controls
139 lines (111 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
(() => {
const USER_STUDY_KEY = 'deepl_user_study_popup_state';
const USER_STUDY_DISMISSED = 'dismissed';
const USER_STUDY_CLICKED = 'clicked';
const CONSENT_KEY = 'deepl_cookie_consent';
const CONSENT_ACCEPTED = 'accepted';
const CONSENT_REJECTED = 'rejected';
const SIGNUP_URL = 'https://deepl.ethn.io/177614';
const SHOW_PROBABILITY = 0.1;
const INITIAL_DELAY_MS = 2000;
const RETRY_DELAY_MS = 1000;
function buildSignupUrl(accountId) {
const signupUrl = new URL(SIGNUP_URL);
if (accountId) {
signupUrl.searchParams.set('acc_id', accountId);
}
return signupUrl.toString();
}
async function getSignupUrl() {
try {
const accountId = await window.DeepLUser?.getAccountId?.();
return buildSignupUrl(accountId);
} catch (error) {
console.error('Error building customer research signup URL:', error);
return buildSignupUrl();
}
}
function hasResolvedCookieBanner() {
const consent = localStorage.getItem(CONSENT_KEY);
return consent === CONSENT_ACCEPTED || consent === CONSENT_REJECTED;
}
function shouldSkipPopup() {
const studyStatus = localStorage.getItem(USER_STUDY_KEY);
return studyStatus === USER_STUDY_DISMISSED || studyStatus === USER_STUDY_CLICKED;
}
function markPopupState(state) {
localStorage.setItem(USER_STUDY_KEY, state);
}
function removePopup(popup) {
const card = popup.querySelector('#user-study-card');
if (card) {
card.classList.remove('slide-in');
card.classList.add('slide-out');
}
window.setTimeout(() => {
popup.remove();
}, 300);
}
function renderPopup() {
if (document.getElementById('user-study-popup')) return;
const signupUrlPromise = getSignupUrl();
const popup = document.createElement('div');
popup.id = 'user-study-popup';
popup.innerHTML = `
<aside id="user-study-card" aria-label="User study invitation">
<button id="user-study-close" type="button" aria-label="Dismiss user study invitation">×</button>
<div id="user-study-content">
<p id="user-study-eyebrow">Get paid to shape DeepL</p>
<h3>Join our customer research panel</h3>
<p>
Share your info to be considered for paid customer interviews and research studies about the DeepL API.
</p>
<a id="user-study-cta" href="${SIGNUP_URL}" target="_blank" rel="noreferrer">Sign up</a>
</div>
</aside>
`;
document.body.appendChild(popup);
signupUrlPromise.then((signupUrl) => {
popup.querySelector('#user-study-cta')?.setAttribute('href', signupUrl);
});
window.setTimeout(() => {
popup.querySelector('#user-study-card')?.classList.add('slide-in');
}, 50);
popup.querySelector('#user-study-close')?.addEventListener('click', () => {
markPopupState(USER_STUDY_DISMISSED);
removePopup(popup);
});
popup.querySelector('#user-study-cta')?.addEventListener('click', async (event) => {
event.preventDefault();
markPopupState(USER_STUDY_CLICKED);
removePopup(popup);
const signupUrl = await signupUrlPromise;
window.open(signupUrl, '_blank', 'noopener,noreferrer');
});
}
function maybeShowUserStudyPopup() {
if (shouldSkipPopup()) return;
if (!hasResolvedCookieBanner()) {
window.setTimeout(maybeShowUserStudyPopup, RETRY_DELAY_MS);
return;
}
if (Math.random() >= SHOW_PROBABILITY) return;
renderPopup();
}
function initUserStudyPopup() {
window.setTimeout(maybeShowUserStudyPopup, INITIAL_DELAY_MS);
}
window.getUserStudySignupUrlNow = getSignupUrl;
window.showUserStudyPopupNow = function showUserStudyPopupNow() {
localStorage.removeItem(USER_STUDY_KEY);
if (!hasResolvedCookieBanner()) {
localStorage.setItem(CONSENT_KEY, CONSENT_ACCEPTED);
}
renderPopup();
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initUserStudyPopup);
} else {
initUserStudyPopup();
}
})();