diff --git a/pm2Start.js b/pm2Start.js new file mode 100644 index 0000000000..f096f0bca6 --- /dev/null +++ b/pm2Start.js @@ -0,0 +1,10 @@ +var pm2 = require('pm2'); +pm2.connect(function() { + pm2.start({ + script: 'server/server.js', + exec_mode: 'fork', + max_memory_restart: '900M' + }, function(err, apps) { + pm2.disconnect(); + }); +}); diff --git a/public/js/lib/coursewares/coursewaresJSFramework_0.0.5.js b/public/js/lib/coursewares/coursewaresJSFramework_0.0.5.js index 2183c226d7..b62e752a99 100644 --- a/public/js/lib/coursewares/coursewaresJSFramework_0.0.5.js +++ b/public/js/lib/coursewares/coursewaresJSFramework_0.0.5.js @@ -18,7 +18,7 @@ editor.setSize("100%", "auto"); // Hijack tab key to enter two spaces intead editor.setOption("extraKeys", { Tab: function(cm) { - if (cm.somethingSelected()){ + if (cm.somethingSelected()) { cm.indentSelection("add"); } else { var spaces = Array(cm.getOption("indentUnit") + 1).join(" "); @@ -26,7 +26,7 @@ editor.setOption("extraKeys", { } }, "Shift-Tab": function(cm) { - if (cm.somethingSelected()){ + if (cm.somethingSelected()) { cm.indentSelection("subtract"); } else { var spaces = Array(cm.getOption("indentUnit") + 1).join(" "); @@ -61,7 +61,10 @@ codeOutput.setValue('/**\n' + ' */'); codeOutput.setSize("100%", "100%"); var info = editor.getScrollInfo(); -var after = editor.charCoords({line: editor.getCursor().line + 1, ch: 0}, "local").top; +var after = editor.charCoords({ + line: editor.getCursor().line + 1, + ch: 0 +}, "local").top; if (info.top + info.clientHeight < after) editor.scrollTo(null, after - info.clientHeight + 3); @@ -83,8 +86,8 @@ editorValue = allSeeds; myCodeMirror.setValue(editorValue); -function doLinting () { - editor.operation(function () { +function doLinting() { + editor.operation(function() { for (var i = 0; i < widgets.length; ++i) editor.removeLineWidget(widgets[i]); widgets.length = 0; @@ -106,14 +109,14 @@ function doLinting () { }); }; -$('#submitButton').on('click', function () { +$('#submitButton').on('click', function() { bonfireExecute(); }); function bonfireExecute() { attempts++; - ga('send', 'event', 'Challenge', 'ran-code', challenge_Name); - userTests= null; + ga('send', 'event', 'Challenge', 'ran-code', challenge_Name); + userTests = null; $('#codeOutput').empty(); var userJavaScript = myCodeMirror.getValue(); userJavaScript = removeComments(userJavaScript); @@ -145,16 +148,23 @@ var scrapeTests = function(userJavaScript) { } var counter = 0; - var regex = new RegExp(/(expect(\s+)?\(.*\;)|(assert(\s+)?\(.*\;)|(assert\.\w.*\;)|(.*\.should\..*\;)/); + var regex = new RegExp( + /(expect(\s+)?\(.*\;)|(assert(\s+)?\(.*\;)|(assert\.\w.*\;)|(.*\.should\..*\;)/ + ); var match = regex.exec(userJavaScript); while (match != null) { var replacement = '//' + counter + testSalt; - userJavaScript = userJavaScript.substring(0, match.index) + replacement + userJavaScript.substring(match.index + match[0].length); + userJavaScript = userJavaScript.substring(0, match.index) + replacement + + userJavaScript.substring(match.index + match[0].length); if (!userTests) { - userTests= []; + userTests = []; } - userTests.push({"text": match[0], "line": counter, "err": null}); + userTests.push({ + "text": match[0], + "line": counter, + "err": null + }); counter++; match = regex.exec(userJavaScript); } @@ -176,17 +186,22 @@ var createTestDisplay = function() { if (pushed) { userTests.pop(); } - for (var i = 0; i < userTests.length;i++) { + for (var i = 0; i < userTests.length; i++) { var test = userTests[i]; var testDoc = document.createElement("div"); if (test.err != null) { console.log('Should be displaying bad tests'); $(testDoc) - .html("
" + test.text + "
" + test.err + "
") + .html( + "
" + + test.text + "
" + + test.err + "
") .appendTo($('#testSuite')); } else { $(testDoc) - .html("
" + test.text + "
") + .html( + "
" + + test.text + "
") .appendTo($('#testSuite')); } }; @@ -208,18 +223,21 @@ var runTests = function(err, data) { pushed = false; $('#testSuite').children().remove(); if (err && userTests.length > 0) { - userTests= [{text:"Program Execution Failure", err: "No user tests were run."}]; + userTests = [{ + text: "Program Execution Failure", + err: "No user tests were run." + }]; createTestDisplay(); } else if (userTests) { userTests.push(false); pushed = true; - userTests.forEach(function(chaiTestFromJSON, indexOfTestArray, __testArray){ + userTests.forEach(function(chaiTestFromJSON, indexOfTestArray, + __testArray) { try { if (chaiTestFromJSON) { var output = eval(reassembleTest(chaiTestFromJSON, data)); - debugger; } - } catch(error) { + } catch (error) { allTestsPassed = false; __testArray[indexOfTestArray].err = error.message; } finally { @@ -239,12 +257,12 @@ var runTests = function(err, data) { function showCompletion() { var time = Math.floor(Date.now()) - started; - ga('send', 'event', 'Challenge', 'solved', challenge_Name + ', Time: ' + time +', Attempts: ' + attempts); + ga('send', 'event', 'Challenge', 'solved', challenge_Name + ', Time: ' + time + + ', Attempts: ' + attempts); var bonfireSolution = myCodeMirror.getValue(); var didCompleteWith = $('#completed-with').val() || null; $.post( - '/completed-bonfire/', - { + '/completed-bonfire/', { challengeInfo: { challengeId: challenge_Id, challengeName: challenge_Name, @@ -252,10 +270,11 @@ function showCompletion() { challengeType: challengeType, solution: bonfireSolution } - }, function(res) { + }, + function(res) { if (res) { $('#complete-courseware-dialog').modal('show'); - $('#complete-courseware-dialog').keydown(function (e) { + $('#complete-courseware-dialog').keydown(function(e) { if (e.ctrlKey && e.keyCode == 13) { $('#next-courseware-button').click(); } diff --git a/server/server.js b/server/server.js index 0760aa6b08..3b6cbafa85 100755 --- a/server/server.js +++ b/server/server.js @@ -145,7 +145,8 @@ app.use(helmet.csp({ '*.aspnetcdn.com', '*.d3js.org', 'https://cdn.inspectlet.com/inspectlet.js', - 'http://cdn.inspectlet.com/inspectlet.js' + 'http://cdn.inspectlet.com/inspectlet.js', + 'http://www.freecodecamp.org' ].concat(trusted), 'connect-src': [].concat(trusted), styleSrc: [