1import { Controller } from "@hotwired/stimulus" 2 3export default class extends Controller { 4 static targets = ["entry", "inputTemplate"] 5 static values = { closeIconUrl: String } 6 7 addInput(e) { 8 e?.preventDefault() 9 e?.stopPropagation() 10 const template = this.inputTemplateTarget 11 const clone = template.content.cloneNode(true) 12 const icon = clone.querySelector(".request-artist-remove-icon") 13 if (icon && this.closeIconUrlValue) icon.src = this.closeIconUrlValue 14 this.entryTarget.insertBefore(clone, this.entryTarget.querySelector(".request-artist-add-btn")) 15 this.updateRemoveButtonsVisibility() 16 } 17 18 removeInput(e) { 19 e?.preventDefault() 20 e?.stopPropagation() 21 const block = e.currentTarget.closest(".request-artist-input-block") 22 if (block) block.remove() 23 this.updateRemoveButtonsVisibility() 24 } 25 26 updateRemoveButtonsVisibility() { 27 const blocks = this.entryTarget.querySelectorAll(".request-artist-input-block") 28 const removeButtons = this.entryTarget.querySelectorAll(".request-artist-remove-btn") 29 const shouldShow = blocks.length > 1 30 removeButtons.forEach(btn => btn.classList.toggle("hidden", !shouldShow)) 31 } 32 33 resetForm() { 34 const blocks = this.entryTarget.querySelectorAll(".request-artist-input-block") 35 blocks.forEach((block, i) => { 36 if (i === 0) { 37 const input = block.querySelector(".request-artist-input") 38 if (input) input.value = "" 39 } else { 40 block.remove() 41 } 42 }) 43 this.updateRemoveButtonsVisibility() 44 } 45}
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.