-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate.js
41 lines (35 loc) · 1.1 KB
/
template.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
const language = document.querySelector('[data-js="language"]');
const resultsList = document.querySelector('[data-js="results-list"]');
const templateWorker = new Worker('template-worker.js');
const config = new Proxy(
{
languageTag: localStorage.getItem('language') || 'en-US',
list: JSON.parse(sessionStorage.getItem('listItems')) || []
},
{
set: function(target, prop, value) {
if (prop === 'languageTag' || prop === 'list') {
Reflect.set(...arguments);
render();
return true;
}
return false;
}
});
language.value = config.languageTag;
language.addEventListener('change', handleLanguageSelection);
function handleLanguageSelection() {
config.languageTag = this.value;
localStorage.setItem('language', this.value);
}
function setList(newList) {
sessionStorage.setItem('listItems', JSON.stringify(newList));
config.list = newList;
}
function render() {
templateWorker.postMessage(Object.assign({}, config));
templateWorker
.addEventListener('message', ({ data }) => resultsList.innerHTML = data);
}
(() => render())();
export { setList };