diff --git a/app.js b/app.js index c475713f88..3b620225cd 100644 --- a/app.js +++ b/app.js @@ -289,7 +289,7 @@ app.post('/completed-bonfire/', bonfireController.completedBonfire); * Courseware related routes */ -app.get('/coursewares', coursewareController.returnNextCourseware); +app.get('/coursewares/', coursewareController.returnNextCourseware); app.get( '/coursewares/:coursewareName', coursewareController.returnIndividualCourseware diff --git a/controllers/courseware.js b/controllers/courseware.js index 38c783106b..cac15ab86f 100644 --- a/controllers/courseware.js +++ b/controllers/courseware.js @@ -58,33 +58,39 @@ exports.returnIndividualCourseware = function(req, res, next) { next(err); } courseware = courseware.pop(); + + // Handle not found + if (courseware.length < 1) { + req.flash('errors', { + msg: "404: We couldn't find a challenge with that name. Please double check the name." + }); + return res.redirect('/coursewares') + } + + // Redirect to full name if the user only entered a partial var dashedNameFull = courseware.name.toLowerCase().replace(/\s/g, '-'); if (dashedNameFull != dashedName) { return res.redirect('../coursewares/' + dashedNameFull); } - if (courseware.length < 1) { - req.flash('errors', { - msg: "404: We couldn't find a challenge with that name. Please double check the name." - }); - return res.redirect('/coursewares') - } else { - res.render('coursewares/show', { - title: courseware.name, - dashedName: dashedName, - name: courseware.name, - brief: courseware.description[0], - details: courseware.description.slice(1), - tests: courseware.tests, - challengeSeed: courseware.challengeSeed, - cc: !!req.user, - points: req.user ? req.user.points : undefined, - verb: resources.randomVerb(), - phrase: resources.randomPhrase(), - compliment: resources.randomCompliment(), - coursewareHash: courseware._id - }); - } + // Render the view for the user + res.render('coursewares/show', { + title: courseware.name, + dashedName: dashedName, + name: courseware.name, + brief: courseware.description[0], + details: courseware.description.slice(1), + tests: courseware.tests, + challengeSeed: courseware.challengeSeed, + cc: !!req.user, + points: req.user ? req.user.points : undefined, + verb: resources.randomVerb(), + phrase: resources.randomPhrase(), + compliment: resources.randomCompliment(), + coursewareHash: courseware._id + + }); + }); }; diff --git a/public/js/lib/bonfire/bonfireFramework.js b/public/js/lib/bonfire/bonfireFramework.js index 95d8bada06..b807263ac7 100644 --- a/public/js/lib/bonfire/bonfireFramework.js +++ b/public/js/lib/bonfire/bonfireFramework.js @@ -21,6 +21,15 @@ var myCodeMirror = CodeMirror.fromTextArea(document.getElementById("codeEditor") var editor = myCodeMirror; editor.setSize("100%", "auto"); +// Hijack tab key to enter two spaces intead +editor.setOption("extraKeys", { + Tab: function(cm) { + var spaces = Array(cm.getOption("indentUnit") + 1).join(" "); + cm.replaceSelection(spaces); + } +}); + + var attempts = 0; if (attempts) { diff --git a/public/js/lib/coursewares/coursewaresFramework.js b/public/js/lib/coursewares/coursewaresFramework.js index ba06db1afc..c43b161300 100644 --- a/public/js/lib/coursewares/coursewaresFramework.js +++ b/public/js/lib/coursewares/coursewaresFramework.js @@ -23,14 +23,22 @@ var myCodeMirror = CodeMirror.fromTextArea(document.getElementById("codeEditor") } }); var editor = myCodeMirror; + + +// Hijack tab key to insert two spaces instead +editor.setOption("extraKeys", { + Tab: function(cm) { + var spaces = Array(cm.getOption("indentUnit") + 1).join(" "); + cm.replaceSelection(spaces); + } +}); + editor.setSize("100%", "auto"); var libraryIncludes = "" + "" + "" + "" + - "" + - "" + "" + "" + "" +