From 918ea56e33b5df762fd4f00af0f0569546d2fb42 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Fri, 15 Jan 2016 00:10:13 -0800 Subject: [PATCH] Add stats to about page --- server/boot/about.js | 37 +++++++++++++++++++++++++++++++ server/boot/randomAPIs.js | 8 ------- server/boot/user.js | 1 + server/views/resources/about.jade | 19 ++++++++++++++++ 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 server/boot/about.js diff --git a/server/boot/about.js b/server/boot/about.js new file mode 100644 index 0000000000..852b5e2bf8 --- /dev/null +++ b/server/boot/about.js @@ -0,0 +1,37 @@ +import dedent from 'dedent'; +import moment from 'moment'; + +import { observeMethod } from '../utils/rx'; + +function numberWithCommas(x) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); +} + +export default function about(app) { + const router = app.loopback.Router(); + const User = app.models.User; + const userCount$ = observeMethod(User, 'count'); + + function showAbout(req, res, next) { + const daysRunning = moment().diff(new Date('10/15/2014'), 'days'); + + userCount$() + .map(camperCount => numberWithCommas(camperCount)) + .doOnNext(camperCount => { + res.render('resources/about', { + camperCount, + daysRunning, + title: dedent` + About our Open Source Community, our social media presence, + and how to contact us`.split('\n').join(' '), + globalCompletedCount: numberWithCommas( + 5612952 + (Math.floor((Date.now() - 1446268581061) / 2000)) + ) + }); + }) + .subscribe(() => {}, next); + } + + router.get('/about', showAbout); + app.use(router); +} diff --git a/server/boot/randomAPIs.js b/server/boot/randomAPIs.js index 12e141cea2..f19686eacc 100644 --- a/server/boot/randomAPIs.js +++ b/server/boot/randomAPIs.js @@ -35,7 +35,6 @@ module.exports = function(app) { router.get('/labs', showLabs); router.get('/stories', showTestimonials); router.get('/all-stories', showAllTestimonials); - router.get('/about', showAbout); router.get('/terms', terms); router.get('/privacy', privacy); router.get('/code-of-conduct', codeOfConduct); @@ -198,13 +197,6 @@ module.exports = function(app) { }); } - function showAbout(req, res) { - res.render('resources/about', { - title: 'About our Open Source Community, our social media presence, ' + - 'and how to contact us' - }); - } - function terms(req, res) { res.render('resources/terms-of-service', { title: 'Terms of Service' diff --git a/server/boot/user.js b/server/boot/user.js index cd64234828..69cb81eaae 100644 --- a/server/boot/user.js +++ b/server/boot/user.js @@ -178,6 +178,7 @@ module.exports = function(app) { req.flash('errors', { msg: `404: We couldn't find path ${ path }` }); + console.log('404'); return res.redirect('/'); } profileUser = profileUser.toJSON(); diff --git a/server/views/resources/about.jade b/server/views/resources/about.jade index 2ad2355cee..265a0f8d30 100644 --- a/server/views/resources/about.jade +++ b/server/views/resources/about.jade @@ -5,6 +5,25 @@ block content br | who learn to code and help nonprofits. .spacer + .row + .col-xs-12.col-sm-10.col-sm-offset-1.col-md-6.col-md-offset-3 + h2 + table.population-table.img-center + tr + td Established:  + td + span.text-primary #{daysRunning}  + | days ago + tr + td Population:    + td + span.text-primary #{camperCount}  + | campers + tr + td Completed:    + td + span.text-primary #{globalCompletedCount}  + | challenges .row .col-xs-12.col-sm-10.col-sm-offset-1.col-md-6.col-md-offset-3