fix(challenges): change challengeType to fix help button

This commit is contained in:
Oliver Eyton-Williams
2018-09-05 12:27:29 +02:00
committed by Stuart Taylor
parent 57d5b55d75
commit ddcc661f42
3 changed files with 265 additions and 161 deletions

View File

@ -5,7 +5,8 @@
"helpRoom": "Help", "helpRoom": "Help",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css"
} }
], ],
"challenges": [ "challenges": [
@ -23,19 +24,25 @@
], ],
"tests": [ "tests": [
{ {
"text": "Create a <code>script</code> element making sure it is valid and has a closing tag.", "text":
"testString": "assert(code.match(/<\\/script\\s*>/g) && code.match(/<script(\\sasync|\\sdefer)*(\\s(charset|src|type)\\s*=\\s*[\"\\']+[^\"\\']*[\"\\']+)*(\\sasync|\\sdefer)*\\s*>/g) && code.match(/<\\/script\\s*>/g).length === code.match(/<script(\\sasync|\\sdefer)*(\\s(charset|src|type)\\s*=\\s*[\"\\']+[^\"\\']*[\"\\']+)*(\\sasync|\\sdefer)*\\s*>/g).length, 'Create a <code>script</code> element making sure it is valid and has a closing tag.');" "Create a <code>script</code> element making sure it is valid and has a closing tag.",
"testString":
"assert(code.match(/<\\/script\\s*>/g) && code.match(/<script(\\sasync|\\sdefer)*(\\s(charset|src|type)\\s*=\\s*[\"\\']+[^\"\\']*[\"\\']+)*(\\sasync|\\sdefer)*\\s*>/g) && code.match(/<\\/script\\s*>/g).length === code.match(/<script(\\sasync|\\sdefer)*(\\s(charset|src|type)\\s*=\\s*[\"\\']+[^\"\\']*[\"\\']+)*(\\sasync|\\sdefer)*\\s*>/g).length, 'Create a <code>script</code> element making sure it is valid and has a closing tag.');"
}, },
{ {
"text": "You should add <code>$&#40;document&#41;.ready<wbr>&#40;function&#40;&#41; {</code> to the beginning of your <code>script</code> element.", "text":
"testString": "assert(code.match(/\\$\\s*?\\(\\s*?document\\s*?\\)\\.ready\\s*?\\(\\s*?function\\s*?\\(\\s*?\\)\\s*?\\{/g), 'You should add <code>$&#40;document&#41;.ready<wbr>&#40;function&#40;&#41; {</code> to the beginning of your <code>script</code> element.');" "You should add <code>$&#40;document&#41;.ready<wbr>&#40;function&#40;&#41; {</code> to the beginning of your <code>script</code> element.",
"testString":
"assert(code.match(/\\$\\s*?\\(\\s*?document\\s*?\\)\\.ready\\s*?\\(\\s*?function\\s*?\\(\\s*?\\)\\s*?\\{/g), 'You should add <code>$&#40;document&#41;.ready<wbr>&#40;function&#40;&#41; {</code> to the beginning of your <code>script</code> element.');"
}, },
{ {
"text": "Close your <code>$&#40;document&#41;.ready<wbr>&#40;function&#40;&#41; {</code> function with <code>}&#41;;</code>", "text":
"testString": "assert(code.match(/\\n*?\\s*?\\}\\s*?\\);/g), 'Close your <code>$&#40;document&#41;.ready<wbr>&#40;function&#40;&#41; {</code> function with <code>}&#41;;</code>');" "Close your <code>$&#40;document&#41;.ready<wbr>&#40;function&#40;&#41; {</code> function with <code>}&#41;;</code>",
"testString":
"assert(code.match(/\\n*?\\s*?\\}\\s*?\\);/g), 'Close your <code>$&#40;document&#41;.ready<wbr>&#40;function&#40;&#41; {</code> function with <code>}&#41;;</code>');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Lerne, wie Script Tags und Document Ready funktionieren", "title": "Lerne, wie Script Tags und Document Ready funktionieren",
@ -50,7 +57,8 @@
] ]
}, },
"es": { "es": {
"title": "Aprende cómo funcionan las etiquetas de programa y la función de documento listo.", "title":
"Aprende cómo funcionan las etiquetas de programa y la función de documento listo.",
"description": [ "description": [
"Ahora estamos listos para aprender jQuery, la herramienta de JavaScript más popular de todos los tiempos. No te preocupes por JavaScript en si --lo cubriremos pronto.", "Ahora estamos listos para aprender jQuery, la herramienta de JavaScript más popular de todos los tiempos. No te preocupes por JavaScript en si --lo cubriremos pronto.",
"Antes de que podamos comenzar a usar jQuery, tenemos que añadir algunas cosas a nuestro HTML.", "Antes de que podamos comenzar a usar jQuery, tenemos que añadir algunas cosas a nuestro HTML.",
@ -62,7 +70,8 @@
] ]
}, },
"fr": { "fr": {
"title": "Apprendre comment fonctionnent les balises Script et Document Ready", "title":
"Apprendre comment fonctionnent les balises Script et Document Ready",
"description": [ "description": [
"Nous sommes maintenant prêt à apprendre jQuery, l'outil JavaScript le plus populaire de tout les temps. Ne vous inquiétez pas à propos de JavaScript lui-même, nous y viendrons bientôt.", "Nous sommes maintenant prêt à apprendre jQuery, l'outil JavaScript le plus populaire de tout les temps. Ne vous inquiétez pas à propos de JavaScript lui-même, nous y viendrons bientôt.",
"Avant de pouvoir utiliser jQuery, nous avons besoin d'ajouter certaines choses à notre HTML.", "Avant de pouvoir utiliser jQuery, nous avons besoin d'ajouter certaines choses à notre HTML.",
@ -114,7 +123,8 @@
"title": "Target HTML Elements with Selectors Using jQuery", "title": "Target HTML Elements with Selectors Using jQuery",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -127,19 +137,24 @@
], ],
"tests": [ "tests": [
{ {
"text": "Use the jQuery <code>addClass&#40&#41</code> function to give the classes <code>animated</code> and <code>bounce</code> to your <code>button</code> elements.", "text":
"testString": "assert($(\"button\").hasClass(\"animated\") && $(\"button\").hasClass(\"bounce\"), 'Use the jQuery <code>addClass&#40&#41</code> function to give the classes <code>animated</code> and <code>bounce</code> to your <code>button</code> elements.');" "Use the jQuery <code>addClass&#40&#41</code> function to give the classes <code>animated</code> and <code>bounce</code> to your <code>button</code> elements.",
"testString":
"assert($(\"button\").hasClass(\"animated\") && $(\"button\").hasClass(\"bounce\"), 'Use the jQuery <code>addClass&#40&#41</code> function to give the classes <code>animated</code> and <code>bounce</code> to your <code>button</code> elements.');"
}, },
{ {
"text": "Only use jQuery to add these colors to the element.", "text": "Only use jQuery to add these colors to the element.",
"testString": "assert(!code.match(/class.*animated/g), 'Only use jQuery to add these colors to the element.');" "testString":
"assert(!code.match(/class.*animated/g), 'Only use jQuery to add these colors to the element.');"
}, },
{ {
"text": "Your jQuery code should be within the <code>$(document).ready();</code> function.", "text":
"testString": "assert(code.match(/\\$\\(document\\)\\.ready\\(function.*(\\s|\\n)*.*button.*.addClass.*\\);/g), 'Your jQuery code should be within the <code>$(document).ready();</code> function.');" "Your jQuery code should be within the <code>$(document).ready();</code> function.",
"testString":
"assert(code.match(/\\$\\(document\\)\\.ready\\(function.*(\\s|\\n)*.*button.*.addClass.*\\);/g), 'Your jQuery code should be within the <code>$(document).ready();</code> function.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "HTML-Elemente mit Selektoren durch jQuery auswählen", "title": "HTML-Elemente mit Selektoren durch jQuery auswählen",
@ -222,7 +237,8 @@
"title": "Target Elements by Class Using jQuery", "title": "Target Elements by Class Using jQuery",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -236,15 +252,18 @@
], ],
"tests": [ "tests": [
{ {
"text": "Use the jQuery <code>addClass&#40&#41</code> function to give the classes <code>animated</code> and <code>shake</code> to all your elements with the class <code>well</code>.", "text":
"testString": "assert($(\".well\").hasClass(\"animated\") && $(\".well\").hasClass(\"shake\"), 'Use the jQuery <code>addClass&#40&#41</code> function to give the classes <code>animated</code> and <code>shake</code> to all your elements with the class <code>well</code>.');" "Use the jQuery <code>addClass&#40&#41</code> function to give the classes <code>animated</code> and <code>shake</code> to all your elements with the class <code>well</code>.",
"testString":
"assert($(\".well\").hasClass(\"animated\") && $(\".well\").hasClass(\"shake\"), 'Use the jQuery <code>addClass&#40&#41</code> function to give the classes <code>animated</code> and <code>shake</code> to all your elements with the class <code>well</code>.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(!code.match(/class\\.\\*animated/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(!code.match(/class\\.\\*animated/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Elemente anhand von Klassen mit jQuery auswählen", "title": "Elemente anhand von Klassen mit jQuery auswählen",
@ -329,7 +348,8 @@
"title": "Target Elements by id Using jQuery", "title": "Target Elements by id Using jQuery",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -342,19 +362,24 @@
], ],
"tests": [ "tests": [
{ {
"text": "Select the <code>button</code> element with the <code>id</code> of <code>target3</code> and use the jQuery <code>addClass&#40&#41</code> function to give it the class of <code>animated</code>.", "text":
"testString": "assert($(\"#target3\").hasClass(\"animated\"), 'Select the <code>button</code> element with the <code>id</code> of <code>target3</code> and use the jQuery <code>addClass&#40&#41</code> function to give it the class of <code>animated</code>.');" "Select the <code>button</code> element with the <code>id</code> of <code>target3</code> and use the jQuery <code>addClass&#40&#41</code> function to give it the class of <code>animated</code>.",
"testString":
"assert($(\"#target3\").hasClass(\"animated\"), 'Select the <code>button</code> element with the <code>id</code> of <code>target3</code> and use the jQuery <code>addClass&#40&#41</code> function to give it the class of <code>animated</code>.');"
}, },
{ {
"text": "Target the element with the id <code>target3</code> and use the jQuery <code>addClass&#40&#41</code> function to give it the class <code>fadeOut</code>.", "text":
"testString": "assert(($(\"#target3\").hasClass(\"fadeOut\") || $(\"#target3\").hasClass(\"fadeout\")) && code.match(/\\$\\(\\s*.#target3.\\s*\\)/g), 'Target the element with the id <code>target3</code> and use the jQuery <code>addClass&#40&#41</code> function to give it the class <code>fadeOut</code>.');" "Target the element with the id <code>target3</code> and use the jQuery <code>addClass&#40&#41</code> function to give it the class <code>fadeOut</code>.",
"testString":
"assert(($(\"#target3\").hasClass(\"fadeOut\") || $(\"#target3\").hasClass(\"fadeout\")) && code.match(/\\$\\(\\s*.#target3.\\s*\\)/g), 'Target the element with the id <code>target3</code> and use the jQuery <code>addClass&#40&#41</code> function to give it the class <code>fadeOut</code>.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(!code.match(/class.*animated/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(!code.match(/class.*animated/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Elemente anhand der id mit jQuery auswählen", "title": "Elemente anhand der id mit jQuery auswählen",
@ -438,7 +463,8 @@
"title": "Delete Your jQuery Functions", "title": "Delete Your jQuery Functions",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -447,27 +473,35 @@
], ],
"tests": [ "tests": [
{ {
"text": "Delete all three of your jQuery functions from your <code>document ready function</code>.", "text":
"testString": "assert(code.match(/\\{\\s*\\}\\);/g), 'Delete all three of your jQuery functions from your <code>document ready function</code>.');" "Delete all three of your jQuery functions from your <code>document ready function</code>.",
"testString":
"assert(code.match(/\\{\\s*\\}\\);/g), 'Delete all three of your jQuery functions from your <code>document ready function</code>.');"
}, },
{ {
"text": "Leave your <code>script</code> element intact.", "text": "Leave your <code>script</code> element intact.",
"testString": "assert(code.match(/<script>/g), 'Leave your <code>script</code> element intact.');" "testString":
"assert(code.match(/<script>/g), 'Leave your <code>script</code> element intact.');"
}, },
{ {
"text": "Leave your <code>$&#40document&#41.ready&#40function&#40&#41 {</code> to the beginning of your <code>script</code> element.", "text":
"testString": "assert(code.match(/\\$\\(document\\)\\.ready\\(function\\(\\)\\s?\\{/g), 'Leave your <code>$&#40document&#41.ready&#40function&#40&#41 {</code> to the beginning of your <code>script</code> element.');" "Leave your <code>$&#40document&#41.ready&#40function&#40&#41 {</code> to the beginning of your <code>script</code> element.",
"testString":
"assert(code.match(/\\$\\(document\\)\\.ready\\(function\\(\\)\\s?\\{/g), 'Leave your <code>$&#40document&#41.ready&#40function&#40&#41 {</code> to the beginning of your <code>script</code> element.');"
}, },
{ {
"text": "Leave your \"document ready function\" closing <code>&#125;&#41;</code> intact.", "text":
"testString": "assert(code.match(/.*\\s*\\}\\);/g), 'Leave your \"document ready function\" closing <code>&#125;&#41;</code> intact.');" "Leave your \"document ready function\" closing <code>&#125;&#41;</code> intact.",
"testString":
"assert(code.match(/.*\\s*\\}\\);/g), 'Leave your \"document ready function\" closing <code>&#125;&#41;</code> intact.');"
}, },
{ {
"text": "Leave your <code>script</code> element closing tag intact.", "text": "Leave your <code>script</code> element closing tag intact.",
"testString": "assert(code.match(/<\\/script>/g) && code.match(/<script/g) && code.match(/<\\/script>/g).length === code.match(/<script/g).length, 'Leave your <code>script</code> element closing tag intact.');" "testString":
"assert(code.match(/<\\/script>/g) && code.match(/<script/g) && code.match(/<\\/script>/g).length === code.match(/<script/g).length, 'Leave your <code>script</code> element closing tag intact.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Lösche deine jQuery Funktionen", "title": "Lösche deine jQuery Funktionen",
@ -540,7 +574,8 @@
"title": "Target the Same Element with Multiple jQuery Selectors", "title": "Target the Same Element with Multiple jQuery Selectors",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -555,33 +590,41 @@
"tests": [ "tests": [
{ {
"text": "Use the <code>$&#40\"button\"&#41</code> selector.", "text": "Use the <code>$&#40\"button\"&#41</code> selector.",
"testString": "assert(code.match(/\\$\\s*?\\(\\s*?(?:'|\")\\s*?button\\s*?(?:'|\")/gi), 'Use the <code>$&#40\"button\"&#41</code> selector.');" "testString":
"assert(code.match(/\\$\\s*?\\(\\s*?(?:'|\")\\s*?button\\s*?(?:'|\")/gi), 'Use the <code>$&#40\"button\"&#41</code> selector.');"
}, },
{ {
"text": "Use the <code>$&#40\".btn\"&#41</code> selector.", "text": "Use the <code>$&#40\".btn\"&#41</code> selector.",
"testString": "assert(code.match(/\\$\\s*?\\(\\s*?(?:'|\")\\s*?\\.btn\\s*?(?:'|\")/gi), 'Use the <code>$&#40\".btn\"&#41</code> selector.');" "testString":
"assert(code.match(/\\$\\s*?\\(\\s*?(?:'|\")\\s*?\\.btn\\s*?(?:'|\")/gi), 'Use the <code>$&#40\".btn\"&#41</code> selector.');"
}, },
{ {
"text": "Use the <code>$&#40\"#target1\"&#41</code> selector.", "text": "Use the <code>$&#40\"#target1\"&#41</code> selector.",
"testString": "assert(code.match(/\\$\\s*?\\(\\s*?(?:'|\")\\s*?#target1\\s*?(?:'|\")/gi), 'Use the <code>$&#40\"#target1\"&#41</code> selector.');" "testString":
"assert(code.match(/\\$\\s*?\\(\\s*?(?:'|\")\\s*?#target1\\s*?(?:'|\")/gi), 'Use the <code>$&#40\"#target1\"&#41</code> selector.');"
}, },
{ {
"text": "Only add one class with each of your three selectors.", "text": "Only add one class with each of your three selectors.",
"testString": "assert(code.match(/addClass/g) && code.match(/addClass\\s*?\\(\\s*?('|\")\\s*?[\\w-]+\\s*?\\1\\s*?\\)/g).length > 2, 'Only add one class with each of your three selectors.');" "testString":
"assert(code.match(/addClass/g) && code.match(/addClass\\s*?\\(\\s*?('|\")\\s*?[\\w-]+\\s*?\\1\\s*?\\)/g).length > 2, 'Only add one class with each of your three selectors.');"
}, },
{ {
"text": "Your <code>#target1</code> element should have the classes <code>animated</code>&#130; <code>shake</code> and <code>btn-primary</code>.", "text":
"testString": "assert($(\"#target1\").hasClass(\"animated\") && $(\"#target1\").hasClass(\"shake\") && $(\"#target1\").hasClass(\"btn-primary\"), 'Your <code>#target1</code> element should have the classes <code>animated</code>&#130; <code>shake</code> and <code>btn-primary</code>.');" "Your <code>#target1</code> element should have the classes <code>animated</code>&#130; <code>shake</code> and <code>btn-primary</code>.",
"testString":
"assert($(\"#target1\").hasClass(\"animated\") && $(\"#target1\").hasClass(\"shake\") && $(\"#target1\").hasClass(\"btn-primary\"), 'Your <code>#target1</code> element should have the classes <code>animated</code>&#130; <code>shake</code> and <code>btn-primary</code>.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(!code.match(/class.*animated/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(!code.match(/class.*animated/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Wähle das gleiche Element mit mehreren jQuery Selektoren aus", "title":
"Wähle das gleiche Element mit mehreren jQuery Selektoren aus",
"description": [ "description": [
"Bis jetzt kennst du drei verschiedene Wege um Elemente auszuwählen: mit dem Element-Typ: <code>$(\"button\")</code>, mit der Element-Klasse: <code>$(\".btn\")</code>, und der Element-ID: <code>$(\"#target1\")</code>.", "Bis jetzt kennst du drei verschiedene Wege um Elemente auszuwählen: mit dem Element-Typ: <code>$(\"button\")</code>, mit der Element-Klasse: <code>$(\".btn\")</code>, und der Element-ID: <code>$(\"#target1\")</code>.",
"Auch wenn es möglich ist, mehrere Klassen in einem einzigen <code>.addClass()</code> Aufruf hinzuzufügen, lass uns jetzt die Klassen in drei verschiedenen Wegen dem Element hinzufügen.", "Auch wenn es möglich ist, mehrere Klassen in einem einzigen <code>.addClass()</code> Aufruf hinzuzufügen, lass uns jetzt die Klassen in drei verschiedenen Wegen dem Element hinzufügen.",
@ -659,7 +702,8 @@
"title": "Remove Classes from an Element with jQuery", "title": "Remove Classes from an Element with jQuery",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -670,19 +714,23 @@
], ],
"tests": [ "tests": [
{ {
"text": "Remove the <code>btn-default</code> class from all of your <code>button</code> elements.", "text":
"testString": "assert($(\".btn-default\").length === 0, 'Remove the <code>btn-default</code> class from all of your <code>button</code> elements.');" "Remove the <code>btn-default</code> class from all of your <code>button</code> elements.",
"testString":
"assert($(\".btn-default\").length === 0, 'Remove the <code>btn-default</code> class from all of your <code>button</code> elements.');"
}, },
{ {
"text": "Only use jQuery to remove this class from the element.", "text": "Only use jQuery to remove this class from the element.",
"testString": "assert(code.match(/btn btn-default/g), 'Only use jQuery to remove this class from the element.');" "testString":
"assert(code.match(/btn btn-default/g), 'Only use jQuery to remove this class from the element.');"
}, },
{ {
"text": "Only remove the <code>btn-default</code> class.", "text": "Only remove the <code>btn-default</code> class.",
"testString": "assert(code.match(/\\.[\\v\\s]*removeClass[\\s\\v]*\\([\\s\\v]*('|\")\\s*btn-default\\s*('|\")[\\s\\v]*\\)/gm), 'Only remove the <code>btn-default</code> class.');" "testString":
"assert(code.match(/\\.[\\v\\s]*removeClass[\\s\\v]*\\([\\s\\v]*('|\")\\s*btn-default\\s*('|\")[\\s\\v]*\\)/gm), 'Only remove the <code>btn-default</code> class.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Entferne Klassen von einem Element mit jQuery", "title": "Entferne Klassen von einem Element mit jQuery",
@ -761,7 +809,8 @@
"title": "Change the CSS of an Element Using jQuery", "title": "Change the CSS of an Element Using jQuery",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -776,14 +825,16 @@
"tests": [ "tests": [
{ {
"text": "Your <code>target1</code> element should have red text.", "text": "Your <code>target1</code> element should have red text.",
"testString": "assert($(\"#target1\").css(\"color\") === 'rgb(255, 0, 0)', 'Your <code>target1</code> element should have red text.');" "testString":
"assert($(\"#target1\").css(\"color\") === 'rgb(255, 0, 0)', 'Your <code>target1</code> element should have red text.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(!code.match(/class.*animated/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(!code.match(/class.*animated/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Das CSS eines Elements mit jQuery ändern", "title": "Das CSS eines Elements mit jQuery ändern",
@ -881,18 +932,21 @@
"tests": [ "tests": [
{ {
"text": "Disable your <code>target1</code> button.", "text": "Disable your <code>target1</code> button.",
"testString": "assert($(\"#target1\") && $(\"#target1\").prop(\"disabled\") && code.match(/[\"']disabled[\"'],( true|true)/g), 'Disable your <code>target1</code> button.');" "testString":
"assert($(\"#target1\") && $(\"#target1\").prop(\"disabled\") && code.match(/[\"']disabled[\"'],( true|true)/g), 'Disable your <code>target1</code> button.');"
}, },
{ {
"text": "Do not disable any other buttons.", "text": "Do not disable any other buttons.",
"testString": "assert($(\"#target2\") && !$(\"#target2\").prop(\"disabled\"), 'Do not disable any other buttons.');" "testString":
"assert($(\"#target2\") && !$(\"#target2\").prop(\"disabled\"), 'Do not disable any other buttons.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(!code.match(/disabled[^<]*>/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(!code.match(/disabled[^<]*>/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Elemente mit jQuery deaktivieren", "title": "Elemente mit jQuery deaktivieren",
@ -917,7 +971,8 @@
] ]
}, },
"fr": { "fr": {
"title": "Changer le texte à l'intérieur d'un élément en utilisant jQuery", "title":
"Changer le texte à l'intérieur d'un élément en utilisant jQuery",
"description": [ "description": [
"En utilisant jQuery, vous pouvez changer le texte entre les balises ouvrante et fermante d'un élément. Vous pouvez même changer les balises HTML.", "En utilisant jQuery, vous pouvez changer le texte entre les balises ouvrante et fermante d'un élément. Vous pouvez même changer les balises HTML.",
"jQuery dispose d'une fonction appelée <code>.html()</code> qui vous permet d'ajouter des balises HTML et du texte à l'intérieur d'un élément. Tout le contenu de l'élément sera alors remplacé par le contenu que vous indiquerez en utilisant la fonction.", "jQuery dispose d'une fonction appelée <code>.html()</code> qui vous permet d'ajouter des balises HTML et du texte à l'intérieur d'un élément. Tout le contenu de l'élément sera alors remplacé par le contenu que vous indiquerez en utilisant la fonction.",
@ -986,27 +1041,35 @@
"releasedOn": "November 18, 2015", "releasedOn": "November 18, 2015",
"tests": [ "tests": [
{ {
"text": "Emphasize the text in your <code>target4</code> button by adding HTML tags.", "text":
"testString": "assert.isTrue((/<em>|<i>\\s*#target4\\s*<\\/em>|<\\/i>/gi).test($(\"#target4\").html()), 'Emphasize the text in your <code>target4</code> button by adding HTML tags.');" "Emphasize the text in your <code>target4</code> button by adding HTML tags.",
"testString":
"assert.isTrue((/<em>|<i>\\s*#target4\\s*<\\/em>|<\\/i>/gi).test($(\"#target4\").html()), 'Emphasize the text in your <code>target4</code> button by adding HTML tags.');"
}, },
{ {
"text": "Make sure the text is otherwise unchanged.", "text": "Make sure the text is otherwise unchanged.",
"testString": "assert($(\"#target4\") && $(\"#target4\").text().trim() === '#target4', 'Make sure the text is otherwise unchanged.');" "testString":
"assert($(\"#target4\") && $(\"#target4\").text().trim() === '#target4', 'Make sure the text is otherwise unchanged.');"
}, },
{ {
"text": "Do not alter any other text.", "text": "Do not alter any other text.",
"testString": "assert.isFalse((/<em>|<i>/gi).test($(\"h3\").html()), 'Do not alter any other text.');" "testString":
"assert.isFalse((/<em>|<i>/gi).test($(\"h3\").html()), 'Do not alter any other text.');"
}, },
{ {
"text": "Make sure you are using <code>.html()</code> and not <code>.text()</code>.", "text":
"testString": "assert(code.match(/\\.html\\(/g), 'Make sure you are using <code>.html()</code> and not <code>.text()</code>.');" "Make sure you are using <code>.html()</code> and not <code>.text()</code>.",
"testString":
"assert(code.match(/\\.html\\(/g), 'Make sure you are using <code>.html()</code> and not <code>.text()</code>.');"
}, },
{ {
"text": "Make sure to select <code>button id=\"target4\"</code> with jQuery.", "text":
"testString": "assert(code.match(/\\$\\(\\s*?(\\\"|\\')#target4(\\\"|\\')\\s*?\\)\\.html\\(/), 'Make sure to select <code>button id=\"target4\"</code> with jQuery.');" "Make sure to select <code>button id=\"target4\"</code> with jQuery.",
"testString":
"assert(code.match(/\\$\\(\\s*?(\\\"|\\')#target4(\\\"|\\')\\s*?\\)\\.html\\(/), 'Make sure to select <code>button id=\"target4\"</code> with jQuery.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Ändere den Text innerhalb eines Elements mit jQuery", "title": "Ändere den Text innerhalb eines Elements mit jQuery",
@ -1083,15 +1146,18 @@
], ],
"tests": [ "tests": [
{ {
"text": "Use jQuery to remove your <code>target4</code> element from your page.", "text":
"testString": "assert($(\"#target4\").length === 0 && code.match(/\\$\\([\"']#target4[\"']\\).remove\\(\\)/g), 'Use jQuery to remove your <code>target4</code> element from your page.');" "Use jQuery to remove your <code>target4</code> element from your page.",
"testString":
"assert($(\"#target4\").length === 0 && code.match(/\\$\\([\"']#target4[\"']\\).remove\\(\\)/g), 'Use jQuery to remove your <code>target4</code> element from your page.');"
}, },
{ {
"text": "Only use jQuery to remove this element.", "text": "Only use jQuery to remove this element.",
"testString": "assert(code.match(/id=\"target4/g) && !code.match(/<!--.*id=\"target4\".*-->/g) && $(\"#right-well\").length > 0, 'Only use jQuery to remove this element.');" "testString":
"assert(code.match(/id=\"target4/g) && !code.match(/<!--.*id=\"target4\".*-->/g) && $(\"#right-well\").length > 0, 'Only use jQuery to remove this element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Entferne ein Element mit jQuery", "title": "Entferne ein Element mit jQuery",
@ -1165,19 +1231,24 @@
], ],
"tests": [ "tests": [
{ {
"text": "Your <code>target2</code> element should not be inside your <code>left-well</code>.", "text":
"testString": "assert($(\"#left-well\").children(\"#target2\").length === 0, 'Your <code>target2</code> element should not be inside your <code>left-well</code>.');" "Your <code>target2</code> element should not be inside your <code>left-well</code>.",
"testString":
"assert($(\"#left-well\").children(\"#target2\").length === 0, 'Your <code>target2</code> element should not be inside your <code>left-well</code>.');"
}, },
{ {
"text": "Your <code>target2</code> element should be inside your <code>right-well</code>.", "text":
"testString": "assert($(\"#right-well\").children(\"#target2\").length > 0, 'Your <code>target2</code> element should be inside your <code>right-well</code>.');" "Your <code>target2</code> element should be inside your <code>right-well</code>.",
"testString":
"assert($(\"#right-well\").children(\"#target2\").length > 0, 'Your <code>target2</code> element should be inside your <code>right-well</code>.');"
}, },
{ {
"text": "Only use jQuery to move these elements.", "text": "Only use jQuery to move these elements.",
"testString": "assert(!code.match(/class.*animated/g), 'Only use jQuery to move these elements.');" "testString":
"assert(!code.match(/class.*animated/g), 'Only use jQuery to move these elements.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Verwende appendTo um Elemente mit jQuery zu verschieben.", "title": "Verwende appendTo um Elemente mit jQuery zu verschieben.",
@ -1257,19 +1328,24 @@
], ],
"tests": [ "tests": [
{ {
"text": "Your <code>target5</code> element should be inside your <code>right-well</code>.", "text":
"testString": "assert($(\"#right-well\").children(\"#target5\").length > 0, 'Your <code>target5</code> element should be inside your <code>right-well</code>.');" "Your <code>target5</code> element should be inside your <code>right-well</code>.",
"testString":
"assert($(\"#right-well\").children(\"#target5\").length > 0, 'Your <code>target5</code> element should be inside your <code>right-well</code>.');"
}, },
{ {
"text": "A copy of your <code>target5</code> element should also be inside your <code>left-well</code>.", "text":
"testString": "assert($(\"#left-well\").children(\"#target5\").length > 0, 'A copy of your <code>target5</code> element should also be inside your <code>left-well</code>.');" "A copy of your <code>target5</code> element should also be inside your <code>left-well</code>.",
"testString":
"assert($(\"#left-well\").children(\"#target5\").length > 0, 'A copy of your <code>target5</code> element should also be inside your <code>left-well</code>.');"
}, },
{ {
"text": "Only use jQuery to move these elements.", "text": "Only use jQuery to move these elements.",
"testString": "assert(!code.match(/class.*animated/g), 'Only use jQuery to move these elements.');" "testString":
"assert(!code.match(/class.*animated/g), 'Only use jQuery to move these elements.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Ein Element kopieren mit jQuery", "title": "Ein Element kopieren mit jQuery",
@ -1352,23 +1428,30 @@
], ],
"tests": [ "tests": [
{ {
"text": "Your <code>left-well</code> element should have a red background.", "text":
"testString": "assert($(\"#left-well\").css(\"background-color\") === 'red' || $(\"#left-well\").css(\"background-color\") === 'rgb(255, 0, 0)' || $(\"#left-well\").css(\"background-color\").toLowerCase() === '#ff0000' || $(\"#left-well\").css(\"background-color\").toLowerCase() === '#f00', 'Your <code>left-well</code> element should have a red background.');" "Your <code>left-well</code> element should have a red background.",
"testString":
"assert($(\"#left-well\").css(\"background-color\") === 'red' || $(\"#left-well\").css(\"background-color\") === 'rgb(255, 0, 0)' || $(\"#left-well\").css(\"background-color\").toLowerCase() === '#ff0000' || $(\"#left-well\").css(\"background-color\").toLowerCase() === '#f00', 'Your <code>left-well</code> element should have a red background.');"
}, },
{ {
"text": "You should use the <code>&#46;parent&#40;&#41;</code> function to modify this element.", "text":
"testString": "assert(code.match(/\\.parent\\s*\\(\\s*\\)\\s*\\.css/g), 'You should use the <code>&#46;parent&#40;&#41;</code> function to modify this element.');" "You should use the <code>&#46;parent&#40;&#41;</code> function to modify this element.",
"testString":
"assert(code.match(/\\.parent\\s*\\(\\s*\\)\\s*\\.css/g), 'You should use the <code>&#46;parent&#40;&#41;</code> function to modify this element.');"
}, },
{ {
"text": "The <code>&#46;parent&#40;&#41;</code> method should be called on the <code>&#35;target1</code> element.", "text":
"testString": "assert(code.match(/\\$\\s*?\\(\\s*?(?:'|\")\\s*?#target1\\s*?(?:'|\")\\s*?\\)\\s*?\\.parent/gi), 'The <code>&#46;parent&#40;&#41;</code> method should be called on the <code>&#35;target1</code> element.');" "The <code>&#46;parent&#40;&#41;</code> method should be called on the <code>&#35;target1</code> element.",
"testString":
"assert(code.match(/\\$\\s*?\\(\\s*?(?:'|\")\\s*?#target1\\s*?(?:'|\")\\s*?\\)\\s*?\\.parent/gi), 'The <code>&#46;parent&#40;&#41;</code> method should be called on the <code>&#35;target1</code> element.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(code.match(/<div class=\"well\" id=\"left-well\">/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(code.match(/<div class=\"well\" id=\"left-well\">/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Wähle das Eltern-Element mit jQuery aus", "title": "Wähle das Eltern-Element mit jQuery aus",
@ -1454,19 +1537,24 @@
], ],
"tests": [ "tests": [
{ {
"text": "All children of <code>#right-well</code> should have orange text.", "text":
"testString": "assert($(\"#right-well\").children().css(\"color\") === 'rgb(255, 165, 0)', 'All children of <code>#right-well</code> should have orange text.');" "All children of <code>#right-well</code> should have orange text.",
"testString":
"assert($(\"#right-well\").children().css(\"color\") === 'rgb(255, 165, 0)', 'All children of <code>#right-well</code> should have orange text.');"
}, },
{ {
"text": "You should use the <code>children&#40&#41</code> function to modify these elements.", "text":
"testString": "assert(code.match(/\\.children\\(\\)\\.css/g), 'You should use the <code>children&#40&#41</code> function to modify these elements.');" "You should use the <code>children&#40&#41</code> function to modify these elements.",
"testString":
"assert(code.match(/\\.children\\(\\)\\.css/g), 'You should use the <code>children&#40&#41</code> function to modify these elements.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(code.match(/<div class=\"well\" id=\"right-well\">/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(code.match(/<div class=\"well\" id=\"right-well\">/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Wähle Kinder-Elemente mit jQuery aus", "title": "Wähle Kinder-Elemente mit jQuery aus",
@ -1543,7 +1631,8 @@
"title": "Target a Specific Child of an Element Using jQuery", "title": "Target a Specific Child of an Element Using jQuery",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -1556,23 +1645,29 @@
], ],
"tests": [ "tests": [
{ {
"text": "The second element in your <code>target</code> elements should bounce.", "text":
"testString": "assert($(\".target:nth-child(2)\").hasClass(\"animated\") && $(\".target:nth-child(2)\").hasClass(\"bounce\"), 'The second element in your <code>target</code> elements should bounce.');" "The second element in your <code>target</code> elements should bounce.",
"testString":
"assert($(\".target:nth-child(2)\").hasClass(\"animated\") && $(\".target:nth-child(2)\").hasClass(\"bounce\"), 'The second element in your <code>target</code> elements should bounce.');"
}, },
{ {
"text": "Only two elements should bounce.", "text": "Only two elements should bounce.",
"testString": "assert($(\".animated.bounce\").length === 2, 'Only two elements should bounce.');" "testString":
"assert($(\".animated.bounce\").length === 2, 'Only two elements should bounce.');"
}, },
{ {
"text": "You should use the <code>&#58;nth-child&#40&#41</code> selector to modify these elements.", "text":
"testString": "assert(code.match(/\\:nth-child\\(/g), 'You should use the <code>&#58;nth-child&#40&#41</code> selector to modify these elements.');" "You should use the <code>&#58;nth-child&#40&#41</code> selector to modify these elements.",
"testString":
"assert(code.match(/\\:nth-child\\(/g), 'You should use the <code>&#58;nth-child&#40&#41</code> selector to modify these elements.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(code.match(/\\$\\(\".target:nth-child\\(2\\)\"\\)/g) || code.match(/\\$\\('.target:nth-child\\(2\\)'\\)/g) || code.match(/\\$\\(\".target\"\\).filter\\(\":nth-child\\(2\\)\"\\)/g) || code.match(/\\$\\('.target'\\).filter\\(':nth-child\\(2\\)'\\)/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(code.match(/\\$\\(\".target:nth-child\\(2\\)\"\\)/g) || code.match(/\\$\\('.target:nth-child\\(2\\)'\\)/g) || code.match(/\\$\\(\".target\"\\).filter\\(\":nth-child\\(2\\)\"\\)/g) || code.match(/\\$\\('.target'\\).filter\\(':nth-child\\(2\\)'\\)/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Wähle ein spezifisches Kinder-Element mit jQuery aus", "title": "Wähle ein spezifisches Kinder-Element mit jQuery aus",
@ -1650,7 +1745,8 @@
"title": "Target Even Elements Using jQuery", "title": "Target Even Elements Using jQuery",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -1662,19 +1758,24 @@
], ],
"tests": [ "tests": [
{ {
"text": "All of the <code>target</code> elements that jQuery considers to be even should shake.", "text":
"testString": "assert($('.target:even').hasClass('animated') && $('.target:even').hasClass('shake'), 'All of the <code>target</code> elements that jQuery considers to be even should shake.');" "All of the <code>target</code> elements that jQuery considers to be even should shake.",
"testString":
"assert($('.target:even').hasClass('animated') && $('.target:even').hasClass('shake'), 'All of the <code>target</code> elements that jQuery considers to be even should shake.');"
}, },
{ {
"text": "You should use the <code>&#58;even</code> selector to modify these elements.", "text":
"testString": "assert(code.match(/\\:even/g), 'You should use the <code>&#58;even</code> selector to modify these elements.');" "You should use the <code>&#58;even</code> selector to modify these elements.",
"testString":
"assert(code.match(/\\:even/g), 'You should use the <code>&#58;even</code> selector to modify these elements.');"
}, },
{ {
"text": "Only use jQuery to add these classes to the element.", "text": "Only use jQuery to add these classes to the element.",
"testString": "assert(code.match(/\\$\\(\".target:even\"\\)/g) || code.match(/\\$\\('.target:even'\\)/g) || code.match(/\\$\\(\".target\"\\).filter\\(\":even\"\\)/g) || code.match(/\\$\\('.target'\\).filter\\(':even'\\)/g), 'Only use jQuery to add these classes to the element.');" "testString":
"assert(code.match(/\\$\\(\".target:even\"\\)/g) || code.match(/\\$\\('.target:even'\\)/g) || code.match(/\\$\\(\".target\"\\).filter\\(\":even\"\\)/g) || code.match(/\\$\\('.target'\\).filter\\(':even'\\)/g), 'Only use jQuery to add these classes to the element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Wähle gerade Zahlen mit jQuery aus", "title": "Wähle gerade Zahlen mit jQuery aus",
@ -1751,7 +1852,8 @@
"title": "Use jQuery to Modify the Entire Page", "title": "Use jQuery to Modify the Entire Page",
"required": [ "required": [
{ {
"link": "https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css" "link":
"https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.2.0/animate.css"
} }
], ],
"description": [ "description": [
@ -1762,11 +1864,13 @@
], ],
"tests": [ "tests": [
{ {
"text": "Add the classes <code>animated</code> and <code>hinge</code> to your <code>body</code> element.", "text":
"testString": "assert($('body').hasClass('animated') && $('body').hasClass('hinge'), 'Add the classes <code>animated</code> and <code>hinge</code> to your <code>body</code> element.');" "Add the classes <code>animated</code> and <code>hinge</code> to your <code>body</code> element.",
"testString":
"assert($('body').hasClass('animated') && $('body').hasClass('hinge'), 'Add the classes <code>animated</code> and <code>hinge</code> to your <code>body</code> element.');"
} }
], ],
"challengeType": 0, "challengeType": 6,
"translations": { "translations": {
"de": { "de": {
"title": "Mit jQuery die gesamte Seite modifizieren", "title": "Mit jQuery die gesamte Seite modifizieren",
@ -1839,4 +1943,4 @@
} }
} }
] ]
} }

View File

@ -63,7 +63,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -122,7 +122,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -195,7 +195,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -289,7 +289,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -349,7 +349,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -455,7 +455,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -516,7 +516,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -629,7 +629,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -742,7 +742,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -821,7 +821,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -906,7 +906,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -979,7 +979,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1095,7 +1095,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1211,7 +1211,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1330,7 +1330,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1396,7 +1396,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1512,7 +1512,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1589,7 +1589,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1664,7 +1664,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1798,7 +1798,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -1880,7 +1880,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -2015,7 +2015,7 @@
"The cy attribute should be the second number of the data point array subtracted from the height of the SVG." "The cy attribute should be the second number of the data point array subtracted from the height of the SVG."
], ],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -2150,7 +2150,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -2247,7 +2247,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -2327,7 +2327,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -2392,7 +2392,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -2461,7 +2461,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -2667,7 +2667,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -2780,7 +2780,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {

View File

@ -37,7 +37,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -116,7 +116,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -233,7 +233,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -320,7 +320,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -424,7 +424,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -514,7 +514,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -606,7 +606,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -723,7 +723,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {
@ -800,7 +800,7 @@
"solutions": [], "solutions": [],
"hints": [], "hints": [],
"releasedOn": "Feb 17, 2017", "releasedOn": "Feb 17, 2017",
"challengeType": 0, "challengeType": 6,
"translations": {}, "translations": {},
"files": { "files": {
"indexhtml": { "indexhtml": {