SAFARI USERS: As Safari does not currently have a built-in extension manager, you will need to right click "Save Linked File...", find where you saved the file, and then double-click on it to install. Sorry for the inconvenience, but Safari isn't going to let this be a one-click deal. (Also, should the file save with a ".txt" at the end, simply remove the ".txt" and then double-click and you should be good to go) EDIT: Wow, I'm glad to see so many people are excited about this. If you've downloaded an extension, or like what you see, consider sharing this url on facebook so others can have a chance to experience a confusion-free calendar. Remember, the more attention this gets, the more likely it is that someone important will take notice. If that happens, maybe we have a chance to see some real change in how MyPack works. Before I get into exactly how this all works, I'd like to share a few screenshots comparing the original schedule grid view to the one I've created. Old (Click for full-size Image) New (Click for full-size Image) Introduction So, a while back I decided that if OIT was unwilling to update NC State's MyPack Portal in any useful way, then I would take matters into my own hands. This blog will detail the first step I've taken, improving MyPack's "Schedule Grid View" and "Wishlist View" features. I've split this post up into a few different sections: Problems with the Original Schedule Calendar, How My Fix Works, and Installing Extensions For Your Browser. I understand that not everyone who reads this post will be interested in the computer science behind my solution, so if you fall into this category feel free to grab the extension for your browser from above and go about your day. Problems with the Original Schedule Calendar The problems with the original schedule grid view mostly stem from the fact that it is written using vastly outdated design principles. I'm not 100% sure when exactly it was written, but the fact that it comes from the packtracks domain as opposed to mypack suggests that it is quite old. Even if it wasn't listed under an old domain, there is another obvious clue - the entire schedule is one gigantic table. Now for those of you that aren't familiar with web design, you might not find any beef with this. "What's wrong with having a schedule in a table? That seems right thing to me", you might say. Well, when I say "table", I'm not talking about a table in the general sense. I'm talking specifically about the <table> html element. This markup essentially creates a box that you can place other boxes in - a very basic table. The problem with html tables is that they are very rigid, and are typically a poor choice when you want to create dynamic content (content that changes based on the situation). While the <table> tag has not been completely phased out, its usage these days is very situational; most people prefer to use a much more flexible series of <div> tags instead. But perhaps I'm straying away from the problem. The reason why tables are a poor choice for a schedule is because they force content to fit in one box or another, with no overlap. I'm sure everyone who has used schedule grid view before has noticed that their 11:20am-12:30pm class is listed as starting at 11am and going until 1pm. Or perhaps it has appeared that you have two classes back-to-back, when in reality they are a good 50 minutes apart. This is because the table rounds every class down to the hour, and then places it in it's corresponding block. For classes that don't start or end on the hour (i.e. almost all of them), this becomes a pretty big issue. Aside from this functional problem, schedule grid view lacks any kind of real aesthetics. Everything is grey and red. Classes are not color-coded, there are no visual separators for hours, days of the week, etc. In fact, most of the time I find myself looking at the small table at the bottom of the page that lists all my classes, rather than trying to sift through the actual calendar. Put quite simply, information is not easy for the user to find (this seems to be MyPack's theme - if the information is useful, spread it out and make the user hunt it all down). How My Fix Works EDIT: When I first wrote this extension, I did it a pretty unconventional/dumb way. I shouldn't make excuses, but it was one of my first forays into web and extensions at the time, and I did things in a way that was…unfortunate to say the least. I came back later and re-wrote the entire thing so it actually isn't completely retarded, and below I'll talk about how all that is set up. The extension uses a simple whitelist with the url of the schedule, so that the extension will only activate if you load that specific page. Once you hit the schedule page, the extension loads 2 javascript files. One contains all the code needed to create the new schedule, and one that contains a large array of every building address and code on campus (I'll talk about this more in a little bit). The javascript parses through the courses table at the bottom of the page, pulling all the necessary class information out and putting it into a nicely structured 2d array. Some simple calculations are done to determine where on the page each course should be displayed, as well as color coding everything and linking building codes to actual building names. After that, the body of the page is cleared and the script begins setting up the backbone of the schedule - the days of the week, dividing lines, etc. Once the static content is in place, the courses are loaded on top of it. The courses are now pixel accurate down to the minute, color-coded, and can be clicked on to go to the course webpage. Additionally, overlaps are detected so the user is aware if they have overlapping classes (which is useful for schedule creation as mypack does not inform you of overlap). Finally, the courses are grouped by day of the week, and the address' of those classes buildings are sent off to google maps to create walking directions. These can be viewed by clicking on the day of the week at the top of the schedule. Installing Extensions for your Browser If you've glanced at the screenshots, and feel like this improved calendar view is something you'd like to use yourself, you're welcome to grab an extension from below and install it in your browser of choice. Note that I have no idea if Internet Explorer uses extensions, and I don't really care. If you use Internet Explorer, stop. Just click on your browser of choice below (or at the top of this page) and you should be prompted to install the extension. Failing that, right click "Save Target As..." works just fine too. Chrome Extension Firefox Add-On Safari Extension