jiebi/CodeConvo huggingface dataset:
"</div>" ], "challengeType": 0, <del> "type": "waypoint" </del> <ins> "type": "waypoint", "nameEs": "Obtén JSON con el método getJSON de jQuery", "descriptionEs": [ "También puedes solicitar los datos de una fuente externa. Aquí es donde entran en juego las API. ", "Recuerda que las API - o interfaces de programación de aplicaciones - son herramientas que utilizan los ordenadores para comunicarse entre sí.", "La mayoría de las API para el web transfieren datos en un formato llamado JSON. JSON significa notación de objeto JavaScript (<em>JavaScript Object Notation</em>).", "Tú ya has usado JSON al crear objetos en JavaScript. JSON no es más que las propiedades del objeto y sus valores actuales, intercalados entre un <code>{</code> y un <code>}</code>. ", "Estas propiedades y sus valores a menudo se denominan " pares llave-valor".", "Vamos a obtener el JSON de la API de fotos de gato de Free Code Camp.", "Aquí está el código que puedes poner en tu evento de pulsación para lograrlo:", "<code>&nbsp;&nbsp;$.getJSON("/json/cats.json", function(json) {</code>", "<code>&nbsp;&nbsp;&nbsp;&nbsp;$(".message").html(JSON.stringify(json));</code>", "<code>&nbsp;&nbsp;});</code>", "Una vez lo añadas, pulsa el botón "Get Message". Su función Ajax sustituirá el texto "The message will go here" con la salida JSON en bruto de la API de fotos de gato de Free Code Camp." ] </ins> }, { "id": "bb000000000000000000003", <del> "title":  "Convert JSON Data to HTML", </del> <ins> "title": "Convert JSON Data to HTML", </ins> "description": [ "Now that we're getting data from a JSON API, let's display it in our HTML.", "We can use the <code>.forEach()</code> method to loop through our data and modify our HTML elements.",
"  </div>", "  <div class = "row text-center">", "    <div class = "col-xs-12 well message">", <del> "      The message will go here","   </div>", </del> <ins> "      The message will go here", "   </div>", </ins> "  </div>", "  <div class = "row text-center">", "    <div class = "col-xs-12">",
"</div>" ], "challengeType": 0, <del> "type": "waypoint" </del> <ins> "type": "waypoint", "nameEs": "Convierte datos JSON a datos HTML", "descriptionEs": [ "Ahora que estamos obteniendo datos de una API JSON, mostremóslos en nuestro HTML.", "Podemos usar el método <code>.forEach()</code> para recorrer nuestros datos y modificar nuestros elementos HTML.", "En primer lugar, vamos a declarar una variable llamada <code>html</code> con <code>var html = "";</code>.", "Después, iteremos a traveś de nuestro JSON, añadiendo más HTML a esa variable. Cuando se termina el ciclo, vamos a presentarla. ", "Aquí está el código que hace esto:", "<code>json.forEach(function(val) {</code>", "<code>&nbsp;&nbsp;var keys = Object.keys(val);</code>", "<code>&nbsp;&nbsp;html += "&lt;div class = 'cat'&gt;";</code>", "<code>&nbsp;&nbsp;keys.forEach(function(key) {</code>", "<code>&nbsp;&nbsp;&nbsp;&nbsp;html += "&lt;b&gt;" + key + "&lt;/b&gt;: " + val[key] + "&lt;br&gt;";</code>", "<code>&nbsp;&nbsp;});</code>", "<code>&nbsp;&nbsp;html += "&lt;/div&gt;&lt;br&gt;";</code>", "<code>});</code>" ] </ins> }, { "id": "bb000000000000000000004", <del> "title":  "Render Images from Data Sources", </del> <ins> "title": "Render Images from Data Sources", </ins> "description": [ "In the JSON that we receive data from Free Code Camp's Cat Photo API.", "We've seen from the last two lessons that each object in our JSON array contains an <code>imageLink</code> key with a value that is the url of a cat's image.",
"</div>" ], "challengeType": 0, <del> "type": "waypoint" </del> <ins> "type": "waypoint", "nameEs": "Presentar imágenes de fuentes de datos", "descriptionEs": [ "Tanto en el JSON que recibimos de la API de fotos de gato de Free Code Camp, como en ", "lo que hemos visto en las dos últimas lecciones, cada objeto en nuestro vector JSON contiene una llave <code>imageLink</code> con un valor que corresponde a la url de la imagen de un gato.", "Cuando estamos recorriendo estos objetos, usemos esta propiedad <code>imageLink</code> para visualizar la imagen en un elemento <code>img</code>.", "Aquí está el código que hace esto:", "<code>&nbsp;&nbsp;html += "&lt;img src = '" + val.imageLink + "'&gt;";</code>" ] </ins> }, { "id": "bb000000000000000000005", <del> "title":  "Prefilter JSON", </del> <ins> "title": "Prefilter JSON", </ins> "description": [ "If we don't want to render every cat photo we get from our Free Code Camp's Cat Photo JSON API, we can pre-filter the json before we loop through it.", "Let's filter out the cat who's "id" key has a value of 1.",
"</div>" ], "challengeType": 0, <del> "type": "waypoint" </del> <ins> "type": "waypoint", "nameEs": "Pre-filtra JSON", "descriptionEs": [ "Si no queremos presentar cada foto de gato que obtengamos de la API JSON de fotos de gato de Free Code Camp, podemos pre-filtrar el json antes de iterar a través de este.", "Vamos a filtrar el gato cuya llave "id" tiene un valor de 1.", "Aquí está el código para hacer esto:", "<code>json = json.filter(function(val) {</code>", "<code>&nbsp;&nbsp;return(val.id !== 1);</code>", "<code>});</code>" ] </ins> }, { "id": "bb000000000000000000006", <del> "title":  "Get Geo-location Data", </del> <ins> "title": "Get Geo-location Data", </ins> "description": [ "Another cool thing we can do is access our user's current location. Every browser has a built in navigator that can give us this information.", "The navigator will get our user's current longitude and latitude.",
"</div>" ], "challengeType": 0, <del> "type": "waypoint" </del> <ins> "type": "waypoint", "nameEs": "Recibir datos de Geo-localización", "descriptionEs": [ "Otra cosa interesante que podemos hacer es acceder a la ubicación actual de nuestros usuarios. Todos los navegadores han incorporado un geo-localizador que nos puede dar esta información. ", "El navegador puede obtener la longitud y latitud actual de nuestros usuarios.", "Como usuario verás un mensaje para permitir o evitar que el sitio conozca tu ubicación actual. El desafío se puede completar de cualquier manera, siempre y cuando el código sea correcto. ", "Si lo permites, verás que el texto en el teléfono de la derecha cambiará con tu latitud y longitud", "Aquí hay un código que hace esto:", "<code>if (navigator.geolocation) {</code>", "<code>&nbsp;&nbsp;navigator.geolocation.getCurrentPosition(function(position) {</code>", "<code>&nbsp;&nbsp;&nbsp;&nbsp;$("#data").html("latitude: " + position.coords.latitude + "&lt;br&gt;longitude: " + position.coords.longitude);</code>", "<code>&nbsp;&nbsp;});</code>", "<code>}</code>" ] </ins> } ] }
"assert(telephoneCheck("(555)555-5555") === true, 'message: <code>telephoneCheck("(555)555-5555")</code> should return true.');", "assert(telephoneCheck("1(555)555-5555") === true, 'message: <code>telephoneCheck("1(555)555-5555")</code> should return true.');", "assert(telephoneCheck("1 555 555 5555") === true, 'message: <code>telephoneCheck("1 555 555 5555")</code> should return true.');", <del> "assert(telephoneCheck("555-555-5555") === true, 'message: <code>telephoneCheck("555-555-5555")</code> should return true.');", </del> "assert(telephoneCheck("1 456 789 4444") === true, 'message: <code>telephoneCheck("1 456 789 4444")</code> should return true.');", "assert(telephoneCheck("123**&!!asdf#") === false, 'message: <code>telephoneCheck("123**&!!asdf#")</code> should return false.');", "assert(telephoneCheck("55555555") === false, 'message: <code>telephoneCheck("55555555")</code> should return false.');",
"assert(telephoneCheck("(275)76227382") === false, 'message: <code>telephoneCheck("(275)76227382")</code> should return false.');", "assert(telephoneCheck("2(757)6227382") === false, 'message: <code>telephoneCheck("2(757)6227382")</code> should return false.');", "assert(telephoneCheck("2(757)622-7382") === false, 'message: <code>telephoneCheck("2(757)622-7382")</code> should return false.');", <del> "assert(telephoneCheck("555)-555-5555") === false, 'message: <code>telephoneCheck("555)555-5555")</code> should return false.');", </del> <ins> "assert(telephoneCheck("555)-555-5555") === false, 'message: <code>telephoneCheck("555)-555-5555")</code> should return false.');", </ins> "assert(telephoneCheck("(555-555-5555") === false, 'message: <code>telephoneCheck("(555-555-5555")</code> should return false.');" ], "challengeSeed": [
"description": [ "In Javascript, <code>String</code> values are <dfn>immutable</dfn>, which means that they cannot be altered once created.", "For example, the following code:", <del> "<blockquote><code>var myStr = "Bob";<br>myStr[0] = "J";</code></blockquote>", </del> <ins> "<blockquote>var myStr = "Bob";<br>myStr[0] = "J";</blockquote>", </ins> "cannot change the value of <code>myStr</code> to "Job", because the contents of <code>myStr</code> cannot be altered. Note that this does <em>not</em> mean that <code>myStr</code> cannot be changed, just that the individual characters of a <dfn>string literal</dfn> cannot be changed. The only way to change <code>myStr</code> would be to assign it with a new string, like this:", <del> "<blockquote><code>var myStr = "Bob";<br>myStr = "Job";</code></blockquote>", </del> <ins> "<blockquote>var myStr = "Bob";<br>myStr = "Job";</blockquote>", </ins> "<h4>Instructions</h4>", "Correct the assignment to <code>myStr</code> to achieve the desired effect." ],
"description": [ "One way to think of a <dfn>multi-dimensional</dfn> array, is as an <em>array of arrays</em>. When you use brackets to access your array, the first set of bracket refers to the entries in the outer-most array, and each subsequent level of brackets refers to the next level of entries inside.", "<strong>Example</strong>", <del> "<blockquote>var arr = [<br>    [1,2,3],<br>    [4,5,6],<br>    [7,8,9],<br>    [[10,11,12], 13, 14]<br>];<br><code>arr[0]; // equals [1,2,3]</code><br><code>arr[1][2]; // equals 6</code><br><code>arr[3][0][1]; // equals 11</code></blockquote>", </del> <ins> "<blockquote>var arr = [<br>    [1,2,3],<br>    [4,5,6],<br>    [7,8,9],<br>    [[10,11,12], 13, 14]<br>];<br>arr[0]; // equals [1,2,3]<br>arr[1][2]; // equals 6<br>arr[3][0][1]; // equals 11</blockquote>", </ins> "<h4>Instructions</h4>", "Read from <code>myArray</code> using bracket notation so that myData is equal to <code>8</code>" ],
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "nameEs": "JavaScript Lingo: MDN y Documentación", "descriptionEs": [ "Esta es una introducción básica a MDN y el concepto de la documentación.", "MDN, Mozilla Developer Network, es una fantástica colaboración de fuentes abiertas que documenta no sólo JavaScript, sino muchos otros lenguajes y temas. Si no has oído hablar de ellos, deberías darles un vistazo ahora. Personalmente obtengo mucha información de developer.mozilla.org/en-US/docs/Web/JavaScript ", "Cuando digo documentación, estoy hablando acerca de la información que se proporciona sobre el producto a sus usuarios. La documentación de MDN no necesariamente está escrita por la gente detrás de JS. Brendan Eich creó JS en 1995, pero hoy en día el proyecto continúa creciendo gracias a un esfuerzo comunitario. ", "A medida que continúes aprendiendo JavaScript, jQuery, y prácticamente cualquier otro lenguaje o servicio para desarrollo o programación, la documentación será tu amiga.", "Cuanto más rápido te sientas cómodo leyendo y referenciando documentación, más rápido crecerás como desarrollador.", "Estos vídeos no van a enseñarte JavaScript - te presentan términos y conceptos que serán valiosos a medida que continúes practicando y aprendiendo." ] </ins> }, { "id": "56b15f15632298c12f31518d",
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "nameEs": "JavaScript Lingo: Tipos de valores", "descriptionEs": [ "Aprende sobre los tres tipos más básicos de valores: Booleanos, cadenas y números", "Un booleano es un valor <code>true</code> (verdadero) o <code>false</code> (falso). Estas palabras son especiales y reservadas. No puedes nombrar a una variable como "true", porque esa palabra es ya universal como un valor lógico (así como lo es "false"). ", "Una cadena es un conjunto de caracteres que se establecen entre apóstrofes (') o entre comillas ("). Una cadena puede ser "true", siempre y cuando sea con comillas o con apóstrofes. ", "Los números se explican por sí mismos - un número es un valor que se compone sólo de dígitos, aunque también puede contener un decimal o un signo negativo." ] </ins> }, { "id": "56b15f15632298c12f31518b",
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "nameEs": "JavaScript Lingo: Variables y capitalizaciónCamello", "descriptionEs": [ "Vamos a cubrir lo que constituye una variable, y el razonamiento detrás de la capitalizaciónCamello (<em>camelCase</em>).", "Una variable, también conocida como una 'var', es el nombre o el espacio para un booleano, una cadena, un número, u otra pieza de información estática.", "Puedes usar las Herramientas de desarrollo de Google para inspeccionar la página principal de FreeCodeCamp y buscar algunas variables.", "Tu 'declaras' variables por primera vez con <code>var</code> en frente de ella, pero después puedes referenciarla más adelante en tu programa.", "capitalizaciónCamello es una forma en la que juntas varias palabras y aún así las mantienes legibles. La primera letra de la primera palabra va en minúsculas al igual que el resto de la primera palabra, pero la primera letra de cada palabra que siga se escribe en mayúsculas. No hay espacios. Ejemplos: brianaAmaSusMascotas, laMejorComidaEsElQueso, y valeLaPenaAprenderProgramacion.", "Al asignar un nombre de variable, usa capitalizaciónCamello. Además, trata de mantener los nombres descriptivos y cortos para que los demás (¡e incluso tu!) puedan entender a lo que se refiere la variable simplemente por el nombre." ] </ins> }, { "id": "56b15f15632298c12f31518a",
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "nameEs": "JavaScript Lingo: Vectores y objetos", "descriptionEs": [ "Si desea almacenar más de una pieza de información en una variable, puedes hacerlo mediante la creación de un vector o de un objeto.", "** Exención de responsabilidad: Los objetos de JS no son exactamente lo mismo que los objetos en otros lenguajes. Vamos a discutir aquí objetos con respecto a JS. ", "Los vectores son conjuntos de valores entre [corchetes]. Los valores se separan con comas. Cada valor puede ser booleano, cadena, número, o incluso otro vector. A esto último le llamamos vector anidado. A un vector compuesto por vectores de la misma longitud le llamamos matriz. ", "Los objetos son un tipo de datos que pueden verse o comportarse como un vector, en la medida que se trata de más valores almacenados en una variable de una manera organizada. Oirás que un objeto se puede representar en JSON, y con frecuencia cuando haces llamadas a la API de algunos sitios (para obtener información que necesitas mostrar en tu propia página) está será devuelta en JSON. ", "Un ejemplo de la notación de objetos es:  <code>var obj = { 'nombre': 'Briana', 'comida': 'queso', 'perro': 'Maurice'};</code>", "Fíjate que un objeto se encierra entre llaves { ... }, que los diferentes atributos se separan por comas, que cada atributo consta de una palabra llave y de un valor. Por ejemplo son llaves 'nombre', 'comida' y 'perro' y sus respectivos valores son 'Briana', 'queso' y 'Maurice'. En este ejmplo todos los valores fueron cadenas, aunque también son válidos booleanos, números y otros tipos de datos." ] </ins> }, { "id": "56b15f15632298c12f315189",
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "nameEs": "JavaScript Lingo: Encontrando e indexando valores en vectores", "descriptionEs": [ "Hay muchas razones por las que puedes necesitar acceder a una determinada pieza de información al interior de un conjunto más amplio, lo cual haces referenciando su índice.", "No vamos a entrar en la sintaxis, pero debes saber que el primer elemento en un vector tiene en realidad el índice 0.", "Esto también aplica para cadenas y objetos. Todos estos índices comienzan en 0, por lo que si en tu programa usas <code>miVector[2]</code>, realmente vas a obtener la tercera pieza de información del vector <code>miVector</code>." ] </ins> }, { "id": "56b15f15632298c12f315188",
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "nameEs": "JavaScript Lingo: Manipulación de los datos", "descriptionEs": [ "Métodos y funciones son formas con las que puedes modificar variables u otros conjuntos de información.", "Los métodos están integrados en JavaScript, y te familiarizarás con estos cuando realices los desafíos sobre algoritmos.", "Me gustaría sugerirte dar un vistazo a MDN (Mozilla Developer Network que discutimos en el primer video) para que te familiarices con la cantidad y el potencial general de los métodos que existen. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index", "Los ejemplos incluyen <code>.split (' ')</code>, que convertirá una cadena en un vector y puede hacerlo de muchas maneras diferentes. Los métodos son de gran alcance - muchas veces cuando quieres que tu programa haga algo, ya habrá un método para eso.", "Las funciones, al igual que las variables, son algo que tu defines y creas.", "Durante tu práctica con algoritmos en FreeCodeCamp, vas a crear funciones que reciben una determinada pieza de información y la manipulan de la forma que elijas.", "Vas a estar más familiarizado con la sintaxis, pero por ahora, sólo recuerda que con los métodos y funciones puedes hacer casi cualquier cosa con tu código." ] </ins> }, { "id": "56b15f15632298c12f315187",
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "nameEs": "JavaScript Lingo: Matemáticas", "descriptionEs": [ "Hay un objeto estático de nombre 'Math' en JS con muchos propiedades y métodos incluidos.", "Vas a querer investigar más de este cuando manipules números. Consulta la documentación de MDN antes de escribir tus propias funciones, pues ya podrían estar definidas allí. ", "Los ejemplos incluyen <code>Math.random()</code> que devolverá un número aleatorio en un rango y <code>Math.round()</code> que redondeará el número decimal que reciba al entero más cercano.", "Yo utilicé <code>Math.random()</code> cuando construí el generador de citas aleatorias como proyecto de desarrollo de interfaces en FreeCodeCamp.", "Cuando trabajes con números, también debes estar consciente de que JS tiene un atributo interesante llamado 'formato de coma flotante'.", "Dependiendo de la cantidad de números, su tamaño y la cantidad de cálculos, JS puede devolver un número que es inexacto en 0,00004.", "Hay maneras de evitar esto, y en general no plantean problemas, pero es algo que debes tener en cuenta si te encuentras con algunos problemas que parecen no tienen sentido." ] </ins> }, { "id": "56b15f15632298c12f315186",
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "nameEs": "JavaScript Lingo: Ciclos", "descriptionEs": [ "Si hay un conjunto de valores (vamos a utilizar un vector en este ejemplo, pero no tiene que ser así) y deseas realizar la misma operación a cada valor del conjunto, puedes usar algo llamado ciclo. ", "Los ciclos tienen una sintaxis compleja a la que inicialmente es difícil acostumbrarse, pero una vez que la entiendas, son de gran utilidad. Yo usé ciclos en muchas de mis soluciones. ", "No es necesario que entiendas todo aquí - sólo que sepas que existen ciclos cuando necesitas recorrer un conjunto de datos y que pueden reducir la cantidad de código que debes escribir." ] </ins> }, { "id": "56b15f15632298c12f315185",
] ], "type": "hike", <del> "challengeType": 6 </del> <ins> "challengeType": 6, "id": "56b15f15632298c12f315185", "nameEs": "JavaScript Lingo: expresiones regulares (RegExp)", "descriptionEs": [ "Las RegExp no siguen el formato del resto de JS, y pueden requerir una curva de aprendizaje.", "Las epresiones regulares (abreviado <em>RegExp</em>) también pueden ser una herramienta muy útil y eficiente.", "Usando RegExp, puedes hacer coincidir, reemplazar, buscar y dividir una cadena, uno de los tipos más difíciles de manipular.", "Al igual que con todos los otros videos, no vamos a entrar en detalles, pero quiero mostrar algunos ejemplos donde las RegExp son útiles.", "Si quisieras crear una página de registro que verifique las contraseñas para que contengan al menos un número y una letra mayúscula, puedes usar expresiones regulares.", "Si quieres asegurarte de que las fechas introducidas en una página sean todas fechas válidas en el futuro, puedes usar RegExp.", "Si bien hay infinitas maneras de utilizar RegExp, muchas de estas incluyen validaciones o ediciones automáticas de información." ] </ins> } ] }
"name": "Sorted Union", "difficulty": "2.07", "description": [ <del> "Write a function that takes two or more arrays and returns a new array of unique values sorted in order." </del> <ins> "Write a function that takes two or more arrays and returns a new array of unique values in the order of the original provided arrays.", "The unique numbers should be sorted by their original order, but the final array should not be sorted in numerical order.", "Check the assertion tests for examples." </ins> ], "challengeSeed": "function unite(arr) {n  return arr;rn}nnunite([1, 2, 3], [5, 2, 1, 4], [2, 1]);", "tests": [
"assert.deepEqual(inventory([[0, 'Bowling Ball'], [0, 'Dirty Sock'], [0, 'Hair pin'], [0, 'Microphone']], [[1, 'Hair Pin'], [1, 'Half-Eaten Apple'], [1, 'Bowling Ball'], [1, 'Toothpaste']]), [[1, 'Bowling Ball'], [1, 'Dirty Sock'], [1, 'Hair pin'], [1, 'Half-Eaten Apple'], [1, 'Microphone'], [1, 'Toothpaste']]);" ] } <del> ] </del>  No newline at end of file <ins> ] </ins>
var isCompletedDate =  Math.round(+new Date() / 1000); var bonfireHash = req.body.bonfireInfo.bonfireHash; var isSolution = req.body.bonfireInfo.solution; <del> // TODO debug(isCompletedWith, 'Is completed with'); </del> if (isCompletedWith) { var paired = User.find({"profile.username": isCompletedWith}).limit(1);
}) var index = req.user.uncompletedBonfires.indexOf(bonfireHash); if (index > -1) { req.user.uncompletedBonfires.splice(index,1) } req.user.save(function(err, user) { if (err) { throw err; } if (user) { <del> res.redirect('/bonfires'); </del> <ins> debug('Saving user'); res.send(true) </ins> } }); } }); // Unique Check API route
return res.redirect('bonfires/meet-bonfire'); } var currentTime = parseInt(+new Date() / 1000); <del> if (currentTime - req.user.lastContentSync > 86400) { </del> <ins> if (currentTime - req.user.lastContentSync > 10) { </ins> req.user.lastContentSync = currentTime; var completed = req.user.completedBonfires.map(function (elem) { return elem._id;
$('#complete-bonfire-dialog').modal('show'); // Only post to server if there is an authenticated user if ($('.signup-btn-nav').length < 1) { <del> $.ajax({ type: 'POST', data: { </del> <ins> $.post( '/completed-bonfire', { </ins> bonfireInfo: { completedWith : didCompleteWith, solution: bonfireSolution, bonfireHash: thisBonfireHash } }, <del> url: '/completed-bonfire/' }); </del> <ins> function(res) { if (res) { window.location.href = 'http://localhost:3001/bonfires' } }) </ins> } } <ins> $('.next-bonfire-button').on('click', function() { var bonfireSolution = myCodeMirror.getValue(); var thisBonfireHash = passedBonfireHash || null; var didCompleteWith = $('#completed-with').val() || null; completedBonfire(didCompleteWith, bonfireSolution, thisBonfireHash); }); </ins> $('.all-challenges').on('click', function() { $('#all-challenges-dialog').modal('show'); });
}); <del> $('.next-bonfire-button').on('click', function() { var bonfireSolution = myCodeMirror.getValue(); var thisBonfireHash = passedBonfireHash || null; var didCompleteWith = $('#completed-with').val() || null; completedBonfire(didCompleteWith, bonfireSolution, thisBonfireHash); window.setTimeout(function() { // TODO window.location = '/bonfires'; }, 100); }); </del> // Bonfire instructions functions $('#more-info').on('click', function() {