(function () { const root = document.documentElement const phoneInput = document.getElementById('billing_phone') const cartForm = document.querySelector('form.woocommerce-cart-form') const digitsOnly = value => value.replace(/\D+/g, '') const maskPhone = value => { let digits = digitsOnly(value) if (digits.startsWith('8')) { digits = `7${digits.slice(1)}` } if (!digits.startsWith('7')) { digits = `7${digits}` } digits = digits.slice(0, 11) let result = '+7' if (digits.length > 1) result += ` (${digits.slice(1, 4)}` if (digits.length >= 4) result += ')' if (digits.length > 4) result += ` ${digits.slice(4, 7)}` if (digits.length > 7) result += `-${digits.slice(7, 9)}` if (digits.length > 9) result += `-${digits.slice(9, 11)}` return result } if (phoneInput) { phoneInput.addEventListener('input', event => { event.target.value = maskPhone(event.target.value) }) phoneInput.form?.addEventListener('submit', () => { const digits = digitsOnly(phoneInput.value) phoneInput.setCustomValidity(digits.length < 11 ? 'Укажите корректный номер телефона' : '') }) } const attachQuantityButtons = () => { document.querySelectorAll('.quantity').forEach(quantity => { if (quantity.dataset.enhanced === 'true') { return } const input = quantity.querySelector('.qty') if (!input) { return } quantity.dataset.enhanced = 'true' const minus = document.createElement('button') minus.type = 'button' minus.className = 'quantity-button quantity-button-minus' minus.textContent = '-' const plus = document.createElement('button') plus.type = 'button' plus.className = 'quantity-button quantity-button-plus' plus.textContent = '+' quantity.prepend(minus) quantity.append(plus) const step = Number(input.step || 1) const min = Number(input.min || 1) const max = input.max ? Number(input.max) : Number.POSITIVE_INFINITY minus.addEventListener('click', () => { const next = Math.max(min, Number(input.value || min) - step) input.value = String(next) input.dispatchEvent(new Event('change', { bubbles: true })) }) plus.addEventListener('click', () => { const next = Math.min(max, Number(input.value || min) + step) input.value = String(next) input.dispatchEvent(new Event('change', { bubbles: true })) }) }) } if (cartForm) { let updateTimer = null cartForm.addEventListener('change', event => { if (!event.target.classList.contains('qty')) { return } const updateButton = cartForm.querySelector('button[name="update_cart"]') if (!updateButton) { return } updateButton.disabled = false clearTimeout(updateTimer) updateTimer = window.setTimeout(() => { updateButton.click() }, 350) }) } attachQuantityButtons() root.classList.add('test1-checkout-enhanced') })()