@ -174,7 +174,7 @@
|
||||
"one-var": 0,
|
||||
"operator-assignment": 0,
|
||||
"padded-blocks": 0,
|
||||
"quote-props": 0,
|
||||
"quote-props": [2, "as-needed"],
|
||||
"quotes": [
|
||||
2,
|
||||
"single",
|
||||
|
@ -34,8 +34,13 @@ If you've found a bug that is not on the board, [follow these steps](#found-a-bu
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [MongoDB](http://www.mongodb.org/downloads)
|
||||
- [Node.js](http://nodejs.org)
|
||||
| Prerequisite | Version |
|
||||
|--------------|---------|
|
||||
| [MongoDB](http://www.mongodb.org/downloads) | `~ ^3` |
|
||||
| [Node.js](http://nodejs.org) | `~ ^4` |
|
||||
| npm | `~ ^2` |
|
||||
|
||||
> _Updating to the latest releases is recomended_.
|
||||
|
||||
## Getting Started
|
||||
|
||||
|
@ -97,7 +97,11 @@ main = (function(main, global) {
|
||||
});
|
||||
|
||||
|
||||
$('#nav-chat-btn').on('click', toggleMainChat);
|
||||
$('#nav-chat-btn').on('click', function(event) {
|
||||
if (!(event.ctrlKey || event.metaKey)) {
|
||||
toggleMainChat();
|
||||
}
|
||||
});
|
||||
|
||||
function showMainChat() {
|
||||
if (!main.chat.isOpen) {
|
||||
@ -350,7 +354,11 @@ $(document).ready(function() {
|
||||
var mapFilter = $('#map-filter');
|
||||
var mapShowAll = $('#showAll');
|
||||
|
||||
$('#nav-map-btn').on('click', toggleMap);
|
||||
$('#nav-map-btn').on('click', function(event) {
|
||||
if (!(event.ctrlKey || event.metaKey)) {
|
||||
toggleMap();
|
||||
}
|
||||
});
|
||||
|
||||
$('.map-aside-action-collapse').on('click', collapseMap);
|
||||
|
||||
@ -381,7 +389,11 @@ $(document).ready(function() {
|
||||
}
|
||||
}
|
||||
|
||||
$('#nav-wiki-btn').on('click', toggleWiki);
|
||||
$('#nav-wiki-btn').on('click', function(event) {
|
||||
if (!(event.ctrlKey || event.metaKey)) {
|
||||
toggleWiki();
|
||||
}
|
||||
});
|
||||
|
||||
$('.wiki-aside-action-collapse').on('click', collapseWiki);
|
||||
|
||||
|
@ -57,7 +57,7 @@ export default React.createClass({
|
||||
const linkClassName = classNames(className, {
|
||||
// 'active': active, we don't actually use the active class
|
||||
// but it is used for a11y below
|
||||
'disabled': disabled
|
||||
disabled: disabled
|
||||
});
|
||||
|
||||
let linkProps = {
|
||||
|
@ -11,7 +11,7 @@ export default ({ services }) => ({ dispatch }) => next => {
|
||||
.map(({
|
||||
username,
|
||||
picture,
|
||||
progressTimestamps = [],
|
||||
points,
|
||||
isFrontEndCert,
|
||||
isBackEndCert,
|
||||
isFullStackCert
|
||||
@ -21,7 +21,7 @@ export default ({ services }) => ({ dispatch }) => next => {
|
||||
payload: {
|
||||
username,
|
||||
picture,
|
||||
points: progressTimestamps.length,
|
||||
points,
|
||||
isFrontEndCert,
|
||||
isBackEndCert,
|
||||
isFullStackCert,
|
||||
|
@ -48,7 +48,7 @@ const certTypes = {
|
||||
};
|
||||
|
||||
function isValidURL(data) {
|
||||
return isURL(data, { 'require_protocol': true });
|
||||
return isURL(data, { require_protocol: true });
|
||||
}
|
||||
|
||||
const fields = [
|
||||
|
@ -1,5 +1,5 @@
|
||||
const defaults = {
|
||||
'string': {
|
||||
string: {
|
||||
value: '',
|
||||
valid: false,
|
||||
pristine: true,
|
||||
|
@ -44,7 +44,7 @@ module.exports = function(User) {
|
||||
|
||||
// username should not be in blacklist
|
||||
User.validatesExclusionOf('username', {
|
||||
'in': blacklistedUsernames,
|
||||
in: blacklistedUsernames,
|
||||
message: 'is taken'
|
||||
});
|
||||
|
||||
|
@ -274,7 +274,7 @@ export function postJSON$(url, body) {
|
||||
responseType: 'json',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json'
|
||||
Accept: 'application/json'
|
||||
}
|
||||
})
|
||||
.map(({ response }) => response);
|
||||
@ -303,7 +303,7 @@ export function getJSON$(url) {
|
||||
responseType: 'json',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json'
|
||||
Accept: 'application/json'
|
||||
}
|
||||
}).map(({ response }) => response);
|
||||
}
|
||||
|
@ -91,6 +91,7 @@
|
||||
"morgan": "^1.6.1",
|
||||
"node-uuid": "^1.4.3",
|
||||
"nodemailer": "^2.1.0",
|
||||
"nodemailer-ses-transport": "^1.3.0",
|
||||
"normalize-url": "^1.3.1",
|
||||
"normalizr": "^2.0.0",
|
||||
"object.assign": "^4.0.3",
|
||||
|
@ -8,7 +8,7 @@
|
||||
"id": "bd7168d8c242eddfaeb5bd13",
|
||||
"title": "Visualize Data with a Bar Chart",
|
||||
"description": [
|
||||
"<strong>Objective:</strong> Build a <a href='https://codepen.io' target='_blank'>CodePen.io</a> app that is functionally similar to this: <a href='https://codepen.io/FreeCodeCamp/full/adBBWd' target='_blank'>https://codepen.io/FreeCodeCamp/full/adBBWd</a>.",
|
||||
"<strong>Objective:</strong> Build a <a href='https://codepen.io' target='_blank'>CodePen.io</a> app that is functionally similar to this: <a href='https://codepen.io/FreeCodeCamp/full/vGjLVZ' target='_blank'>https://codepen.io/FreeCodeCamp/full/vGjLVZ</a>.",
|
||||
"<strong>Rule #1:</strong> Don't look at the example project's code. Figure it out for yourself.",
|
||||
"<strong>Rule #2:</strong> Fulfill the below <a href='https://en.wikipedia.org/wiki/User_story' target='_blank'>user stories</a>. Use whichever libraries or APIs you need. Give it your own personal style.",
|
||||
"<strong>Rule #3:</strong> You must use D3.js to build this project.",
|
||||
@ -29,7 +29,7 @@
|
||||
"challengeType": 3,
|
||||
"titleEs": "Visualiza datos utilizando un gráfico de barras",
|
||||
"descriptionEs": [
|
||||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='https://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='https://codepen.io/FreeCodeCamp/full/adBBWd' target='_blank'>https://codepen.io/FreeCodeCamp/full/adBBWd</a>.",
|
||||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='https://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='https://codepen.io/FreeCodeCamp/full/vGjLVZ' target='_blank'>https://codepen.io/FreeCodeCamp/full/vGjLVZ</a>.",
|
||||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
"<strong>Regla #2:</strong> Satisface las siguientes <a href='https://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería o API que sea necesaria. ¡Ponle un toque personal!.",
|
||||
"<strong>Regla #3:</strong> Debes utilizar D3.js para construir este proyecto.",
|
||||
|
18
seed/challenges/04-video-challenges/accessibility.json
Normal file
18
seed/challenges/04-video-challenges/accessibility.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Accessibility",
|
||||
"order": 5.5,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bddd",
|
||||
"title": "Learn Accessibility Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Accessibility"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/agile.json
Normal file
18
seed/challenges/04-video-challenges/agile.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Agile",
|
||||
"order": 6,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbec5bdde",
|
||||
"title": "Learn Agile Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Agile"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/computer-science.json
Normal file
18
seed/challenges/04-video-challenges/computer-science.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Computer Science",
|
||||
"order": 7,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bddc",
|
||||
"title": "Learn Computer Science Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Computer Science"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/data-visualization.json
Normal file
18
seed/challenges/04-video-challenges/data-visualization.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Data Visualization",
|
||||
"order": 8,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdde",
|
||||
"title": "Learn Data Visualization Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Data Visualization"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/devops.json
Normal file
18
seed/challenges/04-video-challenges/devops.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "DevOps",
|
||||
"order": 16,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd5",
|
||||
"title": "Learn DevOps Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "DevOps"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Embedded and Internet of Things",
|
||||
"order": 9,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdda",
|
||||
"title": "Learn Embedded and Internet of Things Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Embedded and Internet of Things"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/game-development.json
Normal file
18
seed/challenges/04-video-challenges/game-development.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Game Development",
|
||||
"order": 10,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd0",
|
||||
"title": "Learn Game Development Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Game Development"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/gamification.json
Normal file
18
seed/challenges/04-video-challenges/gamification.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Gamification",
|
||||
"order": 12,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd9",
|
||||
"title": "Learn Gamification Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Gamification"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/machine-learning.json
Normal file
18
seed/challenges/04-video-challenges/machine-learning.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Machine Learning",
|
||||
"order": 13,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd8",
|
||||
"title": "Learn Machine Learning Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Machine Learning"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Math for Programmers",
|
||||
"order": 14,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd7",
|
||||
"title": "Learn Math for Programmers Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Math for Programmers"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Mobile JavaScript Development",
|
||||
"order": 15,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd6",
|
||||
"title": "Learn Mobile JavaScript Development Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Mobile JavaScript Development"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Software Engineering Principles",
|
||||
"order": 17,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441ecdfbeb5bdd5",
|
||||
"title": "Learn Software Engineering Principles Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Software Engineering Principles"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/statistics.json
Normal file
18
seed/challenges/04-video-challenges/statistics.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Statistics",
|
||||
"order": 18,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd4",
|
||||
"title": "Learn Statistics Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Statistics"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/tools.json
Normal file
18
seed/challenges/04-video-challenges/tools.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Tools",
|
||||
"order": 19,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd3",
|
||||
"title": "Learn Tools Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Tools"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "User Experience Design",
|
||||
"order": 20,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd2",
|
||||
"title": "Learn User Experience Design Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "User Experience Design"
|
||||
}
|
||||
]
|
||||
}
|
18
seed/challenges/04-video-challenges/visual-design.json
Normal file
18
seed/challenges/04-video-challenges/visual-design.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "Visual Design",
|
||||
"order": 21,
|
||||
"time": "0 hours",
|
||||
"isComingSoon": true,
|
||||
"challenges": [
|
||||
{
|
||||
"id": "bd7128d8c441eddfbeb5bdd1",
|
||||
"title": "Learn Visual Design Challenges",
|
||||
"description": [],
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "hike",
|
||||
"challengeType": 6,
|
||||
"nameEs": "Visual Design"
|
||||
}
|
||||
]
|
||||
}
|
@ -8,13 +8,10 @@ module.exports = {
|
||||
},
|
||||
mail: {
|
||||
connector: 'mail',
|
||||
transports: [{
|
||||
type: 'smtp',
|
||||
service: 'Mandrill',
|
||||
auth: {
|
||||
user: secrets.mandrill.user,
|
||||
pass: secrets.mandrill.password
|
||||
transport: {
|
||||
type: 'ses',
|
||||
accessKeyId: process.env.SES_ID,
|
||||
secretAccessKey: process.env.SES_SECRET
|
||||
}
|
||||
}]
|
||||
}
|
||||
};
|
||||
|
@ -85,7 +85,7 @@ function buildChallengeMap(userId, completedChallenges = [], User) {
|
||||
}, {})
|
||||
.flatMap(challengeMap => {
|
||||
const updateData = {
|
||||
'$set': {
|
||||
$set: {
|
||||
challengeMap,
|
||||
isChallengeMapMigrated: true
|
||||
}
|
||||
|
@ -10,7 +10,10 @@ export default function hikesService(app) {
|
||||
name: 'hikes',
|
||||
read: (req, resource, { dashedName } = {}, config, cb) => {
|
||||
const query = {
|
||||
where: { challengeType: '6' },
|
||||
where: {
|
||||
challengeType: '6',
|
||||
isComingSoon: false
|
||||
},
|
||||
order: ['order ASC', 'suborder ASC' ]
|
||||
};
|
||||
|
||||
|
@ -24,9 +24,9 @@ export function setProfileFromGithub(
|
||||
},
|
||||
{
|
||||
id: githubId,
|
||||
'avatar_url': picture,
|
||||
avatar_url: picture,
|
||||
email: githubEmail,
|
||||
'created_at': joinedGithubOn,
|
||||
created_at: joinedGithubOn,
|
||||
blog: website,
|
||||
location,
|
||||
name
|
||||
|
@ -8,15 +8,15 @@ nav.navbar.navbar-default.navbar-fixed-top.nav-height
|
||||
.collapse.navbar-collapse
|
||||
ul.nav.navbar-nav.navbar-right.hamburger-dropdown
|
||||
li.hidden-xs
|
||||
a#nav-map-btn(href='#' onclick='return false') Map
|
||||
a#nav-map-btn(href='/map' onclick='if (!(event.ctrlKey || event.metaKey)) {return false;}') Map
|
||||
li.visible-xs
|
||||
a(href='/map') Map
|
||||
li.hidden-xs
|
||||
a#nav-chat-btn(href='#' onclick="return false") Chat
|
||||
a#nav-chat-btn(href='//gitter.im/freecodecamp/freecodecamp' onclick="if (!(event.ctrlKey || event.metaKey)) {return false;}") Chat
|
||||
li.visible-xs
|
||||
a(href="//gitter.im/freecodecamp/freecodecamp" target="_blank") Chat
|
||||
li.hidden-xs
|
||||
a#nav-wiki-btn(href='#' onclick='return false') Wiki
|
||||
a#nav-wiki-btn(href='/wiki' onclick='if (!(event.ctrlKey || event.metaKey)) {return false;}') Wiki
|
||||
li.visible-xs
|
||||
a(href='/wiki', target='_blank') Wiki
|
||||
li
|
||||
|
Reference in New Issue
Block a user