Advertisement
Maxim_01

Untitled

Mar 31st, 2023
663
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve() {
  2.     let totalLikes = 0
  3.     const inputDOMSelectors = {
  4.         genre: document.querySelector('input[name="genre"]'),
  5.         name: document.querySelector('input[name="name"]'),
  6.         author: document.querySelector('input[name="author"]'),
  7.         date: document.querySelector('input[name="date"]')
  8.     };
  9.     const otherDOMSelectors = {
  10.       addBtn: document.getElementById("add-btn"),
  11.       allHitsContainer : document.querySelector(".all-hits-container"),
  12.       savedHitsContainer : document.querySelector(".saved-container"),
  13.       totalLikesContainer: document.querySelector(".likes>p")
  14.     };
  15.  
  16.     otherDOMSelectors.addBtn.addEventListener("click", addSongHandler)
  17.  
  18.     function addSongHandler(){
  19.       event.preventDefault()
  20.         let allInputsAreNonEmpty = Object.values(inputDOMSelectors).every((input) => input.value !== "")
  21.  
  22.         if (!allInputsAreNonEmpty){
  23.             console.log("HAS INVALID")
  24.             return
  25.         }
  26.  
  27.         let {genre, name, author, date} = inputDOMSelectors
  28.    
  29.         let songContainer = createElement("div", otherDOMSelectors.allHitsContainer, "", ["hits-info"])
  30.         createElement("img", songContainer, null, null, null, {src: "./static/img/img.png"})
  31.         createElement("h2", songContainer, `Genre: ${genre.value}`)
  32.         createElement("h2", songContainer, `Name: ${name.value}`)
  33.         createElement("h2", songContainer, `Author: ${author.value}`)
  34.         createElement("h3", songContainer, `Date: ${date.value}`)
  35.         const saveBtn = createElement("button", songContainer, "Save song", ["save-btn"])
  36.         const likeBtn = createElement("button", songContainer, "Like song", ["like-btn"])
  37.         const deleteBtn = createElement("button", songContainer, "Delete", ["delete-btn"])
  38.  
  39.        
  40.         saveBtn.addEventListener("click", saveHandler)
  41.         likeBtn.addEventListener("click", likeHandler)
  42.         deleteBtn.addEventListener("click", deleteHandler)
  43.  
  44.         clearAllInputs()
  45.  
  46.     }
  47.  
  48.     function clearAllInputs(){
  49.       Object.values(inputDOMSelectors).forEach((input) => input.value = "")
  50.     }
  51.  
  52.     function likeHandler(event){
  53.       totalLikes += 1
  54.       let likeBtn = event.currentTarget
  55.       likeBtn.disabled = true
  56.       otherDOMSelectors.totalLikesContainer.textContent = `Total Likes: ${totalLikes}`
  57.   }
  58.  
  59.   function saveHandler(event){
  60.       let songDiv = event.currentTarget.parentElement
  61.       let saveBtn = songDiv.querySelectorAll("button")[0]
  62.       let likeBtn = songDiv.querySelectorAll("button")[1]
  63.       otherDOMSelectors.savedHitsContainer.appendChild(songDiv)
  64.       saveBtn.remove()
  65.       likeBtn.remove()
  66.   }
  67.  
  68.   function deleteHandler(event){
  69.       let songDiv = event.currentTarget.parentElement
  70.       songDiv.remove()
  71.   }
  72.  
  73.  
  74.     function createElement(type, parent, content, classes, id, attributes){
  75.         let element = document.createElement(type)
  76.         if (content && type !== "input"){
  77.           element.textContent = content
  78.         }
  79.         if (content && type === "input"){
  80.           element.value = content
  81.         }
  82.         if (parent){
  83.           parent.appendChild(element)
  84.         }
  85.         if (id){
  86.           element.id = id
  87.         }
  88.         if (classes){
  89.           element.classList.add(...classes)
  90.         }
  91.         if (attributes){
  92.           for (const key in attributes) {
  93.             element.setAttribute(key, attributes[key])
  94.           }
  95.         }
  96.         return element
  97.     }
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement