{"version":3,"sources":["js/app.js"],"names":["restart","cardContainer","openCards","lockedCards","moveCounter","deck","document","getElementById","repeat","getElementsByClassName","timer","minutes","seconds","symbolName","symbols","DIAMOND","PLANE","ANCHOR","BOLT","CUBE","LEAF","BICYCLE","BOMB","addEventListener","Card","symbol","domCard","setInterval","updateTime","innerHTML","removeChild","stars","getElementsByTagName","i","childNodes","classList","contains","toggle","index","firstChild","card","createElement","push","add","addCards","addOpenCard","length","incrementMoveCounter","adjustStars","gameOver","pop","gameOverScreen","container","gameOverMessage","finalResult","starString","starCount","playAgainBtn","time","id","onclick","appendChild","starIndex","hideCard","lockCard","showCard","cards","shuffle","array","currentIndex","temporaryValue","randomIndex","Math","floor","random","DOMminutes","DOMseconds","minStr","secStr"],"mappings":"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","file":"app.6b84f8e8.map","sourceRoot":"..","sourcesContent":["let cardContainer;\nlet openCards;\nlet lockedCards;\nlet moveCounter;\nlet deck = document.getElementById('deck');\nlet repeat = document.getElementsByClassName('fa-repeat')[0];\nlet timer;\nlet minutes = 0;\nlet seconds = 0;\nconst symbolName = {\n  DIAMOND: 'fa-diamond',\n  PLANE: 'fa-paper-plane-o',\n  ANCHOR: 'fa-anchor',\n  BOLT: 'fa-bolt',\n  CUBE: 'fa-cube',\n  LEAF: 'fa-leaf',\n  BICYCLE: 'fa-bicycle',\n  BOMB: 'fa-bomb'\n};\nconst symbols = [\n  symbolName.DIAMOND,\n  symbolName.PLANE,\n  symbolName.ANCHOR,\n  symbolName.BOLT,\n  symbolName.CUBE,\n  symbolName.LEAF,\n  symbolName.BICYCLE,\n  symbolName.BOMB\n];\n\nrepeat.addEventListener('click', function() {\n  clearInterval(timer);\n  restart();\n});\n\nclass Card {\n  constructor(symbol, domCard) {\n    this.symbol = symbol;\n    this.domCard = domCard;\n  }\n}\n\nfunction restart() {\n  timer = setInterval(updateTime, 1000);\n  minutes = 0;\n  seconds = 0;\n  document.getElementById('minutes').innerHTML = '00';\n  document.getElementById('seconds').innerHTML = '00';\n\n  if (lockedCards >= 16) {\n    let container = document.getElementById('container');\n    container.removeChild(document.getElementById('game-over-screen'));\n  }\n\n  let stars = document.getElementsByTagName('li');\n  if (stars) {\n    for (let i = 0; i < 3; i++) {\n      if (stars[i].childNodes[1].classList.contains('fa-star-o')) {\n        stars[i].childNodes[1].classList.toggle('fa-star');\n        stars[i].childNodes[1].classList.toggle('fa-star-o');\n      }\n    }\n  }\n  starCount = 3;\n  starIndex = 2;\n  openCards = [];\n  lockedCards = 0;\n  moveCounter = 0;\n  cardContainer = [];\n  let index = 0;\n\n  document.getElementById('moves').innerHTML = 0;\n\n  // remove all cards from deck\n  while (deck.firstChild) {\n    deck.removeChild(deck.firstChild);\n  }\n\n  for (let i = 1; i <= 16; i++) {\n    let card = new Card(symbols[index], document.createElement('div'));\n    cardContainer.push(card);\n\n    card.domCard.classList.add('card');\n    card.domCard.classList.add('fa');\n    card.domCard.classList.add(symbols[index]);\n\n    card.domCard.addEventListener('click', function() {\n      if (\n        !card.domCard.classList.contains('lock') &&\n        !card.domCard.classList.contains('open')\n      ) {\n        showCard(card);\n        addOpenCard(card);\n      }\n    });\n    // make sure there are two cards of every symbol\n    if (i % 2 === 0) {\n      index += 1;\n    }\n  }\n  addCards();\n}\n\nfunction addOpenCard(card) {\n  openCards.push(card);\n  if (openCards.length > 1) {\n    incrementMoveCounter();\n    adjustStars();\n    if (openCards[0].symbol === card.symbol) {\n      lockCard(openCards[0].domCard);\n      lockCard(card.domCard);\n      lockedCards += 2;\n      if (lockedCards >= 16) {\n        gameOver();\n      }\n    } else {\n      hideCard(openCards[0].domCard);\n      hideCard(card.domCard);\n    }\n    openCards.pop();\n    openCards.pop();\n  }\n}\n\nfunction gameOver() {\n  clearInterval(timer);\n  let gameOverScreen = document.createElement('div');\n  let container = document.getElementById('container');\n  let gameOverMessage = document.createElement('div');\n  let finalResult = document.createElement('div');\n  let starString = starCount === 1 ? ' star.' : ' stars.';\n  let playAgainBtn = document.createElement('button');\n  let min = minutes === 1 ? minutes + ' minute' : minutes + ' minutes';\n  let sec = seconds + ' seconds.';\n  let time = min + ' and ' + sec;\n  gameOverScreen.id = 'game-over-screen';\n  gameOverMessage.innerHTML = 'Congratulations! You Won!';\n  gameOverMessage.id = 'game-over-message';\n  finalResult.innerHTML =\n    'With: ' +\n    moveCounter +\n    ' Moves and ' +\n    starCount +\n    starString +\n    ' All in ' +\n    time;\n  playAgainBtn.id = 'play-again';\n  playAgainBtn.innerHTML = 'Play Again';\n  playAgainBtn.onclick = restart;\n  setTimeout(() => {\n    container.appendChild(gameOverScreen);\n    gameOverMessage.appendChild(finalResult);\n    gameOverScreen.appendChild(gameOverMessage);\n    gameOverScreen.appendChild(playAgainBtn);\n  }, 2000);\n}\n\nlet starIndex = 2;\nlet starCount = 3;\n\nfunction adjustStars() {\n  if (moveCounter > 14 && moveCounter % 2 === 0 && starIndex > 0) {\n    let stars = document.getElementsByClassName('fa-star');\n    stars[starIndex].classList.toggle('fa-star-o');\n    stars[starIndex].classList.toggle('fa-star');\n    starIndex -= 1;\n    starCount -= 1;\n  }\n}\n\nfunction incrementMoveCounter() {\n  moveCounter++;\n  document.getElementById('moves').innerHTML = moveCounter;\n}\n\nfunction hideCard(card) {\n  setTimeout(() => {\n    card.classList.toggle('open');\n    card.classList.toggle('show');\n  }, 2000);\n}\n\nfunction lockCard(card) {\n  card.classList.add('lock');\n}\n\nfunction showCard(card) {\n  card.domCard.classList.toggle('open');\n  card.domCard.classList.toggle('show');\n}\n\nfunction addCards() {\n  let cards = shuffle(cardContainer);\n  // let cards = cardContainer;\n  for (let i = 0; i < 16; i++) {\n    let card = cards[i].domCard;\n    deck.appendChild(card);\n  }\n}\n\nfunction shuffle(array) {\n  var currentIndex = array.length,\n    temporaryValue,\n    randomIndex;\n\n  while (currentIndex !== 0) {\n    randomIndex = Math.floor(Math.random() * currentIndex);\n    currentIndex -= 1;\n    temporaryValue = array[currentIndex];\n    array[currentIndex] = array[randomIndex];\n    array[randomIndex] = temporaryValue;\n  }\n  return array;\n}\n\nfunction updateTime() {\n  let DOMminutes = document.getElementById('minutes');\n  let DOMseconds = document.getElementById('seconds');\n  let minStr = DOMminutes.innerHTML;\n  let secStr = DOMseconds.innerHTML;\n  seconds += 1;\n  if (seconds < 10) {\n    secStr = '0' + seconds;\n  } else if (seconds >= 60) {\n    minutes += 1;\n    if (minutes < 10) {\n      minStr = '0' + minutes;\n    } else {\n      minStr = minutes;\n    }\n    seconds = 0;\n    secStr = '0' + seconds;\n  } else {\n    secStr = seconds;\n  }\n  DOMminutes.innerHTML = minStr;\n  DOMseconds.innerHTML = secStr;\n}\n\nrestart();\n"]}