diff --git a/app.js b/app.js
index 530d5b2c01..846acd690b 100644
--- a/app.js
+++ b/app.js
@@ -326,6 +326,7 @@ app.post('/completed-bonfire/', bonfireController.completedBonfire);
*/
app.get('/coursewares/', coursewareController.returnNextCourseware);
+app.get('/coursewares/getCoursewareList', coursewareController.showAllCoursewares);
app.get(
'/coursewares/:coursewareName',
coursewareController.returnIndividualCourseware
diff --git a/controllers/courseware.js b/controllers/courseware.js
index 58e57cef7d..4dcf0e1cb3 100644
--- a/controllers/courseware.js
+++ b/controllers/courseware.js
@@ -2,16 +2,23 @@ var _ = require('lodash'),
debug = require('debug')('freecc:cntr:courseware'),
Courseware = require('./../models/Courseware'),
User = require('./../models/User'),
- resources = require('./resources');
+ resources = require('./resources'),
+ R = require('ramda');
/**
* Courseware controller
*/
-exports.coursewareNames = function(req, res) {
- res.render('coursewares/showList', {
- coursewareList: resources.allCoursewareNames()
+exports.showAllCoursewares = function(req, res) {
+ var completedCoursewares = req.user.completedCoursewares.map(function(elem) {
+ return elem._id;
});
+
+ var noDuplicatedCoursewares = R.uniq(completedCoursewares);
+ var data = {};
+ data.coursewareList = resources.allCoursewareNames();
+ data.completedList = noDuplicatedCoursewares;
+ res.send(data);
};
exports.returnNextCourseware = function(req, res) {
@@ -29,13 +36,15 @@ exports.returnNextCourseware = function(req, res) {
});
req.user.save();
- var uncompletedCoursewares = req.user.uncompletedCoursewares;
+ var uncompletedCoursewares = req.user.uncompletedCoursewares.shift();
- var displayedCoursewares = Courseware.find({'_id': uncompletedCoursewares[0]});
+
+ var displayedCoursewares = Courseware.find({'_id': uncompletedCoursewares});
displayedCoursewares.exec(function(err, courseware) {
if (err) {
next(err);
}
+ debug('This is the courseware object returned from mongo', courseware);
courseware = courseware.pop();
if (courseware === undefined) {
req.flash('errors', {
diff --git a/controllers/resources.js b/controllers/resources.js
index e02680289e..b8c7be6a4e 100644
--- a/controllers/resources.js
+++ b/controllers/resources.js
@@ -239,15 +239,19 @@ module.exports = {
return coursewares.map(function(elem) {
return {
name: elem.name,
- difficulty: elem.difficulty
+ difficulty: elem.difficulty,
+ _id: elem._id
}
})
.sort(function(a, b) {
return a.difficulty - b.difficulty;
})
- .map(function(elem) {
- return elem.name;
- });
+ .map (function(elem) {
+ return {
+ name : elem.name,
+ _id: elem._id
+ }
+ });
},
whichEnvironment: function() {
return process.env.NODE_ENV;
diff --git a/public/js/main.js b/public/js/main.js
index 07a805ae9b..d9162a53c9 100644
--- a/public/js/main.js
+++ b/public/js/main.js
@@ -78,6 +78,14 @@ $(document).ready(function() {
editor.focus();
});
+ $('#showAllCoursewares').on('click', function() {
+ $('#all-coursewares-dialog').modal('show');
+ });
+
+ $('#all-coursewares-dialog').on('hidden.bs.modal', function() {
+ editor.focus();
+ });
+
$('#complete-courseware-dialog').on('hidden.bs.modal', function() {
editor.focus();
@@ -90,12 +98,12 @@ $(document).ready(function() {
coursewareInfo: {
coursewareHash: passedCoursewareHash
}
- },
- function(res) {
- if (res) {
- window.location.href = '/coursewares'
- }
- })
+ }).success(
+ function() {
+ window.location.href = '/coursewares';
+ }
+ )
+
}
});
diff --git a/seed_data/seed.js b/seed_data/seed.js
index 6549c3cc71..6e2b34794d 100644
--- a/seed_data/seed.js
+++ b/seed_data/seed.js
@@ -1,17 +1,15 @@
require('dotenv').load();
-var Challenge = require('../models/Challenge.js'),
- Bonfire = require('../models/Bonfire.js'),
+var Bonfire = require('../models/Bonfire.js'),
Courseware = require('../models/Courseware.js'),
mongoose = require('mongoose'),
secrets = require('../config/secrets'),
- challenges = require('./challenges.json'),
coursewares = require('./coursewares.json'),
bonfires = require('./bonfires.json');
mongoose.connect(secrets.db);
var counter = 0;
-var offerings = 3;
+var offerings = 2;
var CompletionMonitor = function() {
counter++;
@@ -22,24 +20,8 @@ var CompletionMonitor = function() {
} else {
process.exit(0);
}
-}
+};
-Challenge.remove({}, function(err, data) {
- if (err) {
- console.error(err);
- } else {
- console.log('Deleted ', data);
- }
- Challenge.create(challenges, function(err, data) {
- if (err) {
- console.log(err);
- } else {
- console.log('Saved ', data);
- }
- CompletionMonitor();
- });
- console.log('challenges');
-});
Bonfire.remove({}, function(err, data) {
if (err) {
diff --git a/views/coursewares/showHTML.jade b/views/coursewares/showHTML.jade
index 676aadf774..b54649a318 100644
--- a/views/coursewares/showHTML.jade
+++ b/views/coursewares/showHTML.jade
@@ -18,6 +18,8 @@ block content
script(src='/js/lib/codemirror/mode/xml/xml.js')
script(src='/js/lib/codemirror/mode/css/css.js')
script(src='/js/lib/codemirror/mode/htmlmixed/htmlmixed.js')
+ script(src="https://cdn.jsdelivr.net/ramda/0.10.0/ramda.min.js")
+
.row.courseware-height
.col-xs-12.col-sm-12.col-md-3.col-lg-3
.well
@@ -40,6 +42,7 @@ block content
span.ion-help-circled
| Less information
br
+ .btn.btn-info#showAllCoursewares
- if (cc)
a.btn.btn-primary.btn-lg.btn-block#next-courseware-button
@@ -88,3 +91,11 @@ block content
span.completion-icon.ion-checkmark-circled.text-primary
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
script(src="/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js")
+
+ #all-coursewares-dialog.modal(tabindex='-1')
+ .modal-dialog.animated.fadeInUp.fast-animation
+ .modal-content
+ .modal-header.all-list-header Challenges
+ a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') ×
+ .modal-body
+ include ../partials/coursewares
diff --git a/views/coursewares/showJS.jade b/views/coursewares/showJS.jade
index 3570432d41..4e4a364565 100644
--- a/views/coursewares/showJS.jade
+++ b/views/coursewares/showJS.jade
@@ -47,7 +47,7 @@ block content
script(type="text/javascript").
var tests = !{JSON.stringify(tests)};
var challengeSeed = !{JSON.stringify(challengeSeed)};
- var passedBonfireHash = !{JSON.stringify(coursewareHash)};
+ var passedCoursewareHash = !{JSON.stringify(coursewareHash)};
var challengeName = !{JSON.stringify(name)};
var started = Math.floor(Date.now() / 1000);
.col-xs-12.col-sm-12.col-md-8
@@ -67,10 +67,10 @@ block content
span.completion-icon.ion-checkmark-circled.text-primary
- if (cc)
- a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block.next-courseware-button(name='_csrf', value=_csrf, ng-disabled='completedWithForm.$invalid && existingUser.length > 0') 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 && existingUser.length > 0') Go to my next challenge (ctrl + enter)
- if (points && points > 2)
- a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20Bonfire:%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/bonfires/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank")
- i.fa.fa-twitter
- = phrase
+ a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20Challenge:%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank")
+ i.fa.fa-twitter
+ = phrase
- else
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
\ No newline at end of file
diff --git a/views/partials/bonfires.jade b/views/partials/bonfires.jade
index 3dfb6da030..33fb57c7b9 100644
--- a/views/partials/bonfires.jade
+++ b/views/partials/bonfires.jade
@@ -16,7 +16,7 @@ h3
if (R.contains(data.bonfireList[i]._id, data.completedList)) {
$(li).addClass('strikethrough');
}
- $(li).html("" + data.bonfireList[i].name + "");
+ $(li).html("" + data.bonfireList[i].name + "");
$(li).appendTo($('#bonfireList'));
}
diff --git a/views/partials/coursewares.jade b/views/partials/coursewares.jade
new file mode 100644
index 0000000000..8218b82c7a
--- /dev/null
+++ b/views/partials/coursewares.jade
@@ -0,0 +1,23 @@
+h3
+ ol#coursewareList
+ script.
+ var getLinkedName = function getLinkedName(name) {
+ return name.toLowerCase().replace(/\s/g, '-');
+ }
+ $.ajax({
+ url: '/coursewares/getCoursewareList',
+ type: 'GET'
+ })
+ .success(
+ function(data) {
+ for (var i = 0; i < data.coursewareList.length; i++) {
+ var li = document.createElement('li');
+ var linkedName = getLinkedName(data.coursewareList[i].name);
+ if (R.contains(data.coursewareList[i]._id, data.completedList)) {
+ $(li).addClass('strikethrough');
+ }
+ $(li).html("" + data.coursewareList[i].name + "");
+ $(li).appendTo($('#coursewareList'));
+
+ }
+ });