I decided to change things up in a few different ways for this project.
The first thing I did differently was that I did not use the images completely as they were. I noticed that the images given all had preset colors, based on the background color of its category. I didn't think this was very flexible if the user wanted a new background color or a different image, so I configured images to use a combination of CSS filters so that they instead dark the area of the background they are on. This allows them to be a tint of the background, like their original color, while allowing it to be flexible enough to use any image on any background while keeping it looking good.
The second thing I did was add more properties to the JSON data. This was mostly so that I could utilize this information for how I setup my JavaScript.
For my JavaScript, I wanted to create a system that was expandable. I also tried to keep my code concise by splitting it into 5 main files:
fetchData.js
is just to get data from my .json filecategoryCard.js
is a class that helps me model my categoryCard objectscategoryCardsManager.js
reads the data fromfetchData.js
and instantiates a thecategoryCard
s, and puts them into an object that is exportedelementMaker.js
is just used to create an HTML element to append to the main document, however it is used as a property for eachcategoryCard
main.js
is where I setup the buttons and begin appending the card elements to the main page
I think the way this is setup is nice, because each categoryCard contains the information for its own element, which is appended to the main page. This makes it easy to change the info on everything at once, as my function for updating info is based on the categoryCard class, which also has its own info from the JSON file it was made from.
This means that in my main file, I can just loop over my primary list of time cards, and call their functions to update. This was easy to do as there are only 3 buttons (daily, weekly, monthly) which just changes the hours and labels to match the information already given in the JSON file.
The design works well too. Since I am using grid, having more than 6 items actually doesn't look too bad, as they simply wrap down to the next row, leaving everything else perfectly fine. Mobile works fine too as it just makes the column longer.