Permalink
Cannot retrieve contributors at this time
Fetching contributors…

// what are the executeChallenge functions? | |
// Should be responsible for starting after a submit action | |
// Should not be responsible for displaying results | |
// Should return results | |
// should grab editor value | |
// depends on main editor | |
window.common = (function(global) { | |
const { | |
ga, | |
Rx: { Observable }, | |
common = { init: [] } | |
} = global; | |
let attempts = 0; | |
common.executeChallenge$ = function executeChallenge$() { | |
const code = common.editor.getValue(); | |
const head = common.arrayToNewLineString(common.head); | |
const tail = common.arrayToNewLineString(common.tail); | |
attempts++; | |
ga('send', 'event', 'Challenge', 'ran-code', common.challengeName); | |
// run checks for unsafe code | |
return common.detectUnsafeCode$(code) | |
// add head and tail and detect loops | |
.map(code => head + code + tail) | |
.flatMap(code => { | |
if (common.challengeType === common.challengeTypes.HTML) { | |
if (common.hasJs(code)) { | |
// html has a script code | |
// add faux code and test in webworker | |
return common.addFaux$(code) | |
.flatMap(code => common.detectLoops$(code)) | |
.flatMap(({ err }) => { | |
if (err) { | |
return Observable.throw(err); | |
} | |
return common.updatePreview$(code) | |
.flatMap(() => common.runPreviewTests$({ | |
code, | |
tests: common.tests.slice() | |
})); | |
}); | |
} | |
// no script code detected in html code | |
// Update preview and run tests in iframe | |
return common.updatePreview$(code) | |
.flatMap(code => common.runPreviewTests$({ | |
code, | |
tests: common.tests.slice() | |
})); | |
} | |
// js challenge | |
// remove comments and add tests to string | |
return common.addTestsToString(Object.assign( | |
{ | |
code: common.removeComments(code), | |
tests: common.tests.slice() | |
} | |
)) | |
.flatMap(common.detectLoops$) | |
.flatMap(({ err, code, data, userTests }) => { | |
if (err) { | |
return Observable.throw(err); | |
} | |
// run tests | |
// for now these are running in the browser | |
return common.runTests$({ | |
data, | |
code, | |
userTests, | |
output: data.output.replace(/\\\"/gi, '') | |
}); | |
}); | |
}); | |
}; | |
return common; | |
}(window)); |