From 693b8fbb33d181d36a8162de22435cc30aa4da57 Mon Sep 17 00:00:00 2001 From: Nathan Leniz Date: Sat, 14 Feb 2015 17:28:07 -0500 Subject: [PATCH 1/3] Forward progress, need to resolve script loading timing --- .../coursewaresHCJQFramework_v0.1.1.js | 17 +++++------------ public/js/lib/coursewares/iFrameScripts.js | 7 +++++-- views/coursewares/showHTML.jade | 7 +++++-- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/public/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js b/public/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js index 189f796c6a..57902866c3 100644 --- a/public/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js +++ b/public/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js @@ -62,24 +62,18 @@ function updatePreview() { var previewFrame = document.getElementById('preview'); var preview = previewFrame.contentDocument || previewFrame.contentWindow.document; preview.open(); - preview.write(libraryIncludes + editor.getValue()); + preview.write(libraryIncludes + editor.getValue() + otherTestsForNow); preview.close(); } setTimeout(updatePreview, 300); /** - * Window postMessage receiving funtionality + * "post" methods */ -var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; -var eventer = window[eventMethod]; -var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; -// Listen to message from child window -eventer(messageEvent,function(e) { - if (e.data === 'CompleteAwesomeSauce') { - showCompletion(); - } -},false); +var postSuccess = function() { + showCompletion(); +}; var postError = function(data) { console.log(Object.keys(data)); @@ -128,7 +122,6 @@ function showCompletion() { ga('send', 'event', 'Challenge', 'solved', challengeName + ', Time: ' + time); $('#next-courseware-button').removeAttr('disabled'); $('#next-courseware-button').addClass('animated tada'); - console.log(!userLoggedIn); if (!userLoggedIn) { $('#complete-courseware-dialog').modal('show'); } diff --git a/public/js/lib/coursewares/iFrameScripts.js b/public/js/lib/coursewares/iFrameScripts.js index 5c3d38998f..0f48528f6f 100644 --- a/public/js/lib/coursewares/iFrameScripts.js +++ b/public/js/lib/coursewares/iFrameScripts.js @@ -8,11 +8,14 @@ try { eval(tests[i]); } catch (err) { - parent.postError(err); allTestsGood = false; + console.log('All tests are good?', allTestsGood); + parent.postError(err); + } finally { if (allTestsGood) { - parent.postMessage('CompleteAwesomeSauce', parent.nodeEnv); + console.log('You should not be able to see me if there are errors on teh screen!', allTestsGood); + parent.postSuccess(); } } } diff --git a/views/coursewares/showHTML.jade b/views/coursewares/showHTML.jade index 0cd9ce5244..e4835ecce2 100644 --- a/views/coursewares/showHTML.jade +++ b/views/coursewares/showHTML.jade @@ -71,7 +71,6 @@ block content form.code .form-group.codeMirrorView textarea#codeEditor(autofocus=true) - script(src='/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js') .col-md-4.col-lg-3 .hidden-xs.hidden-sm img.iphone-position(src="https://s3.amazonaws.com/freecodecamp/iphone6-frame.png") @@ -88,4 +87,8 @@ block content .text-center .animated.zoomInDown.delay-half 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 \ No newline at end of file + a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress + script. + $(document).ready(function() { + script(src='/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js') + }); \ No newline at end of file From 9ac19023d9a49131f0f6a3fb41b1ba753fcb7e29 Mon Sep 17 00:00:00 2001 From: Nathan Leniz Date: Sat, 14 Feb 2015 18:31:32 -0500 Subject: [PATCH 2/3] Show tests on html view --- .../coursewaresHCJQFramework_v0.1.1.js | 23 +++++++++++++++---- public/js/lib/coursewares/iFrameScripts.js | 15 +++++------- seed_data/coursewares.json | 2 +- views/coursewares/showHTML.jade | 12 ++++------ 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/public/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js b/public/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js index 57902866c3..236c80b05a 100644 --- a/public/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js +++ b/public/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js @@ -59,11 +59,14 @@ editor.on("change", function () { }); var nodeEnv = prodOrDev === 'production' ? 'http://www.freecodecamp.com' : 'http://localhost:3001'; function updatePreview() { + goodTests = 0; var previewFrame = document.getElementById('preview'); var preview = previewFrame.contentDocument || previewFrame.contentWindow.document; preview.open(); + $('#testSuite').empty(); preview.write(libraryIncludes + editor.getValue() + otherTestsForNow); preview.close(); + } setTimeout(updatePreview, 300); @@ -71,17 +74,27 @@ setTimeout(updatePreview, 300); * "post" methods */ -var postSuccess = function() { - showCompletion(); +var postSuccess = function(data) { + var testDoc = document.createElement("div"); + $(testDoc) + .html("
" + JSON.parse(data) + "
") + .appendTo($('#testSuite')); + testSuccess(); }; var postError = function(data) { - console.log(Object.keys(data)); var testDoc = document.createElement("div"); $(testDoc) - .html("
" + data + "
") + .html("
" + JSON.parse(data) + "
") .prependTo($('#testSuite')) }; +var goodTests = 0; +var testSuccess = function() { + goodTests++; + if (goodTests === tests.length) { + showCompletion(); + } +}; var challengeSeed = challengeSeed || null; var tests = tests || []; var allSeeds = ''; @@ -116,7 +129,7 @@ function doLinting () { }); }; - +//$('#testSuite').empty(); function showCompletion() { var time = Math.floor(Date.now() / 1000) - started; ga('send', 'event', 'Challenge', 'solved', challengeName + ', Time: ' + time); diff --git a/public/js/lib/coursewares/iFrameScripts.js b/public/js/lib/coursewares/iFrameScripts.js index 0f48528f6f..86ac7cff28 100644 --- a/public/js/lib/coursewares/iFrameScripts.js +++ b/public/js/lib/coursewares/iFrameScripts.js @@ -1,21 +1,18 @@ (function() { - var allTestsGood = true; var expect = chai.expect; var tests = parent.tests; for (var i = 0; i < tests.length; i++) { - + var thisTest = true; try { - eval(tests[i]); + eval(parent.tests[i]); } catch (err) { allTestsGood = false; - console.log('All tests are good?', allTestsGood); - parent.postError(err); - + thisTest = false; + parent.postError(JSON.stringify(tests[i])); } finally { - if (allTestsGood) { - console.log('You should not be able to see me if there are errors on teh screen!', allTestsGood); - parent.postSuccess(); + if (thisTest) { + parent.postSuccess(JSON.stringify(tests[i])); } } } diff --git a/seed_data/coursewares.json b/seed_data/coursewares.json index e7c4a99289..8b93ec00ad 100644 --- a/seed_data/coursewares.json +++ b/seed_data/coursewares.json @@ -575,7 +575,7 @@ ], "tests": [ "expect($('img')).to.have.class('thick-green-border');", - "expect($('img')).to.have.css('border-color', 'rgb(0,255,0)');", + "expect($('img')).to.have.css('border-color', 'rgb(0, 255, 0)');", "expect($('img')).to.have.css('border-width', '10px');" ], "challengeSeed": [ diff --git a/views/coursewares/showHTML.jade b/views/coursewares/showHTML.jade index e4835ecce2..676aadf774 100644 --- a/views/coursewares/showHTML.jade +++ b/views/coursewares/showHTML.jade @@ -39,10 +39,8 @@ block content button#less-info.btn.btn-info span.ion-help-circled | Less information - br - ul#testSuite.list-group br - script(src='/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js') + - if (cc) a.btn.btn-primary.btn-lg.btn-block#next-courseware-button | Go to my next challenge @@ -55,7 +53,8 @@ block content a.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress script. var userLoggedIn = false; - div.hidden + br + ul#testSuite.list-group br script(type="text/javascript"). @@ -88,7 +87,4 @@ block content .animated.zoomInDown.delay-half 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. - $(document).ready(function() { - script(src='/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js') - }); \ No newline at end of file + script(src="/js/lib/coursewares/coursewaresHCJQFramework_v0.1.1.js") From e3c9e42fced4f9cd95e80ef2bd3bacb794d55465 Mon Sep 17 00:00:00 2001 From: Nathan Leniz Date: Sat, 14 Feb 2015 18:43:45 -0500 Subject: [PATCH 3/3] showJS view now shows errors in a pretty format (kinda) --- .../lib/coursewares/coursewaresJSFramework.js | 25 ++++++------------- views/coursewares/showJS.jade | 2 +- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/public/js/lib/coursewares/coursewaresJSFramework.js b/public/js/lib/coursewares/coursewaresJSFramework.js index 72a24eff4d..60af334324 100644 --- a/public/js/lib/coursewares/coursewaresJSFramework.js +++ b/public/js/lib/coursewares/coursewaresJSFramework.js @@ -34,21 +34,6 @@ if (attempts) { attempts = 0; } -// Default value for editor if one isn't provided in (i.e. a challenge) -var nonChallengeValue = '/*Welcome to Bonfire, Free Code Camp\'s future CoderByte replacement.\n' + - 'Please feel free to use Bonfire as an in-browser playground and linting tool.\n' + - 'Note that you can also write tests using Chai.js by using the keywords assert and expect */\n\n' + - 'function test() {\n' + - ' assert(2 !== 3, "2 is not equal to 3");\n' + - ' return [1,2,3].map(function(elem) {\n' + - ' return elem * elem;\n' + - ' });\n' + - '}\n' + - 'expect(test()).to.be.a("array");\n\n' + - 'assert.deepEqual(test(), [1,4,9]);\n\n' + - 'var foo = test();\n' + - 'foo.should.be.a("array");\n\n' + - 'test();\n'; var codeOutput = CodeMirror.fromTextArea(document.getElementById("codeOutput"), { lineNumbers: false, @@ -183,12 +168,13 @@ var createTestDisplay = function() { 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 + "
") .prependTo($('#testSuite')) } else { $(testDoc) - .html("
" + test.text + "
") + .html("
" + test.text + "
") .appendTo($('#testSuite')); } }; @@ -220,8 +206,11 @@ var runTests = function(err, data) { } } catch(error) { allTestsPassed = false; - console.log(error); arr[ix].err = error.name + ":" + error.message; + } finally { + if (!test) { + createTestDisplay(); + } } }); diff --git a/views/coursewares/showJS.jade b/views/coursewares/showJS.jade index 71c8e037e3..3570432d41 100644 --- a/views/coursewares/showJS.jade +++ b/views/coursewares/showJS.jade @@ -42,7 +42,7 @@ block content .form-group.codeMirrorView textarea#codeOutput br - #testSuite.hidden + #testSuite br script(type="text/javascript"). var tests = !{JSON.stringify(tests)};