From c50ce70749a4349df7a3552fcf068eaa2b4b3acd Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Sun, 26 Apr 2015 12:46:48 -0700 Subject: [PATCH 1/4] minor updates to coursewares and field guides --- seed_data/coursewares.json | 2 +- seed_data/field-guides.json | 120 +++++++----------------------------- 2 files changed, 24 insertions(+), 98 deletions(-) diff --git a/seed_data/coursewares.json b/seed_data/coursewares.json index 1f71a32e70..5667196e77 100644 --- a/seed_data/coursewares.json +++ b/seed_data/coursewares.json @@ -821,9 +821,9 @@ "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", "Here are the user stories you must enable, and optional bonus user stories:", "User Story: As a user, I can play a game of Tic Tac Toe with the computer.", + "Bonus User Story: As a user, I can never actually win against the computer - at best I can tie.", "Bonus User Story: As a user, my game will reset as soon as it's over so I can play again.", "Bonus User Story: As a user, I can choose whether I want to play as X or O.", - "Hint: Here's an example call to Twitch.tv's JSON API: https://api.twitch.tv/kraken/streams/freecodecamp.", "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.Click here then add your link to your tweet's text" ], diff --git a/seed_data/field-guides.json b/seed_data/field-guides.json index 5b40a05a0c..e8ee3ba70e 100644 --- a/seed_data/field-guides.json +++ b/seed_data/field-guides.json @@ -258,6 +258,29 @@ "" ] }, + { + "_id": "bd7159d9c442eddfaeb5bdef", + "name": "What does Register mean?", + "description": [ + "
", + "

", + "
", + "
", + "

These global shortcuts work everywhere on a Mac:", + "
    ", + "
  • Control + F = Forward
  • ", + "
  • Control + B = Backward
  • ", + "
  • Control + N = Next Line
  • ", + "
  • Control + P = Previous Line
  • ", + "
  • Control + H = Backspace
  • ", + "
  • Control + D = Delete
  • ", + "
  • Control + A = Beginning of Line
  • ", + "
  • Control + E = End of Line
  • ", + "
  • Control + K = Kill line
  • ", + "
", + "

" + ] + }, { "_id": "bd7158d9c445eddfaeb5bdef", "name": "Gmail Zero Inbox Shortcuts", @@ -370,103 +393,6 @@ "
" ] }, - { - "_id": "bd7158d9c448eddfaeb5bdef", - "name": "Live Stream Pair Programming on Twitch.tv", - "description": [ - "
", - "

Live Pair Programming

", - "

", - "

Watch the live stream below or on our  Twitch.tv channel.

", - "
", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - "

Previous Live Pair Programming Sessions

", - "
", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/_BErpDdmBOw

", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/Fn9HMn79KH0

", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/S7iRBZJwOAs

", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/BHNRg39ZblE

", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/YDfkHlDmehA

", - "
", - " ", - " ", - " ", - "
" - ] - }, - { - "_id": "bd7158d9c449eddfaeb5bdef", - "name": "Nodeschool Challenges", - "description": [ - "

Learn Node.js, NPM, Express.js, and advanced JavaScript like Functional Programming and Promises


", - "
", - " ", - "
", - "
", - "

Here are the NodeSchool courses you should complete:", - "
    ", - "
  1. NodeSchool.io's LearnYouNode course
  2. ", - "
  3. NodeSchool.io's Learn-to-NPM course
  4. ", - "
  5. NodeSchool.io's Express.js course
  6. ", - "
  7. NodeSchool.io's Functional Programming in JavaScript course
  8. ", - "
  9. NodeSchool.io's Promise It Won't Hurt Promises course
  10. ", - "
", - "

", - "

" - ] - }, - { - "_id": "bd7158d9c450eddfaeb5bdef", - "name": "Nonprofit Project Instructions", - "description": [ - "
", - "

It's time to apply what you've learned here at Free Code Camp.

", - "

By the end of this process, you'll have a portfolio of live apps being used by real people.

", - "

Please do the following immediately:

", - "

", - "
    ", - "
  1. Complete this form:  http://goo.gl/forms/f61dLt67t8.
  2. ", - "
  3. Read this document, which will answer many questions you may have about our nonprofit projects:  http://freecodecamp.com/field-guide/guide-to-our-nonprofit-projects.
  4. ", - "
  5. We'll send you an invite to our Nonprofit Projects Trello board. Once we do, go there and add yourself to at least 3 nonprofit projects that interest you.
  6. ", - "
  7. Finish any unfinished Bonfire challenges. These challenges serve as the Free Code Camp \"exit test\". You must complete these before you can start working on nonprofit projects. If you completed CoderByte or CodeWars challenges instead of Bonfire, email us and we'll take a look: team@freecodecamp.com.
  8. ", - "
", - "

Please email us if you have further questions:  team@freecodecamp.com.

", - "", - "
" - ] - }, { "_id": "bd7158d9c451eddfaeb5bded", "name": "Bonfire Style Guide", From fd456ec9be1897a5410383311afae8df7e023d90 Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Mon, 27 Apr 2015 16:17:29 -0700 Subject: [PATCH 2/4] make new landing pages and forms for project managers and nonprofits --- app.js | 60 ++++--------- controllers/contact.js | 78 ---------------- controllers/nonprofits.js | 6 -- controllers/resources.js | 24 +++++ views/contact/done-with-first-100-hours.jade | 29 ------ views/contact/nonprofits.jade | 90 ------------------- ...already-benefiting-from-your-services.jade | 12 --- .../are-you-with-a-registered-nonprofit.jade | 12 --- views/nonprofits/home.jade | 83 ----------------- .../how-can-free-code-camp-help-you.jade | 33 ------- views/nonprofits/in-exchange-we-ask.jade | 17 ---- views/nonprofits/link-us-to-your-website.jade | 14 --- views/nonprofits/ok-with-javascript.jade | 12 --- views/nonprofits/tell-us-your-email.jade | 14 --- views/nonprofits/tell-us-your-name.jade | 13 --- .../what-does-your-nonprofit-do.jade | 28 ------ ...roject-application-has-been-submitted.jade | 6 -- views/resources/nonprofits-form.jade | 28 ++++++ views/resources/nonprofits.jade | 55 ++++++++++++ .../pmi-acp-agile-project-managers-form.jade | 29 ++++++ .../pmi-acp-agile-project-managers.jade | 55 ++++++++++++ 21 files changed, 209 insertions(+), 489 deletions(-) delete mode 100644 controllers/contact.js delete mode 100644 views/contact/done-with-first-100-hours.jade delete mode 100644 views/contact/nonprofits.jade delete mode 100644 views/nonprofits/are-there-people-that-are-already-benefiting-from-your-services.jade delete mode 100644 views/nonprofits/are-you-with-a-registered-nonprofit.jade delete mode 100644 views/nonprofits/home.jade delete mode 100644 views/nonprofits/how-can-free-code-camp-help-you.jade delete mode 100644 views/nonprofits/in-exchange-we-ask.jade delete mode 100644 views/nonprofits/link-us-to-your-website.jade delete mode 100644 views/nonprofits/ok-with-javascript.jade delete mode 100644 views/nonprofits/tell-us-your-email.jade delete mode 100644 views/nonprofits/tell-us-your-name.jade delete mode 100644 views/nonprofits/what-does-your-nonprofit-do.jade delete mode 100644 views/nonprofits/your-nonprofit-project-application-has-been-submitted.jade create mode 100644 views/resources/nonprofits-form.jade create mode 100644 views/resources/nonprofits.jade create mode 100644 views/resources/pmi-acp-agile-project-managers-form.jade create mode 100644 views/resources/pmi-acp-agile-project-managers.jade diff --git a/app.js b/app.js index 30df332f22..df9bcc4c61 100755 --- a/app.js +++ b/app.js @@ -39,7 +39,6 @@ var express = require('express'), homeController = require('./controllers/home'), resourcesController = require('./controllers/resources'), userController = require('./controllers/user'), - contactController = require('./controllers/contact'), nonprofitController = require('./controllers/nonprofits'), bonfireController = require('./controllers/bonfire'), coursewareController = require('./controllers/courseware'), @@ -263,6 +262,24 @@ app.get('/chat', resourcesController.chat); app.get('/twitch', resourcesController.twitch); +// Agile Project Manager Onboarding + +app.get('/pmi-acp-agile-project-managers', resourcesController.agileProjectManagers); + +app.get('/agile', function(req, res) { + res.redirect(301, '/pmi-acp-agile-project-managers'); +}); + +app.get('/pmi-acp-agile-project-managers-form', resourcesController.agileProjectManagersForm); + +// Nonprofit Onboarding + +app.get('/nonprofits', resourcesController.nonprofits); + +app.get('/nonprofits-form', resourcesController.nonprofitsForm); + + + app.get('/map', challengeMapController.challengeMap); app.get('/live-pair-programming', function(req, res) { @@ -330,59 +347,18 @@ app.get('/email-signin', userController.getEmailSignin); app.post('/email-signup', userController.postEmailSignup); app.post('/email-signin', userController.postSignin); -app.get('/nonprofits', contactController.getNonprofitsForm); -app.post('/nonprofits', contactController.postNonprofitsForm); /** * Nonprofit Project routes. */ -app.get('/nonprofits', nonprofitController.nonprofitsHome); - app.get('/nonprofits/directory', nonprofitController.nonprofitsDirectory); -app.get('/nonprofits/are-you-with-a-registered-nonprofit', nonprofitController.areYouWithARegisteredNonprofit); - -app.get('/nonprofits/are-there-people-that-are-already-benefiting-from-your-services', nonprofitController.areTherePeopleThatAreAlreadyBenefitingFromYourServices); - -app.get('/nonprofits/in-exchange-we-ask', nonprofitController.inExchangeWeAsk); - -app.get('/nonprofits/ok-with-javascript', nonprofitController.okWithJavaScript); - -app.get('/nonprofits/how-can-free-code-camp-help-you', nonprofitController.howCanFreeCodeCampHelpYou); - -app.get('/nonprofits/what-does-your-nonprofit-do', nonprofitController.whatDoesYourNonprofitDo); - -app.get('/nonprofits/link-us-to-your-website', nonprofitController.linkUsToYourWebsite); - -app.get('/nonprofits/tell-us-your-name', nonprofitController.tellUsYourName); - -app.get('/nonprofits/tell-us-your-email', nonprofitController.tellUsYourEmail); - -app.get('/nonprofits/your-nonprofit-project-application-has-been-submitted', nonprofitController.yourNonprofitProjectApplicationHasBeenSubmitted); - -app.get('/nonprofits/other-solutions', nonprofitController.otherSolutions); - -app.get('/nonprofits/getNonprofitList', nonprofitController.showAllNonprofits); - -app.get('/nonprofits/interested-in-nonprofit/:nonprofitName', nonprofitController.interestedInNonprofit); - app.get( '/nonprofits/:nonprofitName', nonprofitController.returnIndividualNonprofit ); -app.get( - '/done-with-first-100-hours', - passportConf.isAuthenticated, - contactController.getDoneWithFirst100Hours -); -app.post( - '/done-with-first-100-hours', - passportConf.isAuthenticated, - contactController.postDoneWithFirst100Hours -); - app.post( '/update-progress', passportConf.isAuthenticated, diff --git a/controllers/contact.js b/controllers/contact.js deleted file mode 100644 index 1a959936c1..0000000000 --- a/controllers/contact.js +++ /dev/null @@ -1,78 +0,0 @@ -var nodemailer = require('nodemailer'), - debug = require('debug')('freecc:cntr:contact'), - secrets = require('../config/secrets'); - -var transporter = nodemailer.createTransport({ - service: 'Mandrill', - auth: { - user: secrets.mandrill.user, - pass: secrets.mandrill.password - } -}); - -module.exports = { - /** - * GET /contact - * Contact form page. - */ - - getNonprofitsForm: function(req, res) { - res.render('contact/nonprofits', { - title: 'Free Code Work for Nonprofits Project Submission Page' - }); - }, - - /** - * POST /contact - * Send a contact form via Nodemailer. - */ - - postNonprofitsForm: function(req, res) { - var mailOptions = { - to: 'team@freecodecamp.com', - name: req.body.name, - from: req.body.email, - subject: 'CodeNonprofit Project Idea from ' + req.body.name, - text: req.body.message - }; - - transporter.sendMail(mailOptions, function (err) { - if (err) { - req.flash('errors', {msg: err.message}); - return res.redirect('/nonprofits'); - } - req.flash('success', {msg: 'Email has been sent successfully!'}); - res.redirect('/nonprofits'); - }); - }, - - getDoneWithFirst100Hours: function(req, res) { - if (req.user.points >= 53) { - res.render('contact/done-with-first-100-hours', { - title: 'Congratulations on finishing the first 100 hours of Free Code Camp!' - }); - } else { - req.flash('errors', {msg: 'Hm... have you finished all the challenges?'}); - res.redirect('/'); - } - }, - - postDoneWithFirst100Hours: function(req, res) { - var mailOptions = { - to: 'team@freecodecamp.com', - name: 'Completionist', - from: req.body.email, - subject: 'Camper at ' + req.body.email + ' has completed the first 100 hours', - text: '' - }; - - transporter.sendMail(mailOptions, function (err) { - if (err) { - req.flash('errors', {msg: err.message}); - return res.redirect('/done-with-first-100-hours'); - } - req.flash('success', {msg: 'Email has been sent successfully!'}); - res.redirect('/nonprofit-project-instructions'); - }); - } -}; \ No newline at end of file diff --git a/controllers/nonprofits.js b/controllers/nonprofits.js index d3b824cf3e..70a8c75366 100644 --- a/controllers/nonprofits.js +++ b/controllers/nonprofits.js @@ -6,12 +6,6 @@ var async = require('async'), debug = require('debug')('freecc:cntr:nonprofits'), R = require('ramda'); -exports.nonprofitsHome = function(req, res) { - res.render('nonprofits/home', { - title: 'A guide to our Nonprofit Projects' - }); -}; - exports.nonprofitsDirectory = function(req, res) { Nonprofit.find({estimatedHours: { $gt: 0 } }, function(err, nonprofits) { if (err) { diff --git a/controllers/resources.js b/controllers/resources.js index 29e38c67c8..dada649cbf 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -155,6 +155,30 @@ module.exports = { } }, + nonprofits: function nonprofits(req, res) { + res.render('resources/nonprofits', { + title: 'A guide to our Nonprofit Projects' + }); + }, + + nonprofitsForm: function nonprofitsForm(req, res) { + res.render('resources/nonprofits-form', { + title: 'A guide to our Nonprofit Projects' + }); + }, + + agileProjectManagers: function agileProjectManagers(req, res) { + res.render('resources/pmi-acp-agile-project-managers', { + title: 'Get Agile Project Management Experience for the PMI-ACP' + }); + }, + + agileProjectManagersForm: function agileProjectManagersForm(req, res) { + res.render('resources/pmi-acp-agile-project-managers-form', { + title: 'Get Agile Project Management Experience for the PMI-ACP' + }); + }, + twitch: function twitch(req, res) { res.render('resources/twitch', { title: "Enter Free Code Camp's Chat Rooms" diff --git a/views/contact/done-with-first-100-hours.jade b/views/contact/done-with-first-100-hours.jade deleted file mode 100644 index 070af7a11e..0000000000 --- a/views/contact/done-with-first-100-hours.jade +++ /dev/null @@ -1,29 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.animated.lightSpeedIn Congratulations! - .animated.fadeIn.delay-2 - h2 You've completed the first 100 hours of Free Code Camp! - .animated.fadeIn.delay-4 - h3 Now you're ready to continue your learning by building solutions for nonprofits! - h3 First, please enter your email below. - br - form.form-horizontal(role='form', action="/done-with-first-100-hours/", method='POST', novalidate='novalidate', name='doneWithFirst100HoursForm') - input(type='hidden', name='_csrf', value=_csrf) - .form-group - label(class='col-sm-3 control-label', for='email') Your email * - .col-sm-8 - input.form-control(type='text', name='email', id='email', autocomplete="off", ng-model='email', required='required', ng-keypress='') - .col-sm-8.col-sm-offset-3(ng-cloak, ng-show="doneWithFirst100HoursForm.$error.email && !doneWithFirst100HoursForm.email.$pristine") - alert(type='danger') - span.ion-close-circled - | Please enter a valid email format. - .col-sm-8.col-sm-offset-3(ng-cloak, ng-show="doneWithFirst100HoursForm.email.$invalid && doneWithFirst100HoursForm.email.$error.required && !doneWithFirst100HoursForm.email.$pristine") - alert(type='danger') - span.ion-close-circled(id='#email-error'). - Your email is required. - .form-group - .col-sm-offset-2.col-sm-8 - button.btn.btn-primary(type='submit', ng-disabled='doneWithFirst100HoursForm.$invalid') - span.ion-paper-airplane - | Submit \ No newline at end of file diff --git a/views/contact/nonprofits.jade b/views/contact/nonprofits.jade deleted file mode 100644 index 1d42827702..0000000000 --- a/views/contact/nonprofits.jade +++ /dev/null @@ -1,90 +0,0 @@ -extends ../layout - -block content - .jumbotron - .text-center - h1.nonprofit-landing.hug-top Get pro bono code for your nonprofit - .big-break - h2 Our process: - .row - .col-xs-12.col-sm-12.col-md-4 - h3.nowrap Your idea - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', title='Get great references and connections to help you get a job') - p.landing-p You tell us how we can help you. - .col-xs-12.col-sm-12.col-md-4 - h3.nowrap Our team - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg.gz', title='Build a portfolio of apps for nonprofits') - p.landing-p We'll hand pick developers and a project manager. - .col-xs-12.col-sm-12.col-md-4 - h3.nowrap Your solution - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_connect.svg.gz', title='Help nonprofits') - p.landing-p Together we'll set milestones and complete your project. - .big-break - h2 Solutions we can help you build: - .text-center.negative-35 - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-android-globe - h2.black-text Websites - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-card - h2.black-text Donation Systems - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-android-calendar - h2.black-text Volunteer Systems - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-ios-box - h2.black-text Inventory Systems - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-university - h2.black-text E-learning Platforms - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-ios-list - h2.black-text Web Forms - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-ios-people - h2.black-text Community Tools - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-settings - h2.black-text ...and other tools - br - br - .big-break - - script. - challengeName = 'Home' - .big-break - h3 Fill in this form. We'll get back to you within 48 hours. - h4 - form.form-horizontal(role='form', action="/nonprofits/", method='POST', novalidate='novalidate', name='nonprofitForm') - input(type='hidden', name='_csrf', value=_csrf) - .form-group - label(class='col-sm-2 control-label', for='name') Your name * - .col-sm-8 - input.form-control(type='text', name='name', id='name', autocomplete="off", ng-model='name', required='required') - .col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.name.$invalid && nonprofitForm.name.$error.required && !nonprofitForm.name.$pristine") - alert(type='danger') - span.ion-close-circled(id='#name-error') - | Your name is required. - .form-group - label(class='col-sm-2 control-label', for='email') Your email * - .col-sm-8 - input.form-control(type='text', name='email', id='email', autocomplete="off", ng-model='email', required='required') - .col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.email.$invalid && nonprofitForm.email.$error.required && !nonprofitForm.email.$pristine") - alert(type='danger') - span.ion-close-circled(id='#email-error'). - Your email is required. - .form-group - label(class='col-sm-2 control-label', for='message') Briefly describe what problem you need to solve, and for whom. * - .col-sm-8 - textarea.form-control(type='text', name='message', id='message', rows='7', autocomplete="off", ng-model='message', required='required') - .col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.message.$invalid && nonprofitForm.message.$error.required && !nonprofitForm.message.$pristine") - alert(type='danger') - span.ion-close-circled(id='#message-error') - | Your message is required. - .form-group - .col-sm-offset-2.col-sm-8 - button.btn.btn-primary(type='submit', ng-disabled='nonprofitForm.$invalid') - span.ion-paper-airplane - | Submit - script. - var challengeName = 'Non-profit Interest' \ No newline at end of file diff --git a/views/nonprofits/are-there-people-that-are-already-benefiting-from-your-services.jade b/views/nonprofits/are-there-people-that-are-already-benefiting-from-your-services.jade deleted file mode 100644 index 5f82c3c82b..0000000000 --- a/views/nonprofits/are-there-people-that-are-already-benefiting-from-your-services.jade +++ /dev/null @@ -1,12 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 We build solutions for nonprofits who are already serving a need. Are there people who already benefit from your services? - .spacer - .row - .col-xs-6 - a.btn.btn-primary.btn-big.btn-block(href='/nonprofits/ok-with-javascript') Yes - .col-xs-6 - a.btn.btn-warning.btn-big.btn-block(href='/nonprofits/other-solutions') No \ No newline at end of file diff --git a/views/nonprofits/are-you-with-a-registered-nonprofit.jade b/views/nonprofits/are-you-with-a-registered-nonprofit.jade deleted file mode 100644 index 4dc9a6e639..0000000000 --- a/views/nonprofits/are-you-with-a-registered-nonprofit.jade +++ /dev/null @@ -1,12 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 Do you represent a nonprofit organization that is registered with your government? - .spacer - .row - .col-xs-6 - a.btn.btn-primary.btn-big.btn-block(href='/nonprofits/are-there-people-that-are-already-benefiting-from-your-services') Yes - .col-xs-6 - a.btn.btn-warning.btn-big.btn-block(href='/nonprofits/other-solutions') No \ No newline at end of file diff --git a/views/nonprofits/home.jade b/views/nonprofits/home.jade deleted file mode 100644 index b76a306f25..0000000000 --- a/views/nonprofits/home.jade +++ /dev/null @@ -1,83 +0,0 @@ -extends ../layout -block content - .jumbotron - .text-center - h2.nonprofit-landing.hug-top We'll code for your nonprofit, pro bono - .big-break - h2 Some of our success stories - .row - .col-xs-12.col-sm-12.col-md-4 - img.img-responsive.testimonial-image.img-center(src="https://s3.amazonaws.com/freecodecamp/testimonial-jen.jpg", alt="@jenthebest's testimonial image") - .testimonial-copy Getting back on track with Free Code Camp and committing to a new career in 2015! - h3 - @jenbestyoga - .col-xs-12.col-sm-12.col-md-4 - img.img-responsive.testimonial-image.img-center(src="https://s3.amazonaws.com/freecodecamp/testimonial-tate.jpg", alt="@TateThurston's testimonial image") - .testimonial-copy Just built my company's website with skills I've learned from Free Code Camp! - h3 - @TateThurston - .col-xs-12.col-sm-12.col-md-4 - img.img-responsive.testimonial-image.img-center(src="https://s3.amazonaws.com/freecodecamp/testimonial-cynthia.jpg", alt="@cynthialanel's testimonial image") - .testimonial-copy I'm currently working through Free Code Camp to improve my JavaScript. The community is very welcoming! - h3 - @cynthialanel - .big-break - a.btn.btn-cta.signup-btn(href="/nonprofits/are-you-with-a-registered-nonprofit") Get pro bono help for my nonprofit - .big-break - h2 Our process - .row - .col-xs-12.col-sm-12.col-md-4 - h3.nowrap Your idea - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', title='Get great references and connections to help you get a job') - p.landing-p You tell us how we can help you. - .col-xs-12.col-sm-12.col-md-4 - h3.nowrap Our team - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg.gz', title='Build a portfolio of apps for nonprofits') - p.landing-p We'll hand pick developers and a project manager. - .col-xs-12.col-sm-12.col-md-4 - h3.nowrap Your solution - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_connect.svg.gz', title='Help nonprofits') - p.landing-p Together we'll set milestones and complete your project. - .big-break - h2 Solutions we can help you build: - .text-center.negative-35 - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-android-globe - h2.black-text Websites - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-card - h2.black-text Donation Systems - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-android-calendar - h2.black-text Volunteer Systems - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-ios-box - h2.black-text Inventory Systems - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-university - h2.black-text E-learning Platforms - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-ios-list - h2.black-text Web Forms - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-ios-people - h2.black-text Community Tools - .col-xs-12.col-sm-12.col-md-3 - .landing-skill-icon.ion-settings - h2.black-text ...and other tools - br - br - .big-break - h2 Why you should join our community right now: - h3.col-xs-offset-0.col-sm-offset-1 - ul.text-left - li.ion-code   We're thousands of professionals, all learning to code together - li.ion-code   We're building projects for dozens of nonprofits - li.ion-code   Our community is 100% free and open source - li.ion-code   You'll learn Full Stack JavaScript and become a Software Engineer - li.ion-code   You'll work through our focused, interactive courses and tutorials - li.ion-code   You'll learn to code at your own pace, in your browser or on your phone - li.ion-code   You'll become qualified for thousands of jobs currently going unfilled - li.ion-code   You can get help in real time from our community chat rooms and forum - li.ion-code   We all share one common goal: to boost our careers with code - .big-break - a.btn.btn-cta.signup-btn(href="/nonprofits/are-you-with-a-registered-nonprofit") Get pro bono help for my nonprofit - script. - challengeName = 'Home' \ No newline at end of file diff --git a/views/nonprofits/how-can-free-code-camp-help-you.jade b/views/nonprofits/how-can-free-code-camp-help-you.jade deleted file mode 100644 index 8c9b9678a5..0000000000 --- a/views/nonprofits/how-can-free-code-camp-help-you.jade +++ /dev/null @@ -1,33 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 How can Free Code Camp help you? - .text-left.form-inline - h3.col-xs-12.col-sm-offset-5.checkbox-table - .col-xs-12 - input.checkbox(type='checkbox', id='website') - label.ion-android-globe   Websites - .col-xs-12 - input.checkbox(type='checkbox', id='donation') - label.ion-card   Donation Systems - .col-xs-12 - input.checkbox(type='checkbox', id='volunteer') - label.ion-android-calendar   Volunteer Systems - .col-xs-12 - input.checkbox(type='checkbox', id='inventory') - label.ion-ios-box   Inventory Systems - .col-xs-12 - input.checkbox(type='checkbox', id='eLearning') - label.ion-university   E-learning Platforms - .col-xs-12 - input.checkbox(type='checkbox', id='form') - label.ion-ios-list   Web Forms - .col-xs-12 - input.checkbox(type='checkbox', id='community') - label.ion-ios-people   Community Tools - .col-xs-12 - input.checkbox(type='checkbox', id='other') - label.ion-settings   Other tools - button#next-step.btn.btn-primary.btn-big.btn-block(type='submit') I've selected all that apply and am ready to move on diff --git a/views/nonprofits/in-exchange-we-ask.jade b/views/nonprofits/in-exchange-we-ask.jade deleted file mode 100644 index e6b02c0877..0000000000 --- a/views/nonprofits/in-exchange-we-ask.jade +++ /dev/null @@ -1,17 +0,0 @@ -extends ../layout -block content - .jumbotron - h1.hug-top.text-center Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 Great! In exchange for our help, we ask only that you: - h3 - ol - li Appoint one principal stakeholder to serve on behalf of your organization. - li Communicate with our campers on a regular basis, to answer questions and provide them with direction. - li Commit to using the solution that our campers build for your nonprofit. - .spacer - .row - .col-xs-6 - a.btn.btn-primary.btn-big.btn-block(href='/nonprofits/how-can-free-code-camp-help-you') Sounds good! - .col-xs-6 - a.btn.btn-warning.btn-big.btn-block(href='/nonprofits/other-solutions') This might not be for us. \ No newline at end of file diff --git a/views/nonprofits/link-us-to-your-website.jade b/views/nonprofits/link-us-to-your-website.jade deleted file mode 100644 index bdb59455ad..0000000000 --- a/views/nonprofits/link-us-to-your-website.jade +++ /dev/null @@ -1,14 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 Link us to the website, blog, or social media page that best represents your organization. - .spacer - form(role='form', method='GET', action="/nonprofits/tell-us-your-email/?" + existingParams) - input(type='hidden', name='_csrf', value=_csrf) - .formgroup - .input-group - input.form-control.big-text-field.field-responsive(type='text', name='link', autocomplete='off', maxlength='500', autofocus='') - span.input-group-btn - button.btn.btn-big.btn-primary.btn-responsive Submit \ No newline at end of file diff --git a/views/nonprofits/ok-with-javascript.jade b/views/nonprofits/ok-with-javascript.jade deleted file mode 100644 index 1835218868..0000000000 --- a/views/nonprofits/ok-with-javascript.jade +++ /dev/null @@ -1,12 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 Our campers are learning to code using modern full stack JavaScript technologies like Node.js. We do not build or maintain Wordpress, Drupal, or other non-JavaScript based frameworks. - .spacer - .row - .col-xs-6 - a.btn.btn-primary.btn-big.btn-block(href='/nonprofits/in-exchange-we-ask') Sounds good! - .col-xs-6 - a.btn.btn-warning.btn-big.btn-block(href='/nonprofits/other-solutions') This might not be for us. \ No newline at end of file diff --git a/views/nonprofits/tell-us-your-email.jade b/views/nonprofits/tell-us-your-email.jade deleted file mode 100644 index 3bd8918f6b..0000000000 --- a/views/nonprofits/tell-us-your-email.jade +++ /dev/null @@ -1,14 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 Please tell us your email - .spacer - form(role='form', method='GET', novalidate='novalidate', name='nonprofitForm', action="/nonprofits/tell-us-your-name/") - input(type='hidden', name='_csrf', value=_csrf) - .formgroup - .input-group - input.form-control.big-text-field.field-responsive(type='text', name='email', autocomplete='off', maxlength='500', autofocus='') - span.input-group-btn - button.btn.btn-big.btn-primary.btn-responsive Submit \ No newline at end of file diff --git a/views/nonprofits/tell-us-your-name.jade b/views/nonprofits/tell-us-your-name.jade deleted file mode 100644 index 915c0b3258..0000000000 --- a/views/nonprofits/tell-us-your-name.jade +++ /dev/null @@ -1,13 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 Please tell us your name - .spacer - form(role='form', method='POST', novalidate='novalidate', name='nonprofitForm', action="/nonprofits/finish-application/") - .formgroup - .input-group - input.form-control.big-text-field.field-responsive(type='text', name='name', autocomplete='off', maxlength='140', autofocus='') - span.input-group-btn - button.btn.btn-big.btn-primary.btn-responsive Submit \ No newline at end of file diff --git a/views/nonprofits/what-does-your-nonprofit-do.jade b/views/nonprofits/what-does-your-nonprofit-do.jade deleted file mode 100644 index 166cb71418..0000000000 --- a/views/nonprofits/what-does-your-nonprofit-do.jade +++ /dev/null @@ -1,28 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 In 140 characters or less, what does your nonprofit do? For whom? - .spacer - form(role='form', method='GET', action="/nonprofits/link-us-to-your-website/") - input(type='hidden', name='_csrf', value=_csrf) - .formgroup - .input-group - input.form-control.big-text-field.field-responsive#what-does-the-nonprofit-do(type='text', maxlength='140', autofocus='', autocomplete='off', name='mission') - span.input-group-btn - button.btn.btn-big.btn-primary.btn-responsive(href='/nonprofits/link-us-to-your-website') Submit - .text-left - span#what-does-the-nonprofit-do-feedback - - script. - var text_max = 140; - $('#what-does-the-nonprofit-do-feedback').html(text_max + ' characters remaining'); - $('#what-does-the-nonprofit-do').keyup(function (e) { - if (e.which === 13 || e === 13) { - $('#submit-comment-to-comment').click(); - } - var text_length = $('#what-does-the-nonprofit-do').val().length; - var text_remaining = text_max - text_length; - $('#what-does-the-nonprofit-do-feedback').html(text_remaining + ' characters remaining'); - }); \ No newline at end of file diff --git a/views/nonprofits/your-nonprofit-project-application-has-been-submitted.jade b/views/nonprofits/your-nonprofit-project-application-has-been-submitted.jade deleted file mode 100644 index 1882ada3bc..0000000000 --- a/views/nonprofits/your-nonprofit-project-application-has-been-submitted.jade +++ /dev/null @@ -1,6 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Nonprofit Sign Up - include ../partials/nonprofit-application-progress-bar - h2 Thank you for reaching out to us. We’ll send you an email no later than #{getBackDay}. diff --git a/views/resources/nonprofits-form.jade b/views/resources/nonprofits-form.jade new file mode 100644 index 0000000000..be85b628e4 --- /dev/null +++ b/views/resources/nonprofits-form.jade @@ -0,0 +1,28 @@ +html. + + + + + nonprofit-projects + + + + + + + + diff --git a/views/resources/nonprofits.jade b/views/resources/nonprofits.jade new file mode 100644 index 0000000000..1c37c8eb8d --- /dev/null +++ b/views/resources/nonprofits.jade @@ -0,0 +1,55 @@ +extends ../layout +block content + .jumbotron + .text-center + .row + .col-xs-12 + h1.nonprofit-landing.hug-top Get pro bono code for your nonprofit + .big-break + .col-xs-12.col-sm-12.col-md-12 + .embed-responsive.embed-responsive-16by9 + iframe.embed-responsive-item(src='https://www.youtube.com/embed/KOs0m_AhkXA') + .big-break + h2 Our process: + .row + .col-xs-12.col-sm-12.col-md-4 + h3.nowrap Your idea + img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', alt='Image of a briefcase') + p.landing-p You tell us how we can help you. + .col-xs-12.col-sm-12.col-md-4 + h3.nowrap Our team + img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg.gz', alt='Image of people putting their hands together in a huddle') + p.landing-p We'll hand pick developers and a project manager. + .col-xs-12.col-sm-12.col-md-4 + h3.nowrap Your solution + img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_connect.svg.gz', alt='image of two people high-fiving') + p.landing-p Together we'll set milestones and complete your project. + .big-break + h2 Solutions we can help you build: + .text-center.negative-35 + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-android-globe + h2.black-text Websites + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-card + h2.black-text Donation Systems + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-android-calendar + h2.black-text Volunteer Systems + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-ios-box + h2.black-text Inventory Systems + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-university + h2.black-text E-learning Platforms + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-ios-list + h2.black-text Paperless Workflows + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-ios-people + h2.black-text Community Tools + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-settings + h2.black-text ...and other tools + .big-break + a.btn.btn-cta.signup-btn.btn-block(href="/nonprofits-form") My nonprofit needs coding help diff --git a/views/resources/pmi-acp-agile-project-managers-form.jade b/views/resources/pmi-acp-agile-project-managers-form.jade new file mode 100644 index 0000000000..781fdb0698 --- /dev/null +++ b/views/resources/pmi-acp-agile-project-managers-form.jade @@ -0,0 +1,29 @@ +html. + + + + + PMI-ACP + + + + + + + + + diff --git a/views/resources/pmi-acp-agile-project-managers.jade b/views/resources/pmi-acp-agile-project-managers.jade new file mode 100644 index 0000000000..a812d59d3e --- /dev/null +++ b/views/resources/pmi-acp-agile-project-managers.jade @@ -0,0 +1,55 @@ +extends ../layout +block content + .jumbotron + .text-center + .row + .col-xs-12 + h1.nonprofit-landing.hug-top Get Agile Project Management Experience for the PMI-ACP by Helping Nonprofits + .big-break + .col-xs-12.col-sm-12.col-md-12 + .embed-responsive.embed-responsive-16by9 + iframe.embed-responsive-item(src='https://www.youtube.com/embed/KOs0m_AhkXA') + .big-break + h2 Your opportunity: + .row + .col-xs-12.col-sm-12.col-md-4 + h3.nowrap Plan Projects + img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', alt='Image of a briefcase') + p.landing-p You'll triage deliverables and set deadlines. + .col-xs-12.col-sm-12.col-md-4 + h3.nowrap Manage Teams + img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg.gz', alt='Image of people putting their hands together in a huddle') + p.landing-p You'll lead two developers and a nonprofit stakeholder to success. + .col-xs-12.col-sm-12.col-md-4 + h3.nowrap Become a PMI-ACP + img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_connect.svg.gz', alt='image of two people high-fiving') + p.landing-p You'll learn Agile, get references, and qualify for the PMI-ACP. + .big-break + h2 Solutions you'll help nonprofits build: + .text-center.negative-35 + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-android-globe + h2.black-text Websites + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-card + h2.black-text Donation Systems + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-android-calendar + h2.black-text Volunteer Systems + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-ios-box + h2.black-text Inventory Systems + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-university + h2.black-text E-learning Platforms + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-ios-list + h2.black-text Paperless Workflows + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-ios-people + h2.black-text Community Tools + .col-xs-12.col-sm-12.col-md-3 + .landing-skill-icon.ion-settings + h2.black-text ...and other tools + .big-break + a.btn.btn-cta.signup-btn.btn-block(href="/pmi-acp-agile-project-manager-form") I want to lead agile projects for nonprofits From cef70a67a947a81f8f7ddb1ccc26b72b975d1df5 Mon Sep 17 00:00:00 2001 From: terakilobyte Date: Mon, 27 Apr 2015 19:39:58 -0400 Subject: [PATCH 3/4] Fix broken url --- views/resources/pmi-acp-agile-project-managers.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/resources/pmi-acp-agile-project-managers.jade b/views/resources/pmi-acp-agile-project-managers.jade index a812d59d3e..a869adcc43 100644 --- a/views/resources/pmi-acp-agile-project-managers.jade +++ b/views/resources/pmi-acp-agile-project-managers.jade @@ -52,4 +52,4 @@ block content .landing-skill-icon.ion-settings h2.black-text ...and other tools .big-break - a.btn.btn-cta.signup-btn.btn-block(href="/pmi-acp-agile-project-manager-form") I want to lead agile projects for nonprofits + a.btn.btn-cta.signup-btn.btn-block(href="/pmi-acp-agile-project-managers-form") I want to lead agile projects for nonprofits From a8e215c74ec8e3152a3aaf34b31ecb5c417222a4 Mon Sep 17 00:00:00 2001 From: terakilobyte Date: Mon, 27 Apr 2015 20:03:37 -0400 Subject: [PATCH 4/4] Check everything for undefined in email reply logic for story.js --- controllers/story.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/story.js b/controllers/story.js index 1f1bf90247..0e7af182f6 100755 --- a/controllers/story.js +++ b/controllers/story.js @@ -518,7 +518,7 @@ exports.storySubmission = function(req, res, next) { return next(err); } // If the emails of both authors differ, only then proceed with email notification - if (data.author.email && (data.author.email !== recipient.email)) { + if (typeof data.author !== 'undefined' && data.author.email && typeof recipient !== 'undefined' && recipient.email && (data.author.email !== recipient.email)) { var transporter = nodemailer.createTransport({ service: 'Mandrill', auth: {