1import { Controller } from "@hotwired/stimulus" 2 3export default class extends Controller { 4 static targets = [ 5 'postalCode', 6 'search', 7 'prefecture', 8 'city', 9 'streetAddress', 10 'buildingName' 11 ]; 12 static values = { path: String } 13 14 connect() { 15 this.checkSearchEnable(); 16 } 17 18 // æ¤ç´¢ãã¿ã³æå¹åãã§ã㯠19 checkSearchEnable() { 20 const postalCode = this.postalCodeTarget.value; 21 const searchButton = this.searchTarget; 22 if (postalCode.length === 7 && /^\d{7}$/.test(postalCode)) { 23 searchButton.removeAttribute('disabled'); 24 } else { 25 searchButton.setAttribute('disabled', 'disabled'); 26 } 27 } 28 29 // æ¤ç´¢ 30 async search(event) { 31 const url = new URL(this.pathValue, document.location.origin); 32 const params = url.searchParams; 33 params.set('postal_code', this.postalCodeTarget.value); 34 params.set('format', 'turbo_stream'); 35 url.search = params.toString(); 36 // ãã¿ã³ã«ã¹ããã¼è¡¨ç¤ºãã 37 const searchButton = this.searchTarget; 38 const searchButtonOriginalText = searchButton.innerHTML; 39 searchButton.disabled = true; 40 searchButton.innerHTML = '<i class="fa-solid fa-spinner fa-spin" role="status" aria-hidden="true"></i> æ¤ç´¢ä¸...'; 41 await this.#fetch(url); 42 // æ¤ç´¢å¾ãå ã«æ»ã 43 searchButton.innerHTML = searchButtonOriginalText; 44 this.checkSearchEnable(); 45 } 46 47 // 使鏿 48 select(event) { 49 event.preventDefault(); 50 51 // 使ãã£ã¼ã«ãã«ã»ãããã 52 // é½éåºçã¯optionã®textã¨ä¸è´ãããã®ã鏿ãã 53 const prefName = event.currentTarget.dataset.prefName; 54 const prefectureOptions = this.prefectureTarget.options; 55 for (let i = 0; i < prefectureOptions.length; i++) { 56 if (prefectureOptions[i].text === prefName) { 57 this.prefectureTarget.selectedIndex = i; 58 break; 59 } 60 } 61 this.cityTarget.value = event.currentTarget.dataset.cityName; 62 this.streetAddressTarget.value = [event.currentTarget.dataset.townName, event.currentTarget.dataset.blockName].filter(part => part).join(' '); 63 // 建ç©åãã£ã¼ã«ãã¯ç©ºã«ãã 64 this.buildingNameTarget.value = ''; 65 66 // ä½æé¸æçµæãã¯ãªã¢ãã 67 const resultContainer = document.getElementById('postal_code_to_address_select'); 68 if (resultContainer) { 69 resultContainer.innerHTML = ''; 70 } 71 } 72 73 // fetch 74 async #fetch(url) { 75 const responce = await Turbo.fetch(url); 76 if (!responce.ok) { 77 console.log(responce.statusText); 78 return; 79 } 80 const text = await responce.text(); 81 Turbo.renderStreamMessage(text); 82 } 83};
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.