-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpopup.js
84 lines (80 loc) · 2.67 KB
/
popup.js
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
// upper-scope variables available in all functions
let dadJokeButton;
let settingsButton;
let backButton;
let aboutButton;
let selectFrequency;
let selectTimeout;
let cachedUser;
document.addEventListener(
'DOMContentLoaded',
() => {
// this is the button we click to get a new joke
chrome.runtime.sendMessage({ type: 'getUser' }, (user) => {
cachedUser = user;
dadJokeButton = document.getElementById('dadJoke');
settingsButton = document.getElementById('settings');
aboutButton = document.getElementById('about');
backButton = document.getElementById('backButton');
selectFrequency = document.getElementById('frequency');
selectTimeout = document.getElementById('timeout');
dadJokeButton.addEventListener('click', handleDadJokeClick);
settingsButton.addEventListener('click', handleOptionClick);
aboutButton.addEventListener('click', handleOptionClick);
backButton.addEventListener('click', handleOptionClick);
selectFrequency.querySelectorAll('option').forEach((item) => {
if (item.value === cachedUser.frequency) {
item.setAttribute('selected', '');
}
});
selectFrequency.addEventListener('change', (e) => {
chrome.runtime.sendMessage(
{ type: 'setFrequency', value: e.target.value },
(updatedUser) => {
cachedUser = updatedUser;
},
);
});
selectTimeout.querySelectorAll('option').forEach((item) => {
if (item.value === cachedUser.timeout) {
item.setAttribute('selected', '');
}
});
selectTimeout.addEventListener('change', (e) => {
chrome.runtime.sendMessage(
{ type: 'setTimeout', value: e.target.value },
(updatedUser) => {
cachedUser = updatedUser;
},
);
});
});
},
false,
);
function handleOptionClick({ currentTarget }) {
const currentPage = currentTarget.getAttribute('data-page');
document.querySelectorAll('.page').forEach((item) => {
const itemPage = item.getAttribute('data-page');
if (itemPage === currentPage) {
item.removeAttribute('hidden');
} else {
item.setAttribute('hidden', '');
}
});
if (currentPage === 'home') {
backButton.setAttribute('hidden', '');
} else {
backButton.removeAttribute('hidden');
}
}
async function handleDadJokeClick() {
// disable the button until we hear a response
dadJokeButton.setAttribute('disabled', '');
// get the joke data
chrome.runtime.sendMessage({ type: 'getJoke', source: 'click' }, () => {
dadJokeButton.removeAttribute('disabled');
// query tabs and grab the active one
});
window.close();
}