feat(cert): Certificates (#16185)

* feat(cert): finished layout and design of legacy certificates

* feat(cert): added new certs

* feat(cert): added logic for new certs

* feat(cert): updated claiming challenges

* feat(cert): fixed various small issues

* feat(cert): completed suggested changes
This commit is contained in:
Jonathan Grah
2017-12-21 01:15:23 +00:00
committed by Quincy Larson
parent 941462f399
commit 674ce83ab0
29 changed files with 604 additions and 254 deletions

View File

@ -179,6 +179,36 @@
"description": "Campers is full stack certified", "description": "Campers is full stack certified",
"default": false "default": false
}, },
"isRespWebDesignCert": {
"type": "boolean",
"description": "Camper is data visualization certified",
"default": false
},
"isNewDataVisCert": {
"type": "boolean",
"description": "Camper is responsive web design certified",
"default": false
},
"isFrontEndLibsCert": {
"type": "boolean",
"description": "Camper is front end libraries certified",
"default": false
},
"isJsAlgoDataStructCert": {
"type": "boolean",
"description": "Camper is javascript algorithms and data structures certified",
"default": false
},
"isApisMicroservicesCert": {
"type": "boolean",
"description": "Camper is apis and microservices certified",
"default": false
},
"isInfosecQaCert": {
"type": "boolean",
"description": "Camper is information security and quality assurance certified",
"default": false
},
"isChallengeMapMigrated": { "isChallengeMapMigrated": {
"type": "boolean", "type": "boolean",
"description": "Migrate completedChallenges array to challenge map", "description": "Migrate completedChallenges array to challenge map",

View File

@ -8,9 +8,9 @@
"title": "Claim Your Responsive Web Design Certificate", "title": "Claim Your Responsive Web Design Certificate",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/GjTPLxI.jpg",
"An image of our Responsive Web Design Certificate", "An image of our Responsive Web Design Certificate",
"This challenge will give you your verified Responsive Web Design Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", "This challenge will give you your verified Responsive Web Design Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our responsive web design projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -20,9 +20,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/UedoV2G.jpg", "//i.imgur.com/cyRVnUa.jpg",
"An image of the text \"Front End Development Certificate requirements\"", "An image of the text \"Responsive Web Design requirements\"",
"Let's confirm that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. Click the button below to verify this.", "Let's confirm that you have completed all of our responsive web design projects. Click the button below to verify this.",
"#" "#"
], ],
[ [
@ -36,11 +36,11 @@
{ {
"properties": [ "properties": [
"isHonest", "isHonest",
"isFrontEndCert" "isRespWebDesignCert"
], ],
"apis": [ "apis": [
"/certificate/honest", "/certificate/honest",
"/certificate/verify/front-end" "/certificate/verify/responsive-web-design"
], ],
"stepIndex": [ "stepIndex": [
1, 1,
@ -77,9 +77,9 @@
"title": "Reclama tu certificado de Desarrollo de interfaces", "title": "Reclama tu certificado de Desarrollo de interfaces",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/GjTPLxI.jpg",
"Una imagen que muestra nuestro certificado de Desarrollo de interfaces", "An image of our Responsive Web Design Certificate",
"Este desafío te otorga tu certificado autenticado de Desarrollo de interfaces. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los desafíos básicos e intermedios de diseño de algoritmos, y todos los proyectos básicos e intermedios de desarrollo de interfaces. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.", "This challenge will give you your verified Responsive Web Design Certificate. Before we issue your certificate, we must verify that you have completed all of our responsive web design projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -89,9 +89,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/14F2Van.jpg", "//i.imgur.com/cyRVnUa.jpg",
"Una imagen del texto \"Front End Development Certificate requirements\"", "An image of the text \"Responsive Web Design requirements\"",
"Confirmemos que has completado todos nuestros desafíos básicos e intermedios de diseño de algoritmos, y todos nuestros proyectos básicos e intermedios de desarrollo de interfaces. Pulsa el botón siguiente para hacer la verificación.", "Let's confirm that you have completed all of our responsive web design projects. Click the button below to verify this.",
"#" "#"
], ],
[ [

View File

@ -8,7 +8,7 @@
"title": "Claim Your JavaScript Algorithms and Data Structures Certificate", "title": "Claim Your JavaScript Algorithms and Data Structures Certificate",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/EzMrezJ.jpg",
"An image of our JavaScript Algorithms and Data Structures Certificate", "An image of our JavaScript Algorithms and Data Structures Certificate",
"This challenge will give you your verified JavaScript Algorithms and Data Structures Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", "This challenge will give you your verified JavaScript Algorithms and Data Structures Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
@ -20,8 +20,8 @@
"#" "#"
], ],
[ [
"//i.imgur.com/UedoV2G.jpg", "//i.imgur.com/rx2gKfB.jpg",
"An image of the text \"JavaScript Algorithms and Data Structures Certificate Requirements\"", "An image of the text \"JavaScript Algorithms and Data Structures requirements\"",
"Let's confirm that you have completed all of our JavaScript Algorithms and Data Structures projects. Click the button below to verify this.", "Let's confirm that you have completed all of our JavaScript Algorithms and Data Structures projects. Click the button below to verify this.",
"#" "#"
], ],
@ -36,11 +36,11 @@
{ {
"properties": [ "properties": [
"isHonest", "isHonest",
"isFrontEndCert" "isJsAlgoDataStructCert"
], ],
"apis": [ "apis": [
"/certificate/honest", "/certificate/honest",
"/certificate/verify/front-end" "/certificate/verify/javascript-algorithms-data-structures"
], ],
"stepIndex": [ "stepIndex": [
1, 1,
@ -74,9 +74,9 @@
"challengeType": 7, "challengeType": 7,
"descriptionEs": [ "descriptionEs": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/EzMrezJ.jpg",
"Una imagen que muestra nuestro certificado de Desarrollo de interfaces", "Una imagen que muestra nuestro certificado de Desarrollo de interfaces",
"Este desafío te otorga tu certificado autenticado de Desarrollo de interfaces. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los desafíos básicos e intermedios de diseño de algoritmos, y todos los proyectos básicos e intermedios de desarrollo de interfaces. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.", "This challenge will give you your verified JavaScript Algorithms and Data Structures Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -86,9 +86,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/14F2Van.jpg", "//i.imgur.com/rx2gKfB.jpg",
"Una imagen del texto \"Front End Development Certificate requirements\"", "An image of the text \"JavaScript Algorithms and Data Structures requirements\"",
"Confirmemos que has completado todos nuestros desafíos básicos e intermedios de diseño de algoritmos, y todos nuestros proyectos básicos e intermedios de desarrollo de interfaces. Pulsa el botón siguiente para hacer la verificación.", "Let's confirm that you have completed all of our basic and intermediate algorithm scripting challenges. Click the button below to verify this.",
"#" "#"
], ],
[ [

View File

@ -8,9 +8,9 @@
"title": "Claim Your Front End Libraries Certificate", "title": "Claim Your Front End Libraries Certificate",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/vOtZumH.jpg",
"An image of our Front End Libraries Certificate", "An image of our Front End Libraries Certificate",
"This challenge will give you your verified Front End Libraries Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", "This challenge will give you your verified Front End Libraries Certificate. Before we issue your certificate, we must verify that you have completed all of our front end libraries projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -20,9 +20,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/UedoV2G.jpg", "//i.imgur.com/GJeTCMS.jpg",
"An image of the text \"Front End Development Certificate requirements\"", "An image of the text \"Front End Libraries Certificate requirements\"",
"Let's confirm that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. Click the button below to verify this.", "Let's confirm that you have completed all of our front end libraries projects. Click the button below to verify this.",
"#" "#"
], ],
[ [
@ -36,11 +36,11 @@
{ {
"properties": [ "properties": [
"isHonest", "isHonest",
"isFrontEndCert" "isFrontEndLibsCert"
], ],
"apis": [ "apis": [
"/certificate/honest", "/certificate/honest",
"/certificate/verify/front-end" "/certificate/verify/front-end-libraries"
], ],
"stepIndex": [ "stepIndex": [
1, 1,
@ -106,9 +106,9 @@
"title": "Solicite seu Certificado de Bibliotecas Front End", "title": "Solicite seu Certificado de Bibliotecas Front End",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/vOtZumH.jpg",
"Uma imagem do nosso Certificado de Bibliotecas Front End", "Uma imagem do nosso Certificado de Bibliotecas Front End",
"Este desafio lhe dará seu certificado verificado de bibliotecas Front End. Antes de emitir o seu certificado, precisamos verificar que você completou todos os nossos desafios de algoritmos básicos e intermediários e todos os nossos projetos básicos, intermediários e avançados de desenvolvimento. Você também deve aceitar nosso Compromisso de Honestidade Acadêmica. Clique no botão abaixo para iniciar este processo.", "This challenge will give you your verified Front End Libraries Certificate. Before we issue your certificate, we must verify that you have completed all of our front end libraries projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [

View File

@ -8,9 +8,9 @@
"title": "Claim Your Data Visualization Certificate", "title": "Claim Your Data Visualization Certificate",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/N8drT4I.jpg",
"An image of our Data Visualization Certificate", "An image of our Data Visualization Certificate",
"This challenge will give you your verified Data Visualization Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", "This challenge will give you your verified Data Visualization Certificate. Before we issue your certificate, we must verify that you have completed all of our data visualisation projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -20,10 +20,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/UedoV2G.jpg", "//i.imgur.com/BUaEvDo.jpg",
"An image of the text \"Front End Development Certificate requirements\"", "An image of the text \"Data Visualization Certificate requirements\"",
"Let's confirm that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. Click the button below to verify this.", "Let's confirm that you have completed data visualisation projects. Click the button below to verify this.", "#"
"#"
], ],
[ [
"//i.imgur.com/Q5Za9U6.jpg", "//i.imgur.com/Q5Za9U6.jpg",
@ -36,11 +35,11 @@
{ {
"properties": [ "properties": [
"isHonest", "isHonest",
"isFrontEndCert" "isDataVisCert"
], ],
"apis": [ "apis": [
"/certificate/honest", "/certificate/honest",
"/certificate/verify/front-end" "/certificate/verify/data-visualization"
], ],
"stepIndex": [ "stepIndex": [
1, 1,
@ -77,10 +76,9 @@
"title": "Reclama tu certificado de Desarrollo de interfaces", "title": "Reclama tu certificado de Desarrollo de interfaces",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/N8drT4I.jpg",
"Una imagen que muestra nuestro certificado de Desarrollo de interfaces", "Una imagen que muestra nuestro certificado de Desarrollo de interfaces",
"Este desafío te otorga tu certificado autenticado de Desarrollo de interfaces. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los desafíos básicos e intermedios de diseño de algoritmos, y todos los proyectos básicos e intermedios de desarrollo de interfaces. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.", "This challenge will give you your verified Data Visualization Certificate. Before we issue your certificate, we must verify that you have completed all of our data visualisation projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", ""
""
], ],
[ [
"//i.imgur.com/HArFfMN.jpg", "//i.imgur.com/HArFfMN.jpg",
@ -89,9 +87,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/14F2Van.jpg", "//i.imgur.com/BUaEvDo.jpg",
"Una imagen del texto \"Front End Development Certificate requirements\"", "An image of the text \"Data Visualization Certificate requirements\"",
"Confirmemos que has completado todos nuestros desafíos básicos e intermedios de diseño de algoritmos, y todos nuestros proyectos básicos e intermedios de desarrollo de interfaces. Pulsa el botón siguiente para hacer la verificación.", "Let's confirm that you have completed data visualisation projects. Click the button below to verify this.", "Confirmemos que has completado todos nuestros desafíos básicos e intermedios de diseño de algoritmos, y todos nuestros proyectos básicos e intermedios de desarrollo de interfaces. Pulsa el botón siguiente para hacer la verificación.",
"#" "#"
], ],
[ [

View File

@ -8,9 +8,9 @@
"title": "Claim Your APIs and Microservices Certificate", "title": "Claim Your APIs and Microservices Certificate",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/gfH7j5B.jpg",
"An image of our APIs and Microservices Certificate", "An image of our APIs and Microservices Certificate",
"This challenge will give you your verified APIs and Microservices Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", "This challenge will give you your verified APIs and Microservices Certificate. Before we issue your certificate, we must verify that you have completed all of our apis and microservices projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -20,9 +20,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/UedoV2G.jpg", "//i.imgur.com/IBTfUzO.jpg",
"An image of the text \"Front End Development Certificate requirements\"", "An image of the text \"APIs and Microservices Certificate requirements\"",
"Let's confirm that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. Click the button below to verify this.", "Let's confirm that you have completed all of our apis and microservices projects. Click the button below to verify this.",
"#" "#"
], ],
[ [
@ -36,11 +36,11 @@
{ {
"properties": [ "properties": [
"isHonest", "isHonest",
"isFrontEndCert" "isApisMicroservicesCert"
], ],
"apis": [ "apis": [
"/certificate/honest", "/certificate/honest",
"/certificate/verify/front-end" "/certificate/verify/apis-microservices"
], ],
"stepIndex": [ "stepIndex": [
1, 1,
@ -77,9 +77,9 @@
"title": "Reclama tu certificado de Desarrollo de interfaces", "title": "Reclama tu certificado de Desarrollo de interfaces",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/gfH7j5B.jpg",
"Una imagen que muestra nuestro certificado de Desarrollo de interfaces", "Una imagen que muestra nuestro certificado de Desarrollo de interfaces",
"Este desafío te otorga tu certificado autenticado de Desarrollo de interfaces. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los desafíos básicos e intermedios de diseño de algoritmos, y todos los proyectos básicos e intermedios de desarrollo de interfaces. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.", "This challenge will give you your verified APIs and Microservices Certificate. Before we issue your certificate, we must verify that you have completed all of our apis and microservices projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -89,9 +89,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/14F2Van.jpg", "//i.imgur.com/IBTfUzO.jpg",
"Una imagen del texto \"Front End Development Certificate requirements\"", "An image of the text \"APIs and Microservices Certificate requirements\"",
"Confirmemos que has completado todos nuestros desafíos básicos e intermedios de diseño de algoritmos, y todos nuestros proyectos básicos e intermedios de desarrollo de interfaces. Pulsa el botón siguiente para hacer la verificación.", "Let's confirm that you have completed all of our apis and microservices projects. Click the button below to verify this.",
"#" "#"
], ],
[ [

View File

@ -8,9 +8,9 @@
"title": "Claim Your Information Security and Quality Assurance Certificate", "title": "Claim Your Information Security and Quality Assurance Certificate",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/YhKzGLb.jpg",
"An image of our Information Security and Quality Assurance Certificate", "An image of our Information Security and Quality Assurance Certificate",
"This challenge will give you your verified Information Security and Quality Assurance Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", "This challenge will give you your verified Information Security and Quality Assurance Certificate. Before we issue your certificate, we must verify that you have completed all of our information security and quality assurance projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -20,9 +20,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/UedoV2G.jpg", "//i.imgur.com/TM4KGfb.jpg",
"An image of the text \"Front End Development Certificate requirements\"", "An image of the text \"Information Security and Quality Assurance Certificate requirements\"",
"Let's confirm that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. Click the button below to verify this.", "Let's confirm that you have completed all of our information security and quality assurance projects. Click the button below to verify this.",
"#" "#"
], ],
[ [
@ -36,11 +36,11 @@
{ {
"properties": [ "properties": [
"isHonest", "isHonest",
"isFrontEndCert" "isInfosecQaCert"
], ],
"apis": [ "apis": [
"/certificate/honest", "/certificate/honest",
"/certificate/verify/front-end" "/certificate/verify/information-security-quality-assurance"
], ],
"stepIndex": [ "stepIndex": [
1, 1,
@ -77,9 +77,9 @@
"title": "Reclama tu certificado de Desarrollo de interfaces", "title": "Reclama tu certificado de Desarrollo de interfaces",
"description": [ "description": [
[ [
"//i.imgur.com/k8btNUB.jpg", "//i.imgur.com/YhKzGLb.jpg",
"Una imagen que muestra nuestro certificado de Desarrollo de interfaces", "Una imagen que muestra nuestro certificado de Desarrollo de interfaces",
"Este desafío te otorga tu certificado autenticado de Desarrollo de interfaces. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los desafíos básicos e intermedios de diseño de algoritmos, y todos los proyectos básicos e intermedios de desarrollo de interfaces. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.", "This challenge will give you your verified Information Security and Quality Assurance Certificate. Before we issue your certificate, we must verify that you have completed all of our information security and quality assurance projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.",
"" ""
], ],
[ [
@ -89,9 +89,9 @@
"#" "#"
], ],
[ [
"//i.imgur.com/14F2Van.jpg", "//i.imgur.com/TM4KGfb.jpg",
"Una imagen del texto \"Front End Development Certificate requirements\"", "An image of the text \"Information Security and Quality Assurance Certificate requirements\"",
"Confirmemos que has completado todos nuestros desafíos básicos e intermedios de diseño de algoritmos, y todos nuestros proyectos básicos e intermedios de desarrollo de interfaces. Pulsa el botón siguiente para hacer la verificación.", "Let's confirm that you have completed all of our information security and quality assurance projects. Click the button below to verify this.",
"#" "#"
], ],
[ [

View File

@ -14,9 +14,14 @@ import {
import { observeQuery } from '../utils/rx'; import { observeQuery } from '../utils/rx';
import { import {
respWebDesignId,
frontEndLibsId,
jsAlgoDataStructId,
frontEndChallengeId, frontEndChallengeId,
dataVisChallengeId, dataVisId,
backEndChallengeId apisMicroservicesId,
backEndChallengeId,
infosecQaId
} from '../utils/constantStrings.json'; } from '../utils/constantStrings.json';
import { import {
@ -60,9 +65,12 @@ function getIdsForCert$(id, Challenge) {
// { // {
// email: String, // email: String,
// username: String, // username: String,
// isFrontEndCert: Boolean, // isRespWebDesignCert: Boolean,
// isBackEndCert: Boolean, // isFrontEndLibsCert: Boolean,
// isDataVisCert: Boolean // isJsAlgoDataStructCert: Boolean,
// isDataVisCert: Boolean,
// isApisMicroservicesCert: Boolean,
// isInfosecQaCert: Boolean
// }, // },
// send$: Observable // send$: Observable
// ) => Observable // ) => Observable
@ -71,17 +79,23 @@ function sendCertifiedEmail(
email, email,
name, name,
username, username,
isFrontEndCert, isRespWebDesignCert,
isBackEndCert, isFrontEndLibsCert,
isDataVisCert isJsAlgoDataStructCert,
isDataVisCert,
isApisMicroservicesCert,
isInfosecQaCert
}, },
send$ send$
) { ) {
if ( if (
!isEmail(email) || !isEmail(email) ||
!isFrontEndCert || !isRespWebDesignCert ||
!isBackEndCert || !isFrontEndLibsCert ||
!isDataVisCert !isJsAlgoDataStructCert ||
!isDataVisCert ||
!isApisMicroservicesCert ||
!isInfosecQaCert
) { ) {
return Observable.just(false); return Observable.just(false);
} }
@ -107,8 +121,16 @@ export default function certificate(app) {
const certTypeIds = { const certTypeIds = {
[certTypes.frontEnd]: getIdsForCert$(frontEndChallengeId, Challenge), [certTypes.frontEnd]: getIdsForCert$(frontEndChallengeId, Challenge),
[certTypes.dataVis]: getIdsForCert$(dataVisChallengeId, Challenge), [certTypes.backEnd]: getIdsForCert$(backEndChallengeId, Challenge),
[certTypes.backEnd]: getIdsForCert$(backEndChallengeId, Challenge) [certTypes.respWebDesign]: getIdsForCert$(respWebDesignId, Challenge),
[certTypes.frontEndLibs]: getIdsForCert$(frontEndLibsId, Challenge),
[certTypes.jsAlgoDataStruct]: getIdsForCert$(jsAlgoDataStructId, Challenge),
[certTypes.dataVis]: getIdsForCert$(dataVisId, Challenge),
[certTypes.apisMicroservices]: getIdsForCert$(
apisMicroservicesId,
Challenge
),
[certTypes.infosecQa]: getIdsForCert$(infosecQaId, Challenge)
}; };
router.post( router.post(
@ -123,12 +145,42 @@ export default function certificate(app) {
verifyCert.bind(null, certTypes.backEnd) verifyCert.bind(null, certTypes.backEnd)
); );
router.post(
'/certificate/verify/responsive-web-design',
ifNoUser401,
verifyCert.bind(null, certTypes.respWebDesign)
);
router.post(
'/certificate/verify/front-end-libraries',
ifNoUser401,
verifyCert.bind(null, certTypes.frontEndLibs)
);
router.post(
'/certificate/verify/javascript-algorithms-data-structures',
ifNoUser401,
verifyCert.bind(null, certTypes.jsAlgoDataStruct)
);
router.post( router.post(
'/certificate/verify/data-visualization', '/certificate/verify/data-visualization',
ifNoUser401, ifNoUser401,
verifyCert.bind(null, certTypes.dataVis) verifyCert.bind(null, certTypes.dataVis)
); );
router.post(
'/certificate/verify/apis-microservices',
ifNoUser401,
verifyCert.bind(null, certTypes.apisMicroservices)
);
router.post(
'/certificate/verify/information-security-quality-assurance',
ifNoUser401,
verifyCert.bind(null, certTypes.infosecQa)
);
router.post( router.post(
'/certificate/honest', '/certificate/honest',
sendMessageToNonUser, sendMessageToNonUser,

View File

@ -132,7 +132,7 @@ export default function commit(app) {
const { const {
nonprofit: nonprofitName = 'girl develop it', nonprofit: nonprofitName = 'girl develop it',
amount = '5', amount = '5',
goal = commitGoals.frontEndCert goal = commitGoals.respWebDesignCert
} = req.query; } = req.query;
const nonprofit = findNonprofit(nonprofitName); const nonprofit = findNonprofit(nonprofitName);

View File

@ -6,8 +6,13 @@ import emoji from 'node-emoji';
import { import {
frontEndChallengeId, frontEndChallengeId,
dataVisChallengeId, backEndChallengeId,
backEndChallengeId respWebDesignId,
frontEndLibsId,
jsAlgoDataStructId,
dataVisId,
apisMicroservicesId,
infosecQaId
} from '../utils/constantStrings.json'; } from '../utils/constantStrings.json';
import certTypes from '../utils/certTypes.json'; import certTypes from '../utils/certTypes.json';
import { import {
@ -29,22 +34,40 @@ const debug = debugFactory('fcc:boot:user');
const sendNonUserToMap = ifNoUserRedirectTo('/map'); const sendNonUserToMap = ifNoUserRedirectTo('/map');
const certIds = { const certIds = {
[certTypes.frontEnd]: frontEndChallengeId, [certTypes.frontEnd]: frontEndChallengeId,
[certTypes.dataVis]: dataVisChallengeId, [certTypes.backEnd]: backEndChallengeId,
[certTypes.backEnd]: backEndChallengeId [certTypes.respWebDesign]: respWebDesignId,
[certTypes.frontEndLibs]: frontEndLibsId,
[certTypes.jsAlgoDataStruct]: jsAlgoDataStructId,
[certTypes.dataVis]: dataVisId,
[certTypes.apisMicroservices]: apisMicroservicesId,
[certTypes.infosecQa]: infosecQaId
}; };
const certViews = { const certViews = {
[certTypes.frontEnd]: 'certificate/front-end.jade', [certTypes.frontEnd]: 'certificate/front-end.jade',
[certTypes.dataVis]: 'certificate/data-vis.jade',
[certTypes.backEnd]: 'certificate/back-end.jade', [certTypes.backEnd]: 'certificate/back-end.jade',
[certTypes.fullStack]: 'certificate/full-stack.jade' [certTypes.fullStack]: 'certificate/full-stack.jade',
[certTypes.respWebDesign]: 'certificate/responsive-web-design.jade',
[certTypes.frontEndLibs]: 'certificate/front-end-libraries.jade',
[certTypes.jsAlgoDataStruct]:
'certificate/javascript-algorithms-and-data-structures.jade',
[certTypes.dataVis]: 'certificate/data-visualization.jade',
[certTypes.apisMicroservices]: 'certificate/apis-and-microservices.jade',
[certTypes.infosecQa]:
'certificate/information-security-and-quality-assurance.jade'
}; };
const certText = { const certText = {
[certTypes.frontEnd]: 'Front End certified', [certTypes.frontEnd]: 'Front End certified',
[certTypes.dataVis]: 'Data Vis Certified',
[certTypes.backEnd]: 'Back End Certified', [certTypes.backEnd]: 'Back End Certified',
[certTypes.fullStack]: 'Full Stack Certified' [certTypes.fullStack]: 'Full Stack Certified',
[certTypes.respWebDesign]: 'Responsive Web Design Certified',
[certTypes.frontEndLibs]: 'Front End Libraries Certified',
[certTypes.jsAlgoDataStruct]:
'JavaScript Algorithms and Data Structures Certified',
[certTypes.dataVis]: 'Data Visualization Certified',
[certTypes.apisMicroservices]: 'APIs and Microservices Certified',
[certTypes.infosecQa]: 'Information Security and Quality Assurance Certified'
}; };
const dateFormat = 'MMM DD, YYYY'; const dateFormat = 'MMM DD, YYYY';
@ -208,11 +231,6 @@ module.exports = function(app) {
showCert.bind(null, certTypes.frontEnd) showCert.bind(null, certTypes.frontEnd)
); );
api.get(
'/:username/data-visualization-certification',
showCert.bind(null, certTypes.dataVis)
);
api.get( api.get(
'/:username/back-end-certification', '/:username/back-end-certification',
showCert.bind(null, certTypes.backEnd) showCert.bind(null, certTypes.backEnd)
@ -223,6 +241,36 @@ module.exports = function(app) {
(req, res) => res.redirect(req.url.replace('full-stack', 'back-end')) (req, res) => res.redirect(req.url.replace('full-stack', 'back-end'))
); );
api.get(
'/:username/responsive-web-design-certification',
showCert.bind(null, certTypes.respWebDesign)
);
api.get(
'/:username/front-end-libraries-certification',
showCert.bind(null, certTypes.frontEndLibs)
);
api.get(
'/:username/javascript-algorithms-data-structures-certification',
showCert.bind(null, certTypes.jsAlgoDataStruct)
);
api.get(
'/:username/data-visualization-certification',
showCert.bind(null, certTypes.dataVis)
);
api.get(
'/:username/apis-microservices-certification',
showCert.bind(null, certTypes.apisMicroservices)
);
api.get(
'/:username/information-security-quality-assurance-certification',
showCert.bind(null, certTypes.infosecQa)
);
router.get('/:username', showUserProfile); router.get('/:username', showUserProfile);
router.get( router.get(
'/:username/report-user/', '/:username/report-user/',
@ -586,9 +634,14 @@ module.exports = function(app) {
isLocked: true, isLocked: true,
isAvailableForHire: true, isAvailableForHire: true,
isFrontEndCert: true, isFrontEndCert: true,
isDataVisCert: true,
isBackEndCert: true, isBackEndCert: true,
isFullStackCert: true, isFullStackCert: true,
isRespWebDesignCert: true,
isFrontEndLibsCert: true,
isJsAlgoDataStructCert: true,
isDataVisCert: true,
isApisMicroservicesCert: true,
isInfosecQaCert: true,
isHonest: true, isHonest: true,
username: true, username: true,
name: true, name: true,

View File

@ -21,6 +21,11 @@ const publicUserProps = [
'isBackEndCert', 'isBackEndCert',
'isDataVisCert', 'isDataVisCert',
'isFullStackCert', 'isFullStackCert',
'isRespWebDesignCert',
'isFrontEndLibsCert',
'isJsAlgoDataStructCert',
'isApisMicroservicesCert',
'isInfosecQaCert',
'githubURL', 'githubURL',
'sendMonthlyEmail', 'sendMonthlyEmail',

View File

@ -1,6 +1,11 @@
{ {
"frontEnd": "isFrontEndCert", "frontEnd": "isFrontEndCert",
"backEnd": "isBackEndCert", "backEnd": "isBackEndCert",
"fullStack": "isFullStackCert",
"respWebDesign": "isRespWebDesignCert",
"frontEndLibs": "isFrontEndLibsCert",
"jsAlgoDataStruct": "isJsAlgoDataStructCert",
"dataVis": "isDataVisCert", "dataVis": "isDataVisCert",
"fullStack": "isFullStackCert" "apisMicroservices": "isApisMicroservicesCert",
"infosecQa": "isInfosecQaCert"
} }

View File

@ -1,6 +1,11 @@
{ {
"frontEndCert": "Front End Development Certification", "frontEndCert": "Front End Development Certification",
"backEndCert": "Back End Development Certification", "backEndCert": "Back End Development Certification",
"dataVisCert": "Data Visualisation Certification", "fullStackCert": "Full Stack Development Certification",
"fullStackCert": "Full Stack Development Certification" "respWebDesign": "Responsive Web Design Certification",
"frontEndLibs": "Front End Libraries Certification",
"jsAlgoDataStruct": "JavaScript Algorithms and Data Structures Certification",
"dataVis": "Data Visualisation Certification",
"apisMicroservices": "APIs and Microservices Certification",
"infosecQa": "Information Security and Quality Assurance Certification"
} }

View File

@ -10,9 +10,14 @@ export { commitGoals };
export function completeCommitment$(user) { export function completeCommitment$(user) {
const { const {
isFrontEndCert, isFrontEndCert,
isDataVisCert,
isBackEndCert, isBackEndCert,
isFullStackCert isFullStackCert,
isRespWebDesignCert,
isFrontEndLibsCert,
isJsAlgoDataStructCert,
isDataVisCert,
isApisMicroservicesCert,
isInfosecQaCert
} = user; } = user;
return Observable.fromNodeCallback(user.pledge, user)() return Observable.fromNodeCallback(user.pledge, user)()
@ -25,9 +30,15 @@ export function completeCommitment$(user) {
if ( if (
(isFrontEndCert && goal === commitGoals.frontEndCert) || (isFrontEndCert && goal === commitGoals.frontEndCert) ||
(isDataVisCert && goal === commitGoals.dataVisCert) ||
(isBackEndCert && goal === commitGoals.backEndCert) || (isBackEndCert && goal === commitGoals.backEndCert) ||
(isFullStackCert && goal === commitGoals.fullStackCert) (isFullStackCert && goal === commitGoals.fullStackCert) ||
(isRespWebDesignCert && goal === commitGoals.respWebDesignCert) ||
(isFrontEndLibsCert && goal === commitGoals.frontEndLibsCert) ||
(isJsAlgoDataStructCert && goal === commitGoals.jsAlgoDataStructCert) ||
(isDataVisCert && goal === commitGoals.dataVisCert) ||
(isApisMicroservicesCert &&
goal === commitGoals.apisMicroservicesCert) ||
(isInfosecQaCert && goal === commitGoals.infosecQaCert)
) { ) {
debug('marking goal complete'); debug('marking goal complete');
pledge.isCompleted = true; pledge.isCompleted = true;

View File

@ -1,6 +1,11 @@
{ {
"gitHubUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1521.3 Safari/537.36", "gitHubUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1521.3 Safari/537.36",
"frontEndChallengeId": "561add10cb82ac38a17513be", "frontEndChallengeId": "561add10cb82ac38a17513be",
"dataVisChallengeId": "561add10cb82ac38a17513b3", "backEndChallengeId": "660add10cb82ac38a17513be",
"backEndChallengeId": "660add10cb82ac38a17513be" "respWebDesignId": "561add10cb82ac38a17513bc",
"frontEndLibsId": "561acd10cb82ac38a17513bc",
"jsAlgoDataStructId": "561abd10cb81ac38a17513bc",
"dataVisId": "561add10cb82ac39a17513bc",
"apisMicroservicesId": "561add10cb82ac38a17523bc",
"infosecQaId": "561add10cb82ac38a17213bc"
} }

View File

@ -0,0 +1,32 @@
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css')
include styles
.certificate-wrapper.container
.row
header
.col-md-5.col-sm-12
.logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12
.issue-date Issued 
strong #{date}
section.information
.information-container
h3 This certifies that
h1
strong= name
h3 has successfully completed freeCodeCamp's
h1
strong Advanced Frontend Projects
h4 1 of 3 legacy freeCodeCamp certificates, representing approximately 400 hours of coursework
footer
.row.signatures
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p
strong Quincy Larson
p Executive Director, freeCodeCamp.org
.row
p.verify Verify this certificate at: https://freecodecamp.org/#{username}/advanced-front-end-certification

View File

@ -0,0 +1,32 @@
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css')
include styles
.certificate-wrapper.container
.row
header
.col-md-5.col-sm-12
.logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12
.issue-date Issued 
strong #{date}
section.information
.information-container
h3 This certifies that
h1
strong= name
h3 has successfully completed freeCodeCamp's
h1
strong APIs and Microservices Projects
h4 1 of 6 freeCodeCamp certificates, representing approximately 300 hours of coursework
footer
.row.signatures
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p
strong Quincy Larson
p Executive Director, freeCodeCamp.org
.row
p.verify Verify this certificate at: https://freecodecamp.org/#{username}/apis-and-microservices-certification

View File

@ -9,7 +9,7 @@ include styles
.logo .logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo") img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12 .col-md-7.col-sm-12
.issue-date Issued .issue-date Issued 
strong #{date} strong #{date}
section.information section.information
@ -17,20 +17,16 @@ include styles
h3 This certifies that h3 This certifies that
h1 h1
strong= name strong= name
h3 has successfully completed the h3 has successfully completed freeCodeCamp's
h1 h1
strong Back End Development Projects strong Back End Development Projects
h4 (400 hours of coursework & 1 of 3 freeCodeCamp certificates) h4 1 of 3 legacy freeCodeCamp certificates, representing approximately 400 hours of coursework
footer footer
.row.signatures .row.signatures
.col-md-6
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature") img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p p
strong Quincy Larson strong Quincy Larson
.col-md-6 p Executive Director, freeCodeCamp.org
img(class='img-responsive', src='https://i.imgur.com/b0YdXS4.png', alt="Michael D. Johnson's Signature")
p
strong Michael D. Johnson
.row .row
p.verify Verify this certificate at: https://www.freecodecamp.org/#{username}/back-end-certification p.verify Verify this certificate at: https://freecodecamp.org/#{username}/back-end-certification

View File

@ -1,36 +0,0 @@
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css')
include styles
.certificate-wrapper.container
.row
header
.col-md-5.col-sm-12
.logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12
.issue-date Issued
strong #{date}
section.information
.information-container
h3 This certifies that
h1
strong= name
h3 has successfully completed the
h1
strong Data Visualization Projects
h4 (400 hours of coursework & 1 of 3 freeCodeCamp certificates)
footer
.row.signatures
.col-md-6
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p
strong Quincy Larson
.col-md-6
img(class='img-responsive', src='https://i.imgur.com/b0YdXS4.png', alt="Michael D. Johnson's Signature")
p
strong Michael D. Johnson
.row
p.verify Verify this certificate at: https://www.freecodecamp.org/#{username}/data-visualization-certification

View File

@ -0,0 +1,32 @@
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css')
include styles
.certificate-wrapper.container
.row
header
.col-md-5.col-sm-12
.logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12
.issue-date Issued 
strong #{date}
section.information
.information-container
h3 This certifies that
h1
strong= name
h3 has successfully completed freeCodeCamp's
h1
strong Data Visualization Projects
h4 1 of 6 freeCodeCamp certificates, representing approximately 300 hours of coursework
footer
.row.signatures
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p
strong Quincy Larson
p Executive Director, freeCodeCamp.org
.row
p.verify Verify this certificate at: https://freecodecamp.org/#{username}/data-visualization-certification

View File

@ -0,0 +1,32 @@
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css')
include styles
.certificate-wrapper.container
.row
header
.col-md-5.col-sm-12
.logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12
.issue-date Issued 
strong #{date}
section.information
.information-container
h3 This certifies that
h1
strong= name
h3 has successfully completed freeCodeCamp's
h1
strong Front End Libraries Projects
h4 1 of 6 freeCodeCamp certificates, representing approximately 300 hours of coursework
footer
.row.signatures
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p
strong Quincy Larson
p Executive Director, freeCodeCamp.org
.row
p.verify Verify this certificate at: https://freecodecamp.org/#{username}/front-end-libraries-certification

View File

@ -9,7 +9,7 @@ include styles
.logo .logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo") img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12 .col-md-7.col-sm-12
.issue-date Issued .issue-date Issued 
strong #{date} strong #{date}
section.information section.information
@ -17,20 +17,16 @@ include styles
h3 This certifies that h3 This certifies that
h1 h1
strong= name strong= name
h3 has successfully completed the h3 has successfully completed freeCodeCamp's
h1 h1
strong Front End Development Projects strong Front End Development Projects
h4 (400 hours of coursework & 1 of 3 freeCodeCamp certificates) h4 1 of 3 legacy freeCodeCamp certificates, representing approximately 400 hours of coursework
footer footer
.row.signatures .row.signatures
.col-md-6
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature") img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p p
strong Quincy Larson strong Quincy Larson
.col-md-6 p Executive Director, freeCodeCamp.org
img(class='img-responsive', src='https://i.imgur.com/b0YdXS4.png', alt="Michael D. Johnson's Signature")
p
strong Michael D. Johnson
.row .row
p.verify Verify this certificate at: https://www.freecodecamp.org/#{username}/front-end-certification p.verify Verify this certificate at: https://freecodecamp.org/#{username}/front-end-certification

View File

@ -9,7 +9,7 @@ include styles
.logo .logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo") img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12 .col-md-7.col-sm-12
.issue-date Issued .issue-date Issued 
strong #{date} strong #{date}
section.information section.information
@ -17,20 +17,16 @@ include styles
h3 This certifies that h3 This certifies that
h1 h1
strong= name strong= name
h3 has successfully completed the h3 has successfully completed freeCodeCamp's
h1 h1
strong Full Stack Development Projects strong Full Stack Development Projects
h4 (400 hours of coursework & 1 of 3 freeCodeCamp certificates) h4 1 of 3 legacy freeCodeCamp certificates, representing approximately 400 hours of coursework
footer footer
.row.signatures .row.signatures
.col-md-6
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature") img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p p
strong Quincy Larson strong Quincy Larson
.col-md-6 p Executive Director, freeCodeCamp.org
img(class='img-responsive', src='https://i.imgur.com/b0YdXS4.png', alt="Michael D. Johnson's Signature")
p
strong Michael D. Johnson
.row .row
p.verify Verify this certificate at: https://www.freecodecamp.org/#{username}/full-stack-certification p.verify Verify this certificate at: https://freecodecamp.org/#{username}/full-stack-certification

View File

@ -0,0 +1,32 @@
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css')
include styles
.certificate-wrapper.container
.row
header
.col-md-5.col-sm-12
.logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12
.issue-date Issued 
strong #{date}
section.information
.information-container
h3 This certifies that
h1
strong= name
h3 has successfully completed freeCodeCamp's
h1
strong Information Security and Quality Assurance Projects
h4 1 of 6 freeCodeCamp certificates, representing approximately 300 hours of coursework
footer
.row.signatures
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p
strong Quincy Larson
p Executive Director, freeCodeCamp.org
.row
p.verify Verify this certificate at: https://freecodecamp.org/#{username}/information-security-and-quality-assurance-certification

View File

@ -0,0 +1,32 @@
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css')
include styles
.certificate-wrapper.container
.row
header
.col-md-5.col-sm-12
.logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12
.issue-date Issued 
strong #{date}
section.information
.information-container
h3 This certifies that
h1
strong= name
h3 has successfully completed freeCodeCamp's
h1
strong JavaScript Algorithms and Data Structures Certificate
h4 1 of 6 freeCodeCamp certificates, representing approximately 300 hours of coursework
footer
.row.signatures
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p
strong Quincy Larson
p Executive Director, freeCodeCamp.org
.row
p.verify Verify this certificate at: https://freecodecamp.org/#{username}/javascript-algorithms-and-data-structures-certification

View File

@ -0,0 +1,32 @@
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css')
include styles
.certificate-wrapper.container
.row
header
.col-md-5.col-sm-12
.logo
img(class='img-responsive', src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg', alt="freeCodeCamp's Logo")
.col-md-7.col-sm-12
.issue-date Issued 
strong #{date}
section.information
.information-container
h3 This certifies that
h1
strong= name
h3 has successfully completed freeCodeCamp's
h1
strong Responsive Web Design Projects
h4 1 of 6 freeCodeCamp certificates, representing approximately 300 hours of coursework
footer
.row.signatures
img(class='img-responsive', src='https://i.imgur.com/OJFVJKg.png', alt="Quincy Larson's Signature")
p
strong Quincy Larson
p Executive Director, freeCodeCamp.org
.row
p.verify Verify this certificate at: https://freecodecamp.org/#{username}/responsive-web-design-certification

View File

@ -70,6 +70,7 @@ style.
.information { .information {
margin-top: -20px; margin-top: -20px;
height: 380px; height: 380px;
text-align: center;
background-color: #efefef; background-color: #efefef;
} }
@ -98,7 +99,7 @@ style.
color: #006400; color: #006400;
} }
.signatures .col-md-6 { .signatures {
text-align: center; text-align: center;
margin: 0 auto; margin: 0 auto;
background-color: #efefef; background-color: #efefef;
@ -183,7 +184,7 @@ style.
} }
} }
@media screen and (max-width: 350px) { @media screen and (max-width: 675px) {
.container { .container {
padding: 0; padding: 0;
border: 0; border: 0;

View File

@ -23,18 +23,24 @@ block content
.col-xs-12.col-sm-6.col-sm-offset-3 .col-xs-12.col-sm-6.col-sm-offset-3
h3 Step 1: Which certification do you pledge to complete? h3 Step 1: Which certification do you pledge to complete?
.btn-group.btn-group-justified(data-toggle='buttons' role='group') .btn-group.btn-group-justified(data-toggle='buttons' role='group')
label.btn.btn-primary.btn-lg.active label.btn.btn-primary.active
input(type='radio' id=frontEndCert value=frontEndCert name='goal' checked="checked") input(type='radio' id="respWebDesignCert" value="Responsive Web Design Certification" name='goal' checked="checked")
| Front End | Responsive Web Design
label.btn.btn-primary.btn-lg label.btn.btn-primary
input(type='radio' id=dataVisCert value=dataVisCert name='goal') input(type='radio' id="frontEndLibsCert" value="Front End Libraries Certification" name='goal')
| Data Vis | Front End Libraries
label.btn.btn-primary.btn-lg label.btn.btn-primary
input(type='radio' id=backEndCert value=backEndCert name='goal') input(type='radio' id="jsAlgoDataStructCert" value="JavaScript Algorithms and Data Structures Certification" name='goal')
| Back End | JavaScript Algorithms and Data Structures
label.btn.btn-primary.btn-lg label.btn.btn-primary
input(type='radio' id=fullStackCert value=fullStackCert name='goal') input(type='radio' id="dataVisCert" value="Data Visualization Certification" name='goal')
| Full Stack | Data Visualization
label.btn.btn-primary
input(type='radio' id="apisMicroservicesCert" value="APIs and Microservices Certification" name='goal')
| APIs and Microservices
label.btn.btn-primary
input(type='radio' id="infosecQaCert" value="Information Security and Quality Assurance Certification" name='goal')
| Information Security and Quality Assurance
.spacer .spacer
.row .row
.col-xs-12.col-sm-6.col-sm-offset-3 .col-xs-12.col-sm-6.col-sm-offset-3

View File

@ -1,7 +1,10 @@
Camper <%= username %> has completed all three certifications! Camper <%= username %> has completed all six certifications!
Completed front end cert on <%= frontEndDate %>. Completed Responsive Web Design Certification on <%= responsiveWebDesignDate %>.
Completed data vis cert on <%= dataVisDate %>. Completed Front End Libraries Certification on <%= frontEndLibrariesDate %>.
Completed back end cert on <%= backEndDate %>. Completed JavaScript Algorithms and Data Structures Certification on <%= javascriptAlgorithmsDataStructuresDate %>.
Completed Data Visualization Certification on <%= dataVisualizationDate %>.
Completed API's and microservices Certification on <%= apisMicroservicesDate %>.
Completed Information Security and Quality Assurance Certification on <%= infosecQADate %>.
https://www.freecodecamp.org/<%= username %> https://www.freecodecamp.org/<%= username %>