1/** 2 * initSuggestions('#modal_shipping_address', { 3 * requireHouse: true, 4 * buttonSelector: '.modal-form__btn', 5 * messageSelector: '#message', 6 * onAddressSelected: (data) => { 7 * }, 8 * onAddressCleared: () => { 9 * } 10}); 11 */ 12 13function initSuggestions(inputElement = ".suggestions-input", options = {}) { 14 const token = "3c7b1a3a18c1140a8759b69b6ca156d85bc98bb0" 15 const classInitialized = "js-suggestions-initialized" 16 17 const { 18 requireHouse = false, 19 buttonSelector = null, 20 messageSelector = null, 21 onAddressSelected = null, 22 onAddressCleared = null, 23 } = options 24 25 let address = "" 26 27 if (!inputElement) { 28 console.warn("initSuggestions: input element not provided") 29 return 30 } 31 32 const button = buttonSelector 33 ? document.querySelector(buttonSelector) 34 : null 35 const message = messageSelector 36 ? document.querySelector(messageSelector) 37 : null 38 39 function setButtonState(enabled) { 40 if (!button) return 41 if (enabled) { 42 button.removeAttribute("disabled") 43 } else { 44 button.setAttribute("disabled", "true") 45 } 46 } 47 48 function setMessage(text) { 49 if (!message) return 50 message.innerText = text 51 } 52 53 if (!$(inputElement).hasClass(classInitialized)) { 54 $(inputElement) 55 .suggestions({ 56 token, 57 type: "address", 58 params: { 59 locations: [{ region: "СамаÑÑкаÑ" }], 60 restrict_value: true, 61 from_bound: { value: "city" }, 62 to_bound: { value: "house" }, 63 }, 64 onSelect: function (suggestion) { 65 const hasHouse = 66 suggestion.data.house && 67 suggestion.data.house.trim() !== "" 68 if (requireHouse && !hasHouse) { 69 setMessage("УкажиÑе адÑÐµÑ Ð´Ð¾ дома, ÑÑÐ¾Ð±Ñ Ð¿ÑодолжиÑÑ") 70 setButtonState(false) 71 } else { 72 setMessage("") 73 setButtonState(true) 74 } 75 address = suggestion.value 76 $(this).addClass("js-address-select") 77 78 if (typeof onAddressSelected === "function") { 79 onAddressSelected(suggestion.data) 80 } 81 }, 82 onSelectNothing: function () { 83 const val = $(inputElement).val().trim() 84 if (val === "") { 85 setButtonState(true) 86 setMessage("") 87 } else { 88 setButtonState(false) 89 setMessage("УкажиÑе адÑÐµÑ Ð´Ð¾ дома, ÑÑÐ¾Ð±Ñ Ð¿ÑодолжиÑÑ") 90 } 91 if (typeof onAddressCleared === "function") { 92 onAddressCleared() 93 } 94 }, 95 }) 96 .addClass(classInitialized) 97 } 98 99 $(inputElement).on("input", function () { 100 if ($(this).val().trim() === "") { 101 setButtonState(true) 102 setMessage("") 103 } 104 }) 105 106 $(inputElement).on("change", function () { 107 if (address !== "") { 108 if ($(this).val().trim() !== address) { 109 $(this).removeClass("js-address-select") 110 } 111 } 112 }) 113}
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.