Skip to content

Commit

Permalink
Merge pull request freeCodeCamp#3187 from QuincyLarson/learn-button
Browse files Browse the repository at this point in the history
add learn button
  • Loading branch information
QuincyLarson committed Sep 10, 2015
2 parents 2d082d4 + 239fac0 commit 308071b
Show file tree
Hide file tree
Showing 10 changed files with 73 additions and 98 deletions.
2 changes: 1 addition & 1 deletion client/commonFramework.js
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ function showCompletion() {
},
function(res) {
if (res) {
window.location = '/challenges/next-challenge';
window.location = '/challenges/next-challenge?id=' + challenge_Id;
}
}
);
Expand Down
8 changes: 4 additions & 4 deletions client/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ $(document).ready(function() {
}).success(
function(res) {
if (res) {
window.location.href = '/challenges/next-challenge';
window.location.href = '/challenges/next-challenge?id=' + challenge_Id;
}
}).fail(
function() {
Expand All @@ -164,7 +164,7 @@ $(document).ready(function() {
}
}).success(
function() {
window.location.href = '/challenges/next-challenge';
window.location.href = '/challenges/next-challenge?id=' + challenge_Id;
}).fail(
function() {
window.location.href = '/challenges';
Expand All @@ -187,13 +187,13 @@ $(document).ready(function() {
verified: false
}
}).success(function() {
window.location.href = '/challenges/next-challenge';
window.location.href = '/challenges/next-challenge?id=' + challenge_Id;
}).fail(function() {
window.location.replace(window.location.href);
});
break;
case challengeTypes.BONFIRE:
window.location.href = '/challenges/next-challenge';
window.location.href = '/challenges/next-challenge?id=' + challenge_Id;
default:
break;
}
Expand Down
105 changes: 25 additions & 80 deletions server/boot/challenge.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import {

import {
userMigration,
ifNoUserRedirectTo,
ifNoUserSend
} from '../utils/middleware';

Expand Down Expand Up @@ -100,9 +99,6 @@ module.exports = function(app) {
const userCount$ = observeMethod(User, 'count');

const send200toNonUser = ifNoUserSend(true);
const redirectNonUser = ifNoUserRedirectTo(
'/challenges/learn-how-free-code-camp-works'
);

router.post(
'/completed-challenge/',
Expand All @@ -125,26 +121,17 @@ module.exports = function(app) {
router.get('/map', challengeMap);
router.get(
'/challenges/next-challenge',
redirectNonUser,
returnNextChallenge
);

router.get('/challenges/:challengeName', returnIndividualChallenge);

router.get(
'/challenges/',
redirectNonUser,
returnCurrentChallenge
);

app.use(router);

function returnNextChallenge(req, res, next) {
let nextChallengeName = firstChallenge;

const challengeId = req.user.currentChallenge ?
req.user.currentChallenge.challengeId :
'bd7123c8c441eddfaeb5bdef';
const challengeId = req.query.id;

// find challenge
return challenge$
Expand Down Expand Up @@ -199,16 +186,13 @@ module.exports = function(app) {
nextChallengeName = nextChallenge.dashedName;
return nextChallengeName;
})
.flatMap(() => {
return saveUser(req.user);
})
.subscribe(
function() {},
next,
function() {
debug('next challengeName', nextChallengeName);
if (!nextChallengeName || nextChallengeName === firstChallenge) {
req.flash('errors', {
req.flash('info', {
msg: dedent`
Once you have completed all of our challenges, you should
join our <a href=\"//gitter.im/freecodecamp/HalfWayClub\"
Expand All @@ -223,34 +207,6 @@ module.exports = function(app) {
);
}

function returnCurrentChallenge(req, res, next) {
Observable.just(req.user)
.flatMap(user => {
if (!req.user.currentChallenge) {
return challenge$
.first()
.flatMap(challenge => {
user.currentChallenge = {
challengeId: challenge.id,
challengeName: challenge.name,
dashedName: challenge.dashedName
};
return saveUser(user);
});
}
return Observable.just(user);
})
.map(user => user.currentChallenge.dashedName)
.subscribe(
function(challengeName) {
res.redirect('/challenges/' + challengeName);
},
next,
function() {
}
);
}

function returnIndividualChallenge(req, res, next) {
const origChallengeName = req.params.challengeName;
const unDashedName = unDasherize(origChallengeName);
Expand Down Expand Up @@ -285,40 +241,29 @@ module.exports = function(app) {
return Observable.just('/challenges/' + dasherize(challenge.name));
}

if (challenge) {
if (req.user) {
req.user.currentChallenge = {
challengeId: challenge.id,
challengeName: challenge.name,
dashedName: challenge.dashedName
};
}

// save user does nothing if user does not exist
return saveUser(req.user)
.map(() => ({
title: challenge.name,
dashedName: origChallengeName,
name: challenge.name,
details: challenge.description,
tests: challenge.tests,
challengeSeed: challenge.challengeSeed,
verb: utils.randomVerb(),
phrase: utils.randomPhrase(),
compliment: utils.randomCompliment(),
challengeId: challenge.id,
challengeType: challenge.challengeType,
// video challenges
video: challenge.challengeSeed[0],
// bonfires specific
difficulty: Math.floor(+challenge.difficulty),
bonfires: challenge,
MDNkeys: challenge.MDNlinks,
MDNlinks: getMDNLinks(challenge.MDNlinks),
// htmls specific
environment: utils.whichEnvironment()
}));
}
// save user does nothing if user does not exist
return Observable.just({
title: challenge.name,
dashedName: origChallengeName,
name: challenge.name,
details: challenge.description,
tests: challenge.tests,
challengeSeed: challenge.challengeSeed,
verb: utils.randomVerb(),
phrase: utils.randomPhrase(),
compliment: utils.randomCompliment(),
challengeId: challenge.id,
challengeType: challenge.challengeType,
// video challenges
video: challenge.challengeSeed[0],
// bonfires specific
difficulty: Math.floor(+challenge.difficulty),
bonfires: challenge,
MDNkeys: challenge.MDNlinks,
MDNlinks: getMDNLinks(challenge.MDNlinks),
// htmls specific
environment: utils.whichEnvironment()
});
})
.subscribe(
function(data) {
Expand Down
5 changes: 3 additions & 2 deletions server/views/coursewares/showBonfire.jade
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ block content
var challenge_Name = !{JSON.stringify(name)};
var started = Math.floor(Date.now());
var challengeType = !{JSON.stringify(challengeType)};
var dashedName = !{JSON.stringify(dashedName)};
var _ = R;
var dashed = !{JSON.stringify(dashedName)};

Expand All @@ -140,14 +141,14 @@ block content
.spacer
.row
if (user)
#submit-challenge.animated.fadeIn.btn.btn-lg.btn-primary.btn-block Submit and go to next challenge
#submit-challenge.animated.fadeIn.btn.btn-lg.btn-primary.btn-block Submit and go to my next challenge

if (user.progressTimestamps.length > 2)
a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(target="_blank", href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript")
i.fa.fa-twitter &thinsp;
= phrase
else
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block(href='/challenges/next-challenge?id=' + challengeId) Go to my next challenge
#reset-modal.modal(tabindex='-1')
.modal-dialog.animated.fadeInUp.fast-animation
.modal-content
Expand Down
5 changes: 3 additions & 2 deletions server/views/coursewares/showHTML.jade
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ block content
var challenge_Id = !{JSON.stringify(challengeId)};
var challenge_Name = !{JSON.stringify(name)};
var prodOrDev = !{JSON.stringify(environment)};
var dashedName = !{JSON.stringify(dashedName)};
var challengeType = !{JSON.stringify(challengeType)};
var started = Math.floor(Date.now());
.col-xs-12.col-sm-12.col-md-5.col-lg-6
Expand Down Expand Up @@ -91,7 +92,7 @@ block content
span.completion-icon.ion-checkmark-circled.text-primary
.spacer
if(user)
#submit-challenge.animated.fadeIn.btn.btn-lg.btn-primary.btn-block Submit and go to next challenge
#submit-challenge.animated.fadeIn.btn.btn-lg.btn-primary.btn-block Submit and go to my next challenge
else
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block(href='/challenges/next-challenge?id=' + challengeId) Go to my next challenge
include ../partials/challenge-modals
3 changes: 2 additions & 1 deletion server/views/coursewares/showJS.jade
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ block content
var challengeSeed = !{JSON.stringify(challengeSeed)};
var challenge_Id = !{JSON.stringify(challengeId)};
var challenge_Name = !{JSON.stringify(name)};
var dashedName = !{JSON.stringify(dashedName)};
var started = Math.floor(Date.now());
var challengeType = !{JSON.stringify(challengeType)};
var _ = R;
Expand Down Expand Up @@ -93,7 +94,7 @@ block content
i.fa.fa-twitter &thinsp;
= phrase
else
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block(href='/challenges/next-challenge?id=' + challengeId) Go to my next challenge
include ../partials/challenge-modals
script.
var MDNlinks = !{JSON.stringify(MDNlinks)};
Expand Down
10 changes: 6 additions & 4 deletions server/views/coursewares/showVideo.jade
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ block content
iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}')
br
if (user)
a.btn.btn-primary.btn-big.btn-block#completed-courseware-editorless I've completed this challenge (ctrl + enter)
a.btn.btn-primary.btn-big.btn-block#completed-courseware-editorless I've completed this challenge (ctrl + enter)
script.
var userLoggedIn = true;
.button-spacer
Expand All @@ -30,6 +30,8 @@ block content
| &nbsp; Report a bug
.button-spacer
else
a.animated.fadeIn.btn.btn-big.btn-primary.btn-block(href='/challenges/next-challenge?id=' + challengeId) Go to my next challenge (ctrl + enter)
.button-spacer
a.btn.btn-big.signup-btn.btn-block(href='/login') Sign in so you can save your progress
script.
var userLoggedIn = false;
Expand Down Expand Up @@ -64,7 +66,7 @@ block content
.animated.zoomInDown.delay-half
span.completion-icon.ion-checkmark-circled.text-primary
if (user)
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf) On to my next challenge (ctrl + enter)
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf) Go to my next challenge
script.
$('#complete-courseware-editorless-dialog').bind('keypress', modalControlEnterHandler);

Expand All @@ -74,12 +76,12 @@ block content
i.fa.fa-twitter &thinsp;
= phrase
else
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
h1 #{name}
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block(href='/challenges/next-challenge?id=' + challengeId) Go to my next challenge
script.
$('body').bind('keypress', controlEnterHandler);
script.
var challenge_Id = !{JSON.stringify(challengeId)};
var challenge_Name = !{JSON.stringify(name)};
var challengeType = !{JSON.stringify(challengeType)};
var dashedName = !{JSON.stringify(dashedName)};
include ../partials/challenge-modals
11 changes: 7 additions & 4 deletions server/views/coursewares/showZiplineOrBasejump.jade
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ block content
iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}')
br
if (user)
a.btn.btn-primary.btn-big.btn-block#completed-zipline-or-basejump I've completed this challenge (ctrl + enter)
a.btn.btn-primary.btn-big.btn-block#completed-zipline-or-basejump I've completed this challenge (ctrl + enter)
.button-spacer
.btn-group.input-group.btn-group-justified
.btn.btn-success.btn-big#trigger-help-modal
Expand All @@ -33,14 +33,16 @@ block content
script.
var userLoggedIn = true;
else
a.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
a.animated.fadeIn.btn.btn-big.btn-primary.btn-block(href='/challenges/next-challenge?id=' + challengeId) Go to my next challenge (ctrl + enter)
a.btn.btn-big.signup-btn.btn-block(href='/login') Sign in so you can save your progress
script.
var userLoggedIn = false;
br
script(type="text/javascript").
var challenge_Id = !{JSON.stringify(challengeId)};
var challenge_Name = !{JSON.stringify(name)};
var started = Math.floor(Date.now());
var dashedName = !{JSON.stringify(dashedName)};
var challengeType = !{JSON.stringify(challengeType)};
var controlEnterHandler = function (e) {
$('body').unbind('keypress');
Expand Down Expand Up @@ -87,11 +89,12 @@ block content
| Username not found

if (user)
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf, ng-disabled='completedWithForm.$invalid') Go to my next challenge (ctrl + enter)
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf, ng-disabled='completedWithForm.$invalid') Go to my next challenge
.button-spacer
script.
$('#complete-zipline-or-basejump-dialog').on('keypress', modalControlEnterHandler);
else
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block(href='/challenges/next-challenge?id=' + challengeId) Go to my next challenge
script.
$('body').on('keypress', controlEnterHandler);
include ../partials/challenge-modals
4 changes: 4 additions & 0 deletions server/views/partials/challenge-modals.jade
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,7 @@
h3 This will restore your code editor to its original state.
a.btn.btn-lg.btn-info.btn-block#reset-button(href='#', data-dismiss='modal', aria-hidden='true') Clear my code
a.btn.btn-lg.btn-primary.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel
script.
if (typeof localStorage !== 'undefined') {
localStorage.setItem('currentDashedName', dashedName);
}
18 changes: 18 additions & 0 deletions server/views/partials/navbar.jade
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ nav.navbar.navbar-default.navbar-fixed-top.nav-height
img.img-responsive.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt='learn to code javascript at Free Code Camp logo')
.collapse.navbar-collapse
ul.nav.navbar-nav.navbar-right.hamburger-dropdown
li
a.learn-btn(href='#') Learn
li
a(href='/map') Map
li
Expand All @@ -32,3 +34,19 @@ nav.navbar.navbar-default.navbar-fixed-top.nav-height
.hidden-xs.hidden-sm
a(href='/account')
img.profile-picture.float-right(src='#{user.picture}')
script.
$(document).ready(function() {
$('.learn-btn').click(function(e) {
var challengeDashedName = null;
e.preventDefault();
if (typeof dashedName === "string") {
return location.reload();
}
if (typeof localStorage !== 'undefined') {
challengeDashedName = localStorage.getItem('currentDashedName');
}
window.location = challengeDashedName ?
'/challenges/' + challengeDashedName :
'/map';
});
});

0 comments on commit 308071b

Please sign in to comment.