Merge branch 'staging' of https://github.com/FreeCodeCamp/freecodecamp into greasan-translateDE
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -26,3 +26,4 @@ Thumbs.db
|
||||
bower_components
|
||||
main.css
|
||||
bundle.js
|
||||
coverage
|
||||
|
@@ -6,6 +6,9 @@
|
||||
Welcome to Free Code Camp's open source codebase!
|
||||
=======================
|
||||
|
||||
#Note
|
||||
We're currently very close to moving from express to loopback. As such, please keep in mind that the instructions here for setting up and running the project do not directly translate to the staging branch. Additionally, the file structure is quite a bit different. As always, the staging branch is the appropriate place to branch off of to fix/add something!
|
||||
|
||||
Free Code Camp is an open-source community of busy people who learn to code, then build projects for nonprofits.
|
||||
|
||||
Our campers (students) start by working through our free, self-paced, browser-based curriculum. Next, they build several practice projects. Finally, we pair two campers together with a stakeholder from a nonprofit organization, and help them build the solution the nonprofit has requested.
|
||||
|
@@ -21,41 +21,6 @@ module.exports = function(User) {
|
||||
User.validatesUniquenessOf('username');
|
||||
|
||||
debug('setting up user hooks');
|
||||
// send verification email to new camper
|
||||
User.afterRemote('create', function(ctx, user, next) {
|
||||
debug('user created, sending email');
|
||||
if (!user.email) { return next(); }
|
||||
|
||||
var mailOptions = {
|
||||
type: 'email',
|
||||
to: user.email,
|
||||
from: 'Team@freecodecamp.com',
|
||||
subject: 'Welcome to Free Code Camp!',
|
||||
redirect: '/',
|
||||
text: [
|
||||
'Greetings from San Francisco!\n\n',
|
||||
'Thank you for joining our community.\n',
|
||||
'Feel free to email us at this address if you have ',
|
||||
'any questions about Free Code Camp.\n',
|
||||
'And if you have a moment, check out our blog: ',
|
||||
'blog.freecodecamp.com.\n',
|
||||
'Good luck with the challenges!\n\n',
|
||||
'- the Free Code Camp Volunteer Team'
|
||||
].join('')
|
||||
};
|
||||
user.verify(mailOptions, function(err) {
|
||||
if (err) { return next(err); }
|
||||
debug('verification email sent');
|
||||
ctx.req.flash('success', {
|
||||
msg: [
|
||||
'Please check your email and click on the verification link '
|
||||
+ 'before logging in.'
|
||||
]
|
||||
});
|
||||
ctx.res.redirect('/');
|
||||
});
|
||||
});
|
||||
|
||||
User.afterRemote('confirm', function(ctx) {
|
||||
ctx.req.flash('success', {
|
||||
msg: [
|
||||
@@ -65,48 +30,37 @@ module.exports = function(User) {
|
||||
ctx.res.redirect('/email-signin');
|
||||
});
|
||||
|
||||
User.afterRemote('login', function(ctx, instance, next) {
|
||||
User.afterRemote('login', function(ctx, user, next) {
|
||||
var res = ctx.res;
|
||||
var req = ctx.req;
|
||||
// var args = ctx.args;
|
||||
|
||||
var accessToken = {};
|
||||
var config = {
|
||||
signed: !!req.signedCookies,
|
||||
maxAge: accessToken.ttl
|
||||
};
|
||||
if (accessToken && accessToken.id) {
|
||||
res.cookie('access_token', accessToken.id, config);
|
||||
res.cookie('userId', accessToken.userId, config);
|
||||
}
|
||||
debug('before pass login');
|
||||
return req.logIn(user, function(err) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
req.flash('success', { msg: 'Success! You are logged in.' });
|
||||
return res.redirect('/');
|
||||
});
|
||||
});
|
||||
|
||||
User.afterRemoteError('login', function(ctx) {
|
||||
var res = ctx.res;
|
||||
var req = ctx.req;
|
||||
|
||||
User.findOne({where: {email: ctx.args.credentials.email}},
|
||||
function(err, response) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
if (response.emailVerified !== true) {
|
||||
return res.redirect('/');
|
||||
}
|
||||
User.login({
|
||||
email: ctx.args.credentials.email,
|
||||
password: ctx.args.credentials.password,
|
||||
ttl: Infinity
|
||||
}, function(err, accessToken) {
|
||||
if (err) {
|
||||
req.flash('errors', {
|
||||
msg: [
|
||||
'Invalid username or password.'
|
||||
]
|
||||
});
|
||||
return res.redirect('/');
|
||||
}
|
||||
var config = {
|
||||
signed: !!req.signedCookies,
|
||||
maxAge: accessToken.ttl
|
||||
};
|
||||
if (accessToken && accessToken.id) {
|
||||
res.cookie('access_token', accessToken.id, config);
|
||||
res.cookie('userId', accessToken.userId, config);
|
||||
}
|
||||
req.logIn(response, function(err) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
req.flash('success', { msg: 'Success! You are logged in.' });
|
||||
return res.redirect('/');
|
||||
});
|
||||
});
|
||||
});
|
||||
req.flash('errors', {
|
||||
msg: 'Invalid username or password.'
|
||||
});
|
||||
return res.redirect('/');
|
||||
});
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@@ -1,182 +0,0 @@
|
||||
body, html {
|
||||
margin:0; padding: 0;
|
||||
}
|
||||
body {
|
||||
font-family: Helvetica Neue, Helvetica,Arial;
|
||||
font-size: 10pt;
|
||||
}
|
||||
div.header, div.footer {
|
||||
background: #eee;
|
||||
padding: 1em;
|
||||
}
|
||||
div.header {
|
||||
z-index: 100;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
border-bottom: 1px solid #666;
|
||||
width: 100%;
|
||||
}
|
||||
div.footer {
|
||||
border-top: 1px solid #666;
|
||||
}
|
||||
div.body {
|
||||
margin-top: 10em;
|
||||
}
|
||||
div.meta {
|
||||
font-size: 90%;
|
||||
text-align: center;
|
||||
}
|
||||
h1, h2, h3 {
|
||||
font-weight: normal;
|
||||
}
|
||||
h1 {
|
||||
font-size: 12pt;
|
||||
}
|
||||
h2 {
|
||||
font-size: 10pt;
|
||||
}
|
||||
pre {
|
||||
font-family: Consolas, Menlo, Monaco, monospace;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 14px;
|
||||
font-size: 14px;
|
||||
-moz-tab-size: 2;
|
||||
-o-tab-size: 2;
|
||||
tab-size: 2;
|
||||
}
|
||||
|
||||
div.path { font-size: 110%; }
|
||||
div.path a:link, div.path a:visited { color: #000; }
|
||||
table.coverage { border-collapse: collapse; margin:0; padding: 0 }
|
||||
|
||||
table.coverage td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #111;
|
||||
vertical-align: top;
|
||||
}
|
||||
table.coverage td.line-count {
|
||||
width: 50px;
|
||||
text-align: right;
|
||||
padding-right: 5px;
|
||||
}
|
||||
table.coverage td.line-coverage {
|
||||
color: #777 !important;
|
||||
text-align: right;
|
||||
border-left: 1px solid #666;
|
||||
border-right: 1px solid #666;
|
||||
}
|
||||
|
||||
table.coverage td.text {
|
||||
}
|
||||
|
||||
table.coverage td span.cline-any {
|
||||
display: inline-block;
|
||||
padding: 0 5px;
|
||||
width: 40px;
|
||||
}
|
||||
table.coverage td span.cline-neutral {
|
||||
background: #eee;
|
||||
}
|
||||
table.coverage td span.cline-yes {
|
||||
background: #b5d592;
|
||||
color: #999;
|
||||
}
|
||||
table.coverage td span.cline-no {
|
||||
background: #fc8c84;
|
||||
}
|
||||
|
||||
.cstat-yes { color: #111; }
|
||||
.cstat-no { background: #fc8c84; color: #111; }
|
||||
.fstat-no { background: #ffc520; color: #111 !important; }
|
||||
.cbranch-no { background: yellow !important; color: #111; }
|
||||
|
||||
.cstat-skip { background: #ddd; color: #111; }
|
||||
.fstat-skip { background: #ddd; color: #111 !important; }
|
||||
.cbranch-skip { background: #ddd !important; color: #111; }
|
||||
|
||||
.missing-if-branch {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
position: relative;
|
||||
padding: 0 4px;
|
||||
background: black;
|
||||
color: yellow;
|
||||
}
|
||||
|
||||
.skip-if-branch {
|
||||
display: none;
|
||||
margin-right: 10px;
|
||||
position: relative;
|
||||
padding: 0 4px;
|
||||
background: #ccc;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.missing-if-branch .typ, .skip-if-branch .typ {
|
||||
color: inherit !important;
|
||||
}
|
||||
|
||||
.entity, .metric { font-weight: bold; }
|
||||
.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }
|
||||
.metric small { font-size: 80%; font-weight: normal; color: #666; }
|
||||
|
||||
div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }
|
||||
div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }
|
||||
div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }
|
||||
div.coverage-summary th.file { border-right: none !important; }
|
||||
div.coverage-summary th.pic { border-left: none !important; text-align: right; }
|
||||
div.coverage-summary th.pct { border-right: none !important; }
|
||||
div.coverage-summary th.abs { border-left: none !important; text-align: right; }
|
||||
div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }
|
||||
div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }
|
||||
div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; }
|
||||
div.coverage-summary td.pic { min-width: 120px !important; }
|
||||
div.coverage-summary a:link { text-decoration: none; color: #000; }
|
||||
div.coverage-summary a:visited { text-decoration: none; color: #777; }
|
||||
div.coverage-summary a:hover { text-decoration: underline; }
|
||||
div.coverage-summary tfoot td { border-top: 1px solid #666; }
|
||||
|
||||
div.coverage-summary .sorter {
|
||||
height: 10px;
|
||||
width: 7px;
|
||||
display: inline-block;
|
||||
margin-left: 0.5em;
|
||||
background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
|
||||
}
|
||||
div.coverage-summary .sorted .sorter {
|
||||
background-position: 0 -20px;
|
||||
}
|
||||
div.coverage-summary .sorted-desc .sorter {
|
||||
background-position: 0 -10px;
|
||||
}
|
||||
|
||||
.high { background: #b5d592 !important; }
|
||||
.medium { background: #ffe87c !important; }
|
||||
.low { background: #fc8c84 !important; }
|
||||
|
||||
span.cover-fill, span.cover-empty {
|
||||
display:inline-block;
|
||||
border:1px solid #444;
|
||||
background: white;
|
||||
height: 12px;
|
||||
}
|
||||
span.cover-fill {
|
||||
background: #ccc;
|
||||
border-right: 1px solid #444;
|
||||
}
|
||||
span.cover-empty {
|
||||
background: white;
|
||||
border-left: none;
|
||||
}
|
||||
span.cover-full {
|
||||
border-right: none !important;
|
||||
}
|
||||
pre.prettyprint {
|
||||
border: none !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
.com { color: #999 !important; }
|
||||
.ignore-none { color: #999; font-weight: normal; }
|
@@ -1,66 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for common/config.global.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">common/config.global.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">common/</a> » config.global.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8</td><td class="line-coverage"><span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">// The path where to mount the REST API app
|
||||
exports.restApiRoot = '/api';
|
||||
//
|
||||
// The URL where the browser client can access the REST API is available
|
||||
// Replace with a full url (including hostname) if your client is being
|
||||
// served from a different server than your REST API.
|
||||
exports.restApiUrl = exports.restApiRoot;
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,73 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for common/</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">common/</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » common/</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="coverage-summary">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
||||
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
||||
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
||||
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
||||
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
||||
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
||||
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file high" data-value="config.global.js"><a href="config.global.js.html">config.global.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,162 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for common/models/User-Identity.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">common/models/User-Identity.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">16.67% <small>(4 / 24)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 19)</small></span>
|
||||
Functions: <span class="metric">25% <small>(1 / 4)</small></span>
|
||||
Lines: <span class="metric">18.18% <small>(4 / 22)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">common/models/</a> » User-Identity.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var debug = require('debug')('freecc:models:userIdent');
|
||||
|
||||
var defaultProfileImage =
|
||||
require('../utils/constantStrings.json').defaultProfileImage;
|
||||
|
||||
module.exports = function(UserIdent) {
|
||||
UserIdent.observe('before save', <span class="fstat-no" title="function not covered" >function(ctx, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var userIdent = ctx.currentInstance || ctx.instance;</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!userIdent) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('no user identity instance found');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next();</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > userIdent.user(<span class="fstat-no" title="function not covered" >function(err, user) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!user) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('no user attached to identity!');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next();</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var picture = userIdent.profile && userIdent.profile[0] ?</span>
|
||||
userIdent.profile[0].value :
|
||||
null;
|
||||
|
||||
// check if user has picture
|
||||
// set user.picture from twitter
|
||||
<span class="cstat-no" title="statement not covered" > if (picture && !user.picture || user.picture === defaultProfileImage) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('use has no pic');</span>
|
||||
<span class="cstat-no" title="statement not covered" > user.picture = userIdent.profile.photos[0].value;</span>
|
||||
<span class="cstat-no" title="statement not covered" > user.save(<span class="fstat-no" title="function not covered" >function(err) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
<span class="cstat-no" title="statement not covered" > next();</span>
|
||||
});
|
||||
} else {
|
||||
<span class="cstat-no" title="statement not covered" > debug('exiting after user ident');</span>
|
||||
<span class="cstat-no" title="statement not covered" > next();</span>
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,86 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for common/models/</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">common/models/</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">16.67% <small>(15 / 90)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 51)</small></span>
|
||||
Functions: <span class="metric">12.5% <small>(2 / 16)</small></span>
|
||||
Lines: <span class="metric">17.44% <small>(15 / 86)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » common/models/</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="coverage-summary">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
||||
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
||||
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
||||
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
||||
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
||||
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
||||
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file low" data-value="User-Identity.js"><a href="User-Identity.js.html">User-Identity.js</a></td>
|
||||
<td data-value="16.67" class="pic low"><span class="cover-fill" style="width: 16px;"></span><span class="cover-empty" style="width:84px;"></span></td>
|
||||
<td data-value="16.67" class="pct low">16.67%</td>
|
||||
<td data-value="24" class="abs low">(4 / 24)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="19" class="abs low">(0 / 19)</td>
|
||||
<td data-value="25" class="pct low">25%</td>
|
||||
<td data-value="4" class="abs low">(1 / 4)</td>
|
||||
<td data-value="18.18" class="pct low">18.18%</td>
|
||||
<td data-value="22" class="abs low">(4 / 22)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="user.js"><a href="user.js.html">user.js</a></td>
|
||||
<td data-value="16.67" class="pic low"><span class="cover-fill" style="width: 16px;"></span><span class="cover-empty" style="width:84px;"></span></td>
|
||||
<td data-value="16.67" class="pct low">16.67%</td>
|
||||
<td data-value="66" class="abs low">(11 / 66)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="32" class="abs low">(0 / 32)</td>
|
||||
<td data-value="8.33" class="pct low">8.33%</td>
|
||||
<td data-value="12" class="abs low">(1 / 12)</td>
|
||||
<td data-value="17.19" class="pct low">17.19%</td>
|
||||
<td data-value="64" class="abs low">(11 / 64)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,552 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for common/models/user.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">common/models/user.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">16.67% <small>(11 / 66)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 32)</small></span>
|
||||
Functions: <span class="metric">8.33% <small>(1 / 12)</small></span>
|
||||
Lines: <span class="metric">17.19% <small>(11 / 64)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">common/models/</a> » user.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
73
|
||||
74
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
87
|
||||
88
|
||||
89
|
||||
90
|
||||
91
|
||||
92
|
||||
93
|
||||
94
|
||||
95
|
||||
96
|
||||
97
|
||||
98
|
||||
99
|
||||
100
|
||||
101
|
||||
102
|
||||
103
|
||||
104
|
||||
105
|
||||
106
|
||||
107
|
||||
108
|
||||
109
|
||||
110
|
||||
111
|
||||
112
|
||||
113
|
||||
114
|
||||
115
|
||||
116
|
||||
117
|
||||
118
|
||||
119
|
||||
120
|
||||
121
|
||||
122
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
129
|
||||
130
|
||||
131
|
||||
132
|
||||
133
|
||||
134
|
||||
135
|
||||
136
|
||||
137
|
||||
138
|
||||
139
|
||||
140
|
||||
141
|
||||
142
|
||||
143
|
||||
144
|
||||
145
|
||||
146
|
||||
147
|
||||
148
|
||||
149
|
||||
150
|
||||
151
|
||||
152
|
||||
153
|
||||
154
|
||||
155
|
||||
156
|
||||
157
|
||||
158
|
||||
159
|
||||
160
|
||||
161
|
||||
162
|
||||
163
|
||||
164
|
||||
165
|
||||
166
|
||||
167
|
||||
168
|
||||
169
|
||||
170</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var debug = require('debug')('freecc:user:remote');
|
||||
var blacklistedUsernames =
|
||||
require('../../server/utils/constants').blacklistedUsernames;
|
||||
|
||||
module.exports = function(User) {
|
||||
// NOTE(berks): user email validation currently not needed but build in. This
|
||||
// work around should let us sneak by
|
||||
// see:
|
||||
// https://github.com/strongloop/loopback/issues/1137#issuecomment-109200135
|
||||
delete User.validations.email;
|
||||
debug('setting up user hooks');
|
||||
// send verification email to new camper
|
||||
User.afterRemote('create', <span class="fstat-no" title="function not covered" >function(ctx, user, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('user created, sending email');</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!user.email) { <span class="cstat-no" title="statement not covered" >return next(); </span>}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var mailOptions = {</span>
|
||||
type: 'email',
|
||||
to: user.email,
|
||||
from: 'Team@freecodecamp.com',
|
||||
subject: 'Welcome to Free Code Camp!',
|
||||
redirect: '/',
|
||||
text: [
|
||||
'Greetings from San Francisco!\n\n',
|
||||
'Thank you for joining our community.\n',
|
||||
'Feel free to email us at this address if you have ',
|
||||
'any questions about Free Code Camp.\n',
|
||||
'And if you have a moment, check out our blog: ',
|
||||
'blog.freecodecamp.com.\n',
|
||||
'Good luck with the challenges!\n\n',
|
||||
'- the Free Code Camp Volunteer Team'
|
||||
].join('')
|
||||
};
|
||||
<span class="cstat-no" title="statement not covered" > user.verify(mailOptions, <span class="fstat-no" title="function not covered" >function(err) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('verification email sent');</span>
|
||||
<span class="cstat-no" title="statement not covered" > ctx.req.flash('success', {</span>
|
||||
msg: [
|
||||
'Please check your email and click on the verification link '
|
||||
+ 'before logging in.'
|
||||
]
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > ctx.res.redirect('/');</span>
|
||||
});
|
||||
});
|
||||
|
||||
User.afterRemote('confirm', <span class="fstat-no" title="function not covered" >function(ctx) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > ctx.req.flash('success', {</span>
|
||||
msg: [
|
||||
'You\'re email has been confirmed!'
|
||||
]
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > ctx.res.redirect('/email-signin');</span>
|
||||
});
|
||||
|
||||
User.afterRemote('login', <span class="fstat-no" title="function not covered" >function(ctx, instance, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var res = ctx.res;</span>
|
||||
<span class="cstat-no" title="statement not covered" > var req = ctx.req;</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > User.findOne({where: {email: ctx.args.credentials.email}},</span>
|
||||
<span class="fstat-no" title="function not covered" > function(err, response) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next(err);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > if (response.emailVerified !== true) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('/');</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > User.login({</span>
|
||||
email: ctx.args.credentials.email,
|
||||
password: ctx.args.credentials.password,
|
||||
ttl: Infinity
|
||||
}, <span class="fstat-no" title="function not covered" >function(err, accessToken) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > req.flash('errors', {</span>
|
||||
msg: [
|
||||
'Invalid username or password.'
|
||||
]
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('/');</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > var config = {</span>
|
||||
signed: !!req.signedCookies,
|
||||
maxAge: accessToken.ttl
|
||||
};
|
||||
<span class="cstat-no" title="statement not covered" > if (accessToken && accessToken.id) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.cookie('access_token', accessToken.id, config);</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.cookie('userId', accessToken.userId, config);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > req.logIn(response, <span class="fstat-no" title="function not covered" >function(err) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next(err);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > req.flash('success', { msg: 'Success! You are logged in.' });</span>
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('/');</span>
|
||||
});
|
||||
});
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('/');</span>
|
||||
});
|
||||
|
||||
User.afterRemote('logout', <span class="fstat-no" title="function not covered" >function(ctx, result, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var res = ctx.result;</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.clearCookie('access_token');</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.clearCookie('userId');</span>
|
||||
<span class="cstat-no" title="statement not covered" > next();</span>
|
||||
});
|
||||
|
||||
User.doesExist = <span class="fstat-no" title="function not covered" >function doesExist(username, email, cb) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!username && !email) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return process.nextTick(<span class="fstat-no" title="function not covered" >function() {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > cb(null, false);</span>
|
||||
});
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > debug('checking existence');</span>
|
||||
|
||||
// check to see if username is on blacklist
|
||||
<span class="cstat-no" title="statement not covered" > if (username && blacklistedUsernames.indexOf(username) !== -1) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return cb(null, true);</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var where = {};</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (username) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > where.username = username.toLowerCase();</span>
|
||||
} else {
|
||||
<span class="cstat-no" title="statement not covered" > where.email = email ? email.toLowerCase() : email;</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > debug('where', where);</span>
|
||||
<span class="cstat-no" title="statement not covered" > User.count(</span>
|
||||
where,
|
||||
<span class="fstat-no" title="function not covered" > function (err, count) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('err checking existance: ', err);</span>
|
||||
<span class="cstat-no" title="statement not covered" > return cb(err);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > if (count > 0) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return cb(null, true);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > return cb(null, false);</span>
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
User.remoteMethod(
|
||||
'doesExist',
|
||||
{
|
||||
description: 'checks whether a user exists using email or username',
|
||||
accepts: [
|
||||
{
|
||||
arg: 'username',
|
||||
type: 'string'
|
||||
},
|
||||
{
|
||||
arg: 'email',
|
||||
type: 'string'
|
||||
}
|
||||
],
|
||||
returns: [
|
||||
{
|
||||
arg: 'exists',
|
||||
type: 'boolean'
|
||||
}
|
||||
],
|
||||
http: {
|
||||
path: '/exists',
|
||||
verb: 'get'
|
||||
}
|
||||
}
|
||||
);
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,73 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for config/</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">config/</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Branches: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » config/</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="coverage-summary">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
||||
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
||||
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
||||
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
||||
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
||||
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
||||
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file high" data-value="secrets.js"><a href="secrets.js.html">secrets.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,240 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for config/secrets.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">config/secrets.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Branches: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">config/</a> » secrets.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">module.exports = {
|
||||
|
||||
db: process.env.MONGODB || process.env.MONGOHQ_URL,
|
||||
|
||||
sessionSecret: process.env.SESSION_SECRET,
|
||||
|
||||
trello: {
|
||||
key: process.env.TRELLO_KEY,
|
||||
secret: process.env.TRELLO_SECRET
|
||||
},
|
||||
|
||||
blogger: {
|
||||
key: process.env.BLOGGER_KEY
|
||||
},
|
||||
|
||||
slack: {
|
||||
key: process.env.SLACK_KEY
|
||||
},
|
||||
|
||||
mandrill: {
|
||||
user: process.env.MANDRILL_USER,
|
||||
password: process.env.MANDRILL_PASSWORD
|
||||
},
|
||||
|
||||
facebook: {
|
||||
clientID: process.env.FACEBOOK_ID,
|
||||
clientSecret: process.env.FACEBOOK_SECRET,
|
||||
callbackURL: '/auth/facebook/callback',
|
||||
passReqToCallback: true
|
||||
},
|
||||
|
||||
github: {
|
||||
clientID: process.env.GITHUB_ID,
|
||||
clientSecret: process.env.GITHUB_SECRET,
|
||||
callbackURL: '/auth/github/callback',
|
||||
passReqToCallback: true
|
||||
},
|
||||
|
||||
twitter: {
|
||||
consumerKey: process.env.TWITTER_KEY,
|
||||
consumerSecret: process.env.TWITTER_SECRET,
|
||||
token: process.env.TWITTER_TOKEN,
|
||||
tokenSecret: process.env.TWITTER_TOKEN_SECRET,
|
||||
callbackURL: '/auth/twitter/callback',
|
||||
passReqToCallback: true
|
||||
},
|
||||
|
||||
google: {
|
||||
clientID: process.env.GOOGLE_ID,
|
||||
clientSecret: process.env.GOOGLE_SECRET,
|
||||
callbackURL: '/auth/google/callback',
|
||||
passReqToCallback: true
|
||||
},
|
||||
|
||||
linkedin: {
|
||||
clientID: process.env.LINKEDIN_ID,
|
||||
clientSecret: process.env.LINKEDIN_SECRET,
|
||||
callbackURL: '/auth/linkedin/callback',
|
||||
scope: ['r_basicprofile', 'r_emailaddress'],
|
||||
passReqToCallback: true
|
||||
},
|
||||
slackHook: process.env.SLACK_WEBHOOK,
|
||||
|
||||
cookieSecret: process.env.COOKIE_SECRET
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,151 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for All files</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="prettify.css">
|
||||
<link rel="stylesheet" href="base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">All files</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">24.15% <small>(326 / 1350)</small></span>
|
||||
Branches: <span class="metric">1.78% <small>(11 / 619)</small></span>
|
||||
Functions: <span class="metric">9.62% <small>(28 / 291)</small></span>
|
||||
Lines: <span class="metric">24.9% <small>(326 / 1309)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"></div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="coverage-summary">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
||||
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
||||
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
||||
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
||||
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
||||
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
||||
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file high" data-value="common/"><a href="common/index.html">common/</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="common/models/"><a href="common/models/index.html">common/models/</a></td>
|
||||
<td data-value="16.67" class="pic low"><span class="cover-fill" style="width: 16px;"></span><span class="cover-empty" style="width:84px;"></span></td>
|
||||
<td data-value="16.67" class="pct low">16.67%</td>
|
||||
<td data-value="90" class="abs low">(15 / 90)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="51" class="abs low">(0 / 51)</td>
|
||||
<td data-value="12.5" class="pct low">12.5%</td>
|
||||
<td data-value="16" class="abs low">(2 / 16)</td>
|
||||
<td data-value="17.44" class="pct low">17.44%</td>
|
||||
<td data-value="86" class="abs low">(15 / 86)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="config/"><a href="config/index.html">config/</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="seed/"><a href="seed/index.html">seed/</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file medium" data-value="server/"><a href="server/index.html">server/</a></td>
|
||||
<td data-value="56.7" class="pic medium"><span class="cover-fill" style="width: 56px;"></span><span class="cover-empty" style="width:44px;"></span></td>
|
||||
<td data-value="56.7" class="pct medium">56.7%</td>
|
||||
<td data-value="97" class="abs medium">(55 / 97)</td>
|
||||
<td data-value="16.13" class="pct low">16.13%</td>
|
||||
<td data-value="31" class="abs low">(5 / 31)</td>
|
||||
<td data-value="20" class="pct low">20%</td>
|
||||
<td data-value="10" class="abs low">(2 / 10)</td>
|
||||
<td data-value="56.7" class="pct medium">56.7%</td>
|
||||
<td data-value="97" class="abs medium">(55 / 97)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="server/boot/"><a href="server/boot/index.html">server/boot/</a></td>
|
||||
<td data-value="20.49" class="pic low"><span class="cover-fill" style="width: 20px;"></span><span class="cover-empty" style="width:80px;"></span></td>
|
||||
<td data-value="20.49" class="pct low">20.49%</td>
|
||||
<td data-value="1064" class="abs low">(218 / 1064)</td>
|
||||
<td data-value="0.2" class="pct low">0.2%</td>
|
||||
<td data-value="503" class="abs low">(1 / 503)</td>
|
||||
<td data-value="6.03" class="pct low">6.03%</td>
|
||||
<td data-value="232" class="abs low">(14 / 232)</td>
|
||||
<td data-value="21.23" class="pct low">21.23%</td>
|
||||
<td data-value="1027" class="abs low">(218 / 1027)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="server/utils/"><a href="server/utils/index.html">server/utils/</a></td>
|
||||
<td data-value="35.11" class="pic low"><span class="cover-fill" style="width: 35px;"></span><span class="cover-empty" style="width:65px;"></span></td>
|
||||
<td data-value="35.11" class="pct low">35.11%</td>
|
||||
<td data-value="94" class="abs low">(33 / 94)</td>
|
||||
<td data-value="9.38" class="pct low">9.38%</td>
|
||||
<td data-value="32" class="abs low">(3 / 32)</td>
|
||||
<td data-value="30.3" class="pct low">30.3%</td>
|
||||
<td data-value="33" class="abs low">(10 / 33)</td>
|
||||
<td data-value="35.11" class="pct low">35.11%</td>
|
||||
<td data-value="94" class="abs low">(33 / 94)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1 +0,0 @@
|
||||
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
|
File diff suppressed because one or more lines are too long
@@ -1,318 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for seed/bonfireMDNlinks.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">seed/bonfireMDNlinks.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">seed/</a> » bonfireMDNlinks.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
73
|
||||
74
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
87
|
||||
88
|
||||
89
|
||||
90
|
||||
91
|
||||
92</td><td class="line-coverage"><span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">// MDN Links
|
||||
|
||||
/* These links are for Bonfires. Each key/value pair is used to render a Bonfire with appropriate links.
|
||||
|
||||
|
||||
The text of the key is what the link text will be, e.g. <a href="https://developer ...">Global Array Object</a>
|
||||
General convention is to use the page title of the MDN reference page.
|
||||
*/
|
||||
var links =
|
||||
{
|
||||
// ========= NON MDN REFS
|
||||
"Currying": "https://leanpub.com/javascript-allonge/read#pabc",
|
||||
"Smallest Common Multiple": "https://www.mathsisfun.com/least-common-multiple.html",
|
||||
"Permutations": "https://www.mathsisfun.com/combinatorics/combinations-permutations.html",
|
||||
|
||||
// ========= GLOBAL OBJECTS
|
||||
"Global Array Object" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
|
||||
"Global Object" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
|
||||
"Global String Object" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
|
||||
"Boolean Objects" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
|
||||
"RegExp" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp",
|
||||
"Global Function Object": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
|
||||
"Arguments object" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments",
|
||||
"Closures": "https://developer.mozilla.org/en-US/docs/" +
|
||||
"Web/JavaScript/Closures",
|
||||
|
||||
// ========= GLOBAL OBJECT METHODS
|
||||
"parseInt()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt",
|
||||
|
||||
|
||||
// ========= PROPERTIES/MISC
|
||||
"String.length" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length",
|
||||
|
||||
|
||||
// ========== OBJECT METHODS
|
||||
"Object.getOwnPropertyNames()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames",
|
||||
"Object.keys()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys",
|
||||
"Object.hasOwnProperty()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty",
|
||||
|
||||
|
||||
// ======== STRING METHODS
|
||||
"String.charAt()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt",
|
||||
"String.charCodeAt()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt",
|
||||
"String.concat()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat",
|
||||
"String.indexOf()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf",
|
||||
"String.fromCharCode()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode",
|
||||
"String.lastIndexOf()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf",
|
||||
"String.match()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match",
|
||||
"String.replace()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace",
|
||||
"String.slice()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice",
|
||||
"String.split()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split",
|
||||
"String.substring()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring",
|
||||
"String.substr()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr",
|
||||
"String.toLowerCase()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase",
|
||||
"String.toString()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toString",
|
||||
"String.toUpperCase()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase",
|
||||
// ======== ARRAY METHODS
|
||||
"Array.concat()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat",
|
||||
"Array.every()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every",
|
||||
"Array.filter()": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter",
|
||||
"Array.forEach()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach",
|
||||
"Array.indexOf()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf",
|
||||
"Array.isArray()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray",
|
||||
"Array.join()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join",
|
||||
"Array.lastIndexOf()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf",
|
||||
"Array.map()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map",
|
||||
"Array.pop()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop",
|
||||
"Array.push()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push",
|
||||
"Array.reduce()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce",
|
||||
"Array.reverse()": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse",
|
||||
"Array.shift()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift",
|
||||
"Array.slice()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice",
|
||||
"Array.some()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some",
|
||||
"Array.sort()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort",
|
||||
"Array.splice()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice",
|
||||
"Array.toString()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString",
|
||||
|
||||
// ======== MATH METHODS
|
||||
"Math.max()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max",
|
||||
"Math.min()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min",
|
||||
"Math.pow()" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow",
|
||||
"Remainder" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder_(.25)",
|
||||
|
||||
// ======== GENERAL JAVASCRIPT REFERENCES
|
||||
"Arithmetic Operators" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators",
|
||||
"Comparison Operators" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators",
|
||||
"Details of the Object Model" : "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model",
|
||||
"For Loops": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for"
|
||||
};
|
||||
|
||||
module.exports = links;
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,73 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for seed/</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">seed/</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » seed/</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="coverage-summary">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
||||
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
||||
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
||||
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
||||
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
||||
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
||||
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file high" data-value="bonfireMDNlinks.js"><a href="bonfireMDNlinks.js.html">bonfireMDNlinks.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,165 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/a-extendUser.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/a-extendUser.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">34.78% <small>(8 / 23)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 8)</small></span>
|
||||
Functions: <span class="metric">14.29% <small>(1 / 7)</small></span>
|
||||
Lines: <span class="metric">36.36% <small>(8 / 22)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » a-extendUser.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var Rx = require('rx');
|
||||
var debug = require('debug')('freecc:user:remote');
|
||||
|
||||
<span class="fstat-no" title="function not covered" >function destroyById(id, Model) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return Rx.Observable.create(<span class="fstat-no" title="function not covered" >function(observer) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > Model.destroyById(id, <span class="fstat-no" title="function not covered" >function(err) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return observer.onError(err); </span>}</span>
|
||||
<span class="cstat-no" title="statement not covered" > observer.onCompleted();</span>
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > return Rx.Disposable(Rx.helpers.noop);</span>
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = function(app) {
|
||||
var User = app.models.User;
|
||||
var UserIdentity = app.models.UserIdentity;
|
||||
var UserCredential = app.models.UserCredential;
|
||||
User.observe('after delete', <span class="fstat-no" title="function not covered" >function(ctx, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('removing user', ctx.where);</span>
|
||||
<span class="cstat-no" title="statement not covered" > var id = ctx.where && ctx.where.id ? ctx.where.id : null;</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!id) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next();</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > Rx.Observable.combineLatest(</span>
|
||||
destroyById(id, UserIdentity),
|
||||
destroyById(id, UserCredential),
|
||||
Rx.helpers.noop
|
||||
).subscribe(
|
||||
Rx.helpers.noop,
|
||||
<span class="fstat-no" title="function not covered" > function(err) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('error deleting user %s stuff', id, err);</span>
|
||||
<span class="cstat-no" title="statement not covered" > next(err);</span>
|
||||
},
|
||||
<span class="fstat-no" title="function not covered" > function() {</span>
|
||||
<span class="cstat-no" title="statement not covered" > debug('user stuff deleted for user %s', id);</span>
|
||||
<span class="cstat-no" title="statement not covered" > next();</span>
|
||||
}
|
||||
);
|
||||
});
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,57 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/authentication.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/authentication.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Lines: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » authentication.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">module.exports = function enableAuthentication(app) {
|
||||
// enable authentication
|
||||
app.enableAuth();
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
@@ -1,240 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/challengeMap.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/challengeMap.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">32.26% <small>(10 / 31)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 4)</small></span>
|
||||
Functions: <span class="metric">11.11% <small>(1 / 9)</small></span>
|
||||
Lines: <span class="metric">33.33% <small>(10 / 30)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » challengeMap.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var R = require('ramda'),
|
||||
// debug = require('debug')('freecc:cntr:challengeMap'),
|
||||
utils = require('./../utils'),
|
||||
middleware = require('../utils/middleware');
|
||||
|
||||
|
||||
module.exports = function(app) {
|
||||
var User = app.models.User;
|
||||
var router = app.loopback.Router();
|
||||
|
||||
router.get('/map', middleware.userMigration, challengeMap);
|
||||
router.get('/learn-to-code', <span class="fstat-no" title="function not covered" >function(req, res) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.redirect(301, '/map');</span>
|
||||
});
|
||||
router.get('/about', <span class="fstat-no" title="function not covered" >function(req, res) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.redirect(301, '/map');</span>
|
||||
});
|
||||
|
||||
app.use(router);
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function challengeMap(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var completedList = [];</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > if (req.user) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > completedList = req.user.completedChallenges;</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var noDuplicatedChallenges = R.uniq(completedList);</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var completedChallengeList = noDuplicatedChallenges</span>
|
||||
.map(<span class="fstat-no" title="function not covered" >function(challenge) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return challenge.id;</span>
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > var challengeList = utils.</span>
|
||||
getChallengeMapForDisplay(completedChallengeList);
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > Object.keys(challengeList).forEach(<span class="fstat-no" title="function not covered" >function(key) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > challengeList[key].completed = challengeList[key]</span>
|
||||
.challenges.filter(<span class="fstat-no" title="function not covered" >function(elem) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return completedChallengeList.indexOf(elem.id) > -1;</span>
|
||||
});
|
||||
});
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function numberWithCommas(x) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var date1 = new Date('10/15/2014');</span>
|
||||
<span class="cstat-no" title="statement not covered" > var date2 = new Date();</span>
|
||||
<span class="cstat-no" title="statement not covered" > var timeDiff = Math.abs(date2.getTime() - date1.getTime());</span>
|
||||
<span class="cstat-no" title="statement not covered" > var daysRunning = Math.ceil(timeDiff / (1000 * 3600 * 24));</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > User.count(<span class="fstat-no" title="function not covered" >function(err, camperCount) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > res.render('challengeMap/show', {</span>
|
||||
daysRunning: daysRunning,
|
||||
camperCount: numberWithCommas(camperCount),
|
||||
title: "A map of all Free Code Camp's Challenges",
|
||||
challengeList: challengeList,
|
||||
completedChallengeList: completedChallengeList
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,135 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/explorer.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header medium">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/explorer.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">56.25% <small>(9 / 16)</small></span>
|
||||
Branches: <span class="metric">25% <small>(1 / 4)</small></span>
|
||||
Functions: <span class="metric">33.33% <small>(1 / 3)</small></span>
|
||||
Lines: <span class="metric">56.25% <small>(9 / 16)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » explorer.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">module.exports = function mountLoopBackExplorer(app) {
|
||||
<span class="missing-if-branch" title="if path not taken" >I</span>if (process.env.NODE_ENV === 'production') {
|
||||
<span class="cstat-no" title="statement not covered" > return;</span>
|
||||
}
|
||||
var explorer;
|
||||
try {
|
||||
explorer = require('loopback-explorer');
|
||||
} catch(err) {
|
||||
// Print the message only when the app was started via `app.listen()`.
|
||||
// Do not print any message when the project is used as a component.
|
||||
<span class="cstat-no" title="statement not covered" > app.once('started', <span class="fstat-no" title="function not covered" >function() {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > console.log(</span>
|
||||
'Run `npm install loopback-explorer` to enable the LoopBack explorer'
|
||||
);
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > return;</span>
|
||||
}
|
||||
|
||||
var restApiRoot = app.get('restApiRoot');
|
||||
|
||||
var explorerApp = explorer(app, { basePath: restApiRoot });
|
||||
app.use('/explorer', explorerApp);
|
||||
app.once('started', <span class="fstat-no" title="function not covered" >function() {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var baseUrl = app.get('url').replace(/\/$/, '');</span>
|
||||
// express 4.x (loopback 2.x) uses `mountpath`
|
||||
// express 3.x (loopback 1.x) uses `route`
|
||||
<span class="cstat-no" title="statement not covered" > var explorerPath = explorerApp.mountpath || explorerApp.route;</span>
|
||||
<span class="cstat-no" title="statement not covered" > console.log('Browse your REST API at %s%s', baseUrl, explorerPath);</span>
|
||||
});
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,426 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/fieldGuide.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/fieldGuide.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">24.14% <small>(14 / 58)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 24)</small></span>
|
||||
Functions: <span class="metric">9.09% <small>(1 / 11)</small></span>
|
||||
Lines: <span class="metric">25% <small>(14 / 56)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » fieldGuide.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
73
|
||||
74
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
87
|
||||
88
|
||||
89
|
||||
90
|
||||
91
|
||||
92
|
||||
93
|
||||
94
|
||||
95
|
||||
96
|
||||
97
|
||||
98
|
||||
99
|
||||
100
|
||||
101
|
||||
102
|
||||
103
|
||||
104
|
||||
105
|
||||
106
|
||||
107
|
||||
108
|
||||
109
|
||||
110
|
||||
111
|
||||
112
|
||||
113
|
||||
114
|
||||
115
|
||||
116
|
||||
117
|
||||
118
|
||||
119
|
||||
120
|
||||
121
|
||||
122
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
127
|
||||
128</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var R = require('ramda'),
|
||||
// Rx = require('rx'),
|
||||
// debug = require('debug')('freecc:fieldguides'),
|
||||
utils = require('../utils');
|
||||
|
||||
module.exports = function(app) {
|
||||
var router = app.loopback.Router();
|
||||
var FieldGuide = app.models.FieldGuide;
|
||||
|
||||
router.get('/field-guide/all-articles', showAllFieldGuides);
|
||||
router.get('/field-guide/:fieldGuideName', returnIndividualFieldGuide);
|
||||
router.get('/field-guide/', returnNextFieldGuide);
|
||||
router.post('/completed-field-guide/', completedFieldGuide);
|
||||
|
||||
app.use(router);
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function returnIndividualFieldGuide(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var dashedNameFromQuery = req.params.fieldGuideName;</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (req.user) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var completed = req.user.completedFieldGuides;</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var uncompletedFieldGuides = utils.allFieldGuideIds()</span>
|
||||
.filter(<span class="fstat-no" title="function not covered" >function (elem) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (completed.indexOf(elem) === -1) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return elem;</span>
|
||||
}
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > req.user.uncompletedFieldGuides = uncompletedFieldGuides;</span>
|
||||
// TODO(berks): handle callback properly
|
||||
<span class="cstat-no" title="statement not covered" > req.user.save(<span class="fstat-no" title="function not covered" >function(err) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
});
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > FieldGuide.find({ where: {'dashedName': dashedNameFromQuery}},</span>
|
||||
<span class="fstat-no" title="function not covered" > function(err, fieldGuideFromMongo) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next(err);</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > if (fieldGuideFromMongo.length < 1) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > req.flash('errors', {</span>
|
||||
msg: '404: We couldn\'t find a field guide entry with that name. ' +
|
||||
'Please double check the name.'
|
||||
});
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('/');</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var fieldGuide = R.head(fieldGuideFromMongo);</span>
|
||||
<span class="cstat-no" title="statement not covered" > fieldGuide.name.toLowerCase().replace(/\s/g, '-').replace(/\?/g, '');</span>
|
||||
|
||||
// if (fieldGuide.dashedName !== dashedNameFromQuery) {
|
||||
// return res.redirect('../field-guide/' + fieldGuide.dashedName);
|
||||
// }
|
||||
<span class="cstat-no" title="statement not covered" > res.render('field-guide/show', {</span>
|
||||
title: fieldGuide.name,
|
||||
fieldGuideId: fieldGuide.id,
|
||||
description: fieldGuide.description.join('')
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function showAllFieldGuides(req, res) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var allFieldGuideNamesAndIds = utils.allFieldGuideNamesAndIds();</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var completedFieldGuides = [];</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (req.user && req.user.completedFieldGuides) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > completedFieldGuides = req.user.completedFieldGuides;</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > res.render('field-guide/all-articles', {</span>
|
||||
allFieldGuideNamesAndIds: allFieldGuideNamesAndIds,
|
||||
completedFieldGuides: completedFieldGuides
|
||||
});
|
||||
}
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function showCompletedFieldGuideFunction(req, res) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > req.flash('success', {</span>
|
||||
msg: [
|
||||
'You\'ve read all our current Field Guide entries. ' +
|
||||
'If you have ideas for other Field Guide articles, ' +
|
||||
'please let us know on ',
|
||||
'<a href=\'https://github.com/freecodecamp/freecodecamp/' +
|
||||
'issues/new?&body=Please describe your idea for a Field Guide' +
|
||||
' article and include links if possible.\'>GitHub</a>.'
|
||||
].join('')
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('../field-guide/how-do-i-use-this-guide');</span>
|
||||
}
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function returnNextFieldGuide(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!req.user) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('/field-guide/how-do-i-use-this-guide');</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > if (!req.user.uncompletedFieldGuides.length) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return showCompletedFieldGuideFunction(req, res, next);</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > FieldGuide.findById(req.user.uncompletedFieldGuides[0],</span>
|
||||
<span class="fstat-no" title="function not covered" > function(err, fieldGuide) {</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('../field-guide/' + fieldGuide.dashedName);</span>
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
<span class="fstat-no" title="function not covered" >function completedFieldGuide(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var fieldGuideId = req.body.fieldGuideInfo.fieldGuideId;</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > req.user.completedFieldGuides.push(fieldGuideId);</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var index = req.user.uncompletedFieldGuides.indexOf(fieldGuideId);</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (index > -1) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > req.user.progressTimestamps.push(Date.now());</span>
|
||||
<span class="cstat-no" title="statement not covered" > req.user.uncompletedFieldGuides.splice(index, 1);</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > req.user.save(<span class="fstat-no" title="function not covered" >function (err) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next(err);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > res.send(true);</span>
|
||||
});
|
||||
}
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,117 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/home.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header medium">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/home.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">50% <small>(7 / 14)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 6)</small></span>
|
||||
Functions: <span class="metric">33.33% <small>(1 / 3)</small></span>
|
||||
Lines: <span class="metric">53.85% <small>(7 / 13)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » home.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var defaultProfileImage =
|
||||
require('../../common/utils/constantStrings.json').defaultProfileImage;
|
||||
var message =
|
||||
'Learn to Code JavaScript and get a Coding Job by Helping Nonprofits';
|
||||
|
||||
module.exports = function(app) {
|
||||
var router = app.loopback.Router();
|
||||
router.get('/', index);
|
||||
|
||||
app.use(router);
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function index(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (req.user && !req.user.picture) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > req.user.picture = defaultProfileImage;</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > req.user.save(<span class="fstat-no" title="function not covered" >function(err) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.render('home', { title: message });</span>
|
||||
});
|
||||
} else {
|
||||
<span class="cstat-no" title="statement not covered" > res.render('home', { title: message });</span>
|
||||
}
|
||||
}
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,255 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">20.49% <small>(218 / 1064)</small></span>
|
||||
Branches: <span class="metric">0.2% <small>(1 / 503)</small></span>
|
||||
Functions: <span class="metric">6.03% <small>(14 / 232)</small></span>
|
||||
Lines: <span class="metric">21.23% <small>(218 / 1027)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » server/boot/</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="coverage-summary">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
||||
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
||||
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
||||
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
||||
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
||||
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
||||
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file low" data-value="a-extendUser.js"><a href="a-extendUser.js.html">a-extendUser.js</a></td>
|
||||
<td data-value="34.78" class="pic low"><span class="cover-fill" style="width: 34px;"></span><span class="cover-empty" style="width:66px;"></span></td>
|
||||
<td data-value="34.78" class="pct low">34.78%</td>
|
||||
<td data-value="23" class="abs low">(8 / 23)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="8" class="abs low">(0 / 8)</td>
|
||||
<td data-value="14.29" class="pct low">14.29%</td>
|
||||
<td data-value="7" class="abs low">(1 / 7)</td>
|
||||
<td data-value="36.36" class="pct low">36.36%</td>
|
||||
<td data-value="22" class="abs low">(8 / 22)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="authentication.js"><a href="authentication.js.html">authentication.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="challenge.js"><a href="challenge.js.html">challenge.js</a></td>
|
||||
<td data-value="10.71" class="pic low"><span class="cover-fill" style="width: 10px;"></span><span class="cover-empty" style="width:90px;"></span></td>
|
||||
<td data-value="10.71" class="pct low">10.71%</td>
|
||||
<td data-value="196" class="abs low">(21 / 196)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="118" class="abs low">(0 / 118)</td>
|
||||
<td data-value="2.78" class="pct low">2.78%</td>
|
||||
<td data-value="36" class="abs low">(1 / 36)</td>
|
||||
<td data-value="11.05" class="pct low">11.05%</td>
|
||||
<td data-value="190" class="abs low">(21 / 190)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="challengeMap.js"><a href="challengeMap.js.html">challengeMap.js</a></td>
|
||||
<td data-value="32.26" class="pic low"><span class="cover-fill" style="width: 32px;"></span><span class="cover-empty" style="width:68px;"></span></td>
|
||||
<td data-value="32.26" class="pct low">32.26%</td>
|
||||
<td data-value="31" class="abs low">(10 / 31)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="4" class="abs low">(0 / 4)</td>
|
||||
<td data-value="11.11" class="pct low">11.11%</td>
|
||||
<td data-value="9" class="abs low">(1 / 9)</td>
|
||||
<td data-value="33.33" class="pct low">33.33%</td>
|
||||
<td data-value="30" class="abs low">(10 / 30)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file medium" data-value="explorer.js"><a href="explorer.js.html">explorer.js</a></td>
|
||||
<td data-value="56.25" class="pic medium"><span class="cover-fill" style="width: 56px;"></span><span class="cover-empty" style="width:44px;"></span></td>
|
||||
<td data-value="56.25" class="pct medium">56.25%</td>
|
||||
<td data-value="16" class="abs medium">(9 / 16)</td>
|
||||
<td data-value="25" class="pct low">25%</td>
|
||||
<td data-value="4" class="abs low">(1 / 4)</td>
|
||||
<td data-value="33.33" class="pct low">33.33%</td>
|
||||
<td data-value="3" class="abs low">(1 / 3)</td>
|
||||
<td data-value="56.25" class="pct medium">56.25%</td>
|
||||
<td data-value="16" class="abs medium">(9 / 16)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="fieldGuide.js"><a href="fieldGuide.js.html">fieldGuide.js</a></td>
|
||||
<td data-value="24.14" class="pic low"><span class="cover-fill" style="width: 24px;"></span><span class="cover-empty" style="width:76px;"></span></td>
|
||||
<td data-value="24.14" class="pct low">24.14%</td>
|
||||
<td data-value="58" class="abs low">(14 / 58)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="24" class="abs low">(0 / 24)</td>
|
||||
<td data-value="9.09" class="pct low">9.09%</td>
|
||||
<td data-value="11" class="abs low">(1 / 11)</td>
|
||||
<td data-value="25" class="pct low">25%</td>
|
||||
<td data-value="56" class="abs low">(14 / 56)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file medium" data-value="home.js"><a href="home.js.html">home.js</a></td>
|
||||
<td data-value="50" class="pic medium"><span class="cover-fill" style="width: 50px;"></span><span class="cover-empty" style="width:50px;"></span></td>
|
||||
<td data-value="50" class="pct medium">50%</td>
|
||||
<td data-value="14" class="abs medium">(7 / 14)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="6" class="abs low">(0 / 6)</td>
|
||||
<td data-value="33.33" class="pct low">33.33%</td>
|
||||
<td data-value="3" class="abs low">(1 / 3)</td>
|
||||
<td data-value="53.85" class="pct medium">53.85%</td>
|
||||
<td data-value="13" class="abs medium">(7 / 13)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file medium" data-value="jobs.js"><a href="jobs.js.html">jobs.js</a></td>
|
||||
<td data-value="60" class="pic medium"><span class="cover-fill" style="width: 60px;"></span><span class="cover-empty" style="width:40px;"></span></td>
|
||||
<td data-value="60" class="pct medium">60%</td>
|
||||
<td data-value="10" class="abs medium">(6 / 10)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="2" class="abs low">(0 / 2)</td>
|
||||
<td data-value="33.33" class="pct low">33.33%</td>
|
||||
<td data-value="3" class="abs low">(1 / 3)</td>
|
||||
<td data-value="66.67" class="pct medium">66.67%</td>
|
||||
<td data-value="9" class="abs medium">(6 / 9)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="middlewares.js"><a href="middlewares.js.html">middlewares.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="nonprofits.js"><a href="nonprofits.js.html">nonprofits.js</a></td>
|
||||
<td data-value="24.24" class="pic low"><span class="cover-fill" style="width: 24px;"></span><span class="cover-empty" style="width:76px;"></span></td>
|
||||
<td data-value="24.24" class="pct low">24.24%</td>
|
||||
<td data-value="33" class="abs low">(8 / 33)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="16" class="abs low">(0 / 16)</td>
|
||||
<td data-value="16.67" class="pct low">16.67%</td>
|
||||
<td data-value="6" class="abs low">(1 / 6)</td>
|
||||
<td data-value="25" class="pct low">25%</td>
|
||||
<td data-value="32" class="abs low">(8 / 32)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="randomAPIs.js"><a href="randomAPIs.js.html">randomAPIs.js</a></td>
|
||||
<td data-value="28.92" class="pic low"><span class="cover-fill" style="width: 28px;"></span><span class="cover-empty" style="width:72px;"></span></td>
|
||||
<td data-value="28.92" class="pct low">28.92%</td>
|
||||
<td data-value="166" class="abs low">(48 / 166)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="60" class="abs low">(0 / 60)</td>
|
||||
<td data-value="2.13" class="pct low">2.13%</td>
|
||||
<td data-value="47" class="abs low">(1 / 47)</td>
|
||||
<td data-value="29.81" class="pct low">29.81%</td>
|
||||
<td data-value="161" class="abs low">(48 / 161)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file medium" data-value="redirects.js"><a href="redirects.js.html">redirects.js</a></td>
|
||||
<td data-value="66.67" class="pic medium"><span class="cover-fill" style="width: 66px;"></span><span class="cover-empty" style="width:34px;"></span></td>
|
||||
<td data-value="66.67" class="pct medium">66.67%</td>
|
||||
<td data-value="9" class="abs medium">(6 / 9)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="25" class="pct low">25%</td>
|
||||
<td data-value="4" class="abs low">(1 / 4)</td>
|
||||
<td data-value="66.67" class="pct medium">66.67%</td>
|
||||
<td data-value="9" class="abs medium">(6 / 9)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="restApi.js"><a href="restApi.js.html">restApi.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="3" class="abs high">(3 / 3)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="3" class="abs high">(3 / 3)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="story.js"><a href="story.js.html">story.js</a></td>
|
||||
<td data-value="16.28" class="pic low"><span class="cover-fill" style="width: 16px;"></span><span class="cover-empty" style="width:84px;"></span></td>
|
||||
<td data-value="16.28" class="pct low">16.28%</td>
|
||||
<td data-value="215" class="abs low">(35 / 215)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="111" class="abs low">(0 / 111)</td>
|
||||
<td data-value="2.5" class="pct low">2.5%</td>
|
||||
<td data-value="40" class="abs low">(1 / 40)</td>
|
||||
<td data-value="16.43" class="pct low">16.43%</td>
|
||||
<td data-value="213" class="abs low">(35 / 213)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="user.js"><a href="user.js.html">user.js</a></td>
|
||||
<td data-value="14.24" class="pic low"><span class="cover-fill" style="width: 14px;"></span><span class="cover-empty" style="width:86px;"></span></td>
|
||||
<td data-value="14.24" class="pct low">14.24%</td>
|
||||
<td data-value="288" class="abs low">(41 / 288)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="150" class="abs low">(0 / 150)</td>
|
||||
<td data-value="1.64" class="pct low">1.64%</td>
|
||||
<td data-value="61" class="abs low">(1 / 61)</td>
|
||||
<td data-value="15.13" class="pct low">15.13%</td>
|
||||
<td data-value="271" class="abs low">(41 / 271)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,99 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/jobs.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header medium">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/jobs.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">60% <small>(6 / 10)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 2)</small></span>
|
||||
Functions: <span class="metric">33.33% <small>(1 / 3)</small></span>
|
||||
Lines: <span class="metric">66.67% <small>(6 / 9)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » jobs.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">module.exports = function(app) {
|
||||
var Job = app.models.Job;
|
||||
var router = app.loopback.Router();
|
||||
|
||||
router.get('/jobs', jobsDirectory);
|
||||
app.use(router);
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function jobsDirectory(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > Job.find({}, <span class="fstat-no" title="function not covered" >function(err, jobs) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > res.render('jobs/directory', {</span>
|
||||
title: 'Junior JavaScript Engineer Jobs',
|
||||
jobs: jobs
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,45 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/middlewares.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/middlewares.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » middlewares.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1</td><td class="line-coverage"><span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"> </pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,432 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/nonprofits.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/nonprofits.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">24.24% <small>(8 / 33)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 16)</small></span>
|
||||
Functions: <span class="metric">16.67% <small>(1 / 6)</small></span>
|
||||
Lines: <span class="metric">25% <small>(8 / 32)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » nonprofits.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
73
|
||||
74
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
87
|
||||
88
|
||||
89
|
||||
90
|
||||
91
|
||||
92
|
||||
93
|
||||
94
|
||||
95
|
||||
96
|
||||
97
|
||||
98
|
||||
99
|
||||
100
|
||||
101
|
||||
102
|
||||
103
|
||||
104
|
||||
105
|
||||
106
|
||||
107
|
||||
108
|
||||
109
|
||||
110
|
||||
111
|
||||
112
|
||||
113
|
||||
114
|
||||
115
|
||||
116
|
||||
117
|
||||
118
|
||||
119
|
||||
120
|
||||
121
|
||||
122
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
129
|
||||
130</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">module.exports = function(app) {
|
||||
var router = app.loopback.Router();
|
||||
var Nonprofit = app.models.Nonprofit;
|
||||
|
||||
router.get('/nonprofits/directory', nonprofitsDirectory);
|
||||
router.get('/nonprofits/:nonprofitName', returnIndividualNonprofit);
|
||||
|
||||
app.use(router);
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function nonprofitsDirectory(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > Nonprofit.find(</span>
|
||||
{ where: { estimatedHours: { $gt: 0 } } },
|
||||
<span class="fstat-no" title="function not covered" > function(err, nonprofits) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) { <span class="cstat-no" title="statement not covered" >return next(err); </span>}</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > res.render('nonprofits/directory', {</span>
|
||||
title: 'Nonprofits we help',
|
||||
nonprofits: nonprofits
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
<span class="fstat-no" title="function not covered" > function returnIndividualNonprofit(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var dashedName = req.params.nonprofitName;</span>
|
||||
<span class="cstat-no" title="statement not covered" > var nonprofitName = dashedName.replace(/\-/g, ' ');</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > Nonprofit.find(</span>
|
||||
{ where: { name: new RegExp(nonprofitName, 'i') } },
|
||||
<span class="fstat-no" title="function not covered" > function(err, nonprofit) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (err) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next(err);</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > if (nonprofit.length < 1) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > req.flash('errors', {</span>
|
||||
msg: "404: We couldn't find a nonprofit with that name. " +
|
||||
'Please double check the name.'
|
||||
});
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('/nonprofits');</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > nonprofit = nonprofit.pop();</span>
|
||||
<span class="cstat-no" title="statement not covered" > var dashedNameFull = nonprofit.name.toLowerCase().replace(/\s/g, '-');</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (dashedNameFull !== dashedName) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('../nonprofit/' + dashedNameFull);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > var buttonActive = false;</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (req.user) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (req.user.uncompletedBonfires.length === 0) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (req.user.completedCoursewares.length > 63) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var hasShownInterest =</span>
|
||||
nonprofit.interestedCampers.filter(<span class="fstat-no" title="function not covered" >function ( obj ) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return obj.username === req.user.username;</span>
|
||||
});
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > if (hasShownInterest.length === 0) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > buttonActive = true;</span>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > res.render('nonprofits/show', {</span>
|
||||
dashedName: dashedNameFull,
|
||||
title: nonprofit.name,
|
||||
logoUrl: nonprofit.logoUrl,
|
||||
estimatedHours: nonprofit.estimatedHours,
|
||||
projectDescription: nonprofit.projectDescription,
|
||||
|
||||
approvedOther:
|
||||
nonprofit.approvedDeliverables.indexOf('other') > -1,
|
||||
approvedWebsite:
|
||||
nonprofit.approvedDeliverables.indexOf('website') > -1,
|
||||
|
||||
approvedDonor:
|
||||
nonprofit.approvedDeliverables.indexOf('donor') > -1,
|
||||
approvedInventory:
|
||||
nonprofit.approvedDeliverables.indexOf('inventory') > -1,
|
||||
|
||||
approvedVolunteer:
|
||||
nonprofit.approvedDeliverables.indexOf('volunteer') > -1,
|
||||
approvedForm:
|
||||
nonprofit.approvedDeliverables.indexOf('form') > -1,
|
||||
|
||||
approvedCommunity:
|
||||
nonprofit.approvedDeliverables.indexOf('community') > -1,
|
||||
approvedELearning:
|
||||
nonprofit.approvedDeliverables.indexOf('eLearning') > -1,
|
||||
|
||||
websiteLink: nonprofit.websiteLink,
|
||||
imageUrl: nonprofit.imageUrl,
|
||||
whatDoesNonprofitDo: nonprofit.whatDoesNonprofitDo,
|
||||
interestedCampers: nonprofit.interestedCampers,
|
||||
assignedCampers: nonprofit.assignedCampers,
|
||||
buttonActive: buttonActive,
|
||||
currentStatus: nonprofit.currentStatus
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
function interestedInNonprofit(req, res, next) {
|
||||
if (req.user) {
|
||||
Nonprofit.findOne(
|
||||
{ name: new RegExp(req.params.nonprofitName.replace(/-/, ' '), 'i') },
|
||||
function(err, nonprofit) {
|
||||
if (err) { return next(err); }
|
||||
nonprofit.interestedCampers.push({
|
||||
username: req.user.username,
|
||||
picture: req.user.picture,
|
||||
timeOfInterest: Date.now()
|
||||
});
|
||||
nonprofit.save(function(err) {
|
||||
if (err) { return next(err); }
|
||||
req.flash('success', {
|
||||
msg: 'Thanks for expressing interest in this nonprofit project! ' +
|
||||
"We've added you to this project as an interested camper!"
|
||||
});
|
||||
res.redirect('back');
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
*/
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
@@ -1,111 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/redirects.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header medium">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/redirects.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">66.67% <small>(6 / 9)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">25% <small>(1 / 4)</small></span>
|
||||
Lines: <span class="metric">66.67% <small>(6 / 9)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » redirects.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">module.exports = function(app) {
|
||||
var router = app.loopback.Router();
|
||||
|
||||
router.get('/nonprofit-project-instructions', <span class="fstat-no" title="function not covered" >function(req, res) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.redirect(</span>
|
||||
301,
|
||||
'/field-guide/how-do-free-code-camps-nonprofit-projects-work'
|
||||
);
|
||||
});
|
||||
|
||||
router.get('/agile', <span class="fstat-no" title="function not covered" >function(req, res) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.redirect(301, '/pmi-acp-agile-project-managers');</span>
|
||||
});
|
||||
|
||||
router.get('/privacy', <span class="fstat-no" title="function not covered" >function(req, res) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.redirect(</span>
|
||||
301, '/field-guide/what-is-the-free-code-camp-privacy-policy?'
|
||||
);
|
||||
});
|
||||
|
||||
app.use(router);
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,57 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/boot/restApi.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">server/boot/restApi.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(3 / 3)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Lines: <span class="metric">100% <small>(3 / 3)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/boot/</a> » restApi.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">module.exports = function mountRestApi(app) {
|
||||
var restApiRoot = app.get('restApiRoot');
|
||||
app.use(restApiRoot, app.loopback.rest());
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,99 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/config.development.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">server/config.development.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">server/</a> » config.development.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">module.exports = {
|
||||
host: '127.0.0.1',
|
||||
sessionSecret: process.env.SESSION_SECRET,
|
||||
|
||||
trello: {
|
||||
key: process.env.TRELLO_KEY,
|
||||
secret: process.env.TRELLO_SECRET
|
||||
},
|
||||
|
||||
blogger: {
|
||||
key: process.env.BLOGGER_KEY
|
||||
},
|
||||
|
||||
github: {
|
||||
clientID: process.env.GITHUB_ID,
|
||||
clientSecret: process.env.GITHUB_SECRET
|
||||
}
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,60 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/config.local.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">server/config.local.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">server/</a> » config.local.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var globalConfig = require('../common/config.global');
|
||||
|
||||
module.exports = {
|
||||
restApiRoot: globalConfig.restApi
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,102 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/datasources.local.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">server/datasources.local.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(2 / 2)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">server/</a> » datasources.local.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var secrets = require('../config/secrets');
|
||||
|
||||
module.exports = {
|
||||
db: {
|
||||
connector: 'mongodb',
|
||||
url: process.env.MONGOHQ_URL
|
||||
},
|
||||
mail: {
|
||||
connector: 'mail',
|
||||
transports: [{
|
||||
type: 'smtp',
|
||||
service: 'Mandrill',
|
||||
auth: {
|
||||
user: secrets.mandrill.user,
|
||||
pass: secrets.mandrill.password
|
||||
}
|
||||
}]
|
||||
}
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,125 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header medium">
|
||||
<h1>Code coverage report for <span class="entity">server/</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">56.7% <small>(55 / 97)</small></span>
|
||||
Branches: <span class="metric">16.13% <small>(5 / 31)</small></span>
|
||||
Functions: <span class="metric">20% <small>(2 / 10)</small></span>
|
||||
Lines: <span class="metric">56.7% <small>(55 / 97)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » server/</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="coverage-summary">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
||||
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
||||
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
||||
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
||||
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
||||
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
||||
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file high" data-value="config.development.js"><a href="config.development.js.html">config.development.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="config.local.js"><a href="config.local.js.html">config.local.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="datasources.local.js"><a href="datasources.local.js.html">datasources.local.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="2" class="abs high">(2 / 2)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file high" data-value="passport-providers.js"><a href="passport-providers.js.html">passport-providers.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="3" class="abs high">(3 / 3)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="3" class="abs high">(3 / 3)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file medium" data-value="server.js"><a href="server.js.html">server.js</a></td>
|
||||
<td data-value="52.81" class="pic medium"><span class="cover-fill" style="width: 52px;"></span><span class="cover-empty" style="width:48px;"></span></td>
|
||||
<td data-value="52.81" class="pct medium">52.81%</td>
|
||||
<td data-value="89" class="abs medium">(47 / 89)</td>
|
||||
<td data-value="16.13" class="pct low">16.13%</td>
|
||||
<td data-value="31" class="abs low">(5 / 31)</td>
|
||||
<td data-value="20" class="pct low">20%</td>
|
||||
<td data-value="10" class="abs low">(2 / 10)</td>
|
||||
<td data-value="52.81" class="pct medium">52.81%</td>
|
||||
<td data-value="89" class="abs medium">(47 / 89)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,414 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/passport-providers.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">server/passport-providers.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(3 / 3)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(3 / 3)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">server/</a> » passport-providers.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
73
|
||||
74
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
87
|
||||
88
|
||||
89
|
||||
90
|
||||
91
|
||||
92
|
||||
93
|
||||
94
|
||||
95
|
||||
96
|
||||
97
|
||||
98
|
||||
99
|
||||
100
|
||||
101
|
||||
102
|
||||
103
|
||||
104
|
||||
105
|
||||
106
|
||||
107
|
||||
108
|
||||
109
|
||||
110
|
||||
111
|
||||
112
|
||||
113
|
||||
114
|
||||
115
|
||||
116
|
||||
117
|
||||
118
|
||||
119
|
||||
120
|
||||
121
|
||||
122
|
||||
123
|
||||
124</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var successRedirect = '/';
|
||||
var failureRedirect = '/login';
|
||||
module.exports = {
|
||||
local: {
|
||||
provider: 'local',
|
||||
module: 'passport-local',
|
||||
usernameField: 'email',
|
||||
passwordField: 'password',
|
||||
authPath: '/auth/local',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: '/email-signin',
|
||||
session: true,
|
||||
failureFlash: true
|
||||
},
|
||||
'facebook-login': {
|
||||
provider: 'facebook',
|
||||
module: 'passport-facebook',
|
||||
clientID: process.env.FACEBOOK_ID,
|
||||
clientSecret: process.env.FACEBOOK_SECRET,
|
||||
authPath: '/auth/facebook',
|
||||
callbackURL: '/auth/facebook/callback',
|
||||
callbackPath: '/auth/facebook/callback',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
scope: ['email'],
|
||||
failureFlash: true
|
||||
},
|
||||
'facebook-link': {
|
||||
provider: 'facebook',
|
||||
module: 'passport-facebook',
|
||||
clientID: process.env.FACEBOOK_ID,
|
||||
clientSecret: process.env.FACEBOOK_SECRET,
|
||||
authPath: '/link/facebook',
|
||||
callbackURL: '/link/facebook/callback',
|
||||
callbackPath: '/link/facebook/callback',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
scope: ['email', 'user_likes'],
|
||||
link: true,
|
||||
failureFlash: true
|
||||
},
|
||||
'google-login': {
|
||||
provider: 'google',
|
||||
module: 'passport-google-oauth2',
|
||||
clientID: process.env.GOOGLE_ID,
|
||||
clientSecret: process.env.GOOGLE_SECRET,
|
||||
authPath: '/auth/google',
|
||||
callbackURL: '/auth/google/callback',
|
||||
callbackPath: '/auth/google/callback',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
scope: ['email', 'profile'],
|
||||
failureFlash: true
|
||||
},
|
||||
'google-link': {
|
||||
provider: 'google',
|
||||
module: 'passport-google-oauth2',
|
||||
clientID: process.env.GOOGLE_ID,
|
||||
clientSecret: process.env.GOOGLE_SECRET,
|
||||
authPath: '/link/google',
|
||||
callbackURL: '/link/google/callback',
|
||||
callbackPath: '/link/google/callback',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
scope: ['email', 'profile'],
|
||||
link: true,
|
||||
failureFlash: true
|
||||
},
|
||||
'twitter-login': {
|
||||
provider: 'twitter',
|
||||
authScheme: 'oauth',
|
||||
module: 'passport-twitter',
|
||||
authPath: '/auth/twitter',
|
||||
callbackURL: '/auth/twitter/callback',
|
||||
callbackPath: '/auth/twitter/callback',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
consumerKey: process.env.TWITTER_KEY,
|
||||
consumerSecret: process.env.TWITTER_SECRET,
|
||||
failureFlash: true
|
||||
},
|
||||
'twitter-link': {
|
||||
provider: 'twitter',
|
||||
authScheme: 'oauth',
|
||||
module: 'passport-twitter',
|
||||
authPath: '/link/twitter',
|
||||
callbackURL: '/link/twitter/callback',
|
||||
callbackPath: '/link/twitter/callback',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
consumerKey: process.env.TWITTER_KEY,
|
||||
consumerSecret: process.env.TWITTER_SECRET,
|
||||
failureFlash: true
|
||||
},
|
||||
'linkedin-login': {
|
||||
provider: 'linkedin',
|
||||
authScheme: 'oauth',
|
||||
module: 'passport-linkedin-oauth2',
|
||||
authPath: '/auth/linkedin',
|
||||
callbackURL: '/auth/linkedin/callback',
|
||||
callbackPath: '/auth/linkedin/callback',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
clientID: process.env.LINKEDIN_ID,
|
||||
clientSecret: process.env.LINKEDIN_SECRET,
|
||||
scope: ['r_fullprofile', 'r_emailaddress'],
|
||||
failureFlash: true
|
||||
},
|
||||
'linkedin-link': {
|
||||
provider: 'linkedin',
|
||||
authScheme: 'oauth',
|
||||
module: 'passport-linkedin-oauth2',
|
||||
authPath: '/link/linkedin',
|
||||
callbackURL: '/link/linkedin/callback',
|
||||
callbackPath: '/link/linkedin/callback',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
clientID: process.env.LINKEDIN_ID,
|
||||
clientSecret: process.env.LINKEDIN_SECRET,
|
||||
scope: ['r_fullprofile', 'r_emailaddress'],
|
||||
failureFlash: true
|
||||
}
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,951 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/server.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../prettify.css">
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header medium">
|
||||
<h1>Code coverage report for <span class="entity">server/server.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">52.81% <small>(47 / 89)</small></span>
|
||||
Branches: <span class="metric">16.13% <small>(5 / 31)</small></span>
|
||||
Functions: <span class="metric">20% <small>(2 / 10)</small></span>
|
||||
Lines: <span class="metric">52.81% <small>(47 / 89)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">server/</a> » server.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
73
|
||||
74
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
87
|
||||
88
|
||||
89
|
||||
90
|
||||
91
|
||||
92
|
||||
93
|
||||
94
|
||||
95
|
||||
96
|
||||
97
|
||||
98
|
||||
99
|
||||
100
|
||||
101
|
||||
102
|
||||
103
|
||||
104
|
||||
105
|
||||
106
|
||||
107
|
||||
108
|
||||
109
|
||||
110
|
||||
111
|
||||
112
|
||||
113
|
||||
114
|
||||
115
|
||||
116
|
||||
117
|
||||
118
|
||||
119
|
||||
120
|
||||
121
|
||||
122
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
129
|
||||
130
|
||||
131
|
||||
132
|
||||
133
|
||||
134
|
||||
135
|
||||
136
|
||||
137
|
||||
138
|
||||
139
|
||||
140
|
||||
141
|
||||
142
|
||||
143
|
||||
144
|
||||
145
|
||||
146
|
||||
147
|
||||
148
|
||||
149
|
||||
150
|
||||
151
|
||||
152
|
||||
153
|
||||
154
|
||||
155
|
||||
156
|
||||
157
|
||||
158
|
||||
159
|
||||
160
|
||||
161
|
||||
162
|
||||
163
|
||||
164
|
||||
165
|
||||
166
|
||||
167
|
||||
168
|
||||
169
|
||||
170
|
||||
171
|
||||
172
|
||||
173
|
||||
174
|
||||
175
|
||||
176
|
||||
177
|
||||
178
|
||||
179
|
||||
180
|
||||
181
|
||||
182
|
||||
183
|
||||
184
|
||||
185
|
||||
186
|
||||
187
|
||||
188
|
||||
189
|
||||
190
|
||||
191
|
||||
192
|
||||
193
|
||||
194
|
||||
195
|
||||
196
|
||||
197
|
||||
198
|
||||
199
|
||||
200
|
||||
201
|
||||
202
|
||||
203
|
||||
204
|
||||
205
|
||||
206
|
||||
207
|
||||
208
|
||||
209
|
||||
210
|
||||
211
|
||||
212
|
||||
213
|
||||
214
|
||||
215
|
||||
216
|
||||
217
|
||||
218
|
||||
219
|
||||
220
|
||||
221
|
||||
222
|
||||
223
|
||||
224
|
||||
225
|
||||
226
|
||||
227
|
||||
228
|
||||
229
|
||||
230
|
||||
231
|
||||
232
|
||||
233
|
||||
234
|
||||
235
|
||||
236
|
||||
237
|
||||
238
|
||||
239
|
||||
240
|
||||
241
|
||||
242
|
||||
243
|
||||
244
|
||||
245
|
||||
246
|
||||
247
|
||||
248
|
||||
249
|
||||
250
|
||||
251
|
||||
252
|
||||
253
|
||||
254
|
||||
255
|
||||
256
|
||||
257
|
||||
258
|
||||
259
|
||||
260
|
||||
261
|
||||
262
|
||||
263
|
||||
264
|
||||
265
|
||||
266
|
||||
267
|
||||
268
|
||||
269
|
||||
270
|
||||
271
|
||||
272
|
||||
273
|
||||
274
|
||||
275
|
||||
276
|
||||
277
|
||||
278
|
||||
279
|
||||
280
|
||||
281
|
||||
282
|
||||
283
|
||||
284
|
||||
285
|
||||
286
|
||||
287
|
||||
288
|
||||
289
|
||||
290
|
||||
291
|
||||
292
|
||||
293
|
||||
294
|
||||
295
|
||||
296
|
||||
297
|
||||
298
|
||||
299
|
||||
300
|
||||
301
|
||||
302
|
||||
303</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">9</span>
|
||||
<span class="cline-any cline-yes">9</span>
|
||||
<span class="cline-any cline-yes">9</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">require('dotenv').load();
|
||||
// handle uncaught exceptions. Forever will restart process on shutdown
|
||||
process.on('uncaughtException', function (err) {
|
||||
console.error(
|
||||
(new Date()).toUTCString() + ' uncaughtException:',
|
||||
err.message
|
||||
);
|
||||
console.error(err.stack);
|
||||
process.exit(1); // eslint-disable-line
|
||||
});
|
||||
|
||||
var R = require('ramda'),
|
||||
assign = require('lodash').assign,
|
||||
loopback = require('loopback'),
|
||||
boot = require('loopback-boot'),
|
||||
accepts = require('accepts'),
|
||||
cookieParser = require('cookie-parser'),
|
||||
compress = require('compression'),
|
||||
session = require('express-session'),
|
||||
logger = require('morgan'),
|
||||
errorHandler = require('errorhandler'),
|
||||
methodOverride = require('method-override'),
|
||||
bodyParser = require('body-parser'),
|
||||
helmet = require('helmet'),
|
||||
MongoStore = require('connect-mongo')(session),
|
||||
flash = require('express-flash'),
|
||||
path = require('path'),
|
||||
expressValidator = require('express-validator'),
|
||||
forceDomain = require('forcedomain'),
|
||||
lessMiddleware = require('less-middleware'),
|
||||
|
||||
passportProviders = require('./passport-providers'),
|
||||
/**
|
||||
* API keys and Passport configuration.
|
||||
*/
|
||||
secrets = require('./../config/secrets');
|
||||
|
||||
var generateKey =
|
||||
require('loopback-component-passport/lib/models/utils').generateKey;
|
||||
/**
|
||||
* Create Express server.
|
||||
*/
|
||||
var app = loopback();
|
||||
var PassportConfigurator =
|
||||
require('loopback-component-passport').PassportConfigurator;
|
||||
var passportConfigurator = new PassportConfigurator(app);
|
||||
|
||||
app.set('port', process.env.PORT || 3000);
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
app.set('view engine', 'jade');
|
||||
|
||||
<span class="missing-if-branch" title="if path not taken" >I</span>if (process.env.NODE_ENV === 'production') {
|
||||
<span class="cstat-no" title="statement not covered" > app.use(forceDomain({</span>
|
||||
hostname: 'www.freecodecamp.com'
|
||||
}));
|
||||
}
|
||||
|
||||
app.use(compress());
|
||||
app.use(lessMiddleware(path.join(__dirname, '/public')));
|
||||
app.use(logger('dev'));
|
||||
app.use(bodyParser.json());
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
app.use(expressValidator({
|
||||
customValidators: {
|
||||
matchRegex: <span class="fstat-no" title="function not covered" >function (param, regex) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return regex.test(param);</span>
|
||||
}
|
||||
}
|
||||
}));
|
||||
app.use(methodOverride());
|
||||
app.use(cookieParser(secrets.cookieSecret));
|
||||
app.use(session({
|
||||
resave: true,
|
||||
saveUninitialized: true,
|
||||
secret: secrets.sessionSecret,
|
||||
store: new MongoStore({
|
||||
url: secrets.db,
|
||||
'autoReconnect': true
|
||||
})
|
||||
}));
|
||||
|
||||
app.use(flash());
|
||||
app.disable('x-powered-by');
|
||||
|
||||
app.use(helmet.xssFilter());
|
||||
app.use(helmet.noSniff());
|
||||
app.use(helmet.frameguard());
|
||||
app.use(<span class="fstat-no" title="function not covered" >function(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.header('Access-Control-Allow-Origin', '*');</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.header('Access-Control-Allow-Headers',</span>
|
||||
'Origin, X-Requested-With, Content-Type, Accept'
|
||||
);
|
||||
<span class="cstat-no" title="statement not covered" > next();</span>
|
||||
});
|
||||
|
||||
var trusted = [
|
||||
"'self'",
|
||||
'blob:',
|
||||
'*.freecodecamp.com',
|
||||
'http://www.freecodecamp.com',
|
||||
'ws://freecodecamp.com/',
|
||||
'ws://www.freecodecamp.com/',
|
||||
'*.gstatic.com',
|
||||
'*.google-analytics.com',
|
||||
'*.googleapis.com',
|
||||
'*.google.com',
|
||||
'*.gstatic.com',
|
||||
'*.doubleclick.net',
|
||||
'*.twitter.com',
|
||||
'*.twitch.tv',
|
||||
'*.twimg.com',
|
||||
"'unsafe-eval'",
|
||||
"'unsafe-inline'",
|
||||
'*.bootstrapcdn.com',
|
||||
'*.cloudflare.com',
|
||||
'https://*.cloudflare.com',
|
||||
'localhost:3001',
|
||||
'ws://localhost:3001/',
|
||||
'http://localhost:3001',
|
||||
'localhost:3000',
|
||||
'ws://localhost:3000/',
|
||||
'http://localhost:3000',
|
||||
'*.ionicframework.com',
|
||||
'https://syndication.twitter.com',
|
||||
'*.youtube.com',
|
||||
'*.jsdelivr.net',
|
||||
'https://*.jsdelivr.net',
|
||||
'*.ytimg.com',
|
||||
'*.bitly.com',
|
||||
'http://cdn.inspectlet.com/',
|
||||
'wss://inspectletws.herokuapp.com/',
|
||||
'http://hn.inspectlet.com/'
|
||||
];
|
||||
|
||||
app.use(helmet.csp({
|
||||
defaultSrc: trusted,
|
||||
scriptSrc: [
|
||||
'*.optimizely.com',
|
||||
'*.aspnetcdn.com',
|
||||
'*.d3js.org'
|
||||
].concat(trusted),
|
||||
'connect-src': [
|
||||
].concat(trusted),
|
||||
styleSrc: trusted,
|
||||
imgSrc: [
|
||||
/* allow all input since we have user submitted images for public profile*/
|
||||
'*'
|
||||
].concat(trusted),
|
||||
fontSrc: ['*.googleapis.com'].concat(trusted),
|
||||
mediaSrc: [
|
||||
'*.amazonaws.com',
|
||||
'*.twitter.com'
|
||||
].concat(trusted),
|
||||
frameSrc: [
|
||||
|
||||
'*.gitter.im',
|
||||
'*.gitter.im https:',
|
||||
'*.vimeo.com',
|
||||
'*.twitter.com',
|
||||
'*.ghbtns.com'
|
||||
].concat(trusted),
|
||||
// set to true if you only want to report errors
|
||||
reportOnly: false,
|
||||
// set to true if you want to set all headers
|
||||
setAllHeaders: false,
|
||||
// set to true if you want to force buggy CSP in Safari 5
|
||||
safari5: false
|
||||
}));
|
||||
|
||||
passportConfigurator.init();
|
||||
|
||||
app.use(<span class="fstat-no" title="function not covered" >function (req, res, next) {</span>
|
||||
// Make user object available in templates.
|
||||
<span class="cstat-no" title="statement not covered" > res.locals.user = req.user;</span>
|
||||
<span class="cstat-no" title="statement not covered" > next();</span>
|
||||
});
|
||||
|
||||
app.use(
|
||||
loopback.static(path.join(__dirname, '../public'), { maxAge: 86400000 })
|
||||
);
|
||||
|
||||
boot(app, {
|
||||
appRootDir: __dirname,
|
||||
dev: process.env.NODE_ENV
|
||||
});
|
||||
|
||||
app.use(<span class="fstat-no" title="function not covered" >function (req, res, next) {</span>
|
||||
// Remember original destination before login.
|
||||
<span class="cstat-no" title="statement not covered" > var path = req.path.split('/')[1];</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (/auth|login|logout|signin|signup|fonts|favicon/i.test(path)) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next();</span>
|
||||
} else <span class="cstat-no" title="statement not covered" >if (/\/stories\/comments\/\w+/i.test(req.path)) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next();</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > req.session.returnTo = req.path;</span>
|
||||
<span class="cstat-no" title="statement not covered" > next();</span>
|
||||
});
|
||||
|
||||
passportConfigurator.setupModels({
|
||||
userModel: app.models.user,
|
||||
userIdentityModel: app.models.userIdentity,
|
||||
userCredentialModel: app.models.userCredential
|
||||
});
|
||||
|
||||
var passportOptions = {
|
||||
emailOptional: true,
|
||||
profileToUser: <span class="fstat-no" title="function not covered" >function(provider, profile) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var emails = profile.emails;</span>
|
||||
// NOTE(berks): get email or set to null.
|
||||
// MongoDB indexs email but can be sparse(blank)
|
||||
<span class="cstat-no" title="statement not covered" > var email = emails && emails[0] && emails[0].value ?</span>
|
||||
emails[0].value :
|
||||
null;
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var username = (profile.username || profile.id);</span>
|
||||
<span class="cstat-no" title="statement not covered" > username = typeof username === 'string' ? username.toLowerCase() : username;</span>
|
||||
<span class="cstat-no" title="statement not covered" > var password = generateKey('password');</span>
|
||||
<span class="cstat-no" title="statement not covered" > var userObj = {</span>
|
||||
username: username,
|
||||
password: password
|
||||
};
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > if (email) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > userObj.email = email;</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > return userObj;</span>
|
||||
}
|
||||
};
|
||||
|
||||
R.keys(passportProviders).map(function(strategy) {
|
||||
var config = passportProviders[strategy];
|
||||
config.session = config.session !== false;
|
||||
passportConfigurator.configureProvider(
|
||||
strategy,
|
||||
assign(config, passportOptions)
|
||||
);
|
||||
});
|
||||
|
||||
/**
|
||||
* OAuth sign-in routes.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 500 Error Handler.
|
||||
*/
|
||||
<span class="missing-if-branch" title="if path not taken" >I</span>if (process.env.NODE_ENV === 'development') {
|
||||
<span class="cstat-no" title="statement not covered" > app.use(errorHandler({ log: true }));</span>
|
||||
} else {
|
||||
// error handling in production disabling eslint due to express parity rules
|
||||
// for error handlers
|
||||
app.use(<span class="fstat-no" title="function not covered" >function(err, req, res, next) {</span> // eslint-disable-line
|
||||
|
||||
// respect err.status
|
||||
<span class="cstat-no" title="statement not covered" > if (err.status) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.statusCode = err.status;</span>
|
||||
}
|
||||
|
||||
// default status code to 500
|
||||
<span class="cstat-no" title="statement not covered" > if (res.statusCode < 400) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.statusCode = 500;</span>
|
||||
}
|
||||
|
||||
// parse res type
|
||||
<span class="cstat-no" title="statement not covered" > var accept = accepts(req);</span>
|
||||
<span class="cstat-no" title="statement not covered" > var type = accept.type('html', 'json', 'text');</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var message = 'opps! Something went wrong. Please try again later';</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (type === 'html') {</span>
|
||||
<span class="cstat-no" title="statement not covered" > req.flash('errors', { msg: message });</span>
|
||||
<span class="cstat-no" title="statement not covered" > return res.redirect('/');</span>
|
||||
// json
|
||||
} else <span class="cstat-no" title="statement not covered" >if (type === 'json') {</span>
|
||||
<span class="cstat-no" title="statement not covered" > res.setHeader('Content-Type', 'application/json');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return res.send({ message: message });</span>
|
||||
// plain text
|
||||
} else {
|
||||
<span class="cstat-no" title="statement not covered" > res.setHeader('Content-Type', 'text/plain');</span>
|
||||
<span class="cstat-no" title="statement not covered" > return res.send(message);</span>
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Start Express server.
|
||||
*/
|
||||
|
||||
app.start = <span class="fstat-no" title="function not covered" >function() {</span>
|
||||
<span class="cstat-no" title="statement not covered" > app.listen(app.get('port'), <span class="fstat-no" title="function not covered" >function () {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > console.log(</span>
|
||||
'FreeCodeCamp server listening on port %d in %s mode',
|
||||
app.get('port'),
|
||||
app.get('env')
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
// start the server if `$ node server.js`
|
||||
<span class="missing-if-branch" title="if path not taken" >I</span>if (require.main === module) {
|
||||
<span class="cstat-no" title="statement not covered" > app.start();</span>
|
||||
}
|
||||
|
||||
module.exports = app;
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,162 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/utils/constants.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header high">
|
||||
<h1>Code coverage report for <span class="entity">server/utils/constants.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Branches: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Functions: <span class="metric">100% <small>(0 / 0)</small></span>
|
||||
Lines: <span class="metric">100% <small>(1 / 1)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/utils/</a> » constants.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">exports.blacklistedUsernames = [
|
||||
'bonfire',
|
||||
'account',
|
||||
'user',
|
||||
'challenge',
|
||||
'challenges',
|
||||
'completed-challenge',
|
||||
'completed-zipline-or-basejump',
|
||||
'completed-bonfire',
|
||||
'map',
|
||||
'learn-to-code',
|
||||
'about',
|
||||
'api',
|
||||
'explorer',
|
||||
'field-guide',
|
||||
'completed-field-guide',
|
||||
'jobs',
|
||||
'nonprofits',
|
||||
'api',
|
||||
'sitemap.xml',
|
||||
'get-help',
|
||||
'chat',
|
||||
'twitch',
|
||||
'get-pai',
|
||||
'get-help',
|
||||
'nonprofits',
|
||||
'nonproifts-form',
|
||||
'jobs-form',
|
||||
'unsubscribe',
|
||||
'unsubscribed',
|
||||
'cats.json',
|
||||
'agile',
|
||||
'privacy',
|
||||
'stories',
|
||||
'signin',
|
||||
'signout',
|
||||
'forgot',
|
||||
'reset'
|
||||
];
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,99 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/utils/</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">server/utils/</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">35.11% <small>(33 / 94)</small></span>
|
||||
Branches: <span class="metric">9.38% <small>(3 / 32)</small></span>
|
||||
Functions: <span class="metric">30.3% <small>(10 / 33)</small></span>
|
||||
Lines: <span class="metric">35.11% <small>(33 / 94)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » server/utils/</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="coverage-summary">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
||||
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
||||
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
||||
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
||||
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
||||
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
||||
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td class="file high" data-value="constants.js"><a href="constants.js.html">constants.js</a></td>
|
||||
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="0" class="abs high">(0 / 0)</td>
|
||||
<td data-value="100" class="pct high">100%</td>
|
||||
<td data-value="1" class="abs high">(1 / 1)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="index.js"><a href="index.js.html">index.js</a></td>
|
||||
<td data-value="35.29" class="pic low"><span class="cover-fill" style="width: 35px;"></span><span class="cover-empty" style="width:65px;"></span></td>
|
||||
<td data-value="35.29" class="pct low">35.29%</td>
|
||||
<td data-value="85" class="abs low">(30 / 85)</td>
|
||||
<td data-value="10.71" class="pct low">10.71%</td>
|
||||
<td data-value="28" class="abs low">(3 / 28)</td>
|
||||
<td data-value="33.33" class="pct low">33.33%</td>
|
||||
<td data-value="30" class="abs low">(10 / 30)</td>
|
||||
<td data-value="35.29" class="pct low">35.29%</td>
|
||||
<td data-value="85" class="abs low">(30 / 85)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="file low" data-value="middleware.js"><a href="middleware.js.html">middleware.js</a></td>
|
||||
<td data-value="25" class="pic low"><span class="cover-fill" style="width: 25px;"></span><span class="cover-empty" style="width:75px;"></span></td>
|
||||
<td data-value="25" class="pct low">25%</td>
|
||||
<td data-value="8" class="abs low">(2 / 8)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="4" class="abs low">(0 / 4)</td>
|
||||
<td data-value="0" class="pct low">0%</td>
|
||||
<td data-value="3" class="abs low">(0 / 3)</td>
|
||||
<td data-value="25" class="pct low">25%</td>
|
||||
<td data-value="8" class="abs low">(2 / 8)</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,693 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/utils/index.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">server/utils/index.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">35.29% <small>(30 / 85)</small></span>
|
||||
Branches: <span class="metric">10.71% <small>(3 / 28)</small></span>
|
||||
Functions: <span class="metric">33.33% <small>(10 / 30)</small></span>
|
||||
Lines: <span class="metric">35.29% <small>(30 / 85)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/utils/</a> » index.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
73
|
||||
74
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
87
|
||||
88
|
||||
89
|
||||
90
|
||||
91
|
||||
92
|
||||
93
|
||||
94
|
||||
95
|
||||
96
|
||||
97
|
||||
98
|
||||
99
|
||||
100
|
||||
101
|
||||
102
|
||||
103
|
||||
104
|
||||
105
|
||||
106
|
||||
107
|
||||
108
|
||||
109
|
||||
110
|
||||
111
|
||||
112
|
||||
113
|
||||
114
|
||||
115
|
||||
116
|
||||
117
|
||||
118
|
||||
119
|
||||
120
|
||||
121
|
||||
122
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
129
|
||||
130
|
||||
131
|
||||
132
|
||||
133
|
||||
134
|
||||
135
|
||||
136
|
||||
137
|
||||
138
|
||||
139
|
||||
140
|
||||
141
|
||||
142
|
||||
143
|
||||
144
|
||||
145
|
||||
146
|
||||
147
|
||||
148
|
||||
149
|
||||
150
|
||||
151
|
||||
152
|
||||
153
|
||||
154
|
||||
155
|
||||
156
|
||||
157
|
||||
158
|
||||
159
|
||||
160
|
||||
161
|
||||
162
|
||||
163
|
||||
164
|
||||
165
|
||||
166
|
||||
167
|
||||
168
|
||||
169
|
||||
170
|
||||
171
|
||||
172
|
||||
173
|
||||
174
|
||||
175
|
||||
176
|
||||
177
|
||||
178
|
||||
179
|
||||
180
|
||||
181
|
||||
182
|
||||
183
|
||||
184
|
||||
185
|
||||
186
|
||||
187
|
||||
188
|
||||
189
|
||||
190
|
||||
191
|
||||
192
|
||||
193
|
||||
194
|
||||
195
|
||||
196
|
||||
197
|
||||
198
|
||||
199
|
||||
200
|
||||
201
|
||||
202
|
||||
203
|
||||
204
|
||||
205
|
||||
206
|
||||
207
|
||||
208
|
||||
209
|
||||
210
|
||||
211
|
||||
212
|
||||
213
|
||||
214
|
||||
215
|
||||
216
|
||||
217</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">14</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">39</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">14</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">14</span>
|
||||
<span class="cline-any cline-yes">175</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">14</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">14</span>
|
||||
<span class="cline-any cline-yes">175</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">14</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var path = require('path'),
|
||||
// debug = require('debug')('freecc:cntr:resources'),
|
||||
cheerio = require('cheerio'),
|
||||
request = require('request'),
|
||||
R = require('ramda'),
|
||||
_ = require('lodash'),
|
||||
fs = require('fs'),
|
||||
|
||||
|
||||
resources = require('./resources.json'),
|
||||
nonprofits = require('../../seed/nonprofits.json'),
|
||||
fieldGuides = require('../../seed/field-guides.json');
|
||||
|
||||
/**
|
||||
* Cached values
|
||||
*/
|
||||
var allFieldGuideIds, allFieldGuideNames, allNonprofitNames,
|
||||
challengeMap, challengeMapForDisplay, challengeMapWithIds,
|
||||
challengeMapWithNames, allChallengeIds, allChallenges;
|
||||
|
||||
/**
|
||||
* GET /
|
||||
* Resources.
|
||||
*/
|
||||
|
||||
Array.zip = <span class="fstat-no" title="function not covered" >function(left, right, combinerFunction) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var counter,</span>
|
||||
results = [];
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > for (counter = 0; counter < Math.min(left.length, right.length); counter++) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > results.push(combinerFunction(left[counter], right[counter]));</span>
|
||||
}
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > return results;</span>
|
||||
};
|
||||
|
||||
(function() {
|
||||
<span class="missing-if-branch" title="else path not taken" >E</span>if (!challengeMap) {
|
||||
var localChallengeMap = {};
|
||||
var files = fs.readdirSync(
|
||||
path.join(__dirname, '../../seed/challenges')
|
||||
);
|
||||
var keyCounter = 0;
|
||||
files = files.map(function (file) {
|
||||
return require(
|
||||
path.join(__dirname, '../../seed/challenges/' + file)
|
||||
);
|
||||
});
|
||||
files = files.sort(function (a, b) {
|
||||
return a.order - b.order;
|
||||
});
|
||||
files.forEach(function (file) {
|
||||
localChallengeMap[keyCounter++] = file;
|
||||
});
|
||||
challengeMap = _.cloneDeep(localChallengeMap);
|
||||
}
|
||||
})();
|
||||
|
||||
|
||||
module.exports = {
|
||||
getChallengeMapForDisplay: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!challengeMapForDisplay) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > challengeMapForDisplay = {};</span>
|
||||
<span class="cstat-no" title="statement not covered" > Object.keys(challengeMap).forEach(<span class="fstat-no" title="function not covered" >function (key) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > challengeMapForDisplay[key] = {</span>
|
||||
name: challengeMap[key].name,
|
||||
dashedName: challengeMap[key].name.replace(/\s/g, '-'),
|
||||
challenges: challengeMap[key].challenges,
|
||||
completedCount: challengeMap[key].challenges
|
||||
};
|
||||
});
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > return challengeMapForDisplay;</span>
|
||||
},
|
||||
|
||||
getChallengeMapWithIds: function () {
|
||||
<span class="missing-if-branch" title="else path not taken" >E</span>if (!challengeMapWithIds) {
|
||||
challengeMapWithIds = {};
|
||||
Object.keys(challengeMap).forEach(function (key) {
|
||||
var onlyIds = challengeMap[key].challenges.map(function (elem) {
|
||||
return elem.id;
|
||||
});
|
||||
challengeMapWithIds[key] = onlyIds;
|
||||
});
|
||||
}
|
||||
return challengeMapWithIds;
|
||||
},
|
||||
|
||||
allChallengeIds: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > if (!allChallengeIds) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > allChallengeIds = [];</span>
|
||||
<span class="cstat-no" title="statement not covered" > Object.keys(this.getChallengeMapWithIds()).forEach(<span class="fstat-no" title="function not covered" >function (key) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > allChallengeIds.push(challengeMapWithIds[key]);</span>
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > allChallengeIds = R.flatten(allChallengeIds);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > return allChallengeIds;</span>
|
||||
},
|
||||
|
||||
allChallenges: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!allChallenges) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > allChallenges = [];</span>
|
||||
<span class="cstat-no" title="statement not covered" > Object.keys(this.getChallengeMapWithNames()).forEach(<span class="fstat-no" title="function not covered" >function (key) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > allChallenges.push(challengeMap[key].challenges);</span>
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > allChallenges = R.flatten(allChallenges);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > return allChallenges;</span>
|
||||
},
|
||||
|
||||
getChallengeMapWithNames: function () {
|
||||
<span class="missing-if-branch" title="else path not taken" >E</span>if (!challengeMapWithNames) {
|
||||
challengeMapWithNames = {};
|
||||
Object.keys(challengeMap).
|
||||
forEach(function (key) {
|
||||
var onlyNames = challengeMap[key].challenges.map(function (elem) {
|
||||
return elem.name;
|
||||
});
|
||||
challengeMapWithNames[key] = onlyNames;
|
||||
});
|
||||
}
|
||||
return challengeMapWithNames;
|
||||
},
|
||||
|
||||
|
||||
randomPhrase: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return resources.phrases[</span>
|
||||
Math.floor(Math.random() * resources.phrases.length)
|
||||
];
|
||||
},
|
||||
|
||||
randomVerb: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return resources.verbs[</span>
|
||||
Math.floor(Math.random() * resources.verbs.length)
|
||||
];
|
||||
},
|
||||
|
||||
randomCompliment: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return resources.compliments[</span>
|
||||
Math.floor(Math.random() * resources.compliments.length)
|
||||
];
|
||||
},
|
||||
|
||||
allFieldGuideIds: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (allFieldGuideIds) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return allFieldGuideIds;</span>
|
||||
} else {
|
||||
<span class="cstat-no" title="statement not covered" > allFieldGuideIds = fieldGuides.map(<span class="fstat-no" title="function not covered" >function (elem) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > return elem.id;</span>
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > return allFieldGuideIds;</span>
|
||||
}
|
||||
},
|
||||
|
||||
allFieldGuideNamesAndIds: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (allFieldGuideNames) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return allFieldGuideNames;</span>
|
||||
} else {
|
||||
<span class="cstat-no" title="statement not covered" > allFieldGuideNames = fieldGuides.map(<span class="fstat-no" title="function not covered" >function (elem) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > return {</span>
|
||||
name: elem.name,
|
||||
dashedName: elem.dashedName,
|
||||
id: elem.id
|
||||
};
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > return allFieldGuideNames;</span>
|
||||
}
|
||||
},
|
||||
|
||||
allNonprofitNames: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (allNonprofitNames) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return allNonprofitNames;</span>
|
||||
} else {
|
||||
<span class="cstat-no" title="statement not covered" > allNonprofitNames = nonprofits.map(<span class="fstat-no" title="function not covered" >function (elem) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > return {name: elem.name};</span>
|
||||
});
|
||||
<span class="cstat-no" title="statement not covered" > return allNonprofitNames;</span>
|
||||
}
|
||||
},
|
||||
|
||||
whichEnvironment: <span class="fstat-no" title="function not covered" >function () {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return process.env.NODE_ENV;</span>
|
||||
},
|
||||
|
||||
getURLTitle: <span class="fstat-no" title="function not covered" >function (url, callback) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >function () {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > var result = {title: '', image: '', url: '', description: ''};</span>
|
||||
<span class="cstat-no" title="statement not covered" > request(url, <span class="fstat-no" title="function not covered" >function (error, response, body) {</span></span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!error && response.statusCode === 200) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > var $ = cheerio.load(body);</span>
|
||||
<span class="cstat-no" title="statement not covered" > var metaDescription = $("meta[name='description']");</span>
|
||||
<span class="cstat-no" title="statement not covered" > var metaImage = $("meta[property='og:image']");</span>
|
||||
<span class="cstat-no" title="statement not covered" > var urlImage = metaImage.attr('content') ?</span>
|
||||
metaImage.attr('content') :
|
||||
'';
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > var metaTitle = $('title');</span>
|
||||
<span class="cstat-no" title="statement not covered" > var description = metaDescription.attr('content') ?</span>
|
||||
metaDescription.attr('content') :
|
||||
'';
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > result.title = metaTitle.text().length < 90 ?</span>
|
||||
metaTitle.text() :
|
||||
metaTitle.text().slice(0, 87) + '...';
|
||||
|
||||
<span class="cstat-no" title="statement not covered" > result.image = urlImage;</span>
|
||||
<span class="cstat-no" title="statement not covered" > result.description = description;</span>
|
||||
<span class="cstat-no" title="statement not covered" > callback(null, result);</span>
|
||||
} else {
|
||||
<span class="cstat-no" title="statement not covered" > callback(new Error('failed'));</span>
|
||||
}
|
||||
});
|
||||
})();
|
||||
}
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
@@ -1,150 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for server/utils/middleware.js</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="../../prettify.css">
|
||||
<link rel="stylesheet" href="../../base.css">
|
||||
<style type='text/css'>
|
||||
div.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header low">
|
||||
<h1>Code coverage report for <span class="entity">server/utils/middleware.js</span></h1>
|
||||
<h2>
|
||||
Statements: <span class="metric">25% <small>(2 / 8)</small></span>
|
||||
Branches: <span class="metric">0% <small>(0 / 4)</small></span>
|
||||
Functions: <span class="metric">0% <small>(0 / 3)</small></span>
|
||||
Lines: <span class="metric">25% <small>(2 / 8)</small></span>
|
||||
Ignored: <span class="metric"><span class="ignore-none">none</span></span>
|
||||
</h2>
|
||||
<div class="path"><a href="../../index.html">All files</a> » <a href="index.html">server/utils/</a> » middleware.js</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count">1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36</td><td class="line-coverage"><span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var R = require('ramda');
|
||||
|
||||
/*
|
||||
* Middleware to migrate users from fragmented challenge structure to unified
|
||||
* challenge structure
|
||||
*
|
||||
* @param req
|
||||
* @param res
|
||||
* @returns null
|
||||
*/
|
||||
exports.userMigration = <span class="fstat-no" title="function not covered" >function userMigration(req, res, next) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > if (!req.user || req.user.completedChallenges.length !== 0) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return next();</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > req.user.completedChallenges = R.filter(<span class="fstat-no" title="function not covered" >function (elem) {</span></span>
|
||||
// getting rid of undefined
|
||||
<span class="cstat-no" title="statement not covered" > return elem;</span>
|
||||
}, R.concat(
|
||||
req.user.completedCoursewares,
|
||||
req.user.completedBonfires.map(<span class="fstat-no" title="function not covered" >function (bonfire) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > return ({</span>
|
||||
completedDate: bonfire.completedDate,
|
||||
id: bonfire.id,
|
||||
name: bonfire.name,
|
||||
completedWith: bonfire.completedWith,
|
||||
solution: bonfire.solution,
|
||||
githubLink: '',
|
||||
verified: false,
|
||||
challengeType: 5
|
||||
});
|
||||
})
|
||||
)
|
||||
);
|
||||
<span class="cstat-no" title="statement not covered" > return next();</span>
|
||||
};
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Jun 11 2015 21:16:17 GMT-0400 (EDT)</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
Before Width: | Height: | Size: 209 B |
@@ -1,156 +0,0 @@
|
||||
var addSorting = (function () {
|
||||
"use strict";
|
||||
var cols,
|
||||
currentSort = {
|
||||
index: 0,
|
||||
desc: false
|
||||
};
|
||||
|
||||
// returns the summary table element
|
||||
function getTable() { return document.querySelector('.coverage-summary table'); }
|
||||
// returns the thead element of the summary table
|
||||
function getTableHeader() { return getTable().querySelector('thead tr'); }
|
||||
// returns the tbody element of the summary table
|
||||
function getTableBody() { return getTable().querySelector('tbody'); }
|
||||
// returns the th element for nth column
|
||||
function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
|
||||
|
||||
// loads all columns
|
||||
function loadColumns() {
|
||||
var colNodes = getTableHeader().querySelectorAll('th'),
|
||||
colNode,
|
||||
cols = [],
|
||||
col,
|
||||
i;
|
||||
|
||||
for (i = 0; i < colNodes.length; i += 1) {
|
||||
colNode = colNodes[i];
|
||||
col = {
|
||||
key: colNode.getAttribute('data-col'),
|
||||
sortable: !colNode.getAttribute('data-nosort'),
|
||||
type: colNode.getAttribute('data-type') || 'string'
|
||||
};
|
||||
cols.push(col);
|
||||
if (col.sortable) {
|
||||
col.defaultDescSort = col.type === 'number';
|
||||
colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
|
||||
}
|
||||
}
|
||||
return cols;
|
||||
}
|
||||
// attaches a data attribute to every tr element with an object
|
||||
// of data values keyed by column name
|
||||
function loadRowData(tableRow) {
|
||||
var tableCols = tableRow.querySelectorAll('td'),
|
||||
colNode,
|
||||
col,
|
||||
data = {},
|
||||
i,
|
||||
val;
|
||||
for (i = 0; i < tableCols.length; i += 1) {
|
||||
colNode = tableCols[i];
|
||||
col = cols[i];
|
||||
val = colNode.getAttribute('data-value');
|
||||
if (col.type === 'number') {
|
||||
val = Number(val);
|
||||
}
|
||||
data[col.key] = val;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
// loads all row data
|
||||
function loadData() {
|
||||
var rows = getTableBody().querySelectorAll('tr'),
|
||||
i;
|
||||
|
||||
for (i = 0; i < rows.length; i += 1) {
|
||||
rows[i].data = loadRowData(rows[i]);
|
||||
}
|
||||
}
|
||||
// sorts the table using the data for the ith column
|
||||
function sortByIndex(index, desc) {
|
||||
var key = cols[index].key,
|
||||
sorter = function (a, b) {
|
||||
a = a.data[key];
|
||||
b = b.data[key];
|
||||
return a < b ? -1 : a > b ? 1 : 0;
|
||||
},
|
||||
finalSorter = sorter,
|
||||
tableBody = document.querySelector('.coverage-summary tbody'),
|
||||
rowNodes = tableBody.querySelectorAll('tr'),
|
||||
rows = [],
|
||||
i;
|
||||
|
||||
if (desc) {
|
||||
finalSorter = function (a, b) {
|
||||
return -1 * sorter(a, b);
|
||||
};
|
||||
}
|
||||
|
||||
for (i = 0; i < rowNodes.length; i += 1) {
|
||||
rows.push(rowNodes[i]);
|
||||
tableBody.removeChild(rowNodes[i]);
|
||||
}
|
||||
|
||||
rows.sort(finalSorter);
|
||||
|
||||
for (i = 0; i < rows.length; i += 1) {
|
||||
tableBody.appendChild(rows[i]);
|
||||
}
|
||||
}
|
||||
// removes sort indicators for current column being sorted
|
||||
function removeSortIndicators() {
|
||||
var col = getNthColumn(currentSort.index),
|
||||
cls = col.className;
|
||||
|
||||
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
|
||||
col.className = cls;
|
||||
}
|
||||
// adds sort indicators for current column being sorted
|
||||
function addSortIndicators() {
|
||||
getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
|
||||
}
|
||||
// adds event listeners for all sorter widgets
|
||||
function enableUI() {
|
||||
var i,
|
||||
el,
|
||||
ithSorter = function ithSorter(i) {
|
||||
var col = cols[i];
|
||||
|
||||
return function () {
|
||||
var desc = col.defaultDescSort;
|
||||
|
||||
if (currentSort.index === i) {
|
||||
desc = !currentSort.desc;
|
||||
}
|
||||
sortByIndex(i, desc);
|
||||
removeSortIndicators();
|
||||
currentSort.index = i;
|
||||
currentSort.desc = desc;
|
||||
addSortIndicators();
|
||||
};
|
||||
};
|
||||
for (i =0 ; i < cols.length; i += 1) {
|
||||
if (cols[i].sortable) {
|
||||
el = getNthColumn(i).querySelector('.sorter');
|
||||
if (el.addEventListener) {
|
||||
el.addEventListener('click', ithSorter(i));
|
||||
} else {
|
||||
el.attachEvent('onclick', ithSorter(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// adds sorting functionality to the UI
|
||||
return function () {
|
||||
if (!getTable()) {
|
||||
return;
|
||||
}
|
||||
cols = loadColumns();
|
||||
loadData(cols);
|
||||
addSortIndicators();
|
||||
enableUI();
|
||||
};
|
||||
})();
|
||||
|
||||
window.addEventListener('load', addSorting);
|
2762
coverage/lcov.info
2762
coverage/lcov.info
File diff suppressed because it is too large
Load Diff
@@ -13,7 +13,7 @@
|
||||
"start": "node server/server.js",
|
||||
"lint": "eslint --ext=.js,.jsx .",
|
||||
"test": "mocha",
|
||||
"postinstall": "bower cache clean && bower install"
|
||||
"postinstall": "bower cache clean && bower install && gulp build"
|
||||
},
|
||||
"license": "BSD-3-Clause",
|
||||
"contributors": [
|
||||
@@ -78,6 +78,7 @@
|
||||
"passport-local": "^1.0.0",
|
||||
"passport-oauth": "^1.0.0",
|
||||
"passport-twitter": "^1.0.3",
|
||||
"pmx": "^0.3.16",
|
||||
"ramda": "~0.10.0",
|
||||
"request": "~2.53.0",
|
||||
"rx": "^2.5.3",
|
||||
|
@@ -1121,6 +1121,35 @@ hr {
|
||||
}
|
||||
}
|
||||
|
||||
// Calculator styles
|
||||
|
||||
.hidden-initially {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
#four p{
|
||||
font-size: .6em;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.chart rect {
|
||||
fill: steelblue;
|
||||
}
|
||||
|
||||
.chart text {
|
||||
fill: #121401;
|
||||
font: 13px sans-serif;
|
||||
text-anchor: end;
|
||||
}
|
||||
|
||||
.axis path,
|
||||
.axis line {
|
||||
fill: none;
|
||||
stroke: #121401;
|
||||
stroke-width: 2px;
|
||||
shape-rendering: crispEdges;
|
||||
}
|
||||
|
||||
//uncomment this to see the dimensions of all elements outlined in red
|
||||
//* {
|
||||
// border-color: red;
|
||||
|
@@ -12,7 +12,7 @@ var __jailed__path__ = scripts[scripts.length-1].src
|
||||
.split('?')[0]
|
||||
.split('/')
|
||||
.slice(0, -1)
|
||||
.join('/')+'/';
|
||||
.join('/') + '/';
|
||||
|
||||
// creating worker as a blob enables import of local files
|
||||
var blobCode = [
|
||||
|
@@ -1758,8 +1758,8 @@
|
||||
},
|
||||
{
|
||||
"id": "bad87fee1348bd9aedc08830",
|
||||
"name": "waypoint-use-html5-to-require-a-field",
|
||||
"dashedName": "Waypoint: Use HTML5 to Require a Field",
|
||||
"name": "Waypoint: Use HTML5 to Require a Field",
|
||||
"dashedName": "waypoint-use-html5-to-require-a-field",
|
||||
"difficulty": 0.042,
|
||||
"description": [
|
||||
"Make your text <code>input</code> a \"required\" field, so that your user can't submit the form without completing this field.",
|
||||
|
@@ -173,8 +173,8 @@
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c442eddfaeb5bd19",
|
||||
"name": "zipline-wikipedia-viewer",
|
||||
"dashedName": "Zipline: Wikipedia Viewer",
|
||||
"name": "Zipline: Wikipedia Viewer",
|
||||
"dashedName": "zipline-wikipedia-viewer",
|
||||
"difficulty": 1.05,
|
||||
"challengeSeed": ["126415131"],
|
||||
"description": [
|
||||
|
@@ -28,7 +28,7 @@ var CompletionMonitor = function() {
|
||||
|
||||
Challenge.destroyAll(function(err, info) {
|
||||
if (err) {
|
||||
console.err(err);
|
||||
console.error(err);
|
||||
} else {
|
||||
console.log('Deleted ', info);
|
||||
}
|
||||
|
@@ -1,10 +1,10 @@
|
||||
/* eslint-disable no-process-exit */
|
||||
require('dotenv').load();
|
||||
var Rx = require('rx'),
|
||||
uuid = require('node-uuid'),
|
||||
assign = require('lodash/object/assign'),
|
||||
mongodb = require('mongodb'),
|
||||
secrets = require('../config/secrets');
|
||||
uuid = require('node-uuid'),
|
||||
assign = require('lodash/object/assign'),
|
||||
mongodb = require('mongodb'),
|
||||
secrets = require('../config/secrets');
|
||||
|
||||
var MongoClient = mongodb.MongoClient;
|
||||
|
||||
@@ -16,6 +16,14 @@ var providers = [
|
||||
'linkedin'
|
||||
];
|
||||
|
||||
// create async console.logs
|
||||
function debug() {
|
||||
var args = [].slice.call(arguments);
|
||||
process.nextTick(function() {
|
||||
console.log.apply(console, args);
|
||||
});
|
||||
}
|
||||
|
||||
function createConnection(URI) {
|
||||
return Rx.Observable.create(function(observer) {
|
||||
MongoClient.connect(URI, function(err, database) {
|
||||
@@ -23,32 +31,31 @@ function createConnection(URI) {
|
||||
return observer.onError(err);
|
||||
}
|
||||
observer.onNext(database);
|
||||
observer.onCompleted();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function createQuery(db, collection, options, batchSize) {
|
||||
return Rx.Observable.create(function (observer) {
|
||||
console.log('Creating cursor...');
|
||||
var cursor = db.collection(collection).find({}, options);
|
||||
cursor.batchSize(batchSize || 20);
|
||||
// Cursor.each will yield all doc from a batch in the same tick,
|
||||
// or schedule getting next batch on nextTick
|
||||
debug('opening cursor for %s', collection);
|
||||
cursor.each(function (err, doc) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
return observer.onError(err);
|
||||
}
|
||||
if (!doc) {
|
||||
console.log('hit complete');
|
||||
console.log('onCompleted');
|
||||
return observer.onCompleted();
|
||||
}
|
||||
console.log('calling onnext');
|
||||
observer.onNext(doc);
|
||||
});
|
||||
|
||||
return Rx.Disposable.create(function () {
|
||||
console.log('Disposing cursor...');
|
||||
debug('closing cursor for %s', collection);
|
||||
cursor.close();
|
||||
});
|
||||
});
|
||||
@@ -101,7 +108,6 @@ var userSavesCount = users
|
||||
})
|
||||
.flatMap(function(dats) {
|
||||
// bulk insert into new collection for loopback
|
||||
console.log(dats);
|
||||
return insertMany(dats.db, 'user', dats.users, { w: 1 });
|
||||
})
|
||||
// count how many times insert completes
|
||||
@@ -138,18 +144,44 @@ var userIdentityCount = users
|
||||
// count how many times insert completes
|
||||
.count();
|
||||
|
||||
Rx.Observable.merge(
|
||||
var storyCount = dbObservable
|
||||
.flatMap(function(db) {
|
||||
return createQuery(db, 'stories', {});
|
||||
})
|
||||
.bufferWithCount(20)
|
||||
.withLatestFrom(dbObservable, function(stories, db) {
|
||||
return {
|
||||
stories: stories,
|
||||
db: db
|
||||
};
|
||||
})
|
||||
.flatMap(function(dats) {
|
||||
return insertMany(dats.db, 'story', dats.stories, { w: 1 });
|
||||
})
|
||||
.count();
|
||||
|
||||
Rx.Observable.combineLatest(
|
||||
userIdentityCount,
|
||||
userSavesCount
|
||||
)
|
||||
userSavesCount,
|
||||
storyCount,
|
||||
function(userIdentCount, userCount, storyCount) {
|
||||
return {
|
||||
userIdentCount: userIdentCount * 20,
|
||||
userCount: userCount * 20,
|
||||
storyCount: storyCount * 20
|
||||
};
|
||||
})
|
||||
.subscribe(
|
||||
function(_count) {
|
||||
count += _count * 20;
|
||||
},
|
||||
function(err) {
|
||||
console.log('an error occured', err, err.stack);
|
||||
},
|
||||
function() {
|
||||
console.log('finished with %s documents processed', count);
|
||||
}
|
||||
);
|
||||
function(countObj) {
|
||||
console.log('next');
|
||||
count = countObj;
|
||||
},
|
||||
function(err) {
|
||||
console.error('an error occured', err, err.stack);
|
||||
},
|
||||
function() {
|
||||
|
||||
console.log('finished with ', count);
|
||||
process.exit(0);
|
||||
}
|
||||
);
|
@@ -12,6 +12,7 @@ module.exports = function(app) {
|
||||
var User = app.models.User;
|
||||
var UserIdentity = app.models.UserIdentity;
|
||||
var UserCredential = app.models.UserCredential;
|
||||
var Email = app.models.Email;
|
||||
User.observe('before delete', function(ctx, next) {
|
||||
debug('removing user', ctx.where);
|
||||
var id = ctx.where && ctx.where.id ? ctx.where.id : null;
|
||||
@@ -41,4 +42,51 @@ module.exports = function(app) {
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// set email varified false on user email signup
|
||||
// should not be set with oauth signin methods
|
||||
User.beforeRemote('create', function(ctx, user, next) {
|
||||
var body = ctx.req.body;
|
||||
if (body) {
|
||||
body.emailVerified = false;
|
||||
}
|
||||
next();
|
||||
});
|
||||
|
||||
// send welcome email to new camper
|
||||
User.afterRemote('create', function(ctx, user, next) {
|
||||
debug('user created, sending email');
|
||||
if (!user.email) { return next(); }
|
||||
|
||||
var mailOptions = {
|
||||
type: 'email',
|
||||
to: user.email,
|
||||
from: 'Team@freecodecamp.com',
|
||||
subject: 'Welcome to Free Code Camp!',
|
||||
redirect: '/',
|
||||
text: [
|
||||
'Greetings from San Francisco!\n\n',
|
||||
'Thank you for joining our community.\n',
|
||||
'Feel free to email us at this address if you have ',
|
||||
'any questions about Free Code Camp.\n',
|
||||
'And if you have a moment, check out our blog: ',
|
||||
'blog.freecodecamp.com.\n',
|
||||
'Good luck with the challenges!\n\n',
|
||||
'- the Free Code Camp Volunteer Team'
|
||||
].join('')
|
||||
};
|
||||
|
||||
debug('sending welcome email');
|
||||
Email.send(mailOptions, function(err) {
|
||||
if (err) { return next(err); }
|
||||
ctx.req.logIn(user, function(err) {
|
||||
if (err) { return next(err); }
|
||||
|
||||
ctx.req.flash('success', {
|
||||
msg: [ 'thanks for joining freecodecamp!' ]
|
||||
});
|
||||
ctx.res.redirect('/');
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
@@ -7,15 +7,15 @@
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
@@ -31,12 +31,13 @@
|
||||
*/
|
||||
|
||||
var R = require('ramda'),
|
||||
utils = require('../utils'),
|
||||
userMigration = require('../utils/middleware').userMigration,
|
||||
MDNlinks = require('../../seed/bonfireMDNlinks');
|
||||
utils = require('../utils'),
|
||||
userMigration = require('../utils/middleware').userMigration,
|
||||
MDNlinks = require('../../seed/bonfireMDNlinks');
|
||||
|
||||
var challengeMapWithNames = utils.getChallengeMapWithNames();
|
||||
var challengeMapWithIds = utils.getChallengeMapWithIds();
|
||||
var challengeMapWithDashedNames = utils.getChallengeMapWithDashedNames();
|
||||
|
||||
|
||||
function getMDNlinks(links) {
|
||||
@@ -79,7 +80,7 @@ module.exports = function(app) {
|
||||
|
||||
function returnNextChallenge(req, res, next) {
|
||||
if (!req.user) {
|
||||
return res.redirect('../challenges/learn-how-free-code-camp-works');
|
||||
return res.redirect('../challenges/learn-how-free-code-camp-works');
|
||||
}
|
||||
var completed = req.user.completedChallenges.map(function (elem) {
|
||||
return elem.id;
|
||||
@@ -108,32 +109,28 @@ module.exports = function(app) {
|
||||
if (indexOfChallenge + 1
|
||||
< challengeMapWithIds[challengeBlock].length) {
|
||||
nextChallengeName =
|
||||
challengeMapWithNames[challengeBlock][++indexOfChallenge];
|
||||
challengeMapWithDashedNames[challengeBlock][++indexOfChallenge];
|
||||
} else if (typeof challengeMapWithIds[++challengeBlock] !== 'undefined') {
|
||||
nextChallengeName = R.head(challengeMapWithNames[challengeBlock]);
|
||||
nextChallengeName = R.head(challengeMapWithDashedNames[challengeBlock]);
|
||||
} else {
|
||||
req.flash('errors', {
|
||||
msg: 'It looks like you have finished all of our challenges.' +
|
||||
' Great job! Now on to helping nonprofits!'
|
||||
});
|
||||
nextChallengeName = R.head(challengeMapWithNames[0].challenges);
|
||||
nextChallengeName = R.head(challengeMapWithDashedNames[0].challenges);
|
||||
}
|
||||
|
||||
var nameString = nextChallengeName.trim()
|
||||
.toLowerCase()
|
||||
.replace(/\s/g, '-');
|
||||
|
||||
req.user.save(function(err) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
return res.redirect('../challenges/' + nameString);
|
||||
return res.redirect('../challenges/' + nextChallengeName);
|
||||
});
|
||||
}
|
||||
|
||||
function returnCurrentChallenge(req, res, next) {
|
||||
if (!req.user) {
|
||||
return res.redirect('../challenges/learn-how-free-code-camp-works');
|
||||
return res.redirect('../challenges/learn-how-free-code-camp-works');
|
||||
}
|
||||
var completed = req.user.completedChallenges.map(function (elem) {
|
||||
return elem.id;
|
||||
@@ -150,16 +147,12 @@ module.exports = function(app) {
|
||||
req.user.currentChallenge.challengeId = challengeMapWithIds['0'][0];
|
||||
req.user.currentChallenge.challengeName = challengeMapWithNames['0'][0];
|
||||
req.user.currentChallenge.challengeBlock = '0';
|
||||
req.user.save(function(err) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
});
|
||||
req.user.currentChallenge.dashedName =
|
||||
challengeMapWithDashedNames['0'][0];
|
||||
}
|
||||
var nameString = req.user.currentChallenge.challengeName.trim()
|
||||
.toLowerCase()
|
||||
.replace(/\s/g, '-')
|
||||
.replace(/[^a-z0-9\-\/.]/gi, '');
|
||||
|
||||
var nameString = req.user.currentChallenge.dashedName;
|
||||
|
||||
req.user.save(function(err) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
@@ -171,40 +164,25 @@ module.exports = function(app) {
|
||||
function returnIndividualChallenge(req, res, next) {
|
||||
var dashedName = req.params.challengeName;
|
||||
|
||||
var challengeName =
|
||||
(/^(bonfire|waypoint|zipline|basejump)/i).test(dashedName) ?
|
||||
dashedName
|
||||
.replace(/\-/g, ' ')
|
||||
.split(' ')
|
||||
.slice(1)
|
||||
.join(' ') :
|
||||
dashedName.replace(/\-/g, ' ');
|
||||
|
||||
Challenge.find(
|
||||
{ where: { name: new RegExp(challengeName, 'i') } },
|
||||
function(err, challengeFromMongo) {
|
||||
Challenge.findOne(
|
||||
{ where: { dashedName: dashedName }},
|
||||
function(err, challenge) {
|
||||
if (err) { return next(err); }
|
||||
|
||||
// Handle not found
|
||||
if (challengeFromMongo.length < 1) {
|
||||
if (!challenge) {
|
||||
req.flash('errors', {
|
||||
msg: '404: We couldn\'t find a challenge with that name. ' +
|
||||
'Please double check the name.'
|
||||
});
|
||||
return res.redirect('/challenges');
|
||||
}
|
||||
var challenge = challengeFromMongo.pop();
|
||||
// Redirect to full name if the user only entered a partial
|
||||
var dashedNameFull = challenge.name
|
||||
.toLowerCase()
|
||||
.replace(/\s/g, '-')
|
||||
.replace(/[^a-z0-9\-\.]/gi, '');
|
||||
if (dashedNameFull !== dashedName) {
|
||||
return res.redirect('../challenges/' + dashedNameFull);
|
||||
} else if (req.user) {
|
||||
if (req.user) {
|
||||
req.user.currentChallenge = {
|
||||
challengeId: challenge.id,
|
||||
challengeName: challenge.name,
|
||||
dashedName: challenge.dashedName,
|
||||
challengeBlock: R.head(R.flatten(Object.keys(challengeMapWithIds).
|
||||
map(function (key) {
|
||||
return challengeMapWithIds[key]
|
||||
|
@@ -29,7 +29,7 @@ module.exports = function(app) {
|
||||
|
||||
var completedChallengeList = noDuplicatedChallenges
|
||||
.map(function(challenge) {
|
||||
return challenge.id;
|
||||
return (challenge.id || challenge._id); // backwards compatibility
|
||||
});
|
||||
var challengeList = utils.
|
||||
getChallengeMapForDisplay(completedChallengeList);
|
||||
@@ -37,7 +37,8 @@ module.exports = function(app) {
|
||||
Object.keys(challengeList).forEach(function(key) {
|
||||
challengeList[key].completed = challengeList[key]
|
||||
.challenges.filter(function(elem) {
|
||||
return completedChallengeList.indexOf(elem.id) > -1;
|
||||
return completedChallengeList.indexOf(elem.id || elem._id) > -1;
|
||||
//backwards compatibility hack
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
var R = require('ramda'),
|
||||
// Rx = require('rx'),
|
||||
// debug = require('debug')('freecc:fieldguides'),
|
||||
debug = require('debug')('freecc:fieldguides'),
|
||||
utils = require('../utils');
|
||||
|
||||
module.exports = function(app) {
|
||||
@@ -102,6 +102,11 @@ module.exports = function(app) {
|
||||
function(err, fieldGuide) {
|
||||
|
||||
if (err) { return next(err); }
|
||||
if (!fieldGuide) {
|
||||
debug('bad juju in field guide %s',
|
||||
req.user.uncompletedFieldGuides[0]);
|
||||
return res.redirect('../field-guide/how-do-i-use-this-guide');
|
||||
}
|
||||
return res.redirect('../field-guide/' + fieldGuide.dashedName);
|
||||
});
|
||||
}
|
||||
|
@@ -7,6 +7,7 @@ var Rx = require('rx'),
|
||||
debug = require('debug')('freecc:cntr:resources'),
|
||||
|
||||
constantStrings = require('../utils/constantStrings.json'),
|
||||
bootcampJson = require('../utils/bootcamps.json'),
|
||||
secrets = require('../../config/secrets');
|
||||
|
||||
var slack = new Slack(secrets.slackHook);
|
||||
@@ -27,6 +28,7 @@ module.exports = function(app) {
|
||||
router.post('/get-pair', getPair);
|
||||
router.get('/chat', chat);
|
||||
router.get('/bootcamp-calculator', bootcampCalculator);
|
||||
router.get('/bootcamp-calculator.json', bootcampCalculatorJson);
|
||||
router.get('/twitch', twitch);
|
||||
router.get('/pmi-acp-agile-project-managers', agileProjectManagers);
|
||||
router.get('/pmi-acp-agile-project-managers-form', agileProjectManagersForm);
|
||||
@@ -37,7 +39,6 @@ module.exports = function(app) {
|
||||
router.get('/unsubscribe/:email', unsubscribe);
|
||||
router.get('/unsubscribed', unsubscribed);
|
||||
router.get('/cats.json', getCats);
|
||||
|
||||
router.get('/api/slack', slackInvite);
|
||||
|
||||
app.use(router);
|
||||
@@ -328,10 +329,15 @@ module.exports = function(app) {
|
||||
|
||||
function bootcampCalculator(req, res) {
|
||||
res.render('resources/calculator', {
|
||||
title: 'Coding Bootcamp Cost Calculator'
|
||||
title: 'Coding Bootcamp Cost Calculator',
|
||||
bootcampJson: bootcampJson
|
||||
});
|
||||
}
|
||||
|
||||
function bootcampCalculatorJson(req, res) {
|
||||
res.send(bootcampJson);
|
||||
}
|
||||
|
||||
function jobsForm(req, res) {
|
||||
res.render('resources/jobs-form', {
|
||||
title: 'Employer Partnership Form for Job Postings,' +
|
||||
|
@@ -4,7 +4,7 @@ var _ = require('lodash'),
|
||||
crypto = require('crypto'),
|
||||
nodemailer = require('nodemailer'),
|
||||
moment = require('moment'),
|
||||
debug = require('debug')('freecc:cntr:userController'),
|
||||
//debug = require('debug')('freecc:cntr:userController'),
|
||||
|
||||
secrets = require('../../config/secrets');
|
||||
|
||||
@@ -28,6 +28,7 @@ module.exports = function(app) {
|
||||
router.post('/reset/:token', postReset);
|
||||
router.get('/email-signup', getEmailSignup);
|
||||
router.get('/email-signin', getEmailSignin);
|
||||
|
||||
router.get('/account/api', getAccountAngular);
|
||||
router.post('/account/profile', postUpdateProfile);
|
||||
router.post('/account/password', postUpdatePassword);
|
||||
@@ -97,6 +98,9 @@ module.exports = function(app) {
|
||||
*/
|
||||
|
||||
function getAccount (req, res) {
|
||||
if (!req.user) {
|
||||
return res.redirect('/');
|
||||
}
|
||||
res.render('account/account', {
|
||||
title: 'Manage your Free Code Camp Account'
|
||||
});
|
||||
@@ -108,7 +112,7 @@ module.exports = function(app) {
|
||||
|
||||
function getAccountAngular (req, res) {
|
||||
res.json({
|
||||
user: req.user
|
||||
user: req.user || {}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -119,15 +123,12 @@ module.exports = function(app) {
|
||||
*/
|
||||
|
||||
function returnUser (req, res, next) {
|
||||
debug(req.params.username);
|
||||
User.findOne(
|
||||
{ where: { 'username': req.params.username.toLowerCase() } },
|
||||
function(err, user) {
|
||||
if (err) {
|
||||
debug('Username err: ', err);
|
||||
return next(err);
|
||||
}
|
||||
debug(user);
|
||||
if (user) {
|
||||
user.progressTimestamps =
|
||||
user.progressTimestamps.sort(function(a, b) {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"restApiRoot": "/api",
|
||||
"host": "0.0.0.0",
|
||||
"host": "127.0.0.1",
|
||||
"port": 3000,
|
||||
"legacyExplorer": false,
|
||||
"remoting": {
|
||||
|
@@ -1,5 +1,20 @@
|
||||
var globalConfig = require('../common/config.global');
|
||||
|
||||
module.exports = {
|
||||
restApiRoot: globalConfig.restApi
|
||||
};
|
||||
restApiRoot: globalConfig.restApi,
|
||||
sessionSecret: process.env.SESSION_SECRET,
|
||||
|
||||
trello: {
|
||||
key: process.env.TRELLO_KEY,
|
||||
secret: process.env.TRELLO_SECRET
|
||||
},
|
||||
|
||||
blogger: {
|
||||
key: process.env.BLOGGER_KEY
|
||||
},
|
||||
|
||||
github: {
|
||||
clientID: process.env.GITHUB_ID,
|
||||
clientSecret: process.env.GITHUB_SECRET
|
||||
}
|
||||
};
|
3
server/config.production.js
Normal file
3
server/config.production.js
Normal file
@@ -0,0 +1,3 @@
|
||||
module.exports = {
|
||||
host: process.env.HOST || 'localhost'
|
||||
};
|
@@ -1,13 +1,6 @@
|
||||
require('dotenv').load();
|
||||
require('pmx').init();
|
||||
// handle uncaught exceptions. Forever will restart process on shutdown
|
||||
process.on('uncaughtException', function (err) {
|
||||
console.error(
|
||||
(new Date()).toUTCString() + ' uncaughtException:',
|
||||
err.message
|
||||
);
|
||||
console.error(err.stack);
|
||||
process.exit(1); // eslint-disable-line
|
||||
});
|
||||
|
||||
var R = require('ramda'),
|
||||
assign = require('lodash').assign,
|
||||
@@ -28,6 +21,7 @@ var R = require('ramda'),
|
||||
expressValidator = require('express-validator'),
|
||||
forceDomain = require('forcedomain'),
|
||||
lessMiddleware = require('less-middleware'),
|
||||
pmx = require('pmx'),
|
||||
|
||||
passportProviders = require('./passport-providers'),
|
||||
/**
|
||||
@@ -96,8 +90,13 @@ app.use(function(req, res, next) {
|
||||
var trusted = [
|
||||
"'self'",
|
||||
'blob:',
|
||||
'104.236.218.15',
|
||||
'*.freecodecamp.com',
|
||||
'http://www.freecodecamp.com',
|
||||
'https://www.freecodecamp.com',
|
||||
'https://freecodecamp.com',
|
||||
'https://freecodecamp.org',
|
||||
'*.freecodecamp.org',
|
||||
'ws://freecodecamp.com/',
|
||||
'ws://www.freecodecamp.com/',
|
||||
'*.gstatic.com',
|
||||
@@ -128,8 +127,11 @@ var trusted = [
|
||||
'*.ytimg.com',
|
||||
'*.bitly.com',
|
||||
'http://cdn.inspectlet.com/',
|
||||
'https://cdn.inspeclet.com/',
|
||||
'wss://inspectletws.herokuapp.com/',
|
||||
'http://hn.inspectlet.com/'
|
||||
'http://hn.inspectlet.com/',
|
||||
'*.googleapis.com',
|
||||
'*.gstatic.com'
|
||||
];
|
||||
|
||||
app.use(helmet.csp({
|
||||
@@ -137,22 +139,29 @@ app.use(helmet.csp({
|
||||
scriptSrc: [
|
||||
'*.optimizely.com',
|
||||
'*.aspnetcdn.com',
|
||||
'*.d3js.org'
|
||||
'*.d3js.org',
|
||||
'https://cdn.inspectlet.com/inspectlet.js',
|
||||
'http://cdn.inspectlet.com/inspectlet.js'
|
||||
].concat(trusted),
|
||||
'connect-src': [
|
||||
].concat(trusted),
|
||||
styleSrc: trusted,
|
||||
styleSrc: [
|
||||
'*.googleapis.com',
|
||||
'*.gstatic.com'
|
||||
].concat(trusted),
|
||||
imgSrc: [
|
||||
/* allow all input since we have user submitted images for public profile*/
|
||||
'*'
|
||||
].concat(trusted),
|
||||
fontSrc: ['*.googleapis.com'].concat(trusted),
|
||||
fontSrc: [
|
||||
'*.googleapis.com',
|
||||
'*.gstatic.com'
|
||||
].concat(trusted),
|
||||
mediaSrc: [
|
||||
'*.amazonaws.com',
|
||||
'*.twitter.com'
|
||||
].concat(trusted),
|
||||
frameSrc: [
|
||||
|
||||
'*.gitter.im',
|
||||
'*.gitter.im https:',
|
||||
'*.vimeo.com',
|
||||
@@ -243,9 +252,11 @@ R.keys(passportProviders).map(function(strategy) {
|
||||
/**
|
||||
* 500 Error Handler.
|
||||
*/
|
||||
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
app.use(errorHandler({ log: true }));
|
||||
} else {
|
||||
app.use(pmx.expressErrorHandler());
|
||||
// error handling in production disabling eslint due to express parity rules
|
||||
// for error handlers
|
||||
app.use(function(err, req, res, next) { // eslint-disable-line
|
||||
|
249
server/utils/bootcamps.json
Normal file
249
server/utils/bootcamps.json
Normal file
@@ -0,0 +1,249 @@
|
||||
[{
|
||||
"name": "App Academy",
|
||||
"cost": "18000",
|
||||
"weeks": "12",
|
||||
"finance": false,
|
||||
"housing": "500",
|
||||
"cities": [
|
||||
"new-york-city",
|
||||
"san-francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "Viking Code School",
|
||||
"cost": "18000",
|
||||
"weeks": "14",
|
||||
"housing": "0",
|
||||
"finance": false,
|
||||
"cities": [
|
||||
"online"
|
||||
]
|
||||
}, {
|
||||
"name": "Hack Reactor",
|
||||
"cost": "17780",
|
||||
"housing": "500",
|
||||
"weeks": "12",
|
||||
"finance": true,
|
||||
"cities": [
|
||||
"new-york-city",
|
||||
"san-francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "Hack Reactor Online",
|
||||
"cost": "17780",
|
||||
"housing": "0",
|
||||
"weeks": "12",
|
||||
"finance": true,
|
||||
"cities": [
|
||||
"online"
|
||||
]
|
||||
}, {
|
||||
"name": "Hackbright Academy",
|
||||
"cost": "15000",
|
||||
"housing": "500",
|
||||
"weeks": "10",
|
||||
"finance": true,
|
||||
"cities": [
|
||||
"san-francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "Dev Bootcamp",
|
||||
"cost": "13950",
|
||||
"finance": true,
|
||||
"housing": "500",
|
||||
"weeks": "19",
|
||||
"cities": [
|
||||
"new-york-city",
|
||||
"san-francisco",
|
||||
"chicago"
|
||||
]
|
||||
}, {
|
||||
"name": "General Asssembly",
|
||||
"cost": "11500",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"washington-dc",
|
||||
"austin",
|
||||
"boston",
|
||||
"chicago",
|
||||
"hong-kong",
|
||||
"london",
|
||||
"los-angeles",
|
||||
"melbourne",
|
||||
"new-york-city",
|
||||
"san-francisco",
|
||||
"seattle",
|
||||
"singapore"
|
||||
]
|
||||
}, {
|
||||
"name": "Angel Hack",
|
||||
"cost": "14250",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"san-francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "Bitmaker Labs",
|
||||
"cost": "12000",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"toronto"
|
||||
]
|
||||
}, {
|
||||
"name": "CoderVox",
|
||||
"cost": "9980",
|
||||
"housing": "400",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"austin"
|
||||
]
|
||||
}, {
|
||||
"name": "Coding Dojo",
|
||||
"cost": "12500",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"new-york-city",
|
||||
"san-francisco",
|
||||
"chicago"
|
||||
]
|
||||
}, {
|
||||
"name": "Epicodus",
|
||||
"cost": "4500",
|
||||
"housing": "400",
|
||||
"finance": false,
|
||||
"weeks": "15",
|
||||
"cities": [
|
||||
"portland"
|
||||
]
|
||||
}, {
|
||||
"name": "Flat Iron School",
|
||||
"cost": "15000",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"new-york-city"
|
||||
]
|
||||
}, {
|
||||
"name": "Galvanize",
|
||||
"cost": "21000",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "24",
|
||||
"cities": [
|
||||
"boulder",
|
||||
"denver",
|
||||
"seattle",
|
||||
"san-francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "The Iron Yard",
|
||||
"cost": "12000",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "19",
|
||||
"cities": [
|
||||
"austin",
|
||||
"washington-dc",
|
||||
"raleigh-durham",
|
||||
"atlanta"
|
||||
]
|
||||
}, {
|
||||
"name": "Launch Academy",
|
||||
"cost": "12500",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "10",
|
||||
"cities": [
|
||||
"boston"
|
||||
]
|
||||
}, {
|
||||
"name": "Maker Square",
|
||||
"cost": "16920",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"los-angeles",
|
||||
"san-francisco",
|
||||
"austin"
|
||||
]
|
||||
}, {
|
||||
"name": "Refactor U",
|
||||
"cost": "13500",
|
||||
"housing": "400",
|
||||
"finance": true,
|
||||
"weeks": "10",
|
||||
"cities": [
|
||||
"boulder"
|
||||
]
|
||||
}, {
|
||||
"name": "Rocket U",
|
||||
"cost": "12500",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"new-york-city",
|
||||
"san-francisco",
|
||||
"chicago"
|
||||
]
|
||||
}, {
|
||||
"name": "Sabio",
|
||||
"cost": "13450",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"los-angeles"
|
||||
]
|
||||
}, {
|
||||
"name": "Shillington School",
|
||||
"cost": "12950",
|
||||
"housing": "500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"new-york-city",
|
||||
"sydney",
|
||||
"brisbane",
|
||||
"london",
|
||||
"manchester",
|
||||
"melbourne"
|
||||
]
|
||||
}, {
|
||||
"name": "The Tech Academy",
|
||||
"cost": "9000",
|
||||
"housing": "400",
|
||||
"finance": true,
|
||||
"weeks": "20",
|
||||
"cities": [
|
||||
"portland"
|
||||
]
|
||||
}, {
|
||||
"name": "Turing School",
|
||||
"cost": "17500",
|
||||
"housing": "400",
|
||||
"finance": true,
|
||||
"weeks": "27",
|
||||
"cities": [
|
||||
"denver"
|
||||
]
|
||||
}, {
|
||||
"name": "Free Code Camp",
|
||||
"cost": "0",
|
||||
"housing": "0",
|
||||
"finance": false,
|
||||
"weeks": "0",
|
||||
"cities": [
|
||||
"online"
|
||||
]
|
||||
}]
|
@@ -16,7 +16,8 @@ var path = require('path'),
|
||||
*/
|
||||
var allFieldGuideIds, allFieldGuideNames, allNonprofitNames,
|
||||
challengeMap, challengeMapForDisplay, challengeMapWithIds,
|
||||
challengeMapWithNames, allChallengeIds, allChallenges;
|
||||
challengeMapWithNames, allChallengeIds, allChallenges,
|
||||
challengeMapWithDashedNames;
|
||||
|
||||
/**
|
||||
* GET /
|
||||
@@ -98,17 +99,6 @@ module.exports = {
|
||||
return allChallengeIds;
|
||||
},
|
||||
|
||||
allChallenges: function () {
|
||||
if (!allChallenges) {
|
||||
allChallenges = [];
|
||||
Object.keys(this.getChallengeMapWithNames()).forEach(function (key) {
|
||||
allChallenges.push(challengeMap[key].challenges);
|
||||
});
|
||||
allChallenges = R.flatten(allChallenges);
|
||||
}
|
||||
return allChallenges;
|
||||
},
|
||||
|
||||
getChallengeMapWithNames: function () {
|
||||
if (!challengeMapWithNames) {
|
||||
challengeMapWithNames = {};
|
||||
@@ -123,6 +113,20 @@ module.exports = {
|
||||
return challengeMapWithNames;
|
||||
},
|
||||
|
||||
getChallengeMapWithDashedNames: function() {
|
||||
if (!challengeMapWithDashedNames) {
|
||||
challengeMapWithDashedNames = {};
|
||||
Object.keys(challengeMap).
|
||||
forEach(function (key) {
|
||||
var onlyNames = challengeMap[key].challenges.map(function (elem) {
|
||||
return elem.dashedName;
|
||||
});
|
||||
challengeMapWithDashedNames[key] = onlyNames;
|
||||
});
|
||||
}
|
||||
return challengeMapWithDashedNames;
|
||||
},
|
||||
|
||||
|
||||
randomPhrase: function () {
|
||||
return resources.phrases[
|
||||
|
@@ -83,7 +83,7 @@ block content
|
||||
.col-xs-12
|
||||
ol
|
||||
for challenge in challengeBlock.challenges
|
||||
if completedChallengeList.indexOf(challenge.id) > -1
|
||||
if completedChallengeList.indexOf(challenge.id || challenge._id) > -1
|
||||
.row
|
||||
.hidden-xs.col-sm-3.col-md-2.text-primary.ion-checkmark-circled.padded-ionic-icon.text-center.large-p.negative-10
|
||||
.col-xs-12.col-sm-9.col-md-10
|
||||
|
@@ -10,7 +10,7 @@ block content
|
||||
.col-xs-12.col-sm-12.col-md-10.col-md-offset-1
|
||||
h2.text-center We want all our campers to get awesome software engineer jobs.
|
||||
h2.text-center
|
||||
a(href='https://www.linkedin.com/groups?viewMembers=&gid=6966827&sik=1432338555021' target='_blank') Many already have
|
||||
a(href='https://www.linkedin.com/edu/school?id=166029' target='_blank') Many already have
|
||||
| .
|
||||
p.text-center.large-p.hidden-xs.hidden-sm This is a small sampling of the 1,000s of junior software engineer jobs. Learn about the  
|
||||
a(href='http://blog.freecodecamp.com/2014/10/the-real-reason-to-learn-mean-stack.html' target='_blank') the job market in aggregate
|
||||
|
@@ -38,7 +38,7 @@ script(src="/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js")
|
||||
|
||||
script(src="/bower_components/ramda/dist/ramda.min.js")
|
||||
|
||||
link(rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Lato:400|Inconsolata")
|
||||
link(rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Lato:400|Inconsolata")
|
||||
|
||||
link(rel="stylesheet" type="text/css" href="/bower_components/cal-heatmap/cal-heatmap.css")
|
||||
|
||||
@@ -70,7 +70,7 @@ script#inspectletjs(type='text/javascript').
|
||||
insp.type = 'text/javascript';
|
||||
insp.async = true;
|
||||
insp.id = "inspsync";
|
||||
insp.src = ('https:' == document.location.protocol ? 'https' : 'http') + '://cdn.inspectlet.com/inspectlet.js';
|
||||
insp.src = '//cdn.inspectlet.com/inspectlet.js';
|
||||
var x = document.getElementsByTagName('script')[0];
|
||||
x.parentNode.insertBefore(insp, x);
|
||||
}
|
||||
|
344
server/views/resources/calculator.jade
Normal file
344
server/views/resources/calculator.jade
Normal file
@@ -0,0 +1,344 @@
|
||||
extends ../layout
|
||||
block content
|
||||
.panel.panel-info
|
||||
.panel-heading.text-center Coding Bootcamp Cost Calculator
|
||||
.panel-body
|
||||
.row
|
||||
.col-xs-12.col-sm-10.col-sm-offset-1
|
||||
h2.text-primary#chosen
|
||||
#chart-controls.initially-hidden
|
||||
form
|
||||
label
|
||||
input(type='radio', name='mode', value='grouped')
|
||||
|   Grouped
|
||||
label
|
||||
input(type='radio', name='mode', value='stacked')
|
||||
|   Stacked
|
||||
br
|
||||
a(href='/bootcamp-calculator.json') View Data Source JSON
|
||||
#city-buttons
|
||||
h2 Where do you live?
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#atlanta.btn.btn-primary.btn-block.btn-lg Atlanta
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#austin.btn.btn-primary.btn-block.btn-lg Austin
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#brisbane.btn.btn-primary.btn-block.btn-lg Brisbane
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#boulder.btn.btn-primary.btn-block.btn-lg Boulder
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#chicago.btn.btn-primary.btn-block.btn-lg Chicago
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#denver.btn.btn-primary.btn-block.btn-lg Denver
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#hong-kong.btn.btn-primary.btn-block.btn-lg Hong Kong
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#london.btn.btn-primary.btn-block.btn-lg London
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#los-angeles.btn.btn-primary.btn-block.btn-lg Los Angeles
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#manchester.btn.btn-primary.btn-block.btn-lg Manchester
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#melbourne.btn.btn-primary.btn-block.btn-lg Melbourne
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#new-york-city.btn.btn-primary.btn-block.btn-lg New York City
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#portland.btn.btn-primary.btn-block.btn-lg Portland
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#raleigh-durham.btn.btn-primary.btn-block.btn-lg Raleigh-Durham
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#san-francisco.btn.btn-primary.btn-block.btn-lg San Fransisco
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#seattle.btn.btn-primary.btn-block.btn-lg Seattle
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#singapore.btn.btn-primary.btn-block.btn-lg Singapore
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#toronto.btn.btn-primary.btn-block.btn-lg Toronto
|
||||
.col-xs-12.btn-nav
|
||||
button#other.btn.btn-primary.btn-block.btn-lg Other
|
||||
#income.hidden-by-default
|
||||
h2 How much money did you make last year (in USD)?
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#0.btn.btn-primary.btn-block.btn-lg(href='#') $0
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#20000.btn.btn-primary.btn-block.btn-lg(href='#') $20,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#30000.btn.btn-primary.btn-block.btn-lg(href='#') $30,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#40000.btn.btn-primary.btn-block.btn-lg(href='#') $40,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#50000.btn.btn-primary.btn-block.btn-lg(href='#') $50,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#60000.btn.btn-primary.btn-block.btn-lg(href='#') $60,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#70000.btn.btn-primary.btn-block.btn-lg(href='#') $70,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#80000.btn.btn-primary.btn-block.btn-lg(href='#') $80,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#90000.btn.btn-primary.btn-block.btn-lg(href='#') $90,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#100000.btn.btn-primary.btn-block.btn-lg(href='#') $100,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#120000.btn.btn-primary.btn-block.btn-lg(href='#') $120,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#140000.btn.btn-primary.btn-block.btn-lg(href='#') $140,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#160000.btn.btn-primary.btn-block.btn-lg(href='#') $160,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#180000.btn.btn-primary.btn-block.btn-lg(href='#') $180,000
|
||||
.col-xs-12.col-sm-6.col-md-4.btn-nav
|
||||
button#200000.btn.btn-primary.btn-block.btn-lg(href='#') $200,000
|
||||
#chart.hidden-by-default
|
||||
svg.chart
|
||||
|
||||
script.
|
||||
$(document).ready(function () {
|
||||
var bootcamps = !{JSON.stringify(bootcampJson)};
|
||||
var city = "";
|
||||
var cityArray = ["san-fransisco", "los-angeles", "chicago", "austin", "new-york-city", "melbourne", "hong-kong", "seattle", "singapore", "london", "toronto", "portland", "brisbane", "atlanta", "raleigh-durham"];
|
||||
$('#city-buttons').on("click", "button", function () {
|
||||
city = $(this).attr("id");
|
||||
$('#city-buttons').hide();
|
||||
$('#chosen').text('Coming from ' + city.replace(/-/g, ' ').replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}));
|
||||
$('#income').css({visibility: 'visible'});
|
||||
});
|
||||
$('#income').on("click", "button", function() {
|
||||
$('#income').hide();
|
||||
$('#chart').css({visibility: 'visible'});
|
||||
var lastYearsIncome = parseInt($(this).attr("id"));
|
||||
$('#chosen').append(' making $' + lastYearsIncome.toString().replace(/0000/, '0,000') + ', your true costs are:');
|
||||
var categoryNames = ['Opportunity Cost at Current Wage', 'Financing Cost', 'Housing Cost', 'Tuition / Wage Garnishing'];
|
||||
bootcamps.forEach(function (camp) {
|
||||
var x0 = 0;
|
||||
if (camp.cities.indexOf(city) > -1) {
|
||||
weeklyHousing = 0;
|
||||
} else {
|
||||
weeklyHousing = +camp.housing;
|
||||
}
|
||||
camp.mapping = [{
|
||||
name: camp.name,
|
||||
label: 'Opportunity Cost at Current Wage',
|
||||
value: +camp.cost,
|
||||
x0: x0,
|
||||
x1: x0 += +camp.cost
|
||||
}, {
|
||||
name: camp.name,
|
||||
label: 'Financing Cost',
|
||||
value: +Math.floor(camp.cost * .09519),
|
||||
x0: +camp.cost,
|
||||
x1: camp.finance ? x0 += +Math.floor(camp.cost * .09519) : 0
|
||||
}, {
|
||||
name: camp.name,
|
||||
label: 'Housing Cost',
|
||||
value: +weeklyHousing * camp.weeks,
|
||||
x0: camp.finance ? +Math.floor(camp.cost * 1.09519) : camp.cost,
|
||||
x1: x0 += weeklyHousing * camp.weeks
|
||||
}, {
|
||||
name: camp.name,
|
||||
label: 'Tuition / Wage Garnishing',
|
||||
value: +(Math.floor(camp.weeks * lastYearsIncome / 50)),
|
||||
x0: camp.finance ? +(Math.floor(camp.cost * 1.09519) + weeklyHousing * camp.weeks) : +camp.cost + weeklyHousing * camp.weeks,
|
||||
x1: x0 += +(Math.floor(camp.weeks * lastYearsIncome / 50))
|
||||
}];
|
||||
camp.total = camp.mapping[camp.mapping.length - 1].x1;
|
||||
});
|
||||
bootcamps.sort(function(a, b) { return a.total - b.total; });
|
||||
maxValue = 0;
|
||||
bootcamps.forEach(function (camp) {
|
||||
camp.mapping.forEach(function (thing) {
|
||||
//console.log(thing.value );
|
||||
if (thing.value > maxValue) {
|
||||
maxValue = thing.value;
|
||||
console.log(maxValue);
|
||||
}
|
||||
});
|
||||
});
|
||||
var xStackMax = d3.max(bootcamps, function (d) {
|
||||
return d.total;
|
||||
}), //Scale for Stacked
|
||||
xGroupMax = bootcamps.map(function (camp) {
|
||||
return camp.mapping.reduce(function (a, b) {
|
||||
return a.value > b.value ? a.value : b.value;
|
||||
});
|
||||
}).reduce(function (a, b) {
|
||||
return a > b ? a : b;
|
||||
});
|
||||
var margin = {
|
||||
top: 30,
|
||||
right: 60,
|
||||
bottom: 50,
|
||||
left: 140
|
||||
},
|
||||
width = 800 - margin.left - margin.right,
|
||||
height = 1200 - margin.top - margin.bottom;
|
||||
var barHeight = 20;
|
||||
var xScale = d3.scale.linear()
|
||||
.domain([0, xStackMax])
|
||||
.rangeRound([0, width]);
|
||||
var y0Scale = d3.scale.ordinal()
|
||||
.domain(bootcamps.map(function (d) {
|
||||
return d.name;
|
||||
}))
|
||||
.rangeRoundBands([0, height], .1);
|
||||
var y1Scale = d3.scale.ordinal()
|
||||
.domain(categoryNames).rangeRoundBands([0, y0Scale.rangeBand()]);
|
||||
var color = d3.scale.ordinal()
|
||||
.range(["#215f1e", "#5f5c1e", "#1e215f", "#5c1e5f"])
|
||||
.domain(categoryNames);
|
||||
var svg = d3.select("svg")
|
||||
.attr("width", width + margin.left + margin.right)
|
||||
.attr("height", height + margin.top + margin.bottom)
|
||||
.append("g")
|
||||
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
|
||||
var selection = svg.selectAll(".series")
|
||||
.data(bootcamps)
|
||||
.enter().append("g")
|
||||
.attr("class", "series")
|
||||
.attr("transform", function (d) {
|
||||
return "translate(0," + y0Scale(d.name) + ")";
|
||||
});
|
||||
var rect = selection.selectAll("rect")
|
||||
.data(function (d) {
|
||||
return d.mapping;
|
||||
})
|
||||
.enter().append("rect")
|
||||
.attr("x", 0)
|
||||
.attr("width", 0)
|
||||
.attr("height", y0Scale.rangeBand())
|
||||
.style("fill", function (d) {
|
||||
return color(d.label);
|
||||
})
|
||||
.style("stroke", "white")
|
||||
.on("mouseover", function (d) {
|
||||
showPopover.call(this, d);
|
||||
})
|
||||
.on("mouseout", function (d) {
|
||||
removePopovers();
|
||||
});
|
||||
rect.transition()
|
||||
.delay(function (d, i) {
|
||||
return i * 10;
|
||||
})
|
||||
.attr("x", function (d) {
|
||||
return xScale(d.x0);
|
||||
})
|
||||
.attr("width", function (d) {
|
||||
return xScale((d.x1) - (d.x0));
|
||||
});
|
||||
d3.selectAll("input").on("change", change);
|
||||
var timeout= setTimeout(function () {
|
||||
d3.select("input[value=\"stacked\"]").property("checked",true).each(change);
|
||||
// d3.select("input[value=\"stacked\"]").property("checked",true).each(change);
|
||||
}, 4000);
|
||||
var timeout= setTimeout(function () {
|
||||
d3.select("input[value=\"grouped\"]").property("checked",true).each(change);
|
||||
}, 1500);
|
||||
|
||||
function change() {
|
||||
clearTimeout(timeout);
|
||||
if (this.value === "grouped") transitionGrouped();
|
||||
else transitionStacked();
|
||||
}
|
||||
|
||||
function transitionGrouped() {
|
||||
xScale.domain = ([0, xGroupMax]);
|
||||
rect.transition()
|
||||
.duration(500)
|
||||
.delay(function (d, i) {
|
||||
return i * 10;
|
||||
})
|
||||
.attr("width", function (d) {
|
||||
return xScale((d.x1) - (d.x0));
|
||||
})
|
||||
.transition()
|
||||
.attr("y", function (d) {
|
||||
return y1Scale(d.label);
|
||||
})
|
||||
.attr("x", 0)
|
||||
.attr("height", y1Scale.rangeBand())
|
||||
}
|
||||
|
||||
function transitionStacked() {
|
||||
xScale.domain = ([0, xStackMax]);
|
||||
rect.transition()
|
||||
.duration(500)
|
||||
.delay(function (d, i) {
|
||||
return i * 10;
|
||||
})
|
||||
.attr("x", function (d) {
|
||||
return xScale(d.x0);
|
||||
})
|
||||
.transition()
|
||||
.attr("y", function (d) {
|
||||
return y0Scale(d.label);
|
||||
})
|
||||
.attr("height", y0Scale.rangeBand())
|
||||
}
|
||||
|
||||
//axes
|
||||
var xAxis = d3.svg.axis()
|
||||
.scale(xScale)
|
||||
.orient("bottom");
|
||||
var yAxis = d3.svg.axis()
|
||||
.scale(y0Scale)
|
||||
.orient("left");
|
||||
svg.append("g")
|
||||
.attr("class", "y axis")
|
||||
.call(yAxis);
|
||||
svg.append("g")
|
||||
.attr("class", "x axis")
|
||||
.attr("transform", "translate(0," + height + ")")
|
||||
.call(xAxis)
|
||||
.append("text")
|
||||
.attr("x", 300)
|
||||
.attr("y", 35)
|
||||
.attr("dy", ".35em")
|
||||
.style("text-anchor", "middle")
|
||||
.text("Cost in $USD");
|
||||
//tooltips
|
||||
function removePopovers() {
|
||||
$('.popover').each(function () {
|
||||
$(this).remove();
|
||||
});
|
||||
}
|
||||
|
||||
function showPopover(d) {
|
||||
$(this).popover({
|
||||
title: d.name,
|
||||
placement: 'auto top',
|
||||
container: 'body',
|
||||
trigger: 'manual',
|
||||
html: true,
|
||||
content: function () {
|
||||
return d.label +
|
||||
"<br/>$" +
|
||||
d3.format(",")(d.value ? d.value : d.x1 - d.x0);
|
||||
}
|
||||
});
|
||||
$(this).popover('show')
|
||||
}
|
||||
|
||||
//legends
|
||||
var legend = svg.selectAll(".legend")
|
||||
.data(categoryNames.slice().reverse())
|
||||
.enter().append("g")
|
||||
.attr("class", "legend")
|
||||
.attr("transform", function (d, i) {
|
||||
return "translate(30," + i * y0Scale.rangeBand() * 1.1 + ")";
|
||||
});
|
||||
legend.append("rect")
|
||||
.attr("x", width - y0Scale.rangeBand())
|
||||
.attr("width", y0Scale.rangeBand())
|
||||
.attr("height", y0Scale.rangeBand())
|
||||
.style("fill", color)
|
||||
.style("stroke", "white");
|
||||
legend.append("text")
|
||||
.attr("x", width - y0Scale.rangeBand() * 1.2)
|
||||
.attr("y", 12)
|
||||
.attr("dy", ".35em")
|
||||
.style("text-anchor", "end")
|
||||
.text(function (d) {
|
||||
return d;
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,656 +0,0 @@
|
||||
extends ../layout
|
||||
block content
|
||||
.panel.panel-info
|
||||
.panel-heading.text-center Coding Bootcamp Cost Calculator
|
||||
.panel-body
|
||||
.row
|
||||
.col-xs-12.col-sm-10.col-sm-offset-1
|
||||
style.
|
||||
#lastYearIncome{
|
||||
clear:both;
|
||||
margin: 2% 0;
|
||||
width: 110px;
|
||||
}
|
||||
#income, #calculate {
|
||||
visibility:hidden;
|
||||
}
|
||||
.step {
|
||||
font-size: 2em;
|
||||
padding: 1%;
|
||||
clear: both;
|
||||
}
|
||||
.city-buttons {
|
||||
display: block;
|
||||
clear: right;
|
||||
}
|
||||
#four p{
|
||||
font-size: .6em;
|
||||
color: black;
|
||||
}
|
||||
.chart rect {
|
||||
fill: steelblue;
|
||||
}
|
||||
.chart text {
|
||||
fill: #121401;
|
||||
font: 10px sans-serif;
|
||||
text-anchor: end;
|
||||
}
|
||||
.axis path,
|
||||
.axis line {
|
||||
fill: none;
|
||||
stroke: #121401;
|
||||
stroke-width: 2px;
|
||||
shape-rendering: crispEdges;
|
||||
}
|
||||
html.
|
||||
<!--Live Logging for Testing-->
|
||||
<div id="target" class="step"></div>
|
||||
<div class="header">
|
||||
<!--Step 1-->
|
||||
<div id="one" class="step">Step 1: Choose your City</div>
|
||||
<div id="city-buttons">
|
||||
<ul>
|
||||
<li><span id="New York City">New York City</span></li>
|
||||
<li><span id="San Fransisco">San Fransisco</span></li>
|
||||
<li><span id="Austin">Austin</span></li>
|
||||
<li><span id="Los Angeles">Los Angeles</span></li>
|
||||
<li><span id="Chicago">Chicago</span></li>
|
||||
<li><span id="Other">Other</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!--Step 2-->
|
||||
<div id="two" class="step">Step 2: Enter last Year's Income</div>
|
||||
<div id="income">
|
||||
<label>Last Years Income in $$:</label>
|
||||
<input type="number" placeholder="52000" class="form-control" id="lastYearIncome">
|
||||
</div>
|
||||
<!--Step 3-->
|
||||
<div id="three" class="step">Step 3: Calculate</div>
|
||||
<button id="calculate" type="submit" class="btn btn-default">Calculate</button>
|
||||
<!--Check Outputs Temp-->
|
||||
<!--Step 4-->
|
||||
<!--<div id="four" class="step">Clear the Chart and Start Over?</div>-->
|
||||
<svg class="chart"></svg>
|
||||
</div>
|
||||
<!--container-->
|
||||
<div class="footer">
|
||||
Sources: <a href="#">Link to Data Sources Here</a>
|
||||
<form>
|
||||
<label>
|
||||
<input type="radio" name="mode"
|
||||
value="grouped">Grouped
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="mode"
|
||||
value="stacked" checked>
|
||||
Stacked
|
||||
</label>
|
||||
</form>
|
||||
script.
|
||||
$(document).ready(function () {
|
||||
var n = 4, // number of layers
|
||||
m = 58, // number of samples per layer
|
||||
stack = d3.layout.stack(),
|
||||
layers = stack(d3.range(n).map(function () {
|
||||
return bumpLayer(m, .1);
|
||||
})),
|
||||
yGroupMax = d3.max(layers, function (layer) {
|
||||
return d3.max(layer, function (d) {
|
||||
return d.y;
|
||||
});
|
||||
}),
|
||||
yStackMax = d3.max(layers, function (layer) {
|
||||
return d3.max(layer, function (d) {
|
||||
return d.y0 + d.y;
|
||||
});
|
||||
});
|
||||
var margin = {
|
||||
top: 40,
|
||||
right: 10,
|
||||
bottom: 20,
|
||||
left: 10
|
||||
},
|
||||
width = 960 - margin.left - margin.right,
|
||||
height = 500 - margin.top - margin.bottom;
|
||||
var x = d3.scale.ordinal()
|
||||
.domain(d3.range(m))
|
||||
.rangeRoundBands([0, width], .08);
|
||||
var y = d3.scale.linear()
|
||||
.domain([0, yStackMax])
|
||||
.range([height, 0]);
|
||||
var color = d3.scale.linear()
|
||||
.domain([0, n - 1])
|
||||
.range(["#aad", "#556"]);
|
||||
var xAxis = d3.svg.axis()
|
||||
.scale(x)
|
||||
.tickSize(0)
|
||||
.tickPadding(6)
|
||||
.orient("bottom");
|
||||
var svg = d3.select("body").append("svg")
|
||||
.attr("width", width + margin.left + margin.right)
|
||||
.attr("height", height + margin.top + margin.bottom)
|
||||
.append("g")
|
||||
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
|
||||
var layer = svg.selectAll(".layer")
|
||||
.data(layers)
|
||||
.enter().append("g")
|
||||
.attr("class", "layer")
|
||||
.style("fill", function (d, i) {
|
||||
return color(i);
|
||||
});
|
||||
var rect = layer.selectAll("rect")
|
||||
.data(function (d) {
|
||||
return d;
|
||||
})
|
||||
.enter().append("rect")
|
||||
.attr("x", function (d) {
|
||||
return x(d.x);
|
||||
})
|
||||
.attr("y", height)
|
||||
.attr("width", x.rangeBand())
|
||||
.attr("height", 0);
|
||||
rect.transition()
|
||||
.delay(function (d, i) {
|
||||
return i * 10;
|
||||
})
|
||||
.attr("y", function (d) {
|
||||
return y(d.y0 + d.y);
|
||||
})
|
||||
.attr("height", function (d) {
|
||||
return y(d.y0) - y(d.y0 + d.y);
|
||||
});
|
||||
svg.append("g")
|
||||
.attr("class", "x axis")
|
||||
.attr("transform", "translate(0," + height + ")")
|
||||
.call(xAxis);
|
||||
d3.selectAll("input").on("change", change);
|
||||
var timeout = setTimeout(function () {
|
||||
d3.select("input[value=\"grouped\"]").property("checked", true).each(change);
|
||||
}, 2000);
|
||||
|
||||
function change() {
|
||||
clearTimeout(timeout);
|
||||
if (this.value === "grouped") transitionGrouped();
|
||||
else transitionStacked();
|
||||
}
|
||||
|
||||
function transitionGrouped() {
|
||||
y.domain([0, yGroupMax]);
|
||||
rect.transition()
|
||||
.duration(500)
|
||||
.delay(function (d, i) {
|
||||
return i * 10;
|
||||
})
|
||||
.attr("x", function (d, i, j) {
|
||||
return x(d.x) + x.rangeBand() / n * j;
|
||||
})
|
||||
.attr("width", x.rangeBand() / n)
|
||||
.transition()
|
||||
.attr("y", function (d) {
|
||||
return y(d.y);
|
||||
})
|
||||
.attr("height", function (d) {
|
||||
return height - y(d.y);
|
||||
});
|
||||
}
|
||||
|
||||
function transitionStacked() {
|
||||
y.domain([0, yStackMax]);
|
||||
rect.transition()
|
||||
.duration(500)
|
||||
.delay(function (d, i) {
|
||||
return i * 10;
|
||||
})
|
||||
.attr("y", function (d) {
|
||||
return y(d.y0 + d.y);
|
||||
})
|
||||
.attr("height", function (d) {
|
||||
return y(d.y0) - y(d.y0 + d.y);
|
||||
})
|
||||
.transition()
|
||||
.attr("x", function (d) {
|
||||
return x(d.x);
|
||||
})
|
||||
.attr("width", x.rangeBand());
|
||||
}
|
||||
|
||||
// Inspired by Lee Byron's test data generator.
|
||||
function bumpLayer(n, o) {
|
||||
function bump(a) {
|
||||
var x = 1 / (.1 + Math.random()),
|
||||
y = 2 * Math.random() - .5,
|
||||
z = 10 / (.1 + Math.random());
|
||||
for (var i = 0; i < n; i++) {
|
||||
var w = (i / n - y) * z;
|
||||
a[i] += x * Math.exp(-w * w);
|
||||
}
|
||||
}
|
||||
|
||||
var a = [], i;
|
||||
for (i = 0; i < n; ++i) a[i] = o + o * Math.random();
|
||||
for (i = 0; i < 5; ++i) bump(a);
|
||||
return a.map(function (d, i) {
|
||||
return {x: i, y: Math.max(0, d)};
|
||||
});
|
||||
}
|
||||
var city = "";
|
||||
var lastYearincome = 52000;
|
||||
//major cities array to check against users location for housing costs
|
||||
var cityArray = ["San Fransisco", "Los Angeles", "Chicago", "Austin", "New York City"];
|
||||
//this is the raw bootcamps file allowing easy addition of new code camps
|
||||
var bootcamps = [{
|
||||
"name": "App Academy",
|
||||
"cost": "18000",
|
||||
"weeks": "12",
|
||||
"finance": false,
|
||||
"cities": [
|
||||
"New York",
|
||||
"San Francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "Viking Code School",
|
||||
"cost": "18000",
|
||||
"weeks": "14",
|
||||
"finance": false,
|
||||
"cities": [
|
||||
"online"
|
||||
]
|
||||
}, {
|
||||
"name": "Hack Reactor",
|
||||
"cost": "17780",
|
||||
"weeks": "12",
|
||||
"finance": true,
|
||||
"cities": [
|
||||
"New York",
|
||||
"San Francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "Hackbright Academy",
|
||||
"cost": "15000",
|
||||
"weeks": "10",
|
||||
"finance": true,
|
||||
"cities": [
|
||||
"San Francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "Dev Bootcamp",
|
||||
"cost": "13950",
|
||||
"finance": true,
|
||||
"weeks": "19",
|
||||
"cities": [
|
||||
"New York",
|
||||
"San Francisco",
|
||||
"Chicago"
|
||||
]
|
||||
}, {
|
||||
"name": "General Asssembly",
|
||||
"cost": "11500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"Washington, DC",
|
||||
"Austin",
|
||||
"Boston",
|
||||
"Chicago",
|
||||
"Hong Kong",
|
||||
"London",
|
||||
"Los Angeles",
|
||||
"Melbourne",
|
||||
"New York cities",
|
||||
"San Francisco",
|
||||
"Seattle",
|
||||
"Singapore"
|
||||
]
|
||||
}, {
|
||||
"name": "Angel Hack",
|
||||
"cost": "14250",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"San Francisco"
|
||||
]
|
||||
}, {
|
||||
"name": "Bitmaker Labs",
|
||||
"cost": "12000",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"Toronto"
|
||||
]
|
||||
}, {
|
||||
"name": "CoderVox",
|
||||
"cost": "9980",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"Austin"
|
||||
]
|
||||
}, {
|
||||
"name": "Coding Dojo",
|
||||
"cost": "12500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"New York",
|
||||
"San Francisco",
|
||||
"Chicago"
|
||||
]
|
||||
}, {
|
||||
"name": "Epicodus",
|
||||
"cost": "4500",
|
||||
"finance": false,
|
||||
"weeks": "15",
|
||||
"cities": [
|
||||
"Portland"
|
||||
]
|
||||
}, {
|
||||
"name": "Flat Iron School",
|
||||
"cost": "15000",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"New York"
|
||||
]
|
||||
}, {
|
||||
"name": "Galvanize",
|
||||
"cost": "21000",
|
||||
"finance": true,
|
||||
"weeks": "24",
|
||||
"cities": [
|
||||
"Boulder",
|
||||
"Denver",
|
||||
"Seattle",
|
||||
"San Francisco",
|
||||
"Fort Collins"
|
||||
]
|
||||
}, {
|
||||
"name": "The Iron Yard",
|
||||
"cost": "12000",
|
||||
"finance": true,
|
||||
"weeks": "19",
|
||||
"cities": [
|
||||
"Atlanta",
|
||||
"Austin",
|
||||
"Colombia, SC",
|
||||
"Charleston, SC",
|
||||
"Houston",
|
||||
"Greenville, SC",
|
||||
"Las Vegas",
|
||||
"Little Rock",
|
||||
"Nashville",
|
||||
"Orlando",
|
||||
"Raleigh - Durham",
|
||||
"Tampa - St. Petersburg",
|
||||
"Washington DC"
|
||||
]
|
||||
}, {
|
||||
"name": "Launch Academy",
|
||||
"cost": "12500",
|
||||
"finance": true,
|
||||
"weeks": "10",
|
||||
"cities": [
|
||||
"Boston"
|
||||
]
|
||||
}, {
|
||||
"name": "Maker Square",
|
||||
"cost": "16920",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"Los Angeles",
|
||||
"San Francisco",
|
||||
"Austin"
|
||||
]
|
||||
}, {
|
||||
"name": "Refactor U",
|
||||
"cost": "13500",
|
||||
"finance": true,
|
||||
"weeks": "10",
|
||||
"cities": [
|
||||
"Boulder"
|
||||
]
|
||||
}, {
|
||||
"name": "Rocket U",
|
||||
"cost": "12500",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"New York",
|
||||
"San Francisco",
|
||||
"Chicago"
|
||||
]
|
||||
}, {
|
||||
"name": "Sabio",
|
||||
"cost": "13450",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"Los Angeles"
|
||||
]
|
||||
}, {
|
||||
"name": "Shillington School",
|
||||
"cost": "12950",
|
||||
"finance": true,
|
||||
"weeks": "12",
|
||||
"cities": [
|
||||
"New York",
|
||||
"Sydney",
|
||||
"Brisbane",
|
||||
"London",
|
||||
"Manchester",
|
||||
"Melbourne"
|
||||
]
|
||||
}, {
|
||||
"name": "The Tech Academy",
|
||||
"cost": "9000",
|
||||
"finance": true,
|
||||
"weeks": "20",
|
||||
"cities": [
|
||||
"Portland"
|
||||
]
|
||||
}, {
|
||||
"name": "Turing School",
|
||||
"cost": "17500",
|
||||
"finance": true,
|
||||
"weeks": "27",
|
||||
"cities": [
|
||||
"Denver"
|
||||
]
|
||||
}, {
|
||||
"name": "Free Code Camp",
|
||||
"cost": "0",
|
||||
"finance": true,
|
||||
"weeks": "0",
|
||||
"cities": [
|
||||
"Online"
|
||||
]
|
||||
}];
|
||||
//reduce opacity for steps 2 through 4
|
||||
//the actual elements start out hidden via CSS
|
||||
$('#two').css({opacity: '0.25'});
|
||||
$('#three').css({opacity: '0.25'});
|
||||
$('#four').css({opacity: '0.25'});
|
||||
//step one event listener
|
||||
$('#city-buttons').on("click", "span", function () {
|
||||
$(this).addClass('animated tada');
|
||||
city = $(this).attr("id");
|
||||
//make next step visible
|
||||
$('#two').css({opacity: '1'});
|
||||
$('#income').css({visibility: 'visible'});
|
||||
//console.log(city);
|
||||
});
|
||||
//step two event listener
|
||||
$('#income').on("change", function () {
|
||||
console.log("Income Updated");
|
||||
lastYearincome = parseInt($('#lastYearIncome').val());
|
||||
//make next step visible
|
||||
$('#three').css({opacity: '1'});
|
||||
$('#calculate').css({visibility: 'visible'});
|
||||
});
|
||||
<!--Graph it-->
|
||||
$('#calculate').on("click", function () {
|
||||
//Make data logger visible
|
||||
$('#four').css({opacity: '1'});
|
||||
<!--Prep the data for D3 -->
|
||||
var categoryNames = ['Tuition', 'Finance', 'Housing', 'Working Cost'];
|
||||
bootcamps.forEach(function (camp) {
|
||||
var x0 = 0;
|
||||
//this just checks against main city array.
|
||||
//when we refactor, this should check against this camp's cities array
|
||||
//should not be a difficult change
|
||||
if (cityArray.indexOf(city) >= 0) {
|
||||
weeklyHousing = 0;
|
||||
} else {
|
||||
weeklyHousing = 500;
|
||||
}
|
||||
camp.mapping = [{
|
||||
name: camp.name,
|
||||
label: 'Tuition',
|
||||
x0: x0,
|
||||
x1: x0 += +camp.cost
|
||||
}, {
|
||||
name: camp.name,
|
||||
label: 'Finance',
|
||||
x0: +camp.cost,
|
||||
x1: x0 += +Math.floor(camp.cost * .09519)
|
||||
}, {
|
||||
name: camp.name,
|
||||
label: 'Housing',
|
||||
x0: +Math.floor(camp.cost * 1.09519),
|
||||
x1: x0 += weeklyHousing * camp.weeks
|
||||
}, {
|
||||
name: camp.name,
|
||||
label: 'Working Cost',
|
||||
x0: +(Math.floor(camp.cost * 1.09519) + weeklyHousing * camp.weeks),
|
||||
x1: x0 += +(Math.floor(camp.weeks * lastYearincome / 50))
|
||||
}];
|
||||
camp.total = camp.mapping[camp.mapping.length - 1].x1;
|
||||
});
|
||||
console.log(bootcamps[0]);
|
||||
var margin = {
|
||||
top: 30,
|
||||
right: 60,
|
||||
bottom: 50,
|
||||
left: 140
|
||||
},
|
||||
width = 800 - margin.left - margin.right,
|
||||
height = 600 - margin.top - margin.bottom;
|
||||
var barHeight = 20;
|
||||
var xScale = d3.scale.linear()
|
||||
.domain([0, d3.max(bootcamps, function (d) {
|
||||
return d.total;
|
||||
})])
|
||||
.rangeRound([0, width]);
|
||||
var yScale = d3.scale.ordinal()
|
||||
.domain(bootcamps.map(function (d) {
|
||||
return d.name;
|
||||
}))
|
||||
.rangeRoundBands([0, height], .1);
|
||||
console.log("yrangeroundband", yScale.rangeBand());
|
||||
var color = d3.scale.ordinal()
|
||||
.range(["#f0ad4e", "#4A2B0F", "#215f1e", "#457E86"])
|
||||
.domain(['Tuition', 'Finance', 'Housing', 'Working Cost']);
|
||||
var svg = d3.select("svg")
|
||||
.attr("width", width + margin.left + margin.right)
|
||||
.attr("height", height + margin.top + margin.bottom)
|
||||
.append("g")
|
||||
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
|
||||
var selection = svg.selectAll(".series")
|
||||
.data(bootcamps)
|
||||
.enter().append("g")
|
||||
.attr("class", "series")
|
||||
.attr("transform", function (d) {
|
||||
return "translate(0," + yScale(d.name) + ")";
|
||||
});
|
||||
;
|
||||
selection.selectAll("rect")
|
||||
.data(function (d) {
|
||||
return d.mapping;
|
||||
})
|
||||
.enter().append("rect")
|
||||
.attr("width", function (d) {
|
||||
return xScale((d.x1) - (d.x0));
|
||||
})
|
||||
.attr("x", function (d) {
|
||||
return xScale(d.x0);
|
||||
})
|
||||
.attr("height", yScale.rangeBand())
|
||||
.style("fill", function (d) {
|
||||
return color(d.label);
|
||||
})
|
||||
.style("stroke", "white")
|
||||
.on("mouseover", function (d) {
|
||||
showPopover.call(this, d);
|
||||
})
|
||||
.on("mouseout", function (d) {
|
||||
removePopovers();
|
||||
});
|
||||
//axes
|
||||
//axes
|
||||
var xAxis = d3.svg.axis()
|
||||
.scale(xScale)
|
||||
.orient("bottom");
|
||||
var yAxis = d3.svg.axis()
|
||||
.scale(yScale)
|
||||
.orient("left");
|
||||
svg.append("g")
|
||||
.attr("class", "y axis")
|
||||
.call(yAxis);
|
||||
svg.append("g")
|
||||
.attr("class", "x axis")
|
||||
.attr("transform", "translate(0," + height + ")")
|
||||
.call(xAxis)
|
||||
.append("text")
|
||||
.attr("x", 300)
|
||||
.attr("y", 35)
|
||||
.attr("dy", ".35em")
|
||||
.style("text-anchor", "middle")
|
||||
.text("Cost in $USD");
|
||||
//tooltips
|
||||
function removePopovers() {
|
||||
$('.popover').each(function () {
|
||||
$(this).remove();
|
||||
});
|
||||
}
|
||||
|
||||
function showPopover(d) {
|
||||
$(this).popover({
|
||||
title: d.name,
|
||||
placement: 'auto top',
|
||||
container: 'body',
|
||||
trigger: 'manual',
|
||||
html: true,
|
||||
content: function () {
|
||||
return d.label +
|
||||
"<br/>$" +
|
||||
d3.format(",")(d.value ? d.value : d.x1 - d.x0);
|
||||
}
|
||||
});
|
||||
$(this).popover('show')
|
||||
}
|
||||
|
||||
//legends
|
||||
var legend = svg.selectAll(".legend")
|
||||
.data(categoryNames.slice().reverse())
|
||||
.enter().append("g")
|
||||
.attr("class", "legend")
|
||||
.attr("transform", function (d, i) {
|
||||
return "translate(30," + i * yScale.rangeBand() * 1.1 + ")";
|
||||
});
|
||||
legend.append("rect")
|
||||
.attr("x", width - yScale.rangeBand())
|
||||
.attr("width", yScale.rangeBand())
|
||||
.attr("height", yScale.rangeBand())
|
||||
.style("fill", color)
|
||||
.style("stroke", "white");
|
||||
legend.append("text")
|
||||
.attr("x", width - yScale.rangeBand() * 1.2)
|
||||
.attr("y", 12)
|
||||
.attr("dy", ".35em")
|
||||
.style("text-anchor", "end")
|
||||
.text(function (d) {
|
||||
return d;
|
||||
});
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user