Advertisement
Maxim_01

Untitled

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