Debugging Broken Code
<h1>Monsters! - Debug</h1>
<div id="app" aria-live="polite"></div>
<footer>
<hr>
<p class="text-small text-muted">Icons by <a href="https://thenounproject.com/term/door/311732/">Jamie Dickinson</a>,
<a href="https://thenounproject.com/term/monster/184225/">Nicky Knicky</a>, <a
href="https://thenounproject.com/term/monster/1510400/">Alvaro Cabrera</a>, <a
href="https://thenounproject.com/term/monster/28460/">Eliricon</a>, <a
href="https://thenounproject.com/term/monster/82823/">April Yang</a>, <a
href="https://thenounproject.com/term/monster/1062009/">tk66</a>, <a
href="https://thenounproject.com/term/monster/24990/">Alex WaZa</a>, <a
href="https://thenounproject.com/term/monster/37212/">Husein Aziz</a>, <a
href="https://thenounproject.com/term/monster/2236082">iconcheese</a>, and <a
href="https://thenounproject.com/term/socks/38451/">Yazmin Alanis</a>.</p>
</footer>
<script>
var monsters = [
'monster1',
'monster2',
'monster3',
'monster4',
'monster5',
'monster6',
'monster7',
'monster8',
'monster9',
'monster10',
'monster11',
'sock'
];
var app = document.querySelector('#app');
var found;
var shuffle = function (array) {
var currentIndex = array.length;
var temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
};
var renderMonsters = function () {
found = 0;
shuffle(monsters);
app.innerHTML =
'<p>Click a door to reveal a monster. Try not to find the sock.</p>' +
'<div class="row">' +
monsters.map(function (monster, index) {
var html =
'<div class="grid">' +
'<button data-monster-id="' + index + '">' +
'<img alt="Click the door to see what\'s behind it" src="door.svg">' +
'</button>' +
'</div>';
return html;
}).join('') +
'</div>';
};
var renderLost = function () {
app.innerHTML =
'<img class="img-full" alt="" src="https://media.giphy.com/media/13zUNhE9WZspMc/giphy.gif">' +
'<h2>Oops, you found a sock!</h2>' +
'<p>' +
'<button class="btn" data-monster-play-again>Play Again</button>' +
'</p>';
};
var renderWon = function () {
app.innerHTML =
'<img class="img-full" alt="" src="https://media.giphy.com/media/1242bJFCbb3FxC/giphy.gif">' +
'<h2>You won!</h2>' +
'<p>You found all of the monsters. Congrats!</p>' +
'<p>' +
'<button data-monster-play-again>Play Again</button>' +
'</p>';
};
var clickHandler = function (event) {
if (event.target.hasAttribute('data-monster-play-again')) {
renderMonsters();
return;
}
var monster = event.target.closest('[data-monster-id]');
if (!monster) return;
var id = monster.getAttribute('data-monster-id');
if (monsters[id] === 'sock') {
renderLost();
return;
}
monster.parentNode.innerHTML = '<img alt="' + monsters[id] + '" src="' + monsters[id] + '.svg">';
found++;
if (found === (monsters.length - 1)) {
renderWon();
}
};
renderMonsters();
document.addEventListener('click', clickHandler, false);
</script>