diff --git a/README.md b/README.md
index 64c5a90c16..0d5f66a895 100644
--- a/README.md
+++ b/README.md
@@ -45,18 +45,13 @@ This code is running live at [FreeCodeCamp.com](http://www.FreeCodeCamp.com). We
### [Join our community here](http://www.freecodecamp.com/signin).
-Wiki
-------------
-
-We would love your help expanding our [wiki](https://github.com/freecodecamp/freecodecamp/wiki). Our goal is to become a great resource for people learning to code, building local coding communities, and applying for coding jobs.
-
Found a bug?
------------
Do not file an issue until you have followed these steps:
-1. Read [Help I've Found a Bug](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/FreeCodeCamp-Report-Bugs) wiki page and follow the instructions there.
-2. Ask for confirmation in the appropriate [Help Room](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Help-Rooms).
+1. Read the [Help I've Found a Bug](http://forum.freecodecamp.com/t/how-to-report-a-bug/19543) article and follow its instructions.
+2. Ask for confirmation in the appropriate [Help Room](http://forum.freecodecamp.com/t/free-code-camp-official-chat-rooms/19390/2).
3. Please *do not* open an issue without a 3rd party confirmation of your problem.
Contributing
diff --git a/client/commonFramework/bindings.js b/client/commonFramework/bindings.js
index 5c193fddf0..7c3c8d382e 100644
--- a/client/commonFramework/bindings.js
+++ b/client/commonFramework/bindings.js
@@ -147,7 +147,7 @@ window.common = (function(global) {
});
if (common.challengeName) {
- window.ga('send', 'event', 'Challenge', 'load', common.gaName);
+ window.ga('send', 'event', 'Challenge', 'loaded', common.gaName);
}
$('.modal').on('show.bs.modal', function() {
diff --git a/client/less/main.less b/client/less/main.less
index 76867f4707..fdda85a0a5 100644
--- a/client/less/main.less
+++ b/client/less/main.less
@@ -127,7 +127,7 @@ h1, h2, h3, h4, h5, h6, p, li {
margin-top: 10px;
}
-ul {
+.large-li > li {
list-style: none;
}
@@ -1179,4 +1179,8 @@ and (max-width : 400px) {
@import "jobs.less";
@import "challenge.less";
@import "toastr.less";
-@import "map.less";
\ No newline at end of file
+@import "map.less";
+
+ul > li {
+ list-style-type: disc;
+}
diff --git a/client/main.js b/client/main.js
index 44bee9c5fa..999e5b1fb4 100644
--- a/client/main.js
+++ b/client/main.js
@@ -103,7 +103,7 @@ main = (function(main, global) {
if (!(event.ctrlKey || event.metaKey)) {
toggleMainChat();
}
- window.ga('send', 'event', 'NAV', 'NAV-CHAT', 'Nav Chat Button Clicked');
+ window.ga('send', 'event', 'Nav', 'clicked', 'Nav chat opened');
});
function showMainChat() {
@@ -220,7 +220,7 @@ $(document).ready(function() {
'&redirect_uri=http%3A%2F%2Ffreecodecamp%2Ecom%2Fmap';
main.setMapShare(challengeBlockName);
- window.ga('send', 'event', 'FB_LINK', 'SHARE', 'Facebook map share');
+ window.ga('send', 'event', 'Facebook', 'clicked', 'Shared on Facebook');
window.location.href = link;
});
diff --git a/package.json b/package.json
index 0a86fa2306..2f129e9325 100644
--- a/package.json
+++ b/package.json
@@ -43,7 +43,7 @@
"cheerio": "~0.20.0",
"classnames": "^2.1.2",
"compression": "^1.6.0",
- "connect-mongo": "~1.2.0",
+ "connect-mongo": "^1.3.2",
"cookie-parser": "^1.4.0",
"csurf": "^1.8.3",
"debug": "^2.2.0",
@@ -149,4 +149,4 @@
"tape": "^4.2.2"
},
"snyk": true
-}
\ No newline at end of file
+}
diff --git a/seed/challenges/01-front-end-development-certification/bootstrap.json b/seed/challenges/01-front-end-development-certification/bootstrap.json
index 91edc3df47..c7ad298e24 100644
--- a/seed/challenges/01-front-end-development-certification/bootstrap.json
+++ b/seed/challenges/01-front-end-development-certification/bootstrap.json
@@ -74,7 +74,7 @@
],
"tests": [
"assert($(\"div\").hasClass(\"container-fluid\"), 'message: Your div
element should have the class container-fluid
.');",
- "assert(code.match(/<\\/div>/g) && code.match(/
.container-fluid
.');"
],
"type": "waypoint",
diff --git a/server/boot/randomAPIs.js b/server/boot/randomAPIs.js
index 81d70760c2..57ea58a5f4 100644
--- a/server/boot/randomAPIs.js
+++ b/server/boot/randomAPIs.js
@@ -28,6 +28,10 @@ module.exports = function(app) {
router.get('/terms', terms);
router.get('/privacy', privacy);
router.get('/how-nonprofit-projects-work', howNonprofitProjectsWork);
+ router.get(
+ '/software-resources-for-nonprofits',
+ softwareResourcesForNonprofits
+ );
router.get('/code-of-conduct', codeOfConduct);
router.get('/academic-honesty', academicHonesty);
router.get(
@@ -59,6 +63,12 @@ module.exports = function(app) {
});
}
+ function softwareResourcesForNonprofits(req, res) {
+ res.render('resources/software-resources-for-nonprofits', {
+ title: 'Software Resources for Nonprofits'
+ });
+ }
+
function codeOfConduct(req, res) {
res.render('resources/code-of-conduct', {
title: 'Code of Conduct'
diff --git a/server/boot/user.js b/server/boot/user.js
index b0d059306c..ad08bee719 100644
--- a/server/boot/user.js
+++ b/server/boot/user.js
@@ -336,7 +336,7 @@ module.exports = function(app) {
return data;
}, {});
- if (userPortfolio.isCheater) {
+ if (userPortfolio.isCheater && !user) {
req.flash('errors', {
msg: dedent`
Upon review, this account has been flagged for academic
diff --git a/server/middleware.json b/server/middleware.json
index 1ec30ef11b..1ee88d4cb6 100644
--- a/server/middleware.json
+++ b/server/middleware.json
@@ -49,7 +49,8 @@
"./middlewares/jade-helpers": {},
"./middlewares/global-locals": {},
"./middlewares/revision-helpers": {},
- "./middlewares/migrate-completed-challenges": {}
+ "./middlewares/migrate-completed-challenges": {},
+ "./middlewares/flash-cheaters": {}
},
"routes": {
},
diff --git a/server/middlewares/flash-cheaters.js b/server/middlewares/flash-cheaters.js
new file mode 100644
index 0000000000..7e882f1e6b
--- /dev/null
+++ b/server/middlewares/flash-cheaters.js
@@ -0,0 +1,29 @@
+import dedent from 'dedent';
+
+const ALLOWED_METHODS = ['GET'];
+const EXCLUDED_PATHS = [
+ '/api/flyers/findOne',
+ '/challenges/current-challenge',
+ '/challenges/next-challenge',
+ '/map-aside',
+ '/signout'
+];
+
+export default function flashCheaters() {
+ return function(req, res, next) {
+ if (
+ ALLOWED_METHODS.indexOf(req.method) !== -1 &&
+ EXCLUDED_PATHS.indexOf(req.path) === -1 &&
+ req.user && req.url !== '/' && req.user.isCheater
+ ) {
+ req.flash('errors', {
+ msg: dedent`
+ Upon review, this account has been flagged for academic
+ dishonesty. If you’re the owner of this account contact
+ team@freecodecamp.com for details.
+ `
+ });
+ }
+ return next();
+ };
+}
diff --git a/server/views/home.jade b/server/views/home.jade
index cf604d3110..894d9dbde4 100644
--- a/server/views/home.jade
+++ b/server/views/home.jade
@@ -87,13 +87,27 @@ block content
h2 Here's why you should join our open source community right now:
.spacer
ul.large-li
- li.ion-code You'll get help in real time from our community chat rooms.
- li.ion-code You'll meet up with other coders in your city.
- li.ion-code You'll learn to code at your own pace, in your browser or on your phone.
- li.ion-code You'll work through our focused, interactive courses and tutorials.
- li.ion-code You'll learn state-of-the-art full stack JavaScript technologies.
- li.ion-code You'll build projects that help nonprofits carry out their missions more effectively.
- li.ion-code You'll assemble a portfolio of real apps used by real people.
+ li
+ span.fa.fa-code
+ | You'll get help in real time from our community chat rooms.
+ li
+ span.fa.fa-code
+ | You'll meet up with other coders in your city.
+ li
+ span.fa.fa-code
+ | You'll learn to code at your own pace, in your browser or on your phone.
+ li
+ span.fa.fa-code
+ | You'll work through our focused, interactive courses and tutorials.
+ li
+ span.fa.fa-code
+ | You'll learn state-of-the-art full stack JavaScript technologies.
+ li
+ span.fa.fa-code
+ | You'll build projects that help nonprofits carry out their missions more effectively.
+ li
+ span.fa.fa-code
+ | You'll assemble a portfolio of real apps used by real people.
.big-break
.row
.col-xs-12.col-sm-8.col-sm-offset-2
diff --git a/server/views/resources/nonprofits.jade b/server/views/resources/nonprofits.jade
index f1be4da204..962c78357d 100644
--- a/server/views/resources/nonprofits.jade
+++ b/server/views/resources/nonprofits.jade
@@ -1,92 +1,116 @@
extends ../layout
block content
.text-center
+ h1.landing-heading We will build software for your nonprofit. Pro Bono.
+ .big-spacer
.row
- .col-xs-12
- h1.landing-heading 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='//player.vimeo.com/video/126228100')
- .big-break
- h2 As featured in:
- img.img-center.img-responsive(src='https://s3.amazonaws.com/freecodecamp/as-seen-on.png')
- .spacer
- hr
- .spacer
- h2 What nonprofit leaders are saying:
- .spacer
- .row
- .col-xs-12.col-sm-12.col-md-4
- img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/ZHnFFN5.jpg", alt="Ewa's testimonial image")
- p.nonprofit-testimonial-copy With Free Code Camp's valuable contribution, we were able to improve all of our systems and processes as part of our Wonder Women Eastern Indonesia program, and make sure that even more life changing technologies get to where they are needed most.
- h3 - Ewa Wojkowska with Kopernik
- .col-xs-12.col-sm-12.col-md-4
- img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/KHF8O2i.jpg", alt="Jennifer's testimonial image")
- p.nonprofit-testimonial-copy We have been blown away by the professional quality of the work that has been produced by the campers working on our projects. Free Code Camp has been an invaluable partner and we are grateful for their support.
- h3 - Jennifer McDowell with Child First Authority
- .col-xs-12.col-sm-12.col-md-4
- img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/9VknVe3.jpg", alt="Stephanie's testimonial image")
- p.nonprofit-testimonial-copy We had the pleasure to work with two very talented campers who went above and beyond to create a web-based app for us. I would highly recommend that nonprofits apply to Free Code Camp with their custom solution needs!
- h3 - Stephanie McAllister with Timeraiser
- .spacer
- hr
- .spacer
- h2 Our process:
- .spacer
- .row
- .col-xs-12.col-sm-12.col-md-4
- img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', alt='Image of a briefcase')
- p.large-p You tell us how we can help you.
- .col-xs-12.col-sm-12.col-md-4
- 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.large-p We'll hand pick developers and a project manager.
- .col-xs-12.col-sm-12.col-md-4
- 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.large-p Together we'll set milestones and complete your project.
- .spacer
- hr
- .spacer
- h2 Solutions we can help you build:
- .spacer
- .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
+ .col-xs-12.col-sm-12.col-md-4
+ img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg.gz', alt='Image of a briefcase')
+ p.large-p Apply for a Code Grant.
+ .col-xs-12.col-sm-12.col-md-4
+ 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.large-p We'll provide volunteer developers and a project manager.
+ .col-xs-12.col-sm-12.col-md-4
+ 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.large-p We'll collaborate with you to build the tool you need.
+ .spacer
+ h2 As featured in:
+ img.img-center.img-responsive(src='https://s3.amazonaws.com/freecodecamp/as-seen-on.png')
+ hr
+ .spacer
+ h1 What nonprofit leaders are saying:
+ .spacer
+ .row
+ .col-xs-12.col-sm-12.col-md-4
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/ZHnFFN5.jpg", alt="Ewa's testimonial image")
+ p.nonprofit-testimonial-copy With Free Code Camp's valuable contribution, we were able to improve all of our systems and processes as part of our Wonder Women Eastern Indonesia program, and make sure that even more life changing technologies get to where they are needed most.
+ h3 - Ewa Wojkowska with Kopernik
+ .col-xs-12.col-sm-12.col-md-4
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/KHF8O2i.jpg", alt="Jennifer's testimonial image")
+ p.nonprofit-testimonial-copy We have been blown away by the professional quality of the work that has been produced by the campers working on our projects. Free Code Camp has been an invaluable partner and we are grateful for their support.
+ h3 - Jennifer McDowell with Child First Authority
+ .col-xs-12.col-sm-12.col-md-4
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/9VknVe3.jpg", alt="Stephanie's testimonial image")
+ p.nonprofit-testimonial-copy We had the pleasure to work with two very talented campers who went above and beyond to create a web-based app for us. I would highly recommend that nonprofits apply to Free Code Camp with their custom solution needs!
+ h3 - Stephanie McAllister with Timeraiser
.spacer
hr
.spacer
- .col-xs-offset-0.col-sm-offset-1.text-left.large-p
- h2 Our developers build projects for nonprofits who:
- .spacer
+ h1 Solutions we can help you build:
+ .spacer
+ .row.text-center
+ .col-xs-12.col-sm-12.col-md-4
+ .landing-skill-icon.fa.fa-tasks
+ h2.black-text Paperless Workflows
+ .col-xs-12.col-sm-12.col-md-4
+ .landing-skill-icon.fa.fa-child
+ h2.black-text Volunteer Management
+ .col-xs-12.col-sm-12.col-md-4
+ .landing-skill-icon.fa.fa-users
+ h2.black-text Community Management
+ .col-xs-12.col-sm-12.col-md-4
+ .landing-skill-icon.fa.fa-repeat
+ h2.black-text Inventory Systems
+ .col-xs-12.col-sm-12.col-md-4
+ .landing-skill-icon.fa.fa-truck
+ h2.black-text Logistics Tools
+ .col-xs-12.col-sm-12.col-md-4
+ .landing-skill-icon.fa.fa-wrench
+ h2.black-text ...and other tools
+ .spacer
+ hr
+ .spacer
+ h1 Some of the projects we've built for nonprofits:
+ .spacer
+ .row
+ .col-xs-12
+ h2 Options, Inc.
+ br
+ | Big Lake, Minnesota
+ .embed-responsive.embed-responsive-16by9
+ iframe.embed-responsive-item(src='//www.youtube.com/embed/V8B4orj0M7Y?rel=0&showinfo=0')
+ .spacer
+ .row
+ .col-xs-12
+ h2 Child First Authority
+ br
+ | Baltimore, Maryland
+ .embed-responsive.embed-responsive-16by9
+ iframe.embed-responsive-item(src='//www.youtube.com/embed/O993J5KCR_w?rel=0&showinfo=0')
+ .spacer
+ .row
+ .col-xs-12
+ h2 Chasdei Kaduri Food Bank
+ br
+ | Toronto, Canada
+ .embed-responsive.embed-responsive-16by9
+ iframe.embed-responsive-item(src='//www.youtube.com/embed/XUR8E9fy0mE?rel=0&showinfo=0')
+ .spacer
+ hr
+ .spacer
+ h2 As grantmakers of pro bono code, we approve applications for nonprofits who:
+ .col-xs-12.col-sm-8.col-sm-offset-2.text-left.large-p
ul.large-li
- li.ion-code already have people who benefit from their services.
- li.ion-code are registered with their government and have tax-exempt status.
- li.ion-code have a stakeholder who can meet with our developers to direct the project.
- li.ion-code can budget at least $20 per month for their own cloud servers.
- li.ion-code can commit to using and maintaining the solution that our developers build.
- .big-break
+ li
+ span.fa.fa-code
+ | have 501(c)(3) status or foreign equivalent.
+ li
+ span.fa.fa-code
+ | have a demonstrated need for custom code.
+ li
+ span.fa.fa-code
+ | have explored existing software solutions.
+ li
+ span.fa.fa-code
+ | already have people who benefit from their services.
+ li
+ span.fa.fa-code
+ | can budget $20 to $30 per month for hosting.
+ li
+ span.fa.fa-code
+ | will commit to using what our developers build.
+
.row
.col-xs-12.col-sm-8.col-sm-offset-2
- a.btn.btn-cta.signup-btn.btn-block(href="/nonprofits-form") My nonprofit needs coding help
+ .spacer
+ a.btn.btn-cta.signup-btn.btn-block(href="/nonprofits-form") Apply
diff --git a/server/views/resources/shop.jade b/server/views/resources/shop.jade
index 4635782a07..896c9299c3 100644
--- a/server/views/resources/shop.jade
+++ b/server/views/resources/shop.jade
@@ -9,7 +9,7 @@ block content
h4 Get 2 for only $5, with free shipping anywhere!
p These durable 2" (5 cm) stickers sport a matte finish, and look great anywhere - especially on your laptop.
html.
-