diff --git a/app.js b/app.js index c063783b7a9bd9..d28d804846cebb 100644 --- a/app.js +++ b/app.js @@ -192,6 +192,11 @@ app.get('/jquery-exercises', resourcesController.jqueryExercises); app.get('/live-pair-programming', resourcesController.livePairProgramming); app.get('/javascript-in-your-inbox', resourcesController.javaScriptInYourInbox); app.get('/chromebook', resourcesController.chromebook); +app.get('/deploy-a-website', resourcesController.deployAWebsite); +app.get('/gmail-shortcuts', resourcesController.gmailShortcuts); +app.get('/control-shortcuts', resourcesController.controlShortcuts); +app.get('/control-shortcuts', resourcesController.deployAWebsite); +app.get('/stats', resourcesController.stats); app.get( '/pair-program-with-team-viewer', diff --git a/config/secrets.js b/config/secrets.js index b293c14e941635..67dc4f736ac325 100644 --- a/config/secrets.js +++ b/config/secrets.js @@ -4,6 +4,11 @@ module.exports = { sessionSecret: process.env.SESSION_SECRET, + trello: { + key: process.env.TRELLO_KEY, + secret: process.env.TRELLO_SECRET + }, + mandrill: { user: process.env.MANDRILL_USER, password: process.env.MANDRILL_PASSWORD diff --git a/controllers/resources.js b/controllers/resources.js index 016b3c7f1387bf..e3b6721ac79293 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -1,72 +1,121 @@ var User = require('../models/User'), resources = require('./resources.json'), questions = resources.questions, - steps = resources.steps; + steps = resources.steps, + secrets = require('./../config/secrets') -//NOTE(BERKS): Async, total users may not available before it is used. -var totalUsers = 0; -User.count({}, function(err, count) { - totalUsers = count; -}); +var Client = require('node-rest-client').Client; +client = new Client(); /** * GET / * Resources. */ -//TODO: Stats view + module.exports = { learnToCode: function(req, res) { - res.render('learn-to-code', { + res.render('resources/learn-to-code', { title: 'Learn to Code' }); }, privacy: function privacy(req, res) { - res.render('privacy', { + res.render('resources/privacy', { title: 'Privacy' }); }, - statistics: function statistics(req, res) { - res.render('statistics', { - title: 'Code Camper Statistics' - //totalUsers: totalUsers, - //usersOverTenChallenges: usersOverTenChallenges + stats: function stats(req, res) { + var date1 = new Date("10/15/2014"); + var date2 = new Date(); + var timeDiff = Math.abs(date2.getTime() - date1.getTime()); + var daysRunning = Math.ceil(timeDiff / (1000 * 3600 * 24)); + var nonprofitProjects = client.get('https://trello.com/1/boards/BA3xVpz9/cards?key=' + secrets.trello.key, function(data, response){return data.length;}); + User.count({}, function(err, users) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 2}}, function(err, c2) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 4}}, function(err, c4) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 9}}, function(err, c9) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 19}}, function(err, c19) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 29}}, function(err, c29) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 39}}, function(err, c39) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 49}}, function(err, c49) { if (err) { debug('User err: ', err); next(err); } + User.count({'points': {'$gt': 59}}, function(err, c59) { if (err) { debug('User err: ', err); next(err); } + res.render('resources/stats', { + title: 'Free Code Camp Stats:', + daysRunning: daysRunning, + users: users, + nonprofitProjects: nonprofitProjects, /* can't yet get this to work. Async issue? + Hardcoded value for now and created a Trello card */ + c2: c2, + c4: c4, + c9: c9, + c19: c19, + c29: c29, + c39: c39, + c49: c49, + c59: c59 + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }, + + deployAWebsite: function deployAWebsite(req, res) { + res.render('resources/deploy-a-website', { + title: 'Deploy a Dynamic Website in 7 Minutes' + }); + }, + + gmailShortcuts: function gmailShortcuts(req, res) { + res.render('resources/gmail-shortcuts', { + title: 'These Gmail Shortcuts will save you Hours' + }); + }, + + controlShortcuts: function controlShortcuts(req, res) { + res.render('resources/control-shortcuts', { + title: 'These Control Shortcuts will save you Hours' }); }, chromebook: function chromebook(req, res) { - res.render('chromebook', { + res.render('resources/chromebook', { title: 'Win a Chromebook' }); }, jqueryExercises: function jqueryExercises(req, res) { - res.render('jquery-exercises', { + res.render('resources/jquery-exercises', { title: 'jQuery Exercises' }); }, livePairProgramming: function(req, res) { - res.render('live-pair-programming', { + res.render('resources/live-pair-programming', { title: 'Live Pair Programming' }); }, javaScriptInYourInbox: function(req, res) { - res.render('javascript-in-your-inbox', { + res.render('resources/javascript-in-your-inbox', { title: 'JavaScript in your Inbox' }); }, programmerInterviewQuestionsApp: function(req, res) { - res.render('programmer-interview-questions-app', { + res.render('resources/programmer-interview-questions-app', { title: 'Programmer Interview Questions App' }); }, pairProgramWithTeamViewer: function(req, res) { - res.render('pair-program-with-team-viewer', { + res.render('resources/pair-program-with-team-viewer', { title: 'Challenge: Pair Program with Team Viewer', name: 'Pair Program with Team Viewer', video: '', @@ -77,13 +126,13 @@ module.exports = { }, about: function(req, res) { - res.render('about', { + res.render('resources/about', { title: 'About Free Code Camp and Our Team of Volunteers' }); }, doneWithFirst100Hours: function(req, res) { - res.render('done-with-first-100-hours', { + res.render('resources/done-with-first-100-hours', { title: 'Congratulations on finishing the first 100 hours of Free Code Camp!' }); diff --git a/views/about.jade b/views/about.jade deleted file mode 100644 index 407bc4b6240fc4..00000000000000 --- a/views/about.jade +++ /dev/null @@ -1,5 +0,0 @@ -extends layout -block content - include partials/about-us - br - include partials/faq \ No newline at end of file diff --git a/views/api/aviary.jade b/views/api/aviary.jade deleted file mode 100644 index 8b51f0acad28ca..00000000000000 --- a/views/api/aviary.jade +++ /dev/null @@ -1,47 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-picture-o - | Aviary API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='http://developers.aviary.com/docs/web/setup-guide#constructor', target='_blank') - i.fa.fa-check-square-o - | API Overview - a.btn.btn-primary(href='http://developers.aviary.com/docs/web/setup-guide#saving', target='_blank') - i.fa.fa-save - | Saving Images - a.btn.btn-primary(href='http://developers.aviary.com/docs/web/setup-guide#styling', target='_blank') - i.fa.fa-flask - | CSS Styling - br - p: button.btn.btn-success(onclick='return launchEditor("myimage", "https://31.media.tumblr.com/d4411b4c0b41d9c7a73fbcdb1054cb5c/tumblr_n3fyfbZVud1tsaz7eo1_500.jpg");') - i.fa.fa-magic - | Edit Photo - img#myimage(src='https://31.media.tumblr.com/d4411b4c0b41d9c7a73fbcdb1054cb5c/tumblr_n3fyfbZVud1tsaz7eo1_500.jpg', width=250) - - script(src='http://feather.aviary.com/js/feather.js') - script. - var featherEditor = new Aviary.Feather({ - apiKey: 'c83c98c0da041785', - apiVersion: 3, - theme: 'dark', - tools: 'all', - appendTo: '', - onSave: function(imageID, newURL) { - var img = document.getElementById(imageID); - img.src = newURL; - }, - onError: function(errorObj) { - alert(errorObj.message); - } - }); - function launchEditor(id, src) { - featherEditor.launch({ - image: id, - url: src - }); - return false; - } \ No newline at end of file diff --git a/views/api/clockwork.jade b/views/api/clockwork.jade deleted file mode 100644 index 1bff65240d0228..00000000000000 --- a/views/api/clockwork.jade +++ /dev/null @@ -1,26 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-phone - | Clockwork SMS API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='http://github.com/mediaburst/node-clockwork', target='_blank') - i.fa.fa-check-square-o - | Clockwork Node - a.btn.btn-primary(href='http://www.clockworksms.com/doc/clever-stuff/xml-interface/send-sms/', target='_blank') - i.fa.fa-code-fork - | XML API - - h4 Send a text message - .row - .col-sm-6 - form(role='form', method='POST') - input(type='hidden', name='_csrf', value=_csrf) - .form-group - .input-group - input.form-control(type='text', name='telephone', placeholder='Phone Number (international format)') - span.input-group-btn - button.btn.btn-success(type='submit') Send diff --git a/views/api/facebook.jade b/views/api/facebook.jade deleted file mode 100644 index a316e3e0bc4e9f..00000000000000 --- a/views/api/facebook.jade +++ /dev/null @@ -1,40 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-facebook-square(style='color: #335397') - | Facebook API - .btn-group.btn-group-justified - a.btn.btn-primary(href='https://developers.facebook.com/docs/graph-api/quickstart/', target='_blank') - i.fa.fa-check-square-o - | Quickstart - a.btn.btn-primary(href='https://developers.facebook.com/tools/explorer', target='_blank') - i.fa.fa-facebook - | Graph API Explorer - a.btn.btn-primary(href='https://developers.facebook.com/docs/graph-api/reference/', target='_blank') - i.fa.fa-code-fork - | API Reference - - h3 - i.fa.fa-user - | My Profile - img.thumbnail(src='https://graph.facebook.com/#{me.id}/picture?type=large', width='90', height='90') - h4= me.name - h6 First Name: #{me.first_name} - h6 Last Name: #{me.last_name} - h6 Gender: #{me.gender} - h6 Username: #{me.username} - h6 Link: #{me.link} - h6 Email: #{me.email} - h6 Locale: #{me.locale} - h6 Timezone: #{me.timezone} - - h3 - i.fa.fa-group - | My Friends - .row - for friend in friends - .col-xs-3.col-md-2 - a.thumbnail(href='http://facebook.com/#{friend.id}') - img(src='https://graph.facebook.com/#{friend.id}/picture?width=150&height=150') \ No newline at end of file diff --git a/views/api/foursquare.jade b/views/api/foursquare.jade deleted file mode 100644 index 6f72164a565a09..00000000000000 --- a/views/api/foursquare.jade +++ /dev/null @@ -1,57 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-foursquare - | Foursquare API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='https://developer.foursquare.com/start', target='_blank') - i.fa.fa-check-square-o - | Getting Started - a.btn.btn-primary(href='https://developer.foursquare.com/docs/explore', target='_blank') - i.fa.fa-laptop - | API Console - a.btn.btn-primary(href='https://developer.foursquare.com/docs/', target='_blank') - i.fa.fa-code-fork - | API Endpoints - h3.text-primary Trending Venues - table.table.table-striped.table-bordered - thead - tr - th Name - th.hidden-xs.hidden-sm Category - th.hidden-xs Checkins - th Here Now - tbody - for venue in trendingVenues.venues - tr - td= venue.name - td.hidden-xs.hidden-sm #{venue.categories[0].name} - td.hidden-xs #{venue.stats.checkinsCount} - td= venue.hereNow.count - br - h3.text-primary Venue Detail - p - img(src='#{venueDetail.venue.photos.groups[0].items[0].prefix}150x150#{venueDetail.venue.photos.groups[0].items[0].suffix}') - - .label.label-primary #{venueDetail.venue.name} (#{venueDetail.venue.categories[0].shortName}) - .label.label-success #{venueDetail.venue.location.address}, #{venueDetail.venue.location.city}, #{venueDetail.venue.location.state} - .label.label-warning #{venueDetail.venue.likes.count} likes, #{venueDetail.venue.rating} rating - - h3.text-primary User Checkins - table.table.table-bordered.table-hover - thead - tr - th Name - th Location - th Category - th Checkins - tbody - for checkin in userCheckins.checkins.items - tr - td= checkin.venue.name - td #{checkin.venue.location.address}, #{checkin.venue.location.city}, #{checkin.venue.location.state} - td= checkin.venue.categories[0].shortName - td= checkin.venue.stats.checkinsCount diff --git a/views/api/github.jade b/views/api/github.jade deleted file mode 100644 index e102064840f21a..00000000000000 --- a/views/api/github.jade +++ /dev/null @@ -1,43 +0,0 @@ -extends ../layout - -block content - h2 - i.fa.fa-github - | GitHub API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='http://developer.github.com/guides/getting-started/', target='_blank') - i.fa.fa-check-square-o - | Getting Started - a.btn.btn-primary(href='https://apigee.com/console/github', target='_blank') - i.fa.fa-laptop - | API Console - a.btn.btn-primary(href='http://developer.github.com/v3/', target='_blank') - i.fa.fa-file-text-o - | Documentation - br - .panel.panel-primary - .panel-heading - h3.panel-title Repository Information - .panel-body - .row - .col-xs-4 - img.img-rounded.img-responsive(src='https://github.global.ssl.fastly.net/images/modules/logos_page/Octocat.png') - .col-xs-8 - h4 - a(href='#{repo.html_url}') #{repo.name} - ul.list-inline - li - i.fa.fa-eye-slash - | Subscribers: #{repo.subscribers_count} - li - i.fa.fa-star - | Starred: #{repo.stargazers_count} - li - i.fa.fa-code-fork - | Forks: #{repo.forks_count} - li - i.fa.fa-code - | #{repo.language} - strong DESCRIPTION - p= repo.description diff --git a/views/api/index.jade b/views/api/index.jade deleted file mode 100644 index 0165a8f89bd8cc..00000000000000 --- a/views/api/index.jade +++ /dev/null @@ -1,92 +0,0 @@ -extends ../layout - -block content - h2 API Examples - hr - - .row - .col-sm-4 - .panel.panel-default(style='background-color: #000') - .panel-body - img(src='http://i.imgur.com/2AaBlpf.png', height=40) - a(href='/api/github', style='color: #fff') GitHub - .col-sm-4 - .panel.panel-default(style='background-color: #00abf0') - .panel-body - img(src='http://i.imgur.com/EYA2FO1.png', height=40) - a(href='/api/twitter', style='color: #fff') Twitter - .col-sm-4 - .panel.panel-default(style='background-color: #3b5998') - .panel-body - img(src='http://i.imgur.com/jiztYCH.png', height=40) - a(href='/api/facebook', style='color: #fff') Facebook - .col-sm-4 - .panel.panel-default(style='background-color: #1cafec') - .panel-body - img(src='http://i.imgur.com/PixH9li.png', height=40) - a(href='/api/foursquare', style='color: #fff') Foursquare - .col-sm-4 - .panel.panel-default(style='background-color: #947563') - .panel-body - img(src='http://i.imgur.com/aRc6LUJ.png', height=40) - a(href='/api/instagram', style='color: #fff') Instagram - .col-sm-4 - .panel.panel-default(style='background-color: #d21309') - .panel-body - img(src='http://i.imgur.com/KfZY876.png', height=40) - a(href='/api/lastfm', style='color: #fff') Last.fm - .col-sm-4 - .panel.panel-default(style='background-color: #007bb6') - .panel-body - img(src='http://i.imgur.com/sYmVWAw.png', height=40) - a(href='/api/linkedin', style='color: #fff') LinkedIn - .col-sm-4 - .panel.panel-default(style='background-color: #454442') - .panel-body - img(src='http://i.imgur.com/e3sjmYj.png', height=40) - a(href='/api/nyt', style='color: #fff') New York Times - .col-sm-4 - .panel.panel-default(style='background-color: #000') - .panel-body - img(src='http://i.imgur.com/1xGmKBX.jpg', height=40) - a(href='/api/steam', style='color: #fff') Steam - .col-sm-4 - .panel.panel-default(style='background-color: #3da8e5') - .panel-body - img(src='http://i.imgur.com/w3s2RvW.png', height=40) - a(href='/api/stripe', style='color: #fff') Stripe - .col-sm-4 - .panel.panel-default(style='background-color: #fd0404') - .panel-body - img(src='http://i.imgur.com/mEUd6zM.png', height=40) - a(href='/api/twilio', style='color: #fff') Twilio - .col-sm-4 - .panel.panel-default(style='background-color: #304e6c') - .panel-body - img(src='http://i.imgur.com/rZGQShS.png', height=40) - a(href='/api/tumblr', style='color: #fff') Tumblr - .col-sm-4 - .panel.panel-default(style='background-color: #ff6500') - .panel-body - img(src='http://i.imgur.com/RGCVvyR.png', height=40) - a(href='/api/scraping', style='color: #fff') Web Scraping - .col-sm-4 - .panel.panel-default(style='background-color: #1f93cf') - .panel-body - img(src='http://i.imgur.com/90tl9C8.gif', height=40) - a(href='/api/venmo', style='color: #fff') Venmo - .col-sm-4 - .panel.panel-default(style='background-color: #3d048b') - .panel-body - img(src='http://i.imgur.com/Cl6WJAu.png', height=40) - a(href='/api/yahoo', style='color: #fff') Yahoo - .col-sm-4 - .panel.panel-default(style='background-color: #000') - .panel-body - img(src='http://i.imgur.com/YcdxZ5F.png', height=40) - a(href='/api/clockwork', style='color: #fff') Clockwork SMS - .col-sm-4 - .panel.panel-default(style='background: linear-gradient(to bottom, #1f3d95 0%,#04aade 100%)') - .panel-body - img(src='http://i.imgur.com/npBRwMI.png', height=40) - a(href='/api/aviary', style='color: #fff') Aviary \ No newline at end of file diff --git a/views/api/instagram.jade b/views/api/instagram.jade deleted file mode 100644 index 3b9da37e4e2f86..00000000000000 --- a/views/api/instagram.jade +++ /dev/null @@ -1,70 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-instagram(style='color: #517fa4') - | Instagram API - .btn-group.btn-group-justified - a.btn.btn-primary(href='http://instagram.com/developer/', target='_blank') - i.fa.fa-check-square-o - | Overview - a.btn.btn-primary(href='https://github.com/teleportd/instagram-node', target='_blank') - i.fa.fa-laptop - | Node-Instagram Docs - a.btn.btn-primary(href='http://instagram.com/developer/endpoints/', target='_blank') - i.fa.fa-code-fork - | API Endpoints - - br - p.lead Username Search for - strong richellemead - table.table.table-hover.table-bordered - thead - tr - th Picture - th Username - th Full Name - th Bio - tbody - for user in usernames - tr - td - img(src='#{user.profile_picture}', width='75', height='75') - td= user.username - td= user.full_name - td= user.bio - - hr - p.lead User Search for ID - strong 175948269 - - - .media - a.pull-left(href='http://instagram.com/#{userById.username}') - img.thumbnail(src='#{userById.profile_picture}', width='110', height='110') - .media-body - h4= userById.full_name - p= userById.bio - - hr - p.lead - strong Popular Images - | on Instagram - .row - for image in popularImages - .col-xs-3 - a.thumbnail(href='#{image.link}') - img(src='#{image.images.standard_resolution.url}', height='320px') - - - - hr - p.lead - | My Recent - strong Media - .row - for image in myRecentMedia - .col-xs-3 - a.thumbnail(href='#{image.link}') - img(src='#{image.images.standard_resolution.url}', height='320px') diff --git a/views/api/lastfm.jade b/views/api/lastfm.jade deleted file mode 100644 index 2c57e3e84b6881..00000000000000 --- a/views/api/lastfm.jade +++ /dev/null @@ -1,47 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-play-circle-o(style='color: #db1302') - | Last.fm API - .btn-group.btn-group-justified - a.btn.btn-primary(href='https://github.com/jammus/lastfm-node#lastfm-node', target='_blank') - i.fa.fa-check-square-o - | Last.fm Node Docs - a.btn.btn-primary(href='http://www.last.fm/api/account/create', target='_blank') - i.fa.fa-laptop - | Create API Account - a.btn.btn-primary(href='http://www.last.fm/api', target='_blank') - i.fa.fa-code-fork - | API Endpoints - - h3= artist.name - img.thumbnail(src='#{artist.image}') - - h3 Tags - for tag in artist.tags - span.label.label-primary - i.fa.fa-tag - | #{tag.name} - |  - - h3 Biography - p!= artist.bio - - h3 Top Albums - for album in artist.topAlbums - img(src='#{album}', width=150, height=150) - |  - - h3 Top Tracks - ol - for track in artist.topTracks - li - a(href='#{track.url}') #{track.name} - - h3 Similar Artists - ul.list-unstyled.list-inline - for similarArtist in artist.similar - li - a(href='#{similarArtist.url}') #{similarArtist.name} \ No newline at end of file diff --git a/views/api/linkedin.jade b/views/api/linkedin.jade deleted file mode 100644 index 52932cc6cfbdcf..00000000000000 --- a/views/api/linkedin.jade +++ /dev/null @@ -1,72 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-linkedin-square - | LinkedIn API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='https://github.com/Kuew/node-linkedin', target='_blank') - i.fa.fa-book - | Node LinkedIn Docs - a.btn.btn-primary(href='http://developer.linkedin.com/documents/authentication', target='_blank') - i.fa.fa-check-square-o - | Getting Started - a.btn.btn-primary(href='http://developer.linkedin.com/apis', target='_blank') - i.fa.fa-code-fork - | API Endpoints - - h3.text-primary My LinkedIn Profile - .well.well-sm - .row - .col-sm-12 - .col-sm-2 - br - img.thumbnail(src='#{profile.pictureUrl}') - .col-sm-10 - h3= profile.formattedName - h4= profile.headline - span.text-muted #{profile.location.name} | #{profile.industry} - br - .row - .col-sm-12 - dl.dl-horizontal - dt.text-muted Current - for company in profile.positions.values - if company.isCurrent - dd - strong= company.title - | at - strong #{company.company.name} - dt.text-muted Previous - for company in profile.positions.values - if !company.isCurrent - dd - | #{company.title} - | at - | #{company.company.name} - if profile.educations - dt.text-muted Education - for education in profile.educations.values - dd= education.schoolName - dt.text-muted Recommendations - dd - strong #{profile.numRecommenders} - | recommendation(s) received - dt.text-muted Connections - dd - strong #{profile.numConnections} - | connections - .text-center - small.text-muted= profile.publicProfileUrl - - h3.text-primary LinkedIn Connections - table.table.table-hover.table-striped.table-bordered - tbody - for connection in profile.connections.values - if connection.id != 'private' - tr - td - strong #{connection.firstName} #{connection.lastName} - .text-muted #{connection.headline} diff --git a/views/api/nyt.jade b/views/api/nyt.jade deleted file mode 100644 index fafff4c6ccfb72..00000000000000 --- a/views/api/nyt.jade +++ /dev/null @@ -1,36 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-building-o - | New York Times API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='http://developer.nytimes.com/page', target='_blank') - i.fa.fa-check-square-o - | Overview - a.btn.btn-primary(href='http://prototype.nytimes.com/gst/apitool/index.html', target='_blank') - i.fa.fa-laptop - | API Console - a.btn.btn-primary(href='http://developer.nytimes.com/docs', target='_blank') - i.fa.fa-code-fork - | API Endspoints - - h4 Young Adult Best Sellers - table.table.table-striped.table-bordered - thead - tr - th Rank - th Title - th.hidden-xs Description - th Author - th.hidden-xs ISBN-13 - tbody - for book in books - tr - td= book.rank - td= book.book_details[0].title - td.hidden-xs= book.book_details[0].description - td= book.book_details[0].author - td.hidden-xs= book.book_details[0].primary_isbn13 \ No newline at end of file diff --git a/views/api/scraping.jade b/views/api/scraping.jade deleted file mode 100644 index f877290cb72028..00000000000000 --- a/views/api/scraping.jade +++ /dev/null @@ -1,27 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-hacker-news(style='color: #ff6600') - | Web Scraping - - .btn-group.btn-group-justified - a.btn.btn-primary(href='http://matthewmueller.github.io/cheerio/', target='_blank') - i.fa.fa-info - | Cheerio Docs - a.btn.btn-primary(href='http://vimeo.com/31950192', target='_blank') - i.fa.fa-film - | Cheerio Screencast - - h3 Hacker News Frontpage - table.table.table-condensed - thead - tr - th № - th Title - tbody - each link, index in links - tr - td= index + 1 - td!= link diff --git a/views/api/steam.jade b/views/api/steam.jade deleted file mode 100644 index 994505c1b30484..00000000000000 --- a/views/api/steam.jade +++ /dev/null @@ -1,43 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-steam-square - | Steam Web API - .btn-group.btn-group-justified - a.btn.btn-primary(href='https://developer.valvesoftware.com/wiki/Steam_Web_API', target='_blank') - i.fa.fa-check-square-o - | API Overview - - br - - .alert.alert-info - h4 Steam ID - p Displaying public information for Steam ID: #{playerSummary.steamid}. - - h3 Profile Information - .row - .col-sm-2 - img(src='#{playerSummary.avatarfull}', width='92', height='92') - .col-sm-8 - span.lead #{playerSummary.personaname} - div Account since: #{new Date(playerSummary.timecreated * 1000)} - div Last Online: #{new Date(playerSummary.lastlogoff * 1000)} - div Online Status: - if playerSummary.personastate == 1 - strong.text-success Online - else - strong.text-danger Offline - - h3 #{playerAchievemments.gameName} Achievements - ul.lead.list-unstyled - for achievement in playerAchievemments.achievements - if achievement.achieved - li.text-success= achievement.name - - h3 Owned Games - for game in ownedGames - a(href='http://store.steampowered.com/app/#{game.appid}/') - img.thumbnail(src='http://media.steampowered.com/steamcommunity/public/images/apps/#{game.appid}/#{game.img_logo_url}.jpg' width=92) - diff --git a/views/api/stripe.jade b/views/api/stripe.jade deleted file mode 100644 index 51f463e34fa476..00000000000000 --- a/views/api/stripe.jade +++ /dev/null @@ -1,124 +0,0 @@ -extends ../layout - -block content - .page-header - h2 Stripe API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='https://stripe.com/docs/tutorials/checkout') - i.fa.fa-home - | Stripe Checkout - a.btn.btn-primary(href='https://stripe.com/docs/api', target='_blank') - i.fa.fa-code - | API Reference - a.btn.btn-primary(href='https://manage.stripe.com/account/apikeys', target='_blank') - i.fa.fa-gear - | Get API Keys - - br - - form(method='POST') - input(type='hidden', name='_csrf', value=_csrf) - script( - src='https://checkout.stripe.com/checkout.js', - class='stripe-button', - data-key=publishableKey, - data-image='http://static.tumblr.com/nljhkjv/z0Jlpk23i/logo', - data-name='Hackathon Starter', - data-description='Caramel Macchiato ($3.95)', - data-amount='395') - - h3 - i.fa.fa-credit-card - | Test Cards - p In test mode, you can use these test cards to simulate a successful transaction: - - table.table.table-striped.table-bordered.table-condensed - thead - tr - th Number - th Card type - tbody - tr - td 4242 4242 4242 4242 - td Visa - tr - td 4012 8888 8888 1881 - td Visa - tr - td 5555 5555 5555 4444 - td MasterCard - tr - td 5105 1051 0510 5100 - td MasterCard - tr - td 3782 822463 10005 - td American Express - tr - td 3714 496353 98431 - td American Express - tr - td 6011 1111 1111 1117 - td Discover - tr - td 6011 0009 9013 9424 - td Discover - tr - td 3056 9309 0259 04 - td Diners Club - tr - td 3852 0000 0232 37 - td Diners Club - tr - td 3530 1113 3330 0000 - td JCB - tr - td 3566 0020 2036 0505 - td JCB - - .panel.panel-primary - .panel-heading Stripe Successful Charge Example - .panel-body - p This is the response you will get when customer's card has been charged successfully. - | You could use some of the data below for logging purposes. - pre. - { id: 'ch_103qzW2eZvKYlo2CiYcKs6Sw', - object: 'charge', - created: 1397510564, - livemode: false, - paid: true, - amount: 395, - currency: 'usd', - refunded: false, - card: - { id: 'card_103qzW2eZvKYlo2CJ2Ss4kwS', - object: 'card', - last4: '4242', - type: 'Visa', - exp_month: 11, - exp_year: 2015, - fingerprint: 'Xt5EWLLDS7FJjR1c', - customer: null, - country: 'US', - name: 'sahat@me.com', - address_line1: null, - address_line2: null, - address_city: null, - address_state: null, - address_zip: null, - address_country: null, - cvc_check: 'pass', - address_line1_check: null, - address_zip_check: null }, - captured: true, - refunds: [], - balance_transaction: 'txn_103qzW2eZvKYlo2CNEcJV8SN', - failure_message: null, - failure_code: null, - amount_refunded: 0, - customer: null, - invoice: null, - description: 'sahat@me.com', - dispute: null, - metadata: {}, - statement_description: null } diff --git a/views/api/tumblr.jade b/views/api/tumblr.jade deleted file mode 100644 index e25d1a5a008a54..00000000000000 --- a/views/api/tumblr.jade +++ /dev/null @@ -1,26 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-tumblr-square - | Tumblr API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='http://www.tumblr.com/docs/en/api/v2#overview', target='_blank') - i.fa.fa-check-square-o - | Overview - a.btn.btn-primary(href='https://api.tumblr.com/console', target='_blank') - i.fa.fa-laptop - | API Console - a.btn.btn-primary(href='http://www.tumblr.com/docs/en/api/v2#blog_methods', target='_blank') - i.fa.fa-code-fork - | API Endpoints - - h3.text-primary #{blog.name}'s blog - .btn.btn-xs.btn-primary-outline - i.fa.fa-file-text-o - | #{blog.posts} posts - h4 Latest Photo Post - for photo in photoset - img.item(src='#{photo.original_size.url}') \ No newline at end of file diff --git a/views/api/twilio.jade b/views/api/twilio.jade deleted file mode 100644 index b40e944909f711..00000000000000 --- a/views/api/twilio.jade +++ /dev/null @@ -1,34 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-phone(style='color: #f00') - | Twilio API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='http://twilio.github.io/twilio-node/', target='_blank') - i.fa.fa-check-square-o - | Twilio Node - a.btn.btn-primary(href='https://apigee.com/console/twilio', target='_blank') - i.fa.fa-laptop - | API Console - a.btn.btn-primary(href='https://www.twilio.com/docs/api/rest', target='_blank') - i.fa.fa-code-fork - | REST API - - br - - .row - .col-sm-6 - form(role='form', method='POST') - input(type='hidden', name='_csrf', value=_csrf) - .form-group - label.control-label Number to text - input.form-control(type='text', name='number', autofocus) - .form-group - label.control-label Message - input.form-control(type='text', name='message') - button.btn.btn-default(type='submit') - i.fa.fa-location-arrow - | Send diff --git a/views/api/twitter.jade b/views/api/twitter.jade deleted file mode 100644 index cdb5f4ee95698c..00000000000000 --- a/views/api/twitter.jade +++ /dev/null @@ -1,52 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-twitter(style='color: #4099ff') - | Twitter API - - .btn-group.btn-group-justified - a.btn.btn-success(href='https://github.com/ttezel/twit', target='_blank') - i.fa.fa-file-text-o - | Twit Library Docs - a.btn.btn-success(href='https://dev.twitter.com/docs', target='_blank') - i.fa.fa-check-square-o - | Overview - a.btn.btn-success(href='https://dev.twitter.com/docs/api/1.1', target='_blank') - i.fa.fa-code-fork - | API Endpoints - - br - - .well - h4 Compose new Tweet - form(role='form', method='POST') - input(type='hidden', name='_csrf', value=_csrf) - .form-group - input.form-control(type='text', name='tweet', autofocus) - p.help-block This new Tweet will be posted on your Twitter profile. - button.btn.btn-primary(type='submit') - i.fa.fa-twitter - | Tweet - - br - - .lead Latest - strong #{tweets.length} - | Tweets containing the term - strong nodejs - | in NYC within - strong 5 - | miles radius - - ul.media-list - for tweet in tweets - li.media - a.pull-left(href='#') - - var image = tweet.user.profile_image_url.replace('_normal', ''); - img.media-object(src='#{image}', style='width: 64px; height: 64px;') - .media-body - strong.media-heading #{tweet.user.name} - span.text-muted @#{tweet.user.screen_name} - p= tweet.text \ No newline at end of file diff --git a/views/api/venmo.jade b/views/api/venmo.jade deleted file mode 100644 index 9010b106934fb6..00000000000000 --- a/views/api/venmo.jade +++ /dev/null @@ -1,80 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-money - | Venmo API - - .btn-group.btn-group-justified - a.btn.btn-primary(href='https://developer.venmo.com/docs/quickstart', target='_blank') - i.fa.fa-book - | Quickstart - a.btn.btn-primary(href='https://developer.venmo.com/docs/api-console', target='_blank') - i.fa.fa-laptop - | API Console - a.btn.btn-primary(href='https://developer.venmo.com/docs/endpoints/payments', target='_blank') - i.fa.fa-code-fork - | API Endspoints - - h3 Venmo Profile - .row - .col-sm-2 - img(src='#{profile.user.profile_picture_url}') - .col-sm-8 - .row - .col-sm-6 - strong #{profile.user.display_name} - div Balance: - strong $#{profile.balance} - div Friends: - strong #{profile.user.friends_count} - .col-sm-6 - div Email: - strong #{profile.user.email} - div Phone: - strong #{profile.user.phone} - div ID: - strong #{profile.user.id} - p #{profile.user.about} - - .row - .col-sm-5 - h3 Make Payment - form(role='form', method='POST') - input(type='hidden', name='_csrf', value=_csrf) - .form-group - label.control-label(for='user') Phone, Email or Venmo User ID - input.form-control(type='text', name='user', id='user', placeholder='15555555555', autofocus=true) - .form-group - label.control-label(for='note') Note - input.form-control(type='text', name='note', id='note', placeholder='A message to accompany the payment.') - .form-group - label.control-label(for='amount') Amount - input.form-control(type='text', name='amount', id='amount', placeholder='0.10') - .form-group - button.btn.btn-primary(type='submit') - i.fa.fa-usd - | Send - - h3 Recent Payments - table.table.table-striped.table-condensed.table-bordered - thead - tr - th To - th Amount - th Status - th Date - th Note - tbody - if recentPayments.length - for payment in recentPayments - tr - td= payment.target.phone || payment.target.email || payment.target.user - td $#{payment.amount} - td= payment.status - td= payment.date_created - td= payment.note - else - tr - td(colspan=5) No recent payments. diff --git a/views/api/yahoo.jade b/views/api/yahoo.jade deleted file mode 100644 index f72c670e12155e..00000000000000 --- a/views/api/yahoo.jade +++ /dev/null @@ -1,30 +0,0 @@ -extends ../layout - -block content - .page-header - h2 - i.fa.fa-yahoo(style='color: #7b0099') - | Yahoo API - .btn-group.btn-group-justified - a.btn.btn-primary(href='https://developer.yahoo.com/yql/', target='_blank') - i.fa.fa-check-square-o - | YQL Getting Started - a.btn.btn-primary(href='http://yuilibrary.com/yui/docs/node/', target='_blank') - i.fa.fa-laptop - | YUI on Node.js - a.btn.btn-primary(href='https://developer.yahoo.com/everything.html', target='_blank') - i.fa.fa-code - | Yahoo APIs - - br - p.lead Weather for ZIP Code: - strong 10007 - .alert.alert-info - p It is currently - strong #{condition.temp} - | degrees in - strong #{location.city}, #{location.region} - | . - - h3 YQL Query - pre SELECT * FROM weather.forecast WHERE (location = 10007) \ No newline at end of file diff --git a/views/resources/about.jade b/views/resources/about.jade new file mode 100644 index 00000000000000..6419b4d3b972a7 --- /dev/null +++ b/views/resources/about.jade @@ -0,0 +1,5 @@ +extends ../layout +block content + include ../partials/about-us + br + include ../partials/faq \ No newline at end of file diff --git a/views/chromebook.jade b/views/resources/chromebook.jade similarity index 97% rename from views/chromebook.jade rename to views/resources/chromebook.jade index a16e21477ff265..55da874e84fbf6 100644 --- a/views/chromebook.jade +++ b/views/resources/chromebook.jade @@ -1,4 +1,4 @@ -extends layout +extends ../layout block content .jumbotron.negative-15.text-center h1.hug-top Win a Chromebook diff --git a/views/resources/control-shortcuts.jade b/views/resources/control-shortcuts.jade new file mode 100644 index 00000000000000..e5fc753904c3ec --- /dev/null +++ b/views/resources/control-shortcuts.jade @@ -0,0 +1,22 @@ +extends ../layout +block content + .jumbotron.negative-15.text-center + h1.hug-top Global Control Shortcuts for Mac + h2 These Global Control Shortcuts for Mac will save you hours by speeding up your typing + br + .embed-responsive.embed-responsive-16by9 + iframe.embed-responsive-item(src='//player.vimeo.com/video/107073108') + .text-left + h3 These global shortcuts work everywhere on a Mac: + ul + li Control + F = Forward + li Control + B = Backward + li Control + N = Next Line + li Control + P = Previous Line + li Control + H = Backspace + li Control + D = Delete + li Control + A = Beginning of Line + li Control + E = End of Line + li Control + K = Kill line + a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free) + br diff --git a/views/resources/deploy-a-website.jade b/views/resources/deploy-a-website.jade new file mode 100644 index 00000000000000..8c6a8cac62aff2 --- /dev/null +++ b/views/resources/deploy-a-website.jade @@ -0,0 +1,25 @@ +extends ../layout +block content + .jumbotron.negative-15.text-center + h1.hug-top Deploy a Dynamic Website in 7 Minutes + h2 Here's a fast and easy way to deploy a dynamic website to the internet + br + .embed-responsive.embed-responsive-16by9 + iframe.embed-responsive-item(src='//player.vimeo.com/video/107073108') + .text-left + h3 Use these links: + ul + li + a(href='http://www.atom.io' target='_blank') http://www.atom.io + |   - free text editor + li + a(href='http://www.startbootstrap.com' target='_blank') http://www.startbootstrap.com + |   - free responsive (Bootstrap) templates + li + a(href='http://www.powr.io' target='_blank') http://www.powr.io + |   - great plugins + li + a(href='http://www.bitballoon.com' target='_blank') http://www.bitballoon.com + |   - drag-and-drop deployment + a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free) + br diff --git a/views/done-with-first-100-hours.jade b/views/resources/done-with-first-100-hours.jade similarity index 95% rename from views/done-with-first-100-hours.jade rename to views/resources/done-with-first-100-hours.jade index 38cfbd39f22ce8..a283b1b7f7f66f 100644 --- a/views/done-with-first-100-hours.jade +++ b/views/resources/done-with-first-100-hours.jade @@ -1,4 +1,4 @@ -extends layout +extends ../layout block content .jumbotron.negative-15.text-center h1.hug-top Congratulations on finishing the first 100 hours of Free Code Camp! diff --git a/views/resources/gmail-shortcuts.jade b/views/resources/gmail-shortcuts.jade new file mode 100644 index 00000000000000..045f55c8fc4131 --- /dev/null +++ b/views/resources/gmail-shortcuts.jade @@ -0,0 +1,24 @@ +extends ../layout +block content + .jumbotron.negative-15.text-center + h1.hug-top Gmail Shortcuts + h2 These Gmail Shortcuts will save you hours and help you get to Zero Inbox + br + .embed-responsive.embed-responsive-16by9 + iframe.embed-responsive-item(src='//player.vimeo.com/video/115194016') + .text-left + h3 The shortcuts: + ul + li j - move down + li k - move up + li o - open + li r - reply + li a - reply all + li f - forward + li c - compose + li x - select + li e - archive + li ! - mark spam + li z - undo + a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free) + br diff --git a/views/javascript-in-your-inbox.jade b/views/resources/javascript-in-your-inbox.jade similarity index 97% rename from views/javascript-in-your-inbox.jade rename to views/resources/javascript-in-your-inbox.jade index fdd64ba8a3d5a8..1cdf3192db836f 100644 --- a/views/javascript-in-your-inbox.jade +++ b/views/resources/javascript-in-your-inbox.jade @@ -1,4 +1,4 @@ -extends layout +extends ../layout block content .jumbotron.negative-15.text-center h1.hug-top Win a Chromebook diff --git a/views/jquery-exercises.jade b/views/resources/jquery-exercises.jade similarity index 99% rename from views/jquery-exercises.jade rename to views/resources/jquery-exercises.jade index deebfc4a6436a5..6f9580f2dd53a7 100644 --- a/views/jquery-exercises.jade +++ b/views/resources/jquery-exercises.jade @@ -1,4 +1,4 @@ -extends layout +extends ../layout block content script. $(document).ready(function() { diff --git a/views/learn-to-code.jade b/views/resources/learn-to-code.jade similarity index 59% rename from views/learn-to-code.jade rename to views/resources/learn-to-code.jade index 45943c888fa3e1..1f02fc5205891c 100644 --- a/views/learn-to-code.jade +++ b/views/resources/learn-to-code.jade @@ -1,5 +1,5 @@ -extends layout +extends ../layout block content .text-center h2.big-text Learn to Code - include partials/faq \ No newline at end of file + include ../partials/faq \ No newline at end of file diff --git a/views/live-pair-programming.jade b/views/resources/live-pair-programming.jade similarity index 96% rename from views/live-pair-programming.jade rename to views/resources/live-pair-programming.jade index ba77ace82b109f..fe85d8297c9ff9 100644 --- a/views/live-pair-programming.jade +++ b/views/resources/live-pair-programming.jade @@ -1,4 +1,4 @@ -extends layout +extends ../layout block content .jumbotron.negative-15.text-center h1.hug-top Live Pair Programming diff --git a/views/pair-program-with-team-viewer.jade b/views/resources/pair-program-with-team-viewer.jade similarity index 95% rename from views/pair-program-with-team-viewer.jade rename to views/resources/pair-program-with-team-viewer.jade index 3e512b7379d99c..dca54e789732d0 100644 --- a/views/pair-program-with-team-viewer.jade +++ b/views/resources/pair-program-with-team-viewer.jade @@ -1,4 +1,4 @@ -extends ./layout +extends ../layout block content .row .col-sm-12.col-md-8.col-xs-12 @@ -24,4 +24,4 @@ block content a(href="https://reddit.com/r/freecodecamp", target="_blank") Subreddit | . .col-sm-12.col-md-4.col-xs-12 - include ./partials/challenges \ No newline at end of file + include ../partials/challenges \ No newline at end of file diff --git a/views/privacy.jade b/views/resources/privacy.jade similarity index 99% rename from views/privacy.jade rename to views/resources/privacy.jade index 9faf74e04e8b15..5ee3d828b59bce 100644 --- a/views/privacy.jade +++ b/views/resources/privacy.jade @@ -1,4 +1,4 @@ -extends layout +extends ../layout block content .jumbotron h2.big-text Privacy diff --git a/views/programmer-interview-questions-app.jade b/views/resources/programmer-interview-questions-app.jade similarity index 99% rename from views/programmer-interview-questions-app.jade rename to views/resources/programmer-interview-questions-app.jade index 966e8ba1e9b749..14dbada3723f3a 100644 --- a/views/programmer-interview-questions-app.jade +++ b/views/resources/programmer-interview-questions-app.jade @@ -1,4 +1,4 @@ -extends layout +extends ../layout block content script. $(document).ready(function () { diff --git a/views/resources/stats.jade b/views/resources/stats.jade new file mode 100644 index 00000000000000..372958e3081865 --- /dev/null +++ b/views/resources/stats.jade @@ -0,0 +1,70 @@ +extends ../layout +block content + .jumbotron.negative-15.text-center + h1.hug-top Free Code Camp Stats + .row + .col-xs-6.text-right + h2 Days since we Launched: + .col-xs-6.text-left + h2 + = daysRunning + .row + .col-xs-6.text-right + h2 Nonprofit Projects: + .col-xs-6.text-left + h2 + a(href="https://trello.com/1/boards/BA3xVpz9") 14 + .row + .col-xs-6.text-right + h2 Total users: + .col-xs-6.text-left + h2 + = users + .row + .col-xs-6.text-right + h2 Users with > 2 Points: + .col-xs-6.text-left + h2 + = c2 + .row + .col-xs-6.text-right + h2 Users with > 4 Points: + .col-xs-6.text-left + h2 + = c4 + .row + .col-xs-6.text-right + h2 Users with > 9 Points: + .col-xs-6.text-left + h2 + = c9 + .row + .col-xs-6.text-right + h2 Users with > 19 Points: + .col-xs-6.text-left + h2 + = c19 + .row + .col-xs-6.text-right + h2 Users with > 29 Points: + .col-xs-6.text-left + h2 + = c29 + .row + .col-xs-6.text-right + h2 Users with > 39 Points: + .col-xs-6.text-left + h2 + = c39 + .row + .col-xs-6.text-right + h2 Users with > 49 Points: + .col-xs-6.text-left + h2 + = c49 + .row + .col-xs-6.text-right + h2 Users with > 59 Points: + .col-xs-6.text-left + h2 + = c59 \ No newline at end of file