Repository: udacity/ud989-cat-clicker-premium-vanilla Branch: master Commit: 093fc237773a Files: 5 Total size: 4.8 KB Directory structure: gitextract_f0j26dh_/ ├── .gitignore ├── CODEOWNERS ├── README.md ├── index.html └── js/ └── app.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .DS_Store ================================================ FILE: CODEOWNERS ================================================ * @udacity/active-public-content ================================================ FILE: README.md ================================================ # Cat Clicker Premium Vanilla Here's Ben's solution for Cat Clicker Premium from [Udacity's Javascript Design Patterns course](https://www.udacity.com/course/javascript-design-patterns--ud989). Clone the repo and open up `index.html` in your browser of choice. ================================================ FILE: index.html ================================================ Cat Clicker

cute cat
================================================ FILE: js/app.js ================================================ /* ======= Model ======= */ var model = { currentCat: null, cats: [ { clickCount : 0, name : 'Tabby', imgSrc : 'img/434164568_fea0ad4013_z.jpg', imgAttribution : 'https://www.flickr.com/photos/bigtallguy/434164568' }, { clickCount : 0, name : 'Tiger', imgSrc : 'img/4154543904_6e2428c421_z.jpg', imgAttribution : 'https://www.flickr.com/photos/xshamx/4154543904' }, { clickCount : 0, name : 'Scaredy', imgSrc : 'img/22252709_010df3379e_z.jpg', imgAttribution : 'https://www.flickr.com/photos/kpjas/22252709' }, { clickCount : 0, name : 'Shadow', imgSrc : 'img/1413379559_412a540d29_z.jpg', imgAttribution : 'https://www.flickr.com/photos/malfet/1413379559' }, { clickCount : 0, name : 'Sleepy', imgSrc : 'img/9648464288_2516b35537_z.jpg', imgAttribution : 'https://www.flickr.com/photos/onesharp/9648464288' } ] }; /* ======= Octopus ======= */ var octopus = { init: function() { // set our current cat to the first one in the list model.currentCat = model.cats[0]; // tell our views to initialize catListView.init(); catView.init(); }, getCurrentCat: function() { return model.currentCat; }, getCats: function() { return model.cats; }, // set the currently-selected cat to the object passed in setCurrentCat: function(cat) { model.currentCat = cat; }, // increments the counter for the currently-selected cat incrementCounter: function() { model.currentCat.clickCount++; catView.render(); } }; /* ======= View ======= */ var catView = { init: function() { // store pointers to our DOM elements for easy access later this.catElem = document.getElementById('cat'); this.catNameElem = document.getElementById('cat-name'); this.catImageElem = document.getElementById('cat-img'); this.countElem = document.getElementById('cat-count'); // on click, increment the current cat's counter this.catImageElem.addEventListener('click', function(){ octopus.incrementCounter(); }); // render this view (update the DOM elements with the right values) this.render(); }, render: function() { // update the DOM elements with values from the current cat var currentCat = octopus.getCurrentCat(); this.countElem.textContent = currentCat.clickCount; this.catNameElem.textContent = currentCat.name; this.catImageElem.src = currentCat.imgSrc; } }; var catListView = { init: function() { // store the DOM element for easy access later this.catListElem = document.getElementById('cat-list'); // render this view (update the DOM elements with the right values) this.render(); }, render: function() { var cat, elem, i; // get the cats we'll be rendering from the octopus var cats = octopus.getCats(); // empty the cat list this.catListElem.innerHTML = ''; // loop over the cats for (i = 0; i < cats.length; i++) { // this is the cat we're currently looping over cat = cats[i]; // make a new cat list item and set its text elem = document.createElement('li'); elem.textContent = cat.name; // on click, setCurrentCat and render the catView // (this uses our closure-in-a-loop trick to connect the value // of the cat variable to the click event function) elem.addEventListener('click', (function(catCopy) { return function() { octopus.setCurrentCat(catCopy); catView.render(); }; })(cat)); // finally, add the element to the list this.catListElem.appendChild(elem); } } }; // make it go! octopus.init();