1 2document.addEventListener("DOMContentLoaded", function () { 3 var phoneInputs = document.querySelectorAll('input[type="tel"]'); 4 5 var getInputNumbersValue = function (input) { 6 // Return stripped input value â just numbers 7 return input.value.replace(/\D/g, ''); 8 } 9 10 var onPhonePaste = function (e) { 11 var input = e.target, 12 inputNumbersValue = getInputNumbersValue(input); 13 var pasted = e.clipboardData || window.clipboardData; 14 if (pasted) { 15 var pastedText = pasted.getData('Text'); 16 if (/\D/g.test(pastedText)) { 17 // Attempt to paste non-numeric symbol â remove all non-numeric symbols, 18 // formatting will be in onPhoneInput handler 19 input.value = inputNumbersValue; 20 return; 21 } 22 } 23 } 24 25 var onPhoneInput = function (e) { 26 var input = e.target, 27 inputNumbersValue = getInputNumbersValue(input), 28 selectionStart = input.selectionStart, 29 formattedInputValue = ""; 30 31 if (!inputNumbersValue) { 32 return input.value = ""; 33 } 34 35 if (input.value.length != selectionStart) { 36 // Editing in the middle of input, not last symbol 37 if (e.data && /\D/g.test(e.data)) { 38 // Attempt to input non-numeric symbol 39 input.value = inputNumbersValue; 40 } 41 return; 42 } 43 44 if (["7", "8", "9"].indexOf(inputNumbersValue[0]) > -1) { 45 if (inputNumbersValue[0] == "9") inputNumbersValue = "7" + inputNumbersValue; 46 var firstSymbols = (inputNumbersValue[0] == "8") ? "8" : "+7"; 47 formattedInputValue = input.value = firstSymbols + " "; 48 if (inputNumbersValue.length > 1) { 49 formattedInputValue += '(' + inputNumbersValue.substring(1, 4); 50 } 51 if (inputNumbersValue.length >= 5) { 52 formattedInputValue += ') ' + inputNumbersValue.substring(4, 7); 53 } 54 if (inputNumbersValue.length >= 8) { 55 formattedInputValue += '-' + inputNumbersValue.substring(7, 9); 56 } 57 if (inputNumbersValue.length >= 10) { 58 formattedInputValue += '-' + inputNumbersValue.substring(9, 11); 59 } 60 } else { 61 formattedInputValue = '+' + inputNumbersValue.substring(0, 16); 62 } 63 input.value = formattedInputValue; 64 } 65 var onPhoneKeyDown = function (e) { 66 // Clear input after remove last symbol 67 var inputValue = e.target.value.replace(/\D/g, ''); 68 if (e.keyCode == 8 && inputValue.length == 1) { 69 e.target.value = ""; 70 } 71 } 72 for (var phoneInput of phoneInputs) { 73 phoneInput.addEventListener('keydown', onPhoneKeyDown); 74 phoneInput.addEventListener('input', onPhoneInput, false); 75 phoneInput.addEventListener('paste', onPhonePaste, false); 76 } 77})
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.