Merge pull request #8148 from FreeCodeCamp/staging

Release Staging
This commit is contained in:
Berkeley Martinez
2016-04-15 23:32:45 -07:00
32 changed files with 337 additions and 31 deletions

View File

@ -174,7 +174,7 @@
"one-var": 0,
"operator-assignment": 0,
"padded-blocks": 0,
"quote-props": 0,
"quote-props": [2, "as-needed"],
"quotes": [
2,
"single",

View File

@ -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

View File

@ -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);

View File

@ -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 = {

View File

@ -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,

View File

@ -48,7 +48,7 @@ const certTypes = {
};
function isValidURL(data) {
return isURL(data, { 'require_protocol': true });
return isURL(data, { require_protocol: true });
}
const fields = [

View File

@ -1,5 +1,5 @@
const defaults = {
'string': {
string: {
value: '',
valid: false,
pristine: true,

View File

@ -44,7 +44,7 @@ module.exports = function(User) {
// username should not be in blacklist
User.validatesExclusionOf('username', {
'in': blacklistedUsernames,
in: blacklistedUsernames,
message: 'is taken'
});

View File

@ -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);
}

View File

@ -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",

View File

@ -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.",

View 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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View File

@ -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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View File

@ -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"
}
]
}

View File

@ -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"
}
]
}

View File

@ -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"
}
]
}

View 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"
}
]
}

View 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"
}
]
}

View File

@ -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"
}
]
}

View 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"
}
]
}

View File

@ -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
}
}]
}
};

View File

@ -85,7 +85,7 @@ function buildChallengeMap(userId, completedChallenges = [], User) {
}, {})
.flatMap(challengeMap => {
const updateData = {
'$set': {
$set: {
challengeMap,
isChallengeMapMigrated: true
}

View File

@ -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' ]
};

View File

@ -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

View File

@ -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