refactor(seed): Add link to guide

Partially #16388
This commit is contained in:
Irina Brennen
2018-01-07 18:01:01 -06:00
parent 0fb132e28a
commit c7a898bed7
10 changed files with 68 additions and 24 deletions

View File

@ -47,7 +47,7 @@ const mapStateToProps = createSelector(
hintIndexSelector, hintIndexSelector,
codeLockedSelector, codeLockedSelector,
( (
{ description }, { description, guideUrl },
{ title }, { title },
tests, tests,
output, output,
@ -55,6 +55,7 @@ const mapStateToProps = createSelector(
isCodeLocked, isCodeLocked,
) => ({ ) => ({
title, title,
guideUrl,
description, description,
tests, tests,
output, output,
@ -64,6 +65,7 @@ const mapStateToProps = createSelector(
const propTypes = { const propTypes = {
description: PropTypes.arrayOf(PropTypes.string), description: PropTypes.arrayOf(PropTypes.string),
executeChallenge: PropTypes.func, executeChallenge: PropTypes.func,
guideUrl: PropTypes.string,
hint: PropTypes.string, hint: PropTypes.string,
isCodeLocked: PropTypes.bool, isCodeLocked: PropTypes.bool,
makeToast: PropTypes.func, makeToast: PropTypes.func,
@ -127,7 +129,8 @@ export class SidePanel extends PureComponent {
openBugModal, openBugModal,
openHelpModal, openHelpModal,
isCodeLocked, isCodeLocked,
unlockUntrustedCode unlockUntrustedCode,
guideUrl
} = this.props; } = this.props;
return ( return (
<div <div
@ -146,6 +149,7 @@ export class SidePanel extends PureComponent {
</div> </div>
<ToolPanel <ToolPanel
executeChallenge={ executeChallenge } executeChallenge={ executeChallenge }
guideUrl={ guideUrl }
hint={ hint } hint={ hint }
isCodeLocked={ isCodeLocked } isCodeLocked={ isCodeLocked }
makeToast={ makeToast } makeToast={ makeToast }

View File

@ -12,6 +12,7 @@ const unlockWarning = (
const propTypes = { const propTypes = {
executeChallenge: PropTypes.func.isRequired, executeChallenge: PropTypes.func.isRequired,
guideUrl: PropTypes.string,
hint: PropTypes.string, hint: PropTypes.string,
isCodeLocked: PropTypes.bool, isCodeLocked: PropTypes.bool,
makeToast: PropTypes.func.isRequired, makeToast: PropTypes.func.isRequired,
@ -93,6 +94,7 @@ export default class ToolPanel extends PureComponent {
render() { render() {
const { const {
executeChallenge, executeChallenge,
guideUrl,
hint, hint,
isCodeLocked, isCodeLocked,
openBugModal, openBugModal,
@ -129,6 +131,20 @@ export default class ToolPanel extends PureComponent {
Get Help Get Help
</Button> </Button>
<div className='button-spacer' /> <div className='button-spacer' />
{guideUrl &&
<div>
<Button
block={ true }
bsStyle='primary'
className='btn-big'
href={ guideUrl }
target='_blank'
>
See Guide
</Button>
<div className='button-spacer' />
</div>
}
<Button <Button
block={ true } block={ true }
bsStyle='primary' bsStyle='primary'

View File

@ -237,7 +237,6 @@ export const challengeMetaSelector = createSelector(
const title = blockName && challenge.title ? const title = blockName && challenge.title ?
`${blockName}: ${challenge.title}` : `${blockName}: ${challenge.title}` :
challenge.title; challenge.title;
return { return {
type, type,
title, title,

View File

@ -110,6 +110,10 @@
"type": "object", "type": "object",
"default": "{}" "default": "{}"
}, },
"guideUrl" : {
"type": "string",
"description": "Used to link to an article in the FCC guide"
},
"required": { "required": {
"type": [ "type": [
{ {

View File

@ -57,7 +57,8 @@
"type": "waypoint", "type": "waypoint",
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 0,
"translations": {} "translations": {},
"guideUrl": "https://guide.freecodecamp.org/certificates/add-alt-text-to-an-image-for-accessibility"
}, },
{ {
"id": "587d774c367417b2b2512a9d", "id": "587d774c367417b2b2512a9d",

View File

@ -1168,7 +1168,8 @@
"<code>&lt;img class=\"class1 class2\"&gt;</code>" "<code>&lt;img class=\"class1 class2\"&gt;</code>"
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/add-borders-around-your-elements"
}, },
{ {
"id": "bad87fee1348bd9aedf08814", "id": "bad87fee1348bd9aedf08814",
@ -1281,7 +1282,8 @@
"Внимание: это задание подразумевает наличие нескольких возможных решений. Например, вы можете добавить <code>border-radius</code> как к классу <code>.thick-green-border</code>, так и к классу <code>.smaller-image</code>." "Внимание: это задание подразумевает наличие нескольких возможных решений. Например, вы можете добавить <code>border-radius</code> как к классу <code>.thick-green-border</code>, так и к классу <code>.smaller-image</code>."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/add-rounded-corners-a-border-radius"
}, },
{ {
"id": "bad87fee1348bd9aedf08815", "id": "bad87fee1348bd9aedf08815",
@ -1884,7 +1886,8 @@
"Измените значение свойства <code>padding</code> вашего зелёного прямоугольника, чтобы он был равен соответствующему значению красного прямоугольника." "Измените значение свойства <code>padding</code> вашего зелёного прямоугольника, чтобы он был равен соответствующему значению красного прямоугольника."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/adjust-the-padding-of-an-element"
}, },
{ {
"id": "bad87fee1348bd9aedf08822", "id": "bad87fee1348bd9aedf08822",
@ -1980,7 +1983,8 @@
"Измените значение отступа <code>margin</code> зелёного прямоугольника так, чтобы оно равнялось соответствующему значению красного прямоугольника." "Измените значение отступа <code>margin</code> зелёного прямоугольника так, чтобы оно равнялось соответствующему значению красного прямоугольника."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/adjust-the-margin-of-an-element"
}, },
{ {
"id": "bad87fee1348bd9aedf08823", "id": "bad87fee1348bd9aedf08823",
@ -2075,7 +2079,8 @@
"Измените значение свойства <code>margin</code> зелёного прямоугольника на <code>-15px</code>, таким образом он занимает всю ширину окружающего жёлтого прямоугольника." "Измените значение свойства <code>margin</code> зелёного прямоугольника на <code>-15px</code>, таким образом он занимает всю ширину окружающего жёлтого прямоугольника."
] ]
} }
} },
"guideUrl": "https://guide.freecodecamp.org/certificates/add-a-negative-margin-to-an-element"
}, },
{ {
"id": "bad87fee1348bd9aedf08824", "id": "bad87fee1348bd9aedf08824",
@ -2169,7 +2174,8 @@
"Присвойте зелёному прямоугольнику <code>padding</code> равный <code>40px</code> сверху и слева, но только <code>20px</code> снизу и справа." "Присвойте зелёному прямоугольнику <code>padding</code> равный <code>40px</code> сверху и слева, но только <code>20px</code> снизу и справа."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/add-different-padding-to-each-side-of-an-element"
}, },
{ {
"id": "bad87fee1248bd9aedf08824", "id": "bad87fee1248bd9aedf08824",

View File

@ -700,7 +700,8 @@
"<code>https://bit.ly/fcc-relaxing-cat</code>" "<code>https://bit.ly/fcc-relaxing-cat</code>"
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/add-images-to-your-website"
}, },
{ {
"id": "bad87fee1348bd9aedf08816", "id": "bad87fee1348bd9aedf08816",
@ -1503,7 +1504,8 @@
"Установите значение атрибута <code>placeholder</code> вашего текстового поля <code>input</code> равными \"cat photo URL\"." "Установите значение атрибута <code>placeholder</code> вашего текстового поля <code>input</code> равными \"cat photo URL\"."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/add-placeholder-text-to-a-text-field"
}, },
{ {
"id": "bad87fee1348bd9aede08830", "id": "bad87fee1348bd9aede08830",
@ -1670,7 +1672,8 @@
"Добавьте кнопку отправки к вашему элементу <code>form</code> с указанием типа <code>submit</code> и \"Submit\" в качестве отображаемого текста." "Добавьте кнопку отправки к вашему элементу <code>form</code> с указанием типа <code>submit</code> и \"Submit\" в качестве отображаемого текста."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/add-a-submit-button-to-a-form"
}, },
{ {
"id": "bad87fee1348bd9aedc08830", "id": "bad87fee1348bd9aedc08830",

View File

@ -1393,7 +1393,8 @@
"Asigna <code>someAdjective</code> y anexalo a <code>myStr</code> usando el operador <code>+=</code>." "Asigna <code>someAdjective</code> y anexalo a <code>myStr</code> usando el operador <code>+=</code>."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/appending-variables-to-strings"
}, },
{ {
"id": "bd7123c9c448eddfaeb5bdef", "id": "bd7123c9c448eddfaeb5bdef",
@ -1875,7 +1876,8 @@
"Crea una variable llamada <code>myData</ code> y asignale el primer valor del vector <code>myArray</code>." "Crea una variable llamada <code>myData</ code> y asignale el primer valor del vector <code>myArray</code>."
] ]
} }
} },
"guideUrl": "https://guide.freecodecamp.org/certificates/access-array-data-with-indexes"
}, },
{ {
"id": "cf1111c1c11feddfaeb8bdef", "id": "cf1111c1c11feddfaeb8bdef",
@ -1969,7 +1971,8 @@
"Lee de <code>myArray</code> usando la notación corchete de modo que myData sea igual a <code>8</code>" "Lee de <code>myArray</code> usando la notación corchete de modo que myData sea igual a <code>8</code>"
] ]
} }
} },
"guideUrl": "https://guide.freecodecamp.org/certificates/access-array-data-with-indexes"
}, },
{ {
"id": "56bbb991ad1ed5201cd392cb", "id": "56bbb991ad1ed5201cd392cb",
@ -2756,7 +2759,8 @@
"Llama la función <code>processArg</code> con un argumento <code>7</code> y asigna su valor de retorno a la variable <code>processed</code>." "Llama la función <code>processArg</code> con un argumento <code>7</code> y asigna su valor de retorno a la variable <code>processed</code>."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/assignment-with-a-returned-value"
}, },
{ {
"id": "56533eb9ac21ba0edf2244c6", "id": "56533eb9ac21ba0edf2244c6",
@ -3927,7 +3931,8 @@
"Escribe una sentencia switch para establecer <code>answer</code> para las siguientes condiciones:<br><code>\"a\"</code> - \"apple\"<br><code>\"b\"</code> - \"bird\"<br><code>\"c\"</code> - \"cat\"<br><code>default</code> - \"stuff\"" "Escribe una sentencia switch para establecer <code>answer</code> para las siguientes condiciones:<br><code>\"a\"</code> - \"apple\"<br><code>\"b\"</code> - \"bird\"<br><code>\"c\"</code> - \"cat\"<br><code>default</code> - \"stuff\""
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/adding-a-default-option-in-switch-statements"
}, },
{ {
"id": "56533eb9ac21ba0edf2244df", "id": "56533eb9ac21ba0edf2244df",
@ -4399,7 +4404,8 @@
"Lee los valores de las propiedades <code>\"an entree\"</code> y <code>\"the drink\"</code> de <code>testObj</code> usando la notación corchete." "Lee los valores de las propiedades <code>\"an entree\"</code> y <code>\"the drink\"</code> de <code>testObj</code> usando la notación corchete."
] ]
} }
} },
"guideUrl": "https://guide.freecodecamp.org/certificates/accessing-objects-properties-with-bracket-notation"
}, },
{ {
"id": "56533eb9ac21ba0edf2244c9", "id": "56533eb9ac21ba0edf2244c9",
@ -4458,7 +4464,8 @@
"Usa la variable <code>playerNumber</code> para buscar y asignar a <code>player</code> el jugador <code>16</code> de <code>testObj</code>, usa la notación corchete." "Usa la variable <code>playerNumber</code> para buscar y asignar a <code>player</code> el jugador <code>16</code> de <code>testObj</code>, usa la notación corchete."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/accessing-objects-properties-with-variables"
}, },
{ {
"id": "56bbb991ad1ed5201cd392d1", "id": "56bbb991ad1ed5201cd392d1",
@ -4899,7 +4906,8 @@
"Accede al objeto <code>myStorage</code> para recuperar el contenido de <code>glove box</code>. Usa notación corchete para las propiedades con un espacio en su nombre." "Accede al objeto <code>myStorage</code> para recuperar el contenido de <code>glove box</code>. Usa notación corchete para las propiedades con un espacio en su nombre."
] ]
} }
} },
"urlGuide":"https://guide.freecodecamp.org/certificates/accessing-nested-objects-in-json"
}, },
{ {
"id": "56533eb9ac21ba0edf2244cd", "id": "56533eb9ac21ba0edf2244cd",
@ -4966,7 +4974,8 @@
"Recupera el segundo arbol de la variable <code>myPlants</code> usando notación punto para objetos y notación corchete para vectores." "Recupera el segundo arbol de la variable <code>myPlants</code> usando notación punto para objetos y notación corchete para vectores."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/access-array-data-with-indexes"
}, },
{ {
"id": "56533eb9ac21ba0edf2244cf", "id": "56533eb9ac21ba0edf2244cf",

View File

@ -1055,7 +1055,8 @@
"N'oublie pas d'utiliser <a href='http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514' target='_blank'>Lire-Chercher-Demander</a> si tu es bloqué. Essaye de trouver un partenaire. Écris ton propre code." "N'oublie pas d'utiliser <a href='http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514' target='_blank'>Lire-Chercher-Demander</a> si tu es bloqué. Essaye de trouver un partenaire. Écris ton propre code."
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/arguments-optional"
}, },
{ {
"id": "a2f1d72d9b908d0bd72bb9f6", "id": "a2f1d72d9b908d0bd72bb9f6",

View File

@ -2188,7 +2188,8 @@
"Appliquez les deux classes <code>btn</code> et <code>btn-default</code> à chacun de vos éléments <code>button</code>" "Appliquez les deux classes <code>btn</code> et <code>btn-default</code> à chacun de vos éléments <code>button</code>"
] ]
} }
} },
"guideUrl":"https://guide.freecodecamp.org/certificates/apply-the-default-bootstrap-button-style"
}, },
{ {
"id": "bad87fee1348bd9aec908852", "id": "bad87fee1348bd9aec908852",