From bedddde945410b9f6a6ac3ca580fc39332d1ee66 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Fri, 5 Dec 2014 23:10:02 -0800 Subject: [PATCH] make the profile page look better --- controllers/user.js | 5 +- package.json | 7 +- public/css/main.less | 8 ++ views/account/profile.jade | 180 ++++++++++++++++++++++++++++++++++++- views/partials/faq.jade | 7 +- 5 files changed, 199 insertions(+), 8 deletions(-) diff --git a/controllers/user.js b/controllers/user.js index 44224a98b5..2f12bca1e6 100644 --- a/controllers/user.js +++ b/controllers/user.js @@ -5,6 +5,7 @@ var nodemailer = require('nodemailer'); var passport = require('passport'); var User = require('../models/User'); var secrets = require('../config/secrets'); +var moment = require('moment'); /** * GET /login @@ -118,7 +119,9 @@ exports.postSignup = function(req, res, next) { exports.getAccount = function(req, res) { res.render('account/profile', { - title: 'Manage your Free Code Camp Account' + title: 'Manage your Free Code Camp Account', + cc: req.user.challengesHash, + moment: moment }); }; diff --git a/package.json b/package.json index c5375c698a..78f57b4b14 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "connect-mongo": "^0.4.1", "cookie-parser": "^1.3.3", "csso": "^1.3.11", + "dateformat": "^1.0.11", "dotenv": "^0.4.0", "errorhandler": "^1.3.0", "express": "^4.10.4", @@ -34,11 +35,12 @@ "lastfm": "^0.9.2", "less": "^1.7.5", "lodash": "^2.4.1", - "newrelic": "^1.13.3", "lusca": "^1.0.2", "method-override": "^2.3.0", + "moment": "^2.8.4", "mongoose": "^3.8.19", "morgan": "^1.5.0", + "newrelic": "^1.13.3", "node-foursquare": "^0.2.1", "node-linkedin": "^0.3.4", "nodemailer": "^1.3.0", @@ -51,8 +53,9 @@ "passport-local": "^1.0.0", "passport-oauth": "^1.0.0", "passport-twitter": "^1.0.2", - "sitemap": "^0.7.4", "request": "^2.49.0", + "sitemap": "^0.7.4", + "strftime": "^0.8.2", "stripe": "^3.0.2", "tumblr.js": "^0.0.4", "twilio": "^1.9.0", diff --git a/public/css/main.less b/public/css/main.less index 1fe4a5b8be..81d9e00777 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -274,4 +274,12 @@ ul { .scroll-lock { overflow: hidden; height: 100%; +} + +.table { + margin-left: -16px; +} + +thead { + font-size: 150%; } \ No newline at end of file diff --git a/views/account/profile.jade b/views/account/profile.jade index 4eaf6f71a9..862668c834 100644 --- a/views/account/profile.jade +++ b/views/account/profile.jade @@ -34,8 +34,184 @@ block content | Update my profile h1 Completed Challenges - ul - + .col-xs-12 + table.table.table-striped + thead + tr + th Challenge + th Date Finished + if cc[0] > 0 + tr + td A One-minute Introduction to Free Code Camp + td=moment(cc[0], 'X').format("MMM DD, YYYY") + if cc[1] > 0 + tr + td Enter the Free Code Camp Chat Room + td=moment(cc[1], 'X').format("MMM DD, YYYY") + if cc[2] > 0 + tr + td Create a Website and Deploy it to the Internet + td=moment(cc[2], 'X').format("MMM DD, YYYY") + if cc[3] > 0 + tr + td Install Github's Atom Text Editor + td=moment(cc[3], 'X').format("MMM DD, YYYY") + if cc[4] > 0 + tr + td Modify and Redeploy Your Website + td=moment(cc[4], 'X').format("MMM DD, YYYY") + if cc[5] > 0 + tr + td Add Dynamic Content to your Website + td=moment(cc[5], 'X').format("MMM DD, YYYY") + if cc[6] > 0 + tr + td Codecademy's HTML & CSS track + td=moment(cc[6], 'X').format("MMM DD, YYYY") + if cc[7] > 0 + tr + td Experiment with HTML and CSS in CodePen + td=moment(cc[7], 'X').format("MMM DD, YYYY") + if cc[8] > 0 + tr + td Codecademy's jQuery track + td=moment(cc[8], 'X').format("MMM DD, YYYY") + if cc[9] > 0 + tr + td Code School's Try jQuery + td=moment(cc[9], 'X').format("MMM DD, YYYY") + if cc[10] > 0 + tr + td Code School's Discover DevTools + td=moment(cc[10], 'X').format("MMM DD, YYYY") + if cc[11] > 0 + tr + td jQuery Exercises + td=moment(cc[11], 'X').format("MMM DD, YYYY") + if cc[12] > 0 + tr + td Customize Bootstrap with Bootswatch + td=moment(cc[12], 'X').format("MMM DD, YYYY") + if cc[13] > 0 + tr + td Inject Life with CSS Transformations + td=moment(cc[13], 'X').format("MMM DD, YYYY") + if cc[14] > 0 + tr + td Codecademy's JavaScript track + td=moment(cc[14], 'X').format("MMM DD, YYYY") + if cc[15] > 0 + tr + td Stanford's Introduction to Computer Science + td=moment(cc[15], 'X').format("MMM DD, YYYY") + if cc[16] > 0 + tr + td Get Help The Hacker Way with RSAP + td=moment(cc[16], 'X').format("MMM DD, YYYY") + if cc[17] > 0 + tr + td Learn Regular Expressions + td=moment(cc[17], 'X').format("MMM DD, YYYY") + if cc[18] > 0 + tr + td Start Your First Pair Programming Session + td=moment(cc[18], 'X').format("MMM DD, YYYY") + if cc[19] > 0 + tr + td Easy Algorithm Scripting Challenges on Coderbyte + td=moment(cc[19], 'X').format("MMM DD, YYYY") + if cc[20] > 0 + tr + td Stanford's Relational Databases Mini-course + td=moment(cc[20], 'X').format("MMM DD, YYYY") + if cc[21] > 0 + tr + td Stanford's SQL Mini-course + td=moment(cc[21], 'X').format("MMM DD, YYYY") + if cc[22] > 0 + tr + td Stanford's JSON Mini-course + td=moment(cc[22], 'X').format("MMM DD, YYYY") + if cc[23] > 0 + tr + td Medium Algorithm Scripting Challenges on Coderbyte + td=moment(cc[23], 'X').format("MMM DD, YYYY") + if cc[24] > 0 + tr + td Build an Interview Question Machine + td=moment(cc[24], 'X').format("MMM DD, YYYY") + if cc[25] > 0 + tr + td Build a Text-based Adventure + td=moment(cc[25], 'X').format("MMM DD, YYYY") + if cc[26] > 0 + tr + td Hard Algorithm Scripting Challenges on Coderbyte + td=moment(cc[26], 'X').format("MMM DD, YYYY") + if cc[27] > 0 + tr + td Code School's Try Git + td=moment(cc[27], 'X').format("MMM DD, YYYY") + if cc[28] > 0 + tr + td Install Node.js + td=moment(cc[28], 'X').format("MMM DD, YYYY") + if cc[29] > 0 + tr + td Clone a Github Repo + td=moment(cc[29], 'X').format("MMM DD, YYYY") + if cc[30] > 0 + tr + td Deploy an app to Heroku + td=moment(cc[30], 'X').format("MMM DD, YYYY") + if cc[31] > 0 + tr + td Code School's Real-time web with Node.JS + td=moment(cc[31], 'X').format("MMM DD, YYYY") + if cc[32] > 0 + tr + td Try MongoDB + td=moment(cc[32], 'X').format("MMM DD, YYYY") + if cc[33] > 0 + tr + td Explore your Network with the LinkedIn API + td=moment(cc[33], 'X').format("MMM DD, YYYY") + if cc[34] > 0 + tr + td Build your first API + td=moment(cc[34], 'X').format("MMM DD, YYYY") + if cc[35] > 0 + tr + td Aggregate Data with Chron Jobs and Screen Scraping + td=moment(cc[35], 'X').format("MMM DD, YYYY") + if cc[36] > 0 + tr + td Code School's Shaping up with Angular.JS + td=moment(cc[36], 'X').format("MMM DD, YYYY") + if cc[37] > 0 + tr + td Reverse Engineer SnapChat + td=moment(cc[37], 'X').format("MMM DD, YYYY") + if cc[38] > 0 + tr + td Reverse Engineer Reddit + td=moment(cc[38], 'X').format("MMM DD, YYYY") + if cc[39] > 0 + tr + td Reverse Engineer Pintrest + td=moment(cc[39], 'X').format("MMM DD, YYYY") + if cc[40] > 0 + tr + td Help a Nonprofit: Team Project + td=moment(cc[40], 'X').format("MMM DD, YYYY") + if cc[41] > 0 + tr + td Help a Nonprofit: Solo Project + td=moment(cc[41], 'X').format("MMM DD, YYYY") + if cc[42] > 0 + tr + td Crack the Coding Interview + td=moment(cc[42], 'X').format("MMM DD, YYYY") h3 Danger Zone button.btn.btn-danger.confirm-deletion span.ion-trash-b diff --git a/views/partials/faq.jade b/views/partials/faq.jade index 1f7fe1b04a..e2cb2d9aa9 100644 --- a/views/partials/faq.jade +++ b/views/partials/faq.jade @@ -36,9 +36,10 @@ ul p.landing-p It takes about 1,000 hours of coding to develop the skills you'll need to get an entry level software engineering job. Many in-person coding bootcamps jam all this into 12 weeks of intensive study. Free Code Camp is fully online, and there will always be other people at your skill level that you can pair program with, so you can learn at your own pace. Here are some example coding schedules: table.table - th Time budgeted - th Hours per week - th Weeks to complete + thead + th Time budgeted + th Hours per week + th Weeks to complete tr.info td Weekends td 10 hours/week