-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
63 lines (53 loc) · 1.72 KB
/
Copy pathmain.js
File metadata and controls
63 lines (53 loc) · 1.72 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
/* eslint-disable no-console */
import 'babel-polyfill'
import { appendObjectToContainer } from './domUtils'
import Review, { getInvalidKeyWords } from './Review'
import Reviews from './Reviews'
const delay = time => new Promise(resolve => setTimeout(resolve, time))
const header = document.querySelector('header')
async function showHeader() {
const res = await fetch('/header.html')
const html = await res.text()
header.innerHTML = html
await delay(100)
header.style.opacity = 0
await delay(100)
header.style.opacity = 1
await delay(100)
header.style.opacity = 0
await delay(100)
header.style.opacity = 1
}
showHeader()
const rateForm = document.querySelector('#rateForm')
const reviewsContainer = document.querySelector('#reviews')
const alert = document.querySelector('.alert')
const reviews = new Reviews()
function renderReviews() {
reviewsContainer.innerHTML = ''
for (const review of reviews) {
appendObjectToContainer(review, reviewsContainer)
}
}
rateForm.addEventListener('submit', event => {
event.preventDefault()
const rate = Number(rateForm.rate.value)
const title = rateForm.title.value
const keywords = rateForm.keywords.value.split(',').map(k => k.trim())
const invalidKeyWords = getInvalidKeyWords(...keywords)
const isValid = invalidKeyWords.length === 0
alert.style.display = 'block'
alert.classList.toggle('alert-danger', !isValid)
alert.classList.toggle('alert-success', isValid)
alert.innerHTML = isValid
? 'Review added'
: `Invalid keywords: ${invalidKeyWords.join(', ')}`
if (isValid) {
delay(2000).then(() => {
alert.style.display = 'none'
})
const review = new Review({ rate, title, keywords })
reviews.add(review)
renderReviews()
}
})