diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b5fe971fce..65a6a27838 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,23 +5,23 @@ #### Pre-Submission Checklist - - + + - [ ] Your pull request targets the `staging` branch of FreeCodeCamp. - [ ] Branch starts with either `fix/`, `feature/`, or `translate/` (e.g. `fix/signin-issue`) -- [ ] You have only one commit (if not, [squash](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/git-rebase#squashing-multiple-commits-into-one) them into one commit). +- [ ] You have only one commit (if not, [squash](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Git-Squash) them into one commit). - [ ] All new and existing tests pass the command `npm run test-challenges`. Use `git commit --amend` to amend any fixes. #### Type of Change - + - [ ] Small bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds new functionality) - [ ] Breaking change (fix or feature that would change existing functionality) - [ ] Add new translation (feature adding new translations) #### Checklist: - + - [ ] Tested changes locally. - [ ] Closes currently open issue (replace XXXX with an issue no): Closes #XXXX diff --git a/client/main.js b/client/main.js index 07f5d25427..d36009deb7 100644 --- a/client/main.js +++ b/client/main.js @@ -87,7 +87,9 @@ main = (function(main, global) { return null; } mainChatTitleAdded = true; - + if ($('body').hasClass('night')) { + $('#chat-embed-main').addClass('night'); + } $('#chat-embed-main > .gitter-chat-embed-action-bar').prepend( '
" ], "tests": [ - "assert(code.match(/\\$\\s*?\\(\\s*?(\\\"|\\')\\#getMessage(\\\"|\\')\\s*?\\)\\s*?\\.\\s*?on\\s*?\\(\\s*?(\\\"|\\')click(\\\"|\\')\\s*?\\,\\s*?function\\s*?\\(\\s*?\\)\\s*?\\{/gi), 'message: You should have a click handler on thegetMessage
button to trigger the AJAX request.');",
- "assert(code.match(/\\s*?\\}\\s*?\\)\\s*?\\;/gi), 'message: You should have at least one closing set of brackets and parenthesis.');",
- "assert(code.match(/\\s*?\\}\\s*?\\)\\s*?\\;/gi) && code.match(/\\,\\s*?function\\s*?\\(\\s*?\\w*?\\s*?\\)\\s*?\\{/gi) && code.match(/\\s*?\\}\\s*?\\)\\s*?\\;/gi).length === code.match(/\\s*?function\\s*?\\(\\s*?\\w*?\\s*?\\)\\s*?\\{/gi).length, 'message: Each callback function should have a closing set of brackets and parenthesis.');",
- "assert(code.match(/\\$\\s*?\\.\\s*?getJSON\\s*?\\(\\s*?(\\\"|\\')\\/json\\/cats\\.json(\\\"|\\')\\s*?\\,\\s*?function\\s*?\\(\\s*?json\\s*?\\)\\s*?\\{/gi), 'message: You should be making use of the getJSON
method given in the description to load data from the JSON file.');",
- "assert(code.match(/\\$\\s*?\\(\\s*?(\\\"|\\')\\.message(\\\"|\\')\\s*?\\)\\s*?\\.\\s*?html\\s*?\\(\\s*?JSON\\s*?\\.\\s*?stringify\\s*?\\(\\s*?json\\s*?\\)\\s*?\\)/gi), 'message: Don't forget to make the .html
change the contents of the message box so that it contains the result of the getJSON
.');"
+ "assert(code.match(/\\$\\s*?\\(\\s*?(\\\"|\\')\\#getMessage(\\\"|\\')\\s*?\\)\\s*?\\.\\s*?on\\s*?\\(\\s*?(\\\"|\\')click(\\\"|\\')\\s*?\\,\\s*?function\\s*?\\(\\s*?\\)\\s*?\\{/g), 'message: You should have a click handler on the getMessage
button to trigger the AJAX request.');",
+ "assert(code.match(/\\s*?\\}\\s*?\\)\\s*?\\;/g), 'message: You should have at least one closing set of brackets and parenthesis.');",
+ "assert(code.match(/\\s*?\\}\\s*?\\)\\s*?\\;/g) && code.match(/\\,\\s*?function\\s*?\\(\\s*?[A-Za-z_\\$]?\\w*?\\s*?\\)\\s*?\\{/g) && code.match(/\\s*?\\}\\s*?\\)\\s*?\\;/g).length === code.match(/\\s*?function\\s*?\\(\\s*?[A-Za-z_\\$]?\\w*?\\s*?\\)\\s*?\\{/g).length, 'message: Each callback function should have a closing set of brackets and parenthesis.');",
+ "assert(code.match(/\\$\\s*?\\.\\s*?getJSON\\s*?\\(\\s*?(\\\"|\\')\\/json\\/cats\\.json(\\\"|\\')\\s*?\\,\\s*?function\\s*?\\(\\s*?[A-Za-z_\\$]\\w*\\s*?\\)\\s*?\\{/g), 'message: You should be making use of the getJSON
method given in the description to load data from the JSON file.');",
+ "assert(code.match(/\\$\\s*?\\.\\s*?getJSON\\s*?\\(\\s*?(\\\"|\\')\\/json\\/cats\\.json(\\\"|\\')\\s*?\\,\\s*?function\\s*?\\(\\s*?([A-Za-z_\\$]\\w*)\\s*?\\)\\s*?{/g) && /\\$\\s*?\\.\\s*?getJSON\\s*?\\(\\s*?(\\\"|\\')\\/json\\/cats\\.json(\\\"|\\')\\s*?,\\s*?function\\s*?\\(([A-Za-z_\\$]\\w*)\\s*?\\)/g.exec(code)[3] === /\\$\\(\\s*?(\\\"|\\')\\.message\\s*?(\\\"|\\')\\s*?\\)\\s*?\\.html\\s*?\\(\\s*?JSON\\s*?\\.\\s*?stringify\\s*?\\(\\s*?([A-Za-z_\\$]\\w*)\\s*?\\)\\s*?\\)/g.exec(code)[3], 'message: Don't forget to make the .html
change the contents of the message box so that it contains the result of the getJSON
.');"
],
"type": "waypoint",
"challengeType": 0,
@@ -447,7 +447,8 @@
"You will see a prompt to allow or block this site from knowing your current location. The challenge can be completed either way, as long as the code is correct.",
"By selecting allow you will see the text on the output phone change to your latitude and longitude",
"Here's some code that does this:",
- "if (navigator.geolocation) {" + "
navigator.geolocation.getCurrentPosition(function(position) {
$(\"#data\").html(\"latitude: \" + position.coords.latitude + \"<br>longitude: \" + position.coords.longitude);
});
}
if (navigator.geolocation) {", + "Don't forget to use double quotes around selectors as mentioned here." ], "challengeSeed": [ "fccss", diff --git a/server/boot/commit.js b/server/boot/commit.js index 77c7008a41..8f900fb59a 100644 --- a/server/boot/commit.js +++ b/server/boot/commit.js @@ -104,7 +104,9 @@ export default function commit(app) { req.flash('info', { msg: dedent` Looks like you already have a pledge to ${pledge.displayName}. - Hitting commit here will replace your old commitment. + Clicking "Commit" here will replace your old commitment. If you + do change your commitment, please remember to cancel your + previous recurring donation directly with ${pledge.displayName}. ` }); } @@ -169,7 +171,8 @@ export default function commit(app) { msg: dedent` Congratulations, you have committed to giving ${displayName} $${amount} each month until you have completed - your ${goal}. + your ${goal}. Please remember to cancel your pledge directly + with ${displayName} once you finish. ` }); res.redirect('/' + user.username); @@ -217,11 +220,18 @@ export default function commit(app) { }) .subscribe( pledge => { - let msg = 'You have successfully stopped your pledge.'; + let msg = dedent` + You have successfully stopped your pledge. Please + rememberto cancel your recurring donation directly + with the nonprofit if you haven't already done so. + `; if (!pledge) { - msg = `No pledge found for user ${user.username}.`; + msg = dedent` + It doesn't look like you had an active pledge, so + there's no pledge to stop. + `; } - req.flash('errors', { msg }); + req.flash('info', { msg }); return res.redirect(`/${user.username}`); }, next diff --git a/server/views/account/show.jade b/server/views/account/show.jade index 6f21a63196..9e4075b0cd 100644 --- a/server/views/account/show.jade +++ b/server/views/account/show.jade @@ -164,12 +164,16 @@ block content td.col-xs-2.hidden-xs= challenge.completedDate ? challenge.completedDate : 'Not Available' td.col-xs-2.hidden-xs= challenge.lastUpdated ? challenge.lastUpdated : '' td.col-xs-2.hidden-xs - if (challenge.solution) + if (challenge.solution && challenge.name) a(href='/challenges/' + removeOldTerms(challenge.name) + '?solution=' + encodeURIComponent(encodeFcc(challenge.solution)), target='_blank') View solution - else + else if (challenge.name) a(href='/challenges/' + removeOldTerms(challenge.name)) View this challenge - td.col-xs-12.visible-xs - if (challenge.solution) - a(href='/challenges/' + removeOldTerms(challenge.name) + '?solution=' + encodeURIComponent(encodeFcc(challenge.solution)), target='_blank')= removeOldTerms(challenge.name) else + span N/A + td.col-xs-12.visible-xs + if (challenge.solution && challenge.name) + a(href='/challenges/' + removeOldTerms(challenge.name) + '?solution=' + encodeURIComponent(encodeFcc(challenge.solution)), target='_blank')= removeOldTerms(challenge.name) + else if (challenge.name) a(href='/challenges/' + removeOldTerms(challenge.name))= removeOldTerms(challenge.name) + else + span N/A diff --git a/server/views/challenges/showBonfire.jade b/server/views/challenges/showBonfire.jade index 7b01d104ff..a95099e53b 100644 --- a/server/views/challenges/showBonfire.jade +++ b/server/views/challenges/showBonfire.jade @@ -6,7 +6,7 @@ block content link(rel='stylesheet', href='/css/ubuntu.css') include ../partials/flyer .row - .col-md-4.col-lg-3 + .col-md-4 .scroll-locker(id = "scroll-locker") .innerMarginFix(style=' width: 99%') #testCreatePanel @@ -56,7 +56,7 @@ block content #testSuite br - .col-md-8.col-lg-9 + .col-md-8 .editorScrollDiv(style = "overflow-y: auto; overflow-x: hidden;") #mainEditorPanel form.code diff --git a/server/views/challenges/showJS.jade b/server/views/challenges/showJS.jade index bdebab3ad8..40e2753857 100644 --- a/server/views/challenges/showJS.jade +++ b/server/views/challenges/showJS.jade @@ -6,7 +6,7 @@ block content link(rel='stylesheet', href='/css/ubuntu.css') include ../partials/flyer .row - .col-md-4.col-lg-3 + .col-md-4 .scroll-locker(id = "scroll-locker") .innerMarginFix(style = "width: 99%;") #testCreatePanel @@ -56,7 +56,7 @@ block content br #testSuite br - .col-md-8.col-lg-9 + .col-md-8 .editorScrollDiv(style = "overflow-y: auto; overflow-x: hidden;") #mainEditorPanel form.code diff --git a/server/views/home.jade b/server/views/home.jade index f5096ae9a4..68a25055a8 100644 --- a/server/views/home.jade +++ b/server/views/home.jade @@ -1,40 +1,38 @@ extends layout block content .text-center - h1.landing-heading Learn to code and help nonprofits. - .spacer .row + h1.landing-heading Learn to code and help nonprofits .big-break .big-break .big-break - .col-xs-12.col-sm-12.col-md-3 + .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', alt='Get great references and connections to start your software engineer career') - p.large-p Join a community of 400,000+ developers. - .col-xs-12.col-sm-12.col-md-3 - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_learn.svg', alt='Learn to code and learn full stack JavaScript') - p.large-p Work on coding challenges together. - .col-xs-12.col-sm-12.col-md-3 - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_portfolio.svg', alt='Build a portfolio of apps for nonprofits') - p.large-p Build a portfolio of apps that solve real problems. - .col-xs-12.col-sm-12.col-md-3 - img.img-responsive.landing-icon.img-center(src= 'https://s3.amazonaws.com/freecodecamp/landingIcons_nonprofits.svg', alt='Empower nonprofits with code') - p.large-p Empower nonprofits with code. - .big-break - .big-break + p.large-p + a(href='/map') 17,000,000+ + | coding challenges solved + .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', alt='Help nonprofits with bro bono code projects') + p.large-p + a(href='/nonprofits') $1,000,000+ + | in donated development work + .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', alt='Get hired as a developer and start your software engineer career') + p.large-p + a(href='/stories') 2,000+ + | campers now have developer jobs .big-break .big-break .row .col-xs-12.col-sm-8.col-sm-offset-2 a.btn.btn-cta.signup-btn.btn-block(href="/signin") Start coding (it's free) - .button-spacer - a.btn.btn-lg.btn-primary.btn-primary-ghost.btn-block(href="/nonprofits") My nonprofit needs coding help .spacer h2 As featured in: img.img-center.img-responsive(src='https://s3.amazonaws.com/freecodecamp/as-seen-on.png') .spacer hr .spacer - h2 Launch your career as a software engineer: + h2 Launch your developer career .spacer .row .col-xs-12.col-sm-12.col-md-4 @@ -50,14 +48,9 @@ block content p.testimonial-copy I started Free Code Camp with zero knowledge of web development. 6 months later, I landed my first job as a back end engineer. h3 - Maxim Orlov .spacer - .row - .col-xs-12.col-sm-8.col-sm-offset-2 - a.btn.btn-lg.btn-primary.btn-primary-ghost.btn-block(href='/stories') Hear from more of our campers - .spacer - .spacer hr .spacer - h2 Skills you'll learn: + h2 Learn powerful skills .spacer .row .text-center.negative-35 diff --git a/server/views/layout-wide.jade b/server/views/layout-wide.jade index cf548c3edc..8484936c90 100644 --- a/server/views/layout-wide.jade +++ b/server/views/layout-wide.jade @@ -4,7 +4,7 @@ html(lang='en') include partials/meta include partials/stylesheets if showAside - body.map-aside-body + body.map-aside-body(class=theme !== 'default' ? theme : '') include partials/scripts block content else diff --git a/server/views/layout.jade b/server/views/layout.jade index eefd4090e0..ca093688e5 100644 --- a/server/views/layout.jade +++ b/server/views/layout.jade @@ -3,7 +3,7 @@ html(lang='en') head include partials/meta include partials/stylesheets - body.top-and-bottom-margins + body.top-and-bottom-margins(class=theme !== 'default' ? theme : '') include partials/scripts include partials/navbar include partials/flash diff --git a/server/views/resources/about.jade b/server/views/resources/about.jade index 9d6979d123..d50aced8d8 100644 --- a/server/views/resources/about.jade +++ b/server/views/resources/about.jade @@ -23,7 +23,7 @@ block content | to nonprofits .row .col-xs-12.col-sm-10.col-sm-offset-1.col-md-6.col-md-offset-3 - h2.text-center Certifications + h2.text-center Certificates hr ul.population-table li.nowrap @@ -117,7 +117,7 @@ block content td.text-center i.fa.fa-comment td - a(href="/stories") Stories from campers who've become professional software engineers + a(href="/stories") Stories from campers who've become professional software developers .spacer .row .col-xs-12.col-sm-10.col-sm-offset-1.col-md-6.col-md-offset-3 @@ -127,35 +127,31 @@ block content
navigator.geolocation.getCurrentPosition(function(position) {
$(\"#data\").html(\"latitude: \" + position.coords.latitude + \"<br>longitude: \" + position.coords.longitude);
});
}
We’re an open source community that helps you learn to code.
You can work through our self-paced coding challenges, build projects, and earn certifications. We also connect you with people in your city so you can code together.
-Yes. Hundreds of people have gotten software engineering jobs after completing our coding challenges.
+You can work through our self-paced coding challenges, build projects, and earn certificates. We also connect you with people in your city so you can code together.
+Yes. Thousands of people have gotten software developer jobs after joining our open source community.
No. A lot of coding bootcamps use Free Code Camp as part of their curriculum, though.
Yes. Our curriculum, nonprofit projects, and verified certifications are all free.
-We offer four free verified certifications: front end development, back end development, data visualization, and full stack development.
+Yes. Our curriculum, nonprofit projects, and verified certificates are all free.
Once you finish the first three certifications, you’ll get to build a series of solutions for nonprofits. You’ll work in pairs, under the supervision of a volunteer project manager and a stakeholder from the nonprofit.
+Once you finish the first 1,200 hours of challenges, you’ll get to build a series of solutions for nonprofits. You’ll work in pairs, under the supervision of a volunteer project manager and a stakeholder from the nonprofit.
Our community has done nearly a million dollars worth of pro-bono coding for nonprofits so far.
-Yes. You can pledge a monthly donation to a nonprofit of your choosing while you learn.
+Our community has donated more than a million dollars worth of pro-bono coding for nonprofits so far.
+Yes. You can pledge a monthly donation to a nonprofit of your choosing while you learn.
It takes about 2,080 hours to earn all four of our certifications. This translates into one year of full-time coding. We’re completely self-paced though, so take as long as you need.
+It takes about 2,080 hours to complete our Full Stack Developer certificate. This translates into one year of full-time coding. We’re completely self-paced though, so take as long as you need.
No. Please don’t drop out of college just to pursue Free Code Camp. You can pursue both concurrently. Even though you don’t need a 4-year degree to work as a software engineer, it still helps a lot.
+No. Please don’t drop out of college just to pursue Free Code Camp. You can pursue both concurrently. Even though you don’t need a 4-year degree to work as a software developer, it still helps a lot.
Yes. Many high school, college, and adult ed programs incorporate Free Code Camp into their coursework. We're open source, so no licenses or special permission from us is necessary. We're even building special tools for teachers.
+Yes. Many high school, college, and adult ed programs incorporate Free Code Camp into their coursework. We're open source, so no license or special permission from us is necessary. We're even building special tools for teachers.
We’ve put a lot of thought into how we introduce concepts. But you’re free to jump around.
As long as your code is publicly viewable, and you have a live demo, you can use whatever you want.
We’ll release these in Summer 2016. In the meantime, other people have completed our React/Sass and D3 projects by referencing their official documentation.
-You can reach out to them through our alumni network.
Quincy started our open source community in 2014. He is now just one of many active contributors.
We don’t accept donations. Instead, you should support us through our shop.
.spacer - .row - .col-xs-12.col-sm-10.col-sm-offset-1.col-md-6.col-md-offset-3 - h2.text-center Whom to contact for what - table.table.table-stripe - tr - td Support ( - a(href='mailto:team@freecodecamp.com') team@freecodecamp.com - | ) - td - a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson - tr - td Facebook page - td - a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson - tr - td Twitter feed - td - a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson - tr - td Medium publication - td - a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson - tr - td Media inquiries - td - a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson - tr - td Open source codebase contributions - td - a(href='https://gitter.im/BerkeleyTrue' target='_blank') @BerkeleyTrue - tr - td Server problems - td - a(href='https://gitter.im/BerkeleyTrue' target='_blank') @BerkeleyTrue - tr - td Nonprofit projects - td - a(href='https://gitter.im/CodeNonprofit' target='_blank') @CodeNonprofit - tr - td Volunteer agile project managers - td - a(href='https://gitter.im/CodeNonprofit' target='_blank') @CodeNonprofit - tr - td Commit program - td - a(href='https://gitter.im/CodeNonprofit' target='_blank') @CodeNonprofit - tr - td Video challenge curriculum - td - a(href='https://gitter.im/BrianaMarie' target='_blank') @BrianaMarie - tr - td Youtube channel - td - a(href='https://gitter.im/Septimus' target='_blank') @Septimus - tr - td JavaScript curriculum - td - a(href='https://gitter.im/SaintPeter' target='_blank') @SaintPeter - tr - td Data Science and Open Data - td - a(href='https://gitter.im/Evaristoc' target='_blank') @Evaristoc - tr - td CamperBot - td - a(href='https://gitter.im/LTegman' target='_blank') @LTegman - tr - td Translation and Internationalization - td - a(href='https://gitter.im/Vtamara' target='_blank') @Vtamara - tr - td Wiki - td - a(href='https://gitter.im/Rafase282' target='_blank') @Rafase282 - tr - td Local groups - td - a(href='https://gitter.im/Hallaathrad' target='_blank') @Hallaathrad + .row + .col-xs-12.col-sm-10.col-sm-offset-1.col-md-6.col-md-offset-3 + h2.text-center Whom to contact for what + table.table.table-stripe + tr + td Support ( + a(href='mailto:team@freecodecamp.com') team@freecodecamp.com + | ) + td + a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson + tr + td Facebook page + td + a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson + tr + td Twitter feed + td + a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson + tr + td Medium publication + td + a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson + tr + td Media inquiries + td + a(href='https://gitter.im/QuincyLarson' target='_blank') @QuincyLarson + tr + td Open source codebase contributions + td + a(href='https://gitter.im/BerkeleyTrue' target='_blank') @BerkeleyTrue + tr + td Server problems + td + a(href='https://gitter.im/BerkeleyTrue' target='_blank') @BerkeleyTrue + tr + td Nonprofit projects + td + a(href='https://gitter.im/CodeNonprofit' target='_blank') @CodeNonprofit + tr + td Volunteer agile project managers + td + a(href='https://gitter.im/CodeNonprofit' target='_blank') @CodeNonprofit + tr + td Commit program + td + a(href='https://gitter.im/CodeNonprofit' target='_blank') @CodeNonprofit + tr + td Video challenge curriculum + td + a(href='https://gitter.im/BrianaMarie' target='_blank') @BrianaMarie + tr + td Youtube channel + td + a(href='https://gitter.im/Septimus' target='_blank') @Septimus + tr + td JavaScript curriculum + td + a(href='https://gitter.im/SaintPeter' target='_blank') @SaintPeter + tr + td Data Science and Open Data + td + a(href='https://gitter.im/Evaristoc' target='_blank') @Evaristoc + tr + td CamperBot + td + a(href='https://gitter.im/LTegman' target='_blank') @LTegman + tr + td Translation and Internationalization + td + a(href='https://gitter.im/Vtamara' target='_blank') @Vtamara + tr + td Wiki + td + a(href='https://gitter.im/Rafase282' target='_blank') @Rafase282 + tr + td Local groups + td + a(href='https://gitter.im/Hallaathrad' target='_blank') @Hallaathrad + tr + td Forum + td + a(href='https://gitter.im/m-henderson' target='_blank') @m-henderson