Commit ec957aa41ecb7f6c2210c28a0d2a9d2971389b32
1 parent
45ba031d
product modal js
Showing
1 changed file
with
72 additions
and
0 deletions
Show diff stats
frontend/web/js/product.js
1 | +var phoneInput = document.querySelector('#cardProduct [type="tel"]'); | ||
2 | +var counter = document.querySelector('#cardProduct .product-counter__input'); | ||
3 | + | ||
4 | +if (phoneInput) { | ||
5 | + phoneInput.addEventListener('input', phoneHandleInput); | ||
6 | +} | ||
7 | + | ||
8 | +if (counter) { | ||
9 | + counterFunc(counter); | ||
10 | +} | ||
11 | + | ||
12 | +function phoneHandleInput(e) { | ||
13 | + e.target.value = phoneMasks(e.target.value); | ||
14 | +} | ||
15 | + | ||
16 | +function phoneMasks(phone) { | ||
17 | + return phone.replace(/\D/g, '') | ||
18 | + .replace(/^(\d)/, '($1') | ||
19 | + .replace(/^(\(\d{3})(\d)/, '$1) $2') | ||
20 | + .replace(/(\d{3})(\d{1,7})/, '$1-$2') | ||
21 | + .replace(/(-\d{2})(\d{1,7})/, '$1-$2') | ||
22 | + .replace(/(-\d{2})\d+?$/, '$1'); | ||
23 | +} | ||
24 | + | ||
25 | +function counterFunc(counter) { | ||
26 | + let itemPrice = counter.parentElement.querySelector('.product-counter__value'); | ||
27 | + itemPrice.innerHTML = `${itemPrice.dataset.price} ${itemPrice.dataset.currency}`; | ||
28 | + | ||
29 | + counter.querySelector('input').value = 1; | ||
30 | + counter.addEventListener('input', counterHandleInput); | ||
31 | + counter.addEventListener('change', counterHandleChange); | ||
32 | + counter.querySelector('.product-counter__increment').addEventListener('click', increment); | ||
33 | + counter.querySelector('.product-counter__decrement').addEventListener('click', decrement); | ||
34 | + | ||
35 | + function counterHandleInput(e) { | ||
36 | + e.target.value = e.target.value.replace(/\D/g, ''); | ||
37 | + updateSummary(); | ||
38 | + } | ||
39 | + | ||
40 | + function counterHandleChange(e) { | ||
41 | + const value = e.target.value.replace(/\D/g, ''); | ||
42 | + if (value == 0) { | ||
43 | + e.target.value = 1; | ||
44 | + } | ||
45 | + updateSummary(); | ||
46 | + } | ||
47 | + | ||
48 | + function increment(e) { | ||
49 | + e.preventDefault(); | ||
50 | + const value = Number(counter.querySelector('input').value); | ||
51 | + counter.querySelector('input').value = value + 1; | ||
52 | + updateSummary(); | ||
53 | + } | ||
54 | + | ||
55 | + function decrement(e) { | ||
56 | + e.preventDefault(); | ||
57 | + const value = Number(counter.querySelector('input').value); | ||
58 | + if (value > 1) { | ||
59 | + counter.querySelector('input').value = value - 1; | ||
60 | + updateSummary(); | ||
61 | + } | ||
62 | + } | ||
63 | + | ||
64 | + function updateSummary() { | ||
65 | + const amount = counter.querySelector('input').value; | ||
66 | + if (amount >= 1) { | ||
67 | + const oldSum = Number(itemPrice.dataset.price) * 10; | ||
68 | + const newSum = String(oldSum * amount); | ||
69 | + itemPrice.innerHTML = `${newSum.slice(0, -2)}.${newSum.slice(-2)} ${itemPrice.dataset.currency}`; | ||
70 | + } | ||
71 | + } | ||
72 | +} | ||
0 | \ No newline at end of file | 73 | \ No newline at end of file |